speechrecorderng 3.9.7 → 3.9.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +478 -12
  2. package/esm2022/lib/action/action.mjs +1 -1
  3. package/esm2022/lib/audio/array_audio_buffer.mjs +1 -1
  4. package/esm2022/lib/audio/array_audio_buffer_input_stream.mjs +1 -1
  5. package/esm2022/lib/audio/audio_data_holder.mjs +1 -1
  6. package/esm2022/lib/audio/audio_display.mjs +4 -4
  7. package/esm2022/lib/audio/audio_player.mjs +4 -4
  8. package/esm2022/lib/audio/capture/capture.mjs +1 -1
  9. package/esm2022/lib/audio/context.mjs +1 -1
  10. package/esm2022/lib/audio/dsp/level_measure.mjs +5 -4
  11. package/esm2022/lib/audio/impl/wavreader.mjs +1 -1
  12. package/esm2022/lib/audio/impl/wavwriter.mjs +1 -1
  13. package/esm2022/lib/audio/inddb_audio_buffer.mjs +1 -1
  14. package/esm2022/lib/audio/io/stream.mjs +1 -1
  15. package/esm2022/lib/audio/net_audio_buffer.mjs +1 -1
  16. package/esm2022/lib/audio/persistor.mjs +1 -1
  17. package/esm2022/lib/audio/playback/array_audio_buffer_source_node.mjs +1 -1
  18. package/esm2022/lib/audio/playback/audio_source_node.mjs +1 -1
  19. package/esm2022/lib/audio/playback/audio_source_worklet_module_loader.mjs +1 -1
  20. package/esm2022/lib/audio/playback/inddb_audio_buffer_source_node.mjs +1 -1
  21. package/esm2022/lib/audio/playback/net_audio_buffer_source_node.mjs +1 -1
  22. package/esm2022/lib/audio/playback/player.mjs +1 -1
  23. package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +7 -7
  24. package/esm2022/lib/audio/ui/audio_display_control.mjs +4 -4
  25. package/esm2022/lib/audio/ui/audio_display_scroll_pane.mjs +4 -4
  26. package/esm2022/lib/audio/ui/audiosignal.mjs +4 -4
  27. package/esm2022/lib/audio/ui/container.mjs +4 -4
  28. package/esm2022/lib/audio/ui/livelevel.mjs +4 -4
  29. package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +3 -3
  30. package/esm2022/lib/audio/ui/sonagram.mjs +4 -4
  31. package/esm2022/lib/db/inddb.mjs +4 -4
  32. package/esm2022/lib/dsp/utils.mjs +1 -1
  33. package/esm2022/lib/io/BinaryReader.mjs +1 -1
  34. package/esm2022/lib/io/BinaryWriter.mjs +1 -1
  35. package/esm2022/lib/io/stream.mjs +1 -1
  36. package/esm2022/lib/math/complex.mjs +1 -1
  37. package/esm2022/lib/math/dft.mjs +1 -1
  38. package/esm2022/lib/net/uploader.mjs +1 -1
  39. package/esm2022/lib/recorder_component.mjs +1 -1
  40. package/esm2022/lib/speechrecorder/project/project.mjs +1 -1
  41. package/esm2022/lib/speechrecorder/project/project.service.mjs +4 -4
  42. package/esm2022/lib/speechrecorder/recording.mjs +1 -1
  43. package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +1 -1
  44. package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +4 -4
  45. package/esm2022/lib/speechrecorder/script/script.mjs +1 -1
  46. package/esm2022/lib/speechrecorder/script/script.service.mjs +4 -4
  47. package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +7 -7
  48. package/esm2022/lib/speechrecorder/session/basicrecorder.mjs +1 -1
  49. package/esm2022/lib/speechrecorder/session/controlpanel.mjs +22 -22
  50. package/esm2022/lib/speechrecorder/session/item.mjs +1 -1
  51. package/esm2022/lib/speechrecorder/session/progress.mjs +4 -4
  52. package/esm2022/lib/speechrecorder/session/prompting.mjs +16 -16
  53. package/esm2022/lib/speechrecorder/session/recorder_combi_pane.mjs +3 -3
  54. package/esm2022/lib/speechrecorder/session/recording_file_cache.mjs +1 -1
  55. package/esm2022/lib/speechrecorder/session/recording_list.mjs +4 -4
  56. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +4 -4
  57. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +4 -4
  58. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +4 -4
  59. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +4 -4
  60. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file.mjs +1 -1
  61. package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +4 -4
  62. package/esm2022/lib/speechrecorder/session/session.service.mjs +4 -4
  63. package/esm2022/lib/speechrecorder/session/session_finished_dialog.mjs +3 -3
  64. package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +4 -4
  65. package/esm2022/lib/speechrecorder/session/warning_bar.mjs +4 -4
  66. package/esm2022/lib/speechrecorder/spruploader.mjs +4 -4
  67. package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +4 -4
  68. package/esm2022/lib/speechrecorderng.component.mjs +4 -4
  69. package/esm2022/lib/speechrecorderng.module.mjs +9 -13
  70. package/esm2022/lib/spr.config.mjs +3 -3
  71. package/esm2022/lib/spr.module.version.mjs +2 -2
  72. package/esm2022/lib/ui/canvas_layer_comp.mjs +4 -4
  73. package/esm2022/lib/ui/intersection-observer.directive.mjs +4 -4
  74. package/esm2022/lib/ui/message_dialog.mjs +3 -3
  75. package/esm2022/lib/ui/recordingitem_display.mjs +7 -7
  76. package/esm2022/lib/ui/responsive_component.mjs +3 -3
  77. package/esm2022/lib/utils/scrollIntoViewToBottom.mjs +4 -4
  78. package/esm2022/lib/utils/ua-parser.mjs +1 -1
  79. package/esm2022/lib/utils/utils.mjs +1 -1
  80. package/esm2022/lib/utils/wake_lock.mjs +1 -1
  81. package/fesm2022/speechrecorderng.mjs +171 -174
  82. package/fesm2022/speechrecorderng.mjs.map +1 -1
  83. package/lib/speechrecorderng.module.d.ts +11 -12
  84. package/lib/spr.module.version.d.ts +1 -1
  85. package/package.json +13 -13
package/README.md CHANGED
@@ -1,23 +1,489 @@
1
- # Speechrecorderng
1
+ # SpeechRecorderNg
2
2
 
3
+ A Speech Recording Tool implemented as an Angular 17 module.
3
4
 
4
- ## Code scaffolding
5
+ ## Migrate from version 2.x.x to 3.x.x
6
+ For backwards compatibility to server REST API v1 set the property `apiVersion: 1` in your environment file.
5
7
 
6
- Run `ng generate component component-name --project speechrecorderng` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project speechrecorderng`.
7
- > Note: Don't forget to add `--project speechrecorderng` or else it will be added to the default project in your `angular.json` file.
8
+ ## Integrate SpeechRecorder module to your web application
8
9
 
9
- ## Build
10
+ ### Install NPM package
11
+ Speechrecorder module is available as NPM package.
12
+ Add `"speechrecorderng": "3.9.8"` to the `dependencies` array property in the `package.json` file of your application. Run `npm install` to install the package.
13
+ ### Module integration
14
+ Add SpeechRecorderNg module to imports property of your `AppModule` annotation. The module main component `SpeechRecorder` should be activated by an Angular route.
10
15
 
11
- Run `ng build speechrecorderng` to build the project. The build artifacts will be stored in the `dist/` directory.
16
+ #### Example `app.module.ts`
17
+ ```
18
+ import { BrowserModule } from '@angular/platform-browser';
19
+ import { NgModule } from '@angular/core';
12
20
 
13
- ## Publishing
21
+ import { AppComponent } from './app.component';
22
+ import {SpeechrecorderngComponent, SpeechRecorderConfig, SpeechrecorderngModule} from 'speechrecorderng'
23
+ import {RouterModule, Routes} from '@angular/router';
24
+ import {BrowserAnimationsModule} from "@angular/platform-browser/animations";
25
+ import {MdButtonModule, MdDialogModule, MdIconModule, MdMenuModule, MdToolbarModule} from "@angular/material";
14
26
 
15
- After building your library with `ng build speechrecorderng`, go to the dist folder `cd dist/speechrecorderng` and run `npm publish`.
27
+ const MY_APP_ROUTES: Routes = [
28
+ { path: 'spr', component: SpeechrecorderngComponent}
29
+ ];
16
30
 
17
- ## Running unit tests
31
+ const SPR_CFG:SpeechRecorderConfig={
32
+ apiEndPoint: '/myapppath/api/v1'
33
+ }
18
34
 
