@gsp-svc/formdoc-upload 0.1.38 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/gsp-svc-formdoc-upload.umd.js +434 -341
- package/bundles/gsp-svc-formdoc-upload.umd.js.map +1 -1
- package/bundles/gsp-svc-formdoc-upload.umd.min.js +1 -1
- package/bundles/gsp-svc-formdoc-upload.umd.min.js.map +1 -1
- package/esm2015/lib/i18n/language.resource.js +9 -5
- package/esm2015/lib/upload/download.service.js +9 -1
- package/esm2015/lib/upload/entity/completemultiuploadrequest.js +21 -0
- package/esm2015/lib/upload/entity/{gspdocsecuritynaseinfo.js → gspdocsecuritybaseinfo.js} +1 -1
- package/esm2015/lib/upload/entity/gspformstreamentity.js +25 -0
- package/esm2015/lib/upload/entity/gspformuploadentity.js +1 -1
- package/esm2015/lib/upload/entity/initmultiuploadrequest.js +19 -0
- package/esm2015/lib/upload/entity/multiuploadrequest.js +21 -0
- package/esm2015/lib/upload/entity/multiuploadresult.js +13 -0
- package/esm2015/lib/upload/entity/uploadlimit.js +1 -1
- package/esm2015/lib/upload/file-upload/file-upload.component.js +354 -284
- package/esm2015/lib/upload/upload.service.js +5 -30
- package/esm2015/public-api.js +2 -2
- package/esm5/lib/i18n/language.resource.js +9 -5
- package/esm5/lib/upload/download.service.js +14 -1
- package/esm5/lib/upload/entity/completemultiuploadrequest.js +25 -0
- package/esm5/lib/upload/entity/{gspdocsecuritynaseinfo.js → gspdocsecuritybaseinfo.js} +1 -1
- package/esm5/lib/upload/entity/gspformstreamentity.js +29 -0
- package/esm5/lib/upload/entity/gspformuploadentity.js +1 -1
- package/esm5/lib/upload/entity/initmultiuploadrequest.js +23 -0
- package/esm5/lib/upload/entity/multiuploadrequest.js +25 -0
- package/esm5/lib/upload/entity/multiuploadresult.js +17 -0
- package/esm5/lib/upload/entity/uploadlimit.js +1 -1
- package/esm5/lib/upload/file-upload/file-upload.component.js +368 -296
- package/esm5/lib/upload/upload.service.js +5 -34
- package/esm5/public-api.js +2 -2
- package/fesm2015/gsp-svc-formdoc-upload.js +410 -329
- package/fesm2015/gsp-svc-formdoc-upload.js.map +1 -1
- package/fesm5/gsp-svc-formdoc-upload.js +447 -351
- package/fesm5/gsp-svc-formdoc-upload.js.map +1 -1
- package/gsp-svc-formdoc-upload.metadata.json +1 -1
- package/lib/i18n/language.resource.d.ts +4 -0
- package/lib/upload/download.service.d.ts +1 -0
- package/lib/upload/entity/completemultiuploadrequest.d.ts +9 -0
- package/lib/upload/entity/gspformstreamentity.d.ts +12 -0
- package/lib/upload/entity/initmultiuploadrequest.d.ts +7 -0
- package/lib/upload/entity/multiuploadrequest.d.ts +8 -0
- package/lib/upload/entity/multiuploadresult.d.ts +4 -0
- package/lib/upload/entity/uploadlimit.d.ts +1 -1
- package/lib/upload/file-upload/file-upload.component.d.ts +10 -6
- package/lib/upload/upload.service.d.ts +2 -3
- package/package.json +1 -1
- package/public-api.d.ts +1 -1
- /package/lib/upload/entity/{gspdocsecuritynaseinfo.d.ts → gspdocsecuritybaseinfo.d.ts} +0 -0
|
@@ -4,22 +4,24 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { Component, Input, ViewChild, TemplateRef, Injector, LOCALE_ID } from '@angular/core';
|
|
6
6
|
import { DocType } from '../entity/doctype';
|
|
7
|
-
import { GspFormDocInfo } from '../entity/gspformdocinfo';
|
|
8
7
|
import { OperatingModes } from '../entity/operatingmodes';
|
|
9
8
|
import { UploadService } from '../upload.service';
|
|
10
9
|
import { UploadFileInfo } from '../entity/uploadfileinfo';
|
|
11
10
|
import { MessagerService } from '@farris/ui-messager';
|
|
12
11
|
import { catchError, map, tap } from 'rxjs/operators';
|
|
13
12
|
import { of } from 'rxjs';
|
|
14
|
-
import { GspFormUploadEntity } from '../entity/gspformuploadentity';
|
|
15
13
|
import { UUID } from 'angular2-uuid';
|
|
16
14
|
import { ExStorageFileInfo } from '../entity/extensionstoragefileinfo';
|
|
17
15
|
import { LoadingService } from '@farris/ui-loading';
|
|
18
16
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
19
17
|
import { FileState } from '../entity/filestate';
|
|
20
18
|
import { LocalLangPipe } from '../../local.pipe';
|
|
21
|
-
import { GspDocSecurityBaseInfo } from '../entity/
|
|
19
|
+
import { GspDocSecurityBaseInfo } from '../entity/gspdocsecuritybaseinfo';
|
|
22
20
|
import { HttpClient } from '@angular/common/http';
|
|
21
|
+
import { InitMultiUploadRequest } from '../entity/initmultiuploadrequest';
|
|
22
|
+
import { CompleteMultiUploadRequest } from '../entity/completemultiuploadrequest';
|
|
23
|
+
import { GspFormStreamEntity } from '../entity/gspformstreamentity';
|
|
24
|
+
import { MultiUploadRequest } from '../entity/multiuploadrequest';
|
|
23
25
|
var FileUploadComponent = /** @class */ (function () {
|
|
24
26
|
function FileUploadComponent(msgService, uploadService, loadService, injector) {
|
|
25
27
|
this.msgService = msgService;
|
|
@@ -35,7 +37,7 @@ var FileUploadComponent = /** @class */ (function () {
|
|
|
35
37
|
this.beyondFileList = [];
|
|
36
38
|
this.showType = 0;
|
|
37
39
|
this.mouseOn = false;
|
|
38
|
-
this.bufferSize =
|
|
40
|
+
this.bufferSize = 5 * 1024 * 1024;
|
|
39
41
|
this.selectedFileCount = 0;
|
|
40
42
|
this.uploadIconAddress = '/platform/runtime/dfs/images/upload.svg';
|
|
41
43
|
this.uploadLittleIconAddress = '/platform/runtime/dfs/images/uploadIcon.svg';
|
|
@@ -43,8 +45,6 @@ var FileUploadComponent = /** @class */ (function () {
|
|
|
43
45
|
this.fileAllSelected = false;
|
|
44
46
|
this.uploadProcess = { width: '0%' };
|
|
45
47
|
this.fileTotalChunk = {};
|
|
46
|
-
//fileUploadState: { [key: string]: boolean } = {};
|
|
47
|
-
//flag: number = 0;
|
|
48
48
|
this.requestArray = new Array;
|
|
49
49
|
this.requestBodyArray = new Array;
|
|
50
50
|
this.uploadedChunk = {};
|
|
@@ -129,14 +129,15 @@ var FileUploadComponent = /** @class */ (function () {
|
|
|
129
129
|
_this.haveExtensionProperty = true;
|
|
130
130
|
}
|
|
131
131
|
}));
|
|
132
|
-
this.uploadService.
|
|
132
|
+
this.uploadService.getUploadInfo(this.rootId).subscribe((/**
|
|
133
133
|
* @param {?} res
|
|
134
134
|
* @return {?}
|
|
135
135
|
*/
|
|
136
136
|
function (res) {
|
|
137
137
|
if (res != null && res.error == null) {
|
|
138
138
|
_this.sameNameAllowed = res.sameNameAllowed;
|
|
139
|
-
_this.
|
|
139
|
+
_this.maxFileSize = parseInt(JSON.parse(res.validateConfiguration).maxFileSize);
|
|
140
|
+
_this.allowedMultiUpload = res.allowedMultiUpload;
|
|
140
141
|
if (!_this.sameNameAllowed) {
|
|
141
142
|
_this.uploadService.getUploadedFileInfoList(_this.formId, _this.rootId).subscribe((/**
|
|
142
143
|
* @param {?} res
|
|
@@ -150,17 +151,10 @@ var FileUploadComponent = /** @class */ (function () {
|
|
|
150
151
|
}
|
|
151
152
|
}));
|
|
152
153
|
}
|
|
153
|
-
_this.uploadService.getValidation(_this.validationId).subscribe((/**
|
|
154
|
-
* @param {?} res
|
|
155
|
-
* @return {?}
|
|
156
|
-
*/
|
|
157
|
-
function (res) {
|
|
158
|
-
_this.maxFileSize = parseInt(JSON.parse(res.configuration).maxFileSize);
|
|
159
|
-
}));
|
|
160
154
|
}
|
|
161
155
|
}));
|
|
162
156
|
if (this.oldIdList != null && this.oldIdList.length > 0) {
|
|
163
|
-
this.uploadService.cancel(this.oldIdList, this.rootId).subscribe();
|
|
157
|
+
// this.uploadService.cancel(this.oldIdList, this.rootId).subscribe();
|
|
164
158
|
}
|
|
165
159
|
};
|
|
166
160
|
/**
|
|
@@ -185,12 +179,7 @@ var FileUploadComponent = /** @class */ (function () {
|
|
|
185
179
|
* @return {?}
|
|
186
180
|
*/
|
|
187
181
|
function ($event) {
|
|
188
|
-
// const loading = this.loadService.show({
|
|
189
|
-
// message: this.localepipe.transform('uploading')
|
|
190
|
-
// });
|
|
191
182
|
var _this = this;
|
|
192
|
-
// this.totalLoad.close();
|
|
193
|
-
// this.totalLoad = null;
|
|
194
183
|
this.hasSelectedFile = true;
|
|
195
184
|
this.selectedFiles = document.querySelector('#file');
|
|
196
185
|
if (this.fileCount > 0) {
|
|
@@ -223,11 +212,6 @@ var FileUploadComponent = /** @class */ (function () {
|
|
|
223
212
|
* @return {?}
|
|
224
213
|
*/
|
|
225
214
|
function (x) { return x.fileName == selectedFile.name; })) != null) {
|
|
226
|
-
// this.uploadedNameList.push(selectedFile.name);
|
|
227
|
-
// this.msgService.question('之前已上传过同名文件: ' + selectedFile.name + ',需要替换么?', () => {
|
|
228
|
-
// uuid = this.uploadedFileInfoList.find(x => x.fileName == selectedFile.name).metadataId;
|
|
229
|
-
// this.uploadFile(uuid, selectedFile);
|
|
230
|
-
// })
|
|
231
215
|
/** @type {?} */
|
|
232
216
|
var msg_1 = this_1.msgService.show('warning', this_1.localepipe.transform('haveSameName') + selectedFile.name, {
|
|
233
217
|
initialState: {
|
|
@@ -315,11 +299,6 @@ var FileUploadComponent = /** @class */ (function () {
|
|
|
315
299
|
for (var i = 0; i < this.selectedFiles.files.length; i++) {
|
|
316
300
|
_loop_1(i);
|
|
317
301
|
}
|
|
318
|
-
// if (this.uploadedNameList.length > 0) {
|
|
319
|
-
// let name: string = this.listToString(this.uploadedNameList);
|
|
320
|
-
// this.msgService.warning('之前已上传过同名文件: ' + name + '请重新选择上传文件。');
|
|
321
|
-
// this.uploadedNameList = [];
|
|
322
|
-
// }
|
|
323
302
|
if (this.errFileList.length > 0) {
|
|
324
303
|
/** @type {?} */
|
|
325
304
|
var name_1 = this.listToString(this.errFileList);
|
|
@@ -340,11 +319,6 @@ var FileUploadComponent = /** @class */ (function () {
|
|
|
340
319
|
this.msgService.warning(name_3 + this.localepipe.transform('sizeMax') + this.maxFileSize + "KB" + this.localepipe.transform('rechooseFile'));
|
|
341
320
|
this.beyondFileList = [];
|
|
342
321
|
}
|
|
343
|
-
// if (this.errTypeList.length > 0) {
|
|
344
|
-
// let type: string = this.listToString(this.errTypeList);
|
|
345
|
-
// this.msgService.warning('不支持上传类型为 ' + type + '的文件请重新选择上传文件。');
|
|
346
|
-
// this.errTypeList = [];
|
|
347
|
-
// }
|
|
348
322
|
this.files = this.files.slice();
|
|
349
323
|
this.fileAllSelected = false;
|
|
350
324
|
$event.target.value = '';
|
|
@@ -374,69 +348,62 @@ var FileUploadComponent = /** @class */ (function () {
|
|
|
374
348
|
* @return {?}
|
|
375
349
|
*/
|
|
376
350
|
function (uuid, selectedFile, fileName) {
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
_this.addDocInfo(selectedFile, fileInfo, DocType.Other);
|
|
434
|
-
// let name: string = selectedFile.name;
|
|
435
|
-
// let errType = name.substring(selectedFile.name.lastIndexOf('.'));
|
|
436
|
-
// this.errTypeList.push(errType);
|
|
437
|
-
}
|
|
438
|
-
resolve(fileInfo);
|
|
439
|
-
}));
|
|
351
|
+
/** @type {?} */
|
|
352
|
+
var fileInfo;
|
|
353
|
+
fileInfo = {
|
|
354
|
+
id: uuid,
|
|
355
|
+
name: fileName,
|
|
356
|
+
type: selectedFile.type,
|
|
357
|
+
source: "",
|
|
358
|
+
size: this.getFileSize(selectedFile.size),
|
|
359
|
+
fileSize: selectedFile.size,
|
|
360
|
+
picListDisplayName: this.getPicListDisplayName(fileName),
|
|
361
|
+
queueListDisplayName: this.getQueueDisplayName(fileName),
|
|
362
|
+
//content: reader.result.toString(),
|
|
363
|
+
hasUploaded: false,
|
|
364
|
+
mouseOn: false,
|
|
365
|
+
selectd: false,
|
|
366
|
+
isUploading: true,
|
|
367
|
+
uploadResult: false,
|
|
368
|
+
uploadProcess: 0,
|
|
369
|
+
errorMessage: "",
|
|
370
|
+
extensionDropListId: 0,
|
|
371
|
+
extensionName: "",
|
|
372
|
+
securityDropListId: 0,
|
|
373
|
+
securityInfo: this.securityInfoList[0]
|
|
374
|
+
};
|
|
375
|
+
if (this.storageExtension != null)
|
|
376
|
+
fileInfo.extensionName = this.defaultPropertyName;
|
|
377
|
+
/** @type {?} */
|
|
378
|
+
var type = selectedFile.type;
|
|
379
|
+
if (type.includes("tiff")) {
|
|
380
|
+
this.addDocInfo(selectedFile, fileInfo, DocType.Other);
|
|
381
|
+
}
|
|
382
|
+
else if (type.includes("image")) {
|
|
383
|
+
this.addDocInfo(selectedFile, fileInfo, DocType.Image);
|
|
384
|
+
}
|
|
385
|
+
else if (type.includes("word")) {
|
|
386
|
+
this.addDocInfo(selectedFile, fileInfo, DocType.Word);
|
|
387
|
+
}
|
|
388
|
+
else if (type.includes("pdf")) {
|
|
389
|
+
this.addDocInfo(selectedFile, fileInfo, DocType.Pdf);
|
|
390
|
+
}
|
|
391
|
+
else if (type.includes("plain")) {
|
|
392
|
+
this.addDocInfo(selectedFile, fileInfo, DocType.Txt);
|
|
393
|
+
}
|
|
394
|
+
else if (type.includes("sheet") || type.includes("excel")) {
|
|
395
|
+
this.addDocInfo(selectedFile, fileInfo, DocType.Excel);
|
|
396
|
+
}
|
|
397
|
+
else if (type.includes("powerpoint") || type.includes("presentation")) {
|
|
398
|
+
this.addDocInfo(selectedFile, fileInfo, DocType.Powerpoint);
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
this.addDocInfo(selectedFile, fileInfo, DocType.Other);
|
|
402
|
+
// let name: string = selectedFile.name;
|
|
403
|
+
// let errType = name.substring(selectedFile.name.lastIndexOf('.'));
|
|
404
|
+
// this.errTypeList.push(errType);
|
|
405
|
+
}
|
|
406
|
+
return fileInfo;
|
|
440
407
|
};
|
|
441
408
|
/**
|
|
442
409
|
* @param {?} uuid
|
|
@@ -455,126 +422,190 @@ var FileUploadComponent = /** @class */ (function () {
|
|
|
455
422
|
function (uuid, selectedFile, fileName, state) {
|
|
456
423
|
var _this = this;
|
|
457
424
|
if (state === void 0) { state = FileState.New; }
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
425
|
+
/** @type {?} */
|
|
426
|
+
var fileInfo = this.handleFileInfo(uuid, selectedFile, fileName);
|
|
427
|
+
/** @type {?} */
|
|
428
|
+
var uploadFileInfo = new UploadFileInfo();
|
|
429
|
+
uploadFileInfo.metadataId = uuid;
|
|
430
|
+
uploadFileInfo.fileName = fileInfo.name;
|
|
431
|
+
uploadFileInfo.fileSize = fileInfo.fileSize;
|
|
432
|
+
uploadFileInfo.state = state;
|
|
433
|
+
uploadFileInfo.securityInfo = this.securityInfoList[0];
|
|
434
|
+
//判断是否支持分片上传
|
|
435
|
+
if (this.allowedMultiUpload) {
|
|
436
|
+
//支持分片上传
|
|
467
437
|
/** @type {?} */
|
|
468
|
-
var
|
|
469
|
-
|
|
438
|
+
var initRequest = new InitMultiUploadRequest;
|
|
439
|
+
initRequest.path = this.formId;
|
|
440
|
+
initRequest.metadataId = uuid;
|
|
441
|
+
initRequest.rootId = this.rootId;
|
|
442
|
+
initRequest.size = fileInfo.fileSize;
|
|
443
|
+
initRequest.fileName = fileName;
|
|
444
|
+
//初始化分片
|
|
445
|
+
this.initMultiUpload(initRequest).subscribe((/**
|
|
446
|
+
* @param {?} res
|
|
447
|
+
* @return {?}
|
|
448
|
+
*/
|
|
449
|
+
function (res) {
|
|
450
|
+
if (res.error != null) {
|
|
451
|
+
_this.files[_this.files.indexOf(fileInfo)].uploadResult = false;
|
|
452
|
+
_this.files[_this.files.indexOf(fileInfo)].isUploading = false;
|
|
453
|
+
_this.files[_this.files.indexOf(fileInfo)].errorMessage = res.error.Message;
|
|
454
|
+
}
|
|
455
|
+
else {
|
|
456
|
+
/** @type {?} */
|
|
457
|
+
var uploadId_1 = res.uploadId;
|
|
458
|
+
/** @type {?} */
|
|
459
|
+
var chunkTotal = Math.ceil(selectedFile.size / _this.bufferSize);
|
|
460
|
+
/** @type {?} */
|
|
461
|
+
var chunkIndex = 0;
|
|
462
|
+
/** @type {?} */
|
|
463
|
+
var multiResultList_1 = [];
|
|
464
|
+
_this.fileTotalChunk[uuid] = chunkTotal;
|
|
465
|
+
_this.uploadedChunk[uuid] = 0;
|
|
466
|
+
while (chunkIndex < chunkTotal) {
|
|
467
|
+
/** @type {?} */
|
|
468
|
+
var nextSize = Math.min((chunkIndex + 1) * _this.bufferSize, selectedFile.size);
|
|
469
|
+
/** @type {?} */
|
|
470
|
+
var fileData = selectedFile.slice(chunkIndex * _this.bufferSize, nextSize);
|
|
471
|
+
/** @type {?} */
|
|
472
|
+
var multiRequest = new MultiUploadRequest;
|
|
473
|
+
multiRequest.metadataId = uuid;
|
|
474
|
+
multiRequest.rootId = _this.rootId;
|
|
475
|
+
multiRequest.uploadId = uploadId_1;
|
|
476
|
+
multiRequest.index = chunkIndex;
|
|
477
|
+
multiRequest.total = chunkTotal;
|
|
478
|
+
multiRequest.size = fileData.size;
|
|
479
|
+
/** @type {?} */
|
|
480
|
+
var formData = new FormData();
|
|
481
|
+
formData.append('multiRequest', JSON.stringify(multiRequest));
|
|
482
|
+
formData.append('file', fileData);
|
|
483
|
+
_this.multiUpload(formData).subscribe((/**
|
|
484
|
+
* @param {?} res
|
|
485
|
+
* @return {?}
|
|
486
|
+
*/
|
|
487
|
+
function (res) {
|
|
488
|
+
if (res.error != null) {
|
|
489
|
+
_this.files[_this.files.indexOf(fileInfo)].uploadResult = false;
|
|
490
|
+
_this.files[_this.files.indexOf(fileInfo)].isUploading = false;
|
|
491
|
+
_this.files[_this.files.indexOf(fileInfo)].errorMessage = res.error.Message;
|
|
492
|
+
}
|
|
493
|
+
else {
|
|
494
|
+
multiResultList_1.push(res.result);
|
|
495
|
+
_this.uploadedChunk[uuid]++;
|
|
496
|
+
_this.files[_this.files.indexOf(fileInfo)].uploadProcess = Number.parseInt((_this.uploadedChunk[uuid] / _this.fileTotalChunk[uuid] * 100).toFixed(0));
|
|
497
|
+
if (_this.uploadedChunk[uuid] == _this.fileTotalChunk[uuid]) {
|
|
498
|
+
if (multiResultList_1.length == _this.fileTotalChunk[uuid]) {
|
|
499
|
+
_this.files[_this.files.indexOf(fileInfo)].uploadResult = true;
|
|
500
|
+
_this.files[_this.files.indexOf(fileInfo)].isUploading = false;
|
|
501
|
+
_this.uploadFileInfoList = _this.uploadFileInfoList.concat(uploadFileInfo);
|
|
502
|
+
_this.uploadedFileInfoList = _this.uploadedFileInfoList.concat(uploadFileInfo);
|
|
503
|
+
_this.uploadedFileTotal++;
|
|
504
|
+
/** @type {?} */
|
|
505
|
+
var completeMultiUploadRequest = new CompleteMultiUploadRequest;
|
|
506
|
+
completeMultiUploadRequest.metadataId = uuid;
|
|
507
|
+
completeMultiUploadRequest.partList = multiResultList_1;
|
|
508
|
+
completeMultiUploadRequest.rootId = _this.rootId;
|
|
509
|
+
completeMultiUploadRequest.uploadId = uploadId_1;
|
|
510
|
+
completeMultiUploadRequest.size = fileInfo.fileSize;
|
|
511
|
+
if (_this.haveExtensionProperty)
|
|
512
|
+
completeMultiUploadRequest.exPropertyName = _this.defaultPropertyName;
|
|
513
|
+
_this.completeMultiUpload(completeMultiUploadRequest).subscribe((/**
|
|
514
|
+
* @param {?} res
|
|
515
|
+
* @return {?}
|
|
516
|
+
*/
|
|
517
|
+
function (res) {
|
|
518
|
+
}));
|
|
519
|
+
//后台异步拼接文档
|
|
520
|
+
}
|
|
521
|
+
else {
|
|
522
|
+
_this.files[_this.files.indexOf(fileInfo)].uploadResult = false;
|
|
523
|
+
_this.files[_this.files.indexOf(fileInfo)].isUploading = false;
|
|
524
|
+
_this.files[_this.files.indexOf(fileInfo)].errorMessage = _this.localepipe.transform('mismatchChunkSize');
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
}));
|
|
529
|
+
chunkIndex = chunkIndex + 1;
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
}));
|
|
533
|
+
}
|
|
534
|
+
else {
|
|
470
535
|
/** @type {?} */
|
|
471
|
-
var
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
uploadInfo.formId = _this.formId;
|
|
481
|
-
uploadInfo.mode = OperatingModes.Temp;
|
|
482
|
-
uploadInfo.rootId = _this.rootId;
|
|
483
|
-
/** @type {?} */
|
|
484
|
-
var docInfo = new GspFormDocInfo;
|
|
485
|
-
docInfo.fileName = fileName;
|
|
486
|
-
docInfo.metadataId = uuid;
|
|
487
|
-
docInfo.total = chunkTotal;
|
|
488
|
-
_this.uploadedChunk[docInfo.metadataId] = 0;
|
|
489
|
-
/** @type {?} */
|
|
490
|
-
var nextSize = Math.min((chunkIndex + 1) * _this.bufferSize, selectedFile.size);
|
|
491
|
-
/** @type {?} */
|
|
492
|
-
var fileData = selectedFile.slice(chunkIndex * _this.bufferSize, nextSize);
|
|
493
|
-
// let reader = new FileReader();
|
|
494
|
-
// reader.readAsBinaryString(fileData);
|
|
495
|
-
/** @type {?} */
|
|
496
|
-
var innerIndex = chunkIndex;
|
|
497
|
-
// reader.onload = () => {
|
|
498
|
-
// docInfo.fileContent = btoa(reader.result.toString());
|
|
499
|
-
docInfo.size = selectedFile.size;
|
|
500
|
-
docInfo.index = innerIndex;
|
|
501
|
-
docInfo.fileContent = "";
|
|
502
|
-
//chunkIndex++;
|
|
503
|
-
if (_this.haveExtensionProperty)
|
|
504
|
-
docInfo.exPropertyName = _this.defaultPropertyName;
|
|
505
|
-
//docInfo.isLast = true;
|
|
506
|
-
uploadInfo.docInfo = docInfo;
|
|
507
|
-
// let info = uploadInfo;
|
|
508
|
-
// this.requestArray.push(this.uploadService.uploadFile(uploadInfo));
|
|
509
|
-
// this.requestBodyArray.push(info);
|
|
510
|
-
//封装请求formdata
|
|
511
|
-
/** @type {?} */
|
|
512
|
-
var formData = new FormData();
|
|
513
|
-
formData.append('uploadInfo', JSON.stringify(uploadInfo));
|
|
514
|
-
formData.append('docInfo', JSON.stringify(docInfo));
|
|
515
|
-
formData.append('file', fileData);
|
|
516
|
-
// }
|
|
517
|
-
//console.log(chunkIndex + 1);
|
|
518
|
-
chunkIndex = chunkIndex + 1;
|
|
519
|
-
}
|
|
536
|
+
var entity = new GspFormStreamEntity;
|
|
537
|
+
entity.formId = this.formId;
|
|
538
|
+
entity.metadataId = uuid;
|
|
539
|
+
entity.mode = OperatingModes.Temp;
|
|
540
|
+
entity.rootId = this.rootId;
|
|
541
|
+
entity.size = selectedFile.size;
|
|
542
|
+
entity.fileName = fileName;
|
|
543
|
+
if (this.haveExtensionProperty)
|
|
544
|
+
entity.exPropertyName = this.defaultPropertyName;
|
|
520
545
|
/** @type {?} */
|
|
521
|
-
var
|
|
522
|
-
|
|
523
|
-
|
|
546
|
+
var formData = new FormData();
|
|
547
|
+
formData.append('uploadEntity', JSON.stringify(entity));
|
|
548
|
+
formData.append('file', selectedFile);
|
|
549
|
+
this.uploadSingleFile(formData).subscribe((/**
|
|
550
|
+
* @param {?} res
|
|
524
551
|
* @return {?}
|
|
525
552
|
*/
|
|
526
|
-
function (
|
|
527
|
-
if (
|
|
528
|
-
|
|
529
|
-
|
|
553
|
+
function (res) {
|
|
554
|
+
if (res != null) {
|
|
555
|
+
_this.files[_this.files.indexOf(fileInfo)].uploadResult = false;
|
|
556
|
+
_this.files[_this.files.indexOf(fileInfo)].isUploading = false;
|
|
557
|
+
_this.files[_this.files.indexOf(fileInfo)].errorMessage = res.error.Message;
|
|
558
|
+
}
|
|
559
|
+
else {
|
|
560
|
+
_this.files[_this.files.indexOf(fileInfo)].uploadResult = true;
|
|
561
|
+
_this.files[_this.files.indexOf(fileInfo)].isUploading = false;
|
|
562
|
+
_this.uploadFileInfoList = _this.uploadFileInfoList.concat(uploadFileInfo);
|
|
563
|
+
_this.uploadedFileInfoList = _this.uploadedFileInfoList.concat(uploadFileInfo);
|
|
564
|
+
_this.uploadedFileTotal++;
|
|
530
565
|
}
|
|
531
566
|
}));
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
567
|
+
}
|
|
568
|
+
/** @type {?} */
|
|
569
|
+
var index = -1;
|
|
570
|
+
this.files.forEach((/**
|
|
571
|
+
* @param {?} x
|
|
572
|
+
* @return {?}
|
|
573
|
+
*/
|
|
574
|
+
function (x) {
|
|
575
|
+
if (x.name == fileInfo.name) {
|
|
576
|
+
if (index == -1)
|
|
577
|
+
index = _this.files.indexOf(x);
|
|
537
578
|
}
|
|
538
579
|
}));
|
|
580
|
+
if (index != -1 && index != this.files.length - 1) {
|
|
581
|
+
this.files.splice(index, 1);
|
|
582
|
+
this.uploadFileInfoList.splice(index, 1);
|
|
583
|
+
this.uploadedFileInfoList.splice(index, 1);
|
|
584
|
+
//this.uploadedFileTotal--;
|
|
585
|
+
}
|
|
539
586
|
};
|
|
540
587
|
/**
|
|
541
|
-
* @param {?}
|
|
542
|
-
* @param {?} fileInfo
|
|
543
|
-
* @param {?} docInfo
|
|
544
|
-
* @param {?} uploadFileInfo
|
|
588
|
+
* @param {?} formdata
|
|
545
589
|
* @return {?}
|
|
546
590
|
*/
|
|
547
|
-
FileUploadComponent.prototype.
|
|
548
|
-
* @param {?}
|
|
549
|
-
* @param {?} fileInfo
|
|
550
|
-
* @param {?} docInfo
|
|
551
|
-
* @param {?} uploadFileInfo
|
|
591
|
+
FileUploadComponent.prototype.uploadSingleFile = /**
|
|
592
|
+
* @param {?} formdata
|
|
552
593
|
* @return {?}
|
|
553
594
|
*/
|
|
554
|
-
function (
|
|
555
|
-
|
|
556
|
-
|
|
595
|
+
function (formdata) {
|
|
596
|
+
/** @type {?} */
|
|
597
|
+
var url = "/api/runtime/dfs/v1.0/formdoc/single";
|
|
598
|
+
return this.httpclient.post(url, formdata).pipe(tap((/**
|
|
557
599
|
* @param {?} res
|
|
558
600
|
* @return {?}
|
|
559
601
|
*/
|
|
560
|
-
function (res) {
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
_this.uploadedChunk[docInfo.metadataId]++;
|
|
568
|
-
_this.files[_this.files.indexOf(fileInfo)].uploadProcess = Number.parseInt((_this.uploadedChunk[docInfo.metadataId] / _this.fileTotalChunk[docInfo.metadataId] * 100).toFixed(0));
|
|
569
|
-
if (_this.uploadedChunk[docInfo.metadataId] == _this.fileTotalChunk[docInfo.metadataId]) {
|
|
570
|
-
_this.files[_this.files.indexOf(fileInfo)].uploadResult = true;
|
|
571
|
-
_this.files[_this.files.indexOf(fileInfo)].isUploading = false;
|
|
572
|
-
_this.uploadFileInfoList = _this.uploadFileInfoList.concat(uploadFileInfo);
|
|
573
|
-
_this.uploadedFileInfoList = _this.uploadedFileInfoList.concat(uploadFileInfo);
|
|
574
|
-
_this.uploadedFileTotal++;
|
|
575
|
-
}
|
|
576
|
-
}
|
|
577
|
-
}));
|
|
602
|
+
function (res) { })), catchError((/**
|
|
603
|
+
* @param {?} error
|
|
604
|
+
* @return {?}
|
|
605
|
+
*/
|
|
606
|
+
function (error) {
|
|
607
|
+
return of(error);
|
|
608
|
+
})));
|
|
578
609
|
};
|
|
579
610
|
/**
|
|
580
611
|
* @param {?} formdata
|
|
@@ -587,7 +618,6 @@ var FileUploadComponent = /** @class */ (function () {
|
|
|
587
618
|
function (formdata) {
|
|
588
619
|
/** @type {?} */
|
|
589
620
|
var url = "/api/runtime/dfs/v1.0/formdoc/slice";
|
|
590
|
-
//url = "/api/runtime/dfs/v1.0/formdoc/list";
|
|
591
621
|
return this.httpclient.post(url, formdata).pipe(tap((/**
|
|
592
622
|
* @param {?} res
|
|
593
623
|
* @return {?}
|
|
@@ -600,6 +630,75 @@ var FileUploadComponent = /** @class */ (function () {
|
|
|
600
630
|
return of(error);
|
|
601
631
|
})));
|
|
602
632
|
};
|
|
633
|
+
/**
|
|
634
|
+
* @param {?} request
|
|
635
|
+
* @return {?}
|
|
636
|
+
*/
|
|
637
|
+
FileUploadComponent.prototype.initMultiUpload = /**
|
|
638
|
+
* @param {?} request
|
|
639
|
+
* @return {?}
|
|
640
|
+
*/
|
|
641
|
+
function (request) {
|
|
642
|
+
/** @type {?} */
|
|
643
|
+
var url = "/api/runtime/dfs/v1.0/formdoc/multi/init";
|
|
644
|
+
return this.httpclient.post(url, request).pipe(tap((/**
|
|
645
|
+
* @param {?} res
|
|
646
|
+
* @return {?}
|
|
647
|
+
*/
|
|
648
|
+
function (res) { })), catchError((/**
|
|
649
|
+
* @param {?} error
|
|
650
|
+
* @return {?}
|
|
651
|
+
*/
|
|
652
|
+
function (error) {
|
|
653
|
+
return of(error);
|
|
654
|
+
})));
|
|
655
|
+
};
|
|
656
|
+
/**
|
|
657
|
+
* @param {?} formdata
|
|
658
|
+
* @return {?}
|
|
659
|
+
*/
|
|
660
|
+
FileUploadComponent.prototype.multiUpload = /**
|
|
661
|
+
* @param {?} formdata
|
|
662
|
+
* @return {?}
|
|
663
|
+
*/
|
|
664
|
+
function (formdata) {
|
|
665
|
+
/** @type {?} */
|
|
666
|
+
var url = "/api/runtime/dfs/v1.0/formdoc/multi/upload";
|
|
667
|
+
return this.httpclient.post(url, formdata).pipe(tap((/**
|
|
668
|
+
* @param {?} res
|
|
669
|
+
* @return {?}
|
|
670
|
+
*/
|
|
671
|
+
function (res) { })), catchError((/**
|
|
672
|
+
* @param {?} error
|
|
673
|
+
* @return {?}
|
|
674
|
+
*/
|
|
675
|
+
function (error) {
|
|
676
|
+
return of(error);
|
|
677
|
+
})));
|
|
678
|
+
};
|
|
679
|
+
/**
|
|
680
|
+
* @param {?} request
|
|
681
|
+
* @return {?}
|
|
682
|
+
*/
|
|
683
|
+
FileUploadComponent.prototype.completeMultiUpload = /**
|
|
684
|
+
* @param {?} request
|
|
685
|
+
* @return {?}
|
|
686
|
+
*/
|
|
687
|
+
function (request) {
|
|
688
|
+
/** @type {?} */
|
|
689
|
+
var url = "/api/runtime/dfs/v1.0/formdoc/multi/complete";
|
|
690
|
+
return this.httpclient.post(url, request).pipe(tap((/**
|
|
691
|
+
* @param {?} res
|
|
692
|
+
* @return {?}
|
|
693
|
+
*/
|
|
694
|
+
function (res) { })), catchError((/**
|
|
695
|
+
* @param {?} error
|
|
696
|
+
* @return {?}
|
|
697
|
+
*/
|
|
698
|
+
function (error) {
|
|
699
|
+
return of(error);
|
|
700
|
+
})));
|
|
701
|
+
};
|
|
603
702
|
/**
|
|
604
703
|
* @return {?}
|
|
605
704
|
*/
|
|
@@ -613,8 +712,6 @@ var FileUploadComponent = /** @class */ (function () {
|
|
|
613
712
|
* @return {?}
|
|
614
713
|
*/
|
|
615
714
|
function (element) {
|
|
616
|
-
// let obj: any = document.getElementById(element.name);
|
|
617
|
-
// obj.checked = true;
|
|
618
715
|
element.selectd = true;
|
|
619
716
|
}));
|
|
620
717
|
this.fileAllSelected = true;
|
|
@@ -626,8 +723,6 @@ var FileUploadComponent = /** @class */ (function () {
|
|
|
626
723
|
* @return {?}
|
|
627
724
|
*/
|
|
628
725
|
function (element) {
|
|
629
|
-
// let obj: any = document.getElementById(element.name);
|
|
630
|
-
// obj.checked = false;
|
|
631
726
|
element.selectd = false;
|
|
632
727
|
}));
|
|
633
728
|
this.fileAllSelected = false;
|
|
@@ -721,9 +816,6 @@ var FileUploadComponent = /** @class */ (function () {
|
|
|
721
816
|
metadataList.push(element.id);
|
|
722
817
|
_this.files.splice(_this.files.indexOf(element), 1);
|
|
723
818
|
if (element.uploadResult) {
|
|
724
|
-
// let idList: string[] = [];
|
|
725
|
-
// idList.push(fileInfo.id);
|
|
726
|
-
// this.uploadService.cancel(idList, this.rootId).subscribe();
|
|
727
819
|
_this.uploadFileInfoList.splice(_this.uploadFileInfoList.indexOf(_this.uploadFileInfoList.filter((/**
|
|
728
820
|
* @param {?} x
|
|
729
821
|
* @return {?}
|
|
@@ -789,90 +881,76 @@ var FileUploadComponent = /** @class */ (function () {
|
|
|
789
881
|
*/
|
|
790
882
|
function (selectdFile, fileInfo, docType) {
|
|
791
883
|
var _this = this;
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
884
|
+
switch (docType) {
|
|
885
|
+
case DocType.Word: {
|
|
886
|
+
fileInfo.source = "/platform/runtime/dfs/images/word.png";
|
|
887
|
+
this.files.push(fileInfo);
|
|
888
|
+
break;
|
|
889
|
+
}
|
|
890
|
+
case DocType.Pdf: {
|
|
891
|
+
fileInfo.source = "/platform/runtime/dfs/images/pdf.png";
|
|
892
|
+
this.files.push(fileInfo);
|
|
893
|
+
break;
|
|
894
|
+
}
|
|
895
|
+
case DocType.Excel: {
|
|
896
|
+
fileInfo.source = "/platform/runtime/dfs/images/excel.png";
|
|
897
|
+
this.files.push(fileInfo);
|
|
898
|
+
break;
|
|
899
|
+
}
|
|
900
|
+
case DocType.Txt: {
|
|
901
|
+
fileInfo.source = "/platform/runtime/dfs/images/txt.png";
|
|
902
|
+
this.files.push(fileInfo);
|
|
903
|
+
break;
|
|
904
|
+
}
|
|
905
|
+
case DocType.Powerpoint: {
|
|
906
|
+
fileInfo.source = "/platform/runtime/dfs/images/ppt.png";
|
|
907
|
+
this.files.push(fileInfo);
|
|
908
|
+
break;
|
|
909
|
+
}
|
|
910
|
+
case DocType.Other: {
|
|
911
|
+
fileInfo.source = "/platform/runtime/dfs/images/file.png";
|
|
912
|
+
this.files.push(fileInfo);
|
|
913
|
+
break;
|
|
914
|
+
}
|
|
915
|
+
case DocType.Image: {
|
|
916
|
+
/** @type {?} */
|
|
917
|
+
var reader_1 = new FileReader();
|
|
918
|
+
reader_1.readAsDataURL(selectdFile);
|
|
919
|
+
reader_1.onload = (/**
|
|
920
|
+
* @param {?} _event
|
|
921
|
+
* @return {?}
|
|
922
|
+
*/
|
|
923
|
+
function (_event) {
|
|
924
|
+
/** @type {?} */
|
|
925
|
+
var imgUrl = reader_1.result;
|
|
926
|
+
if (_this.injector != null) {
|
|
927
|
+
/** @type {?} */
|
|
928
|
+
var sanitizer = _this.injector.get(DomSanitizer);
|
|
929
|
+
imgUrl = sanitizer.bypassSecurityTrustResourceUrl(imgUrl);
|
|
930
|
+
}
|
|
931
|
+
fileInfo.source = imgUrl;
|
|
825
932
|
_this.files.push(fileInfo);
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
_this.
|
|
830
|
-
* @param {?}
|
|
933
|
+
//因为异步处理的差异,补偿一次删除
|
|
934
|
+
/** @type {?} */
|
|
935
|
+
var index = -1;
|
|
936
|
+
_this.files.forEach((/**
|
|
937
|
+
* @param {?} x
|
|
831
938
|
* @return {?}
|
|
832
939
|
*/
|
|
833
|
-
function (
|
|
834
|
-
fileInfo.
|
|
835
|
-
|
|
836
|
-
|
|
940
|
+
function (x) {
|
|
941
|
+
if (x.name == fileInfo.name) {
|
|
942
|
+
if (index == -1)
|
|
943
|
+
index = _this.files.indexOf(x);
|
|
944
|
+
}
|
|
837
945
|
}));
|
|
838
|
-
|
|
946
|
+
if (index != -1 && index != _this.files.length - 1) {
|
|
947
|
+
_this.files.splice(index, 1);
|
|
948
|
+
_this.uploadFileInfoList.splice(index, 1);
|
|
949
|
+
_this.uploadedFileInfoList.splice(index, 1);
|
|
950
|
+
}
|
|
951
|
+
});
|
|
839
952
|
}
|
|
840
|
-
|
|
841
|
-
}));
|
|
842
|
-
};
|
|
843
|
-
/**
|
|
844
|
-
* @param {?} selectdFile
|
|
845
|
-
* @return {?}
|
|
846
|
-
*/
|
|
847
|
-
FileUploadComponent.prototype.getImageUrl = /**
|
|
848
|
-
* @param {?} selectdFile
|
|
849
|
-
* @return {?}
|
|
850
|
-
*/
|
|
851
|
-
function (selectdFile) {
|
|
852
|
-
var _this = this;
|
|
853
|
-
return new Promise((/**
|
|
854
|
-
* @param {?} resolve
|
|
855
|
-
* @return {?}
|
|
856
|
-
*/
|
|
857
|
-
function (resolve) {
|
|
858
|
-
/** @type {?} */
|
|
859
|
-
var reader = new FileReader();
|
|
860
|
-
reader.readAsDataURL(selectdFile);
|
|
861
|
-
reader.onload = (/**
|
|
862
|
-
* @param {?} _event
|
|
863
|
-
* @return {?}
|
|
864
|
-
*/
|
|
865
|
-
function (_event) {
|
|
866
|
-
/** @type {?} */
|
|
867
|
-
var imgUrl = reader.result;
|
|
868
|
-
if (_this.injector != null) {
|
|
869
|
-
/** @type {?} */
|
|
870
|
-
var sanitizer = _this.injector.get(DomSanitizer);
|
|
871
|
-
imgUrl = sanitizer.bypassSecurityTrustResourceUrl(imgUrl);
|
|
872
|
-
}
|
|
873
|
-
resolve(imgUrl);
|
|
874
|
-
});
|
|
875
|
-
}));
|
|
953
|
+
}
|
|
876
954
|
};
|
|
877
955
|
/**
|
|
878
956
|
* @param {?} strList
|
|
@@ -969,9 +1047,6 @@ var FileUploadComponent = /** @class */ (function () {
|
|
|
969
1047
|
* @return {?}
|
|
970
1048
|
*/
|
|
971
1049
|
function (x) { return x.isUploading || x.uploadResult; })).length) {
|
|
972
|
-
// this.notifyService.success(<NotifyOptions>{
|
|
973
|
-
// msg: '保存成功!', timeout: 3000
|
|
974
|
-
// });
|
|
975
1050
|
this.msgService.warning(this.localepipe.transform('wait'));
|
|
976
1051
|
return of(false);
|
|
977
1052
|
}
|
|
@@ -1052,9 +1127,6 @@ var FileUploadComponent = /** @class */ (function () {
|
|
|
1052
1127
|
*/
|
|
1053
1128
|
function (x) { return x.metadataId == file.id; })), 1);
|
|
1054
1129
|
}
|
|
1055
|
-
// var obj:any = document.querySelector('#file');
|
|
1056
|
-
// obj.files.remove();
|
|
1057
|
-
//obj.value='';
|
|
1058
1130
|
};
|
|
1059
1131
|
/**
|
|
1060
1132
|
* @param {?} size
|
|
@@ -1207,7 +1279,7 @@ if (false) {
|
|
|
1207
1279
|
/** @type {?} */
|
|
1208
1280
|
FileUploadComponent.prototype.uploadedFileTotal;
|
|
1209
1281
|
/** @type {?} */
|
|
1210
|
-
FileUploadComponent.prototype.
|
|
1282
|
+
FileUploadComponent.prototype.allowedMultiUpload;
|
|
1211
1283
|
/** @type {?} */
|
|
1212
1284
|
FileUploadComponent.prototype.haveExtensionProperty;
|
|
1213
1285
|
/** @type {?} */
|
|
@@ -1268,4 +1340,4 @@ if (false) {
|
|
|
1268
1340
|
FileUploadComponent.prototype.injector;
|
|
1269
1341
|
/* Skipping unhandled member: ;*/
|
|
1270
1342
|
}
|
|
1271
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdzcC1zdmMvZm9ybWRvYy11cGxvYWQvIiwic291cmNlcyI6WyJsaWIvdXBsb2FkL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBWSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxP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Q2hpbGQsIFRlbXBsYXRlUmVmLCBPcHRpb25hbCwgSW5qZWN0b3IsIExPQ0FMRV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmlsZUluZm8gfSBmcm9tICcuLi9lbnRpdHkvZmlsZWluZm8nO1xuaW1wb3J0IHsgRG9jVHlwZSB9IGZyb20gJy4uL2VudGl0eS9kb2N0eXBlJztcbmltcG9ydCB7IEdzcEZvcm1Eb2NJbmZvIH0gZnJvbSAnLi4vZW50aXR5L2dzcGZvcm1kb2NpbmZvJztcbmltcG9ydCB7IE9wZXJhdGluZ01vZGVzIH0gZnJvbSAnLi4vZW50aXR5L29wZXJhdGluZ21vZGVzJztcbmltcG9ydCB7IFVwbG9hZFNlcnZpY2UgfSBmcm9tICcuLi91cGxvYWQuc2VydmljZSc7XG5pbXBvcnQgeyBVcGxvYWRGaWxlSW5mbyB9IGZyb20gJy4uL2VudGl0eS91cGxvYWRmaWxlaW5mbyc7XG5pbXBvcnQgeyBNZXNzYWdlclNlcnZpY2UgfSBmcm9tICdAZmFycmlzL3VpLW1lc3NhZ2VyJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdzcEZvcm1VcGxvYWRFbnRpdHkgfSBmcm9tICcuLi9lbnRpdHkvZ3NwZm9ybXVwbG9hZGVudGl0eSc7XG5pbXBvcnQgeyBVVUlEIH0gZnJvbSAnYW5ndWxhcjItdXVpZCc7XG5pbXBvcnQgeyBTdG9yYWdlRXh0ZW5zaW9uIH0gZnJvbSAnLi4vZW50aXR5L3N0b3JhZ2VleHRlbnNpb24nO1xuaW1wb3J0IHsgRXhTdG9yYWdlRmlsZUluZm8gfSBmcm9tICcuLi9lbnRpdHkvZXh0ZW5zaW9uc3RvcmFnZWZpbGVpbmZvJztcbmltcG9ydCB7IERyb3BMaXN0RW50aXR5IH0gZnJvbSAnLi4vZW50aXR5L2Ryb3BsaXN0ZW50aXR5JztcbmltcG9ydCB7IExvYWRpbmdTZXJ2aWNlIH0gZnJvbSAnQGZhcnJpcy91aS1sb2FkaW5nJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgZmlsbFByb3BlcnRpZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlL3NyYy91dGlsL3Byb3BlcnR5JztcbmltcG9ydCB7IEZpbGVTdGF0ZSB9IGZyb20gJy4uL2VudGl0eS9maWxlc3RhdGUnO1xuaW1wb3J0IHsgTG9jYWxMYW5nUGlwZSB9IGZyb20gJy4uLy4uL2xvY2FsLnBpcGUnO1xuaW1wb3J0IHsgR3NwRG9jU2VjdXJpdHlCYXNlSW5mbyB9IGZyb20gJy4uL2VudGl0eS9nc3Bkb2NzZWN1cml0eW5hc2VpbmZvJztcbmltcG9ydCB7IHN0YXRlIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBTZWN1cml0eUVudGl0eSB9IGZyb20gJy4uL2VudGl0eS9zZWN1cml0eWVudGl0eSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICd1cmwnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1maWxlLXVwbG9hZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsZVVwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgZmlsZXM6IEZpbGVJbmZvW10gPSBbXTtcbiAgbWV0YWRhdGFJZExpc3Q6IHN0cmluZ1tdID0gW107XG4gIHVwbG9hZEZpbGVJbmZvTGlzdDogVXBsb2FkRmlsZUluZm9bXSA9IFtdO1xuICBlcnJGaWxlTGlzdDogc3RyaW5nW10gPSBbXTtcbiAgZXJyVHlwZUxpc3Q6IHN0cmluZ1tdID0gW107XG4gIG51bGxGaWxlTGlzdDogc3RyaW5nW10gPSBbXTtcbiAgYmV5b25kRmlsZUxpc3Q6IHN0cmluZ1tdID0gW107XG4gIHNob3dUeXBlOiBudW1iZXIgPSAwO1xuICBtb3VzZU9uOiBib29sZWFuID0gZmFsc2U7XG4gIGJ1ZmZlclNpemUgPSAxMCAqIDEwMjQgKiAxMDI0O1xuICBzZWxlY3RlZEZpbGVzOiBhbnk7XG5cbiAgc2VsZWN0ZWRGaWxlQ291bnQ6IG51bWJlciA9IDA7XG5cbiAgdXBsb2FkSWNvbkFkZHJlc3MgPSAnL3BsYXRmb3JtL3J1bnRpbWUvZGZzL2ltYWdlcy91cGxvYWQuc3ZnJztcbiAgdXBsb2FkTGl0dGxlSWNvbkFkZHJlc3MgPSAnL3BsYXRmb3JtL3J1bnRpbWUvZGZzL2ltYWdlcy91cGxvYWRJY29uLnN2Zyc7XG5cbiAgaGFzU2VsZWN0ZWRGaWxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZmlsZUFsbFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgdXBsb2FkUHJvY2VzcyA9IHsgd2lkdGg6ICcwJScgfTtcblxuICBmaWxlVG90YWxDaHVuazogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICAvL2ZpbGVVcGxvYWRTdGF0ZTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcbiAgLy9mbGFnOiBudW1iZXIgPSAwO1xuICByZXF1ZXN0QXJyYXk6IEFycmF5PE9ic2VydmFibGU8YW55Pj4gPSBuZXcgQXJyYXk7XG5cbiAgcmVxdWVzdEJvZHlBcnJheTogQXJyYXk8R3NwRm9ybVVwbG9hZEVudGl0eT4gPSBuZXcgQXJyYXk7XG5cbiAgdXBsb2FkZWRDaHVuazogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICB1cGxvYWRlZFByb2Nlc3M6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcblxuICAvL2FsbFNlbGVjdGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgc3RvcmFnZUV4dGVuc2lvbjogU3RvcmFnZUV4dGVuc2lvbjtcblxuICBkZWZhdWx0UHJvcGVydHlOYW1lOiBzdHJpbmcgPSBcIlwiO1xuICBwcm9wZXJ0aWVzTmFtZXM6IERyb3BMaXN0RW50aXR5W10gPSBbXTtcblxuICBzZWN1cml0eUluZm9MaXN0OiBTZWN1cml0eUVudGl0eVtdID0gW107XG5cbiAgcXVldWVMaXN0U3R5bGUgPSB7IHdpZHRoOiAnNDgwcHgnIH07XG5cbiAgZHJvcExpc3RWYWx1ZTogc3RyaW5nID0gXCJcIjtcblxuICB1cGxvYWRlZEZpbGVUb3RhbDogbnVtYmVyID0gMDtcblxuICB2YWxpZGF0aW9uSWQ6IHN0cmluZztcblxuICBoYXZlRXh0ZW5zaW9uUHJvcGVydHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBoYXZlU2VjdXJpdHlJbmZvOiBib29sZWFuID0gZmFsc2U7XG5cbiAgdXBsb2FkZWRGaWxlSW5mb0xpc3QgPSBbXTtcbiAgb2xkVXBsb2FkZWRGaWxlTGlzdCA9IFtdO1xuICAvL3VwbG9hZGVkTmFtZUxpc3QgPSBbXTtcblxuICBzYW1lTmFtZUFsbG93ZWQgPSB0cnVlO1xuICBtYXhGaWxlU2l6ZTogbnVtYmVyID0gMDs7XG4gIGxvY2FsZWlkOiBzdHJpbmc7XG4gIGxvY2FsZXBpcGU6IExvY2FsTGFuZ1BpcGU7XG4gIGh0dHBjbGllbnQ6IEh0dHBDbGllbnQ7XG4gIGNoZWNrYm94UG9zID0geyB0b3A6ICcwcHgnIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1zZ1NlcnZpY2U6IE1lc3NhZ2VyU2VydmljZSwgcHJpdmF0ZSB1cGxvYWRTZXJ2aWNlOiBVcGxvYWRTZXJ2aWNlLCBwcml2YXRlIGxvYWRTZXJ2aWNlOiBMb2FkaW5nU2VydmljZSwgcHJpdmF0ZSBpbmplY3Rvcj86IEluamVjdG9yKSB7XG4gICAgaWYgKHRoaXMuaW5qZWN0b3IpIHtcbiAgICAgIHRoaXMuaHR0cGNsaWVudCA9IHRoaXMuaW5qZWN0b3IuZ2V0KEh0dHBDbGllbnQpO1xuICAgICAgdGhpcy5sb2NhbGVpZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwibGFuZ3VhZ2VDb2RlXCIpIHx8IHRoaXMuaW5qZWN0b3IuZ2V0KExPQ0FMRV9JRCk7XG4gICAgICB0aGlzLmxvY2FsZXBpcGUgPSBuZXcgTG9jYWxMYW5nUGlwZSh0aGlzLmxvY2FsZWlkKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgZm9ybUlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJvb3RJZDogc3RyaW5nO1xuICBASW5wdXQoKSBmaWxlVHlwZTogc3RyaW5nID0gXCIqXCI7XG4gIEBJbnB1dCgpIGZpbGVDb3VudDogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgb2xkSWRMaXN0OiBzdHJpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBzZWN1cml0eUluZm86IEdzcERvY1NlY3VyaXR5QmFzZUluZm8gPSBudWxsO1xuXG4gIC8vQE91dHB1dCgpIG9uQ3VzdG9tRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGQoJ29wQ2VsbCcpIG9wQ2VsbDogVGVtcGxhdGVSZWY8YW55PjtcblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdGaXJlZm94JykgPj0gMClcbiAgICAgIHRoaXMuY2hlY2tib3hQb3MudG9wID0gJzE0cHgnO1xuICAgIC8vaWYgKHRoaXMuc3RvcmFnZVNlcnZpY2UgIT0gbnVsbCkge1xuICAgIGlmICh0aGlzLnNlY3VyaXR5SW5mbyAhPSBudWxsKSB7XG4gICAgICB0aGlzLnVwbG9hZFNlcnZpY2UuZ2V0U2VjdXJpdHlJbmZvTGlzdCh0aGlzLnNlY3VyaXR5SW5mbykuc3Vic2NyaWJlKFxuICAgICAgICByZXMgPT4ge1xuICAgICAgICAgIHRoaXMuaGF2ZVNlY3VyaXR5SW5mbyA9IHRydWU7XG4gICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgIHJlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWN1cml0eUluZm9MaXN0LnB1c2goeyBpZDogaS50b1N0cmluZygpLCBzZWN1cml0eUlkOiBlbGVtZW50LnNlY3VyaXR5SWQsIHNlY3VyaXR5TGV2ZWw6IGVsZW1lbnQuc2VjdXJpdHlMZXZlbCwgbmFtZTogZWxlbWVudC5uYW1lIH0pO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICAgIHRoaXMudXBsb2FkU2VydmljZS5nZXRTdG9yYWdlRXh0ZW5zaW9uSW5mbygpLnN1YnNjcmliZShcbiAgICAgIHJlcyA9PiB7XG4gICAgICAgIGlmIChyZXMgIT0gbnVsbCAmJiByZXMuZXJyb3IgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuc3RvcmFnZUV4dGVuc2lvbiA9IHJlcztcbiAgICAgICAgICB0aGlzLmRlZmF1bHRQcm9wZXJ0eU5hbWUgPSB0aGlzLnN0b3JhZ2VFeHRlbnNpb24uZGVmYXVsdFByb3BlcnR5TmFtZTtcbiAgICAgICAgICB0aGlzLnByb3BlcnRpZXNOYW1lcy5wdXNoKHsgaWQ6IFwiMFwiLCBuYW1lOiB0aGlzLnN0b3JhZ2VFeHRlbnNpb24uZGVmYXVsdFByb3BlcnR5TmFtZSB9KTtcbiAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgLy8gdGhpcy5wcm9wZXJ0aWVzTmFtZXMucHVzaCguLi4odGhpcy5zdG9yYWdlRXh0ZW5zaW9uLmV4dGVuc2lvblByb3BlcnR5TmFtZUxpc3QpKTtcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VFeHRlbnNpb24uZXh0ZW5zaW9uUHJvcGVydHlOYW1lTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzTmFtZXMucHVzaCh7IGlkOiAoKytpKS50b1N0cmluZygpLCBuYW1lOiBlbGVtZW50IH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucXVldWVMaXN0U3R5bGUud2lkdGggPSAnMzgwcHgnO1xuICAgICAgICAgIHRoaXMuaGF2ZUV4dGVuc2lvblByb3BlcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcblxuICAgIHRoaXMudXBsb2FkU2VydmljZS5nZXRSb290U2V0dGluZyh0aGlzLnJvb3RJZCkuc3Vic2NyaWJlKFxuICAgICAgcmVzID0+IHtcbiAgICAgICAgaWYgKHJlcyAhPSBudWxsICYmIHJlcy5lcnJvciA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5zYW1lTmFtZUFsbG93ZWQgPSByZXMuc2FtZU5hbWVBbGxvd2VkO1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbklkID0gcmVzLnZhbGlkYXRpb25JZDtcbiAgICAgICAgICBpZiAoIXRoaXMuc2FtZU5hbWVBbGxvd2VkKSB7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZFNlcnZpY2UuZ2V0VXBsb2FkZWRGaWxlSW5mb0xpc3QodGhpcy5mb3JtSWQsIHRoaXMucm9vdElkKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcyAhPSBudWxsICYmIHJlcy5lcnJvciA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0ID0gcmVzO1xuICAgICAgICAgICAgICAgICAgdGhpcy5vbGRVcGxvYWRlZEZpbGVMaXN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXMpKTs7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudXBsb2FkU2VydmljZS5nZXRWYWxpZGF0aW9uKHRoaXMudmFsaWRhdGlvbklkKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICB0aGlzLm1heEZpbGVTaXplID0gcGFyc2VJbnQoSlNPTi5wYXJzZShyZXMuY29uZmlndXJhdGlvbikubWF4RmlsZVNpemUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgICBpZiAodGhpcy5vbGRJZExpc3QgIT0gbnVsbCAmJiB0aGlzLm9sZElkTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnVwbG9hZFNlcnZpY2UuY2FuY2VsKHRoaXMub2xkSWRMaXN0LCB0aGlzLnJvb3RJZCkuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgdG90YWxMb2FkOiBhbnkgPSBudWxsO1xuXG4gIHNob3dMb2FkaW5nKCkge1xuICAgIHRoaXMuaGFzU2VsZWN0ZWRGaWxlID0gdHJ1ZTtcbiAgICAvLyBpZiAodGhpcy50b3RhbExvYWQgPT0gbnVsbClcbiAgICAvLyAgIHRoaXMudG90YWxMb2FkID0gdGhpcy5sb2FkU2VydmljZS5zaG93KHtcbiAgICAvLyAgICAgbWVzc2FnZTogdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgndXBsb2FkaW5nJylcbiAgICAvLyAgIH0pO1xuICB9XG5cblxuICBmaWxlU2VsZWN0ZWQoJGV2ZW50KSB7XG5cbiAgICAvLyBjb25zdCBsb2FkaW5nID0gdGhpcy5sb2FkU2VydmljZS5zaG93KHtcbiAgICAvLyAgIG1lc3NhZ2U6IHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3VwbG9hZGluZycpXG4gICAgLy8gfSk7XG5cbiAgICAvLyB0aGlzLnRvdGFsTG9hZC5jbG9zZSgpO1xuICAgIC8vIHRoaXMudG90YWxMb2FkID0gbnVsbDtcbiAgICB0aGlzLmhhc1NlbGVjdGVkRmlsZSA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZEZpbGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2ZpbGUnKTtcblxuICAgIGlmICh0aGlzLmZpbGVDb3VudCA+IDApIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZXMuZmlsZXMubGVuZ3RoICsgdGhpcy5maWxlcy5sZW5ndGggPiB0aGlzLmZpbGVDb3VudCkge1xuICAgICAgICBsZXQgc2VsZWN0ZWROdW06IG51bWJlciA9ICh0aGlzLnNlbGVjdGVkRmlsZXMuZmlsZXMubGVuZ3RoIGFzIG51bWJlcikgKyB0aGlzLmZpbGVzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5tc2dTZXJ2aWNlLndhcm5pbmcodGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgnc2VsZWN0ZWRDb3VudCcpICsgc2VsZWN0ZWROdW0gKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdsaW1pdENvdW50JykgKyB0aGlzLmZpbGVDb3VudCArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3JlY2hvb3NlRmlsZScpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vdGhpcy5mbGFnID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRGaWxlcy5maWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IHNlbGVjdGVkRmlsZSA9IHRoaXMuc2VsZWN0ZWRGaWxlcy5maWxlc1tpXTtcbiAgICAgIC8vc2VsZWN0ZWRGaWxlLnNsaWNlXG4gICAgICBsZXQgdXVpZCA9IFVVSUQuVVVJRCgpO1xuXG4gICAgICBpZiAoc2VsZWN0ZWRGaWxlLnNpemUgPT0gMCkge1xuICAgICAgICB0aGlzLm51bGxGaWxlTGlzdC5wdXNoKHNlbGVjdGVkRmlsZS5uYW1lKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm1heEZpbGVTaXplICE9IG51bGwgJiYgdGhpcy5tYXhGaWxlU2l6ZSA+IDApIHtcbiAgICAgICAgaWYgKHNlbGVjdGVkRmlsZS5zaXplID4gdGhpcy5tYXhGaWxlU2l6ZSAqIDEwMDApIHtcbiAgICAgICAgICB0aGlzLmJleW9uZEZpbGVMaXN0LnB1c2goc2VsZWN0ZWRGaWxlLm5hbWUpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5zYW1lTmFtZUFsbG93ZWQpIHtcbiAgICAgICAgaWYgKHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3QuZmluZCh4ID0+IHguZmlsZU5hbWUgPT0gc2VsZWN0ZWRGaWxlLm5hbWUpICE9IG51bGwpIHtcbiAgICAgICAgICAvLyB0aGlzLnVwbG9hZGVkTmFtZUxpc3QucHVzaChzZWxlY3RlZEZpbGUubmFtZSk7XG4gICAgICAgICAgLy8gdGhpcy5tc2dTZXJ2aWNlLnF1ZXN0aW9uKCfkuYvliY3lt7LkuIrkvKDov4flkIzlkI3mlofku7Y6ICcgKyBzZWxlY3RlZEZpbGUubmFtZSArICfvvIzpnIDopoHmm7/mjaLkuYjvvJ8nLCAoKSA9PiB7XG4gICAgICAgICAgLy8gICB1dWlkID0gdGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5maW5kKHggPT4geC5maWxlTmFtZSA9PSBzZWxlY3RlZEZpbGUubmFtZSkubWV0YWRhdGFJZDtcbiAgICAgICAgICAvLyAgIHRoaXMudXBsb2FkRmlsZSh1dWlkLCBzZWxlY3RlZEZpbGUpO1xuICAgICAgICAgIC8vIH0pXG4gICAgICAgICAgY29uc3QgbXNnID0gdGhpcy5tc2dTZXJ2aWNlLnNob3coJ3dhcm5pbmcnLCB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdoYXZlU2FtZU5hbWUnKSArIHNlbGVjdGVkRmlsZS5uYW1lLCB7XG4gICAgICAgICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3JlbmFtZScpLFxuICAgICAgICAgICAgICAgICAgY2xzOiAnYnRuIGJ0bi1zZWNvbmRhcnknLFxuICAgICAgICAgICAgICAgICAgaGFuZGxlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvbGROYW1lOiBzdHJpbmcgPSBzZWxlY3RlZEZpbGUubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5ld05hbWVcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZsYWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChmbGFnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbmV3TmFtZSA9IG9sZE5hbWUuc3Vic3RyaW5nKDAsIG9sZE5hbWUubGFzdEluZGV4T2YoJy4nKSkgKyAnKCcgKyBpICsgJyknICsgb2xkTmFtZS5zdWJzdHJpbmcob2xkTmFtZS5sYXN0SW5kZXhPZignLicpKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5maW5kKHggPT4geC5maWxlTmFtZSA9PSBuZXdOYW1lKSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZSh1dWlkLCBzZWxlY3RlZEZpbGUsIG5ld05hbWUpO1xuICAgICAgICAgICAgICAgICAgICBtc2cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3JlcGxhY2UnKSxcbiAgICAgICAgICAgICAgICAgIGNsczogJ2J0biBidG4tc2Vjb25kYXJ5JyxcbiAgICAgICAgICAgICAgICAgIGhhbmRsZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB1dWlkID0gdGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5maW5kKHggPT4geC5maWxlTmFtZSA9PSBzZWxlY3RlZEZpbGUubmFtZSkubWV0YWRhdGFJZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlKHV1aWQsIHNlbGVjdGVkRmlsZSwgc2VsZWN0ZWRGaWxlLm5hbWUsIEZpbGVTdGF0ZS5VcGRhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZVRvdGFsLS07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9sZFVwbG9hZGVkRmlsZUxpc3QuZmluZCh4ID0+IHguZmlsZU5hbWUgPT0gc2VsZWN0ZWRGaWxlLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVUb3RhbCsrO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3Quc3BsaWNlKHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3QuaW5kZXhPZih0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0LmZpbHRlcih4ID0+IHguZmlsZU5hbWUgPT0gc2VsZWN0ZWRGaWxlLm5hbWUpWzBdKSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbXNnLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdjYW5jZWwnKSxcbiAgICAgICAgICAgICAgICAgIGNsczogJ2J0biBidG4tc2Vjb25kYXJ5JyxcbiAgICAgICAgICAgICAgICAgIGhhbmRsZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBtc2cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnVwbG9hZEZpbGUodXVpZCwgc2VsZWN0ZWRGaWxlLCBzZWxlY3RlZEZpbGUubmFtZSk7XG5cbiAgICB9XG4gICAgLy8gaWYgKHRoaXMudXBsb2FkZWROYW1lTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgLy8gICBsZXQgbmFtZTogc3RyaW5nID0gdGhpcy5saXN0VG9TdHJpbmcodGhpcy51cGxvYWRlZE5hbWVMaXN0KTtcbiAgICAvLyAgIHRoaXMubXNnU2VydmljZS53YXJuaW5nKCfkuYvliY3lt7LkuIrkvKDov4flkIzlkI3mlofku7Y6ICcgKyBuYW1lICsgJ+ivt+mHjeaWsOmAieaLqeS4iuS8oOaWh+S7tuOAgicpO1xuICAgIC8vICAgdGhpcy51cGxvYWRlZE5hbWVMaXN0ID0gW107XG4gICAgLy8gfVxuXG4gICAgaWYgKHRoaXMuZXJyRmlsZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IG5hbWU6IHN0cmluZyA9IHRoaXMubGlzdFRvU3RyaW5nKHRoaXMuZXJyRmlsZUxpc3QpO1xuICAgICAgdGhpcy5tc2dTZXJ2aWNlLndhcm5pbmcodGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgnaGF2ZVNhbWVOYW1lJykgKyBuYW1lICsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgncmVjaG9vc2VGaWxlJykpO1xuICAgICAgdGhpcy5lcnJGaWxlTGlzdCA9IFtdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm51bGxGaWxlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgbmFtZTogc3RyaW5nID0gdGhpcy5saXN0VG9TdHJpbmcodGhpcy5udWxsRmlsZUxpc3QpO1xuICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDAsIG5hbWUubGVuZ3RoIC0gMSk7XG4gICAgICB0aGlzLm1zZ1NlcnZpY2Uud2FybmluZyhuYW1lICsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgnc2l6ZVplcm8nKSArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3JlY2hvb3NlRmlsZScpKTtcbiAgICAgIHRoaXMubnVsbEZpbGVMaXN0ID0gW107XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYmV5b25kRmlsZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IG5hbWU6IHN0cmluZyA9IHRoaXMubGlzdFRvU3RyaW5nKHRoaXMuYmV5b25kRmlsZUxpc3QpO1xuICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDAsIG5hbWUubGVuZ3RoIC0gMSk7XG4gICAgICB0aGlzLm1zZ1NlcnZpY2Uud2FybmluZyhuYW1lICsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgnc2l6ZU1heCcpICsgdGhpcy5tYXhGaWxlU2l6ZSArIFwiS0JcIiArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3JlY2hvb3NlRmlsZScpKTtcbiAgICAgIHRoaXMuYmV5b25kRmlsZUxpc3QgPSBbXTtcbiAgICB9XG4gICAgLy8gaWYgKHRoaXMuZXJyVHlwZUxpc3QubGVuZ3RoID4gMCkge1xuICAgIC8vICAgbGV0IHR5cGU6IHN0cmluZyA9IHRoaXMubGlzdFRvU3RyaW5nKHRoaXMuZXJyVHlwZUxpc3QpO1xuICAgIC8vICAgdGhpcy5tc2dTZXJ2aWNlLndhcm5pbmcoJ+S4jeaUr+aMgeS4iuS8oOexu+Wei+S4uiAnICsgdHlwZSArICfnmoTmlofku7bor7fph43mlrDpgInmi6nkuIrkvKDmlofku7bjgIInKTtcbiAgICAvLyAgIHRoaXMuZXJyVHlwZUxpc3QgPSBbXTtcbiAgICAvLyB9XG4gICAgdGhpcy5maWxlcyA9IHRoaXMuZmlsZXMuc2xpY2UoKTtcbiAgICB0aGlzLmZpbGVBbGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICRldmVudC50YXJnZXQudmFsdWUgPSAnJztcbiAgICAvLyBsb2FkaW5nLmNsb3NlKCk7XG4gIH1cblxuICBzaG93RXJyb3JNZXNzYWdlKGZpbGUpIHtcbiAgICB0aGlzLm1zZ1NlcnZpY2UuZXJyb3IodGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgndXBsb2FkRmFpbHVyZScpICsgZmlsZS5lcnJvck1lc3NhZ2UpO1xuICB9XG5cbiAgaGFuZGxlRmlsZUluZm8odXVpZDogc3RyaW5nLCBzZWxlY3RlZEZpbGUsIGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGxldCBmaWxlSW5mbzogRmlsZUluZm87XG5cbiAgICAgIGZpbGVJbmZvID0ge1xuICAgICAgICBpZDogdXVpZCxcbiAgICAgICAgbmFtZTogZmlsZU5hbWUsXG4gICAgICAgIHR5cGU6IHNlbGVjdGVkRmlsZS50eXBlLFxuICAgICAgICBzb3VyY2U6IFwiXCIsXG4gICAgICAgIHNpemU6IHRoaXMuZ2V0RmlsZVNpemUoc2VsZWN0ZWRGaWxlLnNpemUpLFxuICAgICAgICBmaWxlU2l6ZTogc2VsZWN0ZWRGaWxlLnNpemUsXG4gICAgICAgIHBpY0xpc3REaXNwbGF5TmFtZTogdGhpcy5nZXRQaWNMaXN0RGlzcGxheU5hbWUoZmlsZU5hbWUpLFxuICAgICAgICBxdWV1ZUxpc3REaXNwbGF5TmFtZTogdGhpcy5nZXRRdWV1ZURpc3BsYXlOYW1lKGZpbGVOYW1lKSxcbiAgICAgICAgLy9jb250ZW50OiByZWFkZXIucmVzdWx0LnRvU3RyaW5nKCksXG4gICAgICAgIGhhc1VwbG9hZGVkOiBmYWxzZSxcbiAgICAgICAgbW91c2VPbjogZmFsc2UsXG4gICAgICAgIHNlbGVjdGQ6IGZhbHNlLFxuICAgICAgICBpc1VwbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgdXBsb2FkUmVzdWx0OiBmYWxzZSxcbiAgICAgICAgdXBsb2FkUHJvY2VzczogMCxcbiAgICAgICAgZXJyb3JNZXNzYWdlOiBcIlwiLFxuICAgICAgICBleHRlbnNpb25Ecm9wTGlzdElkOiAwLFxuICAgICAgICBleHRlbnNpb25OYW1lOiBcIlwiLFxuICAgICAgICBzZWN1cml0eURyb3BMaXN0SWQ6IDAsXG4gICAgICAgIHNlY3VyaXR5SW5mbzogdGhpcy5zZWN1cml0eUluZm9MaXN0WzBdXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0b3JhZ2VFeHRlbnNpb24gIT0gbnVsbClcbiAgICAgICAgZmlsZUluZm8uZXh0ZW5zaW9uTmFtZSA9IHRoaXMuZGVmYXVsdFByb3BlcnR5TmFtZTtcblxuXG4gICAgICBsZXQgdHlwZTogc3RyaW5nID0gc2VsZWN0ZWRGaWxlLnR5cGU7XG4gICAgICBpZiAodHlwZS5pbmNsdWRlcyhcInRpZmZcIikpIHtcbiAgICAgICAgdGhpcy5hZGREb2NJbmZvKHNlbGVjdGVkRmlsZSwgZmlsZUluZm8sIERvY1R5cGUuT3RoZXIpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodHlwZS5pbmNsdWRlcyhcImltYWdlXCIpKSB7XG4gICAgICAgIHRoaXMuYWRkRG9jSW5mbyhzZWxlY3RlZEZpbGUsIGZpbGVJbmZvLCBEb2NUeXBlLkltYWdlKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHR5cGUuaW5jbHVkZXMoXCJ3b3JkXCIpKSB7XG4gICAgICAgIHRoaXMuYWRkRG9jSW5mbyhzZWxlY3RlZEZpbGUsIGZpbGVJbmZvLCBEb2NUeXBlLldvcmQpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodHlwZS5pbmNsdWRlcyhcInBkZlwiKSkge1xuICAgICAgICB0aGlzLmFkZERvY0luZm8oc2VsZWN0ZWRGaWxlLCBmaWxlSW5mbywgRG9jVHlwZS5QZGYpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodHlwZS5pbmNsdWRlcyhcInBsYWluXCIpKSB7XG4gICAgICAgIHRoaXMuYWRkRG9jSW5mbyhzZWxlY3RlZEZpbGUsIGZpbGVJbmZvLCBEb2NUeXBlLlR4dCk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0eXBlLmluY2x1ZGVzKFwic2hlZXRcIikgfHwgdHlwZS5pbmNsdWRlcyhcImV4Y2VsXCIpKSB7XG4gICAgICAgIHRoaXMuYWRkRG9jSW5mbyhzZWxlY3RlZEZpbGUsIGZpbGVJbmZvLCBEb2NUeXBlLkV4Y2VsKVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAodHlwZS5pbmNsdWRlcyhcInBvd2VycG9pbnRcIikgfHwgdHlwZS5pbmNsdWRlcyhcInByZXNlbnRhdGlvblwiKSkge1xuICAgICAgICB0aGlzLmFkZERvY0luZm8oc2VsZWN0ZWRGaWxlLCBmaWxlSW5mbywgRG9jVHlwZS5Qb3dlcnBvaW50KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmFkZERvY0luZm8oc2VsZWN0ZWRGaWxlLCBmaWxlSW5mbywgRG9jVHlwZS5PdGhlcik7XG4gICAgICAgIC8vIGxldCBuYW1lOiBzdHJpbmcgPSBzZWxlY3RlZEZpbGUubmFtZTtcbiAgICAgICAgLy8gbGV0IGVyclR5cGUgPSBuYW1lLnN1YnN0cmluZyhzZWxlY3RlZEZpbGUubmFtZS5sYXN0SW5kZXhPZignLicpKTtcbiAgICAgICAgLy8gdGhpcy5lcnJUeXBlTGlzdC5wdXNoKGVyclR5cGUpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShmaWxlSW5mbyk7XG4gICAgfSlcbiAgfVxuXG4gIHVwbG9hZEZpbGUodXVpZDogc3RyaW5nLCBzZWxlY3RlZEZpbGUsIGZpbGVOYW1lOiBzdHJpbmcsIHN0YXRlOiBGaWxlU3RhdGUgPSBGaWxlU3RhdGUuTmV3KSB7XG4gICAgdGhpcy5oYW5kbGVGaWxlSW5mbyh1dWlkLCBzZWxlY3RlZEZpbGUsIGZpbGVOYW1lKS50aGVuKHJlcyA9PiB7XG4gICAgICBsZXQgZmlsZUluZm8gPSByZXM7XG4gICAgICBsZXQgY2h1bmtUb3RhbDogbnVtYmVyID0gTWF0aC5jZWlsKHNlbGVjdGVkRmlsZS5zaXplIC8gdGhpcy5idWZmZXJTaXplKTtcbiAgICAgIGxldCBjaHVua0luZGV4OiBudW1iZXIgPSAwO1xuXG4gICAgICB0aGlzLmZpbGVUb3RhbENodW5rW3V1aWRdID0gY2h1bmtUb3RhbDtcblxuICAgICAgbGV0IHVwbG9hZEZpbGVJbmZvID0gbmV3IFVwbG9hZEZpbGVJbmZvKCk7XG5cbiAgICAgIHVwbG9hZEZpbGVJbmZvLm1ldGFkYXRhSWQgPSB1dWlkO1xuICAgICAgdXBsb2FkRmlsZUluZm8uZmlsZU5hbWUgPSBmaWxlSW5mby5uYW1lO1xuICAgICAgdXBsb2FkRmlsZUluZm8uZmlsZVNpemUgPSBmaWxlSW5mby5zaXplO1xuICAgICAgdXBsb2FkRmlsZUluZm8uc3RhdGUgPSBzdGF0ZTtcbiAgICAgIHVwbG9hZEZpbGVJbmZvLnNlY3VyaXR5SW5mbyA9IHRoaXMuc2VjdXJpdHlJbmZvTGlzdFswXTtcblxuXG4gICAgICB3aGlsZSAoY2h1bmtJbmRleCA8IGNodW5rVG90YWwpIHtcbiAgICAgICAgbGV0IHVwbG9hZEluZm8gPSBuZXcgR3NwRm9ybVVwbG9hZEVudGl0eTtcbiAgICAgICAgdXBsb2FkSW5mby5mb3JtSWQgPSB0aGlzLmZvcm1JZDtcbiAgICAgICAgdXBsb2FkSW5mby5tb2RlID0gT3BlcmF0aW5nTW9kZXMuVGVtcDtcbiAgICAgICAgdXBsb2FkSW5mby5yb290SWQgPSB0aGlzLnJvb3RJZDtcblxuICAgICAgICBsZXQgZG9jSW5mbzogR3NwRm9ybURvY0luZm8gPSBuZXcgR3NwRm9ybURvY0luZm87XG5cbiAgICAgICAgZG9jSW5mby5maWxlTmFtZSA9IGZpbGVOYW1lO1xuICAgICAgICBkb2NJbmZvLm1ldGFkYXRhSWQgPSB1dWlkO1xuICAgICAgICBkb2NJbmZvLnRvdGFsID0gY2h1bmtUb3RhbDtcblxuICAgICAgICB0aGlzLnVwbG9hZGVkQ2h1bmtbZG9jSW5mby5tZXRhZGF0YUlkXSA9IDA7XG5cbiAgICAgICAgbGV0IG5leHRTaXplID0gTWF0aC5taW4oKGNodW5rSW5kZXggKyAxKSAqIHRoaXMuYnVmZmVyU2l6ZSwgc2VsZWN0ZWRGaWxlLnNpemUpO1xuICAgICAgICBsZXQgZmlsZURhdGEgPSBzZWxlY3RlZEZpbGUuc2xpY2UoY2h1bmtJbmRleCAqIHRoaXMuYnVmZmVyU2l6ZSwgbmV4dFNpemUpO1xuXG4gICAgICAgIC8vIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAvLyByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGZpbGVEYXRhKTtcbiAgICAgICAgbGV0IGlubmVySW5kZXggPSBjaHVua0luZGV4O1xuICAgICAgICAvLyByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAvLyAgIGRvY0luZm8uZmlsZUNvbnRlbnQgPSBidG9hKHJlYWRlci5yZXN1bHQudG9TdHJpbmcoKSk7XG4gICAgICAgIGRvY0luZm8uc2l6ZSA9IHNlbGVjdGVkRmlsZS5zaXplO1xuICAgICAgICBkb2NJbmZvLmluZGV4ID0gaW5uZXJJbmRleDtcbiAgICAgICAgZG9jSW5mby5maWxlQ29udGVudCA9IFwiXCJcbiAgICAgICAgLy9jaHVua0luZGV4Kys7XG4gICAgICAgIGlmICh0aGlzLmhhdmVFeHRlbnNpb25Qcm9wZXJ0eSlcbiAgICAgICAgICBkb2NJbmZvLmV4UHJvcGVydHlOYW1lID0gdGhpcy5kZWZhdWx0UHJvcGVydHlOYW1lO1xuXG4gICAgICAgIC8vZG9jSW5mby5pc0xhc3QgPSB0cnVlO1xuICAgICAgICB1cGxvYWRJbmZvLmRvY0luZm8gPSBkb2NJbmZvO1xuXG4gICAgICAgIC8vIGxldCBpbmZvID0gdXBsb2FkSW5mbztcblxuICAgICAgICAvLyB0aGlzLnJlcXVlc3RBcnJheS5wdXNoKHRoaXMudXBsb2FkU2VydmljZS51cGxvYWRGaWxlKHVwbG9hZEluZm8pKTtcbiAgICAgICAgLy8gdGhpcy5yZXF1ZXN0Qm9keUFycmF5LnB1c2goaW5mbyk7XG4gICAgICAgIC8v5bCB6KOF6K+35rGCZm9ybWRhdGFcbiAgICAgICAgbGV0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgndXBsb2FkSW5mbycsIEpTT04uc3RyaW5naWZ5KHVwbG9hZEluZm8pKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdkb2NJbmZvJywgSlNPTi5zdHJpbmdpZnkoZG9jSW5mbykpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlRGF0YSk7XG5cblxuICAgICAgICAvLyB9XG4gICAgICAgIC8vY29uc29sZS5sb2coY2h1bmtJbmRleCArIDEpO1xuICAgICAgICBjaHVua0luZGV4ID0gY2h1bmtJbmRleCArIDE7XG4gICAgICB9XG5cblxuICAgICAgbGV0IGluZGV4ID0gLTE7XG4gICAgICB0aGlzLmZpbGVzLmZvckVhY2goeCA9PiB7XG4gICAgICAgIGlmICh4Lm5hbWUgPT0gZmlsZUluZm8ubmFtZSkge1xuICAgICAgICAgIGlmIChpbmRleCA9PSAtMSlcbiAgICAgICAgICAgIGluZGV4ID0gdGhpcy5maWxlcy5pbmRleE9mKHgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGluZGV4ICE9IC0xICYmIGluZGV4ICE9IHRoaXMuZmlsZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICB0aGlzLmZpbGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMudXBsb2FkRmlsZUluZm9MaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVUb3RhbC0tO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBzZW5kVXBsb2FkUmVxdWVzdChmb3JtRGF0YTogYW55LCBmaWxlSW5mbzogYW55LCBkb2NJbmZvOiBhbnksIHVwbG9hZEZpbGVJbmZvOiBhbnkpIHtcbiAgICB0aGlzLnVwbG9hZFNsaWNlRmlsZShmb3JtRGF0YSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICBpZiAocmVzICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS51cGxvYWRSZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLmVycm9yTWVzc2FnZSA9IHJlcy5lcnJvci5NZXNzYWdlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51cGxvYWRlZENodW5rW2RvY0luZm8ubWV0YWRhdGFJZF0rKztcbiAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS51cGxvYWRQcm9jZXNzID0gTnVtYmVyLnBhcnNlSW50KCh0aGlzLnVwbG9hZGVkQ2h1bmtbZG9jSW5mby5tZXRhZGF0YUlkXSAvIHRoaXMuZmlsZVRvdGFsQ2h1bmtbZG9jSW5mby5tZXRhZGF0YUlkXSAqIDEwMCkudG9GaXhlZCgwKSk7XG4gICAgICAgIGlmICh0aGlzLnVwbG9hZGVkQ2h1bmtbZG9jSW5mby5tZXRhZGF0YUlkXSA9PSB0aGlzLmZpbGVUb3RhbENodW5rW2RvY0luZm8ubWV0YWRhdGFJZF0pIHtcbiAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLnVwbG9hZFJlc3VsdCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUluZm9MaXN0ID0gdGhpcy51cGxvYWRGaWxlSW5mb0xpc3QuY29uY2F0KHVwbG9hZEZpbGVJbmZvKTtcbiAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0ID0gdGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5jb25jYXQodXBsb2FkRmlsZUluZm8pO1xuICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlVG90YWwrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdXBsb2FkU2xpY2VGaWxlKGZvcm1kYXRhOiBGb3JtRGF0YSk6IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICBsZXQgdXJsID0gXCIvYXBpL3J1bnRpbWUvZGZzL3YxLjAvZm9ybWRvYy9zbGljZVwiO1xuICAgIC8vdXJsID0gXCIvYXBpL3J1bnRpbWUvZGZzL3YxLjAvZm9ybWRvYy9saXN0XCI7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwY2xpZW50LnBvc3QodXJsLCBmb3JtZGF0YSkucGlwZShcbiAgICAgIHRhcChyZXMgPT4geyB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICByZXR1cm4gb2YoZXJyb3IpO1xuICAgICAgfSkpO1xuICB9XG5cbiAgc2VsZWN0QWxsRmlsZSgpIHtcblxuICAgIGlmICghdGhpcy5maWxlQWxsU2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuZmlsZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgLy8gbGV0IG9iajogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudC5uYW1lKTtcbiAgICAgICAgLy8gb2JqLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICBlbGVtZW50LnNlbGVjdGQgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmZpbGVBbGxTZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZUNvdW50ID0gdGhpcy5maWxlcy5sZW5ndGg7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWxlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAvLyBsZXQgb2JqOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50Lm5hbWUpO1xuICAgICAgICAvLyBvYmouY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICBlbGVtZW50LnNlbGVjdGQgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5maWxlQWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlQ291bnQgPSAwO1xuICAgIH1cbiAgfVxuXG5cbiAgY2hlY2tvdXRTZWxlY3RGaWxlKGZpbGU6IEZpbGVJbmZvKSB7XG4gICAgLy8gbGV0IG9iajogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmlsZU5hbWUpO1xuICAgIGZpbGUuc2VsZWN0ZCA9ICFmaWxlLnNlbGVjdGQ7XG4gICAgaWYgKGZpbGUuc2VsZWN0ZClcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlQ291bnQrKztcbiAgICBlbHNlXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZUNvdW50LS07XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWxlQ291bnQgPT0gdGhpcy5maWxlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZmlsZUFsbFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIC8vdGhpcy5pc0ZpbGVBbGxTZWxlY3RlZCgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuZmlsZUFsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAvL3RoaXMuaXNGaWxlQWxsU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgfVxuXG4gIGxpc3REZWxldGVGaWxlKGZpbGVJbmZvOiBGaWxlSW5mbykge1xuICAgIGlmIChmaWxlSW5mby5zZWxlY3RkKVxuICAgICAgdGhpcy5zZWxlY3RlZEZpbGVDb3VudC0tO1xuICAgIC8vY29uc29sZS5sb2coZmlsZU5hbWUpO1xuICAgIHRoaXMuZmlsZXMuc3BsaWNlKHRoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyksIDEpO1xuICAgIGlmIChmaWxlSW5mby51cGxvYWRSZXN1bHQpIHtcbiAgICAgIGxldCBpZExpc3Q6IHN0cmluZ1tdID0gW107XG4gICAgICBpZExpc3QucHVzaChmaWxlSW5mby5pZCk7XG4gICAgICB0aGlzLnVwbG9hZFNlcnZpY2UuY2FuY2VsKGlkTGlzdCwgdGhpcy5yb290SWQpLnN1YnNjcmliZSgpO1xuXG4gICAgICB0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdC5zcGxpY2UodGhpcy51cGxvYWRGaWxlSW5mb0xpc3QuaW5kZXhPZih0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdC5maWx0ZXIoeCA9PiB4LmZpbGVOYW1lID09IGZpbGVJbmZvLm5hbWUpWzBdKSwgMSk7XG4gICAgICB0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0LnNwbGljZSh0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0LmluZGV4T2YodGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5maWx0ZXIoeCA9PiB4LmZpbGVOYW1lID09IGZpbGVJbmZvLm5hbWUpWzBdKSwgMSk7XG4gICAgICB0aGlzLnVwbG9hZGVkRmlsZVRvdGFsLS07XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZUNvdW50ID09IDApXG4gICAgICB0aGlzLmZpbGVBbGxTZWxlY3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgbGlzdE11bHRpcGxlRGVsZXRlRmlsZSgpIHtcbiAgICBsZXQgc2VsZWN0ZWRGaWxlOiBGaWxlSW5mb1tdID0gW107XG4gICAgdGhpcy5maWxlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgbGV0IG9iajogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudC5uYW1lKTtcbiAgICAgIGlmIChvYmouY2hlY2tlZClcbiAgICAgICAgc2VsZWN0ZWRGaWxlLnB1c2goZWxlbWVudCk7XG4gICAgfSlcbiAgICBsZXQgbWV0YWRhdGFMaXN0OiBzdHJpbmdbXSA9IFtdO1xuICAgIHNlbGVjdGVkRmlsZS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgbWV0YWRhdGFMaXN0LnB1c2goZWxlbWVudC5pZCk7XG4gICAgICB0aGlzLmZpbGVzLnNwbGljZSh0aGlzLmZpbGVzLmluZGV4T2YoZWxlbWVudCksIDEpO1xuICAgICAgaWYgKGVsZW1lbnQudXBsb2FkUmVzdWx0KSB7XG4gICAgICAgIC8vIGxldCBpZExpc3Q6IHN0cmluZ1tdID0gW107XG4gICAgICAgIC8vIGlkTGlzdC5wdXNoKGZpbGVJbmZvLmlkKTtcbiAgICAgICAgLy8gdGhpcy51cGxvYWRTZXJ2aWNlLmNhbmNlbChpZExpc3QsIHRoaXMucm9vdElkKS5zdWJzY3JpYmUoKTtcblxuICAgICAgICB0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdC5zcGxpY2UodGhpcy51cGxvYWRGaWxlSW5mb0xpc3QuaW5kZXhPZih0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdC5maWx0ZXIoeCA9PiB4LmZpbGVOYW1lID09IGVsZW1lbnQubmFtZSlbMF0pLCAxKTtcbiAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5zcGxpY2UodGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5pbmRleE9mKHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3QuZmlsdGVyKHggPT4geC5maWxlTmFtZSA9PSBlbGVtZW50Lm5hbWUpWzBdKSwgMSk7XG4gICAgICAgIHRoaXMudXBsb2FkZWRGaWxlVG90YWwtLTtcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMudXBsb2FkU2VydmljZS5jYW5jZWwobWV0YWRhdGFMaXN0LCB0aGlzLnJvb3RJZCkuc3Vic2NyaWJlKCk7XG5cbiAgICBsZXQgYWxsQm94OiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFsbENoZWNrQm94XCIpO1xuICAgIGlmIChhbGxCb3ggIT0gbnVsbClcbiAgICAgIGFsbEJveC5jaGVja2VkID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZEZpbGVDb3VudCA9IDA7XG4gICAgdGhpcy5maWxlQWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgfVxuXG5cbiAgZ2V0UGljTGlzdERpc3BsYXlOYW1lKGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoZmlsZU5hbWUubGVuZ3RoIDw9IDEwKVxuICAgICAgcmV0dXJuIGZpbGVOYW1lO1xuICAgIGVsc2Uge1xuICAgICAgbGV0IGhlYWRDb250ZW50ID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIDIpO1xuICAgICAgbGV0IHRhaWxDb250ZW50ID0gZmlsZU5hbWUuc3Vic3RyaW5nKGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykgLSAyKTtcbiAgICAgIHJldHVybiBoZWFkQ29udGVudCArIFwi4oCmXCIgKyB0YWlsQ29udGVudDtcbiAgICB9XG4gIH1cblxuICBnZXRRdWV1ZURpc3BsYXlOYW1lKGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZmlsZU5hbWU7XG4gIH1cblxuICBhZGREb2NJbmZvKHNlbGVjdGRGaWxlLCBmaWxlSW5mbzogRmlsZUluZm8sIGRvY1R5cGU6IERvY1R5cGUpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIHN3aXRjaCAoZG9jVHlwZSkge1xuICAgICAgICBjYXNlIERvY1R5cGUuV29yZDoge1xuICAgICAgICAgIGZpbGVJbmZvLnNvdXJjZSA9IFwiL3BsYXRmb3JtL3J1bnRpbWUvZGZzL2ltYWdlcy93b3JkLnBuZ1wiXG4gICAgICAgICAgdGhpcy5maWxlcy5wdXNoKGZpbGVJbmZvKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRG9jVHlwZS5QZGY6IHtcbiAgICAgICAgICBmaWxlSW5mby5zb3VyY2UgPSBcIi9wbGF0Zm9ybS9ydW50aW1lL2Rmcy9pbWFnZXMvcGRmLnBuZ1wiXG4gICAgICAgICAgdGhpcy5maWxlcy5wdXNoKGZpbGVJbmZvKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRG9jVHlwZS5FeGNlbDoge1xuICAgICAgICAgIGZpbGVJbmZvLnNvdXJjZSA9IFwiL3BsYXRmb3JtL3J1bnRpbWUvZGZzL2ltYWdlcy9leGNlbC5wbmdcIjtcbiAgICAgICAgICB0aGlzLmZpbGVzLnB1c2goZmlsZUluZm8pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBEb2NUeXBlLlR4dDoge1xuICAgICAgICAgIGZpbGVJbmZvLnNvdXJjZSA9IFwiL3BsYXRmb3JtL3J1bnRpbWUvZGZzL2ltYWdlcy90eHQucG5nXCI7XG4gICAgICAgICAgdGhpcy5maWxlcy5wdXNoKGZpbGVJbmZvKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRG9jVHlwZS5Qb3dlcnBvaW50OiB7XG4gICAgICAgICAgZmlsZUluZm8uc291cmNlID0gXCIvcGxhdGZvcm0vcnVudGltZS9kZnMvaW1hZ2VzL3BwdC5wbmdcIjtcbiAgICAgICAgICB0aGlzLmZpbGVzLnB1c2goZmlsZUluZm8pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBEb2NUeXBlLk90aGVyOiB7XG4gICAgICAgICAgZmlsZUluZm8uc291cmNlID0gXCIvcGxhdGZvcm0vcnVudGltZS9kZnMvaW1hZ2VzL2ZpbGUucG5nXCI7XG4gICAgICAgICAgdGhpcy5maWxlcy5wdXNoKGZpbGVJbmZvKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRG9jVHlwZS5JbWFnZToge1xuICAgICAgICAgIHRoaXMuZ2V0SW1hZ2VVcmwoc2VsZWN0ZEZpbGUpLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgIGZpbGVJbmZvLnNvdXJjZSA9IHJlcztcbiAgICAgICAgICAgIHRoaXMuZmlsZXMucHVzaChmaWxlSW5mbyk7XG4gICAgICAgICAgICByZXNvbHZlKGZpbGVJbmZvKTtcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICAgIHJlc29sdmUoZmlsZUluZm8pO1xuICAgIH0pXG4gIH1cblxuICBnZXRJbWFnZVVybChzZWxlY3RkRmlsZTogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBsZXQgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKHNlbGVjdGRGaWxlKTtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoX2V2ZW50KSA9PiB7XG4gICAgICAgIGxldCBpbWdVcmwgPSByZWFkZXIucmVzdWx0O1xuICAgICAgICBpZiAodGhpcy5pbmplY3RvciAhPSBudWxsKSB7XG4gICAgICAgICAgbGV0IHNhbml0aXplciA9IHRoaXMuaW5qZWN0b3IuZ2V0KERvbVNhbml0aXplcik7XG4gICAgICAgICAgaW1nVXJsID0gc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChpbWdVcmwpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoaW1nVXJsKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgbGlzdFRvU3RyaW5nKHN0ckxpc3Q6IHN0cmluZ1tdKSB7XG4gICAgbGV0IG5hbWU6IHN0cmluZyA9IFwiXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBuYW1lICs9IHN0ckxpc3RbaV0gKyBcIixcIjtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuICBzZWN1cml0eUNoYW5nZSgkZXZlbnQ6IGFueSwgZmlsZTogRmlsZUluZm8pIHtcbiAgICBmaWxlLnNlY3VyaXR5SW5mbyA9ICRldmVudC5kYXRhO1xuICAgIGxldCB1cGxvYWRGaWxlID0gdGhpcy51cGxvYWRGaWxlSW5mb0xpc3QuZmlsdGVyKHggPT4geC5tZXRhZGF0YUlkID0gZmlsZS5pZClbMF07XG4gICAgdXBsb2FkRmlsZS5zZWN1cml0eUluZm8gPSAkZXZlbnQuZGF0YTtcbiAgfVxuXG5cbiAgZXhTdG9yYWdlRmlsZUxpc3Q6IEV4U3RvcmFnZUZpbGVJbmZvW10gPSBbXTtcblxuICB0eXBlQ2hhbmdlKCRldmVudDogYW55LCBmaWxlOiBGaWxlSW5mbykge1xuICAgIGZpbGUuZXh0ZW5zaW9uTmFtZSA9ICRldmVudC5kYXRhLm5hbWU7XG4gICAgbGV0IGV4U3RvcmFnZUZpbGVJbmZvOiBFeFN0b3JhZ2VGaWxlSW5mbyA9IG5ldyBFeFN0b3JhZ2VGaWxlSW5mbztcbiAgICBpZiAoZmlsZS5leHRlbnNpb25OYW1lID09IHRoaXMuc3RvcmFnZUV4dGVuc2lvbi5kZWZhdWx0UHJvcGVydHlOYW1lKSB7XG4gICAgICBpZiAodGhpcy5leFN0b3JhZ2VGaWxlTGlzdC5maWx0ZXIoeCA9PiB4Lm1ldGFkYXRhSWQgPT0gZmlsZS5pZCkubGVuZ3RoID4gMClcbiAgICAgICAgdGhpcy5leFN0b3JhZ2VGaWxlTGlzdC5zcGxpY2UodGhpcy5leFN0b3JhZ2VGaWxlTGlzdC5maW5kSW5kZXgoeCA9PiB4Lm1ldGFkYXRhSWQgPT0gZmlsZS5pZCksIDEpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmV4U3RvcmFnZUZpbGVMaXN0LmZpbHRlcih4ID0+IHgubWV0YWRhdGFJZCA9PSBmaWxlLmlkKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGV4U3RvcmFnZUZpbGVJbmZvID0gdGhpcy5leFN0b3JhZ2VGaWxlTGlzdC5maWx0ZXIoeCA9PiB4Lm1ldGFkYXRhSWQgPT0gZmlsZS5pZClbMF07XG4gICAgICAgIGV4U3RvcmFnZUZpbGVJbmZvLmV4UHJvcGVydHlOYW1lID0gZmlsZS5leHRlbnNpb25OYW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhTdG9yYWdlRmlsZUluZm8ubWV0YWRhdGFJZCA9IGZpbGUuaWQ7XG4gICAgICAgIGV4U3RvcmFnZUZpbGVJbmZvLmV4UHJvcGVydHlOYW1lID0gZmlsZS5leHRlbnNpb25OYW1lO1xuICAgICAgICB0aGlzLmV4U3RvcmFnZUZpbGVMaXN0LnB1c2goZXhTdG9yYWdlRmlsZUluZm8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwbG9hZCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZVRvdGFsICE9IHRoaXMuZmlsZXMuZmlsdGVyKHggPT4geC5pc1VwbG9hZGluZyB8fCB4LnVwbG9hZFJlc3VsdCkubGVuZ3RoKSB7XG4gICAgICAvLyB0aGlzLm5vdGlmeVNlcnZpY2Uuc3VjY2Vzcyg8Tm90aWZ5T3B0aW9ucz57XG4gICAgICAvLyAgIG1zZzogJ+S/neWtmOaIkOWKn++8gScsIHRpbWVvdXQ6IDMwMDBcbiAgICAgIC8vIH0pO1xuICAgICAgdGhpcy5tc2dTZXJ2aWNlLndhcm5pbmcodGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgnd2FpdCcpKTtcbiAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhdmVTZWN1cml0eUluZm8pIHtcbiAgICAgIHRoaXMudXBsb2FkU2VydmljZS5zYXZlU2VjdXJpdHlJbmZvKHRoaXMudXBsb2FkRmlsZUluZm9MaXN0LCB0aGlzLnJvb3RJZCkuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0b3JhZ2VFeHRlbnNpb24gPT0gbnVsbClcbiAgICAgIHJldHVybiBvZih0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdCk7XG4gICAgZWxzZSB7XG4gICAgICBpZiAodGhpcy5leFN0b3JhZ2VGaWxlTGlzdC5sZW5ndGggPT0gMClcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMudXBsb2FkRmlsZUluZm9MaXN0KTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBsb2FkaW5nID0gdGhpcy5sb2FkU2VydmljZS5zaG93KHtcbiAgICAgICAgICBtZXNzYWdlOiB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdzYXZlVG8nKSArIHRoaXMuc3RvcmFnZUV4dGVuc2lvbi5leHRlbnNpb25OYW1lXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRTZXJ2aWNlLmNoYW5nZVN0b3JhZ2VJbnN0YW5jZSh0aGlzLmV4U3RvcmFnZUZpbGVMaXN0LCB0aGlzLnJvb3RJZCkucGlwZShcbiAgICAgICAgICBtYXAocmVzID0+IHtcbiAgICAgICAgICAgIC8vIGlmIChyZXMgIT0gbnVsbClcbiAgICAgICAgICAgIC8vICAgdGhpcy5tc2dTZXJ2aWNlLmVycm9yKCfkv53lrZjliLAnICsgdGhpcy5zdG9yYWdlRXh0ZW5zaW9uLmV4dGVuc2lvbk5hbWUgKyBcIuWksei0pe+8jOS4iuS8oOaWh+S7tuiHquWKqOS/neWtmOWIsFwiICsgdGhpcy5zdG9yYWdlRXh0ZW5zaW9uLmRlZmF1bHRQcm9wZXJ0eU5hbWUgKyBcIuWtmOWCqOOAglwiICsgcmVzLmVycm9yLk1lc3NhZ2UpO1xuICAgICAgICAgICAgbG9hZGluZy5jbG9zZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkRmlsZUluZm9MaXN0O1xuICAgICAgICAgIH0pKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICBpZiAodGhpcy51cGxvYWRGaWxlSW5mb0xpc3QubGVuZ3RoID09IDApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy51cGxvYWRGaWxlSW5mb0xpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIHRoaXMubWV0YWRhdGFJZExpc3QucHVzaChlbGVtZW50Lm1ldGFkYXRhSWQpO1xuICAgIH0pXG4gICAgdGhpcy51cGxvYWRTZXJ2aWNlLmNhbmNlbCh0aGlzLm1ldGFkYXRhSWRMaXN0LCB0aGlzLnJvb3RJZCkuc3Vic2NyaWJlKCk7XG5cbiAgfVxuXG4gIGdldFVwbG9hZEZpbGVJbmZvTGlzdCgpIHtcbiAgICByZXR1cm4gdGhpcy51cGxvYWRGaWxlSW5mb0xpc3Q7XG4gIH1cblxuICBkZWxldGUoZmlsZSkge1xuICAgIHRoaXMuZmlsZXMuc3BsaWNlKHRoaXMuZmlsZXMuaW5kZXhPZihmaWxlKSwgMSk7XG4gICAgaWYgKGZpbGUudXBsb2FkUmVzdWx0KVxuICAgICAgdGhpcy51cGxvYWRlZEZpbGVUb3RhbC0tO1xuICAgIGlmICh0aGlzLmV4U3RvcmFnZUZpbGVMaXN0LmZpbHRlcih4ID0+IHgubWV0YWRhdGFJZCA9PSBmaWxlLmlkKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmV4U3RvcmFnZUZpbGVMaXN0LnNwbGljZSh0aGlzLmV4U3RvcmFnZUZpbGVMaXN0LmZpbmRJbmRleCh4ID0+IHgubWV0YWRhdGFJZCA9PSBmaWxlLmlkKSwgMSk7XG4gICAgfVxuICAgIC8vIHZhciBvYmo6YW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2ZpbGUnKTtcbiAgICAvLyBvYmouZmlsZXMucmVtb3ZlKCk7XG4gICAgLy9vYmoudmFsdWU9Jyc7XG4gIH1cblxuICBnZXRGaWxlU2l6ZShzaXplOiBudW1iZXIpIHtcbiAgICBpZiAoc2l6ZSA8IDEwMjQwMClcbiAgICAgIHJldHVybiAoc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMSkgKyBcIktcIjtcbiAgICBlbHNlIGlmIChzaXplIDwgMTAyNCAqIDEwMjQpXG4gICAgICByZXR1cm4gKHNpemUgLyAxMDI0KS50b0ZpeGVkKDApICsgXCJLXCI7XG4gICAgZWxzZSBpZiAoc2l6ZSA8IDEwMCAqIDEwMjQgKiAxMDI0KVxuICAgICAgcmV0dXJuIChzaXplIC8gMTAyNCAvIDEwMjQpLnRvRml4ZWQoMSkgKyBcIk1cIjtcbiAgICBlbHNlIGlmIChzaXplIDwgMTAyNCAqIDEwMjQgKiAxMDI0KVxuICAgICAgcmV0dXJuIChzaXplIC8gMTAyNCAvIDEwMjQpLnRvRml4ZWQoMCkgKyBcIk1cIjtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gKHNpemUgLyAxMDI0IC8gMTAyNCAvIDEwMjQpLnRvRml4ZWQoMSkgKyBcIkdcIjtcbiAgfVxuICBzaG93QnlHcm91cCgpIHtcbiAgICB0aGlzLnNob3dUeXBlID0gMDtcbiAgICAvLyB0aGlzLnNlbGVjdGVkRmlsZUNvdW50ID0gMDtcbiAgfVxuXG4gIHNob3dCeUxpc3QoKSB7XG4gICAgdGhpcy5zaG93VHlwZSA9IDE7XG4gICAgLy8gdGhpcy5zZWxlY3RlZEZpbGVDb3VudCA9IDA7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWxlQ291bnQgIT0gMCAmJiB0aGlzLnNlbGVjdGVkRmlsZUNvdW50ID09IHRoaXMuZmlsZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmZpbGVBbGxTZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbW91c2VPdmVyKGZpbGUpIHtcbiAgICBmaWxlLm1vdXNlT24gPSB0cnVlO1xuICB9XG4gIG1vdXNlT3V0KGZpbGUpIHtcbiAgICBmaWxlLm1vdXNlT24gPSBmYWxzZTtcbiAgfVxuXG59XG5cblxuIl19
|
|
1343
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdzcC1zdmMvZm9ybWRvYy11cGxvYWQvIiwic291cmNlcyI6WyJsaWIvdXBsb2FkL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxRSxPQUFPLEVBQUUsVUFBVSxFQUFxQixNQUFNLHNCQUFzQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSWxFO0lBc0VFLDZCQUFvQixVQUEyQixFQUFVLGFBQTRCLEVBQVUsV0FBMkIsRUFBVSxRQUFtQjtRQUFuSSxlQUFVLEdBQVYsVUFBVSxDQUFpQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQS9EdkosVUFBSyxHQUFlLEVBQUUsQ0FBQztRQUN2QixtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQUM5Qix1QkFBa0IsR0FBcUIsRUFBRSxDQUFDO1FBQzFDLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBQzNCLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBQzNCLGlCQUFZLEdBQWEsRUFBRSxDQUFDO1FBQzVCLG1CQUFjLEdBQWEsRUFBRSxDQUFDO1FBQzlCLGFBQVEsR0FBVyxDQUFDLENBQUM7UUFDckIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUN6QixlQUFVLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7UUFHN0Isc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBRTlCLHNCQUFpQixHQUFHLHlDQUF5QyxDQUFDO1FBQzlELDRCQUF1QixHQUFHLDZDQUE2QyxDQUFDO1FBRXhFLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRWpDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRWpDLGtCQUFhLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFaEMsbUJBQWMsR0FBOEIsRUFBRSxDQUFDO1FBRS9DLGlCQUFZLEdBQTJCLElBQUksS0FBSyxDQUFDO1FBRWpELHFCQUFnQixHQUErQixJQUFJLEtBQUssQ0FBQztRQUV6RCxrQkFBYSxHQUE4QixFQUFFLENBQUM7UUFDOUMsb0JBQWUsR0FBOEIsRUFBRSxDQUFDO1FBS2hELHdCQUFtQixHQUFXLEVBQUUsQ0FBQztRQUNqQyxvQkFBZSxHQUFxQixFQUFFLENBQUM7UUFFdkMscUJBQWdCLEdBQXFCLEVBQUUsQ0FBQztRQUV4QyxtQkFBYyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBRXBDLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBRTNCLHNCQUFpQixHQUFXLENBQUMsQ0FBQztRQUk5QiwwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFFdkMscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBRWxDLHlCQUFvQixHQUFHLEVBQUUsQ0FBQztRQUMxQix3QkFBbUIsR0FBRyxFQUFFLENBQUM7O1FBR3pCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO1FBSXhCLGdCQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUE7UUFXbkIsYUFBUSxHQUFXLEdBQUcsQ0FBQztRQUN2QixjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBQ3RCLGNBQVMsR0FBYSxFQUFFLENBQUM7UUFDekIsaUJBQVksR0FBMkIsSUFBSSxDQUFDO1FBOERyRCxjQUFTLEdBQVEsSUFBSSxDQUFDO1FBMmtCdEIsc0JBQWlCLEdBQXdCLEVBQUUsQ0FBQztRQXBwQjFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNwRDtJQUNILENBQUM7SUFadUIsQ0FBQzs7OztJQXNCekIsc0NBQVE7OztJQUFSO1FBQUEsaUJBd0RDO1FBdkRDLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUM3QyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7UUFDaEMsb0NBQW9DO1FBQ3BDLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUzs7OztZQUNqRSxVQUFBLEdBQUc7Z0JBQ0QsS0FBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQzs7b0JBQ3pCLENBQUMsR0FBRyxDQUFDO2dCQUNULEdBQUcsQ0FBQyxPQUFPOzs7O2dCQUFDLFVBQUEsT0FBTztvQkFDakIsS0FBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUMzSSxDQUFDLEVBQUUsQ0FBQztnQkFDTixDQUFDLEVBQUMsQ0FBQztZQUNMLENBQUMsRUFDRixDQUFBO1NBQ0Y7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixFQUFFLENBQUMsU0FBUzs7OztRQUNwRCxVQUFBLEdBQUc7WUFDRCxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUU7Z0JBQ3BDLEtBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7Z0JBQzVCLEtBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUM7Z0JBQ3JFLEtBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQzs7b0JBQ3BGLEdBQUMsR0FBRyxDQUFDO2dCQUNULG1GQUFtRjtnQkFDbkYsS0FBSSxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixDQUFDLE9BQU87Ozs7Z0JBQUMsVUFBQSxPQUFPO29CQUM3RCxLQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3JFLENBQUMsRUFBQyxDQUFDO2dCQUNILEtBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztnQkFDcEMsS0FBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQzthQUNuQztRQUNILENBQUMsRUFDRixDQUFBO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVM7Ozs7UUFDckQsVUFBQSxHQUFHO1lBQ0QsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO2dCQUNwQyxLQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUM7Z0JBQzNDLEtBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQy9FLEtBQUksQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxLQUFJLENBQUMsZUFBZSxFQUFFO29CQUN6QixLQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLEtBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVM7Ozs7b0JBQzVFLFVBQUEsR0FBRzt3QkFDRCxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUU7NEJBQ3BDLEtBQUksQ0FBQyxvQkFBb0IsR0FBRyxHQUFHLENBQUM7NEJBQ2hDLEtBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs0QkFBQSxDQUFDO3lCQUU3RDtvQkFDSCxDQUFDLEVBQUMsQ0FBQTtpQkFDTDthQUVGO1FBQ0gsQ0FBQyxFQUNGLENBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2RCxzRUFBc0U7U0FDdkU7SUFDSCxDQUFDOzs7O0lBSUQseUNBQVc7OztJQUFYO1FBQ0UsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsOEJBQThCO1FBQzlCLDZDQUE2QztRQUM3QyxzREFBc0Q7UUFDdEQsUUFBUTtJQUNWLENBQUM7Ozs7O0lBR0QsMENBQVk7Ozs7SUFBWixVQUFhLE1BQU07UUFBbkIsaUJBZ0hDO1FBOUdDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVyRCxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUU7O29CQUNwRSxXQUFXLEdBQVcsQ0FBQyxtQkFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtnQkFDekYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFDekwsT0FBTzthQUNSO1NBQ0Y7Z0NBR1EsQ0FBQzs7Z0JBQ0osWUFBWSxHQUFHLE9BQUssYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7OztnQkFFMUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFFdEIsSUFBSSxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRTtnQkFDMUIsT0FBSyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7YUFFM0M7WUFFRCxJQUFJLE9BQUssV0FBVyxJQUFJLElBQUksSUFBSSxPQUFLLFdBQVcsR0FBRyxDQUFDLEVBQUU7Z0JBQ3BELElBQUksWUFBWSxDQUFDLElBQUksR0FBRyxPQUFLLFdBQVcsR0FBRyxJQUFJLEVBQUU7b0JBQy9DLE9BQUssY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7O2lCQUU3QzthQUNGO1lBRUQsSUFBSSxDQUFDLE9BQUssZUFBZSxFQUFFO2dCQUN6QixJQUFJLE9BQUssb0JBQW9CLENBQUMsSUFBSTs7OztnQkFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxRQUFRLElBQUksWUFBWSxDQUFDLElBQUksRUFBL0IsQ0FBK0IsRUFBQyxJQUFJLElBQUksRUFBRTs7d0JBRTFFLEtBQUcsR0FBRyxPQUFLLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQUssVUFBVSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFO3dCQUN6RyxZQUFZLEVBQUU7NEJBQ1osT0FBTyxFQUFFO2dDQUNQO29DQUNFLElBQUksRUFBRSxPQUFLLFVBQVUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO29DQUN6QyxHQUFHLEVBQUUsbUJBQW1CO29DQUN4QixNQUFNOzs7b0NBQUU7OzRDQUNGLE9BQU8sR0FBVyxZQUFZLENBQUMsSUFBSTs7NENBQ25DLE9BQU87OzRDQUNQLElBQUksR0FBRyxJQUFJOzs0Q0FDWCxDQUFDLEdBQUcsQ0FBQzt3Q0FDVCxPQUFPLElBQUksRUFBRTs0Q0FDWCxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOzRDQUN2SCxJQUFJLEtBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJOzs7OzRDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLFFBQVEsSUFBSSxPQUFPLEVBQXJCLENBQXFCLEVBQUMsSUFBSSxJQUFJLEVBQUU7Z0RBQ3RFLENBQUMsRUFBRSxDQUFDOzZDQUNMOztnREFFQyxJQUFJLEdBQUcsS0FBSyxDQUFDO3lDQUNoQjt3Q0FFRCxLQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7d0NBQzdDLEtBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQ0FDZCxDQUFDLENBQUE7aUNBQ0Y7Z0NBQ0Q7b0NBQ0UsSUFBSSxFQUFFLE9BQUssVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7b0NBQzFDLEdBQUcsRUFBRSxtQkFBbUI7b0NBQ3hCLE1BQU07OztvQ0FBRTt3Q0FDTixJQUFJLEdBQUcsS0FBSSxDQUFDLG9CQUFvQixDQUFDLElBQUk7Ozs7d0NBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsUUFBUSxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQS9CLENBQStCLEVBQUMsQ0FBQyxVQUFVLENBQUM7d0NBQ3ZGLEtBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3Q0FDekUsS0FBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7d0NBQ3pCLElBQUksS0FBSSxDQUFDLG1CQUFtQixDQUFDLElBQUk7Ozs7d0NBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsUUFBUSxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQS9CLENBQStCLEVBQUMsRUFBRTs0Q0FDdkUsS0FBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7NENBQ3pCLEtBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsS0FBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxLQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTTs7Ozs0Q0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxRQUFRLElBQUksWUFBWSxDQUFDLElBQUksRUFBL0IsQ0FBK0IsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7eUNBQ25KO3dDQUNELEtBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQ0FDZCxDQUFDLENBQUE7aUNBQ0Y7Z0NBQ0Q7b0NBQ0UsSUFBSSxFQUFFLE9BQUssVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7b0NBQ3pDLEdBQUcsRUFBRSxtQkFBbUI7b0NBQ3hCLE1BQU07OztvQ0FBRTt3Q0FDTixLQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7b0NBQ2QsQ0FBQyxDQUFBO2lDQUNGOzZCQUNGO3lCQUNGO3FCQUNGLENBQUM7O2lCQUVIO2FBQ0Y7WUFDRCxPQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7O1FBeEV6RCxnQkFBZ0I7UUFDaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7b0JBQS9DLENBQUM7U0F5RVQ7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs7Z0JBQzNCLE1BQUksR0FBVyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDdEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDdEgsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7U0FDdkI7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs7Z0JBQzVCLE1BQUksR0FBVyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDdkQsTUFBSSxHQUFHLE1BQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDbEgsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7U0FDeEI7UUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs7Z0JBQzlCLE1BQUksR0FBVyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDekQsTUFBSSxHQUFHLE1BQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDM0ksSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7U0FDMUI7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLG1CQUFtQjtJQUNyQixDQUFDOzs7OztJQUVELDhDQUFnQjs7OztJQUFoQixVQUFpQixJQUFJO1FBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4RixDQUFDOzs7Ozs7O0lBRUQsNENBQWM7Ozs7OztJQUFkLFVBQWUsSUFBWSxFQUFFLFlBQVksRUFBRSxRQUFnQjs7WUFFckQsUUFBa0I7UUFFdEIsUUFBUSxHQUFHO1lBQ1QsRUFBRSxFQUFFLElBQUk7WUFDUixJQUFJLEVBQUUsUUFBUTtZQUNkLElBQUksRUFBRSxZQUFZLENBQUMsSUFBSTtZQUN2QixNQUFNLEVBQUUsRUFBRTtZQUNWLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDekMsUUFBUSxFQUFFLFlBQVksQ0FBQyxJQUFJO1lBQzNCLGtCQUFrQixFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7WUFDeEQsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQzs7WUFFeEQsV0FBVyxFQUFFLEtBQUs7WUFDbEIsT0FBTyxFQUFFLEtBQUs7WUFDZCxPQUFPLEVBQUUsS0FBSztZQUNkLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFlBQVksRUFBRSxLQUFLO1lBQ25CLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLFlBQVksRUFBRSxFQUFFO1lBQ2hCLG1CQUFtQixFQUFFLENBQUM7WUFDdEIsYUFBYSxFQUFFLEVBQUU7WUFDakIsa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixZQUFZLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztTQUN2QyxDQUFBO1FBRUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSTtZQUMvQixRQUFRLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQzs7WUFHaEQsSUFBSSxHQUFXLFlBQVksQ0FBQyxJQUFJO1FBQ3BDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hEO2FBQ0ksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEQ7YUFDSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2RDthQUNJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3REO2FBQ0ksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdEQ7YUFDSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN6RCxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQ3ZEO2FBQ0ksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDckUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUM3RDthQUNJO1lBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2RCx3Q0FBd0M7WUFDeEMsb0VBQW9FO1lBQ3BFLGtDQUFrQztTQUNuQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Ozs7Ozs7O0lBRUQsd0NBQVU7Ozs7Ozs7SUFBVixVQUFXLElBQVksRUFBRSxZQUFZLEVBQUUsUUFBZ0IsRUFBRSxLQUFnQztRQUF6RixpQkF1SkM7UUF2SndELHNCQUFBLEVBQUEsUUFBbUIsU0FBUyxDQUFDLEdBQUc7O1lBRW5GLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDOztZQUU1RCxjQUFjLEdBQUcsSUFBSSxjQUFjLEVBQUU7UUFFekMsY0FBYyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDakMsY0FBYyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3hDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUM1QyxjQUFjLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUM3QixjQUFjLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUd2RCxZQUFZO1FBQ1osSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7OztnQkFHdkIsV0FBVyxHQUEyQixJQUFJLHNCQUFzQjtZQUVwRSxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDL0IsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDOUIsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ2pDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUNyQyxXQUFXLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUVoQyxPQUFPO1lBQ1AsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTOzs7O1lBQUMsVUFBQSxHQUFHO2dCQUM3QyxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO29CQUNyQixLQUFJLENBQUMsS0FBSyxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztvQkFDOUQsS0FBSSxDQUFDLEtBQUssQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBQzdELEtBQUksQ0FBQyxLQUFLLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7aUJBQzNFO3FCQUFNOzt3QkFDRCxVQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVE7O3dCQUN2QixVQUFVLEdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLEtBQUksQ0FBQyxVQUFVLENBQUM7O3dCQUNuRSxVQUFVLEdBQVcsQ0FBQzs7d0JBRXRCLGlCQUFlLEdBQXdCLEVBQUU7b0JBRTdDLEtBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDO29CQUN2QyxLQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFFN0IsT0FBTyxVQUFVLEdBQUcsVUFBVSxFQUFFOzs0QkFFMUIsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDOzs0QkFDMUUsUUFBUSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDOzs0QkFFckUsWUFBWSxHQUFHLElBQUksa0JBQWtCO3dCQUN6QyxZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzt3QkFDL0IsWUFBWSxDQUFDLE1BQU0sR0FBRyxLQUFJLENBQUMsTUFBTSxDQUFDO3dCQUNsQyxZQUFZLENBQUMsUUFBUSxHQUFHLFVBQVEsQ0FBQzt3QkFDakMsWUFBWSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7d0JBQ2hDLFlBQVksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDO3dCQUNoQyxZQUFZLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7OzRCQUU5QixRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUU7d0JBQzdCLFFBQVEsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzt3QkFDOUQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7d0JBRWxDLEtBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUzs7Ozt3QkFBQyxVQUFBLEdBQUc7NEJBQ3RDLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUU7Z0NBQ3JCLEtBQUksQ0FBQyxLQUFLLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dDQUM5RCxLQUFJLENBQUMsS0FBSyxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztnQ0FDN0QsS0FBSSxDQUFDLEtBQUssQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQzs2QkFDM0U7aUNBQU07Z0NBQ0wsaUJBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dDQUNqQyxLQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0NBQzNCLEtBQUksQ0FBQyxLQUFLLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDbEosSUFBSSxLQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7b0NBQ3pELElBQUksaUJBQWUsQ0FBQyxNQUFNLElBQUksS0FBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRTt3Q0FDdkQsS0FBSSxDQUFDLEtBQUssQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7d0NBQzdELEtBQUksQ0FBQyxLQUFLLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO3dDQUM3RCxLQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQzt3Q0FDekUsS0FBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7d0NBQzdFLEtBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDOzs0Q0FFckIsMEJBQTBCLEdBQStCLElBQUksMEJBQTBCO3dDQUMzRiwwQkFBMEIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO3dDQUM3QywwQkFBMEIsQ0FBQyxRQUFRLEdBQUcsaUJBQWUsQ0FBQzt3Q0FDdEQsMEJBQTBCLENBQUMsTUFBTSxHQUFHLEtBQUksQ0FBQyxNQUFNLENBQUM7d0NBQ2hELDBCQUEwQixDQUFDLFFBQVEsR0FBRyxVQUFRLENBQUM7d0NBQy9DLDBCQUEwQixDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO3dDQUNwRCxJQUFJLEtBQUksQ0FBQyxxQkFBcUI7NENBQzVCLDBCQUEwQixDQUFDLGNBQWMsR0FBRyxLQUFJLENBQUMsbUJBQW1CLENBQUM7d0NBQ3ZFLEtBQUksQ0FBQyxtQkFBbUIsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLFNBQVM7Ozs7d0NBQUMsVUFBQSxHQUFHO3dDQUVsRSxDQUFDLEVBQUMsQ0FBQTt3Q0FDRixVQUFVO3FDQUNYO3lDQUFNO3dDQUNMLEtBQUksQ0FBQyxLQUFLLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO3dDQUM5RCxLQUFJLENBQUMsS0FBSyxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQzt3Q0FDN0QsS0FBSSxDQUFDLEtBQUssQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO3FDQUN4RztpQ0FFRjs2QkFDRjt3QkFDSCxDQUFDLEVBQUMsQ0FBQTt3QkFFRixVQUFVLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztxQkFDN0I7aUJBQ0Y7WUFFSCxDQUFDLEVBQUMsQ0FBQTtTQUVIO2FBQU07O2dCQUNELE1BQU0sR0FBRyxJQUFJLG1CQUFtQjtZQUNwQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDNUIsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDekIsTUFBTSxDQUFDLElBQUksR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUM1QixNQUFNLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDaEMsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDM0IsSUFBSSxJQUFJLENBQUMscUJBQXFCO2dCQUM1QixNQUFNLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQzs7Z0JBRS9DLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRTtZQUM3QixRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDeEQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFFdEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVM7Ozs7WUFBQyxVQUFBLEdBQUc7Z0JBQzNDLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTtvQkFDZixLQUFJLENBQUMsS0FBSyxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztvQkFDOUQsS0FBSSxDQUFDLEtBQUssQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBQzdELEtBQUksQ0FBQyxLQUFLLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7aUJBQzNFO3FCQUFNO29CQUNMLEtBQUksQ0FBQyxLQUFLLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUM3RCxLQUFJLENBQUMsS0FBSyxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztvQkFDN0QsS0FBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQ3pFLEtBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO29CQUM3RSxLQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztpQkFFMUI7WUFDSCxDQUFDLEVBQUMsQ0FBQTtTQUVIOztZQUlHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87Ozs7UUFBQyxVQUFBLENBQUM7WUFDbEIsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUU7Z0JBQzNCLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztvQkFDYixLQUFLLEdBQUcsS0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDakM7UUFDSCxDQUFDLEVBQUMsQ0FBQTtRQUNGLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNDLDJCQUEyQjtTQUM1QjtJQUVILENBQUM7Ozs7O0lBR0QsOENBQWdCOzs7O0lBQWhCLFVBQWlCLFFBQWtCOztZQUU3QixHQUFHLEdBQUcsc0NBQXNDO1FBRWhELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDN0MsR0FBRzs7OztRQUFDLFVBQUEsR0FBRyxJQUFNLENBQUMsRUFBQyxFQUNmLFVBQVU7Ozs7UUFBQyxVQUFDLEtBQXdCO1lBQ2xDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLENBQUMsRUFBQyxDQUFDLENBQUM7SUFDUixDQUFDOzs7OztJQUVELDZDQUFlOzs7O0lBQWYsVUFBZ0IsUUFBa0I7O1lBRTVCLEdBQUcsR0FBRyxxQ0FBcUM7UUFFL0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUM3QyxHQUFHOzs7O1FBQUMsVUFBQSxHQUFHLElBQU0sQ0FBQyxFQUFDLEVBQ2YsVUFBVTs7OztRQUFDLFVBQUMsS0FBd0I7WUFDbEMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7Ozs7O0lBRUQsNkNBQWU7Ozs7SUFBZixVQUFnQixPQUErQjs7WUFFekMsR0FBRyxHQUFHLDBDQUEwQztRQUVwRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzVDLEdBQUc7Ozs7UUFBQyxVQUFBLEdBQUcsSUFBTSxDQUFDLEVBQUMsRUFDZixVQUFVOzs7O1FBQUMsVUFBQyxLQUF3QjtZQUNsQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQzs7Ozs7SUFFRCx5Q0FBVzs7OztJQUFYLFVBQVksUUFBa0I7O1lBRXhCLEdBQUcsR0FBRyw0Q0FBNEM7UUFFdEQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUM3QyxHQUFHOzs7O1FBQUMsVUFBQSxHQUFHLElBQU0sQ0FBQyxFQUFDLEVBQ2YsVUFBVTs7OztRQUFDLFVBQUMsS0FBd0I7WUFDbEMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7Ozs7O0lBRUQsaURBQW1COzs7O0lBQW5CLFVBQW9CLE9BQW1DOztZQUVqRCxHQUFHLEdBQUcsOENBQThDO1FBRXhELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDNUMsR0FBRzs7OztRQUFDLFVBQUEsR0FBRyxJQUFNLENBQUMsRUFBQyxFQUNmLFVBQVU7Ozs7UUFBQyxVQUFDLEtBQXdCO1lBQ2xDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLENBQUMsRUFBQyxDQUFDLENBQUM7SUFDUixDQUFDOzs7O0lBSUQsMkNBQWE7OztJQUFiO1FBRUUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPOzs7O1lBQUMsVUFBQSxPQUFPO2dCQUV4QixPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUN6QixDQUFDLEVBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUU1QzthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPOzs7O1lBQUMsVUFBQSxPQUFPO2dCQUV4QixPQUFPLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUMxQixDQUFDLEVBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQzdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDOzs7OztJQUdELGdEQUFrQjs7OztJQUFsQixVQUFtQixJQUFjO1FBQy9CLG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM3QixJQUFJLElBQUksQ0FBQyxPQUFPO1lBQ2QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7O1lBRXpCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQy9DLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzVCLDJCQUEyQjtTQUM1QjthQUNJO1lBQ0gsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDN0IsMkJBQTJCO1NBQzVCO0lBRUgsQ0FBQzs7Ozs7SUFFRCw0Q0FBYzs7OztJQUFkLFVBQWUsUUFBa0I7UUFDL0IsSUFBSSxRQUFRLENBQUMsT0FBTztZQUNsQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQix3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkQsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFOztnQkFDckIsTUFBTSxHQUFhLEVBQUU7WUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUUzRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU07Ozs7WUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksRUFBM0IsQ0FBMkIsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNOzs7O1lBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQTNCLENBQTJCLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQztZQUM3QixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUNqQyxDQUFDOzs7O0lBRUQsb0RBQXNCOzs7SUFBdEI7UUFBQSxpQkF5QkM7O1lBeEJLLFlBQVksR0FBZSxFQUFFO1FBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTzs7OztRQUFDLFVBQUEsT0FBTzs7Z0JBQ3BCLEdBQUcsR0FBUSxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDcEQsSUFBSSxHQUFHLENBQUMsT0FBTztnQkFDYixZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLENBQUMsRUFBQyxDQUFBOztZQUNFLFlBQVksR0FBYSxFQUFFO1FBQy9CLFlBQVksQ0FBQyxPQUFPOzs7O1FBQUMsVUFBQSxPQUFPO1lBQzFCLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlCLEtBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xELElBQUksT0FBTyxDQUFDLFlBQVksRUFBRTtnQkFFeEIsS0FBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxLQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNOzs7O2dCQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUExQixDQUEwQixFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdkksS0FBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxLQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEtBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNOzs7O2dCQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUExQixDQUEwQixFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDN0ksS0FBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7YUFDMUI7UUFDSCxDQUFDLEVBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7O1lBRTdELE1BQU0sR0FBUSxRQUFRLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQztRQUN4RCxJQUFJLE1BQU0sSUFBSSxJQUFJO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQzs7Ozs7SUFHRCxtREFBcUI7Ozs7SUFBckIsVUFBc0IsUUFBZ0I7UUFDcEMsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUU7WUFDdkIsT0FBTyxRQUFRLENBQUM7YUFDYjs7Z0JBQ0MsV0FBVyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7Z0JBQ3RDLFdBQVcsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25FLE9BQU8sV0FBVyxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUM7U0FDeEM7SUFDSCxDQUFDOzs7OztJQUVELGlEQUFtQjs7OztJQUFuQixVQUFvQixRQUFnQjtRQUNsQyxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzs7Ozs7O0lBRUQsd0NBQVU7Ozs7OztJQUFWLFVBQVcsV0FBVyxFQUFFLFFBQWtCLEVBQUUsT0FBZ0I7UUFBNUQsaUJBcUVDO1FBbkVDLFFBQVEsT0FBTyxFQUFFO1lBQ2YsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsdUNBQXVDLENBQUE7Z0JBQ3pELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQixNQUFNO2FBQ1A7WUFFRCxLQUFLLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEIsUUFBUSxDQUFDLE1BQU0sR0FBRyxzQ0FBc0MsQ0FBQTtnQkFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFCLE1BQU07YUFDUDtZQUVELEtBQUssT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQixRQUFRLENBQUMsTUFBTSxHQUFHLHdDQUF3QyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUIsTUFBTTthQUNQO1lBRUQsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsc0NBQXNDLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQixNQUFNO2FBQ1A7WUFFRCxLQUFLLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdkIsUUFBUSxDQUFDLE1BQU0sR0FBRyxzQ0FBc0MsQ0FBQztnQkFDekQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFCLE1BQU07YUFDUDtZQUVELEtBQUssT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQixRQUFRLENBQUMsTUFBTSxHQUFHLHVDQUF1QyxDQUFDO2dCQUMxRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUIsTUFBTTthQUNQO1lBRUQsS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7O29CQUNkLFFBQU0sR0FBRyxJQUFJLFVBQVUsRUFBRTtnQkFDN0IsUUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDbEMsUUFBTSxDQUFDLE1BQU07Ozs7Z0JBQUcsVUFBQyxNQUFNOzt3QkFDakIsTUFBTSxHQUFHLFFBQU0sQ0FBQyxNQUFNO29CQUMxQixJQUFJLEtBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFOzs0QkFDckIsU0FBUyxHQUFHLEtBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQzt3QkFDL0MsTUFBTSxHQUFHLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDM0Q7b0JBQ0QsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7b0JBQ3pCLEtBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzs7d0JBR3RCLEtBQUssR0FBRyxDQUFDLENBQUM7b0JBQ2QsS0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPOzs7O29CQUFDLFVBQUEsQ0FBQzt3QkFDbEIsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUU7NEJBQzNCLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztnQ0FDYixLQUFLLEdBQUcsS0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQ2pDO29CQUNILENBQUMsRUFBQyxDQUFBO29CQUNGLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxLQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2pELEtBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDNUIsS0FBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3pDLEtBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUM1QztnQkFDSCxDQUFDLENBQUEsQ0FBQTthQUNGO1NBRUY7SUFFSCxDQUFDOzs7OztJQUVELDBDQUFZOzs7O0lBQVosVUFBYSxPQUFpQjs7WUFDeEIsSUFBSSxHQUFXLEVBQUU7UUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDMUI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Ozs7OztJQUVELDRDQUFjOzs7OztJQUFkLFVBQWUsTUFBVyxFQUFFLElBQWM7UUFDeEMsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDOztZQUM1QixVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU07Ozs7UUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBdEIsQ0FBc0IsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUMvRSxVQUFVLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDeEMsQ0FBQzs7Ozs7O0lBS0Qsd0NBQVU7Ozs7O0lBQVYsVUFBVyxNQUFXLEVBQUUsSUFBYztRQUNwQyxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDOztZQUNsQyxpQkFBaUIsR0FBc0IsSUFBSSxpQkFBaUI7UUFDaEUsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRTtZQUNuRSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNOzs7O1lBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQXZCLENBQXVCLEVBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUzs7OztnQkFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBdkIsQ0FBdUIsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1NBQ25HO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNOzs7O1lBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQXZCLENBQXVCLEVBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMxRSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTTs7OztnQkFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBdkIsQ0FBdUIsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuRixpQkFBaUIsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzthQUN2RDtpQkFBTTtnQkFDTCxpQkFBaUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDdkMsaUJBQWlCLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUNoRDtTQUNGO0lBQ0gsQ0FBQzs7OztJQUVELG9DQUFNOzs7SUFBTjtRQUFBLGlCQTJCQztRQTFCQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07Ozs7UUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBL0IsQ0FBK0IsRUFBQyxDQUFDLE1BQU0sRUFBRTtZQUU1RixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzNELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3ZGO1FBQ0QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSTtZQUMvQixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQzthQUNoQztZQUNILElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sSUFBSSxDQUFDO2dCQUNwQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztpQkFDaEM7O29CQUNHLFNBQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztvQkFDcEMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhO2lCQUNuRixDQUFDO2dCQUNGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FDdkYsR0FBRzs7OztnQkFBQyxVQUFBLEdBQUc7b0JBQ0wsbUJBQW1CO29CQUNuQixpS0FBaUs7b0JBQ2pLLFNBQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDaEIsT0FBTyxLQUFJLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2pDLENBQUMsRUFBQyxDQUFDLENBQUE7YUFDTjtTQUNGO0lBQ0gsQ0FBQzs7OztJQUVELG9DQUFNOzs7SUFBTjtRQUFBLGlCQVFDO1FBUEMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxJQUFJLENBQUM7WUFDckMsT0FBTztRQUNULElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPOzs7O1FBQUMsVUFBQSxPQUFPO1lBQ3JDLEtBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxDQUFDLEVBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBRTFFLENBQUM7Ozs7SUFFRCxtREFBcUI7OztJQUFyQjtRQUNFLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7Ozs7O0lBRUQsb0NBQU07Ozs7SUFBTixVQUFPLElBQUk7UUFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvQyxJQUFJLElBQUksQ0FBQyxZQUFZO1lBQ25CLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU07Ozs7UUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBdkIsQ0FBdUIsRUFBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDMUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUzs7OztZQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUF2QixDQUF1QixFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbEc7SUFFSCxDQUFDOzs7OztJQUVELHlDQUFXOzs7O0lBQVgsVUFBWSxJQUFZO1FBQ3RCLElBQUksSUFBSSxHQUFHLE1BQU07WUFDZixPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7YUFDbkMsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUk7WUFDekIsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQ25DLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSTtZQUMvQixPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQzFDLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSTtZQUNoQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDOztZQUU3QyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUN4RCxDQUFDOzs7O0lBQ0QseUNBQVc7OztJQUFYO1FBQ0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDbEIsOEJBQThCO0lBQ2hDLENBQUM7Ozs7SUFFRCx3Q0FBVTs7O0lBQVY7UUFDRSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNsQiw4QkFBOEI7UUFDOUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUM5RSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztTQUM3QjtJQUNILENBQUM7Ozs7O0lBRUQsdUNBQVM7Ozs7SUFBVCxVQUFVLElBQUk7UUFDWixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDOzs7OztJQUNELHNDQUFROzs7O0lBQVIsVUFBUyxJQUFJO1FBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQzs7Z0JBbDBCRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsdzVkQUEyQzs7aUJBRTVDOzs7O2dCQTFCUSxlQUFlO2dCQUZmLGFBQWE7Z0JBVWIsY0FBYztnQkFmb0MsUUFBUTs7O3lCQTBHaEUsS0FBSzt5QkFDTCxLQUFLOzJCQUNMLEtBQUs7NEJBQ0wsS0FBSzs0QkFDTCxLQUFLOytCQUNMLEtBQUs7eUJBRUwsU0FBUyxTQUFDLFFBQVE7O0lBZ3ZCckIsMEJBQUM7Q0FBQSxBQXAwQkQsSUFvMEJDO1NBL3pCWSxtQkFBbUI7OztJQUU5QixvQ0FBdUI7O0lBQ3ZCLDZDQUE4Qjs7SUFDOUIsaURBQTBDOztJQUMxQywwQ0FBMkI7O0lBQzNCLDBDQUEyQjs7SUFDM0IsMkNBQTRCOztJQUM1Qiw2Q0FBOEI7O0lBQzlCLHVDQUFxQjs7SUFDckIsc0NBQXlCOztJQUN6Qix5Q0FBNkI7O0lBQzdCLDRDQUFtQjs7SUFFbkIsZ0RBQThCOztJQUU5QixnREFBOEQ7O0lBQzlELHNEQUF3RTs7SUFFeEUsOENBQWlDOztJQUVqQyw4Q0FBaUM7O0lBRWpDLDRDQUFnQzs7SUFFaEMsNkNBQStDOztJQUUvQywyQ0FBaUQ7O0lBRWpELCtDQUF5RDs7SUFFekQsNENBQThDOztJQUM5Qyw4Q0FBZ0Q7O0lBR2hELCtDQUFtQzs7SUFFbkMsa0RBQWlDOztJQUNqQyw4Q0FBdUM7O0lBRXZDLCtDQUF3Qzs7SUFFeEMsNkNBQW9DOztJQUVwQyw0Q0FBMkI7O0lBRTNCLGdEQUE4Qjs7SUFFOUIsaURBQTRCOztJQUU1QixvREFBdUM7O0lBRXZDLCtDQUFrQzs7SUFFbEMsbURBQTBCOztJQUMxQixrREFBeUI7O0lBR3pCLDhDQUF1Qjs7SUFDdkIsMENBQXdCOztJQUN4Qix1Q0FBaUI7O0lBQ2pCLHlDQUEwQjs7SUFDMUIseUNBQXVCOztJQUN2QiwwQ0FBNEI7O0lBUzVCLHFDQUF3Qjs7SUFDeEIscUNBQXdCOztJQUN4Qix1Q0FBZ0M7O0lBQ2hDLHdDQUErQjs7SUFDL0Isd0NBQWtDOztJQUNsQywyQ0FBcUQ7O0lBRXJELHFDQUE4Qzs7SUE0RDlDLHdDQUFzQjs7SUEya0J0QixnREFBNEM7Ozs7O0lBcnBCaEMseUNBQW1DOzs7OztJQUFFLDRDQUFvQzs7Ozs7SUFBRSwwQ0FBbUM7Ozs7O0lBQUUsdUNBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBWaWV3Q2hpbGQsIFRlbXBsYXRlUmVmLCBJbmplY3RvciwgTE9DQUxFX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWxlSW5mbyB9IGZyb20gJy4uL2VudGl0eS9maWxlaW5mbyc7XG5pbXBvcnQgeyBEb2NUeXBlIH0gZnJvbSAnLi4vZW50aXR5L2RvY3R5cGUnO1xuaW1wb3J0IHsgR3NwRm9ybURvY0luZm8gfSBmcm9tICcuLi9lbnRpdHkvZ3NwZm9ybWRvY2luZm8nO1xuaW1wb3J0IHsgT3BlcmF0aW5nTW9kZXMgfSBmcm9tICcuLi9lbnRpdHkvb3BlcmF0aW5nbW9kZXMnO1xuaW1wb3J0IHsgVXBsb2FkU2VydmljZSB9IGZyb20gJy4uL3VwbG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IFVwbG9hZEZpbGVJbmZvIH0gZnJvbSAnLi4vZW50aXR5L3VwbG9hZGZpbGVpbmZvJztcbmltcG9ydCB7IE1lc3NhZ2VyU2VydmljZSB9IGZyb20gJ0BmYXJyaXMvdWktbWVzc2FnZXInO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR3NwRm9ybVVwbG9hZEVudGl0eSB9IGZyb20gJy4uL2VudGl0eS9nc3Bmb3JtdXBsb2FkZW50aXR5JztcbmltcG9ydCB7IFVVSUQgfSBmcm9tICdhbmd1bGFyMi11dWlkJztcbmltcG9ydCB7IFN0b3JhZ2VFeHRlbnNpb24gfSBmcm9tICcuLi9lbnRpdHkvc3RvcmFnZWV4dGVuc2lvbic7XG5pbXBvcnQgeyBFeFN0b3JhZ2VGaWxlSW5mbyB9IGZyb20gJy4uL2VudGl0eS9leHRlbnNpb25zdG9yYWdlZmlsZWluZm8nO1xuaW1wb3J0IHsgRHJvcExpc3RFbnRpdHkgfSBmcm9tICcuLi9lbnRpdHkvZHJvcGxpc3RlbnRpdHknO1xuaW1wb3J0IHsgTG9hZGluZ1NlcnZpY2UgfSBmcm9tICdAZmFycmlzL3VpLWxvYWRpbmcnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBGaWxlU3RhdGUgfSBmcm9tICcuLi9lbnRpdHkvZmlsZXN0YXRlJztcbmltcG9ydCB7IExvY2FsTGFuZ1BpcGUgfSBmcm9tICcuLi8uLi9sb2NhbC5waXBlJztcbmltcG9ydCB7IEdzcERvY1NlY3VyaXR5QmFzZUluZm8gfSBmcm9tICcuLi9lbnRpdHkvZ3NwZG9jc2VjdXJpdHliYXNlaW5mbyc7XG5pbXBvcnQgeyBTZWN1cml0eUVudGl0eSB9IGZyb20gJy4uL2VudGl0eS9zZWN1cml0eWVudGl0eSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluaXRNdWx0aVVwbG9hZFJlcXVlc3QgfSBmcm9tICcuLi9lbnRpdHkvaW5pdG11bHRpdXBsb2FkcmVxdWVzdCc7XG5pbXBvcnQgeyBDb21wbGV0ZU11bHRpVXBsb2FkUmVxdWVzdCB9IGZyb20gJy4uL2VudGl0eS9jb21wbGV0ZW11bHRpdXBsb2FkcmVxdWVzdCc7XG5pbXBvcnQgeyBHc3BGb3JtU3RyZWFtRW50aXR5IH0gZnJvbSAnLi4vZW50aXR5L2dzcGZvcm1zdHJlYW1lbnRpdHknO1xuaW1wb3J0IHsgTXVsdGlVcGxvYWRSZXF1ZXN0IH0gZnJvbSAnLi4vZW50aXR5L211bHRpdXBsb2FkcmVxdWVzdCc7XG5pbXBvcnQgeyBNdWx0aVVwbG9hZFJlc3VsdCB9IGZyb20gJy4uL2VudGl0eS9tdWx0aXVwbG9hZHJlc3VsdCc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWZpbGUtdXBsb2FkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZS11cGxvYWQuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGaWxlVXBsb2FkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBmaWxlczogRmlsZUluZm9bXSA9IFtdO1xuICBtZXRhZGF0YUlkTGlzdDogc3RyaW5nW10gPSBbXTtcbiAgdXBsb2FkRmlsZUluZm9MaXN0OiBVcGxvYWRGaWxlSW5mb1tdID0gW107XG4gIGVyckZpbGVMaXN0OiBzdHJpbmdbXSA9IFtdO1xuICBlcnJUeXBlTGlzdDogc3RyaW5nW10gPSBbXTtcbiAgbnVsbEZpbGVMaXN0OiBzdHJpbmdbXSA9IFtdO1xuICBiZXlvbmRGaWxlTGlzdDogc3RyaW5nW10gPSBbXTtcbiAgc2hvd1R5cGU6IG51bWJlciA9IDA7XG4gIG1vdXNlT246IGJvb2xlYW4gPSBmYWxzZTtcbiAgYnVmZmVyU2l6ZSA9IDUgKiAxMDI0ICogMTAyNDtcbiAgc2VsZWN0ZWRGaWxlczogYW55O1xuXG4gIHNlbGVjdGVkRmlsZUNvdW50OiBudW1iZXIgPSAwO1xuXG4gIHVwbG9hZEljb25BZGRyZXNzID0gJy9wbGF0Zm9ybS9ydW50aW1lL2Rmcy9pbWFnZXMvdXBsb2FkLnN2Zyc7XG4gIHVwbG9hZExpdHRsZUljb25BZGRyZXNzID0gJy9wbGF0Zm9ybS9ydW50aW1lL2Rmcy9pbWFnZXMvdXBsb2FkSWNvbi5zdmcnO1xuXG4gIGhhc1NlbGVjdGVkRmlsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGZpbGVBbGxTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHVwbG9hZFByb2Nlc3MgPSB7IHdpZHRoOiAnMCUnIH07XG5cbiAgZmlsZVRvdGFsQ2h1bms6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcblxuICByZXF1ZXN0QXJyYXk6IEFycmF5PE9ic2VydmFibGU8YW55Pj4gPSBuZXcgQXJyYXk7XG5cbiAgcmVxdWVzdEJvZHlBcnJheTogQXJyYXk8R3NwRm9ybVVwbG9hZEVudGl0eT4gPSBuZXcgQXJyYXk7XG5cbiAgdXBsb2FkZWRDaHVuazogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICB1cGxvYWRlZFByb2Nlc3M6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcblxuICAvL2FsbFNlbGVjdGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgc3RvcmFnZUV4dGVuc2lvbjogU3RvcmFnZUV4dGVuc2lvbjtcblxuICBkZWZhdWx0UHJvcGVydHlOYW1lOiBzdHJpbmcgPSBcIlwiO1xuICBwcm9wZXJ0aWVzTmFtZXM6IERyb3BMaXN0RW50aXR5W10gPSBbXTtcblxuICBzZWN1cml0eUluZm9MaXN0OiBTZWN1cml0eUVudGl0eVtdID0gW107XG5cbiAgcXVldWVMaXN0U3R5bGUgPSB7IHdpZHRoOiAnNDgwcHgnIH07XG5cbiAgZHJvcExpc3RWYWx1ZTogc3RyaW5nID0gXCJcIjtcblxuICB1cGxvYWRlZEZpbGVUb3RhbDogbnVtYmVyID0gMDtcblxuICBhbGxvd2VkTXVsdGlVcGxvYWQ6IGJvb2xlYW47XG5cbiAgaGF2ZUV4dGVuc2lvblByb3BlcnR5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgaGF2ZVNlY3VyaXR5SW5mbzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHVwbG9hZGVkRmlsZUluZm9MaXN0ID0gW107XG4gIG9sZFVwbG9hZGVkRmlsZUxpc3QgPSBbXTtcbiAgLy91cGxvYWRlZE5hbWVMaXN0ID0gW107XG5cbiAgc2FtZU5hbWVBbGxvd2VkID0gdHJ1ZTtcbiAgbWF4RmlsZVNpemU6IG51bWJlciA9IDA7O1xuICBsb2NhbGVpZDogc3RyaW5nO1xuICBsb2NhbGVwaXBlOiBMb2NhbExhbmdQaXBlO1xuICBodHRwY2xpZW50OiBIdHRwQ2xpZW50O1xuICBjaGVja2JveFBvcyA9IHsgdG9wOiAnMHB4JyB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtc2dTZXJ2aWNlOiBNZXNzYWdlclNlcnZpY2UsIHByaXZhdGUgdXBsb2FkU2VydmljZTogVXBsb2FkU2VydmljZSwgcHJpdmF0ZSBsb2FkU2VydmljZTogTG9hZGluZ1NlcnZpY2UsIHByaXZhdGUgaW5qZWN0b3I/OiBJbmplY3Rvcikge1xuICAgIGlmICh0aGlzLmluamVjdG9yKSB7XG4gICAgICB0aGlzLmh0dHBjbGllbnQgPSB0aGlzLmluamVjdG9yLmdldChIdHRwQ2xpZW50KTtcbiAgICAgIHRoaXMubG9jYWxlaWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImxhbmd1YWdlQ29kZVwiKSB8fCB0aGlzLmluamVjdG9yLmdldChMT0NBTEVfSUQpO1xuICAgICAgdGhpcy5sb2NhbGVwaXBlID0gbmV3IExvY2FsTGFuZ1BpcGUodGhpcy5sb2NhbGVpZCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIGZvcm1JZDogc3RyaW5nO1xuICBASW5wdXQoKSByb290SWQ6IHN0cmluZztcbiAgQElucHV0KCkgZmlsZVR5cGU6IHN0cmluZyA9IFwiKlwiO1xuICBASW5wdXQoKSBmaWxlQ291bnQ6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIG9sZElkTGlzdDogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KCkgc2VjdXJpdHlJbmZvOiBHc3BEb2NTZWN1cml0eUJhc2VJbmZvID0gbnVsbDtcblxuICBAVmlld0NoaWxkKCdvcENlbGwnKSBvcENlbGw6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRmlyZWZveCcpID49IDApXG4gICAgICB0aGlzLmNoZWNrYm94UG9zLnRvcCA9ICcxNHB4JztcbiAgICAvL2lmICh0aGlzLnN0b3JhZ2VTZXJ2aWNlICE9IG51bGwpIHtcbiAgICBpZiAodGhpcy5zZWN1cml0eUluZm8gIT0gbnVsbCkge1xuICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmdldFNlY3VyaXR5SW5mb0xpc3QodGhpcy5zZWN1cml0eUluZm8pLnN1YnNjcmliZShcbiAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICB0aGlzLmhhdmVTZWN1cml0eUluZm8gPSB0cnVlO1xuICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICByZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VjdXJpdHlJbmZvTGlzdC5wdXNoKHsgaWQ6IGkudG9TdHJpbmcoKSwgc2VjdXJpdHlJZDogZWxlbWVudC5zZWN1cml0eUlkLCBzZWN1cml0eUxldmVsOiBlbGVtZW50LnNlY3VyaXR5TGV2ZWwsIG5hbWU6IGVsZW1lbnQubmFtZSB9KTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgICB0aGlzLnVwbG9hZFNlcnZpY2UuZ2V0U3RvcmFnZUV4dGVuc2lvbkluZm8oKS5zdWJzY3JpYmUoXG4gICAgICByZXMgPT4ge1xuICAgICAgICBpZiAocmVzICE9IG51bGwgJiYgcmVzLmVycm9yID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VFeHRlbnNpb24gPSByZXM7XG4gICAgICAgICAgdGhpcy5kZWZhdWx0UHJvcGVydHlOYW1lID0gdGhpcy5zdG9yYWdlRXh0ZW5zaW9uLmRlZmF1bHRQcm9wZXJ0eU5hbWU7XG4gICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzTmFtZXMucHVzaCh7IGlkOiBcIjBcIiwgbmFtZTogdGhpcy5zdG9yYWdlRXh0ZW5zaW9uLmRlZmF1bHRQcm9wZXJ0eU5hbWUgfSk7XG4gICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgIC8vIHRoaXMucHJvcGVydGllc05hbWVzLnB1c2goLi4uKHRoaXMuc3RvcmFnZUV4dGVuc2lvbi5leHRlbnNpb25Qcm9wZXJ0eU5hbWVMaXN0KSk7XG4gICAgICAgICAgdGhpcy5zdG9yYWdlRXh0ZW5zaW9uLmV4dGVuc2lvblByb3BlcnR5TmFtZUxpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvcGVydGllc05hbWVzLnB1c2goeyBpZDogKCsraSkudG9TdHJpbmcoKSwgbmFtZTogZWxlbWVudCB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnF1ZXVlTGlzdFN0eWxlLndpZHRoID0gJzM4MHB4JztcbiAgICAgICAgICB0aGlzLmhhdmVFeHRlbnNpb25Qcm9wZXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG5cbiAgICB0aGlzLnVwbG9hZFNlcnZpY2UuZ2V0VXBsb2FkSW5mbyh0aGlzLnJvb3RJZCkuc3Vic2NyaWJlKFxuICAgICAgcmVzID0+IHtcbiAgICAgICAgaWYgKHJlcyAhPSBudWxsICYmIHJlcy5lcnJvciA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5zYW1lTmFtZUFsbG93ZWQgPSByZXMuc2FtZU5hbWVBbGxvd2VkO1xuICAgICAgICAgIHRoaXMubWF4RmlsZVNpemUgPSBwYXJzZUludChKU09OLnBhcnNlKHJlcy52YWxpZGF0ZUNvbmZpZ3VyYXRpb24pLm1heEZpbGVTaXplKTtcbiAgICAgICAgICB0aGlzLmFsbG93ZWRNdWx0aVVwbG9hZCA9IHJlcy5hbGxvd2VkTXVsdGlVcGxvYWQ7XG4gICAgICAgICAgaWYgKCF0aGlzLnNhbWVOYW1lQWxsb3dlZCkge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmdldFVwbG9hZGVkRmlsZUluZm9MaXN0KHRoaXMuZm9ybUlkLCB0aGlzLnJvb3RJZCkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXMgIT0gbnVsbCAmJiByZXMuZXJyb3IgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdCA9IHJlcztcbiAgICAgICAgICAgICAgICAgIHRoaXMub2xkVXBsb2FkZWRGaWxlTGlzdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVzKSk7O1xuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICAgIGlmICh0aGlzLm9sZElkTGlzdCAhPSBudWxsICYmIHRoaXMub2xkSWRMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIHRoaXMudXBsb2FkU2VydmljZS5jYW5jZWwodGhpcy5vbGRJZExpc3QsIHRoaXMucm9vdElkKS5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICB0b3RhbExvYWQ6IGFueSA9IG51bGw7XG5cbiAgc2hvd0xvYWRpbmcoKSB7XG4gICAgdGhpcy5oYXNTZWxlY3RlZEZpbGUgPSB0cnVlO1xuICAgIC8vIGlmICh0aGlzLnRvdGFsTG9hZCA9PSBudWxsKVxuICAgIC8vICAgdGhpcy50b3RhbExvYWQgPSB0aGlzLmxvYWRTZXJ2aWNlLnNob3coe1xuICAgIC8vICAgICBtZXNzYWdlOiB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCd1cGxvYWRpbmcnKVxuICAgIC8vICAgfSk7XG4gIH1cblxuXG4gIGZpbGVTZWxlY3RlZCgkZXZlbnQpIHtcblxuICAgIHRoaXMuaGFzU2VsZWN0ZWRGaWxlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbGVjdGVkRmlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjZmlsZScpO1xuXG4gICAgaWYgKHRoaXMuZmlsZUNvdW50ID4gMCkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWxlcy5maWxlcy5sZW5ndGggKyB0aGlzLmZpbGVzLmxlbmd0aCA+IHRoaXMuZmlsZUNvdW50KSB7XG4gICAgICAgIGxldCBzZWxlY3RlZE51bTogbnVtYmVyID0gKHRoaXMuc2VsZWN0ZWRGaWxlcy5maWxlcy5sZW5ndGggYXMgbnVtYmVyKSArIHRoaXMuZmlsZXMubGVuZ3RoO1xuICAgICAgICB0aGlzLm1zZ1NlcnZpY2Uud2FybmluZyh0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdzZWxlY3RlZENvdW50JykgKyBzZWxlY3RlZE51bSArIHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ2xpbWl0Q291bnQnKSArIHRoaXMuZmlsZUNvdW50ICsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgncmVjaG9vc2VGaWxlJykpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy90aGlzLmZsYWcgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZEZpbGVzLmZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgc2VsZWN0ZWRGaWxlID0gdGhpcy5zZWxlY3RlZEZpbGVzLmZpbGVzW2ldO1xuICAgICAgLy9zZWxlY3RlZEZpbGUuc2xpY2VcbiAgICAgIGxldCB1dWlkID0gVVVJRC5VVUlEKCk7XG5cbiAgICAgIGlmIChzZWxlY3RlZEZpbGUuc2l6ZSA9PSAwKSB7XG4gICAgICAgIHRoaXMubnVsbEZpbGVMaXN0LnB1c2goc2VsZWN0ZWRGaWxlLm5hbWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubWF4RmlsZVNpemUgIT0gbnVsbCAmJiB0aGlzLm1heEZpbGVTaXplID4gMCkge1xuICAgICAgICBpZiAoc2VsZWN0ZWRGaWxlLnNpemUgPiB0aGlzLm1heEZpbGVTaXplICogMTAwMCkge1xuICAgICAgICAgIHRoaXMuYmV5b25kRmlsZUxpc3QucHVzaChzZWxlY3RlZEZpbGUubmFtZSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnNhbWVOYW1lQWxsb3dlZCkge1xuICAgICAgICBpZiAodGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5maW5kKHggPT4geC5maWxlTmFtZSA9PSBzZWxlY3RlZEZpbGUubmFtZSkgIT0gbnVsbCkge1xuXG4gICAgICAgICAgY29uc3QgbXNnID0gdGhpcy5tc2dTZXJ2aWNlLnNob3coJ3dhcm5pbmcnLCB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdoYXZlU2FtZU5hbWUnKSArIHNlbGVjdGVkRmlsZS5uYW1lLCB7XG4gICAgICAgICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3JlbmFtZScpLFxuICAgICAgICAgICAgICAgICAgY2xzOiAnYnRuIGJ0bi1zZWNvbmRhcnknLFxuICAgICAgICAgICAgICAgICAgaGFuZGxlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvbGROYW1lOiBzdHJpbmcgPSBzZWxlY3RlZEZpbGUubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5ld05hbWVcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZsYWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChmbGFnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbmV3TmFtZSA9IG9sZE5hbWUuc3Vic3RyaW5nKDAsIG9sZE5hbWUubGFzdEluZGV4T2YoJy4nKSkgKyAnKCcgKyBpICsgJyknICsgb2xkTmFtZS5zdWJzdHJpbmcob2xkTmFtZS5sYXN0SW5kZXhPZignLicpKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5maW5kKHggPT4geC5maWxlTmFtZSA9PSBuZXdOYW1lKSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZSh1dWlkLCBzZWxlY3RlZEZpbGUsIG5ld05hbWUpO1xuICAgICAgICAgICAgICAgICAgICBtc2cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3JlcGxhY2UnKSxcbiAgICAgICAgICAgICAgICAgIGNsczogJ2J0biBidG4tc2Vjb25kYXJ5JyxcbiAgICAgICAgICAgICAgICAgIGhhbmRsZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB1dWlkID0gdGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5maW5kKHggPT4geC5maWxlTmFtZSA9PSBzZWxlY3RlZEZpbGUubmFtZSkubWV0YWRhdGFJZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlKHV1aWQsIHNlbGVjdGVkRmlsZSwgc2VsZWN0ZWRGaWxlLm5hbWUsIEZpbGVTdGF0ZS5VcGRhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZVRvdGFsLS07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9sZFVwbG9hZGVkRmlsZUxpc3QuZmluZCh4ID0+IHguZmlsZU5hbWUgPT0gc2VsZWN0ZWRGaWxlLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVUb3RhbCsrO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3Quc3BsaWNlKHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3QuaW5kZXhPZih0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0LmZpbHRlcih4ID0+IHguZmlsZU5hbWUgPT0gc2VsZWN0ZWRGaWxlLm5hbWUpWzBdKSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbXNnLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdjYW5jZWwnKSxcbiAgICAgICAgICAgICAgICAgIGNsczogJ2J0biBidG4tc2Vjb25kYXJ5JyxcbiAgICAgICAgICAgICAgICAgIGhhbmRsZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBtc2cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnVwbG9hZEZpbGUodXVpZCwgc2VsZWN0ZWRGaWxlLCBzZWxlY3RlZEZpbGUubmFtZSk7XG5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5lcnJGaWxlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgbmFtZTogc3RyaW5nID0gdGhpcy5saXN0VG9TdHJpbmcodGhpcy5lcnJGaWxlTGlzdCk7XG4gICAgICB0aGlzLm1zZ1NlcnZpY2Uud2FybmluZyh0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdoYXZlU2FtZU5hbWUnKSArIG5hbWUgKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdyZWNob29zZUZpbGUnKSk7XG4gICAgICB0aGlzLmVyckZpbGVMaXN0ID0gW107XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubnVsbEZpbGVMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBuYW1lOiBzdHJpbmcgPSB0aGlzLmxpc3RUb1N0cmluZyh0aGlzLm51bGxGaWxlTGlzdCk7XG4gICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sZW5ndGggLSAxKTtcbiAgICAgIHRoaXMubXNnU2VydmljZS53YXJuaW5nKG5hbWUgKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdzaXplWmVybycpICsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgncmVjaG9vc2VGaWxlJykpO1xuICAgICAgdGhpcy5udWxsRmlsZUxpc3QgPSBbXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5iZXlvbmRGaWxlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgbmFtZTogc3RyaW5nID0gdGhpcy5saXN0VG9TdHJpbmcodGhpcy5iZXlvbmRGaWxlTGlzdCk7XG4gICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sZW5ndGggLSAxKTtcbiAgICAgIHRoaXMubXNnU2VydmljZS53YXJuaW5nKG5hbWUgKyB0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCdzaXplTWF4JykgKyB0aGlzLm1heEZpbGVTaXplICsgXCJLQlwiICsgdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgncmVjaG9vc2VGaWxlJykpO1xuICAgICAgdGhpcy5iZXlvbmRGaWxlTGlzdCA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmZpbGVzID0gdGhpcy5maWxlcy5zbGljZSgpO1xuICAgIHRoaXMuZmlsZUFsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgJGV2ZW50LnRhcmdldC52YWx1ZSA9ICcnO1xuICAgIC8vIGxvYWRpbmcuY2xvc2UoKTtcbiAgfVxuXG4gIHNob3dFcnJvck1lc3NhZ2UoZmlsZSkge1xuICAgIHRoaXMubXNnU2VydmljZS5lcnJvcih0aGlzLmxvY2FsZXBpcGUudHJhbnNmb3JtKCd1cGxvYWRGYWlsdXJlJykgKyBmaWxlLmVycm9yTWVzc2FnZSk7XG4gIH1cblxuICBoYW5kbGVGaWxlSW5mbyh1dWlkOiBzdHJpbmcsIHNlbGVjdGVkRmlsZSwgZmlsZU5hbWU6IHN0cmluZyk6IGFueSB7XG5cbiAgICBsZXQgZmlsZUluZm86IEZpbGVJbmZvO1xuXG4gICAgZmlsZUluZm8gPSB7XG4gICAgICBpZDogdXVpZCxcbiAgICAgIG5hbWU6IGZpbGVOYW1lLFxuICAgICAgdHlwZTogc2VsZWN0ZWRGaWxlLnR5cGUsXG4gICAgICBzb3VyY2U6IFwiXCIsXG4gICAgICBzaXplOiB0aGlzLmdldEZpbGVTaXplKHNlbGVjdGVkRmlsZS5zaXplKSxcbiAgICAgIGZpbGVTaXplOiBzZWxlY3RlZEZpbGUuc2l6ZSxcbiAgICAgIHBpY0xpc3REaXNwbGF5TmFtZTogdGhpcy5nZXRQaWNMaXN0RGlzcGxheU5hbWUoZmlsZU5hbWUpLFxuICAgICAgcXVldWVMaXN0RGlzcGxheU5hbWU6IHRoaXMuZ2V0UXVldWVEaXNwbGF5TmFtZShmaWxlTmFtZSksXG4gICAgICAvL2NvbnRlbnQ6IHJlYWRlci5yZXN1bHQudG9TdHJpbmcoKSxcbiAgICAgIGhhc1VwbG9hZGVkOiBmYWxzZSxcbiAgICAgIG1vdXNlT246IGZhbHNlLFxuICAgICAgc2VsZWN0ZDogZmFsc2UsXG4gICAgICBpc1VwbG9hZGluZzogdHJ1ZSxcbiAgICAgIHVwbG9hZFJlc3VsdDogZmFsc2UsXG4gICAgICB1cGxvYWRQcm9jZXNzOiAwLFxuICAgICAgZXJyb3JNZXNzYWdlOiBcIlwiLFxuICAgICAgZXh0ZW5zaW9uRHJvcExpc3RJZDogMCxcbiAgICAgIGV4dGVuc2lvbk5hbWU6IFwiXCIsXG4gICAgICBzZWN1cml0eURyb3BMaXN0SWQ6IDAsXG4gICAgICBzZWN1cml0eUluZm86IHRoaXMuc2VjdXJpdHlJbmZvTGlzdFswXVxuICAgIH1cblxuICAgIGlmICh0aGlzLnN0b3JhZ2VFeHRlbnNpb24gIT0gbnVsbClcbiAgICAgIGZpbGVJbmZvLmV4dGVuc2lvbk5hbWUgPSB0aGlzLmRlZmF1bHRQcm9wZXJ0eU5hbWU7XG5cblxuICAgIGxldCB0eXBlOiBzdHJpbmcgPSBzZWxlY3RlZEZpbGUudHlwZTtcbiAgICBpZiAodHlwZS5pbmNsdWRlcyhcInRpZmZcIikpIHtcbiAgICAgIHRoaXMuYWRkRG9jSW5mbyhzZWxlY3RlZEZpbGUsIGZpbGVJbmZvLCBEb2NUeXBlLk90aGVyKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZS5pbmNsdWRlcyhcImltYWdlXCIpKSB7XG4gICAgICB0aGlzLmFkZERvY0luZm8oc2VsZWN0ZWRGaWxlLCBmaWxlSW5mbywgRG9jVHlwZS5JbWFnZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUuaW5jbHVkZXMoXCJ3b3JkXCIpKSB7XG4gICAgICB0aGlzLmFkZERvY0luZm8oc2VsZWN0ZWRGaWxlLCBmaWxlSW5mbywgRG9jVHlwZS5Xb3JkKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZS5pbmNsdWRlcyhcInBkZlwiKSkge1xuICAgICAgdGhpcy5hZGREb2NJbmZvKHNlbGVjdGVkRmlsZSwgZmlsZUluZm8sIERvY1R5cGUuUGRmKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZS5pbmNsdWRlcyhcInBsYWluXCIpKSB7XG4gICAgICB0aGlzLmFkZERvY0luZm8oc2VsZWN0ZWRGaWxlLCBmaWxlSW5mbywgRG9jVHlwZS5UeHQpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlLmluY2x1ZGVzKFwic2hlZXRcIikgfHwgdHlwZS5pbmNsdWRlcyhcImV4Y2VsXCIpKSB7XG4gICAgICB0aGlzLmFkZERvY0luZm8oc2VsZWN0ZWRGaWxlLCBmaWxlSW5mbywgRG9jVHlwZS5FeGNlbClcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZS5pbmNsdWRlcyhcInBvd2VycG9pbnRcIikgfHwgdHlwZS5pbmNsdWRlcyhcInByZXNlbnRhdGlvblwiKSkge1xuICAgICAgdGhpcy5hZGREb2NJbmZvKHNlbGVjdGVkRmlsZSwgZmlsZUluZm8sIERvY1R5cGUuUG93ZXJwb2ludCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5hZGREb2NJbmZvKHNlbGVjdGVkRmlsZSwgZmlsZUluZm8sIERvY1R5cGUuT3RoZXIpO1xuICAgICAgLy8gbGV0IG5hbWU6IHN0cmluZyA9IHNlbGVjdGVkRmlsZS5uYW1lO1xuICAgICAgLy8gbGV0IGVyclR5cGUgPSBuYW1lLnN1YnN0cmluZyhzZWxlY3RlZEZpbGUubmFtZS5sYXN0SW5kZXhPZignLicpKTtcbiAgICAgIC8vIHRoaXMuZXJyVHlwZUxpc3QucHVzaChlcnJUeXBlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbGVJbmZvO1xuICB9XG5cbiAgdXBsb2FkRmlsZSh1dWlkOiBzdHJpbmcsIHNlbGVjdGVkRmlsZSwgZmlsZU5hbWU6IHN0cmluZywgc3RhdGU6IEZpbGVTdGF0ZSA9IEZpbGVTdGF0ZS5OZXcpIHtcblxuICAgIGxldCBmaWxlSW5mbyA9IHRoaXMuaGFuZGxlRmlsZUluZm8odXVpZCwgc2VsZWN0ZWRGaWxlLCBmaWxlTmFtZSk7XG5cbiAgICBsZXQgdXBsb2FkRmlsZUluZm8gPSBuZXcgVXBsb2FkRmlsZUluZm8oKTtcblxuICAgIHVwbG9hZEZpbGVJbmZvLm1ldGFkYXRhSWQgPSB1dWlkO1xuICAgIHVwbG9hZEZpbGVJbmZvLmZpbGVOYW1lID0gZmlsZUluZm8ubmFtZTtcbiAgICB1cGxvYWRGaWxlSW5mby5maWxlU2l6ZSA9IGZpbGVJbmZvLmZpbGVTaXplO1xuICAgIHVwbG9hZEZpbGVJbmZvLnN0YXRlID0gc3RhdGU7XG4gICAgdXBsb2FkRmlsZUluZm8uc2VjdXJpdHlJbmZvID0gdGhpcy5zZWN1cml0eUluZm9MaXN0WzBdO1xuXG5cbiAgICAvL+WIpOaWreaYr+WQpuaUr+aMgeWIhueJh+S4iuS8oFxuICAgIGlmICh0aGlzLmFsbG93ZWRNdWx0aVVwbG9hZCkge1xuXG4gICAgICAvL+aUr+aMgeWIhueJh+S4iuS8oFxuICAgICAgbGV0IGluaXRSZXF1ZXN0OiBJbml0TXVsdGlVcGxvYWRSZXF1ZXN0ID0gbmV3IEluaXRNdWx0aVVwbG9hZFJlcXVlc3Q7XG5cbiAgICAgIGluaXRSZXF1ZXN0LnBhdGggPSB0aGlzLmZvcm1JZDtcbiAgICAgIGluaXRSZXF1ZXN0Lm1ldGFkYXRhSWQgPSB1dWlkO1xuICAgICAgaW5pdFJlcXVlc3Qucm9vdElkID0gdGhpcy5yb290SWQ7XG4gICAgICBpbml0UmVxdWVzdC5zaXplID0gZmlsZUluZm8uZmlsZVNpemU7XG4gICAgICBpbml0UmVxdWVzdC5maWxlTmFtZSA9IGZpbGVOYW1lO1xuXG4gICAgICAvL+WIneWni+WMluWIhueJh1xuICAgICAgdGhpcy5pbml0TXVsdGlVcGxvYWQoaW5pdFJlcXVlc3QpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICBpZiAocmVzLmVycm9yICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLnVwbG9hZFJlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZmlsZXNbdGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKV0uaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLmVycm9yTWVzc2FnZSA9IHJlcy5lcnJvci5NZXNzYWdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCB1cGxvYWRJZCA9IHJlcy51cGxvYWRJZDtcbiAgICAgICAgICBsZXQgY2h1bmtUb3RhbDogbnVtYmVyID0gTWF0aC5jZWlsKHNlbGVjdGVkRmlsZS5zaXplIC8gdGhpcy5idWZmZXJTaXplKTtcbiAgICAgICAgICBsZXQgY2h1bmtJbmRleDogbnVtYmVyID0gMDtcblxuICAgICAgICAgIGxldCBtdWx0aVJlc3VsdExpc3Q6IE11bHRpVXBsb2FkUmVzdWx0W10gPSBbXTtcblxuICAgICAgICAgIHRoaXMuZmlsZVRvdGFsQ2h1bmtbdXVpZF0gPSBjaHVua1RvdGFsO1xuICAgICAgICAgIHRoaXMudXBsb2FkZWRDaHVua1t1dWlkXSA9IDA7XG5cbiAgICAgICAgICB3aGlsZSAoY2h1bmtJbmRleCA8IGNodW5rVG90YWwpIHtcblxuICAgICAgICAgICAgbGV0IG5leHRTaXplID0gTWF0aC5taW4oKGNodW5rSW5kZXggKyAxKSAqIHRoaXMuYnVmZmVyU2l6ZSwgc2VsZWN0ZWRGaWxlLnNpemUpO1xuICAgICAgICAgICAgbGV0IGZpbGVEYXRhID0gc2VsZWN0ZWRGaWxlLnNsaWNlKGNodW5rSW5kZXggKiB0aGlzLmJ1ZmZlclNpemUsIG5leHRTaXplKTtcblxuICAgICAgICAgICAgbGV0IG11bHRpUmVxdWVzdCA9IG5ldyBNdWx0aVVwbG9hZFJlcXVlc3Q7XG4gICAgICAgICAgICBtdWx0aVJlcXVlc3QubWV0YWRhdGFJZCA9IHV1aWQ7XG4gICAgICAgICAgICBtdWx0aVJlcXVlc3Qucm9vdElkID0gdGhpcy5yb290SWQ7XG4gICAgICAgICAgICBtdWx0aVJlcXVlc3QudXBsb2FkSWQgPSB1cGxvYWRJZDtcbiAgICAgICAgICAgIG11bHRpUmVxdWVzdC5pbmRleCA9IGNodW5rSW5kZXg7XG4gICAgICAgICAgICBtdWx0aVJlcXVlc3QudG90YWwgPSBjaHVua1RvdGFsO1xuICAgICAgICAgICAgbXVsdGlSZXF1ZXN0LnNpemUgPSBmaWxlRGF0YS5zaXplO1xuXG4gICAgICAgICAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnbXVsdGlSZXF1ZXN0JywgSlNPTi5zdHJpbmdpZnkobXVsdGlSZXF1ZXN0KSk7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlRGF0YSk7XG5cbiAgICAgICAgICAgIHRoaXMubXVsdGlVcGxvYWQoZm9ybURhdGEpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzLmVycm9yICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLnVwbG9hZFJlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNbdGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKV0uaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLmVycm9yTWVzc2FnZSA9IHJlcy5lcnJvci5NZXNzYWdlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG11bHRpUmVzdWx0TGlzdC5wdXNoKHJlcy5yZXN1bHQpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRDaHVua1t1dWlkXSsrO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNbdGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKV0udXBsb2FkUHJvY2VzcyA9IE51bWJlci5wYXJzZUludCgodGhpcy51cGxvYWRlZENodW5rW3V1aWRdIC8gdGhpcy5maWxlVG90YWxDaHVua1t1dWlkXSAqIDEwMCkudG9GaXhlZCgwKSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudXBsb2FkZWRDaHVua1t1dWlkXSA9PSB0aGlzLmZpbGVUb3RhbENodW5rW3V1aWRdKSB7XG4gICAgICAgICAgICAgICAgICBpZiAobXVsdGlSZXN1bHRMaXN0Lmxlbmd0aCA9PSB0aGlzLmZpbGVUb3RhbENodW5rW3V1aWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNbdGhpcy5maWxlcy5pbmRleE9mKGZpbGVJbmZvKV0udXBsb2FkUmVzdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdCA9IHRoaXMudXBsb2FkRmlsZUluZm9MaXN0LmNvbmNhdCh1cGxvYWRGaWxlSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3QgPSB0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0LmNvbmNhdCh1cGxvYWRGaWxlSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlVG90YWwrKztcblxuICAgICAgICAgICAgICAgICAgICBsZXQgY29tcGxldGVNdWx0aVVwbG9hZFJlcXVlc3Q6IENvbXBsZXRlTXVsdGlVcGxvYWRSZXF1ZXN0ID0gbmV3IENvbXBsZXRlTXVsdGlVcGxvYWRSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZU11bHRpVXBsb2FkUmVxdWVzdC5tZXRhZGF0YUlkID0gdXVpZDtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVNdWx0aVVwbG9hZFJlcXVlc3QucGFydExpc3QgPSBtdWx0aVJlc3VsdExpc3Q7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlTXVsdGlVcGxvYWRSZXF1ZXN0LnJvb3RJZCA9IHRoaXMucm9vdElkO1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZU11bHRpVXBsb2FkUmVxdWVzdC51cGxvYWRJZCA9IHVwbG9hZElkO1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZU11bHRpVXBsb2FkUmVxdWVzdC5zaXplID0gZmlsZUluZm8uZmlsZVNpemU7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhdmVFeHRlbnNpb25Qcm9wZXJ0eSlcbiAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZU11bHRpVXBsb2FkUmVxdWVzdC5leFByb3BlcnR5TmFtZSA9IHRoaXMuZGVmYXVsdFByb3BlcnR5TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZU11bHRpVXBsb2FkKGNvbXBsZXRlTXVsdGlVcGxvYWRSZXF1ZXN0KS5zdWJzY3JpYmUocmVzID0+IHtcblxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAvL+WQjuWPsOW8guatpeaLvOaOpeaWh+aho1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS51cGxvYWRSZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLmVycm9yTWVzc2FnZSA9IHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ21pc21hdGNoQ2h1bmtTaXplJyk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGNodW5rSW5kZXggPSBjaHVua0luZGV4ICsgMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfSlcblxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZW50aXR5ID0gbmV3IEdzcEZvcm1TdHJlYW1FbnRpdHk7XG4gICAgICBlbnRpdHkuZm9ybUlkID0gdGhpcy5mb3JtSWQ7XG4gICAgICBlbnRpdHkubWV0YWRhdGFJZCA9IHV1aWQ7XG4gICAgICBlbnRpdHkubW9kZSA9IE9wZXJhdGluZ01vZGVzLlRlbXA7XG4gICAgICBlbnRpdHkucm9vdElkID0gdGhpcy5yb290SWQ7XG4gICAgICBlbnRpdHkuc2l6ZSA9IHNlbGVjdGVkRmlsZS5zaXplO1xuICAgICAgZW50aXR5LmZpbGVOYW1lID0gZmlsZU5hbWU7XG4gICAgICBpZiAodGhpcy5oYXZlRXh0ZW5zaW9uUHJvcGVydHkpXG4gICAgICAgIGVudGl0eS5leFByb3BlcnR5TmFtZSA9IHRoaXMuZGVmYXVsdFByb3BlcnR5TmFtZTtcblxuICAgICAgbGV0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ3VwbG9hZEVudGl0eScsIEpTT04uc3RyaW5naWZ5KGVudGl0eSkpO1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgc2VsZWN0ZWRGaWxlKTtcblxuICAgICAgdGhpcy51cGxvYWRTaW5nbGVGaWxlKGZvcm1EYXRhKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgaWYgKHJlcyAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS51cGxvYWRSZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLmlzVXBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS5lcnJvck1lc3NhZ2UgPSByZXMuZXJyb3IuTWVzc2FnZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZpbGVzW3RoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyldLnVwbG9hZFJlc3VsdCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5maWxlc1t0aGlzLmZpbGVzLmluZGV4T2YoZmlsZUluZm8pXS5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudXBsb2FkRmlsZUluZm9MaXN0ID0gdGhpcy51cGxvYWRGaWxlSW5mb0xpc3QuY29uY2F0KHVwbG9hZEZpbGVJbmZvKTtcbiAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0ID0gdGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5jb25jYXQodXBsb2FkRmlsZUluZm8pO1xuICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlVG90YWwrKztcblxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgfVxuXG5cblxuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIHRoaXMuZmlsZXMuZm9yRWFjaCh4ID0+IHtcbiAgICAgIGlmICh4Lm5hbWUgPT0gZmlsZUluZm8ubmFtZSkge1xuICAgICAgICBpZiAoaW5kZXggPT0gLTEpXG4gICAgICAgICAgaW5kZXggPSB0aGlzLmZpbGVzLmluZGV4T2YoeCk7XG4gICAgICB9XG4gICAgfSlcbiAgICBpZiAoaW5kZXggIT0gLTEgJiYgaW5kZXggIT0gdGhpcy5maWxlcy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLmZpbGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgLy90aGlzLnVwbG9hZGVkRmlsZVRvdGFsLS07XG4gICAgfVxuXG4gIH1cblxuXG4gIHVwbG9hZFNpbmdsZUZpbGUoZm9ybWRhdGE6IEZvcm1EYXRhKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgIGxldCB1cmwgPSBcIi9hcGkvcnVudGltZS9kZnMvdjEuMC9mb3JtZG9jL3NpbmdsZVwiO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cGNsaWVudC5wb3N0KHVybCwgZm9ybWRhdGEpLnBpcGUoXG4gICAgICB0YXAocmVzID0+IHsgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgcmV0dXJuIG9mKGVycm9yKTtcbiAgICAgIH0pKTtcbiAgfVxuXG4gIHVwbG9hZFNsaWNlRmlsZShmb3JtZGF0YTogRm9ybURhdGEpOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gICAgbGV0IHVybCA9IFwiL2FwaS9ydW50aW1lL2Rmcy92MS4wL2Zvcm1kb2Mvc2xpY2VcIjtcblxuICAgIHJldHVybiB0aGlzLmh0dHBjbGllbnQucG9zdCh1cmwsIGZvcm1kYXRhKS5waXBlKFxuICAgICAgdGFwKHJlcyA9PiB7IH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHJldHVybiBvZihlcnJvcik7XG4gICAgICB9KSk7XG4gIH1cblxuICBpbml0TXVsdGlVcGxvYWQocmVxdWVzdDogSW5pdE11bHRpVXBsb2FkUmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICBsZXQgdXJsID0gXCIvYXBpL3J1bnRpbWUvZGZzL3YxLjAvZm9ybWRvYy9tdWx0aS9pbml0XCI7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwY2xpZW50LnBvc3QodXJsLCByZXF1ZXN0KS5waXBlKFxuICAgICAgdGFwKHJlcyA9PiB7IH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHJldHVybiBvZihlcnJvcik7XG4gICAgICB9KSk7XG4gIH1cblxuICBtdWx0aVVwbG9hZChmb3JtZGF0YTogRm9ybURhdGEpOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gICAgbGV0IHVybCA9IFwiL2FwaS9ydW50aW1lL2Rmcy92MS4wL2Zvcm1kb2MvbXVsdGkvdXBsb2FkXCI7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwY2xpZW50LnBvc3QodXJsLCBmb3JtZGF0YSkucGlwZShcbiAgICAgIHRhcChyZXMgPT4geyB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICByZXR1cm4gb2YoZXJyb3IpO1xuICAgICAgfSkpO1xuICB9XG5cbiAgY29tcGxldGVNdWx0aVVwbG9hZChyZXF1ZXN0OiBDb21wbGV0ZU11bHRpVXBsb2FkUmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICBsZXQgdXJsID0gXCIvYXBpL3J1bnRpbWUvZGZzL3YxLjAvZm9ybWRvYy9tdWx0aS9jb21wbGV0ZVwiO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cGNsaWVudC5wb3N0KHVybCwgcmVxdWVzdCkucGlwZShcbiAgICAgIHRhcChyZXMgPT4geyB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICByZXR1cm4gb2YoZXJyb3IpO1xuICAgICAgfSkpO1xuICB9XG5cblxuXG4gIHNlbGVjdEFsbEZpbGUoKSB7XG5cbiAgICBpZiAoIXRoaXMuZmlsZUFsbFNlbGVjdGVkKSB7XG4gICAgICB0aGlzLmZpbGVzLmZvckVhY2goZWxlbWVudCA9PiB7XG5cbiAgICAgICAgZWxlbWVudC5zZWxlY3RkID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5maWxlQWxsU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5zZWxlY3RlZEZpbGVDb3VudCA9IHRoaXMuZmlsZXMubGVuZ3RoO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcblxuICAgICAgICBlbGVtZW50LnNlbGVjdGQgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5maWxlQWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlQ291bnQgPSAwO1xuICAgIH1cbiAgfVxuXG5cbiAgY2hlY2tvdXRTZWxlY3RGaWxlKGZpbGU6IEZpbGVJbmZvKSB7XG4gICAgLy8gbGV0IG9iajogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmlsZU5hbWUpO1xuICAgIGZpbGUuc2VsZWN0ZCA9ICFmaWxlLnNlbGVjdGQ7XG4gICAgaWYgKGZpbGUuc2VsZWN0ZClcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlQ291bnQrKztcbiAgICBlbHNlXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZUNvdW50LS07XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWxlQ291bnQgPT0gdGhpcy5maWxlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZmlsZUFsbFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIC8vdGhpcy5pc0ZpbGVBbGxTZWxlY3RlZCgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuZmlsZUFsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAvL3RoaXMuaXNGaWxlQWxsU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgfVxuXG4gIGxpc3REZWxldGVGaWxlKGZpbGVJbmZvOiBGaWxlSW5mbykge1xuICAgIGlmIChmaWxlSW5mby5zZWxlY3RkKVxuICAgICAgdGhpcy5zZWxlY3RlZEZpbGVDb3VudC0tO1xuICAgIC8vY29uc29sZS5sb2coZmlsZU5hbWUpO1xuICAgIHRoaXMuZmlsZXMuc3BsaWNlKHRoaXMuZmlsZXMuaW5kZXhPZihmaWxlSW5mbyksIDEpO1xuICAgIGlmIChmaWxlSW5mby51cGxvYWRSZXN1bHQpIHtcbiAgICAgIGxldCBpZExpc3Q6IHN0cmluZ1tdID0gW107XG4gICAgICBpZExpc3QucHVzaChmaWxlSW5mby5pZCk7XG4gICAgICB0aGlzLnVwbG9hZFNlcnZpY2UuY2FuY2VsKGlkTGlzdCwgdGhpcy5yb290SWQpLnN1YnNjcmliZSgpO1xuXG4gICAgICB0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdC5zcGxpY2UodGhpcy51cGxvYWRGaWxlSW5mb0xpc3QuaW5kZXhPZih0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdC5maWx0ZXIoeCA9PiB4LmZpbGVOYW1lID09IGZpbGVJbmZvLm5hbWUpWzBdKSwgMSk7XG4gICAgICB0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0LnNwbGljZSh0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0LmluZGV4T2YodGhpcy51cGxvYWRlZEZpbGVJbmZvTGlzdC5maWx0ZXIoeCA9PiB4LmZpbGVOYW1lID09IGZpbGVJbmZvLm5hbWUpWzBdKSwgMSk7XG4gICAgICB0aGlzLnVwbG9hZGVkRmlsZVRvdGFsLS07XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZUNvdW50ID09IDApXG4gICAgICB0aGlzLmZpbGVBbGxTZWxlY3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgbGlzdE11bHRpcGxlRGVsZXRlRmlsZSgpIHtcbiAgICBsZXQgc2VsZWN0ZWRGaWxlOiBGaWxlSW5mb1tdID0gW107XG4gICAgdGhpcy5maWxlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgbGV0IG9iajogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudC5uYW1lKTtcbiAgICAgIGlmIChvYmouY2hlY2tlZClcbiAgICAgICAgc2VsZWN0ZWRGaWxlLnB1c2goZWxlbWVudCk7XG4gICAgfSlcbiAgICBsZXQgbWV0YWRhdGFMaXN0OiBzdHJpbmdbXSA9IFtdO1xuICAgIHNlbGVjdGVkRmlsZS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgbWV0YWRhdGFMaXN0LnB1c2goZWxlbWVudC5pZCk7XG4gICAgICB0aGlzLmZpbGVzLnNwbGljZSh0aGlzLmZpbGVzLmluZGV4T2YoZWxlbWVudCksIDEpO1xuICAgICAgaWYgKGVsZW1lbnQudXBsb2FkUmVzdWx0KSB7XG5cbiAgICAgICAgdGhpcy51cGxvYWRGaWxlSW5mb0xpc3Quc3BsaWNlKHRoaXMudXBsb2FkRmlsZUluZm9MaXN0LmluZGV4T2YodGhpcy51cGxvYWRGaWxlSW5mb0xpc3QuZmlsdGVyKHggPT4geC5maWxlTmFtZSA9PSBlbGVtZW50Lm5hbWUpWzBdKSwgMSk7XG4gICAgICAgIHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3Quc3BsaWNlKHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3QuaW5kZXhPZih0aGlzLnVwbG9hZGVkRmlsZUluZm9MaXN0LmZpbHRlcih4ID0+IHguZmlsZU5hbWUgPT0gZWxlbWVudC5uYW1lKVswXSksIDEpO1xuICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZVRvdGFsLS07XG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLnVwbG9hZFNlcnZpY2UuY2FuY2VsKG1ldGFkYXRhTGlzdCwgdGhpcy5yb290SWQpLnN1YnNjcmliZSgpO1xuXG4gICAgbGV0IGFsbEJveDogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhbGxDaGVja0JveFwiKTtcbiAgICBpZiAoYWxsQm94ICE9IG51bGwpXG4gICAgICBhbGxCb3guY2hlY2tlZCA9IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWxlQ291bnQgPSAwO1xuICAgIHRoaXMuZmlsZUFsbFNlbGVjdGVkID0gZmFsc2U7XG4gIH1cblxuXG4gIGdldFBpY0xpc3REaXNwbGF5TmFtZShmaWxlTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKGZpbGVOYW1lLmxlbmd0aCA8PSAxMClcbiAgICAgIHJldHVybiBmaWxlTmFtZTtcbiAgICBlbHNlIHtcbiAgICAgIGxldCBoZWFkQ29udGVudCA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCAyKTtcbiAgICAgIGxldCB0YWlsQ29udGVudCA9IGZpbGVOYW1lLnN1YnN0cmluZyhmaWxlTmFtZS5sYXN0SW5kZXhPZignLicpIC0gMik7XG4gICAgICByZXR1cm4gaGVhZENvbnRlbnQgKyBcIuKAplwiICsgdGFpbENvbnRlbnQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0UXVldWVEaXNwbGF5TmFtZShmaWxlTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGZpbGVOYW1lO1xuICB9XG5cbiAgYWRkRG9jSW5mbyhzZWxlY3RkRmlsZSwgZmlsZUluZm86IEZpbGVJbmZvLCBkb2NUeXBlOiBEb2NUeXBlKSB7XG5cbiAgICBzd2l0Y2ggKGRvY1R5cGUpIHtcbiAgICAgIGNhc2UgRG9jVHlwZS5Xb3JkOiB7XG4gICAgICAgIGZpbGVJbmZvLnNvdXJjZSA9IFwiL3BsYXRmb3JtL3J1bnRpbWUvZGZzL2ltYWdlcy93b3JkLnBuZ1wiXG4gICAgICAgIHRoaXMuZmlsZXMucHVzaChmaWxlSW5mbyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIERvY1R5cGUuUGRmOiB7XG4gICAgICAgIGZpbGVJbmZvLnNvdXJjZSA9IFwiL3BsYXRmb3JtL3J1bnRpbWUvZGZzL2ltYWdlcy9wZGYucG5nXCJcbiAgICAgICAgdGhpcy5maWxlcy5wdXNoKGZpbGVJbmZvKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgRG9jVHlwZS5FeGNlbDoge1xuICAgICAgICBmaWxlSW5mby5zb3VyY2UgPSBcIi9wbGF0Zm9ybS9ydW50aW1lL2Rmcy9pbWFnZXMvZXhjZWwucG5nXCI7XG4gICAgICAgIHRoaXMuZmlsZXMucHVzaChmaWxlSW5mbyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIERvY1R5cGUuVHh0OiB7XG4gICAgICAgIGZpbGVJbmZvLnNvdXJjZSA9IFwiL3BsYXRmb3JtL3J1bnRpbWUvZGZzL2ltYWdlcy90eHQucG5nXCI7XG4gICAgICAgIHRoaXMuZmlsZXMucHVzaChmaWxlSW5mbyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIERvY1R5cGUuUG93ZXJwb2ludDoge1xuICAgICAgICBmaWxlSW5mby5zb3VyY2UgPSBcIi9wbGF0Zm9ybS9ydW50aW1lL2Rmcy9pbWFnZXMvcHB0LnBuZ1wiO1xuICAgICAgICB0aGlzLmZpbGVzLnB1c2goZmlsZUluZm8pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBEb2NUeXBlLk90aGVyOiB7XG4gICAgICAgIGZpbGVJbmZvLnNvdXJjZSA9IFwiL3BsYXRmb3JtL3J1bnRpbWUvZGZzL2ltYWdlcy9maWxlLnBuZ1wiO1xuICAgICAgICB0aGlzLmZpbGVzLnB1c2goZmlsZUluZm8pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBEb2NUeXBlLkltYWdlOiB7XG4gICAgICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChzZWxlY3RkRmlsZSk7XG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSAoX2V2ZW50KSA9PiB7XG4gICAgICAgICAgbGV0IGltZ1VybCA9IHJlYWRlci5yZXN1bHQ7XG4gICAgICAgICAgaWYgKHRoaXMuaW5qZWN0b3IgIT0gbnVsbCkge1xuICAgICAgICAgICAgbGV0IHNhbml0aXplciA9IHRoaXMuaW5qZWN0b3IuZ2V0KERvbVNhbml0aXplcik7XG4gICAgICAgICAgICBpbWdVcmwgPSBzYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKGltZ1VybCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZpbGVJbmZvLnNvdXJjZSA9IGltZ1VybDtcbiAgICAgICAgICB0aGlzLmZpbGVzLnB1c2goZmlsZUluZm8pO1xuXG4gICAgICAgICAgLy/lm6DkuLrlvILmraXlpITnkIbnmoTlt67lvILvvIzooaXlgb/kuIDmrKHliKDpmaRcbiAgICAgICAgICBsZXQgaW5kZXggPSAtMTtcbiAgICAgICAgICB0aGlzLmZpbGVzLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICBpZiAoeC5uYW1lID09IGZpbGVJbmZvLm5hbWUpIHtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKVxuICAgICAgICAgICAgICAgIGluZGV4ID0gdGhpcy5maWxlcy5pbmRleE9mKHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKGluZGV4ICE9IC0xICYmIGluZGV4ICE9IHRoaXMuZmlsZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5maWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlSW5mb0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlSW5mb0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH1cblxuICB9XG5cbiAgbGlzdFRvU3RyaW5nKHN0ckxpc3Q6IHN0cmluZ1tdKSB7XG4gICAgbGV0IG5hbWU6IHN0cmluZyA9IFwiXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBuYW1lICs9IHN0ckxpc3RbaV0gKyBcIixcIjtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuICBzZWN1cml0eUNoYW5nZSgkZXZlbnQ6IGFueSwgZmlsZTogRmlsZUluZm8pIHtcbiAgICBmaWxlLnNlY3VyaXR5SW5mbyA9ICRldmVudC5kYXRhO1xuICAgIGxldCB1cGxvYWRGaWxlID0gdGhpcy51cGxvYWRGaWxlSW5mb0xpc3QuZmlsdGVyKHggPT4geC5tZXRhZGF0YUlkID0gZmlsZS5pZClbMF07XG4gICAgdXBsb2FkRmlsZS5zZWN1cml0eUluZm8gPSAkZXZlbnQuZGF0YTtcbiAgfVxuXG5cbiAgZXhTdG9yYWdlRmlsZUxpc3Q6IEV4U3RvcmFnZUZpbGVJbmZvW10gPSBbXTtcblxuICB0eXBlQ2hhbmdlKCRldmVudDogYW55LCBmaWxlOiBGaWxlSW5mbykge1xuICAgIGZpbGUuZXh0ZW5zaW9uTmFtZSA9ICRldmVudC5kYXRhLm5hbWU7XG4gICAgbGV0IGV4U3RvcmFnZUZpbGVJbmZvOiBFeFN0b3JhZ2VGaWxlSW5mbyA9IG5ldyBFeFN0b3JhZ2VGaWxlSW5mbztcbiAgICBpZiAoZmlsZS5leHRlbnNpb25OYW1lID09IHRoaXMuc3RvcmFnZUV4dGVuc2lvbi5kZWZhdWx0UHJvcGVydHlOYW1lKSB7XG4gICAgICBpZiAodGhpcy5leFN0b3JhZ2VGaWxlTGlzdC5maWx0ZXIoeCA9PiB4Lm1ldGFkYXRhSWQgPT0gZmlsZS5pZCkubGVuZ3RoID4gMClcbiAgICAgICAgdGhpcy5leFN0b3JhZ2VGaWxlTGlzdC5zcGxpY2UodGhpcy5leFN0b3JhZ2VGaWxlTGlzdC5maW5kSW5kZXgoeCA9PiB4Lm1ldGFkYXRhSWQgPT0gZmlsZS5pZCksIDEpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmV4U3RvcmFnZUZpbGVMaXN0LmZpbHRlcih4ID0+IHgubWV0YWRhdGFJZCA9PSBmaWxlLmlkKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGV4U3RvcmFnZUZpbGVJbmZvID0gdGhpcy5leFN0b3JhZ2VGaWxlTGlzdC5maWx0ZXIoeCA9PiB4Lm1ldGFkYXRhSWQgPT0gZmlsZS5pZClbMF07XG4gICAgICAgIGV4U3RvcmFnZUZpbGVJbmZvLmV4UHJvcGVydHlOYW1lID0gZmlsZS5leHRlbnNpb25OYW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhTdG9yYWdlRmlsZUluZm8ubWV0YWRhdGFJZCA9IGZpbGUuaWQ7XG4gICAgICAgIGV4U3RvcmFnZUZpbGVJbmZvLmV4UHJvcGVydHlOYW1lID0gZmlsZS5leHRlbnNpb25OYW1lO1xuICAgICAgICB0aGlzLmV4U3RvcmFnZUZpbGVMaXN0LnB1c2goZXhTdG9yYWdlRmlsZUluZm8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwbG9hZCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZVRvdGFsICE9IHRoaXMuZmlsZXMuZmlsdGVyKHggPT4geC5pc1VwbG9hZGluZyB8fCB4LnVwbG9hZFJlc3VsdCkubGVuZ3RoKSB7XG5cbiAgICAgIHRoaXMubXNnU2VydmljZS53YXJuaW5nKHRoaXMubG9jYWxlcGlwZS50cmFuc2Zvcm0oJ3dhaXQnKSk7XG4gICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXZlU2VjdXJpdHlJbmZvKSB7XG4gICAgICB0aGlzLnVwbG9hZFNlcnZpY2Uuc2F2ZVNlY3VyaXR5SW5mbyh0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdCwgdGhpcy5yb290SWQpLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdG9yYWdlRXh0ZW5zaW9uID09IG51bGwpXG4gICAgICByZXR1cm4gb2YodGhpcy51cGxvYWRGaWxlSW5mb0xpc3QpO1xuICAgIGVsc2Uge1xuICAgICAgaWYgKHRoaXMuZXhTdG9yYWdlRmlsZUxpc3QubGVuZ3RoID09IDApXG4gICAgICAgIHJldHVybiBvZih0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgbG9hZGluZyA9IHRoaXMubG9hZFNlcnZpY2Uuc2hvdyh7XG4gICAgICAgICAgbWVzc2FnZTogdGhpcy5sb2NhbGVwaXBlLnRyYW5zZm9ybSgnc2F2ZVRvJykgKyB0aGlzLnN0b3JhZ2VFeHRlbnNpb24uZXh0ZW5zaW9uTmFtZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBsb2FkU2VydmljZS5jaGFuZ2VTdG9yYWdlSW5zdGFuY2UodGhpcy5leFN0b3JhZ2VGaWxlTGlzdCwgdGhpcy5yb290SWQpLnBpcGUoXG4gICAgICAgICAgbWFwKHJlcyA9PiB7XG4gICAgICAgICAgICAvLyBpZiAocmVzICE9IG51bGwpXG4gICAgICAgICAgICAvLyAgIHRoaXMubXNnU2VydmljZS5lcnJvcign5L+d5a2Y5YiwJyArIHRoaXMuc3RvcmFnZUV4dGVuc2lvbi5leHRlbnNpb25OYW1lICsgXCLlpLHotKXvvIzkuIrkvKDmlofku7boh6rliqjkv53lrZjliLBcIiArIHRoaXMuc3RvcmFnZUV4dGVuc2lvbi5kZWZhdWx0UHJvcGVydHlOYW1lICsgXCLlrZjlgqjjgIJcIiArIHJlcy5lcnJvci5NZXNzYWdlKTtcbiAgICAgICAgICAgIGxvYWRpbmcuY2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwbG9hZEZpbGVJbmZvTGlzdDtcbiAgICAgICAgICB9KSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgaWYgKHRoaXMudXBsb2FkRmlsZUluZm9MaXN0Lmxlbmd0aCA9PSAwKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMudXBsb2FkRmlsZUluZm9MaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICB0aGlzLm1ldGFkYXRhSWRMaXN0LnB1c2goZWxlbWVudC5tZXRhZGF0YUlkKTtcbiAgICB9KVxuICAgIHRoaXMudXBsb2FkU2VydmljZS5jYW5jZWwodGhpcy5tZXRhZGF0YUlkTGlzdCwgdGhpcy5yb290SWQpLnN1YnNjcmliZSgpO1xuXG4gIH1cblxuICBnZXRVcGxvYWRGaWxlSW5mb0xpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudXBsb2FkRmlsZUluZm9MaXN0O1xuICB9XG5cbiAgZGVsZXRlKGZpbGUpIHtcbiAgICB0aGlzLmZpbGVzLnNwbGljZSh0aGlzLmZpbGVzLmluZGV4T2YoZmlsZSksIDEpO1xuICAgIGlmIChmaWxlLnVwbG9hZFJlc3VsdClcbiAgICAgIHRoaXMudXBsb2FkZWRGaWxlVG90YWwtLTtcbiAgICBpZiAodGhpcy5leFN0b3JhZ2VGaWxlTGlzdC5maWx0ZXIoeCA9PiB4Lm1ldGFkYXRhSWQgPT0gZmlsZS5pZCkubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5leFN0b3JhZ2VGaWxlTGlzdC5zcGxpY2UodGhpcy5leFN0b3JhZ2VGaWxlTGlzdC5maW5kSW5kZXgoeCA9PiB4Lm1ldGFkYXRhSWQgPT0gZmlsZS5pZCksIDEpO1xuICAgIH1cblxuICB9XG5cbiAgZ2V0RmlsZVNpemUoc2l6ZTogbnVtYmVyKSB7XG4gICAgaWYgKHNpemUgPCAxMDI0MDApXG4gICAgICByZXR1cm4gKHNpemUgLyAxMDI0KS50b0ZpeGVkKDEpICsgXCJLXCI7XG4gICAgZWxzZSBpZiAoc2l6ZSA8IDEwMjQgKiAxMDI0KVxuICAgICAgcmV0dXJuIChzaXplIC8gMTAyNCkudG9GaXhlZCgwKSArIFwiS1wiO1xuICAgIGVsc2UgaWYgKHNpemUgPCAxMDAgKiAxMDI0ICogMTAyNClcbiAgICAgIHJldHVybiAoc2l6ZSAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDEpICsgXCJNXCI7XG4gICAgZWxzZSBpZiAoc2l6ZSA8IDEwMjQgKiAxMDI0ICogMTAyNClcbiAgICAgIHJldHVybiAoc2l6ZSAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDApICsgXCJNXCI7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIChzaXplIC8gMTAyNCAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDEpICsgXCJHXCI7XG4gIH1cbiAgc2hvd0J5R3JvdXAoKSB7XG4gICAgdGhpcy5zaG93VHlwZSA9IDA7XG4gICAgLy8gdGhpcy5zZWxlY3RlZEZpbGVDb3VudCA9IDA7XG4gIH1cblxuICBzaG93QnlMaXN0KCkge1xuICAgIHRoaXMuc2hvd1R5cGUgPSAxO1xuICAgIC8vIHRoaXMuc2VsZWN0ZWRGaWxlQ291bnQgPSAwO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZUNvdW50ICE9IDAgJiYgdGhpcy5zZWxlY3RlZEZpbGVDb3VudCA9PSB0aGlzLmZpbGVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5maWxlQWxsU2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG1vdXNlT3ZlcihmaWxlKSB7XG4gICAgZmlsZS5tb3VzZU9uID0gdHJ1ZTtcbiAgfVxuICBtb3VzZU91dChmaWxlKSB7XG4gICAgZmlsZS5tb3VzZU9uID0gZmFsc2U7XG4gIH1cblxufVxuXG5cbiJdfQ==
|