speechrecorderng 2.25.3 → 3.0.0
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/esm2020/lib/audio/array_audio_buffer.mjs +101 -0
- package/esm2020/lib/audio/array_audio_buffer_input_stream.mjs +86 -0
- package/esm2020/lib/audio/audio_data_holder.mjs +109 -0
- package/esm2020/lib/audio/audio_display.mjs +5 -5
- package/esm2020/lib/audio/audio_player.mjs +9 -7
- package/esm2020/lib/audio/capture/capture.mjs +6 -1
- package/esm2020/lib/audio/dsp/level_measure.mjs +97 -55
- package/esm2020/lib/audio/io/stream.mjs +3 -3
- package/esm2020/lib/audio/persistor.mjs +5 -6
- package/esm2020/lib/audio/playback/array_audio_buffer_source_node.mjs +265 -0
- package/esm2020/lib/audio/playback/player.mjs +184 -50
- package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +25 -13
- package/esm2020/lib/audio/ui/audio_display_scroll_pane.mjs +2 -2
- package/esm2020/lib/audio/ui/audiosignal.mjs +206 -77
- package/esm2020/lib/audio/ui/container.mjs +14 -14
- package/esm2020/lib/audio/ui/livelevel.mjs +15 -2
- package/esm2020/lib/audio/ui/sonagram.mjs +343 -160
- package/esm2020/lib/io/stream.mjs +77 -1
- package/esm2020/lib/net/uploader.mjs +15 -3
- package/esm2020/lib/speechrecorder/recording.mjs +52 -7
- package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +99 -7
- package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +117 -101
- package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +34 -6
- package/esm2020/lib/speechrecorder/session/progress.mjs +2 -2
- package/esm2020/lib/speechrecorder/session/prompting.mjs +2 -2
- package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +6 -3
- package/esm2020/lib/speechrecorder/session/recording_file_cache.mjs +182 -0
- package/esm2020/lib/speechrecorder/session/recording_list.mjs +23 -10
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +12 -6
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +5 -5
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +13 -9
- package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +8 -5
- package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +118 -95
- package/esm2020/lib/speechrecorderng.component.mjs +2 -2
- package/esm2020/lib/speechrecorderng.module.mjs +5 -4
- package/esm2020/lib/spr.module.version.mjs +2 -2
- package/esm2020/lib/ui/recordingitem_display.mjs +2 -2
- package/fesm2015/speechrecorderng.mjs +2321 -743
- package/fesm2015/speechrecorderng.mjs.map +1 -1
- package/fesm2020/speechrecorderng.mjs +2321 -753
- package/fesm2020/speechrecorderng.mjs.map +1 -1
- package/lib/audio/array_audio_buffer.d.ts +15 -0
- package/lib/audio/array_audio_buffer_input_stream.d.ts +14 -0
- package/lib/audio/audio_data_holder.d.ts +29 -0
- package/lib/audio/audio_display.d.ts +2 -1
- package/lib/audio/audio_player.d.ts +2 -1
- package/lib/audio/capture/capture.d.ts +2 -0
- package/lib/audio/dsp/level_measure.d.ts +2 -1
- package/lib/audio/persistor.d.ts +4 -3
- package/lib/audio/playback/array_audio_buffer_source_node.d.ts +24 -0
- package/lib/audio/playback/player.d.ts +6 -0
- package/lib/audio/ui/audio_canvas_layer_comp.d.ts +4 -1
- package/lib/audio/ui/audio_display_scroll_pane.d.ts +2 -1
- package/lib/audio/ui/audiosignal.d.ts +3 -2
- package/lib/audio/ui/container.d.ts +3 -2
- package/lib/audio/ui/livelevel.d.ts +3 -1
- package/lib/audio/ui/sonagram.d.ts +3 -2
- package/lib/io/stream.d.ts +17 -0
- package/lib/net/uploader.d.ts +6 -1
- package/lib/speechrecorder/recording.d.ts +15 -3
- package/lib/speechrecorder/recordings/recordings.service.d.ts +2 -0
- package/lib/speechrecorder/session/audiorecorder.d.ts +2 -7
- package/lib/speechrecorder/session/basicrecorder.d.ts +9 -3
- package/lib/speechrecorder/session/progress.d.ts +1 -1
- package/lib/speechrecorder/session/prompting.d.ts +1 -1
- package/lib/speechrecorder/session/recorder_combi_pane.d.ts +3 -1
- package/lib/speechrecorder/session/recording_file_cache.d.ts +30 -0
- package/lib/speechrecorder/session/recording_list.d.ts +3 -1
- package/lib/speechrecorder/session/recordingfile/recording-file-meta.component.d.ts +2 -1
- package/lib/speechrecorder/session/recordingfile/recording-file-view.component.d.ts +1 -0
- package/lib/speechrecorder/session/sessionmanager.d.ts +5 -11
- package/lib/speechrecorderng.module.d.ts +2 -1
- package/lib/spr.module.version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -120,47 +120,66 @@ export class PeakLevelInterceptor {
|
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
export class LevelMeasure {
|
|
123
|
+
//private bufferLevelInfos=new Array<LevelInfo>();
|
|
124
|
+
//private peakLevelInfo!:LevelInfo;
|
|
123
125
|
constructor() {
|
|
124
126
|
this.worker = null;
|
|
125
127
|
this.workerURL = WorkerHelper.buildWorkerBlobURL(this.workerFunction);
|
|
126
128
|
}
|
|
127
|
-
calcBufferLevelInfos(
|
|
129
|
+
calcBufferLevelInfos(audioDataHolder, bufferTimeLength) {
|
|
128
130
|
return new Promise((resolve) => {
|
|
129
|
-
let chs =
|
|
130
|
-
let bufferFrameLength = Math.round(
|
|
131
|
-
let
|
|
131
|
+
let chs = audioDataHolder.numberOfChannels;
|
|
132
|
+
let bufferFrameLength = Math.round(audioDataHolder.sampleRate * bufferTimeLength);
|
|
133
|
+
let ais = audioDataHolder.audioInputStream();
|
|
134
|
+
let audioBuffers = new Array(chs);
|
|
135
|
+
let trBuffers = new Array(chs);
|
|
132
136
|
for (let ch = 0; ch < chs; ch++) {
|
|
133
|
-
|
|
134
|
-
let adChCopy = new Float32Array(adCh.length);
|
|
135
|
-
adChCopy.set(adCh);
|
|
136
|
-
buffers[ch] = adChCopy.buffer;
|
|
137
|
+
audioBuffers[ch] = new Float32Array(bufferFrameLength);
|
|
137
138
|
}
|
|
139
|
+
let bufferLevelInfos = new Array();
|
|
140
|
+
let peakLevelInfo = new LevelInfo(chs);
|
|
138
141
|
this.worker = new Worker(this.workerURL);
|
|
139
142
|
this.worker.onmessage = (me) => {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
+
if (me.data.linLevelBuffers) {
|
|
144
|
+
let linLevelArrs = new Array(chs);
|
|
145
|
+
for (let ch = 0; ch < chs; ch++) {
|
|
146
|
+
linLevelArrs[ch] = new Float32Array(me.data.linLevelBuffers[ch]);
|
|
147
|
+
}
|
|
148
|
+
let bufferCount = Math.ceil(me.data.frameLength / me.data.bufferFrameLength);
|
|
149
|
+
let framePos = 0;
|
|
150
|
+
for (let bi = 0; bi < bufferCount; bi++) {
|
|
151
|
+
let minLevels = new Array(chs);
|
|
152
|
+
let maxLevels = new Array(chs);
|
|
153
|
+
for (let ch = 0; ch < chs; ch++) {
|
|
154
|
+
let linLvlArrPos = bi * 2;
|
|
155
|
+
minLevels[ch] = linLevelArrs[ch][linLvlArrPos];
|
|
156
|
+
maxLevels[ch] = linLevelArrs[ch][linLvlArrPos + 1];
|
|
157
|
+
}
|
|
158
|
+
let bli = new LevelInfo(chs, framePos, me.data.bufferFrameLength, minLevels, maxLevels);
|
|
159
|
+
bufferLevelInfos.push(bli);
|
|
160
|
+
peakLevelInfo.merge(bli);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (me.data.eod === true) {
|
|
164
|
+
// end of data, terminate worker and return result
|
|
165
|
+
this.terminateWorker();
|
|
166
|
+
resolve(new LevelInfos(bufferLevelInfos, peakLevelInfo));
|
|
143
167
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
let bufferLevelInfos = new Array();
|
|
147
|
-
let peakLevelInfo = new LevelInfo(chs);
|
|
148
|
-
for (let bi = 0; bi < bufferCount; bi++) {
|
|
149
|
-
let minLevels = new Array(chs);
|
|
150
|
-
let maxLevels = new Array(chs);
|
|
168
|
+
else {
|
|
169
|
+
let read = ais.read(audioBuffers);
|
|
151
170
|
for (let ch = 0; ch < chs; ch++) {
|
|
152
|
-
let
|
|
153
|
-
|
|
154
|
-
maxLevels[ch] = linLevelArrs[ch][linLvlArrPos + 1];
|
|
171
|
+
let copy = new Float32Array(audioBuffers[ch]);
|
|
172
|
+
trBuffers[ch] = copy.buffer;
|
|
155
173
|
}
|
|
156
|
-
|
|
157
|
-
bufferLevelInfos.push(bli);
|
|
158
|
-
peakLevelInfo.merge(bli);
|
|
174
|
+
this.worker?.postMessage({ bufferFrameLength: bufferFrameLength, audioData: trBuffers, chs: chs, len: read }, trBuffers);
|
|
159
175
|
}
|
|
160
|
-
this.terminateWorker();
|
|
161
|
-
resolve(new LevelInfos(bufferLevelInfos, peakLevelInfo));
|
|
162
176
|
};
|
|
163
|
-
|
|
177
|
+
let read = ais.read(audioBuffers);
|
|
178
|
+
for (let ch = 0; ch < chs; ch++) {
|
|
179
|
+
let copy = new Float32Array(audioBuffers[ch]);
|
|
180
|
+
trBuffers[ch] = copy.buffer;
|
|
181
|
+
}
|
|
182
|
+
this.worker?.postMessage({ bufferFrameLength: bufferFrameLength, audioData: trBuffers, chs: chs, len: read }, trBuffers);
|
|
164
183
|
});
|
|
165
184
|
}
|
|
166
185
|
terminateWorker() {
|
|
@@ -171,40 +190,63 @@ export class LevelMeasure {
|
|
|
171
190
|
*/
|
|
172
191
|
workerFunction() {
|
|
173
192
|
self.onmessage = function (msg) {
|
|
174
|
-
let
|
|
193
|
+
let len = msg.data.len;
|
|
175
194
|
let bufferFrameLength = msg.data.bufferFrameLength;
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
195
|
+
if (len == -1) {
|
|
196
|
+
// start
|
|
197
|
+
postMessage({
|
|
198
|
+
eod: false,
|
|
199
|
+
bufferFrameLength: bufferFrameLength,
|
|
200
|
+
frameLength: len
|
|
201
|
+
});
|
|
180
202
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
203
|
+
if (len == 0) {
|
|
204
|
+
postMessage({
|
|
205
|
+
eod: true,
|
|
206
|
+
bufferFrameLength: bufferFrameLength,
|
|
207
|
+
frameLength: len
|
|
208
|
+
});
|
|
185
209
|
}
|
|
186
|
-
|
|
210
|
+
else {
|
|
211
|
+
let chs = msg.data.chs;
|
|
212
|
+
let audioData = new Array(chs);
|
|
213
|
+
let linLevels = new Array(chs);
|
|
187
214
|
for (let ch = 0; ch < chs; ch++) {
|
|
188
|
-
|
|
189
|
-
for (let s = 0; s < frameLength; s++) {
|
|
190
|
-
let bi = Math.floor(s / bufferFrameLength);
|
|
191
|
-
let lvlArrPos = bi * 2;
|
|
192
|
-
//let bs = s % bufferFrameLength;
|
|
193
|
-
let chSample = chData[s];
|
|
194
|
-
if (chSample < linLevels[ch][lvlArrPos]) {
|
|
195
|
-
linLevels[ch][lvlArrPos] = chSample;
|
|
196
|
-
}
|
|
197
|
-
lvlArrPos++;
|
|
198
|
-
if (chSample > linLevels[ch][lvlArrPos]) {
|
|
199
|
-
linLevels[ch][lvlArrPos] = chSample;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
215
|
+
audioData[ch] = new Float32Array(msg.data.audioData[ch]);
|
|
202
216
|
}
|
|
203
|
-
|
|
217
|
+
//let frameLength = audioData[0].length;
|
|
218
|
+
let bufferCount = Math.ceil(len / bufferFrameLength);
|
|
204
219
|
for (let ch = 0; ch < chs; ch++) {
|
|
205
|
-
|
|
220
|
+
linLevels[ch] = new Float32Array(bufferCount * 2);
|
|
221
|
+
}
|
|
222
|
+
if (audioData && chs > 0) {
|
|
223
|
+
for (let ch = 0; ch < chs; ch++) {
|
|
224
|
+
let chData = audioData[ch];
|
|
225
|
+
for (let s = 0; s < len; s++) {
|
|
226
|
+
let bi = Math.floor(s / bufferFrameLength);
|
|
227
|
+
let lvlArrPos = bi * 2;
|
|
228
|
+
//let bs = s % bufferFrameLength;
|
|
229
|
+
let chSample = chData[s];
|
|
230
|
+
if (chSample < linLevels[ch][lvlArrPos]) {
|
|
231
|
+
linLevels[ch][lvlArrPos] = chSample;
|
|
232
|
+
}
|
|
233
|
+
lvlArrPos++;
|
|
234
|
+
if (chSample > linLevels[ch][lvlArrPos]) {
|
|
235
|
+
linLevels[ch][lvlArrPos] = chSample;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
const linLevelBufs = new Array(chs);
|
|
240
|
+
for (let ch = 0; ch < chs; ch++) {
|
|
241
|
+
linLevelBufs[ch] = linLevels[ch].buffer;
|
|
242
|
+
}
|
|
243
|
+
postMessage({
|
|
244
|
+
eod: false,
|
|
245
|
+
bufferFrameLength: bufferFrameLength,
|
|
246
|
+
frameLength: len,
|
|
247
|
+
linLevelBuffers: linLevelBufs
|
|
248
|
+
}, linLevelBufs);
|
|
206
249
|
}
|
|
207
|
-
postMessage({ bufferFrameLength: bufferFrameLength, frameLength: frameLength, linLevelBuffers: linLevelBufs }, linLevelBufs);
|
|
208
250
|
}
|
|
209
251
|
};
|
|
210
252
|
}
|
|
@@ -348,4 +390,4 @@ export class StreamLevelMeasure {
|
|
|
348
390
|
this.worker?.terminate();
|
|
349
391
|
}
|
|
350
392
|
}
|
|
351
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV2ZWxfbWVhc3VyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9kc3AvbGV2ZWxfbWVhc3VyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFJbEMsTUFBTSxPQUFPLFNBQVM7SUFLcEIsWUFBNEIsWUFBb0IsRUFDN0IsYUFBcUIsQ0FBQyxFQUN0QixjQUFzQixDQUFDLEVBQzlCLFlBQTRCLEVBQzVCLFlBQTRCO1FBSlosaUJBQVksR0FBWixZQUFZLENBQVE7UUFDN0IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUd4QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEdBQThCO1FBQ3JELElBQUksR0FBRyxFQUFFO1lBQ1AsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxZQUFZO2dCQUNsQyxNQUFPLElBQUksS0FBSyxDQUFDLDhDQUE4QyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2RixPQUFP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LGlCQUFpQixFQUFDO2dCQUN4QixJQUFJLFNBQVMsR0FBRyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQy9DLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEVBQUU7b0JBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO29CQUMvQixrREFBa0Q7b0JBQ2xELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQzVDO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFHRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RTUFV0aWxzfSBmcm9tIFwiLi4vLi4vZHNwL3V0aWxzXCI7XHJcbmltcG9ydCB7U2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW19IGZyb20gXCIuLi9pby9zdHJlYW1cIjtcclxuaW1wb3J0IHtBcnJheXMsIFdvcmtlckhlbHBlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgY29uc3QgTUlOX0RCX0xFVkVMID0gLTQwLjA7XHJcblxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBMZXZlbEluZm8ge1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9taW5MaW5MZXZlbHM6IEFycmF5PG51bWJlcj47XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfbWF4TGluTGV2ZWxzOiBBcnJheTxudW1iZXI+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgY2hhbm5lbENvdW50OiBudW1iZXIsXHJcbiAgICAgICAgICAgICAgcHVibGljIHN0YXJ0RnJhbWU6IG51bWJlciA9IDAsXHJcbiAgICAgICAgICAgICAgcHVibGljIGZyYW1lTGVuZ3RoOiBudW1iZXIgPSAwLFxyXG4gICAgICAgICAgICAgIG1pbkxpbkxldmVscz86IEFycmF5PG51bWJlcj4sXHJcbiAgICAgICAgICAgICAgbWF4TGluTGV2ZWxzPzogQXJyYXk8bnVtYmVyPikge1xyXG4gICAgdGhpcy5fbWluTGluTGV2ZWxzID0gdGhpcy5jaGVja09ySW5pdEFycmF5KG1pbkxpbkxldmVscyk7XHJcbiAgICB0aGlzLl9tYXhMaW5MZXZlbHMgPSB0aGlzLmNoZWNrT3JJbml0QXJyYXkobWF4TGluTGV2ZWxzKTtcclxuICB9XHJcblxyXG4gIGdldCBtaW5MaW5MZXZlbHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluTGluTGV2ZWxzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1heExpbkxldmVscygpIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXhMaW5MZXZlbHM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrT3JJbml0QXJyYXkoYXJyOiBBcnJheTxudW1iZXI+IHwgdW5kZWZpbmVkKTogQXJyYXk8bnVtYmVyPiB7XHJcbiAgICBpZiAoYXJyKSB7XHJcbiAgICAgIGlmIChhcnIubGVuZ3RoICE9PSB0aGlzLmNoYW5uZWxDb3VudClcclxuICAgICAgICB0aHJvdyAgbmV3IEVycm9yKFwiTGV2ZWwgYXJyYXlzIG11c3QgYmUgZXF1YWwgdG8gY2hhbm5lbCBjb3VudCBcIiArIHRoaXMuY2hhbm5lbENvdW50KTtcclxuICAgICAgcmV0dXJuIGFycjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgQXJyYXk8bnVtYmVyPih0aGlzLmNoYW5uZWxDb3VudClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1lcmdlKGxldmVsSW5mbzogTGV2ZWxJbmZvKSB7XHJcbiAgICBpZiAobGV2ZWxJbmZvID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYW5uZWxDb3VudCAhPT0gbGV2ZWxJbmZvLmNoYW5uZWxDb3VudCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGFubmVsIGNvdW50IG9mIGxldmVsIGluZm8gdG8gbWVyZ2UgbXVzdCBiZSBlcXVhbC4gKFwiICsgdGhpcy5jaGFubmVsQ291bnQgKyBcIiAhPSBcIiArIGxldmVsSW5mby5jaGFubmVsQ291bnQgKyBcIilcIik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGVuZEZyYW1lID0gdGhpcy5zdGFydEZyYW1lICsgdGhpcy5mcmFtZUxlbmd0aDtcclxuICAgIGxldCBtZXJnZUVuZEZyYW1lID0gbGV2ZWxJbmZvLnN0YXJ0RnJhbWUgKyBsZXZlbEluZm8uZnJhbWVMZW5ndGg7XHJcblxyXG4gICAgaWYgKGxldmVsSW5mby5zdGFydEZyYW1lIDwgdGhpcy5zdGFydEZyYW1lKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRGcmFtZSA9IGxldmVsSW5mby5zdGFydEZyYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtZXJnZUVuZEZyYW1lID4gZW5kRnJhbWUpIHtcclxuICAgICAgdGhpcy5mcmFtZUxlbmd0aCA9IG1lcmdlRW5kRnJhbWUgLSB0aGlzLnN0YXJ0RnJhbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbENvdW50OyBjaCsrKSB7XHJcblxyXG4gICAgICBpZiAobGV2ZWxJbmZvLm1pbkxpbkxldmVsc1tjaF0gPCB0aGlzLm1pbkxpbkxldmVsc1tjaF0pIHtcclxuICAgICAgICB0aGlzLm1pbkxpbkxldmVsc1tjaF0gPSBsZXZlbEluZm8ubWluTGluTGV2ZWxzW2NoXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobGV2ZWxJbmZvLm1heExpbkxldmVsc1tjaF0gPiB0aGlzLm1heExpbkxldmVsc1tjaF0pIHtcclxuICAgICAgICB0aGlzLm1heExpbkxldmVsc1tjaF0gPSBsZXZlbEluZm8ubWF4TGluTGV2ZWxzW2NoXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbGV2ZWxzTGluKCk6IEFycmF5PG51bWJlcj4ge1xyXG4gICAgbGV0IGx2bHNMaW4gPSBuZXcgQXJyYXk8bnVtYmVyPih0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgdGhpcy5jaGFubmVsQ291bnQ7IGNoKyspIHtcclxuICAgICAgbHZsc0xpbltjaF0gPSBNYXRoLm1heChNYXRoLmFicyh0aGlzLm1pbkxpbkxldmVsc1tjaF0pLCBNYXRoLmFicyh0aGlzLm1heExpbkxldmVsc1tjaF0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiBsdmxzTGluO1xyXG4gIH1cclxuXHJcbiAgcG93ZXJMZXZlbHNEQigpOiBBcnJheTxudW1iZXI+IHtcclxuICAgIGxldCBsdmxzRGIgPSBuZXcgQXJyYXk8bnVtYmVyPih0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgdGhpcy5jaGFubmVsQ291bnQ7IGNoKyspIHtcclxuICAgICAgbHZsc0RiW2NoXSA9IERTUFV0aWxzLnRvUG93ZXJMZXZlbEluREIodGhpcy5sZXZlbHNMaW4oKVtjaF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGx2bHNEYjtcclxuICB9XHJcblxyXG4gIHBvd2VyTGV2ZWxEQigpOiBudW1iZXIge1xyXG4gICAgbGV0IHBMdmxzRGIgPSB0aGlzLnBvd2VyTGV2ZWxzREIoKTtcclxuICAgIHJldHVybiBNYXRoLm1heCguLi5wTHZsc0RiKTtcclxuICB9XHJcblxyXG4gIGNsb25lKCk6IExldmVsSW5mbyB7XHJcbiAgICByZXR1cm4gbmV3IExldmVsSW5mbyh0aGlzLmNoYW5uZWxDb3VudCwgdGhpcy5zdGFydEZyYW1lLCB0aGlzLmZyYW1lTGVuZ3RoLCBBcnJheXMuY2xvbmVOdW1iZXJBcnJheSh0aGlzLm1pbkxpbkxldmVscyksXHJcbiAgICAgIEFycmF5cy5jbG9uZU51bWJlckFycmF5KHRoaXMubWF4TGluTGV2ZWxzKSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGV2ZWxJbmZvcyB7XHJcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGJ1ZmZlckxldmVsSW5mb3M6IEFycmF5PExldmVsSW5mbz4sIHB1YmxpYyByZWFkb25seSBwZWFrTGV2ZWxJbmZvOiBMZXZlbEluZm8pIHtcclxuICB9XHJcblxyXG4gIGZyYW1lc1BlckJ1ZmZlcigpOm51bWJlcntcclxuICAgIGlmKHRoaXMuYnVmZmVyTGV2ZWxJbmZvcy5sZW5ndGg+MCl7XHJcbiAgICAgIHJldHVybiB0aGlzLmJ1ZmZlckxldmVsSW5mb3NbMF0uZnJhbWVMZW5ndGg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5wZWFrTGV2ZWxJbmZvLmZyYW1lTGVuZ3RoL3RoaXMuYnVmZmVyTGV2ZWxJbmZvcy5sZW5ndGg7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMZXZlbExpc3RlbmVyIHtcclxuICBjaGFubmVsQ291bnQ6IG51bWJlcjtcclxuXHJcbiAgdXBkYXRlKGxldmVsSW5mbzogTGV2ZWxJbmZvLCBwZWFrTGV2ZWxJbmZvOiBMZXZlbEluZm8pOiB2b2lkO1xyXG5cclxuICBzdHJlYW1GaW5pc2hlZCgpOiB2b2lkO1xyXG5cclxuICByZXNldCgpOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBlYWtMZXZlbExpc3RlbmVyIHtcclxuICB1cGRhdGUocGVha0xldmVsOm51bWJlcik6IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGVha0xldmVsTGlzdGVuZXIge1xyXG5cclxuICB1cGRhdGUobGV2ZWxJbmZvOiBMZXZlbEluZm8sIHBlYWtMZXZlbEluZm86IExldmVsSW5mbyk6IHZvaWQ7XHJcblxyXG4gIHN0cmVhbUZpbmlzaGVkKCk6IHZvaWQ7XHJcblxyXG4gIHJlc2V0KCk6IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQZWFrTGV2ZWxJbnRlcmNlcHRvciBpbXBsZW1lbnRzIExldmVsTGlzdGVuZXJ7XHJcbiAgZ2V0IHBlYWtEYkx2bCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BlYWtEYkx2bDtcclxuICB9XHJcbiAgZ2V0IGNoYW5uZWxDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb3VudDtcclxuICB9XHJcblxyXG4gIHNldCBjaGFubmVsQ291bnQodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fY2hhbm5lbENvdW50ID0gdmFsdWU7XHJcbiAgICBpZih0aGlzLmxldmVsTGlzdGVuZXIpe1xyXG4gICAgICB0aGlzLmxldmVsTGlzdGVuZXIuY2hhbm5lbENvdW50PXZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2hhbm5lbENvdW50OiBudW1iZXI9MDtcclxuXHJcbiAgcHJpdmF0ZSBfcGVha0RiTHZsID0gTUlOX0RCX0xFVkVMO1xyXG5cclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbGV2ZWxMaXN0ZW5lcj86TGV2ZWxMaXN0ZW5lcikge31cclxuXHJcbiAgdXBkYXRlKGxldmVsSW5mbzogTGV2ZWxJbmZvLCBwZWFrTGV2ZWxJbmZvOiBMZXZlbEluZm8pOiB2b2lke1xyXG4gICAgbGV0IHBlYWtEQlZhbCA9IGxldmVsSW5mby5wb3dlckxldmVsREIoKTtcclxuICAgIGlmICh0aGlzLnBlYWtEYkx2bCA8IHBlYWtEQlZhbCkge1xyXG4gICAgICB0aGlzLl9wZWFrRGJMdmwgPSBwZWFrREJWYWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdHJlYW1GaW5pc2hlZCgpOiB2b2lke1xyXG4gICAgaWYodGhpcy5sZXZlbExpc3RlbmVyKXtcclxuICAgICAgdGhpcy5sZXZlbExpc3RlbmVyLnN0cmVhbUZpbmlzaGVkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpOiB2b2lke1xyXG4gICAgdGhpcy5fcGVha0RiTHZsID0gTUlOX0RCX0xFVkVMO1xyXG4gICAgaWYodGhpcy5sZXZlbExpc3RlbmVyKXtcclxuICAgICAgdGhpcy5sZXZlbExpc3RlbmVyLnJlc2V0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5kZWNsYXJlIGZ1bmN0aW9uIHBvc3RNZXNzYWdlKG1lc3NhZ2U6IGFueSwgdHJhbnNmZXI/OiBBcnJheTxhbnk+KTogdm9pZDtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgTGV2ZWxNZWFzdXJlIHtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZXJVUkw6IHN0cmluZztcclxuICBwcml2YXRlIHdvcmtlcjogV29ya2VyfG51bGw9bnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLndvcmtlclVSTCA9IFdvcmtlckhlbHBlci5idWlsZFdvcmtlckJsb2JVUkwodGhpcy53b3JrZXJGdW5jdGlvbilcclxuICB9XHJcblxyXG4gIGNhbGNCdWZmZXJMZXZlbEluZm9zKGF1ZGlvQnVmZmVyOiBBdWRpb0J1ZmZlciwgYnVmZmVyVGltZUxlbmd0aDogbnVtYmVyKTogUHJvbWlzZTxMZXZlbEluZm9zPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8TGV2ZWxJbmZvcz4oKHJlc29sdmUpPT57XHJcbiAgICAgIGxldCBjaHMgPSBhdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xyXG4gICAgICBsZXQgYnVmZmVyRnJhbWVMZW5ndGg9TWF0aC5yb3VuZChhdWRpb0J1ZmZlci5zYW1wbGVSYXRlKmJ1ZmZlclRpbWVMZW5ndGgpO1xyXG4gICAgICBsZXQgYnVmZmVycyA9IG5ldyBBcnJheTxhbnk+KGNocyk7XHJcbiAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICBsZXQgYWRDaD1hdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YShjaCk7XHJcbiAgICAgICAgbGV0IGFkQ2hDb3B5PW5ldyBGbG9hdDMyQXJyYXkoYWRDaC5sZW5ndGgpO1xyXG4gICAgICAgIGFkQ2hDb3B5LnNldChhZENoKTtcclxuICAgICAgICBidWZmZXJzW2NoXSA9IGFkQ2hDb3B5LmJ1ZmZlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy53b3JrZXIgPSBuZXcgV29ya2VyKHRoaXMud29ya2VyVVJMKTtcclxuICAgICAgdGhpcy53b3JrZXIub25tZXNzYWdlID0gKG1lKSA9PiB7XHJcblxyXG4gICAgICAgIGxldCBsaW5MZXZlbEFycnM9bmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICBsaW5MZXZlbEFycnNbY2hdID0gbmV3IEZsb2F0MzJBcnJheShtZS5kYXRhLmxpbkxldmVsQnVmZmVyc1tjaF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGJ1ZmZlckNvdW50PU1hdGguY2VpbChtZS5kYXRhLmZyYW1lTGVuZ3RoL21lLmRhdGEuYnVmZmVyRnJhbWVMZW5ndGgpO1xyXG4gICAgICAgIGxldCBmcmFtZVBvcz0wO1xyXG4gICAgICAgIGxldCBidWZmZXJMZXZlbEluZm9zPW5ldyBBcnJheTxMZXZlbEluZm8+KCk7XHJcbiAgICAgICAgbGV0IHBlYWtMZXZlbEluZm89bmV3IExldmVsSW5mbyhjaHMpO1xyXG4gICAgICAgIGZvcihsZXQgYmk9MDtiaTxidWZmZXJDb3VudDtiaSsrKSB7XHJcbiAgICAgICAgICBsZXQgbWluTGV2ZWxzID0gbmV3IEFycmF5PG51bWJlcj4oY2hzKTtcclxuICAgICAgICAgIGxldCBtYXhMZXZlbHMgPSBuZXcgQXJyYXk8bnVtYmVyPihjaHMpO1xyXG4gICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgICBsZXQgbGluTHZsQXJyUG9zPWJpKjI7XHJcbiAgICAgICAgICAgIG1pbkxldmVsc1tjaF09bGluTGV2ZWxBcnJzW2NoXVtsaW5MdmxBcnJQb3NdO1xyXG4gICAgICAgICAgICBtYXhMZXZlbHNbY2hdPWxpbkxldmVsQXJyc1tjaF1bbGluTHZsQXJyUG9zKzFdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGJsaSA9IG5ldyBMZXZlbEluZm8oY2hzLCBmcmFtZVBvcywgbWUuZGF0YS5idWZmZXJGcmFtZUxlbmd0aCwgbWluTGV2ZWxzLCBtYXhMZXZlbHMpO1xyXG4gICAgICAgICAgYnVmZmVyTGV2ZWxJbmZvcy5wdXNoKGJsaSk7XHJcbiAgICAgICAgICBwZWFrTGV2ZWxJbmZvLm1lcmdlKGJsaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGVybWluYXRlV29ya2VyKCk7XHJcbiAgICAgICAgcmVzb2x2ZShuZXcgTGV2ZWxJbmZvcyhidWZmZXJMZXZlbEluZm9zLCBwZWFrTGV2ZWxJbmZvKSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7YnVmZmVyRnJhbWVMZW5ndGg6YnVmZmVyRnJhbWVMZW5ndGgsYXVkaW9EYXRhOiBidWZmZXJzLCBjaHM6IGNoc30sIGJ1ZmZlcnMpO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHRlcm1pbmF0ZVdvcmtlcigpIHtcclxuICAgIHRoaXMud29ya2VyPy50ZXJtaW5hdGUoKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqICBNZXRob2QgdXNlZCBhcyB3b3JrZXIgY29kZS5cclxuICAgKi9cclxuICB3b3JrZXJGdW5jdGlvbigpIHtcclxuICAgIHNlbGYub25tZXNzYWdlID0gZnVuY3Rpb24gKG1zZzpNZXNzYWdlRXZlbnQpIHtcclxuXHJcbiAgICAgIGxldCBjaHMgPSBtc2cuZGF0YS5jaHM7XHJcbiAgICAgIGxldCBidWZmZXJGcmFtZUxlbmd0aCA9IG1zZy5kYXRhLmJ1ZmZlckZyYW1lTGVuZ3RoO1xyXG5cclxuICAgICAgbGV0IGF1ZGlvRGF0YSA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KGNocyk7XHJcbiAgICAgIGxldCBsaW5MZXZlbHMgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5PihjaHMpO1xyXG5cclxuICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgIGF1ZGlvRGF0YVtjaF0gPSBuZXcgRmxvYXQzMkFycmF5KG1zZy5kYXRhLmF1ZGlvRGF0YVtjaF0pO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBmcmFtZUxlbmd0aCA9IGF1ZGlvRGF0YVswXS5sZW5ndGg7XHJcbiAgICAgIGxldCBidWZmZXJDb3VudD1NYXRoLmNlaWwoZnJhbWVMZW5ndGgvYnVmZmVyRnJhbWVMZW5ndGgpO1xyXG4gICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgbGluTGV2ZWxzW2NoXSA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyQ291bnQqMik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGF1ZGlvRGF0YSAmJiBjaHMgPiAwKSB7XHJcbiAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgbGV0IGNoRGF0YSA9IGF1ZGlvRGF0YVtjaF07XHJcblxyXG4gICAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBmcmFtZUxlbmd0aDsgcysrKSB7XHJcbiAgICAgICAgICAgIGxldCBiaSA9IE1hdGguZmxvb3IocyAvIGJ1ZmZlckZyYW1lTGVuZ3RoKTtcclxuICAgICAgICAgICAgbGV0IGx2bEFyclBvcyA9IGJpICogMjtcclxuICAgICAgICAgICAgLy9sZXQgYnMgPSBzICUgYnVmZmVyRnJhbWVMZW5ndGg7XHJcbiAgICAgICAgICAgIGxldCBjaFNhbXBsZT1jaERhdGFbc107XHJcbiAgICAgICAgICAgIGlmIChjaFNhbXBsZSA8IGxpbkxldmVsc1tjaF1bbHZsQXJyUG9zXSkge1xyXG4gICAgICAgICAgICAgIGxpbkxldmVsc1tjaF1bbHZsQXJyUG9zXSA9IGNoU2FtcGxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGx2bEFyclBvcysrO1xyXG4gICAgICAgICAgICBpZiAoY2hTYW1wbGUgPiBsaW5MZXZlbHNbY2hdW2x2bEFyclBvc10pIHtcclxuICAgICAgICAgICAgICBsaW5MZXZlbHNbY2hdW2x2bEFyclBvc10gPSBjaFNhbXBsZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsaW5MZXZlbEJ1ZnMgPSBuZXcgQXJyYXk8YW55PihjaHMpO1xyXG4gICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgIGxpbkxldmVsQnVmc1tjaF0gPSBsaW5MZXZlbHNbY2hdLmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcG9zdE1lc3NhZ2Uoe2J1ZmZlckZyYW1lTGVuZ3RoOmJ1ZmZlckZyYW1lTGVuZ3RoLGZyYW1lTGVuZ3RoOmZyYW1lTGVuZ3RoLGxpbkxldmVsQnVmZmVyczogbGluTGV2ZWxCdWZzfSwgbGluTGV2ZWxCdWZzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBTdHJlYW1MZXZlbE1lYXN1cmUgaW1wbGVtZW50cyBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbSB7XHJcblxyXG4gIGN1cnJlbnRMZXZlbEluZm9zOiBMZXZlbEluZm98bnVsbD1udWxsO1xyXG4gIHBlYWtMZXZlbEluZm86IExldmVsSW5mb3xudWxsPW51bGw7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2VyVVJMOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB3b3JrZXI6IFdvcmtlcnxudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBjaGFubmVsQ291bnQ6IG51bWJlcj0wO1xyXG4gIHByaXZhdGUgYnVmZmVySW5kZXg6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBmcmFtZUNvdW50OiBudW1iZXIgPSAwO1xyXG5cclxuICBsZXZlbExpc3RlbmVyOiBMZXZlbExpc3RlbmVyfG51bGw9bnVsbDtcclxuICBwZWFrTGV2ZWxMaXN0ZW5lcjogKChwZWFrTHZsSW5EYjpudW1iZXIpPT52b2lkKXxudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBwZWFrTGV2ZWxJbkRiOm51bWJlcj1NSU5fREJfTEVWRUw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy53b3JrZXJVUkwgPSBXb3JrZXJIZWxwZXIuYnVpbGRXb3JrZXJCbG9iVVJMKHRoaXMud29ya2VyRnVuY3Rpb24pXHJcbiAgfVxyXG5cclxuICBzZXRGb3JtYXQoY2hhbm5lbHM6IG51bWJlciwgc2FtcGxlUmF0ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmNoYW5uZWxDb3VudCA9IGNoYW5uZWxzO1xyXG4gICAgdGhpcy5jdXJyZW50TGV2ZWxJbmZvcyA9IG5ldyBMZXZlbEluZm8odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgdGhpcy5wZWFrTGV2ZWxJbmZvID0gbmV3IExldmVsSW5mbyh0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICB0aGlzLndvcmtlciA9IG5ldyBXb3JrZXIodGhpcy53b3JrZXJVUkwpO1xyXG4gICAgdGhpcy53b3JrZXIub25tZXNzYWdlID0gKG1lKSA9PiB7XHJcbiAgICAgIGxldCBzdHJlYW1GaW5pc2hlZCA9IG1lLmRhdGEuc3RyZWFtRmluaXNoZWQ7XHJcbiAgICAgIGlmIChzdHJlYW1GaW5pc2hlZCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxldmVsTGlzdGVuZXIpIHtcclxuICAgICAgICAgIHRoaXMubGV2ZWxMaXN0ZW5lci5zdHJlYW1GaW5pc2hlZCgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICBsZXQgbWluTGV2ZWxzID0gbmV3IEFycmF5PG51bWJlcj4odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgICAgIGxldCBtYXhMZXZlbHMgPSBuZXcgQXJyYXk8bnVtYmVyPih0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbENvdW50OyBjaCsrKSB7XHJcbiAgICAgICAgICBsZXQgZmxzID0gbmV3IEZsb2F0MzJBcnJheShtZS5kYXRhLmxpbkxldmVsQnVmZmVyc1tjaF0pO1xyXG4gICAgICAgICAgbWluTGV2ZWxzW2NoXSA9IGZsc1swXTtcclxuICAgICAgICAgIG1heExldmVsc1tjaF0gPSBmbHNbMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBiaSA9IG5ldyBMZXZlbEluZm8odGhpcy5jaGFubmVsQ291bnQsIHRoaXMuZnJhbWVDb3VudCwgbWUuZGF0YS5mcmFlbUxlbmd0aCwgbWluTGV2ZWxzLCBtYXhMZXZlbHMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGV2ZWxzKGJpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIG5leHRTdHJlYW0oKSB7XHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2V0KCkge1xyXG4gICAgdGhpcy5jdXJyZW50TGV2ZWxJbmZvcyA9IG5ldyBMZXZlbEluZm8odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgdGhpcy5wZWFrTGV2ZWxJbmZvID0gbmV3IExldmVsSW5mbyh0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICBpZiAodGhpcy5sZXZlbExpc3RlbmVyKSB7XHJcbiAgICAgIHRoaXMubGV2ZWxMaXN0ZW5lci5yZXNldCgpO1xyXG4gICAgICB0aGlzLmxldmVsTGlzdGVuZXIuY2hhbm5lbENvdW50ID0gdGhpcy5jaGFubmVsQ291bnQ7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wZWFrTGV2ZWxMaXN0ZW5lcikge1xyXG4gICAgICB0aGlzLnBlYWtMZXZlbEluRGI9TUlOX0RCX0xFVkVMO1xyXG4gICAgICB0aGlzLnBlYWtMZXZlbExpc3RlbmVyKHRoaXMucGVha0xldmVsSW5EYik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB3cml0ZShidWZmZXJEYXRhOiBBcnJheTxGbG9hdDMyQXJyYXk+KTogbnVtYmVyIHtcclxuICAgIGxldCBidWZBcnJDb3BpZXMgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5PihidWZmZXJEYXRhLmxlbmd0aCk7XHJcbiAgICBsZXQgYnVmZmVycyA9IG5ldyBBcnJheTxhbnk+KGJ1ZmZlckRhdGEubGVuZ3RoKTtcclxuICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBidWZmZXJEYXRhLmxlbmd0aDsgY2grKykge1xyXG4gICAgICBidWZBcnJDb3BpZXNbY2hdID0gYnVmZmVyRGF0YVtjaF0uc2xpY2UoKTtcclxuICAgICAgYnVmZmVyc1tjaF0gPSBidWZBcnJDb3BpZXNbY2hdLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRoaXMud29ya2VyPy5wb3N0TWVzc2FnZSh7XHJcbiAgICAgIHN0cmVhbUZpbmlzaGVkOiBmYWxzZSxcclxuICAgICAgYXVkaW9EYXRhOiBidWZmZXJzLFxyXG4gICAgICBjaHM6IHRoaXMuY2hhbm5lbENvdW50LFxyXG4gICAgICBidWZmZXJJbmRleDogdGhpcy5idWZmZXJJbmRleFxyXG4gICAgfSwgYnVmZmVycyk7XHJcbiAgICB0aGlzLmJ1ZmZlckluZGV4Kys7XHJcbiAgICByZXR1cm4gYnVmQXJyQ29waWVzWzBdLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGZsdXNoKCkge1xyXG4gICAgdGhpcy53b3JrZXI/LnBvc3RNZXNzYWdlKHtzdHJlYW1GaW5pc2hlZDogdHJ1ZX0pO1xyXG5cclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgICB0aGlzLndvcmtlcj8udGVybWluYXRlKCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqICBNZXRob2QgdXNlZCBhcyB3b3JrZXIgY29kZS5cclxuICAgKi9cclxuICB3b3JrZXJGdW5jdGlvbigpIHtcclxuICAgIHNlbGYub25tZXNzYWdlID0gZnVuY3Rpb24gKG1zZzpNZXNzYWdlRXZlbnQpIHtcclxuICAgICAgbGV0IHN0cmVhbUZpbmlzaGVkID0gbXNnLmRhdGEuc3RyZWFtRmluaXNoZWQ7XHJcbiAgICAgIGlmIChzdHJlYW1GaW5pc2hlZCkge1xyXG4gICAgICAgIHBvc3RNZXNzYWdlKHtzdHJlYW1GaW5pc2hlZDogdHJ1ZX0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBjaHMgPSBtc2cuZGF0YS5jaHM7XHJcbiAgICAgICAgbGV0IGZyYW1lTGVuZ3RoID0gbnVsbDtcclxuICAgICAgICBsZXQgYXVkaW9EYXRhID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuICAgICAgICBsZXQgbGluTGV2ZWxzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICBsaW5MZXZlbHNbY2hdID0gbmV3IEZsb2F0MzJBcnJheSgyKTtcclxuICAgICAgICAgIGF1ZGlvRGF0YVtjaF0gPSBuZXcgRmxvYXQzMkFycmF5KG1zZy5kYXRhLmF1ZGlvRGF0YVtjaF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGF1ZGlvRGF0YSkge1xyXG4gICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgICBsZXQgY2hEYXRhID0gYXVkaW9EYXRhW2NoXTtcclxuICAgICAgICAgICAgaWYgKGZyYW1lTGVuZ3RoID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgZnJhbWVMZW5ndGggPSBjaERhdGEubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgZnJhbWVMZW5ndGg7IHMrKykge1xyXG4gICAgICAgICAgICAgIGxldCBjaFNhbXBsZT1jaERhdGFbc107XHJcbiAgICAgICAgICAgICAgaWYgKGNoU2FtcGxlIDwgbGluTGV2ZWxzW2NoXVswXSkge1xyXG4gICAgICAgICAgICAgICAgbGluTGV2ZWxzW2NoXVswXSA9IGNoU2FtcGxlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoY2hTYW1wbGUgPiBsaW5MZXZlbHNbY2hdWzFdKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5MZXZlbHNbY2hdWzFdID0gY2hTYW1wbGU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBsaW5MZXZlbEJ1ZnMgPSBuZXcgQXJyYXk8YW55PihjaHMpO1xyXG4gICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgIGxpbkxldmVsQnVmc1tjaF0gPSBsaW5MZXZlbHNbY2hdLmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcG9zdE1lc3NhZ2Uoe3N0cmVhbUZpbmlzaGVkOiBmYWxzZSwgZnJhbWVMZW5ndGg6IGZyYW1lTGVuZ3RoLCBsaW5MZXZlbEJ1ZmZlcnM6IGxpbkxldmVsQnVmc30sIGxpbkxldmVsQnVmcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUxldmVscyhidWZmZXJMZXZlbEluZm86IExldmVsSW5mbykge1xyXG5cclxuICAgIHRoaXMuY3VycmVudExldmVsSW5mb3MgPSBidWZmZXJMZXZlbEluZm87XHJcbiAgICBpZih0aGlzLnBlYWtMZXZlbEluZm8pIHtcclxuICAgICAgdGhpcy5wZWFrTGV2ZWxJbmZvLm1lcmdlKGJ1ZmZlckxldmVsSW5mbyk7XHJcbiAgICAgIGlmICh0aGlzLmxldmVsTGlzdGVuZXIpIHtcclxuICAgICAgICB0aGlzLmxldmVsTGlzdGVuZXIudXBkYXRlKHRoaXMuY3VycmVudExldmVsSW5mb3MsIHRoaXMucGVha0xldmVsSW5mby5jbG9uZSgpKTtcclxuICAgICAgfVxyXG4gICAgICBpZih0aGlzLnBlYWtMZXZlbExpc3RlbmVyKXtcclxuICAgICAgICBsZXQgcGVha0RCVmFsID0gYnVmZmVyTGV2ZWxJbmZvLnBvd2VyTGV2ZWxEQigpO1xyXG4gICAgICAgIGlmICh0aGlzLnBlYWtMZXZlbEluRGIgPCBwZWFrREJWYWwpIHtcclxuICAgICAgICAgIHRoaXMucGVha0xldmVsSW5EYiA9IHBlYWtEQlZhbDtcclxuICAgICAgICAgIC8vIHRoZSBldmVudCBjb21lcyBmcm9tIG91dHNpZGUgb2YgYW4gQW5ndWxhciB6b25lXHJcbiAgICAgICAgICB0aGlzLnBlYWtMZXZlbExpc3RlbmVyKHRoaXMucGVha0xldmVsSW5EYik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgc3RvcCgpIHtcclxuICAgIHRoaXMud29ya2VyPy50ZXJtaW5hdGUoKTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iXX0=
|
|
393
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV2ZWxfbWVhc3VyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9kc3AvbGV2ZWxfbWVhc3VyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUd2RCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFJbEMsTUFBTSxPQUFPLFNBQVM7SUFLcEIsWUFBNEIsWUFBb0IsRUFDN0IsYUFBcUIsQ0FBQyxFQUN0QixjQUFzQixDQUFDLEVBQzlCLFlBQTRCLEVBQzVCLFlBQTRCO1FBSlosaUJBQVksR0FBWixZQUFZLENBQVE7UUFDN0IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUd4QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEdBQThCO1FBQ3JELElBQUksR0FBRyxFQUFFO1lBQ1AsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxZQUFZO2dCQUNsQyxNQUFPLElBQUksS0FBSyxDQUFDLDhDQUE4QyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2RixPQUFP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QUksQ0FBQyxhQUFhLEVBQUU7WUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQy9FO1lBQ0QsSUFBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUM7Z0JBQ3hCLElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsRUFBRTtvQkFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7b0JBQy9CLGtEQUFrRDtvQkFDbEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDNUM7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUdELElBQUk7UUFDRixJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FHRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RFNQVXRpbHN9IGZyb20gXCIuLi8uLi9kc3AvdXRpbHNcIjtcclxuaW1wb3J0IHtTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbX0gZnJvbSBcIi4uL2lvL3N0cmVhbVwiO1xyXG5pbXBvcnQge0FycmF5cywgV29ya2VySGVscGVyfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcclxuaW1wb3J0IHtBdWRpb0RhdGFIb2xkZXJ9IGZyb20gXCIuLi9hdWRpb19kYXRhX2hvbGRlclwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IE1JTl9EQl9MRVZFTCA9IC00MC4wO1xyXG5cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgTGV2ZWxJbmZvIHtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluTGluTGV2ZWxzOiBBcnJheTxudW1iZXI+O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX21heExpbkxldmVsczogQXJyYXk8bnVtYmVyPjtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGNoYW5uZWxDb3VudDogbnVtYmVyLFxyXG4gICAgICAgICAgICAgIHB1YmxpYyBzdGFydEZyYW1lOiBudW1iZXIgPSAwLFxyXG4gICAgICAgICAgICAgIHB1YmxpYyBmcmFtZUxlbmd0aDogbnVtYmVyID0gMCxcclxuICAgICAgICAgICAgICBtaW5MaW5MZXZlbHM/OiBBcnJheTxudW1iZXI+LFxyXG4gICAgICAgICAgICAgIG1heExpbkxldmVscz86IEFycmF5PG51bWJlcj4pIHtcclxuICAgIHRoaXMuX21pbkxpbkxldmVscyA9IHRoaXMuY2hlY2tPckluaXRBcnJheShtaW5MaW5MZXZlbHMpO1xyXG4gICAgdGhpcy5fbWF4TGluTGV2ZWxzID0gdGhpcy5jaGVja09ySW5pdEFycmF5KG1heExpbkxldmVscyk7XHJcbiAgfVxyXG5cclxuICBnZXQgbWluTGluTGV2ZWxzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX21pbkxpbkxldmVscztcclxuICB9XHJcblxyXG4gIGdldCBtYXhMaW5MZXZlbHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWF4TGluTGV2ZWxzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja09ySW5pdEFycmF5KGFycjogQXJyYXk8bnVtYmVyPiB8IHVuZGVmaW5lZCk6IEFycmF5PG51bWJlcj4ge1xyXG4gICAgaWYgKGFycikge1xyXG4gICAgICBpZiAoYXJyLmxlbmd0aCAhPT0gdGhpcy5jaGFubmVsQ291bnQpXHJcbiAgICAgICAgdGhyb3cgIG5ldyBFcnJvcihcIkxldmVsIGFycmF5cyBtdXN0IGJlIGVxdWFsIHRvIGNoYW5uZWwgY291bnQgXCIgKyB0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbmV3IEFycmF5PG51bWJlcj4odGhpcy5jaGFubmVsQ291bnQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtZXJnZShsZXZlbEluZm86IExldmVsSW5mbykge1xyXG4gICAgaWYgKGxldmVsSW5mbyA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFubmVsQ291bnQgIT09IGxldmVsSW5mby5jaGFubmVsQ291bnQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2hhbm5lbCBjb3VudCBvZiBsZXZlbCBpbmZvIHRvIG1lcmdlIG11c3QgYmUgZXF1YWwuIChcIiArIHRoaXMuY2hhbm5lbENvdW50ICsgXCIgIT0gXCIgKyBsZXZlbEluZm8uY2hhbm5lbENvdW50ICsgXCIpXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBlbmRGcmFtZSA9IHRoaXMuc3RhcnRGcmFtZSArIHRoaXMuZnJhbWVMZW5ndGg7XHJcbiAgICBsZXQgbWVyZ2VFbmRGcmFtZSA9IGxldmVsSW5mby5zdGFydEZyYW1lICsgbGV2ZWxJbmZvLmZyYW1lTGVuZ3RoO1xyXG5cclxuICAgIGlmIChsZXZlbEluZm8uc3RhcnRGcmFtZSA8IHRoaXMuc3RhcnRGcmFtZSkge1xyXG4gICAgICB0aGlzLnN0YXJ0RnJhbWUgPSBsZXZlbEluZm8uc3RhcnRGcmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWVyZ2VFbmRGcmFtZSA+IGVuZEZyYW1lKSB7XHJcbiAgICAgIHRoaXMuZnJhbWVMZW5ndGggPSBtZXJnZUVuZEZyYW1lIC0gdGhpcy5zdGFydEZyYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCB0aGlzLmNoYW5uZWxDb3VudDsgY2grKykge1xyXG5cclxuICAgICAgaWYgKGxldmVsSW5mby5taW5MaW5MZXZlbHNbY2hdIDwgdGhpcy5taW5MaW5MZXZlbHNbY2hdKSB7XHJcbiAgICAgICAgdGhpcy5taW5MaW5MZXZlbHNbY2hdID0gbGV2ZWxJbmZvLm1pbkxpbkxldmVsc1tjaF07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGxldmVsSW5mby5tYXhMaW5MZXZlbHNbY2hdID4gdGhpcy5tYXhMaW5MZXZlbHNbY2hdKSB7XHJcbiAgICAgICAgdGhpcy5tYXhMaW5MZXZlbHNbY2hdID0gbGV2ZWxJbmZvLm1heExpbkxldmVsc1tjaF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxldmVsc0xpbigpOiBBcnJheTxudW1iZXI+IHtcclxuICAgIGxldCBsdmxzTGluID0gbmV3IEFycmF5PG51bWJlcj4odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbENvdW50OyBjaCsrKSB7XHJcbiAgICAgIGx2bHNMaW5bY2hdID0gTWF0aC5tYXgoTWF0aC5hYnModGhpcy5taW5MaW5MZXZlbHNbY2hdKSwgTWF0aC5hYnModGhpcy5tYXhMaW5MZXZlbHNbY2hdKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbHZsc0xpbjtcclxuICB9XHJcblxyXG4gIHBvd2VyTGV2ZWxzREIoKTogQXJyYXk8bnVtYmVyPiB7XHJcbiAgICBsZXQgbHZsc0RiID0gbmV3IEFycmF5PG51bWJlcj4odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbENvdW50OyBjaCsrKSB7XHJcbiAgICAgIGx2bHNEYltjaF0gPSBEU1BVdGlscy50b1Bvd2VyTGV2ZWxJbkRCKHRoaXMubGV2ZWxzTGluKClbY2hdKTtcclxuICAgIH1cclxuICAgIHJldHVybiBsdmxzRGI7XHJcbiAgfVxyXG5cclxuICBwb3dlckxldmVsREIoKTogbnVtYmVyIHtcclxuICAgIGxldCBwTHZsc0RiID0gdGhpcy5wb3dlckxldmVsc0RCKCk7XHJcbiAgICByZXR1cm4gTWF0aC5tYXgoLi4ucEx2bHNEYik7XHJcbiAgfVxyXG5cclxuICBjbG9uZSgpOiBMZXZlbEluZm8ge1xyXG4gICAgcmV0dXJuIG5ldyBMZXZlbEluZm8odGhpcy5jaGFubmVsQ291bnQsIHRoaXMuc3RhcnRGcmFtZSwgdGhpcy5mcmFtZUxlbmd0aCwgQXJyYXlzLmNsb25lTnVtYmVyQXJyYXkodGhpcy5taW5MaW5MZXZlbHMpLFxyXG4gICAgICBBcnJheXMuY2xvbmVOdW1iZXJBcnJheSh0aGlzLm1heExpbkxldmVscykpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExldmVsSW5mb3Mge1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBidWZmZXJMZXZlbEluZm9zOiBBcnJheTxMZXZlbEluZm8+LCBwdWJsaWMgcmVhZG9ubHkgcGVha0xldmVsSW5mbzogTGV2ZWxJbmZvKSB7XHJcbiAgfVxyXG5cclxuICBmcmFtZXNQZXJCdWZmZXIoKTpudW1iZXJ7XHJcbiAgICBpZih0aGlzLmJ1ZmZlckxldmVsSW5mb3MubGVuZ3RoPjApe1xyXG4gICAgICByZXR1cm4gdGhpcy5idWZmZXJMZXZlbEluZm9zWzBdLmZyYW1lTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMucGVha0xldmVsSW5mby5mcmFtZUxlbmd0aC90aGlzLmJ1ZmZlckxldmVsSW5mb3MubGVuZ3RoO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGV2ZWxMaXN0ZW5lciB7XHJcbiAgY2hhbm5lbENvdW50OiBudW1iZXI7XHJcblxyXG4gIHVwZGF0ZShsZXZlbEluZm86IExldmVsSW5mbywgcGVha0xldmVsSW5mbzogTGV2ZWxJbmZvKTogdm9pZDtcclxuXHJcbiAgc3RyZWFtRmluaXNoZWQoKTogdm9pZDtcclxuXHJcbiAgcmVzZXQoKTogdm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQZWFrTGV2ZWxMaXN0ZW5lciB7XHJcbiAgdXBkYXRlKHBlYWtMZXZlbDpudW1iZXIpOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBlYWtMZXZlbExpc3RlbmVyIHtcclxuXHJcbiAgdXBkYXRlKGxldmVsSW5mbzogTGV2ZWxJbmZvLCBwZWFrTGV2ZWxJbmZvOiBMZXZlbEluZm8pOiB2b2lkO1xyXG5cclxuICBzdHJlYW1GaW5pc2hlZCgpOiB2b2lkO1xyXG5cclxuICByZXNldCgpOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUGVha0xldmVsSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBMZXZlbExpc3RlbmVye1xyXG4gIGdldCBwZWFrRGJMdmwoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9wZWFrRGJMdmw7XHJcbiAgfVxyXG4gIGdldCBjaGFubmVsQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ291bnQ7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hhbm5lbENvdW50KHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2NoYW5uZWxDb3VudCA9IHZhbHVlO1xyXG4gICAgaWYodGhpcy5sZXZlbExpc3RlbmVyKXtcclxuICAgICAgdGhpcy5sZXZlbExpc3RlbmVyLmNoYW5uZWxDb3VudD12YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NoYW5uZWxDb3VudDogbnVtYmVyPTA7XHJcblxyXG4gIHByaXZhdGUgX3BlYWtEYkx2bCA9IE1JTl9EQl9MRVZFTDtcclxuXHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxldmVsTGlzdGVuZXI/OkxldmVsTGlzdGVuZXIpIHt9XHJcblxyXG4gIHVwZGF0ZShsZXZlbEluZm86IExldmVsSW5mbywgcGVha0xldmVsSW5mbzogTGV2ZWxJbmZvKTogdm9pZHtcclxuICAgIGxldCBwZWFrREJWYWwgPSBsZXZlbEluZm8ucG93ZXJMZXZlbERCKCk7XHJcbiAgICBpZiAodGhpcy5wZWFrRGJMdmwgPCBwZWFrREJWYWwpIHtcclxuICAgICAgdGhpcy5fcGVha0RiTHZsID0gcGVha0RCVmFsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RyZWFtRmluaXNoZWQoKTogdm9pZHtcclxuICAgIGlmKHRoaXMubGV2ZWxMaXN0ZW5lcil7XHJcbiAgICAgIHRoaXMubGV2ZWxMaXN0ZW5lci5zdHJlYW1GaW5pc2hlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKTogdm9pZHtcclxuICAgIHRoaXMuX3BlYWtEYkx2bCA9IE1JTl9EQl9MRVZFTDtcclxuICAgIGlmKHRoaXMubGV2ZWxMaXN0ZW5lcil7XHJcbiAgICAgIHRoaXMubGV2ZWxMaXN0ZW5lci5yZXNldCgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZGVjbGFyZSBmdW5jdGlvbiBwb3N0TWVzc2FnZShtZXNzYWdlOiBhbnksIHRyYW5zZmVyPzogQXJyYXk8YW55Pik6IHZvaWQ7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIExldmVsTWVhc3VyZSB7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2VyVVJMOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB3b3JrZXI6IFdvcmtlcnxudWxsPW51bGw7XHJcbiAgLy9wcml2YXRlIGJ1ZmZlckxldmVsSW5mb3M9bmV3IEFycmF5PExldmVsSW5mbz4oKTtcclxuICAvL3ByaXZhdGUgcGVha0xldmVsSW5mbyE6TGV2ZWxJbmZvO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMud29ya2VyVVJMID0gV29ya2VySGVscGVyLmJ1aWxkV29ya2VyQmxvYlVSTCh0aGlzLndvcmtlckZ1bmN0aW9uKVxyXG4gIH1cclxuXHJcbiAgY2FsY0J1ZmZlckxldmVsSW5mb3MoYXVkaW9EYXRhSG9sZGVyOkF1ZGlvRGF0YUhvbGRlciwgYnVmZmVyVGltZUxlbmd0aDogbnVtYmVyKTogUHJvbWlzZTxMZXZlbEluZm9zPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8TGV2ZWxJbmZvcz4oKHJlc29sdmUpPT57XHJcbiAgICAgIGxldCBjaHMgPSBhdWRpb0RhdGFIb2xkZXIubnVtYmVyT2ZDaGFubmVscztcclxuICAgICAgbGV0IGJ1ZmZlckZyYW1lTGVuZ3RoPU1hdGgucm91bmQoYXVkaW9EYXRhSG9sZGVyLnNhbXBsZVJhdGUqYnVmZmVyVGltZUxlbmd0aCk7XHJcbiAgICAgIGxldCBhaXM9YXVkaW9EYXRhSG9sZGVyLmF1ZGlvSW5wdXRTdHJlYW0oKTtcclxuICAgICAgbGV0IGF1ZGlvQnVmZmVycyA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KGNocyk7XHJcbiAgICAgIGxldCB0ckJ1ZmZlcnM9bmV3IEFycmF5PGFueT4oY2hzKTtcclxuICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgIGF1ZGlvQnVmZmVyc1tjaF09bmV3IEZsb2F0MzJBcnJheShidWZmZXJGcmFtZUxlbmd0aCk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGJ1ZmZlckxldmVsSW5mb3M9bmV3IEFycmF5PExldmVsSW5mbz4oKTtcclxuICAgICAgbGV0IHBlYWtMZXZlbEluZm89bmV3IExldmVsSW5mbyhjaHMpO1xyXG5cclxuXHJcbiAgICAgIHRoaXMud29ya2VyID0gbmV3IFdvcmtlcih0aGlzLndvcmtlclVSTCk7XHJcbiAgICAgIHRoaXMud29ya2VyLm9ubWVzc2FnZSA9IChtZSkgPT4ge1xyXG5cclxuICAgICAgICBpZihtZS5kYXRhLmxpbkxldmVsQnVmZmVycykge1xyXG4gICAgICAgICAgbGV0IGxpbkxldmVsQXJycyA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KGNocyk7XHJcbiAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICAgIGxpbkxldmVsQXJyc1tjaF0gPSBuZXcgRmxvYXQzMkFycmF5KG1lLmRhdGEubGluTGV2ZWxCdWZmZXJzW2NoXSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbGV0IGJ1ZmZlckNvdW50ID0gTWF0aC5jZWlsKG1lLmRhdGEuZnJhbWVMZW5ndGggLyBtZS5kYXRhLmJ1ZmZlckZyYW1lTGVuZ3RoKTtcclxuICAgICAgICAgIGxldCBmcmFtZVBvcyA9IDA7XHJcblxyXG4gICAgICAgICAgZm9yIChsZXQgYmkgPSAwOyBiaSA8IGJ1ZmZlckNvdW50OyBiaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBtaW5MZXZlbHMgPSBuZXcgQXJyYXk8bnVtYmVyPihjaHMpO1xyXG4gICAgICAgICAgICBsZXQgbWF4TGV2ZWxzID0gbmV3IEFycmF5PG51bWJlcj4oY2hzKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgICAgIGxldCBsaW5MdmxBcnJQb3MgPSBiaSAqIDI7XHJcbiAgICAgICAgICAgICAgbWluTGV2ZWxzW2NoXSA9IGxpbkxldmVsQXJyc1tjaF1bbGluTHZsQXJyUG9zXTtcclxuICAgICAgICAgICAgICBtYXhMZXZlbHNbY2hdID0gbGluTGV2ZWxBcnJzW2NoXVtsaW5MdmxBcnJQb3MgKyAxXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgYmxpID0gbmV3IExldmVsSW5mbyhjaHMsIGZyYW1lUG9zLCBtZS5kYXRhLmJ1ZmZlckZyYW1lTGVuZ3RoLCBtaW5MZXZlbHMsIG1heExldmVscyk7XHJcbiAgICAgICAgICAgIGJ1ZmZlckxldmVsSW5mb3MucHVzaChibGkpO1xyXG4gICAgICAgICAgICBwZWFrTGV2ZWxJbmZvLm1lcmdlKGJsaSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihtZS5kYXRhLmVvZD09PXRydWUpIHtcclxuICAgICAgICAgIC8vIGVuZCBvZiBkYXRhLCB0ZXJtaW5hdGUgd29ya2VyIGFuZCByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICB0aGlzLnRlcm1pbmF0ZVdvcmtlcigpO1xyXG4gICAgICAgICAgcmVzb2x2ZShuZXcgTGV2ZWxJbmZvcyhidWZmZXJMZXZlbEluZm9zLCBwZWFrTGV2ZWxJbmZvKSk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICBsZXQgcmVhZD1haXMucmVhZChhdWRpb0J1ZmZlcnMpO1xyXG4gICAgICAgICAgZm9yKGxldCBjaD0wO2NoPGNocztjaCsrKXtcclxuICAgICAgICAgICAgbGV0IGNvcHk9bmV3IEZsb2F0MzJBcnJheShhdWRpb0J1ZmZlcnNbY2hdKTtcclxuICAgICAgICAgICAgdHJCdWZmZXJzW2NoXT1jb3B5LmJ1ZmZlcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMud29ya2VyPy5wb3N0TWVzc2FnZSh7YnVmZmVyRnJhbWVMZW5ndGg6IGJ1ZmZlckZyYW1lTGVuZ3RoLCBhdWRpb0RhdGE6IHRyQnVmZmVycywgY2hzOiBjaHMsbGVuOnJlYWR9LCB0ckJ1ZmZlcnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIGxldCByZWFkPWFpcy5yZWFkKGF1ZGlvQnVmZmVycyk7XHJcbiAgICAgIGZvcihsZXQgY2g9MDtjaDxjaHM7Y2grKyl7XHJcbiAgICAgICAgbGV0IGNvcHk9bmV3IEZsb2F0MzJBcnJheShhdWRpb0J1ZmZlcnNbY2hdKTtcclxuICAgICAgICB0ckJ1ZmZlcnNbY2hdPWNvcHkuYnVmZmVyO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMud29ya2VyPy5wb3N0TWVzc2FnZSh7YnVmZmVyRnJhbWVMZW5ndGg6IGJ1ZmZlckZyYW1lTGVuZ3RoLCBhdWRpb0RhdGE6IHRyQnVmZmVycywgY2hzOiBjaHMsbGVuOnJlYWR9LCB0ckJ1ZmZlcnMpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgdGVybWluYXRlV29ya2VyKCkge1xyXG4gICAgdGhpcy53b3JrZXI/LnRlcm1pbmF0ZSgpO1xyXG5cclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogIE1ldGhvZCB1c2VkIGFzIHdvcmtlciBjb2RlLlxyXG4gICAqL1xyXG4gIHdvcmtlckZ1bmN0aW9uKCkge1xyXG4gICAgc2VsZi5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAobXNnOk1lc3NhZ2VFdmVudCkge1xyXG5cclxuICAgICAgbGV0IGxlbj1tc2cuZGF0YS5sZW47XHJcbiAgICAgIGxldCBidWZmZXJGcmFtZUxlbmd0aCA9IG1zZy5kYXRhLmJ1ZmZlckZyYW1lTGVuZ3RoO1xyXG4gICAgICBpZihsZW49PS0xKXtcclxuICAgICAgICAvLyBzdGFydFxyXG4gICAgICAgIHBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgIGVvZDpmYWxzZSxcclxuICAgICAgICAgIGJ1ZmZlckZyYW1lTGVuZ3RoOiBidWZmZXJGcmFtZUxlbmd0aCxcclxuICAgICAgICAgIGZyYW1lTGVuZ3RoOiBsZW5cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYobGVuPT0wKSB7XHJcbiAgICAgICAgcG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgICAgZW9kOnRydWUsXHJcbiAgICAgICAgICBidWZmZXJGcmFtZUxlbmd0aDogYnVmZmVyRnJhbWVMZW5ndGgsXHJcbiAgICAgICAgICBmcmFtZUxlbmd0aDogbGVuXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIGxldCBjaHMgPSBtc2cuZGF0YS5jaHM7XHJcblxyXG4gICAgICAgIGxldCBhdWRpb0RhdGEgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5PihjaHMpO1xyXG4gICAgICAgIGxldCBsaW5MZXZlbHMgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5PihjaHMpO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICBhdWRpb0RhdGFbY2hdID0gbmV3IEZsb2F0MzJBcnJheShtc2cuZGF0YS5hdWRpb0RhdGFbY2hdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vbGV0IGZyYW1lTGVuZ3RoID0gYXVkaW9EYXRhWzBdLmxlbmd0aDtcclxuXHJcbiAgICAgICAgbGV0IGJ1ZmZlckNvdW50ID0gTWF0aC5jZWlsKGxlbiAvIGJ1ZmZlckZyYW1lTGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICBsaW5MZXZlbHNbY2hdID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJDb3VudCAqIDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXVkaW9EYXRhICYmIGNocyA+IDApIHtcclxuICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgICAgbGV0IGNoRGF0YSA9IGF1ZGlvRGF0YVtjaF07XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IGxlbjsgcysrKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGJpID0gTWF0aC5mbG9vcihzIC8gYnVmZmVyRnJhbWVMZW5ndGgpO1xyXG4gICAgICAgICAgICAgIGxldCBsdmxBcnJQb3MgPSBiaSAqIDI7XHJcbiAgICAgICAgICAgICAgLy9sZXQgYnMgPSBzICUgYnVmZmVyRnJhbWVMZW5ndGg7XHJcbiAgICAgICAgICAgICAgbGV0IGNoU2FtcGxlID0gY2hEYXRhW3NdO1xyXG4gICAgICAgICAgICAgIGlmIChjaFNhbXBsZSA8IGxpbkxldmVsc1tjaF1bbHZsQXJyUG9zXSkge1xyXG4gICAgICAgICAgICAgICAgbGluTGV2ZWxzW2NoXVtsdmxBcnJQb3NdID0gY2hTYW1wbGU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGx2bEFyclBvcysrO1xyXG4gICAgICAgICAgICAgIGlmIChjaFNhbXBsZSA+IGxpbkxldmVsc1tjaF1bbHZsQXJyUG9zXSkge1xyXG4gICAgICAgICAgICAgICAgbGluTGV2ZWxzW2NoXVtsdmxBcnJQb3NdID0gY2hTYW1wbGU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBsaW5MZXZlbEJ1ZnMgPSBuZXcgQXJyYXk8YW55PihjaHMpO1xyXG4gICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgICBsaW5MZXZlbEJ1ZnNbY2hdID0gbGluTGV2ZWxzW2NoXS5idWZmZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBwb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgICAgIGVvZDpmYWxzZSxcclxuICAgICAgICAgICAgYnVmZmVyRnJhbWVMZW5ndGg6IGJ1ZmZlckZyYW1lTGVuZ3RoLFxyXG4gICAgICAgICAgICBmcmFtZUxlbmd0aDogbGVuLFxyXG4gICAgICAgICAgICBsaW5MZXZlbEJ1ZmZlcnM6IGxpbkxldmVsQnVmc1xyXG4gICAgICAgICAgfSwgbGluTGV2ZWxCdWZzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgU3RyZWFtTGV2ZWxNZWFzdXJlIGltcGxlbWVudHMgU2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW0ge1xyXG5cclxuICBjdXJyZW50TGV2ZWxJbmZvczogTGV2ZWxJbmZvfG51bGw9bnVsbDtcclxuICBwZWFrTGV2ZWxJbmZvOiBMZXZlbEluZm98bnVsbD1udWxsO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtlclVSTDogc3RyaW5nO1xyXG4gIHByaXZhdGUgd29ya2VyOiBXb3JrZXJ8bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgY2hhbm5lbENvdW50OiBudW1iZXI9MDtcclxuICBwcml2YXRlIGJ1ZmZlckluZGV4OiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgZnJhbWVDb3VudDogbnVtYmVyID0gMDtcclxuXHJcbiAgbGV2ZWxMaXN0ZW5lcjogTGV2ZWxMaXN0ZW5lcnxudWxsPW51bGw7XHJcbiAgcGVha0xldmVsTGlzdGVuZXI6ICgocGVha0x2bEluRGI6bnVtYmVyKT0+dm9pZCl8bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgcGVha0xldmVsSW5EYjpudW1iZXI9TUlOX0RCX0xFVkVMO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMud29ya2VyVVJMID0gV29ya2VySGVscGVyLmJ1aWxkV29ya2VyQmxvYlVSTCh0aGlzLndvcmtlckZ1bmN0aW9uKVxyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybWF0KGNoYW5uZWxzOiBudW1iZXIsIHNhbXBsZVJhdGU6IG51bWJlcikge1xyXG4gICAgdGhpcy5jaGFubmVsQ291bnQgPSBjaGFubmVscztcclxuICAgIHRoaXMuY3VycmVudExldmVsSW5mb3MgPSBuZXcgTGV2ZWxJbmZvKHRoaXMuY2hhbm5lbENvdW50KTtcclxuICAgIHRoaXMucGVha0xldmVsSW5mbyA9IG5ldyBMZXZlbEluZm8odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgdGhpcy53b3JrZXIgPSBuZXcgV29ya2VyKHRoaXMud29ya2VyVVJMKTtcclxuICAgIHRoaXMud29ya2VyLm9ubWVzc2FnZSA9IChtZSkgPT4ge1xyXG4gICAgICBsZXQgc3RyZWFtRmluaXNoZWQgPSBtZS5kYXRhLnN0cmVhbUZpbmlzaGVkO1xyXG4gICAgICBpZiAoc3RyZWFtRmluaXNoZWQpIHtcclxuICAgICAgICBpZiAodGhpcy5sZXZlbExpc3RlbmVyKSB7XHJcbiAgICAgICAgICB0aGlzLmxldmVsTGlzdGVuZXIuc3RyZWFtRmluaXNoZWQoKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgbGV0IG1pbkxldmVscyA9IG5ldyBBcnJheTxudW1iZXI+KHRoaXMuY2hhbm5lbENvdW50KTtcclxuICAgICAgICBsZXQgbWF4TGV2ZWxzID0gbmV3IEFycmF5PG51bWJlcj4odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCB0aGlzLmNoYW5uZWxDb3VudDsgY2grKykge1xyXG4gICAgICAgICAgbGV0IGZscyA9IG5ldyBGbG9hdDMyQXJyYXkobWUuZGF0YS5saW5MZXZlbEJ1ZmZlcnNbY2hdKTtcclxuICAgICAgICAgIG1pbkxldmVsc1tjaF0gPSBmbHNbMF07XHJcbiAgICAgICAgICBtYXhMZXZlbHNbY2hdID0gZmxzWzFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgYmkgPSBuZXcgTGV2ZWxJbmZvKHRoaXMuY2hhbm5lbENvdW50LCB0aGlzLmZyYW1lQ291bnQsIG1lLmRhdGEuZnJhZW1MZW5ndGgsIG1pbkxldmVscywgbWF4TGV2ZWxzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxldmVscyhiaSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBuZXh0U3RyZWFtKCkge1xyXG4gICAgdGhpcy5yZXNldCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldCgpIHtcclxuICAgIHRoaXMuY3VycmVudExldmVsSW5mb3MgPSBuZXcgTGV2ZWxJbmZvKHRoaXMuY2hhbm5lbENvdW50KTtcclxuICAgIHRoaXMucGVha0xldmVsSW5mbyA9IG5ldyBMZXZlbEluZm8odGhpcy5jaGFubmVsQ291bnQpO1xyXG4gICAgaWYgKHRoaXMubGV2ZWxMaXN0ZW5lcikge1xyXG4gICAgICB0aGlzLmxldmVsTGlzdGVuZXIucmVzZXQoKTtcclxuICAgICAgdGhpcy5sZXZlbExpc3RlbmVyLmNoYW5uZWxDb3VudCA9IHRoaXMuY2hhbm5lbENvdW50O1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucGVha0xldmVsTGlzdGVuZXIpIHtcclxuICAgICAgdGhpcy5wZWFrTGV2ZWxJbkRiPU1JTl9EQl9MRVZFTDtcclxuICAgICAgdGhpcy5wZWFrTGV2ZWxMaXN0ZW5lcih0aGlzLnBlYWtMZXZlbEluRGIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgd3JpdGUoYnVmZmVyRGF0YTogQXJyYXk8RmxvYXQzMkFycmF5Pik6IG51bWJlciB7XHJcbiAgICBsZXQgYnVmQXJyQ29waWVzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oYnVmZmVyRGF0YS5sZW5ndGgpO1xyXG4gICAgbGV0IGJ1ZmZlcnMgPSBuZXcgQXJyYXk8YW55PihidWZmZXJEYXRhLmxlbmd0aCk7XHJcbiAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgYnVmZmVyRGF0YS5sZW5ndGg7IGNoKyspIHtcclxuICAgICAgYnVmQXJyQ29waWVzW2NoXSA9IGJ1ZmZlckRhdGFbY2hdLnNsaWNlKCk7XHJcbiAgICAgIGJ1ZmZlcnNbY2hdID0gYnVmQXJyQ29waWVzW2NoXS5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0aGlzLndvcmtlcj8ucG9zdE1lc3NhZ2Uoe1xyXG4gICAgICBzdHJlYW1GaW5pc2hlZDogZmFsc2UsXHJcbiAgICAgIGF1ZGlvRGF0YTogYnVmZmVycyxcclxuICAgICAgY2hzOiB0aGlzLmNoYW5uZWxDb3VudCxcclxuICAgICAgYnVmZmVySW5kZXg6IHRoaXMuYnVmZmVySW5kZXhcclxuICAgIH0sIGJ1ZmZlcnMpO1xyXG4gICAgdGhpcy5idWZmZXJJbmRleCsrO1xyXG4gICAgcmV0dXJuIGJ1ZkFyckNvcGllc1swXS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBmbHVzaCgpIHtcclxuICAgIHRoaXMud29ya2VyPy5wb3N0TWVzc2FnZSh7c3RyZWFtRmluaXNoZWQ6IHRydWV9KTtcclxuXHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgICAgdGhpcy53b3JrZXI/LnRlcm1pbmF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiAgTWV0aG9kIHVzZWQgYXMgd29ya2VyIGNvZGUuXHJcbiAgICovXHJcbiAgd29ya2VyRnVuY3Rpb24oKSB7XHJcbiAgICBzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChtc2c6TWVzc2FnZUV2ZW50KSB7XHJcbiAgICAgIGxldCBzdHJlYW1GaW5pc2hlZCA9IG1zZy5kYXRhLnN0cmVhbUZpbmlzaGVkO1xyXG4gICAgICBpZiAoc3RyZWFtRmluaXNoZWQpIHtcclxuICAgICAgICBwb3N0TWVzc2FnZSh7c3RyZWFtRmluaXNoZWQ6IHRydWV9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgY2hzID0gbXNnLmRhdGEuY2hzO1xyXG4gICAgICAgIGxldCBmcmFtZUxlbmd0aCA9IG51bGw7XHJcbiAgICAgICAgbGV0IGF1ZGlvRGF0YSA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KGNocyk7XHJcbiAgICAgICAgbGV0IGxpbkxldmVscyA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KGNocyk7XHJcbiAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xyXG4gICAgICAgICAgbGluTGV2ZWxzW2NoXSA9IG5ldyBGbG9hdDMyQXJyYXkoMik7XHJcbiAgICAgICAgICBhdWRpb0RhdGFbY2hdID0gbmV3IEZsb2F0MzJBcnJheShtc2cuZGF0YS5hdWRpb0RhdGFbY2hdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhdWRpb0RhdGEpIHtcclxuICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjaHM7IGNoKyspIHtcclxuICAgICAgICAgICAgbGV0IGNoRGF0YSA9IGF1ZGlvRGF0YVtjaF07XHJcbiAgICAgICAgICAgIGlmIChmcmFtZUxlbmd0aCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGZyYW1lTGVuZ3RoID0gY2hEYXRhLmxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IGZyYW1lTGVuZ3RoOyBzKyspIHtcclxuICAgICAgICAgICAgICBsZXQgY2hTYW1wbGU9Y2hEYXRhW3NdO1xyXG4gICAgICAgICAgICAgIGlmIChjaFNhbXBsZSA8IGxpbkxldmVsc1tjaF1bMF0pIHtcclxuICAgICAgICAgICAgICAgIGxpbkxldmVsc1tjaF1bMF0gPSBjaFNhbXBsZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGNoU2FtcGxlID4gbGluTGV2ZWxzW2NoXVsxXSkge1xyXG4gICAgICAgICAgICAgICAgbGluTGV2ZWxzW2NoXVsxXSA9IGNoU2FtcGxlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbGluTGV2ZWxCdWZzID0gbmV3IEFycmF5PGFueT4oY2hzKTtcclxuICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgY2hzOyBjaCsrKSB7XHJcbiAgICAgICAgICBsaW5MZXZlbEJ1ZnNbY2hdID0gbGluTGV2ZWxzW2NoXS5idWZmZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBvc3RNZXNzYWdlKHtzdHJlYW1GaW5pc2hlZDogZmFsc2UsIGZyYW1lTGVuZ3RoOiBmcmFtZUxlbmd0aCwgbGluTGV2ZWxCdWZmZXJzOiBsaW5MZXZlbEJ1ZnN9LCBsaW5MZXZlbEJ1ZnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVMZXZlbHMoYnVmZmVyTGV2ZWxJbmZvOiBMZXZlbEluZm8pIHtcclxuXHJcbiAgICB0aGlzLmN1cnJlbnRMZXZlbEluZm9zID0gYnVmZmVyTGV2ZWxJbmZvO1xyXG4gICAgaWYodGhpcy5wZWFrTGV2ZWxJbmZvKSB7XHJcbiAgICAgIHRoaXMucGVha0xldmVsSW5mby5tZXJnZShidWZmZXJMZXZlbEluZm8pO1xyXG4gICAgICBpZiAodGhpcy5sZXZlbExpc3RlbmVyKSB7XHJcbiAgICAgICAgdGhpcy5sZXZlbExpc3RlbmVyLnVwZGF0ZSh0aGlzLmN1cnJlbnRMZXZlbEluZm9zLCB0aGlzLnBlYWtMZXZlbEluZm8uY2xvbmUoKSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYodGhpcy5wZWFrTGV2ZWxMaXN0ZW5lcil7XHJcbiAgICAgICAgbGV0IHBlYWtEQlZhbCA9IGJ1ZmZlckxldmVsSW5mby5wb3dlckxldmVsREIoKTtcclxuICAgICAgICBpZiAodGhpcy5wZWFrTGV2ZWxJbkRiIDwgcGVha0RCVmFsKSB7XHJcbiAgICAgICAgICB0aGlzLnBlYWtMZXZlbEluRGIgPSBwZWFrREJWYWw7XHJcbiAgICAgICAgICAvLyB0aGUgZXZlbnQgY29tZXMgZnJvbSBvdXRzaWRlIG9mIGFuIEFuZ3VsYXIgem9uZVxyXG4gICAgICAgICAgdGhpcy5wZWFrTGV2ZWxMaXN0ZW5lcih0aGlzLnBlYWtMZXZlbEluRGIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHN0b3AoKSB7XHJcbiAgICB0aGlzLndvcmtlcj8udGVybWluYXRlKCk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIl19
|
|
@@ -7,11 +7,11 @@ export class SequenceAudioFloat32ChunkerOutStream extends Float32ArrayChunkerOut
|
|
|
7
7
|
this.sequenceAudioFloat32OutStream = outStream;
|
|
8
8
|
}
|
|
9
9
|
setFormat(channels, sampleRate) {
|
|
10
|
-
console.debug("SequenceAudioFloat32ChunkerOutStream:setFormat(channels: "
|
|
10
|
+
//console.debug("SequenceAudioFloat32ChunkerOutStream:setFormat(channels: "+channels+",sampleRate: "+sampleRate+")")
|
|
11
11
|
this.channels = channels;
|
|
12
12
|
this.sampleRate = sampleRate;
|
|
13
13
|
this.chunkSize = Math.round(sampleRate * this.chunkDurationSeconds);
|
|
14
|
-
console.debug("SequenceAudioFloat32ChunkerOutStream: chunkSize: "
|
|
14
|
+
//console.debug("SequenceAudioFloat32ChunkerOutStream: chunkSize: "+this.chunkSize);
|
|
15
15
|
this.sequenceAudioFloat32OutStream.setFormat(channels, sampleRate);
|
|
16
16
|
}
|
|
17
17
|
nextStream() {
|
|
@@ -56,4 +56,4 @@ export class SequenceAudioFloat32OutStreamMultiplier {
|
|
|
56
56
|
return toWrite;
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2lvL3N0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsNEJBQTRCLEVBQXdCLE1BQU0saUJBQWlCLENBQUM7QUFVcEYsTUFBTSxPQUFPLG9DQUFxQyxTQUFRLDRCQUE0QjtJQUlwRixZQUFZLFNBQXVDLEVBQVUsb0JBQTJCO1FBQ3RGLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUQwQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQU87UUFGaEYsZUFBVSxHQUFhLElBQUksQ0FBQztRQUlsQyxJQUFJLENBQUMsNkJBQTZCLEdBQUMsU0FBUyxDQUFDO0lBQy9DLENBQUM7SUFFRCxTQUFTLENBQUMsUUFBZ0IsRUFBQyxVQUFpQjtRQUMxQyxvSEFBb0g7UUFDcEgsSUFBSSxDQUFDLFFBQVEsR0FBQyxRQUFRLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBQyxVQUFVLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNoRSxvRkFBb0Y7UUFDcEYsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELFVBQVU7UUFDUixJQUFJLENBQUMsNkJBQTZCLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sdUNBQXVDO0lBSWxEO1FBQ0UsSUFBSSxDQUFDLCtCQUErQixHQUFDLElBQUksS0FBSyxFQUFpQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxJQUFJLDhCQUE4QjtRQUNoQyxPQUFPLElBQUksQ0FBQywrQkFBK0IsQ0FBQztJQUM5QyxDQUFDO0lBRUQsU0FBUyxDQUFDLFFBQWdCLEVBQUMsVUFBaUI7UUFDMUMsS0FBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsK0JBQStCLEVBQUM7WUFDL0MsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUMsVUFBVSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBQ0QsVUFBVTtRQUNSLEtBQUksSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLCtCQUErQixFQUFDO1lBQ2pELEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNqQjtJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsS0FBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsK0JBQStCLEVBQUM7WUFDakQsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ1o7SUFDSCxDQUFDO0lBRUQsS0FBSztRQUNILEtBQUksSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLCtCQUErQixFQUFDO1lBQ2pELEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNaO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUE0QjtRQUNoQyxJQUFJLE9BQU8sR0FBUSxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2hDLEtBQUssSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLCtCQUErQixFQUFFO1lBQ25ELEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkI7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Zsb2F0MzJBcnJheUNodW5rZXJPdXRTdHJlYW0sIEZsb2F0MzJBcnJheU91dFN0cmVhbX0gZnJvbSBcIi4uLy4uL2lvL3N0cmVhbVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0Zsb2F0MzJPdXRTdHJlYW0gZXh0ZW5kcyBGbG9hdDMyQXJyYXlPdXRTdHJlYW17XHJcbiAgICBzZXRGb3JtYXQoY2hhbm5lbHM6IG51bWJlcixzYW1wbGVSYXRlOm51bWJlcik6dm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbSBleHRlbmRzIEF1ZGlvRmxvYXQzMk91dFN0cmVhbXtcclxuICAgIG5leHRTdHJlYW0oKTp2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2VxdWVuY2VBdWRpb0Zsb2F0MzJDaHVua2VyT3V0U3RyZWFtIGV4dGVuZHMgRmxvYXQzMkFycmF5Q2h1bmtlck91dFN0cmVhbSBpbXBsZW1lbnRzIFNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFte1xyXG5cclxuICBwcml2YXRlIHNhbXBsZVJhdGU6bnVtYmVyfG51bGw9bnVsbDtcclxuICBwcml2YXRlIHNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtOlNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtO1xyXG4gIGNvbnN0cnVjdG9yKG91dFN0cmVhbTpTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbSwgcHJpdmF0ZSBjaHVua0R1cmF0aW9uU2Vjb25kczpudW1iZXIpe1xyXG4gICAgc3VwZXIob3V0U3RyZWFtKTtcclxuICAgIHRoaXMuc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW09b3V0U3RyZWFtO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybWF0KGNoYW5uZWxzOiBudW1iZXIsc2FtcGxlUmF0ZTpudW1iZXIpOnZvaWR7XHJcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJTZXF1ZW5jZUF1ZGlvRmxvYXQzMkNodW5rZXJPdXRTdHJlYW06c2V0Rm9ybWF0KGNoYW5uZWxzOiBcIitjaGFubmVscytcIixzYW1wbGVSYXRlOiBcIitzYW1wbGVSYXRlK1wiKVwiKVxyXG4gICAgdGhpcy5jaGFubmVscz1jaGFubmVscztcclxuICAgIHRoaXMuc2FtcGxlUmF0ZT1zYW1wbGVSYXRlO1xyXG4gICAgdGhpcy5jaHVua1NpemU9TWF0aC5yb3VuZChzYW1wbGVSYXRlKnRoaXMuY2h1bmtEdXJhdGlvblNlY29uZHMpO1xyXG4gICAgLy9jb25zb2xlLmRlYnVnKFwiU2VxdWVuY2VBdWRpb0Zsb2F0MzJDaHVua2VyT3V0U3RyZWFtOiBjaHVua1NpemU6IFwiK3RoaXMuY2h1bmtTaXplKTtcclxuICAgIHRoaXMuc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW0uc2V0Rm9ybWF0KGNoYW5uZWxzLHNhbXBsZVJhdGUpO1xyXG4gIH1cclxuICBuZXh0U3RyZWFtKCk6dm9pZHtcclxuICAgIHRoaXMuc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW0ubmV4dFN0cmVhbSgpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFN0cmVhbXMgYSBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbSB0byBtdWx0aXBsZSBzdHJlYW1zXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1NdWx0aXBsaWVyIGltcGxlbWVudHMgU2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW17XHJcblxyXG4gIHByaXZhdGUgX3NlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtcyE6QXJyYXk8U2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW0+O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuX3NlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtcz1uZXcgQXJyYXk8U2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW0+KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zKCk6IEFycmF5PFNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybWF0KGNoYW5uZWxzOiBudW1iZXIsc2FtcGxlUmF0ZTpudW1iZXIpOnZvaWR7XHJcbiAgICBmb3IobGV0IG9zIG9mIHRoaXMuX3NlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtcyl7XHJcbiAgICAgICAgb3Muc2V0Rm9ybWF0KGNoYW5uZWxzLHNhbXBsZVJhdGUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZXh0U3RyZWFtKCk6dm9pZHtcclxuICAgIGZvcihsZXQgb3Mgb2YgdGhpcy5fc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zKXtcclxuICAgICAgb3MubmV4dFN0cmVhbSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2UoKTogdm9pZCB7XHJcbiAgICBmb3IobGV0IG9zIG9mIHRoaXMuX3NlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtcyl7XHJcbiAgICAgIG9zLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmbHVzaCgpOiB2b2lkIHtcclxuICAgIGZvcihsZXQgb3Mgb2YgdGhpcy5fc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zKXtcclxuICAgICAgb3MuZmx1c2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdyaXRlKGJ1ZmZlcnM6IEFycmF5PEZsb2F0MzJBcnJheT4pOiBudW1iZXIge1xyXG4gICAgbGV0IHRvV3JpdGU6bnVtYmVyPWJ1ZmZlcnMubGVuZ3RoO1xyXG4gICAgICBmb3IgKGxldCBvcyBvZiB0aGlzLl9zZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbXMpIHtcclxuICAgICAgICBvcy53cml0ZShidWZmZXJzKTtcclxuICAgICAgfVxyXG4gICAgcmV0dXJuIHRvV3JpdGU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
export class AudioClip {
|
|
2
|
-
constructor(
|
|
2
|
+
constructor(_audioDataHolder) {
|
|
3
|
+
this._audioDataHolder = _audioDataHolder;
|
|
3
4
|
this._selection = null;
|
|
4
5
|
this._levelInfos = null;
|
|
5
6
|
this.selectionObservers = new Array();
|
|
6
|
-
this._buffer = buffer;
|
|
7
7
|
}
|
|
8
|
-
get
|
|
9
|
-
return this.
|
|
8
|
+
get audioDataHolder() {
|
|
9
|
+
return this._audioDataHolder;
|
|
10
10
|
}
|
|
11
|
-
;
|
|
12
11
|
get selection() {
|
|
13
12
|
return this._selection;
|
|
14
13
|
}
|
|
@@ -73,4 +72,4 @@ export class Selection {
|
|
|
73
72
|
return "Selection: from: " + this.leftFrame + " to: " + this.rightFrame + " frame. Refers to sample rate :" + this._sampleRate;
|
|
74
73
|
}
|
|
75
74
|
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL3BlcnNpc3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQU8sU0FBUztJQU1wQixZQUFvQixnQkFBZ0M7UUFBaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFnQjtRQUo1QyxlQUFVLEdBQWdCLElBQUksQ0FBQztRQUN6QixnQkFBVyxHQUFtQixJQUFJLENBQUM7UUFLL0MsSUFBSSxDQUFDLGtCQUFrQixHQUFDLElBQUksS0FBSyxFQUErQixDQUFBO0lBQ2xFLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxTQUFTLENBQUMsS0FBcUI7UUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsNENBQTRDO1FBQzVDLDRDQUE0QztRQUM1QyxvQ0FBb0M7UUFDcEMsY0FBYztRQUNkLE1BQU07UUFDTixLQUFJLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBQztZQUN4QyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDYjtJQUNILENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksVUFBVSxDQUFDLEtBQXdCO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxpQkFBNkMsRUFBQyxJQUFJLEdBQUMsS0FBSztRQUMzRSxJQUFJLGdCQUFnQixHQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFBLENBQUMsR0FBRyxLQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQTtRQUNuRixJQUFHLENBQUMsZ0JBQWdCLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1NBQ2hEO1FBQ0QsSUFBRyxJQUFJLEVBQUM7WUFDTixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQTtTQUN4QjtJQUNILENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxpQkFBNkM7UUFDbkUsSUFBSSxDQUFDLGtCQUFrQixHQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUMsRUFBRSxHQUFDLEdBQUcsS0FBRyxpQkFBaUIsQ0FBQSxDQUFBLENBQUMsQ0FBQyxDQUFBO0lBQzFGLENBQUM7Q0FDRjtBQVNELE1BQU0sT0FBTyxTQUFTO0lBS3BCLFlBQVksVUFBaUIsRUFBQyxVQUFpQixFQUFDLFFBQWU7UUFDN0QsSUFBSSxDQUFDLFdBQVcsR0FBQyxVQUFVLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBQyxVQUFVLENBQUE7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBQyxRQUFRLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQTtJQUNqRixDQUFDO0lBQ0QsSUFBSSxVQUFVO1FBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFBO0lBQ2pGLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBdUM7UUFDNUMsSUFBRyxjQUFjLEVBQUU7WUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksY0FBYyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLGNBQWMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDM0o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxtQkFBbUIsR0FBQyxJQUFJLENBQUMsU0FBUyxHQUFDLE9BQU8sR0FBQyxJQUFJLENBQUMsVUFBVSxHQUFDLGlDQUFpQyxHQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDdkgsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMZXZlbEluZm9zfSBmcm9tIFwiLi9kc3AvbGV2ZWxfbWVhc3VyZVwiO1xyXG5pbXBvcnQge0F1ZGlvRGF0YUhvbGRlcn0gZnJvbSBcIi4vYXVkaW9fZGF0YV9ob2xkZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBdWRpb0NsaXAge1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3Rpb246U2VsZWN0aW9ufG51bGw9bnVsbDtcclxuICAgICAgICBwcml2YXRlIF9sZXZlbEluZm9zOkxldmVsSW5mb3MgfCBudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBzZWxlY3Rpb25PYnNlcnZlcnM6QXJyYXk8KGF1ZGlvQ2xpcDpBdWRpb0NsaXApPT52b2lkPjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXVkaW9EYXRhSG9sZGVyOkF1ZGlvRGF0YUhvbGRlcikge1xyXG5cclxuICAgIHRoaXMuc2VsZWN0aW9uT2JzZXJ2ZXJzPW5ldyBBcnJheTwoYXVkaW9DbGlwOkF1ZGlvQ2xpcCk9PnZvaWQ+KClcclxuICB9XHJcblxyXG4gIGdldCBhdWRpb0RhdGFIb2xkZXIoKTogQXVkaW9EYXRhSG9sZGVyIHtcclxuICAgIHJldHVybiB0aGlzLl9hdWRpb0RhdGFIb2xkZXI7XHJcbiAgfVxyXG5cclxuICBnZXQgc2VsZWN0aW9uKCk6IFNlbGVjdGlvbnxudWxse1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIHNldCBzZWxlY3Rpb24odmFsdWU6IFNlbGVjdGlvbnxudWxsKSB7XHJcbiAgICB0aGlzLl9zZWxlY3Rpb24gPSB2YWx1ZTtcclxuICAgIC8vIGxldCBvYnNDbnQ9dGhpcy5zZWxlY3Rpb25PYnNlcnZlcnMubGVuZ3RoXHJcbiAgICAvLyB0aGlzLnNlbGVjdGlvbk9ic2VydmVycy5mb3JFYWNoKChvYnMpPT4ge1xyXG4gICAgLy8gICBjb25zb2xlLmxvZyhcIkNhbGxpbmcgb2JzZXJ2ZXJcIilcclxuICAgIC8vICAgb2JzKHRoaXMpXHJcbiAgICAvLyB9KTtcclxuICAgIGZvcihsZXQgc2VsT2JzIG9mIHRoaXMuc2VsZWN0aW9uT2JzZXJ2ZXJzKXtcclxuICAgICAgc2VsT2JzKHRoaXMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGV2ZWxJbmZvcygpOiBMZXZlbEluZm9zIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWxJbmZvcztcclxuICB9XHJcblxyXG4gIHNldCBsZXZlbEluZm9zKHZhbHVlOiBMZXZlbEluZm9zIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fbGV2ZWxJbmZvcyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgYWRkU2VsZWN0aW9uT2JzZXJ2ZXIoc2VsZWN0aW9uT2JzZXJ2ZXI6KGF1ZGlvQ2xpcDpBdWRpb0NsaXApPT52b2lkLGluaXQ9ZmFsc2Upe1xyXG4gICAgbGV0IG9ic0FscmVhZHlJbkxpc3Q9dGhpcy5zZWxlY3Rpb25PYnNlcnZlcnMuZmluZCgob2JzKT0+KG9icz09PXNlbGVjdGlvbk9ic2VydmVyKSlcclxuICAgIGlmKCFvYnNBbHJlYWR5SW5MaXN0KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uT2JzZXJ2ZXJzLnB1c2goc2VsZWN0aW9uT2JzZXJ2ZXIpXHJcbiAgICB9XHJcbiAgICBpZihpbml0KXtcclxuICAgICAgc2VsZWN0aW9uT2JzZXJ2ZXIodGhpcylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZVNlbGVjdGlvbk9ic2VydmVyKHNlbGVjdGlvbk9ic2VydmVyOihhdWRpb0NsaXA6QXVkaW9DbGlwKT0+dm9pZCl7XHJcbiAgICB0aGlzLnNlbGVjdGlvbk9ic2VydmVycz10aGlzLnNlbGVjdGlvbk9ic2VydmVycy5maWx0ZXIoKG9icyk9PntvYnMhPT1zZWxlY3Rpb25PYnNlcnZlcn0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRlciB7XHJcbiAgcmVhZChkYXRhOiBCbG9iKTogQXVkaW9DbGlwO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgV3JpdGVyIHtcclxuICB3cml0ZShhdWRpb0RhdGE6IEF1ZGlvQ2xpcCk6IEJsb2I7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb257XHJcbiAgcHJpdmF0ZSBfc2FtcGxlUmF0ZTpudW1iZXI7XHJcbiAgcHJpdmF0ZSBfc3RhcnRGcmFtZTpudW1iZXI7XHJcbiAgcHJpdmF0ZSBfZW5kRnJhbWU6bnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihzYW1wbGVSYXRlOm51bWJlcixzdGFydEZyYW1lOm51bWJlcixlbmRGcmFtZTpudW1iZXIpe1xyXG4gICAgdGhpcy5fc2FtcGxlUmF0ZT1zYW1wbGVSYXRlO1xyXG4gICAgdGhpcy5fc3RhcnRGcmFtZT1zdGFydEZyYW1lXHJcbiAgICB0aGlzLl9lbmRGcmFtZT1lbmRGcmFtZTtcclxuICB9XHJcblxyXG4gIGdldCBzYW1wbGVSYXRlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2FtcGxlUmF0ZTtcclxuICB9XHJcbiAgZ2V0IGVuZEZyYW1lKCk6bnVtYmVye1xyXG4gICAgcmV0dXJuIHRoaXMuX2VuZEZyYW1lO1xyXG4gIH1cclxuICBnZXQgc3RhcnRGcmFtZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0RnJhbWU7XHJcbiAgfVxyXG5cclxuICBnZXQgbGVmdEZyYW1lKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKHRoaXMuX3N0YXJ0RnJhbWUgPD0gdGhpcy5fZW5kRnJhbWUpID8gdGhpcy5fc3RhcnRGcmFtZSA6IHRoaXMuX2VuZEZyYW1lXHJcbiAgfVxyXG4gIGdldCByaWdodEZyYW1lKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKHRoaXMuX3N0YXJ0RnJhbWUgPD0gdGhpcy5fZW5kRnJhbWUpID8gdGhpcy5fZW5kRnJhbWUgOiB0aGlzLl9zdGFydEZyYW1lXHJcbiAgfVxyXG5cclxuICBlcXVhbHMob3RoZXJTZWxlY3Rpb246U2VsZWN0aW9ufG51bGx8dW5kZWZpbmVkKTpib29sZWFue1xyXG4gICAgaWYob3RoZXJTZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuICh0aGlzLl9zYW1wbGVSYXRlID09IG90aGVyU2VsZWN0aW9uLl9zYW1wbGVSYXRlICYmIHRoaXMuX3N0YXJ0RnJhbWUgPT09IG90aGVyU2VsZWN0aW9uLl9zdGFydEZyYW1lICYmIHRoaXMuX2VuZEZyYW1lID09PSBvdGhlclNlbGVjdGlvbi5fZW5kRnJhbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdG9TdHJpbmcoKXtcclxuICAgIHJldHVybiBcIlNlbGVjdGlvbjogZnJvbTogXCIrdGhpcy5sZWZ0RnJhbWUrXCIgdG86IFwiK3RoaXMucmlnaHRGcmFtZStcIiBmcmFtZS4gUmVmZXJzIHRvIHNhbXBsZSByYXRlIDpcIit0aGlzLl9zYW1wbGVSYXRlO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbiJdfQ==
|