19
- Run `ng test speechrecorderng` to execute the unit tests via [Karma](https://karma-runner.github.io).
35
+ @NgModule({
36
+ declarations: [
37
+ AppComponent
38
+ ],
39
+ imports: [
40
+ RouterModule.forRoot(MY_APP_ROUTES),BrowserModule,BrowserAnimationsModule,SpeechrecorderngModule.forRoot(SPR_CFG)
41
+ ],
42
+ providers: [],
43
+ bootstrap: [AppComponent]
44
+ })
45
+ export class AppModule { }
46
+ ```
20
47
 
21
- ## Further help
48
+ ### HTML/CSS integration
49
+ Speechrecorder is intended to run in a layout which always fits to the browser viewport without scrollbars. The subject should not be distracted from performing the recording session.
50
+ Therefore the module should be embedded in HTML page with 100% height and without padding or margin.
51
+ At least the CSS properties `margin-top`,`margin-bottom`,`padding-top`,`padding-bottom` should be zero and `height` should be `100%` for the DOM elements `html` and `body`
52
+ #### Example `index.html`
53
+ ```
54
+ <!doctype html>
55
+ <html lang="en" style="height:100%;margin:0;padding:0">
56
+ <head>
57
+ <meta charset="utf-8">
58
+ <title>My application</title>
59
+ <base href="/">
60
+ <meta name="viewport" content="width=device-width, initial-scale=1">
61
+ <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
62
+ </head>
63
+ <body style="height:100%;margin:0;padding:0">
64
+ <app-root class="mat-typography"></app-root>
65
+ </body>
66
+ </html>
67
+ ```
68
+ The SpeechRecorder component will appear in the Angular `router-outlet` element, if a route for the `SpeechRecorder` component is matched.
69
+
70
+ #### Example `app.component.html` with Material Design menubar
71
+ ```
72
+ <md-toolbar color="primary">
73
+
74
+ <button md-button [mdMenuTriggerFor]="menu">
75
+ <md-icon>menu</md-icon>
76
+ </button>
77
+ <md-menu #menu="mdMenu" yPosition="below" [overlapTrigger]="false">
78
+ <button md-menu-item [mdMenuTriggerFor]="helpMenu">Help</button>
79
+ <md-menu #helpMenu="mdMenu" xPosition="after" [overlapTrigger]="false">
80
+ <p>My application</p>
81
+ </md-menu>
82
+ </md-menu>
83
+ &nbsp;<span>My Application</span>
84
+ </md-toolbar>
85
+ <router-outlet></router-outlet>
86
+ ```
87
+
88
+ ### Deployment on the server
89
+ See [Angular Deployment/Server Configuration](https://angular.io/guide/deployment#server-configuration) for details.
22
90
 
23
- To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
91
+ To distinguish between the REST API base paths and the path for the web application the application should not be deployed to the top level directory of your Web-server.
92
+ Choose an arbitrary base path for the app e.g. `/wsr/ng/dist/` and build the app accordingly:
93
+ ```
94
+ ng build --base-href=/wsr/ng/dist/ --prod
95
+ ```
96
+ Copy the dist folder to ```/wsr/ng/``` on your Web-Server and setup the fallback configuration for this path in your Web-Server.
97
+
98
+
99
+
100
+ ### Server REST API
101
+
102
+ SpeechRecorder requires a HTTP server providing a REST API. The server code is not part of this package.
103
+ The package only contains a minimal file structure for testing. The files reside in `src/test`.
104
+
105
+ Versions 2.x.x of WebSpeechRecorderNg use the REST API version v1, Versions 3.x.x may use API version v1 and v2. Set environment property apiVersion accordingly (default: `apiVersion: 1`)
106
+
107
+ ## Configuration
108
+
109
+ By default the API Endpoint ({apiEndPoint}) is an empty string, the API is then expected to be relative to the base path of the application.
110
+
111
+
112
+ ## SpeechRecorder REST API description
113
+
114
+ ### Entity Project
115
+
116
+ REST Path: GET {apiEndPoint}project/{projectId}
117
+
118
+ Content-type: application/json
119
+
120
+ Example for Mono recordings:
121
+
122
+ ```
123
+ {
124
+ "name": "My project",
125
+ "audioFormat" : {
126
+ "channels": 1
127
+ }
128
+ }
129
+ ```
130
+ ### Entity Session
131
+
132
+ Current recording session data.
133
+
134
+ REST Path: GET {apiEndPoint}session/{sessionId}
135
+
136
+ Content-type: application/json
137
+
138
+ Properties:
139
+ * sessionId: number: Unique ID of the session
140
+ * script: number: Unique ID of recording script
141
+
142
+ Example:
143
+ ```
144
+ {
145
+ "sessionId": "2",
146
+ "project": "My project",
147
+ "script": "1245"
148
+ }
149
+ ```
150
+
151
+ During the session the application will try to update the session object on the server by HTTP PATCH requests.
152
+ The session properties status,loadedDate,startedTrainingDate,startedDate,completedDate and restartedDate
153
+ will be patched accordingly to the session events.
154
+
155
+ REST Path: PATCH {apiEndPoint}session/{sessionId}
156
+
157
+ Content-type: application/json
158
+
159
+ Properties (only changed properties are set):
160
+ * status: enum: "CREATED" | "LOADED" | "STARTED_TRAINING" | "STARTED" | "COMPLETED" status of the session
161
+ * loadedDate: string: date/time when session was loaded
162
+ * startedTrainingDate: string: date/time when a training section was started
163
+ * startedDate: string: date/time of recording start
164
+ * completedDate: string: date/time of session completed
165
+ * restartedDate: string: date/time of a session restart (continue)
166
+
167
+ For example when the session and script is loaded successfully, this PATCH request might be sent:
168
+ ```
169
+ {"status":"LOADED","loadedDate":"2020-03-25T12:52:12.616Z"}
170
+ ```
171
+
172
+ ### Entity Script
173
+
174
+ Recording script controls recording session procedure.
175
+
176
+ REST Path: GET {apiEndPoint}script/{scriptId}
177
+
178
+ Content-type: application/json
179
+
180
+ Properties:
181
+ * type: script: constant: Must be `"script"`
182
+ * scriptId: number: Unique ID of the script
183
+ * sections: array: Array of recording session sections
184
+
185
+ ### Embedded entity Section
186
+
187
+ Properties:
188
+ * name: Optional name of section
189
+ * mode: enum: `MANUAL`, `AUTOPROGRESS` or `AUTORECORDING`
190
+ * promptUnits: array: List of prompt units.
191
+ * training: boolean: Section is intended as training for the subject. The recording items of a training section are ignored when the completeness of the session (each prompt item is recorded) is checked.
192
+
193
+ ### Embedded entity Prompt Unit
194
+
195
+ Properties:
196
+
197
+ * recpromptId: Unique ID of this recording prompt
198
+ * itemcode: string: In the scope of the script unique identifier of an recording item
199
+ * mediaitems: array: List of media items for this prompt. Currently only a single mediaitem element in the array is supported.
200
+
201
+ ### Embedded entity Media item
202
+
203
+ Properties (supported properties only):
204
+ * text: string: Text to prompt
205
+
206
+ Example script:
207
+ ```
208
+ {
209
+ "type": "script",
210
+ "scriptId": "1245",
211
+ "sections": [
212
+ {
213
+ "mode": "MANUAL",
214
+ "name": "Introduction",
215
+ "groups": [
216
+ {
217
+ "promptItems": [
218
+ {
219
+ "itemcode": "I0",
220
+ "mediaitems": [
221
+ {
222
+ "text": "Willkommen bei der IPS-Sprachaufnahme!"
223
+ }
224
+ ],
225
+
226
+ },
227
+ {
228
+ "itemcode": "I1",
229
+ "mediaitems": [
230
+ {
231
+ "text": "Hier steht der Prompt; ein kurzer Text, den Sie lesen, eine Frage, die Sie beantworten oder ein Bild, das Sie beschreiben sollen."
232
+ }
233
+ ],
234
+
235
+ }
236
+ ]
237
+ }
238
+ ],
239
+ "training": false
240
+ },
241
+ {
242
+ "mode": "AUTOPROGRESS",
243
+ "name": "Recording Session",
244
+ "groups": [
245
+ {
246
+ "promptItems": [
247
+ {
248
+ "itemcode": "N0",
249
+ "recduration": 10000,
250
+ "mediaitems": [
251
+ {
252
+ "text": "What's your name?"
253
+ }
254
+ ],
255
+
256
+ },
257
+ {
258
+ "itemcode": "S0",
259
+ "mediaitems": [
260
+ {
261
+ "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
262
+ }
263
+ ],
264
+
265
+ }
266
+ ]
267
+ }
268
+ ]
269
+ }
270
+ ]
271
+ }
272
+
273
+ ```
274
+
275
+ ### Recording file
276
+
277
+ SpeechRecorder stores the recording in browser memory first. The recordings are then uploaded to the server as binary encoded WAVE files.
278
+
279
+ Path: POST {apiEndPoint}session/{sessionId}/recfile/{itemcode}
280
+
281
+ Content-Type: audio/wav
282
+
283
+ There might be multiple uploads for one recording item, when the subject repeats a recording. The server is responsible to handle this uploads.
284
+ The server should apply a unique identifier for each uploaded recording file. Subsequent recording uploads for the same itemcode should get different IDs and should be stored with a version number starting with zero.
285
+ A GET request to the URL should return the latest upload.
286
+
287
+ ### Start a recording session
288
+
289
+ The default routing path to start a recording session is `/spr/session/{sessionId}`. If you call this router link from your Angular application
290
+ WebSpeechRecorderNg should start and will try to load the session data from the REST API first.
291
+
292
+ ## GUI components to view and edit your recording database
293
+
294
+ ### Edit or view recording files
295
+ To edit a selection of a recording file call the router link:
296
+ `/spr/db/recordingfile/{recordingFileId}`
297
+
298
+ To only view a recording file:
299
+ `/spr/db/recordingfile/_view/{recordingFileId}`
300
+
301
+
302
+ The application will send in both modes the following requests to the REST API:
303
+
304
+ 1. Recording file meta data
305
+
306
+ Path: POST {apiEndPoint}recordingfile/{recordingFileId}
307
+
308
+ Accept: application/json
309
+
310
+ ```
311
+ {
312
+ "recordingFileId": "5678",
313
+ "session": 2,
314
+ "version": 0,
315
+ "recording": {
316
+ "itemcode": "N0",
317
+ "recduration": 10000,
318
+
319
+ "recinstructions": {
320
+ "recinstructions": "Please answer:"
321
+ },
322
+ "mediaitems": [
323
+ {
324
+ "annotationTemplate": false,
325
+ "autoplay": false,
326
+ "mimetype": "text/plain",
327
+ "text": "What's your name?"
328
+ }
329
+ ]
330
+ }
331
+ }
332
+ ```
333
+
334
+ 2. The recording file itself:
335
+
336
+ (Same URL however it requests an audio MIME type )
337
+
338
+ Path: POST {apiEndPoint}recordingfile/{recordingFileId}
339
+
340
+ Accept: audio/wav
341
+
342
+
343
+ and optional to navigate through recording files of the same session:
344
+
345
+ 3. Session data of this recording file
346
+
347
+ REST Path: GET {apiEndPoint}session/{sessionId}
348
+
349
+ Content-type: application/json
350
+
351
+
352
+ 4. The recording file list of the session if the session ID could be retrieved:
353
+
354
+ REST Path: GET {apiEndPoint}project/{projectId}/session/{sessionId}/recfile
355
+
356
+ Content-type: application/json
357
+
358
+
359
+ A server response might look like this:
360
+
361
+ ```
362
+ [ {
363
+ "recordingFileId": "1234",
364
+ "session": 2,
365
+ "date" : "2020-05-01T20:03:00.456+01:00",
366
+ "recording" : {
367
+ "mediaitems" : [ {
368
+ "annotationTemplate" : true,
369
+ "text" : "Heute ist schönes Frühlingswetter!"
370
+ } ],
371
+ "itemcode" : "demo_99",
372
+ "recduration" : 4000,
373
+ "recinstructions" : {
374
+ "recinstructions" : "Please read:"
375
+ }
376
+ }
377
+ },
378
+ {
379
+ "recordingFileId": "5678",
380
+ "session": 2,
381
+ "date" : "2020-06-10T20:04:44.123+01:00",
382
+ "version": 0,
383
+ "recording": {
384
+ "itemcode": "N0",
385
+ "recduration": 10000,
386
+
387
+ "recinstructions": {
388
+ "recinstructions": "Please answer:"
389
+ },
390
+ "mediaitems": [
391
+ {
392
+ "annotationTemplate": false,
393
+ "autoplay": false,
394
+ "mimetype": "text/plain",
395
+ "text": "What's your name?"
396
+ }
397
+ ]
398
+ }
399
+ },
400
+ {
401
+ "recordingFileId": "9999",
402
+ "session": 2,
403
+ "date" : "2020-06-15T 18:05:19.000+01:00",
404
+ "version": 1,
405
+ "recording": {
406
+ "itemcode": "N0",
407
+ "recduration": 10000,
408
+
409
+ "recinstructions": {
410
+ "recinstructions": "Please answer:"
411
+ },
412
+ "mediaitems": [
413
+ {
414
+ "annotationTemplate": false,
415
+ "autoplay": false,
416
+ "mimetype": "text/plain",
417
+ "text": "What's your name?"
418
+ }
419
+ ]
420
+ }
421
+ }
422
+ ]
423
+ ```
424
+
425
+ 5. Get the recording file:
426
+ Path: GET {apiEndPoint}project/{projectId}/session/{sessionId}/recfile
427
+ Accept: audio/wav
428
+
429
+ Content-type: audio/wav
430
+
431
+ API v2 extension:
432
+ The server must be able to deliver sections of a recording file as a valid WAVE file.
433
+ The section will be selected by the query parameters `startFrame` for the start position and `frameLength` for the length of the section.
434
+ The client will not send this queries with API v1.
435
+
436
+ Path: GET {apiEndPoint}project/{projectId}/session/{sessionId}/recfile?startFrame={startFrame}&frameLength={frameLength}
437
+ Accept: audio/wav
438
+
439
+ Content-type: audio/wav
440
+
441
+ 6. Save edit selection:
442
+
443
+ Path: PATCH {apiEndPoint}recordingfile/{recordingFileId}
444
+
445
+ Accept: application/json
446
+
447
+ Sends `editSampleRate`,`editStartFrame` and `editEndFrame` sample position properties of the selection, for example:
448
+
449
+ ```
450
+ {
451
+ "editSampleRate": 48000,
452
+ "editStartFrame":182360,
453
+ "editEndFrame":303934
454
+ }
455
+ ```
456
+
457
+ or null values to remove the edit selection:
458
+
459
+ ```
460
+ {
461
+ "editSampleRate": null,
462
+ "editStartFrame":null,
463
+ "editEndFrame":null
464
+ }
465
+ ```
466
+
467
+
468
+ ### Development server
469
+
470
+ Run `ng serve` for a development server.
471
+ Navigate to `http://localhost:4200/spr/session/2` start a demo recording session.
472
+ Or edit/view a test recording file ID 1234 from the demo database:
473
+ `http://localhost:4200/spr/db/recordingfile/1234`
474
+
475
+ The app will automatically reload if you change any of the source files.
476
+
477
+ ### Build
478
+
479
+ Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `-prod` flag for a production build.
480
+
481
+
482
+ ### Build module
483
+
484
+ Run `npm run build_module` to build the module. The build artifacts will be stored in the `dist/speechrecorderng` directory.
485
+
486
+
487
+ ### Clean dist
488
+
489
+ Remove folder `dist`.
@@ -70,4 +70,4 @@ export class Action {
70
70
  }
71
71
  }
