@jubbio/voice 1.0.4 → 1.0.6
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 +43 -22
- package/dist/AudioPlayer.js +92 -47
- package/dist/AudioResource.js +20 -8
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -32,12 +32,13 @@ npm install @jubbio/voice
|
|
|
32
32
|
|
|
33
33
|
## Quick Start
|
|
34
34
|
|
|
35
|
-
```
|
|
36
|
-
import { Client, GatewayIntentBits } from '@jubbio/core';
|
|
35
|
+
```javascript
|
|
36
|
+
import { Client, GatewayIntentBits, EmbedBuilder, Colors } from '@jubbio/core';
|
|
37
37
|
import {
|
|
38
38
|
joinVoiceChannel,
|
|
39
39
|
createAudioPlayer,
|
|
40
40
|
createAudioResourceFromUrl,
|
|
41
|
+
probeAudioInfo,
|
|
41
42
|
AudioPlayerStatus
|
|
42
43
|
} from '@jubbio/voice';
|
|
43
44
|
|
|
@@ -59,28 +60,48 @@ client.on('interactionCreate', async (interaction) => {
|
|
|
59
60
|
return interaction.reply('❌ Join a voice channel first!');
|
|
60
61
|
}
|
|
61
62
|
|
|
62
|
-
//
|
|
63
|
-
|
|
64
|
-
channelId: voiceChannel,
|
|
65
|
-
guildId: interaction.guildId,
|
|
66
|
-
adapterCreator: client.voice.adapters.get(interaction.guildId)
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
// Create player and play
|
|
70
|
-
const player = createAudioPlayer();
|
|
71
|
-
const resource = createAudioResourceFromUrl(url);
|
|
72
|
-
|
|
73
|
-
connection.subscribe(player);
|
|
74
|
-
player.play(resource);
|
|
63
|
+
// Defer reply while fetching song info
|
|
64
|
+
await interaction.deferReply();
|
|
75
65
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
66
|
+
try {
|
|
67
|
+
// Get song info
|
|
68
|
+
const info = await probeAudioInfo(url);
|
|
69
|
+
|
|
70
|
+
// Join voice channel
|
|
71
|
+
const connection = joinVoiceChannel({
|
|
72
|
+
channelId: voiceChannel,
|
|
73
|
+
guildId: interaction.guildId,
|
|
74
|
+
adapterCreator: client.voice.adapters.get(interaction.guildId)
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Create player and play
|
|
78
|
+
const player = createAudioPlayer();
|
|
79
|
+
const resource = createAudioResourceFromUrl(info.url);
|
|
80
|
+
|
|
81
|
+
connection.subscribe(player);
|
|
82
|
+
player.play(resource);
|
|
83
|
+
|
|
84
|
+
// Format duration
|
|
85
|
+
const minutes = Math.floor(info.duration / 60);
|
|
86
|
+
const seconds = info.duration % 60;
|
|
87
|
+
const durationStr = `${minutes}:${seconds.toString().padStart(2, '0')}`;
|
|
88
|
+
|
|
89
|
+
// Create embed with song info
|
|
90
|
+
const embed = new EmbedBuilder()
|
|
91
|
+
.setTitle('🎵 Now Playing')
|
|
92
|
+
.setDescription(`**${info.title}**`)
|
|
93
|
+
.setColor(Colors.Blue)
|
|
94
|
+
.addFields({ name: 'Duration', value: durationStr, inline: true })
|
|
95
|
+
.setTimestamp();
|
|
96
|
+
|
|
97
|
+
if (info.thumbnail) {
|
|
98
|
+
embed.setThumbnail(info.thumbnail);
|
|
80
99
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
100
|
+
|
|
101
|
+
await interaction.editReply({ embeds: [embed] });
|
|
102
|
+
} catch (error) {
|
|
103
|
+
await interaction.editReply(`❌ Error: ${error.message}`);
|
|
104
|
+
}
|
|
84
105
|
}
|
|
85
106
|
});
|
|
86
107
|
|
package/dist/AudioPlayer.js
CHANGED
|
@@ -56,6 +56,13 @@ class AudioPlayer extends events_1.EventEmitter {
|
|
|
56
56
|
...options.behaviors
|
|
57
57
|
}
|
|
58
58
|
};
|
|
59
|
+
// Add default error handler to prevent crashes
|
|
60
|
+
this.on('error', (error) => {
|
|
61
|
+
// Default handler - just log if no other listeners
|
|
62
|
+
if (this.listenerCount('error') === 1) {
|
|
63
|
+
console.error('[AudioPlayer] Error:', error.message);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
59
66
|
}
|
|
60
67
|
/**
|
|
61
68
|
* Play an audio resource
|
|
@@ -146,8 +153,10 @@ class AudioPlayer extends events_1.EventEmitter {
|
|
|
146
153
|
await this.startFFmpeg();
|
|
147
154
|
}
|
|
148
155
|
catch (error) {
|
|
156
|
+
// Emit error but don't stop - let user decide what to do
|
|
149
157
|
this.emit('error', { message: error.message, resource: this.currentResource });
|
|
150
|
-
|
|
158
|
+
// Reset to idle state without full cleanup
|
|
159
|
+
this.setState({ status: enums_1.AudioPlayerStatus.Idle });
|
|
151
160
|
}
|
|
152
161
|
}
|
|
153
162
|
async setupAudioTrack(room) {
|
|
@@ -188,51 +197,87 @@ class AudioPlayer extends events_1.EventEmitter {
|
|
|
188
197
|
// Detect platform
|
|
189
198
|
const isWindows = process.platform === 'win32';
|
|
190
199
|
const ytDlpPath = isWindows ? 'yt-dlp' : '~/.local/bin/yt-dlp';
|
|
191
|
-
//
|
|
192
|
-
//
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
'
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
200
|
+
// On Windows with shell mode, we need to use a single command string
|
|
201
|
+
// to preserve spaces in the search query
|
|
202
|
+
if (isWindows) {
|
|
203
|
+
// Build command as single string with proper quoting
|
|
204
|
+
const ytdlpCmd = `${ytDlpPath} -f bestaudio/best -o - --no-playlist --no-warnings --default-search ytsearch "${inputSource}"`;
|
|
205
|
+
const ffmpegCmd = `ffmpeg -i pipe:0 -f s16le -ar ${SAMPLE_RATE} -ac ${CHANNELS} -acodec pcm_s16le -`;
|
|
206
|
+
console.log('[AudioPlayer] yt-dlp command:', ytdlpCmd);
|
|
207
|
+
// Spawn yt-dlp with shell command
|
|
208
|
+
const ytdlpProcess = (0, child_process_1.spawn)(ytdlpCmd, [], {
|
|
209
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
210
|
+
shell: true
|
|
211
|
+
});
|
|
212
|
+
// Spawn ffmpeg with shell command
|
|
213
|
+
this.ffmpegProcess = (0, child_process_1.spawn)(ffmpegCmd, [], {
|
|
214
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
215
|
+
shell: true
|
|
216
|
+
});
|
|
217
|
+
// Pipe yt-dlp stdout to ffmpeg stdin
|
|
218
|
+
ytdlpProcess.stdout?.pipe(this.ffmpegProcess.stdin);
|
|
219
|
+
// Handle yt-dlp stderr - log everything for debugging
|
|
220
|
+
ytdlpProcess.stderr?.on('data', (data) => {
|
|
221
|
+
const msg = data.toString().trim();
|
|
222
|
+
if (msg) {
|
|
223
|
+
console.log('[yt-dlp]', msg);
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
ytdlpProcess.on('error', (err) => {
|
|
227
|
+
console.error('[yt-dlp] process error:', err.message);
|
|
228
|
+
});
|
|
229
|
+
ytdlpProcess.on('close', (code) => {
|
|
230
|
+
if (code !== 0) {
|
|
231
|
+
console.error(`yt-dlp exited with code ${code}`);
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
// Unix: use args array (no shell needed)
|
|
237
|
+
const ytdlpArgs = [
|
|
238
|
+
'-f', 'bestaudio/best',
|
|
239
|
+
'-o', '-',
|
|
240
|
+
'--no-playlist',
|
|
241
|
+
'--no-warnings',
|
|
242
|
+
'--default-search', 'ytsearch',
|
|
243
|
+
inputSource
|
|
244
|
+
];
|
|
245
|
+
const ffmpegArgs = [
|
|
246
|
+
'-i', 'pipe:0',
|
|
247
|
+
'-f', 's16le',
|
|
248
|
+
'-ar', String(SAMPLE_RATE),
|
|
249
|
+
'-ac', String(CHANNELS),
|
|
250
|
+
'-acodec', 'pcm_s16le',
|
|
251
|
+
'-'
|
|
252
|
+
];
|
|
253
|
+
// Spawn yt-dlp
|
|
254
|
+
const ytdlpProcess = (0, child_process_1.spawn)(ytDlpPath, ytdlpArgs, {
|
|
255
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
256
|
+
shell: false
|
|
257
|
+
});
|
|
258
|
+
// Spawn ffmpeg
|
|
259
|
+
this.ffmpegProcess = (0, child_process_1.spawn)('ffmpeg', ffmpegArgs, {
|
|
260
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
261
|
+
shell: false
|
|
262
|
+
});
|
|
263
|
+
// Pipe yt-dlp stdout to ffmpeg stdin
|
|
264
|
+
ytdlpProcess.stdout?.pipe(this.ffmpegProcess.stdin);
|
|
265
|
+
// Handle yt-dlp errors
|
|
266
|
+
ytdlpProcess.stderr?.on('data', (data) => {
|
|
267
|
+
const msg = data.toString();
|
|
268
|
+
if (msg.includes('ERROR')) {
|
|
269
|
+
console.error('yt-dlp error:', msg);
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
ytdlpProcess.on('error', (err) => {
|
|
273
|
+
console.error('yt-dlp process error:', err.message);
|
|
274
|
+
});
|
|
275
|
+
ytdlpProcess.on('close', (code) => {
|
|
276
|
+
if (code !== 0) {
|
|
277
|
+
console.error(`yt-dlp exited with code ${code}`);
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
}
|
|
236
281
|
}
|
|
237
282
|
else {
|
|
238
283
|
console.log('Using direct FFmpeg mode');
|
|
@@ -435,4 +480,4 @@ exports.AudioPlayer = AudioPlayer;
|
|
|
435
480
|
function createAudioPlayer(options) {
|
|
436
481
|
return new AudioPlayer(options);
|
|
437
482
|
}
|
|
438
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXVkaW9QbGF5ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQXVkaW9QbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBbWdCQSw4Q0FFQztBQXJnQkQsbUNBQXNDO0FBQ3RDLGlEQUFvRDtBQUNwRCxxQ0FBaUM7QUFDakMsZ0RBTzJCO0FBQzNCLG1DQUE0QztBQUs1Qyw0Q0FBNEM7QUFDNUMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQzFCLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNuQixNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUM3QixNQUFNLGlCQUFpQixHQUFHLENBQUMsV0FBVyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsTUFBTTtBQUUxRSx5QkFBeUI7QUFDekIsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxzQkFBc0I7QUFDcEUsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUMsQ0FBQyxrQ0FBa0M7QUFDcEUsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUMsQ0FBSSx5Q0FBeUM7QUFDMUUsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsQ0FBRyxvREFBb0Q7QUFDckYsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUMsQ0FBQyx5Q0FBeUM7QUFFMUU7O0dBRUc7QUFDSCxNQUFhLFdBQVksU0FBUSxxQkFBWTtJQUMzQywyQkFBMkI7SUFDcEIsS0FBSyxHQUFxQixFQUFFLE1BQU0sRUFBRSx5QkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVwRSxxQkFBcUI7SUFDYixPQUFPLENBQTJCO0lBRTFDLG1DQUFtQztJQUMzQixhQUFhLEdBQXlCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFeEQsNkJBQTZCO0lBQ3JCLGVBQWUsR0FBeUIsSUFBSSxDQUFDO0lBRXJELHFCQUFxQjtJQUNiLGFBQWEsR0FBd0IsSUFBSSxDQUFDO0lB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QVEsQ0FBQyxNQUFNLEtBQUsseUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFDO1lBQzlFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUE5ZEQsa0NBOGRDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxPQUFrQztJQUNsRSxPQUFPLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xyXG5pbXBvcnQgeyBzcGF3biwgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCB7IGhydGltZSB9IGZyb20gJ3Byb2Nlc3MnO1xyXG5pbXBvcnQgeyBcclxuICBSb29tLCBcclxuICBMb2NhbEF1ZGlvVHJhY2ssIFxyXG4gIEF1ZGlvU291cmNlLCBcclxuICBUcmFja1B1Ymxpc2hPcHRpb25zLCBcclxuICBUcmFja1NvdXJjZSxcclxuICBBdWRpb0ZyYW1lIFxyXG59IGZyb20gJ0BsaXZla2l0L3J0Yy1ub2RlJztcclxuaW1wb3J0IHsgQXVkaW9QbGF5ZXJTdGF0dXMgfSBmcm9tICcuL2VudW1zJztcclxuaW1wb3J0IHsgQ3JlYXRlQXVkaW9QbGF5ZXJPcHRpb25zLCBBdWRpb1BsYXllclN0YXRlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IEF1ZGlvUmVzb3VyY2UgfSBmcm9tICcuL0F1ZGlvUmVzb3VyY2UnO1xyXG5pbXBvcnQgeyBWb2ljZUNvbm5lY3Rpb24gfSBmcm9tICcuL1ZvaWNlQ29ubmVjdGlvbic7XHJcblxyXG4vLyBBdWRpbyBzZXR0aW5ncyBmb3IgTGl2ZUtpdCAoNDhrSHogc3RlcmVvKVxyXG5jb25zdCBTQU1QTEVfUkFURSA9IDQ4MDAwO1xyXG5jb25zdCBDSEFOTkVMUyA9IDI7XHJcbmNvbnN0IEZSQU1FX0RVUkFUSU9OX01TID0gMjA7XHJcbmNvbnN0IFNBTVBMRVNfUEVSX0ZSQU1FID0gKFNBTVBMRV9SQVRFICogRlJBTUVfRFVSQVRJT05fTVMpIC8gMTAwMDsgLy8gOTYwXHJcblxyXG4vLyBKaXR0ZXIgYnVmZmVyIHNldHRpbmdzXHJcbmNvbnN0IEZSQU1FX0lOVEVSVkFMX05TID0gQmlnSW50KDIwXzAwMF8wMDApOyAvLyAyMG1zIGluIG5hbm9zZWNvbmRzXHJcbmNvbnN0IFRBUkdFVF9CVUZGRVJfRlJBTUVTID0gMTUwOyAvLyB+MyBzZWNvbmRzIC0gdGFyZ2V0IGJ1ZmZlciBzaXplXHJcbmNvbnN0IE1JTl9CVUZGRVJfRlJBTUVTID0gNzU7ICAgIC8vIH4xLjUgc2Vjb25kcyAtIG1pbmltdW0gYmVmb3JlIHdlIHN0YXJ0XHJcbmNvbnN0IE1BWF9CVUZGRVJfRlJBTUVTID0gNTAwOyAgIC8vIH4xMCBzZWNvbmRzIC0gbWF4IGJ1ZmZlciB0byBwcmV2ZW50IG1lbW9yeSBpc3N1ZXNcclxuY29uc3QgTE9XX0JVRkZFUl9USFJFU0hPTEQgPSA1MDsgLy8gfjEgc2Vjb25kIC0gd2hlbiB0byBzbG93IGRvd24gcGxheWJhY2tcclxuXHJcbi8qKlxyXG4gKiBBdWRpbyBwbGF5ZXIgZm9yIHBsYXlpbmcgYXVkaW8gcmVzb3VyY2VzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQXVkaW9QbGF5ZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gIC8qKiBDdXJyZW50IHBsYXllciBzdGF0ZSAqL1xyXG4gIHB1YmxpYyBzdGF0ZTogQXVkaW9QbGF5ZXJTdGF0ZSA9IHsgc3RhdHVzOiBBdWRpb1BsYXllclN0YXR1cy5JZGxlIH07XHJcbiAgXHJcbiAgLyoqIFBsYXllciBvcHRpb25zICovXHJcbiAgcHJpdmF0ZSBvcHRpb25zOiBDcmVhdGVBdWRpb1BsYXllck9wdGlvbnM7XHJcbiAgXHJcbiAgLyoqIFN1YnNjcmliZWQgdm9pY2UgY29ubmVjdGlvbnMgKi9cclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFNldDxWb2ljZUNvbm5lY3Rpb24+ID0gbmV3IFNldCgpO1xyXG4gIFxyXG4gIC8qKiBDdXJyZW50IGF1ZGlvIHJlc291cmNlICovXHJcbiAgcHJpdmF0ZSBjdXJyZW50UmVzb3VyY2U6IEF1ZGlvUmVzb3VyY2UgfCBudWxsID0gbnVsbDtcclxuICBcclxuICAvKiogRkZtcGVnIHByb2Nlc3MgKi9cclxuICBwcml2YXRlIGZmbXBlZ1Byb2Nlc3M6IENoaWxkUHJvY2VzcyB8IG51bGwgPSBudWxsO1xyXG4gIFxyXG4gIC8qKiBMaXZlS2l0IGF1ZGlvIHNvdXJjZSBhbmQgdHJhY2sgKi9cclxuICBwcml2YXRlIGF1ZGlvU291cmNlOiBBdWRpb1NvdXJjZSB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgYXVkaW9UcmFjazogTG9jYWxBdWRpb1RyYWNrIHwgbnVsbCA9IG51bGw7XHJcbiAgXHJcbiAgLyoqIEZyYW1lIHF1ZXVlIGFuZCBwbGF5YmFjayBzdGF0ZSAqL1xyXG4gIHByaXZhdGUgZnJhbWVRdWV1ZTogSW50MTZBcnJheVtdID0gW107XHJcbiAgcHJpdmF0ZSBwbGF5YmFja1RpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsZWZ0b3ZlckJ1ZmZlcjogQnVmZmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBpc1B1Ymxpc2hlZCA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKiBIaWdoLXJlc29sdXRpb24gdGltaW5nICovXHJcbiAgcHJpdmF0ZSBuZXh0RnJhbWVUaW1lOiBiaWdpbnQgPSBCaWdJbnQoMCk7XHJcbiAgcHJpdmF0ZSBpc1BsYXliYWNrTG9vcFJ1bm5pbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIGZmbXBlZ0RvbmUgPSBmYWxzZTtcclxuICBcclxuICAvKiogQnVmZmVyIHN0YXRpc3RpY3MgKi9cclxuICBwcml2YXRlIGJ1ZmZlclVuZGVycnVucyA9IDA7XHJcbiAgcHJpdmF0ZSBmcmFtZXNQbGF5ZWQgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBDcmVhdGVBdWRpb1BsYXllck9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMub3B0aW9ucyA9IHtcclxuICAgICAgYmVoYXZpb3JzOiB7XHJcbiAgICAgICAgbm9TdWJzY3JpYmVyOiAncGF1c2UnLFxyXG4gICAgICAgIG1heE1pc3NlZEZyYW1lczogNSxcclxuICAgICAgICAuLi5vcHRpb25zLmJlaGF2aW9yc1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGxheSBhbiBhdWRpbyByZXNvdXJjZVxyXG4gICAqL1xyXG4gIHBsYXkocmVzb3VyY2U6IEF1ZGlvUmVzb3VyY2UpOiB2b2lkIHtcclxuICAgIC8vIFN0b3AgY3VycmVudCBwbGF5YmFja1xyXG4gICAgdGhpcy5zdG9wKCk7XHJcbiAgICBcclxuICAgIHRoaXMuY3VycmVudFJlc291cmNlID0gcmVzb3VyY2U7XHJcbiAgICB0aGlzLnNldFN0YXRlKHsgc3RhdHVzOiBBdWRpb1BsYXllclN0YXR1cy5CdWZmZXJpbmcsIHJlc291cmNlIH0pO1xyXG4gICAgXHJcbiAgICAvLyBTdGFydCBwbGF5YmFjayBpZiB3ZSBoYXZlIGEgcmVhZHkgY29ubmVjdGlvblxyXG4gICAgZm9yIChjb25zdCBjb25uZWN0aW9uIG9mIHRoaXMuc3Vic2NyaXB0aW9ucykge1xyXG4gICAgICBpZiAoY29ubmVjdGlvbi5nZXRSb29tKCkpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0UGxheWJhY2soY29ubmVjdGlvbik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHBsYXliYWNrXHJcbiAgICovXHJcbiAgcGF1c2UoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZS5zdGF0dXMgIT09IEF1ZGlvUGxheWVyU3RhdHVzLlBsYXlpbmcpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IHN0YXR1czogQXVkaW9QbGF5ZXJTdGF0dXMuUGF1c2VkLCByZXNvdXJjZTogdGhpcy5jdXJyZW50UmVzb3VyY2UgfSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVucGF1c2UgcGxheWJhY2tcclxuICAgKi9cclxuICB1bnBhdXNlKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuc3RhdGUuc3RhdHVzICE9PSBBdWRpb1BsYXllclN0YXR1cy5QYXVzZWQpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IHN0YXR1czogQXVkaW9QbGF5ZXJTdGF0dXMuUGxheWluZywgcmVzb3VyY2U6IHRoaXMuY3VycmVudFJlc291cmNlIH0pO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIHBsYXliYWNrXHJcbiAgICovXHJcbiAgc3RvcChmb3JjZSA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZS5zdGF0dXMgPT09IEF1ZGlvUGxheWVyU3RhdHVzLklkbGUgJiYgIWZvcmNlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuY2xlYW51cCgpO1xyXG4gICAgdGhpcy5jdXJyZW50UmVzb3VyY2UgPSBudWxsO1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IHN0YXR1czogQXVkaW9QbGF5ZXJTdGF0dXMuSWRsZSB9KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2NyaWJlIGEgdm9pY2UgY29ubmVjdGlvbiB0byB0aGlzIHBsYXllclxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHN1YnNjcmliZShjb25uZWN0aW9uOiBWb2ljZUNvbm5lY3Rpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoY29ubmVjdGlvbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbnN1YnNjcmliZSBhIHZvaWNlIGNvbm5lY3Rpb24gZnJvbSB0aGlzIHBsYXllclxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHVuc3Vic2NyaWJlKGNvbm5lY3Rpb246IFZvaWNlQ29ubmVjdGlvbik6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmRlbGV0ZShjb25uZWN0aW9uKTtcclxuICAgIFxyXG4gICAgLy8gQXV0by1wYXVzZSBpZiBubyBzdWJzY3JpYmVyc1xyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9ucy5zaXplID09PSAwICYmIHRoaXMub3B0aW9ucy5iZWhhdmlvcnM/Lm5vU3Vic2NyaWJlciA9PT0gJ3BhdXNlJykge1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZS5zdGF0dXMgPT09IEF1ZGlvUGxheWVyU3RhdHVzLlBsYXlpbmcpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgc3RhdHVzOiBBdWRpb1BsYXllclN0YXR1cy5BdXRvUGF1c2VkLCByZXNvdXJjZTogdGhpcy5jdXJyZW50UmVzb3VyY2UgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCB3aGVuIGEgY29ubmVjdGlvbiBiZWNvbWVzIHJlYWR5XHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25Db25uZWN0aW9uUmVhZHkoY29ubmVjdGlvbjogVm9pY2VDb25uZWN0aW9uKTogdm9pZCB7XHJcbiAgICAvLyBJZiB3ZSBoYXZlIGEgcmVzb3VyY2Ugd2FpdGluZywgc3RhcnQgcGxheWJhY2tcclxuICAgIGlmICh0aGlzLmN1cnJlbnRSZXNvdXJjZSAmJiB0aGlzLnN0YXRlLnN0YXR1cyA9PT0gQXVkaW9QbGF5ZXJTdGF0dXMuQnVmZmVyaW5nKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRQbGF5YmFjayhjb25uZWN0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc3RhcnRQbGF5YmFjayhjb25uZWN0aW9uOiBWb2ljZUNvbm5lY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHJvb20gPSBjb25uZWN0aW9uLmdldFJvb20oKTtcclxuICAgIGlmICghcm9vbSB8fCAhdGhpcy5jdXJyZW50UmVzb3VyY2UpIHJldHVybjtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBDcmVhdGUgYXVkaW8gc291cmNlIGFuZCB0cmFja1xyXG4gICAgICBhd2FpdCB0aGlzLnNldHVwQXVkaW9UcmFjayhyb29tKTtcclxuICAgICAgXHJcbiAgICAgIC8vIFN0YXJ0IEZGbXBlZyB0byBkZWNvZGUgYXVkaW8gLSB0aGlzIHdpbGwgc2V0IHN0YXRlIHRvIFBsYXlpbmcgd2hlbiByZWFkeVxyXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0RkZtcGVnKCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgeyBtZXNzYWdlOiAoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2UsIHJlc291cmNlOiB0aGlzLmN1cnJlbnRSZXNvdXJjZSB9KTtcclxuICAgICAgdGhpcy5zdG9wKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNldHVwQXVkaW9UcmFjayhyb29tOiBSb29tKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5pc1B1Ymxpc2hlZCkgcmV0dXJuO1xyXG4gICAgXHJcbiAgICB0aGlzLmF1ZGlvU291cmNlID0gbmV3IEF1ZGlvU291cmNlKFNBTVBMRV9SQVRFLCBDSEFOTkVMUyk7XHJcbiAgICB0aGlzLmF1ZGlvVHJhY2sgPSBMb2NhbEF1ZGlvVHJhY2suY3JlYXRlQXVkaW9UcmFjaygnbXVzaWMnLCB0aGlzLmF1ZGlvU291cmNlKTtcclxuICAgIFxyXG4gICAgY29uc3Qgb3B0aW9ucyA9IG5ldyBUcmFja1B1Ymxpc2hPcHRpb25zKCk7XHJcbiAgICBvcHRpb25zLnNvdXJjZSA9IFRyYWNrU291cmNlLlNPVVJDRV9NSUNST1BIT05FO1xyXG4gICAgXHJcbiAgICBpZiAocm9vbS5sb2NhbFBhcnRpY2lwYW50KSB7XHJcbiAgICAgIGF3YWl0IHJvb20ubG9jYWxQYXJ0aWNpcGFudC5wdWJsaXNoVHJhY2sodGhpcy5hdWRpb1RyYWNrLCBvcHRpb25zKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXNQdWJsaXNoZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzdGFydEZGbXBlZygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5jdXJyZW50UmVzb3VyY2UpIHJldHVybjtcclxuICAgIFxyXG4gICAgbGV0IGlucHV0U291cmNlID0gdGhpcy5jdXJyZW50UmVzb3VyY2UuZ2V0SW5wdXRTb3VyY2UoKTtcclxuICAgIGNvbnNvbGUubG9nKGBGRm1wZWcgaW5wdXQgc291cmNlOiAke2lucHV0U291cmNlLnN1YnN0cmluZygwLCAxMDApfS4uLmApO1xyXG4gICAgXHJcbiAgICAvLyBDaGVjayBpZiBpbnB1dCBpcyBhIFVSTCBvciBzZWFyY2ggcXVlcnlcclxuICAgIGNvbnN0IGlzVXJsID0gaW5wdXRTb3VyY2Uuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IFxyXG4gICAgICAgICAgICAgICAgICBpbnB1dFNvdXJjZS5zdGFydHNXaXRoKCdodHRwczovLycpIHx8IFxyXG4gICAgICAgICAgICAgICAgICBpbnB1dFNvdXJjZS5zdGFydHNXaXRoKCd5dHNlYXJjaDonKTtcclxuICAgIFxyXG4gICAgLy8gSWYgbm90IGEgVVJMLCB0cmVhdCBhcyBZb3VUdWJlIHNlYXJjaFxyXG4gICAgaWYgKCFpc1VybCkge1xyXG4gICAgICBpbnB1dFNvdXJjZSA9IGB5dHNlYXJjaDE6JHtpbnB1dFNvdXJjZX1gO1xyXG4gICAgICBjb25zb2xlLmxvZyhgQ29udmVydGVkIHRvIFlvdVR1YmUgc2VhcmNoOiAke2lucHV0U291cmNlfWApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgc3RyZWFtaW5nIFVSTCB0aGF0IG5lZWRzIHl0LWRscFxyXG4gICAgY29uc3QgbmVlZHNZdERscCA9IGlucHV0U291cmNlLmluY2x1ZGVzKCd5b3V0dWJlLmNvbScpIHx8IFxyXG4gICAgICAgICAgICAgICAgICAgICAgIGlucHV0U291cmNlLmluY2x1ZGVzKCd5b3V0dS5iZScpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTb3VyY2UuaW5jbHVkZXMoJ3NvdW5kY2xvdWQuY29tJykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFNvdXJjZS5pbmNsdWRlcygndHdpdGNoLnR2JykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFNvdXJjZS5zdGFydHNXaXRoKCd5dHNlYXJjaCcpO1xyXG4gICAgXHJcbiAgICBpZiAobmVlZHNZdERscCkge1xyXG4gICAgICAvLyBVc2UgeXQtZGxwIHRvIHBpcGUgYXVkaW8gZGlyZWN0bHkgdG8gRkZtcGVnXHJcbiAgICAgIGNvbnNvbGUubG9nKCdVc2luZyB5dC1kbHAgcGlwZSBtb2RlJyk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBEZXRlY3QgcGxhdGZvcm1cclxuICAgICAgY29uc3QgaXNXaW5kb3dzID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcclxuICAgICAgY29uc3QgeXREbHBQYXRoID0gaXNXaW5kb3dzID8gJ3l0LWRscCcgOiAnfi8ubG9jYWwvYmluL3l0LWRscCc7XHJcbiAgICAgIFxyXG4gICAgICAvLyBTcGF3biB5dC1kbHAgYW5kIGZmbXBlZyBzZXBhcmF0ZWx5LCBwaXBlIGJldHdlZW4gdGhlbVxyXG4gICAgICAvLyBGb3Igc2VhcmNoIHF1ZXJpZXMsIHVzZSAtLWRlZmF1bHQtc2VhcmNoIHRvIGhhbmRsZSBwcm9wZXJseVxyXG4gICAgICBjb25zdCB5dGRscEFyZ3MgPSBbXHJcbiAgICAgICAgJy1mJywgJ2Jlc3RhdWRpby9iZXN0JyxcclxuICAgICAgICAnLW8nLCAnLScsXHJcbiAgICAgICAgJy0tbm8tcGxheWxpc3QnLFxyXG4gICAgICAgICctLW5vLXdhcm5pbmdzJyxcclxuICAgICAgICAnLS1kZWZhdWx0LXNlYXJjaCcsICd5dHNlYXJjaCcsXHJcbiAgICAgICAgaW5wdXRTb3VyY2VcclxuICAgICAgXTtcclxuICAgICAgXHJcbiAgICAgIGNvbnN0IGZmbXBlZ0FyZ3MgPSBbXHJcbiAgICAgICAgJy1pJywgJ3BpcGU6MCcsXHJcbiAgICAgICAgJy1mJywgJ3MxNmxlJyxcclxuICAgICAgICAnLWFyJywgU3RyaW5nKFNBTVBMRV9SQVRFKSxcclxuICAgICAgICAnLWFjJywgU3RyaW5nKENIQU5ORUxTKSxcclxuICAgICAgICAnLWFjb2RlYycsICdwY21fczE2bGUnLFxyXG4gICAgICAgICctJ1xyXG4gICAgICBdO1xyXG4gICAgICBcclxuICAgICAgLy8gU3Bhd24geXQtZGxwXHJcbiAgICAgIGNvbnN0IHl0ZGxwUHJvY2VzcyA9IHNwYXduKHl0RGxwUGF0aCwgeXRkbHBBcmdzLCB7IFxyXG4gICAgICAgIHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJ10sXHJcbiAgICAgICAgc2hlbGw6IGlzV2luZG93cyAvLyBVc2Ugc2hlbGwgb24gV2luZG93cyB0byByZXNvbHZlIFBBVEhcclxuICAgICAgfSk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBTcGF3biBmZm1wZWdcclxuICAgICAgdGhpcy5mZm1wZWdQcm9jZXNzID0gc3Bhd24oJ2ZmbXBlZycsIGZmbXBlZ0FyZ3MsIHsgXHJcbiAgICAgICAgc3RkaW86IFsncGlwZScsICdwaXBlJywgJ3BpcGUnXSxcclxuICAgICAgICBzaGVsbDogaXNXaW5kb3dzXHJcbiAgICAgIH0pO1xyXG4gICAgICBcclxuICAgICAgLy8gUGlwZSB5dC1kbHAgc3Rkb3V0IHRvIGZmbXBlZyBzdGRpblxyXG4gICAgICB5dGRscFByb2Nlc3Muc3Rkb3V0Py5waXBlKHRoaXMuZmZtcGVnUHJvY2Vzcy5zdGRpbiEpO1xyXG4gICAgICBcclxuICAgICAgLy8gSGFuZGxlIHl0LWRscCBlcnJvcnNcclxuICAgICAgeXRkbHBQcm9jZXNzLnN0ZGVycj8ub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgbXNnID0gZGF0YS50b1N0cmluZygpO1xyXG4gICAgICAgIGlmIChtc2cuaW5jbHVkZXMoJ0VSUk9SJykpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3l0LWRscCBlcnJvcjonLCBtc2cpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIFxyXG4gICAgICB5dGRscFByb2Nlc3Mub24oJ2Vycm9yJywgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3l0LWRscCBwcm9jZXNzIGVycm9yOicsIGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcbiAgICAgIFxyXG4gICAgICB5dGRscFByb2Nlc3Mub24oJ2Nsb3NlJywgKGNvZGUpID0+IHtcclxuICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgeXQtZGxwIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnVXNpbmcgZGlyZWN0IEZGbXBlZyBtb2RlJyk7XHJcbiAgICAgIHRoaXMuZmZtcGVnUHJvY2VzcyA9IHNwYXduKCdmZm1wZWcnLCBbXHJcbiAgICAgICAgJy1yZWNvbm5lY3QnLCAnMScsXHJcbiAgICAgICAgJy1yZWNvbm5lY3Rfc3RyZWFtZWQnLCAnMScsXHJcbiAgICAgICAgJy1yZWNvbm5lY3RfZGVsYXlfbWF4JywgJzUnLFxyXG4gICAgICAgICctaScsIGlucHV0U291cmNlLFxyXG4gICAgICAgICctZicsICdzMTZsZScsXHJcbiAgICAgICAgJy1hcicsIFN0cmluZyhTQU1QTEVfUkFURSksXHJcbiAgICAgICAgJy1hYycsIFN0cmluZyhDSEFOTkVMUyksXHJcbiAgICAgICAgJy1hY29kZWMnLCAncGNtX3MxNmxlJyxcclxuICAgICAgICAnLSdcclxuICAgICAgXSwgeyBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZyYW1lU2l6ZSA9IFNBTVBMRVNfUEVSX0ZSQU1FICogQ0hBTk5FTFMgKiAyO1xyXG4gICAgdGhpcy5mZm1wZWdEb25lID0gZmFsc2U7XHJcbiAgICBsZXQgaGFzUmVjZWl2ZWREYXRhID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5mZm1wZWdQcm9jZXNzLnN0ZG91dD8ub24oJ2RhdGEnLCAoY2h1bms6IEJ1ZmZlcikgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZS5zdGF0dXMgIT09IEF1ZGlvUGxheWVyU3RhdHVzLlBsYXlpbmcgJiYgXHJcbiAgICAgICAgICB0aGlzLnN0YXRlLnN0YXR1cyAhPT0gQXVkaW9QbGF5ZXJTdGF0dXMuQnVmZmVyaW5nKSByZXR1cm47XHJcbiAgICAgIFxyXG4gICAgICBoYXNSZWNlaXZlZERhdGEgPSB0cnVlO1xyXG4gICAgICBcclxuICAgICAgLy8gSGFuZGxlIGxlZnRvdmVyIGZyb20gcHJldmlvdXMgY2h1bmtcclxuICAgICAgaWYgKHRoaXMubGVmdG92ZXJCdWZmZXIgJiYgdGhpcy5sZWZ0b3ZlckJ1ZmZlci5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY2h1bmsgPSBCdWZmZXIuY29uY2F0KFt0aGlzLmxlZnRvdmVyQnVmZmVyLCBjaHVua10pO1xyXG4gICAgICAgIHRoaXMubGVmdG92ZXJCdWZmZXIgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBsZXQgb2Zmc2V0ID0gMDtcclxuICAgICAgd2hpbGUgKG9mZnNldCArIGZyYW1lU2l6ZSA8PSBjaHVuay5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBmcmFtZSA9IGNodW5rLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgZnJhbWVTaXplKTtcclxuICAgICAgICBjb25zdCBpbnQxNkFycmF5ID0gbmV3IEludDE2QXJyYXkoU0FNUExFU19QRVJfRlJBTUUgKiBDSEFOTkVMUyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnQxNkFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpbnQxNkFycmF5W2ldID0gZnJhbWUucmVhZEludDE2TEUoaSAqIDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmZyYW1lUXVldWUucHVzaChpbnQxNkFycmF5KTtcclxuICAgICAgICBvZmZzZXQgKz0gZnJhbWVTaXplO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBTYXZlIGxlZnRvdmVyXHJcbiAgICAgIGlmIChvZmZzZXQgPCBjaHVuay5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmxlZnRvdmVyQnVmZmVyID0gY2h1bmsuc2xpY2Uob2Zmc2V0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IHN0ZGVyck91dHB1dCA9ICcnO1xyXG4gICAgdGhpcy5mZm1wZWdQcm9jZXNzLnN0ZGVycj8ub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XHJcbiAgICAgIHN0ZGVyck91dHB1dCArPSBkYXRhLnRvU3RyaW5nKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZmbXBlZ1Byb2Nlc3Mub24oJ2Nsb3NlJywgKGNvZGUpID0+IHtcclxuICAgICAgdGhpcy5mZm1wZWdEb25lID0gdHJ1ZTtcclxuICAgICAgdGhpcy5mZm1wZWdQcm9jZXNzID0gbnVsbDtcclxuICAgICAgaWYgKGNvZGUgIT09IDApIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBGRm1wZWcgc3RkZXJyOlxcbiR7c3RkZXJyT3V0cHV0fWApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnNvbGUubG9nKGBbQXVkaW9QbGF5ZXJdIEZGbXBlZyBjbG9zZWQgd2l0aCBjb2RlICR7Y29kZX0sIGhhc1JlY2VpdmVkRGF0YTogJHtoYXNSZWNlaXZlZERhdGF9LCBxdWV1ZTogJHt0aGlzLmZyYW1lUXVldWUubGVuZ3RofWApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5mZm1wZWdQcm9jZXNzLm9uKCdlcnJvcicsIChlcnIpID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignRkZtcGVnIHByb2Nlc3MgZXJyb3I6JywgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgeyBtZXNzYWdlOiBlcnIubWVzc2FnZSwgcmVzb3VyY2U6IHRoaXMuY3VycmVudFJlc291cmNlIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gV2FpdCBmb3IgaW5pdGlhbCBidWZmZXIgd2l0aCB0aW1lb3V0XHJcbiAgICBjb25zdCBidWZmZXJUaW1lb3V0ID0gMTAwMDA7IC8vIDEwIHNlY29uZHMgZm9yIGluaXRpYWwgYnVmZmVyXHJcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgXHJcbiAgICB3aGlsZSAodGhpcy5mcmFtZVF1ZXVlLmxlbmd0aCA8IE1JTl9CVUZGRVJfRlJBTUVTICYmIERhdGUubm93KCkgLSBzdGFydFRpbWUgPCBidWZmZXJUaW1lb3V0KSB7XHJcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCAxMDApKTtcclxuICAgICAgXHJcbiAgICAgIC8vIENoZWNrIGlmIEZGbXBlZyBmYWlsZWQgZWFybHlcclxuICAgICAgaWYgKHRoaXMuZmZtcGVnRG9uZSAmJiB0aGlzLmZyYW1lUXVldWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGRm1wZWcgZmFpbGVkIHRvIHByb2R1Y2UgYXVkaW8gZGF0YScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICh0aGlzLmZyYW1lUXVldWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGltZW91dCB3YWl0aW5nIGZvciBhdWRpbyBkYXRhJyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnNvbGUubG9nKGBbQXVkaW9QbGF5ZXJdIFN0YXJ0aW5nIHBsYXliYWNrIHdpdGggJHt0aGlzLmZyYW1lUXVldWUubGVuZ3RofSBmcmFtZXMgYnVmZmVyZWQgKHRhcmdldDogJHtUQVJHRVRfQlVGRkVSX0ZSQU1FU30pYCk7XHJcblxyXG4gICAgLy8gTWFyayByZWFkeSBmb3IgcGxheWJhY2sgLSBzZXRTdGF0ZSB3aWxsIHRyaWdnZXIgdGhlIGxvb3BcclxuICAgIHRoaXMuaXNQbGF5YmFja0xvb3BSdW5uaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubmV4dEZyYW1lVGltZSA9IGhydGltZS5iaWdpbnQoKTtcclxuICAgIGNvbnNvbGUubG9nKGBbQXVkaW9QbGF5ZXJdIFBsYXliYWNrIHJlYWR5LCBhdWRpb1NvdXJjZSBleGlzdHM6ICR7ISF0aGlzLmF1ZGlvU291cmNlfWApO1xyXG4gICAgXHJcbiAgICAvLyBTZXQgc3RhdGUgdG8gcGxheWluZyAtIHRoaXMgd2lsbCB0cmlnZ2VyIHNjaGVkdWxlTmV4dEZyYW1lIHZpYSBzZXRTdGF0ZVxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IHN0YXR1czogQXVkaW9QbGF5ZXJTdGF0dXMuUGxheWluZywgcmVzb3VyY2U6IHRoaXMuY3VycmVudFJlc291cmNlIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGlnaC1yZXNvbHV0aW9uIGZyYW1lIHNjaGVkdWxpbmcgdXNpbmcgaHJ0aW1lXHJcbiAgICogVGhpcyBwcm92aWRlcyBtdWNoIG1vcmUgYWNjdXJhdGUgdGltaW5nIHRoYW4gc2V0SW50ZXJ2YWxcclxuICAgKi9cclxuICBwcml2YXRlIHNjaGVkdWxlTmV4dEZyYW1lKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzUGxheWJhY2tMb29wUnVubmluZyB8fCB0aGlzLnN0YXRlLnN0YXR1cyAhPT0gQXVkaW9QbGF5ZXJTdGF0dXMuUGxheWluZykge1xyXG4gICAgICBjb25zb2xlLmxvZyhgW0F1ZGlvUGxheWVyXSBzY2hlZHVsZU5leHRGcmFtZSBza2lwcGVkOiBsb29wUnVubmluZz0ke3RoaXMuaXNQbGF5YmFja0xvb3BSdW5uaW5nfSwgc3RhdHVzPSR7dGhpcy5zdGF0ZS5zdGF0dXN9YCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBub3cgPSBocnRpbWUuYmlnaW50KCk7XHJcbiAgICBjb25zdCBkZWxheU5zID0gdGhpcy5uZXh0RnJhbWVUaW1lIC0gbm93O1xyXG4gICAgY29uc3QgZGVsYXlNcyA9IE51bWJlcihkZWxheU5zKSAvIDFfMDAwXzAwMDtcclxuXHJcbiAgICBpZiAodGhpcy5mcmFtZXNQbGF5ZWQgPT09IDApIHtcclxuICAgICAgY29uc29sZS5sb2coYFtBdWRpb1BsYXllcl0gRmlyc3QgZnJhbWUgc2NoZWR1bGluZzogZGVsYXlNcz0ke2RlbGF5TXMudG9GaXhlZCgyKX1gKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTY2hlZHVsZSBuZXh0IGZyYW1lXHJcbiAgICBpZiAoZGVsYXlNcyA+IDEpIHtcclxuICAgICAgdGhpcy5wbGF5YmFja1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMucHJvY2Vzc0ZyYW1lKCksIE1hdGgubWF4KDEsIGRlbGF5TXMgLSAxKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBXZSdyZSBiZWhpbmQsIHByb2Nlc3MgaW1tZWRpYXRlbHlcclxuICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHRoaXMucHJvY2Vzc0ZyYW1lKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvY2VzcyBhbmQgc2VuZCBhIHNpbmdsZSBhdWRpbyBmcmFtZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0ZyYW1lKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmlzUGxheWJhY2tMb29wUnVubmluZyB8fCB0aGlzLnN0YXRlLnN0YXR1cyAhPT0gQXVkaW9QbGF5ZXJTdGF0dXMuUGxheWluZykge1xyXG4gICAgICBpZiAodGhpcy5mcmFtZXNQbGF5ZWQgPT09IDApIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgW0F1ZGlvUGxheWVyXSBwcm9jZXNzRnJhbWUgc2tpcHBlZDogbG9vcFJ1bm5pbmc9JHt0aGlzLmlzUGxheWJhY2tMb29wUnVubmluZ30sIHN0YXR1cz0ke3RoaXMuc3RhdGUuc3RhdHVzfWApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBidWZmZXIgc3RhdHVzXHJcbiAgICBjb25zdCBidWZmZXJTaXplID0gdGhpcy5mcmFtZVF1ZXVlLmxlbmd0aDtcclxuICAgIFxyXG4gICAgaWYgKGJ1ZmZlclNpemUgPiAwICYmIHRoaXMuYXVkaW9Tb3VyY2UpIHtcclxuICAgICAgY29uc3QgaW50MTZBcnJheSA9IHRoaXMuZnJhbWVRdWV1ZS5zaGlmdCgpITtcclxuICAgICAgY29uc3QgYXVkaW9GcmFtZSA9IG5ldyBBdWRpb0ZyYW1lKGludDE2QXJyYXksIFNBTVBMRV9SQVRFLCBDSEFOTkVMUywgU0FNUExFU19QRVJfRlJBTUUpO1xyXG4gICAgICBcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCB0aGlzLmF1ZGlvU291cmNlLmNhcHR1cmVGcmFtZShhdWRpb0ZyYW1lKTtcclxuICAgICAgICB0aGlzLmZyYW1lc1BsYXllZCsrO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIExvZyBwcm9ncmVzcyBldmVyeSA1MDAgZnJhbWVzICh+MTAgc2Vjb25kcylcclxuICAgICAgICBpZiAodGhpcy5mcmFtZXNQbGF5ZWQgJSA1MDAgPT09IDApIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGBbQXVkaW9QbGF5ZXJdIFByb2dyZXNzOiAke3RoaXMuZnJhbWVzUGxheWVkfSBmcmFtZXMgcGxheWVkLCBidWZmZXI6ICR7YnVmZmVyU2l6ZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBbQXVkaW9QbGF5ZXJdIEZyYW1lIGVycm9yOmAsIChlIGFzIEVycm9yKS5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gVXBkYXRlIHRpbWluZyBmb3IgbmV4dCBmcmFtZVxyXG4gICAgICB0aGlzLm5leHRGcmFtZVRpbWUgKz0gRlJBTUVfSU5URVJWQUxfTlM7XHJcbiAgICAgIFxyXG4gICAgICAvLyBBZGFwdGl2ZSB0aW1pbmc6IGlmIGJ1ZmZlciBpcyBsb3csIHNsb3cgZG93biBzbGlnaHRseSB0byBsZXQgaXQgcmVjb3ZlclxyXG4gICAgICBpZiAoYnVmZmVyU2l6ZSA8IExPV19CVUZGRVJfVEhSRVNIT0xEICYmICF0aGlzLmZmbXBlZ0RvbmUpIHtcclxuICAgICAgICAvLyBBZGQgMW1zIGRlbGF5IHRvIGxldCBidWZmZXIgcmVjb3ZlclxyXG4gICAgICAgIHRoaXMubmV4dEZyYW1lVGltZSArPSBCaWdJbnQoMV8wMDBfMDAwKTtcclxuICAgICAgICB0aGlzLmJ1ZmZlclVuZGVycnVucysrO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlclVuZGVycnVucyAlIDUwID09PSAwKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhgW0F1ZGlvUGxheWVyXSBCdWZmZXIgbG93OiAke2J1ZmZlclNpemV9IGZyYW1lcywgJHt0aGlzLmJ1ZmZlclVuZGVycnVuc30gdW5kZXJydW5zYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBTY2hlZHVsZSBuZXh0IGZyYW1lXHJcbiAgICAgIHRoaXMuc2NoZWR1bGVOZXh0RnJhbWUoKTtcclxuICAgICAgXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmZtcGVnRG9uZSAmJiBidWZmZXJTaXplID09PSAwKSB7XHJcbiAgICAgIC8vIFBsYXliYWNrIGZpbmlzaGVkXHJcbiAgICAgIGNvbnNvbGUubG9nKCdbQXVkaW9QbGF5ZXJdIFBsYXliYWNrIGZpbmlzaGVkIC0gcXVldWUgZW1wdHkgYW5kIEZGbXBlZyBkb25lJyk7XHJcbiAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgfSBlbHNlIGlmIChidWZmZXJTaXplID09PSAwKSB7XHJcbiAgICAgIC8vIEJ1ZmZlciB1bmRlcnJ1biAtIHdhaXQgZm9yIG1vcmUgZGF0YVxyXG4gICAgICB0aGlzLmJ1ZmZlclVuZGVycnVucysrO1xyXG4gICAgICBjb25zb2xlLmxvZyhgW0F1ZGlvUGxheWVyXSBCdWZmZXIgdW5kZXJydW4gIyR7dGhpcy5idWZmZXJVbmRlcnJ1bnN9LCB3YWl0aW5nIGZvciBkYXRhLi4uYCk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBXYWl0IGEgYml0IGFuZCB0cnkgYWdhaW5cclxuICAgICAgdGhpcy5uZXh0RnJhbWVUaW1lID0gaHJ0aW1lLmJpZ2ludCgpICsgQmlnSW50KDUwXzAwMF8wMDApOyAvLyA1MG1zXHJcbiAgICAgIHRoaXMuc2NoZWR1bGVOZXh0RnJhbWUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYW51cCgpOiB2b2lkIHtcclxuICAgIC8vIFN0b3AgcGxheWJhY2sgbG9vcFxyXG4gICAgdGhpcy5pc1BsYXliYWNrTG9vcFJ1bm5pbmcgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLnBsYXliYWNrVGltZW91dCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wbGF5YmFja1RpbWVvdXQpO1xyXG4gICAgICB0aGlzLnBsYXliYWNrVGltZW91dCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIEtpbGwgRkZtcGVnXHJcbiAgICBpZiAodGhpcy5mZm1wZWdQcm9jZXNzKSB7XHJcbiAgICAgIHRoaXMuZmZtcGVnUHJvY2Vzcy5raWxsKCdTSUdLSUxMJyk7XHJcbiAgICAgIHRoaXMuZmZtcGVnUHJvY2VzcyA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIENsZWFyIGZyYW1lIHF1ZXVlXHJcbiAgICB0aGlzLmZyYW1lUXVldWUgPSBbXTtcclxuICAgIHRoaXMubGVmdG92ZXJCdWZmZXIgPSBudWxsO1xyXG4gICAgXHJcbiAgICAvLyBSZXNldCB0aW1pbmcgYW5kIHN0YXRlXHJcbiAgICB0aGlzLm5leHRGcmFtZVRpbWUgPSBCaWdJbnQoMCk7XHJcbiAgICB0aGlzLmZmbXBlZ0RvbmUgPSBmYWxzZTtcclxuICAgIFxyXG4gICAgLy8gTG9nIHN0YXRzXHJcbiAgICBpZiAodGhpcy5mcmFtZXNQbGF5ZWQgPiAwKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGBbQXVkaW9QbGF5ZXJdIFBsYXliYWNrIHN0YXRzOiAke3RoaXMuZnJhbWVzUGxheWVkfSBmcmFtZXMsICR7dGhpcy5idWZmZXJVbmRlcnJ1bnN9IHVuZGVycnVuc2ApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5idWZmZXJVbmRlcnJ1bnMgPSAwO1xyXG4gICAgdGhpcy5mcmFtZXNQbGF5ZWQgPSAwO1xyXG4gICAgXHJcbiAgICAvLyBOb3RlOiBXZSBkb24ndCB1bnB1Ymxpc2ggdGhlIHRyYWNrIC0gaXQgc3RheXMgcHVibGlzaGVkIGZvciBuZXh0IHBsYXlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U3RhdGUobmV3U3RhdGU6IEF1ZGlvUGxheWVyU3RhdGUpOiB2b2lkIHtcclxuICAgIGNvbnN0IG9sZFN0YXRlID0gdGhpcy5zdGF0ZTtcclxuICAgIHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcclxuICAgIHRoaXMuZW1pdCgnc3RhdGVDaGFuZ2UnLCBvbGRTdGF0ZSwgbmV3U3RhdGUpO1xyXG4gICAgXHJcbiAgICAvLyBTdGFydCBwbGF5YmFjayBsb29wIHdoZW4gdHJhbnNpdGlvbmluZyB0byBQbGF5aW5nXHJcbiAgICBpZiAobmV3U3RhdGUuc3RhdHVzID09PSBBdWRpb1BsYXllclN0YXR1cy5QbGF5aW5nICYmIG9sZFN0YXRlLnN0YXR1cyAhPT0gQXVkaW9QbGF5ZXJTdGF0dXMuUGxheWluZykge1xyXG4gICAgICBjb25zb2xlLmxvZyhgW0F1ZGlvUGxheWVyXSBTdGF0ZSBjaGFuZ2VkIHRvIFBsYXlpbmcsIHN0YXJ0aW5nIHBsYXliYWNrIGxvb3BgKTtcclxuICAgICAgdGhpcy5zY2hlZHVsZU5leHRGcmFtZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBhdWRpbyBwbGF5ZXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBdWRpb1BsYXllcihvcHRpb25zPzogQ3JlYXRlQXVkaW9QbGF5ZXJPcHRpb25zKTogQXVkaW9QbGF5ZXIge1xyXG4gIHJldHVybiBuZXcgQXVkaW9QbGF5ZXIob3B0aW9ucyk7XHJcbn1cclxuIl19
|
|
483
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXVkaW9QbGF5ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQXVkaW9QbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBdWpCQSw4Q0FFQztBQXpqQkQsbUNBQXNDO0FBQ3RDLGlEQUFvRDtBQUNwRCxxQ0FBaUM7QUFDakMsZ0RBTzJCO0FBQzNCLG1DQUE0QztBQUs1Qyw0Q0FBNEM7QUFDNUMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQzFCLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNuQixNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUM3QixNQUFNLGlCQUFpQixHQUFHLENBQUMsV0FBVyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsTUFBTTtBQUUxRSx5QkFBeUI7QUFDekIsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxzQkFBc0I7QUFDcEUsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUMsQ0FBQyxrQ0FBa0M7QUFDcEUsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUMsQ0FBSSx5Q0FBeUM7QUFDMUUsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsQ0FBRyxvREFBb0Q7QUFDckYsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUMsQ0FBQyx5Q0FBeUM7QUFFMUU7O0dBRUc7QUFDSCxNQUFhLFdBQVksU0FBUSxxQkFBWTtJQUMzQywyQkFBMkI7SUFDcEIsS0FBSyxHQUFxQixFQUFFLE1BQU0sRUFBRSx5QkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVwRSxxQkFBcUI7SUFDYixPQUFPLENBQTJCO0lBRTFDLG1DQUFtQztJQUMzQixhQUFhLEdBQXlCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFeEQsNkJBQTZCO0lBQ3JCLGVBQWUsR0FBeUIsSUFBSSxDQUFDO0lBRXJELHFCQUFxQjtJQUNiLGFBQWEsR0FBd0IsSUFBSSxDQUFDO0lB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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xyXG5pbXBvcnQgeyBzcGF3biwgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCB7IGhydGltZSB9IGZyb20gJ3Byb2Nlc3MnO1xyXG5pbXBvcnQgeyBcclxuICBSb29tLCBcclxuICBMb2NhbEF1ZGlvVHJhY2ssIFxyXG4gIEF1ZGlvU291cmNlLCBcclxuICBUcmFja1B1Ymxpc2hPcHRpb25zLCBcclxuICBUcmFja1NvdXJjZSxcclxuICBBdWRpb0ZyYW1lIFxyXG59IGZyb20gJ0BsaXZla2l0L3J0Yy1ub2RlJztcclxuaW1wb3J0IHsgQXVkaW9QbGF5ZXJTdGF0dXMgfSBmcm9tICcuL2VudW1zJztcclxuaW1wb3J0IHsgQ3JlYXRlQXVkaW9QbGF5ZXJPcHRpb25zLCBBdWRpb1BsYXllclN0YXRlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IEF1ZGlvUmVzb3VyY2UgfSBmcm9tICcuL0F1ZGlvUmVzb3VyY2UnO1xyXG5pbXBvcnQgeyBWb2ljZUNvbm5lY3Rpb24gfSBmcm9tICcuL1ZvaWNlQ29ubmVjdGlvbic7XHJcblxyXG4vLyBBdWRpbyBzZXR0aW5ncyBmb3IgTGl2ZUtpdCAoNDhrSHogc3RlcmVvKVxyXG5jb25zdCBTQU1QTEVfUkFURSA9IDQ4MDAwO1xyXG5jb25zdCBDSEFOTkVMUyA9IDI7XHJcbmNvbnN0IEZSQU1FX0RVUkFUSU9OX01TID0gMjA7XHJcbmNvbnN0IFNBTVBMRVNfUEVSX0ZSQU1FID0gKFNBTVBMRV9SQVRFICogRlJBTUVfRFVSQVRJT05fTVMpIC8gMTAwMDsgLy8gOTYwXHJcblxyXG4vLyBKaXR0ZXIgYnVmZmVyIHNldHRpbmdzXHJcbmNvbnN0IEZSQU1FX0lOVEVSVkFMX05TID0gQmlnSW50KDIwXzAwMF8wMDApOyAvLyAyMG1zIGluIG5hbm9zZWNvbmRzXHJcbmNvbnN0IFRBUkdFVF9CVUZGRVJfRlJBTUVTID0gMTUwOyAvLyB+MyBzZWNvbmRzIC0gdGFyZ2V0IGJ1ZmZlciBzaXplXHJcbmNvbnN0IE1JTl9CVUZGRVJfRlJBTUVTID0gNzU7ICAgIC8vIH4xLjUgc2Vjb25kcyAtIG1pbmltdW0gYmVmb3JlIHdlIHN0YXJ0XHJcbmNvbnN0IE1BWF9CVUZGRVJfRlJBTUVTID0gNTAwOyAgIC8vIH4xMCBzZWNvbmRzIC0gbWF4IGJ1ZmZlciB0byBwcmV2ZW50IG1lbW9yeSBpc3N1ZXNcclxuY29uc3QgTE9XX0JVRkZFUl9USFJFU0hPTEQgPSA1MDsgLy8gfjEgc2Vjb25kIC0gd2hlbiB0byBzbG93IGRvd24gcGxheWJhY2tcclxuXHJcbi8qKlxyXG4gKiBBdWRpbyBwbGF5ZXIgZm9yIHBsYXlpbmcgYXVkaW8gcmVzb3VyY2VzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQXVkaW9QbGF5ZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gIC8qKiBDdXJyZW50IHBsYXllciBzdGF0ZSAqL1xyXG4gIHB1YmxpYyBzdGF0ZTogQXVkaW9QbGF5ZXJTdGF0ZSA9IHsgc3RhdHVzOiBBdWRpb1BsYXllclN0YXR1cy5JZGxlIH07XHJcbiAgXHJcbiAgLyoqIFBsYXllciBvcHRpb25zICovXHJcbiAgcHJpdmF0ZSBvcHRpb25zOiBDcmVhdGVBdWRpb1BsYXllck9wdGlvbnM7XHJcbiAgXHJcbiAgLyoqIFN1YnNjcmliZWQgdm9pY2UgY29ubmVjdGlvbnMgKi9cclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFNldDxWb2ljZUNvbm5lY3Rpb24+ID0gbmV3IFNldCgpO1xyXG4gIFxyXG4gIC8qKiBDdXJyZW50IGF1ZGlvIHJlc291cmNlICovXHJcbiAgcHJpdmF0ZSBjdXJyZW50UmVzb3VyY2U6IEF1ZGlvUmVzb3VyY2UgfCBudWxsID0gbnVsbDtcclxuICBcclxuICAvKiogRkZtcGVnIHByb2Nlc3MgKi9cclxuICBwcml2YXRlIGZmbXBlZ1Byb2Nlc3M6IENoaWxkUHJvY2VzcyB8IG51bGwgPSBudWxsO1xyXG4gIFxyXG4gIC8qKiBMaXZlS2l0IGF1ZGlvIHNvdXJjZSBhbmQgdHJhY2sgKi9cclxuICBwcml2YXRlIGF1ZGlvU291cmNlOiBBdWRpb1NvdXJjZSB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgYXVkaW9UcmFjazogTG9jYWxBdWRpb1RyYWNrIHwgbnVsbCA9IG51bGw7XHJcbiAgXHJcbiAgLyoqIEZyYW1lIHF1ZXVlIGFuZCBwbGF5YmFjayBzdGF0ZSAqL1xyXG4gIHByaXZhdGUgZnJhbWVRdWV1ZTogSW50MTZBcnJheVtdID0gW107XHJcbiAgcHJpdmF0ZSBwbGF5YmFja1RpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsZWZ0b3ZlckJ1ZmZlcjogQnVmZmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBpc1B1Ymxpc2hlZCA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKiBIaWdoLXJlc29sdXRpb24gdGltaW5nICovXHJcbiAgcHJpdmF0ZSBuZXh0RnJhbWVUaW1lOiBiaWdpbnQgPSBCaWdJbnQoMCk7XHJcbiAgcHJpdmF0ZSBpc1BsYXliYWNrTG9vcFJ1bm5pbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIGZmbXBlZ0RvbmUgPSBmYWxzZTtcclxuICBcclxuICAvKiogQnVmZmVyIHN0YXRpc3RpY3MgKi9cclxuICBwcml2YXRlIGJ1ZmZlclVuZGVycnVucyA9IDA7XHJcbiAgcHJpdmF0ZSBmcmFtZXNQbGF5ZWQgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBDcmVhdGVBdWRpb1BsYXllck9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMub3B0aW9ucyA9IHtcclxuICAgICAgYmVoYXZpb3JzOiB7XHJcbiAgICAgICAgbm9TdWJzY3JpYmVyOiAncGF1c2UnLFxyXG4gICAgICAgIG1heE1pc3NlZEZyYW1lczogNSxcclxuICAgICAgICAuLi5vcHRpb25zLmJlaGF2aW9yc1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICAvLyBBZGQgZGVmYXVsdCBlcnJvciBoYW5kbGVyIHRvIHByZXZlbnQgY3Jhc2hlc1xyXG4gICAgdGhpcy5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcclxuICAgICAgLy8gRGVmYXVsdCBoYW5kbGVyIC0ganVzdCBsb2cgaWYgbm8gb3RoZXIgbGlzdGVuZXJzXHJcbiAgICAgIGlmICh0aGlzLmxpc3RlbmVyQ291bnQoJ2Vycm9yJykgPT09IDEpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdbQXVkaW9QbGF5ZXJdIEVycm9yOicsIGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBsYXkgYW4gYXVkaW8gcmVzb3VyY2VcclxuICAgKi9cclxuICBwbGF5KHJlc291cmNlOiBBdWRpb1Jlc291cmNlKTogdm9pZCB7XHJcbiAgICAvLyBTdG9wIGN1cnJlbnQgcGxheWJhY2tcclxuICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgXHJcbiAgICB0aGlzLmN1cnJlbnRSZXNvdXJjZSA9IHJlc291cmNlO1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IHN0YXR1czogQXVkaW9QbGF5ZXJTdGF0dXMuQnVmZmVyaW5nLCByZXNvdXJjZSB9KTtcclxuICAgIFxyXG4gICAgLy8gU3RhcnQgcGxheWJhY2sgaWYgd2UgaGF2ZSBhIHJlYWR5IGNvbm5lY3Rpb25cclxuICAgIGZvciAoY29uc3QgY29ubmVjdGlvbiBvZiB0aGlzLnN1YnNjcmlwdGlvbnMpIHtcclxuICAgICAgaWYgKGNvbm5lY3Rpb24uZ2V0Um9vbSgpKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydFBsYXliYWNrKGNvbm5lY3Rpb24pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSBwbGF5YmFja1xyXG4gICAqL1xyXG4gIHBhdXNlKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuc3RhdGUuc3RhdHVzICE9PSBBdWRpb1BsYXllclN0YXR1cy5QbGF5aW5nKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0U3RhdGUoeyBzdGF0dXM6IEF1ZGlvUGxheWVyU3RhdHVzLlBhdXNlZCwgcmVzb3VyY2U6IHRoaXMuY3VycmVudFJlc291cmNlIH0pO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbnBhdXNlIHBsYXliYWNrXHJcbiAgICovXHJcbiAgdW5wYXVzZSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnN0YXRlLnN0YXR1cyAhPT0gQXVkaW9QbGF5ZXJTdGF0dXMuUGF1c2VkKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0U3RhdGUoeyBzdGF0dXM6IEF1ZGlvUGxheWVyU3RhdHVzLlBsYXlpbmcsIHJlc291cmNlOiB0aGlzLmN1cnJlbnRSZXNvdXJjZSB9KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBwbGF5YmFja1xyXG4gICAqL1xyXG4gIHN0b3AoZm9yY2UgPSBmYWxzZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuc3RhdGUuc3RhdHVzID09PSBBdWRpb1BsYXllclN0YXR1cy5JZGxlICYmICFmb3JjZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNsZWFudXAoKTtcclxuICAgIHRoaXMuY3VycmVudFJlc291cmNlID0gbnVsbDtcclxuICAgIHRoaXMuc2V0U3RhdGUoeyBzdGF0dXM6IEF1ZGlvUGxheWVyU3RhdHVzLklkbGUgfSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmliZSBhIHZvaWNlIGNvbm5lY3Rpb24gdG8gdGhpcyBwbGF5ZXJcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBzdWJzY3JpYmUoY29ubmVjdGlvbjogVm9pY2VDb25uZWN0aW9uKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKGNvbm5lY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVW5zdWJzY3JpYmUgYSB2b2ljZSBjb25uZWN0aW9uIGZyb20gdGhpcyBwbGF5ZXJcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICB1bnN1YnNjcmliZShjb25uZWN0aW9uOiBWb2ljZUNvbm5lY3Rpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5kZWxldGUoY29ubmVjdGlvbik7XHJcbiAgICBcclxuICAgIC8vIEF1dG8tcGF1c2UgaWYgbm8gc3Vic2NyaWJlcnNcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMuc2l6ZSA9PT0gMCAmJiB0aGlzLm9wdGlvbnMuYmVoYXZpb3JzPy5ub1N1YnNjcmliZXIgPT09ICdwYXVzZScpIHtcclxuICAgICAgaWYgKHRoaXMuc3RhdGUuc3RhdHVzID09PSBBdWRpb1BsYXllclN0YXR1cy5QbGF5aW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHN0YXR1czogQXVkaW9QbGF5ZXJTdGF0dXMuQXV0b1BhdXNlZCwgcmVzb3VyY2U6IHRoaXMuY3VycmVudFJlc291cmNlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgd2hlbiBhIGNvbm5lY3Rpb24gYmVjb21lcyByZWFkeVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uQ29ubmVjdGlvblJlYWR5KGNvbm5lY3Rpb246IFZvaWNlQ29ubmVjdGlvbik6IHZvaWQge1xyXG4gICAgLy8gSWYgd2UgaGF2ZSBhIHJlc291cmNlIHdhaXRpbmcsIHN0YXJ0IHBsYXliYWNrXHJcbiAgICBpZiAodGhpcy5jdXJyZW50UmVzb3VyY2UgJiYgdGhpcy5zdGF0ZS5zdGF0dXMgPT09IEF1ZGlvUGxheWVyU3RhdHVzLkJ1ZmZlcmluZykge1xyXG4gICAgICB0aGlzLnN0YXJ0UGxheWJhY2soY29ubmVjdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHN0YXJ0UGxheWJhY2soY29ubmVjdGlvbjogVm9pY2VDb25uZWN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCByb29tID0gY29ubmVjdGlvbi5nZXRSb29tKCk7XHJcbiAgICBpZiAoIXJvb20gfHwgIXRoaXMuY3VycmVudFJlc291cmNlKSByZXR1cm47XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gQ3JlYXRlIGF1ZGlvIHNvdXJjZSBhbmQgdHJhY2tcclxuICAgICAgYXdhaXQgdGhpcy5zZXR1cEF1ZGlvVHJhY2socm9vbSk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBTdGFydCBGRm1wZWcgdG8gZGVjb2RlIGF1ZGlvIC0gdGhpcyB3aWxsIHNldCBzdGF0ZSB0byBQbGF5aW5nIHdoZW4gcmVhZHlcclxuICAgICAgYXdhaXQgdGhpcy5zdGFydEZGbXBlZygpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgLy8gRW1pdCBlcnJvciBidXQgZG9uJ3Qgc3RvcCAtIGxldCB1c2VyIGRlY2lkZSB3aGF0IHRvIGRvXHJcbiAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB7IG1lc3NhZ2U6IChlcnJvciBhcyBFcnJvcikubWVzc2FnZSwgcmVzb3VyY2U6IHRoaXMuY3VycmVudFJlc291cmNlIH0pO1xyXG4gICAgICAvLyBSZXNldCB0byBpZGxlIHN0YXRlIHdpdGhvdXQgZnVsbCBjbGVhbnVwXHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBzdGF0dXM6IEF1ZGlvUGxheWVyU3RhdHVzLklkbGUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNldHVwQXVkaW9UcmFjayhyb29tOiBSb29tKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5pc1B1Ymxpc2hlZCkgcmV0dXJuO1xyXG4gICAgXHJcbiAgICB0aGlzLmF1ZGlvU291cmNlID0gbmV3IEF1ZGlvU291cmNlKFNBTVBMRV9SQVRFLCBDSEFOTkVMUyk7XHJcbiAgICB0aGlzLmF1ZGlvVHJhY2sgPSBMb2NhbEF1ZGlvVHJhY2suY3JlYXRlQXVkaW9UcmFjaygnbXVzaWMnLCB0aGlzLmF1ZGlvU291cmNlKTtcclxuICAgIFxyXG4gICAgY29uc3Qgb3B0aW9ucyA9IG5ldyBUcmFja1B1Ymxpc2hPcHRpb25zKCk7XHJcbiAgICBvcHRpb25zLnNvdXJjZSA9IFRyYWNrU291cmNlLlNPVVJDRV9NSUNST1BIT05FO1xyXG4gICAgXHJcbiAgICBpZiAocm9vbS5sb2NhbFBhcnRpY2lwYW50KSB7XHJcbiAgICAgIGF3YWl0IHJvb20ubG9jYWxQYXJ0aWNpcGFudC5wdWJsaXNoVHJhY2sodGhpcy5hdWRpb1RyYWNrLCBvcHRpb25zKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXNQdWJsaXNoZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzdGFydEZGbXBlZygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5jdXJyZW50UmVzb3VyY2UpIHJldHVybjtcclxuICAgIFxyXG4gICAgbGV0IGlucHV0U291cmNlID0gdGhpcy5jdXJyZW50UmVzb3VyY2UuZ2V0SW5wdXRTb3VyY2UoKTtcclxuICAgIGNvbnNvbGUubG9nKGBGRm1wZWcgaW5wdXQgc291cmNlOiAke2lucHV0U291cmNlLnN1YnN0cmluZygwLCAxMDApfS4uLmApO1xyXG4gICAgXHJcbiAgICAvLyBDaGVjayBpZiBpbnB1dCBpcyBhIFVSTCBvciBzZWFyY2ggcXVlcnlcclxuICAgIGNvbnN0IGlzVXJsID0gaW5wdXRTb3VyY2Uuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IFxyXG4gICAgICAgICAgICAgICAgICBpbnB1dFNvdXJjZS5zdGFydHNXaXRoKCdodHRwczovLycpIHx8IFxyXG4gICAgICAgICAgICAgICAgICBpbnB1dFNvdXJjZS5zdGFydHNXaXRoKCd5dHNlYXJjaDonKTtcclxuICAgIFxyXG4gICAgLy8gSWYgbm90IGEgVVJMLCB0cmVhdCBhcyBZb3VUdWJlIHNlYXJjaFxyXG4gICAgaWYgKCFpc1VybCkge1xyXG4gICAgICBpbnB1dFNvdXJjZSA9IGB5dHNlYXJjaDE6JHtpbnB1dFNvdXJjZX1gO1xyXG4gICAgICBjb25zb2xlLmxvZyhgQ29udmVydGVkIHRvIFlvdVR1YmUgc2VhcmNoOiAke2lucHV0U291cmNlfWApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgc3RyZWFtaW5nIFVSTCB0aGF0IG5lZWRzIHl0LWRscFxyXG4gICAgY29uc3QgbmVlZHNZdERscCA9IGlucHV0U291cmNlLmluY2x1ZGVzKCd5b3V0dWJlLmNvbScpIHx8IFxyXG4gICAgICAgICAgICAgICAgICAgICAgIGlucHV0U291cmNlLmluY2x1ZGVzKCd5b3V0dS5iZScpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTb3VyY2UuaW5jbHVkZXMoJ3NvdW5kY2xvdWQuY29tJykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFNvdXJjZS5pbmNsdWRlcygndHdpdGNoLnR2JykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFNvdXJjZS5zdGFydHNXaXRoKCd5dHNlYXJjaCcpO1xyXG4gICAgXHJcbiAgICBpZiAobmVlZHNZdERscCkge1xyXG4gICAgICAvLyBVc2UgeXQtZGxwIHRvIHBpcGUgYXVkaW8gZGlyZWN0bHkgdG8gRkZtcGVnXHJcbiAgICAgIGNvbnNvbGUubG9nKCdVc2luZyB5dC1kbHAgcGlwZSBtb2RlJyk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBEZXRlY3QgcGxhdGZvcm1cclxuICAgICAgY29uc3QgaXNXaW5kb3dzID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcclxuICAgICAgY29uc3QgeXREbHBQYXRoID0gaXNXaW5kb3dzID8gJ3l0LWRscCcgOiAnfi8ubG9jYWwvYmluL3l0LWRscCc7XHJcbiAgICAgIFxyXG4gICAgICAvLyBPbiBXaW5kb3dzIHdpdGggc2hlbGwgbW9kZSwgd2UgbmVlZCB0byB1c2UgYSBzaW5nbGUgY29tbWFuZCBzdHJpbmdcclxuICAgICAgLy8gdG8gcHJlc2VydmUgc3BhY2VzIGluIHRoZSBzZWFyY2ggcXVlcnlcclxuICAgICAgaWYgKGlzV2luZG93cykge1xyXG4gICAgICAgIC8vIEJ1aWxkIGNvbW1hbmQgYXMgc2luZ2xlIHN0cmluZyB3aXRoIHByb3BlciBxdW90aW5nXHJcbiAgICAgICAgY29uc3QgeXRkbHBDbWQgPSBgJHt5dERscFBhdGh9IC1mIGJlc3RhdWRpby9iZXN0IC1vIC0gLS1uby1wbGF5bGlzdCAtLW5vLXdhcm5pbmdzIC0tZGVmYXVsdC1zZWFyY2ggeXRzZWFyY2ggXCIke2lucHV0U291cmNlfVwiYDtcclxuICAgICAgICBjb25zdCBmZm1wZWdDbWQgPSBgZmZtcGVnIC1pIHBpcGU6MCAtZiBzMTZsZSAtYXIgJHtTQU1QTEVfUkFURX0gLWFjICR7Q0hBTk5FTFN9IC1hY29kZWMgcGNtX3MxNmxlIC1gO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdbQXVkaW9QbGF5ZXJdIHl0LWRscCBjb21tYW5kOicsIHl0ZGxwQ21kKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBTcGF3biB5dC1kbHAgd2l0aCBzaGVsbCBjb21tYW5kXHJcbiAgICAgICAgY29uc3QgeXRkbHBQcm9jZXNzID0gc3Bhd24oeXRkbHBDbWQsIFtdLCB7IFxyXG4gICAgICAgICAgc3RkaW86IFsncGlwZScsICdwaXBlJywgJ3BpcGUnXSxcclxuICAgICAgICAgIHNoZWxsOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gU3Bhd24gZmZtcGVnIHdpdGggc2hlbGwgY29tbWFuZFxyXG4gICAgICAgIHRoaXMuZmZtcGVnUHJvY2VzcyA9IHNwYXduKGZmbXBlZ0NtZCwgW10sIHsgXHJcbiAgICAgICAgICBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddLFxyXG4gICAgICAgICAgc2hlbGw6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBQaXBlIHl0LWRscCBzdGRvdXQgdG8gZmZtcGVnIHN0ZGluXHJcbiAgICAgICAgeXRkbHBQcm9jZXNzLnN0ZG91dD8ucGlwZSh0aGlzLmZmbXBlZ1Byb2Nlc3Muc3RkaW4hKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBIYW5kbGUgeXQtZGxwIHN0ZGVyciAtIGxvZyBldmVyeXRoaW5nIGZvciBkZWJ1Z2dpbmdcclxuICAgICAgICB5dGRscFByb2Nlc3Muc3RkZXJyPy5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcclxuICAgICAgICAgIGNvbnN0IG1zZyA9IGRhdGEudG9TdHJpbmcoKS50cmltKCk7XHJcbiAgICAgICAgICBpZiAobXNnKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbeXQtZGxwXScsIG1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgeXRkbHBQcm9jZXNzLm9uKCdlcnJvcicsIChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t5dC1kbHBdIHByb2Nlc3MgZXJyb3I6JywgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHl0ZGxwUHJvY2Vzcy5vbignY2xvc2UnLCAoY29kZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNvZGUgIT09IDApIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgeXQtZGxwIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFVuaXg6IHVzZSBhcmdzIGFycmF5IChubyBzaGVsbCBuZWVkZWQpXHJcbiAgICAgICAgY29uc3QgeXRkbHBBcmdzID0gW1xyXG4gICAgICAgICAgJy1mJywgJ2Jlc3RhdWRpby9iZXN0JyxcclxuICAgICAgICAgICctbycsICctJyxcclxuICAgICAgICAgICctLW5vLXBsYXlsaXN0JyxcclxuICAgICAgICAgICctLW5vLXdhcm5pbmdzJyxcclxuICAgICAgICAgICctLWRlZmF1bHQtc2VhcmNoJywgJ3l0c2VhcmNoJyxcclxuICAgICAgICAgIGlucHV0U291cmNlXHJcbiAgICAgICAgXTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBmZm1wZWdBcmdzID0gW1xyXG4gICAgICAgICAgJy1pJywgJ3BpcGU6MCcsXHJcbiAgICAgICAgICAnLWYnLCAnczE2bGUnLFxyXG4gICAgICAgICAgJy1hcicsIFN0cmluZyhTQU1QTEVfUkFURSksXHJcbiAgICAgICAgICAnLWFjJywgU3RyaW5nKENIQU5ORUxTKSxcclxuICAgICAgICAgICctYWNvZGVjJywgJ3BjbV9zMTZsZScsXHJcbiAgICAgICAgICAnLSdcclxuICAgICAgICBdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIFNwYXduIHl0LWRscFxyXG4gICAgICAgIGNvbnN0IHl0ZGxwUHJvY2VzcyA9IHNwYXduKHl0RGxwUGF0aCwgeXRkbHBBcmdzLCB7IFxyXG4gICAgICAgICAgc3RkaW86IFsncGlwZScsICdwaXBlJywgJ3BpcGUnXSxcclxuICAgICAgICAgIHNoZWxsOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIFNwYXduIGZmbXBlZ1xyXG4gICAgICAgIHRoaXMuZmZtcGVnUHJvY2VzcyA9IHNwYXduKCdmZm1wZWcnLCBmZm1wZWdBcmdzLCB7IFxyXG4gICAgICAgICAgc3RkaW86IFsncGlwZScsICdwaXBlJywgJ3BpcGUnXSxcclxuICAgICAgICAgIHNoZWxsOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIFBpcGUgeXQtZGxwIHN0ZG91dCB0byBmZm1wZWcgc3RkaW5cclxuICAgICAgICB5dGRscFByb2Nlc3Muc3Rkb3V0Py5waXBlKHRoaXMuZmZtcGVnUHJvY2Vzcy5zdGRpbiEpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIEhhbmRsZSB5dC1kbHAgZXJyb3JzXHJcbiAgICAgICAgeXRkbHBQcm9jZXNzLnN0ZGVycj8ub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBtc2cgPSBkYXRhLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBpZiAobXNnLmluY2x1ZGVzKCdFUlJPUicpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3l0LWRscCBlcnJvcjonLCBtc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHl0ZGxwUHJvY2Vzcy5vbignZXJyb3InLCAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCd5dC1kbHAgcHJvY2VzcyBlcnJvcjonLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgeXRkbHBQcm9jZXNzLm9uKCdjbG9zZScsIChjb2RlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGB5dC1kbHAgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdVc2luZyBkaXJlY3QgRkZtcGVnIG1vZGUnKTtcclxuICAgICAgdGhpcy5mZm1wZWdQcm9jZXNzID0gc3Bhd24oJ2ZmbXBlZycsIFtcclxuICAgICAgICAnLXJlY29ubmVjdCcsICcxJyxcclxuICAgICAgICAnLXJlY29ubmVjdF9zdHJlYW1lZCcsICcxJyxcclxuICAgICAgICAnLXJlY29ubmVjdF9kZWxheV9tYXgnLCAnNScsXHJcbiAgICAgICAgJy1pJywgaW5wdXRTb3VyY2UsXHJcbiAgICAgICAgJy1mJywgJ3MxNmxlJyxcclxuICAgICAgICAnLWFyJywgU3RyaW5nKFNBTVBMRV9SQVRFKSxcclxuICAgICAgICAnLWFjJywgU3RyaW5nKENIQU5ORUxTKSxcclxuICAgICAgICAnLWFjb2RlYycsICdwY21fczE2bGUnLFxyXG4gICAgICAgICctJ1xyXG4gICAgICBdLCB7IHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJ10gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZnJhbWVTaXplID0gU0FNUExFU19QRVJfRlJBTUUgKiBDSEFOTkVMUyAqIDI7XHJcbiAgICB0aGlzLmZmbXBlZ0RvbmUgPSBmYWxzZTtcclxuICAgIGxldCBoYXNSZWNlaXZlZERhdGEgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmZmbXBlZ1Byb2Nlc3Muc3Rkb3V0Py5vbignZGF0YScsIChjaHVuazogQnVmZmVyKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlLnN0YXR1cyAhPT0gQXVkaW9QbGF5ZXJTdGF0dXMuUGxheWluZyAmJiBcclxuICAgICAgICAgIHRoaXMuc3RhdGUuc3RhdHVzICE9PSBBdWRpb1BsYXllclN0YXR1cy5CdWZmZXJpbmcpIHJldHVybjtcclxuICAgICAgXHJcbiAgICAgIGhhc1JlY2VpdmVkRGF0YSA9IHRydWU7XHJcbiAgICAgIFxyXG4gICAgICAvLyBIYW5kbGUgbGVmdG92ZXIgZnJvbSBwcmV2aW91cyBjaHVua1xyXG4gICAgICBpZiAodGhpcy5sZWZ0b3ZlckJ1ZmZlciAmJiB0aGlzLmxlZnRvdmVyQnVmZmVyLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjaHVuayA9IEJ1ZmZlci5jb25jYXQoW3RoaXMubGVmdG92ZXJCdWZmZXIsIGNodW5rXSk7XHJcbiAgICAgICAgdGhpcy5sZWZ0b3ZlckJ1ZmZlciA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGxldCBvZmZzZXQgPSAwO1xyXG4gICAgICB3aGlsZSAob2Zmc2V0ICsgZnJhbWVTaXplIDw9IGNodW5rLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGZyYW1lID0gY2h1bmsuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBmcmFtZVNpemUpO1xyXG4gICAgICAgIGNvbnN0IGludDE2QXJyYXkgPSBuZXcgSW50MTZBcnJheShTQU1QTEVTX1BFUl9GUkFNRSAqIENIQU5ORUxTKTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGludDE2QXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGludDE2QXJyYXlbaV0gPSBmcmFtZS5yZWFkSW50MTZMRShpICogMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuZnJhbWVRdWV1ZS5wdXNoKGludDE2QXJyYXkpO1xyXG4gICAgICAgIG9mZnNldCArPSBmcmFtZVNpemU7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIFNhdmUgbGVmdG92ZXJcclxuICAgICAgaWYgKG9mZnNldCA8IGNodW5rLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMubGVmdG92ZXJCdWZmZXIgPSBjaHVuay5zbGljZShvZmZzZXQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgc3RkZXJyT3V0cHV0ID0gJyc7XHJcbiAgICB0aGlzLmZmbXBlZ1Byb2Nlc3Muc3RkZXJyPy5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcclxuICAgICAgc3RkZXJyT3V0cHV0ICs9IGRhdGEudG9TdHJpbmcoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZmZtcGVnUHJvY2Vzcy5vbignY2xvc2UnLCAoY29kZSkgPT4ge1xyXG4gICAgICB0aGlzLmZmbXBlZ0RvbmUgPSB0cnVlO1xyXG4gICAgICB0aGlzLmZmbXBlZ1Byb2Nlc3MgPSBudWxsO1xyXG4gICAgICBpZiAoY29kZSAhPT0gMCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZGbXBlZyBzdGRlcnI6XFxuJHtzdGRlcnJPdXRwdXR9YCk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS5sb2coYFtBdWRpb1BsYXllcl0gRkZtcGVnIGNsb3NlZCB3aXRoIGNvZGUgJHtjb2RlfSwgaGFzUmVjZWl2ZWREYXRhOiAke2hhc1JlY2VpdmVkRGF0YX0sIHF1ZXVlOiAke3RoaXMuZnJhbWVRdWV1ZS5sZW5ndGh9YCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZmbXBlZ1Byb2Nlc3Mub24oJ2Vycm9yJywgKGVycikgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdGRm1wZWcgcHJvY2VzcyBlcnJvcjonLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB7IG1lc3NhZ2U6IGVyci5tZXNzYWdlLCByZXNvdXJjZTogdGhpcy5jdXJyZW50UmVzb3VyY2UgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBXYWl0IGZvciBpbml0aWFsIGJ1ZmZlciB3aXRoIHRpbWVvdXRcclxuICAgIGNvbnN0IGJ1ZmZlclRpbWVvdXQgPSAxMDAwMDsgLy8gMTAgc2Vjb25kcyBmb3IgaW5pdGlhbCBidWZmZXJcclxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XHJcbiAgICBcclxuICAgIHdoaWxlICh0aGlzLmZyYW1lUXVldWUubGVuZ3RoIDwgTUlOX0JVRkZFUl9GUkFNRVMgJiYgRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA8IGJ1ZmZlclRpbWVvdXQpIHtcclxuICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDEwMCkpO1xyXG4gICAgICBcclxuICAgICAgLy8gQ2hlY2sgaWYgRkZtcGVnIGZhaWxlZCBlYXJseVxyXG4gICAgICBpZiAodGhpcy5mZm1wZWdEb25lICYmIHRoaXMuZnJhbWVRdWV1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZGbXBlZyBmYWlsZWQgdG8gcHJvZHVjZSBhdWRpbyBkYXRhJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKHRoaXMuZnJhbWVRdWV1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaW1lb3V0IHdhaXRpbmcgZm9yIGF1ZGlvIGRhdGEnKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgY29uc29sZS5sb2coYFtBdWRpb1BsYXllcl0gU3RhcnRpbmcgcGxheWJhY2sgd2l0aCAke3RoaXMuZnJhbWVRdWV1ZS5sZW5ndGh9IGZyYW1lcyBidWZmZXJlZCAodGFyZ2V0OiAke1RBUkdFVF9CVUZGRVJfRlJBTUVTfSlgKTtcclxuXHJcbiAgICAvLyBNYXJrIHJlYWR5IGZvciBwbGF5YmFjayAtIHNldFN0YXRlIHdpbGwgdHJpZ2dlciB0aGUgbG9vcFxyXG4gICAgdGhpcy5pc1BsYXliYWNrTG9vcFJ1bm5pbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5uZXh0RnJhbWVUaW1lID0gaHJ0aW1lLmJpZ2ludCgpO1xyXG4gICAgY29uc29sZS5sb2coYFtBdWRpb1BsYXllcl0gUGxheWJhY2sgcmVhZHksIGF1ZGlvU291cmNlIGV4aXN0czogJHshIXRoaXMuYXVkaW9Tb3VyY2V9YCk7XHJcbiAgICBcclxuICAgIC8vIFNldCBzdGF0ZSB0byBwbGF5aW5nIC0gdGhpcyB3aWxsIHRyaWdnZXIgc2NoZWR1bGVOZXh0RnJhbWUgdmlhIHNldFN0YXRlXHJcbiAgICB0aGlzLnNldFN0YXRlKHsgc3RhdHVzOiBBdWRpb1BsYXllclN0YXR1cy5QbGF5aW5nLCByZXNvdXJjZTogdGhpcy5jdXJyZW50UmVzb3VyY2UgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIaWdoLXJlc29sdXRpb24gZnJhbWUgc2NoZWR1bGluZyB1c2luZyBocnRpbWVcclxuICAgKiBUaGlzIHByb3ZpZGVzIG11Y2ggbW9yZSBhY2N1cmF0ZSB0aW1pbmcgdGhhbiBzZXRJbnRlcnZhbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2NoZWR1bGVOZXh0RnJhbWUoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNQbGF5YmFja0xvb3BSdW5uaW5nIHx8IHRoaXMuc3RhdGUuc3RhdHVzICE9PSBBdWRpb1BsYXllclN0YXR1cy5QbGF5aW5nKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGBbQXVkaW9QbGF5ZXJdIHNjaGVkdWxlTmV4dEZyYW1lIHNraXBwZWQ6IGxvb3BSdW5uaW5nPSR7dGhpcy5pc1BsYXliYWNrTG9vcFJ1bm5pbmd9LCBzdGF0dXM9JHt0aGlzLnN0YXRlLnN0YXR1c31gKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5vdyA9IGhydGltZS5iaWdpbnQoKTtcclxuICAgIGNvbnN0IGRlbGF5TnMgPSB0aGlzLm5leHRGcmFtZVRpbWUgLSBub3c7XHJcbiAgICBjb25zdCBkZWxheU1zID0gTnVtYmVyKGRlbGF5TnMpIC8gMV8wMDBfMDAwO1xyXG5cclxuICAgIGlmICh0aGlzLmZyYW1lc1BsYXllZCA9PT0gMCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhgW0F1ZGlvUGxheWVyXSBGaXJzdCBmcmFtZSBzY2hlZHVsaW5nOiBkZWxheU1zPSR7ZGVsYXlNcy50b0ZpeGVkKDIpfWApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNjaGVkdWxlIG5leHQgZnJhbWVcclxuICAgIGlmIChkZWxheU1zID4gMSkge1xyXG4gICAgICB0aGlzLnBsYXliYWNrVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5wcm9jZXNzRnJhbWUoKSwgTWF0aC5tYXgoMSwgZGVsYXlNcyAtIDEpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFdlJ3JlIGJlaGluZCwgcHJvY2VzcyBpbW1lZGlhdGVseVxyXG4gICAgICBzZXRJbW1lZGlhdGUoKCkgPT4gdGhpcy5wcm9jZXNzRnJhbWUoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzIGFuZCBzZW5kIGEgc2luZ2xlIGF1ZGlvIGZyYW1lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzRnJhbWUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuaXNQbGF5YmFja0xvb3BSdW5uaW5nIHx8IHRoaXMuc3RhdGUuc3RhdHVzICE9PSBBdWRpb1BsYXllclN0YXR1cy5QbGF5aW5nKSB7XHJcbiAgICAgIGlmICh0aGlzLmZyYW1lc1BsYXllZCA9PT0gMCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBbQXVkaW9QbGF5ZXJdIHByb2Nlc3NGcmFtZSBza2lwcGVkOiBsb29wUnVubmluZz0ke3RoaXMuaXNQbGF5YmFja0xvb3BSdW5uaW5nfSwgc3RhdHVzPSR7dGhpcy5zdGF0ZS5zdGF0dXN9YCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGJ1ZmZlciBzdGF0dXNcclxuICAgIGNvbnN0IGJ1ZmZlclNpemUgPSB0aGlzLmZyYW1lUXVldWUubGVuZ3RoO1xyXG4gICAgXHJcbiAgICBpZiAoYnVmZmVyU2l6ZSA+IDAgJiYgdGhpcy5hdWRpb1NvdXJjZSkge1xyXG4gICAgICBjb25zdCBpbnQxNkFycmF5ID0gdGhpcy5mcmFtZVF1ZXVlLnNoaWZ0KCkhO1xyXG4gICAgICBjb25zdCBhdWRpb0ZyYW1lID0gbmV3IEF1ZGlvRnJhbWUoaW50MTZBcnJheSwgU0FNUExFX1JBVEUsIENIQU5ORUxTLCBTQU1QTEVTX1BFUl9GUkFNRSk7XHJcbiAgICAgIFxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYXVkaW9Tb3VyY2UuY2FwdHVyZUZyYW1lKGF1ZGlvRnJhbWUpO1xyXG4gICAgICAgIHRoaXMuZnJhbWVzUGxheWVkKys7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gTG9nIHByb2dyZXNzIGV2ZXJ5IDUwMCBmcmFtZXMgKH4xMCBzZWNvbmRzKVxyXG4gICAgICAgIGlmICh0aGlzLmZyYW1lc1BsYXllZCAlIDUwMCA9PT0gMCkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coYFtBdWRpb1BsYXllcl0gUHJvZ3Jlc3M6ICR7dGhpcy5mcmFtZXNQbGF5ZWR9IGZyYW1lcyBwbGF5ZWQsIGJ1ZmZlcjogJHtidWZmZXJTaXplfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtBdWRpb1BsYXllcl0gRnJhbWUgZXJyb3I6YCwgKGUgYXMgRXJyb3IpLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBVcGRhdGUgdGltaW5nIGZvciBuZXh0IGZyYW1lXHJcbiAgICAgIHRoaXMubmV4dEZyYW1lVGltZSArPSBGUkFNRV9JTlRFUlZBTF9OUztcclxuICAgICAgXHJcbiAgICAgIC8vIEFkYXB0aXZlIHRpbWluZzogaWYgYnVmZmVyIGlzIGxvdywgc2xvdyBkb3duIHNsaWdodGx5IHRvIGxldCBpdCByZWNvdmVyXHJcbiAgICAgIGlmIChidWZmZXJTaXplIDwgTE9XX0JVRkZFUl9USFJFU0hPTEQgJiYgIXRoaXMuZmZtcGVnRG9uZSkge1xyXG4gICAgICAgIC8vIEFkZCAxbXMgZGVsYXkgdG8gbGV0IGJ1ZmZlciByZWNvdmVyXHJcbiAgICAgICAgdGhpcy5uZXh0RnJhbWVUaW1lICs9IEJpZ0ludCgxXzAwMF8wMDApO1xyXG4gICAgICAgIHRoaXMuYnVmZmVyVW5kZXJydW5zKys7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuYnVmZmVyVW5kZXJydW5zICUgNTAgPT09IDApIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGBbQXVkaW9QbGF5ZXJdIEJ1ZmZlciBsb3c6ICR7YnVmZmVyU2l6ZX0gZnJhbWVzLCAke3RoaXMuYnVmZmVyVW5kZXJydW5zfSB1bmRlcnJ1bnNgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIFNjaGVkdWxlIG5leHQgZnJhbWVcclxuICAgICAgdGhpcy5zY2hlZHVsZU5leHRGcmFtZSgpO1xyXG4gICAgICBcclxuICAgIH0gZWxzZSBpZiAodGhpcy5mZm1wZWdEb25lICYmIGJ1ZmZlclNpemUgPT09IDApIHtcclxuICAgICAgLy8gUGxheWJhY2sgZmluaXNoZWRcclxuICAgICAgY29uc29sZS5sb2coJ1tBdWRpb1BsYXllcl0gUGxheWJhY2sgZmluaXNoZWQgLSBxdWV1ZSBlbXB0eSBhbmQgRkZtcGVnIGRvbmUnKTtcclxuICAgICAgdGhpcy5zdG9wKCk7XHJcbiAgICB9IGVsc2UgaWYgKGJ1ZmZlclNpemUgPT09IDApIHtcclxuICAgICAgLy8gQnVmZmVyIHVuZGVycnVuIC0gd2FpdCBmb3IgbW9yZSBkYXRhXHJcbiAgICAgIHRoaXMuYnVmZmVyVW5kZXJydW5zKys7XHJcbiAgICAgIGNvbnNvbGUubG9nKGBbQXVkaW9QbGF5ZXJdIEJ1ZmZlciB1bmRlcnJ1biAjJHt0aGlzLmJ1ZmZlclVuZGVycnVuc30sIHdhaXRpbmcgZm9yIGRhdGEuLi5gKTtcclxuICAgICAgXHJcbiAgICAgIC8vIFdhaXQgYSBiaXQgYW5kIHRyeSBhZ2FpblxyXG4gICAgICB0aGlzLm5leHRGcmFtZVRpbWUgPSBocnRpbWUuYmlnaW50KCkgKyBCaWdJbnQoNTBfMDAwXzAwMCk7IC8vIDUwbXNcclxuICAgICAgdGhpcy5zY2hlZHVsZU5leHRGcmFtZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhbnVwKCk6IHZvaWQge1xyXG4gICAgLy8gU3RvcCBwbGF5YmFjayBsb29wXHJcbiAgICB0aGlzLmlzUGxheWJhY2tMb29wUnVubmluZyA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMucGxheWJhY2tUaW1lb3V0KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBsYXliYWNrVGltZW91dCk7XHJcbiAgICAgIHRoaXMucGxheWJhY2tUaW1lb3V0ID0gbnVsbDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gS2lsbCBGRm1wZWdcclxuICAgIGlmICh0aGlzLmZmbXBlZ1Byb2Nlc3MpIHtcclxuICAgICAgdGhpcy5mZm1wZWdQcm9jZXNzLmtpbGwoJ1NJR0tJTEwnKTtcclxuICAgICAgdGhpcy5mZm1wZWdQcm9jZXNzID0gbnVsbDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gQ2xlYXIgZnJhbWUgcXVldWVcclxuICAgIHRoaXMuZnJhbWVRdWV1ZSA9IFtdO1xyXG4gICAgdGhpcy5sZWZ0b3ZlckJ1ZmZlciA9IG51bGw7XHJcbiAgICBcclxuICAgIC8vIFJlc2V0IHRpbWluZyBhbmQgc3RhdGVcclxuICAgIHRoaXMubmV4dEZyYW1lVGltZSA9IEJpZ0ludCgwKTtcclxuICAgIHRoaXMuZmZtcGVnRG9uZSA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICAvLyBMb2cgc3RhdHNcclxuICAgIGlmICh0aGlzLmZyYW1lc1BsYXllZCA+IDApIHtcclxuICAgICAgY29uc29sZS5sb2coYFtBdWRpb1BsYXllcl0gUGxheWJhY2sgc3RhdHM6ICR7dGhpcy5mcmFtZXNQbGF5ZWR9IGZyYW1lcywgJHt0aGlzLmJ1ZmZlclVuZGVycnVuc30gdW5kZXJydW5zYCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1ZmZlclVuZGVycnVucyA9IDA7XHJcbiAgICB0aGlzLmZyYW1lc1BsYXllZCA9IDA7XHJcbiAgICBcclxuICAgIC8vIE5vdGU6IFdlIGRvbid0IHVucHVibGlzaCB0aGUgdHJhY2sgLSBpdCBzdGF5cyBwdWJsaXNoZWQgZm9yIG5leHQgcGxheVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTdGF0ZShuZXdTdGF0ZTogQXVkaW9QbGF5ZXJTdGF0ZSk6IHZvaWQge1xyXG4gICAgY29uc3Qgb2xkU3RhdGUgPSB0aGlzLnN0YXRlO1xyXG4gICAgdGhpcy5zdGF0ZSA9IG5ld1N0YXRlO1xyXG4gICAgdGhpcy5lbWl0KCdzdGF0ZUNoYW5nZScsIG9sZFN0YXRlLCBuZXdTdGF0ZSk7XHJcbiAgICBcclxuICAgIC8vIFN0YXJ0IHBsYXliYWNrIGxvb3Agd2hlbiB0cmFuc2l0aW9uaW5nIHRvIFBsYXlpbmdcclxuICAgIGlmIChuZXdTdGF0ZS5zdGF0dXMgPT09IEF1ZGlvUGxheWVyU3RhdHVzLlBsYXlpbmcgJiYgb2xkU3RhdGUuc3RhdHVzICE9PSBBdWRpb1BsYXllclN0YXR1cy5QbGF5aW5nKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGBbQXVkaW9QbGF5ZXJdIFN0YXRlIGNoYW5nZWQgdG8gUGxheWluZywgc3RhcnRpbmcgcGxheWJhY2sgbG9vcGApO1xyXG4gICAgICB0aGlzLnNjaGVkdWxlTmV4dEZyYW1lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFuIGF1ZGlvIHBsYXllclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUF1ZGlvUGxheWVyKG9wdGlvbnM/OiBDcmVhdGVBdWRpb1BsYXllck9wdGlvbnMpOiBBdWRpb1BsYXllciB7XHJcbiAgcmV0dXJuIG5ldyBBdWRpb1BsYXllcihvcHRpb25zKTtcclxufVxyXG4iXX0=
|
package/dist/AudioResource.js
CHANGED
|
@@ -100,23 +100,35 @@ function isValidUrl(input) {
|
|
|
100
100
|
* Probe audio info from a URL or search query
|
|
101
101
|
* If input is not a URL, it will search YouTube
|
|
102
102
|
*/
|
|
103
|
-
async function probeAudioInfo(input, ytDlpPath
|
|
103
|
+
async function probeAudioInfo(input, ytDlpPath) {
|
|
104
104
|
return new Promise((resolve, reject) => {
|
|
105
|
+
const isWindows = process.platform === 'win32';
|
|
106
|
+
const defaultYtDlpPath = isWindows ? 'yt-dlp' : '~/.local/bin/yt-dlp';
|
|
107
|
+
const ytdlpBin = ytDlpPath || defaultYtDlpPath;
|
|
105
108
|
// If not a valid URL, treat as YouTube search
|
|
106
109
|
let searchQuery = input;
|
|
107
110
|
if (!isValidUrl(input)) {
|
|
108
111
|
searchQuery = `ytsearch1:${input}`;
|
|
109
112
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
113
|
+
let ytdlp;
|
|
114
|
+
if (isWindows) {
|
|
115
|
+
// Windows: use shell with quoted command
|
|
116
|
+
const cmd = `${ytdlpBin} --no-playlist --no-warnings -j "${searchQuery}"`;
|
|
117
|
+
ytdlp = (0, child_process_1.spawn)(cmd, [], { shell: true });
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// Unix: use bash -c with quoted string
|
|
121
|
+
ytdlp = (0, child_process_1.spawn)('bash', [
|
|
122
|
+
'-c',
|
|
123
|
+
`${ytdlpBin} --no-playlist --no-warnings -j "${searchQuery}"`
|
|
124
|
+
]);
|
|
125
|
+
}
|
|
114
126
|
let stdout = '';
|
|
115
127
|
let stderr = '';
|
|
116
|
-
ytdlp.stdout
|
|
128
|
+
ytdlp.stdout?.on('data', (data) => {
|
|
117
129
|
stdout += data.toString();
|
|
118
130
|
});
|
|
119
|
-
ytdlp.stderr
|
|
131
|
+
ytdlp.stderr?.on('data', (data) => {
|
|
120
132
|
stderr += data.toString();
|
|
121
133
|
});
|
|
122
134
|
ytdlp.on('close', (code) => {
|
|
@@ -147,4 +159,4 @@ async function probeAudioInfo(input, ytDlpPath = '~/.local/bin/yt-dlp') {
|
|
|
147
159
|
}, 30000);
|
|
148
160
|
});
|
|
149
161
|
}
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXVkaW9SZXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9BdWRpb1Jlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQStFQSxrREFLQztBQU1ELGdFQU9DO0FBa0NELHdDQTBEQztBQTVMRCxpREFBc0M7QUFDdEMsbUNBQXFDO0FBR3JDOztHQUVHO0FBQ0gsTUFBYSxhQUFhO0lBQ3hCLHlDQUF5QztJQUN6QixRQUFRLENBQUk7SUFFNUIsbUNBQW1DO0lBQzVCLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFFdkIsaUNBQWlDO0lBQzFCLEtBQUssR0FBRyxLQUFLLENBQUM7SUFFckIsMENBQTBDO0lBQ2xDLFdBQVcsQ0FBUztJQUU1QixrQkFBa0I7SUFDVixVQUFVLENBQWE7SUFFL0IsbUJBQW1CO0lBQ1gsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVuQixZQUNFLEtBQXlCLEVBQ3pCLFVBQXlDLEVBQUU7UUFFM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBYSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxrQkFBVSxDQUFDLFNBQVMsQ0FBQztRQUU1RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sK0NBQStDO1lBQy9DLDBCQUEwQjtZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDM0UsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVMsQ0FBQyxNQUFjO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxD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QkFDaEMsT0FBTyxDQUFDO29CQUNOLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLFNBQVM7b0JBQzlCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUM7b0JBQzVCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztvQkFDekIsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLO2lCQUMzQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsK0JBQWdDLENBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0UsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN4QixNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsK0JBQStCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7UUFFSCwyQkFBMkI7UUFDM0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNiLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ1osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tICdzdHJlYW0nO1xyXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5pbXBvcnQgeyBTdHJlYW1UeXBlIH0gZnJvbSAnLi9lbnVtcyc7XHJcbmltcG9ydCB7IENyZWF0ZUF1ZGlvUmVzb3VyY2VPcHRpb25zLCBBdWRpb1Jlc291cmNlSW5wdXQgfSBmcm9tICcuL3R5cGVzJztcclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGFuIGF1ZGlvIHJlc291cmNlIHRoYXQgY2FuIGJlIHBsYXllZFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEF1ZGlvUmVzb3VyY2U8VCA9IHVua25vd24+IHtcclxuICAvKiogTWV0YWRhdGEgYXR0YWNoZWQgdG8gdGhpcyByZXNvdXJjZSAqL1xyXG4gIHB1YmxpYyByZWFkb25seSBtZXRhZGF0YTogVDtcclxuICBcclxuICAvKiogV2hldGhlciBwbGF5YmFjayBoYXMgc3RhcnRlZCAqL1xyXG4gIHB1YmxpYyBzdGFydGVkID0gZmFsc2U7XHJcbiAgXHJcbiAgLyoqIFdoZXRoZXIgcGxheWJhY2sgaGFzIGVuZGVkICovXHJcbiAgcHVibGljIGVuZGVkID0gZmFsc2U7XHJcbiAgXHJcbiAgLyoqIFRoZSBpbnB1dCBzb3VyY2UgKFVSTCBvciBmaWxlIHBhdGgpICovXHJcbiAgcHJpdmF0ZSBpbnB1dFNvdXJjZTogc3RyaW5nO1xyXG4gIFxyXG4gIC8qKiBTdHJlYW0gdHlwZSAqL1xyXG4gIHByaXZhdGUgc3RyZWFtVHlwZTogU3RyZWFtVHlwZTtcclxuICBcclxuICAvKiogVm9sdW1lICgwLTEpICovXHJcbiAgcHJpdmF0ZSB2b2x1bWUgPSAxO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGlucHV0OiBBdWRpb1Jlc291cmNlSW5wdXQsXHJcbiAgICBvcHRpb25zOiBDcmVhdGVBdWRpb1Jlc291cmNlT3B0aW9uczxUPiA9IHt9XHJcbiAgKSB7XHJcbiAgICB0aGlzLm1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YSBhcyBUO1xyXG4gICAgdGhpcy5zdHJlYW1UeXBlID0gb3B0aW9ucy5pbnB1dFR5cGUgfHwgU3RyZWFtVHlwZS5BcmJpdHJhcnk7XHJcbiAgICBcclxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuaW5wdXRTb3VyY2UgPSBpbnB1dDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEZvciBzdHJlYW1zLCB3ZSdkIG5lZWQgdG8gaGFuZGxlIGRpZmZlcmVudGx5XHJcbiAgICAgIC8vIEZvciBub3csIHRocm93IGFuIGVycm9yXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3RyZWFtIGlucHV0IG5vdCB5ZXQgc3VwcG9ydGVkLiBVc2UgVVJMIG9yIGZpbGUgcGF0aC4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgaW5wdXQgc291cmNlIGZvciBGRm1wZWdcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRJbnB1dFNvdXJjZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaW5wdXRTb3VyY2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIHZvbHVtZSAoMC0xKVxyXG4gICAqL1xyXG4gIHNldFZvbHVtZSh2b2x1bWU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy52b2x1bWUgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB2b2x1bWUpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgY3VycmVudCB2b2x1bWVcclxuICAgKi9cclxuICBnZXRWb2x1bWUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnZvbHVtZTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhdWRpbyByZXNvdXJjZSBmcm9tIFVSTFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVBdWRpb1Jlc291cmNlRnJvbVVybE9wdGlvbnM8VCA9IHVua25vd24+IGV4dGVuZHMgQ3JlYXRlQXVkaW9SZXNvdXJjZU9wdGlvbnM8VD4ge1xyXG4gIC8qKiBVc2UgeXQtZGxwIHRvIGV4dHJhY3QgYXVkaW8gVVJMICovXHJcbiAgdXNlWXREbHA/OiBib29sZWFuO1xyXG4gIC8qKiBQYXRoIHRvIHl0LWRscCBiaW5hcnkgKi9cclxuICB5dERscFBhdGg/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYW4gYXVkaW8gcmVzb3VyY2UgZnJvbSB2YXJpb3VzIGlucHV0c1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUF1ZGlvUmVzb3VyY2U8VCA9IHVua25vd24+KFxyXG4gIGlucHV0OiBBdWRpb1Jlc291cmNlSW5wdXQsXHJcbiAgb3B0aW9ucz86IENyZWF0ZUF1ZGlvUmVzb3VyY2VPcHRpb25zPFQ+XHJcbik6IEF1ZGlvUmVzb3VyY2U8VD4ge1xyXG4gIHJldHVybiBuZXcgQXVkaW9SZXNvdXJjZShpbnB1dCwgb3B0aW9ucyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYW4gYXVkaW8gcmVzb3VyY2UgZnJvbSBhIFlvdVR1YmUvc3RyZWFtaW5nIFVSTFxyXG4gKiBTdG9yZXMgdGhlIG9yaWdpbmFsIFVSTCAtIGV4dHJhY3Rpb24gaGFwcGVucyBhdCBwbGF5YmFjayB0aW1lXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXVkaW9SZXNvdXJjZUZyb21Vcmw8VCA9IHVua25vd24+KFxyXG4gIHVybDogc3RyaW5nLFxyXG4gIG9wdGlvbnM6IENyZWF0ZUF1ZGlvUmVzb3VyY2VGcm9tVXJsT3B0aW9uczxUPiA9IHt9XHJcbik6IEF1ZGlvUmVzb3VyY2U8VD4ge1xyXG4gIC8vIERvbid0IGV4dHJhY3Qgc3RyZWFtIFVSTCBoZXJlIC0ganVzdCBzdG9yZSB0aGUgb3JpZ2luYWwgVVJMXHJcbiAgLy8gVGhlIEF1ZGlvUGxheWVyIHdpbGwgdXNlIHl0LWRscCBhdCBwbGF5YmFjayB0aW1lXHJcbiAgcmV0dXJuIG5ldyBBdWRpb1Jlc291cmNlKHVybCwgb3B0aW9ucyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiBVUkwgaXMgYSBzdHJlYW1pbmcgc2VydmljZSBVUkxcclxuICovXHJcbmZ1bmN0aW9uIGlzU3RyZWFtaW5nVXJsKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgY29uc3Qgc3RyZWFtaW5nRG9tYWlucyA9IFtcclxuICAgICd5b3V0dWJlLmNvbScsXHJcbiAgICAneW91dHUuYmUnLFxyXG4gICAgJ3NvdW5kY2xvdWQuY29tJyxcclxuICAgICdzcG90aWZ5LmNvbScsXHJcbiAgICAndHdpdGNoLnR2JyxcclxuICAgICd2aW1lby5jb20nXHJcbiAgXTtcclxuICBcclxuICByZXR1cm4gc3RyZWFtaW5nRG9tYWlucy5zb21lKGRvbWFpbiA9PiB1cmwuaW5jbHVkZXMoZG9tYWluKSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiBpbnB1dCBpcyBhIHZhbGlkIFVSTFxyXG4gKi9cclxuZnVuY3Rpb24gaXNWYWxpZFVybChpbnB1dDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgdHJ5IHtcclxuICAgIG5ldyBVUkwoaW5wdXQpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfSBjYXRjaCB7XHJcbiAgICByZXR1cm4gaW5wdXQuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IGlucHV0LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJyk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogUHJvYmUgYXVkaW8gaW5mbyBmcm9tIGEgVVJMIG9yIHNlYXJjaCBxdWVyeVxyXG4gKiBJZiBpbnB1dCBpcyBub3QgYSBVUkwsIGl0IHdpbGwgc2VhcmNoIFlvdVR1YmVcclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9iZUF1ZGlvSW5mbyhpbnB1dDogc3RyaW5nLCB5dERscFBhdGggPSAnfi8ubG9jYWwvYmluL3l0LWRscCcpOiBQcm9taXNlPHtcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIGR1cmF0aW9uOiBudW1iZXI7XHJcbiAgdGh1bWJuYWlsPzogc3RyaW5nO1xyXG4gIHVybDogc3RyaW5nO1xyXG59PiB7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgIC8vIElmIG5vdCBhIHZhbGlkIFVSTCwgdHJlYXQgYXMgWW91VHViZSBzZWFyY2hcclxuICAgIGxldCBzZWFyY2hRdWVyeSA9IGlucHV0O1xyXG4gICAgaWYgKCFpc1ZhbGlkVXJsKGlucHV0KSkge1xyXG4gICAgICBzZWFyY2hRdWVyeSA9IGB5dHNlYXJjaDE6JHtpbnB1dH1gO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb25zdCB5dGRscCA9IHNwYXduKCdiYXNoJywgW1xyXG4gICAgICAnLWMnLFxyXG4gICAgICBgJHt5dERscFBhdGh9IC0tbm8tcGxheWxpc3QgLS1uby13YXJuaW5ncyAtaiBcIiR7c2VhcmNoUXVlcnl9XCJgXHJcbiAgICBdKTtcclxuICAgIFxyXG4gICAgbGV0IHN0ZG91dCA9ICcnO1xyXG4gICAgbGV0IHN0ZGVyciA9ICcnO1xyXG4gICAgXHJcbiAgICB5dGRscC5zdGRvdXQub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xyXG4gICAgICBzdGRvdXQgKz0gZGF0YS50b1N0cmluZygpO1xyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIHl0ZGxwLnN0ZGVyci5vbignZGF0YScsIChkYXRhKSA9PiB7XHJcbiAgICAgIHN0ZGVyciArPSBkYXRhLnRvU3RyaW5nKCk7XHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgeXRkbHAub24oJ2Nsb3NlJywgKGNvZGUpID0+IHtcclxuICAgICAgaWYgKGNvZGUgIT09IDApIHtcclxuICAgICAgICByZWplY3QobmV3IEVycm9yKGBGYWlsZWQgdG8gcHJvYmUgYXVkaW8gaW5mbzogJHtzdGRlcnIgfHwgJ1Vua25vd24gZXJyb3InfWApKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgaW5mbyA9IEpTT04ucGFyc2Uoc3Rkb3V0KTtcclxuICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgIHRpdGxlOiBpbmZvLnRpdGxlIHx8ICdVbmtub3duJyxcclxuICAgICAgICAgIGR1cmF0aW9uOiBpbmZvLmR1cmF0aW9uIHx8IDAsXHJcbiAgICAgICAgICB0aHVtYm5haWw6IGluZm8udGh1bWJuYWlsLFxyXG4gICAgICAgICAgdXJsOiBpbmZvLndlYnBhZ2VfdXJsIHx8IGluZm8udXJsIHx8IGlucHV0XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICByZWplY3QobmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgYXVkaW8gaW5mbzogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICB5dGRscC5vbignZXJyb3InLCAoZXJyKSA9PiB7XHJcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byBwcm9iZSBhdWRpbyBpbmZvOiAke2Vyci5tZXNzYWdlfWApKTtcclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICAvLyBUaW1lb3V0IGFmdGVyIDMwIHNlY29uZHNcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB5dGRscC5raWxsKCk7XHJcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1RpbWVvdXQgd2FpdGluZyBmb3IgYXVkaW8gaW5mbycpKTtcclxuICAgIH0sIDMwMDAwKTtcclxuICB9KTtcclxufVxyXG4iXX0=
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXVkaW9SZXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9BdWRpb1Jlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQStFQSxrREFLQztBQU1ELGdFQU9DO0FBa0NELHdDQXVFQztBQXpNRCxpREFBc0M7QUFDdEMsbUNBQXFDO0FBR3JDOztHQUVHO0FBQ0gsTUFBYSxhQUFhO0lBQ3hCLHlDQUF5QztJQUN6QixRQUFRLENBQUk7SUFFNUIsbUNBQW1DO0lBQzVCLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFFdkIsaUNBQWlDO0lBQzFCLEtBQUssR0FBRyxLQUFLLENBQUM7SUFFckIsMENBQTBDO0lBQ2xDLFdBQVcsQ0FBUztJQUU1QixrQkFBa0I7SUFDVixVQUFVLENBQWE7SUFFL0IsbUJBQW1CO0lBQ1gsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVuQixZQUNFLEtBQXlCLEVBQ3pCLFVBQXlDLEVBQUU7UUFFM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBYSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxrQkFBVSxDQUFDLFNBQVMsQ0FBQztRQUU1RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sK0NBQStDO1lBQy9DLDBCQUEwQjtZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDM0UsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVMsQ0FBQyxNQUFjO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxD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LDJCQUEyQjtRQUMzQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2IsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDWixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7XHJcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCB7IFN0cmVhbVR5cGUgfSBmcm9tICcuL2VudW1zJztcclxuaW1wb3J0IHsgQ3JlYXRlQXVkaW9SZXNvdXJjZU9wdGlvbnMsIEF1ZGlvUmVzb3VyY2VJbnB1dCB9IGZyb20gJy4vdHlwZXMnO1xyXG5cclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYW4gYXVkaW8gcmVzb3VyY2UgdGhhdCBjYW4gYmUgcGxheWVkXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQXVkaW9SZXNvdXJjZTxUID0gdW5rbm93bj4ge1xyXG4gIC8qKiBNZXRhZGF0YSBhdHRhY2hlZCB0byB0aGlzIHJlc291cmNlICovXHJcbiAgcHVibGljIHJlYWRvbmx5IG1ldGFkYXRhOiBUO1xyXG4gIFxyXG4gIC8qKiBXaGV0aGVyIHBsYXliYWNrIGhhcyBzdGFydGVkICovXHJcbiAgcHVibGljIHN0YXJ0ZWQgPSBmYWxzZTtcclxuICBcclxuICAvKiogV2hldGhlciBwbGF5YmFjayBoYXMgZW5kZWQgKi9cclxuICBwdWJsaWMgZW5kZWQgPSBmYWxzZTtcclxuICBcclxuICAvKiogVGhlIGlucHV0IHNvdXJjZSAoVVJMIG9yIGZpbGUgcGF0aCkgKi9cclxuICBwcml2YXRlIGlucHV0U291cmNlOiBzdHJpbmc7XHJcbiAgXHJcbiAgLyoqIFN0cmVhbSB0eXBlICovXHJcbiAgcHJpdmF0ZSBzdHJlYW1UeXBlOiBTdHJlYW1UeXBlO1xyXG4gIFxyXG4gIC8qKiBWb2x1bWUgKDAtMSkgKi9cclxuICBwcml2YXRlIHZvbHVtZSA9IDE7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgaW5wdXQ6IEF1ZGlvUmVzb3VyY2VJbnB1dCxcclxuICAgIG9wdGlvbnM6IENyZWF0ZUF1ZGlvUmVzb3VyY2VPcHRpb25zPFQ+ID0ge31cclxuICApIHtcclxuICAgIHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhIGFzIFQ7XHJcbiAgICB0aGlzLnN0cmVhbVR5cGUgPSBvcHRpb25zLmlucHV0VHlwZSB8fCBTdHJlYW1UeXBlLkFyYml0cmFyeTtcclxuICAgIFxyXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5pbnB1dFNvdXJjZSA9IGlucHV0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRm9yIHN0cmVhbXMsIHdlJ2QgbmVlZCB0byBoYW5kbGUgZGlmZmVyZW50bHlcclxuICAgICAgLy8gRm9yIG5vdywgdGhyb3cgYW4gZXJyb3JcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHJlYW0gaW5wdXQgbm90IHlldCBzdXBwb3J0ZWQuIFVzZSBVUkwgb3IgZmlsZSBwYXRoLicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBpbnB1dCBzb3VyY2UgZm9yIEZGbXBlZ1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldElucHV0U291cmNlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnB1dFNvdXJjZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgdm9sdW1lICgwLTEpXHJcbiAgICovXHJcbiAgc2V0Vm9sdW1lKHZvbHVtZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLnZvbHVtZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHZvbHVtZSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBjdXJyZW50IHZvbHVtZVxyXG4gICAqL1xyXG4gIGdldFZvbHVtZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudm9sdW1lO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGF1ZGlvIHJlc291cmNlIGZyb20gVVJMXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUF1ZGlvUmVzb3VyY2VGcm9tVXJsT3B0aW9uczxUID0gdW5rbm93bj4gZXh0ZW5kcyBDcmVhdGVBdWRpb1Jlc291cmNlT3B0aW9uczxUPiB7XHJcbiAgLyoqIFVzZSB5dC1kbHAgdG8gZXh0cmFjdCBhdWRpbyBVUkwgKi9cclxuICB1c2VZdERscD86IGJvb2xlYW47XHJcbiAgLyoqIFBhdGggdG8geXQtZGxwIGJpbmFyeSAqL1xyXG4gIHl0RGxwUGF0aD86IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBhdWRpbyByZXNvdXJjZSBmcm9tIHZhcmlvdXMgaW5wdXRzXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXVkaW9SZXNvdXJjZTxUID0gdW5rbm93bj4oXHJcbiAgaW5wdXQ6IEF1ZGlvUmVzb3VyY2VJbnB1dCxcclxuICBvcHRpb25zPzogQ3JlYXRlQXVkaW9SZXNvdXJjZU9wdGlvbnM8VD5cclxuKTogQXVkaW9SZXNvdXJjZTxUPiB7XHJcbiAgcmV0dXJuIG5ldyBBdWRpb1Jlc291cmNlKGlucHV0LCBvcHRpb25zKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBhdWRpbyByZXNvdXJjZSBmcm9tIGEgWW91VHViZS9zdHJlYW1pbmcgVVJMXHJcbiAqIFN0b3JlcyB0aGUgb3JpZ2luYWwgVVJMIC0gZXh0cmFjdGlvbiBoYXBwZW5zIGF0IHBsYXliYWNrIHRpbWVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBdWRpb1Jlc291cmNlRnJvbVVybDxUID0gdW5rbm93bj4oXHJcbiAgdXJsOiBzdHJpbmcsXHJcbiAgb3B0aW9uczogQ3JlYXRlQXVkaW9SZXNvdXJjZUZyb21VcmxPcHRpb25zPFQ+ID0ge31cclxuKTogQXVkaW9SZXNvdXJjZTxUPiB7XHJcbiAgLy8gRG9uJ3QgZXh0cmFjdCBzdHJlYW0gVVJMIGhlcmUgLSBqdXN0IHN0b3JlIHRoZSBvcmlnaW5hbCBVUkxcclxuICAvLyBUaGUgQXVkaW9QbGF5ZXIgd2lsbCB1c2UgeXQtZGxwIGF0IHBsYXliYWNrIHRpbWVcclxuICByZXR1cm4gbmV3IEF1ZGlvUmVzb3VyY2UodXJsLCBvcHRpb25zKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIFVSTCBpcyBhIHN0cmVhbWluZyBzZXJ2aWNlIFVSTFxyXG4gKi9cclxuZnVuY3Rpb24gaXNTdHJlYW1pbmdVcmwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICBjb25zdCBzdHJlYW1pbmdEb21haW5zID0gW1xyXG4gICAgJ3lvdXR1YmUuY29tJyxcclxuICAgICd5b3V0dS5iZScsXHJcbiAgICAnc291bmRjbG91ZC5jb20nLFxyXG4gICAgJ3Nwb3RpZnkuY29tJyxcclxuICAgICd0d2l0Y2gudHYnLFxyXG4gICAgJ3ZpbWVvLmNvbSdcclxuICBdO1xyXG4gIFxyXG4gIHJldHVybiBzdHJlYW1pbmdEb21haW5zLnNvbWUoZG9tYWluID0+IHVybC5pbmNsdWRlcyhkb21haW4pKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIGlucHV0IGlzIGEgdmFsaWQgVVJMXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkVXJsKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICB0cnkge1xyXG4gICAgbmV3IFVSTChpbnB1dCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9IGNhdGNoIHtcclxuICAgIHJldHVybiBpbnB1dC5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgaW5wdXQuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQcm9iZSBhdWRpbyBpbmZvIGZyb20gYSBVUkwgb3Igc2VhcmNoIHF1ZXJ5XHJcbiAqIElmIGlucHV0IGlzIG5vdCBhIFVSTCwgaXQgd2lsbCBzZWFyY2ggWW91VHViZVxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2JlQXVkaW9JbmZvKGlucHV0OiBzdHJpbmcsIHl0RGxwUGF0aD86IHN0cmluZyk6IFByb21pc2U8e1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgZHVyYXRpb246IG51bWJlcjtcclxuICB0aHVtYm5haWw/OiBzdHJpbmc7XHJcbiAgdXJsOiBzdHJpbmc7XHJcbn0+IHtcclxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgY29uc3QgaXNXaW5kb3dzID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcclxuICAgIGNvbnN0IGRlZmF1bHRZdERscFBhdGggPSBpc1dpbmRvd3MgPyAneXQtZGxwJyA6ICd+Ly5sb2NhbC9iaW4veXQtZGxwJztcclxuICAgIGNvbnN0IHl0ZGxwQmluID0geXREbHBQYXRoIHx8IGRlZmF1bHRZdERscFBhdGg7XHJcbiAgICBcclxuICAgIC8vIElmIG5vdCBhIHZhbGlkIFVSTCwgdHJlYXQgYXMgWW91VHViZSBzZWFyY2hcclxuICAgIGxldCBzZWFyY2hRdWVyeSA9IGlucHV0O1xyXG4gICAgaWYgKCFpc1ZhbGlkVXJsKGlucHV0KSkge1xyXG4gICAgICBzZWFyY2hRdWVyeSA9IGB5dHNlYXJjaDE6JHtpbnB1dH1gO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBsZXQgeXRkbHA6IFJldHVyblR5cGU8dHlwZW9mIHNwYXduPjtcclxuICAgIFxyXG4gICAgaWYgKGlzV2luZG93cykge1xyXG4gICAgICAvLyBXaW5kb3dzOiB1c2Ugc2hlbGwgd2l0aCBxdW90ZWQgY29tbWFuZFxyXG4gICAgICBjb25zdCBjbWQgPSBgJHt5dGRscEJpbn0gLS1uby1wbGF5bGlzdCAtLW5vLXdhcm5pbmdzIC1qIFwiJHtzZWFyY2hRdWVyeX1cImA7XHJcbiAgICAgIHl0ZGxwID0gc3Bhd24oY21kLCBbXSwgeyBzaGVsbDogdHJ1ZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFVuaXg6IHVzZSBiYXNoIC1jIHdpdGggcXVvdGVkIHN0cmluZ1xyXG4gICAgICB5dGRscCA9IHNwYXduKCdiYXNoJywgW1xyXG4gICAgICAgICctYycsXHJcbiAgICAgICAgYCR7eXRkbHBCaW59IC0tbm8tcGxheWxpc3QgLS1uby13YXJuaW5ncyAtaiBcIiR7c2VhcmNoUXVlcnl9XCJgXHJcbiAgICAgIF0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBsZXQgc3Rkb3V0ID0gJyc7XHJcbiAgICBsZXQgc3RkZXJyID0gJyc7XHJcbiAgICBcclxuICAgIHl0ZGxwLnN0ZG91dD8ub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xyXG4gICAgICBzdGRvdXQgKz0gZGF0YS50b1N0cmluZygpO1xyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIHl0ZGxwLnN0ZGVycj8ub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xyXG4gICAgICBzdGRlcnIgKz0gZGF0YS50b1N0cmluZygpO1xyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIHl0ZGxwLm9uKCdjbG9zZScsIChjb2RlKSA9PiB7XHJcbiAgICAgIGlmIChjb2RlICE9PSAwKSB7XHJcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgRmFpbGVkIHRvIHByb2JlIGF1ZGlvIGluZm86ICR7c3RkZXJyIHx8ICdVbmtub3duIGVycm9yJ31gKSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGluZm8gPSBKU09OLnBhcnNlKHN0ZG91dCk7XHJcbiAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICB0aXRsZTogaW5mby50aXRsZSB8fCAnVW5rbm93bicsXHJcbiAgICAgICAgICBkdXJhdGlvbjogaW5mby5kdXJhdGlvbiB8fCAwLFxyXG4gICAgICAgICAgdGh1bWJuYWlsOiBpbmZvLnRodW1ibmFpbCxcclxuICAgICAgICAgIHVybDogaW5mby53ZWJwYWdlX3VybCB8fCBpbmZvLnVybCB8fCBpbnB1dFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIGF1ZGlvIGluZm86ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgeXRkbHAub24oJ2Vycm9yJywgKGVycikgPT4ge1xyXG4gICAgICByZWplY3QobmV3IEVycm9yKGBGYWlsZWQgdG8gcHJvYmUgYXVkaW8gaW5mbzogJHtlcnIubWVzc2FnZX1gKSk7XHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgLy8gVGltZW91dCBhZnRlciAzMCBzZWNvbmRzXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgeXRkbHAua2lsbCgpO1xyXG4gICAgICByZWplY3QobmV3IEVycm9yKCdUaW1lb3V0IHdhaXRpbmcgZm9yIGF1ZGlvIGluZm8nKSk7XHJcbiAgICB9LCAzMDAwMCk7XHJcbiAgfSk7XHJcbn1cclxuIl19
|