chat4app-client-angular 1.0.14 → 1.0.16
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/bundles/chat4app-client-angular.umd.js +129 -329
- package/bundles/chat4app-client-angular.umd.js.map +1 -1
- package/bundles/chat4app-client-angular.umd.min.js +2 -2
- package/bundles/chat4app-client-angular.umd.min.js.map +1 -1
- package/chat4app-client-angular.metadata.json +1 -1
- package/esm2015/lib/chat4app-client-angular.service.js +122 -274
- package/fesm2015/chat4app-client-angular.js +119 -271
- package/fesm2015/chat4app-client-angular.js.map +1 -1
- package/lib/chat4app-client-angular.service.d.ts +8 -7
- package/lib/chat4app-client-angular.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
1
|
import { Injectable } from '@angular/core';
|
|
3
2
|
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
|
4
|
-
import {
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
5
4
|
import * as NATS from './nats.min.js';
|
|
6
5
|
import * as i0 from "@angular/core";
|
|
7
6
|
import * as i1 from "@angular/common/http";
|
|
@@ -13,6 +12,7 @@ export class Chat4appClientAngularService {
|
|
|
13
12
|
this.chatUrl = "";
|
|
14
13
|
this.debug = false;
|
|
15
14
|
this.chatUserExternalId = "";
|
|
15
|
+
this.configId = "";
|
|
16
16
|
this.timeoutReconnect = 500;
|
|
17
17
|
}
|
|
18
18
|
ngOnInit() {
|
|
@@ -22,19 +22,33 @@ export class Chat4appClientAngularService {
|
|
|
22
22
|
this.chatUrl = chat4AppConfig.endpoint + "/api/v1/";
|
|
23
23
|
this.debug = chat4AppConfig.debug;
|
|
24
24
|
}
|
|
25
|
-
init(securityChatToken,
|
|
26
|
-
return
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
init(securityChatToken, chatCallback, connectionClientId) {
|
|
26
|
+
return new Observable((subscriber) => {
|
|
27
|
+
try {
|
|
28
|
+
// 1. Validações Iniciais
|
|
29
|
+
if (!this.chatServer || this.chatServer.trim().length === 0) {
|
|
30
|
+
subscriber.error(new Error("Endpoint is empty"));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (!securityChatToken || securityChatToken.trim().length === 0) {
|
|
34
|
+
subscriber.error(new Error("SecurityChatToken is empty"));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
// 2. Lógica de Negócio
|
|
38
|
+
this.setTokenChat4app(securityChatToken);
|
|
39
|
+
if (chatCallback && connectionClientId) {
|
|
40
|
+
this.chatUserExternalId = connectionClientId;
|
|
41
|
+
this.chatCallback = chatCallback;
|
|
42
|
+
this.connectWebsocket();
|
|
43
|
+
}
|
|
44
|
+
// 3. Emite o token e finaliza o fluxo
|
|
45
|
+
subscriber.next(securityChatToken);
|
|
46
|
+
subscriber.complete();
|
|
32
47
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
48
|
+
catch (err) {
|
|
49
|
+
// Captura erros inesperados e envia para o canal de erro do Observable
|
|
50
|
+
subscriber.error(err);
|
|
36
51
|
}
|
|
37
|
-
callback(securityChatToken);
|
|
38
52
|
});
|
|
39
53
|
}
|
|
40
54
|
getChatUrlDownload(messageFileId) {
|
|
@@ -324,182 +338,29 @@ export class Chat4appClientAngularService {
|
|
|
324
338
|
setTokenChat4app(chat4AppSessionToken) {
|
|
325
339
|
window.sessionStorage.setItem("chat4AppSessionToken", chat4AppSessionToken);
|
|
326
340
|
}
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
}
|
|
351
|
-
chat4appMessage.data.all = datTmp;
|
|
352
|
-
chatCallback.onMessage(chat4appMessage);
|
|
353
|
-
}
|
|
354
|
-
else if ((data.type == "on" || data.type == "off")) {
|
|
355
|
-
let chat4appMessage = new Chat4AppMessageReceive();
|
|
356
|
-
chat4appMessage.data.chatId = data.chatId;
|
|
357
|
-
chat4appMessage.data.chatMessageId = data.chatMessageId;
|
|
358
|
-
chat4appMessage.data.externalId = data.externalId;
|
|
359
|
-
chat4appMessage.data.fromId = data.fromId;
|
|
360
|
-
chat4appMessage.data.toId = data.toId;
|
|
361
|
-
chat4appMessage.data.groupId = data.groupId;
|
|
362
|
-
chat4appMessage.data.dateHour = data.dateHour;
|
|
363
|
-
chat4appMessage.data.type = data.type;
|
|
364
|
-
let datTmp = new Map();
|
|
365
|
-
for (let key in data) {
|
|
366
|
-
datTmp.set(key, data[key]);
|
|
367
|
-
}
|
|
368
|
-
chat4appMessage.data.all = datTmp;
|
|
369
|
-
chatCallback.onOffline(chat4appMessage);
|
|
370
|
-
}
|
|
371
|
-
else if (data.type == "read") {
|
|
372
|
-
let chat4appMessage = new Chat4AppMessageReceive();
|
|
373
|
-
chat4appMessage.data.chatId = data.chatId;
|
|
374
|
-
chat4appMessage.data.chatMessageId = data.chatMessageId;
|
|
375
|
-
chat4appMessage.data.externalId = data.externalId;
|
|
376
|
-
chat4appMessage.data.fromId = data.fromId;
|
|
377
|
-
chat4appMessage.data.toId = data.toId;
|
|
378
|
-
chat4appMessage.data.groupId = data.groupId;
|
|
379
|
-
chat4appMessage.data.dateHour = data.dateHour;
|
|
380
|
-
chat4appMessage.data.type = data.type;
|
|
381
|
-
let datTmp = new Map();
|
|
382
|
-
for (let key in data) {
|
|
383
|
-
datTmp.set(key, data[key]);
|
|
384
|
-
}
|
|
385
|
-
chat4appMessage.data.all = datTmp;
|
|
386
|
-
chatCallback.onRead(chat4appMessage);
|
|
387
|
-
}
|
|
388
|
-
else if (data.type == "startTyping" || data.type == "stopTyping") {
|
|
389
|
-
let chat4appMessage = new Chat4AppMessageReceive();
|
|
390
|
-
chat4appMessage.data.chatId = data.chatId;
|
|
391
|
-
chat4appMessage.data.chatMessageId = data.chatMessageId;
|
|
392
|
-
chat4appMessage.data.externalId = data.externalId;
|
|
393
|
-
chat4appMessage.data.fromId = data.fromId;
|
|
394
|
-
chat4appMessage.data.toId = data.toId;
|
|
395
|
-
chat4appMessage.data.groupId = data.groupId;
|
|
396
|
-
chat4appMessage.data.dateHour = data.dateHour;
|
|
397
|
-
chat4appMessage.data.type = data.type;
|
|
398
|
-
let datTmp = new Map();
|
|
399
|
-
for (let key in data) {
|
|
400
|
-
datTmp.set(key, data[key]);
|
|
401
|
-
}
|
|
402
|
-
chat4appMessage.data.all = datTmp;
|
|
403
|
-
chatCallback.onStartStopTyping(chat4appMessage);
|
|
404
|
-
}
|
|
405
|
-
else if (data.type == "new_user") {
|
|
406
|
-
let chat4appMessage = new Chat4AppMessageReceive();
|
|
407
|
-
chat4appMessage.data.chatId = data.chatId;
|
|
408
|
-
chat4appMessage.data.chatMessageId = data.chatMessageId;
|
|
409
|
-
chat4appMessage.data.externalId = data.externalId;
|
|
410
|
-
chat4appMessage.data.fromId = data.fromId;
|
|
411
|
-
chat4appMessage.data.toId = data.toId;
|
|
412
|
-
chat4appMessage.data.groupId = data.groupId;
|
|
413
|
-
chat4appMessage.data.dateHour = data.dateHour;
|
|
414
|
-
chat4appMessage.data.type = data.type;
|
|
415
|
-
let datTmp = new Map();
|
|
416
|
-
for (let key in data) {
|
|
417
|
-
datTmp.set(key, data[key]);
|
|
418
|
-
}
|
|
419
|
-
chat4appMessage.data.all = datTmp;
|
|
420
|
-
chatCallback.onNewUser(chat4appMessage);
|
|
421
|
-
}
|
|
422
|
-
else if (data.type == "remove_user") {
|
|
423
|
-
let chat4appMessage = new Chat4AppMessageReceive();
|
|
424
|
-
chat4appMessage.data.chatId = data.chatId;
|
|
425
|
-
chat4appMessage.data.chatMessageId = data.chatMessageId;
|
|
426
|
-
chat4appMessage.data.externalId = data.externalId;
|
|
427
|
-
chat4appMessage.data.fromId = data.fromId;
|
|
428
|
-
chat4appMessage.data.toId = data.toId;
|
|
429
|
-
chat4appMessage.data.groupId = data.groupId;
|
|
430
|
-
chat4appMessage.data.dateHour = data.dateHour;
|
|
431
|
-
chat4appMessage.data.type = data.type;
|
|
432
|
-
let datTmp = new Map();
|
|
433
|
-
for (let key in data) {
|
|
434
|
-
datTmp.set(key, data[key]);
|
|
435
|
-
}
|
|
436
|
-
chat4appMessage.data.all = datTmp;
|
|
437
|
-
chatCallback.onRemoveUser(chat4appMessage);
|
|
438
|
-
}
|
|
439
|
-
else if (data.type == "chat_closed") {
|
|
440
|
-
let chat4appMessage = new Chat4AppMessageReceive();
|
|
441
|
-
chat4appMessage.data.chatId = data.chatId;
|
|
442
|
-
chat4appMessage.data.chatMessageId = data.chatMessageId;
|
|
443
|
-
chat4appMessage.data.externalId = data.externalId;
|
|
444
|
-
chat4appMessage.data.fromId = data.fromId;
|
|
445
|
-
chat4appMessage.data.toId = data.toId;
|
|
446
|
-
chat4appMessage.data.groupId = data.groupId;
|
|
447
|
-
chat4appMessage.data.dateHour = data.dateHour;
|
|
448
|
-
chat4appMessage.data.type = data.type;
|
|
449
|
-
let datTmp = new Map();
|
|
450
|
-
for (let key in data) {
|
|
451
|
-
datTmp.set(key, data[key]);
|
|
452
|
-
}
|
|
453
|
-
chat4appMessage.data.all = datTmp;
|
|
454
|
-
chatCallback.onChatClosed(chat4appMessage);
|
|
455
|
-
}
|
|
456
|
-
else if (data.type == "count_notread") {
|
|
457
|
-
let chat4appMessage = new Chat4AppMessageReceive();
|
|
458
|
-
chat4appMessage.data.chatId = data.chatId;
|
|
459
|
-
chat4appMessage.data.chatMessageId = data.chatMessageId;
|
|
460
|
-
chat4appMessage.data.externalId = data.externalId;
|
|
461
|
-
chat4appMessage.data.fromId = data.fromId;
|
|
462
|
-
chat4appMessage.data.toId = data.toId;
|
|
463
|
-
chat4appMessage.data.groupId = data.groupId;
|
|
464
|
-
chat4appMessage.data.dateHour = data.dateHour;
|
|
465
|
-
chat4appMessage.data.type = data.type;
|
|
466
|
-
let datTmp = new Map();
|
|
467
|
-
for (let key in data) {
|
|
468
|
-
datTmp.set(key, data[key]);
|
|
469
|
-
}
|
|
470
|
-
chat4appMessage.data.all = datTmp;
|
|
471
|
-
chatCallback.onCountNotRead(chat4appMessage);
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
ensureConn(chatUserExternalId, forceReconnectNats) {
|
|
475
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
476
|
-
if (this.debug) {
|
|
477
|
-
console.log(`chatServer: ${this.chatServer}`);
|
|
478
|
-
console.log(`userId: ${chatUserExternalId}`);
|
|
479
|
-
console.log(`getBearerToken: ${this.getBearerToken()}`);
|
|
480
|
-
}
|
|
481
|
-
const that = this;
|
|
482
|
-
let uriStep1 = this.chatServer.replace(/^https/, 'wss');
|
|
483
|
-
let server = uriStep1.replace(/(\/\/.*?)\//, '$1\/ws/');
|
|
484
|
-
if (this.debug) {
|
|
485
|
-
console.log(`ws server: ${server}`);
|
|
486
|
-
}
|
|
487
|
-
if (forceReconnectNats || !this.nc || (this.nc.isClose && this.nc.isClose())) {
|
|
488
|
-
yield that.disconnectInternal(true);
|
|
489
|
-
that.nc = yield NATS.connect({ url: server, user: chatUserExternalId, pass: this.getBearerToken(), reconnect: false });
|
|
490
|
-
}
|
|
491
|
-
this.chatUserExternalId = chatUserExternalId;
|
|
492
|
-
return that.nc;
|
|
493
|
-
});
|
|
494
|
-
}
|
|
495
|
-
disconnect() {
|
|
496
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
497
|
-
return this.disconnectInternal(false);
|
|
498
|
-
});
|
|
499
|
-
}
|
|
500
|
-
disconnectInternal(ignoreOffLine) {
|
|
501
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
502
|
-
// Check how we can disconnect
|
|
341
|
+
ensureConn() {
|
|
342
|
+
if (this.debug) {
|
|
343
|
+
console.log(`chatServer: ${this.chatServer}`);
|
|
344
|
+
console.log(`userId: ${this.chatUserExternalId}`);
|
|
345
|
+
console.log(`getBearerToken: ${this.getBearerToken()}`);
|
|
346
|
+
}
|
|
347
|
+
const that = this;
|
|
348
|
+
let uriStep1 = this.chatServer.replace(/^https/, 'wss');
|
|
349
|
+
let server = uriStep1.replace(/(\/\/.*?)\//, '$1\/ws/');
|
|
350
|
+
if (this.debug) {
|
|
351
|
+
console.log(`ws server: ${server}`);
|
|
352
|
+
}
|
|
353
|
+
that.disconnectInternal(true);
|
|
354
|
+
NATS.connect({ url: server, user: this.chatUserExternalId, pass: this.getBearerToken(), reconnect: false })
|
|
355
|
+
.then((nc) => {
|
|
356
|
+
that.nc = nc;
|
|
357
|
+
const subject = `chat4app.config.${this.configId}.user.${this.chatUserExternalId}`;
|
|
358
|
+
const sub = that.nc.subscribe(subject, (msg) => {
|
|
359
|
+
if (this.debug) {
|
|
360
|
+
console.log(msg);
|
|
361
|
+
}
|
|
362
|
+
this.processAndCallback(JSON.parse(msg.data));
|
|
363
|
+
});
|
|
503
364
|
if (this.interval) {
|
|
504
365
|
try {
|
|
505
366
|
clearInterval(this.interval);
|
|
@@ -507,34 +368,68 @@ export class Chat4appClientAngularService {
|
|
|
507
368
|
catch (e) {
|
|
508
369
|
}
|
|
509
370
|
}
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
if (this.debug)
|
|
514
|
-
console.log("had set offline");
|
|
515
|
-
}
|
|
516
|
-
catch (e) {
|
|
517
|
-
if (this.debug)
|
|
518
|
-
console.error("Erro ao setar offline", e);
|
|
371
|
+
that.interval = setInterval(() => {
|
|
372
|
+
if (that.debug) {
|
|
373
|
+
console.log(`publish chat4app.user.online ${this.chatUserExternalId} `);
|
|
519
374
|
}
|
|
520
|
-
}
|
|
521
|
-
if (this.nc) {
|
|
522
375
|
try {
|
|
523
|
-
|
|
376
|
+
that.nc.publish(`chat4app.user.online`, this.chatUserExternalId);
|
|
524
377
|
}
|
|
525
378
|
catch (e) {
|
|
526
379
|
if (this.debug) {
|
|
527
|
-
console.
|
|
380
|
+
console.log("try reconnect...");
|
|
528
381
|
}
|
|
382
|
+
this.ensureConn();
|
|
529
383
|
}
|
|
530
|
-
|
|
531
|
-
}
|
|
384
|
+
}, 1000);
|
|
532
385
|
if (this.debug) {
|
|
533
|
-
console.log(
|
|
386
|
+
console.log(`Subscribe online chat4app.user.${this.chatUserExternalId}.online`);
|
|
534
387
|
}
|
|
388
|
+
})
|
|
389
|
+
.catch((err) => {
|
|
390
|
+
// Notifica o chamador sobre o erro na conexão
|
|
391
|
+
console.error("NATS Error:", err);
|
|
535
392
|
});
|
|
536
393
|
}
|
|
537
|
-
|
|
394
|
+
disconnect() {
|
|
395
|
+
return this.disconnectInternal(false);
|
|
396
|
+
}
|
|
397
|
+
disconnectInternal(ignoreOffLine) {
|
|
398
|
+
// Check how we can disconnect
|
|
399
|
+
if (this.interval) {
|
|
400
|
+
try {
|
|
401
|
+
clearInterval(this.interval);
|
|
402
|
+
}
|
|
403
|
+
catch (e) {
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
if (!ignoreOffLine && this.nc && this.chatUserExternalId && this.chatUserExternalId.length > 0 && this.getBearerToken() && this.getBearerToken().length > 0) {
|
|
407
|
+
try {
|
|
408
|
+
this.setOffLine(this.chatUserExternalId).toPromise();
|
|
409
|
+
if (this.debug)
|
|
410
|
+
console.log("had set offline");
|
|
411
|
+
}
|
|
412
|
+
catch (e) {
|
|
413
|
+
if (this.debug)
|
|
414
|
+
console.error("Erro ao setar offline", e);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
if (this.nc) {
|
|
418
|
+
try {
|
|
419
|
+
this.nc.close();
|
|
420
|
+
}
|
|
421
|
+
catch (e) {
|
|
422
|
+
if (this.debug) {
|
|
423
|
+
console.error(e);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
this.nc = undefined;
|
|
427
|
+
}
|
|
428
|
+
if (this.debug) {
|
|
429
|
+
console.log("disconect");
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
processAndCallback(msgObj) {
|
|
538
433
|
if (this.debug && msgObj) {
|
|
539
434
|
console.log("Msg Received: " + JSON.stringify(msgObj));
|
|
540
435
|
}
|
|
@@ -545,92 +440,45 @@ export class Chat4appClientAngularService {
|
|
|
545
440
|
}
|
|
546
441
|
msgObj.data.all = datTmp;
|
|
547
442
|
if (msgObj.data.type == "msg") {
|
|
548
|
-
chatCallback.onMessage(msgObj);
|
|
443
|
+
this.chatCallback.onMessage(msgObj);
|
|
549
444
|
}
|
|
550
445
|
else if ((msgObj.data.type == "on" || msgObj.data.type == "off")) {
|
|
551
|
-
chatCallback.onOffline(msgObj);
|
|
446
|
+
this.chatCallback.onOffline(msgObj);
|
|
552
447
|
}
|
|
553
448
|
else if (msgObj.data.type == "read") {
|
|
554
|
-
chatCallback.onRead(msgObj);
|
|
449
|
+
this.chatCallback.onRead(msgObj);
|
|
555
450
|
}
|
|
556
451
|
else if (msgObj.data.type == "startTyping" || msgObj.data.type == "stopTyping") {
|
|
557
|
-
chatCallback.onStartStopTyping(msgObj);
|
|
452
|
+
this.chatCallback.onStartStopTyping(msgObj);
|
|
558
453
|
}
|
|
559
454
|
else if (msgObj.data.type == "new_user") {
|
|
560
|
-
chatCallback.onNewUser(msgObj);
|
|
455
|
+
this.chatCallback.onNewUser(msgObj);
|
|
561
456
|
}
|
|
562
457
|
else if (msgObj.data.type == "remove_user") {
|
|
563
|
-
chatCallback.onRemoveUser(msgObj);
|
|
458
|
+
this.chatCallback.onRemoveUser(msgObj);
|
|
564
459
|
}
|
|
565
460
|
else if (msgObj.data.type == "chat_closed") {
|
|
566
|
-
chatCallback.onChatClosed(msgObj);
|
|
461
|
+
this.chatCallback.onChatClosed(msgObj);
|
|
567
462
|
}
|
|
568
463
|
else if (msgObj.data.type == "count_notread") {
|
|
569
|
-
chatCallback.onCountNotRead(msgObj);
|
|
464
|
+
this.chatCallback.onCountNotRead(msgObj);
|
|
570
465
|
}
|
|
571
466
|
//}
|
|
572
467
|
}
|
|
573
|
-
connectWebsocket(
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
tokenAuth = securityToken;
|
|
581
|
-
}
|
|
582
|
-
else {
|
|
583
|
-
tokenAuth = "Bearer " + securityToken;
|
|
584
|
-
}
|
|
585
|
-
const configId = this.chatServer.split("/")[3];
|
|
586
|
-
const nc = yield this.ensureConn(userId);
|
|
587
|
-
//TODO Get the user id from jwt
|
|
588
|
-
const subject = `chat4app.config.${configId}.user.${userId}`;
|
|
589
|
-
const sub = nc.subscribe(subject, (msg) => {
|
|
590
|
-
if (this.debug) {
|
|
591
|
-
console.log(msg);
|
|
592
|
-
}
|
|
593
|
-
this.processAndCallback(JSON.parse(msg.data), chatCallback);
|
|
594
|
-
});
|
|
595
|
-
if (this.interval) {
|
|
596
|
-
try {
|
|
597
|
-
clearInterval(this.interval);
|
|
598
|
-
}
|
|
599
|
-
catch (e) {
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
that.interval = setInterval(() => {
|
|
603
|
-
if (that.debug) {
|
|
604
|
-
console.log(`publish chat4app.user.online ${userId} `);
|
|
605
|
-
}
|
|
606
|
-
try {
|
|
607
|
-
that.nc.publish(`chat4app.user.online`, userId);
|
|
608
|
-
}
|
|
609
|
-
catch (e) {
|
|
610
|
-
if (this.debug) {
|
|
611
|
-
console.log("try reconnect...");
|
|
612
|
-
}
|
|
613
|
-
this.ensureConn(userId, true);
|
|
614
|
-
}
|
|
615
|
-
}, 1000);
|
|
616
|
-
if (this.debug) {
|
|
617
|
-
console.log(`Subscribe online chat4app.user.${userId}.online`);
|
|
618
|
-
}
|
|
619
|
-
});
|
|
620
|
-
}
|
|
621
|
-
/*
|
|
622
|
-
disconnect() {
|
|
623
|
-
// console.log("disconnect")
|
|
624
|
-
try {
|
|
625
|
-
if (this.stompClient) {
|
|
626
|
-
this.stompClient.disconnect();
|
|
468
|
+
connectWebsocket() {
|
|
469
|
+
const that = this;
|
|
470
|
+
this.disconnectInternal(true);
|
|
471
|
+
let securityToken = this.getBearerToken();
|
|
472
|
+
let tokenAuth = "";
|
|
473
|
+
if (securityToken && securityToken.startsWith("Bearer ")) {
|
|
474
|
+
tokenAuth = securityToken;
|
|
627
475
|
}
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
476
|
+
else {
|
|
477
|
+
tokenAuth = "Bearer " + securityToken;
|
|
478
|
+
}
|
|
479
|
+
this.configId = this.chatServer.split("/")[3];
|
|
480
|
+
this.ensureConn();
|
|
632
481
|
}
|
|
633
|
-
*/
|
|
634
482
|
convertChat4AppMessageReceiveToChatMessage4App(msg) {
|
|
635
483
|
var _a;
|
|
636
484
|
let message = new ChatMessage4App();
|
|
@@ -728,4 +576,4 @@ export var GroupStatus4App;
|
|
|
728
576
|
GroupStatus4App["CREATED"] = "CREATED";
|
|
729
577
|
GroupStatus4App["CLOSED"] = "REMOVED";
|
|
730
578
|
})(GroupStatus4App || (GroupStatus4App = {}));
|
|
731
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdDRhcHAtY2xpZW50LWFuZ3VsYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQ0YXBwLWNsaWVudC1hbmd1bGFyL3NyYy9saWIvY2hhdDRhcHAtY2xpZW50LWFuZ3VsYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7OztBQUd0Qyw0QkFBNEI7QUFLNUIsTUFBTSxPQUFPLDRCQUE0QjtJQWFyQyxZQUFxQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBVHJDLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLFVBQUssR0FBRyxLQUFLLENBQUM7UUFDZCx1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFFeEIscUJBQWdCLEdBQUcsR0FBRyxDQUFDO0lBTXZCLENBQUM7SUFDRCxRQUFRO0lBQ1IsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUE4QjtRQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBRTtRQUNyRCxJQUFJLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUVLLElBQUksQ0FBQyxpQkFBeUIsRUFBRSxRQUFhLEVBQUUsWUFBNEIsRUFBRSxrQkFBMkI7O1lBRTFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFV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SyxDQUFVO0lBRTNELENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxpQkFBaUI7Q0FPN0I7QUFFRCxNQUFNLE9BQU8sWUFBWTtDQVV4QjtBQUdELE1BQU0sQ0FBTixJQUFZLGNBSVg7QUFKRCxXQUFZLGNBQWM7SUFDeEIscUNBQW1CLENBQUE7SUFDbkIsbUNBQWlCLENBQUE7QUFFbkIsQ0FBQyxFQUpXLGNBQWMsS0FBZCxjQUFjLFFBSXpCO0FBQ0QsTUFBTSxDQUFOLElBQVksa0JBR1g7QUFIRCxXQUFZLGtCQUFrQjtJQUM1Qix5Q0FBbUIsQ0FBQTtBQUVyQixDQUFDLEVBSFcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQUc3QjtBQUNELE1BQU0sQ0FBTixJQUFZLGNBR1g7QUFIRCxXQUFZLGNBQWM7SUFDeEIsdUVBQWtCLENBQUE7SUFDbEIsbUVBQWdCLENBQUE7QUFDbEIsQ0FBQyxFQUhXLGNBQWMsS0FBZCxjQUFjLFFBR3pCO0FBRUQsTUFBTSxDQUFOLElBQVksZUFHWDtBQUhELFdBQVksZUFBZTtJQUN6QixzQ0FBbUIsQ0FBQTtJQUNuQixxQ0FBa0IsQ0FBQTtBQUNwQixDQUFDLEVBSFcsZUFBZSxLQUFmLGVBQWUsUUFHMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0ICogYXMgTkFUUyBmcm9tICcuL25hdHMubWluLmpzJztcclxuXHJcblxyXG4vL2RlY2xhcmUgbGV0IG5hdHNfbWluOiBhbnk7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGF0NGFwcENsaWVudEFuZ3VsYXJTZXJ2aWNlIGltcGxlbWVudHMgT25Jbml0ICB7XHJcblxyXG4gICAgbmM6IGFueTtcclxuXHJcbiAgICBjaGF0U2VydmVyID0gXCJcIjtcclxuICAgIGNoYXRVcmwgPSBcIlwiO1xyXG4gICAgZGVidWcgPSBmYWxzZTtcclxuICAgIGNoYXRVc2VyRXh0ZXJuYWxJZCA9IFwiXCI7XHJcbiAgICBcclxuICAgIHRpbWVvdXRSZWNvbm5lY3QgPSA1MDA7XHJcblxyXG4gICAgaW50ZXJ2YWw7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge1xyXG4gIFxyXG4gICAgfVxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlnKGNoYXQ0QXBwQ29uZmlnOiBDaGF0NEFwcENvbmZpZykge1xyXG4gICAgICB0aGlzLmNoYXRTZXJ2ZXIgPSBjaGF0NEFwcENvbmZpZy5lbmRwb2ludDtcclxuICAgICAgdGhpcy5jaGF0VXJsID0gY2hhdDRBcHBDb25maWcuZW5kcG9pbnQgKyBcIi9hcGkvdjEvXCIgO1xyXG4gICAgICB0aGlzLmRlYnVnID0gY2hhdDRBcHBDb25maWcuZGVidWc7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBhc3luYyBpbml0KHNlY3VyaXR5Q2hhdFRva2VuOiBzdHJpbmcsIGNhbGxiYWNrOiBhbnksIGNoYXRDYWxsYmFjaz86IElDaGF0Q2FsbGJhY2ssIGNvbm5lY3Rpb25DbGllbnRJZD86IHN0cmluZykge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY2hhdFNlcnZlciB8fCB0aGlzLmNoYXRTZXJ2ZXIudHJpbSgpLmxlbmd0aCA9PSAwKXtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVuZHBvaW50IGlzIGVtcHR5XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXNlY3VyaXR5Q2hhdFRva2VuIHx8IHNlY3VyaXR5Q2hhdFRva2VuLnRyaW0oKS5sZW5ndGggPT0gMCl7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTZWN1cml0eUNoYXRUb2tlbiBpcyBlbXB0eVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VG9rZW5DaGF0NGFwcChzZWN1cml0eUNoYXRUb2tlbik7XHJcbiAgXHJcbiAgICAgICAgaWYgKGNoYXRDYWxsYmFjayAmJiBjb25uZWN0aW9uQ2xpZW50SWQpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdFdlYnNvY2tldChjaGF0Q2FsbGJhY2ssIGNvbm5lY3Rpb25DbGllbnRJZCk7XHJcbiAgICAgICAgfSBcclxuICAgICAgICBjYWxsYmFjayhzZWN1cml0eUNoYXRUb2tlbik7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBnZXRDaGF0VXJsRG93bmxvYWQobWVzc2FnZUZpbGVJZDogc3RyaW5nKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL2dldEZpbGU/bWVzc2FnZUZpbGVJZD1cIiArIG1lc3NhZ2VGaWxlSWQgKyBcIiZ0b2tlbj1cIiArIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKTtcclxuICAgIH1cclxuICBcclxuICBcclxuICAgIGdldE1lc3NhZ2VDaGF0KGNoYXRJZDogc3RyaW5nLCBmcm9tSWQ6IHN0cmluZywgdG9JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcnJheTxDaGF0TWVzc2FnZTRBcHA+PiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL1wiICsgY2hhdElkICsgXCIvXCIgKyBmcm9tSWQgKyBcIi9cIiArIHRvSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFycmF5PENoYXRNZXNzYWdlNEFwcD4+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICBcclxuICAgIH1cclxuICAgIGdldE1lc3NhZ2VDaGF0QnlHcm9wKGNoYXRJZDogc3RyaW5nLCBncm91cElkOiBzdHJpbmcsIGZyb21JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcnJheTxDaGF0TWVzc2FnZTRBcHA+PiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL2J5R3JvdXAvXCIgKyBjaGF0SWQgKyBcIi9cIiArIGdyb3VwSWQgKyBcIi9cIiArIGZyb21JZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXJyYXk8Q2hhdE1lc3NhZ2U0QXBwPj4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gIFxyXG4gICAgfVxyXG4gIFxyXG4gIFxyXG4gICAgYWRkTWVzc2FnZUNoYXQoY2hhdE1lc3NhZ2U0QXBwOiBDaGF0TWVzc2FnZTRBcHApOiBPYnNlcnZhYmxlPENoYXRNZXNzYWdlNEFwcD4ge1xyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9cIiArIGNoYXRNZXNzYWdlNEFwcC5jaGF0SWQ7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Q2hhdE1lc3NhZ2U0QXBwPih1cmwsIGNoYXRNZXNzYWdlNEFwcCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICBcclxuICAgIH1cclxuICAgIC8qXHJcbiAgICBwcm9wcyhjaGF0RmlsdGVyUmVxdWVzdDRBcHA6IEFycmF5PENoYXRGaWx0ZXJSZXF1ZXN0NEFwcD4pOiBPYnNlcnZhYmxlPENoYXRVc2VyUmVzcG9uc2U0QXBwW10+IHtcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2UvcHJvcHNcIjtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PENoYXRVc2VyUmVzcG9uc2U0QXBwW10+KHVybCwgY2hhdEZpbHRlclJlcXVlc3Q0QXBwLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gIFxyXG4gICAgfVxyXG4gICAgKi8gICAgXHJcbiAgXHJcbiAgXHJcbiAgICByZW1vdmVVc2Vyc0NoYXQoY2hhdElkOiBzdHJpbmcsIGNoYXRVc2Vyc0lkPzogc3RyaW5nW10sIGNoYXRVc2Vyc0V4dGVybmFsSWQ/OiBzdHJpbmdbXSk6IE9ic2VydmFibGU8Q2hhdFVzZXI0QXBwW10+IHtcclxuICAgICAgbGV0IHBhcmFtcyA9IG5ldyBBcnJheSgpO1xyXG4gICAgICBpZiAoY2hhdFVzZXJzSWQgJiYgY2hhdFVzZXJzSWQubGVuZ3RoID4gMCkge1xyXG4gIFxyXG4gICAgICAgIGNoYXRVc2Vyc0lkLmZvckVhY2goY3VpID0+IHtcclxuICAgICAgICAgIHBhcmFtcy5wdXNoKFwiY2hhdFVzZXJJZD1cIiArIGN1aSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY2hhdFVzZXJzRXh0ZXJuYWxJZCAmJiBjaGF0VXNlcnNFeHRlcm5hbElkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjaGF0VXNlcnNFeHRlcm5hbElkLmZvckVhY2goY3VlaSA9PiB7XHJcbiAgICAgICAgICBwYXJhbXMucHVzaChcImNoYXRVc2VyRXh0ZXJuYWxJZD1cIiArIGN1ZWkpO1xyXG4gICAgICAgIH0pXHJcbiAgXHJcbiAgICAgIH1cclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdHVzZXIvXCIgKyBjaGF0SWQgKyBcIj9cIiArIHBhcmFtcy5qb2luKFwiJlwiKTtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8Q2hhdFVzZXI0QXBwW10+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICBcclxuICAgIHJlbW92ZVVzZXJDaGF0KGNoYXRJZDogc3RyaW5nLCBjaGF0VXNlcklkPzogc3RyaW5nLCBjaGF0VXNlckV4dGVybmFsSWQ/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPENoYXRVc2VyNEFwcD4ge1xyXG4gICAgICBsZXQgcGFyYW0gPSBcIlwiO1xyXG4gICAgICBpZiAoY2hhdFVzZXJJZCkge1xyXG4gICAgICAgIHBhcmFtID0gXCJjaGF0VXNlcklkPVwiICsgY2hhdFVzZXJJZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwYXJhbSA9IFwiY2hhdFVzZXJFeHRlcm5hbElkPVwiICsgY2hhdFVzZXJFeHRlcm5hbElkO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXR1c2VyL1wiICsgY2hhdElkICsgXCI/XCIgKyBwYXJhbTtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8Q2hhdFVzZXI0QXBwPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgXHJcbiAgICB1cGRhdGVVc2VyQ2hhdChjaGF0SWQ6IHN0cmluZywgY2hhclVzZXI0QXBwVXBkYXRlOiBDaGF0VXNlcjRBcHApOiBPYnNlcnZhYmxlPENoYXRVc2VyNEFwcD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0dXNlci9cIiArIGNoYXRJZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8Q2hhdFVzZXI0QXBwPih1cmwsIGNoYXJVc2VyNEFwcFVwZGF0ZSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICBcclxuICBcclxuICAgIGNyZWF0ZVVzZXJDaGF0KGNoYXRJZDogc3RyaW5nLCBjaGF0VXNlcjRBcHA6IENoYXRVc2VyNEFwcCk6IE9ic2VydmFibGU8Q2hhdFVzZXI0QXBwPiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXR1c2VyL1wiICsgY2hhdElkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Q2hhdFVzZXI0QXBwPih1cmwsIGNoYXRVc2VyNEFwcCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICBcclxuICAgIGNyZWF0ZVVzZXJzQ2hhdChjaGF0SWQ6IHN0cmluZywgY2hhdFVzZXI0QXBwOiBDaGF0VXNlcjRBcHBbXSk6IE9ic2VydmFibGU8Q2hhdFVzZXI0QXBwW10+IHtcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdHVzZXIvdXNlcnMvXCIgKyBjaGF0SWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxDaGF0VXNlcjRBcHBbXT4odXJsLCBjaGF0VXNlcjRBcHAsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgXHJcbiAgXHJcbiAgICBjcmVhdGVDaGF0KGNoYXQ0YXBwOiBDaGF0NEFwcCk6IE9ic2VydmFibGU8Q2hhdDRBcHA+IHtcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdFwiO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Q2hhdDRBcHA+KHVybCwgY2hhdDRhcHAsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjcmVhdGVVcGRhdGVDaGF0KGNoYXQ0YXBwOiBDaGF0NEFwcCk6IE9ic2VydmFibGU8Q2hhdDRBcHA+IHtcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdFwiO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxDaGF0NEFwcD4odXJsLCBjaGF0NGFwcCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICBcclxuICAgIC8qXHJcbiAgICBnZXRMYXN0TWVzc2FnZUdyb3VwKGNoYXRFeHRlcm5hbElkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hhdFVzZXJSZXNwb25zZTRBcHA+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2UvbGFzdE1lc3NhZ2VHcm91cD9jaGF0RXh0ZXJuYWxJZD1cIiArIGNoYXRFeHRlcm5hbElkICsgXCImZ3JvdXBJZD1cIiArIGdyb3VwSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENoYXRVc2VyUmVzcG9uc2U0QXBwPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBnZXRMYXN0TWVzc2FnZShjaGF0RXh0ZXJuYWxJZDogc3RyaW5nLCBjaGF0VXNlckV4dGVybmFsSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hhdFVzZXJSZXNwb25zZTRBcHA+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2UvbGFzdE1lc3NhZ2U/Y2hhdEV4dGVybmFsSWQ9XCIgKyBjaGF0RXh0ZXJuYWxJZCArIFwiJmNoYXRVc2VyRXh0ZXJuYWxJZD1cIiArIGNoYXRVc2VyRXh0ZXJuYWxJZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Q2hhdFVzZXJSZXNwb25zZTRBcHA+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgICAgICBcclxuICAgIGNvdW50Tm90UmVhZE1lc3NhZ2VzKGNoYXRVc2VyRXh0ZXJuYWxJZDogc3RyaW5nLCBjaGF0RXh0ZXJuYWxJZD86IHN0cmluZywgZ3JvdXBJZD86IHN0cmluZywgZnJvbUlkPzpzdHJpbmcpOiBPYnNlcnZhYmxlPENoYXRVc2VyUmVzcG9uc2U0QXBwPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL2NvdW50Tm90UmVhZE1lc3NhZ2VzP2NoYXRVc2VyRXh0ZXJuYWxJZD1cIiArIGNoYXRVc2VyRXh0ZXJuYWxJZDtcclxuICBcclxuICAgICAgaWYgKGNoYXRFeHRlcm5hbElkICYmIGNoYXRFeHRlcm5hbElkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB1cmwgKz0gXCImY2hhdEV4dGVybmFsSWQ9XCIgKyBjaGF0RXh0ZXJuYWxJZDtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBpZiAoZ3JvdXBJZCAmJiBncm91cElkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB1cmwgKz0gXCImZ3JvdXBJZD1cIiArIGdyb3VwSWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmcm9tSWQgJiYgZnJvbUlkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB1cmwgKz0gXCImZnJvbUlkPVwiICsgZ3JvdXBJZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Q2hhdFVzZXJSZXNwb25zZTRBcHA+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgICovXHJcbiAgXHJcbiAgICBnZXRDaGF0QnlFeHRlcm5hbElkKGV4dGVybmFsSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hhdDRBcHA+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdD9leHRlcm5hbElkPVwiICsgZXh0ZXJuYWxJZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Q2hhdDRBcHA+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBnZXRDaGF0QnlJZChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGF0NEFwcD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0P2NoYXRJZD1cIiArIGlkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxDaGF0NEFwcD4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGxpc3RDaGF0QnlVc2VyKGV4dGVybmFsVXNlcklkOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nLCBjaGF0U3RhdHVzOiBDaGF0U3RhdHVzNEFwcCApOiBPYnNlcnZhYmxlPEFycmF5PCBDaGF0NEFwcD4+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdC9saXN0Q2hhdEJ5VXNlci8/ZXh0ZXJuYWxVc2VySWQ9XCIgKyBleHRlcm5hbFVzZXJJZCBcclxuICAgICAgKyBcIiZ1c2VySWQ9XCIgKyB1c2VySWRcclxuICAgICAgKyBcIiZjaGF0U3RhdHVzPVwiICsgY2hhdFN0YXR1cztcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXJyYXk8Q2hhdDRBcHA+Pih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VDaGF0KGNoYXRJZDogc3RyaW5nLCBjaGF0RXh0ZXJuYWxJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgO1xyXG5cclxuICAgICAgaWYgKGNoYXRJZCAmJiBjaGF0SWQubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgdXJsKz0gXCJjaGF0P2NoYXRJZD1cIiArIGNoYXRJZDsgXHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGlmIChjaGF0RXh0ZXJuYWxJZCAmJiBjaGF0RXh0ZXJuYWxJZC5sZW5ndGggPiAwKXtcclxuICAgICAgICB1cmwrPSBcImNoYXQ/ZXh0ZXJuYWxJZD1cIiArIGNoYXRFeHRlcm5hbElkOyBcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTx2b2lkPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVhZE1lc3NhZ2UoY2hhdE1lc3NhZ2VJZDogc3RyaW5nLCB0b0lkPzogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL3JlYWQvXCIgKyBjaGF0TWVzc2FnZUlkO1xyXG4gIFxyXG4gICAgICBpZiAodG9JZCAmJiB0b0lkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB1cmwgKz0gXCIvXCIgKyB0b0lkO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PHZvaWQ+KHVybCwgbnVsbCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIG9ubGluZShjaGF0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL29ubGluZS9cIiArIGNoYXRJZCA7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PG51bWJlcj4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgc2V0T2ZmTGluZShjaGF0VXNlckV4dGVybmFsSWRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2Uvc2V0LW9mZmxpbmUvXCIgKyBjaGF0VXNlckV4dGVybmFsSWRJZCA7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PG51bWJlcj4odXJsLCBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZW5kRmlsZShjaGF0SWQ6IHN0cmluZywgZnJvbUlkOiBzdHJpbmcsIHRvSWQ6IHN0cmluZywgZmlsZVRvVXBsb2FkOiBGaWxlKTogT2JzZXJ2YWJsZTxDaGF0TWVzc2FnZUZpbGU0QXBwPiB7XHJcbiAgICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9zZW5kRmlsZS9cIiArIGNoYXRJZCArIFwiL1wiICsgZnJvbUlkICsgXCIvXCIgKyB0b0lkO1xyXG4gIFxyXG4gICAgICBjb25zdCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZVRvVXBsb2FkKTtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAgIC5wb3N0PENoYXRNZXNzYWdlRmlsZTRBcHA+KGVuZHBvaW50LCBmb3JtRGF0YSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBzZW5kRmlsZUdyb3VwKGNoYXRJZDogc3RyaW5nLCBmcm9tSWQ6IHN0cmluZywgZ3JvdXBJZDogc3RyaW5nLCBmaWxlVG9VcGxvYWQ6IEZpbGUpOiBPYnNlcnZhYmxlPENoYXRNZXNzYWdlRmlsZTRBcHA+IHtcclxuICAgICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL3NlbmRGaWxlR3JvdXAvXCIgKyBjaGF0SWQgKyBcIi9cIiArIGZyb21JZCArIFwiL1wiICsgZ3JvdXBJZDtcclxuICBcclxuICAgICAgY29uc3QgZm9ybURhdGE6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGVUb1VwbG9hZCk7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgICAucG9zdDxDaGF0TWVzc2FnZUZpbGU0QXBwPihlbmRwb2ludCwgZm9ybURhdGEsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLypcclxuICAgIHRyYW5zbGF0ZU1lc3NhZ2UoY2hhdE1lc3NhZ2VJZDogc3RyaW5nLCBsYW5ndWFnZVRhcmdldDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGF0NEFwcFRyYW5zbGF0ZT4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS90cmFuc2xhdGUvXCIgKyBjaGF0TWVzc2FnZUlkICsgXCIvXCIgKyBsYW5ndWFnZVRhcmdldDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Q2hhdDRBcHBUcmFuc2xhdGU+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgICovXHJcblxyXG4gICAgc3RhcnRUeXBpbmcoY2hhdElkOiBzdHJpbmcsZnJvbUlkOiBzdHJpbmcsIHRvSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9zdGFydFR5cGluZy9cIiArIGNoYXRJZCArIFwiL1wiICsgZnJvbUlkICsgXCIvXCIgKyB0b0lkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDx2b2lkPih1cmwsIG51bGwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRUeXBpbmdHcm91cChjaGF0SWQ6IHN0cmluZyxmcm9tSWQ6IHN0cmluZywgZ3JvdXBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL3N0YXJ0VHlwaW5nR3JvdXAvXCIgKyBjaGF0SWQgKyBcIi9cIiArIGZyb21JZCArIFwiL1wiICsgZ3JvdXBJZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8dm9pZD4odXJsLCBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgc3RvcFR5cGluZyhjaGF0SWQ6IHN0cmluZyxmcm9tSWQ6IHN0cmluZywgdG9JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL3N0b3BUeXBpbmcvXCIgKyBjaGF0SWQgKyBcIi9cIiArIGZyb21JZCArIFwiL1wiICsgdG9JZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8dm9pZD4odXJsLCBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHN0b3BUeXBpbmdHcm91cChjaGF0SWQ6IHN0cmluZyxmcm9tSWQ6IHN0cmluZywgZ3JvdXBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL3N0b3BUeXBpbmdHcm91cC9cIiArIGNoYXRJZCArIFwiL1wiICsgZnJvbUlkICsgXCIvXCIgKyBncm91cElkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDx2b2lkPih1cmwsIG51bGwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlR3JvdXAoZ3JvdXA6IENoYXRHcm91cEFwcCk6IE9ic2VydmFibGU8Q2hhdEdyb3VwQXBwPiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImdyb3VwXCI7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxDaGF0R3JvdXBBcHA+KHVybCwgZ3JvdXAsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBnZXRHcm91cChjaGF0SWQ6IHN0cmluZywgZ3JvdXBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGF0R3JvdXBBcHA+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiZ3JvdXAvXCIgKyBncm91cElkICsgXCIvXCIgKyBjaGF0SWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENoYXRHcm91cEFwcD4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGxpc3RHcm91cHMoY2hhdElkPzogc3RyaW5nLCBleHRlcm5hbElkPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcnJheTxDaGF0R3JvdXBBcHA+PiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImdyb3VwL1wiIDtcclxuXHJcbiAgICAgIGlmIChjaGF0SWQgJiYgY2hhdElkLmxlbmd0aD4wKSB7XHJcbiAgICAgICAgdXJsICs9IFwiJmNoYXRJZD1cIiArIGNoYXRJZDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXh0ZXJuYWxJZCAmJiBleHRlcm5hbElkLmxlbmd0aD4wKSB7XHJcbiAgICAgICAgdXJsICs9IFwiJmV4dGVybmFsSWQ9XCIgKyBleHRlcm5hbElkO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFycmF5PENoYXRHcm91cEFwcD4+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBsaXN0RmlsZXNHcm91cChjaGF0SWQ6IHN0cmluZywgZ3JvdXBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcnJheTxDaGF0TWVzc2FnZUZpbGU0QXBwPj4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJncm91cC9cIiArIGNoYXRJZCA7XHJcblxyXG4gICAgICBpZiAoZ3JvdXBJZCAmJiBncm91cElkLmxlbmd0aD4wKSB7XHJcbiAgICAgICAgdXJsICs9IFwiJmdyb3VwSWQ9XCIgKyBjaGF0SWQ7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXJyYXk8Q2hhdE1lc3NhZ2VGaWxlNEFwcD4+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBldmVudChldmVudE5hbWU6IHN0cmluZywgY2hhdFVzZXJFeHRlcm5hbElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiZXZlbnQvXCIgKyBldmVudE5hbWUgKyBcIj9jaGF0VXNlckV4dGVybmFsSWQ9XCIgKyBjaGF0VXNlckV4dGVybmFsSWQgO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8dm9pZD4odXJsLCBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KSAgICAgIFxyXG5cclxuICAgIH1cclxuICBcclxuICAgIC8qIFRva2VuICovXHJcbiAgICBnZXRCZWFyZXJUb2tlbigpOiBzdHJpbmcge1xyXG4gIFxyXG4gICAgICBsZXQgcmV0ID0gXCJCZWFyZXIgXCIgKyB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcImNoYXQ0QXBwU2Vzc2lvblRva2VuXCIpO1xyXG4gIFxyXG4gICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG4gIFxyXG4gIFxyXG4gICAgc2V0VG9rZW5DaGF0NGFwcChjaGF0NEFwcFNlc3Npb25Ub2tlbjogc3RyaW5nKSB7XHJcbiAgXHJcbiAgXHJcbiAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwiY2hhdDRBcHBTZXNzaW9uVG9rZW5cIiwgY2hhdDRBcHBTZXNzaW9uVG9rZW4pO1xyXG4gICAgfVxyXG4gIFxyXG4gIFxyXG4gICAgLyogQ29ubmVjdGlvbiAqL1xyXG4gIFxyXG4gICAgb25NZXNzYWdlRmlyZWJhc2VSZWNlaXZlZChkYXRhOiBhbnksIGNoYXRDYWxsYmFjazogSUNoYXRDYWxsYmFjaykge1xyXG4gIFxyXG4gIFxyXG4gICAgICAvL2FsZXJ0KFwib25NZXNzYWdlUmVjZWl2ZWQgY29ubmVjdEZpcmViYXNlXCIpO1xyXG4gIFxyXG4gICAgICBpZiAoZGF0YS50eXBlID09IFwibXNnXCIpIHtcclxuICBcclxuICAgICAgICBsZXQgY2hhdDRhcHBNZXNzYWdlID0gbmV3IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUoKTtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0SWQgPSBkYXRhLmNoYXRJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0TWVzc2FnZUlkID0gZGF0YS5jaGF0TWVzc2FnZUlkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmV4dGVybmFsSWQgPSBkYXRhLmV4dGVybmFsSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZnJvbUlkID0gZGF0YS5mcm9tSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEudG9JZCA9IGRhdGEudG9JZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5ncm91cElkID0gZGF0YS5ncm91cElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmRhdGVIb3VyID0gZGF0YS5kYXRlSG91cjtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS50eXBlID0gZGF0YS50eXBlO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5ub3RpZmljYXRpb24uYm9keSA9IGRhdGEuYm9keTtcclxuICBcclxuICAgICAgICBpZiAoZGF0YS5maWxlSWQgJiYgZGF0YS5maWxlSWQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZmlsZUlkID0gZGF0YS5maWxlSWQ7XHJcbiAgICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5maWxlTmFtZSA9IGRhdGEuZmlsZU5hbWU7XHJcbiAgICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5maWxlU2l6ZSA9IGRhdGEuZmlsZVNpemU7XHJcbiAgICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5maWxlVHlwZSA9IGRhdGEuZmlsZVR5cGU7XHJcbiAgXHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGxldCBkYXRUbXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xyXG4gIFxyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgICBkYXRUbXAuc2V0KGtleSwgZGF0YVtrZXldKTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuYWxsID0gZGF0VG1wO1xyXG4gIFxyXG4gICAgICAgIGNoYXRDYWxsYmFjay5vbk1lc3NhZ2UoY2hhdDRhcHBNZXNzYWdlKTtcclxuICBcclxuICAgICAgfSBlbHNlIGlmICgoZGF0YS50eXBlID09IFwib25cIiB8fCBkYXRhLnR5cGUgPT0gXCJvZmZcIikpIHtcclxuICAgICAgICBsZXQgY2hhdDRhcHBNZXNzYWdlID0gbmV3IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUoKTtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0SWQgPSBkYXRhLmNoYXRJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0TWVzc2FnZUlkID0gZGF0YS5jaGF0TWVzc2FnZUlkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmV4dGVybmFsSWQgPSBkYXRhLmV4dGVybmFsSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZnJvbUlkID0gZGF0YS5mcm9tSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEudG9JZCA9IGRhdGEudG9JZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5ncm91cElkID0gZGF0YS5ncm91cElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmRhdGVIb3VyID0gZGF0YS5kYXRlSG91cjtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS50eXBlID0gZGF0YS50eXBlO1xyXG5cclxuICAgICAgICBsZXQgZGF0VG1wID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuICBcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgZGF0VG1wLnNldChrZXksIGRhdGFba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmFsbCA9IGRhdFRtcDtcclxuICBcclxuICAgICAgICBjaGF0Q2FsbGJhY2sub25PZmZsaW5lKGNoYXQ0YXBwTWVzc2FnZSk7XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PSBcInJlYWRcIiApIHtcclxuICAgICAgICBsZXQgY2hhdDRhcHBNZXNzYWdlID0gbmV3IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUoKTtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0SWQgPSBkYXRhLmNoYXRJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0TWVzc2FnZUlkID0gZGF0YS5jaGF0TWVzc2FnZUlkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmV4dGVybmFsSWQgPSBkYXRhLmV4dGVybmFsSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZnJvbUlkID0gZGF0YS5mcm9tSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEudG9JZCA9IGRhdGEudG9JZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5ncm91cElkID0gZGF0YS5ncm91cElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmRhdGVIb3VyID0gZGF0YS5kYXRlSG91cjtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS50eXBlID0gZGF0YS50eXBlO1xyXG5cclxuICAgICAgICBsZXQgZGF0VG1wID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuICBcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgZGF0VG1wLnNldChrZXksIGRhdGFba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmFsbCA9IGRhdFRtcDtcclxuICBcclxuICAgICAgICBjaGF0Q2FsbGJhY2sub25SZWFkKGNoYXQ0YXBwTWVzc2FnZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09IFwic3RhcnRUeXBpbmdcIiB8fCBkYXRhLnR5cGUgPT0gXCJzdG9wVHlwaW5nXCIgKSB7XHJcbiAgICAgICAgbGV0IGNoYXQ0YXBwTWVzc2FnZSA9IG5ldyBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKCk7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuY2hhdElkID0gZGF0YS5jaGF0SWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuY2hhdE1lc3NhZ2VJZCA9IGRhdGEuY2hhdE1lc3NhZ2VJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5leHRlcm5hbElkID0gZGF0YS5leHRlcm5hbElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmZyb21JZCA9IGRhdGEuZnJvbUlkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLnRvSWQgPSBkYXRhLnRvSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZ3JvdXBJZCA9IGRhdGEuZ3JvdXBJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5kYXRlSG91ciA9IGRhdGEuZGF0ZUhvdXI7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEudHlwZSA9IGRhdGEudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGRhdFRtcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgXHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgIGRhdFRtcC5zZXQoa2V5LCBkYXRhW2tleV0pO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5hbGwgPSBkYXRUbXA7XHJcbiAgXHJcbiAgICAgICAgY2hhdENhbGxiYWNrLm9uU3RhcnRTdG9wVHlwaW5nKGNoYXQ0YXBwTWVzc2FnZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09IFwibmV3X3VzZXJcIiAgKSB7XHJcbiAgICAgICAgbGV0IGNoYXQ0YXBwTWVzc2FnZSA9IG5ldyBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKCk7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuY2hhdElkID0gZGF0YS5jaGF0SWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuY2hhdE1lc3NhZ2VJZCA9IGRhdGEuY2hhdE1lc3NhZ2VJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5leHRlcm5hbElkID0gZGF0YS5leHRlcm5hbElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmZyb21JZCA9IGRhdGEuZnJvbUlkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLnRvSWQgPSBkYXRhLnRvSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZ3JvdXBJZCA9IGRhdGEuZ3JvdXBJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5kYXRlSG91ciA9IGRhdGEuZGF0ZUhvdXI7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEudHlwZSA9IGRhdGEudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGRhdFRtcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgXHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgIGRhdFRtcC5zZXQoa2V5LCBkYXRhW2tleV0pO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5hbGwgPSBkYXRUbXA7XHJcbiAgXHJcbiAgICAgICAgY2hhdENhbGxiYWNrLm9uTmV3VXNlcihjaGF0NGFwcE1lc3NhZ2UpO1xyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PSBcInJlbW92ZV91c2VyXCIgICkge1xyXG4gICAgICAgIGxldCBjaGF0NGFwcE1lc3NhZ2UgPSBuZXcgQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSgpO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmNoYXRJZCA9IGRhdGEuY2hhdElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmNoYXRNZXNzYWdlSWQgPSBkYXRhLmNoYXRNZXNzYWdlSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZXh0ZXJuYWxJZCA9IGRhdGEuZXh0ZXJuYWxJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5mcm9tSWQgPSBkYXRhLmZyb21JZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS50b0lkID0gZGF0YS50b0lkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmdyb3VwSWQgPSBkYXRhLmdyb3VwSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZGF0ZUhvdXIgPSBkYXRhLmRhdGVIb3VyO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLnR5cGUgPSBkYXRhLnR5cGU7XHJcblxyXG4gICAgICAgIGxldCBkYXRUbXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xyXG4gIFxyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgICBkYXRUbXAuc2V0KGtleSwgZGF0YVtrZXldKTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuYWxsID0gZGF0VG1wO1xyXG4gIFxyXG4gICAgICAgIGNoYXRDYWxsYmFjay5vblJlbW92ZVVzZXIoY2hhdDRhcHBNZXNzYWdlKTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT0gXCJjaGF0X2Nsb3NlZFwiICApIHtcclxuICAgICAgICBsZXQgY2hhdDRhcHBNZXNzYWdlID0gbmV3IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUoKTtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0SWQgPSBkYXRhLmNoYXRJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5jaGF0TWVzc2FnZUlkID0gZGF0YS5jaGF0TWVzc2FnZUlkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmV4dGVybmFsSWQgPSBkYXRhLmV4dGVybmFsSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZnJvbUlkID0gZGF0YS5mcm9tSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEudG9JZCA9IGRhdGEudG9JZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5ncm91cElkID0gZGF0YS5ncm91cElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmRhdGVIb3VyID0gZGF0YS5kYXRlSG91cjtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS50eXBlID0gZGF0YS50eXBlO1xyXG5cclxuICAgICAgICBsZXQgZGF0VG1wID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuICBcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgZGF0VG1wLnNldChrZXksIGRhdGFba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmFsbCA9IGRhdFRtcDtcclxuICBcclxuICAgICAgICBjaGF0Q2FsbGJhY2sub25DaGF0Q2xvc2VkKGNoYXQ0YXBwTWVzc2FnZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09IFwiY291bnRfbm90cmVhZFwiICApIHtcclxuXHJcbiAgICAgICAgbGV0IGNoYXQ0YXBwTWVzc2FnZSA9IG5ldyBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKCk7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuY2hhdElkID0gZGF0YS5jaGF0SWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuY2hhdE1lc3NhZ2VJZCA9IGRhdGEuY2hhdE1lc3NhZ2VJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5leHRlcm5hbElkID0gZGF0YS5leHRlcm5hbElkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLmZyb21JZCA9IGRhdGEuZnJvbUlkO1xyXG4gICAgICAgIGNoYXQ0YXBwTWVzc2FnZS5kYXRhLnRvSWQgPSBkYXRhLnRvSWQ7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEuZ3JvdXBJZCA9IGRhdGEuZ3JvdXBJZDtcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5kYXRlSG91ciA9IGRhdGEuZGF0ZUhvdXI7XHJcbiAgICAgICAgY2hhdDRhcHBNZXNzYWdlLmRhdGEudHlwZSA9IGRhdGEudHlwZTtcclxuXHJcbiAgICAgICAgbGV0IGRhdFRtcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgXHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgIGRhdFRtcC5zZXQoa2V5LCBkYXRhW2tleV0pO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBjaGF0NGFwcE1lc3NhZ2UuZGF0YS5hbGwgPSBkYXRUbXA7XHJcbiAgXHJcbiAgICAgICAgY2hhdENhbGxiYWNrLm9uQ291bnROb3RSZWFkKGNoYXQ0YXBwTWVzc2FnZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5zdXJlQ29ubihjaGF0VXNlckV4dGVybmFsSWQ6IHN0cmluZywgZm9yY2VSZWNvbm5lY3ROYXRzPzogYm9vbGVhbikge1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgY2hhdFNlcnZlcjogJHt0aGlzLmNoYXRTZXJ2ZXJ9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYHVzZXJJZDogJHtjaGF0VXNlckV4dGVybmFsSWR9YCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYGdldEJlYXJlclRva2VuOiAkeyB0aGlzLmdldEJlYXJlclRva2VuKCl9YCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xyXG5cclxuICAgICAgbGV0IHVyaVN0ZXAxOiBzdHJpbmcgPSB0aGlzLmNoYXRTZXJ2ZXIucmVwbGFjZSgvXmh0dHBzLywgJ3dzcycpO1xyXG5cclxuICAgICAgbGV0IHNlcnZlcjogc3RyaW5nID0gdXJpU3RlcDEucmVwbGFjZSgvKFxcL1xcLy4qPylcXC8vLCAnJDFcXC93cy8nKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRlYnVnKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYHdzIHNlcnZlcjogJHtzZXJ2ZXJ9YCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmb3JjZVJlY29ubmVjdE5hdHMgfHwgIXRoaXMubmMgfHwgKHRoaXMubmMuaXNDbG9zZSAmJiB0aGlzLm5jLmlzQ2xvc2UoKSkpIHtcclxuXHJcbiAgICAgICAgYXdhaXQgdGhhdC5kaXNjb25uZWN0SW50ZXJuYWwodHJ1ZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhhdC5uYyA9IGF3YWl0IE5BVFMuY29ubmVjdCh7IHVybDogc2VydmVyLCB1c2VyOiBjaGF0VXNlckV4dGVybmFsSWQsIHBhc3M6IHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSwgcmVjb25uZWN0OiBmYWxzZX0pO1xyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jaGF0VXNlckV4dGVybmFsSWQgPSBjaGF0VXNlckV4dGVybmFsSWQ7XHJcblxyXG4gICAgICByZXR1cm4gdGhhdC5uYztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkaXNjb25uZWN0KCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5kaXNjb25uZWN0SW50ZXJuYWwoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc2Nvbm5lY3RJbnRlcm5hbChpZ25vcmVPZmZMaW5lOiBib29sZWFuKSB7XHJcblxyXG4gICAgICAvLyBDaGVjayBob3cgd2UgY2FuIGRpc2Nvbm5lY3RcclxuXHJcbiAgICAgIGlmICh0aGlzLmludGVydmFsKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWlnbm9yZU9mZkxpbmUgJiYgdGhpcy5uYyAmJiB0aGlzLmNoYXRVc2VyRXh0ZXJuYWxJZCAmJiB0aGlzLmNoYXRVc2VyRXh0ZXJuYWxJZC5sZW5ndGggPiAwICYmIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSAmJiB0aGlzLmdldEJlYXJlclRva2VuKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBhd2FpdCBsYXN0VmFsdWVGcm9tKHRoaXMuc2V0T2ZmTGluZSh0aGlzLmNoYXRVc2VyRXh0ZXJuYWxJZCkpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUubG9nKFwiaGFkIHNldCBvZmZsaW5lXCIpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmVycm9yKFwiRXJybyBhbyBzZXRhciBvZmZsaW5lXCIsIGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm5jKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMubmMuY2xvc2UoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kZWJ1Zyl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubmMgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmRlYnVnKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImRpc2NvbmVjdFwiKVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHByb2Nlc3NBbmRDYWxsYmFjayhtc2dPYmo6IGFueSwgY2hhdENhbGxiYWNrOiBJQ2hhdENhbGxiYWNrKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRlYnVnICYmIG1zZ09iaikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJNc2cgUmVjZWl2ZWQ6IFwiICsgSlNPTi5zdHJpbmdpZnkobXNnT2JqKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vaWYgKCFjaGF0Q2FsbGJhY2suaXNUb2tlbkZpcmViYXNlQWN0aXZlKCkpIHtcclxuXHJcbiAgICAgICAgICBsZXQgZGF0VG1wID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gbXNnT2JqLmRhdGEpIHtcclxuICAgICAgICAgICAgZGF0VG1wLnNldChrZXksIG1zZ09iai5kYXRhW2tleV0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIG1zZ09iai5kYXRhLmFsbCA9IGRhdFRtcDtcclxuXHJcbiAgICAgICAgICBpZiAobXNnT2JqLmRhdGEudHlwZSA9PSBcIm1zZ1wiKSB7XHJcbiAgICAgICAgICAgIGNoYXRDYWxsYmFjay5vbk1lc3NhZ2UobXNnT2JqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJvblwiIHx8IG1zZ09iai5kYXRhLnR5cGUgPT0gXCJvZmZcIikpIHtcclxuICAgICAgICAgICAgY2hhdENhbGxiYWNrLm9uT2ZmbGluZShtc2dPYmopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtc2dPYmouZGF0YS50eXBlID09IFwicmVhZFwiICkge1xyXG4gICAgICAgICAgICBjaGF0Q2FsbGJhY2sub25SZWFkKG1zZ09iaik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJzdGFydFR5cGluZ1wiIHx8ICBtc2dPYmouZGF0YS50eXBlID09IFwic3RvcFR5cGluZ1wiKSB7XHJcbiAgICAgICAgICAgIGNoYXRDYWxsYmFjay5vblN0YXJ0U3RvcFR5cGluZyhtc2dPYmopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtc2dPYmouZGF0YS50eXBlID09IFwibmV3X3VzZXJcIikge1xyXG4gICAgICAgICAgICBjaGF0Q2FsbGJhY2sub25OZXdVc2VyKG1zZ09iaik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJyZW1vdmVfdXNlclwiKSB7XHJcbiAgICAgICAgICAgIGNoYXRDYWxsYmFjay5vblJlbW92ZVVzZXIobXNnT2JqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAobXNnT2JqLmRhdGEudHlwZSA9PSBcImNoYXRfY2xvc2VkXCIpIHtcclxuICAgICAgICAgICAgY2hhdENhbGxiYWNrLm9uQ2hhdENsb3NlZChtc2dPYmopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtc2dPYmouZGF0YS50eXBlID09IFwiY291bnRfbm90cmVhZFwiKSB7XHJcbiAgICAgICAgICAgIGNoYXRDYWxsYmFjay5vbkNvdW50Tm90UmVhZChtc2dPYmopO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAvL31cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY29ubmVjdFdlYnNvY2tldChjaGF0Q2FsbGJhY2s6IElDaGF0Q2FsbGJhY2ssIHVzZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xyXG4gICAgICB0aGlzLmRpc2Nvbm5lY3RJbnRlcm5hbCh0cnVlKTtcclxuICBcclxuICAgICAgbGV0IHNlY3VyaXR5VG9rZW4gPSB0aGlzLmdldEJlYXJlclRva2VuKCk7XHJcblxyXG4gICAgICBsZXQgdG9rZW5BdXRoID0gXCJcIjtcclxuXHJcbiAgICAgIGlmIChzZWN1cml0eVRva2VuICYmIHNlY3VyaXR5VG9rZW4uc3RhcnRzV2l0aChcIkJlYXJlciBcIikpe1xyXG4gICAgICAgIHRva2VuQXV0aCA9IHNlY3VyaXR5VG9rZW47XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdG9rZW5BdXRoID0gXCJCZWFyZXIgXCIgKyBzZWN1cml0eVRva2VuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjb25maWdJZCA9IHRoaXMuY2hhdFNlcnZlci5zcGxpdChcIi9cIilbM107XHJcblxyXG4gICAgICBjb25zdCBuYyA9IGF3YWl0IHRoaXMuZW5zdXJlQ29ubih1c2VySWQpO1xyXG5cclxuICAgICAgLy9UT0RPIEdldCB0aGUgdXNlciBpZCBmcm9tIGp3dFxyXG4gICAgICBjb25zdCBzdWJqZWN0ID0gYGNoYXQ0YXBwLmNvbmZpZy4ke2NvbmZpZ0lkfS51c2VyLiR7dXNlcklkfWA7IFxyXG5cclxuICAgICAgY29uc3Qgc3ViID0gbmMuc3Vic2NyaWJlKHN1YmplY3QsIChtc2cpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2cobXNnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucHJvY2Vzc0FuZENhbGxiYWNrKEpTT04ucGFyc2UobXNnLmRhdGEpLCBjaGF0Q2FsbGJhY2spICA7XHJcbiAgICAgICAgXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaW50ZXJ2YWwpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICB0aGF0LmludGVydmFsID0gc2V0SW50ZXJ2YWwoKCk9PntcclxuICAgICAgICBpZiAodGhhdC5kZWJ1Zykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coYHB1Ymxpc2ggY2hhdDRhcHAudXNlci5vbmxpbmUgJHt1c2VySWR9IGApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhhdC5uYy5wdWJsaXNoKGBjaGF0NGFwcC51c2VyLm9ubGluZWAsIHVzZXJJZCkgO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidHJ5IHJlY29ubmVjdC4uLlwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZW5zdXJlQ29ubih1c2VySWQsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgfSwxMDAwKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRlYnVnKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYFN1YnNjcmliZSBvbmxpbmUgY2hhdDRhcHAudXNlci4ke3VzZXJJZH0ub25saW5lYCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8qXHJcbiAgICBkaXNjb25uZWN0KCkge1xyXG4vLyAgICAgIGNvbnNvbGUubG9nKFwiZGlzY29ubmVjdFwiKVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmICh0aGlzLnN0b21wQ2xpZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnN0b21wQ2xpZW50LmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgKi9cclxuXHJcbiAgICBjb252ZXJ0Q2hhdDRBcHBNZXNzYWdlUmVjZWl2ZVRvQ2hhdE1lc3NhZ2U0QXBwKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IENoYXRNZXNzYWdlNEFwcHtcclxuICAgICAgbGV0IG1lc3NhZ2UgPSBuZXcgQ2hhdE1lc3NhZ2U0QXBwKCk7XHJcbiAgICAgIG1lc3NhZ2UuYm9keSA9IG1zZz8ubm90aWZpY2F0aW9uPy5ib2R5O1xyXG4gICAgICBtZXNzYWdlLmNoYXRJZCA9IG1zZy5kYXRhLmNoYXRJZDtcclxuICAgICAgbWVzc2FnZS5mcm9tSWQgPSBtc2cuZGF0YS5mcm9tSWQ7XHJcbiAgICAgIG1lc3NhZ2UudG9JZCA9IG1zZy5kYXRhLnRvSWQ7XHJcbiAgICAgIG1lc3NhZ2UuZ3JvdXBJZCA9IG1zZy5kYXRhLmdyb3VwSWQ7XHJcbiAgICAgIG1lc3NhZ2UucmVwbHlGcm9tID0gbXNnLmRhdGEucmVwbHlGcm9tO1xyXG4gICAgICBpZiAobXNnLmRhdGEuZGF0ZUhvdXIgJiYgbXNnLmRhdGEuZGF0ZUhvdXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIG1lc3NhZ2UuZGF0ZUhvdXJJbmNsdWRlZCA9IG1zZy5kYXRhLmRhdGVIb3VyLnN1YnN0cmluZyg2LDEwKSArIFwiLVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1zZy5kYXRhLmRhdGVIb3VyLnN1YnN0cmluZygzLDUpICsgXCItXCIgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1zZy5kYXRhLmRhdGVIb3VyLnN1YnN0cmluZygwLDIpIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1zZy5kYXRhLmRhdGVIb3VyLnN1YnN0cmluZygxMCkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcclxuICAgICAgfVxyXG4gICAgICBtZXNzYWdlLmlkID0gbXNnLmRhdGEuY2hhdE1lc3NhZ2VJZDtcclxuXHJcbiAgICAgIGlmIChtc2cuZGF0YS5maWxlSWQgJiYgbXNnLmRhdGEuZmlsZUlkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBsZXQgbWVzc2FnZUZpbGUgPSBuZXcgQ2hhdE1lc3NhZ2VGaWxlNEFwcCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIG1lc3NhZ2VGaWxlLmlkID0gbXNnLmRhdGEuZmlsZUlkO1xyXG4gICAgICAgIG1lc3NhZ2VGaWxlLm5hbWUgPSBtc2cuZGF0YS5maWxlTmFtZTtcclxuICAgICAgICBtZXNzYWdlRmlsZS5zaXplID0gbXNnLmRhdGEuZmlsZVNpemU7XHJcbiAgICAgICAgbWVzc2FnZUZpbGUudHlwZSA9IG1zZy5kYXRhLmZpbGVUeXBlO1xyXG5cclxuICAgICAgICBtZXNzYWdlLmNoYXRNZXNzYWdlRmlsZSA9IG1lc3NhZ2VGaWxlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobXNnLmRhdGEudkZpbGVJZCAmJiBtc2cuZGF0YS52RmlsZUlkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBsZXQgbWVzc2FnZUZpbGUgPSBuZXcgQ2hhdE1lc3NhZ2VGaWxlNEFwcCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIG1lc3NhZ2VGaWxlLmlkID0gbXNnLmRhdGEudkZpbGVJZDtcclxuICAgICAgICBtZXNzYWdlRmlsZS5uYW1lID0gbXNnLmRhdGEudkZpbGVOYW1lO1xyXG4gICAgICAgIG1lc3NhZ2VGaWxlLnNpemUgPSBtc2cuZGF0YS52RmlsZVNpemU7XHJcbiAgICAgICAgbWVzc2FnZUZpbGUudHlwZSA9IG1zZy5kYXRhLnZGaWxlVHlwZTtcclxuXHJcbiAgICAgICAgbWVzc2FnZS5jaGF0Vm9pY2VGaWxlID0gbWVzc2FnZUZpbGU7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICByZXR1cm4gbWVzc2FnZTtcclxuXHJcbiAgICB9XHJcbiAgXHJcbiAgfVxyXG4gIFxyXG4gIFxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0NEFwcCB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgY29uZmlnSWQ6IHN0cmluZztcclxuICAgIGV4dGVybmFsSWQ6IHN0cmluZztcclxuICAgIHRpdGxlOiBzdHJpbmc7XHJcbiAgICBzdGF0dXM6IENoYXRTdGF0dXM0QXBwO1xyXG4gICAgdXNlcnM6IEFycmF5PENoYXRVc2VyNEFwcD47XHJcblxyXG4gICAgbWV0YTogQXJyYXk8Q2hhdE1lc3NhZ2VNZXRhNEFwcD47XHJcbiAgXHJcbiAgfVxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0VXNlcjRBcHAge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGNsaWVudFRva2VuOiBzdHJpbmc7XHJcbiAgICBwaWN0dXJlUGF0aDogc3RyaW5nO1xyXG4gICAgZW1haWw6IHN0cmluZztcclxuICAgIHBob25lTnVtYmVyOiBzdHJpbmc7XHJcbiAgICBleHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICBtZXRhOiBBcnJheTxDaGF0TWVzc2FnZU1ldGE0QXBwPjtcclxuICAgIHN0YXR1czogQ2hhdFVzZXJTdGF0dXM0QXBwO1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdE1lc3NhZ2U0QXBwIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBmcm9tSWQ6IHN0cmluZztcclxuICAgIHRvSWQ6IHN0cmluZztcclxuICAgIGNoYXRJZDogc3RyaW5nO1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIGJvZHk6IHN0cmluZztcclxuICAgIG1ldGE6IEFycmF5PENoYXRNZXNzYWdlTWV0YTRBcHA+O1xyXG4gICAgZ3JvdXBJZDogc3RyaW5nO1xyXG4gICAgcmVhZDogQm9vbGVhbjtcclxuICAgIHJlcGx5RnJvbTogc3RyaW5nO1xyXG4gICAgZGF0ZUhvdXJJbmNsdWRlZDogc3RyaW5nO1xyXG4gICAgZ1RvSWRSZWFkOiBzdHJpbmdbXTtcclxuICAgIGNoYXRNZXNzYWdlRmlsZTogQ2hhdE1lc3NhZ2VGaWxlNEFwcDtcclxuICAgIGNoYXRWb2ljZUZpbGU6IENoYXRNZXNzYWdlRmlsZTRBcHA7XHJcbiAgfVxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0TWVzc2FnZUZpbGU0QXBwIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICBzaXplOiBudW1iZXI7XHJcbiAgICBmdWxsUGF0aDogc3RyaW5nO1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdE1lc3NhZ2VNZXRhNEFwcCB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogc3RyaW5nO1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSB7XHJcbiAgICBkYXRhOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlRGF0YSA9IG5ldyBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlRGF0YSgpO1xyXG4gICAgbm90aWZpY2F0aW9uOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlTm90aWZpY2F0aW9uID0gbmV3IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmVOb3RpZmljYXRpb24oKTtcclxuICAgIHRva2VuOiBzdHJpbmc7XHJcbiAgfVxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlRGF0YSB7XHJcbiAgICB0b0lkOiBzdHJpbmc7XHJcbiAgICBjaGF0SWQ6IHN0cmluZztcclxuICAgIGRhdGVIb3VyOiBzdHJpbmc7XHJcbiAgICBjaGF0TWVzc2FnZUlkOiBzdHJpbmc7XHJcbiAgICBleHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICBmcm9tSWQ6IHN0cmluZztcclxuICAgIHJlcGx5RnJvbTogc3RyaW5nO1xyXG4gICAgZ3JvdXBJZDogc3RyaW5nO1xyXG4gICAgZmlsZUlkOiBzdHJpbmc7XHJcbiAgICBmaWxlTmFtZTogc3RyaW5nO1xyXG4gICAgZmlsZVNpemU6IG51bWJlcjtcclxuICAgIGZpbGVUeXBlOiBzdHJpbmc7XHJcbiAgICB2RmlsZUlkOiBzdHJpbmc7XHJcbiAgICB2RmlsZU5hbWU6IHN0cmluZztcclxuICAgIHZGaWxlU2l6ZTogbnVtYmVyO1xyXG4gICAgdkZpbGVUeXBlOiBzdHJpbmc7XHJcblxyXG4gICAgYWxsOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZU5vdGlmaWNhdGlvbiB7XHJcbiAgICBib2R5OiBzdHJpbmc7XHJcbiAgfVxyXG4gIFxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0VXNlclJlc3BvbnNlNEFwcCB7XHJcbiAgICB0b3RhbE1lc3NhZ2VzOiBudW1iZXI7XHJcbiAgICBjaGF0OiBDaGF0NEFwcDtcclxuICAgIGNoYXRNZXNzYWdlOiBDaGF0TWVzc2FnZTRBcHA7XHJcbiAgICBjaGF0czogQ2hhdFVzZXJSZXNwb25zZTRBcHBbXTtcclxuICB9XHJcbiAgZXhwb3J0IGNsYXNzIENoYXRGaWx0ZXJSZXF1ZXN0NEFwcCB7XHJcbiAgICB0eXBlOiBDaGF0RmlsdGVyVHlwZTtcclxuICAgIGNoYXRFeHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICBjaGF0VXNlckV4dGVybmFsSWQ6IHN0cmluZztcclxuICAgIGNoYXRVc2VyRXh0ZXJuYWxUb0lkOiBzdHJpbmc7XHJcbiAgICBncm91cElkOiBzdHJpbmc7XHJcbiAgICBmcm9tSWQ6IHN0cmluZztcclxuICB9XHJcbiAgZXhwb3J0IGNsYXNzIENoYXQ0QXBwQ29uZmlnIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbmRwb2ludDogc3RyaW5nLCBwdWJsaWMgZGVidWc/OiBib29sZWFuKSB7XHJcbiAgICAgIFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGNsYXNzIENoYXQ0QXBwVHJhbnNsYXRlIHtcclxuICAgIHRleHQ6IHN0cmluZztcclxuICAgIHRyYW5zbGF0ZWRUZXh0OiBzdHJpbmc7XHJcbiAgICBvcmlnaW5hbFNvdXJjZUxhbmd1YWdlQ29kZTogc3RyaW5nO1xyXG4gICAgc291cmNlTGFuZ3VhZ2VDb2RlOiBzdHJpbmc7XHJcbiAgICB0YXJnZXRMYW5ndWFnZUNvZGU6IHN0cmluZztcclxuICAgIG1lc3NhZ2VJZDogc3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGNsYXNzIENoYXRHcm91cEFwcCB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgY2hhdElkOiBzdHJpbmc7XHJcbiAgICBleHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIHVzZXJzOiBBcnJheTxzdHJpbmc+O1xyXG4gICAgZmlsZXM6IEFycmF5PENoYXRNZXNzYWdlRmlsZTRBcHA+O1xyXG4gICAgbWV0YTogQXJyYXk8Q2hhdE1lc3NhZ2VNZXRhNEFwcD47XHJcbiAgICBzdGF0dXM6IEdyb3VwU3RhdHVzNEFwcDtcclxuICB9XHJcblxyXG4gIFxyXG4gIGV4cG9ydCBlbnVtIENoYXRTdGF0dXM0QXBwIHtcclxuICAgIENSRUFURUQgPSBcIkNSRUFURURcIixcclxuICAgIENMT1NFRCA9IFwiQ0xPU0VEXCJcclxuICBcclxuICB9XHJcbiAgZXhwb3J0IGVudW0gQ2hhdFVzZXJTdGF0dXM0QXBwIHtcclxuICAgIFJFTU9WRUQgPSBcIlJFTU9WRURcIlxyXG4gIFxyXG4gIH1cclxuICBleHBvcnQgZW51bSBDaGF0RmlsdGVyVHlwZSB7XHJcbiAgICBDT1VOVF9OT1RfUkVBRCA9IDEsXHJcbiAgICBMQVNUX01FU1NBR0UgPSAyXHJcbiAgfVxyXG5cclxuICBleHBvcnQgZW51bSBHcm91cFN0YXR1czRBcHAge1xyXG4gICAgQ1JFQVRFRCA9IFwiQ1JFQVRFRFwiLFxyXG4gICAgQ0xPU0VEID0gXCJSRU1PVkVEXCJcclxuICB9XHJcblxyXG4gIFxyXG4gIGV4cG9ydCBpbnRlcmZhY2UgSUNoYXRDYWxsYmFjayB7XHJcbiAgICBpc1Rva2VuRmlyZWJhc2VBY3RpdmUoKTogQm9vbGVhbjtcclxuICAgIG9uTWVzc2FnZShtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiB2b2lkO1xyXG4gICAgb25PZmZsaW5lKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IHZvaWQ7XHJcbiAgICBvblJlYWQobXNnOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKTogdm9pZDtcclxuICAgIG9uU3RhcnRTdG9wVHlwaW5nKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IHZvaWQ7XHJcbiAgICBvbk5ld1VzZXIobXNnOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKTogdm9pZDtcclxuICAgIG9uUmVtb3ZlVXNlcihtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiB2b2lkO1xyXG4gICAgb25DaGF0Q2xvc2VkKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IHZvaWQ7XHJcbiAgICBvbkNvdW50Tm90UmVhZChtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiB2b2lkO1xyXG4gIH1cclxuICAiXX0=
|
|
579
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdDRhcHAtY2xpZW50LWFuZ3VsYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQ0YXBwLWNsaWVudC1hbmd1bGFyL3NyYy9saWIvY2hhdDRhcHAtY2xpZW50LWFuZ3VsYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQzs7O0FBR3RDLDRCQUE0QjtBQUs1QixNQUFNLE9BQU8sNEJBQTRCO0lBZ0JyQyxZQUFxQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBWnJDLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLFVBQUssR0FBRyxLQUFLLENBQUM7UUFDZCx1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDeEIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUlkLHFCQUFnQixHQUFHLEdBQUcsQ0FBQztJQU12QixDQUFDO0lBQ0QsUUFBUTtJQUNSLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBOEI7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUU7UUFDckQsSUFBSSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFJLENBQUMsaUJBQXlCLEVBQUUsWUFBNEIsRUFBRSxrQkFBMkI7UUFFdkYsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ2pDLElBQUk7Z0JBQ0YseUJBQXlCO2dCQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQzNELFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO29CQUNqRCxPQUFPO2lCQUNSO2dCQUNELElBQUksQ0FBQyxpQkFBaUIsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUMvRCxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQztvQkFDMUQsT0FBTztpQkFDUjtnQkFFRCx1QkFBdUI7Z0JBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUV6QyxJQUFJLFlBQVksSUFBSSxrQkFBa0IsRUFBRTtvQkFDdEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO29CQUM3QyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztvQkFDakMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7aUJBQ3pCO2dCQUVELHNDQUFzQztnQkFDdEMsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNuQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7YUFFdkI7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFDWix1RUFBdUU7Z0JBQ3ZFLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdkI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUVQLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxhQUFxQjtRQUN0QyxPQUFPLElBQUksQ0FBQyxPQUFPLEdBQUcsb0NBQW9DLEdBQUcsYUFBYSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDakgsQ0FBQztJQUdELGNBQWMsQ0FBQyxNQUFjLEVBQUUsTUFBYyxFQUFFLElBQVk7UUFDekQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxjQUFjLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztRQUU3RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF5QixHQUFHLEVBQzlDO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBRU4sQ0FBQztJQUNELG9CQUFvQixDQUFDLE1BQWMsRUFBRSxPQUFlLEVBQUUsTUFBYztRQUNsRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLHNCQUFzQixHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsT0FBTyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7UUFFeEYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBeUIsR0FBRyxFQUM5QztZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtJQUVOLENBQUM7SUFHRCxjQUFjLENBQUMsZUFBZ0M7UUFDN0MsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxjQUFjLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQztRQUVqRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFrQixHQUFHLEVBQUUsZUFBZSxFQUN6RDtZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtJQUVOLENBQUM7SUFDRDs7Ozs7Ozs7OztNQVVFO0lBR0YsZUFBZSxDQUFDLE1BQWMsRUFBRSxXQUFzQixFQUFFLG1CQUE4QjtRQUNwRixJQUFJLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBRXpDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTSxJQUFJLG1CQUFtQixJQUFJLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDaEUsbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUFBO1NBRUg7UUFFRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVcsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdkUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBaUIsR0FBRyxFQUN6QztZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBYyxFQUFFLFVBQW1CLEVBQUUsa0JBQTJCO1FBQzdFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksVUFBVSxFQUFFO1lBQ2QsS0FBSyxHQUFHLGFBQWEsR0FBRyxVQUFVLENBQUM7U0FDcEM7YUFBTTtZQUNMLEtBQUssR0FBRyxxQkFBcUIsR0FBRyxrQkFBa0IsQ0FBQztTQUNwRDtRQUVELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsV0FBVyxHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBRTVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQWUsR0FBRyxFQUN2QztZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBYyxFQUFFLGtCQUFnQztRQUU3RCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVcsR0FBRyxNQUFNLENBQUM7UUFFOUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBZSxHQUFHLEVBQUUsa0JBQWtCLEVBQ3hEO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUdELGNBQWMsQ0FBQyxNQUFjLEVBQUUsWUFBMEI7UUFDdkQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLEdBQUcsTUFBTSxDQUFDO1FBRTlDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQWUsR0FBRyxFQUFFLFlBQVksRUFDbkQ7WUFDRSxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2RSxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQWMsRUFBRSxZQUE0QjtRQUMxRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLGlCQUFpQixHQUFHLE1BQU0sQ0FBQztRQUVwRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFpQixHQUFHLEVBQUUsWUFBWSxFQUNyRDtZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFHRCxVQUFVLENBQUMsUUFBa0I7UUFDM0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFFaEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBVyxHQUFHLEVBQUUsUUFBUSxFQUMzQztZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxRQUFrQjtRQUNqQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUVoQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFXLEdBQUcsRUFBRSxRQUFRLEVBQzFDO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQXlDRTtJQUVGLG1CQUFtQixDQUFDLFVBQWtCO1FBRXBDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsa0JBQWtCLEdBQUcsVUFBVSxDQUFDO1FBRXpELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVcsR0FBRyxFQUNoQztZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxXQUFXLENBQUMsRUFBVTtRQUVwQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFFN0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBVyxHQUFHLEVBQ2hDO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELGNBQWMsQ0FBQyxjQUFzQixFQUFFLE1BQWMsRUFBRSxVQUEwQjtRQUUvRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLHNDQUFzQyxHQUFHLGNBQWM7Y0FDOUUsVUFBVSxHQUFHLE1BQU07Y0FDbkIsY0FBYyxHQUFHLFVBQVUsQ0FBQztRQUU5QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFrQixHQUFHLEVBQ3ZDO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFjLEVBQUUsY0FBc0I7UUFFOUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBRTtRQUV4QixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztZQUM5QixHQUFHLElBQUcsY0FBYyxHQUFHLE1BQU0sQ0FBQztTQUMvQjtRQUVELElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO1lBQzlDLEdBQUcsSUFBRyxrQkFBa0IsR0FBRyxjQUFjLENBQUM7U0FDM0M7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFPLEdBQUcsRUFDL0I7WUFDRSxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2RSxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsV0FBVyxDQUFDLGFBQXFCLEVBQUUsSUFBYTtRQUU5QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLG1CQUFtQixHQUFHLGFBQWEsQ0FBQztRQUU3RCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzQixHQUFHLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQztTQUNuQjtRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQU8sR0FBRyxFQUFFLElBQUksRUFDbEM7WUFDRSxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2RSxDQUFDLENBQUE7SUFDTixDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQWM7UUFFbkIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxxQkFBcUIsR0FBRyxNQUFNLENBQUU7UUFFekQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBUyxHQUFHLEVBQzlCO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUNELFVBQVUsQ0FBQyxvQkFBNEI7UUFFckMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRywwQkFBMEIsR0FBRyxvQkFBb0IsQ0FBRTtRQUU1RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFTLEdBQUcsRUFBRSxJQUFJLEVBQ3BDO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUdELFFBQVEsQ0FBQyxNQUFjLEVBQUUsTUFBYyxFQUFFLElBQVksRUFBRSxZQUFrQjtRQUN2RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLHVCQUF1QixHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7UUFFN0YsTUFBTSxRQUFRLEdBQWEsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUMxQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUV0QyxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUFzQixRQUFRLEVBQUUsUUFBUSxFQUMzQztZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQztJQUNULENBQUM7SUFFRCxhQUFhLENBQUMsTUFBYyxFQUFFLE1BQWMsRUFBRSxPQUFlLEVBQUUsWUFBa0I7UUFDL0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyw0QkFBNEIsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDO1FBRXJHLE1BQU0sUUFBUSxHQUFhLElBQUksUUFBUSxFQUFFLENBQUM7UUFDMUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFdEMsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBc0IsUUFBUSxFQUFFLFFBQVEsRUFDM0M7WUFDRSxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2RSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBQ0Q7Ozs7Ozs7Ozs7TUFVRTtJQUVGLFdBQVcsQ0FBQyxNQUFjLEVBQUMsTUFBYyxFQUFFLElBQVk7UUFFckQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRywwQkFBMEIsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBRXpGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQU8sR0FBRyxFQUFFLElBQUksRUFDbEM7WUFDRSxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2RSxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBYyxFQUFDLE1BQWMsRUFBRSxPQUFlO1FBRTdELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsK0JBQStCLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQztRQUVqRyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFPLEdBQUcsRUFBRSxJQUFJLEVBQ2xDO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUNELFVBQVUsQ0FBQyxNQUFjLEVBQUMsTUFBYyxFQUFFLElBQVk7UUFFcEQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyx5QkFBeUIsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBRXhGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQU8sR0FBRyxFQUFFLElBQUksRUFDbEM7WUFDRSxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2RSxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQWMsRUFBQyxNQUFjLEVBQUUsT0FBZTtRQUU1RCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLDhCQUE4QixHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUM7UUFFaEcsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBTyxHQUFHLEVBQUUsSUFBSSxFQUNsQztZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBbUI7UUFDN0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFFakMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBZSxHQUFHLEVBQUUsS0FBSyxFQUM1QztZQUNFLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFDRCxRQUFRLENBQUMsTUFBYyxFQUFFLE9BQWU7UUFFdEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLEdBQUcsT0FBTyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7UUFFM0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBZSxHQUFHLEVBQ3BDO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFlLEVBQUUsVUFBbUI7UUFFN0MsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUU7UUFFbkMsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUU7WUFDN0IsR0FBRyxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUM7U0FDNUI7UUFDRCxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBRTtZQUNyQyxHQUFHLElBQUksY0FBYyxHQUFHLFVBQVUsQ0FBQztTQUNwQztRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXNCLEdBQUcsRUFDM0M7WUFDRSxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2RSxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWMsRUFBRSxPQUFlO1FBRTVDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBRTtRQUU1QyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBRTtZQUMvQixHQUFHLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQztTQUM3QjtRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTZCLEdBQUcsRUFDbEQ7WUFDRSxPQUFPLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2RSxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQWlCLEVBQUUsa0JBQTBCO1FBRWpELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxHQUFHLFNBQVMsR0FBRyxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FBRTtRQUU3RixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFPLEdBQUcsRUFBRSxJQUFJLEVBQ2xDO1lBQ0UsT0FBTyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkUsQ0FBQyxDQUFBO0lBRU4sQ0FBQztJQUVELFdBQVc7SUFDWCxjQUFjO1FBRVosSUFBSSxHQUFHLEdBQUcsU0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFFNUUsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBR0QsZ0JBQWdCLENBQUMsb0JBQTRCO1FBRzNDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVPLFVBQVU7UUFFaEIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW9CLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDMUQ7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFFbEIsSUFBSSxRQUFRLEdBQVcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWhFLElBQUksTUFBTSxHQUFXLFFBQVEsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRWhFLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUM7YUFDdkcsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUViLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixJQUFJLENBQUMsUUFBUSxTQUFTLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBRW5GLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUM3QyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDbEI7Z0JBRUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUc7WUFFbEQsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pCLElBQUk7b0JBQ0YsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDOUI7Z0JBQUMsT0FBTyxDQUFDLEVBQUU7aUJBRVg7YUFDRjtZQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUUsRUFBRTtnQkFDOUIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7aUJBQ3pFO2dCQUNELElBQUk7b0JBQ0YsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUU7aUJBQ25FO2dCQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNWLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTt3QkFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7cUJBQ2pDO29CQUNELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztpQkFDbkI7WUFFSCxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUM7WUFFUixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsSUFBSSxDQUFDLGtCQUFrQixTQUFTLENBQUMsQ0FBQzthQUNqRjtRQUVILENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2IsOENBQThDO1lBQzlDLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU8sa0JBQWtCLENBQUMsYUFBc0I7UUFFL0MsOEJBQThCO1FBRTlCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJO2dCQUNGLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUI7WUFBQyxPQUFPLENBQUMsRUFBRTthQUVYO1NBQ0Y7UUFFRCxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzSixJQUFJO2dCQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3JELElBQUksSUFBSSxDQUFDLEtBQUs7b0JBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2FBQ2hEO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsSUFBSSxJQUFJLENBQUMsS0FBSztvQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzNEO1NBRUY7UUFFRCxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDWCxJQUFJO2dCQUNGLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDakI7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUM7b0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDbEI7YUFDRjtZQUNELElBQUksQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFDO1lBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQTtTQUN6QjtJQUVILENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxNQUFXO1FBRWxDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxNQUFNLEVBQUU7WUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDeEQ7UUFFRCw4Q0FBOEM7UUFFNUMsSUFBSSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFFdkMsS0FBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQzNCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNuQztRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUV6QixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssRUFBRTtZQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyQzthQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckM7YUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRztZQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNsQzthQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksYUFBYSxJQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFlBQVksRUFBRTtZQUNqRixJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzdDO2FBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUU7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckM7YUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLGFBQWEsRUFBRTtZQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN4QzthQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksYUFBYSxFQUFFO1lBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3hDO2FBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxlQUFlLEVBQUU7WUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7U0FFMUM7UUFDSCxHQUFHO0lBRVAsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTlCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUUxQyxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFFbkIsSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBQztZQUN2RCxTQUFTLEdBQUcsYUFBYSxDQUFDO1NBQzNCO2FBQU07WUFDTCxTQUFTLEdBQUcsU0FBUyxHQUFHLGFBQWEsQ0FBQztTQUN2QztRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFOUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFDRCw4Q0FBOEMsQ0FBQyxHQUEyQjs7UUFDeEUsSUFBSSxPQUFPLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNwQyxPQUFPLENBQUMsSUFBSSxTQUFHLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxZQUFZLDBDQUFFLElBQUksQ0FBQztRQUN2QyxPQUFPLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDakMsT0FBTyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM3QixPQUFPLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDdkMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JELE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7a0JBQ3BDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRztrQkFDdEMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7a0JBQ2hDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FDaEM7U0FDOUI7UUFDRCxPQUFPLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBRXBDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqRCxJQUFJLFdBQVcsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFFNUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNqQyxXQUFXLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3JDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDckMsV0FBVyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUVyQyxPQUFPLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQztTQUN2QztRQUVELElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuRCxJQUFJLFdBQVcsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFFNUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNsQyxXQUFXLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3RDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDdEMsV0FBVyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUV0QyxPQUFPLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQztTQUNyQztRQUdELE9BQU8sT0FBTyxDQUFDO0lBRWpCLENBQUM7Ozs7WUE3cUJKLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBVFEsVUFBVTs7QUF5ckJqQixNQUFNLE9BQU8sUUFBUTtDQVVwQjtBQUNELE1BQU0sT0FBTyxZQUFZO0NBVXhCO0FBQ0QsTUFBTSxPQUFPLGVBQWU7Q0FlM0I7QUFDRCxNQUFNLE9BQU8sbUJBQW1CO0NBTS9CO0FBQ0QsTUFBTSxPQUFPLG1CQUFtQjtDQUcvQjtBQUNELE1BQU0sT0FBTyxzQkFBc0I7SUFBbkM7UUFDRSxTQUFJLEdBQStCLElBQUksMEJBQTBCLEVBQUUsQ0FBQztRQUNwRSxpQkFBWSxHQUF1QyxJQUFJLGtDQUFrQyxFQUFFLENBQUM7SUFFOUYsQ0FBQztDQUFBO0FBQ0QsTUFBTSxPQUFPLDBCQUEwQjtDQW9CdEM7QUFDRCxNQUFNLE9BQU8sa0NBQWtDO0NBRTlDO0FBRUQsTUFBTSxPQUFPLG9CQUFvQjtDQUtoQztBQUNELE1BQU0sT0FBTyxxQkFBcUI7Q0FPakM7QUFDRCxNQUFNLE9BQU8sY0FBYztJQUN6QixZQUFtQixRQUFnQixFQUFTLEtBQWU7UUFBeEMsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUFTLFVBQUssR0FBTCxLQUFLLENBQVU7SUFFM0QsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGlCQUFpQjtDQU83QjtBQUVELE1BQU0sT0FBTyxZQUFZO0NBVXhCO0FBR0QsTUFBTSxDQUFOLElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN4QixxQ0FBbUIsQ0FBQTtJQUNuQixtQ0FBaUIsQ0FBQTtBQUVuQixDQUFDLEVBSlcsY0FBYyxLQUFkLGNBQWMsUUFJekI7QUFDRCxNQUFNLENBQU4sSUFBWSxrQkFHWDtBQUhELFdBQVksa0JBQWtCO0lBQzVCLHlDQUFtQixDQUFBO0FBRXJCLENBQUMsRUFIVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBRzdCO0FBQ0QsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN4Qix1RUFBa0IsQ0FBQTtJQUNsQixtRUFBZ0IsQ0FBQTtBQUNsQixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUFFRCxNQUFNLENBQU4sSUFBWSxlQUdYO0FBSEQsV0FBWSxlQUFlO0lBQ3pCLHNDQUFtQixDQUFBO0lBQ25CLHFDQUFrQixDQUFBO0FBQ3BCLENBQUMsRUFIVyxlQUFlLEtBQWYsZUFBZSxRQUcxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgKiBhcyBOQVRTIGZyb20gJy4vbmF0cy5taW4uanMnO1xyXG5cclxuXHJcbi8vZGVjbGFyZSBsZXQgbmF0c19taW46IGFueTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENoYXQ0YXBwQ2xpZW50QW5ndWxhclNlcnZpY2UgaW1wbGVtZW50cyBPbkluaXQgIHtcclxuXHJcbiAgICBuYzogYW55O1xyXG5cclxuICAgIGNoYXRTZXJ2ZXIgPSBcIlwiO1xyXG4gICAgY2hhdFVybCA9IFwiXCI7XHJcbiAgICBkZWJ1ZyA9IGZhbHNlO1xyXG4gICAgY2hhdFVzZXJFeHRlcm5hbElkID0gXCJcIjtcclxuICAgIGNvbmZpZ0lkID0gXCJcIjtcclxuICAgIGNoYXRDYWxsYmFjazogSUNoYXRDYWxsYmFjaztcclxuXHJcbiAgICBcclxuICAgIHRpbWVvdXRSZWNvbm5lY3QgPSA1MDA7XHJcblxyXG4gICAgaW50ZXJ2YWw7XHJcblxyXG4gICAgY29uc3RydWN0b3IoIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge1xyXG4gIFxyXG4gICAgfVxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlnKGNoYXQ0QXBwQ29uZmlnOiBDaGF0NEFwcENvbmZpZykge1xyXG4gICAgICB0aGlzLmNoYXRTZXJ2ZXIgPSBjaGF0NEFwcENvbmZpZy5lbmRwb2ludDtcclxuICAgICAgdGhpcy5jaGF0VXJsID0gY2hhdDRBcHBDb25maWcuZW5kcG9pbnQgKyBcIi9hcGkvdjEvXCIgO1xyXG4gICAgICB0aGlzLmRlYnVnID0gY2hhdDRBcHBDb25maWcuZGVidWc7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBpbml0KHNlY3VyaXR5Q2hhdFRva2VuOiBzdHJpbmcsIGNoYXRDYWxsYmFjaz86IElDaGF0Q2FsbGJhY2ssIGNvbm5lY3Rpb25DbGllbnRJZD86IHN0cmluZyk6T2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuXHJcbiAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gMS4gVmFsaWRhw6fDtWVzIEluaWNpYWlzXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGF0U2VydmVyIHx8IHRoaXMuY2hhdFNlcnZlci50cmltKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihuZXcgRXJyb3IoXCJFbmRwb2ludCBpcyBlbXB0eVwiKSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghc2VjdXJpdHlDaGF0VG9rZW4gfHwgc2VjdXJpdHlDaGF0VG9rZW4udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IobmV3IEVycm9yKFwiU2VjdXJpdHlDaGF0VG9rZW4gaXMgZW1wdHlcIikpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gMi4gTMOzZ2ljYSBkZSBOZWfDs2Npb1xyXG4gICAgICAgICAgICB0aGlzLnNldFRva2VuQ2hhdDRhcHAoc2VjdXJpdHlDaGF0VG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoYXRDYWxsYmFjayAmJiBjb25uZWN0aW9uQ2xpZW50SWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNoYXRVc2VyRXh0ZXJuYWxJZCA9IGNvbm5lY3Rpb25DbGllbnRJZDtcclxuICAgICAgICAgICAgICB0aGlzLmNoYXRDYWxsYmFjayA9IGNoYXRDYWxsYmFjaztcclxuICAgICAgICAgICAgICB0aGlzLmNvbm5lY3RXZWJzb2NrZXQoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gMy4gRW1pdGUgbyB0b2tlbiBlIGZpbmFsaXphIG8gZmx1eG9cclxuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHNlY3VyaXR5Q2hhdFRva2VuKTtcclxuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAvLyBDYXB0dXJhIGVycm9zIGluZXNwZXJhZG9zIGUgZW52aWEgcGFyYSBvIGNhbmFsIGRlIGVycm8gZG8gT2JzZXJ2YWJsZVxyXG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7ICAgICAgXHJcblxyXG4gICAgfVxyXG4gIFxyXG4gICAgZ2V0Q2hhdFVybERvd25sb2FkKG1lc3NhZ2VGaWxlSWQ6IHN0cmluZykge1xyXG4gICAgICByZXR1cm4gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9nZXRGaWxlP21lc3NhZ2VGaWxlSWQ9XCIgKyBtZXNzYWdlRmlsZUlkICsgXCImdG9rZW49XCIgKyB0aGlzLmdldEJlYXJlclRva2VuKCk7XHJcbiAgICB9XHJcbiAgXHJcbiAgXHJcbiAgICBnZXRNZXNzYWdlQ2hhdChjaGF0SWQ6IHN0cmluZywgZnJvbUlkOiBzdHJpbmcsIHRvSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8Q2hhdE1lc3NhZ2U0QXBwPj4ge1xyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9cIiArIGNoYXRJZCArIFwiL1wiICsgZnJvbUlkICsgXCIvXCIgKyB0b0lkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcnJheTxDaGF0TWVzc2FnZTRBcHA+Pih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgXHJcbiAgICB9XHJcbiAgICBnZXRNZXNzYWdlQ2hhdEJ5R3JvcChjaGF0SWQ6IHN0cmluZywgZ3JvdXBJZDogc3RyaW5nLCBmcm9tSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8Q2hhdE1lc3NhZ2U0QXBwPj4ge1xyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9ieUdyb3VwL1wiICsgY2hhdElkICsgXCIvXCIgKyBncm91cElkICsgXCIvXCIgKyBmcm9tSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFycmF5PENoYXRNZXNzYWdlNEFwcD4+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICBcclxuICAgIH1cclxuICBcclxuICBcclxuICAgIGFkZE1lc3NhZ2VDaGF0KGNoYXRNZXNzYWdlNEFwcDogQ2hhdE1lc3NhZ2U0QXBwKTogT2JzZXJ2YWJsZTxDaGF0TWVzc2FnZTRBcHA+IHtcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2UvXCIgKyBjaGF0TWVzc2FnZTRBcHAuY2hhdElkO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PENoYXRNZXNzYWdlNEFwcD4odXJsLCBjaGF0TWVzc2FnZTRBcHAsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgXHJcbiAgICB9XHJcbiAgICAvKlxyXG4gICAgcHJvcHMoY2hhdEZpbHRlclJlcXVlc3Q0QXBwOiBBcnJheTxDaGF0RmlsdGVyUmVxdWVzdDRBcHA+KTogT2JzZXJ2YWJsZTxDaGF0VXNlclJlc3BvbnNlNEFwcFtdPiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL3Byb3BzXCI7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxDaGF0VXNlclJlc3BvbnNlNEFwcFtdPih1cmwsIGNoYXRGaWx0ZXJSZXF1ZXN0NEFwcCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICBcclxuICAgIH1cclxuICAgICovICAgIFxyXG4gIFxyXG4gIFxyXG4gICAgcmVtb3ZlVXNlcnNDaGF0KGNoYXRJZDogc3RyaW5nLCBjaGF0VXNlcnNJZD86IHN0cmluZ1tdLCBjaGF0VXNlcnNFeHRlcm5hbElkPzogc3RyaW5nW10pOiBPYnNlcnZhYmxlPENoYXRVc2VyNEFwcFtdPiB7XHJcbiAgICAgIGxldCBwYXJhbXMgPSBuZXcgQXJyYXkoKTtcclxuICAgICAgaWYgKGNoYXRVc2Vyc0lkICYmIGNoYXRVc2Vyc0lkLmxlbmd0aCA+IDApIHtcclxuICBcclxuICAgICAgICBjaGF0VXNlcnNJZC5mb3JFYWNoKGN1aSA9PiB7XHJcbiAgICAgICAgICBwYXJhbXMucHVzaChcImNoYXRVc2VySWQ9XCIgKyBjdWkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGNoYXRVc2Vyc0V4dGVybmFsSWQgJiYgY2hhdFVzZXJzRXh0ZXJuYWxJZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY2hhdFVzZXJzRXh0ZXJuYWxJZC5mb3JFYWNoKGN1ZWkgPT4ge1xyXG4gICAgICAgICAgcGFyYW1zLnB1c2goXCJjaGF0VXNlckV4dGVybmFsSWQ9XCIgKyBjdWVpKTtcclxuICAgICAgICB9KVxyXG4gIFxyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXR1c2VyL1wiICsgY2hhdElkICsgXCI/XCIgKyBwYXJhbXMuam9pbihcIiZcIik7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPENoYXRVc2VyNEFwcFtdPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgXHJcbiAgICByZW1vdmVVc2VyQ2hhdChjaGF0SWQ6IHN0cmluZywgY2hhdFVzZXJJZD86IHN0cmluZywgY2hhdFVzZXJFeHRlcm5hbElkPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGF0VXNlcjRBcHA+IHtcclxuICAgICAgbGV0IHBhcmFtID0gXCJcIjtcclxuICAgICAgaWYgKGNoYXRVc2VySWQpIHtcclxuICAgICAgICBwYXJhbSA9IFwiY2hhdFVzZXJJZD1cIiArIGNoYXRVc2VySWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGFyYW0gPSBcImNoYXRVc2VyRXh0ZXJuYWxJZD1cIiArIGNoYXRVc2VyRXh0ZXJuYWxJZDtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0dXNlci9cIiArIGNoYXRJZCArIFwiP1wiICsgcGFyYW07XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPENoYXRVc2VyNEFwcD4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gIFxyXG4gICAgdXBkYXRlVXNlckNoYXQoY2hhdElkOiBzdHJpbmcsIGNoYXJVc2VyNEFwcFVwZGF0ZTogQ2hhdFVzZXI0QXBwKTogT2JzZXJ2YWJsZTxDaGF0VXNlcjRBcHA+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdHVzZXIvXCIgKyBjaGF0SWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PENoYXRVc2VyNEFwcD4odXJsLCBjaGFyVXNlcjRBcHBVcGRhdGUsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgXHJcbiAgXHJcbiAgICBjcmVhdGVVc2VyQ2hhdChjaGF0SWQ6IHN0cmluZywgY2hhdFVzZXI0QXBwOiBDaGF0VXNlcjRBcHApOiBPYnNlcnZhYmxlPENoYXRVc2VyNEFwcD4ge1xyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0dXNlci9cIiArIGNoYXRJZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PENoYXRVc2VyNEFwcD4odXJsLCBjaGF0VXNlcjRBcHAsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgXHJcbiAgICBjcmVhdGVVc2Vyc0NoYXQoY2hhdElkOiBzdHJpbmcsIGNoYXRVc2VyNEFwcDogQ2hhdFVzZXI0QXBwW10pOiBPYnNlcnZhYmxlPENoYXRVc2VyNEFwcFtdPiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXR1c2VyL3VzZXJzL1wiICsgY2hhdElkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Q2hhdFVzZXI0QXBwW10+KHVybCwgY2hhdFVzZXI0QXBwLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gIFxyXG4gIFxyXG4gICAgY3JlYXRlQ2hhdChjaGF0NGFwcDogQ2hhdDRBcHApOiBPYnNlcnZhYmxlPENoYXQ0QXBwPiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRcIjtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PENoYXQ0QXBwPih1cmwsIGNoYXQ0YXBwLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgY3JlYXRlVXBkYXRlQ2hhdChjaGF0NGFwcDogQ2hhdDRBcHApOiBPYnNlcnZhYmxlPENoYXQ0QXBwPiB7XHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRcIjtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8Q2hhdDRBcHA+KHVybCwgY2hhdDRhcHAsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgXHJcbiAgICAvKlxyXG4gICAgZ2V0TGFzdE1lc3NhZ2VHcm91cChjaGF0RXh0ZXJuYWxJZDogc3RyaW5nLCBncm91cElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENoYXRVc2VyUmVzcG9uc2U0QXBwPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL2xhc3RNZXNzYWdlR3JvdXA/Y2hhdEV4dGVybmFsSWQ9XCIgKyBjaGF0RXh0ZXJuYWxJZCArIFwiJmdyb3VwSWQ9XCIgKyBncm91cElkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxDaGF0VXNlclJlc3BvbnNlNEFwcD4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgZ2V0TGFzdE1lc3NhZ2UoY2hhdEV4dGVybmFsSWQ6IHN0cmluZywgY2hhdFVzZXJFeHRlcm5hbElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENoYXRVc2VyUmVzcG9uc2U0QXBwPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL2xhc3RNZXNzYWdlP2NoYXRFeHRlcm5hbElkPVwiICsgY2hhdEV4dGVybmFsSWQgKyBcIiZjaGF0VXNlckV4dGVybmFsSWQ9XCIgKyBjaGF0VXNlckV4dGVybmFsSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENoYXRVc2VyUmVzcG9uc2U0QXBwPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAgICAgXHJcbiAgICBjb3VudE5vdFJlYWRNZXNzYWdlcyhjaGF0VXNlckV4dGVybmFsSWQ6IHN0cmluZywgY2hhdEV4dGVybmFsSWQ/OiBzdHJpbmcsIGdyb3VwSWQ/OiBzdHJpbmcsIGZyb21JZD86c3RyaW5nKTogT2JzZXJ2YWJsZTxDaGF0VXNlclJlc3BvbnNlNEFwcD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9jb3VudE5vdFJlYWRNZXNzYWdlcz9jaGF0VXNlckV4dGVybmFsSWQ9XCIgKyBjaGF0VXNlckV4dGVybmFsSWQ7XHJcbiAgXHJcbiAgICAgIGlmIChjaGF0RXh0ZXJuYWxJZCAmJiBjaGF0RXh0ZXJuYWxJZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdXJsICs9IFwiJmNoYXRFeHRlcm5hbElkPVwiICsgY2hhdEV4dGVybmFsSWQ7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgaWYgKGdyb3VwSWQgJiYgZ3JvdXBJZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdXJsICs9IFwiJmdyb3VwSWQ9XCIgKyBncm91cElkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZnJvbUlkICYmIGZyb21JZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdXJsICs9IFwiJmZyb21JZD1cIiArIGdyb3VwSWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENoYXRVc2VyUmVzcG9uc2U0QXBwPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAqL1xyXG4gIFxyXG4gICAgZ2V0Q2hhdEJ5RXh0ZXJuYWxJZChleHRlcm5hbElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENoYXQ0QXBwPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXQ/ZXh0ZXJuYWxJZD1cIiArIGV4dGVybmFsSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENoYXQ0QXBwPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hhdEJ5SWQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hhdDRBcHA+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdD9jaGF0SWQ9XCIgKyBpZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Q2hhdDRBcHA+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBsaXN0Q2hhdEJ5VXNlcihleHRlcm5hbFVzZXJJZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZywgY2hhdFN0YXR1czogQ2hhdFN0YXR1czRBcHAgKTogT2JzZXJ2YWJsZTxBcnJheTwgQ2hhdDRBcHA+PiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXQvbGlzdENoYXRCeVVzZXIvP2V4dGVybmFsVXNlcklkPVwiICsgZXh0ZXJuYWxVc2VySWQgXHJcbiAgICAgICsgXCImdXNlcklkPVwiICsgdXNlcklkXHJcbiAgICAgICsgXCImY2hhdFN0YXR1cz1cIiArIGNoYXRTdGF0dXM7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFycmF5PENoYXQ0QXBwPj4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlQ2hhdChjaGF0SWQ6IHN0cmluZywgY2hhdEV4dGVybmFsSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsIDtcclxuXHJcbiAgICAgIGlmIChjaGF0SWQgJiYgY2hhdElkLmxlbmd0aCA+IDApe1xyXG4gICAgICAgIHVybCs9IFwiY2hhdD9jaGF0SWQ9XCIgKyBjaGF0SWQ7IFxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAoY2hhdEV4dGVybmFsSWQgJiYgY2hhdEV4dGVybmFsSWQubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgdXJsKz0gXCJjaGF0P2V4dGVybmFsSWQ9XCIgKyBjaGF0RXh0ZXJuYWxJZDsgXHJcbiAgICAgIH1cclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8dm9pZD4odXJsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJlYWRNZXNzYWdlKGNoYXRNZXNzYWdlSWQ6IHN0cmluZywgdG9JZD86IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9yZWFkL1wiICsgY2hhdE1lc3NhZ2VJZDtcclxuICBcclxuICAgICAgaWYgKHRvSWQgJiYgdG9JZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdXJsICs9IFwiL1wiICsgdG9JZDtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDx2b2lkPih1cmwsIG51bGwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBvbmxpbmUoY2hhdElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9vbmxpbmUvXCIgKyBjaGF0SWQgO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxudW1iZXI+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHNldE9mZkxpbmUoY2hhdFVzZXJFeHRlcm5hbElkSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImNoYXRtZXNzYWdlL3NldC1vZmZsaW5lL1wiICsgY2hhdFVzZXJFeHRlcm5hbElkSWQgO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxudW1iZXI+KHVybCwgbnVsbCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgc2VuZEZpbGUoY2hhdElkOiBzdHJpbmcsIGZyb21JZDogc3RyaW5nLCB0b0lkOiBzdHJpbmcsIGZpbGVUb1VwbG9hZDogRmlsZSk6IE9ic2VydmFibGU8Q2hhdE1lc3NhZ2VGaWxlNEFwcD4ge1xyXG4gICAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2Uvc2VuZEZpbGUvXCIgKyBjaGF0SWQgKyBcIi9cIiArIGZyb21JZCArIFwiL1wiICsgdG9JZDtcclxuICBcclxuICAgICAgY29uc3QgZm9ybURhdGE6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGVUb1VwbG9hZCk7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgICAucG9zdDxDaGF0TWVzc2FnZUZpbGU0QXBwPihlbmRwb2ludCwgZm9ybURhdGEsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgc2VuZEZpbGVHcm91cChjaGF0SWQ6IHN0cmluZywgZnJvbUlkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZywgZmlsZVRvVXBsb2FkOiBGaWxlKTogT2JzZXJ2YWJsZTxDaGF0TWVzc2FnZUZpbGU0QXBwPiB7XHJcbiAgICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9zZW5kRmlsZUdyb3VwL1wiICsgY2hhdElkICsgXCIvXCIgKyBmcm9tSWQgKyBcIi9cIiArIGdyb3VwSWQ7XHJcbiAgXHJcbiAgICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlVG9VcGxvYWQpO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgICAgLnBvc3Q8Q2hhdE1lc3NhZ2VGaWxlNEFwcD4oZW5kcG9pbnQsIGZvcm1EYXRhLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qXHJcbiAgICB0cmFuc2xhdGVNZXNzYWdlKGNoYXRNZXNzYWdlSWQ6IHN0cmluZywgbGFuZ3VhZ2VUYXJnZXQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hhdDRBcHBUcmFuc2xhdGU+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2UvdHJhbnNsYXRlL1wiICsgY2hhdE1lc3NhZ2VJZCArIFwiL1wiICsgbGFuZ3VhZ2VUYXJnZXQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENoYXQ0QXBwVHJhbnNsYXRlPih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAqL1xyXG5cclxuICAgIHN0YXJ0VHlwaW5nKGNoYXRJZDogc3RyaW5nLGZyb21JZDogc3RyaW5nLCB0b0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiY2hhdG1lc3NhZ2Uvc3RhcnRUeXBpbmcvXCIgKyBjaGF0SWQgKyBcIi9cIiArIGZyb21JZCArIFwiL1wiICsgdG9JZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8dm9pZD4odXJsLCBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0VHlwaW5nR3JvdXAoY2hhdElkOiBzdHJpbmcsZnJvbUlkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9zdGFydFR5cGluZ0dyb3VwL1wiICsgY2hhdElkICsgXCIvXCIgKyBmcm9tSWQgKyBcIi9cIiArIGdyb3VwSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PHZvaWQ+KHVybCwgbnVsbCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHN0b3BUeXBpbmcoY2hhdElkOiBzdHJpbmcsZnJvbUlkOiBzdHJpbmcsIHRvSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9zdG9wVHlwaW5nL1wiICsgY2hhdElkICsgXCIvXCIgKyBmcm9tSWQgKyBcIi9cIiArIHRvSWQ7XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PHZvaWQ+KHVybCwgbnVsbCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBzdG9wVHlwaW5nR3JvdXAoY2hhdElkOiBzdHJpbmcsZnJvbUlkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJjaGF0bWVzc2FnZS9zdG9wVHlwaW5nR3JvdXAvXCIgKyBjaGF0SWQgKyBcIi9cIiArIGZyb21JZCArIFwiL1wiICsgZ3JvdXBJZDtcclxuICBcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8dm9pZD4odXJsLCBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZUdyb3VwKGdyb3VwOiBDaGF0R3JvdXBBcHApOiBPYnNlcnZhYmxlPENoYXRHcm91cEFwcD4ge1xyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJncm91cFwiO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Q2hhdEdyb3VwQXBwPih1cmwsIGdyb3VwLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuZ2V0QmVhcmVyVG9rZW4oKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgZ2V0R3JvdXAoY2hhdElkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hhdEdyb3VwQXBwPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImdyb3VwL1wiICsgZ3JvdXBJZCArIFwiL1wiICsgY2hhdElkO1xyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxDaGF0R3JvdXBBcHA+KHVybCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBsaXN0R3JvdXBzKGNoYXRJZD86IHN0cmluZywgZXh0ZXJuYWxJZD86IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8Q2hhdEdyb3VwQXBwPj4ge1xyXG4gIFxyXG4gICAgICBsZXQgdXJsID0gdGhpcy5jaGF0VXJsICsgXCJncm91cC9cIiA7XHJcblxyXG4gICAgICBpZiAoY2hhdElkICYmIGNoYXRJZC5sZW5ndGg+MCkge1xyXG4gICAgICAgIHVybCArPSBcIiZjaGF0SWQ9XCIgKyBjaGF0SWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGV4dGVybmFsSWQgJiYgZXh0ZXJuYWxJZC5sZW5ndGg+MCkge1xyXG4gICAgICAgIHVybCArPSBcIiZleHRlcm5hbElkPVwiICsgZXh0ZXJuYWxJZDtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcnJheTxDaGF0R3JvdXBBcHA+Pih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgbGlzdEZpbGVzR3JvdXAoY2hhdElkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8Q2hhdE1lc3NhZ2VGaWxlNEFwcD4+IHtcclxuICBcclxuICAgICAgbGV0IHVybCA9IHRoaXMuY2hhdFVybCArIFwiZ3JvdXAvXCIgKyBjaGF0SWQgO1xyXG5cclxuICAgICAgaWYgKGdyb3VwSWQgJiYgZ3JvdXBJZC5sZW5ndGg+MCkge1xyXG4gICAgICAgIHVybCArPSBcIiZncm91cElkPVwiICsgY2hhdElkO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFycmF5PENoYXRNZXNzYWdlRmlsZTRBcHA+Pih1cmwsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCdBdXRob3JpemF0aW9uJywgdGhpcy5nZXRCZWFyZXJUb2tlbigpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZXZlbnQoZXZlbnROYW1lOiBzdHJpbmcsIGNoYXRVc2VyRXh0ZXJuYWxJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgXHJcbiAgICAgIGxldCB1cmwgPSB0aGlzLmNoYXRVcmwgKyBcImV2ZW50L1wiICsgZXZlbnROYW1lICsgXCI/Y2hhdFVzZXJFeHRlcm5hbElkPVwiICsgY2hhdFVzZXJFeHRlcm5hbElkIDtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PHZvaWQ+KHVybCwgbnVsbCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmdldEJlYXJlclRva2VuKCkpXHJcbiAgICAgICAgfSkgICAgICBcclxuXHJcbiAgICB9XHJcbiAgXHJcbiAgICAvKiBUb2tlbiAqL1xyXG4gICAgZ2V0QmVhcmVyVG9rZW4oKTogc3RyaW5nIHtcclxuICBcclxuICAgICAgbGV0IHJldCA9IFwiQmVhcmVyIFwiICsgd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJjaGF0NEFwcFNlc3Npb25Ub2tlblwiKTtcclxuICBcclxuICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuICBcclxuICBcclxuICAgIHNldFRva2VuQ2hhdDRhcHAoY2hhdDRBcHBTZXNzaW9uVG9rZW46IHN0cmluZykge1xyXG4gIFxyXG4gIFxyXG4gICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcImNoYXQ0QXBwU2Vzc2lvblRva2VuXCIsIGNoYXQ0QXBwU2Vzc2lvblRva2VuKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGVuc3VyZUNvbm4oKSB7XHJcblxyXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBjaGF0U2VydmVyOiAke3RoaXMuY2hhdFNlcnZlcn1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgdXNlcklkOiAke3RoaXMuY2hhdFVzZXJFeHRlcm5hbElkfWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBnZXRCZWFyZXJUb2tlbjogJHsgdGhpcy5nZXRCZWFyZXJUb2tlbigpfWApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB0aGF0ID0gdGhpcztcclxuXHJcbiAgICAgIGxldCB1cmlTdGVwMTogc3RyaW5nID0gdGhpcy5jaGF0U2VydmVyLnJlcGxhY2UoL15odHRwcy8sICd3c3MnKTtcclxuXHJcbiAgICAgIGxldCBzZXJ2ZXI6IHN0cmluZyA9IHVyaVN0ZXAxLnJlcGxhY2UoLyhcXC9cXC8uKj8pXFwvLywgJyQxXFwvd3MvJyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGB3cyBzZXJ2ZXI6ICR7c2VydmVyfWApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGF0LmRpc2Nvbm5lY3RJbnRlcm5hbCh0cnVlKTtcclxuICAgICAgICBcclxuICAgICAgTkFUUy5jb25uZWN0KHsgdXJsOiBzZXJ2ZXIsIHVzZXI6IHRoaXMuY2hhdFVzZXJFeHRlcm5hbElkLCBwYXNzOiB0aGlzLmdldEJlYXJlclRva2VuKCksIHJlY29ubmVjdDogZmFsc2V9KVxyXG4gICAgICAgIC50aGVuKChuYykgPT4ge1xyXG4gICAgICAgICAgdGhhdC5uYyA9IG5jO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHN1YmplY3QgPSBgY2hhdDRhcHAuY29uZmlnLiR7dGhpcy5jb25maWdJZH0udXNlci4ke3RoaXMuY2hhdFVzZXJFeHRlcm5hbElkfWA7IFxyXG5cclxuICAgICAgICAgIGNvbnN0IHN1YiA9IHRoYXQubmMuc3Vic2NyaWJlKHN1YmplY3QsIChtc2cpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NBbmRDYWxsYmFjayhKU09OLnBhcnNlKG1zZy5kYXRhKSkgIDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5pbnRlcnZhbCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoYXQuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKT0+e1xyXG4gICAgICAgICAgICBpZiAodGhhdC5kZWJ1Zykge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBwdWJsaXNoIGNoYXQ0YXBwLnVzZXIub25saW5lICR7dGhpcy5jaGF0VXNlckV4dGVybmFsSWR9IGApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgdGhhdC5uYy5wdWJsaXNoKGBjaGF0NGFwcC51c2VyLm9ubGluZWAsIHRoaXMuY2hhdFVzZXJFeHRlcm5hbElkKSA7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJ0cnkgcmVjb25uZWN0Li4uXCIpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmVuc3VyZUNvbm4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgIH0sMTAwMCk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFN1YnNjcmliZSBvbmxpbmUgY2hhdDRhcHAudXNlci4ke3RoaXMuY2hhdFVzZXJFeHRlcm5hbElkfS5vbmxpbmVgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgLy8gTm90aWZpY2EgbyBjaGFtYWRvciBzb2JyZSBvIGVycm8gbmEgY29uZXjDo29cclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJOQVRTIEVycm9yOlwiLCBlcnIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2Nvbm5lY3QoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRpc2Nvbm5lY3RJbnRlcm5hbChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkaXNjb25uZWN0SW50ZXJuYWwoaWdub3JlT2ZmTGluZTogYm9vbGVhbikge1xyXG5cclxuICAgICAgLy8gQ2hlY2sgaG93IHdlIGNhbiBkaXNjb25uZWN0XHJcblxyXG4gICAgICBpZiAodGhpcy5pbnRlcnZhbCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFpZ25vcmVPZmZMaW5lICYmIHRoaXMubmMgJiYgdGhpcy5jaGF0VXNlckV4dGVybmFsSWQgJiYgdGhpcy5jaGF0VXNlckV4dGVybmFsSWQubGVuZ3RoID4gMCAmJiB0aGlzLmdldEJlYXJlclRva2VuKCkgJiYgdGhpcy5nZXRCZWFyZXJUb2tlbigpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy5zZXRPZmZMaW5lKHRoaXMuY2hhdFVzZXJFeHRlcm5hbElkKS50b1Byb21pc2UoKTtcclxuICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmxvZyhcImhhZCBzZXQgb2ZmbGluZVwiKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5lcnJvcihcIkVycm8gYW8gc2V0YXIgb2ZmbGluZVwiLCBlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5uYykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLm5jLmNsb3NlKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGVidWcpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5jID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5kZWJ1Zyl7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJkaXNjb25lY3RcIilcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByb2Nlc3NBbmRDYWxsYmFjayhtc2dPYmo6IGFueSkge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kZWJ1ZyAmJiBtc2dPYmopIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiTXNnIFJlY2VpdmVkOiBcIiArIEpTT04uc3RyaW5naWZ5KG1zZ09iaikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL2lmICghY2hhdENhbGxiYWNrLmlzVG9rZW5GaXJlYmFzZUFjdGl2ZSgpKSB7XHJcblxyXG4gICAgICAgICAgbGV0IGRhdFRtcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcblxyXG4gICAgICAgICAgZm9yIChsZXQga2V5IGluIG1zZ09iai5kYXRhKSB7XHJcbiAgICAgICAgICAgIGRhdFRtcC5zZXQoa2V5LCBtc2dPYmouZGF0YVtrZXldKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBtc2dPYmouZGF0YS5hbGwgPSBkYXRUbXA7XHJcblxyXG4gICAgICAgICAgaWYgKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJtc2dcIikge1xyXG4gICAgICAgICAgICB0aGlzLmNoYXRDYWxsYmFjay5vbk1lc3NhZ2UobXNnT2JqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJvblwiIHx8IG1zZ09iai5kYXRhLnR5cGUgPT0gXCJvZmZcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGF0Q2FsbGJhY2sub25PZmZsaW5lKG1zZ09iaik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJyZWFkXCIgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhdENhbGxiYWNrLm9uUmVhZChtc2dPYmopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtc2dPYmouZGF0YS50eXBlID09IFwic3RhcnRUeXBpbmdcIiB8fCAgbXNnT2JqLmRhdGEudHlwZSA9PSBcInN0b3BUeXBpbmdcIikge1xyXG4gICAgICAgICAgICB0aGlzLmNoYXRDYWxsYmFjay5vblN0YXJ0U3RvcFR5cGluZyhtc2dPYmopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtc2dPYmouZGF0YS50eXBlID09IFwibmV3X3VzZXJcIikge1xyXG4gICAgICAgICAgICB0aGlzLmNoYXRDYWxsYmFjay5vbk5ld1VzZXIobXNnT2JqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAobXNnT2JqLmRhdGEudHlwZSA9PSBcInJlbW92ZV91c2VyXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGF0Q2FsbGJhY2sub25SZW1vdmVVc2VyKG1zZ09iaik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKG1zZ09iai5kYXRhLnR5cGUgPT0gXCJjaGF0X2Nsb3NlZFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhdENhbGxiYWNrLm9uQ2hhdENsb3NlZChtc2dPYmopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChtc2dPYmouZGF0YS50eXBlID09IFwiY291bnRfbm90cmVhZFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhdENhbGxiYWNrLm9uQ291bnROb3RSZWFkKG1zZ09iaik7XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIC8vfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbm5lY3RXZWJzb2NrZXQoKSB7XHJcbiAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xyXG4gICAgICB0aGlzLmRpc2Nvbm5lY3RJbnRlcm5hbCh0cnVlKTtcclxuICBcclxuICAgICAgbGV0IHNlY3VyaXR5VG9rZW4gPSB0aGlzLmdldEJlYXJlclRva2VuKCk7XHJcblxyXG4gICAgICBsZXQgdG9rZW5BdXRoID0gXCJcIjtcclxuXHJcbiAgICAgIGlmIChzZWN1cml0eVRva2VuICYmIHNlY3VyaXR5VG9rZW4uc3RhcnRzV2l0aChcIkJlYXJlciBcIikpe1xyXG4gICAgICAgIHRva2VuQXV0aCA9IHNlY3VyaXR5VG9rZW47XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdG9rZW5BdXRoID0gXCJCZWFyZXIgXCIgKyBzZWN1cml0eVRva2VuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNvbmZpZ0lkID0gdGhpcy5jaGF0U2VydmVyLnNwbGl0KFwiL1wiKVszXTtcclxuXHJcbiAgICAgIHRoaXMuZW5zdXJlQ29ubigpO1xyXG4gICAgfVxyXG4gICAgY29udmVydENoYXQ0QXBwTWVzc2FnZVJlY2VpdmVUb0NoYXRNZXNzYWdlNEFwcChtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiBDaGF0TWVzc2FnZTRBcHB7XHJcbiAgICAgIGxldCBtZXNzYWdlID0gbmV3IENoYXRNZXNzYWdlNEFwcCgpO1xyXG4gICAgICBtZXNzYWdlLmJvZHkgPSBtc2c/Lm5vdGlmaWNhdGlvbj8uYm9keTtcclxuICAgICAgbWVzc2FnZS5jaGF0SWQgPSBtc2cuZGF0YS5jaGF0SWQ7XHJcbiAgICAgIG1lc3NhZ2UuZnJvbUlkID0gbXNnLmRhdGEuZnJvbUlkO1xyXG4gICAgICBtZXNzYWdlLnRvSWQgPSBtc2cuZGF0YS50b0lkO1xyXG4gICAgICBtZXNzYWdlLmdyb3VwSWQgPSBtc2cuZGF0YS5ncm91cElkO1xyXG4gICAgICBtZXNzYWdlLnJlcGx5RnJvbSA9IG1zZy5kYXRhLnJlcGx5RnJvbTtcclxuICAgICAgaWYgKG1zZy5kYXRhLmRhdGVIb3VyICYmIG1zZy5kYXRhLmRhdGVIb3VyLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBtZXNzYWdlLmRhdGVIb3VySW5jbHVkZWQgPSBtc2cuZGF0YS5kYXRlSG91ci5zdWJzdHJpbmcoNiwxMCkgKyBcIi1cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtc2cuZGF0YS5kYXRlSG91ci5zdWJzdHJpbmcoMyw1KSArIFwiLVwiICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtc2cuZGF0YS5kYXRlSG91ci5zdWJzdHJpbmcoMCwyKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtc2cuZGF0YS5kYXRlSG91ci5zdWJzdHJpbmcoMTApIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XHJcbiAgICAgIH1cclxuICAgICAgbWVzc2FnZS5pZCA9IG1zZy5kYXRhLmNoYXRNZXNzYWdlSWQ7XHJcblxyXG4gICAgICBpZiAobXNnLmRhdGEuZmlsZUlkICYmIG1zZy5kYXRhLmZpbGVJZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgbGV0IG1lc3NhZ2VGaWxlID0gbmV3IENoYXRNZXNzYWdlRmlsZTRBcHAoKTtcclxuICAgICAgICBcclxuICAgICAgICBtZXNzYWdlRmlsZS5pZCA9IG1zZy5kYXRhLmZpbGVJZDtcclxuICAgICAgICBtZXNzYWdlRmlsZS5uYW1lID0gbXNnLmRhdGEuZmlsZU5hbWU7XHJcbiAgICAgICAgbWVzc2FnZUZpbGUuc2l6ZSA9IG1zZy5kYXRhLmZpbGVTaXplO1xyXG4gICAgICAgIG1lc3NhZ2VGaWxlLnR5cGUgPSBtc2cuZGF0YS5maWxlVHlwZTtcclxuXHJcbiAgICAgICAgbWVzc2FnZS5jaGF0TWVzc2FnZUZpbGUgPSBtZXNzYWdlRmlsZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG1zZy5kYXRhLnZGaWxlSWQgJiYgbXNnLmRhdGEudkZpbGVJZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgbGV0IG1lc3NhZ2VGaWxlID0gbmV3IENoYXRNZXNzYWdlRmlsZTRBcHAoKTtcclxuICAgICAgICBcclxuICAgICAgICBtZXNzYWdlRmlsZS5pZCA9IG1zZy5kYXRhLnZGaWxlSWQ7XHJcbiAgICAgICAgbWVzc2FnZUZpbGUubmFtZSA9IG1zZy5kYXRhLnZGaWxlTmFtZTtcclxuICAgICAgICBtZXNzYWdlRmlsZS5zaXplID0gbXNnLmRhdGEudkZpbGVTaXplO1xyXG4gICAgICAgIG1lc3NhZ2VGaWxlLnR5cGUgPSBtc2cuZGF0YS52RmlsZVR5cGU7XHJcblxyXG4gICAgICAgIG1lc3NhZ2UuY2hhdFZvaWNlRmlsZSA9IG1lc3NhZ2VGaWxlO1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgcmV0dXJuIG1lc3NhZ2U7XHJcblxyXG4gICAgfVxyXG4gIFxyXG4gIH1cclxuICBcclxuICBcclxuICBleHBvcnQgY2xhc3MgQ2hhdDRBcHAge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIGNvbmZpZ0lkOiBzdHJpbmc7XHJcbiAgICBleHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgc3RhdHVzOiBDaGF0U3RhdHVzNEFwcDtcclxuICAgIHVzZXJzOiBBcnJheTxDaGF0VXNlcjRBcHA+O1xyXG5cclxuICAgIG1ldGE6IEFycmF5PENoYXRNZXNzYWdlTWV0YTRBcHA+O1xyXG4gIFxyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdFVzZXI0QXBwIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBjbGllbnRUb2tlbjogc3RyaW5nO1xyXG4gICAgcGljdHVyZVBhdGg6IHN0cmluZztcclxuICAgIGVtYWlsOiBzdHJpbmc7XHJcbiAgICBwaG9uZU51bWJlcjogc3RyaW5nO1xyXG4gICAgZXh0ZXJuYWxJZDogc3RyaW5nO1xyXG4gICAgbWV0YTogQXJyYXk8Q2hhdE1lc3NhZ2VNZXRhNEFwcD47XHJcbiAgICBzdGF0dXM6IENoYXRVc2VyU3RhdHVzNEFwcDtcclxuICB9XHJcbiAgZXhwb3J0IGNsYXNzIENoYXRNZXNzYWdlNEFwcCB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgZnJvbUlkOiBzdHJpbmc7XHJcbiAgICB0b0lkOiBzdHJpbmc7XHJcbiAgICBjaGF0SWQ6IHN0cmluZztcclxuICAgIHRpdGxlOiBzdHJpbmc7XHJcbiAgICBib2R5OiBzdHJpbmc7XHJcbiAgICBtZXRhOiBBcnJheTxDaGF0TWVzc2FnZU1ldGE0QXBwPjtcclxuICAgIGdyb3VwSWQ6IHN0cmluZztcclxuICAgIHJlYWQ6IEJvb2xlYW47XHJcbiAgICByZXBseUZyb206IHN0cmluZztcclxuICAgIGRhdGVIb3VySW5jbHVkZWQ6IHN0cmluZztcclxuICAgIGdUb0lkUmVhZDogc3RyaW5nW107XHJcbiAgICBjaGF0TWVzc2FnZUZpbGU6IENoYXRNZXNzYWdlRmlsZTRBcHA7XHJcbiAgICBjaGF0Vm9pY2VGaWxlOiBDaGF0TWVzc2FnZUZpbGU0QXBwO1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdE1lc3NhZ2VGaWxlNEFwcCB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgdHlwZTogc3RyaW5nO1xyXG4gICAgc2l6ZTogbnVtYmVyO1xyXG4gICAgZnVsbFBhdGg6IHN0cmluZztcclxuICB9XHJcbiAgZXhwb3J0IGNsYXNzIENoYXRNZXNzYWdlTWV0YTRBcHAge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgdmFsdWU6IHN0cmluZztcclxuICB9XHJcbiAgZXhwb3J0IGNsYXNzIENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUge1xyXG4gICAgZGF0YTogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZURhdGEgPSBuZXcgQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZURhdGEoKTtcclxuICAgIG5vdGlmaWNhdGlvbjogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZU5vdGlmaWNhdGlvbiA9IG5ldyBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlTm90aWZpY2F0aW9uKCk7XHJcbiAgICB0b2tlbjogc3RyaW5nO1xyXG4gIH1cclxuICBleHBvcnQgY2xhc3MgQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZURhdGEge1xyXG4gICAgdG9JZDogc3RyaW5nO1xyXG4gICAgY2hhdElkOiBzdHJpbmc7XHJcbiAgICBkYXRlSG91cjogc3RyaW5nO1xyXG4gICAgY2hhdE1lc3NhZ2VJZDogc3RyaW5nO1xyXG4gICAgZXh0ZXJuYWxJZDogc3RyaW5nO1xyXG4gICAgdHlwZTogc3RyaW5nO1xyXG4gICAgZnJvbUlkOiBzdHJpbmc7XHJcbiAgICByZXBseUZyb206IHN0cmluZztcclxuICAgIGdyb3VwSWQ6IHN0cmluZztcclxuICAgIGZpbGVJZDogc3RyaW5nO1xyXG4gICAgZmlsZU5hbWU6IHN0cmluZztcclxuICAgIGZpbGVTaXplOiBudW1iZXI7XHJcbiAgICBmaWxlVHlwZTogc3RyaW5nO1xyXG4gICAgdkZpbGVJZDogc3RyaW5nO1xyXG4gICAgdkZpbGVOYW1lOiBzdHJpbmc7XHJcbiAgICB2RmlsZVNpemU6IG51bWJlcjtcclxuICAgIHZGaWxlVHlwZTogc3RyaW5nO1xyXG5cclxuICAgIGFsbDogTWFwPHN0cmluZywgc3RyaW5nPjtcclxuICB9XHJcbiAgZXhwb3J0IGNsYXNzIENoYXQ0QXBwTWVzc2FnZVJlY2VpdmVOb3RpZmljYXRpb24ge1xyXG4gICAgYm9keTogc3RyaW5nO1xyXG4gIH1cclxuICBcclxuICBleHBvcnQgY2xhc3MgQ2hhdFVzZXJSZXNwb25zZTRBcHAge1xyXG4gICAgdG90YWxNZXNzYWdlczogbnVtYmVyO1xyXG4gICAgY2hhdDogQ2hhdDRBcHA7XHJcbiAgICBjaGF0TWVzc2FnZTogQ2hhdE1lc3NhZ2U0QXBwO1xyXG4gICAgY2hhdHM6IENoYXRVc2VyUmVzcG9uc2U0QXBwW107XHJcbiAgfVxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0RmlsdGVyUmVxdWVzdDRBcHAge1xyXG4gICAgdHlwZTogQ2hhdEZpbHRlclR5cGU7XHJcbiAgICBjaGF0RXh0ZXJuYWxJZDogc3RyaW5nO1xyXG4gICAgY2hhdFVzZXJFeHRlcm5hbElkOiBzdHJpbmc7XHJcbiAgICBjaGF0VXNlckV4dGVybmFsVG9JZDogc3RyaW5nO1xyXG4gICAgZ3JvdXBJZDogc3RyaW5nO1xyXG4gICAgZnJvbUlkOiBzdHJpbmc7XHJcbiAgfVxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0NEFwcENvbmZpZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZW5kcG9pbnQ6IHN0cmluZywgcHVibGljIGRlYnVnPzogYm9vbGVhbikge1xyXG4gICAgICBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0NEFwcFRyYW5zbGF0ZSB7XHJcbiAgICB0ZXh0OiBzdHJpbmc7XHJcbiAgICB0cmFuc2xhdGVkVGV4dDogc3RyaW5nO1xyXG4gICAgb3JpZ2luYWxTb3VyY2VMYW5ndWFnZUNvZGU6IHN0cmluZztcclxuICAgIHNvdXJjZUxhbmd1YWdlQ29kZTogc3RyaW5nO1xyXG4gICAgdGFyZ2V0TGFuZ3VhZ2VDb2RlOiBzdHJpbmc7XHJcbiAgICBtZXNzYWdlSWQ6IHN0cmluZztcclxuICB9XHJcblxyXG4gIGV4cG9ydCBjbGFzcyBDaGF0R3JvdXBBcHAge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIGNoYXRJZDogc3RyaW5nO1xyXG4gICAgZXh0ZXJuYWxJZDogc3RyaW5nO1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgICB1c2VyczogQXJyYXk8c3RyaW5nPjtcclxuICAgIGZpbGVzOiBBcnJheTxDaGF0TWVzc2FnZUZpbGU0QXBwPjtcclxuICAgIG1ldGE6IEFycmF5PENoYXRNZXNzYWdlTWV0YTRBcHA+O1xyXG4gICAgc3RhdHVzOiBHcm91cFN0YXR1czRBcHA7XHJcbiAgfVxyXG5cclxuICBcclxuICBleHBvcnQgZW51bSBDaGF0U3RhdHVzNEFwcCB7XHJcbiAgICBDUkVBVEVEID0gXCJDUkVBVEVEXCIsXHJcbiAgICBDTE9TRUQgPSBcIkNMT1NFRFwiXHJcbiAgXHJcbiAgfVxyXG4gIGV4cG9ydCBlbnVtIENoYXRVc2VyU3RhdHVzNEFwcCB7XHJcbiAgICBSRU1PVkVEID0gXCJSRU1PVkVEXCJcclxuICBcclxuICB9XHJcbiAgZXhwb3J0IGVudW0gQ2hhdEZpbHRlclR5cGUge1xyXG4gICAgQ09VTlRfTk9UX1JFQUQgPSAxLFxyXG4gICAgTEFTVF9NRVNTQUdFID0gMlxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGVudW0gR3JvdXBTdGF0dXM0QXBwIHtcclxuICAgIENSRUFURUQgPSBcIkNSRUFURURcIixcclxuICAgIENMT1NFRCA9IFwiUkVNT1ZFRFwiXHJcbiAgfVxyXG5cclxuICBcclxuICBleHBvcnQgaW50ZXJmYWNlIElDaGF0Q2FsbGJhY2sge1xyXG4gICAgaXNUb2tlbkZpcmViYXNlQWN0aXZlKCk6IEJvb2xlYW47XHJcbiAgICBvbk1lc3NhZ2UobXNnOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKTogdm9pZDtcclxuICAgIG9uT2ZmbGluZShtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiB2b2lkO1xyXG4gICAgb25SZWFkKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IHZvaWQ7XHJcbiAgICBvblN0YXJ0U3RvcFR5cGluZyhtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiB2b2lkO1xyXG4gICAgb25OZXdVc2VyKG1zZzogQ2hhdDRBcHBNZXNzYWdlUmVjZWl2ZSk6IHZvaWQ7XHJcbiAgICBvblJlbW92ZVVzZXIobXNnOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKTogdm9pZDtcclxuICAgIG9uQ2hhdENsb3NlZChtc2c6IENoYXQ0QXBwTWVzc2FnZVJlY2VpdmUpOiB2b2lkO1xyXG4gICAgb25Db3VudE5vdFJlYWQobXNnOiBDaGF0NEFwcE1lc3NhZ2VSZWNlaXZlKTogdm9pZDtcclxuICB9XHJcbiAgIl19
|