72
72
  }
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2FjdGlvbi9hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0ksTUFBTSxPQUFPLFdBQVc7SUFDcEIsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxZQUFvQixTQUFjLElBQUk7UUFBbEIsV0FBTSxHQUFOLE1BQU0sQ0FBWTtJQUV0QyxDQUFDO0NBQ0o7QUFNRCxNQUFNLE9BQU8sTUFBTTtJQUNmLElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBU0QsWUFBWSxJQUFXLEVBQUMsUUFBYSxJQUFJO1FBTHpDLGNBQVMsR0FBQyxJQUFJLENBQUM7UUFDUCxjQUFTLEdBQTZCLElBQUksQ0FBQztRQUsvQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFDLEtBQUssQ0FBQTtRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUEwQixDQUFDO1FBQ3JELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUdELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsS0FBaUM7UUFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVVLGlCQUFpQixDQUFDLFFBQWMsSUFBSTtRQUMzQyxXQUFXO1FBQ1gsT0FBTyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsT0FBTyxDQUFDLFFBQWMsSUFBSTtRQUN0QixJQUFJLENBQUMsTUFBTSxHQUFDLEtBQUssQ0FBQTtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xDLElBQUksRUFBRSxHQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3RCO0lBQ0wsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLFFBQWdCO1FBQzFCLDZEQUE2RDtRQUM1RCxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDekIsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQy9CO1FBQ0QsZ0RBQWdEO1FBQ2hELHNDQUFzQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBc0IsRUFBRSxlQUF3QjtRQUN2RCxJQUFJLElBQUksRUFBRTtZQUNOLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QixJQUFJLGVBQWUsRUFBRTtvQkFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7d0JBQ3hDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDbkIsQ0FBQyxDQUFDLENBQUM7aUJBQ047YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFxQjtRQUMvQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDUixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM5QztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG4gICAgZXhwb3J0IGNsYXNzIEFjdGlvbkV2ZW50PFQ+IHtcclxuICAgICAgICBnZXQgdmFsdWUoKTogVHxudWxsIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF92YWx1ZTpUfG51bGw9bnVsbCkge1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGludGVyZmFjZSBBY3Rpb25FdmVudExpc3RlbmVyPFQ+e1xyXG4gICAgICAgIChhZTpBY3Rpb25FdmVudDxUPik6dm9pZDtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgY2xhc3MgQWN0aW9uPFQ+IHtcclxuICAgICAgICBnZXQgdmFsdWUoKTogVHxudWxsIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfbmFtZTpzdHJpbmc7XHJcbiAgICAgICAgcHJpdmF0ZSBfdmFsdWU6VHxudWxsO1xyXG4gICAgICAgIF9kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgIHByaXZhdGUgX29uQWN0aW9uOkFjdGlvbkV2ZW50TGlzdGVuZXI8VD58bnVsbD1udWxsO1xyXG4gICAgICAgIGxpc3RlbmVyczpBcnJheTxBY3Rpb25FdmVudExpc3RlbmVyPFQ+PjtcclxuICAgICAgICBwcml2YXRlIGNvbnRyb2xzOkhUTUxJbnB1dEVsZW1lbnRbXTtcclxuXHJcbiAgICAgICAgY29uc3RydWN0b3IobmFtZTpzdHJpbmcsdmFsdWU6VHxudWxsPW51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlPXZhbHVlXHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzID0gbmV3IEFycmF5PEFjdGlvbkV2ZW50TGlzdGVuZXI8VD4+KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbHMgPSBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBuYW1lKCk6c3RyaW5nIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgZ2V0IG9uQWN0aW9uKCk6QWN0aW9uRXZlbnRMaXN0ZW5lcjxUPnxudWxsIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29uQWN0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0IG9uQWN0aW9uKHZhbHVlOkFjdGlvbkV2ZW50TGlzdGVuZXI8VD58bnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vbkFjdGlvbiA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJvdGVjdGVkICBjcmVhdGVBY3Rpb25FdmVudCh2YWx1ZTogVHxudWxsPW51bGwpOkFjdGlvbkV2ZW50PFQ+IHtcclxuICAgICAgICAgICAgLy8gZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25FdmVudCh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwZXJmb3JtKHZhbHVlOiBUfG51bGw9bnVsbCk6dm9pZCB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlPXZhbHVlXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiB0aGlzLl9vbkFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGFlPXRoaXMuY3JlYXRlQWN0aW9uRXZlbnQodmFsdWUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkFjdGlvbihhZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldCBkaXNhYmxlZChkaXNhYmxlZDpib29sZWFuKSB7XHJcbiAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQWN0aW9uOiBcIit0aGlzLl9uYW1lK1wiIGRpc2FibGVkOiBcIitkaXNhYmxlZClcclxuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBkaXNhYmxlZDtcclxuICAgICAgICAgICAgZm9yIChsZXQgYyBvZiB0aGlzLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgICAgICAgICBjLmRpc2FibGVkID0gdGhpcy5fZGlzYWJsZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9sZXQgZGlzU3RyPXRoaXMuZGlzYWJsZWQ/XCJkaXNhYmxlZFwiOlwiZW5hYmxlZFwiO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuX25hbWUrXCI6IFwiK2Rpc1N0cik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXQgZGlzYWJsZWQoKTpib29sZWFuIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWRkQ29udHJvbChjdHJsOiBIVE1MSW5wdXRFbGVtZW50LCBhY3Rpb25FdmVudE5hbWU/OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgaWYgKGN0cmwpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2xzLmluZGV4T2YoY3RybCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3RybC5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9scy5wdXNoKGN0cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25FdmVudE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3RybC5hZGRFdmVudExpc3RlbmVyKGFjdGlvbkV2ZW50TmFtZSwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVtb3ZlQ29udHJvbChjdHJsOkhUTUxJbnB1dEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgaSA9IHRoaXMuY29udHJvbHMuaW5kZXhPZihjdHJsKTtcclxuICAgICAgICAgICAgaWYgKGkgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9scyA9IHRoaXMuY29udHJvbHMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuIl19
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2FjdGlvbi9hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0ksTUFBTSxPQUFPLFdBQVc7SUFDcEIsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxZQUFvQixTQUFjLElBQUk7UUFBbEIsV0FBTSxHQUFOLE1BQU0sQ0FBWTtJQUV0QyxDQUFDO0NBQ0o7QUFNRCxNQUFNLE9BQU8sTUFBTTtJQUNmLElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBU0QsWUFBWSxJQUFXLEVBQUMsUUFBYSxJQUFJO1FBTHpDLGNBQVMsR0FBQyxJQUFJLENBQUM7UUFDUCxjQUFTLEdBQTZCLElBQUksQ0FBQztRQUsvQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFDLEtBQUssQ0FBQTtRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUEwQixDQUFDO1FBQ3JELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUdELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsS0FBaUM7UUFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVVLGlCQUFpQixDQUFDLFFBQWMsSUFBSTtRQUMzQyxXQUFXO1FBQ1gsT0FBTyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsT0FBTyxDQUFDLFFBQWMsSUFBSTtRQUN0QixJQUFJLENBQUMsTUFBTSxHQUFDLEtBQUssQ0FBQTtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkMsSUFBSSxFQUFFLEdBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkIsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxRQUFnQjtRQUMxQiw2REFBNkQ7UUFDNUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDMUIsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxnREFBZ0Q7UUFDaEQsc0NBQXNDO0lBQzFDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFzQixFQUFFLGVBQXdCO1FBQ3ZELElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QixJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTt3QkFDeEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNuQixDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQXFCO1FBQy9CLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG4gICAgZXhwb3J0IGNsYXNzIEFjdGlvbkV2ZW50PFQ+IHtcclxuICAgICAgICBnZXQgdmFsdWUoKTogVHxudWxsIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF92YWx1ZTpUfG51bGw9bnVsbCkge1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGludGVyZmFjZSBBY3Rpb25FdmVudExpc3RlbmVyPFQ+e1xyXG4gICAgICAgIChhZTpBY3Rpb25FdmVudDxUPik6dm9pZDtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgY2xhc3MgQWN0aW9uPFQ+IHtcclxuICAgICAgICBnZXQgdmFsdWUoKTogVHxudWxsIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfbmFtZTpzdHJpbmc7XHJcbiAgICAgICAgcHJpdmF0ZSBfdmFsdWU6VHxudWxsO1xyXG4gICAgICAgIF9kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgIHByaXZhdGUgX29uQWN0aW9uOkFjdGlvbkV2ZW50TGlzdGVuZXI8VD58bnVsbD1udWxsO1xyXG4gICAgICAgIGxpc3RlbmVyczpBcnJheTxBY3Rpb25FdmVudExpc3RlbmVyPFQ+PjtcclxuICAgICAgICBwcml2YXRlIGNvbnRyb2xzOkhUTUxJbnB1dEVsZW1lbnRbXTtcclxuXHJcbiAgICAgICAgY29uc3RydWN0b3IobmFtZTpzdHJpbmcsdmFsdWU6VHxudWxsPW51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlPXZhbHVlXHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzID0gbmV3IEFycmF5PEFjdGlvbkV2ZW50TGlzdGVuZXI8VD4+KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbHMgPSBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBuYW1lKCk6c3RyaW5nIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgZ2V0IG9uQWN0aW9uKCk6QWN0aW9uRXZlbnRMaXN0ZW5lcjxUPnxudWxsIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29uQWN0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0IG9uQWN0aW9uKHZhbHVlOkFjdGlvbkV2ZW50TGlzdGVuZXI8VD58bnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vbkFjdGlvbiA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJvdGVjdGVkICBjcmVhdGVBY3Rpb25FdmVudCh2YWx1ZTogVHxudWxsPW51bGwpOkFjdGlvbkV2ZW50PFQ+IHtcclxuICAgICAgICAgICAgLy8gZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25FdmVudCh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwZXJmb3JtKHZhbHVlOiBUfG51bGw9bnVsbCk6dm9pZCB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlPXZhbHVlXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiB0aGlzLl9vbkFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGFlPXRoaXMuY3JlYXRlQWN0aW9uRXZlbnQodmFsdWUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkFjdGlvbihhZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldCBkaXNhYmxlZChkaXNhYmxlZDpib29sZWFuKSB7XHJcbiAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQWN0aW9uOiBcIit0aGlzLl9uYW1lK1wiIGRpc2FibGVkOiBcIitkaXNhYmxlZClcclxuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBkaXNhYmxlZDtcclxuICAgICAgICAgICAgZm9yIChsZXQgYyBvZiB0aGlzLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgICAgICAgICBjLmRpc2FibGVkID0gdGhpcy5fZGlzYWJsZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9sZXQgZGlzU3RyPXRoaXMuZGlzYWJsZWQ/XCJkaXNhYmxlZFwiOlwiZW5hYmxlZFwiO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuX25hbWUrXCI6IFwiK2Rpc1N0cik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXQgZGlzYWJsZWQoKTpib29sZWFuIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWRkQ29udHJvbChjdHJsOiBIVE1MSW5wdXRFbGVtZW50LCBhY3Rpb25FdmVudE5hbWU/OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgaWYgKGN0cmwpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2xzLmluZGV4T2YoY3RybCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3RybC5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9scy5wdXNoKGN0cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25FdmVudE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3RybC5hZGRFdmVudExpc3RlbmVyKGFjdGlvbkV2ZW50TmFtZSwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVtb3ZlQ29udHJvbChjdHJsOkhUTUxJbnB1dEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgaSA9IHRoaXMuY29udHJvbHMuaW5kZXhPZihjdHJsKTtcclxuICAgICAgICAgICAgaWYgKGkgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9scyA9IHRoaXMuY29udHJvbHMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuIl19
@@ -161,4 +161,4 @@ export class ArrayAudioBuffer extends BasicAudioSource {
161
161
  return new ArrayAudioBufferRandomAccessStream(this);
162
162
  }
