├── .gitignore
├── index.js
├── conf
├── build.webpack.config.js
└── dev.webpack.config.js.js
├── .github
└── ISSUE_TEMPLATE
│ ├── documenation-request.md
│ ├── feature_request.md
│ └── bug_report.md
├── example
├── index.html
└── index.js
├── package.json
├── LICENSE
├── scripted.js
├── README.md
├── Storage.js
├── Recovery.js
├── Numworks.js
└── pnpm-lock.yaml
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | build
3 | npm-debug.log
4 | .env
5 | .DS_Store
6 | dist
7 |
8 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 |
2 | const Numworks = require("./Numworks");
3 |
4 | module.exports = Numworks;
5 |
6 |
--------------------------------------------------------------------------------
/conf/build.webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | module.exports = {
3 | // the enter path
4 | entry: "./index.js",
5 | output: {
6 | path: path.resolve(__dirname, '../dist/'),
7 | filename: 'numworks.js',
8 | library: 'Numworks'
9 | }
10 | }
11 |
12 |
--------------------------------------------------------------------------------
/conf/dev.webpack.config.js.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | module.exports = {
3 | // the enter path
4 | entry: "./example/index.js",
5 | devServer: {
6 | contentBase: './example/',
7 | port: 3000,
8 | index: 'index.html'
9 | },
10 | optimization: {
11 | minimize: false
12 | }
13 | }
14 |
15 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/documenation-request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Documenation request
3 | about: Ask for addition of documentation
4 | title: "[doc]"
5 | labels: documentation, sorting
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe what should be documented**
11 | A clear and concise description of where the doc is missing.
12 |
13 | **What type of doc should it be**
14 | In-code documentation, wiki, in-repo markdown, ...
15 |
--------------------------------------------------------------------------------
/example/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Blank HTML project
5 |
6 |
7 |
8 |
9 |
10 | Numworks.js example
11 |
12 |
13 |
Status: Disconnected.
14 |
15 |
16 | Please connect your Numworks.
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: "[feature]"
5 | labels: enhancement, sorting
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: "[bug] "
5 | labels: bug, sorting
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Environment (please complete the following information):**
27 | - OS: [e.g. iOS, Android]
28 | - Browser [e.g. chrome, safari]
29 | - Version [e.g. 22]
30 |
31 | **Additional context**
32 | Add any other context about the problem here.
33 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "upsilon.js",
3 | "version": "1.4.2",
4 | "description": "Utility classes to interact with a Numworks calculator using WebUSB.",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "webpack-dev-server --config conf/dev.webpack.config.js --mode development --devtool 'eval-source-map' --hot",
8 | "build": "webpack --config conf/build.webpack.config.js"
9 | },
10 | "repository": {
11 | "type": "git",
12 | "url": "git+https://github.com/UpsilonNumworks/upsilon.js.git"
13 | },
14 | "keywords": [
15 | "numworks",
16 | "webusb",
17 | "webdfu",
18 | "calculator"
19 | ],
20 | "author": "M4x1m3",
21 | "license": "MIT",
22 | "bugs": {
23 | "url": "https://github.com/UpsilonNumworks/upsilon.js/issues"
24 | },
25 | "homepage": "https://github.com/UpsilonNumworks/upsilon.js/#readme",
26 | "dependencies": {
27 | "webdfu": "^1.0.5"
28 | },
29 | "devDependencies": {
30 | "webpack": "^4.46.0",
31 | "webpack-cli": "^3.3.12",
32 | "webpack-dev-server": "^3.11.2"
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020-2021 Maxime "M4x1m3" FRIESS
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/example/index.js:
--------------------------------------------------------------------------------
1 |
2 | import Numworks from '../Numworks.js'
3 |
4 | var calculator = new Numworks();
5 |
6 | var status = document.getElementById("status");
7 | var connect = document.getElementById("connect");
8 | var content = document.getElementById("content");
9 |
10 | navigator.usb.addEventListener("disconnect", function(e) {
11 | calculator.onUnexpectedDisconnect(e, function() {
12 | status.innerHTML = "Disconnected.";
13 | content.innerHTML = "Please connect your Numworks.";
14 | connect.disabled = false;
15 | calculator.autoConnect(autoConnectHandler);
16 | });
17 | });
18 |
19 | calculator.autoConnect(autoConnectHandler);
20 |
21 | function autoConnectHandler(e) {
22 | calculator.stopAutoConnect();
23 | connected();
24 | }
25 |
26 | connect.onclick = function(e) {
27 | calculator.detect(function() {
28 | calculator.stopAutoConnect();
29 | connected();
30 | }, function(error) {
31 | status.innerHTML = "Error: " + error;
32 | });
33 | };
34 |
35 | async function connected() {
36 | connect.disabled = true;
37 | status.innerHTML = "Connected.";
38 |
39 | var model = calculator.getModel(false);
40 |
41 | var html_content = "Model: " + calculator.getModel(false) + "
";
42 |
43 |
44 | content.innerHTML = html_content;
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/scripted.js:
--------------------------------------------------------------------------------
1 | // Example of Upsilon.js usage from the CLI, can be used headless
2 | // const Numworks = require('upsilon.js')
3 | const Numworks = require('./Numworks.js')
4 | const usb = require('usb');
5 |
6 | // Init webusb
7 | navigator = {}
8 | navigator.usb = usb.webusb
9 |
10 | // Add navigator to Numworks
11 | Numworks.navigator = navigator
12 |
13 | // Create calculator object
14 | var calculator = new Numworks()
15 |
16 | navigator.usb.addEventListener('disconnect', function (e) {
17 | calculator.onUnexpectedDisconnect(e, function () {
18 | console.log("Disconnected from calculator")
19 | })
20 | })
21 |
22 | // Disable WebDFU logging to avoid spamming the console
23 | function disableWebDFULogging(calculator) {
24 | // calculator.device.logDebug = function () { }
25 | // calculator.device.logInfo = function () { }
26 | // calculator.device.logWarning = function () { }
27 | // calculator.device.logError = function () { }
28 | // calculator.device.logProgress = function () { }
29 | calculator.device.logDebug = function (msg) { console.log("DEBUG:", msg) }
30 | calculator.device.logInfo = function (msg) { console.log("INFO :", msg) }
31 | calculator.device.logWarning = function (msg) { console.log("WARN:", msg) }
32 | calculator.device.logError = function (msg) { console.log("ERROR:", msg) }
33 | calculator.device.logProgress = function (msg) { console.log("PROG:", msg) }
34 | }
35 |
36 | // Called when calculator is connected
37 | function onConnect() {
38 | disableWebDFULogging(calculator)
39 | }
40 |
41 | // Connect to calculator
42 | async function connect() {
43 | console.log("Connecting to calculator...")
44 |
45 | // While calculator is not connected, try to connect
46 | while (calculator.device == null) {
47 | await calculator.detect(onConnect, function () { })
48 | }
49 | console.log("Connected to calculator")
50 | return {status: "connected"}
51 | }
52 |
53 | async function disconnect() {
54 | console.log("Disconnecting from calculator...")
55 | if (calculator.device != null) {
56 | calculator.device.close()
57 | }
58 | // Create a new calculator object to avoid any error
59 | calculator = new Numworks()
60 | console.log("Disconnected from calculator")
61 | return {status: "disconnected"}
62 | }
63 |
64 | async function status() {
65 | if (calculator.device == null) {
66 | return {status: "disconnected"}
67 | } else {
68 | return {status: "connected"}
69 | }
70 | }
71 |
72 | function addScriptToStorage(storage, script) {
73 | let index = 0;
74 | for (const _ in storage.records) {
75 | const record = storage.records[index]
76 | // delete storage.records[index]
77 | if (record.name === script.name) {
78 | delete storage.records[index]
79 | } else {
80 | index++;
81 | }
82 | }
83 | storage.records.push(script)
84 | }
85 |
86 | async function main() {
87 | await connect();
88 | console.log(await status())
89 |
90 | let model = calculator.getModel()
91 | console.log("Calculator Model:", model)
92 |
93 | let platformInfo = await calculator.getPlatformInfo()
94 | console.log("PlatformInfo:", platformInfo)
95 |
96 | let storage = await calculator.backupStorage()
97 | console.log("Storage:", storage)
98 |
99 | addScriptToStorage(storage, {
100 | name: "hello_world",
101 | type: "py",
102 | autoImport: false,
103 | code: 'print("It\'s working perfectly!!! :tada:")'
104 | })
105 |
106 | await calculator.installStorage(storage, function () { })
107 | console.log("Storage Installed")
108 |
109 | // console.log("Crashing the calculator")
110 | // if (!await calculator.crash()) {
111 | // console.error("Failed to crash the calculator")
112 | // }
113 |
114 | await disconnect()
115 |
116 | console.log("Exiting")
117 | process.exit(0)
118 | }
119 |
120 | main()
121 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Upsilon.js
2 |
3 | [](https://www.npmjs.com/package/upsilon.js)
4 | 
5 | 
6 |
7 | Utility classes to interact with a Numworks calculator using WebUSB. Some additional features is the calculator has Upsilon installed
8 |
9 | ## Running the example
10 |
11 | ```
12 | npm install
13 | npm start
14 | ```
15 |
16 | ## Getting started with Numworks.js
17 |
18 | Numworks.js is simple and intuitive to use.
19 |
20 | ### Connecting to the calculator
21 |
22 | There are two ways to connect to the calculator, either by using WebUSB's auto-detect feature or by manual connection.
23 |
24 | #### Auto detection
25 |
26 | ```js
27 | var calculator = new Numworks();
28 |
29 | navigator.usb.addEventListener("disconnect", function(e) {
30 | calculator.onUnexpectedDisconnect(e, function() {
31 | // Do stuff when the calculator gets disconnected.
32 | });
33 | });
34 |
35 | calculator.autoConnect(function() {
36 | // Do stuff...
37 | });
38 | ```
39 |
40 | `autoConnect` will try to detect a NumWorks calculator once a second. You can use `stopAutoConnect` to make the loop stop.
41 |
42 | #### Manual connection
43 |
44 | ```js
45 | var calculator = new Numworks();
46 |
47 | navigator.usb.addEventListener("disconnect", function(e) {
48 | calculator.onUnexpectedDisconnect(e, function() {
49 | // Do stuff when the calculator gets disconnected.
50 | });
51 | });
52 |
53 | calculator.detect(function() {
54 | // Do stuff...
55 | }, function(error) {
56 | // Handle errors.
57 | });
58 | ```
59 |
60 | This code should be called in an event handler, such as a click handler.
61 |
62 | #### Combining both methods
63 |
64 | Both methods can be combined, making life easier for the user.
65 |
66 | ```js
67 | var calculator = new Numworks();
68 |
69 | navigator.usb.addEventListener("disconnect", function(e) {
70 | calculator.onUnexpectedDisconnect(e, function() {
71 | calculator.autoConnect(connectedHandler);
72 |
73 | // Do stuff when the calculator gets disconnected.
74 | });
75 | });
76 |
77 | calculator.autoConnect(connectedHandler);
78 |
79 | calculator.autoConnect();
80 |
81 | function someEventHandler(e) {
82 | calculator.detect(connectedHandler, function(error) {
83 | // Handle errors.
84 | });
85 | }
86 |
87 | function connectedHandler() {
88 | calculator.stopAutoConnect(); // It's connected, so autoConnect should stop.
89 | // Do stuff when the calculator gets connected.
90 | }
91 | ```
92 |
93 | ### Accessing data from the calculator.
94 |
95 | Now that we are connected to the NumWorks calculator, we can do stuff with it (YAY!)
96 |
97 | #### Determining the model
98 |
99 | The function `getModel` can be used to determine the model of the connected calculator. It returns either `0100` or `0110`.
100 |
101 | #### Getting information about the software
102 |
103 | `getPlatformInfo` can be used to get information about the software installed on the calculator. It returns an object, formatted as follows :
104 |
105 | ```js
106 | {
107 | // Whether or not the software is valid, based on a magic number. If false, the rest of the structure is absent.
108 | "magik": 4276994270,
109 | // Whether or not the software is considered as old (< Epsilon 11).
110 | // This is primarily used by the parser itself to know where to read data.
111 | "oldplatform": false,
112 | // This part of the data is related to the Omega fork of Epsilon.
113 | "omega": {
114 | // Whether or not Omega is installed on the Numworks. If false, the rest of the Omega structure is absent
115 | "installed": true
116 | // The version of Omega detected on the calculator.
117 | "version": "1.19.2",
118 | // Username written in the system. "" if none.
119 | "user": "M4x1m3"
120 | },
121 | "upsilon": {
122 | // Whether or not Upsilon is installed on the Numworks. If false, the rest of the Upsilon structure is absent
123 | "installed": true
124 | // The version of Upsilon detected on the calculator.
125 | "version": "1.0.0",
126 | // The type of Upsilon : if it is a derivate or not
127 | "osType": 2020704889,
128 | // A more simple way to get if it is a derivate or not, it is based on the os type
129 | "official": true
130 | },
131 | // The version of Epsilon installed on the calculator.
132 | "version": "13.0.0",
133 |
134 | "storage": {
135 | // Address of the script storage
136 | "address": 165467,
137 | // Size of the script storage
138 | "size": 65535
139 | },
140 | // Epsilon's external application information.
141 | "external": {
142 | // The start of the external application flash area.
143 | "flashStart": 4294967295,
144 | // The end of the external application flash area.
145 | "flashEnd": 4294967295,
146 | // The size of the external application flash area. (flashEnd - flashStart)
147 | "flashSize": 0,
148 | // The start of the external application RAM area.
149 | "ramStart": 4294967295,
150 | // The end of the external application RAM area.
151 | "ramEnd": 4294967295,
152 | // The size of the external application RAM area. (ramEnd - ramStart)
153 | "ramSize": 0
154 | },
155 | // The mode of the calculator (legacy/bootloader)
156 | "mode": "bootloader",
157 | // The system's commit ID
158 | "commit": " 651abf9",
159 | // The information about the running slot.
160 | "slot": {
161 | // Whether or not the slots informations are valid, based on a magic number. If false, the rest of the structure is absent.
162 | "magik": true,
163 | // The address of the kernel header.
164 | "kernelHeader": 2415919112,
165 | // The address of the userland header.
166 | "userlandHeader": 2415984640,
167 | // The slot name. (A/B/Khi, it can be undefined if the address of the slot isn't known)
168 | "name": "A"
169 | },
170 | // The system's commit ID
171 | "commit": " 651abf9"
172 | }
173 | ```
174 |
175 | #### Reading and writing to the script store
176 |
177 | The script store can be read using `backupStorage` and can be written to using `installStorage`.
178 | Here is an example of adding a script in the storage
179 | ```js
180 | var storage = await calculator.backupStorage();
181 | storage.records.push({"name": "test", "type": "py", "autoImport": true, "code": "print('Hello World!')\n"});
182 | await calculator.installStorage(storage, function() {
183 | // Do stuff after writing to the storage is done
184 | });
185 | ```
186 |
187 | #### Flashing an update
188 |
189 | The methods `flashInternal` and `flashExternal` can be used to flash an update. They write to the internal and the external flash, respectively. Not that the external flash is not available on a N0100.
190 |
191 | ## Licensing
192 |
193 | Numworks.js is released under the MIT license.
194 |
195 | Numworks is a registered trademark of Numworks SAS, 24 Rue Godot de Mauroy, 75009 Paris, France. Numworks SAS isn't associated in any shape or form with this project.
196 |
--------------------------------------------------------------------------------
/Storage.js:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Class to parse and reconstruct the numworks' internal storage.
4 | * Only parses python scripts for now, ditches the rest.
5 | * @TODO parse other things.
6 | *
7 | * @author Maxime "M4x1m3" FRIESS
8 | * @license MIT
9 | */
10 | class Storage {
11 | constructor() {
12 | this.magik = null;
13 | this.records = null;
14 | }
15 |
16 | async __encodePyRecord(record) {
17 | var content = new TextEncoder("utf-8").encode(record.code);
18 |
19 | record.data = new Blob([
20 | concatTypedArrays(
21 | new Uint8Array([record.autoImport ? 1 : 0]),
22 | concatTypedArrays(
23 | content,
24 | new Uint8Array([0])
25 | )
26 | )
27 | ]);
28 |
29 | delete record.autoImport;
30 | delete record.code;
31 |
32 | return record;
33 | }
34 |
35 | __getRecordEncoders() {
36 | return {
37 | py: this.__encodePyRecord.bind(this)
38 | };
39 | }
40 |
41 | async __assembleStorage(records, maxSize) {
42 | const encoder = new TextEncoder();
43 |
44 | var data = new Uint8Array([0xBA, 0xDD, 0x0B, 0xEE]); // Magic value 0xBADD0BEE (big endian)
45 |
46 | for (var i in records) {
47 | var record = records[i];
48 | var name = record.name + "." + record.type;
49 |
50 | var encoded_name = concatTypedArrays(
51 | encoder.encode(name),
52 | new Uint8Array([0])
53 | );
54 |
55 | var encoded_content = concatTypedArrays(
56 | encoded_name,
57 | new Uint8Array(await record.data.arrayBuffer())
58 | );
59 |
60 | var length_buffer = new Uint8Array([0xFF, 0xFF]);
61 |
62 | encoded_content = concatTypedArrays(length_buffer, encoded_content);
63 |
64 | var dv = new DataView(encoded_content.buffer);
65 | dv.setUint16(0, encoded_content.length, true);
66 |
67 | if (data.length + encoded_content.length + 2 > maxSize) {
68 | console.error("Too much data!");
69 | throw new Error("Too much data!");
70 | }
71 |
72 | data = concatTypedArrays(data, encoded_content);
73 | }
74 |
75 | data = concatTypedArrays(data, new Uint8Array([0, 0]));
76 |
77 | return new Blob([data]);
78 | }
79 |
80 | async __encodeRecord(record) {
81 | var encoders = this.__getRecordEncoders();
82 |
83 | if (record.type in encoders) {
84 | record = encoders[record.type](record);
85 | }
86 |
87 | return record;
88 | }
89 |
90 | /**
91 | * Encode the storage from data stored in this class.
92 | * The second 0xBAD00BEE isn't included.
93 | *
94 | * @param size max size the storage can take
95 | *
96 | * @return a blob, representing the encoded storage.
97 | *
98 | * @throw Errors when too much data is passed.
99 | */
100 | async encodeStorage(size) {
101 | var records = Object.assign({}, this.records);
102 |
103 | for (var i in this.records) {
104 | records[i] = await this.__encodeRecord(records[i]);
105 |
106 | }
107 |
108 | return await this.__assembleStorage(records, size);
109 | }
110 |
111 | async __sliceStorage(blob) {
112 | var dv = new DataView(await blob.arrayBuffer());
113 |
114 | if (dv.getUint32(0x00, false) === 0xBADD0BEE) {
115 | var offset = 4;
116 | var records = [];
117 |
118 | do {
119 | var size = dv.getUint16(offset, true);
120 |
121 | if (size === 0) break;
122 |
123 | var name = this.__readString(dv, offset + 2, size - 2);
124 |
125 | var data = blob.slice(offset + 2 + name.size, offset + size);
126 |
127 | var record = {
128 | name: name.content.split(/\.(?=[^\.]+$)/)[0], // eslint-disable-line no-useless-escape
129 | type: name.content.split(/\.(?=[^\.]+$)/)[1], // eslint-disable-line no-useless-escape
130 | data: data,
131 | };
132 |
133 | records.push(record);
134 |
135 | offset += size;
136 |
137 | } while (size !== 0 && offset < blob.size);
138 |
139 | return records;
140 | } else {
141 | return {};
142 | }
143 | }
144 |
145 | __readString(dv, index, maxLen) {
146 | var out = "";
147 | var i = 0;
148 | for (i = 0; i < maxLen || maxLen === 0; i++) {
149 | var chr = dv.getUint8(index + i);
150 |
151 | if (chr === 0) {
152 | break;
153 | }
154 |
155 | out += String.fromCharCode(chr);
156 | }
157 |
158 | return {
159 | size: i + 1,
160 | content: out
161 | };
162 | }
163 |
164 | async __parsePyRecord(record) {
165 | var dv = new DataView(await record.data.arrayBuffer());
166 |
167 | record.autoImport = dv.getUint8(0) !== 0;
168 | record.code = this.__readString(dv, 1, record.data.size - 1).content;
169 |
170 | delete record.data;
171 |
172 | return record;
173 | }
174 |
175 | __getRecordParsers() {
176 | return {
177 | py: this.__parsePyRecord.bind(this)
178 | };
179 | }
180 |
181 | async __parseRecord(record) {
182 | var parsers = this.__getRecordParsers();
183 |
184 | if (record.type in parsers) {
185 | record = parsers[record.type](record);
186 | }
187 |
188 | return record;
189 | }
190 |
191 | /**
192 | * Decode the storage.
193 | *
194 | * @param blob the encoded storage.
195 | */
196 | async parseStorage(blob) {
197 | var dv = new DataView(await blob.arrayBuffer());
198 |
199 | this.magik = dv.getUint32(0x00, false) === 0xBADD0BEE;
200 |
201 | this.records = {};
202 |
203 | if (this.magik) {
204 | this.records = await this.__sliceStorage(blob);
205 |
206 | for (var i in this.records) {
207 | this.records[i] = await this.__parseRecord(this.records[i]);
208 |
209 | // Throwing away non-python stuff, for convinience.
210 | // if (this.records[i].type !== 'py') this.records.splice(i, 1);
211 | }
212 | }
213 | }
214 | }
215 |
216 | function concatTypedArrays(a, b) {
217 | // Checks for truthy values on both arrays
218 | if (!a && !b) throw new Error("Please specify valid arguments for parameters a and b.");
219 |
220 | // Checks for truthy values or empty arrays on each argument
221 | // to avoid the unnecessary construction of a new array and
222 | // the type comparison
223 | if (!b || b.length === 0) return a;
224 | if (!a || a.length === 0) return b;
225 |
226 | // Make sure that both typed arrays are of the same type
227 | if (Object.prototype.toString.call(a) !== Object.prototype.toString.call(b))
228 | throw new Error("The types of the two arguments passed for parameters a and b do not match.");
229 |
230 | var c = new a.constructor(a.length + b.length);
231 | c.set(a);
232 | c.set(b, a.length);
233 |
234 | return c;
235 | }
236 |
237 | module.exports = Storage;
238 |
239 |
--------------------------------------------------------------------------------
/Recovery.js:
--------------------------------------------------------------------------------
1 |
2 | var WebDFU = require("webdfu");
3 | var DFU = WebDFU.DFU;
4 | var DFUse = WebDFU.DFUse;
5 |
6 | var Storage = require("./Storage");
7 |
8 | const AUTOCONNECT_DELAY = 1000;
9 |
10 | /**
11 | * Class handling communication with a Numworks
12 | * calculator in Recovery Mode using WebUSB and the WebDFU lib.
13 | *
14 | * @author Maxime "M4x1m3" FRIESS
15 | * @license MIT
16 | */
17 | class Recovery {
18 | constructor() {
19 | this.device = null;
20 | this.transferSize = 2048;
21 | this.manifestationTolerant = false;
22 | this.autoconnectId = null;
23 | }
24 |
25 | /**
26 | * Get approximated the model of the calculator.
27 |
28 | * This just checks the size of the internal size, because that's everything the STM32 bootloader
29 | * exposes.
30 | *
31 | * @note The check for the N0110 **WILL** break if a new model happens to actually have 512K internal.
32 | * We have to ckeck for 512K because every STM32F73x bootloaders advertize 512K regardless of
33 | * the actual capacity of the internal flah.
34 | * TODO: Find a better way to detect the model (Numworks' private API ?)
35 | *
36 | * @return "0110" for an unmodified n0110 (512K advertized internal).
37 | * "0100" for unmodified n0100 (1M internal).
38 | * "????" for something unknown (Other internal sizes).
39 | */
40 | getModel(exclude_modded = true) {
41 | var internal_size = 0;
42 |
43 | for (let i = 0; i < this.device.memoryInfo.segments.length; i++) {
44 | if (this.device.memoryInfo.segments[i].start >= 0x08000000 && this.device.memoryInfo.segments[i].start <= 0x080FFFFF) {
45 | internal_size += this.device.memoryInfo.segments[i].end - this.device.memoryInfo.segments[i].start;
46 | }
47 | }
48 |
49 | if (internal_size === 0x80000) {
50 | return "0110";
51 | } else if (internal_size === 0x100000) {
52 | return "0100";
53 | } else {
54 | return "????";
55 | }
56 | }
57 |
58 | /**
59 | * Flash buffer to recovery location, in RAM.
60 | *
61 | * @param buffer ArrayBuffer to flash.
62 | */
63 | async flashRecovery(buffer) {
64 | this.device.startAddress = 0x20030000;
65 | // This is needed because the STM32F73x bootloader starts in dfuERROR status,
66 | // for a weird reason that I spend hours figuring out, but didn't find.
67 | // Better to not think about it.
68 | await this.device.clearStatus();
69 | await this.device.do_download(this.transferSize, buffer, true);
70 | }
71 |
72 | async __getDFUDescriptorProperties(device) {
73 | // Attempt to read the DFU functional descriptor
74 | // TODO: read the selected configuration's descriptor
75 | return device.readConfigurationDescriptor(0).then(
76 | data => {
77 | let configDesc = DFU.parseConfigurationDescriptor(data);
78 | let funcDesc = null;
79 | let configValue = device.settings.configuration.configurationValue;
80 | if (configDesc.bConfigurationValue === configValue) {
81 | for (let desc of configDesc.descriptors) {
82 | if (desc.bDescriptorType === 0x21 && desc.hasOwnProperty("bcdDFUVersion")) {
83 | funcDesc = desc;
84 | break;
85 | }
86 | }
87 | }
88 |
89 | if (funcDesc) {
90 | return {
91 | WillDetach: ((funcDesc.bmAttributes & 0x08) !== 0),
92 | ManifestationTolerant: ((funcDesc.bmAttributes & 0x04) !== 0),
93 | CanUpload: ((funcDesc.bmAttributes & 0x02) !== 0),
94 | CanDnload: ((funcDesc.bmAttributes & 0x01) !== 0),
95 | TransferSize: funcDesc.wTransferSize,
96 | DetachTimeOut: funcDesc.wDetachTimeOut,
97 | DFUVersion: funcDesc.bcdDFUVersion
98 | };
99 | } else {
100 | return {};
101 | }
102 | },
103 | error => {}
104 | );
105 | }
106 |
107 | /**
108 | * Detect a numworks calculator.
109 | *
110 | * @param successCallback Callback in case of success.
111 | * @param errorCallback Callback in case of error.
112 | */
113 | async detect(successCallback, errorCallback) {
114 | var _this = this;
115 | navigator.usb.requestDevice({ "filters": [{"vendorId": 0x0483, "productId": 0xdf11}]}).then(
116 | async selectedDevice => {
117 | let interfaces = DFU.findDeviceDfuInterfaces(selectedDevice);
118 | await _this.__fixInterfaceNames(selectedDevice, interfaces);
119 | _this.device = await _this.__connect(new DFU.Device(selectedDevice, interfaces[0]));
120 |
121 | successCallback();
122 | }
123 | ).catch(error => {
124 | errorCallback(error);
125 | });
126 | }
127 |
128 | /**
129 | * Connect to a WebDFU device.
130 | *
131 | * @param device The WebUSB device to connect to.
132 | */
133 | async __connect(device) {
134 | try {
135 | await device.open();
136 | } catch (error) {
137 | // this.installInstance.calculatorError(true, error);
138 | throw error;
139 | }
140 |
141 | // Attempt to parse the DFU functional descriptor
142 | let desc = {};
143 | try {
144 | desc = await this.__getDFUDescriptorProperties(device);
145 | } catch (error) {
146 | // this.installInstance.calculatorError(true, error);
147 | throw error;
148 | }
149 |
150 | if (desc && Object.keys(desc).length > 0) {
151 | device.properties = desc;
152 | this.transferSize = desc.TransferSize;
153 | if (desc.CanDnload) {
154 | this.manifestationTolerant = desc.ManifestationTolerant;
155 | }
156 |
157 | if ((desc.DFUVersion === 0x100 || desc.DFUVersion === 0x011a) && device.settings.alternate.interfaceProtocol === 0x02) {
158 | device = new DFUse.Device(device.device_, device.settings);
159 | if (device.memoryInfo) {
160 | // We have to add RAM manually, because the device doesn't expose that normally
161 | device.memoryInfo.segments.unshift({
162 | start: 0x20000000,
163 | sectorSize: 1024,
164 | end: 0x20040000,
165 | readable: true,
166 | erasable: false,
167 | writable: true
168 | });
169 | }
170 | }
171 | }
172 |
173 | // Bind logging methods
174 | device.logDebug = console.log;
175 | device.logInfo = console.info;
176 | device.logWarning = console.warn;
177 | device.logError = console.error;
178 | device.logProgress = console.log;
179 |
180 | return device;
181 | }
182 |
183 | async __autoConnectDevice(device) {
184 | let interfaces = DFU.findDeviceDfuInterfaces(device.device_);
185 | await this.__fixInterfaceNames(device.device_, interfaces);
186 | device = await this.__connect(new DFU.Device(device.device_, interfaces[0]));
187 | return device;
188 | }
189 |
190 | /**
191 | * Autoconnect a numworks calculator
192 | *
193 | * @param serial Serial number. If ommited, any will work.
194 | */
195 | autoConnect(callback, serial) {
196 | var _this = this;
197 | var vid = 0x0483, pid = 0xdf11;
198 |
199 | DFU.findAllDfuInterfaces().then(async dfu_devices => {
200 | let matching_devices = _this.__findMatchingDevices(vid, pid, serial, dfu_devices);
201 |
202 | if (matching_devices.length !== 0) {
203 | this.stopAutoConnect();
204 |
205 | this.device = await this.__autoConnectDevice(matching_devices[0]);
206 |
207 | await callback();
208 | }
209 | });
210 |
211 | this.autoconnectId = setTimeout(this.autoConnect.bind(this, callback, serial), AUTOCONNECT_DELAY);
212 | }
213 |
214 | /**
215 | * Stop autoconnection.
216 | */
217 | stopAutoConnect() {
218 | if (this.autoconnectId === null) return;
219 |
220 | clearTimeout(this.autoconnectId);
221 |
222 | this.autoconnectId = null;
223 | }
224 |
225 | async __fixInterfaceNames(device_, interfaces) {
226 | // Check if any interface names were not read correctly
227 | if (interfaces.some(intf => (intf.name === null))) {
228 | // Manually retrieve the interface name string descriptors
229 | let tempDevice = new DFU.Device(device_, interfaces[0]);
230 | await tempDevice.device_.open();
231 | let mapping = await tempDevice.readInterfaceNames();
232 | await tempDevice.close();
233 |
234 | for (let intf of interfaces) {
235 | if (intf.name === null) {
236 | let configIndex = intf.configuration.configurationValue;
237 | let intfNumber = intf["interface"].interfaceNumber;
238 | let alt = intf.alternate.alternateSetting;
239 | intf.name = mapping[configIndex][intfNumber][alt];
240 | }
241 | }
242 | }
243 | }
244 |
245 | __findMatchingDevices(vid, pid, serial, dfu_devices) {
246 | let matching_devices = [];
247 | for (let dfu_device of dfu_devices) {
248 | if (serial) {
249 | if (dfu_device.device_.serialNumber === serial) {
250 | matching_devices.push(dfu_device);
251 | }
252 | } else {
253 | if (
254 | (!pid && vid > 0 && dfu_device.device_.vendorId === vid) ||
255 | (!vid && pid > 0 && dfu_device.device_.productId === pid) ||
256 | (vid > 0 && pid > 0 && dfu_device.device_.vendorId === vid && dfu_device.device_.productId === pid)
257 | )
258 | {
259 | matching_devices.push(dfu_device);
260 | }
261 | }
262 | }
263 |
264 | return matching_devices;
265 | }
266 |
267 | /**
268 | * Get storage from the calculator.
269 | *
270 | * @param address Storage address
271 | * @param size Storage size.
272 | *
273 | * @return The sotrage, as a Blob.
274 | */
275 | async __retreiveStorage(address, size) {
276 | this.device.startAddress = address;
277 | return await this.device.do_upload(this.transferSize, size + 8);
278 | }
279 |
280 | /**
281 | * Flash storage to the calculator.
282 | *
283 | * @param address Storage address
284 | * @param data Storage data.
285 | */
286 | async __flashStorage(address, data) {
287 | this.device.startAddress = address;
288 | await this.device.do_download(this.transferSize, data, false);
289 | }
290 |
291 | onUnexpectedDisconnect(event, callback) {
292 | if (this.device !== null && this.device.device_ !== null) {
293 | if (this.device.device_ === event.device) {
294 | this.device.disconnected = true;
295 | callback(event);
296 | this.device = null;
297 | }
298 | }
299 | }
300 | }
301 |
302 | module.exports = Recovery;
303 |
304 |
--------------------------------------------------------------------------------
/Numworks.js:
--------------------------------------------------------------------------------
1 |
2 | var WebDFU = require("webdfu");
3 | var DFU = WebDFU.DFU;
4 | var DFUse = WebDFU.DFUse;
5 |
6 | var Storage = require("./Storage");
7 | var Recovery = require("./Recovery");
8 |
9 | const AUTOCONNECT_DELAY = 1000;
10 |
11 | /**
12 | * Class handling communication with a Numworks
13 | * calculator using WebUSB and the WebDFU lib.
14 | *
15 | * @author Maxime "M4x1m3" FRIESS
16 | * @license MIT
17 | */
18 | class Numworks {
19 | constructor() {
20 | this.device = null;
21 | this.transferSize = 2048;
22 | this.manifestationTolerant = false;
23 | this.autoconnectId = null;
24 | }
25 |
26 | /**
27 | * Get the model of the calculator.
28 | *
29 | * @param exclude_modded Only include calculator which can be officially purchased from Numworks.
30 | * This includes "0100" and "0110". If a modded Numworks is found, it'll show
31 | * the unmoded version (eg. "0100-8M" becomes "0100").
32 | *
33 | * @return "0110" for an unmodified n0110 (64K internal 8M external). "0110" is returned with {exclude_modded}.
34 | * "0110-0M" for a modified n0110 (64K internal, no external). "????" is returned with {exclude_modded}.
35 | * "0110-16M" for a modified n0110 (64K internal, 16M external). "0110" is returned with {exclude_modded}.
36 | * "0100" for unmodified n0100 (1M internal, no external). "0100" is returned with {exclude_modded}.
37 | * "0100-8M" for a "Numworks++" with 8M external (1M internal, 8M external). "0100" is returned with {exclude_modded}.
38 | * "0100-16M" for a "Numworks++" with 16M external (1M internal, 16M external). "0100" is returned with {exclude_modded}.
39 | *
40 | * Other flash sizes don't exist for the packaging the Numworks (SOIC-8) uses, so it's safe to assume
41 | * we'll only encounter 0M, 8M and 16M versions.
42 | *
43 | * "????" if can't be determined (maybe the user plugged a DFU capable device which isn't a Numworks).
44 | */
45 | getModel(exclude_modded = true) {
46 | var internal_size = 0;
47 | var external_size = 0;
48 |
49 | for (let i = 0; i < this.device.memoryInfo.segments.length; i++) {
50 |
51 | if (this.device.memoryInfo.segments[i].start >= 0x08000000 && this.device.memoryInfo.segments[i].start <= 0x080FFFFF) {
52 | internal_size += this.device.memoryInfo.segments[i].end - this.device.memoryInfo.segments[i].start;
53 | }
54 |
55 | if (this.device.memoryInfo.segments[i].start >= 0x90000000 && this.device.memoryInfo.segments[i].start <= 0x9FFFFFFF) {
56 | external_size += this.device.memoryInfo.segments[i].end - this.device.memoryInfo.segments[i].start;
57 | }
58 | }
59 |
60 | // If it's an Upsilon calculator, some sectors can be hidden
61 | if (this.device.device_.productName == "Upsilon Bootloader") {
62 | return "0110";
63 | }
64 |
65 | if (this.device.device_.productName == "Upsilon Calculator") {
66 | return external_size ? "0110" : "0100";
67 | }
68 |
69 | let usbDeviceVersion = "" + this.device.device_.deviceVersionMajor + this.device.device_.deviceVersionMinor + this.device.device_.deviceVersionSubminor
70 | switch (usbDeviceVersion) {
71 | case "120":
72 | return "0120";
73 | case "115":
74 | return "0115";
75 | case "110":
76 | return "0110"
77 | // We can't match on N0100 as some N0110 firmware are returning 100
78 | }
79 |
80 | if (internal_size === 0x10000 || internal_size === 0x0) {
81 | if (external_size === 0) {
82 | return (exclude_modded ? "????" : "0110-0M");
83 | } else if (external_size === 0x800000) {
84 | return "0110";
85 | } else if (external_size === (0x800000 - 0x30000)) {
86 | // Epsilon 22 hide a part of the flash beginning, IDK why
87 | return "0110"
88 | } else if (external_size === 0x1000000) {
89 | return (exclude_modded ? "0110" : "0110-16M");
90 | } else {
91 | return "????";
92 | }
93 | } else if (internal_size === 0x100000) {
94 | if (external_size === 0) {
95 | return "0100";
96 | } else if (external_size === 0x800000) {
97 | return (exclude_modded ? "0100" : "0100-8M");
98 | } else if (external_size === 0x1000000) {
99 | return (exclude_modded ? "0100" : "0100-16M");
100 | } else {
101 | return "????";
102 | }
103 | } else {
104 | return "????";
105 | }
106 | }
107 |
108 | /**
109 | * Flash buffer to internal flash.
110 | *
111 | * @param buffer ArrayBuffer to flash.
112 | */
113 | async flashInternal(buffer) {
114 | this.device.startAddress = 0x08000000;
115 | await this.device.do_download(this.transferSize, buffer, true);
116 | }
117 |
118 | /**
119 | * Flash buffer to external flash.
120 | *
121 | * @param buffer ArrayBuffer to flash.
122 | */
123 | async flashExternal(buffer) {
124 | this.device.startAddress = 0x90000000;
125 | await this.device.do_download(this.transferSize, buffer, false);
126 | }
127 |
128 | async __getDFUDescriptorProperties(device) {
129 | // Attempt to read the DFU functional descriptor
130 | // TODO: read the selected configuration's descriptor
131 | return device.readConfigurationDescriptor(0).then(
132 | data => {
133 | let configDesc = DFU.parseConfigurationDescriptor(data);
134 | let funcDesc = null;
135 | let configValue = device.settings.configuration.configurationValue;
136 | if (configDesc.bConfigurationValue === configValue) {
137 | for (let desc of configDesc.descriptors) {
138 | if (desc.bDescriptorType === 0x21 && desc.hasOwnProperty("bcdDFUVersion")) {
139 | funcDesc = desc;
140 | break;
141 | }
142 | }
143 | }
144 |
145 | if (funcDesc) {
146 | return {
147 | WillDetach: ((funcDesc.bmAttributes & 0x08) !== 0),
148 | ManifestationTolerant: ((funcDesc.bmAttributes & 0x04) !== 0),
149 | CanUpload: ((funcDesc.bmAttributes & 0x02) !== 0),
150 | CanDnload: ((funcDesc.bmAttributes & 0x01) !== 0),
151 | TransferSize: funcDesc.wTransferSize,
152 | DetachTimeOut: funcDesc.wDetachTimeOut,
153 | DFUVersion: funcDesc.bcdDFUVersion
154 | };
155 | } else {
156 | return {};
157 | }
158 | },
159 | error => {}
160 | );
161 | }
162 |
163 | /**
164 | * Detect a numworks calculator.
165 | *
166 | * @param successCallback Callback in case of success.
167 | * @param errorCallback Callback in case of error.
168 | */
169 | async detect(successCallback, errorCallback) {
170 | var _this = this;
171 | await navigator.usb.requestDevice({ "filters": [{"vendorId": 0x0483, "productId": 0xa291}]}).then(
172 | async selectedDevice => {
173 | let interfaces = DFU.findDeviceDfuInterfaces(selectedDevice);
174 | await _this.__fixInterfaceNames(selectedDevice, interfaces);
175 | _this.device = await _this.__connect(new DFU.Device(selectedDevice, interfaces[0]));
176 | successCallback();
177 | }
178 | ).catch(error => {
179 | errorCallback(error);
180 | });
181 | }
182 |
183 | /**
184 | * Connect to a WebDFU device.
185 | *
186 | * @param device The WebUSB device to connect to.
187 | */
188 | async __connect(device) {
189 | try {
190 | await device.open();
191 | } catch (error) {
192 | // this.installInstance.calculatorError(true, error);
193 | throw error;
194 | }
195 |
196 | // Attempt to parse the DFU functional descriptor
197 | let desc = {};
198 | try {
199 | desc = await this.__getDFUDescriptorProperties(device);
200 | } catch (error) {
201 | // this.installInstance.calculatorError(true, error);
202 | throw error;
203 | }
204 |
205 | if (desc && Object.keys(desc).length > 0) {
206 | device.properties = desc;
207 | this.transferSize = desc.TransferSize;
208 | if (desc.CanDnload) {
209 | this.manifestationTolerant = desc.ManifestationTolerant;
210 | }
211 |
212 | if ((desc.DFUVersion === 0x100 || desc.DFUVersion === 0x011a) && device.settings.alternate.interfaceProtocol === 0x02) {
213 | device = new DFUse.Device(device.device_, device.settings);
214 | if (device.memoryInfo) {
215 | // We have to add RAM manually, because the device doesn't expose that normally
216 | device.memoryInfo.segments.unshift({
217 | start: 0x20000000,
218 | sectorSize: 1024,
219 | end: 0x20040000,
220 | readable: true,
221 | erasable: false,
222 | writable: true
223 | });
224 |
225 | // Also add the N0120 RAM, even if not used as we don't want to bother checking the model yet
226 | // TODO: Improve this
227 | device.memoryInfo.segments.unshift({
228 | start: 0x24000000,
229 | sectorSize: 1024,
230 | end: 0x24040000,
231 | readable: true,
232 | erasable: false,
233 | writable: true
234 | });
235 | }
236 | }
237 | }
238 |
239 | // Bind logging methods
240 | device.logDebug = console.log;
241 | device.logInfo = console.info;
242 | device.logWarning = console.warn;
243 | device.logError = console.error;
244 | device.logProgress = console.log;
245 |
246 | return device;
247 | }
248 |
249 | __readFString(dv, index, len) {
250 | var out = "";
251 | for(var i = 0; i < len; i++) {
252 | var chr = dv.getUint8(index + i);
253 |
254 | if (chr === 0) {
255 | break;
256 | }
257 |
258 | out += String.fromCharCode(chr);
259 | }
260 |
261 | return out;
262 | }
263 |
264 | __parseKernelHeader(array) {
265 | var dv = new DataView(array);
266 | var data = {};
267 |
268 | const magiks = [0xF00DC0DE, 0xFEEDC0DE];
269 |
270 | // Used as pointer when reading
271 | let currentAddress = 0x0;
272 |
273 | data["magik"] = dv.getUint32(currentAddress, false);
274 | currentAddress += 0x4
275 |
276 | // Iterate over the magiks to find the correct one
277 | let magikFound = false;
278 | for(var i = 0; i < magiks.length; i++) {
279 | if (data["magik"] === magiks[i]) {
280 | magikFound = true;
281 | break;
282 | }
283 | }
284 | if (!magikFound) {
285 | data["magik"] = false;
286 | console.warn("No kernel magic")
287 | return data
288 | }
289 |
290 | data["version"] = this.__readFString(dv, currentAddress, 8);
291 | currentAddress += 0x8
292 |
293 | data["commit"] = this.__readFString(dv, currentAddress, 8);
294 | currentAddress += 0x8
295 |
296 | // End of the kernel header, next is the magic
297 | if (dv.getUint32(currentAddress, false) !== data["magik"]) {
298 | console.warn("PlatformInfo is not valid, end magic is not present at the end of the Kernel header");
299 | }
300 |
301 | return data
302 | }
303 |
304 |
305 | __parseCustomInfos(dv, startAddress) {
306 | let data = {};
307 |
308 | let currentAddress = startAddress
309 |
310 | // Omega infos
311 | data["omega"] = {};
312 |
313 | data["omega"]["installed"] = dv.getUint32(currentAddress, false) === 0xDEADBEEF
314 | currentAddress += 4
315 |
316 | if (data["omega"]["installed"]) {
317 | data["omega"]["version"] = this.__readFString(dv, currentAddress, 16);
318 | currentAddress += 16;
319 |
320 | data["omega"]["user"] = this.__readFString(dv, currentAddress, 16);
321 | currentAddress += 16;
322 |
323 | if(dv.getUint32(currentAddress, false) !== 0xDEADBEEF) {
324 | console.warn("Omega Magic not present at end")
325 | }
326 | currentAddress += 4
327 | }
328 |
329 | // Upsilon infos
330 | data["upsilon"] = {};
331 | data["upsilon"]["installed"] = dv.getUint32(currentAddress, false) === 0x69737055
332 |
333 | currentAddress += 4
334 |
335 | if (data["upsilon"]["installed"]) {
336 | data["upsilon"]["version"] = this.__readFString(dv, currentAddress, 16);
337 | currentAddress += 16;
338 |
339 | data["upsilon"]["osType"] = dv.getUint32(currentAddress, false);
340 | currentAddress += 4
341 |
342 | if (data["upsilon"]["osType"] == 0x78718279) {
343 | data["upsilon"]["official"] = true;
344 | } else {
345 | data["upsilon"]["official"] = false;
346 | }
347 |
348 | if (dv.getUint32(currentAddress, false) !== 0x69737055) {
349 | console.warn("Upsilon Magic not present at end")
350 | }
351 | currentAddress += 4
352 | }
353 |
354 | return data
355 | }
356 |
357 | __parseUserlandHeader(array) {
358 | var dv = new DataView(array);
359 | var data = {};
360 |
361 | const magiks = [0xF00DC0DE, 0xFEEDC0DE];
362 |
363 | // Used as pointer when reading
364 | let currentAddress = 0;
365 |
366 | data["magik"] = dv.getUint32(currentAddress, false);
367 | currentAddress += 4
368 |
369 | // Iterate over the magiks to find the correct one
370 | let magikFound = false;
371 | for(var i = 0; i < magiks.length; i++) {
372 | if (data["magik"] === magiks[i]) {
373 | magikFound = true;
374 | break;
375 | }
376 | }
377 | if (!magikFound) {
378 | data["magik"] = false;
379 | console.warn("No usermand magic")
380 | return data
381 | }
382 |
383 | data["version"] = this.__readFString(dv, currentAddress, 8);
384 | currentAddress += 8
385 |
386 | // Storage
387 | data["storage"] = {};
388 | data["storage"]["address"] = dv.getUint32(currentAddress, true);
389 | currentAddress += 4
390 | data["storage"]["size"] = dv.getUint32(currentAddress, true);
391 | currentAddress += 4
392 |
393 | // External
394 | data["external"] = {};
395 | data["external"]["flashStart"] = dv.getUint32(currentAddress, true);
396 | currentAddress += 4
397 | data["external"]["flashEnd"] = dv.getUint32(currentAddress, true);
398 | currentAddress += 4
399 | data["external"]["flashSize"] = data["external"]["flashEnd"] - data["external"]["flashStart"];
400 |
401 | data["external"]["ramStart"] = dv.getUint32(currentAddress, true);
402 | currentAddress += 4
403 | data["external"]["ramEnd"] = dv.getUint32(currentAddress, true);
404 | currentAddress += 4
405 | data["external"]["ramSize"] = data["external"]["ramEnd"] - data["external"]["ramStart"];
406 |
407 | if (dv.getUint32(currentAddress, false) !== data["magik"]) {
408 | if (data["version"] < "22.0.0") {
409 | console.warn("PlatformInfo is not valid, end magic is not present at the end of the Userland info for Epsilon 21, using Epsilon 22 struct");
410 | }
411 |
412 | // Epsilon 22 (username)
413 | data["epsilon"] = {}
414 | data["epsilon"]["usernameStart"] = dv.getUint32(currentAddress, true);
415 | currentAddress += 4
416 | data["epsilon"]["usernameEnd"] = dv.getUint32(currentAddress, true);
417 | currentAddress += 4
418 | data["epsilon"]["usernameSize"] = data["epsilon"]["usernameEnd"] - data["epsilon"]["usernameStart"]
419 |
420 | /*
421 | // Read the username
422 | this.device.startAddress = data["epsilon"]["usernameStart"];
423 | let usernameBlob = await this.device.do_upload(this.transferSize, data["epsilon"]["usernameSize"] );
424 | var usernameDv = new DataView(await usernameBlob.arrayBuffer());
425 |
426 | data["username"] = this.__readFString(dv, 0, data["epsilon"]["usernameSize"]);
427 | if (dv.getUint32(0x2C, false) !== data["magik"]) {
428 | console.warn("PlatformInfo is not valid, end magic is not present at the end of the Userland info");
429 | }
430 | */
431 | }
432 |
433 | if (dv.getUint32(currentAddress, false) !== data["magik"]) {
434 | console.warn("PlatformInfo is not valid, end magic is not present at the end of the Kernel header");
435 | }
436 | currentAddress += 4
437 |
438 | data = { ...data, ...this.__parseCustomInfos(dv, currentAddress)}
439 |
440 | return data
441 | }
442 |
443 | async __parsePlatformInfo(array) {
444 | // Parse legacy platform infos
445 | var dv = new DataView(array);
446 | var data = {};
447 |
448 | const magiks = [0xF00DC0DE, 0xFEEDC0DE];
449 |
450 | data["magik"] = dv.getUint32(0x00, false);
451 |
452 | // Iterate over the magiks to find the correct one
453 | let magikFound = false;
454 | for(var i = 0; i < magiks.length; i++) {
455 | if (data["magik"] === magiks[i]) {
456 | magikFound = true;
457 | break;
458 | }
459 | }
460 | if (!magikFound) {
461 | data["magik"] = false;
462 | }
463 |
464 |
465 | if (data["magik"]) {
466 | data["oldplatform"] = !(dv.getUint32(0x1C, false) === data["magik"]);
467 |
468 | data["username"] = ""
469 |
470 | data["omega"] = {};
471 |
472 | if (data["oldplatform"]) {
473 | data["omega"]["installed"] = dv.getUint32(0x1C + 8, false) === data["magik"] || dv.getUint32(0x1C + 16, false) === 0xDEADBEEF || dv.getUint32(0x1C + 32, false) === 0xDEADBEEF;
474 | if (data["omega"]["installed"]) {
475 | data["omega"]["version"] = this.__readFString(dv, 0x0C, 16);
476 |
477 | data["omega"]["user"] = "";
478 |
479 | }
480 |
481 | data["version"] = this.__readFString(dv, 0x04, 8);
482 | var offset = 0;
483 | if (dv.getUint32(0x1C + 8, false) === data["magik"]) {
484 | offset = 8;
485 | } else if (dv.getUint32(0x1C + 16, false) === data["magik"]) {
486 | offset = 16;
487 | } else if (dv.getUint32(0x1C + 32, false) === data["magik"]) {
488 | offset = 32;
489 | }
490 |
491 | data["commit"] = this.__readFString(dv, 0x0C + offset, 8);
492 | data["storage"] = {};
493 | data["storage"]["address"] = dv.getUint32(0x14 + offset, true);
494 | data["storage"]["size"] = dv.getUint32(0x18 + offset, true);
495 | } else {
496 | data["version"] = this.__readFString(dv, 0x04, 8);
497 | data["storage"] = {};
498 | data["commit"] = this.__readFString(dv, 0x0C, 8);
499 | data["storage"]["address"] = dv.getUint32(0x14, true);
500 | data["storage"]["size"] = dv.getUint32(0x18, true);
501 |
502 | data = {...data, ...this.__parseCustomInfos(dv, 0x20)}
503 | }
504 | } else {
505 | data["omega"] = false;
506 | }
507 |
508 |
509 | return data;
510 | }
511 |
512 | __parseSlotInfo(array) {
513 | var dv = new DataView(array);
514 | let data = {};
515 | data["slot"] = {};
516 |
517 | const magik = 0xBADBEEEF;
518 | // Hack to handle corrupted slotInfo magik on old Upsilon Bootloader versions (pre 1.0.13)
519 | data["slot"]["magik"] = (dv.getUint32(0x00, false) == magik) || (data["slot"]["magik"] = dv.getUint24(0x01, false) == 0xDBEEEF08);
520 | // Check if the data is valid
521 | if (data["slot"]["magik"]) {
522 | // Check if the end magic is present
523 | if (dv.getUint32(0x0C, false) !== magik) {
524 | console.warn("SlotInfo is not valid, end magic is not present at the end of the slot info");
525 | }
526 | data["slot"]["kernelHeader"] = dv.getUint32(0x04, true);
527 | data["slot"]["userlandHeader"] = dv.getUint32(0x08, true);
528 | // Guess the active slot based on the kernel header
529 | const slotList = {
530 | 0x90000000: "A",
531 | 0x90400000: "B",
532 | 0x90180000: "Khi",
533 | };
534 | let slotStart = data["slot"]["kernelHeader"] - 0x8;
535 | // Get the slot name from the list
536 | data["slot"]["name"] = slotList[slotStart];
537 | // Check if the slot is valid
538 | if (data["slot"]["name"] == undefined) {
539 | console.warn("Slot name is not valid, the kernel header is not in the list");
540 | }
541 | }
542 | return data;
543 | }
544 |
545 |
546 | /**
547 | * Get the platforminfo section of the calculator.
548 | *
549 | * @return an object representing the platforminfo.
550 | */
551 | async getPlatformInfo() {
552 | // Get the Model. On N0120; address is different
553 | let model = this.getModel();
554 |
555 | let data = {};
556 | // Get the slot infos to know the configuration
557 | this.device.startAddress = model == "0120" ? 0x24000000 : 0x20000000;
558 | let blob = await this.device.do_upload(this.transferSize, 0x64);
559 | let slotInfo = this.__parseSlotInfo(await blob.arrayBuffer());
560 |
561 | if (slotInfo["slot"]["magik"]) {
562 | // Read the userland header
563 | this.device.startAddress = slotInfo["slot"]["userlandHeader"];
564 | blob = await this.device.do_upload(this.transferSize, 0x128);
565 | data = await this.__parseUserlandHeader(await blob.arrayBuffer());
566 | data["mode"] = "bootloader";
567 | data["oldplatform"] = false
568 |
569 | // Read the kernel header
570 | this.device.startAddress = slotInfo["slot"]["kernelHeader"];
571 | blob = await this.device.do_upload(this.transferSize, 0x64);
572 | let data_kernel = await this.__parseKernelHeader(await blob.arrayBuffer());
573 |
574 | // Merge the two objects
575 | data = {...data, ...data_kernel};
576 | } else if (!data["magik"]) {
577 | // If no magik is present, it means that there is no slot info, so it's a legacy firmware
578 | this.device.startAddress = 0x080001c4;
579 | const blob = await this.device.do_upload(this.transferSize, 0x128);
580 | data = await this.__parsePlatformInfo(await blob.arrayBuffer());
581 | data["mode"] = "legacy";
582 | return data;
583 | }
584 | data["slot"] = slotInfo["slot"];
585 | return data;
586 | }
587 |
588 | async __autoConnectDevice(device) {
589 | let interfaces = DFU.findDeviceDfuInterfaces(device.device_);
590 | await this.__fixInterfaceNames(device.device_, interfaces);
591 | device = await this.__connect(new DFU.Device(device.device_, interfaces[0]));
592 | return device;
593 | }
594 |
595 | /**
596 | * Autoconnect a numworks calculator
597 | *
598 | * @param serial Serial number. If ommited, any will work.
599 | */
600 | autoConnect(callback, serial) {
601 | var _this = this;
602 | var vid = 0x0483, pid = 0xa291;
603 |
604 | DFU.findAllDfuInterfaces().then(async dfu_devices => {
605 | let matching_devices = _this.__findMatchingDevices(vid, pid, serial, dfu_devices);
606 |
607 | if (matching_devices.length !== 0) {
608 | this.stopAutoConnect();
609 |
610 | this.device = await this.__autoConnectDevice(matching_devices[0]);
611 |
612 | await callback();
613 | }
614 | });
615 |
616 | this.autoconnectId = setTimeout(this.autoConnect.bind(this, callback, serial), AUTOCONNECT_DELAY);
617 | }
618 |
619 | /**
620 | * Stop autoconnection.
621 | */
622 | stopAutoConnect() {
623 | if (this.autoconnectId === null) return;
624 |
625 | clearTimeout(this.autoconnectId);
626 |
627 | this.autoconnectId = null;
628 | }
629 |
630 | async __fixInterfaceNames(device_, interfaces) {
631 | // Check if any interface names were not read correctly
632 | if (interfaces.some(intf => (intf.name === null))) {
633 | // Manually retrieve the interface name string descriptors
634 | let tempDevice = new DFU.Device(device_, interfaces[0]);
635 | await tempDevice.device_.open();
636 | let mapping = await tempDevice.readInterfaceNames();
637 | await tempDevice.close();
638 |
639 | for (let intf of interfaces) {
640 | if (intf.name === null) {
641 | let configIndex = intf.configuration.configurationValue;
642 | let intfNumber = intf["interface"].interfaceNumber;
643 | let alt = intf.alternate.alternateSetting;
644 | intf.name = mapping[configIndex][intfNumber][alt];
645 | }
646 | }
647 | }
648 | }
649 |
650 | __findMatchingDevices(vid, pid, serial, dfu_devices) {
651 | let matching_devices = [];
652 | for (let dfu_device of dfu_devices) {
653 | if (serial) {
654 | if (dfu_device.device_.serialNumber === serial) {
655 | matching_devices.push(dfu_device);
656 | }
657 | } else {
658 | if (
659 | (!pid && vid > 0 && dfu_device.device_.vendorId === vid) ||
660 | (!vid && pid > 0 && dfu_device.device_.productId === pid) ||
661 | (vid > 0 && pid > 0 && dfu_device.device_.vendorId === vid && dfu_device.device_.productId === pid)
662 | )
663 | {
664 | matching_devices.push(dfu_device);
665 | }
666 | }
667 | }
668 |
669 | return matching_devices;
670 | }
671 |
672 | /**
673 | * Get storage from the calculator.
674 | *
675 | * @param address Storage address
676 | * @param size Storage size.
677 | *
678 | * @return The storage, as a Blob.
679 | */
680 | async __retrieveStorage(address, size) {
681 | this.device.startAddress = address;
682 | return await this.device.do_upload(this.transferSize, size + 8);
683 | }
684 |
685 | /**
686 | * Flash storage to the calculator.
687 | *
688 | * @param address Storage address
689 | * @param data Storage data.
690 | */
691 | async __flashStorage(address, data) {
692 | this.device.startAddress = address;
693 | await this.device.do_download(this.transferSize, data, false);
694 | }
695 |
696 | /**
697 | * Install new storage in calculator
698 | *
699 | * @param storage Storage class, representing the storage.
700 | * @param callback Callback to be called when done.
701 | *
702 | * @throw Error If storage is too big.
703 | */
704 | async installStorage(storage, callback) {
705 | let pinfo = await this.getPlatformInfo();
706 |
707 | let storage_blob = await storage.encodeStorage(pinfo["storage"]["size"]);
708 | await this.__flashStorage(pinfo["storage"]["address"], await storage_blob.arrayBuffer());
709 |
710 | callback();
711 | }
712 |
713 | /**
714 | * Get and parse storage on the calculator.
715 | *
716 | * @return Storage class describing the storage of the calculator.
717 | */
718 | async backupStorage() {
719 | let pinfo = await this.getPlatformInfo();
720 |
721 | let storage_blob = await this.__retrieveStorage(pinfo["storage"]["address"], pinfo["storage"]["size"]);
722 |
723 | let storage = new Numworks.Storage();
724 |
725 | await storage.parseStorage(storage_blob);
726 |
727 | return storage;
728 | }
729 |
730 | /**
731 | * Crash the calculator by reading at a forbidden address
732 | *
733 | * @returns Boolean, True if the calculator crashed successfully
734 | */
735 | async crash() {
736 | this.device.startAddress = 0xDEADBEEF;
737 | try {
738 | const blob = await this.device.do_upload(this.transferSize, 0x128);
739 | return false;
740 | } catch {
741 | return true;
742 | }
743 | }
744 |
745 | onUnexpectedDisconnect(event, callback) {
746 | if (this.device !== null && this.device.device_ !== null) {
747 | if (this.device.device_ === event.device) {
748 | this.device.disconnected = true;
749 | callback(event);
750 | this.device = null;
751 | }
752 | }
753 | }
754 | }
755 |
756 | Numworks.Recovery = Recovery;
757 | Numworks.Storage = Storage;
758 |
759 | module.exports = Numworks;
760 |
761 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.3
2 |
3 | specifiers:
4 | webdfu: ^1.0.5
5 | webpack: ^4.46.0
6 | webpack-cli: ^3.3.12
7 | webpack-dev-server: ^3.11.2
8 |
9 | dependencies:
10 | webdfu: 1.0.5
11 |
12 | devDependencies:
13 | webpack: 4.46.0_webpack-cli@3.3.12
14 | webpack-cli: 3.3.12_webpack@4.46.0
15 | webpack-dev-server: 3.11.2_46edf965869dcc7c8d09e022f331d1ea
16 |
17 | packages:
18 |
19 | /@types/glob/7.1.3:
20 | resolution: {integrity: sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==}
21 | dependencies:
22 | '@types/minimatch': 3.0.4
23 | '@types/node': 15.3.0
24 | dev: true
25 |
26 | /@types/minimatch/3.0.4:
27 | resolution: {integrity: sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==}
28 | dev: true
29 |
30 | /@types/node/15.3.0:
31 | resolution: {integrity: sha512-8/bnjSZD86ZfpBsDlCIkNXIvm+h6wi9g7IqL+kmFkQ+Wvu3JrasgLElfiPgoo8V8vVfnEi0QVS12gbl94h9YsQ==}
32 | dev: true
33 |
34 | /@webassemblyjs/ast/1.9.0:
35 | resolution: {integrity: sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==}
36 | dependencies:
37 | '@webassemblyjs/helper-module-context': 1.9.0
38 | '@webassemblyjs/helper-wasm-bytecode': 1.9.0
39 | '@webassemblyjs/wast-parser': 1.9.0
40 | dev: true
41 |
42 | /@webassemblyjs/floating-point-hex-parser/1.9.0:
43 | resolution: {integrity: sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==}
44 | dev: true
45 |
46 | /@webassemblyjs/helper-api-error/1.9.0:
47 | resolution: {integrity: sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==}
48 | dev: true
49 |
50 | /@webassemblyjs/helper-buffer/1.9.0:
51 | resolution: {integrity: sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==}
52 | dev: true
53 |
54 | /@webassemblyjs/helper-code-frame/1.9.0:
55 | resolution: {integrity: sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==}
56 | dependencies:
57 | '@webassemblyjs/wast-printer': 1.9.0
58 | dev: true
59 |
60 | /@webassemblyjs/helper-fsm/1.9.0:
61 | resolution: {integrity: sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==}
62 | dev: true
63 |
64 | /@webassemblyjs/helper-module-context/1.9.0:
65 | resolution: {integrity: sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==}
66 | dependencies:
67 | '@webassemblyjs/ast': 1.9.0
68 | dev: true
69 |
70 | /@webassemblyjs/helper-wasm-bytecode/1.9.0:
71 | resolution: {integrity: sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==}
72 | dev: true
73 |
74 | /@webassemblyjs/helper-wasm-section/1.9.0:
75 | resolution: {integrity: sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==}
76 | dependencies:
77 | '@webassemblyjs/ast': 1.9.0
78 | '@webassemblyjs/helper-buffer': 1.9.0
79 | '@webassemblyjs/helper-wasm-bytecode': 1.9.0
80 | '@webassemblyjs/wasm-gen': 1.9.0
81 | dev: true
82 |
83 | /@webassemblyjs/ieee754/1.9.0:
84 | resolution: {integrity: sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==}
85 | dependencies:
86 | '@xtuc/ieee754': 1.2.0
87 | dev: true
88 |
89 | /@webassemblyjs/leb128/1.9.0:
90 | resolution: {integrity: sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==}
91 | dependencies:
92 | '@xtuc/long': 4.2.2
93 | dev: true
94 |
95 | /@webassemblyjs/utf8/1.9.0:
96 | resolution: {integrity: sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==}
97 | dev: true
98 |
99 | /@webassemblyjs/wasm-edit/1.9.0:
100 | resolution: {integrity: sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==}
101 | dependencies:
102 | '@webassemblyjs/ast': 1.9.0
103 | '@webassemblyjs/helper-buffer': 1.9.0
104 | '@webassemblyjs/helper-wasm-bytecode': 1.9.0
105 | '@webassemblyjs/helper-wasm-section': 1.9.0
106 | '@webassemblyjs/wasm-gen': 1.9.0
107 | '@webassemblyjs/wasm-opt': 1.9.0
108 | '@webassemblyjs/wasm-parser': 1.9.0
109 | '@webassemblyjs/wast-printer': 1.9.0
110 | dev: true
111 |
112 | /@webassemblyjs/wasm-gen/1.9.0:
113 | resolution: {integrity: sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==}
114 | dependencies:
115 | '@webassemblyjs/ast': 1.9.0
116 | '@webassemblyjs/helper-wasm-bytecode': 1.9.0
117 | '@webassemblyjs/ieee754': 1.9.0
118 | '@webassemblyjs/leb128': 1.9.0
119 | '@webassemblyjs/utf8': 1.9.0
120 | dev: true
121 |
122 | /@webassemblyjs/wasm-opt/1.9.0:
123 | resolution: {integrity: sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==}
124 | dependencies:
125 | '@webassemblyjs/ast': 1.9.0
126 | '@webassemblyjs/helper-buffer': 1.9.0
127 | '@webassemblyjs/wasm-gen': 1.9.0
128 | '@webassemblyjs/wasm-parser': 1.9.0
129 | dev: true
130 |
131 | /@webassemblyjs/wasm-parser/1.9.0:
132 | resolution: {integrity: sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==}
133 | dependencies:
134 | '@webassemblyjs/ast': 1.9.0
135 | '@webassemblyjs/helper-api-error': 1.9.0
136 | '@webassemblyjs/helper-wasm-bytecode': 1.9.0
137 | '@webassemblyjs/ieee754': 1.9.0
138 | '@webassemblyjs/leb128': 1.9.0
139 | '@webassemblyjs/utf8': 1.9.0
140 | dev: true
141 |
142 | /@webassemblyjs/wast-parser/1.9.0:
143 | resolution: {integrity: sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==}
144 | dependencies:
145 | '@webassemblyjs/ast': 1.9.0
146 | '@webassemblyjs/floating-point-hex-parser': 1.9.0
147 | '@webassemblyjs/helper-api-error': 1.9.0
148 | '@webassemblyjs/helper-code-frame': 1.9.0
149 | '@webassemblyjs/helper-fsm': 1.9.0
150 | '@xtuc/long': 4.2.2
151 | dev: true
152 |
153 | /@webassemblyjs/wast-printer/1.9.0:
154 | resolution: {integrity: sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==}
155 | dependencies:
156 | '@webassemblyjs/ast': 1.9.0
157 | '@webassemblyjs/wast-parser': 1.9.0
158 | '@xtuc/long': 4.2.2
159 | dev: true
160 |
161 | /@xtuc/ieee754/1.2.0:
162 | resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
163 | dev: true
164 |
165 | /@xtuc/long/4.2.2:
166 | resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
167 | dev: true
168 |
169 | /accepts/1.3.7:
170 | resolution: {integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==}
171 | engines: {node: '>= 0.6'}
172 | dependencies:
173 | mime-types: 2.1.30
174 | negotiator: 0.6.2
175 | dev: true
176 |
177 | /acorn/6.4.2:
178 | resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==}
179 | engines: {node: '>=0.4.0'}
180 | hasBin: true
181 | dev: true
182 |
183 | /ajv-errors/1.0.1_ajv@6.12.6:
184 | resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==}
185 | peerDependencies:
186 | ajv: '>=5.0.0'
187 | dependencies:
188 | ajv: 6.12.6
189 | dev: true
190 |
191 | /ajv-keywords/3.5.2_ajv@6.12.6:
192 | resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
193 | peerDependencies:
194 | ajv: ^6.9.1
195 | dependencies:
196 | ajv: 6.12.6
197 | dev: true
198 |
199 | /ajv/6.12.6:
200 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
201 | dependencies:
202 | fast-deep-equal: 3.1.3
203 | fast-json-stable-stringify: 2.1.0
204 | json-schema-traverse: 0.4.1
205 | uri-js: 4.4.1
206 | dev: true
207 |
208 | /ansi-colors/3.2.4:
209 | resolution: {integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==}
210 | engines: {node: '>=6'}
211 | dev: true
212 |
213 | /ansi-html/0.0.7:
214 | resolution: {integrity: sha1-gTWEAhliqenm/QOflA0S9WynhZ4=}
215 | engines: {'0': node >= 0.8.0}
216 | hasBin: true
217 | dev: true
218 |
219 | /ansi-regex/2.1.1:
220 | resolution: {integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8=}
221 | engines: {node: '>=0.10.0'}
222 | dev: true
223 |
224 | /ansi-regex/4.1.0:
225 | resolution: {integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==}
226 | engines: {node: '>=6'}
227 | dev: true
228 |
229 | /ansi-styles/3.2.1:
230 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
231 | engines: {node: '>=4'}
232 | dependencies:
233 | color-convert: 1.9.3
234 | dev: true
235 |
236 | /anymatch/2.0.0:
237 | resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==}
238 | dependencies:
239 | micromatch: 3.1.10
240 | normalize-path: 2.1.1
241 | dev: true
242 |
243 | /anymatch/3.1.2:
244 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
245 | engines: {node: '>= 8'}
246 | dependencies:
247 | normalize-path: 3.0.0
248 | picomatch: 2.2.3
249 | dev: true
250 | optional: true
251 |
252 | /aproba/1.2.0:
253 | resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==}
254 | dev: true
255 |
256 | /arr-diff/4.0.0:
257 | resolution: {integrity: sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=}
258 | engines: {node: '>=0.10.0'}
259 | dev: true
260 |
261 | /arr-flatten/1.1.0:
262 | resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==}
263 | engines: {node: '>=0.10.0'}
264 | dev: true
265 |
266 | /arr-union/3.1.0:
267 | resolution: {integrity: sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=}
268 | engines: {node: '>=0.10.0'}
269 | dev: true
270 |
271 | /array-flatten/1.1.1:
272 | resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=}
273 | dev: true
274 |
275 | /array-flatten/2.1.2:
276 | resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==}
277 | dev: true
278 |
279 | /array-union/1.0.2:
280 | resolution: {integrity: sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=}
281 | engines: {node: '>=0.10.0'}
282 | dependencies:
283 | array-uniq: 1.0.3
284 | dev: true
285 |
286 | /array-uniq/1.0.3:
287 | resolution: {integrity: sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=}
288 | engines: {node: '>=0.10.0'}
289 | dev: true
290 |
291 | /array-unique/0.3.2:
292 | resolution: {integrity: sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=}
293 | engines: {node: '>=0.10.0'}
294 | dev: true
295 |
296 | /asn1.js/5.4.1:
297 | resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==}
298 | dependencies:
299 | bn.js: 4.12.0
300 | inherits: 2.0.4
301 | minimalistic-assert: 1.0.1
302 | safer-buffer: 2.1.2
303 | dev: true
304 |
305 | /assert/1.5.0:
306 | resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==}
307 | dependencies:
308 | object-assign: 4.1.1
309 | util: 0.10.3
310 | dev: true
311 |
312 | /assign-symbols/1.0.0:
313 | resolution: {integrity: sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=}
314 | engines: {node: '>=0.10.0'}
315 | dev: true
316 |
317 | /async-each/1.0.3:
318 | resolution: {integrity: sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==}
319 | dev: true
320 |
321 | /async-limiter/1.0.1:
322 | resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==}
323 | dev: true
324 |
325 | /async/2.6.3:
326 | resolution: {integrity: sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==}
327 | dependencies:
328 | lodash: 4.17.21
329 | dev: true
330 |
331 | /atob/2.1.2:
332 | resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==}
333 | engines: {node: '>= 4.5.0'}
334 | hasBin: true
335 | dev: true
336 |
337 | /balanced-match/1.0.2:
338 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
339 | dev: true
340 |
341 | /base/0.11.2:
342 | resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==}
343 | engines: {node: '>=0.10.0'}
344 | dependencies:
345 | cache-base: 1.0.1
346 | class-utils: 0.3.6
347 | component-emitter: 1.3.0
348 | define-property: 1.0.0
349 | isobject: 3.0.1
350 | mixin-deep: 1.3.2
351 | pascalcase: 0.1.1
352 | dev: true
353 |
354 | /base64-js/1.5.1:
355 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
356 | dev: true
357 |
358 | /batch/0.6.1:
359 | resolution: {integrity: sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=}
360 | dev: true
361 |
362 | /big.js/5.2.2:
363 | resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
364 | dev: true
365 |
366 | /binary-extensions/1.13.1:
367 | resolution: {integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==}
368 | engines: {node: '>=0.10.0'}
369 | dev: true
370 |
371 | /binary-extensions/2.2.0:
372 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
373 | engines: {node: '>=8'}
374 | dev: true
375 | optional: true
376 |
377 | /bindings/1.5.0:
378 | resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
379 | dependencies:
380 | file-uri-to-path: 1.0.0
381 | dev: true
382 | optional: true
383 |
384 | /bluebird/3.7.2:
385 | resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
386 | dev: true
387 |
388 | /bn.js/4.12.0:
389 | resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==}
390 | dev: true
391 |
392 | /bn.js/5.2.0:
393 | resolution: {integrity: sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==}
394 | dev: true
395 |
396 | /body-parser/1.19.0:
397 | resolution: {integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==}
398 | engines: {node: '>= 0.8'}
399 | dependencies:
400 | bytes: 3.1.0
401 | content-type: 1.0.4
402 | debug: 2.6.9
403 | depd: 1.1.2
404 | http-errors: 1.7.2
405 | iconv-lite: 0.4.24
406 | on-finished: 2.3.0
407 | qs: 6.7.0
408 | raw-body: 2.4.0
409 | type-is: 1.6.18
410 | dev: true
411 |
412 | /bonjour/3.5.0:
413 | resolution: {integrity: sha1-jokKGD2O6aI5OzhExpGkK897yfU=}
414 | dependencies:
415 | array-flatten: 2.1.2
416 | deep-equal: 1.1.1
417 | dns-equal: 1.0.0
418 | dns-txt: 2.0.2
419 | multicast-dns: 6.2.3
420 | multicast-dns-service-types: 1.1.0
421 | dev: true
422 |
423 | /brace-expansion/1.1.11:
424 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
425 | dependencies:
426 | balanced-match: 1.0.2
427 | concat-map: 0.0.1
428 | dev: true
429 |
430 | /braces/2.3.2:
431 | resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==}
432 | engines: {node: '>=0.10.0'}
433 | dependencies:
434 | arr-flatten: 1.1.0
435 | array-unique: 0.3.2
436 | extend-shallow: 2.0.1
437 | fill-range: 4.0.0
438 | isobject: 3.0.1
439 | repeat-element: 1.1.4
440 | snapdragon: 0.8.2
441 | snapdragon-node: 2.1.1
442 | split-string: 3.1.0
443 | to-regex: 3.0.2
444 | dev: true
445 |
446 | /braces/3.0.2:
447 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
448 | engines: {node: '>=8'}
449 | dependencies:
450 | fill-range: 7.0.1
451 | dev: true
452 | optional: true
453 |
454 | /brorand/1.1.0:
455 | resolution: {integrity: sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=}
456 | dev: true
457 |
458 | /browserify-aes/1.2.0:
459 | resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==}
460 | dependencies:
461 | buffer-xor: 1.0.3
462 | cipher-base: 1.0.4
463 | create-hash: 1.2.0
464 | evp_bytestokey: 1.0.3
465 | inherits: 2.0.4
466 | safe-buffer: 5.2.1
467 | dev: true
468 |
469 | /browserify-cipher/1.0.1:
470 | resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==}
471 | dependencies:
472 | browserify-aes: 1.2.0
473 | browserify-des: 1.0.2
474 | evp_bytestokey: 1.0.3
475 | dev: true
476 |
477 | /browserify-des/1.0.2:
478 | resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==}
479 | dependencies:
480 | cipher-base: 1.0.4
481 | des.js: 1.0.1
482 | inherits: 2.0.4
483 | safe-buffer: 5.2.1
484 | dev: true
485 |
486 | /browserify-rsa/4.1.0:
487 | resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==}
488 | dependencies:
489 | bn.js: 5.2.0
490 | randombytes: 2.1.0
491 | dev: true
492 |
493 | /browserify-sign/4.2.1:
494 | resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==}
495 | dependencies:
496 | bn.js: 5.2.0
497 | browserify-rsa: 4.1.0
498 | create-hash: 1.2.0
499 | create-hmac: 1.1.7
500 | elliptic: 6.5.4
501 | inherits: 2.0.4
502 | parse-asn1: 5.1.6
503 | readable-stream: 3.6.0
504 | safe-buffer: 5.2.1
505 | dev: true
506 |
507 | /browserify-zlib/0.2.0:
508 | resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==}
509 | dependencies:
510 | pako: 1.0.11
511 | dev: true
512 |
513 | /buffer-from/1.1.1:
514 | resolution: {integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==}
515 | dev: true
516 |
517 | /buffer-indexof/1.1.1:
518 | resolution: {integrity: sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==}
519 | dev: true
520 |
521 | /buffer-xor/1.0.3:
522 | resolution: {integrity: sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=}
523 | dev: true
524 |
525 | /buffer/4.9.2:
526 | resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==}
527 | dependencies:
528 | base64-js: 1.5.1
529 | ieee754: 1.2.1
530 | isarray: 1.0.0
531 | dev: true
532 |
533 | /builtin-status-codes/3.0.0:
534 | resolution: {integrity: sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=}
535 | dev: true
536 |
537 | /bytes/3.0.0:
538 | resolution: {integrity: sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=}
539 | engines: {node: '>= 0.8'}
540 | dev: true
541 |
542 | /bytes/3.1.0:
543 | resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==}
544 | engines: {node: '>= 0.8'}
545 | dev: true
546 |
547 | /cacache/12.0.4:
548 | resolution: {integrity: sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==}
549 | dependencies:
550 | bluebird: 3.7.2
551 | chownr: 1.1.4
552 | figgy-pudding: 3.5.2
553 | glob: 7.1.7
554 | graceful-fs: 4.2.6
555 | infer-owner: 1.0.4
556 | lru-cache: 5.1.1
557 | mississippi: 3.0.0
558 | mkdirp: 0.5.5
559 | move-concurrently: 1.0.1
560 | promise-inflight: 1.0.1
561 | rimraf: 2.7.1
562 | ssri: 6.0.2
563 | unique-filename: 1.1.1
564 | y18n: 4.0.3
565 | dev: true
566 |
567 | /cache-base/1.0.1:
568 | resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==}
569 | engines: {node: '>=0.10.0'}
570 | dependencies:
571 | collection-visit: 1.0.0
572 | component-emitter: 1.3.0
573 | get-value: 2.0.6
574 | has-value: 1.0.0
575 | isobject: 3.0.1
576 | set-value: 2.0.1
577 | to-object-path: 0.3.0
578 | union-value: 1.0.1
579 | unset-value: 1.0.0
580 | dev: true
581 |
582 | /call-bind/1.0.2:
583 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
584 | dependencies:
585 | function-bind: 1.1.1
586 | get-intrinsic: 1.1.1
587 | dev: true
588 |
589 | /camelcase/5.3.1:
590 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
591 | engines: {node: '>=6'}
592 | dev: true
593 |
594 | /chalk/2.4.2:
595 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
596 | engines: {node: '>=4'}
597 | dependencies:
598 | ansi-styles: 3.2.1
599 | escape-string-regexp: 1.0.5
600 | supports-color: 5.5.0
601 | dev: true
602 |
603 | /chokidar/2.1.8:
604 | resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==}
605 | deprecated: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.
606 | dependencies:
607 | anymatch: 2.0.0
608 | async-each: 1.0.3
609 | braces: 2.3.2
610 | glob-parent: 3.1.0
611 | inherits: 2.0.4
612 | is-binary-path: 1.0.1
613 | is-glob: 4.0.1
614 | normalize-path: 3.0.0
615 | path-is-absolute: 1.0.1
616 | readdirp: 2.2.1
617 | upath: 1.2.0
618 | optionalDependencies:
619 | fsevents: 1.2.13
620 | dev: true
621 |
622 | /chokidar/3.5.1:
623 | resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==}
624 | engines: {node: '>= 8.10.0'}
625 | dependencies:
626 | anymatch: 3.1.2
627 | braces: 3.0.2
628 | glob-parent: 5.1.2
629 | is-binary-path: 2.1.0
630 | is-glob: 4.0.1
631 | normalize-path: 3.0.0
632 | readdirp: 3.5.0
633 | optionalDependencies:
634 | fsevents: 2.3.2
635 | dev: true
636 | optional: true
637 |
638 | /chownr/1.1.4:
639 | resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
640 | dev: true
641 |
642 | /chrome-trace-event/1.0.3:
643 | resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==}
644 | engines: {node: '>=6.0'}
645 | dev: true
646 |
647 | /cipher-base/1.0.4:
648 | resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==}
649 | dependencies:
650 | inherits: 2.0.4
651 | safe-buffer: 5.2.1
652 | dev: true
653 |
654 | /class-utils/0.3.6:
655 | resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==}
656 | engines: {node: '>=0.10.0'}
657 | dependencies:
658 | arr-union: 3.1.0
659 | define-property: 0.2.5
660 | isobject: 3.0.1
661 | static-extend: 0.1.2
662 | dev: true
663 |
664 | /cliui/5.0.0:
665 | resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==}
666 | dependencies:
667 | string-width: 3.1.0
668 | strip-ansi: 5.2.0
669 | wrap-ansi: 5.1.0
670 | dev: true
671 |
672 | /collection-visit/1.0.0:
673 | resolution: {integrity: sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=}
674 | engines: {node: '>=0.10.0'}
675 | dependencies:
676 | map-visit: 1.0.0
677 | object-visit: 1.0.1
678 | dev: true
679 |
680 | /color-convert/1.9.3:
681 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
682 | dependencies:
683 | color-name: 1.1.3
684 | dev: true
685 |
686 | /color-name/1.1.3:
687 | resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=}
688 | dev: true
689 |
690 | /commander/2.20.3:
691 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
692 | dev: true
693 |
694 | /commondir/1.0.1:
695 | resolution: {integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=}
696 | dev: true
697 |
698 | /component-emitter/1.3.0:
699 | resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==}
700 | dev: true
701 |
702 | /compressible/2.0.18:
703 | resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
704 | engines: {node: '>= 0.6'}
705 | dependencies:
706 | mime-db: 1.47.0
707 | dev: true
708 |
709 | /compression/1.7.4:
710 | resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==}
711 | engines: {node: '>= 0.8.0'}
712 | dependencies:
713 | accepts: 1.3.7
714 | bytes: 3.0.0
715 | compressible: 2.0.18
716 | debug: 2.6.9
717 | on-headers: 1.0.2
718 | safe-buffer: 5.1.2
719 | vary: 1.1.2
720 | dev: true
721 |
722 | /concat-map/0.0.1:
723 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
724 | dev: true
725 |
726 | /concat-stream/1.6.2:
727 | resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==}
728 | engines: {'0': node >= 0.8}
729 | dependencies:
730 | buffer-from: 1.1.1
731 | inherits: 2.0.4
732 | readable-stream: 2.3.7
733 | typedarray: 0.0.6
734 | dev: true
735 |
736 | /connect-history-api-fallback/1.6.0:
737 | resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==}
738 | engines: {node: '>=0.8'}
739 | dev: true
740 |
741 | /console-browserify/1.2.0:
742 | resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==}
743 | dev: true
744 |
745 | /constants-browserify/1.0.0:
746 | resolution: {integrity: sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=}
747 | dev: true
748 |
749 | /content-disposition/0.5.3:
750 | resolution: {integrity: sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==}
751 | engines: {node: '>= 0.6'}
752 | dependencies:
753 | safe-buffer: 5.1.2
754 | dev: true
755 |
756 | /content-type/1.0.4:
757 | resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==}
758 | engines: {node: '>= 0.6'}
759 | dev: true
760 |
761 | /cookie-signature/1.0.6:
762 | resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=}
763 | dev: true
764 |
765 | /cookie/0.4.0:
766 | resolution: {integrity: sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==}
767 | engines: {node: '>= 0.6'}
768 | dev: true
769 |
770 | /copy-concurrently/1.0.5:
771 | resolution: {integrity: sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==}
772 | dependencies:
773 | aproba: 1.2.0
774 | fs-write-stream-atomic: 1.0.10
775 | iferr: 0.1.5
776 | mkdirp: 0.5.5
777 | rimraf: 2.7.1
778 | run-queue: 1.0.3
779 | dev: true
780 |
781 | /copy-descriptor/0.1.1:
782 | resolution: {integrity: sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=}
783 | engines: {node: '>=0.10.0'}
784 | dev: true
785 |
786 | /core-util-is/1.0.2:
787 | resolution: {integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=}
788 | dev: true
789 |
790 | /create-ecdh/4.0.4:
791 | resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==}
792 | dependencies:
793 | bn.js: 4.12.0
794 | elliptic: 6.5.4
795 | dev: true
796 |
797 | /create-hash/1.2.0:
798 | resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==}
799 | dependencies:
800 | cipher-base: 1.0.4
801 | inherits: 2.0.4
802 | md5.js: 1.3.5
803 | ripemd160: 2.0.2
804 | sha.js: 2.4.11
805 | dev: true
806 |
807 | /create-hmac/1.1.7:
808 | resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==}
809 | dependencies:
810 | cipher-base: 1.0.4
811 | create-hash: 1.2.0
812 | inherits: 2.0.4
813 | ripemd160: 2.0.2
814 | safe-buffer: 5.2.1
815 | sha.js: 2.4.11
816 | dev: true
817 |
818 | /cross-spawn/6.0.5:
819 | resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==}
820 | engines: {node: '>=4.8'}
821 | dependencies:
822 | nice-try: 1.0.5
823 | path-key: 2.0.1
824 | semver: 5.7.1
825 | shebang-command: 1.2.0
826 | which: 1.3.1
827 | dev: true
828 |
829 | /crypto-browserify/3.12.0:
830 | resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==}
831 | dependencies:
832 | browserify-cipher: 1.0.1
833 | browserify-sign: 4.2.1
834 | create-ecdh: 4.0.4
835 | create-hash: 1.2.0
836 | create-hmac: 1.1.7
837 | diffie-hellman: 5.0.3
838 | inherits: 2.0.4
839 | pbkdf2: 3.1.2
840 | public-encrypt: 4.0.3
841 | randombytes: 2.1.0
842 | randomfill: 1.0.4
843 | dev: true
844 |
845 | /cyclist/1.0.1:
846 | resolution: {integrity: sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=}
847 | dev: true
848 |
849 | /debug/2.6.9:
850 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
851 | dependencies:
852 | ms: 2.0.0
853 | dev: true
854 |
855 | /debug/3.2.7:
856 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
857 | dependencies:
858 | ms: 2.1.3
859 | dev: true
860 |
861 | /debug/4.3.1_supports-color@6.1.0:
862 | resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==}
863 | engines: {node: '>=6.0'}
864 | peerDependencies:
865 | supports-color: '*'
866 | peerDependenciesMeta:
867 | supports-color:
868 | optional: true
869 | dependencies:
870 | ms: 2.1.2
871 | supports-color: 6.1.0
872 | dev: true
873 |
874 | /decamelize/1.2.0:
875 | resolution: {integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=}
876 | engines: {node: '>=0.10.0'}
877 | dev: true
878 |
879 | /decode-uri-component/0.2.0:
880 | resolution: {integrity: sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=}
881 | engines: {node: '>=0.10'}
882 | dev: true
883 |
884 | /deep-equal/1.1.1:
885 | resolution: {integrity: sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==}
886 | dependencies:
887 | is-arguments: 1.1.0
888 | is-date-object: 1.0.4
889 | is-regex: 1.1.3
890 | object-is: 1.1.5
891 | object-keys: 1.1.1
892 | regexp.prototype.flags: 1.3.1
893 | dev: true
894 |
895 | /default-gateway/4.2.0:
896 | resolution: {integrity: sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==}
897 | engines: {node: '>=6'}
898 | dependencies:
899 | execa: 1.0.0
900 | ip-regex: 2.1.0
901 | dev: true
902 |
903 | /define-properties/1.1.3:
904 | resolution: {integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==}
905 | engines: {node: '>= 0.4'}
906 | dependencies:
907 | object-keys: 1.1.1
908 | dev: true
909 |
910 | /define-property/0.2.5:
911 | resolution: {integrity: sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=}
912 | engines: {node: '>=0.10.0'}
913 | dependencies:
914 | is-descriptor: 0.1.6
915 | dev: true
916 |
917 | /define-property/1.0.0:
918 | resolution: {integrity: sha1-dp66rz9KY6rTr56NMEybvnm/sOY=}
919 | engines: {node: '>=0.10.0'}
920 | dependencies:
921 | is-descriptor: 1.0.2
922 | dev: true
923 |
924 | /define-property/2.0.2:
925 | resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==}
926 | engines: {node: '>=0.10.0'}
927 | dependencies:
928 | is-descriptor: 1.0.2
929 | isobject: 3.0.1
930 | dev: true
931 |
932 | /del/4.1.1:
933 | resolution: {integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==}
934 | engines: {node: '>=6'}
935 | dependencies:
936 | '@types/glob': 7.1.3
937 | globby: 6.1.0
938 | is-path-cwd: 2.2.0
939 | is-path-in-cwd: 2.1.0
940 | p-map: 2.1.0
941 | pify: 4.0.1
942 | rimraf: 2.7.1
943 | dev: true
944 |
945 | /depd/1.1.2:
946 | resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=}
947 | engines: {node: '>= 0.6'}
948 | dev: true
949 |
950 | /des.js/1.0.1:
951 | resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==}
952 | dependencies:
953 | inherits: 2.0.4
954 | minimalistic-assert: 1.0.1
955 | dev: true
956 |
957 | /destroy/1.0.4:
958 | resolution: {integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=}
959 | dev: true
960 |
961 | /detect-file/1.0.0:
962 | resolution: {integrity: sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=}
963 | engines: {node: '>=0.10.0'}
964 | dev: true
965 |
966 | /detect-node/2.0.5:
967 | resolution: {integrity: sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw==}
968 | dev: true
969 |
970 | /diffie-hellman/5.0.3:
971 | resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==}
972 | dependencies:
973 | bn.js: 4.12.0
974 | miller-rabin: 4.0.1
975 | randombytes: 2.1.0
976 | dev: true
977 |
978 | /dns-equal/1.0.0:
979 | resolution: {integrity: sha1-s55/HabrCnW6nBcySzR1PEfgZU0=}
980 | dev: true
981 |
982 | /dns-packet/1.3.1:
983 | resolution: {integrity: sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==}
984 | dependencies:
985 | ip: 1.1.5
986 | safe-buffer: 5.2.1
987 | dev: true
988 |
989 | /dns-txt/2.0.2:
990 | resolution: {integrity: sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=}
991 | dependencies:
992 | buffer-indexof: 1.1.1
993 | dev: true
994 |
995 | /domain-browser/1.2.0:
996 | resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==}
997 | engines: {node: '>=0.4', npm: '>=1.2'}
998 | dev: true
999 |
1000 | /duplexify/3.7.1:
1001 | resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==}
1002 | dependencies:
1003 | end-of-stream: 1.4.4
1004 | inherits: 2.0.4
1005 | readable-stream: 2.3.7
1006 | stream-shift: 1.0.1
1007 | dev: true
1008 |
1009 | /ee-first/1.1.1:
1010 | resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=}
1011 | dev: true
1012 |
1013 | /elliptic/6.5.4:
1014 | resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==}
1015 | dependencies:
1016 | bn.js: 4.12.0
1017 | brorand: 1.1.0
1018 | hash.js: 1.1.7
1019 | hmac-drbg: 1.0.1
1020 | inherits: 2.0.4
1021 | minimalistic-assert: 1.0.1
1022 | minimalistic-crypto-utils: 1.0.1
1023 | dev: true
1024 |
1025 | /emoji-regex/7.0.3:
1026 | resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==}
1027 | dev: true
1028 |
1029 | /emojis-list/3.0.0:
1030 | resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
1031 | engines: {node: '>= 4'}
1032 | dev: true
1033 |
1034 | /encodeurl/1.0.2:
1035 | resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=}
1036 | engines: {node: '>= 0.8'}
1037 | dev: true
1038 |
1039 | /end-of-stream/1.4.4:
1040 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
1041 | dependencies:
1042 | once: 1.4.0
1043 | dev: true
1044 |
1045 | /enhanced-resolve/4.5.0:
1046 | resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==}
1047 | engines: {node: '>=6.9.0'}
1048 | dependencies:
1049 | graceful-fs: 4.2.6
1050 | memory-fs: 0.5.0
1051 | tapable: 1.1.3
1052 | dev: true
1053 |
1054 | /errno/0.1.8:
1055 | resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
1056 | hasBin: true
1057 | dependencies:
1058 | prr: 1.0.1
1059 | dev: true
1060 |
1061 | /escape-html/1.0.3:
1062 | resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=}
1063 | dev: true
1064 |
1065 | /escape-string-regexp/1.0.5:
1066 | resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=}
1067 | engines: {node: '>=0.8.0'}
1068 | dev: true
1069 |
1070 | /eslint-scope/4.0.3:
1071 | resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==}
1072 | engines: {node: '>=4.0.0'}
1073 | dependencies:
1074 | esrecurse: 4.3.0
1075 | estraverse: 4.3.0
1076 | dev: true
1077 |
1078 | /esrecurse/4.3.0:
1079 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
1080 | engines: {node: '>=4.0'}
1081 | dependencies:
1082 | estraverse: 5.2.0
1083 | dev: true
1084 |
1085 | /estraverse/4.3.0:
1086 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
1087 | engines: {node: '>=4.0'}
1088 | dev: true
1089 |
1090 | /estraverse/5.2.0:
1091 | resolution: {integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==}
1092 | engines: {node: '>=4.0'}
1093 | dev: true
1094 |
1095 | /etag/1.8.1:
1096 | resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=}
1097 | engines: {node: '>= 0.6'}
1098 | dev: true
1099 |
1100 | /eventemitter3/4.0.7:
1101 | resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
1102 | dev: true
1103 |
1104 | /events/3.3.0:
1105 | resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
1106 | engines: {node: '>=0.8.x'}
1107 | dev: true
1108 |
1109 | /eventsource/1.1.0:
1110 | resolution: {integrity: sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==}
1111 | engines: {node: '>=0.12.0'}
1112 | dependencies:
1113 | original: 1.0.2
1114 | dev: true
1115 |
1116 | /evp_bytestokey/1.0.3:
1117 | resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==}
1118 | dependencies:
1119 | md5.js: 1.3.5
1120 | safe-buffer: 5.2.1
1121 | dev: true
1122 |
1123 | /execa/1.0.0:
1124 | resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==}
1125 | engines: {node: '>=6'}
1126 | dependencies:
1127 | cross-spawn: 6.0.5
1128 | get-stream: 4.1.0
1129 | is-stream: 1.1.0
1130 | npm-run-path: 2.0.2
1131 | p-finally: 1.0.0
1132 | signal-exit: 3.0.3
1133 | strip-eof: 1.0.0
1134 | dev: true
1135 |
1136 | /expand-brackets/2.1.4:
1137 | resolution: {integrity: sha1-t3c14xXOMPa27/D4OwQVGiJEliI=}
1138 | engines: {node: '>=0.10.0'}
1139 | dependencies:
1140 | debug: 2.6.9
1141 | define-property: 0.2.5
1142 | extend-shallow: 2.0.1
1143 | posix-character-classes: 0.1.1
1144 | regex-not: 1.0.2
1145 | snapdragon: 0.8.2
1146 | to-regex: 3.0.2
1147 | dev: true
1148 |
1149 | /expand-tilde/2.0.2:
1150 | resolution: {integrity: sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=}
1151 | engines: {node: '>=0.10.0'}
1152 | dependencies:
1153 | homedir-polyfill: 1.0.3
1154 | dev: true
1155 |
1156 | /express/4.17.1:
1157 | resolution: {integrity: sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==}
1158 | engines: {node: '>= 0.10.0'}
1159 | dependencies:
1160 | accepts: 1.3.7
1161 | array-flatten: 1.1.1
1162 | body-parser: 1.19.0
1163 | content-disposition: 0.5.3
1164 | content-type: 1.0.4
1165 | cookie: 0.4.0
1166 | cookie-signature: 1.0.6
1167 | debug: 2.6.9
1168 | depd: 1.1.2
1169 | encodeurl: 1.0.2
1170 | escape-html: 1.0.3
1171 | etag: 1.8.1
1172 | finalhandler: 1.1.2
1173 | fresh: 0.5.2
1174 | merge-descriptors: 1.0.1
1175 | methods: 1.1.2
1176 | on-finished: 2.3.0
1177 | parseurl: 1.3.3
1178 | path-to-regexp: 0.1.7
1179 | proxy-addr: 2.0.6
1180 | qs: 6.7.0
1181 | range-parser: 1.2.1
1182 | safe-buffer: 5.1.2
1183 | send: 0.17.1
1184 | serve-static: 1.14.1
1185 | setprototypeof: 1.1.1
1186 | statuses: 1.5.0
1187 | type-is: 1.6.18
1188 | utils-merge: 1.0.1
1189 | vary: 1.1.2
1190 | dev: true
1191 |
1192 | /extend-shallow/2.0.1:
1193 | resolution: {integrity: sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=}
1194 | engines: {node: '>=0.10.0'}
1195 | dependencies:
1196 | is-extendable: 0.1.1
1197 | dev: true
1198 |
1199 | /extend-shallow/3.0.2:
1200 | resolution: {integrity: sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=}
1201 | engines: {node: '>=0.10.0'}
1202 | dependencies:
1203 | assign-symbols: 1.0.0
1204 | is-extendable: 1.0.1
1205 | dev: true
1206 |
1207 | /extglob/2.0.4:
1208 | resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==}
1209 | engines: {node: '>=0.10.0'}
1210 | dependencies:
1211 | array-unique: 0.3.2
1212 | define-property: 1.0.0
1213 | expand-brackets: 2.1.4
1214 | extend-shallow: 2.0.1
1215 | fragment-cache: 0.2.1
1216 | regex-not: 1.0.2
1217 | snapdragon: 0.8.2
1218 | to-regex: 3.0.2
1219 | dev: true
1220 |
1221 | /fast-deep-equal/3.1.3:
1222 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
1223 | dev: true
1224 |
1225 | /fast-json-stable-stringify/2.1.0:
1226 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
1227 | dev: true
1228 |
1229 | /faye-websocket/0.11.3:
1230 | resolution: {integrity: sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==}
1231 | engines: {node: '>=0.8.0'}
1232 | dependencies:
1233 | websocket-driver: 0.7.4
1234 | dev: true
1235 |
1236 | /figgy-pudding/3.5.2:
1237 | resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==}
1238 | dev: true
1239 |
1240 | /file-uri-to-path/1.0.0:
1241 | resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
1242 | dev: true
1243 | optional: true
1244 |
1245 | /fill-range/4.0.0:
1246 | resolution: {integrity: sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=}
1247 | engines: {node: '>=0.10.0'}
1248 | dependencies:
1249 | extend-shallow: 2.0.1
1250 | is-number: 3.0.0
1251 | repeat-string: 1.6.1
1252 | to-regex-range: 2.1.1
1253 | dev: true
1254 |
1255 | /fill-range/7.0.1:
1256 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
1257 | engines: {node: '>=8'}
1258 | dependencies:
1259 | to-regex-range: 5.0.1
1260 | dev: true
1261 | optional: true
1262 |
1263 | /finalhandler/1.1.2:
1264 | resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==}
1265 | engines: {node: '>= 0.8'}
1266 | dependencies:
1267 | debug: 2.6.9
1268 | encodeurl: 1.0.2
1269 | escape-html: 1.0.3
1270 | on-finished: 2.3.0
1271 | parseurl: 1.3.3
1272 | statuses: 1.5.0
1273 | unpipe: 1.0.0
1274 | dev: true
1275 |
1276 | /find-cache-dir/2.1.0:
1277 | resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==}
1278 | engines: {node: '>=6'}
1279 | dependencies:
1280 | commondir: 1.0.1
1281 | make-dir: 2.1.0
1282 | pkg-dir: 3.0.0
1283 | dev: true
1284 |
1285 | /find-up/3.0.0:
1286 | resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
1287 | engines: {node: '>=6'}
1288 | dependencies:
1289 | locate-path: 3.0.0
1290 | dev: true
1291 |
1292 | /findup-sync/3.0.0:
1293 | resolution: {integrity: sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==}
1294 | engines: {node: '>= 0.10'}
1295 | dependencies:
1296 | detect-file: 1.0.0
1297 | is-glob: 4.0.1
1298 | micromatch: 3.1.10
1299 | resolve-dir: 1.0.1
1300 | dev: true
1301 |
1302 | /flush-write-stream/1.1.1:
1303 | resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==}
1304 | dependencies:
1305 | inherits: 2.0.4
1306 | readable-stream: 2.3.7
1307 | dev: true
1308 |
1309 | /follow-redirects/1.14.1_debug@4.3.1:
1310 | resolution: {integrity: sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==}
1311 | engines: {node: '>=4.0'}
1312 | peerDependencies:
1313 | debug: '*'
1314 | peerDependenciesMeta:
1315 | debug:
1316 | optional: true
1317 | dependencies:
1318 | debug: 4.3.1_supports-color@6.1.0
1319 | dev: true
1320 |
1321 | /for-in/1.0.2:
1322 | resolution: {integrity: sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=}
1323 | engines: {node: '>=0.10.0'}
1324 | dev: true
1325 |
1326 | /forwarded/0.1.2:
1327 | resolution: {integrity: sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=}
1328 | engines: {node: '>= 0.6'}
1329 | dev: true
1330 |
1331 | /fragment-cache/0.2.1:
1332 | resolution: {integrity: sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=}
1333 | engines: {node: '>=0.10.0'}
1334 | dependencies:
1335 | map-cache: 0.2.2
1336 | dev: true
1337 |
1338 | /fresh/0.5.2:
1339 | resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=}
1340 | engines: {node: '>= 0.6'}
1341 | dev: true
1342 |
1343 | /from2/2.3.0:
1344 | resolution: {integrity: sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=}
1345 | dependencies:
1346 | inherits: 2.0.4
1347 | readable-stream: 2.3.7
1348 | dev: true
1349 |
1350 | /fs-write-stream-atomic/1.0.10:
1351 | resolution: {integrity: sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=}
1352 | dependencies:
1353 | graceful-fs: 4.2.6
1354 | iferr: 0.1.5
1355 | imurmurhash: 0.1.4
1356 | readable-stream: 2.3.7
1357 | dev: true
1358 |
1359 | /fs.realpath/1.0.0:
1360 | resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
1361 | dev: true
1362 |
1363 | /fsevents/1.2.13:
1364 | resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==}
1365 | engines: {node: '>= 4.0'}
1366 | os: [darwin]
1367 | deprecated: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
1368 | requiresBuild: true
1369 | dependencies:
1370 | bindings: 1.5.0
1371 | nan: 2.14.2
1372 | dev: true
1373 | optional: true
1374 |
1375 | /fsevents/2.3.2:
1376 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
1377 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1378 | os: [darwin]
1379 | dev: true
1380 | optional: true
1381 |
1382 | /function-bind/1.1.1:
1383 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
1384 | dev: true
1385 |
1386 | /get-caller-file/2.0.5:
1387 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
1388 | engines: {node: 6.* || 8.* || >= 10.*}
1389 | dev: true
1390 |
1391 | /get-intrinsic/1.1.1:
1392 | resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==}
1393 | dependencies:
1394 | function-bind: 1.1.1
1395 | has: 1.0.3
1396 | has-symbols: 1.0.2
1397 | dev: true
1398 |
1399 | /get-stream/4.1.0:
1400 | resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==}
1401 | engines: {node: '>=6'}
1402 | dependencies:
1403 | pump: 3.0.0
1404 | dev: true
1405 |
1406 | /get-value/2.0.6:
1407 | resolution: {integrity: sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=}
1408 | engines: {node: '>=0.10.0'}
1409 | dev: true
1410 |
1411 | /glob-parent/3.1.0:
1412 | resolution: {integrity: sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=}
1413 | dependencies:
1414 | is-glob: 3.1.0
1415 | path-dirname: 1.0.2
1416 | dev: true
1417 |
1418 | /glob-parent/5.1.2:
1419 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1420 | engines: {node: '>= 6'}
1421 | dependencies:
1422 | is-glob: 4.0.1
1423 | dev: true
1424 | optional: true
1425 |
1426 | /glob/7.1.7:
1427 | resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==}
1428 | dependencies:
1429 | fs.realpath: 1.0.0
1430 | inflight: 1.0.6
1431 | inherits: 2.0.4
1432 | minimatch: 3.0.4
1433 | once: 1.4.0
1434 | path-is-absolute: 1.0.1
1435 | dev: true
1436 |
1437 | /global-modules/1.0.0:
1438 | resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==}
1439 | engines: {node: '>=0.10.0'}
1440 | dependencies:
1441 | global-prefix: 1.0.2
1442 | is-windows: 1.0.2
1443 | resolve-dir: 1.0.1
1444 | dev: true
1445 |
1446 | /global-modules/2.0.0:
1447 | resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==}
1448 | engines: {node: '>=6'}
1449 | dependencies:
1450 | global-prefix: 3.0.0
1451 | dev: true
1452 |
1453 | /global-prefix/1.0.2:
1454 | resolution: {integrity: sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=}
1455 | engines: {node: '>=0.10.0'}
1456 | dependencies:
1457 | expand-tilde: 2.0.2
1458 | homedir-polyfill: 1.0.3
1459 | ini: 1.3.8
1460 | is-windows: 1.0.2
1461 | which: 1.3.1
1462 | dev: true
1463 |
1464 | /global-prefix/3.0.0:
1465 | resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==}
1466 | engines: {node: '>=6'}
1467 | dependencies:
1468 | ini: 1.3.8
1469 | kind-of: 6.0.3
1470 | which: 1.3.1
1471 | dev: true
1472 |
1473 | /globby/6.1.0:
1474 | resolution: {integrity: sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=}
1475 | engines: {node: '>=0.10.0'}
1476 | dependencies:
1477 | array-union: 1.0.2
1478 | glob: 7.1.7
1479 | object-assign: 4.1.1
1480 | pify: 2.3.0
1481 | pinkie-promise: 2.0.1
1482 | dev: true
1483 |
1484 | /graceful-fs/4.2.6:
1485 | resolution: {integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==}
1486 | dev: true
1487 |
1488 | /handle-thing/2.0.1:
1489 | resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==}
1490 | dev: true
1491 |
1492 | /has-flag/3.0.0:
1493 | resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=}
1494 | engines: {node: '>=4'}
1495 | dev: true
1496 |
1497 | /has-symbols/1.0.2:
1498 | resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==}
1499 | engines: {node: '>= 0.4'}
1500 | dev: true
1501 |
1502 | /has-value/0.3.1:
1503 | resolution: {integrity: sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=}
1504 | engines: {node: '>=0.10.0'}
1505 | dependencies:
1506 | get-value: 2.0.6
1507 | has-values: 0.1.4
1508 | isobject: 2.1.0
1509 | dev: true
1510 |
1511 | /has-value/1.0.0:
1512 | resolution: {integrity: sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=}
1513 | engines: {node: '>=0.10.0'}
1514 | dependencies:
1515 | get-value: 2.0.6
1516 | has-values: 1.0.0
1517 | isobject: 3.0.1
1518 | dev: true
1519 |
1520 | /has-values/0.1.4:
1521 | resolution: {integrity: sha1-bWHeldkd/Km5oCCJrThL/49it3E=}
1522 | engines: {node: '>=0.10.0'}
1523 | dev: true
1524 |
1525 | /has-values/1.0.0:
1526 | resolution: {integrity: sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=}
1527 | engines: {node: '>=0.10.0'}
1528 | dependencies:
1529 | is-number: 3.0.0
1530 | kind-of: 4.0.0
1531 | dev: true
1532 |
1533 | /has/1.0.3:
1534 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
1535 | engines: {node: '>= 0.4.0'}
1536 | dependencies:
1537 | function-bind: 1.1.1
1538 | dev: true
1539 |
1540 | /hash-base/3.1.0:
1541 | resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==}
1542 | engines: {node: '>=4'}
1543 | dependencies:
1544 | inherits: 2.0.4
1545 | readable-stream: 3.6.0
1546 | safe-buffer: 5.2.1
1547 | dev: true
1548 |
1549 | /hash.js/1.1.7:
1550 | resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==}
1551 | dependencies:
1552 | inherits: 2.0.4
1553 | minimalistic-assert: 1.0.1
1554 | dev: true
1555 |
1556 | /hmac-drbg/1.0.1:
1557 | resolution: {integrity: sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=}
1558 | dependencies:
1559 | hash.js: 1.1.7
1560 | minimalistic-assert: 1.0.1
1561 | minimalistic-crypto-utils: 1.0.1
1562 | dev: true
1563 |
1564 | /homedir-polyfill/1.0.3:
1565 | resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
1566 | engines: {node: '>=0.10.0'}
1567 | dependencies:
1568 | parse-passwd: 1.0.0
1569 | dev: true
1570 |
1571 | /hpack.js/2.1.6:
1572 | resolution: {integrity: sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=}
1573 | dependencies:
1574 | inherits: 2.0.4
1575 | obuf: 1.1.2
1576 | readable-stream: 2.3.7
1577 | wbuf: 1.7.3
1578 | dev: true
1579 |
1580 | /html-entities/1.4.0:
1581 | resolution: {integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==}
1582 | dev: true
1583 |
1584 | /http-deceiver/1.2.7:
1585 | resolution: {integrity: sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=}
1586 | dev: true
1587 |
1588 | /http-errors/1.6.3:
1589 | resolution: {integrity: sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=}
1590 | engines: {node: '>= 0.6'}
1591 | dependencies:
1592 | depd: 1.1.2
1593 | inherits: 2.0.3
1594 | setprototypeof: 1.1.0
1595 | statuses: 1.5.0
1596 | dev: true
1597 |
1598 | /http-errors/1.7.2:
1599 | resolution: {integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==}
1600 | engines: {node: '>= 0.6'}
1601 | dependencies:
1602 | depd: 1.1.2
1603 | inherits: 2.0.3
1604 | setprototypeof: 1.1.1
1605 | statuses: 1.5.0
1606 | toidentifier: 1.0.0
1607 | dev: true
1608 |
1609 | /http-errors/1.7.3:
1610 | resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==}
1611 | engines: {node: '>= 0.6'}
1612 | dependencies:
1613 | depd: 1.1.2
1614 | inherits: 2.0.4
1615 | setprototypeof: 1.1.1
1616 | statuses: 1.5.0
1617 | toidentifier: 1.0.0
1618 | dev: true
1619 |
1620 | /http-parser-js/0.5.3:
1621 | resolution: {integrity: sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==}
1622 | dev: true
1623 |
1624 | /http-proxy-middleware/0.19.1_debug@4.3.1:
1625 | resolution: {integrity: sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==}
1626 | engines: {node: '>=4.0.0'}
1627 | dependencies:
1628 | http-proxy: 1.18.1_debug@4.3.1
1629 | is-glob: 4.0.1
1630 | lodash: 4.17.21
1631 | micromatch: 3.1.10
1632 | transitivePeerDependencies:
1633 | - debug
1634 | dev: true
1635 |
1636 | /http-proxy/1.18.1_debug@4.3.1:
1637 | resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
1638 | engines: {node: '>=8.0.0'}
1639 | dependencies:
1640 | eventemitter3: 4.0.7
1641 | follow-redirects: 1.14.1_debug@4.3.1
1642 | requires-port: 1.0.0
1643 | transitivePeerDependencies:
1644 | - debug
1645 | dev: true
1646 |
1647 | /https-browserify/1.0.0:
1648 | resolution: {integrity: sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=}
1649 | dev: true
1650 |
1651 | /iconv-lite/0.4.24:
1652 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
1653 | engines: {node: '>=0.10.0'}
1654 | dependencies:
1655 | safer-buffer: 2.1.2
1656 | dev: true
1657 |
1658 | /ieee754/1.2.1:
1659 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
1660 | dev: true
1661 |
1662 | /iferr/0.1.5:
1663 | resolution: {integrity: sha1-xg7taebY/bazEEofy8ocGS3FtQE=}
1664 | dev: true
1665 |
1666 | /import-local/2.0.0:
1667 | resolution: {integrity: sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==}
1668 | engines: {node: '>=6'}
1669 | hasBin: true
1670 | dependencies:
1671 | pkg-dir: 3.0.0
1672 | resolve-cwd: 2.0.0
1673 | dev: true
1674 |
1675 | /imurmurhash/0.1.4:
1676 | resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=}
1677 | engines: {node: '>=0.8.19'}
1678 | dev: true
1679 |
1680 | /infer-owner/1.0.4:
1681 | resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==}
1682 | dev: true
1683 |
1684 | /inflight/1.0.6:
1685 | resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
1686 | dependencies:
1687 | once: 1.4.0
1688 | wrappy: 1.0.2
1689 | dev: true
1690 |
1691 | /inherits/2.0.1:
1692 | resolution: {integrity: sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=}
1693 | dev: true
1694 |
1695 | /inherits/2.0.3:
1696 | resolution: {integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=}
1697 | dev: true
1698 |
1699 | /inherits/2.0.4:
1700 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1701 | dev: true
1702 |
1703 | /ini/1.3.8:
1704 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
1705 | dev: true
1706 |
1707 | /internal-ip/4.3.0:
1708 | resolution: {integrity: sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==}
1709 | engines: {node: '>=6'}
1710 | dependencies:
1711 | default-gateway: 4.2.0
1712 | ipaddr.js: 1.9.1
1713 | dev: true
1714 |
1715 | /interpret/1.4.0:
1716 | resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==}
1717 | engines: {node: '>= 0.10'}
1718 | dev: true
1719 |
1720 | /ip-regex/2.1.0:
1721 | resolution: {integrity: sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=}
1722 | engines: {node: '>=4'}
1723 | dev: true
1724 |
1725 | /ip/1.1.5:
1726 | resolution: {integrity: sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=}
1727 | dev: true
1728 |
1729 | /ipaddr.js/1.9.1:
1730 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
1731 | engines: {node: '>= 0.10'}
1732 | dev: true
1733 |
1734 | /is-absolute-url/3.0.3:
1735 | resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==}
1736 | engines: {node: '>=8'}
1737 | dev: true
1738 |
1739 | /is-accessor-descriptor/0.1.6:
1740 | resolution: {integrity: sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=}
1741 | engines: {node: '>=0.10.0'}
1742 | dependencies:
1743 | kind-of: 3.2.2
1744 | dev: true
1745 |
1746 | /is-accessor-descriptor/1.0.0:
1747 | resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==}
1748 | engines: {node: '>=0.10.0'}
1749 | dependencies:
1750 | kind-of: 6.0.3
1751 | dev: true
1752 |
1753 | /is-arguments/1.1.0:
1754 | resolution: {integrity: sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==}
1755 | engines: {node: '>= 0.4'}
1756 | dependencies:
1757 | call-bind: 1.0.2
1758 | dev: true
1759 |
1760 | /is-binary-path/1.0.1:
1761 | resolution: {integrity: sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=}
1762 | engines: {node: '>=0.10.0'}
1763 | dependencies:
1764 | binary-extensions: 1.13.1
1765 | dev: true
1766 |
1767 | /is-binary-path/2.1.0:
1768 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1769 | engines: {node: '>=8'}
1770 | dependencies:
1771 | binary-extensions: 2.2.0
1772 | dev: true
1773 | optional: true
1774 |
1775 | /is-buffer/1.1.6:
1776 | resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
1777 | dev: true
1778 |
1779 | /is-data-descriptor/0.1.4:
1780 | resolution: {integrity: sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=}
1781 | engines: {node: '>=0.10.0'}
1782 | dependencies:
1783 | kind-of: 3.2.2
1784 | dev: true
1785 |
1786 | /is-data-descriptor/1.0.0:
1787 | resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==}
1788 | engines: {node: '>=0.10.0'}
1789 | dependencies:
1790 | kind-of: 6.0.3
1791 | dev: true
1792 |
1793 | /is-date-object/1.0.4:
1794 | resolution: {integrity: sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==}
1795 | engines: {node: '>= 0.4'}
1796 | dev: true
1797 |
1798 | /is-descriptor/0.1.6:
1799 | resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==}
1800 | engines: {node: '>=0.10.0'}
1801 | dependencies:
1802 | is-accessor-descriptor: 0.1.6
1803 | is-data-descriptor: 0.1.4
1804 | kind-of: 5.1.0
1805 | dev: true
1806 |
1807 | /is-descriptor/1.0.2:
1808 | resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==}
1809 | engines: {node: '>=0.10.0'}
1810 | dependencies:
1811 | is-accessor-descriptor: 1.0.0
1812 | is-data-descriptor: 1.0.0
1813 | kind-of: 6.0.3
1814 | dev: true
1815 |
1816 | /is-extendable/0.1.1:
1817 | resolution: {integrity: sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=}
1818 | engines: {node: '>=0.10.0'}
1819 | dev: true
1820 |
1821 | /is-extendable/1.0.1:
1822 | resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==}
1823 | engines: {node: '>=0.10.0'}
1824 | dependencies:
1825 | is-plain-object: 2.0.4
1826 | dev: true
1827 |
1828 | /is-extglob/2.1.1:
1829 | resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=}
1830 | engines: {node: '>=0.10.0'}
1831 | dev: true
1832 |
1833 | /is-fullwidth-code-point/2.0.0:
1834 | resolution: {integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=}
1835 | engines: {node: '>=4'}
1836 | dev: true
1837 |
1838 | /is-glob/3.1.0:
1839 | resolution: {integrity: sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=}
1840 | engines: {node: '>=0.10.0'}
1841 | dependencies:
1842 | is-extglob: 2.1.1
1843 | dev: true
1844 |
1845 | /is-glob/4.0.1:
1846 | resolution: {integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==}
1847 | engines: {node: '>=0.10.0'}
1848 | dependencies:
1849 | is-extglob: 2.1.1
1850 | dev: true
1851 |
1852 | /is-number/3.0.0:
1853 | resolution: {integrity: sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=}
1854 | engines: {node: '>=0.10.0'}
1855 | dependencies:
1856 | kind-of: 3.2.2
1857 | dev: true
1858 |
1859 | /is-number/7.0.0:
1860 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1861 | engines: {node: '>=0.12.0'}
1862 | dev: true
1863 | optional: true
1864 |
1865 | /is-path-cwd/2.2.0:
1866 | resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==}
1867 | engines: {node: '>=6'}
1868 | dev: true
1869 |
1870 | /is-path-in-cwd/2.1.0:
1871 | resolution: {integrity: sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==}
1872 | engines: {node: '>=6'}
1873 | dependencies:
1874 | is-path-inside: 2.1.0
1875 | dev: true
1876 |
1877 | /is-path-inside/2.1.0:
1878 | resolution: {integrity: sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==}
1879 | engines: {node: '>=6'}
1880 | dependencies:
1881 | path-is-inside: 1.0.2
1882 | dev: true
1883 |
1884 | /is-plain-object/2.0.4:
1885 | resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
1886 | engines: {node: '>=0.10.0'}
1887 | dependencies:
1888 | isobject: 3.0.1
1889 | dev: true
1890 |
1891 | /is-regex/1.1.3:
1892 | resolution: {integrity: sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==}
1893 | engines: {node: '>= 0.4'}
1894 | dependencies:
1895 | call-bind: 1.0.2
1896 | has-symbols: 1.0.2
1897 | dev: true
1898 |
1899 | /is-stream/1.1.0:
1900 | resolution: {integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ=}
1901 | engines: {node: '>=0.10.0'}
1902 | dev: true
1903 |
1904 | /is-windows/1.0.2:
1905 | resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
1906 | engines: {node: '>=0.10.0'}
1907 | dev: true
1908 |
1909 | /is-wsl/1.1.0:
1910 | resolution: {integrity: sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=}
1911 | engines: {node: '>=4'}
1912 | dev: true
1913 |
1914 | /isarray/1.0.0:
1915 | resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=}
1916 | dev: true
1917 |
1918 | /isexe/2.0.0:
1919 | resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=}
1920 | dev: true
1921 |
1922 | /isobject/2.1.0:
1923 | resolution: {integrity: sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=}
1924 | engines: {node: '>=0.10.0'}
1925 | dependencies:
1926 | isarray: 1.0.0
1927 | dev: true
1928 |
1929 | /isobject/3.0.1:
1930 | resolution: {integrity: sha1-TkMekrEalzFjaqH5yNHMvP2reN8=}
1931 | engines: {node: '>=0.10.0'}
1932 | dev: true
1933 |
1934 | /json-parse-better-errors/1.0.2:
1935 | resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
1936 | dev: true
1937 |
1938 | /json-schema-traverse/0.4.1:
1939 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
1940 | dev: true
1941 |
1942 | /json3/3.3.3:
1943 | resolution: {integrity: sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==}
1944 | dev: true
1945 |
1946 | /json5/1.0.1:
1947 | resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==}
1948 | hasBin: true
1949 | dependencies:
1950 | minimist: 1.2.5
1951 | dev: true
1952 |
1953 | /killable/1.0.1:
1954 | resolution: {integrity: sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==}
1955 | dev: true
1956 |
1957 | /kind-of/3.2.2:
1958 | resolution: {integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=}
1959 | engines: {node: '>=0.10.0'}
1960 | dependencies:
1961 | is-buffer: 1.1.6
1962 | dev: true
1963 |
1964 | /kind-of/4.0.0:
1965 | resolution: {integrity: sha1-IIE989cSkosgc3hpGkUGb65y3Vc=}
1966 | engines: {node: '>=0.10.0'}
1967 | dependencies:
1968 | is-buffer: 1.1.6
1969 | dev: true
1970 |
1971 | /kind-of/5.1.0:
1972 | resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==}
1973 | engines: {node: '>=0.10.0'}
1974 | dev: true
1975 |
1976 | /kind-of/6.0.3:
1977 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
1978 | engines: {node: '>=0.10.0'}
1979 | dev: true
1980 |
1981 | /loader-runner/2.4.0:
1982 | resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==}
1983 | engines: {node: '>=4.3.0 <5.0.0 || >=5.10'}
1984 | dev: true
1985 |
1986 | /loader-utils/1.4.0:
1987 | resolution: {integrity: sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==}
1988 | engines: {node: '>=4.0.0'}
1989 | dependencies:
1990 | big.js: 5.2.2
1991 | emojis-list: 3.0.0
1992 | json5: 1.0.1
1993 | dev: true
1994 |
1995 | /locate-path/3.0.0:
1996 | resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
1997 | engines: {node: '>=6'}
1998 | dependencies:
1999 | p-locate: 3.0.0
2000 | path-exists: 3.0.0
2001 | dev: true
2002 |
2003 | /lodash/4.17.21:
2004 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
2005 | dev: true
2006 |
2007 | /loglevel/1.7.1:
2008 | resolution: {integrity: sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==}
2009 | engines: {node: '>= 0.6.0'}
2010 | dev: true
2011 |
2012 | /lru-cache/5.1.1:
2013 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
2014 | dependencies:
2015 | yallist: 3.1.1
2016 | dev: true
2017 |
2018 | /make-dir/2.1.0:
2019 | resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
2020 | engines: {node: '>=6'}
2021 | dependencies:
2022 | pify: 4.0.1
2023 | semver: 5.7.1
2024 | dev: true
2025 |
2026 | /map-cache/0.2.2:
2027 | resolution: {integrity: sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=}
2028 | engines: {node: '>=0.10.0'}
2029 | dev: true
2030 |
2031 | /map-visit/1.0.0:
2032 | resolution: {integrity: sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=}
2033 | engines: {node: '>=0.10.0'}
2034 | dependencies:
2035 | object-visit: 1.0.1
2036 | dev: true
2037 |
2038 | /md5.js/1.3.5:
2039 | resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==}
2040 | dependencies:
2041 | hash-base: 3.1.0
2042 | inherits: 2.0.4
2043 | safe-buffer: 5.2.1
2044 | dev: true
2045 |
2046 | /media-typer/0.3.0:
2047 | resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=}
2048 | engines: {node: '>= 0.6'}
2049 | dev: true
2050 |
2051 | /memory-fs/0.4.1:
2052 | resolution: {integrity: sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=}
2053 | dependencies:
2054 | errno: 0.1.8
2055 | readable-stream: 2.3.7
2056 | dev: true
2057 |
2058 | /memory-fs/0.5.0:
2059 | resolution: {integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==}
2060 | engines: {node: '>=4.3.0 <5.0.0 || >=5.10'}
2061 | dependencies:
2062 | errno: 0.1.8
2063 | readable-stream: 2.3.7
2064 | dev: true
2065 |
2066 | /merge-descriptors/1.0.1:
2067 | resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=}
2068 | dev: true
2069 |
2070 | /methods/1.1.2:
2071 | resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=}
2072 | engines: {node: '>= 0.6'}
2073 | dev: true
2074 |
2075 | /micromatch/3.1.10:
2076 | resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==}
2077 | engines: {node: '>=0.10.0'}
2078 | dependencies:
2079 | arr-diff: 4.0.0
2080 | array-unique: 0.3.2
2081 | braces: 2.3.2
2082 | define-property: 2.0.2
2083 | extend-shallow: 3.0.2
2084 | extglob: 2.0.4
2085 | fragment-cache: 0.2.1
2086 | kind-of: 6.0.3
2087 | nanomatch: 1.2.13
2088 | object.pick: 1.3.0
2089 | regex-not: 1.0.2
2090 | snapdragon: 0.8.2
2091 | to-regex: 3.0.2
2092 | dev: true
2093 |
2094 | /miller-rabin/4.0.1:
2095 | resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==}
2096 | hasBin: true
2097 | dependencies:
2098 | bn.js: 4.12.0
2099 | brorand: 1.1.0
2100 | dev: true
2101 |
2102 | /mime-db/1.47.0:
2103 | resolution: {integrity: sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==}
2104 | engines: {node: '>= 0.6'}
2105 | dev: true
2106 |
2107 | /mime-types/2.1.30:
2108 | resolution: {integrity: sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==}
2109 | engines: {node: '>= 0.6'}
2110 | dependencies:
2111 | mime-db: 1.47.0
2112 | dev: true
2113 |
2114 | /mime/1.6.0:
2115 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
2116 | engines: {node: '>=4'}
2117 | hasBin: true
2118 | dev: true
2119 |
2120 | /mime/2.5.2:
2121 | resolution: {integrity: sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==}
2122 | engines: {node: '>=4.0.0'}
2123 | hasBin: true
2124 | dev: true
2125 |
2126 | /minimalistic-assert/1.0.1:
2127 | resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
2128 | dev: true
2129 |
2130 | /minimalistic-crypto-utils/1.0.1:
2131 | resolution: {integrity: sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=}
2132 | dev: true
2133 |
2134 | /minimatch/3.0.4:
2135 | resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==}
2136 | dependencies:
2137 | brace-expansion: 1.1.11
2138 | dev: true
2139 |
2140 | /minimist/1.2.5:
2141 | resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==}
2142 | dev: true
2143 |
2144 | /mississippi/3.0.0:
2145 | resolution: {integrity: sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==}
2146 | engines: {node: '>=4.0.0'}
2147 | dependencies:
2148 | concat-stream: 1.6.2
2149 | duplexify: 3.7.1
2150 | end-of-stream: 1.4.4
2151 | flush-write-stream: 1.1.1
2152 | from2: 2.3.0
2153 | parallel-transform: 1.2.0
2154 | pump: 3.0.0
2155 | pumpify: 1.5.1
2156 | stream-each: 1.2.3
2157 | through2: 2.0.5
2158 | dev: true
2159 |
2160 | /mixin-deep/1.3.2:
2161 | resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==}
2162 | engines: {node: '>=0.10.0'}
2163 | dependencies:
2164 | for-in: 1.0.2
2165 | is-extendable: 1.0.1
2166 | dev: true
2167 |
2168 | /mkdirp/0.5.5:
2169 | resolution: {integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==}
2170 | hasBin: true
2171 | dependencies:
2172 | minimist: 1.2.5
2173 | dev: true
2174 |
2175 | /move-concurrently/1.0.1:
2176 | resolution: {integrity: sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=}
2177 | dependencies:
2178 | aproba: 1.2.0
2179 | copy-concurrently: 1.0.5
2180 | fs-write-stream-atomic: 1.0.10
2181 | mkdirp: 0.5.5
2182 | rimraf: 2.7.1
2183 | run-queue: 1.0.3
2184 | dev: true
2185 |
2186 | /ms/2.0.0:
2187 | resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=}
2188 | dev: true
2189 |
2190 | /ms/2.1.1:
2191 | resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==}
2192 | dev: true
2193 |
2194 | /ms/2.1.2:
2195 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
2196 | dev: true
2197 |
2198 | /ms/2.1.3:
2199 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
2200 | dev: true
2201 |
2202 | /multicast-dns-service-types/1.1.0:
2203 | resolution: {integrity: sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=}
2204 | dev: true
2205 |
2206 | /multicast-dns/6.2.3:
2207 | resolution: {integrity: sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==}
2208 | hasBin: true
2209 | dependencies:
2210 | dns-packet: 1.3.1
2211 | thunky: 1.1.0
2212 | dev: true
2213 |
2214 | /nan/2.14.2:
2215 | resolution: {integrity: sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==}
2216 | dev: true
2217 | optional: true
2218 |
2219 | /nanomatch/1.2.13:
2220 | resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==}
2221 | engines: {node: '>=0.10.0'}
2222 | dependencies:
2223 | arr-diff: 4.0.0
2224 | array-unique: 0.3.2
2225 | define-property: 2.0.2
2226 | extend-shallow: 3.0.2
2227 | fragment-cache: 0.2.1
2228 | is-windows: 1.0.2
2229 | kind-of: 6.0.3
2230 | object.pick: 1.3.0
2231 | regex-not: 1.0.2
2232 | snapdragon: 0.8.2
2233 | to-regex: 3.0.2
2234 | dev: true
2235 |
2236 | /negotiator/0.6.2:
2237 | resolution: {integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==}
2238 | engines: {node: '>= 0.6'}
2239 | dev: true
2240 |
2241 | /neo-async/2.6.2:
2242 | resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
2243 | dev: true
2244 |
2245 | /nice-try/1.0.5:
2246 | resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
2247 | dev: true
2248 |
2249 | /node-forge/0.10.0:
2250 | resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==}
2251 | engines: {node: '>= 6.0.0'}
2252 | dev: true
2253 |
2254 | /node-libs-browser/2.2.1:
2255 | resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==}
2256 | dependencies:
2257 | assert: 1.5.0
2258 | browserify-zlib: 0.2.0
2259 | buffer: 4.9.2
2260 | console-browserify: 1.2.0
2261 | constants-browserify: 1.0.0
2262 | crypto-browserify: 3.12.0
2263 | domain-browser: 1.2.0
2264 | events: 3.3.0
2265 | https-browserify: 1.0.0
2266 | os-browserify: 0.3.0
2267 | path-browserify: 0.0.1
2268 | process: 0.11.10
2269 | punycode: 1.4.1
2270 | querystring-es3: 0.2.1
2271 | readable-stream: 2.3.7
2272 | stream-browserify: 2.0.2
2273 | stream-http: 2.8.3
2274 | string_decoder: 1.3.0
2275 | timers-browserify: 2.0.12
2276 | tty-browserify: 0.0.0
2277 | url: 0.11.0
2278 | util: 0.11.1
2279 | vm-browserify: 1.1.2
2280 | dev: true
2281 |
2282 | /normalize-path/2.1.1:
2283 | resolution: {integrity: sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=}
2284 | engines: {node: '>=0.10.0'}
2285 | dependencies:
2286 | remove-trailing-separator: 1.1.0
2287 | dev: true
2288 |
2289 | /normalize-path/3.0.0:
2290 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
2291 | engines: {node: '>=0.10.0'}
2292 | dev: true
2293 |
2294 | /npm-run-path/2.0.2:
2295 | resolution: {integrity: sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=}
2296 | engines: {node: '>=4'}
2297 | dependencies:
2298 | path-key: 2.0.1
2299 | dev: true
2300 |
2301 | /object-assign/4.1.1:
2302 | resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=}
2303 | engines: {node: '>=0.10.0'}
2304 | dev: true
2305 |
2306 | /object-copy/0.1.0:
2307 | resolution: {integrity: sha1-fn2Fi3gb18mRpBupde04EnVOmYw=}
2308 | engines: {node: '>=0.10.0'}
2309 | dependencies:
2310 | copy-descriptor: 0.1.1
2311 | define-property: 0.2.5
2312 | kind-of: 3.2.2
2313 | dev: true
2314 |
2315 | /object-is/1.1.5:
2316 | resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==}
2317 | engines: {node: '>= 0.4'}
2318 | dependencies:
2319 | call-bind: 1.0.2
2320 | define-properties: 1.1.3
2321 | dev: true
2322 |
2323 | /object-keys/1.1.1:
2324 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
2325 | engines: {node: '>= 0.4'}
2326 | dev: true
2327 |
2328 | /object-visit/1.0.1:
2329 | resolution: {integrity: sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=}
2330 | engines: {node: '>=0.10.0'}
2331 | dependencies:
2332 | isobject: 3.0.1
2333 | dev: true
2334 |
2335 | /object.pick/1.3.0:
2336 | resolution: {integrity: sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=}
2337 | engines: {node: '>=0.10.0'}
2338 | dependencies:
2339 | isobject: 3.0.1
2340 | dev: true
2341 |
2342 | /obuf/1.1.2:
2343 | resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==}
2344 | dev: true
2345 |
2346 | /on-finished/2.3.0:
2347 | resolution: {integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=}
2348 | engines: {node: '>= 0.8'}
2349 | dependencies:
2350 | ee-first: 1.1.1
2351 | dev: true
2352 |
2353 | /on-headers/1.0.2:
2354 | resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
2355 | engines: {node: '>= 0.8'}
2356 | dev: true
2357 |
2358 | /once/1.4.0:
2359 | resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
2360 | dependencies:
2361 | wrappy: 1.0.2
2362 | dev: true
2363 |
2364 | /opn/5.5.0:
2365 | resolution: {integrity: sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==}
2366 | engines: {node: '>=4'}
2367 | dependencies:
2368 | is-wsl: 1.1.0
2369 | dev: true
2370 |
2371 | /original/1.0.2:
2372 | resolution: {integrity: sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==}
2373 | dependencies:
2374 | url-parse: 1.5.1
2375 | dev: true
2376 |
2377 | /os-browserify/0.3.0:
2378 | resolution: {integrity: sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=}
2379 | dev: true
2380 |
2381 | /p-finally/1.0.0:
2382 | resolution: {integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=}
2383 | engines: {node: '>=4'}
2384 | dev: true
2385 |
2386 | /p-limit/2.3.0:
2387 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
2388 | engines: {node: '>=6'}
2389 | dependencies:
2390 | p-try: 2.2.0
2391 | dev: true
2392 |
2393 | /p-locate/3.0.0:
2394 | resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
2395 | engines: {node: '>=6'}
2396 | dependencies:
2397 | p-limit: 2.3.0
2398 | dev: true
2399 |
2400 | /p-map/2.1.0:
2401 | resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==}
2402 | engines: {node: '>=6'}
2403 | dev: true
2404 |
2405 | /p-retry/3.0.1:
2406 | resolution: {integrity: sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==}
2407 | engines: {node: '>=6'}
2408 | dependencies:
2409 | retry: 0.12.0
2410 | dev: true
2411 |
2412 | /p-try/2.2.0:
2413 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
2414 | engines: {node: '>=6'}
2415 | dev: true
2416 |
2417 | /pako/1.0.11:
2418 | resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
2419 | dev: true
2420 |
2421 | /parallel-transform/1.2.0:
2422 | resolution: {integrity: sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==}
2423 | dependencies:
2424 | cyclist: 1.0.1
2425 | inherits: 2.0.4
2426 | readable-stream: 2.3.7
2427 | dev: true
2428 |
2429 | /parse-asn1/5.1.6:
2430 | resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==}
2431 | dependencies:
2432 | asn1.js: 5.4.1
2433 | browserify-aes: 1.2.0
2434 | evp_bytestokey: 1.0.3
2435 | pbkdf2: 3.1.2
2436 | safe-buffer: 5.2.1
2437 | dev: true
2438 |
2439 | /parse-passwd/1.0.0:
2440 | resolution: {integrity: sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=}
2441 | engines: {node: '>=0.10.0'}
2442 | dev: true
2443 |
2444 | /parseurl/1.3.3:
2445 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
2446 | engines: {node: '>= 0.8'}
2447 | dev: true
2448 |
2449 | /pascalcase/0.1.1:
2450 | resolution: {integrity: sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=}
2451 | engines: {node: '>=0.10.0'}
2452 | dev: true
2453 |
2454 | /path-browserify/0.0.1:
2455 | resolution: {integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==}
2456 | dev: true
2457 |
2458 | /path-dirname/1.0.2:
2459 | resolution: {integrity: sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=}
2460 | dev: true
2461 |
2462 | /path-exists/3.0.0:
2463 | resolution: {integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=}
2464 | engines: {node: '>=4'}
2465 | dev: true
2466 |
2467 | /path-is-absolute/1.0.1:
2468 | resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
2469 | engines: {node: '>=0.10.0'}
2470 | dev: true
2471 |
2472 | /path-is-inside/1.0.2:
2473 | resolution: {integrity: sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=}
2474 | dev: true
2475 |
2476 | /path-key/2.0.1:
2477 | resolution: {integrity: sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=}
2478 | engines: {node: '>=4'}
2479 | dev: true
2480 |
2481 | /path-to-regexp/0.1.7:
2482 | resolution: {integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=}
2483 | dev: true
2484 |
2485 | /pbkdf2/3.1.2:
2486 | resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==}
2487 | engines: {node: '>=0.12'}
2488 | dependencies:
2489 | create-hash: 1.2.0
2490 | create-hmac: 1.1.7
2491 | ripemd160: 2.0.2
2492 | safe-buffer: 5.2.1
2493 | sha.js: 2.4.11
2494 | dev: true
2495 |
2496 | /picomatch/2.2.3:
2497 | resolution: {integrity: sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==}
2498 | engines: {node: '>=8.6'}
2499 | dev: true
2500 | optional: true
2501 |
2502 | /pify/2.3.0:
2503 | resolution: {integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw=}
2504 | engines: {node: '>=0.10.0'}
2505 | dev: true
2506 |
2507 | /pify/4.0.1:
2508 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
2509 | engines: {node: '>=6'}
2510 | dev: true
2511 |
2512 | /pinkie-promise/2.0.1:
2513 | resolution: {integrity: sha1-ITXW36ejWMBprJsXh3YogihFD/o=}
2514 | engines: {node: '>=0.10.0'}
2515 | dependencies:
2516 | pinkie: 2.0.4
2517 | dev: true
2518 |
2519 | /pinkie/2.0.4:
2520 | resolution: {integrity: sha1-clVrgM+g1IqXToDnckjoDtT3+HA=}
2521 | engines: {node: '>=0.10.0'}
2522 | dev: true
2523 |
2524 | /pkg-dir/3.0.0:
2525 | resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==}
2526 | engines: {node: '>=6'}
2527 | dependencies:
2528 | find-up: 3.0.0
2529 | dev: true
2530 |
2531 | /portfinder/1.0.28:
2532 | resolution: {integrity: sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==}
2533 | engines: {node: '>= 0.12.0'}
2534 | dependencies:
2535 | async: 2.6.3
2536 | debug: 3.2.7
2537 | mkdirp: 0.5.5
2538 | dev: true
2539 |
2540 | /posix-character-classes/0.1.1:
2541 | resolution: {integrity: sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=}
2542 | engines: {node: '>=0.10.0'}
2543 | dev: true
2544 |
2545 | /process-nextick-args/2.0.1:
2546 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
2547 | dev: true
2548 |
2549 | /process/0.11.10:
2550 | resolution: {integrity: sha1-czIwDoQBYb2j5podHZGn1LwW8YI=}
2551 | engines: {node: '>= 0.6.0'}
2552 | dev: true
2553 |
2554 | /promise-inflight/1.0.1:
2555 | resolution: {integrity: sha1-mEcocL8igTL8vdhoEputEsPAKeM=}
2556 | dev: true
2557 |
2558 | /proxy-addr/2.0.6:
2559 | resolution: {integrity: sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==}
2560 | engines: {node: '>= 0.10'}
2561 | dependencies:
2562 | forwarded: 0.1.2
2563 | ipaddr.js: 1.9.1
2564 | dev: true
2565 |
2566 | /prr/1.0.1:
2567 | resolution: {integrity: sha1-0/wRS6BplaRexok/SEzrHXj19HY=}
2568 | dev: true
2569 |
2570 | /public-encrypt/4.0.3:
2571 | resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==}
2572 | dependencies:
2573 | bn.js: 4.12.0
2574 | browserify-rsa: 4.1.0
2575 | create-hash: 1.2.0
2576 | parse-asn1: 5.1.6
2577 | randombytes: 2.1.0
2578 | safe-buffer: 5.2.1
2579 | dev: true
2580 |
2581 | /pump/2.0.1:
2582 | resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==}
2583 | dependencies:
2584 | end-of-stream: 1.4.4
2585 | once: 1.4.0
2586 | dev: true
2587 |
2588 | /pump/3.0.0:
2589 | resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
2590 | dependencies:
2591 | end-of-stream: 1.4.4
2592 | once: 1.4.0
2593 | dev: true
2594 |
2595 | /pumpify/1.5.1:
2596 | resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==}
2597 | dependencies:
2598 | duplexify: 3.7.1
2599 | inherits: 2.0.4
2600 | pump: 2.0.1
2601 | dev: true
2602 |
2603 | /punycode/1.3.2:
2604 | resolution: {integrity: sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=}
2605 | dev: true
2606 |
2607 | /punycode/1.4.1:
2608 | resolution: {integrity: sha1-wNWmOycYgArY4esPpSachN1BhF4=}
2609 | dev: true
2610 |
2611 | /punycode/2.1.1:
2612 | resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
2613 | engines: {node: '>=6'}
2614 | dev: true
2615 |
2616 | /qs/6.7.0:
2617 | resolution: {integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==}
2618 | engines: {node: '>=0.6'}
2619 | dev: true
2620 |
2621 | /querystring-es3/0.2.1:
2622 | resolution: {integrity: sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=}
2623 | engines: {node: '>=0.4.x'}
2624 | dev: true
2625 |
2626 | /querystring/0.2.0:
2627 | resolution: {integrity: sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=}
2628 | engines: {node: '>=0.4.x'}
2629 | dev: true
2630 |
2631 | /querystringify/2.2.0:
2632 | resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
2633 | dev: true
2634 |
2635 | /randombytes/2.1.0:
2636 | resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
2637 | dependencies:
2638 | safe-buffer: 5.2.1
2639 | dev: true
2640 |
2641 | /randomfill/1.0.4:
2642 | resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==}
2643 | dependencies:
2644 | randombytes: 2.1.0
2645 | safe-buffer: 5.2.1
2646 | dev: true
2647 |
2648 | /range-parser/1.2.1:
2649 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
2650 | engines: {node: '>= 0.6'}
2651 | dev: true
2652 |
2653 | /raw-body/2.4.0:
2654 | resolution: {integrity: sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==}
2655 | engines: {node: '>= 0.8'}
2656 | dependencies:
2657 | bytes: 3.1.0
2658 | http-errors: 1.7.2
2659 | iconv-lite: 0.4.24
2660 | unpipe: 1.0.0
2661 | dev: true
2662 |
2663 | /readable-stream/2.3.7:
2664 | resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==}
2665 | dependencies:
2666 | core-util-is: 1.0.2
2667 | inherits: 2.0.4
2668 | isarray: 1.0.0
2669 | process-nextick-args: 2.0.1
2670 | safe-buffer: 5.1.2
2671 | string_decoder: 1.1.1
2672 | util-deprecate: 1.0.2
2673 | dev: true
2674 |
2675 | /readable-stream/3.6.0:
2676 | resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==}
2677 | engines: {node: '>= 6'}
2678 | dependencies:
2679 | inherits: 2.0.4
2680 | string_decoder: 1.3.0
2681 | util-deprecate: 1.0.2
2682 | dev: true
2683 |
2684 | /readdirp/2.2.1:
2685 | resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==}
2686 | engines: {node: '>=0.10'}
2687 | dependencies:
2688 | graceful-fs: 4.2.6
2689 | micromatch: 3.1.10
2690 | readable-stream: 2.3.7
2691 | dev: true
2692 |
2693 | /readdirp/3.5.0:
2694 | resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==}
2695 | engines: {node: '>=8.10.0'}
2696 | dependencies:
2697 | picomatch: 2.2.3
2698 | dev: true
2699 | optional: true
2700 |
2701 | /regex-not/1.0.2:
2702 | resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
2703 | engines: {node: '>=0.10.0'}
2704 | dependencies:
2705 | extend-shallow: 3.0.2
2706 | safe-regex: 1.1.0
2707 | dev: true
2708 |
2709 | /regexp.prototype.flags/1.3.1:
2710 | resolution: {integrity: sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==}
2711 | engines: {node: '>= 0.4'}
2712 | dependencies:
2713 | call-bind: 1.0.2
2714 | define-properties: 1.1.3
2715 | dev: true
2716 |
2717 | /remove-trailing-separator/1.1.0:
2718 | resolution: {integrity: sha1-wkvOKig62tW8P1jg1IJJuSN52O8=}
2719 | dev: true
2720 |
2721 | /repeat-element/1.1.4:
2722 | resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==}
2723 | engines: {node: '>=0.10.0'}
2724 | dev: true
2725 |
2726 | /repeat-string/1.6.1:
2727 | resolution: {integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc=}
2728 | engines: {node: '>=0.10'}
2729 | dev: true
2730 |
2731 | /require-directory/2.1.1:
2732 | resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=}
2733 | engines: {node: '>=0.10.0'}
2734 | dev: true
2735 |
2736 | /require-main-filename/2.0.0:
2737 | resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
2738 | dev: true
2739 |
2740 | /requires-port/1.0.0:
2741 | resolution: {integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=}
2742 | dev: true
2743 |
2744 | /resolve-cwd/2.0.0:
2745 | resolution: {integrity: sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=}
2746 | engines: {node: '>=4'}
2747 | dependencies:
2748 | resolve-from: 3.0.0
2749 | dev: true
2750 |
2751 | /resolve-dir/1.0.1:
2752 | resolution: {integrity: sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=}
2753 | engines: {node: '>=0.10.0'}
2754 | dependencies:
2755 | expand-tilde: 2.0.2
2756 | global-modules: 1.0.0
2757 | dev: true
2758 |
2759 | /resolve-from/3.0.0:
2760 | resolution: {integrity: sha1-six699nWiBvItuZTM17rywoYh0g=}
2761 | engines: {node: '>=4'}
2762 | dev: true
2763 |
2764 | /resolve-url/0.2.1:
2765 | resolution: {integrity: sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=}
2766 | deprecated: https://github.com/lydell/resolve-url#deprecated
2767 | dev: true
2768 |
2769 | /ret/0.1.15:
2770 | resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==}
2771 | engines: {node: '>=0.12'}
2772 | dev: true
2773 |
2774 | /retry/0.12.0:
2775 | resolution: {integrity: sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=}
2776 | engines: {node: '>= 4'}
2777 | dev: true
2778 |
2779 | /rimraf/2.7.1:
2780 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
2781 | hasBin: true
2782 | dependencies:
2783 | glob: 7.1.7
2784 | dev: true
2785 |
2786 | /ripemd160/2.0.2:
2787 | resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==}
2788 | dependencies:
2789 | hash-base: 3.1.0
2790 | inherits: 2.0.4
2791 | dev: true
2792 |
2793 | /run-queue/1.0.3:
2794 | resolution: {integrity: sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=}
2795 | dependencies:
2796 | aproba: 1.2.0
2797 | dev: true
2798 |
2799 | /safe-buffer/5.1.2:
2800 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
2801 | dev: true
2802 |
2803 | /safe-buffer/5.2.1:
2804 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
2805 | dev: true
2806 |
2807 | /safe-regex/1.1.0:
2808 | resolution: {integrity: sha1-QKNmnzsHfR6UPURinhV91IAjvy4=}
2809 | dependencies:
2810 | ret: 0.1.15
2811 | dev: true
2812 |
2813 | /safer-buffer/2.1.2:
2814 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
2815 | dev: true
2816 |
2817 | /schema-utils/1.0.0:
2818 | resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==}
2819 | engines: {node: '>= 4'}
2820 | dependencies:
2821 | ajv: 6.12.6
2822 | ajv-errors: 1.0.1_ajv@6.12.6
2823 | ajv-keywords: 3.5.2_ajv@6.12.6
2824 | dev: true
2825 |
2826 | /select-hose/2.0.0:
2827 | resolution: {integrity: sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=}
2828 | dev: true
2829 |
2830 | /selfsigned/1.10.11:
2831 | resolution: {integrity: sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==}
2832 | dependencies:
2833 | node-forge: 0.10.0
2834 | dev: true
2835 |
2836 | /semver/5.7.1:
2837 | resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
2838 | hasBin: true
2839 | dev: true
2840 |
2841 | /semver/6.3.0:
2842 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
2843 | hasBin: true
2844 | dev: true
2845 |
2846 | /send/0.17.1:
2847 | resolution: {integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==}
2848 | engines: {node: '>= 0.8.0'}
2849 | dependencies:
2850 | debug: 2.6.9
2851 | depd: 1.1.2
2852 | destroy: 1.0.4
2853 | encodeurl: 1.0.2
2854 | escape-html: 1.0.3
2855 | etag: 1.8.1
2856 | fresh: 0.5.2
2857 | http-errors: 1.7.3
2858 | mime: 1.6.0
2859 | ms: 2.1.1
2860 | on-finished: 2.3.0
2861 | range-parser: 1.2.1
2862 | statuses: 1.5.0
2863 | dev: true
2864 |
2865 | /serialize-javascript/4.0.0:
2866 | resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==}
2867 | dependencies:
2868 | randombytes: 2.1.0
2869 | dev: true
2870 |
2871 | /serve-index/1.9.1:
2872 | resolution: {integrity: sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=}
2873 | engines: {node: '>= 0.8.0'}
2874 | dependencies:
2875 | accepts: 1.3.7
2876 | batch: 0.6.1
2877 | debug: 2.6.9
2878 | escape-html: 1.0.3
2879 | http-errors: 1.6.3
2880 | mime-types: 2.1.30
2881 | parseurl: 1.3.3
2882 | dev: true
2883 |
2884 | /serve-static/1.14.1:
2885 | resolution: {integrity: sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==}
2886 | engines: {node: '>= 0.8.0'}
2887 | dependencies:
2888 | encodeurl: 1.0.2
2889 | escape-html: 1.0.3
2890 | parseurl: 1.3.3
2891 | send: 0.17.1
2892 | dev: true
2893 |
2894 | /set-blocking/2.0.0:
2895 | resolution: {integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=}
2896 | dev: true
2897 |
2898 | /set-value/2.0.1:
2899 | resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==}
2900 | engines: {node: '>=0.10.0'}
2901 | dependencies:
2902 | extend-shallow: 2.0.1
2903 | is-extendable: 0.1.1
2904 | is-plain-object: 2.0.4
2905 | split-string: 3.1.0
2906 | dev: true
2907 |
2908 | /setimmediate/1.0.5:
2909 | resolution: {integrity: sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=}
2910 | dev: true
2911 |
2912 | /setprototypeof/1.1.0:
2913 | resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==}
2914 | dev: true
2915 |
2916 | /setprototypeof/1.1.1:
2917 | resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==}
2918 | dev: true
2919 |
2920 | /sha.js/2.4.11:
2921 | resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==}
2922 | hasBin: true
2923 | dependencies:
2924 | inherits: 2.0.4
2925 | safe-buffer: 5.2.1
2926 | dev: true
2927 |
2928 | /shebang-command/1.2.0:
2929 | resolution: {integrity: sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=}
2930 | engines: {node: '>=0.10.0'}
2931 | dependencies:
2932 | shebang-regex: 1.0.0
2933 | dev: true
2934 |
2935 | /shebang-regex/1.0.0:
2936 | resolution: {integrity: sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=}
2937 | engines: {node: '>=0.10.0'}
2938 | dev: true
2939 |
2940 | /signal-exit/3.0.3:
2941 | resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==}
2942 | dev: true
2943 |
2944 | /snapdragon-node/2.1.1:
2945 | resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==}
2946 | engines: {node: '>=0.10.0'}
2947 | dependencies:
2948 | define-property: 1.0.0
2949 | isobject: 3.0.1
2950 | snapdragon-util: 3.0.1
2951 | dev: true
2952 |
2953 | /snapdragon-util/3.0.1:
2954 | resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==}
2955 | engines: {node: '>=0.10.0'}
2956 | dependencies:
2957 | kind-of: 3.2.2
2958 | dev: true
2959 |
2960 | /snapdragon/0.8.2:
2961 | resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==}
2962 | engines: {node: '>=0.10.0'}
2963 | dependencies:
2964 | base: 0.11.2
2965 | debug: 2.6.9
2966 | define-property: 0.2.5
2967 | extend-shallow: 2.0.1
2968 | map-cache: 0.2.2
2969 | source-map: 0.5.7
2970 | source-map-resolve: 0.5.3
2971 | use: 3.1.1
2972 | dev: true
2973 |
2974 | /sockjs-client/1.5.1:
2975 | resolution: {integrity: sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==}
2976 | dependencies:
2977 | debug: 3.2.7
2978 | eventsource: 1.1.0
2979 | faye-websocket: 0.11.3
2980 | inherits: 2.0.4
2981 | json3: 3.3.3
2982 | url-parse: 1.5.1
2983 | dev: true
2984 |
2985 | /sockjs/0.3.21:
2986 | resolution: {integrity: sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==}
2987 | dependencies:
2988 | faye-websocket: 0.11.3
2989 | uuid: 3.4.0
2990 | websocket-driver: 0.7.4
2991 | dev: true
2992 |
2993 | /source-list-map/2.0.1:
2994 | resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==}
2995 | dev: true
2996 |
2997 | /source-map-resolve/0.5.3:
2998 | resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==}
2999 | dependencies:
3000 | atob: 2.1.2
3001 | decode-uri-component: 0.2.0
3002 | resolve-url: 0.2.1
3003 | source-map-url: 0.4.1
3004 | urix: 0.1.0
3005 | dev: true
3006 |
3007 | /source-map-support/0.5.19:
3008 | resolution: {integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==}
3009 | dependencies:
3010 | buffer-from: 1.1.1
3011 | source-map: 0.6.1
3012 | dev: true
3013 |
3014 | /source-map-url/0.4.1:
3015 | resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==}
3016 | dev: true
3017 |
3018 | /source-map/0.5.7:
3019 | resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=}
3020 | engines: {node: '>=0.10.0'}
3021 | dev: true
3022 |
3023 | /source-map/0.6.1:
3024 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
3025 | engines: {node: '>=0.10.0'}
3026 | dev: true
3027 |
3028 | /spdy-transport/3.0.0_supports-color@6.1.0:
3029 | resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==}
3030 | dependencies:
3031 | debug: 4.3.1_supports-color@6.1.0
3032 | detect-node: 2.0.5
3033 | hpack.js: 2.1.6
3034 | obuf: 1.1.2
3035 | readable-stream: 3.6.0
3036 | wbuf: 1.7.3
3037 | transitivePeerDependencies:
3038 | - supports-color
3039 | dev: true
3040 |
3041 | /spdy/4.0.2_supports-color@6.1.0:
3042 | resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==}
3043 | engines: {node: '>=6.0.0'}
3044 | dependencies:
3045 | debug: 4.3.1_supports-color@6.1.0
3046 | handle-thing: 2.0.1
3047 | http-deceiver: 1.2.7
3048 | select-hose: 2.0.0
3049 | spdy-transport: 3.0.0_supports-color@6.1.0
3050 | transitivePeerDependencies:
3051 | - supports-color
3052 | dev: true
3053 |
3054 | /split-string/3.1.0:
3055 | resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==}
3056 | engines: {node: '>=0.10.0'}
3057 | dependencies:
3058 | extend-shallow: 3.0.2
3059 | dev: true
3060 |
3061 | /ssri/6.0.2:
3062 | resolution: {integrity: sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==}
3063 | dependencies:
3064 | figgy-pudding: 3.5.2
3065 | dev: true
3066 |
3067 | /static-extend/0.1.2:
3068 | resolution: {integrity: sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=}
3069 | engines: {node: '>=0.10.0'}
3070 | dependencies:
3071 | define-property: 0.2.5
3072 | object-copy: 0.1.0
3073 | dev: true
3074 |
3075 | /statuses/1.5.0:
3076 | resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=}
3077 | engines: {node: '>= 0.6'}
3078 | dev: true
3079 |
3080 | /stream-browserify/2.0.2:
3081 | resolution: {integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==}
3082 | dependencies:
3083 | inherits: 2.0.4
3084 | readable-stream: 2.3.7
3085 | dev: true
3086 |
3087 | /stream-each/1.2.3:
3088 | resolution: {integrity: sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==}
3089 | dependencies:
3090 | end-of-stream: 1.4.4
3091 | stream-shift: 1.0.1
3092 | dev: true
3093 |
3094 | /stream-http/2.8.3:
3095 | resolution: {integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==}
3096 | dependencies:
3097 | builtin-status-codes: 3.0.0
3098 | inherits: 2.0.4
3099 | readable-stream: 2.3.7
3100 | to-arraybuffer: 1.0.1
3101 | xtend: 4.0.2
3102 | dev: true
3103 |
3104 | /stream-shift/1.0.1:
3105 | resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==}
3106 | dev: true
3107 |
3108 | /string-width/3.1.0:
3109 | resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==}
3110 | engines: {node: '>=6'}
3111 | dependencies:
3112 | emoji-regex: 7.0.3
3113 | is-fullwidth-code-point: 2.0.0
3114 | strip-ansi: 5.2.0
3115 | dev: true
3116 |
3117 | /string_decoder/1.1.1:
3118 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
3119 | dependencies:
3120 | safe-buffer: 5.1.2
3121 | dev: true
3122 |
3123 | /string_decoder/1.3.0:
3124 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
3125 | dependencies:
3126 | safe-buffer: 5.2.1
3127 | dev: true
3128 |
3129 | /strip-ansi/3.0.1:
3130 | resolution: {integrity: sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=}
3131 | engines: {node: '>=0.10.0'}
3132 | dependencies:
3133 | ansi-regex: 2.1.1
3134 | dev: true
3135 |
3136 | /strip-ansi/5.2.0:
3137 | resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==}
3138 | engines: {node: '>=6'}
3139 | dependencies:
3140 | ansi-regex: 4.1.0
3141 | dev: true
3142 |
3143 | /strip-eof/1.0.0:
3144 | resolution: {integrity: sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=}
3145 | engines: {node: '>=0.10.0'}
3146 | dev: true
3147 |
3148 | /supports-color/5.5.0:
3149 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
3150 | engines: {node: '>=4'}
3151 | dependencies:
3152 | has-flag: 3.0.0
3153 | dev: true
3154 |
3155 | /supports-color/6.1.0:
3156 | resolution: {integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==}
3157 | engines: {node: '>=6'}
3158 | dependencies:
3159 | has-flag: 3.0.0
3160 | dev: true
3161 |
3162 | /tapable/1.1.3:
3163 | resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==}
3164 | engines: {node: '>=6'}
3165 | dev: true
3166 |
3167 | /terser-webpack-plugin/1.4.5_webpack@4.46.0:
3168 | resolution: {integrity: sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==}
3169 | engines: {node: '>= 6.9.0'}
3170 | peerDependencies:
3171 | webpack: ^4.0.0
3172 | dependencies:
3173 | cacache: 12.0.4
3174 | find-cache-dir: 2.1.0
3175 | is-wsl: 1.1.0
3176 | schema-utils: 1.0.0
3177 | serialize-javascript: 4.0.0
3178 | source-map: 0.6.1
3179 | terser: 4.8.0
3180 | webpack: 4.46.0_webpack-cli@3.3.12
3181 | webpack-sources: 1.4.3
3182 | worker-farm: 1.7.0
3183 | dev: true
3184 |
3185 | /terser/4.8.0:
3186 | resolution: {integrity: sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==}
3187 | engines: {node: '>=6.0.0'}
3188 | hasBin: true
3189 | dependencies:
3190 | commander: 2.20.3
3191 | source-map: 0.6.1
3192 | source-map-support: 0.5.19
3193 | dev: true
3194 |
3195 | /through2/2.0.5:
3196 | resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
3197 | dependencies:
3198 | readable-stream: 2.3.7
3199 | xtend: 4.0.2
3200 | dev: true
3201 |
3202 | /thunky/1.1.0:
3203 | resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==}
3204 | dev: true
3205 |
3206 | /timers-browserify/2.0.12:
3207 | resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==}
3208 | engines: {node: '>=0.6.0'}
3209 | dependencies:
3210 | setimmediate: 1.0.5
3211 | dev: true
3212 |
3213 | /to-arraybuffer/1.0.1:
3214 | resolution: {integrity: sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=}
3215 | dev: true
3216 |
3217 | /to-object-path/0.3.0:
3218 | resolution: {integrity: sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=}
3219 | engines: {node: '>=0.10.0'}
3220 | dependencies:
3221 | kind-of: 3.2.2
3222 | dev: true
3223 |
3224 | /to-regex-range/2.1.1:
3225 | resolution: {integrity: sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=}
3226 | engines: {node: '>=0.10.0'}
3227 | dependencies:
3228 | is-number: 3.0.0
3229 | repeat-string: 1.6.1
3230 | dev: true
3231 |
3232 | /to-regex-range/5.0.1:
3233 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
3234 | engines: {node: '>=8.0'}
3235 | dependencies:
3236 | is-number: 7.0.0
3237 | dev: true
3238 | optional: true
3239 |
3240 | /to-regex/3.0.2:
3241 | resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==}
3242 | engines: {node: '>=0.10.0'}
3243 | dependencies:
3244 | define-property: 2.0.2
3245 | extend-shallow: 3.0.2
3246 | regex-not: 1.0.2
3247 | safe-regex: 1.1.0
3248 | dev: true
3249 |
3250 | /toidentifier/1.0.0:
3251 | resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==}
3252 | engines: {node: '>=0.6'}
3253 | dev: true
3254 |
3255 | /tty-browserify/0.0.0:
3256 | resolution: {integrity: sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=}
3257 | dev: true
3258 |
3259 | /type-is/1.6.18:
3260 | resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
3261 | engines: {node: '>= 0.6'}
3262 | dependencies:
3263 | media-typer: 0.3.0
3264 | mime-types: 2.1.30
3265 | dev: true
3266 |
3267 | /typedarray/0.0.6:
3268 | resolution: {integrity: sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=}
3269 | dev: true
3270 |
3271 | /union-value/1.0.1:
3272 | resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==}
3273 | engines: {node: '>=0.10.0'}
3274 | dependencies:
3275 | arr-union: 3.1.0
3276 | get-value: 2.0.6
3277 | is-extendable: 0.1.1
3278 | set-value: 2.0.1
3279 | dev: true
3280 |
3281 | /unique-filename/1.1.1:
3282 | resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==}
3283 | dependencies:
3284 | unique-slug: 2.0.2
3285 | dev: true
3286 |
3287 | /unique-slug/2.0.2:
3288 | resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==}
3289 | dependencies:
3290 | imurmurhash: 0.1.4
3291 | dev: true
3292 |
3293 | /unpipe/1.0.0:
3294 | resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=}
3295 | engines: {node: '>= 0.8'}
3296 | dev: true
3297 |
3298 | /unset-value/1.0.0:
3299 | resolution: {integrity: sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=}
3300 | engines: {node: '>=0.10.0'}
3301 | dependencies:
3302 | has-value: 0.3.1
3303 | isobject: 3.0.1
3304 | dev: true
3305 |
3306 | /upath/1.2.0:
3307 | resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==}
3308 | engines: {node: '>=4'}
3309 | dev: true
3310 |
3311 | /uri-js/4.4.1:
3312 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
3313 | dependencies:
3314 | punycode: 2.1.1
3315 | dev: true
3316 |
3317 | /urix/0.1.0:
3318 | resolution: {integrity: sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=}
3319 | deprecated: Please see https://github.com/lydell/urix#deprecated
3320 | dev: true
3321 |
3322 | /url-parse/1.5.1:
3323 | resolution: {integrity: sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==}
3324 | dependencies:
3325 | querystringify: 2.2.0
3326 | requires-port: 1.0.0
3327 | dev: true
3328 |
3329 | /url/0.11.0:
3330 | resolution: {integrity: sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=}
3331 | dependencies:
3332 | punycode: 1.3.2
3333 | querystring: 0.2.0
3334 | dev: true
3335 |
3336 | /use/3.1.1:
3337 | resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==}
3338 | engines: {node: '>=0.10.0'}
3339 | dev: true
3340 |
3341 | /util-deprecate/1.0.2:
3342 | resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=}
3343 | dev: true
3344 |
3345 | /util/0.10.3:
3346 | resolution: {integrity: sha1-evsa/lCAUkZInj23/g7TeTNqwPk=}
3347 | dependencies:
3348 | inherits: 2.0.1
3349 | dev: true
3350 |
3351 | /util/0.11.1:
3352 | resolution: {integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==}
3353 | dependencies:
3354 | inherits: 2.0.3
3355 | dev: true
3356 |
3357 | /utils-merge/1.0.1:
3358 | resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=}
3359 | engines: {node: '>= 0.4.0'}
3360 | dev: true
3361 |
3362 | /uuid/3.4.0:
3363 | resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==}
3364 | hasBin: true
3365 | dev: true
3366 |
3367 | /v8-compile-cache/2.3.0:
3368 | resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==}
3369 | dev: true
3370 |
3371 | /vary/1.1.2:
3372 | resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=}
3373 | engines: {node: '>= 0.8'}
3374 | dev: true
3375 |
3376 | /vm-browserify/1.1.2:
3377 | resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==}
3378 | dev: true
3379 |
3380 | /watchpack-chokidar2/2.0.1:
3381 | resolution: {integrity: sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==}
3382 | dependencies:
3383 | chokidar: 2.1.8
3384 | dev: true
3385 | optional: true
3386 |
3387 | /watchpack/1.7.5:
3388 | resolution: {integrity: sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==}
3389 | dependencies:
3390 | graceful-fs: 4.2.6
3391 | neo-async: 2.6.2
3392 | optionalDependencies:
3393 | chokidar: 3.5.1
3394 | watchpack-chokidar2: 2.0.1
3395 | dev: true
3396 |
3397 | /wbuf/1.7.3:
3398 | resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==}
3399 | dependencies:
3400 | minimalistic-assert: 1.0.1
3401 | dev: true
3402 |
3403 | /webdfu/1.0.5:
3404 | resolution: {integrity: sha512-aZ7FwAq5qCUMas6wpkISQzb+DuE+9dCdpIWejZuQGzsNqr0UlaVCvz4oezoGDoGtTKmRaXjpUlTBung+lGAHVQ==}
3405 | dev: false
3406 |
3407 | /webpack-cli/3.3.12_webpack@4.46.0:
3408 | resolution: {integrity: sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==}
3409 | engines: {node: '>=6.11.5'}
3410 | hasBin: true
3411 | peerDependencies:
3412 | webpack: 4.x.x
3413 | dependencies:
3414 | chalk: 2.4.2
3415 | cross-spawn: 6.0.5
3416 | enhanced-resolve: 4.5.0
3417 | findup-sync: 3.0.0
3418 | global-modules: 2.0.0
3419 | import-local: 2.0.0
3420 | interpret: 1.4.0
3421 | loader-utils: 1.4.0
3422 | supports-color: 6.1.0
3423 | v8-compile-cache: 2.3.0
3424 | webpack: 4.46.0_webpack-cli@3.3.12
3425 | yargs: 13.3.2
3426 | dev: true
3427 |
3428 | /webpack-dev-middleware/3.7.3_webpack@4.46.0:
3429 | resolution: {integrity: sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==}
3430 | engines: {node: '>= 6'}
3431 | peerDependencies:
3432 | webpack: ^4.0.0 || ^5.0.0
3433 | dependencies:
3434 | memory-fs: 0.4.1
3435 | mime: 2.5.2
3436 | mkdirp: 0.5.5
3437 | range-parser: 1.2.1
3438 | webpack: 4.46.0_webpack-cli@3.3.12
3439 | webpack-log: 2.0.0
3440 | dev: true
3441 |
3442 | /webpack-dev-server/3.11.2_46edf965869dcc7c8d09e022f331d1ea:
3443 | resolution: {integrity: sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==}
3444 | engines: {node: '>= 6.11.5'}
3445 | hasBin: true
3446 | peerDependencies:
3447 | webpack: ^4.0.0 || ^5.0.0
3448 | webpack-cli: '*'
3449 | peerDependenciesMeta:
3450 | webpack-cli:
3451 | optional: true
3452 | dependencies:
3453 | ansi-html: 0.0.7
3454 | bonjour: 3.5.0
3455 | chokidar: 2.1.8
3456 | compression: 1.7.4
3457 | connect-history-api-fallback: 1.6.0
3458 | debug: 4.3.1_supports-color@6.1.0
3459 | del: 4.1.1
3460 | express: 4.17.1
3461 | html-entities: 1.4.0
3462 | http-proxy-middleware: 0.19.1_debug@4.3.1
3463 | import-local: 2.0.0
3464 | internal-ip: 4.3.0
3465 | ip: 1.1.5
3466 | is-absolute-url: 3.0.3
3467 | killable: 1.0.1
3468 | loglevel: 1.7.1
3469 | opn: 5.5.0
3470 | p-retry: 3.0.1
3471 | portfinder: 1.0.28
3472 | schema-utils: 1.0.0
3473 | selfsigned: 1.10.11
3474 | semver: 6.3.0
3475 | serve-index: 1.9.1
3476 | sockjs: 0.3.21
3477 | sockjs-client: 1.5.1
3478 | spdy: 4.0.2_supports-color@6.1.0
3479 | strip-ansi: 3.0.1
3480 | supports-color: 6.1.0
3481 | url: 0.11.0
3482 | webpack: 4.46.0_webpack-cli@3.3.12
3483 | webpack-cli: 3.3.12_webpack@4.46.0
3484 | webpack-dev-middleware: 3.7.3_webpack@4.46.0
3485 | webpack-log: 2.0.0
3486 | ws: 6.2.1
3487 | yargs: 13.3.2
3488 | dev: true
3489 |
3490 | /webpack-log/2.0.0:
3491 | resolution: {integrity: sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==}
3492 | engines: {node: '>= 6'}
3493 | dependencies:
3494 | ansi-colors: 3.2.4
3495 | uuid: 3.4.0
3496 | dev: true
3497 |
3498 | /webpack-sources/1.4.3:
3499 | resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==}
3500 | dependencies:
3501 | source-list-map: 2.0.1
3502 | source-map: 0.6.1
3503 | dev: true
3504 |
3505 | /webpack/4.46.0_webpack-cli@3.3.12:
3506 | resolution: {integrity: sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==}
3507 | engines: {node: '>=6.11.5'}
3508 | hasBin: true
3509 | peerDependencies:
3510 | webpack-cli: '*'
3511 | webpack-command: '*'
3512 | peerDependenciesMeta:
3513 | webpack-cli:
3514 | optional: true
3515 | webpack-command:
3516 | optional: true
3517 | dependencies:
3518 | '@webassemblyjs/ast': 1.9.0
3519 | '@webassemblyjs/helper-module-context': 1.9.0
3520 | '@webassemblyjs/wasm-edit': 1.9.0
3521 | '@webassemblyjs/wasm-parser': 1.9.0
3522 | acorn: 6.4.2
3523 | ajv: 6.12.6
3524 | ajv-keywords: 3.5.2_ajv@6.12.6
3525 | chrome-trace-event: 1.0.3
3526 | enhanced-resolve: 4.5.0
3527 | eslint-scope: 4.0.3
3528 | json-parse-better-errors: 1.0.2
3529 | loader-runner: 2.4.0
3530 | loader-utils: 1.4.0
3531 | memory-fs: 0.4.1
3532 | micromatch: 3.1.10
3533 | mkdirp: 0.5.5
3534 | neo-async: 2.6.2
3535 | node-libs-browser: 2.2.1
3536 | schema-utils: 1.0.0
3537 | tapable: 1.1.3
3538 | terser-webpack-plugin: 1.4.5_webpack@4.46.0
3539 | watchpack: 1.7.5
3540 | webpack-cli: 3.3.12_webpack@4.46.0
3541 | webpack-sources: 1.4.3
3542 | dev: true
3543 |
3544 | /websocket-driver/0.7.4:
3545 | resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==}
3546 | engines: {node: '>=0.8.0'}
3547 | dependencies:
3548 | http-parser-js: 0.5.3
3549 | safe-buffer: 5.2.1
3550 | websocket-extensions: 0.1.4
3551 | dev: true
3552 |
3553 | /websocket-extensions/0.1.4:
3554 | resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==}
3555 | engines: {node: '>=0.8.0'}
3556 | dev: true
3557 |
3558 | /which-module/2.0.0:
3559 | resolution: {integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=}
3560 | dev: true
3561 |
3562 | /which/1.3.1:
3563 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
3564 | hasBin: true
3565 | dependencies:
3566 | isexe: 2.0.0
3567 | dev: true
3568 |
3569 | /worker-farm/1.7.0:
3570 | resolution: {integrity: sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==}
3571 | dependencies:
3572 | errno: 0.1.8
3573 | dev: true
3574 |
3575 | /wrap-ansi/5.1.0:
3576 | resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==}
3577 | engines: {node: '>=6'}
3578 | dependencies:
3579 | ansi-styles: 3.2.1
3580 | string-width: 3.1.0
3581 | strip-ansi: 5.2.0
3582 | dev: true
3583 |
3584 | /wrappy/1.0.2:
3585 | resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
3586 | dev: true
3587 |
3588 | /ws/6.2.1:
3589 | resolution: {integrity: sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==}
3590 | dependencies:
3591 | async-limiter: 1.0.1
3592 | dev: true
3593 |
3594 | /xtend/4.0.2:
3595 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
3596 | engines: {node: '>=0.4'}
3597 | dev: true
3598 |
3599 | /y18n/4.0.3:
3600 | resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
3601 | dev: true
3602 |
3603 | /yallist/3.1.1:
3604 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
3605 | dev: true
3606 |
3607 | /yargs-parser/13.1.2:
3608 | resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==}
3609 | dependencies:
3610 | camelcase: 5.3.1
3611 | decamelize: 1.2.0
3612 | dev: true
3613 |
3614 | /yargs/13.3.2:
3615 | resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==}
3616 | dependencies:
3617 | cliui: 5.0.0
3618 | find-up: 3.0.0
3619 | get-caller-file: 2.0.5
3620 | require-directory: 2.1.1
3621 | require-main-filename: 2.0.0
3622 | set-blocking: 2.0.0
3623 | string-width: 3.1.0
3624 | which-module: 2.0.0
3625 | y18n: 4.0.3
3626 | yargs-parser: 13.1.2
3627 | dev: true
3628 |
--------------------------------------------------------------------------------