├── .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 | [![NPM](https://img.shields.io/npm/v/upsilon.js?style=flat-square)](https://www.npmjs.com/package/upsilon.js) 4 | ![Version](https://img.shields.io/github/package-json/v/M4xi1m3/numworks.js?color=green&style=flat-square) 5 | ![License](https://img.shields.io/npm/l/upsilon.js?color=blue&style=flat-square) 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 | --------------------------------------------------------------------------------