From 99f24c05c29b2b9bb5a9e5474dd3579713e29ba1 Mon Sep 17 00:00:00 2001 From: Tixxx Date: Thu, 22 Apr 2021 19:46:56 -0700 Subject: [PATCH 1/7] 6d tensor support in coord lib depth-to-space kernel bug fixes --- lib/backends/webgl/glsl-coordinate-lib.ts | 97 ++++++++++++++++++++++- lib/backends/webgl/ops/depth-to-space.ts | 68 ++++++++++++++++ lib/backends/webgl/program-manager.ts | 24 +++--- lib/ops/depth-to-space.ts | 53 +++++++++++++ 4 files changed, 232 insertions(+), 10 deletions(-) create mode 100644 lib/backends/webgl/ops/depth-to-space.ts create mode 100644 lib/ops/depth-to-space.ts diff --git a/lib/backends/webgl/glsl-coordinate-lib.ts b/lib/backends/webgl/glsl-coordinate-lib.ts index f971e0bf..09c25abe 100644 --- a/lib/backends/webgl/glsl-coordinate-lib.ts +++ b/lib/backends/webgl/glsl-coordinate-lib.ts @@ -154,6 +154,10 @@ export class CoordsGlslLib extends GlslLib { result[funcName] = this.getOutputUnpacked5DCoords( outShape as [number, number, number, number, number], outTexShape as [number, number]); break; + case 6: + result[funcName] = this.getOutputUnpacked6DCoords( + outShape as [number, number, number, number, number, number], outTexShape as [number, number]); + break; default: throw new Error(`Unsupported output dimensionality: ${outShape.length}`); } @@ -483,6 +487,49 @@ export class CoordsGlslLib extends GlslLib { return new GlslLibRoutine(source); } + /** + * Unpacked 6D output coordinates. + */ + protected getOutputUnpacked6DCoords(shape: [number, number, number, number, number, number], texShape: [ + number, number + ]): GlslLibRoutine { + let source = ''; + const rank = shape.length; + + let strides = null; + if (rank < 2) { + strides = []; + } + + strides = new Array(rank - 1); + strides[rank - 2] = shape[rank - 1]; + for (let i = rank - 3; i >= 0; --i) { + strides[i] = strides[i + 1] * shape[i + 1]; + } + const coordsToCompute = ['r', 'c', 'd', 'd2', 'd3', 'd4']; + const coordsFromIndexSnippet = + strides + .map((stride, i) => { + const line1 = `int ${coordsToCompute[i]} = index / ${stride}`; + const line2 = i === strides.length - 1 ? + `int ${coordsToCompute[i + 1]} = index - ${coordsToCompute[i]} * ${stride}` : + `index -= ${coordsToCompute[i]} * ${stride}`; + return `${line1}; ${line2};`; + }) + .join(''); + + source = ` + ivec6 getOutputCoords() { + ivec2 resTexRC = ivec2(TexCoords.yx * + vec2(${texShape[0]}, ${texShape[1]})); + int index = resTexRC.y * ${texShape[1]} + resTexRC.x; + ${coordsFromIndexSnippet} + return ivec6(r, c, d, d2, d3, d4); + } + `; + return new GlslLibRoutine(source); + } + /** * Generates code for common UV coords computation utility functions. */ @@ -730,6 +777,8 @@ export class CoordsGlslLib extends GlslLib { return this.getUnpackedSampler4D(funcName, name, inputLayout); case 5: return this.getUnpackedSampler5D(funcName, name, inputLayout); + case 6: + return this.getUnpackedSampler6D(funcName, name, inputLayout); default: // TODO support more dimensionalities throw new Error(`Unsupported dimension ${shape.length}-D`); @@ -1120,7 +1169,7 @@ export class CoordsGlslLib extends GlslLib { return ${funcName}(${getSqueezedParams(params, keptDims)}); } `; - return new GlslLibRoutine(source, ['coordinates.sampleTexture']); + return new GlslLibRoutine(source, ['coordinates.sampleTexture', 'coordinates.uvFromFlat']); } const texNumR = inputLayout.width; @@ -1137,6 +1186,52 @@ export class CoordsGlslLib extends GlslLib { source, ['coordinates.uvFromFlat', 'coordinates.sampleTexture', 'coordinates.coordsToOffset']); } + /** + * Unpacked 6D snippet. + */ + protected getUnpackedSampler6D(funcName: string, name: string, inputLayout: TextureLayout): GlslLibRoutine { + const shape = inputLayout.unpackedShape; + const stride4 = shape[5]; + const stride3 = shape[4] * stride4; + const stride2 = shape[3] * stride3; + const stride1 = shape[2] * stride2; + const stride0 = shape[1] * stride1; + + const {newShape, keptDims} = squeezeShape(shape as number[]); + if (newShape.length < shape.length) { + const newInputShape = squeezeInputShape(shape, newShape); + const params = ['row', 'col', 'depth', 'depth2', 'depth3', 'depth4']; + // Deep copy of input texture layout. + const newInputLayout: TextureLayout = JSON.parse(JSON.stringify(inputLayout)); + newInputLayout.unpackedShape = newInputShape; + + const source = ` + ${this.getUnpackedSamplerFromInput(funcName, name, newInputLayout).routineBody} + float ${funcName}(int row, int col, int depth, + int depth2, int depth3, int depth4) { + return ${funcName}(${getSqueezedParams(params, keptDims)}); + } + `; + return new GlslLibRoutine(source, ['coordinates.sampleTexture', 'coordinates.uvFromFlat']); + } + + const texNumR = inputLayout.width; + const texNumC = inputLayout.height; + const source = ` + float ${funcName}(int row, int col, int depth, + int depth2, int depth3, int depth4) { + + int index = row * ${stride0} + col * ${stride1} + depth * ${stride2} + + depth2 * ${stride3} + depth3 * ${stride4} + depth4; + vec2 uv = uvFromFlat(${texNumR}, ${texNumC}, index); + return sampleTexture(${name}, uv); + + } + `; + return new GlslLibRoutine( + source, ['coordinates.uvFromFlat', 'coordinates.sampleTexture', 'coordinates.coordsToOffset']); + } + /** * This is the main function to map from the given texture coordiantes (s,t) * to logical indices for the output diff --git a/lib/backends/webgl/ops/depth-to-space.ts b/lib/backends/webgl/ops/depth-to-space.ts new file mode 100644 index 00000000..18ecfa3b --- /dev/null +++ b/lib/backends/webgl/ops/depth-to-space.ts @@ -0,0 +1,68 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +import {DepthToSpace} from '../../../ops/depth-to-space'; +import {Tensor} from '../../../tensor'; +import {getGlsl} from '../glsl-source'; +import {WebGLInferenceHandler} from '../inference-handler'; +import {ProgramInfo, RunData} from '../types'; + +export class WebGLDepthToSpace extends DepthToSpace { + run(inferenceHandler: WebGLInferenceHandler, inputs: Tensor[]): Tensor[] { + return inferenceHandler.run(this, inputs); + } + createProgramInfo(handler: WebGLInferenceHandler, inputs: Tensor[]): ProgramInfo { + const inputLayout = handler.getOrCreateTextureLayout(inputs[0]); + const outputShape = this.getOutShape(inputs[0]); + const glsl = getGlsl(handler.session.backend.glContext.version); + const shaderSource = ` + void main() { + ivec4 coords = getOutputCoords(); + int b = coords[0]; + int d = coords[1]; + int h = coords[2]; + int w = coords[3]; + + int in_h = h / ${this.blocksize}; + int offset_h = imod(h, ${this.blocksize}); + int in_w = w / ${this.blocksize}; + int offset_w = imod(w, ${this.blocksize}); + int offset_d = (offset_h * ${this.blocksize} + offset_w) * + ${outputShape[1]}; + int in_d = d + offset_d; + + float result = getX(b, in_d, in_h, in_w); + ${glsl.output} = result; + } + `; + return { + inputLayouts: [inputLayout], + outputLayout: handler.createTextureLayoutFromShape(outputShape), + samplers: ['X'], + shaderSource, + hasMain: true + }; + } + protected getOutShape(input: Tensor): number[] { + const batchSize = input.dims[0]; + const inputDepth = input.dims[1]; + const inputHeight = input.dims[2]; + const inputWidth = input.dims[3]; + if (inputDepth % (this.blocksizeSqr) !== 0) { + throw new Error('Input depth must be divisible by squared blocksize.'); + } + const outputDepth = inputDepth / this.blocksizeSqr; + const outputHeight = inputHeight * this.blocksize; + const outputWidth = inputWidth * this.blocksize; + return [batchSize, outputDepth, outputHeight, outputWidth]; + } + + createRunData(handler: WebGLInferenceHandler, programInfo: ProgramInfo, inputs: Tensor[]): RunData { + const inputTDs = inputs.map((t, i) => handler.getOrCreateTextureData(t, programInfo.inputLayouts[i])); + return { + inputTextureDatas: inputTDs, + outputTextureData: handler.createTextureDataFromLayout(programInfo.outputLayout, inputTDs[0].tensor.type), + uniformData: {} + }; + } +} diff --git a/lib/backends/webgl/program-manager.ts b/lib/backends/webgl/program-manager.ts index 36cedbf8..c708e74e 100644 --- a/lib/backends/webgl/program-manager.ts +++ b/lib/backends/webgl/program-manager.ts @@ -69,15 +69,21 @@ export class ProgramManager { return this.profiler.event('backend', 'ProgramManager.build', () => { const preprocessor = new GlslPreprocessor(this.glContext, programInfo); const fragScript = preprocessor.preprocess(); - const program = this.compile(fragScript); - const artifact = { - programInfo, - program, - uniformLocations: this.getUniformLocations( - program, preprocessor.context.programInfo.samplers, preprocessor.context.programInfo.variables), - attribLocations: this.getAttribLocations(program) - }; - return artifact; + try { + const program = this.compile(fragScript); + const artifact = { + programInfo, + program, + uniformLocations: this.getUniformLocations( + program, preprocessor.context.programInfo.samplers, preprocessor.context.programInfo.variables), + attribLocations: this.getAttribLocations(program) + }; + return artifact; + + } catch (e) { + console.log(fragScript); + throw e; + } }); } protected doDraw(artifact: Artifact, runData: RunData): void { diff --git a/lib/ops/depth-to-space.ts b/lib/ops/depth-to-space.ts new file mode 100644 index 00000000..0d73f3f7 --- /dev/null +++ b/lib/ops/depth-to-space.ts @@ -0,0 +1,53 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +import {Attribute} from '../attribute'; +import {InferenceHandler} from '../backend'; +import {Operator} from '../operators'; +import {Tensor} from '../tensor'; + +export abstract class DepthToSpace implements Operator { + constructor(protected opset: number) {} + + abstract run(inferenceHandler: InferenceHandler, inputs: Tensor[]): Tensor[]|Promise; + + initialize(attributes: Attribute): void { + // processing node attributes + this.blocksize = attributes.getInt('blocksize'); + if (this.blocksize < 1) { + throw new Error(`blocksize must be >= 1, but got : ${this.blocksize} for DepthToSpace`); + } + this.blocksizeSqr = this.blocksize * this.blocksize; + this.mode = attributes.getString('mode', 'DCR'); + if (DepthToSpace.supportedModes.indexOf(this.mode) < 0) { + throw new Error(`unrecognized mode: ${this.mode} for DepthToSpace`); + } + } + + checkInputs(inputs: Tensor[]): boolean { + if (!inputs || inputs.length !== 1) { + return false; + } + + return this.checkInputTypes(inputs); + } + + protected checkInputTypes(inputs: Tensor[]): boolean { + const inputType = inputs[0].type; + const inputDimensionality = inputs[0].dims.length; + + // Input has to be a 4-D tensor + // TODO: Support string depth-to-space. + if (inputType === 'string' || inputDimensionality !== 4) { + return false; + } + + return true; + } + + protected mode: string; + protected blocksize: number; + protected blocksizeSqr: number; + + private static readonly supportedModes = ['DCR', 'CRD']; +} From 7298e791593a130f3c6ab0c1afdca1bad634c95c Mon Sep 17 00:00:00 2001 From: Tixxx Date: Mon, 26 Apr 2021 16:01:31 -0700 Subject: [PATCH 2/7] added tests for 6d and depthtospace --- lib/backends/webgl/glsl-coordinate-lib.ts | 9 +- lib/backends/webgl/ops/depth-to-space.ts | 6 +- lib/ops/depth-to-space.ts | 2 +- .../backends/webgl/test_depth_to_space.ts | 163 ++++++++++++++++++ .../backends/webgl/test_pack_unpack.ts | 34 ++++ test/unittests/backends/webgl/test_utils.ts | 10 ++ test/unittests/index.ts | 1 + 7 files changed, 216 insertions(+), 9 deletions(-) create mode 100644 test/unittests/backends/webgl/test_depth_to_space.ts diff --git a/lib/backends/webgl/glsl-coordinate-lib.ts b/lib/backends/webgl/glsl-coordinate-lib.ts index 09c25abe..ff20f0c3 100644 --- a/lib/backends/webgl/glsl-coordinate-lib.ts +++ b/lib/backends/webgl/glsl-coordinate-lib.ts @@ -477,7 +477,7 @@ export class CoordsGlslLib extends GlslLib { source = ` ivec5 getOutputCoords() { - ivec2 resTexRC = ivec2(TexCoords.yx * + ivec2 resTexRC = ivec2(TexCoords.xy * vec2(${texShape[0]}, ${texShape[1]})); int index = resTexRC.y * ${texShape[1]} + resTexRC.x; ${coordsFromIndexSnippet} @@ -520,9 +520,9 @@ export class CoordsGlslLib extends GlslLib { source = ` ivec6 getOutputCoords() { - ivec2 resTexRC = ivec2(TexCoords.yx * + ivec2 resTexRC = ivec2(TexCoords.xy * vec2(${texShape[0]}, ${texShape[1]})); - int index = resTexRC.y * ${texShape[1]} + resTexRC.x; + int index = resTexRC.y * ${texShape[0]} + resTexRC.x; ${coordsFromIndexSnippet} return ivec6(r, c, d, d2, d3, d4); } @@ -1141,8 +1141,7 @@ export class CoordsGlslLib extends GlslLib { return sampleTexture(${name}, uv); } `; - return new GlslLibRoutine( - source, ['coordinates.uvFromFlat', 'coordinates.sampleTexture', 'coordinates.coordsToOffset']); + return new GlslLibRoutine(source, ['coordinates.uvFromFlat', 'coordinates.sampleTexture']); } /** diff --git a/lib/backends/webgl/ops/depth-to-space.ts b/lib/backends/webgl/ops/depth-to-space.ts index 18ecfa3b..9391a9ae 100644 --- a/lib/backends/webgl/ops/depth-to-space.ts +++ b/lib/backends/webgl/ops/depth-to-space.ts @@ -29,10 +29,10 @@ export class WebGLDepthToSpace extends DepthToSpace { int offset_w = imod(w, ${this.blocksize}); int offset_d = (offset_h * ${this.blocksize} + offset_w) * ${outputShape[1]}; - int in_d = d + offset_d; + int in_depth = d + offset_d; - float result = getX(b, in_d, in_h, in_w); - ${glsl.output} = result; + float result = getX(b, in_depth, in_h, in_w); + ${glsl.output} = vec4(result, 0, 0, 0); } `; return { diff --git a/lib/ops/depth-to-space.ts b/lib/ops/depth-to-space.ts index 0d73f3f7..ac248069 100644 --- a/lib/ops/depth-to-space.ts +++ b/lib/ops/depth-to-space.ts @@ -7,7 +7,7 @@ import {Operator} from '../operators'; import {Tensor} from '../tensor'; export abstract class DepthToSpace implements Operator { - constructor(protected opset: number) {} + constructor() {} abstract run(inferenceHandler: InferenceHandler, inputs: Tensor[]): Tensor[]|Promise; diff --git a/test/unittests/backends/webgl/test_depth_to_space.ts b/test/unittests/backends/webgl/test_depth_to_space.ts new file mode 100644 index 00000000..b5e2c483 --- /dev/null +++ b/test/unittests/backends/webgl/test_depth_to_space.ts @@ -0,0 +1,163 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. +import {expect} from 'chai'; + +import {Attribute} from '../../../../lib/attribute'; +import {Backend, InferenceHandler, SessionHandler} from '../../../../lib/backend'; +import {WebGLBackend} from '../../../../lib/backends/backend-webgl'; +import {WebGLInferenceHandler} from '../../../../lib/backends/webgl/inference-handler'; +import {WebGLDepthToSpace} from '../../../../lib/backends/webgl/ops/depth-to-space'; +import {Profiler} from '../../../../lib/instrument'; +import {Tensor} from '../../../../lib/tensor'; +import {ShapeUtil} from '../../../../lib/util'; + +import {createAscendingArray} from './test_utils'; +import {createTextureFromArray, generateArrayForUnpackedTexture} from './test_utils'; + +let backend: Backend|undefined; +let sessionhandler: SessionHandler|undefined; +let inferenceHandler: InferenceHandler|undefined; + +describe('#UnitTest# - unpacked WebGLDepthToSpace - Tensor WebGLDepthToSpace', () => { + before('Initialize Context', async () => { + const profiler = Profiler.create(); + backend = await Backend('webgl'); + // Explicitly set to true to trigger packed version + (backend as WebGLBackend).pack = false; + sessionhandler = backend.createSessionHandler({profiler}); + inferenceHandler = sessionhandler.createInferenceHandler(); + }); + + // Set it back to false, apparently this state is sticky throughout all the tests running in same browser session.. + after('Resetting Context', () => { + (backend as WebGLBackend).pack = false; + }); + + const testDataSet = getTestData(); + for (let k = 0; k < testDataSet.length; ++k) { + const testData = testDataSet[k]; + describe(`Test concat ${JSON.stringify(testData)}`, () => {}); + it(`Test depth to space `, () => { + const webglInferenceHandler = inferenceHandler as WebGLInferenceHandler; + + // TODO support WebGl 1.0 + if (webglInferenceHandler.session.textureManager.glContext.version === 1) { + console.log('Running depth to space with webgl1 is not supported. Skipping.'); + return; + } + + const op = new WebGLDepthToSpace(); + const attributes = new Attribute(undefined); + const blocksize = testData.blocksize; + attributes.set('blocksize', 'int', blocksize); + + op.initialize(attributes); + const elementCount = testData.elementCount; + const inputTensorShape = testData.inputShape; + const inputTextureShape = testData.inputTextureShape; + + // create input data and tensor. The input data will be used to verify if the output tensor contains the + // same value but possibly different order depending on our packing algorithm. + const inputData = testData.rawInput ? testData.rawInput : createAscendingArray(elementCount); + const inputTensorA = new Tensor(inputTensorShape, 'float32', undefined, undefined, inputData); + + // manually creat packed texture from inputTensor, and insert in cache + const gl = webglInferenceHandler.session.textureManager.glContext.gl; + webglInferenceHandler.session.textureManager.glContext.checkError(); + const webglTextureA = createTextureFromArray( + webglInferenceHandler.session.textureManager.glContext, + generateArrayForUnpackedTexture(testData.rawInput ? testData.rawInput : inputData), gl.RGBA, + inputTextureShape[0], inputTextureShape[1]); + + webglInferenceHandler.session.textureManager.glContext.checkError(); + const textureDataA = { + width: inputTextureShape[0], + height: inputTextureShape[1], + channels: 1 as const, + isPacked: false, + shape: inputTextureShape, + strides: ShapeUtil.computeStrides(inputTextureShape), + unpackedShape: inputTensorShape, + tensor: inputTensorA, + texture: webglTextureA! + }; + + webglInferenceHandler.setTextureData(inputTensorA.dataId, textureDataA); + + // compile shader code + const programInfo = op.createProgramInfo(inferenceHandler! as WebGLInferenceHandler, [inputTensorA]); + + const artifact = webglInferenceHandler.session.programManager.build(programInfo); + webglInferenceHandler.session.programManager.setArtifact(op, artifact); + + // run kernal and get output + const runData = op.createRunData(webglInferenceHandler, artifact.programInfo, [inputTensorA]); + webglInferenceHandler.session.programManager.run(artifact, runData); + const result = runData.outputTextureData.tensor.data; + + webglInferenceHandler.session.textureManager.glContext.checkError(); + // verify result. + const expectedOutput = testData.expectedOutput; + expect(result).to.not.equal(null); + + expect(result).to.have.lengthOf(elementCount); + expect(result).to.deep.equal(expectedOutput); + }); + } +}); +interface TestData { + elementCount: number; + blocksize: number; + inputShape: number[]; + outputShape: number[]; + inputTextureShape: number[]; + outputTextureShape: number[]; + expectedOutput: Float32Array; + // If empty, the test will use auto-generated data. + rawInput?: Float32Array; + mode?: string; +} +function getTestData(): TestData[] { + return [ + { + elementCount: 8, + blocksize: 2, + inputShape: [1, 8, 1, 1], + outputShape: [1, 2, 2, 2], + inputTextureShape: [8, 1], + outputTextureShape: [4, 2], + rawInput: new Float32Array([0., 9., 18., 27., 36., 45., 54., 63.]), + expectedOutput: new Float32Array([0., 18., 36., 54., 9., 27., 45., 63.]), + }, + // { + // elementCount: 16, + // blocksize: 2, + // inputShape: [1, 8, 2, 1], + // outputShape: [1, 2, 4, 2], + // inputTextureShape: [16, 1], + // outputTextureShape: [8, 2], + // rawInput: new Float32Array([0., 1., 9., 10, 18., 19, 27., 28., 36., 37., 45., 46., 54., 55., 63., 64.]), + // expectedOutput: new + // Float32Array([0., 18., 1., 19., 36., 54., 37., 55., 9., 27., 10., 28., 45., 63., 46., 64.]), + // }, + + // { + // elementCount: 48, + // blocksize: 2, + // inputShape: [1, 8, 2, 3], + // outputShape: [1, 2, 4, 6], + // inputTextureShape: [16, 3], + // outputTextureShape: [8, 6], + // rawInput: new Float32Array([ + // 0., 1., 2., 3., 4., 5., 9., 10., 11., 12., 13., 14., 18., 19., 20., 21., + // 22., 23., 27., 28., 29., 30., 31., 32., 36., 37., 38., 39., 40., 41., 45., 46., + // 47., 48., 49., 50., 54., 55., 56., 57., 58., 59., 63., 64., 65., 66., 67., 68. + // ]), + // expectedOutput: new Float32Array([ + // 0., 18., 1., 19., 2., 20., 36., 54., 37., 55., 38., 56., 3., 21., 4., 22., + // 5., 23., 39., 57., 40., 58., 41., 59., 9., 27., 10., 28., 11., 29., 45., 63., + // 46., 64., 47., 65., 12., 30., 13., 31., 14., 32., 48., 66., 49., 67., 50., 68. + // ]), + // }, + ]; +} diff --git a/test/unittests/backends/webgl/test_pack_unpack.ts b/test/unittests/backends/webgl/test_pack_unpack.ts index cee318ed..ec6867a1 100644 --- a/test/unittests/backends/webgl/test_pack_unpack.ts +++ b/test/unittests/backends/webgl/test_pack_unpack.ts @@ -87,6 +87,7 @@ describe('#UnitTest# - pack - Tensor pack', () => { const outputElementCount = getExpectedElementCount(testData.inputShape); expect(resultDataBuffer).to.have.lengthOf(outputElementCount); const expectedOutput = generateExpected(inputData, testData.inputShape); + expect(resultDataBuffer).to.deep.equal(expectedOutput); }); } @@ -171,6 +172,7 @@ describe('#UnitTest# - unpack - Tensor unpack', () => { const outputElementCount = getExpectedElementCount(testData.inputShape); expect(resultDataBuffer).to.have.lengthOf(outputElementCount); + expect(result).to.deep.equal(expectedOutput); }); } @@ -293,6 +295,21 @@ function getTestData(isPacked = true): TestData[] { inputTextureShape: [], outputTextureShape: [24, 40] }, + // test 6D tensor + { + elementCount: 32, + inputShape: [1, 1, 2, 2, 2, 4], + outputShape: [], + inputTextureShape: [], + outputTextureShape: [4, 2] + }, + { + elementCount: 3840, + inputShape: [1, 1, 2, 24, 2, 40], + outputShape: [], + inputTextureShape: [], + outputTextureShape: [48, 20] + }, ]; } else { return [ @@ -376,6 +393,23 @@ function getTestData(isPacked = true): TestData[] { outputTextureShape: [16, 4], useGeneratedOutput: true, }, + // test 6d tensor + { + elementCount: 32, + inputShape: [1, 1, 2, 2, 2, 4], + outputShape: [1, 1, 2, 2, 2, 4], + inputTextureShape: [2, 4], + outputTextureShape: [8, 4], + useGeneratedOutput: true, + }, + { + elementCount: 64, + inputShape: [1, 2, 1, 2, 4, 4], + outputShape: [1, 2, 1, 2, 4, 4], + inputTextureShape: [2, 8], + outputTextureShape: [16, 4], + useGeneratedOutput: true, + }, ]; } } diff --git a/test/unittests/backends/webgl/test_utils.ts b/test/unittests/backends/webgl/test_utils.ts index 15de40bd..d88af1be 100644 --- a/test/unittests/backends/webgl/test_utils.ts +++ b/test/unittests/backends/webgl/test_utils.ts @@ -6,6 +6,16 @@ export function createAscendingArray(size: number): Float32Array { return new Float32Array(Array.from({length: size}, (v, i) => (i + 1))); } +// Returns an array by injecting 3 zeros after every element in the input array to be used for creating unpacked +// texture. +export function generateArrayForUnpackedTexture(input: Float32Array): Float32Array { + const output = new Float32Array(input.length * 4); + for (let i = 0; i < (input.length * 4); i += 4) { + output[i] = input[i / 4]; + } + return output; +} + // create a webgl texture and fill it with the array content export function createTextureFromArray( glContext: WebGLContext, dataArray: Float32Array, type: GLenum, width: number, height: number) { diff --git a/test/unittests/index.ts b/test/unittests/index.ts index 539cbb75..13a5575c 100644 --- a/test/unittests/index.ts +++ b/test/unittests/index.ts @@ -8,6 +8,7 @@ if (typeof window !== 'undefined' && !onnx.backend.webgl.disabled) { require('./backends/webgl/test_conv_new'); require('./backends/webgl/test_pack_unpack'); require('./backends/webgl/test_concat_packed'); + require('./backends/webgl/test_depth_to_space'); require('./backends/webgl/test_reshape_packed'); } From d86cdefe31df2692f879f5a7987024aaee53e7ca Mon Sep 17 00:00:00 2001 From: Tixxx Date: Tue, 27 Apr 2021 00:30:03 -0700 Subject: [PATCH 3/7] added benchmark tool for onnxjs --- benchmark/{ => resnet}/LICENSE | 0 benchmark/{ => resnet}/README.md | 0 benchmark/{ => resnet}/karma.conf.js | 0 benchmark/{ => resnet}/package.json | 0 benchmark/{ => resnet}/run-benchmark.js | 0 benchmark/{ => resnet}/src/imagenet.js | 0 benchmark/{ => resnet}/src/index.js | 0 benchmark/{ => resnet}/webpack.conf.js | 0 benchmark/super_resolution_model_zoo/LICENSE | 5 + .../super_resolution_model_zoo/README.md | 38 + .../data/model-onnx/super_resolution.onnx | Bin 0 -> 240078 bytes .../super_resolution_model_zoo/karma.conf.js | 68 + .../package-lock.json | 12349 ++++++++++++++++ .../super_resolution_model_zoo/package.json | 42 + .../super_resolution_model_zoo/src/index.js | 288 + .../webpack.conf.js | 33 + lib/api/inference-session-impl.ts | 11 +- lib/api/inference-session.ts | 15 + lib/backends/webgl/program-manager.ts | 2 +- lib/session.ts | 7 +- 20 files changed, 12855 insertions(+), 3 deletions(-) rename benchmark/{ => resnet}/LICENSE (100%) rename benchmark/{ => resnet}/README.md (100%) rename benchmark/{ => resnet}/karma.conf.js (100%) rename benchmark/{ => resnet}/package.json (100%) rename benchmark/{ => resnet}/run-benchmark.js (100%) rename benchmark/{ => resnet}/src/imagenet.js (100%) rename benchmark/{ => resnet}/src/index.js (100%) rename benchmark/{ => resnet}/webpack.conf.js (100%) create mode 100644 benchmark/super_resolution_model_zoo/LICENSE create mode 100644 benchmark/super_resolution_model_zoo/README.md create mode 100644 benchmark/super_resolution_model_zoo/data/model-onnx/super_resolution.onnx create mode 100644 benchmark/super_resolution_model_zoo/karma.conf.js create mode 100644 benchmark/super_resolution_model_zoo/package-lock.json create mode 100644 benchmark/super_resolution_model_zoo/package.json create mode 100644 benchmark/super_resolution_model_zoo/src/index.js create mode 100644 benchmark/super_resolution_model_zoo/webpack.conf.js diff --git a/benchmark/LICENSE b/benchmark/resnet/LICENSE similarity index 100% rename from benchmark/LICENSE rename to benchmark/resnet/LICENSE diff --git a/benchmark/README.md b/benchmark/resnet/README.md similarity index 100% rename from benchmark/README.md rename to benchmark/resnet/README.md diff --git a/benchmark/karma.conf.js b/benchmark/resnet/karma.conf.js similarity index 100% rename from benchmark/karma.conf.js rename to benchmark/resnet/karma.conf.js diff --git a/benchmark/package.json b/benchmark/resnet/package.json similarity index 100% rename from benchmark/package.json rename to benchmark/resnet/package.json diff --git a/benchmark/run-benchmark.js b/benchmark/resnet/run-benchmark.js similarity index 100% rename from benchmark/run-benchmark.js rename to benchmark/resnet/run-benchmark.js diff --git a/benchmark/src/imagenet.js b/benchmark/resnet/src/imagenet.js similarity index 100% rename from benchmark/src/imagenet.js rename to benchmark/resnet/src/imagenet.js diff --git a/benchmark/src/index.js b/benchmark/resnet/src/index.js similarity index 100% rename from benchmark/src/index.js rename to benchmark/resnet/src/index.js diff --git a/benchmark/webpack.conf.js b/benchmark/resnet/webpack.conf.js similarity index 100% rename from benchmark/webpack.conf.js rename to benchmark/resnet/webpack.conf.js diff --git a/benchmark/super_resolution_model_zoo/LICENSE b/benchmark/super_resolution_model_zoo/LICENSE new file mode 100644 index 00000000..158ec504 --- /dev/null +++ b/benchmark/super_resolution_model_zoo/LICENSE @@ -0,0 +1,5 @@ +# Licenses + +TensorFlow.js: +https://github.com/tensorflow/tfjs/blob/master/LICENSE + diff --git a/benchmark/super_resolution_model_zoo/README.md b/benchmark/super_resolution_model_zoo/README.md new file mode 100644 index 00000000..1b66be98 --- /dev/null +++ b/benchmark/super_resolution_model_zoo/README.md @@ -0,0 +1,38 @@ +# Benchmarks +This sub project is to benchmark model zoo's super resolution model and compare ONNX.js peformance vs other leading in-browser AI Inference frameworks. + +## Frameworks +- TensorFlow.js +- ONNX.js + +## Backends +- WebGL + +## Browsers +(not all framework/backend combinations are supported by all browsers) +- Chrome (WebGL 2) +- Edge (WebGL 1) + +## Instructions + +1. Ensure that the ONNX.js project (the parent) is already installed and built: +```bash +npm ci +npm run build +``` +2. Change to `benchmark/super_resolution_model_zoo` subfolder and run npm ci and build in the benchmark folder +```bash +cd benchmark +npm install +npm run build +``` +3. Run tests (Chrome) +```bash +npm run test +``` + +The test command supports enabling pack mode through environment variables, use: +```bash +PACK=1 npm run test +``` +to enable webGL texture packing for onnxjs and tfjs. diff --git a/benchmark/super_resolution_model_zoo/data/model-onnx/super_resolution.onnx b/benchmark/super_resolution_model_zoo/data/model-onnx/super_resolution.onnx new file mode 100644 index 0000000000000000000000000000000000000000..53283c050ced3164b68990dcd736d140601e694c GIT binary patch literal 240078 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�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Ǎ(L|s3 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 KVk|jE=Klc^TwB8c literal 0 HcmV?d00001 diff --git a/benchmark/super_resolution_model_zoo/karma.conf.js b/benchmark/super_resolution_model_zoo/karma.conf.js new file mode 100644 index 00000000..c90a1eab --- /dev/null +++ b/benchmark/super_resolution_model_zoo/karma.conf.js @@ -0,0 +1,68 @@ +// Karma configuration +// Generated on Thu Nov 01 2018 14:03:26 GMT-0700 (Pacific Daylight Time) +const path = require('path') +function getMachineIpAddress() { + var os = require('os'); + var ifaces = os.networkInterfaces(); + + for (const ifname in ifaces) { + for (const iface of ifaces[ifname]) { + if ('IPv4' !== iface.family || iface.internal !== false) { + // skip over internal (i.e. 127.0.0.1) and non-ipv4 addresses + continue; + } + + // returns the first available IP address + return iface.address; + } + } + + // if no available IP address, fallback to "localhost". + return 'localhost'; +} + +module.exports = function(config) { + config.set({ + basePath: './', + frameworks: ['mocha'], + files: [ + { pattern: 'dist/main.js' }, + { pattern: 'dist/onnx-wasm.wasm', included: false}, + { pattern: 'dist/onnx-worker.js', included: false}, + { pattern: 'data/**/*', watched: false, included: false, served: true, nocache: true } + ], + proxies: { + '/onnx-wasm.wasm': '/base/dist/onnx-wasm.wasm', + '/onnx-worker.js': '/base/dist/onnx-worker.js', + }, + exclude: [ + ], + // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor + preprocessors: { + }, + reporters: ['mocha'], + captureTimeout: 120000, + reportSlowerThan: 100, + browserDisconnectTimeout: 600000, + browserNoActivityTimeout: 300000, + browserDisconnectTolerance: 0, + browserSocketTimeout: 60000, + logLevel: config.LOG_VERBOSE, + hostname: getMachineIpAddress(), + customLaunchers: { + ChromeTest: {base: 'Chrome', flags: ['--window-size=1,1']}, + ChromeDebug: {debug: true, base: 'Chrome', flags: ['--remote-debugging-port=9333']} + }, + client: { + captureConsole: true, + mocha: {expose: ['body'], timeout: 3000000}, + browser: config.browsers, + printMatches: false, + // To enable pack, run 'PACK=1 npm run test' + usePackedGlTexture: config.usePackedGlTexture==1 ? true : false, + profile: config.profile + }, + browsers: ['ChromeTest', 'ChromeDebug', 'Edge', 'Safari'], + browserConsoleLogOptions: {level: "debug", format: "%b %T: %m", terminal: true}, + }) +} diff --git a/benchmark/super_resolution_model_zoo/package-lock.json b/benchmark/super_resolution_model_zoo/package-lock.json new file mode 100644 index 00000000..1414d84f --- /dev/null +++ b/benchmark/super_resolution_model_zoo/package-lock.json @@ -0,0 +1,12349 @@ +{ + "name": "super-resolution-benchmarks", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "super-resolution-benchmarks", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@tensorflow/tfjs": "^3.4.0", + "lodash": "^4.17.11", + "ndarray": "^1.0.18", + "ndarray-ops": "^1.2.2", + "onnxjs": "file:../../" + }, + "devDependencies": { + "blueimp-load-image": "^2.19.0", + "karma": "^6.3.2", + "karma-chrome-launcher": "^2.2.0", + "karma-edge-launcher": "^0.4.2", + "karma-mocha": "^2.0.1", + "karma-mocha-reporter": "^2.2.5", + "karma-requirejs": "^1.1.0", + "karma-safari-launcher": "^1.0.0", + "mocha": "^8.3.2", + "requirejs": "^2.3.6", + "webpack": "^4.24.0", + "webpack-cli": "^3.1.2" + } + }, + "../..": { + "version": "0.1.8", + "license": "MIT", + "dependencies": { + "flatbuffers": "^1.12.0", + "onnx-proto": "^4.0.4", + "platform": "^1.3.6" + }, + "devDependencies": { + "@chiragrupani/karma-chromium-edge-launcher": "^2.0.0", + "@types/chai": "^4.2.12", + "@types/flatbuffers": "^1.10.0", + "@types/fs-extra": "^9.0.1", + "@types/karma": "^5.0.0", + "@types/long": "^4.0.1", + "@types/minimatch": "^3.0.3", + "@types/minimist": "^1.2.0", + "@types/mocha": "^8.0.2", + "@types/npmlog": "^4.1.2", + "@types/platform": "^1.3.2", + "chai": "^4.2.0", + "clang-format": "^1.4.0", + "electron": "^9.2.0", + "fs-extra": "^9.0.1", + "globby": "^11.0.1", + "hard-source-webpack-plugin": "^0.13.1", + "husky": "^4.2.5", + "karma": "^5.1.1", + "karma-browserstack-launcher": "^1.6.0", + "karma-chai": "^0.1.0", + "karma-chrome-launcher": "^3.1.0", + "karma-edge-launcher": "^0.4.2", + "karma-electron": "^6.3.1", + "karma-firefox-launcher": "^1.3.0", + "karma-mocha": "^2.0.1", + "karma-mocha-reporter": "^2.2.5", + "karma-safari-applescript-launcher": "^0.1.0", + "karma-sourcemap-loader": "^0.3.7", + "long": "^4.0.0", + "minimatch": "^3.0.4", + "minimist": "^1.2.5", + "mocha": "^8.1.1", + "npmlog": "^4.1.2", + "numpy-parser": "^1.2.3", + "onnxjs-node": "^1.4.0", + "prettier": "2.0.5", + "strip-json-comments": "^3.1.1", + "ts-loader": "^8.0.2", + "tslint": "^6.1.3", + "tslint-microsoft-contrib": "^6.2.0", + "tslint-no-unused-expression-chai": "^0.1.4", + "typescript": "^3.9.7", + "webpack": "^4.44.1", + "webpack-cli": "^3.3.12", + "worker-loader": "^3.0.1" + } + }, + "node_modules/@tensorflow/tfjs": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-3.5.0.tgz", + "integrity": "sha512-+n8CxuSh1XwrLiS9jKXhHS/hpcSiUosrK4BYBbKBGhoBVjLl47NnlNYtx5o5cTvWW3HD/PoJxa3jpaSB1ukuaw==", + "dependencies": { + "@tensorflow/tfjs-backend-cpu": "3.5.0", + "@tensorflow/tfjs-backend-webgl": "3.5.0", + "@tensorflow/tfjs-converter": "3.5.0", + "@tensorflow/tfjs-core": "3.5.0", + "@tensorflow/tfjs-data": "3.5.0", + "@tensorflow/tfjs-layers": "3.5.0", + "argparse": "^1.0.10", + "chalk": "^4.1.0", + "core-js": "3", + "regenerator-runtime": "^0.13.5", + "yargs": "^16.0.3" + }, + "bin": { + "tfjs-custom-module": "dist/tools/custom_module/cli.js" + } + }, + "node_modules/@tensorflow/tfjs-backend-cpu": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.5.0.tgz", + "integrity": "sha512-aFSbjVLBKV0OpvE4QGSpIvtxhxpqyz09WhnuMZMhxjxCrjrPYbX7gEjXIHvgF8dEs6SX19XUaChgIftyKd2YIQ==", + "dependencies": { + "@types/seedrandom": "2.4.27", + "seedrandom": "2.4.3" + }, + "engines": { + "yarn": ">= 1.3.2" + }, + "peerDependencies": { + "@tensorflow/tfjs-core": "3.5.0" + } + }, + "node_modules/@tensorflow/tfjs-backend-cpu/node_modules/seedrandom": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", + "integrity": "sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw=" + }, + "node_modules/@tensorflow/tfjs-backend-webgl": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.5.0.tgz", + "integrity": "sha512-zeuOmfi0wbrZwjUp6M4hsctQvUuQVmO18A8V68xp+u6QC4jp3P5hNdjF7iOiMW/3iNVylYht8MbHYjQLyJAQdw==", + "dependencies": { + "@tensorflow/tfjs-backend-cpu": "3.5.0", + "@types/offscreencanvas": "~2019.3.0", + "@types/seedrandom": "2.4.27", + "@types/webgl-ext": "0.0.30", + "@types/webgl2": "0.0.5", + "seedrandom": "2.4.3" + }, + "engines": { + "yarn": ">= 1.3.2" + }, + "peerDependencies": { + "@tensorflow/tfjs-core": "3.5.0" + } + }, + "node_modules/@tensorflow/tfjs-backend-webgl/node_modules/seedrandom": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", + "integrity": "sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw=" + }, + "node_modules/@tensorflow/tfjs-converter": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-3.5.0.tgz", + "integrity": "sha512-eAx1nEaREzPfcIOnyp1PUvQdjob9MtCJM/syh4v05FBV7UrUNpxNMliA4JgjiFvdnhrM4e06/CeqMA8/AVw2wg==", + "peerDependencies": { + "@tensorflow/tfjs-core": "3.5.0" + } + }, + "node_modules/@tensorflow/tfjs-core": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-3.5.0.tgz", + "integrity": "sha512-NOs9hY9nj/iPaz2cSrWpq8G07i96/ot+1l1RoBoA1s1cZakb43pLhntm1Mj4vhSxp7dbc/BSs+t6/S+45OZTUA==", + "dependencies": { + "@types/offscreencanvas": "~2019.3.0", + "@types/seedrandom": "2.4.27", + "@types/webgl-ext": "0.0.30", + "node-fetch": "~2.6.1", + "seedrandom": "2.4.3" + }, + "engines": { + "yarn": ">= 1.3.2" + } + }, + "node_modules/@tensorflow/tfjs-core/node_modules/seedrandom": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", + "integrity": "sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw=" + }, + "node_modules/@tensorflow/tfjs-data": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-3.5.0.tgz", + "integrity": "sha512-zCyMiqa94Wsyt5N6z9iPYrw16RANVA1LFPIjMqzk66EUPfBJNa2qiOaDnjQOEUNuUsM0jB7NO3BPh51LSWSOKQ==", + "dependencies": { + "@types/node-fetch": "^2.1.2", + "node-fetch": "~2.6.1" + }, + "peerDependencies": { + "@tensorflow/tfjs-core": "3.5.0", + "seedrandom": "~2.4.3" + } + }, + "node_modules/@tensorflow/tfjs-layers": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-3.5.0.tgz", + "integrity": "sha512-vuJsJdJej5uFC4d5xlRvNm7iONEL1pS5owjNoJ4MpNcZOtNd7kfI8qYPL8ICickG0EdXjUVa3A209iDdH0qiqA==", + "peerDependencies": { + "@tensorflow/tfjs-core": "3.5.0" + } + }, + "node_modules/@types/component-emitter": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", + "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==", + "dev": true + }, + "node_modules/@types/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", + "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.0.tgz", + "integrity": "sha512-YN1d+ae2MCb4U0mMa+Zlb5lWTdpFShbAj5nmte6lel27waMMBfivrm0prC16p/Di3DyTrmerrYUT8/145HXxVw==" + }, + "node_modules/@types/node-fetch": { + "version": "2.5.10", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.10.tgz", + "integrity": "sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ==", + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/offscreencanvas": { + "version": "2019.3.0", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz", + "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==" + }, + "node_modules/@types/seedrandom": { + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.27.tgz", + "integrity": "sha1-nbVjk33YaRX2kJK8QyWdL0hXjkE=" + }, + "node_modules/@types/webgl-ext": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/webgl-ext/-/webgl-ext-0.0.30.tgz", + "integrity": "sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==" + }, + "node_modules/@types/webgl2": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@types/webgl2/-/webgl2-0.0.5.tgz", + "integrity": "sha512-oGaKsBbxQOY5+aJFV3KECDhGaXt+yZJt2y/OZsnQGLRkH6Fvr7rv4pCt3SRH1somIHfej/c4u7NSpCyd9x+1Ow==" + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true, + "peerDependencies": { + "ajv": ">=5.0.0" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true, + "optional": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/blueimp-load-image": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/blueimp-load-image/-/blueimp-load-image-2.31.0.tgz", + "integrity": "sha512-6sTGh1OiUmuH8ftAYvUzALivoOmcnahinGmjZFI4puZVowXoKTn/bXtth7N1skW5AlezEOfjgFH4lNXHeNRQog==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "node_modules/cacache/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "dependencies": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "node_modules/copy-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.11.0.tgz", + "integrity": "sha512-bd79DPpx+1Ilh9+30aT5O1sgpQd4Ttg8oqkqi51ZzhedMM1omD2e6IOF48Z/DzDCZ2svp49tN/3vneTK6ZBkXw==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "node_modules/cwise-compiler": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cwise-compiler/-/cwise-compiler-1.1.3.tgz", + "integrity": "sha1-9NZnQQ6FDToxOn0tt7HlBbsDTMU=", + "dependencies": { + "uniq": "^1.0.0" + } + }, + "node_modules/cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "node_modules/date-format": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", + "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/edge-launcher": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/edge-launcher/-/edge-launcher-1.2.2.tgz", + "integrity": "sha1-60Cq+9Bnpup27/+rBke81VCbN7I=", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/engine.io": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.1.1.tgz", + "integrity": "sha512-t2E9wLlssQjGw0nluF6aYyfX8LwYU8Jj0xct+pAhfWfv/YrBn6TSNtEYsgxHIfaMqfrLx07czcMg9bMN6di+3w==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.0", + "ws": "~7.4.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", + "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", + "dev": true, + "dependencies": { + "base64-arraybuffer": "0.1.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/enhanced-resolve/node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/follow-redirects": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.0.tgz", + "integrity": "sha512-0vRwd7RKQBTt+mgu87mtYeofLFZpTas2S9zY+jIeuLJMNvudIgF52nr19q40HOwH5RrhWIPuj9puybzSJiRrVg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "dependencies": { + "null-check": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "node_modules/import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "dependencies": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/iota-array": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz", + "integrity": "sha1-ge9X/l0FgUzVjCSDYyqZwwoOgIc=" + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.6.tgz", + "integrity": "sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.6" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/karma": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.2.tgz", + "integrity": "sha512-fo4Wt0S99/8vylZMxNj4cBFyOBBnC1bewZ0QOlePij/2SZVWxqbyLeIddY13q6URa2EpLRW8ixvFRUMjkmo1bw==", + "dev": true, + "dependencies": { + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.4.2", + "colors": "^1.4.0", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.6", + "graceful-fs": "^4.2.4", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.6", + "lodash": "^4.17.19", + "log4js": "^6.2.1", + "mime": "^2.4.5", + "minimatch": "^3.0.4", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^3.1.0", + "source-map": "^0.6.1", + "tmp": "0.2.1", + "ua-parser-js": "^0.7.23", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "dev": true, + "dependencies": { + "fs-access": "^1.0.0", + "which": "^1.2.1" + } + }, + "node_modules/karma-edge-launcher": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/karma-edge-launcher/-/karma-edge-launcher-0.4.2.tgz", + "integrity": "sha512-YAJZb1fmRcxNhMIWYsjLuxwODBjh2cSHgTW/jkVmdpGguJjLbs9ZgIK/tEJsMQcBLUkO+yO4LBbqYxqgGW2HIw==", + "dev": true, + "dependencies": { + "edge-launcher": "1.2.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "karma": ">=0.9" + } + }, + "node_modules/karma-mocha": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz", + "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.3" + } + }, + "node_modules/karma-mocha-reporter": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz", + "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=", + "dev": true, + "dependencies": { + "chalk": "^2.1.0", + "log-symbols": "^2.1.0", + "strip-ansi": "^4.0.0" + }, + "peerDependencies": { + "karma": ">=0.13" + } + }, + "node_modules/karma-mocha-reporter/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/karma-mocha-reporter/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/karma-mocha-reporter/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/karma-mocha-reporter/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/karma-mocha-reporter/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/karma-mocha-reporter/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/karma-mocha-reporter/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/karma-requirejs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/karma-requirejs/-/karma-requirejs-1.1.0.tgz", + "integrity": "sha1-/driy4fX68FvsCIok1ZNf+5Xh5g=", + "dev": true, + "peerDependencies": { + "karma": ">=0.9", + "requirejs": "^2.1.0" + } + }, + "node_modules/karma-safari-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/karma-safari-launcher/-/karma-safari-launcher-1.0.0.tgz", + "integrity": "sha1-lpgqLMR9BmquccVTursoMZEVos4=", + "dev": true, + "peerDependencies": { + "karma": ">=0.9" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/log-symbols/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log4js": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", + "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", + "dev": true, + "dependencies": { + "date-format": "^3.0.0", + "debug": "^4.1.1", + "flatted": "^2.0.1", + "rfdc": "^1.1.4", + "streamroller": "^2.2.4" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/log4js/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/log4js/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "dependencies": { + "mime-db": "1.47.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "dependencies": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz", + "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==", + "dev": true, + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 10.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mocha/node_modules/log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "dependencies": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "node_modules/move-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, + "optional": true + }, + "node_modules/nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ndarray": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/ndarray/-/ndarray-1.0.19.tgz", + "integrity": "sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==", + "dependencies": { + "iota-array": "^1.0.0", + "is-buffer": "^1.0.2" + } + }, + "node_modules/ndarray-ops": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ndarray-ops/-/ndarray-ops-1.2.2.tgz", + "integrity": "sha1-WeiNLDKn7ryxvGkPrhQVeVV6YU4=", + "dependencies": { + "cwise-compiler": "^1.0.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "dependencies": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onnxjs": { + "resolved": "../..", + "link": true + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "dependencies": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true, + "optional": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "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.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true, + "optional": true + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requirejs": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", + "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", + "dev": true, + "bin": { + "r_js": "bin/r.js", + "r.js": "bin/r.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-dir/node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-dir/node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "dependencies": { + "aproba": "^1.1.1" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/seedrandom": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.4.tgz", + "integrity": "sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==", + "peer": true + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/socket.io": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-3.1.2.tgz", + "integrity": "sha512-JubKZnTQ4Z8G4IZWtaAZSiRP3I/inpy8c/Bsx2jrwGrTbKeVU5xd6qkKMHpChYeM3dWZSO0QACiGK+obhBNwYw==", + "dev": true, + "dependencies": { + "@types/cookie": "^0.4.0", + "@types/cors": "^2.8.8", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.1", + "engine.io": "~4.1.0", + "socket.io-adapter": "~2.1.0", + "socket.io-parser": "~4.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.1.0.tgz", + "integrity": "sha512-+vDov/aTsLjViYTwS9fPy5pEtTkrbEKsw2M+oVSoFGw6OD1IpvlV1VPhUzNbofCQ8oyMbdYJqDtGdmHQK6TdPg==", + "dev": true + }, + "node_modules/socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "dev": true, + "dependencies": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "node_modules/streamroller": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", + "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", + "dev": true, + "dependencies": { + "date-format": "^2.1.0", + "debug": "^4.1.1", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/streamroller/node_modules/date-format": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", + "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/streamroller/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/streamroller/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "dependencies": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "dependencies": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "dev": true, + "optional": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/watchpack-chokidar2/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", + "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.1", + "findup-sync": "^3.0.0", + "global-modules": "^2.0.0", + "import-local": "^2.0.0", + "interpret": "^1.4.0", + "loader-utils": "^1.4.0", + "supports-color": "^6.1.0", + "v8-compile-cache": "^2.1.1", + "yargs": "^13.3.2" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "peerDependencies": { + "webpack": "4.x.x" + } + }, + "node_modules/webpack-cli/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-cli/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-cli/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-cli/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/webpack-cli/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/webpack-cli/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/webpack-cli/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-cli/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/webpack-cli/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/webpack-cli/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-cli/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-cli/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-cli/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/webpack-cli/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "dependencies": { + "errno": "~0.1.7" + } + }, + "node_modules/workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/ws": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@tensorflow/tfjs": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-3.5.0.tgz", + "integrity": "sha512-+n8CxuSh1XwrLiS9jKXhHS/hpcSiUosrK4BYBbKBGhoBVjLl47NnlNYtx5o5cTvWW3HD/PoJxa3jpaSB1ukuaw==", + "requires": { + "@tensorflow/tfjs-backend-cpu": "3.5.0", + "@tensorflow/tfjs-backend-webgl": "3.5.0", + "@tensorflow/tfjs-converter": "3.5.0", + "@tensorflow/tfjs-core": "3.5.0", + "@tensorflow/tfjs-data": "3.5.0", + "@tensorflow/tfjs-layers": "3.5.0", + "argparse": "^1.0.10", + "chalk": "^4.1.0", + "core-js": "3", + "regenerator-runtime": "^0.13.5", + "yargs": "^16.0.3" + } + }, + "@tensorflow/tfjs-backend-cpu": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.5.0.tgz", + "integrity": "sha512-aFSbjVLBKV0OpvE4QGSpIvtxhxpqyz09WhnuMZMhxjxCrjrPYbX7gEjXIHvgF8dEs6SX19XUaChgIftyKd2YIQ==", + "requires": { + "@types/seedrandom": "2.4.27", + "seedrandom": "2.4.3" + }, + "dependencies": { + "seedrandom": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", + "integrity": "sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw=" + } + } + }, + "@tensorflow/tfjs-backend-webgl": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.5.0.tgz", + "integrity": "sha512-zeuOmfi0wbrZwjUp6M4hsctQvUuQVmO18A8V68xp+u6QC4jp3P5hNdjF7iOiMW/3iNVylYht8MbHYjQLyJAQdw==", + "requires": { + "@tensorflow/tfjs-backend-cpu": "3.5.0", + "@types/offscreencanvas": "~2019.3.0", + "@types/seedrandom": "2.4.27", + "@types/webgl-ext": "0.0.30", + "@types/webgl2": "0.0.5", + "seedrandom": "2.4.3" + }, + "dependencies": { + "seedrandom": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", + "integrity": "sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw=" + } + } + }, + "@tensorflow/tfjs-converter": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-3.5.0.tgz", + "integrity": "sha512-eAx1nEaREzPfcIOnyp1PUvQdjob9MtCJM/syh4v05FBV7UrUNpxNMliA4JgjiFvdnhrM4e06/CeqMA8/AVw2wg==", + "requires": {} + }, + "@tensorflow/tfjs-core": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-3.5.0.tgz", + "integrity": "sha512-NOs9hY9nj/iPaz2cSrWpq8G07i96/ot+1l1RoBoA1s1cZakb43pLhntm1Mj4vhSxp7dbc/BSs+t6/S+45OZTUA==", + "requires": { + "@types/offscreencanvas": "~2019.3.0", + "@types/seedrandom": "2.4.27", + "@types/webgl-ext": "0.0.30", + "node-fetch": "~2.6.1", + "seedrandom": "2.4.3" + }, + "dependencies": { + "seedrandom": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", + "integrity": "sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw=" + } + } + }, + "@tensorflow/tfjs-data": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-3.5.0.tgz", + "integrity": "sha512-zCyMiqa94Wsyt5N6z9iPYrw16RANVA1LFPIjMqzk66EUPfBJNa2qiOaDnjQOEUNuUsM0jB7NO3BPh51LSWSOKQ==", + "requires": { + "@types/node-fetch": "^2.1.2", + "node-fetch": "~2.6.1" + } + }, + "@tensorflow/tfjs-layers": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-3.5.0.tgz", + "integrity": "sha512-vuJsJdJej5uFC4d5xlRvNm7iONEL1pS5owjNoJ4MpNcZOtNd7kfI8qYPL8ICickG0EdXjUVa3A209iDdH0qiqA==", + "requires": {} + }, + "@types/component-emitter": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", + "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==", + "dev": true + }, + "@types/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==", + "dev": true + }, + "@types/cors": { + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", + "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==", + "dev": true + }, + "@types/node": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.0.tgz", + "integrity": "sha512-YN1d+ae2MCb4U0mMa+Zlb5lWTdpFShbAj5nmte6lel27waMMBfivrm0prC16p/Di3DyTrmerrYUT8/145HXxVw==" + }, + "@types/node-fetch": { + "version": "2.5.10", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.10.tgz", + "integrity": "sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ==", + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "@types/offscreencanvas": { + "version": "2019.3.0", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz", + "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==" + }, + "@types/seedrandom": { + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.27.tgz", + "integrity": "sha1-nbVjk33YaRX2kJK8QyWdL0hXjkE=" + }, + "@types/webgl-ext": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/webgl-ext/-/webgl-ext-0.0.30.tgz", + "integrity": "sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==" + }, + "@types/webgl2": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@types/webgl2/-/webgl2-0.0.5.tgz", + "integrity": "sha512-oGaKsBbxQOY5+aJFV3KECDhGaXt+yZJt2y/OZsnQGLRkH6Fvr7rv4pCt3SRH1somIHfej/c4u7NSpCyd9x+1Ow==" + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true, + "requires": {} + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "blueimp-load-image": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/blueimp-load-image/-/blueimp-load-image-2.31.0.tgz", + "integrity": "sha512-6sTGh1OiUmuH8ftAYvUzALivoOmcnahinGmjZFI4puZVowXoKTn/bXtth7N1skW5AlezEOfjgFH4lNXHeNRQog==", + "dev": true + }, + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + } + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.11.0.tgz", + "integrity": "sha512-bd79DPpx+1Ilh9+30aT5O1sgpQd4Ttg8oqkqi51ZzhedMM1omD2e6IOF48Z/DzDCZ2svp49tN/3vneTK6ZBkXw==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "cwise-compiler": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cwise-compiler/-/cwise-compiler-1.1.3.tgz", + "integrity": "sha1-9NZnQQ6FDToxOn0tt7HlBbsDTMU=", + "requires": { + "uniq": "^1.0.0" + } + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "date-format": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", + "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "edge-launcher": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/edge-launcher/-/edge-launcher-1.2.2.tgz", + "integrity": "sha1-60Cq+9Bnpup27/+rBke81VCbN7I=", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.1.1.tgz", + "integrity": "sha512-t2E9wLlssQjGw0nluF6aYyfX8LwYU8Jj0xct+pAhfWfv/YrBn6TSNtEYsgxHIfaMqfrLx07czcMg9bMN6di+3w==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.0", + "ws": "~7.4.2" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "engine.io-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", + "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", + "dev": true, + "requires": { + "base64-arraybuffer": "0.1.4" + } + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.0.tgz", + "integrity": "sha512-0vRwd7RKQBTt+mgu87mtYeofLFZpTas2S9zY+jIeuLJMNvudIgF52nr19q40HOwH5RrhWIPuj9puybzSJiRrVg==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "^1.0.0" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "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-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "iota-array": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz", + "integrity": "sha1-ge9X/l0FgUzVjCSDYyqZwwoOgIc=" + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbinaryfile": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.6.tgz", + "integrity": "sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + } + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "karma": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.2.tgz", + "integrity": "sha512-fo4Wt0S99/8vylZMxNj4cBFyOBBnC1bewZ0QOlePij/2SZVWxqbyLeIddY13q6URa2EpLRW8ixvFRUMjkmo1bw==", + "dev": true, + "requires": { + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.4.2", + "colors": "^1.4.0", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.6", + "graceful-fs": "^4.2.4", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.6", + "lodash": "^4.17.19", + "log4js": "^6.2.1", + "mime": "^2.4.5", + "minimatch": "^3.0.4", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^3.1.0", + "source-map": "^0.6.1", + "tmp": "0.2.1", + "ua-parser-js": "^0.7.23", + "yargs": "^16.1.1" + } + }, + "karma-chrome-launcher": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "dev": true, + "requires": { + "fs-access": "^1.0.0", + "which": "^1.2.1" + } + }, + "karma-edge-launcher": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/karma-edge-launcher/-/karma-edge-launcher-0.4.2.tgz", + "integrity": "sha512-YAJZb1fmRcxNhMIWYsjLuxwODBjh2cSHgTW/jkVmdpGguJjLbs9ZgIK/tEJsMQcBLUkO+yO4LBbqYxqgGW2HIw==", + "dev": true, + "requires": { + "edge-launcher": "1.2.2" + } + }, + "karma-mocha": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz", + "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==", + "dev": true, + "requires": { + "minimist": "^1.2.3" + } + }, + "karma-mocha-reporter": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz", + "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=", + "dev": true, + "requires": { + "chalk": "^2.1.0", + "log-symbols": "^2.1.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "karma-requirejs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/karma-requirejs/-/karma-requirejs-1.1.0.tgz", + "integrity": "sha1-/driy4fX68FvsCIok1ZNf+5Xh5g=", + "dev": true, + "requires": {} + }, + "karma-safari-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/karma-safari-launcher/-/karma-safari-launcher-1.0.0.tgz", + "integrity": "sha1-lpgqLMR9BmquccVTursoMZEVos4=", + "dev": true, + "requires": {} + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "log4js": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", + "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", + "dev": true, + "requires": { + "date-format": "^3.0.0", + "debug": "^4.1.1", + "flatted": "^2.0.1", + "rfdc": "^1.1.4", + "streamroller": "^2.2.4" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true + }, + "mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" + }, + "mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "requires": { + "mime-db": "1.47.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "mocha": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz", + "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, + "optional": true + }, + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "ndarray": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/ndarray/-/ndarray-1.0.19.tgz", + "integrity": "sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==", + "requires": { + "iota-array": "^1.0.0", + "is-buffer": "^1.0.2" + } + }, + "ndarray-ops": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ndarray-ops/-/ndarray-ops-1.2.2.tgz", + "integrity": "sha1-WeiNLDKn7ryxvGkPrhQVeVV6YU4=", + "requires": { + "cwise-compiler": "^1.0.0" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onnxjs": { + "version": "file:../..", + "requires": { + "@chiragrupani/karma-chromium-edge-launcher": "^2.0.0", + "@types/chai": "^4.2.12", + "@types/flatbuffers": "^1.10.0", + "@types/fs-extra": "^9.0.1", + "@types/karma": "^5.0.0", + "@types/long": "^4.0.1", + "@types/minimatch": "^3.0.3", + "@types/minimist": "^1.2.0", + "@types/mocha": "^8.0.2", + "@types/npmlog": "^4.1.2", + "@types/platform": "^1.3.2", + "chai": "^4.2.0", + "clang-format": "^1.4.0", + "electron": "^9.2.0", + "flatbuffers": "^1.12.0", + "fs-extra": "^9.0.1", + "globby": "^11.0.1", + "hard-source-webpack-plugin": "^0.13.1", + "husky": "^4.2.5", + "karma": "^5.1.1", + "karma-browserstack-launcher": "^1.6.0", + "karma-chai": "^0.1.0", + "karma-chrome-launcher": "^3.1.0", + "karma-edge-launcher": "^0.4.2", + "karma-electron": "^6.3.1", + "karma-firefox-launcher": "^1.3.0", + "karma-mocha": "^2.0.1", + "karma-mocha-reporter": "^2.2.5", + "karma-safari-applescript-launcher": "^0.1.0", + "karma-sourcemap-loader": "^0.3.7", + "long": "^4.0.0", + "minimatch": "^3.0.4", + "minimist": "^1.2.5", + "mocha": "^8.1.1", + "npmlog": "^4.1.2", + "numpy-parser": "^1.2.3", + "onnx-proto": "^4.0.4", + "onnxjs-node": "^1.4.0", + "platform": "^1.3.6", + "prettier": "2.0.5", + "strip-json-comments": "^3.1.1", + "ts-loader": "^8.0.2", + "tslint": "^6.1.3", + "tslint-microsoft-contrib": "^6.2.0", + "tslint-no-unused-expression-chai": "^0.1.4", + "typescript": "^3.9.7", + "webpack": "^4.44.1", + "webpack-cli": "^3.3.12", + "worker-loader": "^3.0.1" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true, + "optional": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "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.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true, + "optional": true + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "requirejs": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", + "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + } + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "seedrandom": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.4.tgz", + "integrity": "sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==", + "peer": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socket.io": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-3.1.2.tgz", + "integrity": "sha512-JubKZnTQ4Z8G4IZWtaAZSiRP3I/inpy8c/Bsx2jrwGrTbKeVU5xd6qkKMHpChYeM3dWZSO0QACiGK+obhBNwYw==", + "dev": true, + "requires": { + "@types/cookie": "^0.4.0", + "@types/cors": "^2.8.8", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.1", + "engine.io": "~4.1.0", + "socket.io-adapter": "~2.1.0", + "socket.io-parser": "~4.0.3" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.1.0.tgz", + "integrity": "sha512-+vDov/aTsLjViYTwS9fPy5pEtTkrbEKsw2M+oVSoFGw6OD1IpvlV1VPhUzNbofCQ8oyMbdYJqDtGdmHQK6TdPg==", + "dev": true + }, + "socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "dev": true, + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "streamroller": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", + "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", + "dev": true, + "requires": { + "date-format": "^2.1.0", + "debug": "^4.1.1", + "fs-extra": "^8.1.0" + }, + "dependencies": { + "date-format": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", + "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", + "dev": true + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + } + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "optional": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + }, + "watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + } + }, + "webpack-cli": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", + "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.1", + "findup-sync": "^3.0.0", + "global-modules": "^2.0.0", + "import-local": "^2.0.0", + "interpret": "^1.4.0", + "loader-utils": "^1.4.0", + "supports-color": "^6.1.0", + "v8-compile-cache": "^2.1.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", + "dev": true, + "requires": {} + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + } + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/benchmark/super_resolution_model_zoo/package.json b/benchmark/super_resolution_model_zoo/package.json new file mode 100644 index 00000000..76867407 --- /dev/null +++ b/benchmark/super_resolution_model_zoo/package.json @@ -0,0 +1,42 @@ +{ + "name": "super-resolution-benchmarks", + "version": "1.0.0", + "description": "", + "main": "./src/index.js", + "scripts": { + "build": "webpack --config ./webpack.conf.js --mode production", + "build-debug": "webpack --config ./webpack.conf.js --mode development", + "test": "karma start --browsers ChromeTest --single-run --usePackedGlTexture=$PACK", + "profile": "karma start --browsers ChromeTest --single-run --profile --usePackedGlTexture=$PACK", + "test-debug": "karma start --browsers ChromeDebug", + "test-edge": "karma start --browsers Edge --single-run", + "test-safari": "karma start --browsers Safari --single-run" + }, + "keywords": [ + "super-resolution", + "benchmark" + ], + "author": "", + "license": "ISC", + "devDependencies": { + "blueimp-load-image": "^2.19.0", + "karma": "^6.3.2", + "karma-chrome-launcher": "^2.2.0", + "karma-edge-launcher": "^0.4.2", + "karma-mocha": "^2.0.1", + "karma-mocha-reporter": "^2.2.5", + "karma-requirejs": "^1.1.0", + "karma-safari-launcher": "^1.0.0", + "mocha": "^8.3.2", + "requirejs": "^2.3.6", + "webpack": "^4.24.0", + "webpack-cli": "^3.1.2" + }, + "dependencies": { + "@tensorflow/tfjs": "^3.4.0", + "lodash": "^4.17.11", + "ndarray": "^1.0.18", + "ndarray-ops": "^1.2.2", + "onnxjs": "file:../../" + } +} diff --git a/benchmark/super_resolution_model_zoo/src/index.js b/benchmark/super_resolution_model_zoo/src/index.js new file mode 100644 index 00000000..776cd7e1 --- /dev/null +++ b/benchmark/super_resolution_model_zoo/src/index.js @@ -0,0 +1,288 @@ +import * as tf from '@tensorflow/tfjs'; +import loadImage from 'blueimp-load-image'; +import ndarray from 'ndarray'; +import ops from 'ndarray-ops'; +import * as onnx from 'onnxjs'; + +// TODO this benchmark is extended based on the old resnet benchmark. Merge these 2 into a generic benchmarking tool. + +const IMAGE_URLS = [ + { name: 'cat', url: 'https://i.imgur.com/CzXTtJV.jpg' }, + ]; +const SERVER_BASE_PATH = '/base'; + +const BackendMapping = { + 'ONNX.js' : { + 'webgl': 'GPU-webgl', + }, + 'TensorFlow.js': { + 'webgl': 'GPU-webgl', + }, +} + +const BenchmarkImageNetData = [ + { + model: 'superResolution', + imageSize: 224, + testCases: [ + { + impl: 'TensorFlow.js', + modelPath: ``, + backends: [ 'webgl'], + inputs: IMAGE_URLS, + webglLevels: [2] + }, + { + impl: 'ONNX.js', + modelPath: `${SERVER_BASE_PATH}/data/model-onnx/super_resolution.onnx`, + backends: [ 'webgl'], + inputs: IMAGE_URLS, + webglLevels: [2] + }, + ] + }, +]; +class ImageLoader { + constructor(imageWidth, imageHeight) { + this.canvas = document.createElement('canvas'); + this.canvas.width = imageWidth; + this.canvas.height = imageHeight; + this.ctx = this.canvas.getContext('2d'); + } + async getImageData(url) { + await this.loadImageAsync(url); + const imageData = this.ctx.getImageData(0, 0, this.canvas.width, this.canvas.height); + return imageData; + } + loadImageAsync(url) { + return new Promise((resolve, reject)=>{ + this.loadImageCb(url, ()=>{ + resolve(); + }); + }); + } + loadImageCb(url, cb) { + loadImage( + url, + img => { + if (img.type === 'error') { + throw `Could not load image: ${url}`; + } else { + // load image data onto input canvas + this.ctx.drawImage(img, 0, 0) + //console.log(`image was loaded`); + window.setTimeout(() => { cb(); }, 0); + } + }, + { + maxWidth: this.canvas.width, + maxHeight: this.canvas.height, + cover: true, + crop: true, + canvas: true, + crossOrigin: 'Anonymous' + } + ); + } +} +function createBenchmark(name) { + switch (name) { + case 'TensorFlow.js': return new TensorFlowResnetBenchmark(); + case 'ONNX.js': return new OnnxJsResnetBenchmark(); + } +} +async function runBenchmark(benchmarkData, backend, imageSize) { + console.log(`runBenchmark is being called with ${benchmarkData.impl}, ${backend}, ${imageSize}`) + const impl = createBenchmark(benchmarkData.impl); + console.log(`impl: ${benchmarkData.impl}, modelPath: ${benchmarkData.modelPath}`) + await impl.init(backend, benchmarkData.modelPath, imageSize); + const imageLoader = new ImageLoader(imageSize, imageSize); + const durations = []; + for(const input of benchmarkData.inputs) { + console.log(`Running ${input.name}`) + const imageData = await imageLoader.getImageData(input.url); + for(let i = 0 ; i < 10; i++) { + const outputData = await impl.runModel(imageData.data); + durations.push(impl.duration); + } + } + if(profile) { + impl.endProfiling(); + } + durations.shift(); + const sum = durations.reduce((a,b)=>a+b); + const avg = sum / durations.length; + console.log(`avg duration: ${avg}`); + return { + framework: benchmarkData.impl, + backend: BackendMapping[benchmarkData.impl][backend], + duration: avg + }; +} + +class TensorFlowResnetBenchmark { + async init(backend, modelPath, imageSize) { + this.imageSize = imageSize; + tf.disposeVariables(); + tf.env().set('WEBGL_PACK', pack_texture); + console.log(`Pack mode enabled: ${tf.env().getBool('WEBGL_PACK')}`); + if(backend) { + console.log(`Setting the backend to ${backend}`); + tf.setBackend(backend); + } + const model = tf.sequential(); + model.add(tf.layers.conv2d({ + inputShape: [224,224,1], + kernelSize: [5,5], + padding: 'same', + filters: 64, + strides: 1, + activation: 'relu', + useBias: true, + biasInitializer: 'ones', + kernelInitializer: 'varianceScaling' + })); + model.add(tf.layers.conv2d({ + kernelSize: 3, + padding: 'same', + filters: 64, + strides: 1, + activation: 'relu', + useBias: true, + biasInitializer: 'ones', + kernelInitializer: 'varianceScaling' + })); + model.add(tf.layers.conv2d({ + kernelSize: 3, + padding: 'same', + filters: 32, + strides: 1, + activation: 'relu', + useBias: true, + biasInitializer: 'ones', + kernelInitializer: 'varianceScaling' + })); + model.add(tf.layers.conv2d({ + kernelSize: 3, + padding: 'same', + filters: 9, + strides: 1, + activation: 'relu', + useBias: true, + biasInitializer: 'ones', + kernelInitializer: 'varianceScaling' + })); + model.add(tf.layers.reshape({targetShape: [1,3,3,224,224]})) + model.add(tf.layers.permute({dims: [1, 4, 2, 5, 3]})); + model.add(tf.layers.reshape({targetShape: [1,672,672]})); + + this.model = model; + } + async runModel(data) { + const inputTensor = this.preprocess(data, this.imageSize, this.imageSize); + const start = performance.now(); + const output = await this.model.predict(inputTensor); + const outputData = output.dataSync(); + const stop = performance.now(); + this.duration = stop - start; + console.log(`Duration:${this.duration}ms`); + return outputData; + } + preprocess(data, width, height) { + // data processing + const dataTensor = ndarray(new Float32Array(data), [width, height, 1]) + const dataProcessedTensor = ndarray(new Float32Array(width * height * 1), [1, width, height, 1]) + + ops.subseq(dataTensor.pick(null, null, 2), 103.939) + ops.subseq(dataTensor.pick(null, null, 1), 116.779) + ops.subseq(dataTensor.pick(null, null, 0), 123.68) + ops.assign(dataProcessedTensor.pick(0, null, null, 0), dataTensor.pick(null, null, 2)) + ops.assign(dataProcessedTensor.pick(0, null, null, 1), dataTensor.pick(null, null, 1)) + ops.assign(dataProcessedTensor.pick(0, null, null, 2), dataTensor.pick(null, null, 0)) + + return tf.tensor(dataProcessedTensor.data, dataProcessedTensor.shape); + } + endProfiling() { + } +} +class OnnxJsResnetBenchmark { + async init(backend, modelPath, imageSize) { + onnx.backend.webgl.pack = pack_texture; + console.log(`Pack mode enabled: ${onnx.backend.webgl.pack}`); + + this.imageSize = imageSize; + const hint = {backendHint: backend }; + const profilerConfig = profile ? {maxNumberEvents: 65536} : undefined; + const loggerConfig = profile ? {logLevel: 'verbose'} : undefined; + const sessionConfig = {hint, profiler: profilerConfig, logger: loggerConfig}; + + this.model = new onnx.InferenceSession(sessionConfig); + if (profile) { + this.model.startProfiling(); + } + + await this.model.loadModel(modelPath); + } + async runModel(data) { + const preprocessedData = this.preprocess(data, this.imageSize, this.imageSize); + const start = performance.now(); + + const outputMap = await this.model.run([preprocessedData]); + const outputData = outputMap.values().next().value.data; + const stop = performance.now(); + this.duration = stop - start; + console.log(`Duration:${this.duration}ms`); + return outputData; + } + delay(ms) + { + return new Promise(resolve => setTimeout(resolve, ms)); + } + preprocess(data, width, height) { + // data processing + const dataTensor = ndarray(new Float32Array(data), [width, height, 1]); + const dataProcessedTensor = ndarray(new Float32Array(width * height * 1), [1, 1, width, height]); + + ops.divseq(dataTensor, 128.0); + ops.subseq(dataTensor, 1.0); + + ops.assign(dataProcessedTensor.pick(0, 0, null, null), dataTensor.pick(null, null, 2)); + ops.assign(dataProcessedTensor.pick(0, 1, null, null), dataTensor.pick(null, null, 1)); + ops.assign(dataProcessedTensor.pick(0, 2, null, null), dataTensor.pick(null, null, 0)); + + const tensor = new onnx.Tensor(dataProcessedTensor.data, 'float32', [1, 1, width, height]); + return tensor; + } + endProfiling() { + this.model.endProfiling(); + } +} +const results = []; +const browser = __karma__.config.browser[0]; +const profile = __karma__.config.profile; +const pack_texture = __karma__.config.usePackedGlTexture; + +console.log(`browser: ${browser}`) +describe('super resolution Tests', ()=> { + for(const modelTestcase of BenchmarkImageNetData) { + describe(`model: ${modelTestcase.model}`, ()=> { + for(const testCase of modelTestcase.testCases) { + for(const backend of testCase.backends) { + it(`testCase:${testCase.impl} ${backend}`, + async function() { + // rule 1: if only supports WebGL 2 then skip Edge + if(browser.startsWith('Edge') && backend === 'webgl' && !testCase.webglLevels.includes(1)) { + this.skip(); + return; + } + results.push(await runBenchmark(testCase, backend, modelTestcase.imageSize)); + } + ); + } + } + }); + } + after('printing results', ()=> { + console.log(JSON.stringify(results)); + }); +}); diff --git a/benchmark/super_resolution_model_zoo/webpack.conf.js b/benchmark/super_resolution_model_zoo/webpack.conf.js new file mode 100644 index 00000000..e8c8461e --- /dev/null +++ b/benchmark/super_resolution_model_zoo/webpack.conf.js @@ -0,0 +1,33 @@ +const webpack = require("webpack"); +const path = require('path'); +const fs = require('fs'); +const APP_DIR = path.resolve(__dirname, "./src/"); +const DIST_DIR = path.resolve(__dirname, "./dist/"); + +if (!fs.existsSync('dist')){ + fs.mkdirSync('dist'); +} +fs.createReadStream('../../dist/onnx-wasm.wasm').pipe(fs.createWriteStream('dist/onnx-wasm.wasm')); +fs.createReadStream('../../dist/onnx-worker.js').pipe(fs.createWriteStream('dist/onnx-worker.js')); + +module.exports = (env, argv) => { + const config = { + entry: APP_DIR + "/index.js", + output : { + path : DIST_DIR, + filename: "main.js" + }, + node: {fs: 'empty'}, + resolve: { + extensions: ['.js'] + } + }; + if (argv.mode === 'production') { + config.mode = 'production'; + config.devtool = 'source-map'; + } else { + config.mode = 'development'; + config.devtool = 'eval-source-map'; + } + return config; +}; diff --git a/lib/api/inference-session-impl.ts b/lib/api/inference-session-impl.ts index 7931e3fa..f1160443 100644 --- a/lib/api/inference-session-impl.ts +++ b/lib/api/inference-session-impl.ts @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +import {Logger} from '../instrument'; import {Session} from '../session'; import {Tensor as InternalTensor} from '../tensor'; @@ -16,7 +17,15 @@ type OutputType = InferenceSessionInterface.OutputType; export class InferenceSession implements InferenceSessionInterface { session: Session; constructor(config?: InferenceSessionInterface.Config) { - this.session = new Session(config); + const sessionConfig: Session.Config = {}; + sessionConfig.backendHint = config?.backendHint; + sessionConfig.profiler = config?.profiler; + if (config?.logger) { + const loggerConf = config?.logger; + sessionConfig.logger = {}; + sessionConfig.logger.minimalSeverity = loggerConf.logLevel ? loggerConf.logLevel as Logger.Severity : 'info'; + } + this.session = new Session(sessionConfig); } loadModel(uri: string): Promise; loadModel(blob: Blob): Promise; diff --git a/lib/api/inference-session.ts b/lib/api/inference-session.ts index 70769de1..7ad93e04 100644 --- a/lib/api/inference-session.ts +++ b/lib/api/inference-session.ts @@ -78,6 +78,16 @@ export declare namespace InferenceSession { */ flushIntervalInMilliseconds?: number; } + + /** + * represent the configuration of the logger that is used in an inference session + */ + export interface Logger { + /** + * the log level + */ + logLevel?: string; + } } /** @@ -94,6 +104,11 @@ export declare namespace InferenceSession { * specify the configuration of the profiler that used in an inference session */ profiler?: Config.Profiler; + + /** + * specify the configuration of the logger that used in an inference session + */ + logger?: Config.Logger; } /** diff --git a/lib/backends/webgl/program-manager.ts b/lib/backends/webgl/program-manager.ts index c708e74e..afcac18b 100644 --- a/lib/backends/webgl/program-manager.ts +++ b/lib/backends/webgl/program-manager.ts @@ -81,7 +81,7 @@ export class ProgramManager { return artifact; } catch (e) { - console.log(fragScript); + Logger.error('ProgramManager', fragScript); throw e; } }); diff --git a/lib/session.ts b/lib/session.ts index e103a834..696ccc0e 100644 --- a/lib/session.ts +++ b/lib/session.ts @@ -7,7 +7,7 @@ import {promisify} from 'util'; import {Backend, SessionHandlerType} from './backend'; import {ExecutionPlan} from './execution-plan'; import {Graph} from './graph'; -import {Profiler} from './instrument'; +import {Logger, Profiler} from './instrument'; import {Model} from './model'; import {Operator} from './operators'; import {Tensor} from './tensor'; @@ -16,6 +16,7 @@ export declare namespace Session { export interface Config { backendHint?: string; profiler?: Profiler.Config; + logger?: Logger.Config; } export interface Context { @@ -30,6 +31,10 @@ export class Session { this._initialized = false; this.backendHint = config.backendHint; this.profiler = Profiler.create(config.profiler); + if (config.logger) { + // tslint:disable-next-line:no-backbone-get-set-outside-model + Logger.set('', config.logger); + } this.context = {profiler: this.profiler, graphInputTypes: [], graphInputDims: []}; } From b6a6b30d66601cf591817d5e748006794907a505 Mon Sep 17 00:00:00 2001 From: Tixxx Date: Tue, 27 Apr 2021 00:31:45 -0700 Subject: [PATCH 4/7] added benchmark build folders to gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index f32fea01..3dd5fff1 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,9 @@ /tools/**/*.js /tools/**/*.js.map +/benchmark/**/node_modules/ +/benchmark/**/dist/ + npm-debug.log .DS_Store yarn-error.log From 347dbdf8ad749fe14e9eb5bcb267d7a22c6c47c2 Mon Sep 17 00:00:00 2001 From: Tixxx Date: Tue, 27 Apr 2021 09:43:02 -0700 Subject: [PATCH 5/7] minor comments --- benchmark/super_resolution_model_zoo/karma.conf.js | 1 - lib/backends/webgl/glsl-coordinate-lib.ts | 2 +- test/unittests/backends/webgl/test_depth_to_space.ts | 3 +-- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/benchmark/super_resolution_model_zoo/karma.conf.js b/benchmark/super_resolution_model_zoo/karma.conf.js index c90a1eab..92c2c1fc 100644 --- a/benchmark/super_resolution_model_zoo/karma.conf.js +++ b/benchmark/super_resolution_model_zoo/karma.conf.js @@ -1,5 +1,4 @@ // Karma configuration -// Generated on Thu Nov 01 2018 14:03:26 GMT-0700 (Pacific Daylight Time) const path = require('path') function getMachineIpAddress() { var os = require('os'); diff --git a/lib/backends/webgl/glsl-coordinate-lib.ts b/lib/backends/webgl/glsl-coordinate-lib.ts index ff20f0c3..dcdf6acc 100644 --- a/lib/backends/webgl/glsl-coordinate-lib.ts +++ b/lib/backends/webgl/glsl-coordinate-lib.ts @@ -479,7 +479,7 @@ export class CoordsGlslLib extends GlslLib { ivec5 getOutputCoords() { ivec2 resTexRC = ivec2(TexCoords.xy * vec2(${texShape[0]}, ${texShape[1]})); - int index = resTexRC.y * ${texShape[1]} + resTexRC.x; + int index = resTexRC.y * ${texShape[0]} + resTexRC.x; ${coordsFromIndexSnippet} return ivec5(r, c, d, d2, d3); } diff --git a/test/unittests/backends/webgl/test_depth_to_space.ts b/test/unittests/backends/webgl/test_depth_to_space.ts index b5e2c483..5795f6aa 100644 --- a/test/unittests/backends/webgl/test_depth_to_space.ts +++ b/test/unittests/backends/webgl/test_depth_to_space.ts @@ -56,8 +56,7 @@ describe('#UnitTest# - unpacked WebGLDepthToSpace - Tensor WebGLDepthToSpace', ( const inputTensorShape = testData.inputShape; const inputTextureShape = testData.inputTextureShape; - // create input data and tensor. The input data will be used to verify if the output tensor contains the - // same value but possibly different order depending on our packing algorithm. + // create input data and tensor. const inputData = testData.rawInput ? testData.rawInput : createAscendingArray(elementCount); const inputTensorA = new Tensor(inputTensorShape, 'float32', undefined, undefined, inputData); From d2dc883fa8b2c35ba8df94e49a920f1d4ca5cf65 Mon Sep 17 00:00:00 2001 From: Tixxx Date: Mon, 10 May 2021 10:00:37 -0700 Subject: [PATCH 6/7] fixed depth to space test failure --- lib/backends/webgl/glsl-coordinate-lib.ts | 2 +- lib/backends/webgl/ops/depth-to-space.ts | 77 +++++---- .../backends/webgl/test_depth_to_space.ts | 147 ++++++++++-------- 3 files changed, 126 insertions(+), 100 deletions(-) diff --git a/lib/backends/webgl/glsl-coordinate-lib.ts b/lib/backends/webgl/glsl-coordinate-lib.ts index dcdf6acc..6ad3d018 100644 --- a/lib/backends/webgl/glsl-coordinate-lib.ts +++ b/lib/backends/webgl/glsl-coordinate-lib.ts @@ -1275,7 +1275,7 @@ export class CoordsGlslLib extends GlslLib { const result: {[name: string]: GlslLibRoutine} = {}; this.context.programInfo.samplers.forEach((name, i) => { const layout = programInfo.inputLayouts[i]; - const shape = layout.shape; + const shape = layout.unpackedShape.length > 0 ? layout.unpackedShape : layout.shape; const rank = shape.length; let funcName = `_${name}`; result[funcName] = new GlslLibRoutine( diff --git a/lib/backends/webgl/ops/depth-to-space.ts b/lib/backends/webgl/ops/depth-to-space.ts index 9391a9ae..93b53690 100644 --- a/lib/backends/webgl/ops/depth-to-space.ts +++ b/lib/backends/webgl/ops/depth-to-space.ts @@ -1,48 +1,61 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +import {Attribute} from '../../../attribute'; import {DepthToSpace} from '../../../ops/depth-to-space'; import {Tensor} from '../../../tensor'; -import {getGlsl} from '../glsl-source'; import {WebGLInferenceHandler} from '../inference-handler'; -import {ProgramInfo, RunData} from '../types'; +import {Artifact, ProgramInfo, RunData} from '../types'; + +import {reshape} from './reshape'; +import {WebGLTranspose} from './transpose'; export class WebGLDepthToSpace extends DepthToSpace { + protected transposeProgramInfo: ProgramInfo; + + protected transposeArtifact: Artifact; + run(inferenceHandler: WebGLInferenceHandler, inputs: Tensor[]): Tensor[] { - return inferenceHandler.run(this, inputs); - } - createProgramInfo(handler: WebGLInferenceHandler, inputs: Tensor[]): ProgramInfo { - const inputLayout = handler.getOrCreateTextureLayout(inputs[0]); - const outputShape = this.getOutShape(inputs[0]); - const glsl = getGlsl(handler.session.backend.glContext.version); - const shaderSource = ` - void main() { - ivec4 coords = getOutputCoords(); - int b = coords[0]; - int d = coords[1]; - int h = coords[2]; - int w = coords[3]; + const programManager = inferenceHandler.session.programManager; + const transposePerm = this.mode === 'DCR' ? [0, 3, 4, 1, 5, 2] : [0, 1, 4, 2, 5, 3]; + const firstReshapeShape = this.mode === 'DCR' ? + [ + inputs[0].dims[0], this.blocksize, this.blocksize, inputs[0].dims[1] / this.blocksizeSqr, inputs[0].dims[2], + inputs[0].dims[3] + ] : + [ + inputs[0].dims[0], inputs[0].dims[1] / this.blocksizeSqr, this.blocksize, this.blocksize, inputs[0].dims[2], + inputs[0].dims[3] + ]; + + const transpose = new WebGLTranspose(); + const attributes = new Attribute(undefined); + attributes.set('perm', 'ints', transposePerm); + transpose.initialize(attributes); - int in_h = h / ${this.blocksize}; - int offset_h = imod(h, ${this.blocksize}); - int in_w = w / ${this.blocksize}; - int offset_w = imod(w, ${this.blocksize}); - int offset_d = (offset_h * ${this.blocksize} + offset_w) * - ${outputShape[1]}; - int in_depth = d + offset_d; + // First reshape - float result = getX(b, in_depth, in_h, in_w); - ${glsl.output} = vec4(result, 0, 0, 0); + const firstReshapedTensor = reshape(inferenceHandler, inputs[0], firstReshapeShape); + + // transpose + if (!this.transposeProgramInfo) { + this.transposeProgramInfo = transpose.createProgramInfo(inferenceHandler, [firstReshapedTensor]); + this.transposeArtifact = programManager.build(this.transposeProgramInfo); } - `; - return { - inputLayouts: [inputLayout], - outputLayout: handler.createTextureLayoutFromShape(outputShape), - samplers: ['X'], - shaderSource, - hasMain: true - }; + const runDataTranspose = + transpose.createRunData(inferenceHandler, this.transposeProgramInfo, [firstReshapedTensor]); + inferenceHandler.checkAndUpdateTextureForm(this.transposeArtifact, runDataTranspose); + programManager.run(this.transposeArtifact, runDataTranspose); + const transposeOutput = runDataTranspose.outputTextureData.tensor; + + // Second reshape + const result = reshape(inferenceHandler, transposeOutput, [ + inputs[0].dims[0], inputs[0].dims[1] / this.blocksizeSqr, inputs[0].dims[2] * this.blocksize, + inputs[0].dims[3] * this.blocksize + ]); + return [result]; } + protected getOutShape(input: Tensor): number[] { const batchSize = input.dims[0]; const inputDepth = input.dims[1]; diff --git a/test/unittests/backends/webgl/test_depth_to_space.ts b/test/unittests/backends/webgl/test_depth_to_space.ts index 5795f6aa..0569d709 100644 --- a/test/unittests/backends/webgl/test_depth_to_space.ts +++ b/test/unittests/backends/webgl/test_depth_to_space.ts @@ -9,10 +9,8 @@ import {WebGLInferenceHandler} from '../../../../lib/backends/webgl/inference-ha import {WebGLDepthToSpace} from '../../../../lib/backends/webgl/ops/depth-to-space'; import {Profiler} from '../../../../lib/instrument'; import {Tensor} from '../../../../lib/tensor'; -import {ShapeUtil} from '../../../../lib/util'; import {createAscendingArray} from './test_utils'; -import {createTextureFromArray, generateArrayForUnpackedTexture} from './test_utils'; let backend: Backend|undefined; let sessionhandler: SessionHandler|undefined; @@ -22,8 +20,6 @@ describe('#UnitTest# - unpacked WebGLDepthToSpace - Tensor WebGLDepthToSpace', ( before('Initialize Context', async () => { const profiler = Profiler.create(); backend = await Backend('webgl'); - // Explicitly set to true to trigger packed version - (backend as WebGLBackend).pack = false; sessionhandler = backend.createSessionHandler({profiler}); inferenceHandler = sessionhandler.createInferenceHandler(); }); @@ -50,57 +46,30 @@ describe('#UnitTest# - unpacked WebGLDepthToSpace - Tensor WebGLDepthToSpace', ( const attributes = new Attribute(undefined); const blocksize = testData.blocksize; attributes.set('blocksize', 'int', blocksize); + attributes.set('mode', 'string', testData.mode as string); op.initialize(attributes); const elementCount = testData.elementCount; const inputTensorShape = testData.inputShape; - const inputTextureShape = testData.inputTextureShape; // create input data and tensor. const inputData = testData.rawInput ? testData.rawInput : createAscendingArray(elementCount); const inputTensorA = new Tensor(inputTensorShape, 'float32', undefined, undefined, inputData); // manually creat packed texture from inputTensor, and insert in cache - const gl = webglInferenceHandler.session.textureManager.glContext.gl; webglInferenceHandler.session.textureManager.glContext.checkError(); - const webglTextureA = createTextureFromArray( - webglInferenceHandler.session.textureManager.glContext, - generateArrayForUnpackedTexture(testData.rawInput ? testData.rawInput : inputData), gl.RGBA, - inputTextureShape[0], inputTextureShape[1]); webglInferenceHandler.session.textureManager.glContext.checkError(); - const textureDataA = { - width: inputTextureShape[0], - height: inputTextureShape[1], - channels: 1 as const, - isPacked: false, - shape: inputTextureShape, - strides: ShapeUtil.computeStrides(inputTextureShape), - unpackedShape: inputTensorShape, - tensor: inputTensorA, - texture: webglTextureA! - }; - - webglInferenceHandler.setTextureData(inputTensorA.dataId, textureDataA); - - // compile shader code - const programInfo = op.createProgramInfo(inferenceHandler! as WebGLInferenceHandler, [inputTensorA]); - - const artifact = webglInferenceHandler.session.programManager.build(programInfo); - webglInferenceHandler.session.programManager.setArtifact(op, artifact); - - // run kernal and get output - const runData = op.createRunData(webglInferenceHandler, artifact.programInfo, [inputTensorA]); - webglInferenceHandler.session.programManager.run(artifact, runData); - const result = runData.outputTextureData.tensor.data; + + const result = op.run(webglInferenceHandler, [inputTensorA]); webglInferenceHandler.session.textureManager.glContext.checkError(); // verify result. const expectedOutput = testData.expectedOutput; - expect(result).to.not.equal(null); + expect(result[0].data).to.not.equal(null); - expect(result).to.have.lengthOf(elementCount); - expect(result).to.deep.equal(expectedOutput); + expect(result[0].data).to.have.lengthOf(elementCount); + expect(result[0].data).to.deep.equal(expectedOutput); }); } }); @@ -127,36 +96,80 @@ function getTestData(): TestData[] { outputTextureShape: [4, 2], rawInput: new Float32Array([0., 9., 18., 27., 36., 45., 54., 63.]), expectedOutput: new Float32Array([0., 18., 36., 54., 9., 27., 45., 63.]), + mode: 'DCR', + }, + { + elementCount: 16, + blocksize: 2, + inputShape: [1, 8, 1, 2], + outputShape: [1, 2, 4, 2], + inputTextureShape: [1, 16], + outputTextureShape: [8, 2], + rawInput: new Float32Array([0., 1., 9., 10, 18., 19, 27., 28., 36., 37., 45., 46., 54., 55., 63., 64.]), + expectedOutput: new Float32Array([0, 18, 1, 19, 36, 54, 37, 55, 9, 27, 10, 28, 45, 63, 46, 64]), + mode: 'DCR', + }, + + { + elementCount: 48, + blocksize: 2, + inputShape: [1, 8, 2, 3], + outputShape: [1, 2, 4, 6], + inputTextureShape: [16, 3], + outputTextureShape: [8, 6], + rawInput: new Float32Array([ + 0., 1., 2., 3., 4., 5., 9., 10., 11., 12., 13., 14., 18., 19., 20., 21., + 22., 23., 27., 28., 29., 30., 31., 32., 36., 37., 38., 39., 40., 41., 45., 46., + 47., 48., 49., 50., 54., 55., 56., 57., 58., 59., 63., 64., 65., 66., 67., 68. + ]), + expectedOutput: new Float32Array([ + 0., 18., 1., 19., 2., 20., 36., 54., 37., 55., 38., 56., 3., 21., 4., 22., + 5., 23., 39., 57., 40., 58., 41., 59., 9., 27., 10., 28., 11., 29., 45., 63., + 46., 64., 47., 65., 12., 30., 13., 31., 14., 32., 48., 66., 49., 67., 50., 68. + ]), + mode: 'DCR', + }, + { + elementCount: 8, + blocksize: 2, + inputShape: [1, 8, 1, 1], + outputShape: [1, 2, 2, 2], + inputTextureShape: [8, 1], + outputTextureShape: [4, 2], + rawInput: new Float32Array([0., 9., 18., 27., 36., 45., 54., 63.]), + expectedOutput: new Float32Array([0, 9, 18, 27, 36, 45, 54, 63]), + mode: 'CRD', + }, + { + elementCount: 16, + blocksize: 2, + inputShape: [1, 8, 1, 2], + outputShape: [1, 2, 4, 2], + inputTextureShape: [1, 16], + outputTextureShape: [8, 2], + rawInput: new Float32Array([0., 1., 9., 10, 18., 19, 27., 28., 36., 37., 45., 46., 54., 55., 63., 64.]), + expectedOutput: new Float32Array([0, 9, 1, 10, 18, 27, 19, 28, 36, 45, 37, 46, 54, 63, 55, 64]), + mode: 'CRD', + }, + + { + elementCount: 48, + blocksize: 2, + inputShape: [1, 8, 2, 3], + outputShape: [1, 2, 4, 6], + inputTextureShape: [16, 3], + outputTextureShape: [8, 6], + rawInput: new Float32Array([ + 0., 1., 2., 3., 4., 5., 9., 10., 11., 12., 13., 14., 18., 19., 20., 21., + 22., 23., 27., 28., 29., 30., 31., 32., 36., 37., 38., 39., 40., 41., 45., 46., + 47., 48., 49., 50., 54., 55., 56., 57., 58., 59., 63., 64., 65., 66., 67., 68. + ]), + expectedOutput: new Float32Array([ + 0., 9., 1., 10., 2., 11., 18., 27., 19., 28., 20., 29., 3., 12., 4., 13., + 5., 14., 21., 30., 22., 31., 23., 32., 36., 45., 37., 46., 38., 47., 54., 63., + 55., 64., 56., 65., 39., 48., 40., 49., 41., 50., 57., 66., 58., 67., 59., 68. + ]), + mode: 'CRD', }, - // { - // elementCount: 16, - // blocksize: 2, - // inputShape: [1, 8, 2, 1], - // outputShape: [1, 2, 4, 2], - // inputTextureShape: [16, 1], - // outputTextureShape: [8, 2], - // rawInput: new Float32Array([0., 1., 9., 10, 18., 19, 27., 28., 36., 37., 45., 46., 54., 55., 63., 64.]), - // expectedOutput: new - // Float32Array([0., 18., 1., 19., 36., 54., 37., 55., 9., 27., 10., 28., 45., 63., 46., 64.]), - // }, - - // { - // elementCount: 48, - // blocksize: 2, - // inputShape: [1, 8, 2, 3], - // outputShape: [1, 2, 4, 6], - // inputTextureShape: [16, 3], - // outputTextureShape: [8, 6], - // rawInput: new Float32Array([ - // 0., 1., 2., 3., 4., 5., 9., 10., 11., 12., 13., 14., 18., 19., 20., 21., - // 22., 23., 27., 28., 29., 30., 31., 32., 36., 37., 38., 39., 40., 41., 45., 46., - // 47., 48., 49., 50., 54., 55., 56., 57., 58., 59., 63., 64., 65., 66., 67., 68. - // ]), - // expectedOutput: new Float32Array([ - // 0., 18., 1., 19., 2., 20., 36., 54., 37., 55., 38., 56., 3., 21., 4., 22., - // 5., 23., 39., 57., 40., 58., 41., 59., 9., 27., 10., 28., 11., 29., 45., 63., - // 46., 64., 47., 65., 12., 30., 13., 31., 14., 32., 48., 66., 49., 67., 50., 68. - // ]), - // }, ]; } From 4c5d97920e36f330fa6e466822b7579834dfe15b Mon Sep 17 00:00:00 2001 From: Tixxx Date: Tue, 11 May 2021 10:24:32 -0700 Subject: [PATCH 7/7] fixed correctness for both depthToSpace and new packed matmul migrating this to the new repo... --- .../super_resolution_model_zoo/karma.conf.js | 1 + .../super_resolution_model_zoo/package.json | 4 +- .../super_resolution_model_zoo/src/index.js | 6 +- lib/backends/webgl/ops/conv-pack.ts | 11 +- lib/backends/webgl/ops/matmul-pack.ts | 73 +++--- .../backends/webgl/test_matmul_packed.ts | 247 ++++++++++++++++++ test/unittests/index.ts | 1 + 7 files changed, 302 insertions(+), 41 deletions(-) create mode 100644 test/unittests/backends/webgl/test_matmul_packed.ts diff --git a/benchmark/super_resolution_model_zoo/karma.conf.js b/benchmark/super_resolution_model_zoo/karma.conf.js index 92c2c1fc..1daabad6 100644 --- a/benchmark/super_resolution_model_zoo/karma.conf.js +++ b/benchmark/super_resolution_model_zoo/karma.conf.js @@ -59,6 +59,7 @@ module.exports = function(config) { printMatches: false, // To enable pack, run 'PACK=1 npm run test' usePackedGlTexture: config.usePackedGlTexture==1 ? true : false, + runIteration: config.runIteration ? config.runIteration : 10, profile: config.profile }, browsers: ['ChromeTest', 'ChromeDebug', 'Edge', 'Safari'], diff --git a/benchmark/super_resolution_model_zoo/package.json b/benchmark/super_resolution_model_zoo/package.json index 76867407..f5a9b000 100644 --- a/benchmark/super_resolution_model_zoo/package.json +++ b/benchmark/super_resolution_model_zoo/package.json @@ -6,8 +6,8 @@ "scripts": { "build": "webpack --config ./webpack.conf.js --mode production", "build-debug": "webpack --config ./webpack.conf.js --mode development", - "test": "karma start --browsers ChromeTest --single-run --usePackedGlTexture=$PACK", - "profile": "karma start --browsers ChromeTest --single-run --profile --usePackedGlTexture=$PACK", + "test": "karma start --browsers ChromeTest --single-run --usePackedGlTexture=$PACK --runIteration=$RUNCOUNT", + "profile": "karma start --browsers ChromeTest --single-run --profile --usePackedGlTexture=$PACK --runIteration=$RUNCOUNT", "test-debug": "karma start --browsers ChromeDebug", "test-edge": "karma start --browsers Edge --single-run", "test-safari": "karma start --browsers Safari --single-run" diff --git a/benchmark/super_resolution_model_zoo/src/index.js b/benchmark/super_resolution_model_zoo/src/index.js index 776cd7e1..725ed246 100644 --- a/benchmark/super_resolution_model_zoo/src/index.js +++ b/benchmark/super_resolution_model_zoo/src/index.js @@ -99,9 +99,9 @@ async function runBenchmark(benchmarkData, backend, imageSize) { const imageLoader = new ImageLoader(imageSize, imageSize); const durations = []; for(const input of benchmarkData.inputs) { - console.log(`Running ${input.name}`) + console.log(`Running ${input.name} for ${runIteration} iterations.`) const imageData = await imageLoader.getImageData(input.url); - for(let i = 0 ; i < 10; i++) { + for(let i = 0 ; i < runIteration; i++) { const outputData = await impl.runModel(imageData.data); durations.push(impl.duration); } @@ -125,6 +125,7 @@ class TensorFlowResnetBenchmark { this.imageSize = imageSize; tf.disposeVariables(); tf.env().set('WEBGL_PACK', pack_texture); + console.log(`Pack mode enabled: ${tf.env().getBool('WEBGL_PACK')}`); if(backend) { console.log(`Setting the backend to ${backend}`); @@ -261,6 +262,7 @@ const results = []; const browser = __karma__.config.browser[0]; const profile = __karma__.config.profile; const pack_texture = __karma__.config.usePackedGlTexture; +const runIteration = __karma__.config.runIteration; console.log(`browser: ${browser}`) describe('super resolution Tests', ()=> { diff --git a/lib/backends/webgl/ops/conv-pack.ts b/lib/backends/webgl/ops/conv-pack.ts index 414bf64d..cb130279 100644 --- a/lib/backends/webgl/ops/conv-pack.ts +++ b/lib/backends/webgl/ops/conv-pack.ts @@ -15,7 +15,7 @@ import {WebGLReshapePacked} from './reshape-packed'; export class WebGLConvPacked extends Conv { protected artifacts: Artifact[]; protected programInfo: ProgramInfo[]; - + protected outputShape: number[]; run(inferenceHandler: WebGLInferenceHandler, inputs: Tensor[]): Tensor[] { const programManager = inferenceHandler.session.programManager; const xshape = inputs[0].dims.slice(); @@ -33,8 +33,8 @@ export class WebGLConvPacked extends Conv { `autpPad:${this.autoPad}, dilations:${this.dilations}, group:${this.group}, kernelShape:${ this.kernelShape}, pads:${this.pads}, strides:${this.strides}`); - const outputShape = WebGLConv.calcOutputShape(xshape, kshape, this.dilations, this.pads, this.strides); - const im2col = new WebGLIm2ColPacked(outputShape, kshape, this.dilations, this.pads, this.strides); + this.outputShape = WebGLConv.calcOutputShape(xshape, kshape, this.dilations, this.pads, this.strides); + const im2col = new WebGLIm2ColPacked(this.outputShape, kshape, this.dilations, this.pads, this.strides); const matmul = new WebGLMatMulPacked(); const reshape = new WebGLReshapePacked(); // shape for kernel reshape @@ -76,11 +76,10 @@ export class WebGLConvPacked extends Conv { inferenceHandler.checkAndUpdateTextureForm(this.artifacts[2], runDataMatmul); programManager.run(this.artifacts[2], runDataMatmul); const matmulOutput = runDataMatmul.outputTextureData.tensor; - // reshape output const outputShapeTensor = new Tensor( - [outputShape.length], 'int32', undefined, undefined, - new Int32Array([outputShape[0], outputShape[1], outputShape[2], outputShape[3]])); + [this.outputShape.length], 'int32', undefined, undefined, + new Int32Array([this.outputShape[0], this.outputShape[1], this.outputShape[2], this.outputShape[3]])); assert(this.artifacts.length > 2, () => 'expect at least 3 artifacts created'); if (this.artifacts.length === 3) { diff --git a/lib/backends/webgl/ops/matmul-pack.ts b/lib/backends/webgl/ops/matmul-pack.ts index 2f9e714e..eeefa90b 100644 --- a/lib/backends/webgl/ops/matmul-pack.ts +++ b/lib/backends/webgl/ops/matmul-pack.ts @@ -4,8 +4,10 @@ import {MatMul} from '../../../ops/matmul'; import {Tensor} from '../../../tensor'; import {BroadcastUtil} from '../../../util'; +import {getGlsl} from '../glsl-source'; import {WebGLInferenceHandler} from '../inference-handler'; import {ProgramInfo, RunData, WebGLOperator} from '../types'; +import {getCoordsDataType} from '../utils'; export class WebGLMatMulPacked extends MatMul implements WebGLOperator { run(inferenceHandler: WebGLInferenceHandler, inputs: Tensor[]): Tensor[] { @@ -13,7 +15,7 @@ export class WebGLMatMulPacked extends MatMul implements WebGLOperator { } createProgramInfo(handler: WebGLInferenceHandler, inputs: Tensor[]): ProgramInfo { const hasBias = inputs.length > 2; - const processBias = hasBias ? `value += vec4(getBias(a[0]*2).xx, getBias(a[0]*2).yy);` : ``; + const processBias = hasBias ? 'result += getBiasAtOutCoords();' : ''; const aShape = inputs[0].dims; const bShape = inputs[1].dims; const outputShape = BroadcastUtil.calcShape(aShape, bShape, true); @@ -21,34 +23,43 @@ export class WebGLMatMulPacked extends MatMul implements WebGLOperator { if (!outputShape) { throw new Error('Can\'t use matmul on the given tensors'); } - const rank = outputShape.length; + + const sharedDim = aShape[aShape.length - 1]; + const sharedDimIndex = Math.ceil(sharedDim / 2); + const aRank = aShape.length; const bRank = bShape.length; - const sharedDim = aShape[aShape.length - 1]; - // TODO:fix broadcasting + + const glsl = getGlsl(handler.session.backend.glContext.version); + const coordsDataType = getCoordsDataType(outputShape.length); + const allGlChannels = ['x', 'y', 'z', 'w', 'u', 'v']; + const shaderSource = ` - vec4 process(int indices[${rank}]) { - int a[${aRank}]; - int b[${bRank}]; - bcastMatmulIndices_A(indices, a); - bcastMatmulIndices_B(indices, b); + void main() { + ${coordsDataType} rc = getOutputCoords(); + + vec4 result = vec4(0); + + for (int i = 0; i < ${sharedDimIndex}; i++) { + vec4 a = getA(${getA(allGlChannels, aRank)}); + vec4 b = getB(${getB(allGlChannels, bRank)}); + + result += (a.rrbb * b.rgrg); + result += (a.ggaa * b.baba); + } + + ${processBias} + + ${glsl.output} = result; + }`; - vec4 value; - for (int k=0; k<((${sharedDim}+1)/2); ++k) { - a[${aRank - 1}] = k; - b[${bRank - 2}] = k; - value += ${getA(aRank)}.rrbb * ${getB(bRank)}.rgrg; - value += ${getA(aRank)}.ggaa * ${getB(bRank)}.baba; - } - ${processBias} - return value; - }`; return { inputLayouts: inputs.map((t, i) => handler.getOrCreateTextureLayout(t, 4, true, inputs[i].dims, true)), outputLayout: handler.createTextureLayoutFromShape(outputShape, 4, outputShape, {isPacked: true, reverseWH: true}), samplers: hasBias ? ['A', 'B', 'Bias'] : ['A', 'B'], shaderSource, + hasMain: true, expectPackedInputs: true, expectPackedOutputs: true, }; @@ -64,22 +75,22 @@ export class WebGLMatMulPacked extends MatMul implements WebGLOperator { } } -function getA(outputRank: number): string { - let res = 'getA('; - for (let i = 0; i < outputRank - 2; i++) { - res += `a[${i}], `; +function getA(allGlChannels: string[], rank: number): string { + let res = ''; + for (let i = 0; i < rank - 2; i++) { + res += `rc.${allGlChannels[i]}, `; } - res += `a[${outputRank - 2}]*2, ` + - 'k*2)'; + res += `rc.${allGlChannels[rank - 2]}, ` + + 'i<<1'; return res; } -function getB(outputRank: number): string { - let res = 'getB('; - for (let i = 0; i < outputRank - 2; i++) { - res += `b[${i}], `; +function getB(allGlChannels: string[], rank: number): string { + let res = ''; + for (let i = 0; i < rank - 2; i++) { + res += `rc.${allGlChannels[i]}, `; } - res += 'k*2, ' + - `b[${outputRank - 1}]*2)`; + res += 'i<<1, ' + + `rc.${allGlChannels[rank - 1]}`; return res; } diff --git a/test/unittests/backends/webgl/test_matmul_packed.ts b/test/unittests/backends/webgl/test_matmul_packed.ts new file mode 100644 index 00000000..f4eeab9b --- /dev/null +++ b/test/unittests/backends/webgl/test_matmul_packed.ts @@ -0,0 +1,247 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. +import {expect} from 'chai'; + +import {Backend, InferenceHandler, SessionHandler} from '../../../../lib/backend'; +import {WebGLBackend} from '../../../../lib/backends/backend-webgl'; +import {WebGLInferenceHandler} from '../../../../lib/backends/webgl/inference-handler'; +import {WebGLMatMulPacked} from '../../../../lib/backends/webgl/ops/matmul-pack'; +import {Profiler} from '../../../../lib/instrument'; +import {Tensor} from '../../../../lib/tensor'; +import {ShapeUtil} from '../../../../lib/util'; + +import {createAscendingArray} from './test_utils'; +import {createTextureFromArray} from './test_utils'; + +let backend: Backend|undefined; +let sessionhandler: SessionHandler|undefined; +let inferenceHandler: InferenceHandler|undefined; + +describe('#UnitTest# - packed matmul - Tensor matmul', () => { + before('Initialize Context', async () => { + const profiler = Profiler.create(); + backend = await Backend('webgl'); + // Explicitly set to true to trigger packed version + (backend as WebGLBackend).pack = true; + sessionhandler = backend.createSessionHandler({profiler}); + inferenceHandler = sessionhandler.createInferenceHandler(); + }); + + // Set it back to false, apparently this state is sticky throughout all the tests running in same browser session.. + after('Resetting Context', () => { + (backend as WebGLBackend).pack = false; + }); + + const testDataSet = getTestData(); + for (let k = 0; k < testDataSet.length; ++k) { + const testData = testDataSet[k]; + describe(`Test matmul ${JSON.stringify(testData)}`, () => {}); + it(`Test packed matmul kernel `, () => { + const webglInferenceHandler = inferenceHandler as WebGLInferenceHandler; + + // TODO support WebGl 1.0 + if (webglInferenceHandler.session.textureManager.glContext.version === 1) { + console.log('Running packed matmul with webgl1 is not supported. Skipping.'); + return; + } + + const op = new WebGLMatMulPacked(); + + const elementCountA = testData.elementCountA; + const elementCountB = testData.elementCountB; + + const inputTensorShapeA = testData.inputShapeA; + const inputTextureShapeA = testData.inputTextureShapeA; + + const inputTensorShapeB = testData.inputShapeB; + const inputTextureShapeB = testData.inputTextureShapeB; + + // create input data and tensor. The input data will be used to verify if the output tensor contains the + // same value but possibly different order depending on our packing algorithm. + const inputDataA = createAscendingArray(elementCountA); + const inputDataB = createAscendingArray(elementCountB); + const inputTensorA = new Tensor(inputTensorShapeA, 'float32', undefined, undefined, inputDataA); + const inputTensorB = new Tensor(inputTensorShapeB, 'float32', undefined, undefined, inputDataB); + + // manually creat packed texture from inputTensor, and insert in cache + const gl = webglInferenceHandler.session.textureManager.glContext.gl; + + webglInferenceHandler.session.textureManager.glContext.checkError(); + const webglTextureA = createTextureFromArray( + webglInferenceHandler.session.textureManager.glContext, testData.rawInputA ? testData.rawInputA : inputDataA, + gl.RGBA, inputTextureShapeA[0], inputTextureShapeA[1]); + const webglTextureB = createTextureFromArray( + webglInferenceHandler.session.textureManager.glContext, testData.rawInputB ? testData.rawInputB : inputDataB, + gl.RGBA, inputTextureShapeB[0], inputTextureShapeB[1]); + + webglInferenceHandler.session.textureManager.glContext.checkError(); + const packedShapeA = inputTextureShapeA; + const textureDataA = { + width: inputTextureShapeA[0], + height: inputTextureShapeA[1], + channels: 4 as const, + isPacked: true, + shape: packedShapeA, + strides: ShapeUtil.computeStrides(packedShapeA), + unpackedShape: inputTensorShapeA, + tensor: inputTensorA, + texture: webglTextureA! + }; + + const packedShapeB = inputTextureShapeB; + const textureDataB = { + width: inputTextureShapeB[0], + height: inputTextureShapeB[1], + channels: 4 as const, + isPacked: true, + shape: packedShapeB, + strides: ShapeUtil.computeStrides(packedShapeB), + unpackedShape: inputTensorShapeB, + tensor: inputTensorB, + texture: webglTextureB! + }; + + webglInferenceHandler.setTextureData(inputTensorA.dataId, textureDataA, true); + webglInferenceHandler.setTextureData(inputTensorB.dataId, textureDataB, true); + + const inputList = testData.biasValue ? + [ + inputTensorA, inputTensorB, + new Tensor([1], 'float32', undefined, undefined, new Float32Array([testData.biasValue])) + ] : + [inputTensorA, inputTensorB]; + + // compile shader code + const programInfo = op.createProgramInfo(inferenceHandler! as WebGLInferenceHandler, inputList); + + const artifact = webglInferenceHandler.session.programManager.build(programInfo); + webglInferenceHandler.session.programManager.setArtifact(op, artifact); + + // run kernal and get output + const runData = op.createRunData(webglInferenceHandler, artifact.programInfo, inputList); + webglInferenceHandler.session.programManager.run(artifact, runData); + const result = runData.outputTextureData.tensor.data; + + webglInferenceHandler.session.textureManager.glContext.checkError(); + // verify result. + const expectedOutput = testData.expectedOutput; + expect(result).to.not.equal(null); + let batchMultiplier = 1; + if (testData.inputShapeA.length > 2) { + batchMultiplier = testData.inputShapeA[0]; + } + if (testData.inputShapeB.length > 2) { + batchMultiplier = Math.max(batchMultiplier, testData.inputShapeB[0]); + } + + expect(result).to.have.lengthOf( + batchMultiplier * testData.inputShapeA[testData.inputShapeA.length - 2] * + testData.inputShapeB[testData.inputShapeB.length - 1]); + expect(result).to.deep.equal(expectedOutput); + }); + } +}); +interface TestData { + elementCountA: number; + elementCountB: number; + inputShapeA: number[]; + inputShapeB: number[]; + outputShape: number[]; + inputTextureShapeA: number[]; + inputTextureShapeB: number[]; + outputTextureShape: number[]; + expectedOutput: Float32Array; + // The value of bias matrix that will be broadcasted to the corresponding shape in matmul. + // i.e. If biasValue = 1, then bias matrix is [1], when being added to 2x2 matmul result, it will be bcasted to + // [1, 1] + // [1, 1] + biasValue?: number; + // If empty, the test will use auto-generated data. + rawInputA?: Float32Array; + // If empty, the test will use auto-generated data. + rawInputB?: Float32Array; +} +function getTestData(): TestData[] { + return [ + // test 2D tensor + { + elementCountA: 4, + elementCountB: 4, + inputShapeA: [2, 2], + inputShapeB: [2, 2], + outputShape: [2, 2], + inputTextureShapeA: [1, 1], + inputTextureShapeB: [1, 1], + outputTextureShape: [1, 1], + expectedOutput: new Float32Array([7, 10, 15, 22]), + }, + { + elementCountA: 4, + elementCountB: 4, + inputShapeA: [2, 2], + inputShapeB: [2, 2], + outputShape: [2, 2], + inputTextureShapeA: [1, 1], + inputTextureShapeB: [1, 1], + outputTextureShape: [1, 1], + biasValue: 1, + expectedOutput: new Float32Array([8, 11, 16, 23]), + }, + { + elementCountA: 6, + elementCountB: 6, + inputShapeA: [2, 3], + inputShapeB: [3, 2], + outputShape: [2, 2], + inputTextureShapeA: [2, 1], + inputTextureShapeB: [1, 2], + outputTextureShape: [1, 1], + expectedOutput: new Float32Array([22, 28, 49, 64]), + rawInputA: new Float32Array([1, 2, 4, 5, 3, 0, 6, 0]), + rawInputB: new Float32Array([1, 2, 3, 4, 5, 6, 0, 0]), + }, + { + elementCountA: 6, + elementCountB: 6, + inputShapeA: [2, 3], + inputShapeB: [3, 2], + outputShape: [2, 2], + inputTextureShapeA: [2, 1], + inputTextureShapeB: [1, 2], + outputTextureShape: [1, 1], + expectedOutput: new Float32Array([23, 29, 50, 65]), + biasValue: 1, + rawInputA: new Float32Array([1, 2, 4, 5, 3, 0, 6, 0]), + rawInputB: new Float32Array([1, 2, 3, 4, 5, 6, 0, 0]), + }, + { + elementCountA: 12, + elementCountB: 12, + inputShapeA: [2, 2, 3], + inputShapeB: [2, 3, 2], + outputShape: [2, 2, 2], + inputTextureShapeA: [2, 2], + inputTextureShapeB: [1, 4], + outputTextureShape: [2, 1], + expectedOutput: new Float32Array([23, 29, 50, 65, 23, 29, 50, 65]), + biasValue: 1, + rawInputA: new Float32Array([1, 2, 4, 5, 3, 0, 6, 0, 1, 2, 4, 5, 3, 0, 6, 0]), + rawInputB: new Float32Array([1, 2, 3, 4, 5, 6, 0, 0, 1, 2, 3, 4, 5, 6, 0, 0]), + }, + // test bcast + { + elementCountA: 12, + elementCountB: 6, + inputShapeA: [2, 2, 3], + inputShapeB: [3, 2], + outputShape: [2, 2, 2], + inputTextureShapeA: [2, 2], + inputTextureShapeB: [1, 2], + outputTextureShape: [2, 1], + expectedOutput: new Float32Array([23, 29, 50, 65, 23, 29, 50, 65]), + biasValue: 1, + rawInputA: new Float32Array([1, 2, 4, 5, 3, 0, 6, 0, 1, 2, 4, 5, 3, 0, 6, 0]), + rawInputB: new Float32Array([1, 2, 3, 4, 5, 6, 0, 0]), + }, + ]; +} diff --git a/test/unittests/index.ts b/test/unittests/index.ts index 13a5575c..3c26b870 100644 --- a/test/unittests/index.ts +++ b/test/unittests/index.ts @@ -10,6 +10,7 @@ if (typeof window !== 'undefined' && !onnx.backend.webgl.disabled) { require('./backends/webgl/test_concat_packed'); require('./backends/webgl/test_depth_to_space'); require('./backends/webgl/test_reshape_packed'); + require('./backends/webgl/test_matmul_packed'); } // require('./api/onnx');