163
163
  }
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlfYXVkaW9fYnVmZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2FycmF5X2F1ZGlvX2J1ZmZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQTBCLE1BQU0scUJBQXFCLENBQUM7QUFFOUUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RixPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUc5RSxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsZ0JBQWdCO0lBT3BELFlBQW9CLGFBQXFCLEVBQVUsV0FBbUIsRUFBVSxLQUFpQztRQUMvRyxLQUFLLEVBQUUsQ0FBQztRQURVLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUE0QjtRQUx6RyxnQkFBVyxHQUFDLENBQUMsQ0FBQztRQUNkLGNBQVMsR0FBUSxDQUFDLENBQUM7UUFDbkIsY0FBUyxHQUFRLENBQUMsQ0FBQztRQUNuQixZQUFPLEdBQUMsS0FBSyxDQUFDO1FBSXBCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRU8sY0FBYztRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxHQUFDLENBQUMsQ0FBQztRQUNuQixJQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBRTtZQUN0QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLEtBQUss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SUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxnQkFBZ0I7UUFDVixPQUFPLElBQUksVUFBVSxDQUFPLFVBQVUsQ0FBQyxFQUFFO1lBQ3pDLCtGQUErRjtZQUMvRix5QkFBeUI7WUFDekIseUJBQXlCO1lBQ3pCLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQixVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFMUIsQ0FBQyxDQUFDLENBQUM7SUFFTCxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLGFBQWEsR0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzNDLENBQUM7SUFFRCx1QkFBdUI7UUFDdEIsT0FBTyxJQUFJLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JELENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QmFzaWNBdWRpb1NvdXJjZSwgUmFuZG9tQWNjZXNzQXVkaW9TdHJlYW19IGZyb20gXCIuL2F1ZGlvX2RhdGFfaG9sZGVyXCI7XHJcbmltcG9ydCB7QXN5bmNGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbSwgRmxvYXQzMkFycmF5SW5wdXRTdHJlYW19IGZyb20gXCIuLi9pby9zdHJlYW1cIjtcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge0FycmF5QXVkaW9CdWZmZXJSYW5kb21BY2Nlc3NTdHJlYW19IGZyb20gXCIuL2FycmF5X2F1ZGlvX2J1ZmZlcl9yYW5kb21fYWNjZXNzX3N0cmVhbVwiO1xyXG5pbXBvcnQge0FycmF5QXVkaW9CdWZmZXJJbnB1dFN0cmVhbX0gZnJvbSBcIi4vYXJyYXlfYXVkaW9fYnVmZmVyX2lucHV0X3N0cmVhbVwiO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBBcnJheUF1ZGlvQnVmZmVyIGV4dGVuZHMgQmFzaWNBdWRpb1NvdXJjZXtcclxuXHJcbiAgcHJpdmF0ZSBfY2h1bmtDb3VudD0wO1xyXG4gIHByaXZhdGUgX2ZyYW1lTGVuOm51bWJlcj0wO1xyXG4gIHByaXZhdGUgX2R1cmF0aW9uOm51bWJlcj0wO1xyXG4gIHByaXZhdGUgX3NlYWxlZD1mYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY2hhbm5lbENvdW50OiBudW1iZXIsIHByaXZhdGUgX3NhbXBsZVJhdGU6IG51bWJlciwgcHJpdmF0ZSBfZGF0YTogQXJyYXk8QXJyYXk8RmxvYXQzMkFycmF5Pj4pIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUZyYW1lTGVuKCk7XHJcbiAgICB0aGlzLnJlYWR5KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZyYW1lTGVuKCl7XHJcbiAgICB0aGlzLl9mcmFtZUxlbj0wO1xyXG4gICAgdGhpcy5fY2h1bmtDb3VudD0wO1xyXG4gICAgaWYodGhpcy5fZGF0YS5sZW5ndGg+MCkge1xyXG4gICAgICBsZXQgY2gwRGF0YSA9IHRoaXMuZGF0YVswXTtcclxuICAgICAgZm9yIChsZXQgY2gwQ2hrIG9mIGNoMERhdGEpIHtcclxuICAgICAgICB0aGlzLl9jaHVua0NvdW50Kys7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVMZW4gKz0gY2gwQ2hrLmxlbmd0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZHVyYXRpb249dGhpcy5fZnJhbWVMZW4vdGhpcy5fc2FtcGxlUmF0ZTtcclxuICB9XHJcblxyXG4gIHNlYWwoKXtcclxuICAgIHRoaXMuX3NlYWxlZD10cnVlO1xyXG4gIH1cclxuXHJcbiAgc2VhbGVkKCk6Ym9vbGVhbntcclxuICAgIHJldHVybiB0aGlzLl9zZWFsZWQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUF1ZGlvQnVmZmVyKGF1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyLGNodW5rRnJhbWVTaXplPTgxOTIpOkFycmF5QXVkaW9CdWZmZXJ7XHJcbiAgICBsZXQgYWFiOkFycmF5QXVkaW9CdWZmZXI7XHJcbiAgICBsZXQgY2hzPWF1ZGlvQnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7XHJcbiAgICBsZXQgZnJhbWVMZW5ndGg9YXVkaW9CdWZmZXIubGVuZ3RoO1xyXG4gICAgLy9sZXQgY2h1bmtzU2l6ZT1NYXRoLmNlaWwoZnJhbWVMZW5ndGgvY2h1bmtGcmFtZVNpemUpO1xyXG4gICAgbGV0IGZyYW1lUG9zPTA7XHJcbiAgICBsZXQgZGF0YT1uZXcgQXJyYXk8QXJyYXk8RmxvYXQzMkFycmF5Pj4oY2hzKTtcclxuICAgIGZvcihsZXQgY2g9MDtjaDxjaHM7Y2grKykge1xyXG4gICAgICBkYXRhW2NoXT1uZXcgQXJyYXk8RmxvYXQzMkFycmF5PigpO1xyXG4gICAgfVxyXG4gICAgbGV0IHRvQ29weT1mcmFtZUxlbmd0aC1mcmFtZVBvcztcclxuICAgICAgd2hpbGUodG9Db3B5PjApe1xyXG5cclxuICAgICAgICBsZXQgdG9Db3B5Q2h1bms9Y2h1bmtGcmFtZVNpemU7XHJcbiAgICAgICAgaWYodG9Db3B5Q2h1bms+dG9Db3B5KXtcclxuICAgICAgICAgIC8vIGxhc3QgY2h1bmssIHRoZSByZXN0XHJcbiAgICAgICAgICB0b0NvcHlDaHVuaz10b0NvcHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvcihsZXQgY2g9MDtjaDxjaHM7Y2grKykge1xyXG4gICAgICAgICAgZGF0YVtjaF0ucHVzaChhdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YShjaCkuc2xpY2UoZnJhbWVQb3MsIGZyYW1lUG9zICsgdG9Db3B5Q2h1bmspKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnJhbWVQb3MrPXRvQ29weUNodW5rO1xyXG4gICAgICAgIHRvQ29weS09dG9Db3B5Q2h1bms7XHJcbiAgICAgIH1cclxuICAgIGFhYj1uZXcgQXJyYXlBdWRpb0J1ZmZlcihjaHMsYXVkaW9CdWZmZXIuc2FtcGxlUmF0ZSxkYXRhKTtcclxuICAgIHJldHVybiBhYWI7XHJcbiAgfVxyXG5cclxuICBhcHBlbmRBdWRpb0J1ZmZlcihhdWRpb0J1ZmZlcjpBdWRpb0J1ZmZlcil7XHJcbiAgICBsZXQgY2hzPWF1ZGlvQnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7XHJcbiAgICBpZih0aGlzLl9jaGFubmVsQ291bnQhPT0gY2hzKXtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYXBwZW5kIGF1ZGlvIGJ1ZmZlciB3aXRoICcrY2hzKycgY2hhbm5lbHMgdG8gdGhpcyBhcnJheSBhdWRpbyBidWZmZXIgd2l0aCAnK3RoaXMuX2NoYW5uZWxDb3VudCsnIGNoYW5uZWxzLiBOdW1iZXIgb2YgY2hhbm5lbHMgbXVzdCBtYXRjaC4nKTtcclxuICAgIH1cclxuICAgIGxldCBzcj1hdWRpb0J1ZmZlci5zYW1wbGVSYXRlO1xyXG4gICAgaWYoc3IhPT10aGlzLl9zYW1wbGVSYXRlKXtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYXBwZW5kIGF1ZGlvIGJ1ZmZlciB3aXRoIHNhbXBsZXJhdGUgJytzcisnIHRvIHRoaXMgYXJyYXkgYXVkaW8gYnVmZmVyIHdpdGggc2FtcGxlcmF0ZSAnK3RoaXMuX3NhbXBsZVJhdGUrJy4gU2FtcGxlcmF0ZXMgbXVzdCBtYXRjaC4nKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IobGV0IGNoPTA7Y2g8Y2hzO2NoKyspIHtcclxuICAgICAgbGV0IGNoQWJTbGljZT1hdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YShjaCkuc2xpY2UoKTtcclxuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQXBwZW5kIGF1ZGlvIGJ1ZmZlciBjaDogXCIrY2grXCI6IFwiK2NoQWJTbGljZS5sZW5ndGgpO1xyXG4gICAgICB0aGlzLl9kYXRhW2NoXS5wdXNoKGNoQWJTbGljZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZUZyYW1lTGVuKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0IGNoYW5uZWxDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb3VudDtcclxuICB9XHJcblxyXG4gIGZyYW1lcyhmcmFtZVBvczpudW1iZXIsZnJhbWVMZW46bnVtYmVyLGJ1ZnM6RmxvYXQzMkFycmF5W10pOm51bWJlcntcclxuXHJcbiAgICBsZXQgY2NGcmFtZVBvcz0wO1xyXG4gICAgbGV0IHRyZ0ZyYW1lUG9zPWZyYW1lUG9zO1xyXG4gICAgbGV0IGNoMERhdGEgPSB0aGlzLmRhdGFbMF07XHJcbiAgICBsZXQgY1Bvcz0wO1xyXG4gICAgbGV0IGZpbGxlZD0wO1xyXG4gICAgbGV0IGNpPTA7XHJcblxyXG4gICAgd2hpbGUoZmlsbGVkPGZyYW1lTGVuICYmIGNpPHRoaXMuX2NodW5rQ291bnQpe1xyXG4gICAgICAvLyBDdXJyZW50IGNodW5rXHJcbiAgICAgIGxldCBjYzA9Y2gwRGF0YVtjaV07XHJcbiAgICAgIGxldCBjY0xlbj1jYzAubGVuZ3RoO1xyXG4gICAgICBsZXQgY2NGcmFtZUVuZFBvcz1jY0ZyYW1lUG9zK2NjTGVuO1xyXG5cclxuICAgICAgaWYodHJnRnJhbWVQb3M+PWNjRnJhbWVQb3MgJiYgdHJnRnJhbWVQb3M8Y2NGcmFtZUVuZFBvcyl7XHJcbiAgICAgICAgbGV0IHRvQ3A9ZnJhbWVMZW4tZmlsbGVkO1xyXG4gICAgICAgIGNQb3M9dHJnRnJhbWVQb3MtY2NGcmFtZVBvcztcclxuICAgICAgICBpZihjUG9zK3RvQ3A+Y2NMZW4pe1xyXG4gICAgICAgICAgdG9DcD1jY0xlbi1jUG9zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IobGV0IGNoPTA7Y2g8YnVmcy5sZW5ndGg7Y2grKyl7XHJcbiAgICAgICAgICBsZXQgY2M9dGhpcy5kYXRhW2NoXVtjaV07XHJcblxyXG4gICAgICAgICAgZm9yKGxldCBpPTA7aTx0b0NwO2krKyl7XHJcbiAgICAgICAgICAgIGJ1ZnNbY2hdW2ZpbGxlZCtpXT1jY1tjUG9zK2ldO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmaWxsZWQrPXRvQ3A7XHJcbiAgICAgICAgdHJnRnJhbWVQb3MrPXRvQ3A7XHJcbiAgICAgICAgY1Bvcys9dG9DcDtcclxuICAgICAgICBjY0ZyYW1lUG9zKz10b0NwO1xyXG4gICAgICAgIGlmKGNQb3M+PWNjTGVuKXtcclxuICAgICAgICAgIGNjRnJhbWVQb3M9Y2NGcmFtZUVuZFBvcztcclxuICAgICAgICAgIGNQb3M9MDtcclxuICAgICAgICAgIGNpKys7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgLy8gbmV4dCBjaHVua1xyXG4gICAgICAgIGNjRnJhbWVQb3M9Y2NGcmFtZUVuZFBvcztcclxuICAgICAgICBjUG9zPTA7XHJcbiAgICAgICAgY2krKztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGxlZDtcclxuICB9XHJcblxyXG4gIGdldCBzYW1wbGVSYXRlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2FtcGxlUmF0ZTtcclxuICB9XHJcblxyXG4gIGdldCBmcmFtZUxlbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZyYW1lTGVuO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNodW5rQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jaHVua0NvdW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRhdGEoKTogQXJyYXk8QXJyYXk8RmxvYXQzMkFycmF5Pj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgfVxyXG5cclxuICBhc3luY0F1ZGlvSW5wdXRTdHJlYW0oKTogQXN5bmNGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbSB8IG51bGwge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBhdWRpb0lucHV0U3RyZWFtKCk6IEZsb2F0MzJBcnJheUlucHV0U3RyZWFtIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gbmV3IEFycmF5QXVkaW9CdWZmZXJJbnB1dFN0cmVhbSh0aGlzKTtcclxuICB9XHJcblxyXG4gIGdldCBkdXJhdGlvbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2R1cmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG51bWJlck9mQ2hhbm5lbHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ291bnQ7XHJcbiAgfVxyXG5cclxuICByZWxlYXNlQXVkaW9EYXRhKCk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTx2b2lkPihzdWJzY3JpYmVyID0+IHtcclxuICAgICAgICAvLyBObyBwZXJzaXN0ZW50IHJlc3BlY3RpdmVseSBhc3luYyBkZWxldGFibGUgc3RvcmFnZSwgdGhleSBzaG91bGQgYmUgZmluYWxseSByZW1vdmVkIGJ5IHRoZSBHQ1xyXG4gICAgICAgIC8vdGhpcy5fYXVkaW9CdWZmZXI9bnVsbDtcclxuICAgICAgICAvL3RoaXMuX2FycmF5QnVmZmVyPW51bGw7XHJcbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KCk7XHJcbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHNhbXBsZUNvdW50cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb3VudCp0aGlzLl9mcmFtZUxlbjtcclxuICB9XHJcblxyXG4gIHJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFtKCk6IFJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFtIHtcclxuICAgcmV0dXJuIG5ldyBBcnJheUF1ZGlvQnVmZmVyUmFuZG9tQWNjZXNzU3RyZWFtKHRoaXMpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlfYXVkaW9fYnVmZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2FycmF5X2F1ZGlvX2J1ZmZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQTBCLE1BQU0scUJBQXFCLENBQUM7QUFFOUUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RixPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUc5RSxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsZ0JBQWdCO0lBT3BELFlBQW9CLGFBQXFCLEVBQVUsV0FBbUIsRUFBVSxLQUFpQztRQUMvRyxLQUFLLEVBQUUsQ0FBQztRQURVLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUE0QjtRQUx6RyxnQkFBVyxHQUFDLENBQUMsQ0FBQztRQUNkLGNBQVMsR0FBUSxDQUFDLENBQUM7UUFDbkIsY0FBUyxHQUFRLENBQUMsQ0FBQztRQUNuQixZQUFPLEdBQUMsS0FBSyxDQUFDO1FBSXBCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRU8sY0FBYztRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxHQUFDLENBQUMsQ0FBQztRQUNuQixJQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0Is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LFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ1YsT0FBTyxJQUFJLFVBQVUsQ0FBTyxVQUFVLENBQUMsRUFBRTtZQUN6QywrRkFBK0Y7WUFDL0YseUJBQXlCO1lBQ3pCLHlCQUF5QjtZQUN6QixVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTFCLENBQUMsQ0FBQyxDQUFDO0lBRUwsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxhQUFhLEdBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsdUJBQXVCO1FBQ3RCLE9BQU8sSUFBSSxrQ0FBa0MsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Jhc2ljQXVkaW9Tb3VyY2UsIFJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFtfSBmcm9tIFwiLi9hdWRpb19kYXRhX2hvbGRlclwiO1xyXG5pbXBvcnQge0FzeW5jRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0sIEZsb2F0MzJBcnJheUlucHV0U3RyZWFtfSBmcm9tIFwiLi4vaW8vc3RyZWFtXCI7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtBcnJheUF1ZGlvQnVmZmVyUmFuZG9tQWNjZXNzU3RyZWFtfSBmcm9tIFwiLi9hcnJheV9hdWRpb19idWZmZXJfcmFuZG9tX2FjY2Vzc19zdHJlYW1cIjtcclxuaW1wb3J0IHtBcnJheUF1ZGlvQnVmZmVySW5wdXRTdHJlYW19IGZyb20gXCIuL2FycmF5X2F1ZGlvX2J1ZmZlcl9pbnB1dF9zdHJlYW1cIjtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQXJyYXlBdWRpb0J1ZmZlciBleHRlbmRzIEJhc2ljQXVkaW9Tb3VyY2V7XHJcblxyXG4gIHByaXZhdGUgX2NodW5rQ291bnQ9MDtcclxuICBwcml2YXRlIF9mcmFtZUxlbjpudW1iZXI9MDtcclxuICBwcml2YXRlIF9kdXJhdGlvbjpudW1iZXI9MDtcclxuICBwcml2YXRlIF9zZWFsZWQ9ZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NoYW5uZWxDb3VudDogbnVtYmVyLCBwcml2YXRlIF9zYW1wbGVSYXRlOiBudW1iZXIsIHByaXZhdGUgX2RhdGE6IEFycmF5PEFycmF5PEZsb2F0MzJBcnJheT4+KSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy51cGRhdGVGcmFtZUxlbigpO1xyXG4gICAgdGhpcy5yZWFkeSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVGcmFtZUxlbigpe1xyXG4gICAgdGhpcy5fZnJhbWVMZW49MDtcclxuICAgIHRoaXMuX2NodW5rQ291bnQ9MDtcclxuICAgIGlmKHRoaXMuX2RhdGEubGVuZ3RoPjApIHtcclxuICAgICAgbGV0IGNoMERhdGEgPSB0aGlzLmRhdGFbMF07XHJcbiAgICAgIGZvciAobGV0IGNoMENoayBvZiBjaDBEYXRhKSB7XHJcbiAgICAgICAgdGhpcy5fY2h1bmtDb3VudCsrO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lTGVuICs9IGNoMENoay5sZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX2R1cmF0aW9uPXRoaXMuX2ZyYW1lTGVuL3RoaXMuX3NhbXBsZVJhdGU7XHJcbiAgfVxyXG5cclxuICBzZWFsKCl7XHJcbiAgICB0aGlzLl9zZWFsZWQ9dHJ1ZTtcclxuICB9XHJcblxyXG4gIHNlYWxlZCgpOmJvb2xlYW57XHJcbiAgICByZXR1cm4gdGhpcy5fc2VhbGVkO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21BdWRpb0J1ZmZlcihhdWRpb0J1ZmZlcjpBdWRpb0J1ZmZlcixjaHVua0ZyYW1lU2l6ZT04MTkyKTpBcnJheUF1ZGlvQnVmZmVye1xyXG4gICAgbGV0IGFhYjpBcnJheUF1ZGlvQnVmZmVyO1xyXG4gICAgbGV0IGNocz1hdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xyXG4gICAgbGV0IGZyYW1lTGVuZ3RoPWF1ZGlvQnVmZmVyLmxlbmd0aDtcclxuICAgIC8vbGV0IGNodW5rc1NpemU9TWF0aC5jZWlsKGZyYW1lTGVuZ3RoL2NodW5rRnJhbWVTaXplKTtcclxuICAgIGxldCBmcmFtZVBvcz0wO1xyXG4gICAgbGV0IGRhdGE9bmV3IEFycmF5PEFycmF5PEZsb2F0MzJBcnJheT4+KGNocyk7XHJcbiAgICBmb3IobGV0IGNoPTA7Y2g8Y2hzO2NoKyspIHtcclxuICAgICAgZGF0YVtjaF09bmV3IEFycmF5PEZsb2F0MzJBcnJheT4oKTtcclxuICAgIH1cclxuICAgIGxldCB0b0NvcHk9ZnJhbWVMZW5ndGgtZnJhbWVQb3M7XHJcbiAgICAgIHdoaWxlKHRvQ29weT4wKXtcclxuXHJcbiAgICAgICAgbGV0IHRvQ29weUNodW5rPWNodW5rRnJhbWVTaXplO1xyXG4gICAgICAgIGlmKHRvQ29weUNodW5rPnRvQ29weSl7XHJcbiAgICAgICAgICAvLyBsYXN0IGNodW5rLCB0aGUgcmVzdFxyXG4gICAgICAgICAgdG9Db3B5Q2h1bms9dG9Db3B5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IobGV0IGNoPTA7Y2g8Y2hzO2NoKyspIHtcclxuICAgICAgICAgIGRhdGFbY2hdLnB1c2goYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpLnNsaWNlKGZyYW1lUG9zLCBmcmFtZVBvcyArIHRvQ29weUNodW5rKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZyYW1lUG9zKz10b0NvcHlDaHVuaztcclxuICAgICAgICB0b0NvcHktPXRvQ29weUNodW5rO1xyXG4gICAgICB9XHJcbiAgICBhYWI9bmV3IEFycmF5QXVkaW9CdWZmZXIoY2hzLGF1ZGlvQnVmZmVyLnNhbXBsZVJhdGUsZGF0YSk7XHJcbiAgICByZXR1cm4gYWFiO1xyXG4gIH1cclxuXHJcbiAgYXBwZW5kQXVkaW9CdWZmZXIoYXVkaW9CdWZmZXI6QXVkaW9CdWZmZXIpe1xyXG4gICAgbGV0IGNocz1hdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xyXG4gICAgaWYodGhpcy5fY2hhbm5lbENvdW50IT09IGNocyl7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFwcGVuZCBhdWRpbyBidWZmZXIgd2l0aCAnK2NocysnIGNoYW5uZWxzIHRvIHRoaXMgYXJyYXkgYXVkaW8gYnVmZmVyIHdpdGggJyt0aGlzLl9jaGFubmVsQ291bnQrJyBjaGFubmVscy4gTnVtYmVyIG9mIGNoYW5uZWxzIG11c3QgbWF0Y2guJyk7XHJcbiAgICB9XHJcbiAgICBsZXQgc3I9YXVkaW9CdWZmZXIuc2FtcGxlUmF0ZTtcclxuICAgIGlmKHNyIT09dGhpcy5fc2FtcGxlUmF0ZSl7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFwcGVuZCBhdWRpbyBidWZmZXIgd2l0aCBzYW1wbGVyYXRlICcrc3IrJyB0byB0aGlzIGFycmF5IGF1ZGlvIGJ1ZmZlciB3aXRoIHNhbXBsZXJhdGUgJyt0aGlzLl9zYW1wbGVSYXRlKycuIFNhbXBsZXJhdGVzIG11c3QgbWF0Y2guJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yKGxldCBjaD0wO2NoPGNocztjaCsrKSB7XHJcbiAgICAgIGxldCBjaEFiU2xpY2U9YXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpLnNsaWNlKCk7XHJcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkFwcGVuZCBhdWRpbyBidWZmZXIgY2g6IFwiK2NoK1wiOiBcIitjaEFiU2xpY2UubGVuZ3RoKTtcclxuICAgICAgdGhpcy5fZGF0YVtjaF0ucHVzaChjaEFiU2xpY2UpO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVGcmFtZUxlbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldCBjaGFubmVsQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ291bnQ7XHJcbiAgfVxyXG5cclxuICBmcmFtZXMoZnJhbWVQb3M6bnVtYmVyLGZyYW1lTGVuOm51bWJlcixidWZzOkZsb2F0MzJBcnJheVtdKTpudW1iZXJ7XHJcblxyXG4gICAgbGV0IGNjRnJhbWVQb3M9MDtcclxuICAgIGxldCB0cmdGcmFtZVBvcz1mcmFtZVBvcztcclxuICAgIGxldCBjaDBEYXRhID0gdGhpcy5kYXRhWzBdO1xyXG4gICAgbGV0IGNQb3M9MDtcclxuICAgIGxldCBmaWxsZWQ9MDtcclxuICAgIGxldCBjaT0wO1xyXG5cclxuICAgIHdoaWxlKGZpbGxlZDxmcmFtZUxlbiAmJiBjaTx0aGlzLl9jaHVua0NvdW50KXtcclxuICAgICAgLy8gQ3VycmVudCBjaHVua1xyXG4gICAgICBsZXQgY2MwPWNoMERhdGFbY2ldO1xyXG4gICAgICBsZXQgY2NMZW49Y2MwLmxlbmd0aDtcclxuICAgICAgbGV0IGNjRnJhbWVFbmRQb3M9Y2NGcmFtZVBvcytjY0xlbjtcclxuXHJcbiAgICAgIGlmKHRyZ0ZyYW1lUG9zPj1jY0ZyYW1lUG9zICYmIHRyZ0ZyYW1lUG9zPGNjRnJhbWVFbmRQb3Mpe1xyXG4gICAgICAgIGxldCB0b0NwPWZyYW1lTGVuLWZpbGxlZDtcclxuICAgICAgICBjUG9zPXRyZ0ZyYW1lUG9zLWNjRnJhbWVQb3M7XHJcbiAgICAgICAgaWYoY1Bvcyt0b0NwPmNjTGVuKXtcclxuICAgICAgICAgIHRvQ3A9Y2NMZW4tY1BvcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yKGxldCBjaD0wO2NoPGJ1ZnMubGVuZ3RoO2NoKyspe1xyXG4gICAgICAgICAgbGV0IGNjPXRoaXMuZGF0YVtjaF1bY2ldO1xyXG5cclxuICAgICAgICAgIGZvcihsZXQgaT0wO2k8dG9DcDtpKyspe1xyXG4gICAgICAgICAgICBidWZzW2NoXVtmaWxsZWQraV09Y2NbY1BvcytpXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZmlsbGVkKz10b0NwO1xyXG4gICAgICAgIHRyZ0ZyYW1lUG9zKz10b0NwO1xyXG4gICAgICAgIGNQb3MrPXRvQ3A7XHJcbiAgICAgICAgY2NGcmFtZVBvcys9dG9DcDtcclxuICAgICAgICBpZihjUG9zPj1jY0xlbil7XHJcbiAgICAgICAgICBjY0ZyYW1lUG9zPWNjRnJhbWVFbmRQb3M7XHJcbiAgICAgICAgICBjUG9zPTA7XHJcbiAgICAgICAgICBjaSsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIC8vIG5leHQgY2h1bmtcclxuICAgICAgICBjY0ZyYW1lUG9zPWNjRnJhbWVFbmRQb3M7XHJcbiAgICAgICAgY1Bvcz0wO1xyXG4gICAgICAgIGNpKys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmaWxsZWQ7XHJcbiAgfVxyXG5cclxuICBnZXQgc2FtcGxlUmF0ZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NhbXBsZVJhdGU7XHJcbiAgfVxyXG5cclxuICBnZXQgZnJhbWVMZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9mcmFtZUxlbjtcclxuICB9XHJcblxyXG4gIGdldCBjaHVua0NvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2h1bmtDb3VudDtcclxuICB9XHJcblxyXG4gIGdldCBkYXRhKCk6IEFycmF5PEFycmF5PEZsb2F0MzJBcnJheT4+IHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gIH1cclxuXHJcbiAgYXN5bmNBdWRpb0lucHV0U3RyZWFtKCk6IEFzeW5jRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gfCBudWxsIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgYXVkaW9JbnB1dFN0cmVhbSgpOiBGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbSB8IG51bGwge1xyXG4gICAgcmV0dXJuIG5ldyBBcnJheUF1ZGlvQnVmZmVySW5wdXRTdHJlYW0odGhpcyk7XHJcbiAgfVxyXG5cclxuICBnZXQgZHVyYXRpb24oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9kdXJhdGlvbjtcclxuICB9XHJcblxyXG4gIGdldCBudW1iZXJPZkNoYW5uZWxzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvdW50O1xyXG4gIH1cclxuXHJcbiAgcmVsZWFzZUF1ZGlvRGF0YSgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8dm9pZD4oc3Vic2NyaWJlciA9PiB7XHJcbiAgICAgICAgLy8gTm8gcGVyc2lzdGVudCByZXNwZWN0aXZlbHkgYXN5bmMgZGVsZXRhYmxlIHN0b3JhZ2UsIHRoZXkgc2hvdWxkIGJlIGZpbmFsbHkgcmVtb3ZlZCBieSB0aGUgR0NcclxuICAgICAgICAvL3RoaXMuX2F1ZGlvQnVmZmVyPW51bGw7XHJcbiAgICAgICAgLy90aGlzLl9hcnJheUJ1ZmZlcj1udWxsO1xyXG4gICAgICAgIHN1YnNjcmliZXIubmV4dCgpO1xyXG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBzYW1wbGVDb3VudHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ291bnQqdGhpcy5fZnJhbWVMZW47XHJcbiAgfVxyXG5cclxuICByYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSgpOiBSYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSB7XHJcbiAgIHJldHVybiBuZXcgQXJyYXlBdWRpb0J1ZmZlclJhbmRvbUFjY2Vzc1N0cmVhbSh0aGlzKTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -83,4 +83,4 @@ export class ArrayAudioBufferInputStream {
83
83
  return this._framePos;
84
84
  }
