speechrecorderng 3.10.13 → 3.11.1
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.
- package/README.md +1 -1
- package/fesm2022/speechrecorderng.mjs +204 -201
- package/fesm2022/speechrecorderng.mjs.map +1 -1
- package/lib/audio/ui/audio_canvas_layer_comp.d.ts +2 -2
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/ui/canvas_layer_comp.d.ts +1 -1
- package/lib/ui/responsive_component.d.ts +1 -1
- package/package.json +13 -15
- package/esm2022/lib/action/action.mjs +0 -73
- package/esm2022/lib/audio/array_audio_buffer.mjs +0 -164
- package/esm2022/lib/audio/array_audio_buffer_input_stream.mjs +0 -86
- package/esm2022/lib/audio/array_audio_buffer_random_access_stream.mjs +0 -16
- package/esm2022/lib/audio/audio_data_holder.mjs +0 -264
- package/esm2022/lib/audio/audio_display.mjs +0 -118
- package/esm2022/lib/audio/audio_player.mjs +0 -238
- package/esm2022/lib/audio/capture/capture.mjs +0 -855
- package/esm2022/lib/audio/context.mjs +0 -79
- package/esm2022/lib/audio/dsp/level_measure.mjs +0 -517
- package/esm2022/lib/audio/format.mjs +0 -20
- package/esm2022/lib/audio/impl/wavformat.mjs +0 -7
- package/esm2022/lib/audio/impl/wavreader.mjs +0 -144
- package/esm2022/lib/audio/impl/wavwriter.mjs +0 -191
- package/esm2022/lib/audio/inddb_audio_buffer.mjs +0 -508
- package/esm2022/lib/audio/io/stream.mjs +0 -59
- package/esm2022/lib/audio/net_audio_buffer.mjs +0 -293
- package/esm2022/lib/audio/persistor.mjs +0 -81
- package/esm2022/lib/audio/playback/array_audio_buffer_source_node.mjs +0 -126
- package/esm2022/lib/audio/playback/audio_source_node.mjs +0 -18
- package/esm2022/lib/audio/playback/audio_source_worklet_module_loader.mjs +0 -167
- package/esm2022/lib/audio/playback/inddb_audio_buffer_source_node.mjs +0 -167
- package/esm2022/lib/audio/playback/net_audio_buffer_source_node.mjs +0 -218
- package/esm2022/lib/audio/playback/player.mjs +0 -402
- package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +0 -347
- package/esm2022/lib/audio/ui/audio_display_control.mjs +0 -150
- package/esm2022/lib/audio/ui/audio_display_scroll_pane.mjs +0 -146
- package/esm2022/lib/audio/ui/audiosignal.mjs +0 -533
- package/esm2022/lib/audio/ui/common.mjs +0 -19
- package/esm2022/lib/audio/ui/container.mjs +0 -414
- package/esm2022/lib/audio/ui/livelevel.mjs +0 -361
- package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +0 -11
- package/esm2022/lib/audio/ui/sonagram.mjs +0 -900
- package/esm2022/lib/db/inddb.mjs +0 -120
- package/esm2022/lib/dsp/utils.mjs +0 -48
- package/esm2022/lib/environment/environment.defaults.mjs +0 -9
- package/esm2022/lib/io/BinaryReader.mjs +0 -93
- package/esm2022/lib/io/BinaryWriter.mjs +0 -80
- package/esm2022/lib/io/stream.mjs +0 -259
- package/esm2022/lib/math/2d/geometry.mjs +0 -28
- package/esm2022/lib/math/complex.mjs +0 -58
- package/esm2022/lib/math/dft.mjs +0 -196
- package/esm2022/lib/media/utils.mjs +0 -14
- package/esm2022/lib/net/uploader.mjs +0 -367
- package/esm2022/lib/recorder_component.mjs +0 -65
- package/esm2022/lib/speechrecorder/project/project.mjs +0 -54
- package/esm2022/lib/speechrecorder/project/project.service.mjs +0 -64
- package/esm2022/lib/speechrecorder/recording.mjs +0 -124
- package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +0 -221
- package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +0 -1014
- package/esm2022/lib/speechrecorder/script/script.mjs +0 -114
- package/esm2022/lib/speechrecorder/script/script.service.mjs +0 -47
- package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +0 -1179
- package/esm2022/lib/speechrecorder/session/basicrecorder.mjs +0 -676
- package/esm2022/lib/speechrecorder/session/controlpanel.mjs +0 -416
- package/esm2022/lib/speechrecorder/session/item.mjs +0 -30
- package/esm2022/lib/speechrecorder/session/progress.mjs +0 -135
- package/esm2022/lib/speechrecorder/session/prompting.mjs +0 -639
- package/esm2022/lib/speechrecorder/session/recorder_combi_pane.mjs +0 -88
- package/esm2022/lib/speechrecorder/session/recording_file_cache.mjs +0 -195
- package/esm2022/lib/speechrecorder/session/recording_list.mjs +0 -188
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +0 -128
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +0 -114
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +0 -146
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +0 -424
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file.mjs +0 -68
- package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +0 -288
- package/esm2022/lib/speechrecorder/session/session.mjs +0 -2
- package/esm2022/lib/speechrecorder/session/session.service.mjs +0 -69
- package/esm2022/lib/speechrecorder/session/session_finished_dialog.mjs +0 -46
- package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +0 -1385
- package/esm2022/lib/speechrecorder/session/warning_bar.mjs +0 -33
- package/esm2022/lib/speechrecorder/spruploader.mjs +0 -22
- package/esm2022/lib/speechrecorder/startstopsignal/startstopsignal.mjs +0 -2
- package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +0 -57
- package/esm2022/lib/speechrecorderng.component.mjs +0 -392
- package/esm2022/lib/speechrecorderng.module.mjs +0 -97
- package/esm2022/lib/spr.config.mjs +0 -27
- package/esm2022/lib/spr.module.version.mjs +0 -2
- package/esm2022/lib/ui/canvas_layer_comp.mjs +0 -38
- package/esm2022/lib/ui/intersection-observer.directive.mjs +0 -32
- package/esm2022/lib/ui/message_dialog.mjs +0 -51
- package/esm2022/lib/ui/recordingitem_display.mjs +0 -253
- package/esm2022/lib/ui/responsive_component.mjs +0 -24
- package/esm2022/lib/utils/scrollIntoViewToBottom.mjs +0 -23
- package/esm2022/lib/utils/ua-parser.mjs +0 -190
- package/esm2022/lib/utils/utils.mjs +0 -132
- package/esm2022/lib/utils/wake_lock.mjs +0 -114
- package/esm2022/lib/utils/wake_lock_media.mjs +0 -2
- package/esm2022/public-api.mjs +0 -35
- package/esm2022/speechrecorderng.mjs +0 -5
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
import { Observable } from "rxjs";
|
|
2
|
-
export class BasicAudioSource {
|
|
3
|
-
constructor() {
|
|
4
|
-
this._ready = false;
|
|
5
|
-
this.onReadyListeners = new Array();
|
|
6
|
-
}
|
|
7
|
-
addOnReadyListener(onReady) {
|
|
8
|
-
// let alreadyAdded=false;
|
|
9
|
-
// for(let or of this.onReadyListeners){
|
|
10
|
-
// if(or===onReady){
|
|
11
|
-
// alreadyAdded=true;
|
|
12
|
-
// break;
|
|
13
|
-
// }
|
|
14
|
-
// }
|
|
15
|
-
// if(!alreadyAdded) {
|
|
16
|
-
// this.onReadyListeners.push(onReady);
|
|
17
|
-
// }
|
|
18
|
-
if (!(this.onReadyListeners.find((or) => or === onReady))) {
|
|
19
|
-
this.onReadyListeners.push(onReady);
|
|
20
|
-
}
|
|
21
|
-
if (this._ready) {
|
|
22
|
-
onReady();
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
removeOnReadyListener(onReady) {
|
|
26
|
-
this.onReadyListeners = this.onReadyListeners.filter((or) => or !== onReady);
|
|
27
|
-
}
|
|
28
|
-
ready() {
|
|
29
|
-
this._ready = true;
|
|
30
|
-
for (let onReady of this.onReadyListeners) {
|
|
31
|
-
onReady.call(this);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
export class AudioBufferSource extends BasicAudioSource {
|
|
36
|
-
constructor(_audioBuffer) {
|
|
37
|
-
super();
|
|
38
|
-
this._audioBuffer = _audioBuffer;
|
|
39
|
-
this._duration = this._audioBuffer.length / this._audioBuffer.sampleRate;
|
|
40
|
-
this.ready();
|
|
41
|
-
}
|
|
42
|
-
get audioBuffer() {
|
|
43
|
-
return this._audioBuffer;
|
|
44
|
-
}
|
|
45
|
-
get duration() {
|
|
46
|
-
return this._duration;
|
|
47
|
-
}
|
|
48
|
-
get sampleRate() {
|
|
49
|
-
return this._audioBuffer.sampleRate;
|
|
50
|
-
}
|
|
51
|
-
get numberOfChannels() {
|
|
52
|
-
return this._audioBuffer.numberOfChannels;
|
|
53
|
-
}
|
|
54
|
-
get frameLen() {
|
|
55
|
-
return this._audioBuffer.length;
|
|
56
|
-
}
|
|
57
|
-
sampleCounts() {
|
|
58
|
-
return this._audioBuffer.numberOfChannels * this._audioBuffer.length;
|
|
59
|
-
}
|
|
60
|
-
audioInputStream() {
|
|
61
|
-
return new AudioBufferInputStream(this._audioBuffer);
|
|
62
|
-
}
|
|
63
|
-
asyncAudioInputStream() {
|
|
64
|
-
return null;
|
|
65
|
-
}
|
|
66
|
-
releaseAudioData() {
|
|
67
|
-
return new Observable(subscriber => {
|
|
68
|
-
subscriber.next();
|
|
69
|
-
subscriber.complete();
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
randomAccessAudioStream() {
|
|
73
|
-
return new RandomAccessAudioBufferStream(this._audioBuffer);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
export class AudioDataHolder {
|
|
77
|
-
get audioSource() {
|
|
78
|
-
return this._audioSource;
|
|
79
|
-
}
|
|
80
|
-
get duration() {
|
|
81
|
-
return this._duration;
|
|
82
|
-
}
|
|
83
|
-
constructor(_audioSource) {
|
|
84
|
-
this._audioSource = _audioSource;
|
|
85
|
-
this._numberOfChannels = 0;
|
|
86
|
-
this._sampleRate = 0;
|
|
87
|
-
this._frameLen = 0;
|
|
88
|
-
this._duration = 0;
|
|
89
|
-
if (this._audioSource) {
|
|
90
|
-
this._numberOfChannels = this._audioSource.numberOfChannels;
|
|
91
|
-
this._sampleRate = this._audioSource.sampleRate;
|
|
92
|
-
this._frameLen = this._audioSource.frameLen;
|
|
93
|
-
this._duration = this._frameLen / this._sampleRate;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
addOnReadyListener(onReady) {
|
|
97
|
-
this._audioSource?.addOnReadyListener(onReady);
|
|
98
|
-
}
|
|
99
|
-
get sampleRate() {
|
|
100
|
-
return this._sampleRate;
|
|
101
|
-
}
|
|
102
|
-
get numberOfChannels() {
|
|
103
|
-
return this._numberOfChannels;
|
|
104
|
-
}
|
|
105
|
-
get frameLen() {
|
|
106
|
-
return this._frameLen;
|
|
107
|
-
}
|
|
108
|
-
sampleCounts() {
|
|
109
|
-
return this._numberOfChannels * this._frameLen;
|
|
110
|
-
}
|
|
111
|
-
randomAccessAudioStream() {
|
|
112
|
-
if (this._audioSource) {
|
|
113
|
-
return this._audioSource.randomAccessAudioStream();
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
throw Error('No audio source set');
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
// private frames(framePos:number,frameLen:number,bufs:Float32Array[]):number{
|
|
120
|
-
// let read=0;
|
|
121
|
-
// if(this._buffer){
|
|
122
|
-
// let toRead=frameLen;
|
|
123
|
-
// if(this._buffer.length<framePos+frameLen){
|
|
124
|
-
// toRead=this._buffer.length-framePos;
|
|
125
|
-
// }
|
|
126
|
-
// for(let ch=0;ch<bufs.length;ch++){
|
|
127
|
-
// let chData=this._buffer.getChannelData(ch);
|
|
128
|
-
// for(let i=0;i<toRead;i++){
|
|
129
|
-
// bufs[ch][i]=chData[framePos+i];
|
|
130
|
-
// }
|
|
131
|
-
// }
|
|
132
|
-
// read=toRead;
|
|
133
|
-
// }else if(this._arrayBuffer){
|
|
134
|
-
// read=this._arrayBuffer.frames(framePos,frameLen,bufs);
|
|
135
|
-
// }
|
|
136
|
-
// return read;
|
|
137
|
-
// }
|
|
138
|
-
audioInputStream() {
|
|
139
|
-
// if(this._buffer){
|
|
140
|
-
// return new AudioBufferInputStream(this._buffer);
|
|
141
|
-
// }
|
|
142
|
-
// if(this._arrayBuffer){
|
|
143
|
-
// return new ArrayAudioBufferInputStream(this._arrayBuffer);
|
|
144
|
-
// }
|
|
145
|
-
// return null;
|
|
146
|
-
if (this._audioSource) {
|
|
147
|
-
return this._audioSource.audioInputStream();
|
|
148
|
-
}
|
|
149
|
-
else {
|
|
150
|
-
return null;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
asyncAudioInputStream() {
|
|
154
|
-
// if(this._inddbAudioBuffer){
|
|
155
|
-
// return new IndexedDbAudioInputStream(this._inddbAudioBuffer);
|
|
156
|
-
// }else if(this._netAudioBuffer){
|
|
157
|
-
// return new NetAudioInputStream(this._netAudioBuffer);
|
|
158
|
-
// }
|
|
159
|
-
// return null;
|
|
160
|
-
if (this._audioSource) {
|
|
161
|
-
return this._audioSource.asyncAudioInputStream();
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
return null;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
// get buffer(): AudioBuffer | null {
|
|
168
|
-
// return this._buffer;
|
|
169
|
-
// }
|
|
170
|
-
//
|
|
171
|
-
// get arrayBuffer(): ArrayAudioBuffer | null {
|
|
172
|
-
// return this._arrayBuffer;
|
|
173
|
-
// }
|
|
174
|
-
//
|
|
175
|
-
// get inddbBuffer():IndexedDbAudioBuffer|null{
|
|
176
|
-
// return this._inddbAudioBuffer;
|
|
177
|
-
// }
|
|
178
|
-
//
|
|
179
|
-
// get netBuffer():NetAudioBuffer|null{
|
|
180
|
-
// return this._netAudioBuffer;
|
|
181
|
-
// }
|
|
182
|
-
releaseAudioData() {
|
|
183
|
-
return new Observable(subscriber => {
|
|
184
|
-
//if (this._audioSource instanceof IndexedDbAudioBuffer) {
|
|
185
|
-
if (this._audioSource) {
|
|
186
|
-
this._audioSource.releaseAudioData().subscribe({
|
|
187
|
-
next: () => {
|
|
188
|
-
subscriber.next();
|
|
189
|
-
},
|
|
190
|
-
complete: () => {
|
|
191
|
-
this._audioSource = null;
|
|
192
|
-
subscriber.complete();
|
|
193
|
-
}, error: (err) => {
|
|
194
|
-
subscriber.error(err);
|
|
195
|
-
}
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
else {
|
|
199
|
-
subscriber.next();
|
|
200
|
-
subscriber.complete();
|
|
201
|
-
}
|
|
202
|
-
// }else{
|
|
203
|
-
// // Others have no persistent respectively async deletable storage, they should be finally removed by the GC
|
|
204
|
-
// //this._buffer=null;
|
|
205
|
-
// //this._arrayBuffer=null;
|
|
206
|
-
// this._audioSource=null;
|
|
207
|
-
// subscriber.next();
|
|
208
|
-
// subscriber.complete();
|
|
209
|
-
// }
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
export class RandomAccessAudioBufferStream {
|
|
214
|
-
constructor(_buffer) {
|
|
215
|
-
this._buffer = _buffer;
|
|
216
|
-
}
|
|
217
|
-
close() {
|
|
218
|
-
}
|
|
219
|
-
framesObs(framePos, frameLen, bufs) {
|
|
220
|
-
return new Observable(subscriber => {
|
|
221
|
-
let read = 0;
|
|
222
|
-
let toRead = frameLen;
|
|
223
|
-
if (this._buffer.length < framePos + frameLen) {
|
|
224
|
-
toRead = this._buffer.length - framePos;
|
|
225
|
-
}
|
|
226
|
-
for (let ch = 0; ch < bufs.length; ch++) {
|
|
227
|
-
let chData = this._buffer.getChannelData(ch);
|
|
228
|
-
for (let i = 0; i < toRead; i++) {
|
|
229
|
-
bufs[ch][i] = chData[framePos + i];
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
read = toRead;
|
|
233
|
-
subscriber.next(read);
|
|
234
|
-
subscriber.complete();
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
export class AudioBufferInputStream {
|
|
239
|
-
constructor(audioBuffer) {
|
|
240
|
-
this.audioBuffer = audioBuffer;
|
|
241
|
-
this.framePos = 0;
|
|
242
|
-
}
|
|
243
|
-
close() {
|
|
244
|
-
}
|
|
245
|
-
skipFrames(n) {
|
|
246
|
-
this.framePos += n;
|
|
247
|
-
}
|
|
248
|
-
read(buffers) {
|
|
249
|
-
let read = 0;
|
|
250
|
-
let toRead = buffers[0].length;
|
|
251
|
-
if (this.framePos + toRead > this.audioBuffer.length) {
|
|
252
|
-
toRead = this.audioBuffer.length - this.framePos;
|
|
253
|
-
}
|
|
254
|
-
for (let ch = 0; ch < buffers.length; ch++) {
|
|
255
|
-
for (let i = 0; i < toRead; i++) {
|
|
256
|
-
buffers[ch][i] = this.audioBuffer.getChannelData(ch)[this.framePos + i];
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
read = toRead;
|
|
260
|
-
this.framePos += toRead;
|
|
261
|
-
return read;
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fZGF0YV9ob2xkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvYXVkaW8vYXVkaW9fZGF0YV9ob2xkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQWlCaEMsTUFBTSxPQUFnQixnQkFBZ0I7SUFBdEM7UUFDWSxXQUFNLEdBQVMsS0FBSyxDQUFDO1FBQ3JCLHFCQUFnQixHQUFxQixJQUFJLEtBQUssRUFBYyxDQUFDO0lBbUR6RSxDQUFDO0lBakRDLGtCQUFrQixDQUFDLE9BQXFCO1FBQ3RDLDBCQUEwQjtRQUMxQix3Q0FBd0M7UUFDeEMsc0JBQXNCO1FBQ3RCLHlCQUF5QjtRQUN6QixhQUFhO1FBQ2IsTUFBTTtRQUNOLElBQUk7UUFDSixzQkFBc0I7UUFDdEIseUNBQXlDO1FBQ3pDLElBQUk7UUFFSixJQUFHLENBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQSxFQUFFLEtBQUcsT0FBTyxDQUFDLENBQUMsRUFBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUVELElBQUcsSUFBSSxDQUFDLE1BQU0sRUFBQyxDQUFDO1lBQ2QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLE9BQXFCO1FBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQSxFQUFFLEtBQUcsT0FBTyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsTUFBTSxHQUFDLElBQUksQ0FB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QUFJLENBQUM7SUFDZCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FzeW5jRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0sIEZsb2F0MzJBcnJheUlucHV0U3RyZWFtfSBmcm9tIFwiLi4vaW8vc3RyZWFtXCI7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9Tb3VyY2Uge1xyXG4gIGdldCBkdXJhdGlvbigpOm51bWJlcjtcclxuICBnZXQgc2FtcGxlUmF0ZSgpOiBudW1iZXI7XHJcbiAgZ2V0IG51bWJlck9mQ2hhbm5lbHMoKTogbnVtYmVyO1xyXG4gIGdldCBmcmFtZUxlbigpOiBudW1iZXI7XHJcbiAgc2FtcGxlQ291bnRzKCk6IG51bWJlcjtcclxuICBhdWRpb0lucHV0U3RyZWFtKCk6IEZsb2F0MzJBcnJheUlucHV0U3RyZWFtIHwgbnVsbDtcclxuICBhc3luY0F1ZGlvSW5wdXRTdHJlYW0oKTogQXN5bmNGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbSB8IG51bGw7XHJcbiAgcmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0oKTpSYW5kb21BY2Nlc3NBdWRpb1N0cmVhbTtcclxuICByZWxlYXNlQXVkaW9EYXRhKCk6IE9ic2VydmFibGU8dm9pZD47XHJcbiAgYWRkT25SZWFkeUxpc3RlbmVyKG9uUmVhZHk6KCgpPT52b2lkKXxudWxsKTp2b2lkO1xyXG4gIHJlbW92ZU9uUmVhZHlMaXN0ZW5lcihvblJlYWR5OigoKT0+dm9pZCl8bnVsbCk6dm9pZDtcclxuICByZWFkeSgpOnZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNpY0F1ZGlvU291cmNlIGltcGxlbWVudHMgQXVkaW9Tb3VyY2V7XHJcbiAgcHJvdGVjdGVkIF9yZWFkeTpib29sZWFuPWZhbHNlO1xyXG4gIHByb3RlY3RlZCBvblJlYWR5TGlzdGVuZXJzOkFycmF5PCgoKSA9PiB2b2lkKT49bmV3IEFycmF5PCgpID0+IHZvaWQ+KCk7XHJcblxyXG4gIGFkZE9uUmVhZHlMaXN0ZW5lcihvblJlYWR5OiAoKCkgPT4gdm9pZCkpOiB2b2lkIHtcclxuICAgIC8vIGxldCBhbHJlYWR5QWRkZWQ9ZmFsc2U7XHJcbiAgICAvLyBmb3IobGV0IG9yIG9mIHRoaXMub25SZWFkeUxpc3RlbmVycyl7XHJcbiAgICAvLyAgIGlmKG9yPT09b25SZWFkeSl7XHJcbiAgICAvLyAgICAgYWxyZWFkeUFkZGVkPXRydWU7XHJcbiAgICAvLyAgICAgYnJlYWs7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICAgIC8vIGlmKCFhbHJlYWR5QWRkZWQpIHtcclxuICAgIC8vICAgdGhpcy5vblJlYWR5TGlzdGVuZXJzLnB1c2gob25SZWFkeSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgaWYoISAodGhpcy5vblJlYWR5TGlzdGVuZXJzLmZpbmQoKG9yKT0+b3I9PT1vblJlYWR5KSkpe1xyXG4gICAgICB0aGlzLm9uUmVhZHlMaXN0ZW5lcnMucHVzaChvblJlYWR5KTtcclxuICAgIH1cclxuXHJcbiAgICBpZih0aGlzLl9yZWFkeSl7XHJcbiAgICAgIG9uUmVhZHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZU9uUmVhZHlMaXN0ZW5lcihvblJlYWR5OiAoKCkgPT4gdm9pZCkpOnZvaWQge1xyXG4gICAgdGhpcy5vblJlYWR5TGlzdGVuZXJzPXRoaXMub25SZWFkeUxpc3RlbmVycy5maWx0ZXIoKG9yKT0+b3IhPT1vblJlYWR5KTtcclxuICB9XHJcblxyXG4gIHJlYWR5KCk6dm9pZHtcclxuICAgIHRoaXMuX3JlYWR5PXRydWU7XHJcbiAgICBmb3IobGV0IG9uUmVhZHkgb2YgdGhpcy5vblJlYWR5TGlzdGVuZXJzKXtcclxuICAgICAgb25SZWFkeS5jYWxsKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWJzdHJhY3QgYXN5bmNBdWRpb0lucHV0U3RyZWFtKCk6IEFzeW5jRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gfCBudWxsO1xyXG5cclxuICBhYnN0cmFjdCBhdWRpb0lucHV0U3RyZWFtKCk6IEZsb2F0MzJBcnJheUlucHV0U3RyZWFtIHwgbnVsbDtcclxuXHJcbiAgYWJzdHJhY3QgIGdldCBkdXJhdGlvbigpOiBudW1iZXI7XHJcblxyXG4gIGFic3RyYWN0IGdldCBmcmFtZUxlbigpOiBudW1iZXI7XHJcblxyXG4gIGFic3RyYWN0IGdldCBudW1iZXJPZkNoYW5uZWxzKCk6IG51bWJlcjtcclxuXHJcbiAgYWJzdHJhY3QgcmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0oKTogUmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0gO1xyXG5cclxuICBhYnN0cmFjdCByZWxlYXNlQXVkaW9EYXRhKCk6IE9ic2VydmFibGU8dm9pZD4gO1xyXG5cclxuICBhYnN0cmFjdCBzYW1wbGVDb3VudHMoKTogbnVtYmVyO1xyXG5cclxuICBhYnN0cmFjdCBnZXQgc2FtcGxlUmF0ZSgpOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdWRpb0J1ZmZlclNvdXJjZSBleHRlbmRzIEJhc2ljQXVkaW9Tb3VyY2V7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZHVyYXRpb246bnVtYmVyO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2F1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5fZHVyYXRpb249dGhpcy5fYXVkaW9CdWZmZXIubGVuZ3RoL3RoaXMuX2F1ZGlvQnVmZmVyLnNhbXBsZVJhdGU7XHJcbiAgICB0aGlzLnJlYWR5KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYXVkaW9CdWZmZXIoKTogQXVkaW9CdWZmZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvQnVmZmVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGR1cmF0aW9uKCk6IG51bWJlciB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9kdXJhdGlvbjtcclxuICAgIH1cclxuICAgIGdldCBzYW1wbGVSYXRlKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1ZGlvQnVmZmVyLnNhbXBsZVJhdGU7XHJcbiAgICB9XHJcbiAgICBnZXQgbnVtYmVyT2ZDaGFubmVscygpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xyXG4gICAgfVxyXG4gICAgZ2V0IGZyYW1lTGVuKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1ZGlvQnVmZmVyLmxlbmd0aDtcclxuICAgIH1cclxuICAgIHNhbXBsZUNvdW50cygpOiBudW1iZXIge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYXVkaW9CdWZmZXIubnVtYmVyT2ZDaGFubmVscyp0aGlzLl9hdWRpb0J1ZmZlci5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBhdWRpb0lucHV0U3RyZWFtKCk6IEZsb2F0MzJBcnJheUlucHV0U3RyZWFtIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBBdWRpb0J1ZmZlcklucHV0U3RyZWFtKHRoaXMuX2F1ZGlvQnVmZmVyKTtcclxuICAgIH1cclxuICAgIGFzeW5jQXVkaW9JbnB1dFN0cmVhbSgpOiBBc3luY0Zsb2F0MzJBcnJheUlucHV0U3RyZWFtIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZWxlYXNlQXVkaW9EYXRhKCk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIgPT4ge1xyXG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KCk7XHJcbiAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgcmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0oKTogUmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0ge1xyXG4gICAgcmV0dXJuIG5ldyBSYW5kb21BY2Nlc3NBdWRpb0J1ZmZlclN0cmVhbSh0aGlzLl9hdWRpb0J1ZmZlcik7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFte1xyXG4gIGZyYW1lc09icyhmcmFtZVBvczpudW1iZXIsZnJhbWVMZW46bnVtYmVyLGJ1ZnM6RmxvYXQzMkFycmF5W10pOk9ic2VydmFibGU8bnVtYmVyPjtcclxuICBjbG9zZSgpOnZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdWRpb0RhdGFIb2xkZXJ7XHJcbiAgZ2V0IGF1ZGlvU291cmNlKCk6IEF1ZGlvU291cmNlIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9Tb3VyY2U7XHJcbiAgfVxyXG4gIGdldCBkdXJhdGlvbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2R1cmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfbnVtYmVyT2ZDaGFubmVsczpudW1iZXI9MDtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9zYW1wbGVSYXRlOm51bWJlcj0wO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZyYW1lTGVuOm51bWJlcj0wO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2R1cmF0aW9uOm51bWJlcj0wO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hdWRpb1NvdXJjZTpBdWRpb1NvdXJjZXxudWxsKSB7XHJcbiAgICBpZih0aGlzLl9hdWRpb1NvdXJjZSkge1xyXG4gICAgICB0aGlzLl9udW1iZXJPZkNoYW5uZWxzID0gdGhpcy5fYXVkaW9Tb3VyY2UubnVtYmVyT2ZDaGFubmVscztcclxuICAgICAgdGhpcy5fc2FtcGxlUmF0ZSA9IHRoaXMuX2F1ZGlvU291cmNlLnNhbXBsZVJhdGU7XHJcbiAgICAgIHRoaXMuX2ZyYW1lTGVuID0gdGhpcy5fYXVkaW9Tb3VyY2UuZnJhbWVMZW47XHJcbiAgICAgIHRoaXMuX2R1cmF0aW9uID0gdGhpcy5fZnJhbWVMZW4gLyB0aGlzLl9zYW1wbGVSYXRlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkT25SZWFkeUxpc3RlbmVyKG9uUmVhZHk6KCgpPT52b2lkKXxudWxsKTp2b2lke1xyXG4gICAgdGhpcy5fYXVkaW9Tb3VyY2U/LmFkZE9uUmVhZHlMaXN0ZW5lcihvblJlYWR5KTtcclxuICB9XHJcblxyXG4gIGdldCBzYW1wbGVSYXRlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2FtcGxlUmF0ZTtcclxuICB9XHJcbiAgZ2V0IG51bWJlck9mQ2hhbm5lbHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9udW1iZXJPZkNoYW5uZWxzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZyYW1lTGVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnJhbWVMZW47XHJcbiAgfVxyXG5cclxuICBzYW1wbGVDb3VudHMoKTpudW1iZXJ7XHJcbiAgICByZXR1cm4gdGhpcy5fbnVtYmVyT2ZDaGFubmVscyp0aGlzLl9mcmFtZUxlbjtcclxuICB9XHJcblxyXG4gIHJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFtKCk6UmFuZG9tQWNjZXNzQXVkaW9TdHJlYW17XHJcblxyXG4gICAgICBpZih0aGlzLl9hdWRpb1NvdXJjZSl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1ZGlvU291cmNlLnJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFtKCk7XHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICB0aHJvdyBFcnJvcignTm8gYXVkaW8gc291cmNlIHNldCcpO1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gcHJpdmF0ZSBmcmFtZXMoZnJhbWVQb3M6bnVtYmVyLGZyYW1lTGVuOm51bWJlcixidWZzOkZsb2F0MzJBcnJheVtdKTpudW1iZXJ7XHJcbiAgLy8gICBsZXQgcmVhZD0wO1xyXG4gIC8vICAgaWYodGhpcy5fYnVmZmVyKXtcclxuICAvLyAgICAgbGV0IHRvUmVhZD1mcmFtZUxlbjtcclxuICAvLyAgICAgaWYodGhpcy5fYnVmZmVyLmxlbmd0aDxmcmFtZVBvcytmcmFtZUxlbil7XHJcbiAgLy8gICAgICAgdG9SZWFkPXRoaXMuX2J1ZmZlci5sZW5ndGgtZnJhbWVQb3M7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgZm9yKGxldCBjaD0wO2NoPGJ1ZnMubGVuZ3RoO2NoKyspe1xyXG4gIC8vICAgICAgIGxldCBjaERhdGE9dGhpcy5fYnVmZmVyLmdldENoYW5uZWxEYXRhKGNoKTtcclxuICAvLyAgICAgICBmb3IobGV0IGk9MDtpPHRvUmVhZDtpKyspe1xyXG4gIC8vICAgICAgICAgYnVmc1tjaF1baV09Y2hEYXRhW2ZyYW1lUG9zK2ldO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfVxyXG4gIC8vICAgICByZWFkPXRvUmVhZDtcclxuICAvLyAgIH1lbHNlIGlmKHRoaXMuX2FycmF5QnVmZmVyKXtcclxuICAvLyAgICAgcmVhZD10aGlzLl9hcnJheUJ1ZmZlci5mcmFtZXMoZnJhbWVQb3MsZnJhbWVMZW4sYnVmcyk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXR1cm4gcmVhZDtcclxuICAvLyB9XHJcblxyXG4gIGF1ZGlvSW5wdXRTdHJlYW0oKTpGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbXxudWxse1xyXG4gICAgLy8gaWYodGhpcy5fYnVmZmVyKXtcclxuICAgIC8vICAgcmV0dXJuIG5ldyBBdWRpb0J1ZmZlcklucHV0U3RyZWFtKHRoaXMuX2J1ZmZlcik7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBpZih0aGlzLl9hcnJheUJ1ZmZlcil7XHJcbiAgICAvLyAgIHJldHVybiBuZXcgQXJyYXlBdWRpb0J1ZmZlcklucHV0U3RyZWFtKHRoaXMuX2FycmF5QnVmZmVyKTtcclxuICAgIC8vIH1cclxuICAgIC8vIHJldHVybiBudWxsO1xyXG4gICAgaWYodGhpcy5fYXVkaW9Tb3VyY2UpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2F1ZGlvU291cmNlLmF1ZGlvSW5wdXRTdHJlYW0oKTtcclxuICAgIH1lbHNle1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jQXVkaW9JbnB1dFN0cmVhbSgpOiBBc3luY0Zsb2F0MzJBcnJheUlucHV0U3RyZWFtfG51bGx7XHJcbiAgICAvLyBpZih0aGlzLl9pbmRkYkF1ZGlvQnVmZmVyKXtcclxuICAgIC8vICAgcmV0dXJuIG5ldyBJbmRleGVkRGJBdWRpb0lucHV0U3RyZWFtKHRoaXMuX2luZGRiQXVkaW9CdWZmZXIpO1xyXG4gICAgLy8gfWVsc2UgaWYodGhpcy5fbmV0QXVkaW9CdWZmZXIpe1xyXG4gICAgLy8gICByZXR1cm4gbmV3IE5ldEF1ZGlvSW5wdXRTdHJlYW0odGhpcy5fbmV0QXVkaW9CdWZmZXIpO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gcmV0dXJuIG51bGw7XHJcblxyXG4gICAgaWYodGhpcy5fYXVkaW9Tb3VyY2UpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2F1ZGlvU291cmNlLmFzeW5jQXVkaW9JbnB1dFN0cmVhbSgpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IGJ1ZmZlcigpOiBBdWRpb0J1ZmZlciB8IG51bGwge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcclxuICAvLyB9XHJcbiAgLy9cclxuICAvLyBnZXQgYXJyYXlCdWZmZXIoKTogQXJyYXlBdWRpb0J1ZmZlciB8IG51bGwge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX2FycmF5QnVmZmVyO1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIGdldCBpbmRkYkJ1ZmZlcigpOkluZGV4ZWREYkF1ZGlvQnVmZmVyfG51bGx7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5faW5kZGJBdWRpb0J1ZmZlcjtcclxuICAvLyB9XHJcbiAgLy9cclxuICAvLyBnZXQgbmV0QnVmZmVyKCk6TmV0QXVkaW9CdWZmZXJ8bnVsbHtcclxuICAvLyAgIHJldHVybiB0aGlzLl9uZXRBdWRpb0J1ZmZlcjtcclxuICAvLyB9XHJcblxyXG4gIHJlbGVhc2VBdWRpb0RhdGEoKTpPYnNlcnZhYmxlPHZvaWQ+e1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHZvaWQ+KHN1YnNjcmliZXIgPT4ge1xyXG4gICAgICAvL2lmICh0aGlzLl9hdWRpb1NvdXJjZSBpbnN0YW5jZW9mICBJbmRleGVkRGJBdWRpb0J1ZmZlcikge1xyXG4gICAgICBpZih0aGlzLl9hdWRpb1NvdXJjZSkge1xyXG4gICAgICAgIHRoaXMuX2F1ZGlvU291cmNlLnJlbGVhc2VBdWRpb0RhdGEoKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9hdWRpb1NvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgIH0sIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KCk7XHJcbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIH1lbHNle1xyXG4gICAgICAvLyAgIC8vIE90aGVycyBoYXZlIG5vIHBlcnNpc3RlbnQgcmVzcGVjdGl2ZWx5IGFzeW5jIGRlbGV0YWJsZSBzdG9yYWdlLCB0aGV5IHNob3VsZCBiZSBmaW5hbGx5IHJlbW92ZWQgYnkgdGhlIEdDXHJcbiAgICAgIC8vICAgLy90aGlzLl9idWZmZXI9bnVsbDtcclxuICAgICAgLy8gICAvL3RoaXMuX2FycmF5QnVmZmVyPW51bGw7XHJcbiAgICAgIC8vICAgdGhpcy5fYXVkaW9Tb3VyY2U9bnVsbDtcclxuICAgICAgLy8gICBzdWJzY3JpYmVyLm5leHQoKTtcclxuICAgICAgLy8gICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgIC8vIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSYW5kb21BY2Nlc3NBdWRpb0J1ZmZlclN0cmVhbSBpbXBsZW1lbnRzIFJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFte1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9idWZmZXI6QXVkaW9CdWZmZXIpIHtcclxuICB9XHJcblxyXG4gIGNsb3NlKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgZnJhbWVzT2JzKGZyYW1lUG9zOiBudW1iZXIsIGZyYW1lTGVuOiBudW1iZXIsIGJ1ZnM6IEZsb2F0MzJBcnJheVtdKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuXHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8bnVtYmVyPihzdWJzY3JpYmVyID0+IHtcclxuICAgICAgbGV0IHJlYWQ9MDtcclxuICAgICAgICBsZXQgdG9SZWFkPWZyYW1lTGVuO1xyXG4gICAgICAgIGlmKHRoaXMuX2J1ZmZlci5sZW5ndGg8ZnJhbWVQb3MrZnJhbWVMZW4pe1xyXG4gICAgICAgICAgdG9SZWFkPXRoaXMuX2J1ZmZlci5sZW5ndGgtZnJhbWVQb3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvcihsZXQgY2g9MDtjaDxidWZzLmxlbmd0aDtjaCsrKXtcclxuICAgICAgICAgIGxldCBjaERhdGE9dGhpcy5fYnVmZmVyLmdldENoYW5uZWxEYXRhKGNoKTtcclxuICAgICAgICAgIGZvcihsZXQgaT0wO2k8dG9SZWFkO2krKyl7XHJcbiAgICAgICAgICAgIGJ1ZnNbY2hdW2ldPWNoRGF0YVtmcmFtZVBvcytpXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmVhZD10b1JlYWQ7XHJcblxyXG4gICAgICAgIHN1YnNjcmliZXIubmV4dChyZWFkKTtcclxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdWRpb0J1ZmZlcklucHV0U3RyZWFtIGltcGxlbWVudHMgRmxvYXQzMkFycmF5SW5wdXRTdHJlYW17XHJcbiAgcHJpdmF0ZSBmcmFtZVBvcz0wO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyKSB7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIHNraXBGcmFtZXMobjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmZyYW1lUG9zKz1uO1xyXG4gIH1cclxuXHJcbiAgcmVhZChidWZmZXJzOiBBcnJheTxGbG9hdDMyQXJyYXk+KTogbnVtYmVyIHtcclxuICAgIGxldCByZWFkPTA7XHJcbiAgICBsZXQgdG9SZWFkPWJ1ZmZlcnNbMF0ubGVuZ3RoO1xyXG4gICAgaWYodGhpcy5mcmFtZVBvcyt0b1JlYWQ+dGhpcy5hdWRpb0J1ZmZlci5sZW5ndGgpe1xyXG4gICAgICB0b1JlYWQ9dGhpcy5hdWRpb0J1ZmZlci5sZW5ndGgtdGhpcy5mcmFtZVBvcztcclxuICAgIH1cclxuICAgIGZvcihsZXQgY2g9MDtjaDxidWZmZXJzLmxlbmd0aDtjaCsrKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9SZWFkOyBpKyspIHtcclxuICAgICAgICBidWZmZXJzW2NoXVtpXT10aGlzLmF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKGNoKVt0aGlzLmZyYW1lUG9zK2ldO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZWFkPXRvUmVhZDtcclxuICAgIHRoaXMuZnJhbWVQb3MrPXRvUmVhZDtcclxuICAgIHJldHVybiByZWFkO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { Component, ViewChild, Input, } from '@angular/core';
|
|
2
|
-
import { Action } from "../action/action";
|
|
3
|
-
import { AudioDisplayScrollPane } from "./ui/audio_display_scroll_pane";
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "./ui/audio_display_scroll_pane";
|
|
6
|
-
import * as i2 from "./ui/audio_display_control";
|
|
7
|
-
export class AudioDisplay {
|
|
8
|
-
constructor(ref, eRef) {
|
|
9
|
-
this.ref = ref;
|
|
10
|
-
this.eRef = eRef;
|
|
11
|
-
this._audioClip = null;
|
|
12
|
-
//console.log("constructor: "+this.ac);
|
|
13
|
-
this.parentE = this.eRef.nativeElement;
|
|
14
|
-
this.playStartAction = new Action("Start");
|
|
15
|
-
this.playSelectionAction = new Action("Play selected");
|
|
16
|
-
this.playStopAction = new Action("Stop");
|
|
17
|
-
this.status = "Player created.";
|
|
18
|
-
}
|
|
19
|
-
ngOnInit() {
|
|
20
|
-
this.zoomSelectedAction = this.audioDisplayScrollPane.zoomSelectedAction;
|
|
21
|
-
this.zoomFitToPanelAction = this.audioDisplayScrollPane.zoomFitToPanelAction;
|
|
22
|
-
this.zoomOutAction = this.audioDisplayScrollPane.zoomOutAction;
|
|
23
|
-
this.zoomInAction = this.audioDisplayScrollPane.zoomInAction;
|
|
24
|
-
}
|
|
25
|
-
ngAfterViewInit() {
|
|
26
|
-
this.layout();
|
|
27
|
-
let heightListener = new MutationObserver((mrs, mo) => {
|
|
28
|
-
mrs.forEach((mr) => {
|
|
29
|
-
if ('attributes' === mr.type && ('class' === mr.attributeName || 'style' === mr.attributeName)) {
|
|
30
|
-
this.layout();
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
heightListener.observe(this.parentE, { attributes: true, childList: true, characterData: true });
|
|
35
|
-
}
|
|
36
|
-
layout() {
|
|
37
|
-
this.audioDisplayScrollPane.layout();
|
|
38
|
-
}
|
|
39
|
-
started() {
|
|
40
|
-
console.log("Play started");
|
|
41
|
-
this.status = 'Playing...';
|
|
42
|
-
}
|
|
43
|
-
set audioData(audioData) {
|
|
44
|
-
this.audioDisplayScrollPane.audioData = audioData;
|
|
45
|
-
if (this.playStartAction) {
|
|
46
|
-
console.debug("Play start action (by AudioDisplay::set audioData) disabled: " + (audioData == null));
|
|
47
|
-
this.playStartAction.disabled = (audioData == null);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
set audioClip(audioClip) {
|
|
51
|
-
//let audioData:AudioBuffer|null=null;
|
|
52
|
-
let sel = null;
|
|
53
|
-
if (audioClip) {
|
|
54
|
-
//audioData=audioClip.audioDataHolder.buffer;
|
|
55
|
-
sel = audioClip.selection;
|
|
56
|
-
}
|
|
57
|
-
this._audioClip = audioClip;
|
|
58
|
-
this.audioDisplayScrollPane.audioClip = audioClip;
|
|
59
|
-
//this.playStartAction.disabled = (audioData!==null)
|
|
60
|
-
}
|
|
61
|
-
get audioClip() {
|
|
62
|
-
return this._audioClip;
|
|
63
|
-
}
|
|
64
|
-
set playFramePosition(playFramePosition) {
|
|
65
|
-
this.audioDisplayScrollPane.playFramePosition = playFramePosition;
|
|
66
|
-
}
|
|
67
|
-
error() {
|
|
68
|
-
this.status = 'ERROR';
|
|
69
|
-
}
|
|
70
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AudioDisplay, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
71
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: AudioDisplay, selector: "app-audiodisplay", inputs: { playStartAction: "playStartAction", playStopAction: "playStopAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", audioData: "audioData", audioClip: "audioClip" }, viewQueries: [{ propertyName: "audioDisplayScrollPane", first: true, predicate: AudioDisplayScrollPane, descendants: true, static: true }], ngImport: i0, template: `
|
|
72
|
-
|
|
73
|
-
<audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
|
|
74
|
-
|
|
75
|
-
<audio-display-control [audioClip]="audioClip"
|
|
76
|
-
[playStartAction]="playStartAction"
|
|
77
|
-
[playSelectionAction]="playSelectionAction"
|
|
78
|
-
[playStopAction]="playStopAction"
|
|
79
|
-
[autoPlayOnSelectToggleAction]="autoPlayOnSelectToggleAction"
|
|
80
|
-
[zoomInAction]="zoomInAction"
|
|
81
|
-
[zoomOutAction]="zoomOutAction"
|
|
82
|
-
[zoomSelectedAction]="zoomSelectedAction"
|
|
83
|
-
[zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
|
|
84
|
-
`, isInline: true, styles: [":host{display:flex;flex-direction:column;position:absolute;bottom:0;height:100%;width:100%;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#e6e6e6}\n", "legend{margin-left:1em;padding:.2em .8em;font-size:.8em}\n", "fieldset{border:1px darkgray solid}\n"], dependencies: [{ kind: "component", type: i1.AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: ["audioClip"], outputs: ["zoomInAction", "zoomOutAction", "zoomSelectedAction", "zoomFitToPanelAction"] }, { kind: "component", type: i2.AudioDisplayControl, selector: "audio-display-control", inputs: ["audioClip", "playStartAction", "playSelectionAction", "playStopAction", "zoomInAction", "zoomOutAction", "zoomFitToPanelAction", "zoomSelectedAction", "autoPlayOnSelectToggleAction"] }] }); }
|
|
85
|
-
}
|
|
86
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AudioDisplay, decorators: [{
|
|
87
|
-
type: Component,
|
|
88
|
-
args: [{ selector: 'app-audiodisplay', template: `
|
|
89
|
-
|
|
90
|
-
<audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
|
|
91
|
-
|
|
92
|
-
<audio-display-control [audioClip]="audioClip"
|
|
93
|
-
[playStartAction]="playStartAction"
|
|
94
|
-
[playSelectionAction]="playSelectionAction"
|
|
95
|
-
[playStopAction]="playStopAction"
|
|
96
|
-
[autoPlayOnSelectToggleAction]="autoPlayOnSelectToggleAction"
|
|
97
|
-
[zoomInAction]="zoomInAction"
|
|
98
|
-
[zoomOutAction]="zoomOutAction"
|
|
99
|
-
[zoomSelectedAction]="zoomSelectedAction"
|
|
100
|
-
[zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
|
|
101
|
-
`, styles: [":host{display:flex;flex-direction:column;position:absolute;bottom:0;height:100%;width:100%;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#e6e6e6}\n", "legend{margin-left:1em;padding:.2em .8em;font-size:.8em}\n", "fieldset{border:1px darkgray solid}\n"] }]
|
|
102
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { playStartAction: [{
|
|
103
|
-
type: Input
|
|
104
|
-
}], playStopAction: [{
|
|
105
|
-
type: Input
|
|
106
|
-
}], playSelectionAction: [{
|
|
107
|
-
type: Input
|
|
108
|
-
}], autoPlayOnSelectToggleAction: [{
|
|
109
|
-
type: Input
|
|
110
|
-
}], audioDisplayScrollPane: [{
|
|
111
|
-
type: ViewChild,
|
|
112
|
-
args: [AudioDisplayScrollPane, { static: true }]
|
|
113
|
-
}], audioData: [{
|
|
114
|
-
type: Input
|
|
115
|
-
}], audioClip: [{
|
|
116
|
-
type: Input
|
|
117
|
-
}] } });
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fZGlzcGxheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9hdWRpb19kaXNwbGF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsU0FBUyxFQUVNLEtBQUssR0FDdkIsTUFBTSxlQUFlLENBQUE7QUFHdEIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3hDLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDOzs7O0FBNEN0RSxNQUFNLE9BQU8sWUFBWTtJQTRCdkIsWUFBb0IsR0FBc0IsRUFBUyxJQUFlO1FBQTlDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBVztRQXpCMUQsZUFBVSxHQUFnQixJQUFJLENBQUE7UUEwQnBDLHVDQUF1QztRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLG1CQUFtQixHQUFDLElBQUksTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sR0FBQyxpQkFBaUIsQ0FBQztJQUVoQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsR0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsa0JBQWtCLENBQUE7UUFDdEUsSUFBSSxDQUFDLG9CQUFvQixHQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQTtRQUMxRSxJQUFJLENBQUMsYUFBYSxHQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUE7UUFDNUQsSUFBSSxDQUFDLFlBQVksR0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFBO0lBQzVELENBQUM7SUFFRCxlQUFlO1FBRVgsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2QsSUFBSSxjQUFjLEdBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQXlCLEVBQUMsRUFBbUIsRUFBQyxFQUFFO1lBQ3JGLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFpQixFQUFDLEVBQUU7Z0JBQzdCLElBQUcsWUFBWSxLQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUcsRUFBRSxDQUFDLGFBQWEsSUFBSSxPQUFPLEtBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFDLENBQUM7b0JBQ3JGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQyxDQUFDLENBQUM7UUFDSCxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUMsRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUdELE1BQU07UUFDSixJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUdELE9BQU87UUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFHRCxJQUNJLFNBQVMsQ0FBQyxTQUEwQjtRQUNwQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUNsRCxJQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4QixPQUFPLENBQUMsS0FBSyxDQUFDLCtEQUErRCxHQUFDLENBQUMsU0FBUyxJQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDL0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUE7UUFDdkQsQ0FBQztJQUNMLENBQUM7SUFHRCxJQUNJLFNBQVMsQ0FBQyxTQUEyQjtRQUV2QyxzQ0FBc0M7UUFDdEMsSUFBSSxHQUFHLEdBQWdCLElBQUksQ0FBQztRQUM1QixJQUFHLFNBQVMsRUFBQyxDQUFDO1lBQ1osNkNBQTZDO1lBQzdDLEdBQUcsR0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO1FBQ3hCLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxHQUFDLFNBQVMsQ0FBQTtRQUN6QixJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUNsRCxvREFBb0Q7SUFDdEQsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQTtJQUN4QixDQUFDO0lBRUQsSUFBSSxpQkFBaUIsQ0FBQyxpQkFBd0I7UUFDMUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFBO0lBQ3JFLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDeEIsQ0FBQzsrR0F4R1UsWUFBWTttR0FBWixZQUFZLDRWQXlCWixzQkFBc0IsOERBOUR2Qjs7Ozs7Ozs7Ozs7OztHQWFUOzs0RkF3QlUsWUFBWTtrQkF6Q3hCLFNBQVM7K0JBRUUsa0JBQWtCLFlBRWxCOzs7Ozs7Ozs7Ozs7O0dBYVQ7K0dBOEJELGVBQWU7c0JBRGQsS0FBSztnQkFHTixjQUFjO3NCQURiLEtBQUs7Z0JBR04sbUJBQW1CO3NCQURsQixLQUFLO2dCQUdOLDRCQUE0QjtzQkFEM0IsS0FBSztnQkFlTixzQkFBc0I7c0JBRHJCLFNBQVM7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQThDL0MsU0FBUztzQkFEWixLQUFLO2dCQVdGLFNBQVM7c0JBRFosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIEFmdGVyVmlld0luaXQsIElucHV0LCBPbkluaXQsIEVsZW1lbnRSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuXHJcbmltcG9ydCB7QXVkaW9DbGlwLCBTZWxlY3Rpb259IGZyb20gJy4vcGVyc2lzdG9yJ1xyXG5pbXBvcnQge0FjdGlvbn0gZnJvbSBcIi4uL2FjdGlvbi9hY3Rpb25cIjtcclxuaW1wb3J0IHtBdWRpb0Rpc3BsYXlTY3JvbGxQYW5lfSBmcm9tIFwiLi91aS9hdWRpb19kaXNwbGF5X3Njcm9sbF9wYW5lXCI7XHJcbmltcG9ydCB7QXVkaW9EYXRhSG9sZGVyfSBmcm9tIFwiLi9hdWRpb19kYXRhX2hvbGRlclwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblxyXG4gIHNlbGVjdG9yOiAnYXBwLWF1ZGlvZGlzcGxheScsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcblxyXG4gICAgPGF1ZGlvLWRpc3BsYXktc2Nyb2xsLXBhbmUgI2F1ZGlvRGlzcGxheVNjcm9sbFBhbmU+PC9hdWRpby1kaXNwbGF5LXNjcm9sbC1wYW5lPlxyXG5cclxuICAgIDxhdWRpby1kaXNwbGF5LWNvbnRyb2wgW2F1ZGlvQ2xpcF09XCJhdWRpb0NsaXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RhcnRBY3Rpb25dPVwicGxheVN0YXJ0QWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxheVNlbGVjdGlvbkFjdGlvbl09XCJwbGF5U2VsZWN0aW9uQWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RvcEFjdGlvbl09XCJwbGF5U3RvcEFjdGlvblwiXHJcbiAgICBbYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbl09XCJhdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uXCJcclxuICAgIFt6b29tSW5BY3Rpb25dPVwiem9vbUluQWN0aW9uXCJcclxuICAgIFt6b29tT3V0QWN0aW9uXT1cInpvb21PdXRBY3Rpb25cIlxyXG4gICAgW3pvb21TZWxlY3RlZEFjdGlvbl09XCJ6b29tU2VsZWN0ZWRBY3Rpb25cIlxyXG4gICAgW3pvb21GaXRUb1BhbmVsQWN0aW9uXT1cInpvb21GaXRUb1BhbmVsQWN0aW9uXCI+PC9hdWRpby1kaXNwbGF5LWNvbnRyb2w+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtcclxuICAgICAgYDpob3N0IHtcclxuICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICAgYm90dG9tOiAwcHg7XHJcbiAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgICAgICAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgICAgICAgICAgei1pbmRleDogNTtcclxuICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIzMCwgMjMwLCAyMzAsIDEuMClcclxuICAgICAgICAgICB9YCxgXHJcbiAgICAgICAgICBsZWdlbmR7XHJcbiAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDFlbTsgcGFkZGluZzogMC4yZW0gMC44ZW07Zm9udC1zaXplOiAwLjhlbTtcclxuICAgICAgfWAsYFxyXG4gICAgICAgIGZpZWxkc2V0e1xyXG4gICAgICAgICAgICBib3JkZXI6IDFweCBkYXJrZ3JheSBzb2xpZFxyXG4gICAgICB9XHJcbiAgICAgIGBdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXVkaW9EaXNwbGF5IGltcGxlbWVudHMgT25Jbml0LEFmdGVyVmlld0luaXQge1xyXG5cclxuICBwYXJlbnRFOiBIVE1MRWxlbWVudDtcclxuICBwcml2YXRlIF9hdWRpb0NsaXA6QXVkaW9DbGlwfG51bGw9bnVsbFxyXG5cclxuICBASW5wdXQoKVxyXG4gIHBsYXlTdGFydEFjdGlvbjogQWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuICBASW5wdXQoKVxyXG4gIHBsYXlTdG9wQWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpXHJcbiAgcGxheVNlbGVjdGlvbkFjdGlvbjpBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpXHJcbiAgYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbiE6QWN0aW9uPGJvb2xlYW4+fHVuZGVmaW5lZDtcclxuXHJcbiAgem9vbUZpdFRvUGFuZWxBY3Rpb24hOkFjdGlvbjx2b2lkPjtcclxuICB6b29tU2VsZWN0ZWRBY3Rpb24hOkFjdGlvbjx2b2lkPlxyXG4gIHpvb21JbkFjdGlvbiE6QWN0aW9uPHZvaWQ+O1xyXG4gIHpvb21PdXRBY3Rpb24hOkFjdGlvbjx2b2lkPjtcclxuXHJcbiAgY2xlYXJTZWxlY3Rpb25BY3Rpb24hOkFjdGlvbjx2b2lkPlxyXG5cclxuICBzdGF0dXM6IHN0cmluZztcclxuXHJcbiAgYXVkaW86IGFueTtcclxuXHJcbiAgQFZpZXdDaGlsZChBdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGF1ZGlvRGlzcGxheVNjcm9sbFBhbmUhOiBBdWRpb0Rpc3BsYXlTY3JvbGxQYW5lO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYscHJpdmF0ZSBlUmVmOkVsZW1lbnRSZWYpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJjb25zdHJ1Y3RvcjogXCIrdGhpcy5hYyk7XHJcbiAgICAgIHRoaXMucGFyZW50RT10aGlzLmVSZWYubmF0aXZlRWxlbWVudDtcclxuICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uID0gbmV3IEFjdGlvbihcIlN0YXJ0XCIpO1xyXG4gICAgdGhpcy5wbGF5U2VsZWN0aW9uQWN0aW9uPW5ldyBBY3Rpb24oXCJQbGF5IHNlbGVjdGVkXCIpO1xyXG4gICAgdGhpcy5wbGF5U3RvcEFjdGlvbiA9IG5ldyBBY3Rpb24oXCJTdG9wXCIpO1xyXG4gICAgdGhpcy5zdGF0dXM9XCJQbGF5ZXIgY3JlYXRlZC5cIjtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpe1xyXG4gICAgdGhpcy56b29tU2VsZWN0ZWRBY3Rpb249dGhpcy5hdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLnpvb21TZWxlY3RlZEFjdGlvblxyXG4gICAgdGhpcy56b29tRml0VG9QYW5lbEFjdGlvbj10aGlzLmF1ZGlvRGlzcGxheVNjcm9sbFBhbmUuem9vbUZpdFRvUGFuZWxBY3Rpb25cclxuICAgIHRoaXMuem9vbU91dEFjdGlvbj10aGlzLmF1ZGlvRGlzcGxheVNjcm9sbFBhbmUuem9vbU91dEFjdGlvblxyXG4gICAgdGhpcy56b29tSW5BY3Rpb249dGhpcy5hdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLnpvb21JbkFjdGlvblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG5cclxuICAgICAgdGhpcy5sYXlvdXQoKTtcclxuICAgICAgbGV0IGhlaWdodExpc3RlbmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKChtcnM6QXJyYXk8TXV0YXRpb25SZWNvcmQ+LG1vOk11dGF0aW9uT2JzZXJ2ZXIpPT57XHJcbiAgICAgICAgICBtcnMuZm9yRWFjaCgobXI6TXV0YXRpb25SZWNvcmQpPT57XHJcbiAgICAgICAgICAgICAgaWYoJ2F0dHJpYnV0ZXMnPT09bXIudHlwZSAmJiAoJ2NsYXNzJz09PW1yLmF0dHJpYnV0ZU5hbWUgfHwgJ3N0eWxlJz09PW1yLmF0dHJpYnV0ZU5hbWUpKXtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5sYXlvdXQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgICAgaGVpZ2h0TGlzdGVuZXIub2JzZXJ2ZSh0aGlzLnBhcmVudEUse2F0dHJpYnV0ZXM6IHRydWUsY2hpbGRMaXN0OiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgbGF5b3V0KCl7XHJcbiAgICB0aGlzLmF1ZGlvRGlzcGxheVNjcm9sbFBhbmUubGF5b3V0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc3RhcnRlZCgpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiUGxheSBzdGFydGVkXCIpO1xyXG4gICAgdGhpcy5zdGF0dXMgPSAnUGxheWluZy4uLic7XHJcbiAgfVxyXG5cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgYXVkaW9EYXRhKGF1ZGlvRGF0YTogQXVkaW9EYXRhSG9sZGVyKXtcclxuICAgICAgdGhpcy5hdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLmF1ZGlvRGF0YSA9IGF1ZGlvRGF0YTtcclxuICAgICAgaWYodGhpcy5wbGF5U3RhcnRBY3Rpb24pIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKFwiUGxheSBzdGFydCBhY3Rpb24gKGJ5IEF1ZGlvRGlzcGxheTo6c2V0IGF1ZGlvRGF0YSkgZGlzYWJsZWQ6IFwiKyhhdWRpb0RhdGE9PW51bGwpKTtcclxuICAgICAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gKGF1ZGlvRGF0YSA9PSBudWxsKVxyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgYXVkaW9DbGlwKGF1ZGlvQ2xpcDogQXVkaW9DbGlwIHwgbnVsbCkge1xyXG5cclxuICAgIC8vbGV0IGF1ZGlvRGF0YTpBdWRpb0J1ZmZlcnxudWxsPW51bGw7XHJcbiAgICBsZXQgc2VsOlNlbGVjdGlvbnxudWxsPW51bGw7XHJcbiAgICBpZihhdWRpb0NsaXApe1xyXG4gICAgICAvL2F1ZGlvRGF0YT1hdWRpb0NsaXAuYXVkaW9EYXRhSG9sZGVyLmJ1ZmZlcjtcclxuICAgICAgc2VsPWF1ZGlvQ2xpcC5zZWxlY3Rpb247XHJcbiAgICAgIH1cclxuICAgIHRoaXMuX2F1ZGlvQ2xpcD1hdWRpb0NsaXBcclxuICAgIHRoaXMuYXVkaW9EaXNwbGF5U2Nyb2xsUGFuZS5hdWRpb0NsaXAgPSBhdWRpb0NsaXA7XHJcbiAgICAvL3RoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gKGF1ZGlvRGF0YSE9PW51bGwpXHJcbiAgfVxyXG5cclxuICBnZXQgYXVkaW9DbGlwKCk6QXVkaW9DbGlwfG51bGx7XHJcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9DbGlwXHJcbiAgfVxyXG5cclxuICBzZXQgcGxheUZyYW1lUG9zaXRpb24ocGxheUZyYW1lUG9zaXRpb246bnVtYmVyKXtcclxuICAgICAgdGhpcy5hdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLnBsYXlGcmFtZVBvc2l0aW9uID0gcGxheUZyYW1lUG9zaXRpb25cclxuICB9XHJcblxyXG4gIGVycm9yKCkge1xyXG4gICAgdGhpcy5zdGF0dXMgPSAnRVJST1InO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbiJdfQ==
|