├── .gitignore
├── LICENSE
├── README.md
├── components
├── Entry.js
└── GuiServer.js
├── css
└── mystyle.css
├── data
└── struct.json
├── fonts
└── PressStart2P-Regular.ttf
├── index.html
├── launch.js
├── main.js
├── package-lock.json
├── package.json
└── server
└── heappy.py
/.gitignore:
--------------------------------------------------------------------------------
1 | /dist/
2 | /node_modules
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Gand3lf
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 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # :slightly_smiling_face: Heappy: a happy heap editor
2 | Heappy is an editor based on gdb/gef that helps you to handle the heap during your exploitation development.
3 | The project should be considered a didactic tool useful to understand the evolution of the heap during the process life cycle. It has been created to simplify the study of the most common heap exploitation techniques and to support you to solve some binary exploitation CTFs related to this fantastic topic.
4 |
5 |
6 |
7 |
8 |
9 | ## Main features
10 | This is what Heappy implements:
11 | :white_check_mark: take heap snapshots and compare them each other
12 | :white_check_mark: recognize immediately type and fields of heap bins
13 | :white_check_mark: search and edit heap values by decimal, hex or string
14 | :white_check_mark: find yourself with the panoramic view of the heap status
15 | :white_check_mark: take notes about a cell in the comment column
16 | :white_check_mark: enjoy the light and dark mode
17 |
18 | ## Getting Started
19 |
20 | These instructions will help you to install and run Heappy fastly.
21 |
22 | ### Prerequisites
23 |
24 | If you don't have it, install GEF in GDB:
25 |
26 | ```
27 | wget -q -O- https://github.com/hugsy/gef/raw/master/scripts/gef.sh | sh
28 | ```
29 | md5(gef.sh): eb053864d050048cb001c80c79fde7b5
30 |
31 | ### Installing
32 |
33 | Install Node.js and npm:
34 | ```
35 | apt update
36 | sudo apt install nodejs npm
37 | ```
38 | Download and install Heappy:
39 | ```
40 | git clone https://github.com/gand3lf/heappy
41 | cd heappy/
42 | npm install
43 | ```
44 | Load the server inside GDB:
45 | ```
46 | gef➤ source /my/path/heappy/server/heappy.py
47 | ```
48 | It is suggested to run the Heappy GUI after that the target heap has been initialized.
49 | For example:
50 | ```
51 | gef➤ break main
52 | gef➤ run
53 | ```
54 | From another terminal launch the GUI:
55 | ```
56 | cd /my/path/heappy/
57 | npm start
58 | ```
59 |
60 | Have fun! :rocket:
61 |
62 | ## Not yet implemented
63 | :black_square_button: 32-bit addresses support (coming soon)
64 | :black_square_button: multiple heaps support
65 | :black_square_button: gdb checkpoint integration
66 |
67 | ## Built With
68 |
69 | * [Vue.js](https://vuejs.org/) - Web framework
70 | * [Electron](https://www.electronjs.org/) - Builder framework
71 | * [GEF](https://github.com/hugsy/gef) - GDB extension
72 | * [Python3](https://www.python.org) - For GEF integration
73 |
74 | ## Current status ##
75 |
76 | | License | Compatibility |
77 | |---|---|
78 | | [](https://github.com/Gand3lf/heappy/blob/main/LICENSE) | [](https://www.python.org/) |
79 |
80 |
--------------------------------------------------------------------------------
/components/Entry.js:
--------------------------------------------------------------------------------
1 | class Entry {
2 | value = null;
3 | representation = null; //d: decimal, h: hex, a: ascii
4 | color = null;
5 | tag = null; // field of bin
6 | type = null; // type of bin
7 | comment = null;
8 |
9 | constructor(value, representation="h", color=null, tag=null, type=null, comment=null){
10 | this.value = BigInt(value)
11 | this.representation = representation
12 | this.color = color
13 | this.tag = tag
14 | this.type = type
15 | this.comment = comment
16 | }
17 |
18 | isPrintable(){
19 | return false
20 | }
21 |
22 | toHex(){
23 | return "0x"+this.value.toString(16)
24 | }
25 |
26 | toInt(){
27 | return this.value
28 | }
29 |
30 | toAscii(){
31 | var hex = this.value.toString(16)
32 | if(hex.length%2 != 0)
33 | hex = "0"+hex
34 | var str = '';
35 | for (var i = 0; (i < hex.length && hex.substr(i, 2) !== '00'); i += 2){
36 | str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
37 | }
38 | return str;
39 | }
40 |
41 | toString(){
42 | switch(this.representation){
43 | case "d":
44 | return this.toInt()
45 | break
46 | case "h":
47 | return this.toHex()
48 | break
49 | case "a":
50 | return this.toAscii()
51 | break
52 | }
53 | }
54 |
55 | changeValue(newValue){
56 | switch(this.representation){
57 | case "d":
58 | this.value = BigInt(newValue)
59 | break
60 | case "h":
61 | this.value = BigInt(newValue, 16)
62 | break
63 | case "a":
64 | var arr1 = [];
65 | for (var n = 0, l = newValue.length; n < l; n ++){
66 | var hex = Number(newValue.charCodeAt(n)).toString(16);
67 | arr1.push(hex);
68 | }
69 | this.value = BigInt("0x"+arr1.join(''), 16);
70 | break
71 | }
72 | }
73 |
74 | }
75 | module.exports = { Entry }
--------------------------------------------------------------------------------
/components/GuiServer.js:
--------------------------------------------------------------------------------
1 | class GuiServer extends WebSocket {
2 | context = null
3 |
4 | constructor(context){
5 | super('ws://localhost:9884/')
6 | this.context = context
7 | this.onopen = this.onOpen
8 | this.onmessage = this.onMessage
9 |
10 | }
11 | onOpen(event){
12 | console.log('WebSocket Client Connected');
13 |
14 | this.send('{"method":"snap"}');
15 | }
16 | onMessage(event){
17 | var msg = JSON.parse(event.data);
18 | for(var key in msg.heap.data){
19 | msg.heap.data[key] = new Entry(msg.heap.data[key])
20 | }
21 | if(this.context.heaps.length == 0){
22 | this.context.heaps.push(msg.heap)
23 | this.context.chunks.push(msg.chunks)
24 | }else{
25 | this.context.heaps[this.context.heaps.length-1] = msg.heap
26 | this.context.chunks[this.context.chunks.length-1] = msg.chunks
27 | }
28 | this.context.colorChunks()
29 | this.context.initCanvas()
30 | this.context.updateCanvas()
31 | this.context.tableUpdate()
32 | this.context.binsUpdate()
33 | }
34 | updateSnap(){
35 | this.send('{"method":"snap"}');
36 | }
37 | updateValue(address, value){
38 | var data = JSON.stringify({
39 | address: address.toString(16),
40 | value: value.toString(16)
41 | })
42 | this.send('{"method":"update", "data":'+data+'}');
43 | }
44 |
45 | }
46 | module.exports = { GuiServer }
--------------------------------------------------------------------------------
/css/mystyle.css:
--------------------------------------------------------------------------------
1 | .theme-light {
2 | --background-color: #ffffff;
3 | --color-title: black;
4 | --bgcolor-maintab-head: #ffb13d;
5 | --color--maintab-head: #262626;
6 | --color-addresses: #3a3a3a;
7 | --color-fields: #3a3a3a;
8 | --color-border-vertical: #686868;
9 | --color-even: #ffffff;
10 | --color-odd: #ededed;
11 | --color-valuetable: #424242;
12 | --bgcolor-highlight: #D1E0EF;
13 | --color-highlight: #0060C1;
14 | --color-comment: #1E1E1E;
15 | --grad-button: linear-gradient(to bottom, #6296CA 5%, #3F7FBF 100%);
16 | --border-button: 1px solid #3B77B3;
17 | --bg-abbr: #777777;
18 | --color-plcholder-head: #555555;
19 | --grad-select:linear-gradient(to bottom, #6296CA 5%, #3F7FBF 100%);
20 | --border-select: 1px solid #3B77B3;
21 | --color-logbins: #555;
22 | }
23 |
24 | .theme-dark {
25 | --background-color: #3e3f43;
26 | --color-title: white;
27 | --bgcolor-maintab-head: #363b40;
28 | --color--maintab-head: #ebedef;
29 | --color-addresses: #b3ffff;
30 | --color-fields: rgba(253, 253, 253, 1);
31 | --color-border-vertical: #949494;
32 | --color-even: #414446;
33 | --color-odd: #54585c;
34 | --color-valuetable: #d3d3d3;
35 | --bgcolor-highlight: rgba(235, 255, 61, 0.20);
36 | --color-highlight: #99ff66;
37 | --color-comment: #ffffff;
38 | --grad-button: linear-gradient(to bottom, #ff5bb0 5%, #ef027d 100%);
39 | --border-button: 1px solid #ee1eb5;
40 | --bg-abbr: #999999;
41 | --color-plcholder-head: #b7b7b7;
42 | --grad-select:linear-gradient(to bottom, #ff5bb0 5%, #ef027d 100%);
43 | --border-select: 1px solid #ee1eb5;
44 | --color-logbins: #ddd;
45 | }
46 |
47 | @font-face{
48 | font-family: "pressFont";
49 | src: url("../fonts/PressStart2P-Regular.ttf") format("truetype");
50 | }
51 |
52 | body {
53 | margin: 0;
54 | margin-top: 50px;
55 | font-family: Calibri, sans-serif;
56 | background-color: var(--background-color);
57 | }
58 |
59 | .title{
60 | color: var(--color-title);
61 | }
62 |
63 | .maintab{
64 | white-space: nowrap;
65 | border-spacing: 0;
66 | margin-left: auto;
67 | margin-right: auto;
68 | box-shadow: 0 1px 9px 1px rgba(0, 0, 0, 0.28);
69 | }
70 |
71 | .maintab.head{
72 | font-family: Calibri, sans-serif;
73 | background: var(--bgcolor-maintab-head);
74 | color: var(--color--maintab-head);
75 | }
76 |
77 | .maintab.head th{
78 | min-width: 70px;
79 | height: 35px;
80 | }
81 |
82 | .maintab.head th:first-child{
83 | min-width: 140px;
84 | }
85 |
86 | .addresses{
87 | text-align: center;
88 | color: var(--color-addresses);
89 | font-family: Verdana,Geneva,sans-serif;
90 | letter-spacing: 1px;
91 | font-size: 15px;
92 | }
93 |
94 | .fields{
95 | color: var(--color-fields);
96 | font-style: italic;
97 | }
98 |
99 | .maintab.body td + td {
100 | border-left:1px solid var(--color-border-vertical);
101 | }
102 |
103 | .maintab.body tr:nth-child(even) {
104 | background: var(--color-even);
105 | }
106 |
107 | .maintab.body tr:nth-child(odd) {
108 | background: var(--color-odd);
109 | }
110 |
111 | .valuetable{
112 | }
113 |
114 | .valuetable input{
115 | text-align: right;
116 | color: var(--color-valuetable);
117 | font: normal 14px/normal "Lucida Console", Monaco, monospace;
118 | }
119 |
120 | .valuetable input:nth-of-type(odd)[highlight=true]{
121 | background: var(--bgcolor-highlight);
122 | color: var(--color-highlight);
123 | }
124 |
125 | .input.comment{
126 | display: inline-block;
127 | border: none;
128 | font: normal 14px/normal "Arial", Monaco, monospace;
129 | color: var(--color-comment);
130 | background-color: rgba(0,0,0,0);
131 | width: 160px;
132 | outline: none;
133 | }
134 |
135 | .myButton{
136 | background: var(--grad-button);
137 | background-color:#ee4aa0;
138 | border-radius: 10px;
139 | border: var(--border-button);
140 | display:inline-block;
141 | cursor:pointer;
142 | color:#ffffff; /* text color*/
143 | font-family:Arial;
144 | font-size:13px;
145 | font-weight:bold;
146 | }
147 |
148 | abbr[data-title] {
149 | position: relative;
150 | }
151 |
152 | abbr[data-title]:hover::after,
153 | abbr[data-title]:focus::after {
154 | content: attr(data-title);
155 | position: absolute;
156 | left: 14px;
157 | top: -2px;
158 | width: auto;
159 | white-space: nowrap;
160 | background: var(--bg-abbr);
161 | color: #fff;
162 | border-radius: 9px;
163 | box-shadow: 1px 1px 5px 0 rgba(0,0,0,0.4);
164 | font-size: 14px;
165 | padding: 3px 5px;
166 | }
167 |
168 | .buttonhead {
169 | box-shadow:inset 0px 1px 0px 0px #f7c5c0;
170 | background:linear-gradient(to bottom, #fc8d83 5%, #e4685d 100%);
171 | background-color:#fc8d83;
172 | border-radius:4px;
173 | border:1px solid #d83526;
174 | display:inline-block;
175 | cursor:pointer;
176 | color:#ffffff;
177 | font-family:Arial;
178 | font-size:13px;
179 | font-weight:bold;
180 | padding:1px 4px;
181 | text-decoration:none;
182 | text-shadow:0px 1px 0px #b23e35;
183 | position: relative;
184 | }
185 |
186 | .buttonhead:hover {
187 | background:linear-gradient(to bottom, #e4685d 5%, #fc8d83 100%);
188 | background-color:#e4685d;
189 | }
190 |
191 | .buttonhead:active {
192 | position:relative;
193 | top:1px;
194 | }
195 |
196 | .input.value.head{
197 | border: none;
198 | color: #d3d3d3;;
199 | font: normal 14px/normal "Arial", Monaco, monospace;
200 | background: rgba(0,0,0,0);
201 | background:
202 | linear-gradient(#000, #000) center bottom 0px /calc(100% - 0px) 1px no-repeat;
203 | }
204 |
205 | .input.value.head::placeholder {
206 | color: var(--color-plcholder-head);
207 | }
208 |
209 | .input.value.head:focus {
210 | outline: none;
211 | }
212 |
213 | .input.value.body{
214 | border: none;
215 | background: rgba(0,0,0,0);
216 | }
217 |
218 | .selecthead {
219 | -webkit-appearance: none;
220 | background: var(--grad-select);
221 | background-color:#e4685d;
222 | border-radius: 3px;
223 | border: var(--border-select);
224 | display:inline-block;
225 | cursor:pointer;
226 | color:#ffffff; /* text color*/
227 | font-family:Arial;
228 | font-size:13px;
229 | width: 20px;
230 | height: 20px;
231 | font-weight:bold;
232 | text-indent: 4px;
233 | position: relative;
234 | left: 2px;
235 | }
236 |
237 | canvas{
238 | display: block;
239 | margin-left: auto;
240 | margin-right: auto;
241 | width: 80%;
242 | }
243 |
244 | .plusmin{
245 | position: relative;
246 | left: 0px;
247 | border-radius: 15px;
248 | background-color:#999999;
249 | border: none;
250 | cursor: pointer;
251 | font-weight: bold;
252 | font-family: Verdana,Geneva,sans-serif;
253 | }
254 |
255 | .help{
256 | position: absolute;
257 | right: 0;
258 | bottom: 0;
259 | }
260 |
261 | .help[data-title] {
262 | position: relative;
263 | }
264 |
265 | .help[help-text]:hover::after,
266 | .help[help-text]:focus::after {
267 | content: attr(help-text);
268 | position: absolute;
269 | left: -104px;
270 | top: -100px;
271 | width: auto;
272 | background: #fff;
273 | color: #000;
274 | text-align: left;
275 | border-radius: 9px;
276 | box-shadow: 1px 1px 5px 0 rgba(0,0,0,0.4);
277 | font-size: 14px;
278 | padding: 3px 5px;
279 | }
280 |
281 | .myCanvas{
282 | box-shadow: 0 1px 9px 1px rgba(0, 0, 0, 0.28);
283 | }
284 |
285 | .logBins{
286 | color: var(--color-logbins);
287 | text-align: center;
288 | font-style: italic;
289 | }
290 |
291 | .navbar {
292 | overflow: hidden;
293 | background-color: #f7b600;
294 | position: fixed;
295 | top: 0;
296 | width: 100%;
297 | -webkit-user-select: none;
298 | -webkit-app-region: drag;
299 | z-index: 10;
300 | }
301 |
302 | .topButton {
303 | background-color:#f7b600;
304 | display:inline-block;
305 | cursor:pointer;
306 | color:#333;
307 | font-family:Arial;
308 | font-size:15px;
309 | text-decoration:none;
310 | padding:6px 20px;
311 | outline:none;
312 | border: none;
313 | -webkit-app-region: no-drag;
314 | }
315 |
316 | .topButton:hover {
317 | background-color:#f29d00;
318 | }
319 |
320 | .topButton:active {
321 | border-style: outset;
322 | border: none;
323 | }
324 |
325 | .topButton.exit{
326 | position: absolute;
327 | right:0;
328 | background-color: #cf2a45;
329 | color: white;
330 | }
331 |
332 | .topButton.exit:hover {
333 | background-color: #e42f4d;
334 | }
335 |
336 | .topButton.title{
337 | font-size:11px;
338 | font-family: "pressFont";
339 | }
--------------------------------------------------------------------------------
/data/struct.json:
--------------------------------------------------------------------------------
1 | {
2 | "small":["prev_size", "size", "fd", "bk"],
3 | "large":["prev_size", "size", "fd", "bk", "fd_nextsize", "bk_nextsize"],
4 | "unsorted":["prev_size", "size", "fd", "bk"],
5 | "fast":["prev_size", "size", "fd"],
6 | "tcache":["next", "key"]
7 | }
--------------------------------------------------------------------------------
/fonts/PressStart2P-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gand3lf/heappy/20a3d01387a3ea87e84ff37da34510d0428c042c/fonts/PressStart2P-Regular.ttf
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | HEAPPY
24 | change theme
25 | zoom in
26 | zoom out
27 | clean
28 | exit
29 |
30 |
31 |
32 |
33 |
78 |
79 |
81 | Your browser does not support the canvas element.
82 |
83 |
| tcache: {{sumBins.tcache}} | fast: {{sumBins.fast}} | small: {{sumBins.small}} | large: {{sumBins.large}} | unsorted: {{sumBins.unsorted}} | allocated: {{sumBins.allocated}} |
84 |
85 |
86 |
87 |
xX No data available Xx
88 | Take an heap snapshot!
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
--------------------------------------------------------------------------------
/launch.js:
--------------------------------------------------------------------------------
1 | const { app, BrowserWindow } = require('electron')
2 |
3 |
4 | function createWindow () {
5 | const win = new BrowserWindow({
6 | width: 900,
7 | height: 590,
8 | minWidth: 700,
9 | minHeight: 300,
10 | frame: false,
11 | title: "HEAPPY :)",
12 | webPreferences: {
13 | nodeIntegration: true
14 | }
15 | })
16 | const ses = win.webContents.session.clearCache(function() {
17 | });
18 | win.setMenu(null)
19 | win.loadFile('index.html')
20 | }
21 |
22 | app.whenReady().then(createWindow)
23 |
24 | app.on('window-all-closed', () => {
25 | if (process.platform !== 'darwin') {
26 | app.quit()
27 | }
28 | })
29 |
30 | app.on('activate', () => {
31 | if (BrowserWindow.getAllWindows().length === 0) {
32 |
33 | createWindow()
34 | }
35 | })
36 |
37 |
--------------------------------------------------------------------------------
/main.js:
--------------------------------------------------------------------------------
1 | const { Entry } = require('./components/Entry');
2 | const { GuiServer } = require('./components/GuiServer');
3 | var fs = require("fs");
4 | const ldsh = require('lodash')
5 |
6 | new Vue({
7 | el:'#app',
8 | data:{
9 | heaps:[],
10 | chunks: [],
11 | struct: {},
12 | zoom:100,
13 | range: [0,16],
14 | shift: 0,
15 | lastScroll: null,
16 | updateRows: 0,
17 | chunkColors: {},
18 | factCanvas: 0,
19 | canvasInitialized: false,
20 | currIdCanvas: 0,
21 | guiServer: null,
22 | usage: "",
23 | sumBins: {}
24 | },
25 | created:function() {
26 |
27 | fetch('file:./data/struct.json')
28 | .then(res => {
29 | return res.json()
30 | })
31 | .then(res => {
32 | this.struct = res;
33 | })
34 |
35 | this.chunkColors["fast"] = "#c6ff44"
36 | this.chunkColors["large"] = "#44b0ff"
37 | this.chunkColors["small"] = "#ad44ff"
38 | this.chunkColors["tcache"] = "#ff4493"
39 | this.chunkColors["unsorted"] = "#ffbb44"
40 | this.chunkColors["allocated"] = "#d8d8d8"
41 |
42 | this.guiServer = new GuiServer(this)
43 | },
44 | methods:{
45 | isLastChunk(id){
46 | console.log("test")
47 | console.log(id)
48 | console.log(this.chunks.length -1)
49 | if(id == this.chunks.length -1)
50 | return true
51 | return false
52 | },
53 | handleScroll(event) {
54 | //event.deltaY>0 ? this.zoom-=30 : this.zoom+=30
55 | var date = new Date();
56 | var time = date.getTime();
57 | var scrollFast = 1
58 | if(this.lastScroll != null){
59 | scrollFast = 1 -Math.round(100/(this.lastScroll-time))
60 | }
61 | this.lastScroll = time
62 | event.deltaY>0?this.shift+=scrollFast:this.shift-=scrollFast
63 |
64 | if(this.shift < 0)
65 | this.shift = 0
66 | if(this.shift + this.range[1] > this.heaps[0].top)
67 | this.shift = this.heaps[0].top - this.range[1]
68 |
69 | this.updateCanvas()
70 | },
71 | initCanvas(){
72 | var canvas = document.getElementById("colorBar");
73 | if(canvas == null)
74 | return
75 | this.canvasInitialized = true
76 | var lastCId = this.chunks.length - 1
77 |
78 | var ctx = canvas.getContext("2d");
79 | ctx.clearRect(0, 0, 700, 50);
80 | ctx.imageSmoothingEnabled= false
81 | ctx.lineWidth = 3;
82 | var keys = Object.keys(this.chunks[lastCId]);
83 |
84 | var rangeSize = keys[keys.length -1] - this.heaps[0].bot
85 | this.factCanvas = canvas.width / rangeSize
86 |
87 | for(var k in this.chunks[lastCId]){
88 | var x = (k - this.heaps[0].bot) * this.factCanvas
89 | var colorChunk = this.chunkColors[this.chunks[lastCId][k]]
90 | ctx.beginPath();
91 | ctx.strokeStyle = colorChunk
92 | ctx.moveTo(x,2);
93 | ctx.lineTo(x,48);
94 | ctx.stroke();
95 | }
96 | ctx.beginPath();
97 | ctx.strokeStyle = "#FF00FF"
98 | ctx.moveTo(0, 0); ctx.lineTo(25, 0); ctx.stroke();
99 | ctx.moveTo(0, 50); ctx.lineTo(25, 50); ctx.stroke();
100 | },
101 | updateCanvas(){
102 | if(this.currIdCanvas != this.chunks.length
103 | && this.chunks.length !=0
104 | && !this.canvasInitialized){
105 | this.initCanvas()
106 | }
107 | var keys = Object.keys(this.chunks);
108 | var rangeSize = keys[keys.length -1] - this.heaps[0].bot
109 |
110 | var canvas = document.getElementById("colorBar");
111 | if(canvas == null)
112 | return
113 | var ctx = canvas.getContext("2d");
114 | ctx.imageSmoothingEnabled= false
115 | ctx.lineWidth = 5;
116 |
117 | ctx.beginPath();
118 | ctx.strokeStyle = "#FFFFFF"
119 | ctx.moveTo(0,0); ctx.lineTo(700,0); ctx.stroke();
120 | ctx.moveTo(0,50); ctx.lineTo(700,50); ctx.stroke();
121 |
122 | var x = this.shift * this.factCanvas * 8
123 |
124 | ctx.beginPath();
125 | ctx.strokeStyle = "#FF00FF"
126 | var barSize = (this.range[1]*8) * this.factCanvas
127 |
128 | ctx.moveTo(x,0); ctx.lineTo(x + barSize,0); ctx.stroke();
129 | ctx.moveTo(x,50); ctx.lineTo(x + barSize,50); ctx.stroke();
130 |
131 | },
132 | canvasClick(event){
133 | var rect = event.target.getBoundingClientRect();
134 | var fact = 700 / (rect.right - rect.left)
135 | var barSize = (16*8) * this.factCanvas
136 | var x = ((event.clientX - rect.left) * fact) - (barSize/2)
137 | if(x < 0)
138 | x = 0
139 | this.shift = Math.round((x / this.factCanvas) / 8)
140 | this.updateCanvas()
141 | },
142 | takeSnapshot(){
143 | var clonedHeap = ldsh.cloneDeep(this.heaps[this.heaps.length-1])
144 | var clonedChunks = ldsh.cloneDeep(this.chunks[this.chunks.length-1])
145 |
146 | this.heaps.push(clonedHeap)
147 | this.chunks.push(clonedChunks)
148 |
149 | this.updateCanvas()
150 | },
151 | updateSnapshot(){
152 | this.guiServer.updateSnap()
153 | },
154 | colorChunks(){
155 | for(var id=0; id < this.heaps.length;id++){
156 | for (let addr in this.chunks[id]){
157 | address = parseInt(addr)
158 | type = this.chunks[id][address]
159 | color = this.chunkColors[type]
160 | //console.log(address, type, color)
161 |
162 | switch(type){
163 | case "allocated":
164 | if(!(address in this.heaps[id].data))
165 | this.heaps[id].data[address] = new Entry(0)
166 | this.heaps[id].data[address].color = color
167 | this.heaps[id].data[address].type = type
168 | break
169 | case "tcache":
170 | if(!(address in this.heaps[id].data))
171 | this.heaps[id].data[address] = new Entry(0)
172 | if(!(address+8 in this.heaps[id].data))
173 | this.heaps[id].data[address+8] = new Entry(0)
174 |
175 | this.heaps[id].data[address].color = color
176 | this.heaps[id].data[address+8].color = color
177 |
178 | this.heaps[id].data[address].tag = this.struct[type][0] // "next"
179 | this.heaps[id].data[address+8].tag = this.struct[type][1] // "key"
180 |
181 | this.heaps[id].data[address].type = type
182 | this.heaps[id].data[address+8].type = type
183 | break
184 | case "fast":
185 | case "small":
186 | case "large":
187 | case "unsorted":
188 | for(var c=0; c0 && this.heaps[id].data[address].value != this.heaps[id-1].data[address].value)
224 | entry["isChanged"] = true
225 |
226 | if(id < this.heaps.length -1)
227 | entry["readonly"] = true
228 | entries.push(entry)
229 | }
230 | yield entries
231 | }
232 | },
233 | changeRepr(event){
234 | var b = event.target
235 | var id = parseInt(b.getAttribute("heapid"))
236 |
237 | var address = b.id.split(":")[1]
238 | var action = "h"
239 | if(b.innerText == "h"){
240 | action = "d"
241 | }else if(b.innerText == "d"){
242 | action = "a"
243 | }
244 | this.heaps[id].data[parseInt(address,16)].representation = action
245 |
246 | this.tableUpdate()
247 | },
248 | valueChanged(event){
249 | var addr = parseInt(event.target.parentElement.id, 16)
250 | var newVal = event.target.value
251 | var id = parseInt(event.target.getAttribute("heapid"))
252 |
253 | this.heaps[id].data[addr].changeValue(newVal)
254 | this.guiServer.updateValue(addr, this.heaps[id].data[addr].toInt())
255 | this.tableUpdate()
256 | },
257 | searchChanged(id, event){
258 | var value = event.target.value
259 | var select = document.getElementById("searchType:" + id)
260 |
261 | switch(select.value){
262 | case "h":
263 | case "d":
264 | if( !isNaN(value)){
265 | var intVal = BigInt(value)
266 | for(var address in this.heaps[id].data ){
267 | if(( event.key != "Enter" || address > this.heaps[id].bot + (this.shift*8)) &&
268 | this.heaps[id].data[address].value == intVal){
269 | this.shift = (address - this.heaps[id].bot)/8
270 | break
271 | }
272 | }
273 | }
274 | break
275 | case "s":
276 | var strVal = value.split("").reverse().join("")
277 | for(var address in this.heaps[id].data ){
278 | if(( event.key != "Enter" || address > this.heaps[id].bot + (this.shift*8)) &&
279 | this.heaps[id].data[address].toAscii().includes(strVal) ){
280 | this.shift = (address - this.heaps[id].bot)/8
281 | break
282 | }
283 | }
284 | break
285 | }
286 | this.updateCanvas()
287 | },
288 | arrowHandler(id, event){
289 | // Per andare direttamente al prossimo chunk
290 | if(event.key == "ArrowDown"){
291 | console.log("ArrowDown pressed")
292 | console.log(this.shift + this.heaps[id].bot)
293 | }else if (event.key == "ArrowUp"){
294 | console.log("ArrowUp pressed")
295 | }
296 | },
297 | commentChanged(event){
298 | var addr = parseInt(event.target.parentElement.id, 16)
299 | var newVal = event.target.value
300 | this.heaps[0].data[addr].comment = newVal
301 | console.log("commented")
302 | },
303 | tableUpdate(){
304 | this.updateRows += 1
305 | },
306 | deleteSnap(id, event){
307 | console.log(id)
308 | if(id == this.heaps.length-1)
309 | return
310 | console.log("delete row:", id)
311 | //this.heaps.pop()
312 | this.heaps.splice(id, 1);
313 | this.chunks.splice(id, 1);
314 | this.canvasInitialized = false
315 | this.initCanvas()
316 | this.updateCanvas()
317 | },
318 | changeRows(val){
319 | this.range[1] += val
320 | this.tableUpdate()
321 | this.updateCanvas()
322 | console.log(val)
323 | },
324 | changeZoom(inout){
325 | this.zoom += inout
326 | document.getElementById("mainTable").style.zoom = this.zoom+"%"
327 | },
328 | binsUpdate(){
329 | this.sumBins = {
330 | "fast": 0,
331 | "large": 0,
332 | "small": 0,
333 | "tcache": 0,
334 | "unsorted": 0,
335 | "allocated": 0
336 | }
337 | var lastId = this.chunks.length-1
338 | for(var k in this.chunks[lastId]){
339 | this.sumBins[this.chunks[lastId][k]] += 1
340 | }
341 | },
342 | clean(){
343 | window.location.reload(false);
344 | }
345 | }
346 | })
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "heappy",
3 | "version": "0.1.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "heappy",
9 | "version": "0.1.0",
10 | "dependencies": {
11 | "lodash": "^4.17.21",
12 | "nocache": "^2.1.0",
13 | "vue-observe-visibility": "^1.0.0",
14 | "websocket": "^1.0.33"
15 | },
16 | "devDependencies": {
17 | "electron": "^11.2.3",
18 | "electron-packager": "^15.2.0"
19 | }
20 | },
21 | "node_modules/@electron/get": {
22 | "version": "1.12.4",
23 | "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.4.tgz",
24 | "integrity": "sha512-6nr9DbJPUR9Xujw6zD3y+rS95TyItEVM0NVjt1EehY2vUWfIgPiIPVHxCvaTS0xr2B+DRxovYVKbuOWqC35kjg==",
25 | "dev": true,
26 | "dependencies": {
27 | "debug": "^4.1.1",
28 | "env-paths": "^2.2.0",
29 | "fs-extra": "^8.1.0",
30 | "got": "^9.6.0",
31 | "progress": "^2.0.3",
32 | "semver": "^6.2.0",
33 | "sumchecker": "^3.0.1"
34 | },
35 | "engines": {
36 | "node": ">=8.6"
37 | },
38 | "optionalDependencies": {
39 | "global-agent": "^2.0.2",
40 | "global-tunnel-ng": "^2.7.1"
41 | }
42 | },
43 | "node_modules/@sindresorhus/is": {
44 | "version": "0.14.0",
45 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
46 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
47 | "dev": true,
48 | "engines": {
49 | "node": ">=6"
50 | }
51 | },
52 | "node_modules/@szmarczak/http-timer": {
53 | "version": "1.1.2",
54 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
55 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
56 | "dev": true,
57 | "dependencies": {
58 | "defer-to-connect": "^1.0.1"
59 | },
60 | "engines": {
61 | "node": ">=6"
62 | }
63 | },
64 | "node_modules/@types/glob": {
65 | "version": "7.1.3",
66 | "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz",
67 | "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==",
68 | "dev": true,
69 | "optional": true,
70 | "dependencies": {
71 | "@types/minimatch": "*",
72 | "@types/node": "*"
73 | }
74 | },
75 | "node_modules/@types/minimatch": {
76 | "version": "3.0.3",
77 | "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
78 | "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
79 | "dev": true,
80 | "optional": true
81 | },
82 | "node_modules/@types/node": {
83 | "version": "12.20.0",
84 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.0.tgz",
85 | "integrity": "sha512-0/41wHcurotvSOTHQUFkgL702c3pyWR1mToSrrX3pGPvGfpHTv3Ksx0M4UVuU5VJfjVb62Eyr1eKO1tWNUCg2Q==",
86 | "dev": true
87 | },
88 | "node_modules/@types/yauzl": {
89 | "version": "2.9.1",
90 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz",
91 | "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==",
92 | "dev": true,
93 | "optional": true,
94 | "dependencies": {
95 | "@types/node": "*"
96 | }
97 | },
98 | "node_modules/asar": {
99 | "version": "3.0.3",
100 | "resolved": "https://registry.npmjs.org/asar/-/asar-3.0.3.tgz",
101 | "integrity": "sha512-k7zd+KoR+n8pl71PvgElcoKHrVNiSXtw7odKbyNpmgKe7EGRF9Pnu3uLOukD37EvavKwVFxOUpqXTIZC5B5Pmw==",
102 | "dev": true,
103 | "dependencies": {
104 | "chromium-pickle-js": "^0.2.0",
105 | "commander": "^5.0.0",
106 | "glob": "^7.1.6",
107 | "minimatch": "^3.0.4"
108 | },
109 | "bin": {
110 | "asar": "bin/asar.js"
111 | },
112 | "engines": {
113 | "node": ">=10.12.0"
114 | },
115 | "optionalDependencies": {
116 | "@types/glob": "^7.1.1"
117 | }
118 | },
119 | "node_modules/at-least-node": {
120 | "version": "1.0.0",
121 | "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
122 | "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
123 | "dev": true,
124 | "engines": {
125 | "node": ">= 4.0.0"
126 | }
127 | },
128 | "node_modules/author-regex": {
129 | "version": "1.0.0",
130 | "resolved": "https://registry.npmjs.org/author-regex/-/author-regex-1.0.0.tgz",
131 | "integrity": "sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA=",
132 | "dev": true,
133 | "engines": {
134 | "node": ">=0.8"
135 | }
136 | },
137 | "node_modules/balanced-match": {
138 | "version": "1.0.0",
139 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
140 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
141 | "dev": true
142 | },
143 | "node_modules/base64-js": {
144 | "version": "1.5.1",
145 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
146 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
147 | "dev": true,
148 | "funding": [
149 | {
150 | "type": "github",
151 | "url": "https://github.com/sponsors/feross"
152 | },
153 | {
154 | "type": "patreon",
155 | "url": "https://www.patreon.com/feross"
156 | },
157 | {
158 | "type": "consulting",
159 | "url": "https://feross.org/support"
160 | }
161 | ]
162 | },
163 | "node_modules/bluebird": {
164 | "version": "3.7.2",
165 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
166 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
167 | "dev": true
168 | },
169 | "node_modules/boolean": {
170 | "version": "3.0.2",
171 | "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.2.tgz",
172 | "integrity": "sha512-RwywHlpCRc3/Wh81MiCKun4ydaIFyW5Ea6JbL6sRCVx5q5irDw7pMXBUFYF/jArQ6YrG36q0kpovc9P/Kd3I4g==",
173 | "dev": true,
174 | "optional": true
175 | },
176 | "node_modules/brace-expansion": {
177 | "version": "1.1.11",
178 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
179 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
180 | "dev": true,
181 | "dependencies": {
182 | "balanced-match": "^1.0.0",
183 | "concat-map": "0.0.1"
184 | }
185 | },
186 | "node_modules/buffer-alloc": {
187 | "version": "1.2.0",
188 | "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
189 | "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
190 | "dev": true,
191 | "dependencies": {
192 | "buffer-alloc-unsafe": "^1.1.0",
193 | "buffer-fill": "^1.0.0"
194 | }
195 | },
196 | "node_modules/buffer-alloc-unsafe": {
197 | "version": "1.1.0",
198 | "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
199 | "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
200 | "dev": true
201 | },
202 | "node_modules/buffer-crc32": {
203 | "version": "0.2.13",
204 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
205 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
206 | "dev": true,
207 | "engines": {
208 | "node": "*"
209 | }
210 | },
211 | "node_modules/buffer-fill": {
212 | "version": "1.0.0",
213 | "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
214 | "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
215 | "dev": true
216 | },
217 | "node_modules/buffer-from": {
218 | "version": "1.1.1",
219 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
220 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
221 | "dev": true
222 | },
223 | "node_modules/bufferutil": {
224 | "version": "4.0.3",
225 | "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.3.tgz",
226 | "integrity": "sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw==",
227 | "hasInstallScript": true,
228 | "dependencies": {
229 | "node-gyp-build": "^4.2.0"
230 | }
231 | },
232 | "node_modules/cacheable-request": {
233 | "version": "6.1.0",
234 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
235 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
236 | "dev": true,
237 | "dependencies": {
238 | "clone-response": "^1.0.2",
239 | "get-stream": "^5.1.0",
240 | "http-cache-semantics": "^4.0.0",
241 | "keyv": "^3.0.0",
242 | "lowercase-keys": "^2.0.0",
243 | "normalize-url": "^4.1.0",
244 | "responselike": "^1.0.2"
245 | },
246 | "engines": {
247 | "node": ">=8"
248 | }
249 | },
250 | "node_modules/cacheable-request/node_modules/get-stream": {
251 | "version": "5.2.0",
252 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
253 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
254 | "dev": true,
255 | "dependencies": {
256 | "pump": "^3.0.0"
257 | },
258 | "engines": {
259 | "node": ">=8"
260 | },
261 | "funding": {
262 | "url": "https://github.com/sponsors/sindresorhus"
263 | }
264 | },
265 | "node_modules/cacheable-request/node_modules/lowercase-keys": {
266 | "version": "2.0.0",
267 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
268 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
269 | "dev": true,
270 | "engines": {
271 | "node": ">=8"
272 | }
273 | },
274 | "node_modules/chromium-pickle-js": {
275 | "version": "0.2.0",
276 | "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz",
277 | "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=",
278 | "dev": true
279 | },
280 | "node_modules/clone-response": {
281 | "version": "1.0.2",
282 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
283 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
284 | "dev": true,
285 | "dependencies": {
286 | "mimic-response": "^1.0.0"
287 | }
288 | },
289 | "node_modules/commander": {
290 | "version": "5.1.0",
291 | "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
292 | "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
293 | "dev": true,
294 | "engines": {
295 | "node": ">= 6"
296 | }
297 | },
298 | "node_modules/compare-version": {
299 | "version": "0.1.2",
300 | "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz",
301 | "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=",
302 | "dev": true,
303 | "engines": {
304 | "node": ">=0.10.0"
305 | }
306 | },
307 | "node_modules/concat-map": {
308 | "version": "0.0.1",
309 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
310 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
311 | "dev": true
312 | },
313 | "node_modules/concat-stream": {
314 | "version": "1.6.2",
315 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
316 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
317 | "dev": true,
318 | "engines": [
319 | "node >= 0.8"
320 | ],
321 | "dependencies": {
322 | "buffer-from": "^1.0.0",
323 | "inherits": "^2.0.3",
324 | "readable-stream": "^2.2.2",
325 | "typedarray": "^0.0.6"
326 | }
327 | },
328 | "node_modules/config-chain": {
329 | "version": "1.1.12",
330 | "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
331 | "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
332 | "dev": true,
333 | "optional": true,
334 | "dependencies": {
335 | "ini": "^1.3.4",
336 | "proto-list": "~1.2.1"
337 | }
338 | },
339 | "node_modules/core-js": {
340 | "version": "3.8.3",
341 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.3.tgz",
342 | "integrity": "sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q==",
343 | "dev": true,
344 | "hasInstallScript": true,
345 | "optional": true,
346 | "funding": {
347 | "type": "opencollective",
348 | "url": "https://opencollective.com/core-js"
349 | }
350 | },
351 | "node_modules/core-util-is": {
352 | "version": "1.0.2",
353 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
354 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
355 | "dev": true
356 | },
357 | "node_modules/d": {
358 | "version": "1.0.1",
359 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
360 | "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
361 | "dependencies": {
362 | "es5-ext": "^0.10.50",
363 | "type": "^1.0.1"
364 | }
365 | },
366 | "node_modules/debug": {
367 | "version": "4.3.1",
368 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
369 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
370 | "dev": true,
371 | "dependencies": {
372 | "ms": "2.1.2"
373 | },
374 | "engines": {
375 | "node": ">=6.0"
376 | },
377 | "peerDependenciesMeta": {
378 | "supports-color": {
379 | "optional": true
380 | }
381 | }
382 | },
383 | "node_modules/decompress-response": {
384 | "version": "3.3.0",
385 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
386 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
387 | "dev": true,
388 | "dependencies": {
389 | "mimic-response": "^1.0.0"
390 | },
391 | "engines": {
392 | "node": ">=4"
393 | }
394 | },
395 | "node_modules/defer-to-connect": {
396 | "version": "1.1.3",
397 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
398 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
399 | "dev": true
400 | },
401 | "node_modules/define-properties": {
402 | "version": "1.1.3",
403 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
404 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
405 | "dev": true,
406 | "optional": true,
407 | "dependencies": {
408 | "object-keys": "^1.0.12"
409 | },
410 | "engines": {
411 | "node": ">= 0.4"
412 | }
413 | },
414 | "node_modules/detect-node": {
415 | "version": "2.0.4",
416 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
417 | "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==",
418 | "dev": true,
419 | "optional": true
420 | },
421 | "node_modules/duplexer3": {
422 | "version": "0.1.4",
423 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
424 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
425 | "dev": true
426 | },
427 | "node_modules/electron": {
428 | "version": "11.2.3",
429 | "resolved": "https://registry.npmjs.org/electron/-/electron-11.2.3.tgz",
430 | "integrity": "sha512-6yxOc42nDAptHKNlUG/vcOh2GI9x2fqp2nQbZO0/3sz2CrwsJkwR3i3oMN9XhVJaqI7GK1vSCJz0verOkWlXcQ==",
431 | "dev": true,
432 | "hasInstallScript": true,
433 | "dependencies": {
434 | "@electron/get": "^1.0.1",
435 | "@types/node": "^12.0.12",
436 | "extract-zip": "^1.0.3"
437 | },
438 | "bin": {
439 | "electron": "cli.js"
440 | },
441 | "engines": {
442 | "node": ">= 8.6"
443 | }
444 | },
445 | "node_modules/electron-notarize": {
446 | "version": "1.0.0",
447 | "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.0.0.tgz",
448 | "integrity": "sha512-dsib1IAquMn0onCrNMJ6gtEIZn/azG8hZMCYOuZIMVMUeRMgBYHK1s5TK9P8xAcrAjh/2aN5WYHzgVSWX314og==",
449 | "dev": true,
450 | "dependencies": {
451 | "debug": "^4.1.1",
452 | "fs-extra": "^9.0.1"
453 | },
454 | "engines": {
455 | "node": ">= 10.0.0"
456 | }
457 | },
458 | "node_modules/electron-notarize/node_modules/fs-extra": {
459 | "version": "9.1.0",
460 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
461 | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
462 | "dev": true,
463 | "dependencies": {
464 | "at-least-node": "^1.0.0",
465 | "graceful-fs": "^4.2.0",
466 | "jsonfile": "^6.0.1",
467 | "universalify": "^2.0.0"
468 | },
469 | "engines": {
470 | "node": ">=10"
471 | }
472 | },
473 | "node_modules/electron-notarize/node_modules/jsonfile": {
474 | "version": "6.1.0",
475 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
476 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
477 | "dev": true,
478 | "dependencies": {
479 | "universalify": "^2.0.0"
480 | },
481 | "optionalDependencies": {
482 | "graceful-fs": "^4.1.6"
483 | }
484 | },
485 | "node_modules/electron-notarize/node_modules/universalify": {
486 | "version": "2.0.0",
487 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
488 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
489 | "dev": true,
490 | "engines": {
491 | "node": ">= 10.0.0"
492 | }
493 | },
494 | "node_modules/electron-osx-sign": {
495 | "version": "0.5.0",
496 | "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.5.0.tgz",
497 | "integrity": "sha512-icoRLHzFz/qxzDh/N4Pi2z4yVHurlsCAYQvsCSG7fCedJ4UJXBS6PoQyGH71IfcqKupcKeK7HX/NkyfG+v6vlQ==",
498 | "dev": true,
499 | "dependencies": {
500 | "bluebird": "^3.5.0",
501 | "compare-version": "^0.1.2",
502 | "debug": "^2.6.8",
503 | "isbinaryfile": "^3.0.2",
504 | "minimist": "^1.2.0",
505 | "plist": "^3.0.1"
506 | },
507 | "bin": {
508 | "electron-osx-flat": "bin/electron-osx-flat.js",
509 | "electron-osx-sign": "bin/electron-osx-sign.js"
510 | },
511 | "engines": {
512 | "node": ">=4.0.0"
513 | }
514 | },
515 | "node_modules/electron-osx-sign/node_modules/debug": {
516 | "version": "2.6.9",
517 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
518 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
519 | "dev": true,
520 | "dependencies": {
521 | "ms": "2.0.0"
522 | }
523 | },
524 | "node_modules/electron-osx-sign/node_modules/ms": {
525 | "version": "2.0.0",
526 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
527 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
528 | "dev": true
529 | },
530 | "node_modules/electron-packager": {
531 | "version": "15.2.0",
532 | "resolved": "https://registry.npmjs.org/electron-packager/-/electron-packager-15.2.0.tgz",
533 | "integrity": "sha512-BaklTBRQy1JTijR3hi8XxHf/uo76rHbDCNM/eQHSblzE9C0NoNfOe86nPxB7y1u2jwlqoEJ4zFiHpTFioKGGRA==",
534 | "dev": true,
535 | "dependencies": {
536 | "@electron/get": "^1.6.0",
537 | "asar": "^3.0.0",
538 | "debug": "^4.0.1",
539 | "electron-notarize": "^1.0.0",
540 | "electron-osx-sign": "^0.5.0",
541 | "extract-zip": "^2.0.0",
542 | "filenamify": "^4.1.0",
543 | "fs-extra": "^9.0.0",
544 | "galactus": "^0.2.1",
545 | "get-package-info": "^1.0.0",
546 | "junk": "^3.1.0",
547 | "parse-author": "^2.0.0",
548 | "plist": "^3.0.0",
549 | "rcedit": "^2.0.0",
550 | "resolve": "^1.1.6",
551 | "semver": "^7.1.3",
552 | "yargs-parser": "^20.0.0"
553 | },
554 | "bin": {
555 | "electron-packager": "bin/electron-packager.js"
556 | },
557 | "engines": {
558 | "node": ">= 10.12.0"
559 | },
560 | "funding": {
561 | "url": "https://github.com/electron/electron-packager?sponsor=1"
562 | }
563 | },
564 | "node_modules/electron-packager/node_modules/extract-zip": {
565 | "version": "2.0.1",
566 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
567 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
568 | "dev": true,
569 | "dependencies": {
570 | "debug": "^4.1.1",
571 | "get-stream": "^5.1.0",
572 | "yauzl": "^2.10.0"
573 | },
574 | "bin": {
575 | "extract-zip": "cli.js"
576 | },
577 | "engines": {
578 | "node": ">= 10.17.0"
579 | },
580 | "optionalDependencies": {
581 | "@types/yauzl": "^2.9.1"
582 | }
583 | },
584 | "node_modules/electron-packager/node_modules/fs-extra": {
585 | "version": "9.1.0",
586 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
587 | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
588 | "dev": true,
589 | "dependencies": {
590 | "at-least-node": "^1.0.0",
591 | "graceful-fs": "^4.2.0",
592 | "jsonfile": "^6.0.1",
593 | "universalify": "^2.0.0"
594 | },
595 | "engines": {
596 | "node": ">=10"
597 | }
598 | },
599 | "node_modules/electron-packager/node_modules/get-stream": {
600 | "version": "5.2.0",
601 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
602 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
603 | "dev": true,
604 | "dependencies": {
605 | "pump": "^3.0.0"
606 | },
607 | "engines": {
608 | "node": ">=8"
609 | },
610 | "funding": {
611 | "url": "https://github.com/sponsors/sindresorhus"
612 | }
613 | },
614 | "node_modules/electron-packager/node_modules/jsonfile": {
615 | "version": "6.1.0",
616 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
617 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
618 | "dev": true,
619 | "dependencies": {
620 | "universalify": "^2.0.0"
621 | },
622 | "optionalDependencies": {
623 | "graceful-fs": "^4.1.6"
624 | }
625 | },
626 | "node_modules/electron-packager/node_modules/semver": {
627 | "version": "7.3.4",
628 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
629 | "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
630 | "dev": true,
631 | "dependencies": {
632 | "lru-cache": "^6.0.0"
633 | },
634 | "bin": {
635 | "semver": "bin/semver.js"
636 | },
637 | "engines": {
638 | "node": ">=10"
639 | }
640 | },
641 | "node_modules/electron-packager/node_modules/universalify": {
642 | "version": "2.0.0",
643 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
644 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
645 | "dev": true,
646 | "engines": {
647 | "node": ">= 10.0.0"
648 | }
649 | },
650 | "node_modules/encodeurl": {
651 | "version": "1.0.2",
652 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
653 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
654 | "dev": true,
655 | "optional": true,
656 | "engines": {
657 | "node": ">= 0.8"
658 | }
659 | },
660 | "node_modules/end-of-stream": {
661 | "version": "1.4.4",
662 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
663 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
664 | "dev": true,
665 | "dependencies": {
666 | "once": "^1.4.0"
667 | }
668 | },
669 | "node_modules/env-paths": {
670 | "version": "2.2.0",
671 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz",
672 | "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==",
673 | "dev": true,
674 | "engines": {
675 | "node": ">=6"
676 | }
677 | },
678 | "node_modules/error-ex": {
679 | "version": "1.3.2",
680 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
681 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
682 | "dev": true,
683 | "dependencies": {
684 | "is-arrayish": "^0.2.1"
685 | }
686 | },
687 | "node_modules/es5-ext": {
688 | "version": "0.10.53",
689 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
690 | "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==",
691 | "dependencies": {
692 | "es6-iterator": "~2.0.3",
693 | "es6-symbol": "~3.1.3",
694 | "next-tick": "~1.0.0"
695 | }
696 | },
697 | "node_modules/es6-error": {
698 | "version": "4.1.1",
699 | "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
700 | "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
701 | "dev": true,
702 | "optional": true
703 | },
704 | "node_modules/es6-iterator": {
705 | "version": "2.0.3",
706 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
707 | "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
708 | "dependencies": {
709 | "d": "1",
710 | "es5-ext": "^0.10.35",
711 | "es6-symbol": "^3.1.1"
712 | }
713 | },
714 | "node_modules/es6-symbol": {
715 | "version": "3.1.3",
716 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
717 | "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
718 | "dependencies": {
719 | "d": "^1.0.1",
720 | "ext": "^1.1.2"
721 | }
722 | },
723 | "node_modules/escape-string-regexp": {
724 | "version": "4.0.0",
725 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
726 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
727 | "dev": true,
728 | "optional": true,
729 | "engines": {
730 | "node": ">=10"
731 | },
732 | "funding": {
733 | "url": "https://github.com/sponsors/sindresorhus"
734 | }
735 | },
736 | "node_modules/ext": {
737 | "version": "1.4.0",
738 | "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz",
739 | "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==",
740 | "dependencies": {
741 | "type": "^2.0.0"
742 | }
743 | },
744 | "node_modules/ext/node_modules/type": {
745 | "version": "2.5.0",
746 | "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz",
747 | "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw=="
748 | },
749 | "node_modules/extract-zip": {
750 | "version": "1.7.0",
751 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
752 | "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==",
753 | "dev": true,
754 | "dependencies": {
755 | "concat-stream": "^1.6.2",
756 | "debug": "^2.6.9",
757 | "mkdirp": "^0.5.4",
758 | "yauzl": "^2.10.0"
759 | },
760 | "bin": {
761 | "extract-zip": "cli.js"
762 | }
763 | },
764 | "node_modules/extract-zip/node_modules/debug": {
765 | "version": "2.6.9",
766 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
767 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
768 | "dev": true,
769 | "dependencies": {
770 | "ms": "2.0.0"
771 | }
772 | },
773 | "node_modules/extract-zip/node_modules/ms": {
774 | "version": "2.0.0",
775 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
776 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
777 | "dev": true
778 | },
779 | "node_modules/fd-slicer": {
780 | "version": "1.1.0",
781 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
782 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
783 | "dev": true,
784 | "dependencies": {
785 | "pend": "~1.2.0"
786 | }
787 | },
788 | "node_modules/filename-reserved-regex": {
789 | "version": "2.0.0",
790 | "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
791 | "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=",
792 | "dev": true,
793 | "engines": {
794 | "node": ">=4"
795 | }
796 | },
797 | "node_modules/filenamify": {
798 | "version": "4.2.0",
799 | "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.2.0.tgz",
800 | "integrity": "sha512-pkgE+4p7N1n7QieOopmn3TqJaefjdWXwEkj2XLZJLKfOgcQKkn11ahvGNgTD8mLggexLiDFQxeTs14xVU22XPA==",
801 | "dev": true,
802 | "dependencies": {
803 | "filename-reserved-regex": "^2.0.0",
804 | "strip-outer": "^1.0.1",
805 | "trim-repeated": "^1.0.0"
806 | },
807 | "engines": {
808 | "node": ">=8"
809 | },
810 | "funding": {
811 | "url": "https://github.com/sponsors/sindresorhus"
812 | }
813 | },
814 | "node_modules/find-up": {
815 | "version": "2.1.0",
816 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
817 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
818 | "dev": true,
819 | "dependencies": {
820 | "locate-path": "^2.0.0"
821 | },
822 | "engines": {
823 | "node": ">=4"
824 | }
825 | },
826 | "node_modules/flora-colossus": {
827 | "version": "1.0.1",
828 | "resolved": "https://registry.npmjs.org/flora-colossus/-/flora-colossus-1.0.1.tgz",
829 | "integrity": "sha512-d+9na7t9FyH8gBJoNDSi28mE4NgQVGGvxQ4aHtFRetjyh5SXjuus+V5EZaxFmFdXVemSOrx0lsgEl/ZMjnOWJA==",
830 | "dev": true,
831 | "dependencies": {
832 | "debug": "^4.1.1",
833 | "fs-extra": "^7.0.0"
834 | },
835 | "engines": {
836 | "node": ">= 6.0.0"
837 | }
838 | },
839 | "node_modules/flora-colossus/node_modules/fs-extra": {
840 | "version": "7.0.1",
841 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
842 | "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
843 | "dev": true,
844 | "dependencies": {
845 | "graceful-fs": "^4.1.2",
846 | "jsonfile": "^4.0.0",
847 | "universalify": "^0.1.0"
848 | },
849 | "engines": {
850 | "node": ">=6 <7 || >=8"
851 | }
852 | },
853 | "node_modules/fs-extra": {
854 | "version": "8.1.0",
855 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
856 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
857 | "dev": true,
858 | "dependencies": {
859 | "graceful-fs": "^4.2.0",
860 | "jsonfile": "^4.0.0",
861 | "universalify": "^0.1.0"
862 | },
863 | "engines": {
864 | "node": ">=6 <7 || >=8"
865 | }
866 | },
867 | "node_modules/fs.realpath": {
868 | "version": "1.0.0",
869 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
870 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
871 | "dev": true
872 | },
873 | "node_modules/function-bind": {
874 | "version": "1.1.1",
875 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
876 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
877 | "dev": true
878 | },
879 | "node_modules/galactus": {
880 | "version": "0.2.1",
881 | "resolved": "https://registry.npmjs.org/galactus/-/galactus-0.2.1.tgz",
882 | "integrity": "sha1-y+0tIKQMH1Z5o1kI4rlBVzPnjbk=",
883 | "dev": true,
884 | "dependencies": {
885 | "debug": "^3.1.0",
886 | "flora-colossus": "^1.0.0",
887 | "fs-extra": "^4.0.0"
888 | }
889 | },
890 | "node_modules/galactus/node_modules/debug": {
891 | "version": "3.2.7",
892 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
893 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
894 | "dev": true,
895 | "dependencies": {
896 | "ms": "^2.1.1"
897 | }
898 | },
899 | "node_modules/galactus/node_modules/fs-extra": {
900 | "version": "4.0.3",
901 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
902 | "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
903 | "dev": true,
904 | "dependencies": {
905 | "graceful-fs": "^4.1.2",
906 | "jsonfile": "^4.0.0",
907 | "universalify": "^0.1.0"
908 | }
909 | },
910 | "node_modules/get-package-info": {
911 | "version": "1.0.0",
912 | "resolved": "https://registry.npmjs.org/get-package-info/-/get-package-info-1.0.0.tgz",
913 | "integrity": "sha1-ZDJ5ZWPigRPNlHTbvQAFKYWkmZw=",
914 | "dev": true,
915 | "dependencies": {
916 | "bluebird": "^3.1.1",
917 | "debug": "^2.2.0",
918 | "lodash.get": "^4.0.0",
919 | "read-pkg-up": "^2.0.0"
920 | },
921 | "engines": {
922 | "node": ">= 4.0"
923 | }
924 | },
925 | "node_modules/get-package-info/node_modules/debug": {
926 | "version": "2.6.9",
927 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
928 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
929 | "dev": true,
930 | "dependencies": {
931 | "ms": "2.0.0"
932 | }
933 | },
934 | "node_modules/get-package-info/node_modules/ms": {
935 | "version": "2.0.0",
936 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
937 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
938 | "dev": true
939 | },
940 | "node_modules/get-stream": {
941 | "version": "4.1.0",
942 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
943 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
944 | "dev": true,
945 | "dependencies": {
946 | "pump": "^3.0.0"
947 | },
948 | "engines": {
949 | "node": ">=6"
950 | }
951 | },
952 | "node_modules/glob": {
953 | "version": "7.1.6",
954 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
955 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
956 | "dev": true,
957 | "dependencies": {
958 | "fs.realpath": "^1.0.0",
959 | "inflight": "^1.0.4",
960 | "inherits": "2",
961 | "minimatch": "^3.0.4",
962 | "once": "^1.3.0",
963 | "path-is-absolute": "^1.0.0"
964 | },
965 | "engines": {
966 | "node": "*"
967 | },
968 | "funding": {
969 | "url": "https://github.com/sponsors/isaacs"
970 | }
971 | },
972 | "node_modules/global-agent": {
973 | "version": "2.1.12",
974 | "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.12.tgz",
975 | "integrity": "sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg==",
976 | "dev": true,
977 | "optional": true,
978 | "dependencies": {
979 | "boolean": "^3.0.1",
980 | "core-js": "^3.6.5",
981 | "es6-error": "^4.1.1",
982 | "matcher": "^3.0.0",
983 | "roarr": "^2.15.3",
984 | "semver": "^7.3.2",
985 | "serialize-error": "^7.0.1"
986 | },
987 | "engines": {
988 | "node": ">=10.0"
989 | }
990 | },
991 | "node_modules/global-agent/node_modules/semver": {
992 | "version": "7.3.4",
993 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
994 | "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
995 | "dev": true,
996 | "optional": true,
997 | "dependencies": {
998 | "lru-cache": "^6.0.0"
999 | },
1000 | "bin": {
1001 | "semver": "bin/semver.js"
1002 | },
1003 | "engines": {
1004 | "node": ">=10"
1005 | }
1006 | },
1007 | "node_modules/global-tunnel-ng": {
1008 | "version": "2.7.1",
1009 | "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz",
1010 | "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==",
1011 | "dev": true,
1012 | "optional": true,
1013 | "dependencies": {
1014 | "encodeurl": "^1.0.2",
1015 | "lodash": "^4.17.10",
1016 | "npm-conf": "^1.1.3",
1017 | "tunnel": "^0.0.6"
1018 | },
1019 | "engines": {
1020 | "node": ">=0.10"
1021 | }
1022 | },
1023 | "node_modules/globalthis": {
1024 | "version": "1.0.1",
1025 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.1.tgz",
1026 | "integrity": "sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==",
1027 | "dev": true,
1028 | "optional": true,
1029 | "dependencies": {
1030 | "define-properties": "^1.1.3"
1031 | },
1032 | "engines": {
1033 | "node": ">= 0.4"
1034 | },
1035 | "funding": {
1036 | "url": "https://github.com/sponsors/ljharb"
1037 | }
1038 | },
1039 | "node_modules/got": {
1040 | "version": "9.6.0",
1041 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
1042 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
1043 | "dev": true,
1044 | "dependencies": {
1045 | "@sindresorhus/is": "^0.14.0",
1046 | "@szmarczak/http-timer": "^1.1.2",
1047 | "cacheable-request": "^6.0.0",
1048 | "decompress-response": "^3.3.0",
1049 | "duplexer3": "^0.1.4",
1050 | "get-stream": "^4.1.0",
1051 | "lowercase-keys": "^1.0.1",
1052 | "mimic-response": "^1.0.1",
1053 | "p-cancelable": "^1.0.0",
1054 | "to-readable-stream": "^1.0.0",
1055 | "url-parse-lax": "^3.0.0"
1056 | },
1057 | "engines": {
1058 | "node": ">=8.6"
1059 | }
1060 | },
1061 | "node_modules/graceful-fs": {
1062 | "version": "4.2.6",
1063 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
1064 | "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
1065 | "dev": true
1066 | },
1067 | "node_modules/has": {
1068 | "version": "1.0.3",
1069 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1070 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1071 | "dev": true,
1072 | "dependencies": {
1073 | "function-bind": "^1.1.1"
1074 | },
1075 | "engines": {
1076 | "node": ">= 0.4.0"
1077 | }
1078 | },
1079 | "node_modules/hosted-git-info": {
1080 | "version": "2.8.8",
1081 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
1082 | "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
1083 | "dev": true
1084 | },
1085 | "node_modules/http-cache-semantics": {
1086 | "version": "4.1.0",
1087 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
1088 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
1089 | "dev": true
1090 | },
1091 | "node_modules/inflight": {
1092 | "version": "1.0.6",
1093 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1094 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1095 | "dev": true,
1096 | "dependencies": {
1097 | "once": "^1.3.0",
1098 | "wrappy": "1"
1099 | }
1100 | },
1101 | "node_modules/inherits": {
1102 | "version": "2.0.4",
1103 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1104 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
1105 | "dev": true
1106 | },
1107 | "node_modules/ini": {
1108 | "version": "1.3.8",
1109 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
1110 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
1111 | "dev": true,
1112 | "optional": true
1113 | },
1114 | "node_modules/is-arrayish": {
1115 | "version": "0.2.1",
1116 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
1117 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
1118 | "dev": true
1119 | },
1120 | "node_modules/is-core-module": {
1121 | "version": "2.2.0",
1122 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
1123 | "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
1124 | "dev": true,
1125 | "dependencies": {
1126 | "has": "^1.0.3"
1127 | },
1128 | "funding": {
1129 | "url": "https://github.com/sponsors/ljharb"
1130 | }
1131 | },
1132 | "node_modules/is-typedarray": {
1133 | "version": "1.0.0",
1134 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
1135 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
1136 | },
1137 | "node_modules/isarray": {
1138 | "version": "1.0.0",
1139 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1140 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
1141 | "dev": true
1142 | },
1143 | "node_modules/isbinaryfile": {
1144 | "version": "3.0.3",
1145 | "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz",
1146 | "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==",
1147 | "dev": true,
1148 | "dependencies": {
1149 | "buffer-alloc": "^1.2.0"
1150 | },
1151 | "engines": {
1152 | "node": ">=0.6.0"
1153 | }
1154 | },
1155 | "node_modules/json-buffer": {
1156 | "version": "3.0.0",
1157 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
1158 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
1159 | "dev": true
1160 | },
1161 | "node_modules/json-stringify-safe": {
1162 | "version": "5.0.1",
1163 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
1164 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
1165 | "dev": true,
1166 | "optional": true
1167 | },
1168 | "node_modules/jsonfile": {
1169 | "version": "4.0.0",
1170 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
1171 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
1172 | "dev": true,
1173 | "optionalDependencies": {
1174 | "graceful-fs": "^4.1.6"
1175 | }
1176 | },
1177 | "node_modules/junk": {
1178 | "version": "3.1.0",
1179 | "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz",
1180 | "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==",
1181 | "dev": true,
1182 | "engines": {
1183 | "node": ">=8"
1184 | }
1185 | },
1186 | "node_modules/keyv": {
1187 | "version": "3.1.0",
1188 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
1189 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
1190 | "dev": true,
1191 | "dependencies": {
1192 | "json-buffer": "3.0.0"
1193 | }
1194 | },
1195 | "node_modules/load-json-file": {
1196 | "version": "2.0.0",
1197 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
1198 | "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
1199 | "dev": true,
1200 | "dependencies": {
1201 | "graceful-fs": "^4.1.2",
1202 | "parse-json": "^2.2.0",
1203 | "pify": "^2.0.0",
1204 | "strip-bom": "^3.0.0"
1205 | },
1206 | "engines": {
1207 | "node": ">=4"
1208 | }
1209 | },
1210 | "node_modules/load-json-file/node_modules/pify": {
1211 | "version": "2.3.0",
1212 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1213 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
1214 | "dev": true,
1215 | "engines": {
1216 | "node": ">=0.10.0"
1217 | }
1218 | },
1219 | "node_modules/locate-path": {
1220 | "version": "2.0.0",
1221 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
1222 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
1223 | "dev": true,
1224 | "dependencies": {
1225 | "p-locate": "^2.0.0",
1226 | "path-exists": "^3.0.0"
1227 | },
1228 | "engines": {
1229 | "node": ">=4"
1230 | }
1231 | },
1232 | "node_modules/lodash": {
1233 | "version": "4.17.21",
1234 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
1235 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
1236 | },
1237 | "node_modules/lodash.get": {
1238 | "version": "4.4.2",
1239 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
1240 | "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
1241 | "dev": true
1242 | },
1243 | "node_modules/lowercase-keys": {
1244 | "version": "1.0.1",
1245 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
1246 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
1247 | "dev": true,
1248 | "engines": {
1249 | "node": ">=0.10.0"
1250 | }
1251 | },
1252 | "node_modules/lru-cache": {
1253 | "version": "6.0.0",
1254 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
1255 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
1256 | "dev": true,
1257 | "dependencies": {
1258 | "yallist": "^4.0.0"
1259 | },
1260 | "engines": {
1261 | "node": ">=10"
1262 | }
1263 | },
1264 | "node_modules/matcher": {
1265 | "version": "3.0.0",
1266 | "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz",
1267 | "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==",
1268 | "dev": true,
1269 | "optional": true,
1270 | "dependencies": {
1271 | "escape-string-regexp": "^4.0.0"
1272 | },
1273 | "engines": {
1274 | "node": ">=10"
1275 | }
1276 | },
1277 | "node_modules/mimic-response": {
1278 | "version": "1.0.1",
1279 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
1280 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
1281 | "dev": true,
1282 | "engines": {
1283 | "node": ">=4"
1284 | }
1285 | },
1286 | "node_modules/minimatch": {
1287 | "version": "3.0.4",
1288 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1289 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1290 | "dev": true,
1291 | "dependencies": {
1292 | "brace-expansion": "^1.1.7"
1293 | },
1294 | "engines": {
1295 | "node": "*"
1296 | }
1297 | },
1298 | "node_modules/minimist": {
1299 | "version": "1.2.5",
1300 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
1301 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
1302 | "dev": true
1303 | },
1304 | "node_modules/mkdirp": {
1305 | "version": "0.5.5",
1306 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
1307 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
1308 | "dev": true,
1309 | "dependencies": {
1310 | "minimist": "^1.2.5"
1311 | },
1312 | "bin": {
1313 | "mkdirp": "bin/cmd.js"
1314 | }
1315 | },
1316 | "node_modules/ms": {
1317 | "version": "2.1.2",
1318 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1319 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1320 | "dev": true
1321 | },
1322 | "node_modules/next-tick": {
1323 | "version": "1.0.0",
1324 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
1325 | "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
1326 | },
1327 | "node_modules/nocache": {
1328 | "version": "2.1.0",
1329 | "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz",
1330 | "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==",
1331 | "engines": {
1332 | "node": ">=4.0.0"
1333 | }
1334 | },
1335 | "node_modules/node-gyp-build": {
1336 | "version": "4.2.3",
1337 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz",
1338 | "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==",
1339 | "bin": {
1340 | "node-gyp-build": "bin.js",
1341 | "node-gyp-build-optional": "optional.js",
1342 | "node-gyp-build-test": "build-test.js"
1343 | }
1344 | },
1345 | "node_modules/normalize-package-data": {
1346 | "version": "2.5.0",
1347 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
1348 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
1349 | "dev": true,
1350 | "dependencies": {
1351 | "hosted-git-info": "^2.1.4",
1352 | "resolve": "^1.10.0",
1353 | "semver": "2 || 3 || 4 || 5",
1354 | "validate-npm-package-license": "^3.0.1"
1355 | }
1356 | },
1357 | "node_modules/normalize-package-data/node_modules/semver": {
1358 | "version": "5.7.1",
1359 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1360 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
1361 | "dev": true,
1362 | "bin": {
1363 | "semver": "bin/semver"
1364 | }
1365 | },
1366 | "node_modules/normalize-url": {
1367 | "version": "4.5.0",
1368 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
1369 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
1370 | "dev": true,
1371 | "engines": {
1372 | "node": ">=8"
1373 | }
1374 | },
1375 | "node_modules/npm-conf": {
1376 | "version": "1.1.3",
1377 | "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
1378 | "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
1379 | "dev": true,
1380 | "optional": true,
1381 | "dependencies": {
1382 | "config-chain": "^1.1.11",
1383 | "pify": "^3.0.0"
1384 | },
1385 | "engines": {
1386 | "node": ">=4"
1387 | }
1388 | },
1389 | "node_modules/object-keys": {
1390 | "version": "1.1.1",
1391 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
1392 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
1393 | "dev": true,
1394 | "optional": true,
1395 | "engines": {
1396 | "node": ">= 0.4"
1397 | }
1398 | },
1399 | "node_modules/once": {
1400 | "version": "1.4.0",
1401 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1402 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1403 | "dev": true,
1404 | "dependencies": {
1405 | "wrappy": "1"
1406 | }
1407 | },
1408 | "node_modules/p-cancelable": {
1409 | "version": "1.1.0",
1410 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
1411 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
1412 | "dev": true,
1413 | "engines": {
1414 | "node": ">=6"
1415 | }
1416 | },
1417 | "node_modules/p-limit": {
1418 | "version": "1.3.0",
1419 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
1420 | "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
1421 | "dev": true,
1422 | "dependencies": {
1423 | "p-try": "^1.0.0"
1424 | },
1425 | "engines": {
1426 | "node": ">=4"
1427 | }
1428 | },
1429 | "node_modules/p-locate": {
1430 | "version": "2.0.0",
1431 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
1432 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
1433 | "dev": true,
1434 | "dependencies": {
1435 | "p-limit": "^1.1.0"
1436 | },
1437 | "engines": {
1438 | "node": ">=4"
1439 | }
1440 | },
1441 | "node_modules/p-try": {
1442 | "version": "1.0.0",
1443 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
1444 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
1445 | "dev": true,
1446 | "engines": {
1447 | "node": ">=4"
1448 | }
1449 | },
1450 | "node_modules/parse-author": {
1451 | "version": "2.0.0",
1452 | "resolved": "https://registry.npmjs.org/parse-author/-/parse-author-2.0.0.tgz",
1453 | "integrity": "sha1-00YL8d3Q367tQtp1QkLmX7aEqB8=",
1454 | "dev": true,
1455 | "dependencies": {
1456 | "author-regex": "^1.0.0"
1457 | },
1458 | "engines": {
1459 | "node": ">=0.10.0"
1460 | }
1461 | },
1462 | "node_modules/parse-json": {
1463 | "version": "2.2.0",
1464 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
1465 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
1466 | "dev": true,
1467 | "dependencies": {
1468 | "error-ex": "^1.2.0"
1469 | },
1470 | "engines": {
1471 | "node": ">=0.10.0"
1472 | }
1473 | },
1474 | "node_modules/path-exists": {
1475 | "version": "3.0.0",
1476 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
1477 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
1478 | "dev": true,
1479 | "engines": {
1480 | "node": ">=4"
1481 | }
1482 | },
1483 | "node_modules/path-is-absolute": {
1484 | "version": "1.0.1",
1485 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1486 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1487 | "dev": true,
1488 | "engines": {
1489 | "node": ">=0.10.0"
1490 | }
1491 | },
1492 | "node_modules/path-parse": {
1493 | "version": "1.0.6",
1494 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
1495 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
1496 | "dev": true
1497 | },
1498 | "node_modules/path-type": {
1499 | "version": "2.0.0",
1500 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
1501 | "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
1502 | "dev": true,
1503 | "dependencies": {
1504 | "pify": "^2.0.0"
1505 | },
1506 | "engines": {
1507 | "node": ">=4"
1508 | }
1509 | },
1510 | "node_modules/path-type/node_modules/pify": {
1511 | "version": "2.3.0",
1512 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1513 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
1514 | "dev": true,
1515 | "engines": {
1516 | "node": ">=0.10.0"
1517 | }
1518 | },
1519 | "node_modules/pend": {
1520 | "version": "1.2.0",
1521 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
1522 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
1523 | "dev": true
1524 | },
1525 | "node_modules/pify": {
1526 | "version": "3.0.0",
1527 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
1528 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
1529 | "dev": true,
1530 | "optional": true,
1531 | "engines": {
1532 | "node": ">=4"
1533 | }
1534 | },
1535 | "node_modules/plist": {
1536 | "version": "3.0.1",
1537 | "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz",
1538 | "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==",
1539 | "dev": true,
1540 | "dependencies": {
1541 | "base64-js": "^1.2.3",
1542 | "xmlbuilder": "^9.0.7",
1543 | "xmldom": "0.1.x"
1544 | },
1545 | "engines": {
1546 | "node": ">=6"
1547 | }
1548 | },
1549 | "node_modules/prepend-http": {
1550 | "version": "2.0.0",
1551 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
1552 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
1553 | "dev": true,
1554 | "engines": {
1555 | "node": ">=4"
1556 | }
1557 | },
1558 | "node_modules/process-nextick-args": {
1559 | "version": "2.0.1",
1560 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
1561 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
1562 | "dev": true
1563 | },
1564 | "node_modules/progress": {
1565 | "version": "2.0.3",
1566 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
1567 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
1568 | "dev": true,
1569 | "engines": {
1570 | "node": ">=0.4.0"
1571 | }
1572 | },
1573 | "node_modules/proto-list": {
1574 | "version": "1.2.4",
1575 | "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
1576 | "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
1577 | "dev": true,
1578 | "optional": true
1579 | },
1580 | "node_modules/pump": {
1581 | "version": "3.0.0",
1582 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
1583 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
1584 | "dev": true,
1585 | "dependencies": {
1586 | "end-of-stream": "^1.1.0",
1587 | "once": "^1.3.1"
1588 | }
1589 | },
1590 | "node_modules/rcedit": {
1591 | "version": "2.3.0",
1592 | "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-2.3.0.tgz",
1593 | "integrity": "sha512-h1gNEl9Oai1oijwyJ1WYqYSXTStHnOcv1KYljg/8WM4NAg3H1KBK3azIaKkQ1WQl+d7PoJpcBMscPfLXVKgCLQ==",
1594 | "dev": true,
1595 | "engines": {
1596 | "node": ">= 8.0.0"
1597 | }
1598 | },
1599 | "node_modules/read-pkg": {
1600 | "version": "2.0.0",
1601 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
1602 | "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
1603 | "dev": true,
1604 | "dependencies": {
1605 | "load-json-file": "^2.0.0",
1606 | "normalize-package-data": "^2.3.2",
1607 | "path-type": "^2.0.0"
1608 | },
1609 | "engines": {
1610 | "node": ">=4"
1611 | }
1612 | },
1613 | "node_modules/read-pkg-up": {
1614 | "version": "2.0.0",
1615 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
1616 | "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
1617 | "dev": true,
1618 | "dependencies": {
1619 | "find-up": "^2.0.0",
1620 | "read-pkg": "^2.0.0"
1621 | },
1622 | "engines": {
1623 | "node": ">=4"
1624 | }
1625 | },
1626 | "node_modules/readable-stream": {
1627 | "version": "2.3.7",
1628 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
1629 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
1630 | "dev": true,
1631 | "dependencies": {
1632 | "core-util-is": "~1.0.0",
1633 | "inherits": "~2.0.3",
1634 | "isarray": "~1.0.0",
1635 | "process-nextick-args": "~2.0.0",
1636 | "safe-buffer": "~5.1.1",
1637 | "string_decoder": "~1.1.1",
1638 | "util-deprecate": "~1.0.1"
1639 | }
1640 | },
1641 | "node_modules/resolve": {
1642 | "version": "1.20.0",
1643 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
1644 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
1645 | "dev": true,
1646 | "dependencies": {
1647 | "is-core-module": "^2.2.0",
1648 | "path-parse": "^1.0.6"
1649 | },
1650 | "funding": {
1651 | "url": "https://github.com/sponsors/ljharb"
1652 | }
1653 | },
1654 | "node_modules/responselike": {
1655 | "version": "1.0.2",
1656 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
1657 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
1658 | "dev": true,
1659 | "dependencies": {
1660 | "lowercase-keys": "^1.0.0"
1661 | }
1662 | },
1663 | "node_modules/roarr": {
1664 | "version": "2.15.4",
1665 | "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz",
1666 | "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==",
1667 | "dev": true,
1668 | "optional": true,
1669 | "dependencies": {
1670 | "boolean": "^3.0.1",
1671 | "detect-node": "^2.0.4",
1672 | "globalthis": "^1.0.1",
1673 | "json-stringify-safe": "^5.0.1",
1674 | "semver-compare": "^1.0.0",
1675 | "sprintf-js": "^1.1.2"
1676 | },
1677 | "engines": {
1678 | "node": ">=8.0"
1679 | }
1680 | },
1681 | "node_modules/safe-buffer": {
1682 | "version": "5.1.2",
1683 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1684 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
1685 | "dev": true
1686 | },
1687 | "node_modules/semver": {
1688 | "version": "6.3.0",
1689 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1690 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
1691 | "dev": true,
1692 | "bin": {
1693 | "semver": "bin/semver.js"
1694 | }
1695 | },
1696 | "node_modules/semver-compare": {
1697 | "version": "1.0.0",
1698 | "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
1699 | "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
1700 | "dev": true,
1701 | "optional": true
1702 | },
1703 | "node_modules/serialize-error": {
1704 | "version": "7.0.1",
1705 | "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
1706 | "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==",
1707 | "dev": true,
1708 | "optional": true,
1709 | "dependencies": {
1710 | "type-fest": "^0.13.1"
1711 | },
1712 | "engines": {
1713 | "node": ">=10"
1714 | },
1715 | "funding": {
1716 | "url": "https://github.com/sponsors/sindresorhus"
1717 | }
1718 | },
1719 | "node_modules/spdx-correct": {
1720 | "version": "3.1.1",
1721 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
1722 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
1723 | "dev": true,
1724 | "dependencies": {
1725 | "spdx-expression-parse": "^3.0.0",
1726 | "spdx-license-ids": "^3.0.0"
1727 | }
1728 | },
1729 | "node_modules/spdx-exceptions": {
1730 | "version": "2.3.0",
1731 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
1732 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
1733 | "dev": true
1734 | },
1735 | "node_modules/spdx-expression-parse": {
1736 | "version": "3.0.1",
1737 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
1738 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
1739 | "dev": true,
1740 | "dependencies": {
1741 | "spdx-exceptions": "^2.1.0",
1742 | "spdx-license-ids": "^3.0.0"
1743 | }
1744 | },
1745 | "node_modules/spdx-license-ids": {
1746 | "version": "3.0.7",
1747 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz",
1748 | "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==",
1749 | "dev": true
1750 | },
1751 | "node_modules/sprintf-js": {
1752 | "version": "1.1.2",
1753 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
1754 | "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
1755 | "dev": true,
1756 | "optional": true
1757 | },
1758 | "node_modules/string_decoder": {
1759 | "version": "1.1.1",
1760 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1761 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
1762 | "dev": true,
1763 | "dependencies": {
1764 | "safe-buffer": "~5.1.0"
1765 | }
1766 | },
1767 | "node_modules/strip-bom": {
1768 | "version": "3.0.0",
1769 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
1770 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
1771 | "dev": true,
1772 | "engines": {
1773 | "node": ">=4"
1774 | }
1775 | },
1776 | "node_modules/strip-outer": {
1777 | "version": "1.0.1",
1778 | "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
1779 | "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
1780 | "dev": true,
1781 | "dependencies": {
1782 | "escape-string-regexp": "^1.0.2"
1783 | },
1784 | "engines": {
1785 | "node": ">=0.10.0"
1786 | }
1787 | },
1788 | "node_modules/strip-outer/node_modules/escape-string-regexp": {
1789 | "version": "1.0.5",
1790 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
1791 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
1792 | "dev": true,
1793 | "engines": {
1794 | "node": ">=0.8.0"
1795 | }
1796 | },
1797 | "node_modules/sumchecker": {
1798 | "version": "3.0.1",
1799 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz",
1800 | "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==",
1801 | "dev": true,
1802 | "dependencies": {
1803 | "debug": "^4.1.0"
1804 | },
1805 | "engines": {
1806 | "node": ">= 8.0"
1807 | }
1808 | },
1809 | "node_modules/to-readable-stream": {
1810 | "version": "1.0.0",
1811 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
1812 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
1813 | "dev": true,
1814 | "engines": {
1815 | "node": ">=6"
1816 | }
1817 | },
1818 | "node_modules/trim-repeated": {
1819 | "version": "1.0.0",
1820 | "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
1821 | "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
1822 | "dev": true,
1823 | "dependencies": {
1824 | "escape-string-regexp": "^1.0.2"
1825 | },
1826 | "engines": {
1827 | "node": ">=0.10.0"
1828 | }
1829 | },
1830 | "node_modules/trim-repeated/node_modules/escape-string-regexp": {
1831 | "version": "1.0.5",
1832 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
1833 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
1834 | "dev": true,
1835 | "engines": {
1836 | "node": ">=0.8.0"
1837 | }
1838 | },
1839 | "node_modules/tunnel": {
1840 | "version": "0.0.6",
1841 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
1842 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
1843 | "dev": true,
1844 | "optional": true,
1845 | "engines": {
1846 | "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
1847 | }
1848 | },
1849 | "node_modules/type": {
1850 | "version": "1.2.0",
1851 | "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
1852 | "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
1853 | },
1854 | "node_modules/type-fest": {
1855 | "version": "0.13.1",
1856 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
1857 | "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
1858 | "dev": true,
1859 | "optional": true,
1860 | "engines": {
1861 | "node": ">=10"
1862 | },
1863 | "funding": {
1864 | "url": "https://github.com/sponsors/sindresorhus"
1865 | }
1866 | },
1867 | "node_modules/typedarray": {
1868 | "version": "0.0.6",
1869 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
1870 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
1871 | "dev": true
1872 | },
1873 | "node_modules/typedarray-to-buffer": {
1874 | "version": "3.1.5",
1875 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
1876 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
1877 | "dependencies": {
1878 | "is-typedarray": "^1.0.0"
1879 | }
1880 | },
1881 | "node_modules/universalify": {
1882 | "version": "0.1.2",
1883 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
1884 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
1885 | "dev": true,
1886 | "engines": {
1887 | "node": ">= 4.0.0"
1888 | }
1889 | },
1890 | "node_modules/url-parse-lax": {
1891 | "version": "3.0.0",
1892 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
1893 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
1894 | "dev": true,
1895 | "dependencies": {
1896 | "prepend-http": "^2.0.0"
1897 | },
1898 | "engines": {
1899 | "node": ">=4"
1900 | }
1901 | },
1902 | "node_modules/utf-8-validate": {
1903 | "version": "5.0.4",
1904 | "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.4.tgz",
1905 | "integrity": "sha512-MEF05cPSq3AwJ2C7B7sHAA6i53vONoZbMGX8My5auEVm6W+dJ2Jd/TZPyGJ5CH42V2XtbI5FD28HeHeqlPzZ3Q==",
1906 | "hasInstallScript": true,
1907 | "dependencies": {
1908 | "node-gyp-build": "^4.2.0"
1909 | }
1910 | },
1911 | "node_modules/util-deprecate": {
1912 | "version": "1.0.2",
1913 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1914 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
1915 | "dev": true
1916 | },
1917 | "node_modules/validate-npm-package-license": {
1918 | "version": "3.0.4",
1919 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
1920 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
1921 | "dev": true,
1922 | "dependencies": {
1923 | "spdx-correct": "^3.0.0",
1924 | "spdx-expression-parse": "^3.0.0"
1925 | }
1926 | },
1927 | "node_modules/vue-observe-visibility": {
1928 | "version": "1.0.0",
1929 | "resolved": "https://registry.npmjs.org/vue-observe-visibility/-/vue-observe-visibility-1.0.0.tgz",
1930 | "integrity": "sha512-s5TFh3s3h3Mhd3jaz3zGzkVHKHnc/0C/gNr30olO99+yw2hl3WBhK3ng3/f9OF+qkW4+l7GkmwfAzDAcY3lCFg=="
1931 | },
1932 | "node_modules/websocket": {
1933 | "version": "1.0.33",
1934 | "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.33.tgz",
1935 | "integrity": "sha512-XwNqM2rN5eh3G2CUQE3OHZj+0xfdH42+OFK6LdC2yqiC0YU8e5UK0nYre220T0IyyN031V/XOvtHvXozvJYFWA==",
1936 | "dependencies": {
1937 | "bufferutil": "^4.0.1",
1938 | "debug": "^2.2.0",
1939 | "es5-ext": "^0.10.50",
1940 | "typedarray-to-buffer": "^3.1.5",
1941 | "utf-8-validate": "^5.0.2",
1942 | "yaeti": "^0.0.6"
1943 | },
1944 | "engines": {
1945 | "node": ">=4.0.0"
1946 | }
1947 | },
1948 | "node_modules/websocket/node_modules/debug": {
1949 | "version": "2.6.9",
1950 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
1951 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
1952 | "dependencies": {
1953 | "ms": "2.0.0"
1954 | }
1955 | },
1956 | "node_modules/websocket/node_modules/ms": {
1957 | "version": "2.0.0",
1958 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1959 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
1960 | },
1961 | "node_modules/wrappy": {
1962 | "version": "1.0.2",
1963 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1964 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1965 | "dev": true
1966 | },
1967 | "node_modules/xmlbuilder": {
1968 | "version": "9.0.7",
1969 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
1970 | "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
1971 | "dev": true,
1972 | "engines": {
1973 | "node": ">=4.0"
1974 | }
1975 | },
1976 | "node_modules/xmldom": {
1977 | "version": "0.1.31",
1978 | "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz",
1979 | "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==",
1980 | "dev": true,
1981 | "engines": {
1982 | "node": ">=0.1"
1983 | }
1984 | },
1985 | "node_modules/yaeti": {
1986 | "version": "0.0.6",
1987 | "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz",
1988 | "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=",
1989 | "engines": {
1990 | "node": ">=0.10.32"
1991 | }
1992 | },
1993 | "node_modules/yallist": {
1994 | "version": "4.0.0",
1995 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
1996 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
1997 | "dev": true
1998 | },
1999 | "node_modules/yargs-parser": {
2000 | "version": "20.2.5",
2001 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.5.tgz",
2002 | "integrity": "sha512-jYRGS3zWy20NtDtK2kBgo/TlAoy5YUuhD9/LZ7z7W4j1Fdw2cqD0xEEclf8fxc8xjD6X5Qr+qQQwCEsP8iRiYg==",
2003 | "dev": true,
2004 | "engines": {
2005 | "node": ">=10"
2006 | }
2007 | },
2008 | "node_modules/yauzl": {
2009 | "version": "2.10.0",
2010 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
2011 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
2012 | "dev": true,
2013 | "dependencies": {
2014 | "buffer-crc32": "~0.2.3",
2015 | "fd-slicer": "~1.1.0"
2016 | }
2017 | }
2018 | },
2019 | "dependencies": {
2020 | "@electron/get": {
2021 | "version": "1.12.4",
2022 | "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.4.tgz",
2023 | "integrity": "sha512-6nr9DbJPUR9Xujw6zD3y+rS95TyItEVM0NVjt1EehY2vUWfIgPiIPVHxCvaTS0xr2B+DRxovYVKbuOWqC35kjg==",
2024 | "dev": true,
2025 | "requires": {
2026 | "debug": "^4.1.1",
2027 | "env-paths": "^2.2.0",
2028 | "fs-extra": "^8.1.0",
2029 | "global-agent": "^2.0.2",
2030 | "global-tunnel-ng": "^2.7.1",
2031 | "got": "^9.6.0",
2032 | "progress": "^2.0.3",
2033 | "semver": "^6.2.0",
2034 | "sumchecker": "^3.0.1"
2035 | }
2036 | },
2037 | "@sindresorhus/is": {
2038 | "version": "0.14.0",
2039 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
2040 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
2041 | "dev": true
2042 | },
2043 | "@szmarczak/http-timer": {
2044 | "version": "1.1.2",
2045 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
2046 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
2047 | "dev": true,
2048 | "requires": {
2049 | "defer-to-connect": "^1.0.1"
2050 | }
2051 | },
2052 | "@types/glob": {
2053 | "version": "7.1.3",
2054 | "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz",
2055 | "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==",
2056 | "dev": true,
2057 | "optional": true,
2058 | "requires": {
2059 | "@types/minimatch": "*",
2060 | "@types/node": "*"
2061 | }
2062 | },
2063 | "@types/minimatch": {
2064 | "version": "3.0.3",
2065 | "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
2066 | "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
2067 | "dev": true,
2068 | "optional": true
2069 | },
2070 | "@types/node": {
2071 | "version": "12.20.0",
2072 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.0.tgz",
2073 | "integrity": "sha512-0/41wHcurotvSOTHQUFkgL702c3pyWR1mToSrrX3pGPvGfpHTv3Ksx0M4UVuU5VJfjVb62Eyr1eKO1tWNUCg2Q==",
2074 | "dev": true
2075 | },
2076 | "@types/yauzl": {
2077 | "version": "2.9.1",
2078 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz",
2079 | "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==",
2080 | "dev": true,
2081 | "optional": true,
2082 | "requires": {
2083 | "@types/node": "*"
2084 | }
2085 | },
2086 | "asar": {
2087 | "version": "3.0.3",
2088 | "resolved": "https://registry.npmjs.org/asar/-/asar-3.0.3.tgz",
2089 | "integrity": "sha512-k7zd+KoR+n8pl71PvgElcoKHrVNiSXtw7odKbyNpmgKe7EGRF9Pnu3uLOukD37EvavKwVFxOUpqXTIZC5B5Pmw==",
2090 | "dev": true,
2091 | "requires": {
2092 | "@types/glob": "^7.1.1",
2093 | "chromium-pickle-js": "^0.2.0",
2094 | "commander": "^5.0.0",
2095 | "glob": "^7.1.6",
2096 | "minimatch": "^3.0.4"
2097 | }
2098 | },
2099 | "at-least-node": {
2100 | "version": "1.0.0",
2101 | "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
2102 | "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
2103 | "dev": true
2104 | },
2105 | "author-regex": {
2106 | "version": "1.0.0",
2107 | "resolved": "https://registry.npmjs.org/author-regex/-/author-regex-1.0.0.tgz",
2108 | "integrity": "sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA=",
2109 | "dev": true
2110 | },
2111 | "balanced-match": {
2112 | "version": "1.0.0",
2113 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
2114 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
2115 | "dev": true
2116 | },
2117 | "base64-js": {
2118 | "version": "1.5.1",
2119 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
2120 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
2121 | "dev": true
2122 | },
2123 | "bluebird": {
2124 | "version": "3.7.2",
2125 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
2126 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
2127 | "dev": true
2128 | },
2129 | "boolean": {
2130 | "version": "3.0.2",
2131 | "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.2.tgz",
2132 | "integrity": "sha512-RwywHlpCRc3/Wh81MiCKun4ydaIFyW5Ea6JbL6sRCVx5q5irDw7pMXBUFYF/jArQ6YrG36q0kpovc9P/Kd3I4g==",
2133 | "dev": true,
2134 | "optional": true
2135 | },
2136 | "brace-expansion": {
2137 | "version": "1.1.11",
2138 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
2139 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
2140 | "dev": true,
2141 | "requires": {
2142 | "balanced-match": "^1.0.0",
2143 | "concat-map": "0.0.1"
2144 | }
2145 | },
2146 | "buffer-alloc": {
2147 | "version": "1.2.0",
2148 | "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
2149 | "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
2150 | "dev": true,
2151 | "requires": {
2152 | "buffer-alloc-unsafe": "^1.1.0",
2153 | "buffer-fill": "^1.0.0"
2154 | }
2155 | },
2156 | "buffer-alloc-unsafe": {
2157 | "version": "1.1.0",
2158 | "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
2159 | "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
2160 | "dev": true
2161 | },
2162 | "buffer-crc32": {
2163 | "version": "0.2.13",
2164 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
2165 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
2166 | "dev": true
2167 | },
2168 | "buffer-fill": {
2169 | "version": "1.0.0",
2170 | "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
2171 | "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
2172 | "dev": true
2173 | },
2174 | "buffer-from": {
2175 | "version": "1.1.1",
2176 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
2177 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
2178 | "dev": true
2179 | },
2180 | "bufferutil": {
2181 | "version": "4.0.3",
2182 | "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.3.tgz",
2183 | "integrity": "sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw==",
2184 | "requires": {
2185 | "node-gyp-build": "^4.2.0"
2186 | }
2187 | },
2188 | "cacheable-request": {
2189 | "version": "6.1.0",
2190 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
2191 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
2192 | "dev": true,
2193 | "requires": {
2194 | "clone-response": "^1.0.2",
2195 | "get-stream": "^5.1.0",
2196 | "http-cache-semantics": "^4.0.0",
2197 | "keyv": "^3.0.0",
2198 | "lowercase-keys": "^2.0.0",
2199 | "normalize-url": "^4.1.0",
2200 | "responselike": "^1.0.2"
2201 | },
2202 | "dependencies": {
2203 | "get-stream": {
2204 | "version": "5.2.0",
2205 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
2206 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
2207 | "dev": true,
2208 | "requires": {
2209 | "pump": "^3.0.0"
2210 | }
2211 | },
2212 | "lowercase-keys": {
2213 | "version": "2.0.0",
2214 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
2215 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
2216 | "dev": true
2217 | }
2218 | }
2219 | },
2220 | "chromium-pickle-js": {
2221 | "version": "0.2.0",
2222 | "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz",
2223 | "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=",
2224 | "dev": true
2225 | },
2226 | "clone-response": {
2227 | "version": "1.0.2",
2228 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
2229 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
2230 | "dev": true,
2231 | "requires": {
2232 | "mimic-response": "^1.0.0"
2233 | }
2234 | },
2235 | "commander": {
2236 | "version": "5.1.0",
2237 | "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
2238 | "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
2239 | "dev": true
2240 | },
2241 | "compare-version": {
2242 | "version": "0.1.2",
2243 | "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz",
2244 | "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=",
2245 | "dev": true
2246 | },
2247 | "concat-map": {
2248 | "version": "0.0.1",
2249 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
2250 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
2251 | "dev": true
2252 | },
2253 | "concat-stream": {
2254 | "version": "1.6.2",
2255 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
2256 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
2257 | "dev": true,
2258 | "requires": {
2259 | "buffer-from": "^1.0.0",
2260 | "inherits": "^2.0.3",
2261 | "readable-stream": "^2.2.2",
2262 | "typedarray": "^0.0.6"
2263 | }
2264 | },
2265 | "config-chain": {
2266 | "version": "1.1.12",
2267 | "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
2268 | "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
2269 | "dev": true,
2270 | "optional": true,
2271 | "requires": {
2272 | "ini": "^1.3.4",
2273 | "proto-list": "~1.2.1"
2274 | }
2275 | },
2276 | "core-js": {
2277 | "version": "3.8.3",
2278 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.3.tgz",
2279 | "integrity": "sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q==",
2280 | "dev": true,
2281 | "optional": true
2282 | },
2283 | "core-util-is": {
2284 | "version": "1.0.2",
2285 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
2286 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
2287 | "dev": true
2288 | },
2289 | "d": {
2290 | "version": "1.0.1",
2291 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
2292 | "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
2293 | "requires": {
2294 | "es5-ext": "^0.10.50",
2295 | "type": "^1.0.1"
2296 | }
2297 | },
2298 | "debug": {
2299 | "version": "4.3.1",
2300 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
2301 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
2302 | "dev": true,
2303 | "requires": {
2304 | "ms": "2.1.2"
2305 | }
2306 | },
2307 | "decompress-response": {
2308 | "version": "3.3.0",
2309 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
2310 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
2311 | "dev": true,
2312 | "requires": {
2313 | "mimic-response": "^1.0.0"
2314 | }
2315 | },
2316 | "defer-to-connect": {
2317 | "version": "1.1.3",
2318 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
2319 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
2320 | "dev": true
2321 | },
2322 | "define-properties": {
2323 | "version": "1.1.3",
2324 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
2325 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
2326 | "dev": true,
2327 | "optional": true,
2328 | "requires": {
2329 | "object-keys": "^1.0.12"
2330 | }
2331 | },
2332 | "detect-node": {
2333 | "version": "2.0.4",
2334 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
2335 | "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==",
2336 | "dev": true,
2337 | "optional": true
2338 | },
2339 | "duplexer3": {
2340 | "version": "0.1.4",
2341 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
2342 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
2343 | "dev": true
2344 | },
2345 | "electron": {
2346 | "version": "11.2.3",
2347 | "resolved": "https://registry.npmjs.org/electron/-/electron-11.2.3.tgz",
2348 | "integrity": "sha512-6yxOc42nDAptHKNlUG/vcOh2GI9x2fqp2nQbZO0/3sz2CrwsJkwR3i3oMN9XhVJaqI7GK1vSCJz0verOkWlXcQ==",
2349 | "dev": true,
2350 | "requires": {
2351 | "@electron/get": "^1.0.1",
2352 | "@types/node": "^12.0.12",
2353 | "extract-zip": "^1.0.3"
2354 | }
2355 | },
2356 | "electron-notarize": {
2357 | "version": "1.0.0",
2358 | "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.0.0.tgz",
2359 | "integrity": "sha512-dsib1IAquMn0onCrNMJ6gtEIZn/azG8hZMCYOuZIMVMUeRMgBYHK1s5TK9P8xAcrAjh/2aN5WYHzgVSWX314og==",
2360 | "dev": true,
2361 | "requires": {
2362 | "debug": "^4.1.1",
2363 | "fs-extra": "^9.0.1"
2364 | },
2365 | "dependencies": {
2366 | "fs-extra": {
2367 | "version": "9.1.0",
2368 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
2369 | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
2370 | "dev": true,
2371 | "requires": {
2372 | "at-least-node": "^1.0.0",
2373 | "graceful-fs": "^4.2.0",
2374 | "jsonfile": "^6.0.1",
2375 | "universalify": "^2.0.0"
2376 | }
2377 | },
2378 | "jsonfile": {
2379 | "version": "6.1.0",
2380 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
2381 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
2382 | "dev": true,
2383 | "requires": {
2384 | "graceful-fs": "^4.1.6",
2385 | "universalify": "^2.0.0"
2386 | }
2387 | },
2388 | "universalify": {
2389 | "version": "2.0.0",
2390 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
2391 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
2392 | "dev": true
2393 | }
2394 | }
2395 | },
2396 | "electron-osx-sign": {
2397 | "version": "0.5.0",
2398 | "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.5.0.tgz",
2399 | "integrity": "sha512-icoRLHzFz/qxzDh/N4Pi2z4yVHurlsCAYQvsCSG7fCedJ4UJXBS6PoQyGH71IfcqKupcKeK7HX/NkyfG+v6vlQ==",
2400 | "dev": true,
2401 | "requires": {
2402 | "bluebird": "^3.5.0",
2403 | "compare-version": "^0.1.2",
2404 | "debug": "^2.6.8",
2405 | "isbinaryfile": "^3.0.2",
2406 | "minimist": "^1.2.0",
2407 | "plist": "^3.0.1"
2408 | },
2409 | "dependencies": {
2410 | "debug": {
2411 | "version": "2.6.9",
2412 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
2413 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
2414 | "dev": true,
2415 | "requires": {
2416 | "ms": "2.0.0"
2417 | }
2418 | },
2419 | "ms": {
2420 | "version": "2.0.0",
2421 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
2422 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
2423 | "dev": true
2424 | }
2425 | }
2426 | },
2427 | "electron-packager": {
2428 | "version": "15.2.0",
2429 | "resolved": "https://registry.npmjs.org/electron-packager/-/electron-packager-15.2.0.tgz",
2430 | "integrity": "sha512-BaklTBRQy1JTijR3hi8XxHf/uo76rHbDCNM/eQHSblzE9C0NoNfOe86nPxB7y1u2jwlqoEJ4zFiHpTFioKGGRA==",
2431 | "dev": true,
2432 | "requires": {
2433 | "@electron/get": "^1.6.0",
2434 | "asar": "^3.0.0",
2435 | "debug": "^4.0.1",
2436 | "electron-notarize": "^1.0.0",
2437 | "electron-osx-sign": "^0.5.0",
2438 | "extract-zip": "^2.0.0",
2439 | "filenamify": "^4.1.0",
2440 | "fs-extra": "^9.0.0",
2441 | "galactus": "^0.2.1",
2442 | "get-package-info": "^1.0.0",
2443 | "junk": "^3.1.0",
2444 | "parse-author": "^2.0.0",
2445 | "plist": "^3.0.0",
2446 | "rcedit": "^2.0.0",
2447 | "resolve": "^1.1.6",
2448 | "semver": "^7.1.3",
2449 | "yargs-parser": "^20.0.0"
2450 | },
2451 | "dependencies": {
2452 | "extract-zip": {
2453 | "version": "2.0.1",
2454 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
2455 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
2456 | "dev": true,
2457 | "requires": {
2458 | "@types/yauzl": "^2.9.1",
2459 | "debug": "^4.1.1",
2460 | "get-stream": "^5.1.0",
2461 | "yauzl": "^2.10.0"
2462 | }
2463 | },
2464 | "fs-extra": {
2465 | "version": "9.1.0",
2466 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
2467 | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
2468 | "dev": true,
2469 | "requires": {
2470 | "at-least-node": "^1.0.0",
2471 | "graceful-fs": "^4.2.0",
2472 | "jsonfile": "^6.0.1",
2473 | "universalify": "^2.0.0"
2474 | }
2475 | },
2476 | "get-stream": {
2477 | "version": "5.2.0",
2478 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
2479 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
2480 | "dev": true,
2481 | "requires": {
2482 | "pump": "^3.0.0"
2483 | }
2484 | },
2485 | "jsonfile": {
2486 | "version": "6.1.0",
2487 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
2488 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
2489 | "dev": true,
2490 | "requires": {
2491 | "graceful-fs": "^4.1.6",
2492 | "universalify": "^2.0.0"
2493 | }
2494 | },
2495 | "semver": {
2496 | "version": "7.3.4",
2497 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
2498 | "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
2499 | "dev": true,
2500 | "requires": {
2501 | "lru-cache": "^6.0.0"
2502 | }
2503 | },
2504 | "universalify": {
2505 | "version": "2.0.0",
2506 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
2507 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
2508 | "dev": true
2509 | }
2510 | }
2511 | },
2512 | "encodeurl": {
2513 | "version": "1.0.2",
2514 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
2515 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
2516 | "dev": true,
2517 | "optional": true
2518 | },
2519 | "end-of-stream": {
2520 | "version": "1.4.4",
2521 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
2522 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
2523 | "dev": true,
2524 | "requires": {
2525 | "once": "^1.4.0"
2526 | }
2527 | },
2528 | "env-paths": {
2529 | "version": "2.2.0",
2530 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz",
2531 | "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==",
2532 | "dev": true
2533 | },
2534 | "error-ex": {
2535 | "version": "1.3.2",
2536 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
2537 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
2538 | "dev": true,
2539 | "requires": {
2540 | "is-arrayish": "^0.2.1"
2541 | }
2542 | },
2543 | "es5-ext": {
2544 | "version": "0.10.53",
2545 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
2546 | "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==",
2547 | "requires": {
2548 | "es6-iterator": "~2.0.3",
2549 | "es6-symbol": "~3.1.3",
2550 | "next-tick": "~1.0.0"
2551 | }
2552 | },
2553 | "es6-error": {
2554 | "version": "4.1.1",
2555 | "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
2556 | "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
2557 | "dev": true,
2558 | "optional": true
2559 | },
2560 | "es6-iterator": {
2561 | "version": "2.0.3",
2562 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
2563 | "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
2564 | "requires": {
2565 | "d": "1",
2566 | "es5-ext": "^0.10.35",
2567 | "es6-symbol": "^3.1.1"
2568 | }
2569 | },
2570 | "es6-symbol": {
2571 | "version": "3.1.3",
2572 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
2573 | "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
2574 | "requires": {
2575 | "d": "^1.0.1",
2576 | "ext": "^1.1.2"
2577 | }
2578 | },
2579 | "escape-string-regexp": {
2580 | "version": "4.0.0",
2581 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
2582 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
2583 | "dev": true,
2584 | "optional": true
2585 | },
2586 | "ext": {
2587 | "version": "1.4.0",
2588 | "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz",
2589 | "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==",
2590 | "requires": {
2591 | "type": "^2.0.0"
2592 | },
2593 | "dependencies": {
2594 | "type": {
2595 | "version": "2.5.0",
2596 | "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz",
2597 | "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw=="
2598 | }
2599 | }
2600 | },
2601 | "extract-zip": {
2602 | "version": "1.7.0",
2603 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
2604 | "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==",
2605 | "dev": true,
2606 | "requires": {
2607 | "concat-stream": "^1.6.2",
2608 | "debug": "^2.6.9",
2609 | "mkdirp": "^0.5.4",
2610 | "yauzl": "^2.10.0"
2611 | },
2612 | "dependencies": {
2613 | "debug": {
2614 | "version": "2.6.9",
2615 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
2616 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
2617 | "dev": true,
2618 | "requires": {
2619 | "ms": "2.0.0"
2620 | }
2621 | },
2622 | "ms": {
2623 | "version": "2.0.0",
2624 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
2625 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
2626 | "dev": true
2627 | }
2628 | }
2629 | },
2630 | "fd-slicer": {
2631 | "version": "1.1.0",
2632 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
2633 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
2634 | "dev": true,
2635 | "requires": {
2636 | "pend": "~1.2.0"
2637 | }
2638 | },
2639 | "filename-reserved-regex": {
2640 | "version": "2.0.0",
2641 | "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
2642 | "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=",
2643 | "dev": true
2644 | },
2645 | "filenamify": {
2646 | "version": "4.2.0",
2647 | "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.2.0.tgz",
2648 | "integrity": "sha512-pkgE+4p7N1n7QieOopmn3TqJaefjdWXwEkj2XLZJLKfOgcQKkn11ahvGNgTD8mLggexLiDFQxeTs14xVU22XPA==",
2649 | "dev": true,
2650 | "requires": {
2651 | "filename-reserved-regex": "^2.0.0",
2652 | "strip-outer": "^1.0.1",
2653 | "trim-repeated": "^1.0.0"
2654 | }
2655 | },
2656 | "find-up": {
2657 | "version": "2.1.0",
2658 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
2659 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
2660 | "dev": true,
2661 | "requires": {
2662 | "locate-path": "^2.0.0"
2663 | }
2664 | },
2665 | "flora-colossus": {
2666 | "version": "1.0.1",
2667 | "resolved": "https://registry.npmjs.org/flora-colossus/-/flora-colossus-1.0.1.tgz",
2668 | "integrity": "sha512-d+9na7t9FyH8gBJoNDSi28mE4NgQVGGvxQ4aHtFRetjyh5SXjuus+V5EZaxFmFdXVemSOrx0lsgEl/ZMjnOWJA==",
2669 | "dev": true,
2670 | "requires": {
2671 | "debug": "^4.1.1",
2672 | "fs-extra": "^7.0.0"
2673 | },
2674 | "dependencies": {
2675 | "fs-extra": {
2676 | "version": "7.0.1",
2677 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
2678 | "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
2679 | "dev": true,
2680 | "requires": {
2681 | "graceful-fs": "^4.1.2",
2682 | "jsonfile": "^4.0.0",
2683 | "universalify": "^0.1.0"
2684 | }
2685 | }
2686 | }
2687 | },
2688 | "fs-extra": {
2689 | "version": "8.1.0",
2690 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
2691 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
2692 | "dev": true,
2693 | "requires": {
2694 | "graceful-fs": "^4.2.0",
2695 | "jsonfile": "^4.0.0",
2696 | "universalify": "^0.1.0"
2697 | }
2698 | },
2699 | "fs.realpath": {
2700 | "version": "1.0.0",
2701 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
2702 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
2703 | "dev": true
2704 | },
2705 | "function-bind": {
2706 | "version": "1.1.1",
2707 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
2708 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
2709 | "dev": true
2710 | },
2711 | "galactus": {
2712 | "version": "0.2.1",
2713 | "resolved": "https://registry.npmjs.org/galactus/-/galactus-0.2.1.tgz",
2714 | "integrity": "sha1-y+0tIKQMH1Z5o1kI4rlBVzPnjbk=",
2715 | "dev": true,
2716 | "requires": {
2717 | "debug": "^3.1.0",
2718 | "flora-colossus": "^1.0.0",
2719 | "fs-extra": "^4.0.0"
2720 | },
2721 | "dependencies": {
2722 | "debug": {
2723 | "version": "3.2.7",
2724 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
2725 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
2726 | "dev": true,
2727 | "requires": {
2728 | "ms": "^2.1.1"
2729 | }
2730 | },
2731 | "fs-extra": {
2732 | "version": "4.0.3",
2733 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
2734 | "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
2735 | "dev": true,
2736 | "requires": {
2737 | "graceful-fs": "^4.1.2",
2738 | "jsonfile": "^4.0.0",
2739 | "universalify": "^0.1.0"
2740 | }
2741 | }
2742 | }
2743 | },
2744 | "get-package-info": {
2745 | "version": "1.0.0",
2746 | "resolved": "https://registry.npmjs.org/get-package-info/-/get-package-info-1.0.0.tgz",
2747 | "integrity": "sha1-ZDJ5ZWPigRPNlHTbvQAFKYWkmZw=",
2748 | "dev": true,
2749 | "requires": {
2750 | "bluebird": "^3.1.1",
2751 | "debug": "^2.2.0",
2752 | "lodash.get": "^4.0.0",
2753 | "read-pkg-up": "^2.0.0"
2754 | },
2755 | "dependencies": {
2756 | "debug": {
2757 | "version": "2.6.9",
2758 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
2759 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
2760 | "dev": true,
2761 | "requires": {
2762 | "ms": "2.0.0"
2763 | }
2764 | },
2765 | "ms": {
2766 | "version": "2.0.0",
2767 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
2768 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
2769 | "dev": true
2770 | }
2771 | }
2772 | },
2773 | "get-stream": {
2774 | "version": "4.1.0",
2775 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
2776 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
2777 | "dev": true,
2778 | "requires": {
2779 | "pump": "^3.0.0"
2780 | }
2781 | },
2782 | "glob": {
2783 | "version": "7.1.6",
2784 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
2785 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
2786 | "dev": true,
2787 | "requires": {
2788 | "fs.realpath": "^1.0.0",
2789 | "inflight": "^1.0.4",
2790 | "inherits": "2",
2791 | "minimatch": "^3.0.4",
2792 | "once": "^1.3.0",
2793 | "path-is-absolute": "^1.0.0"
2794 | }
2795 | },
2796 | "global-agent": {
2797 | "version": "2.1.12",
2798 | "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.12.tgz",
2799 | "integrity": "sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg==",
2800 | "dev": true,
2801 | "optional": true,
2802 | "requires": {
2803 | "boolean": "^3.0.1",
2804 | "core-js": "^3.6.5",
2805 | "es6-error": "^4.1.1",
2806 | "matcher": "^3.0.0",
2807 | "roarr": "^2.15.3",
2808 | "semver": "^7.3.2",
2809 | "serialize-error": "^7.0.1"
2810 | },
2811 | "dependencies": {
2812 | "semver": {
2813 | "version": "7.3.4",
2814 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
2815 | "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
2816 | "dev": true,
2817 | "optional": true,
2818 | "requires": {
2819 | "lru-cache": "^6.0.0"
2820 | }
2821 | }
2822 | }
2823 | },
2824 | "global-tunnel-ng": {
2825 | "version": "2.7.1",
2826 | "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz",
2827 | "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==",
2828 | "dev": true,
2829 | "optional": true,
2830 | "requires": {
2831 | "encodeurl": "^1.0.2",
2832 | "lodash": "^4.17.10",
2833 | "npm-conf": "^1.1.3",
2834 | "tunnel": "^0.0.6"
2835 | }
2836 | },
2837 | "globalthis": {
2838 | "version": "1.0.1",
2839 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.1.tgz",
2840 | "integrity": "sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==",
2841 | "dev": true,
2842 | "optional": true,
2843 | "requires": {
2844 | "define-properties": "^1.1.3"
2845 | }
2846 | },
2847 | "got": {
2848 | "version": "9.6.0",
2849 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
2850 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
2851 | "dev": true,
2852 | "requires": {
2853 | "@sindresorhus/is": "^0.14.0",
2854 | "@szmarczak/http-timer": "^1.1.2",
2855 | "cacheable-request": "^6.0.0",
2856 | "decompress-response": "^3.3.0",
2857 | "duplexer3": "^0.1.4",
2858 | "get-stream": "^4.1.0",
2859 | "lowercase-keys": "^1.0.1",
2860 | "mimic-response": "^1.0.1",
2861 | "p-cancelable": "^1.0.0",
2862 | "to-readable-stream": "^1.0.0",
2863 | "url-parse-lax": "^3.0.0"
2864 | }
2865 | },
2866 | "graceful-fs": {
2867 | "version": "4.2.6",
2868 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
2869 | "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
2870 | "dev": true
2871 | },
2872 | "has": {
2873 | "version": "1.0.3",
2874 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
2875 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
2876 | "dev": true,
2877 | "requires": {
2878 | "function-bind": "^1.1.1"
2879 | }
2880 | },
2881 | "hosted-git-info": {
2882 | "version": "2.8.8",
2883 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
2884 | "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
2885 | "dev": true
2886 | },
2887 | "http-cache-semantics": {
2888 | "version": "4.1.0",
2889 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
2890 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
2891 | "dev": true
2892 | },
2893 | "inflight": {
2894 | "version": "1.0.6",
2895 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
2896 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
2897 | "dev": true,
2898 | "requires": {
2899 | "once": "^1.3.0",
2900 | "wrappy": "1"
2901 | }
2902 | },
2903 | "inherits": {
2904 | "version": "2.0.4",
2905 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
2906 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
2907 | "dev": true
2908 | },
2909 | "ini": {
2910 | "version": "1.3.8",
2911 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
2912 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
2913 | "dev": true,
2914 | "optional": true
2915 | },
2916 | "is-arrayish": {
2917 | "version": "0.2.1",
2918 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
2919 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
2920 | "dev": true
2921 | },
2922 | "is-core-module": {
2923 | "version": "2.2.0",
2924 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
2925 | "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
2926 | "dev": true,
2927 | "requires": {
2928 | "has": "^1.0.3"
2929 | }
2930 | },
2931 | "is-typedarray": {
2932 | "version": "1.0.0",
2933 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
2934 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
2935 | },
2936 | "isarray": {
2937 | "version": "1.0.0",
2938 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
2939 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
2940 | "dev": true
2941 | },
2942 | "isbinaryfile": {
2943 | "version": "3.0.3",
2944 | "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz",
2945 | "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==",
2946 | "dev": true,
2947 | "requires": {
2948 | "buffer-alloc": "^1.2.0"
2949 | }
2950 | },
2951 | "json-buffer": {
2952 | "version": "3.0.0",
2953 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
2954 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
2955 | "dev": true
2956 | },
2957 | "json-stringify-safe": {
2958 | "version": "5.0.1",
2959 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
2960 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
2961 | "dev": true,
2962 | "optional": true
2963 | },
2964 | "jsonfile": {
2965 | "version": "4.0.0",
2966 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
2967 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
2968 | "dev": true,
2969 | "requires": {
2970 | "graceful-fs": "^4.1.6"
2971 | }
2972 | },
2973 | "junk": {
2974 | "version": "3.1.0",
2975 | "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz",
2976 | "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==",
2977 | "dev": true
2978 | },
2979 | "keyv": {
2980 | "version": "3.1.0",
2981 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
2982 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
2983 | "dev": true,
2984 | "requires": {
2985 | "json-buffer": "3.0.0"
2986 | }
2987 | },
2988 | "load-json-file": {
2989 | "version": "2.0.0",
2990 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
2991 | "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
2992 | "dev": true,
2993 | "requires": {
2994 | "graceful-fs": "^4.1.2",
2995 | "parse-json": "^2.2.0",
2996 | "pify": "^2.0.0",
2997 | "strip-bom": "^3.0.0"
2998 | },
2999 | "dependencies": {
3000 | "pify": {
3001 | "version": "2.3.0",
3002 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
3003 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
3004 | "dev": true
3005 | }
3006 | }
3007 | },
3008 | "locate-path": {
3009 | "version": "2.0.0",
3010 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
3011 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
3012 | "dev": true,
3013 | "requires": {
3014 | "p-locate": "^2.0.0",
3015 | "path-exists": "^3.0.0"
3016 | }
3017 | },
3018 | "lodash": {
3019 | "version": "4.17.21",
3020 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
3021 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
3022 | },
3023 | "lodash.get": {
3024 | "version": "4.4.2",
3025 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
3026 | "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
3027 | "dev": true
3028 | },
3029 | "lowercase-keys": {
3030 | "version": "1.0.1",
3031 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
3032 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
3033 | "dev": true
3034 | },
3035 | "lru-cache": {
3036 | "version": "6.0.0",
3037 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
3038 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
3039 | "dev": true,
3040 | "requires": {
3041 | "yallist": "^4.0.0"
3042 | }
3043 | },
3044 | "matcher": {
3045 | "version": "3.0.0",
3046 | "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz",
3047 | "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==",
3048 | "dev": true,
3049 | "optional": true,
3050 | "requires": {
3051 | "escape-string-regexp": "^4.0.0"
3052 | }
3053 | },
3054 | "mimic-response": {
3055 | "version": "1.0.1",
3056 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
3057 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
3058 | "dev": true
3059 | },
3060 | "minimatch": {
3061 | "version": "3.0.4",
3062 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
3063 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
3064 | "dev": true,
3065 | "requires": {
3066 | "brace-expansion": "^1.1.7"
3067 | }
3068 | },
3069 | "minimist": {
3070 | "version": "1.2.5",
3071 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
3072 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
3073 | "dev": true
3074 | },
3075 | "mkdirp": {
3076 | "version": "0.5.5",
3077 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
3078 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
3079 | "dev": true,
3080 | "requires": {
3081 | "minimist": "^1.2.5"
3082 | }
3083 | },
3084 | "ms": {
3085 | "version": "2.1.2",
3086 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
3087 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
3088 | "dev": true
3089 | },
3090 | "next-tick": {
3091 | "version": "1.0.0",
3092 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
3093 | "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
3094 | },
3095 | "nocache": {
3096 | "version": "2.1.0",
3097 | "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz",
3098 | "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q=="
3099 | },
3100 | "node-gyp-build": {
3101 | "version": "4.2.3",
3102 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz",
3103 | "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg=="
3104 | },
3105 | "normalize-package-data": {
3106 | "version": "2.5.0",
3107 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
3108 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
3109 | "dev": true,
3110 | "requires": {
3111 | "hosted-git-info": "^2.1.4",
3112 | "resolve": "^1.10.0",
3113 | "semver": "2 || 3 || 4 || 5",
3114 | "validate-npm-package-license": "^3.0.1"
3115 | },
3116 | "dependencies": {
3117 | "semver": {
3118 | "version": "5.7.1",
3119 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
3120 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
3121 | "dev": true
3122 | }
3123 | }
3124 | },
3125 | "normalize-url": {
3126 | "version": "4.5.0",
3127 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
3128 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
3129 | "dev": true
3130 | },
3131 | "npm-conf": {
3132 | "version": "1.1.3",
3133 | "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
3134 | "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
3135 | "dev": true,
3136 | "optional": true,
3137 | "requires": {
3138 | "config-chain": "^1.1.11",
3139 | "pify": "^3.0.0"
3140 | }
3141 | },
3142 | "object-keys": {
3143 | "version": "1.1.1",
3144 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
3145 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
3146 | "dev": true,
3147 | "optional": true
3148 | },
3149 | "once": {
3150 | "version": "1.4.0",
3151 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
3152 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
3153 | "dev": true,
3154 | "requires": {
3155 | "wrappy": "1"
3156 | }
3157 | },
3158 | "p-cancelable": {
3159 | "version": "1.1.0",
3160 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
3161 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
3162 | "dev": true
3163 | },
3164 | "p-limit": {
3165 | "version": "1.3.0",
3166 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
3167 | "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
3168 | "dev": true,
3169 | "requires": {
3170 | "p-try": "^1.0.0"
3171 | }
3172 | },
3173 | "p-locate": {
3174 | "version": "2.0.0",
3175 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
3176 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
3177 | "dev": true,
3178 | "requires": {
3179 | "p-limit": "^1.1.0"
3180 | }
3181 | },
3182 | "p-try": {
3183 | "version": "1.0.0",
3184 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
3185 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
3186 | "dev": true
3187 | },
3188 | "parse-author": {
3189 | "version": "2.0.0",
3190 | "resolved": "https://registry.npmjs.org/parse-author/-/parse-author-2.0.0.tgz",
3191 | "integrity": "sha1-00YL8d3Q367tQtp1QkLmX7aEqB8=",
3192 | "dev": true,
3193 | "requires": {
3194 | "author-regex": "^1.0.0"
3195 | }
3196 | },
3197 | "parse-json": {
3198 | "version": "2.2.0",
3199 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
3200 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
3201 | "dev": true,
3202 | "requires": {
3203 | "error-ex": "^1.2.0"
3204 | }
3205 | },
3206 | "path-exists": {
3207 | "version": "3.0.0",
3208 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
3209 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
3210 | "dev": true
3211 | },
3212 | "path-is-absolute": {
3213 | "version": "1.0.1",
3214 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
3215 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
3216 | "dev": true
3217 | },
3218 | "path-parse": {
3219 | "version": "1.0.6",
3220 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
3221 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
3222 | "dev": true
3223 | },
3224 | "path-type": {
3225 | "version": "2.0.0",
3226 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
3227 | "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
3228 | "dev": true,
3229 | "requires": {
3230 | "pify": "^2.0.0"
3231 | },
3232 | "dependencies": {
3233 | "pify": {
3234 | "version": "2.3.0",
3235 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
3236 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
3237 | "dev": true
3238 | }
3239 | }
3240 | },
3241 | "pend": {
3242 | "version": "1.2.0",
3243 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
3244 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
3245 | "dev": true
3246 | },
3247 | "pify": {
3248 | "version": "3.0.0",
3249 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
3250 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
3251 | "dev": true,
3252 | "optional": true
3253 | },
3254 | "plist": {
3255 | "version": "3.0.1",
3256 | "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz",
3257 | "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==",
3258 | "dev": true,
3259 | "requires": {
3260 | "base64-js": "^1.2.3",
3261 | "xmlbuilder": "^9.0.7",
3262 | "xmldom": "0.1.x"
3263 | }
3264 | },
3265 | "prepend-http": {
3266 | "version": "2.0.0",
3267 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
3268 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
3269 | "dev": true
3270 | },
3271 | "process-nextick-args": {
3272 | "version": "2.0.1",
3273 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
3274 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
3275 | "dev": true
3276 | },
3277 | "progress": {
3278 | "version": "2.0.3",
3279 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
3280 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
3281 | "dev": true
3282 | },
3283 | "proto-list": {
3284 | "version": "1.2.4",
3285 | "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
3286 | "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
3287 | "dev": true,
3288 | "optional": true
3289 | },
3290 | "pump": {
3291 | "version": "3.0.0",
3292 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
3293 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
3294 | "dev": true,
3295 | "requires": {
3296 | "end-of-stream": "^1.1.0",
3297 | "once": "^1.3.1"
3298 | }
3299 | },
3300 | "rcedit": {
3301 | "version": "2.3.0",
3302 | "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-2.3.0.tgz",
3303 | "integrity": "sha512-h1gNEl9Oai1oijwyJ1WYqYSXTStHnOcv1KYljg/8WM4NAg3H1KBK3azIaKkQ1WQl+d7PoJpcBMscPfLXVKgCLQ==",
3304 | "dev": true
3305 | },
3306 | "read-pkg": {
3307 | "version": "2.0.0",
3308 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
3309 | "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
3310 | "dev": true,
3311 | "requires": {
3312 | "load-json-file": "^2.0.0",
3313 | "normalize-package-data": "^2.3.2",
3314 | "path-type": "^2.0.0"
3315 | }
3316 | },
3317 | "read-pkg-up": {
3318 | "version": "2.0.0",
3319 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
3320 | "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
3321 | "dev": true,
3322 | "requires": {
3323 | "find-up": "^2.0.0",
3324 | "read-pkg": "^2.0.0"
3325 | }
3326 | },
3327 | "readable-stream": {
3328 | "version": "2.3.7",
3329 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
3330 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
3331 | "dev": true,
3332 | "requires": {
3333 | "core-util-is": "~1.0.0",
3334 | "inherits": "~2.0.3",
3335 | "isarray": "~1.0.0",
3336 | "process-nextick-args": "~2.0.0",
3337 | "safe-buffer": "~5.1.1",
3338 | "string_decoder": "~1.1.1",
3339 | "util-deprecate": "~1.0.1"
3340 | }
3341 | },
3342 | "resolve": {
3343 | "version": "1.20.0",
3344 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
3345 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
3346 | "dev": true,
3347 | "requires": {
3348 | "is-core-module": "^2.2.0",
3349 | "path-parse": "^1.0.6"
3350 | }
3351 | },
3352 | "responselike": {
3353 | "version": "1.0.2",
3354 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
3355 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
3356 | "dev": true,
3357 | "requires": {
3358 | "lowercase-keys": "^1.0.0"
3359 | }
3360 | },
3361 | "roarr": {
3362 | "version": "2.15.4",
3363 | "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz",
3364 | "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==",
3365 | "dev": true,
3366 | "optional": true,
3367 | "requires": {
3368 | "boolean": "^3.0.1",
3369 | "detect-node": "^2.0.4",
3370 | "globalthis": "^1.0.1",
3371 | "json-stringify-safe": "^5.0.1",
3372 | "semver-compare": "^1.0.0",
3373 | "sprintf-js": "^1.1.2"
3374 | }
3375 | },
3376 | "safe-buffer": {
3377 | "version": "5.1.2",
3378 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
3379 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
3380 | "dev": true
3381 | },
3382 | "semver": {
3383 | "version": "6.3.0",
3384 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
3385 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
3386 | "dev": true
3387 | },
3388 | "semver-compare": {
3389 | "version": "1.0.0",
3390 | "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
3391 | "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
3392 | "dev": true,
3393 | "optional": true
3394 | },
3395 | "serialize-error": {
3396 | "version": "7.0.1",
3397 | "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
3398 | "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==",
3399 | "dev": true,
3400 | "optional": true,
3401 | "requires": {
3402 | "type-fest": "^0.13.1"
3403 | }
3404 | },
3405 | "spdx-correct": {
3406 | "version": "3.1.1",
3407 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
3408 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
3409 | "dev": true,
3410 | "requires": {
3411 | "spdx-expression-parse": "^3.0.0",
3412 | "spdx-license-ids": "^3.0.0"
3413 | }
3414 | },
3415 | "spdx-exceptions": {
3416 | "version": "2.3.0",
3417 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
3418 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
3419 | "dev": true
3420 | },
3421 | "spdx-expression-parse": {
3422 | "version": "3.0.1",
3423 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
3424 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
3425 | "dev": true,
3426 | "requires": {
3427 | "spdx-exceptions": "^2.1.0",
3428 | "spdx-license-ids": "^3.0.0"
3429 | }
3430 | },
3431 | "spdx-license-ids": {
3432 | "version": "3.0.7",
3433 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz",
3434 | "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==",
3435 | "dev": true
3436 | },
3437 | "sprintf-js": {
3438 | "version": "1.1.2",
3439 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
3440 | "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
3441 | "dev": true,
3442 | "optional": true
3443 | },
3444 | "string_decoder": {
3445 | "version": "1.1.1",
3446 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
3447 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
3448 | "dev": true,
3449 | "requires": {
3450 | "safe-buffer": "~5.1.0"
3451 | }
3452 | },
3453 | "strip-bom": {
3454 | "version": "3.0.0",
3455 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
3456 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
3457 | "dev": true
3458 | },
3459 | "strip-outer": {
3460 | "version": "1.0.1",
3461 | "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
3462 | "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
3463 | "dev": true,
3464 | "requires": {
3465 | "escape-string-regexp": "^1.0.2"
3466 | },
3467 | "dependencies": {
3468 | "escape-string-regexp": {
3469 | "version": "1.0.5",
3470 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
3471 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
3472 | "dev": true
3473 | }
3474 | }
3475 | },
3476 | "sumchecker": {
3477 | "version": "3.0.1",
3478 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz",
3479 | "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==",
3480 | "dev": true,
3481 | "requires": {
3482 | "debug": "^4.1.0"
3483 | }
3484 | },
3485 | "to-readable-stream": {
3486 | "version": "1.0.0",
3487 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
3488 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
3489 | "dev": true
3490 | },
3491 | "trim-repeated": {
3492 | "version": "1.0.0",
3493 | "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
3494 | "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
3495 | "dev": true,
3496 | "requires": {
3497 | "escape-string-regexp": "^1.0.2"
3498 | },
3499 | "dependencies": {
3500 | "escape-string-regexp": {
3501 | "version": "1.0.5",
3502 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
3503 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
3504 | "dev": true
3505 | }
3506 | }
3507 | },
3508 | "tunnel": {
3509 | "version": "0.0.6",
3510 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
3511 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
3512 | "dev": true,
3513 | "optional": true
3514 | },
3515 | "type": {
3516 | "version": "1.2.0",
3517 | "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
3518 | "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
3519 | },
3520 | "type-fest": {
3521 | "version": "0.13.1",
3522 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
3523 | "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
3524 | "dev": true,
3525 | "optional": true
3526 | },
3527 | "typedarray": {
3528 | "version": "0.0.6",
3529 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
3530 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
3531 | "dev": true
3532 | },
3533 | "typedarray-to-buffer": {
3534 | "version": "3.1.5",
3535 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
3536 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
3537 | "requires": {
3538 | "is-typedarray": "^1.0.0"
3539 | }
3540 | },
3541 | "universalify": {
3542 | "version": "0.1.2",
3543 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
3544 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
3545 | "dev": true
3546 | },
3547 | "url-parse-lax": {
3548 | "version": "3.0.0",
3549 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
3550 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
3551 | "dev": true,
3552 | "requires": {
3553 | "prepend-http": "^2.0.0"
3554 | }
3555 | },
3556 | "utf-8-validate": {
3557 | "version": "5.0.4",
3558 | "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.4.tgz",
3559 | "integrity": "sha512-MEF05cPSq3AwJ2C7B7sHAA6i53vONoZbMGX8My5auEVm6W+dJ2Jd/TZPyGJ5CH42V2XtbI5FD28HeHeqlPzZ3Q==",
3560 | "requires": {
3561 | "node-gyp-build": "^4.2.0"
3562 | }
3563 | },
3564 | "util-deprecate": {
3565 | "version": "1.0.2",
3566 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
3567 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
3568 | "dev": true
3569 | },
3570 | "validate-npm-package-license": {
3571 | "version": "3.0.4",
3572 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
3573 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
3574 | "dev": true,
3575 | "requires": {
3576 | "spdx-correct": "^3.0.0",
3577 | "spdx-expression-parse": "^3.0.0"
3578 | }
3579 | },
3580 | "vue-observe-visibility": {
3581 | "version": "1.0.0",
3582 | "resolved": "https://registry.npmjs.org/vue-observe-visibility/-/vue-observe-visibility-1.0.0.tgz",
3583 | "integrity": "sha512-s5TFh3s3h3Mhd3jaz3zGzkVHKHnc/0C/gNr30olO99+yw2hl3WBhK3ng3/f9OF+qkW4+l7GkmwfAzDAcY3lCFg=="
3584 | },
3585 | "websocket": {
3586 | "version": "1.0.33",
3587 | "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.33.tgz",
3588 | "integrity": "sha512-XwNqM2rN5eh3G2CUQE3OHZj+0xfdH42+OFK6LdC2yqiC0YU8e5UK0nYre220T0IyyN031V/XOvtHvXozvJYFWA==",
3589 | "requires": {
3590 | "bufferutil": "^4.0.1",
3591 | "debug": "^2.2.0",
3592 | "es5-ext": "^0.10.50",
3593 | "typedarray-to-buffer": "^3.1.5",
3594 | "utf-8-validate": "^5.0.2",
3595 | "yaeti": "^0.0.6"
3596 | },
3597 | "dependencies": {
3598 | "debug": {
3599 | "version": "2.6.9",
3600 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
3601 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
3602 | "requires": {
3603 | "ms": "2.0.0"
3604 | }
3605 | },
3606 | "ms": {
3607 | "version": "2.0.0",
3608 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
3609 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
3610 | }
3611 | }
3612 | },
3613 | "wrappy": {
3614 | "version": "1.0.2",
3615 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
3616 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
3617 | "dev": true
3618 | },
3619 | "xmlbuilder": {
3620 | "version": "9.0.7",
3621 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
3622 | "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
3623 | "dev": true
3624 | },
3625 | "xmldom": {
3626 | "version": "0.1.31",
3627 | "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz",
3628 | "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==",
3629 | "dev": true
3630 | },
3631 | "yaeti": {
3632 | "version": "0.0.6",
3633 | "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz",
3634 | "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc="
3635 | },
3636 | "yallist": {
3637 | "version": "4.0.0",
3638 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
3639 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
3640 | "dev": true
3641 | },
3642 | "yargs-parser": {
3643 | "version": "20.2.5",
3644 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.5.tgz",
3645 | "integrity": "sha512-jYRGS3zWy20NtDtK2kBgo/TlAoy5YUuhD9/LZ7z7W4j1Fdw2cqD0xEEclf8fxc8xjD6X5Qr+qQQwCEsP8iRiYg==",
3646 | "dev": true
3647 | },
3648 | "yauzl": {
3649 | "version": "2.10.0",
3650 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
3651 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
3652 | "dev": true,
3653 | "requires": {
3654 | "buffer-crc32": "~0.2.3",
3655 | "fd-slicer": "~1.1.0"
3656 | }
3657 | }
3658 | }
3659 | }
3660 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "heappy",
3 | "version": "0.1.0",
4 | "author": "gand3lf",
5 | "description": "Heappy: an heap editor",
6 | "main": "launch.js",
7 | "scripts": {
8 | "start": "electron --no-sandbox ."
9 | },
10 | "devDependencies": {
11 | "electron": "^11.2.3",
12 | "electron-packager": "^15.2.0"
13 | },
14 | "dependencies": {
15 | "lodash": "^4.17.21",
16 | "nocache": "^2.1.0",
17 | "websocket": "^1.0.33"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/server/heappy.py:
--------------------------------------------------------------------------------
1 | import gdb
2 | from websock import WebSocketServer
3 | import re
4 | import threading
5 | from collections import OrderedDict
6 |
7 | GEF_PROMPT = "gef\u27a4 "
8 | GEF_PROMPT_ON = "\001\033[1;32m\002{0:s}\001\033[0m\002".format(GEF_PROMPT)
9 | GEF_PROMPT_OFF = "\001\033[1;31m\002{0:s}\001\033[0m\002".format(GEF_PROMPT)
10 |
11 | class Heap():
12 | def __init__(self, pid):
13 | self.pid = pid
14 | vmmap = gdb.execute("vmmap", True, True).split("\n")[1:]
15 | heap_map = list(filter(lambda x: ("[heap]" in x), vmmap))
16 | tmp = [int(re.sub(r"\x1b\[\d*m", "", x),16) for x in heap_map[0].split(" ")[0:2]]
17 | self.bot, self.top = tmp[0], tmp[1]
18 | self.__read()
19 | self.data = self.__read()
20 | def __read(self):
21 | infer = gdb.inferiors()[0]
22 | data = infer.read_memory(self.bot, self.top - self.bot)
23 | return data
24 | def toDic(self):
25 | d = {}
26 | d["bot"] = self.bot
27 | d["top"] = self.top
28 | d["data"] = OrderedDict()
29 | for i in range(0, len(self.data), 8):
30 | entry = self.data[i:i+8]
31 | val = int.from_bytes(entry, byteorder='little')
32 | if val!=0:
33 | d["data"][i+self.bot] = str(val)
34 | return d
35 | def toChunkDic(self, onlyFreeChunks = False):
36 | d = {"bins":{}, "chunks":{} }
37 | addr_r = r"(?<=addr=)0x.+?(?=,)"
38 | for t in ["fast", "large", "small", "tcache", "unsorted"]:
39 | raw_string = gdb.execute("heap bins "+t, True, True)
40 | matches = re.findall(addr_r, raw_string)
41 | d["bins"][t] = [int(x,16) for x in matches]
42 |
43 | if(onlyFreeChunks == False):
44 | raw_string = gdb.execute("heap chunks", True, True)
45 | matches = re.findall(addr_r, raw_string)
46 | d["chunks"] = [int(x,16) for x in matches]
47 | else:
48 | d["chunks"] = []
49 | for t in d["bins"]:
50 | d["chunks"] += [k for k in d["bins"][t]]
51 | dd = {}
52 | for addr in d["chunks"]:
53 | dd[addr] = "allocated"
54 | for key in d["bins"]:
55 | if addr in d["bins"][key]:
56 | dd[addr] = key
57 | return dd
58 | def __str__(self):
59 | return str(self.pid)
60 |
61 | class Snapper():
62 | def __init__(self, ws, client, type_):
63 | self.ws = ws
64 | self.client = client
65 | self.type = type_
66 | def __call__(self):
67 | h = Heap(gdb.selected_inferior().pid)
68 | if(self.type == "heap"):
69 | heap_snap = h.toDic()
70 | msg = {"type":"heap","data":heap_snap}
71 | self.ws.send(self.client, json.dumps(msg))
72 | elif(self.type == "chunks"):
73 | chunk_snap = h.toChunkDic()
74 | msg = {"type":"chunks","data":chunk_snap}
75 | self.ws.send(self.client, json.dumps(msg))
76 | elif(self.type == "total"):
77 | heap_snap = h.toDic()
78 | chunk_snap = h.toChunkDic()
79 | msg = {"type":"total","heap":heap_snap,"chunks":chunk_snap}
80 | self.ws.send(self.client, json.dumps(msg))
81 |
82 | class Writer():
83 | def __init__(self, address, value):
84 | self.address = address
85 | self.value = value
86 | def __call__(self):
87 | gdb.execute("set {int*}0x" + self.address + " = 0x"+ self.value)
88 | log("Write " + self.value + " at address " + self.address)
89 |
90 | def log(message):
91 | gdb.write(message+"\n"+GEF_PROMPT_ON)
92 | gdb.execute("echo")
93 |
94 | def on_data_receive(client, data):
95 | global client_gui
96 | client_gui = client
97 | log("log:"+data)
98 | json_data = json.loads(data)
99 | if(json_data["method"] == "update"):
100 | addr = json_data["data"]["address"]
101 | val = json_data["data"]["value"]
102 | gdb.post_event(Writer(addr, val))
103 | elif(json_data["method"] == "snap_heap"):
104 | gdb.post_event(Snapper(my_server, client, "heap"))
105 | elif(json_data["method"] == "snap_chunks"):
106 | gdb.post_event(Snapper(my_server, client, "chunks"))
107 | elif(json_data["method"] == "snap"):
108 | gdb.post_event(Snapper(my_server, client, "total"))
109 |
110 | my_server = WebSocketServer(
111 | "127.0.0.1", # host.
112 | 9884, # port.
113 | on_data_receive = on_data_receive
114 | )
115 |
116 | client_gui = None
117 |
118 | # Update gui at each stop in gdb
119 | def stop_handler (event):
120 | if(client_gui == None):
121 | return
122 | gdb.post_event(Snapper(my_server, client_gui, "total"))
123 | print("event type: stop")
124 |
125 | gdb.events.stop.connect (stop_handler)
126 |
127 | def start_server():
128 | my_server.serve_forever()
129 |
130 | t = threading.Thread(target = start_server)
131 | t.daemon = True
132 | t.start()
133 |
--------------------------------------------------------------------------------