85
85
  }
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlfYXVkaW9fYnVmZmVyX2lucHV0X3N0cmVhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9hcnJheV9hdWRpb19idWZmZXJfaW5wdXRfc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTywyQkFBMkI7SUFNdEMsWUFBb0IsZ0JBQWlDO1FBQWpDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFKN0MsY0FBUyxHQUFDLENBQUMsQ0FBQztRQUNaLGtCQUFhLEdBQUMsQ0FBQyxDQUFDO1FBQ2hCLGFBQVEsR0FBQyxDQUFDLENBQUM7UUFDWCxRQUFHLEdBQUMsS0FBSyxDQUFDO1FBRWhCLGtHQUFrRztJQUNwRyxDQUFDO0lBRUQsS0FBSztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsQ0FBUTtRQUNqQixJQUFJLE1BQU0sR0FBQyxDQUFDLENBQUM7UUFDYixJQUFHLElBQUksQ0FBQyxRQUFRLElBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRTtZQUNsRCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztZQUNoQixJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2QsTUFBTSxLQUFLLENBQUMsa0NBQWtDLEdBQUcsTUFBTSxHQUFHLFVBQVUsQ0FBQyxDQUFBO2FBQ3RFO1NBQ0Y7YUFBSztZQUNKLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdELElBQUksWUFBWSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDcEMsSUFBSSxnQkFBZ0IsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN6RCxJQUFJLENBQUMsSUFBSSxnQkFBZ0IsRUFBRTtnQkFDekIs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LENBQUMsUUFBUSxDQUFDLENBQUM7U0FDcEk7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFJRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbX0gZnJvbSBcIi4uL2lvL3N0cmVhbVwiO1xyXG5pbXBvcnQge0FycmF5QXVkaW9CdWZmZXJ9IGZyb20gXCIuL2FycmF5X2F1ZGlvX2J1ZmZlclwiO1xyXG5leHBvcnQgY2xhc3MgQXJyYXlBdWRpb0J1ZmZlcklucHV0U3RyZWFtIGltcGxlbWVudHMgRmxvYXQzMkFycmF5SW5wdXRTdHJlYW17XHJcblxyXG4gIHByaXZhdGUgX2ZyYW1lUG9zPTA7XHJcbiAgcHJpdmF0ZSBjaHVua0ZyYW1lUG9zPTA7XHJcbiAgcHJpdmF0ZSBjaHVua0lkeD0wO1xyXG4gIHByaXZhdGUgZW9kPWZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXJyYXlBdWRpb0J1ZmZlcjpBcnJheUF1ZGlvQnVmZmVyKSB7XHJcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJBcnJheSBhdWRpbyBpbnB1dCBzdHJlYW0gYXJyYXkgYXVkaW8gYnVmZmVyIGZyYW1lczogXCIrYXJyYXlBdWRpb0J1ZmZlci5mcmFtZUxlbik7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIHNraXBGcmFtZXMobjpudW1iZXIpe1xyXG4gICAgbGV0IHRvU2tpcD1uO1xyXG4gICAgaWYodGhpcy5jaHVua0lkeD49dGhpcy5hcnJheUF1ZGlvQnVmZmVyLmNodW5rQ291bnQpIHtcclxuICAgICAgdGhpcy5lb2QgPSB0cnVlO1xyXG4gICAgICBpZiAodG9Ta2lwID4gMCkge1xyXG4gICAgICAgIHRocm93IEVycm9yKCdTa2lwIG91dCBvZiBib3VuZHM6IENhbm5vdCBza2lwICcgKyB0b1NraXAgKyAnIGZyYW1lcy4nKVxyXG4gICAgICB9XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIGxldCBjaHVua0J1ZjAgPSB0aGlzLmFycmF5QXVkaW9CdWZmZXIuZGF0YVswXVt0aGlzLmNodW5rSWR4XTtcclxuICAgICAgbGV0IGNodW5rQnVmc0xlbiA9IGNodW5rQnVmMC5sZW5ndGg7XHJcbiAgICAgIGxldCBjdXJyQnVmU2tpcHBhYmxlID0gY2h1bmtCdWZzTGVuIC0gdGhpcy5jaHVua0ZyYW1lUG9zO1xyXG4gICAgICBpZiAobiA+PSBjdXJyQnVmU2tpcHBhYmxlKSB7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVQb3MgKz0gY3VyckJ1ZlNraXBwYWJsZTtcclxuICAgICAgICB0b1NraXAgLT0gY3VyckJ1ZlNraXBwYWJsZTtcclxuICAgICAgICB0aGlzLmNodW5rSWR4KytcclxuICAgICAgICB0aGlzLmNodW5rRnJhbWVQb3MgPSAwO1xyXG4gICAgICAgIGlmICh0aGlzLmNodW5rSWR4IDwgdGhpcy5hcnJheUF1ZGlvQnVmZmVyLmNodW5rQ291bnQpIHtcclxuICAgICAgICAgIHRoaXMuc2tpcEZyYW1lcyh0b1NraXApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodG9Ta2lwID4gMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcignU2tpcCBvdXQgb2YgYm91bmRzOiBDYW5ub3Qgc2tpcCAnICsgdG9Ta2lwICsgJyBmcmFtZXMuJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdG9Ta2lwIC09IG47XHJcbiAgICAgICAgdGhpcy5jaHVua0ZyYW1lUG9zICs9IG47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlYWQoYnVmZmVyczogQXJyYXk8RmxvYXQzMkFycmF5Pik6IG51bWJlciB7XHJcbiAgICBsZXQgcmVhZD0wO1xyXG5cclxuICAgIGxldCB0b1JlYWQ9YnVmZmVyc1swXS5sZW5ndGg7XHJcblxyXG4gICAgICB3aGlsZShyZWFkPHRvUmVhZCAmJiAhdGhpcy5lb2Qpe1xyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNodW5rIFwiK3RoaXMuY2h1bmtJZHgrXCIgb2YgXCIrdGhpcy5hcnJheUF1ZGlvQnVmZmVyLmNodW5rQ291bnQrXCIgY2h1bmtzLlwiKVxyXG4gICAgICAgIGlmKHRoaXMuY2h1bmtJZHg+PXRoaXMuYXJyYXlBdWRpb0J1ZmZlci5jaHVua0NvdW50KSB7XHJcbiAgICAgICAgICB0aGlzLmVvZCA9IHRydWU7XHJcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJBcnJheSBhdWRpbyBpbnB1dCBzdHJlYW0gZW5kIG9mIGRhdGEgcmVhZCBmcmFtZXM6IFwiK3RoaXMuZnJhbWVQb3MpO1xyXG4gICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgIGxldCBjaHVua0J1ZjAgPSB0aGlzLmFycmF5QXVkaW9CdWZmZXIuZGF0YVswXVt0aGlzLmNodW5rSWR4XTtcclxuICAgICAgICAgIGxldCBjaHVua0J1ZnNMZW4gPSBjaHVua0J1ZjAubGVuZ3RoO1xyXG4gICAgICAgICAgY29uc3QgY2h1bmtCdWZBdmFpbCA9IGNodW5rQnVmc0xlbiAtIHRoaXMuY2h1bmtGcmFtZVBvcztcclxuICAgICAgICAgIGxldCByID0gY2h1bmtCdWZBdmFpbDtcclxuICAgICAgICAgIGlmIChyID4gdG9SZWFkIC0gcmVhZCkge1xyXG4gICAgICAgICAgICByID0gdG9SZWFkIC0gcmVhZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBidWZmZXJzLmxlbmd0aDsgY2grKykge1xyXG4gICAgICAgICAgICBsZXQgY2hDaHVua0J1Zj10aGlzLmFycmF5QXVkaW9CdWZmZXIuZGF0YVtjaF1bdGhpcy5jaHVua0lkeF07XHJcbiAgICAgICAgICAgIGZvciAobGV0IGJpID0gMDsgYmkgPCByOyBiaSsrKSB7XHJcbiAgICAgICAgICAgICAgYnVmZmVyc1tjaF1bcmVhZCArIGJpXSA9IGNoQ2h1bmtCdWZbdGhpcy5jaHVua0ZyYW1lUG9zICsgYmldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZWFkICs9IHI7XHJcblxyXG4gICAgICAgICAgdGhpcy5jaHVua0ZyYW1lUG9zICs9IHI7XHJcbiAgICAgICAgICBpZiAodGhpcy5jaHVua0ZyYW1lUG9zID49IGNodW5rQnVmc0xlbikge1xyXG4gICAgICAgICAgICB0aGlzLmNodW5rSWR4Kys7XHJcbiAgICAgICAgICAgIHRoaXMuY2h1bmtGcmFtZVBvcyA9IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB0aGlzLl9mcmFtZVBvcys9cmVhZDtcclxuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiUmVhZDogXCIrcmVhZCtcIiwgZnJhbWUgcG9zOiBcIit0aGlzLmZyYW1lUG9zKVxyXG4gICAgaWYodGhpcy5fZnJhbWVQb3M+dGhpcy5hcnJheUF1ZGlvQnVmZmVyLmZyYW1lTGVuKXtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkFycmF5IGF1ZGlvIGlucHV0IHN0cmVhbSBmcmFtZSBwb3M6IFwiK3RoaXMuX2ZyYW1lUG9zK1wiIGdyZWF0ZXIgdGhlbiBmcmFtZSBsZW5ndGg6IFwiK3RoaXMuYXJyYXlBdWRpb0J1ZmZlci5mcmFtZUxlbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVhZDtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgZ2V0IGZyYW1lUG9zKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnJhbWVQb3M7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlfYXVkaW9fYnVmZmVyX2lucHV0X3N0cmVhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9hcnJheV9hdWRpb19idWZmZXJfaW5wdXRfc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTywyQkFBMkI7SUFNdEMsWUFBb0IsZ0JBQWlDO1FBQWpDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFKN0MsY0FBUyxHQUFDLENBQUMsQ0FBQztRQUNaLGtCQUFhLEdBQUMsQ0FBQyxDQUFDO1FBQ2hCLGFBQVEsR0FBQyxDQUFDLENBQUM7UUFDWCxRQUFHLEdBQUMsS0FBSyxDQUFDO1FBRWhCLGtHQUFrRztJQUNwRyxDQUFDO0lBRUQsS0FBSztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsQ0FBUTtRQUNqQixJQUFJLE1BQU0sR0FBQyxDQUFDLENBQUM7UUFDYixJQUFHLElBQUksQ0FBQyxRQUFRLElBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNmLE1BQU0sS0FBSyxDQUFDLGtDQUFrQyxHQUFHLE1BQU0sR0FBRyxVQUFVLENBQUMsQ0FBQTtZQUN2RSxDQUFDO1FBQ0gsQ0FBQzthQUFLLENBQUM7WUFDTCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3RCxJQUFJLFlBQVksR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ3BDLElBQUksZ0JBQWdCLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDekQsSUFBSSxDQUFD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O1FBQzlELElBQUcsSUFBSSxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFDLENBQUM7WUFDaEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsR0FBQyxJQUFJLENBQUMsU0FBUyxHQUFDLDhCQUE4QixHQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNySSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBSUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RmxvYXQzMkFycmF5SW5wdXRTdHJlYW19IGZyb20gXCIuLi9pby9zdHJlYW1cIjtcclxuaW1wb3J0IHtBcnJheUF1ZGlvQnVmZmVyfSBmcm9tIFwiLi9hcnJheV9hdWRpb19idWZmZXJcIjtcclxuZXhwb3J0IGNsYXNzIEFycmF5QXVkaW9CdWZmZXJJbnB1dFN0cmVhbSBpbXBsZW1lbnRzIEZsb2F0MzJBcnJheUlucHV0U3RyZWFte1xyXG5cclxuICBwcml2YXRlIF9mcmFtZVBvcz0wO1xyXG4gIHByaXZhdGUgY2h1bmtGcmFtZVBvcz0wO1xyXG4gIHByaXZhdGUgY2h1bmtJZHg9MDtcclxuICBwcml2YXRlIGVvZD1mYWxzZTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFycmF5QXVkaW9CdWZmZXI6QXJyYXlBdWRpb0J1ZmZlcikge1xyXG4gICAgLy9jb25zb2xlLmRlYnVnKFwiQXJyYXkgYXVkaW8gaW5wdXQgc3RyZWFtIGFycmF5IGF1ZGlvIGJ1ZmZlciBmcmFtZXM6IFwiK2FycmF5QXVkaW9CdWZmZXIuZnJhbWVMZW4pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBza2lwRnJhbWVzKG46bnVtYmVyKXtcclxuICAgIGxldCB0b1NraXA9bjtcclxuICAgIGlmKHRoaXMuY2h1bmtJZHg+PXRoaXMuYXJyYXlBdWRpb0J1ZmZlci5jaHVua0NvdW50KSB7XHJcbiAgICAgIHRoaXMuZW9kID0gdHJ1ZTtcclxuICAgICAgaWYgKHRvU2tpcCA+IDApIHtcclxuICAgICAgICB0aHJvdyBFcnJvcignU2tpcCBvdXQgb2YgYm91bmRzOiBDYW5ub3Qgc2tpcCAnICsgdG9Ta2lwICsgJyBmcmFtZXMuJylcclxuICAgICAgfVxyXG4gICAgfWVsc2Uge1xyXG4gICAgICBsZXQgY2h1bmtCdWYwID0gdGhpcy5hcnJheUF1ZGlvQnVmZmVyLmRhdGFbMF1bdGhpcy5jaHVua0lkeF07XHJcbiAgICAgIGxldCBjaHVua0J1ZnNMZW4gPSBjaHVua0J1ZjAubGVuZ3RoO1xyXG4gICAgICBsZXQgY3VyckJ1ZlNraXBwYWJsZSA9IGNodW5rQnVmc0xlbiAtIHRoaXMuY2h1bmtGcmFtZVBvcztcclxuICAgICAgaWYgKG4gPj0gY3VyckJ1ZlNraXBwYWJsZSkge1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lUG9zICs9IGN1cnJCdWZTa2lwcGFibGU7XHJcbiAgICAgICAgdG9Ta2lwIC09IGN1cnJCdWZTa2lwcGFibGU7XHJcbiAgICAgICAgdGhpcy5jaHVua0lkeCsrXHJcbiAgICAgICAgdGhpcy5jaHVua0ZyYW1lUG9zID0gMDtcclxuICAgICAgICBpZiAodGhpcy5jaHVua0lkeCA8IHRoaXMuYXJyYXlBdWRpb0J1ZmZlci5jaHVua0NvdW50KSB7XHJcbiAgICAgICAgICB0aGlzLnNraXBGcmFtZXModG9Ta2lwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHRvU2tpcCA+IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1NraXAgb3V0IG9mIGJvdW5kczogQ2Fubm90IHNraXAgJyArIHRvU2tpcCArICcgZnJhbWVzLicpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRvU2tpcCAtPSBuO1xyXG4gICAgICAgIHRoaXMuY2h1bmtGcmFtZVBvcyArPSBuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWFkKGJ1ZmZlcnM6IEFycmF5PEZsb2F0MzJBcnJheT4pOiBudW1iZXIge1xyXG4gICAgbGV0IHJlYWQ9MDtcclxuXHJcbiAgICBsZXQgdG9SZWFkPWJ1ZmZlcnNbMF0ubGVuZ3RoO1xyXG5cclxuICAgICAgd2hpbGUocmVhZDx0b1JlYWQgJiYgIXRoaXMuZW9kKXtcclxuICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJDaHVuayBcIit0aGlzLmNodW5rSWR4K1wiIG9mIFwiK3RoaXMuYXJyYXlBdWRpb0J1ZmZlci5jaHVua0NvdW50K1wiIGNodW5rcy5cIilcclxuICAgICAgICBpZih0aGlzLmNodW5rSWR4Pj10aGlzLmFycmF5QXVkaW9CdWZmZXIuY2h1bmtDb3VudCkge1xyXG4gICAgICAgICAgdGhpcy5lb2QgPSB0cnVlO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQXJyYXkgYXVkaW8gaW5wdXQgc3RyZWFtIGVuZCBvZiBkYXRhIHJlYWQgZnJhbWVzOiBcIit0aGlzLmZyYW1lUG9zKTtcclxuICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICBsZXQgY2h1bmtCdWYwID0gdGhpcy5hcnJheUF1ZGlvQnVmZmVyLmRhdGFbMF1bdGhpcy5jaHVua0lkeF07XHJcbiAgICAgICAgICBsZXQgY2h1bmtCdWZzTGVuID0gY2h1bmtCdWYwLmxlbmd0aDtcclxuICAgICAgICAgIGNvbnN0IGNodW5rQnVmQXZhaWwgPSBjaHVua0J1ZnNMZW4gLSB0aGlzLmNodW5rRnJhbWVQb3M7XHJcbiAgICAgICAgICBsZXQgciA9IGNodW5rQnVmQXZhaWw7XHJcbiAgICAgICAgICBpZiAociA+IHRvUmVhZCAtIHJlYWQpIHtcclxuICAgICAgICAgICAgciA9IHRvUmVhZCAtIHJlYWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgYnVmZmVycy5sZW5ndGg7IGNoKyspIHtcclxuICAgICAgICAgICAgbGV0IGNoQ2h1bmtCdWY9dGhpcy5hcnJheUF1ZGlvQnVmZmVyLmRhdGFbY2hdW3RoaXMuY2h1bmtJZHhdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBiaSA9IDA7IGJpIDwgcjsgYmkrKykge1xyXG4gICAgICAgICAgICAgIGJ1ZmZlcnNbY2hdW3JlYWQgKyBiaV0gPSBjaENodW5rQnVmW3RoaXMuY2h1bmtGcmFtZVBvcyArIGJpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVhZCArPSByO1xyXG5cclxuICAgICAgICAgIHRoaXMuY2h1bmtGcmFtZVBvcyArPSByO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY2h1bmtGcmFtZVBvcyA+PSBjaHVua0J1ZnNMZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5jaHVua0lkeCsrO1xyXG4gICAgICAgICAgICB0aGlzLmNodW5rRnJhbWVQb3MgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgdGhpcy5fZnJhbWVQb3MrPXJlYWQ7XHJcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlJlYWQ6IFwiK3JlYWQrXCIsIGZyYW1lIHBvczogXCIrdGhpcy5mcmFtZVBvcylcclxuICAgIGlmKHRoaXMuX2ZyYW1lUG9zPnRoaXMuYXJyYXlBdWRpb0J1ZmZlci5mcmFtZUxlbil7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJBcnJheSBhdWRpbyBpbnB1dCBzdHJlYW0gZnJhbWUgcG9zOiBcIit0aGlzLl9mcmFtZVBvcytcIiBncmVhdGVyIHRoZW4gZnJhbWUgbGVuZ3RoOiBcIit0aGlzLmFycmF5QXVkaW9CdWZmZXIuZnJhbWVMZW4pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlYWQ7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGdldCBmcmFtZVBvcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZyYW1lUG9zO1xyXG4gIH1cclxuXHJcbn1cclxuIl19