fabrikantencore 2.9.2 → 2.9.3
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/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-import-sets/beheer-import-sets.component.mjs +4 -4
- package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-eigenschap/beheer-products-eigenschap.component.mjs +21 -4
- package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products.component.mjs +4 -4
- package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-searchproducts/beheer-searchproducts.component.mjs +3 -3
- package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-select-filter-dialog/beheer-select-filter-dialog.component.mjs +3 -2
- package/esm2022/src/app/modules/fabrikantencore/components/fab-actionmenu/fab-actionmenu.component.mjs +3 -10
- package/esm2022/src/app/modules/fabrikantencore/components/fab-display-photo-dialog/fab-display-photo-dialog.component.mjs +25 -0
- package/esm2022/src/app/modules/fabrikantencore/components/fab-filter-label/fab-filter-label.component.mjs +3 -3
- package/esm2022/src/app/modules/fabrikantencore/components/fab-filter-picture-select/fab-filter-picture-select.component.mjs +70 -0
- package/esm2022/src/app/modules/fabrikantencore/components/fab-filters-input/fab-filters-input.component.mjs +18 -3
- package/esm2022/src/app/modules/fabrikantencore/components/fab-form/fab-form.component.mjs +107 -0
- package/esm2022/src/app/modules/fabrikantencore/components/fab-form-dialog/fab-form-dialog.component.mjs +14 -80
- package/esm2022/src/app/modules/fabrikantencore/components/fab-input/fab-input.component.mjs +4 -3
- package/esm2022/src/app/modules/fabrikantencore/components/fab-input-code/fab-input-code.component.mjs +8 -9
- package/esm2022/src/app/modules/fabrikantencore/components/fab-product/fab-product.component.mjs +11 -3
- package/esm2022/src/app/modules/fabrikantencore/fabrikantencore.module.mjs +12 -3
- package/esm2022/src/app/modules/fabrikantencore/services/fabrikanten.service.mjs +51 -51
- package/esm2022/src/app/modules/fabrikantencore/services/products.service.mjs +2 -2
- package/esm2022/src/app/modules/fabrikantencore/swagger/SwaggerClient.mjs +96 -1
- package/fesm2022/fabrikantencore.mjs +737 -490
- package/fesm2022/fabrikantencore.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-eigenschap/beheer-products-eigenschap.component.d.ts +1 -0
- package/src/app/modules/fabrikantencore/components/fab-actionmenu/fab-actionmenu.component.d.ts +0 -1
- package/src/app/modules/fabrikantencore/components/fab-display-photo-dialog/fab-display-photo-dialog.component.d.ts +10 -0
- package/src/app/modules/fabrikantencore/components/fab-filter-picture-select/fab-filter-picture-select.component.d.ts +28 -0
- package/src/app/modules/fabrikantencore/components/fab-filters-input/fab-filters-input.component.d.ts +2 -0
- package/src/app/modules/fabrikantencore/components/fab-form/fab-form.component.d.ts +25 -0
- package/src/app/modules/fabrikantencore/components/fab-form-dialog/fab-form-dialog.component.d.ts +2 -11
- package/src/app/modules/fabrikantencore/components/fab-product/fab-product.component.d.ts +1 -0
- package/src/app/modules/fabrikantencore/fabrikantencore.module.d.ts +32 -29
- package/src/app/modules/fabrikantencore/swagger/SwaggerClient.d.ts +26 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { FabFormDialogComponent } from '../components/fab-form-dialog/fab-form-dialog.component';
|
|
2
|
+
//import { FabFormDialogComponent } from '../components/fab-form-dialog/fab-form-dialog.component';
|
|
3
3
|
import { FabrikantenRequestModel, SelectProductRequest, SelectBCBProductRequest, SelectFilterOptionRequest, SelectCategoryRequest, SetRangeInputRequest, ResetFilterRequest, ResetAllFiltersRequest, ResetCategoryLayerRequest, RemoveProductSelectionRequest, ResetAllCategoriesRequest, BCBLinkRequestModel, FabrikantenFileRequestModel, SelectColourRequest, TranslationCategory, TranslationSubCategory, SelectFilterCustomRequest, FabrikantenFileRequestInputModel, FabrikantenCustomDownloadRequestModel } from '../swagger/SwaggerClient';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "../swagger/SwaggerClient";
|
|
@@ -783,31 +783,45 @@ class FabrikantenService {
|
|
|
783
783
|
this.DownloadItems(downloaditems, custombcbeboid);
|
|
784
784
|
}
|
|
785
785
|
DownloadItems(downloaditems, custombcbeboid, pdftemplates) {
|
|
786
|
-
if (this.FabrikantenSettingsViewModel.downloadFormEnabled && !this.FabrikantenViewModel.hasFilledForms) {
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
}
|
|
798
|
-
else {
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
786
|
+
//if (this.FabrikantenSettingsViewModel.downloadFormEnabled && !this.FabrikantenViewModel.hasFilledForms) {
|
|
787
|
+
// var dialogRef = this.dialog.open(FabFormDialogComponent, {
|
|
788
|
+
// data: {
|
|
789
|
+
// form: this.FabrikantenSettingsViewModel.downloadForm
|
|
790
|
+
// }
|
|
791
|
+
// });
|
|
792
|
+
// dialogRef.afterClosed().subscribe((data: any) => {
|
|
793
|
+
// if (this.FabrikantenViewModel.hasFilledForms) {
|
|
794
|
+
// this.DownloadItems(downloaditems, custombcbeboid, pdftemplates);
|
|
795
|
+
// }
|
|
796
|
+
// });
|
|
797
|
+
//}
|
|
798
|
+
//else {
|
|
799
|
+
var request = new FabrikantenFileRequestModel();
|
|
800
|
+
request.sessionId = this.FabrikantenViewModel.sessionId;
|
|
801
|
+
request.customBCBEBOId = custombcbeboid;
|
|
802
|
+
request.languageId = this.TranslateService.ActiveLanguage.id;
|
|
803
|
+
request.inputs = new Array();
|
|
804
|
+
for (var i = 0; i < downloaditems.length; i++) {
|
|
805
|
+
downloaditems[i].loading = true;
|
|
806
|
+
var input = new FabrikantenFileRequestInputModel();
|
|
807
|
+
input.fileType = downloaditems[i].fileType;
|
|
808
|
+
input.model3D = downloaditems[i].model3D;
|
|
809
|
+
input.translationSubCategory = downloaditems[i].translationSubCategory;
|
|
810
|
+
input.pdfTemplateId = -1;
|
|
811
|
+
request.inputs.push(input);
|
|
812
|
+
if (this.StatisticsService.Active) {
|
|
813
|
+
if (this.FabrikantenViewModel?.selectedProduct != null) {
|
|
814
|
+
this.StatisticsService.DownloadFile(input.fileType + "", this.TranslateService.GetActiveValue(TranslationCategory.Product, TranslationSubCategory.Name, this.FabrikantenViewModel.selectedProduct.id));
|
|
815
|
+
}
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
if (pdftemplates != undefined) {
|
|
819
|
+
for (var i = 0; i < pdftemplates.length; i++) {
|
|
820
|
+
pdftemplates[i].loading = true;
|
|
806
821
|
var input = new FabrikantenFileRequestInputModel();
|
|
807
|
-
input.fileType =
|
|
808
|
-
input.model3D =
|
|
809
|
-
input.
|
|
810
|
-
input.pdfTemplateId = -1;
|
|
822
|
+
input.fileType = "pdf";
|
|
823
|
+
input.model3D = false;
|
|
824
|
+
input.pdfTemplateId = pdftemplates[i].templateId;
|
|
811
825
|
request.inputs.push(input);
|
|
812
826
|
if (this.StatisticsService.Active) {
|
|
813
827
|
if (this.FabrikantenViewModel?.selectedProduct != null) {
|
|
@@ -815,35 +829,21 @@ class FabrikantenService {
|
|
|
815
829
|
}
|
|
816
830
|
}
|
|
817
831
|
}
|
|
832
|
+
}
|
|
833
|
+
this.FabrikantenApiClient.getFabrikantenFileViewModel(request).subscribe((model) => {
|
|
834
|
+
this.StartDownload(model.file + "", "." + model.fileType);
|
|
835
|
+
for (var i = 0; i < downloaditems.length; i++) {
|
|
836
|
+
downloaditems[i].loading = false;
|
|
837
|
+
}
|
|
818
838
|
if (pdftemplates != undefined) {
|
|
819
839
|
for (var i = 0; i < pdftemplates.length; i++) {
|
|
820
|
-
pdftemplates[i].loading =
|
|
821
|
-
var input = new FabrikantenFileRequestInputModel();
|
|
822
|
-
input.fileType = "pdf";
|
|
823
|
-
input.model3D = false;
|
|
824
|
-
input.pdfTemplateId = pdftemplates[i].templateId;
|
|
825
|
-
request.inputs.push(input);
|
|
826
|
-
if (this.StatisticsService.Active) {
|
|
827
|
-
if (this.FabrikantenViewModel?.selectedProduct != null) {
|
|
828
|
-
this.StatisticsService.DownloadFile(input.fileType + "", this.TranslateService.GetActiveValue(TranslationCategory.Product, TranslationSubCategory.Name, this.FabrikantenViewModel.selectedProduct.id));
|
|
829
|
-
}
|
|
830
|
-
}
|
|
840
|
+
pdftemplates[i].loading = false;
|
|
831
841
|
}
|
|
832
842
|
}
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
}
|
|
838
|
-
if (pdftemplates != undefined) {
|
|
839
|
-
for (var i = 0; i < pdftemplates.length; i++) {
|
|
840
|
-
pdftemplates[i].loading = false;
|
|
841
|
-
}
|
|
842
|
-
}
|
|
843
|
-
}, (error) => {
|
|
844
|
-
alert('An unexpected error occured');
|
|
845
|
-
});
|
|
846
|
-
}
|
|
843
|
+
}, (error) => {
|
|
844
|
+
alert('An unexpected error occured');
|
|
845
|
+
});
|
|
846
|
+
//}
|
|
847
847
|
}
|
|
848
848
|
DownloadCustom(customdownload) {
|
|
849
849
|
customdownload.loading = true;
|
|
@@ -1014,4 +1014,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImpor
|
|
|
1014
1014
|
type: Injectable,
|
|
1015
1015
|
args: [{ providedIn: 'root' }]
|
|
1016
1016
|
}], ctorParameters: function () { return [{ type: i1.FabrikantenApiClient }, { type: i2.BestekService }, { type: i3.TranslateService }, { type: i4.WebGLService }, { type: i5.SVGService }, { type: i6.TextureService }, { type: i7.NavigateService }, { type: i8.Router }, { type: i9.MatLegacyDialog }, { type: i10.StatisticsService }]; } });
|
|
1017
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFicmlrYW50ZW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvc2VydmljZXMvZmFicmlrYW50ZW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc5RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUVqRyxPQUFPLEVBVUwsdUJBQXVCLEVBRXZCLG9CQUFvQixFQUNwQix1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDekIsNkJBQTZCLEVBQzdCLHlCQUF5QixFQUl6QixtQkFBbUIsRUFFbkIsMkJBQTJCLEVBRTNCLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBRXRCLHlCQUF5QixFQUd6QixnQ0FBZ0MsRUFHaEMscUNBQXFDLEVBRXRDLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7OztBQWVsQyxNQUNhLGtCQUFrQjtJQXdCbkI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNEO0lBQ0M7SUFoQ0YsSUFBSSxHQUFZLEtBQUssQ0FBQztJQUV2QixPQUFPLEdBQVksSUFBSSxDQUFDO0lBQ3hCLGdCQUFnQixHQUFXLENBQUMsQ0FBQztJQUU3QixpQkFBaUIsR0FBa0IsSUFBSSxDQUFDO0lBQ3hDLG9CQUFvQixDQUF1QjtJQUUzQyxjQUFjLEdBQVksS0FBSyxDQUFDO0lBQ2hDLDRCQUE0QixDQUErQjtJQUUzRCxhQUFhLEdBQVcsQ0FBQyxDQUFDO0lBQzFCLGtCQUFrQixHQUFvRCxJQUFJLENBQUM7SUFFM0UsV0FBVyxHQUFXLFlBQVksQ0FBQztJQUNuQyxpQkFBaUIsR0FBWSxLQUFLLENBQUM7SUFDbkMsYUFBYSxHQUFZLEtBQUssQ0FBQztJQUMvQixhQUFhLEdBQVksS0FBSyxDQUFDO0lBQy9CLGtCQUFrQixHQUFZLEtBQUssQ0FBQztJQUVwQyxNQUFNLEdBQVksS0FBSyxDQUFDO0lBRS9CLFlBQ1Usb0JBQTBDLEVBQzFDLGFBQTRCLEVBQzVCLGdCQUFrQyxFQUNsQyxZQUEwQixFQUMxQixVQUFzQixFQUN0QixjQUE4QixFQUM5QixlQUFnQyxFQUNoQyxNQUFjLEVBQ2YsTUFBaUIsRUFDaEIsaUJBQW9DO1FBVHBDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNmLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDaEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUM1QyxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUMvQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztJQUMvQyxDQUFDO0lBRU0sZUFBZSxDQUFDLGlCQUFvQztRQUN6RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVsQyxJQUFJLE9BQU8sR0FBRyxJQUFJLHNCQUFzQixFQUFFLENBQUM7UUFDM0MsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDO1FBRXhELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNoRSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdEMsQ0FBQyxFQUFFLENBQUMsS0FBZSxFQUFFLEVBQUU7WUFDckIsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7WUFFckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sWUFBWSxDQUFDLFFBQWdCLEVBQUUsY0FBc0IsRUFBRSxpQkFBb0MsRUFBRSxjQUErQjtRQUNqSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVsQyxJQUFJLE9BQU8sR0FBRyxJQUFJLHlCQUF5QixFQUFFLENBQUM7UUFFOUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDO1FBQ3hELE9BQU8sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRTVCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRTtZQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztTQUNqUjtRQUVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ25FLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdEQsQ0FBQyxFQUFFLENBQUMsS0FBZSxFQUFFLEVBQUU7WUFDckIsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7WUFFckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sWUFBWSxDQUFDLFFBQWdCLEVBQUUsTUFBYyxFQUFFLFdBQW1CLEVBQUUsaUJBQW9DO1FBQzdHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRWxDLElBQUksT0FBTyxHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUV4QyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUM7UUFDeEQsT0FBTyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDNUIsT0FBTyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDbEMsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFNUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzdELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN0QyxDQUFDLEVBQUUsQ0FBQyxLQUFlLEVBQUUsRUFBRTtZQUNyQixLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUVyQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxRQUFnQixFQUFFLFdBQW1CLEVBQUUsaUJBQW9DO1FBQ25HLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRWxDLElBQUksT0FBTyxHQUFHLElBQUkseUJBQXlCLEVBQUUsQ0FBQztRQUU5QyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUM7UUFDeEQsT0FBTyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDbEMsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFNUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbkUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsRUFBRSxDQUFDLEtBQWUsRUFBRSxFQUFFO1lBQ3JCLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBRXJDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGFBQWEsQ0FBQyxZQUFvQixFQUFFLEtBQWEsRUFBRSxpQkFBb0MsRUFBRSxjQUErQjtRQUM3SCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVsQyxJQUFJLE9BQU8sR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFFekMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDO1FBQ3hELE9BQU8sQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ3BDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRXRCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRTtZQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsc0JBQXNCLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztTQUN6SztRQUVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM5RCxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3RELENBQUMsRUFBRSxDQUFDLEtBQWUsRUFBRSxFQUFFO1lBQ3JCLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBRXJDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLG1CQUFtQixDQUFDLFVBQWtCLEVBQUUsaUJBQW9DO1FBQ2pGLElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksRUFBRTtZQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUVwQixJQUFJLE9BQU8sR0FBRyxJQUFJLHlCQUF5QixFQUFFLENBQUM7WUFFOUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDO1lBRXhELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNuRSxJQUFJLFVBQVUsR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7Z0JBRTdDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQztnQkFDM0QsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7Z0JBQ25DLFVBQVUsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO2dCQUU3QixJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ2xFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDdEMsQ0FBQyxFQUFFLENBQUMsS0FBZSxFQUFFLEVBQUU7b0JBQ3JCLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxHQUFHO3dCQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO3lCQUN2Qjt3QkFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDLENBQUM7d0JBQzNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ3BCO29CQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNyQixpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLEVBQUUsQ0FBQyxLQUFlLEVBQUUsRUFBRTtnQkFDckIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEdBQUc7b0JBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7cUJBQ3ZCO29CQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztvQkFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDcEI7Z0JBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU0sY0FBYyxDQUFDLFFBQXNDLEVBQUUsaUJBQW9DLEVBQUUsY0FBK0I7UUFDakksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFbEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBRTFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQztRQUN4RCxPQUFPLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDakMsT0FBTyxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBRXZDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRTtZQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLHNCQUFzQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNySjtRQUVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3RELENBQUMsRUFBRSxDQUFDLEtBQWUsRUFBRSxFQUFFO1lBQ3JCLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBRXJDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGFBQWEsQ0FBQyxPQUFvQyxFQUFFLGlCQUFvQyxFQUFFLGNBQStCO1FBQzlILElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRWxDLElBQUksT0FBTyxHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUV6QyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUM7UUFDeEQsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBRS9CLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRTtZQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLHNCQUFzQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNsSjtRQUVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM5RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1lBQy9CLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUVqQixJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3RELENBQUMsRUFBRSxDQUFDLEtBQWUsRUFBRSxFQUFFO1lBQ3JCLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBRXJDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGdCQUFnQixDQUFDLFVBQTBDLEVBQUUsaUJBQW9DO1FBQ3RHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRWxDLElBQUksT0FBTyxHQUFHLElBQUksdUJBQXVCLEVBQUUsQ0FBQztRQUU1QyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUM7UUFDeEQsT0FBTyxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBRXJDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN0QyxDQUFDLEVBQUUsQ0FBQyxLQUFlLEVBQUUsRUFBRTtZQUNyQixLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUVyQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxNQUFrQyxFQUFFLGlCQUFvQyxFQUFFLGNBQStCO1FBQ25JLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRWxDLElBQUksT0FBTyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUN2QyxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDN0IsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDO1FBRXhELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3JFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdEQsQ0FBQyxFQUFFLENBQUMsS0FBZSxFQUFFLEVBQUU7WUFDckIsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7WUFFckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sa0JBQWtCLENBQUMsaUJBQW9DO1FBQzVELElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksRUFBRTtZQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUVwQixJQUFJLE9BQU8sR0FBRyxJQUFJLHlCQUF5QixFQUFFLENBQUM7WUFFOUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDO1lBRXhELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNuRSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDdEMsQ0FBQyxFQUFFLENBQUMsS0FBZSxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxHQUFHO29CQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO3FCQUN2QjtvQkFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDLENBQUM7b0JBQzNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3BCO2dCQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNwQyxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVNLHNCQUFzQixDQUFDLGFBQTJDLEVBQUUsaUJBQW9DO1FBQzdHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRWxDLElBQUksT0FBTyxHQUFHLElBQUkseUJBQXlCLEVBQUUsQ0FBQztRQUM5QyxPQUFPLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDNUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDO1FBRXhELElBQUksQ0FBQyxvQkFBb0IsQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzVFLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMxQyxDQUFDLEVBQUUsQ0FBQyxLQUFlLEVBQUUsRUFBRTtZQUNyQixLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUVyQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxpQkFBb0M7UUFDaEUsSUFBSSxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBRXBCLElBQUksT0FBTyxHQUFHLElBQUksNkJBQTZCLEVBQUUsQ0FBQztZQUVsRCxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUM7WUFFeEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3ZFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFFakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3RDLENBQUMsRUFBRSxDQUFDLEtBQWUsRUFBRSxFQUFFO2dCQUNyQixJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksR0FBRztvQkFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztxQkFDdkI7b0JBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO29CQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNwQjtnQkFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDckIsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxHQUFXLEVBQUUsaUJBQW9DO1FBQzFFLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO1FBRXZCLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU0seUJBQXlCO1FBQzlCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxjQUFjLENBQUM7UUFFNUQsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO1lBQ3ZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMzQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLElBQUksQ0FBQyxFQUFFO29CQUN0QyxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdkI7YUFDRjtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLElBQUksQ0FBQztJQUNsRCxDQUFDO0lBRU0sWUFBWTtRQUNqQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO1lBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDaEUsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksSUFBSTtvQkFDNUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRO29CQUM1QyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFO29CQUM3QyxPQUFPLElBQUksQ0FBQztpQkFDYjthQUNGO1NBQ0Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsRUFBRSxvQkFBb0IsSUFBSSxJQUFJLEVBQUU7WUFDM0UsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVNLGNBQWM7UUFDbkIsSUFBSSxJQUFJLENBQUMsNEJBQTRCLEVBQUUsZ0JBQWdCLElBQUksSUFBSSxFQUFFO1lBQy9ELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsNEJBQTRCLElBQUksSUFBSSxFQUFFO1lBQ2xGLElBQUksQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3hELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLEVBQUUsK0JBQStCLENBQUM7Z0JBRTdGLElBQUksV0FBVyxJQUFJLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDakQsT0FBTyxJQUFJLENBQUM7aUJBQ2I7YUFDRjtTQUNGO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sY0FBYztRQUNuQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxlQUFlLElBQUksSUFBSSxFQUFFO1lBQ3RELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUN2QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRTtZQUM1QixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRTtZQUM1QixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLFFBQVEsRUFBRTtZQUNoQyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLFNBQVMsRUFBRTtZQUNqQyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLFlBQVksRUFBRTtZQUNwQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRTtnQkFDeEIsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sYUFBYTtRQUNsQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsK0JBQStCLElBQUksSUFBSSxFQUFFO1lBQ3ZGLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLGVBQWUsRUFBRSwrQkFBK0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMxRixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLElBQUksSUFBSSxFQUFFO29CQUM3RyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDaEgsT0FBTyxJQUFJLENBQUM7cUJBQ2I7aUJBQ0Y7YUFDRjtTQUNGO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUVwQixJQUFJLElBQUksR0FBVyxFQUFFLENBQUM7UUFFdEIsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRTtZQUM1QixJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFBO1NBQzFEO2FBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRTtZQUNqQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFBO1NBQ3pEO2FBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLFFBQVEsRUFBRTtZQUNyQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFBO1NBQy9EO2FBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLFlBQVksRUFBRTtZQUN6QyxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFBO1NBQy9EO2FBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLFNBQVMsRUFBRTtZQUN0QyxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFBO1NBQ2pFO1FBRUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRXBCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBMkIsRUFBRSxFQUFFO1lBQ3RGLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUVqQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDLEVBQUUsQ0FBQyxLQUFlLEVBQUUsRUFBRTtZQUNyQixLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUVyQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxXQUFXLENBQUMsaUJBQW9DLEVBQUUsY0FBK0IsRUFBRSxRQUFjO1FBQ3RHLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVNLHdCQUF3QixDQUFDLGlCQUFvQyxFQUFFLGNBQStCLEVBQUUsUUFBYztRQUNuSCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1lBRWxDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUN4QixJQUFJLENBQUMsZ0NBQWdDLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUM7YUFDMUU7aUJBQ0k7Z0JBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7aUJBQ2pGO3FCQUNJO29CQUNILElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUNqQixJQUFJLE9BQU8sR0FBRyxJQUFJLHVCQUF1QixFQUFFLENBQUM7b0JBRTVDLElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksRUFBRTt3QkFDckMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDO3FCQUN6RDt5QkFDSTt3QkFDSCxPQUFPLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztxQkFDeEI7b0JBRUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQTJCLEVBQUUsRUFBRTt3QkFFbkcsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLFlBQVksSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRSxZQUFZLElBQUksSUFBSSxFQUFFOzRCQUNuSCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQzs0QkFDcEUsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUM7NEJBRWhELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dDQUN0QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQ0FDdEMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUU7d0NBQ2hELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQzt3Q0FDdEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO3FDQUN2QztpQ0FDRjs2QkFDRjt5QkFDRjt3QkFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7d0JBQ3hDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7d0JBRWxDLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksRUFBRTs0QkFDbEMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQzs0QkFDOUMsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO2dDQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQ0FDdEMsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztvQ0FDOUIsSUFBSSxNQUFNLElBQUksU0FBUyxFQUFFO3dDQUN2QixJQUFJLE1BQU0sQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFOzRDQUN2QyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzs0Q0FDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7eUNBQ2pEO3FDQUNGO2lDQUNGOzZCQUNGOzRCQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7eUJBRS9CO3dCQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO3dCQUV2QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzt3QkFDckIsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7d0JBRWxDLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQzt3QkFFdkMsSUFBSSxjQUFjLElBQUksSUFBSSxFQUFFOzRCQUMxQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLENBQUMsRUFBRTtnQ0FDN0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7Z0NBQ2pELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDOzZCQUNwQjt5QkFDRjs2QkFDSTs0QkFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQzs0QkFDakQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7eUJBQ3BCO3dCQUVELElBQUksUUFBUSxJQUFJLElBQUksRUFBRTs0QkFDcEIsUUFBUSxFQUFFLENBQUM7eUJBQ1o7b0JBQ0gsQ0FBQyxFQUFFLENBQUMsS0FBZSxFQUFFLEVBQUU7d0JBQ3JCLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxHQUFHOzRCQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDOzZCQUN2Qjs0QkFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDLENBQUM7NEJBQzNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQ3BCO3dCQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO3dCQUNyQixpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDcEMsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVNLGdDQUFnQyxDQUFDLGlCQUFvQyxFQUFFLGNBQStCO1FBQzNHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1lBRWxDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQywrQkFBK0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQW1DLEVBQUUsRUFBRTtnQkFDNUcsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEtBQUssQ0FBQztnQkFFMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFFbEMsSUFBSSxJQUFJLENBQUMsNEJBQTRCLENBQUMsY0FBYyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsNEJBQTRCLENBQUMsY0FBYyxJQUFJLEVBQUUsRUFBRTtvQkFDdEgsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGNBQWMsQ0FBQztpQkFDekU7cUJBQ0k7b0JBQ0gsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxDQUFDO2lCQUNsRTtZQUNILENBQUMsRUFBRSxDQUFDLEtBQWUsRUFBRSxFQUFFO2dCQUNyQixJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksR0FBRztvQkFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztxQkFDdkI7b0JBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO29CQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNwQjtnQkFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDckIsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxpQkFBb0MsRUFBRSxjQUE4QjtRQUMzRixJQUFJLGNBQWMsSUFBSSxJQUFJLEVBQUU7WUFDMUIsSUFBSSxXQUFXLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRWxFLElBQUksV0FBVyxJQUFJLElBQUksRUFBRTtnQkFDdkIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTtvQkFDOUMsSUFBSSxPQUFPLEdBQXVDLElBQUksQ0FBQztvQkFFdkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUNsRSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLFdBQVcsRUFBRTs0QkFDaEUsT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ2hELE1BQU07eUJBQ1A7cUJBQ0Y7b0JBRUQsSUFBSSxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7d0JBQ2xGLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxDQUFDO3dCQUMvRCxPQUFPLEtBQUssQ0FBQztxQkFDZDtpQkFDRjthQUNGO1lBRUQsSUFBSSxZQUFZLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXBFLElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtnQkFDeEIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxJQUFJLElBQUksRUFBRTtvQkFDcEQsSUFBSSxRQUFRLEdBQXdDLElBQUksQ0FBQztvQkFFekQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUV4RSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQzt3QkFFbkUsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFOzRCQUNqQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQ0FDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksWUFBWSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQ0FDM0osUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQ0FDcEIsTUFBTTtpQ0FDUDs2QkFDRjt5QkFDRjtxQkFDRjtvQkFFRCxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7d0JBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxDQUFDO3dCQUNqRSxPQUFPLEtBQUssQ0FBQztxQkFDZDtpQkFDRjthQUNGO1lBRUQsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFO2dCQUM3RSxPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFO2dCQUM3RSxPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFO2dCQUM3RSxPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFO2dCQUM3RSxPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxJQUFZLEVBQUUsY0FBOEIsRUFBRSxpQkFBb0M7UUFDL0csSUFBSSxVQUFVLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVELElBQUksVUFBVSxJQUFJLElBQUksRUFBRTtZQUN0QixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO2dCQUM1QyxJQUFJLE1BQU0sR0FBNEMsSUFBSSxDQUFDO2dCQUMzRCxJQUFJLE1BQU0sR0FBc0MsSUFBSSxDQUFDO2dCQUVyRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ2hFLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO29CQUM1RCxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUU7d0JBQ3RCLElBQUksT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7d0JBRWpDLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTs0QkFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0NBQ3ZDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxVQUFVLEVBQUU7b0NBQ3BDLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7b0NBQ3BCLE1BQU0sR0FBRyxVQUFVLENBQUM7b0NBQ3BCLE1BQU07aUNBQ1A7NkJBQ0Y7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7Z0JBRUQsSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLGNBQWMsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFO29CQUMxRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQztvQkFDM0UsT0FBTyxJQUFJLENBQUM7aUJBQ2I7YUFDRjtTQUNGO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sU0FBUztRQUNmLElBQUksSUFBSSxDQUFDLDRCQUE0QixDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDdEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsUUFBUSxDQUFDO1NBQy9EO2FBQ0ksSUFBSSxJQUFJLENBQUMsNEJBQTRCLENBQUMsa0JBQWtCLEVBQUU7WUFDN0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDekI7YUFDSTtZQUNILElBQUksQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxJQUFJLENBQUMsNEJBQTRCLENBQUMsa0JBQWtCLEVBQUU7WUFDeEQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRTtnQkFDNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQzthQUMzQjtZQUVELElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7YUFDM0I7WUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksUUFBUSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO2FBQzNCO1NBQ0Y7YUFDSTtZQUNILElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxZQUFZLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7YUFDM0I7WUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFO2dCQUM1QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO2FBQzNCO1lBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRTtnQkFDNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQzthQUMzQjtZQUVELElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxRQUFRLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7YUFDM0I7U0FDRjtJQUNILENBQUM7SUFFRCxpQkFBaUI7SUFFVix1QkFBdUI7UUFDNUIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxFQUFFO1lBQ3JDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRTtnQkFDL0ksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLG9CQUFvQixJQUFJLElBQUksRUFBRTtvQkFDekUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLG9CQUFvQixDQUFDO2lCQUN0RTthQUNGO1lBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFO2dCQUM3SSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsb0JBQW9CLElBQUksSUFBSSxFQUFFO29CQUN4RSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsb0JBQW9CLENBQUM7aUJBQ3JFO2FBQ0Y7WUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsMEJBQTBCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3pKLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLEVBQUU7b0JBQzlFLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxvQkFBb0IsQ0FBQztpQkFDM0U7YUFDRjtTQUNGO1FBRUQsT0FBTyxJQUFJLEtBQUssRUFBZ0MsQ0FBQztJQUNuRCxDQUFDO0lBRU0sb0JBQW9CO1FBQ3pCLElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksRUFBRTtZQUNyQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUU7Z0JBQy9JLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLElBQUksSUFBSSxFQUFFO29CQUNuRSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztpQkFDckY7Z0JBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixJQUFJLElBQUksRUFBRTtvQkFDdkUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztpQkFDN0Y7Z0JBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLG9CQUFvQixJQUFJLElBQUksRUFBRTtvQkFDekUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztpQkFDakc7YUFDRjtpQkFDSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xKLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLElBQUksSUFBSSxFQUFFO29CQUNsRSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztpQkFDcEY7Z0JBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLGtCQUFrQixJQUFJLElBQUksRUFBRTtvQkFDdEUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztpQkFDNUY7Z0JBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixJQUFJLElBQUksRUFBRTtvQkFDeEUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztpQkFDaEc7YUFDRjtpQkFDSSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsMEJBQTBCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUU7Z0JBQzlKLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxjQUFjLElBQUksSUFBSSxFQUFFO29CQUN4RSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxjQUFjLENBQUMsQ0FBQztpQkFDMUY7Z0JBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDLGtCQUFrQixJQUFJLElBQUksRUFBRTtvQkFDNUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztpQkFDbEc7Z0JBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDLG9CQUFvQixJQUFJLElBQUksRUFBRTtvQkFDOUUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztpQkFDdEc7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVPLDJCQUEyQixDQUFDLE1BQXNDO1FBQ3hFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3RDLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3BGO1lBRUQsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLElBQUksSUFBSSxFQUFFO2dCQUN0RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDMUUsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztvQkFDbEUsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO3dCQUNsQixJQUFJLENBQUMsZ0NBQWdDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO3FCQUMxRDtpQkFDRjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sZ0NBQWdDLENBQUMsS0FBbUMsRUFBRSxNQUFtQztRQUMvRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QyxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztZQUN4QyxJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3pDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO29CQUNqQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNuQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7aUJBQy9CO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxPQUFrQztRQUM5RCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO1lBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN2QyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUMvQixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7b0JBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NEJBQ2hFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUU7Z0NBQ3ZFLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztnQ0FDbEUsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO2dDQUVqRCxJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtvQ0FDM0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0NBQ3ZDLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQzt3Q0FFcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NENBQzVDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0RBQ3BDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0RBQ2YsTUFBTTs2Q0FDUDt5Q0FDRjt3Q0FFRCxJQUFJLENBQUMsT0FBTyxFQUFFOzRDQUNaLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDOzRDQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7eUNBQzVDO3FDQUNGO2lDQUNGOzZCQUNGO3lCQUNGO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxXQUF5QztRQUN6RSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO1lBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMzQyxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO2dCQUN2QyxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7b0JBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NEJBQ2hFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtnQ0FDN0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztnQ0FFcEYsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0NBRTVELElBQUksV0FBVyxJQUFJLElBQUksRUFBRTtvQ0FDdkIsV0FBVyxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztvQ0FDL0QsV0FBVyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO29DQUU3QyxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO29DQUMvRCxXQUFXLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7aUNBQzlDOzZCQUNGO3lCQUNGO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFRCxZQUFZO0lBRUwsUUFBUSxDQUFDLFlBQXNELEVBQUUsY0FBa0M7UUFDeEcsSUFBSSxhQUFhLEdBQUcsSUFBSSxLQUFLLEVBQTRDLENBQUM7UUFDMUUsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVqQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0sYUFBYSxDQUFDLGFBQXlELEVBQUUsY0FBa0MsRUFBRSxZQUE0RDtRQUM5SyxJQUFJLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLEVBQUU7WUFDdEcsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7Z0JBQ3ZELElBQUksRUFBRTtvQkFDSixJQUFJLEVBQUUsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFlBQVk7aUJBQ3JEO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUM5QyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLEVBQUU7b0JBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztpQkFDakU7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQ0k7WUFDSCxJQUFJLE9BQU8sR0FBRyxJQUFJLDJCQUEyQixFQUFFLENBQUM7WUFFaEQsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDO1lBQ3hELE9BQU8sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1lBQ3hDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDN0QsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBRTdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM3QyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFFaEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDO2dCQUNuRCxLQUFLLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQzNDLEtBQUssQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDekMsS0FBSyxDQUFDLHNCQUFzQixHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDdkUsS0FBSyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDekIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRTNCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRTtvQkFDakMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsZUFBZSxJQUFJLElBQUksRUFBRTt3QkFDdEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUN4TTtpQkFDRjthQUNGO1lBRUQsSUFBSSxZQUFZLElBQUksU0FBUyxFQUFFO2dCQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDNUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBRS9CLElBQUksS0FBSyxHQUFHLElBQUksZ0NBQWdDLEVBQUUsQ0FBQztvQkFDbkQsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7b0JBQ3ZCLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUN0QixLQUFLLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7b0JBQ2pELE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUUzQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUU7d0JBQ2pDLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLGVBQWUsSUFBSSxJQUFJLEVBQUU7NEJBQ3RELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzt5QkFDeE07cUJBQ0Y7aUJBQ0Y7YUFDRjtZQUVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUErQixFQUFFLEVBQUU7Z0JBQzNHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFMUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzdDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2lCQUNsQztnQkFDRCxJQUFJLFlBQVksSUFBSSxTQUFTLEVBQUU7b0JBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUM1QyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztxQkFDakM7aUJBQ0Y7WUFDSCxDQUFDLEVBQUUsQ0FBQyxLQUFlLEVBQUUsRUFBRTtnQkFDckIsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7WUFDdkMsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTSxjQUFjLENBQUMsY0FBa0Q7UUFFdEUsY0FBYyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFOUIsSUFBSSxPQUFPLEdBQUcsSUFBSSxxQ0FBcUMsRUFBRSxDQUFDO1FBRTFELE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQztRQUN4RCxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUU3QyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUU7WUFDakMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsZUFBZSxJQUFJLElBQUksRUFBRTtnQkFDdEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsWUFBWSxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3JOO1NBQ0Y7UUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsdUNBQXVDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBMkMsRUFBRSxFQUFFO1lBQ25JLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUUxRCxjQUFjLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNqQyxDQUFDLEVBQUUsQ0FBQyxLQUFlLEVBQUUsRUFBRTtZQUNyQixLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHTSxhQUFhLENBQUMsR0FBVyxFQUFFLFNBQWlCO1FBRWpELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV0QyxJQUFJLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxzQkFBc0IsRUFBRTtZQUM1RCxRQUFRLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsSUFBSSxRQUFRLElBQUksRUFBRSxFQUFFO1lBQ2xCLFFBQVEsR0FBRyxRQUFRLEdBQUcsU0FBUyxDQUFDO1lBRWhDLElBQUksU0FBUyxJQUFJLE1BQU0sRUFBRTtnQkFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDNUI7aUJBQ0k7Z0JBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsMEJBQTBCLEdBQUcsR0FBRyxHQUFHLGFBQWEsR0FBRyxRQUFRLENBQUM7YUFDcEY7U0FDRjthQUNJO1lBQ0gsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRU0sY0FBYyxDQUFDLElBQVk7UUFFaEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsSUFBSSxPQUFPLEVBQUU7WUFDNUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN4QztRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLElBQUksS0FBSyxFQUFFO1lBQzFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDeEM7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxJQUFJLE1BQU0sRUFBRTtZQUMzQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFO1lBQ2pDLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLGVBQWUsSUFBSSxJQUFJLEVBQUU7Z0JBQ3RELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLHNCQUFzQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDN0w7U0FDRjtJQUNILENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxJQUFZLEVBQUUsU0FBaUI7UUFDekQsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFFaEQsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2QixJQUFJLEVBQUUsWUFBWTtTQUNuQixDQUFDLENBQUM7UUFDSCxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVsQixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsSUFBSSxJQUFJLEVBQUU7Z0JBQ3BELFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7YUFDeEU7U0FDRjtRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUU7WUFDNUIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixJQUFJLElBQUksRUFBRTtnQkFDbkQsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQzthQUN2RTtTQUNGO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLFFBQVEsRUFBRTtZQUNoQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsMEJBQTBCLElBQUksSUFBSSxFQUFFO2dCQUN6RCxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO2FBQzdFO1NBQ0Y7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksWUFBWSxFQUFFO1lBQ3BDLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLElBQUksSUFBSSxFQUFFO2dCQUN4QyxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQzthQUNwRDtTQUNGO1FBRUQsSUFBSSxRQUFRLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRTtZQUM1RSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQztZQUV4RCxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQy9HO1FBRUQsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRWhELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxVQUFVO0lBRUgsY0FBYyxDQUFDLGlCQUFvQztRQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ3hCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLEVBQUUsK0JBQStCLENBQUM7WUFFdkYsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLDRCQUE0QixDQUFDLGlCQUFpQixDQUFDLEVBQUU7Z0JBQy9GLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO29CQUMxRCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsRUFBRSxRQUFRLEVBQUU7d0JBQ2pHLElBQUksQ0FBQyxhQUFhLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQW1CLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztxQkFDckg7eUJBQ0k7d0JBQ0gsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7cUJBQzdCO2lCQUNGO2dCQUVELElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtvQkFDbEQsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxFQUFFO3dCQUM1RixJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFtQixFQUFFLGlCQUFpQixDQUFDLENBQUM7cUJBQ2hIO3lCQUNJO3dCQUNILElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO3FCQUM3QjtpQkFDRjtnQkFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQ2xELElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixFQUFFLFFBQVEsRUFBRTt3QkFDM0YsSUFBSSxDQUFDLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBbUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO3FCQUMvRzt5QkFDSTt3QkFDSCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztxQkFDN0I7aUJBQ0Y7Z0JBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7b0JBQzVELElBQUksQ0FBQyxjQUFjLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQW1CLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztpQkFDdkg7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELGFBQWE7SUFFTixRQUFRO1FBQ2IsSUFBSSxXQUFXLEdBQUcsSUFBSSxLQUFLLEVBQWdDLENBQUM7UUFFNUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLGNBQWMsQ0FBQztRQUV0RCxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsSUFBSSxDQUFDLEVBQUU7b0JBQ2hDLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7b0JBRWxDLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTt3QkFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NEJBQ3ZDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFO2dDQUM3QyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzZCQUM5Qjt5QkFDRjtxQkFDRjtpQkFDRjtxQkFDSTtvQkFDSCxNQUFNO2lCQUNQO2FBQ0Y7U0FDRjtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFTSxxQkFBcUI7UUFDMUIsSUFBSSxVQUFVLEdBQW9ELElBQUksQ0FBQztRQUV2RSxJQUNFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLEVBQUUsK0JBQStCLElBQUksSUFBSTtZQUNsRixJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLCtCQUErQixDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3BGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLElBQUksSUFBSTtZQUN6RyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFFOUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqSSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLEVBQUU7b0JBQzFJLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNuSDthQUNGO1NBQ0Y7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO3VHQTFzQ1Usa0JBQWtCOzJHQUFsQixrQkFBa0IsY0FETCxNQUFNOztTQUNuQixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRMZWdhY3lEaWFsb2cgYXMgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBGYWJGb3JtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9mYWItZm9ybS1kaWFsb2cvZmFiLWZvcm0tZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEZhYnJpa2FudGVuQXBpQ2xpZW50LFxyXG4gIEZhYnJpa2FudGVuRmlsdGVyVmlld01vZGVsLFxyXG4gIEZhYnJpa2FudGVuRmlsdGVyT3B0aW9uVmlld01vZGVsLFxyXG4gIEZhYnJpa2FudGVuVmlld01vZGVsLFxyXG4gIEZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwsXHJcbiAgRmFicmlrYW50ZW5Qcm9kdWN0Vmlld01vZGVsLFxyXG4gIEZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbCxcclxuICBGYWJyaWthbnRlbkNhdGVnb3J5TGF5ZXJWaWV3TW9kZWwsXHJcbiAgRmFicmlrYW50ZW5CQ0JQcm9kdWN0VG9lYmVob3JlblZpZXdNb2RlbCxcclxuICBGYWJyaWthbnRlblJlcXVlc3RNb2RlbCxcclxuICBGYWJyaWthbnRlbkNhdGVnb3J5Vmlld01vZGVsLFxyXG4gIFNlbGVjdFByb2R1Y3RSZXF1ZXN0LFxyXG4gIFNlbGVjdEJDQlByb2R1Y3RSZXF1ZXN0LFxyXG4gIFNlbGVjdEZpbHRlck9wdGlvblJlcXVlc3QsXHJcbiAgU2VsZWN0Q2F0ZWdvcnlSZXF1ZXN0LFxyXG4gIFNldFJhbmdlSW5wdXRSZXF1ZXN0LFxyXG4gIFJlc2V0RmlsdGVyUmVxdWVzdCxcclxuICBSZXNldEFsbEZpbHRlcnNSZXF1ZXN0LFxyXG4gIFJlc2V0Q2F0ZWdvcnlMYXllclJlcXVlc3QsXHJcbiAgUmVtb3ZlUHJvZHVjdFNlbGVjdGlvblJlcXVlc3QsXHJcbiAgUmVzZXRBbGxDYXRlZ29yaWVzUmVxdWVzdCxcclxuICBEeW5hbWljRmlsdGVyc1ZpZXdNb2RlbCxcclxuICBEeW5hbWljUmFuZ2VJbnB1dFZpZXdNb2RlbCxcclxuICBEeW5hbWljRGlzcGxheVZhbHVlVmlld01vZGVsLFxyXG4gIEJDQkxpbmtSZXF1ZXN0TW9kZWwsXHJcbiAgQkNCTGlua1Jlc3BvbnNlTW9kZWwsXHJcbiAgRmFicmlrYW50ZW5GaWxlUmVxdWVzdE1vZGVsLFxyXG4gIEZhYnJpa2FudGVuRmlsZVZpZXdNb2RlbCxcclxuICBTZWxlY3RDb2xvdXJSZXF1ZXN0LFxyXG4gIFRyYW5zbGF0aW9uQ2F0ZWdvcnksXHJcbiAgVHJhbnNsYXRpb25TdWJDYXRlZ29yeSxcclxuICBGYWJyaWthbnRlbklucHV0Vmlld01vZGVsLFxyXG4gIFNlbGVjdEZpbHRlckN1c3RvbVJlcXVlc3QsXHJcbiAgRmFicmlrYW50ZW5PcGVuSW5zdGFuY2VSZXF1ZXN0LFxyXG4gIEZhYnJpa2FudGVuU2V0dGluZ3NEb3dubG9hZEl0ZW1WaWV3TW9kZWwsXHJcbiAgRmFicmlrYW50ZW5GaWxlUmVxdWVzdElucHV0TW9kZWwsXHJcbiAgRmFicmlrYW50ZW5QREZUZW1wbGF0ZVZpZXdNb2RlbCxcclxuICBGYWJyaWthbnRlbkN1c3RvbURvd25sb2FkVmlld01vZGVsLFxyXG4gIEZhYnJpa2FudGVuQ3VzdG9tRG93bmxvYWRSZXF1ZXN0TW9kZWwsXHJcbiAgRmFicmlrYW50ZW5DdXN0b21Eb3dubG9hZFJlc3VsdE1vZGVsXHJcbn0gZnJvbSAnLi4vc3dhZ2dlci9Td2FnZ2VyQ2xpZW50JztcclxuaW1wb3J0IHsgQmVzdGVrU2VydmljZSB9IGZyb20gJy4vYmVzdGVrLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0ZVNlcnZpY2UgfSBmcm9tICcuL25hdmlnYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdGF0aXN0aWNzU2VydmljZSB9IGZyb20gJy4vc3RhdGlzdGljcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU1ZHU2VydmljZSB9IGZyb20gJy4vc3ZnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUZXh0dXJlU2VydmljZSB9IGZyb20gJy4vdGV4dHVyZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4vdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXZWJHTFNlcnZpY2UgfSBmcm9tICcuL3dlYmdsLnNlcnZpY2UnO1xyXG5cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gIGludGVyZmFjZSBXaW5kb3cge1xyXG4gICAgY2hyb21lPzogYW55O1xyXG4gIH1cclxufVxyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEZhYnJpa2FudGVuU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBJbml0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgU2VsZWN0ZWRUYWJJbmRleDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHVibGljIEZvcmNlT3BlbkZpbHRlcklkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwdWJsaWMgRmFicmlrYW50ZW5WaWV3TW9kZWw6IEZhYnJpa2FudGVuVmlld01vZGVsO1xyXG5cclxuICBwdWJsaWMgU2V0dGluZ3NMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbDogRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbDtcclxuXHJcbiAgcHVibGljIFNlbGVjdGVkUGhvdG86IG51bWJlciA9IDA7XHJcbiAgcHVibGljIFNlbGVjdGVkVG9lYmVob3JlbjogRmFicmlrYW50ZW5CQ0JQcm9kdWN0VG9lYmVob3JlblZpZXdNb2RlbCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwdWJsaWMgU2VsZWN0ZWRUYWI6IHN0cmluZyA9IFwiSW5mb3JtYXRpZVwiO1xyXG4gIHB1YmxpYyBGb3JjZVVwZGF0ZUJlc3RlazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBGb3JjZVVwZGF0ZTNEOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIEZvcmNlVXBkYXRlMkQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgRm9yY2VVcGRhdGVUZXh0dXJlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIEZhYnJpa2FudGVuQXBpQ2xpZW50OiBGYWJyaWthbnRlbkFwaUNsaWVudCxcclxuICAgIHByaXZhdGUgQmVzdGVrU2VydmljZTogQmVzdGVrU2VydmljZSxcclxuICAgIHByaXZhdGUgVHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgV2ViR0xTZXJ2aWNlOiBXZWJHTFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIFNWR1NlcnZpY2U6IFNWR1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIFRleHR1cmVTZXJ2aWNlOiBUZXh0dXJlU2VydmljZSxcclxuICAgIHByaXZhdGUgTmF2aWdhdGVTZXJ2aWNlOiBOYXZpZ2F0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIFJvdXRlcjogUm91dGVyLFxyXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBTdGF0aXN0aWNzU2VydmljZTogU3RhdGlzdGljc1NlcnZpY2UpIHtcclxuICAgIHRoaXMuTmF2aWdhdGVTZXJ2aWNlLkZhYnJpa2FudGVuU2VydmljZSA9IHRoaXM7XHJcbiAgICB0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TZXJ2aWNlID0gdGhpcztcclxuICAgIHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuU2VydmljZSA9IHRoaXM7XHJcbiAgICB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5TZXJ2aWNlID0gdGhpcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBSZXNldEFsbEZpbHRlcnMoQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XHJcbiAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlc2V0QWxsRmlsdGVyc1JlcXVlc3QoKTtcclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcblxyXG4gICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5yZXNldEFsbEZpbHRlcnMocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5SZWxvYWRNb2RlbChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTZWxlY3RPcHRpb24oZmlsdGVyaWQ6IG51bWJlciwgZmlsdGVyb3B0aW9uaWQ6IG51bWJlciwgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZT86IEFjdGl2YXRlZFJvdXRlKTogdm9pZCB7XHJcbiAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFNlbGVjdEZpbHRlck9wdGlvblJlcXVlc3QoKTtcclxuXHJcbiAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG4gICAgcmVxdWVzdC5maWx0ZXJPcHRpb25JZCA9IGZpbHRlcm9wdGlvbmlkO1xyXG4gICAgcmVxdWVzdC5maWx0ZXJJZCA9IGZpbHRlcmlkO1xyXG5cclxuICAgIGlmICh0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLkFjdGl2ZSkge1xyXG4gICAgICB0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLlNlbGVjdEZpbHRlck9wdGlvbih0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5GaWx0ZXIsIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuTmFtZSwgZmlsdGVyaWQpICsgXCI6IFwiICsgdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuRmlsdGVyT3B0aW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5Lk5hbWUsIGZpbHRlcm9wdGlvbmlkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5zZWxlY3RGaWx0ZXJPcHRpb24ocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5SZWxvYWRNb2RlbChDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcblxyXG4gICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2VsZWN0Q29sb3VyKGZpbHRlcmlkOiBudW1iZXIsIGNvbG91cjogc3RyaW5nLCBjb2xvdXJ2YWx1ZTogc3RyaW5nLCBDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgU2VsZWN0Q29sb3VyUmVxdWVzdCgpO1xyXG5cclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICByZXF1ZXN0LmNvbG91ck5hbWUgPSBjb2xvdXI7XHJcbiAgICByZXF1ZXN0LmNvbG91clZhbHVlID0gY29sb3VydmFsdWU7XHJcbiAgICByZXF1ZXN0LmZpbHRlcklkID0gZmlsdGVyaWQ7XHJcblxyXG4gICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5zZWxlY3RDb2xvdXIocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5SZWxvYWRNb2RlbChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTZWxlY3RGaWx0ZXJDdXN0b20oZmlsdGVyaWQ6IG51bWJlciwgY3VzdG9tdmFsdWU6IHN0cmluZywgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XHJcbiAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFNlbGVjdEZpbHRlckN1c3RvbVJlcXVlc3QoKTtcclxuXHJcbiAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG4gICAgcmVxdWVzdC5jdXN0b21WYWx1ZSA9IGN1c3RvbXZhbHVlO1xyXG4gICAgcmVxdWVzdC5maWx0ZXJJZCA9IGZpbHRlcmlkO1xyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuc2VsZWN0RmlsdGVyQ3VzdG9tKHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuUmVsb2FkTW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcblxyXG4gICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2V0UmFuZ2VJbnB1dChyYW5nZWlucHV0aWQ6IG51bWJlciwgdmFsdWU6IG51bWJlciwgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZT86IEFjdGl2YXRlZFJvdXRlKTogdm9pZCB7XHJcbiAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFNldFJhbmdlSW5wdXRSZXF1ZXN0KCk7XHJcblxyXG4gICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuICAgIHJlcXVlc3QucmFuZ2VJbnB1dElkID0gcmFuZ2VpbnB1dGlkO1xyXG4gICAgcmVxdWVzdC52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgIGlmICh0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLkFjdGl2ZSkge1xyXG4gICAgICB0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLlNlbGVjdFJhbmdlVmFsdWUodGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuUmFuZ2VJbnB1dCwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCByYW5nZWlucHV0aWQpICsgXCI6IFwiICsgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuc2V0UmFuZ2VJbnB1dChyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLlJlbG9hZE1vZGVsKENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBGb3JjZVNlbGVjdENhdGVnb3J5KGNhdGVnb3J5aWQ6IG51bWJlciwgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXNldEFsbENhdGVnb3JpZXNSZXF1ZXN0KCk7XHJcblxyXG4gICAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG5cclxuICAgICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5yZXNldEFsbENhdGVnb3JpZXMocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB2YXIgcmVxdWVzdGNhdCA9IG5ldyBTZWxlY3RDYXRlZ29yeVJlcXVlc3QoKTtcclxuXHJcbiAgICAgICAgcmVxdWVzdGNhdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuICAgICAgICByZXF1ZXN0Y2F0LmNhdGVnb3J5SWQgPSBjYXRlZ29yeWlkO1xyXG4gICAgICAgIHJlcXVlc3RjYXQuY2F0ZWdvcnlMYXllciA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuc2VsZWN0Q2F0ZWdvcnkocmVxdWVzdGNhdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuUmVsb2FkTW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDAwKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvci5qc29uKCkpO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA0MDApXHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvci5qc29uKCkpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBTZWxlY3RDYXRlZ29yeShjYXRlZ29yeTogRmFicmlrYW50ZW5DYXRlZ29yeVZpZXdNb2RlbCwgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZT86IEFjdGl2YXRlZFJvdXRlKTogdm9pZCB7XHJcbiAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFNlbGVjdENhdGVnb3J5UmVxdWVzdCgpO1xyXG5cclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICByZXF1ZXN0LmNhdGVnb3J5SWQgPSBjYXRlZ29yeS5pZDtcclxuICAgIHJlcXVlc3QuY2F0ZWdvcnlMYXllciA9IGNhdGVnb3J5LmxheWVyO1xyXG5cclxuICAgIGlmICh0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLkFjdGl2ZSkge1xyXG4gICAgICB0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLlNlbGVjdENhdGVnb3J5KHRoaXMuVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkNhdGVnb3J5LCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5Lk5hbWUsIGNhdGVnb3J5LmlkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5zZWxlY3RDYXRlZ29yeShyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLlJlbG9hZE1vZGVsKENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTZWxlY3RQcm9kdWN0KHByb2R1Y3Q6IEZhYnJpa2FudGVuUHJvZHVjdFZpZXdNb2RlbCwgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZT86IEFjdGl2YXRlZFJvdXRlKTogdm9pZCB7XHJcbiAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFNlbGVjdFByb2R1Y3RSZXF1ZXN0KCk7XHJcblxyXG4gICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuICAgIHJlcXVlc3QucHJvZHVjdElkID0gcHJvZHVjdC5pZDtcclxuXHJcbiAgICBpZiAodGhpcy5TdGF0aXN0aWNzU2VydmljZS5BY3RpdmUpIHtcclxuICAgICAgdGhpcy5TdGF0aXN0aWNzU2VydmljZS5TZWxlY3RQcm9kdWN0KHRoaXMuVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LlByb2R1Y3QsIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuTmFtZSwgcHJvZHVjdC5pZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuc2VsZWN0UHJvZHVjdChyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVG9lYmVob3JlbiA9IG51bGw7XHJcbiAgICAgIHRoaXMuUmVzZXRUYWJzKCk7XHJcblxyXG4gICAgICB0aGlzLlJlbG9hZE1vZGVsKENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTZWxlY3RCQ0JQcm9kdWN0KGJjYnByb2R1Y3Q6IEZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbCwgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XHJcbiAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFNlbGVjdEJDQlByb2R1Y3RSZXF1ZXN0KCk7XHJcblxyXG4gICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuICAgIHJlcXVlc3QuYmNiUHJvZHVjdElkID0gYmNicHJvZHVjdC5pZDtcclxuXHJcbiAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LnNlbGVjdEJDQlByb2R1Y3QocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5SZWxvYWRNb2RlbChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBSZXNldFNlbGVjdGlvbkZpbHRlcihmaWx0ZXI6IEZhYnJpa2FudGVuRmlsdGVyVmlld01vZGVsLCBDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIEFjdGl2YXRlZFJvdXRlPzogQWN0aXZhdGVkUm91dGUpOiB2b2lkIHtcclxuICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVzZXRGaWx0ZXJSZXF1ZXN0KCk7XHJcbiAgICByZXF1ZXN0LmZpbHRlcklkID0gZmlsdGVyLmlkO1xyXG4gICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuXHJcbiAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LnJlc2V0RmlsdGVyU2VsZWN0aW9uKHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuUmVsb2FkTW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWYsIEFjdGl2YXRlZFJvdXRlKTtcclxuICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFJlc2V0QWxsQ2F0ZWdvcmllcyhDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlc2V0QWxsQ2F0ZWdvcmllc1JlcXVlc3QoKTtcclxuXHJcbiAgICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcblxyXG4gICAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LnJlc2V0QWxsQ2F0ZWdvcmllcyhyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuUmVsb2FkTW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA0MDApXHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvci5qc29uKCkpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBSZXNldFNlbGVjdGlvbkNhdGVnb3J5KGNhdGVnb3J5bGF5ZXI6IEZhYnJpa2FudGVuQ2F0ZWdvcnlWaWV3TW9kZWwsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXNldENhdGVnb3J5TGF5ZXJSZXF1ZXN0KCk7XHJcbiAgICByZXF1ZXN0LmNhdGVnb3J5TGF5ZXIgPSBjYXRlZ29yeWxheWVyLmxheWVyO1xyXG4gICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuXHJcbiAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LnJlc2V0Q2F0ZWdvcnlMYXllclNlbGVjdGlvbihyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLlJlc2V0QWxsRmlsdGVycyhDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBSZW1vdmVQcm9kdWN0U2VsZWN0aW9uKENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVtb3ZlUHJvZHVjdFNlbGVjdGlvblJlcXVlc3QoKTtcclxuXHJcbiAgICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcblxyXG4gICAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LnJlbW92ZVByb2R1Y3RTZWxlY3Rpb24ocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLlNlbGVjdGVkVG9lYmVob3JlbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5SZXNldFRhYnMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5SZWxvYWRNb2RlbChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDQwMClcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yLmpzb24oKSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIFRhYlNlbGVjdGlvbkNoYW5nZWQodGFiOiBzdHJpbmcsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gICAgdGhpcy5TZWxlY3RlZFRhYiA9IHRhYjtcclxuXHJcbiAgICB0aGlzLlRyaWdnZXJSZWxvYWRzKENoYW5nZURldGVjdG9yUmVmKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBHZXRGaXJzdE9wZW5DYXRlZ29yeUxheWVyKCk6IEZhYnJpa2FudGVuQ2F0ZWdvcnlMYXllclZpZXdNb2RlbCB8IG51bGwge1xyXG4gICAgdmFyIGFycmF5bGF5ZXJzID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbD8uY2F0ZWdvcnlMYXllcnM7XHJcblxyXG4gICAgaWYgKGFycmF5bGF5ZXJzICE9IG51bGwpIHtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheWxheWVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChhcnJheWxheWVyc1tpXS5zZWxlY3RlZE9wdGlvbiA9PSAwKSB7XHJcbiAgICAgICAgICByZXR1cm4gYXJyYXlsYXllcnNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd0NhdGVnb3JpZXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5HZXRGaXJzdE9wZW5DYXRlZ29yeUxheWVyKCkgIT0gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93UmVxdWlyZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHMgIT0gbnVsbCkge1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzW2ldLmZpbHRlcj8uaGlkZGVuICE9IHRydWUgJiZcclxuICAgICAgICAgIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzW2ldLnJlcXVpcmVkICYmXHJcbiAgICAgICAgICAhdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHNbaV0uZmlsbGVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd1RleHR1cmUoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3Q/LnRleHR1cmVCYXNlVmlld01vZGVsICE9IG51bGwpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dUb2ViZWhvcmVuKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbD8uZW5hYmxlVG9lYmVob3JlbiA9PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93VmFyaWFudHMoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbCAhPSBudWxsICYmIHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgIGlmICghdGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLmFsd2F5c1Nob3dWYXJpYW50KSB7XHJcbiAgICAgICAgdmFyIGJjYnByb2R1Y3RzID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3Q/LmZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbHM7XHJcblxyXG4gICAgICAgIGlmIChiY2Jwcm9kdWN0cyAhPSBudWxsICYmIGJjYnByb2R1Y3RzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93QWN0aW9uTWVudSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3QgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuU2hvd1ZhcmlhbnRzKCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiM0RcIikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIjJEXCIpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCJCZXN0ZWtcIikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIlRleHR1cmVcIikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIlRvZWJlaG9yZW5cIikge1xyXG4gICAgICBpZiAodGhpcy5IYXNUb2ViZWhvcmVuKCkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBIYXNUb2ViZWhvcmVuKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWw/LnNlbGVjdGVkUHJvZHVjdD8uZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVscyAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3Q/LmZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5mYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWxzWzBdLmJjYlByb2R1Y3RUb2ViZWhvcmVuICE9IG51bGwpIHtcclxuICAgICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5mYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWxzWzBdLmJjYlByb2R1Y3RUb2ViZWhvcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIE9wZW5CQ0JMaW5rKCk6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICB2YXIgd3VpZDogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIjNEXCIpIHtcclxuICAgICAgd3VpZCA9IHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwud3VpZCArIFwiXCJcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIyRFwiKSB7XHJcbiAgICAgIHd1aWQgPSB0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwud3VpZCArIFwiXCJcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCJCZXN0ZWtcIikge1xyXG4gICAgICB3dWlkID0gdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLnd1aWQgKyBcIlwiXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiVG9lYmVob3JlblwiKSB7XHJcbiAgICAgIHd1aWQgPSB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwud3VpZCArIFwiXCJcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCJUZXh0dXJlXCIpIHtcclxuICAgICAgd3VpZCA9IHRoaXMuVGV4dHVyZVNlcnZpY2UuRmFicmlrYW50ZW5UZXh0dXJlVmlld01vZGVsLnd1aWQgKyBcIlwiXHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgQkNCTGlua1JlcXVlc3RNb2RlbCgpO1xyXG4gICAgcmVxdWVzdC53dWlkID0gd3VpZDtcclxuXHJcbiAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LmdldEJDQkxpbmsocmVxdWVzdCkuc3Vic2NyaWJlKChtb2RlbDogQkNCTGlua1Jlc3BvbnNlTW9kZWwpID0+IHtcclxuICAgICAgd2luZG93Lm9wZW4obW9kZWwudXJsLCAnX2JsYW5rJyk7XHJcblxyXG4gICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBSZWxvYWRNb2RlbChDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIEFjdGl2YXRlZFJvdXRlPzogQWN0aXZhdGVkUm91dGUsIENhbGxCYWNrPzogYW55KSB7XHJcbiAgICB0aGlzLkluaXQgPSBmYWxzZTtcclxuICAgIHRoaXMuTG9hZEZhYnJpa2FudGVuVmlld01vZGVsKENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSwgQ2FsbEJhY2spO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIExvYWRGYWJyaWthbnRlblZpZXdNb2RlbChDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIEFjdGl2YXRlZFJvdXRlPzogQWN0aXZhdGVkUm91dGUsIENhbGxCYWNrPzogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuSW5pdCkge1xyXG4gICAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuU2V0dGluZ3NMb2FkZWQpIHtcclxuICAgICAgICB0aGlzLkxvYWRGYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsKENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuSW5pdCkge1xyXG4gICAgICAgICAgdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkxvYWRUcmFuc2xhdGlvbnMoQ2hhbmdlRGV0ZWN0b3JSZWYsIHRoaXMsIEFjdGl2YXRlZFJvdXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLkluaXQgPSB0cnVlO1xyXG4gICAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgRmFicmlrYW50ZW5SZXF1ZXN0TW9kZWwoKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmVxdWVzdC5zZXNzaW9uSWQgPSBcIlwiO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuZ2V0RmFicmlrYW50ZW5WaWV3TW9kZWwocmVxdWVzdCkuc3Vic2NyaWJlKChtb2RlbDogRmFicmlrYW50ZW5WaWV3TW9kZWwpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3Q/LnBkZlRlbXBsYXRlcyAhPSBudWxsICYmIG1vZGVsLnNlbGVjdGVkUHJvZHVjdD8ucGRmVGVtcGxhdGVzICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICB2YXIgYXJyYXkxID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QucGRmVGVtcGxhdGVzO1xyXG4gICAgICAgICAgICAgIHZhciBhcnJheTIgPSBtb2RlbC5zZWxlY3RlZFByb2R1Y3QucGRmVGVtcGxhdGVzO1xyXG5cclxuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5MS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhcnJheTIubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFycmF5MVtpXS50ZW1wbGF0ZUlkID09IGFycmF5MltqXS50ZW1wbGF0ZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXkyW2pdLmNoZWNrZWQgPSBhcnJheTFbaV0uY2hlY2tlZDtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheTJbal0ubG9hZGluZyA9IGFycmF5MVtpXS5sb2FkaW5nO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIm5ldyBGYWJyaWthbnRlblZpZXdNb2RlbFwiKTtcclxuICAgICAgICAgICAgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbCA9IG1vZGVsO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuRm9yY2VPcGVuRmlsdGVySWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIHZhciBpbnB1dHMgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0cztcclxuICAgICAgICAgICAgICBpZiAoaW5wdXRzICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBpbnB1dHNbaV0uZmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIuaWQgPT0gdGhpcy5Gb3JjZU9wZW5GaWx0ZXJJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm9wZW5lZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImZvcmNlZCBvcGVuIG1lbnU6IFwiICsgZmlsdGVyLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5Gb3JjZU9wZW5GaWx0ZXJJZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuU2VsZWN0ZWRQaG90byA9IDA7XHJcblxyXG4gICAgICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5UcmlnZ2VyUmVsb2FkcyhDaGFuZ2VEZXRlY3RvclJlZik7XHJcblxyXG4gICAgICAgICAgICBpZiAoQWN0aXZhdGVkUm91dGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLlByb2Nlc3NQYXJhbWV0ZXJzKENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuTmF2aWdhdGVTZXJ2aWNlLlJlZnJlc2hQYWdlKEFjdGl2YXRlZFJvdXRlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5OYXZpZ2F0ZVNlcnZpY2UuUmVmcmVzaFBhZ2UoQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKENhbGxCYWNrICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICBDYWxsQmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDAwKVxyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yLmpzb24oKSk7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBMb2FkRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbChDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIEFjdGl2YXRlZFJvdXRlPzogQWN0aXZhdGVkUm91dGUpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5TZXR0aW5nc0xvYWRlZCkge1xyXG4gICAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LmdldEZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwoKS5zdWJzY3JpYmUoKG1vZGVsOiBGYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsKSA9PiB7XHJcbiAgICAgICAgdGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsID0gbW9kZWw7XHJcblxyXG4gICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuU2V0dGluZ3NMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5jdXN0b21SZWRpcmVjdCAhPSBudWxsICYmIHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5jdXN0b21SZWRpcmVjdCAhPSBcIlwiKSB7XHJcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5jdXN0b21SZWRpcmVjdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLkxvYWRGYWJyaWthbnRlblZpZXdNb2RlbChDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDAwKVxyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IuanNvbigpKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUHJvY2Vzc1BhcmFtZXRlcnMoQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUpOiBib29sZWFuIHtcclxuICAgIGlmIChBY3RpdmF0ZWRSb3V0ZSAhPSBudWxsKSB7XHJcbiAgICAgIHZhciBwcm9kdWN0bmFtZSA9IEFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcInByb2R1Y3RcIik7XHJcblxyXG4gICAgICBpZiAocHJvZHVjdG5hbWUgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnByb2R1Y3RzICE9IG51bGwpIHtcclxuICAgICAgICAgIHZhciBwcm9kdWN0OiBGYWJyaWthbnRlblByb2R1Y3RWaWV3TW9kZWwgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwucHJvZHVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwucHJvZHVjdHNbaV0udXJsTmFtZSA9PSBwcm9kdWN0bmFtZSkge1xyXG4gICAgICAgICAgICAgIHByb2R1Y3QgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnByb2R1Y3RzW2ldO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHByb2R1Y3QgIT0gbnVsbCAmJiB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdD8uaWQgIT0gcHJvZHVjdC5pZCkge1xyXG4gICAgICAgICAgICB0aGlzLlNlbGVjdFByb2R1Y3QocHJvZHVjdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEFjdGl2YXRlZFJvdXRlKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGNhdGVnb3J5bmFtZSA9IEFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcImNhdGVnb3J5XCIpO1xyXG5cclxuICAgICAgaWYgKGNhdGVnb3J5bmFtZSAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuY2F0ZWdvcnlMYXllcnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdmFyIGNhdGVnb3J5OiBGYWJyaWthbnRlbkNhdGVnb3J5Vmlld01vZGVsIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNhdGVnb3J5TGF5ZXJzLmxlbmd0aDsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgbGF5ZXIgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNhdGVnb3J5TGF5ZXJzW2ldLmNhdGVnb3JpZXM7XHJcblxyXG4gICAgICAgICAgICBpZiAobGF5ZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGF5ZXIubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICgobGF5ZXJbal0udXJsTmFtZSA9PSBjYXRlZ29yeW5hbWUgfHwgbGF5ZXJbal0uZGVlcGxpbmtUYWcgPT0gY2F0ZWdvcnluYW1lKSAmJiB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNhdGVnb3J5TGF5ZXJzW2ldLnNlbGVjdGVkT3B0aW9uICE9IGxheWVyW2pdLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNhdGVnb3J5ID0gbGF5ZXJbal07XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChjYXRlZ29yeSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuU2VsZWN0Q2F0ZWdvcnkoY2F0ZWdvcnksIENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLlByb2Nlc3NQYXJhbWV0ZXJGaWx0ZXIoXCJmaWx0ZXIxXCIsIEFjdGl2YXRlZFJvdXRlLCBDaGFuZ2VEZXRlY3RvclJlZikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLlByb2Nlc3NQYXJhbWV0ZXJGaWx0ZXIoXCJmaWx0ZXIyXCIsIEFjdGl2YXRlZFJvdXRlLCBDaGFuZ2VEZXRlY3RvclJlZikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLlByb2Nlc3NQYXJhbWV0ZXJGaWx0ZXIoXCJmaWx0ZXIzXCIsIEFjdGl2YXRlZFJvdXRlLCBDaGFuZ2VEZXRlY3RvclJlZikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLlByb2Nlc3NQYXJhbWV0ZXJGaWx0ZXIoXCJmaWx0ZXI0XCIsIEFjdGl2YXRlZFJvdXRlLCBDaGFuZ2VEZXRlY3RvclJlZikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgUHJvY2Vzc1BhcmFtZXRlckZpbHRlcihuYW1lOiBzdHJpbmcsIEFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKTogYm9vbGVhbiB7XHJcbiAgICB2YXIgb3B0aW9ubmFtZSA9IEFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChuYW1lKTtcclxuXHJcbiAgICBpZiAob3B0aW9ubmFtZSAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0cyAhPSBudWxsKSB7XHJcbiAgICAgICAgdmFyIG9wdGlvbjogRmFicmlrYW50ZW5GaWx0ZXJPcHRpb25WaWV3TW9kZWwgfCBudWxsID0gbnVsbDtcclxuICAgICAgICB2YXIgZmlsdGVyOiBGYWJyaWthbnRlbkZpbHRlclZpZXdNb2RlbCB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICB2YXIgZmlsdGVydGVtcCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzW2ldLmZpbHRlcjtcclxuICAgICAgICAgIGlmIChmaWx0ZXJ0ZW1wICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSBmaWx0ZXJ0ZW1wLm9wdGlvbnM7XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvcHRpb25zLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uc1tqXS51cmxOYW1lID09IG9wdGlvbm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uc1tqXTtcclxuICAgICAgICAgICAgICAgICAgZmlsdGVyID0gZmlsdGVydGVtcDtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3B0aW9uICE9IG51bGwgJiYgZmlsdGVyICE9IG51bGwgJiYgZmlsdGVyLnNlbGVjdGVkT3B0aW9uICE9IG9wdGlvbi5pZCkge1xyXG4gICAgICAgICAgdGhpcy5TZWxlY3RPcHRpb24oZmlsdGVyLmlkLCBvcHRpb24uaWQsIENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIFJlc2V0VGFicygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwuc3RhcnRUYWIgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVGFiID0gdGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLnN0YXJ0VGFiO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLmhpZGVJbmZvcm1hdGlvblRhYikge1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVGFiID0gXCIzRFwiO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRUYWIgPSBcIkluZm9ybWF0aWVcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLmhpZGVJbmZvcm1hdGlvblRhYikge1xyXG4gICAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIjNEXCIpIHtcclxuICAgICAgICB0aGlzLlNlbGVjdGVkVGFiSW5kZXggPSAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIjJEXCIpIHtcclxuICAgICAgICB0aGlzLlNlbGVjdGVkVGFiSW5kZXggPSAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIkJlc3Rla1wiKSB7XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZFRhYkluZGV4ID0gMjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiSW5mb3JtYXRpZVwiKSB7XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZFRhYkluZGV4ID0gMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIzRFwiKSB7XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZFRhYkluZGV4ID0gMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIyRFwiKSB7XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZFRhYkluZGV4ID0gMjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCJCZXN0ZWtcIikge1xyXG4gICAgICAgIHRoaXMuU2VsZWN0ZWRUYWJJbmRleCA9IDM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIER5bmFtaWMgbW9kZWxzXHJcblxyXG4gIHB1YmxpYyBHZXREeW5hbWljRGlzcGxheVZhbHVlcygpOiBEeW5hbWljRGlzcGxheVZhbHVlVmlld01vZGVsW10ge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5XZWJHTFNlcnZpY2UuRmFicmlrYW50ZW4zRFZpZXdNb2RlbCAhPSBudWxsICYmIHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwuY2hlY2tzdW0gPT0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5jaGVja3N1bSkge1xyXG4gICAgICAgIGlmICh0aGlzLldlYkdMU2VydmljZS5GYWJyaWthbnRlbjNEVmlld01vZGVsLmR5bmFtaWNEaXNwbGF5VmFsdWVzICE9IG51bGwpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLldlYkdMU2VydmljZS5GYWJyaWthbnRlbjNEVmlld01vZGVsLmR5bmFtaWNEaXNwbGF5VmFsdWVzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbCAhPSBudWxsICYmIHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbC5jaGVja3N1bSA9PSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNoZWNrc3VtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbC5keW5hbWljRGlzcGxheVZhbHVlcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5TVkdTZXJ2aWNlLkZhYnJpa2FudGVuU1ZHVmlld01vZGVsLmR5bmFtaWNEaXNwbGF5VmFsdWVzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbCAhPSBudWxsICYmIHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbC5jaGVja3N1bSA9PSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNoZWNrc3VtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbC5keW5hbWljRGlzcGxheVZhbHVlcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmR5bmFtaWNEaXNwbGF5VmFsdWVzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXcgQXJyYXk8RHluYW1pY0Rpc3BsYXlWYWx1ZVZpZXdNb2RlbD4oKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBQcm9jZXNzRHluYW1pY01vZGVscygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsICE9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwgIT0gbnVsbCAmJiB0aGlzLldlYkdMU2VydmljZS5GYWJyaWthbnRlbjNEVmlld01vZGVsLmNoZWNrc3VtID09IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuY2hlY2tzdW0pIHtcclxuICAgICAgICBpZiAodGhpcy5XZWJHTFNlcnZpY2UuRmFicmlrYW50ZW4zRFZpZXdNb2RlbC5keW5hbWljRmlsdGVycyAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLlByb2Nlc3NEeW5hbWljRmlsdGVycyh0aGlzLldlYkdMU2VydmljZS5GYWJyaWthbnRlbjNEVmlld01vZGVsLmR5bmFtaWNGaWx0ZXJzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLldlYkdMU2VydmljZS5GYWJyaWthbnRlbjNEVmlld01vZGVsLmR5bmFtaWNSYW5nZUlucHV0cyAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLlByb2Nlc3NEeW5hbWljUmFuZ2VJbnB1dHModGhpcy5XZWJHTFNlcnZpY2UuRmFicmlrYW50ZW4zRFZpZXdNb2RlbC5keW5hbWljUmFuZ2VJbnB1dHMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY0Rpc3BsYXlWYWx1ZXModGhpcy5XZWJHTFNlcnZpY2UuRmFicmlrYW50ZW4zRFZpZXdNb2RlbC5keW5hbWljRGlzcGxheVZhbHVlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbCAhPSBudWxsICYmIHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbC5jaGVja3N1bSA9PSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNoZWNrc3VtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbC5keW5hbWljRmlsdGVycyAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLlByb2Nlc3NEeW5hbWljRmlsdGVycyh0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwuZHluYW1pY0ZpbHRlcnMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbC5keW5hbWljUmFuZ2VJbnB1dHMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY1JhbmdlSW5wdXRzKHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbC5keW5hbWljUmFuZ2VJbnB1dHMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbC5keW5hbWljRGlzcGxheVZhbHVlcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLlByb2Nlc3NEeW5hbWljRGlzcGxheVZhbHVlcyh0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwgIT0gbnVsbCAmJiB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwuY2hlY2tzdW0gPT0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5jaGVja3N1bSkge1xyXG4gICAgICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwuZHluYW1pY0ZpbHRlcnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY0ZpbHRlcnModGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmR5bmFtaWNGaWx0ZXJzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwuZHluYW1pY1JhbmdlSW5wdXRzICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNSYW5nZUlucHV0cyh0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwuZHluYW1pY1JhbmdlSW5wdXRzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY0Rpc3BsYXlWYWx1ZXModGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmR5bmFtaWNEaXNwbGF5VmFsdWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgUHJvY2Vzc0R5bmFtaWNEaXNwbGF5VmFsdWVzKHZhbHVlczogRHluYW1pY0Rpc3BsYXlWYWx1ZVZpZXdNb2RlbFtdKTogdm9pZCB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHMgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNEaXNwbGF5VmFsdWVJbnB1dHModmFsdWVzW2ldLCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0cyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmZpbHRlckNhdGVnb3JpZXMgIT0gbnVsbCkge1xyXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5maWx0ZXJDYXRlZ29yaWVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICB2YXIgaW5wdXRzID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5maWx0ZXJDYXRlZ29yaWVzW2pdLmlucHV0cztcclxuICAgICAgICAgIGlmIChpbnB1dHMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLlByb2Nlc3NEeW5hbWljRGlzcGxheVZhbHVlSW5wdXRzKHZhbHVlc1tpXSwgaW5wdXRzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgUHJvY2Vzc0R5bmFtaWNEaXNwbGF5VmFsdWVJbnB1dHModmFsdWU6IER5bmFtaWNEaXNwbGF5VmFsdWVWaWV3TW9kZWwsIGlucHV0czogRmFicmlrYW50ZW5JbnB1dFZpZXdNb2RlbFtdKTogdm9pZCB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB2YXIgb3B0aW9ucyA9IGlucHV0c1tpXS5maWx0ZXI/Lm9wdGlvbnM7XHJcbiAgICAgIGlmIChvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnNbMF0ubmFtZSA9PSB2YWx1ZS5uYW1lKSB7XHJcbiAgICAgICAgICBvcHRpb25zWzBdLmlkID0gLTI7XHJcbiAgICAgICAgICBvcHRpb25zWzBdLm5hbWUgPSB2YWx1ZS52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgUHJvY2Vzc0R5bmFtaWNGaWx0ZXJzKGZpbHRlcnM6IER5bmFtaWNGaWx0ZXJzVmlld01vZGVsW10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0cyAhPSBudWxsKSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsdGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBhcnJheSA9IGZpbHRlcnNbaV0uZmlsdGVycztcclxuICAgICAgICBpZiAoYXJyYXkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgZm9yICh2YXIgcCA9IDA7IHAgPCBhcnJheS5sZW5ndGg7IHArKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGFycmF5W3BdLmZpbHRlcklkID09IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzW2pdLmZpbHRlcj8uaWQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBvcHRpb25zID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHNbal0uZmlsdGVyPy5vcHRpb25zO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFsbG93ZWRhcnJheSA9IGFycmF5W3BdLmZpbHRlck9wdGlvbnNBbGxvd2VkO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zICE9IG51bGwgJiYgYWxsb3dlZGFycmF5ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBvcHRpb25zLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFsbG93ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBhbGxvd2VkYXJyYXkubGVuZ3RoOyBsKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxvd2VkYXJyYXlbbF0gPT0gb3B0aW9uc1trXS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWFsbG93ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNba10uaGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGlzYWJsZTogXCIgKyBvcHRpb25zW2tdLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBQcm9jZXNzRHluYW1pY1JhbmdlSW5wdXRzKHJhbmdlaW5wdXRzOiBEeW5hbWljUmFuZ2VJbnB1dFZpZXdNb2RlbFtdKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHMgIT0gbnVsbCkge1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGFycmF5ID0gcmFuZ2VpbnB1dHNbaV0ucmFuZ2VJbnB1dHM7XHJcbiAgICAgICAgaWYgKGFycmF5ICE9IG51bGwpIHtcclxuICAgICAgICAgIGZvciAodmFyIHAgPSAwOyBwIDwgYXJyYXkubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIGlmIChhcnJheVtwXSA9PSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0c1tqXS5yYW5nZT8uaWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdiZXJlaWsgcmFuZ2VpbnB1dDonICsgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHNbal0ucmFuZ2U/Lm5hbWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciByYW5nZW9iamVjdCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzW2pdLnJhbmdlO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChyYW5nZW9iamVjdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJhbmdlb2JqZWN0LmluY2x1c2llZk1pbmltdW0gPSByYW5nZWlucHV0c1tpXS5pbmNsdXNpZWZNaW5pbXVtO1xyXG4gICAgICAgICAgICAgICAgICByYW5nZW9iamVjdC5taW5pbXVtID0gcmFuZ2VpbnB1dHNbaV0ubWluaW11bTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHJhbmdlb2JqZWN0LmluY2x1c2llZk1heGltdW0gPSByYW5nZWlucHV0c1tpXS5pbmNsdXNpZWZNYXhpbXVtO1xyXG4gICAgICAgICAgICAgICAgICByYW5nZW9iamVjdC5tYXhpbXVtID0gcmFuZ2VpbnB1dHNbaV0ubWF4aW11bTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIERvd25sb2Fkc1xyXG5cclxuICBwdWJsaWMgRG93bmxvYWQoZG93bmxvYWRpdGVtOiBGYWJyaWthbnRlblNldHRpbmdzRG93bmxvYWRJdGVtVmlld01vZGVsLCBjdXN0b21iY2JlYm9pZDogbnVtYmVyIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICB2YXIgZG93bmxvYWRpdGVtcyA9IG5ldyBBcnJheTxGYWJyaWthbnRlblNldHRpbmdzRG93bmxvYWRJdGVtVmlld01vZGVsPigpO1xyXG4gICAgZG93bmxvYWRpdGVtcy5wdXNoKGRvd25sb2FkaXRlbSk7XHJcblxyXG4gICAgdGhpcy5Eb3dubG9hZEl0ZW1zKGRvd25sb2FkaXRlbXMsIGN1c3RvbWJjYmVib2lkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBEb3dubG9hZEl0ZW1zKGRvd25sb2FkaXRlbXM6IEZhYnJpa2FudGVuU2V0dGluZ3NEb3dubG9hZEl0ZW1WaWV3TW9kZWxbXSwgY3VzdG9tYmNiZWJvaWQ6IG51bWJlciB8IHVuZGVmaW5lZCwgcGRmdGVtcGxhdGVzPzogRmFicmlrYW50ZW5QREZUZW1wbGF0ZVZpZXdNb2RlbFtdIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLmRvd25sb2FkRm9ybUVuYWJsZWQgJiYgIXRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaGFzRmlsbGVkRm9ybXMpIHtcclxuICAgICAgdmFyIGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRmFiRm9ybURpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGZvcm06IHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5kb3dubG9hZEZvcm1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5oYXNGaWxsZWRGb3Jtcykge1xyXG4gICAgICAgICAgdGhpcy5Eb3dubG9hZEl0ZW1zKGRvd25sb2FkaXRlbXMsIGN1c3RvbWJjYmVib2lkLCBwZGZ0ZW1wbGF0ZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgRmFicmlrYW50ZW5GaWxlUmVxdWVzdE1vZGVsKCk7XHJcblxyXG4gICAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG4gICAgICByZXF1ZXN0LmN1c3RvbUJDQkVCT0lkID0gY3VzdG9tYmNiZWJvaWQ7XHJcbiAgICAgIHJlcXVlc3QubGFuZ3VhZ2VJZCA9IHRoaXMuVHJhbnNsYXRlU2VydmljZS5BY3RpdmVMYW5ndWFnZS5pZDtcclxuICAgICAgcmVxdWVzdC5pbnB1dHMgPSBuZXcgQXJyYXkoKTtcclxuXHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG93bmxvYWRpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGRvd25sb2FkaXRlbXNbaV0ubG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIHZhciBpbnB1dCA9IG5ldyBGYWJyaWthbnRlbkZpbGVSZXF1ZXN0SW5wdXRNb2RlbCgpO1xyXG4gICAgICAgIGlucHV0LmZpbGVUeXBlID0gZG93bmxvYWRpdGVtc1tpXS5maWxlVHlwZTtcclxuICAgICAgICBpbnB1dC5tb2RlbDNEID0gZG93bmxvYWRpdGVtc1tpXS5tb2RlbDNEO1xyXG4gICAgICAgIGlucHV0LnRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkgPSBkb3dubG9hZGl0ZW1zW2ldLnRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnk7XHJcbiAgICAgICAgaW5wdXQucGRmVGVtcGxhdGVJZCA9IC0xO1xyXG4gICAgICAgIHJlcXVlc3QuaW5wdXRzLnB1c2goaW5wdXQpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5TdGF0aXN0aWNzU2VydmljZS5BY3RpdmUpIHtcclxuICAgICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3QgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLkRvd25sb2FkRmlsZShpbnB1dC5maWxlVHlwZSArIFwiXCIsIHRoaXMuVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LlByb2R1Y3QsIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuTmFtZSwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuaWQpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChwZGZ0ZW1wbGF0ZXMgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwZGZ0ZW1wbGF0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHBkZnRlbXBsYXRlc1tpXS5sb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICB2YXIgaW5wdXQgPSBuZXcgRmFicmlrYW50ZW5GaWxlUmVxdWVzdElucHV0TW9kZWwoKTtcclxuICAgICAgICAgIGlucHV0LmZpbGVUeXBlID0gXCJwZGZcIjtcclxuICAgICAgICAgIGlucHV0Lm1vZGVsM0QgPSBmYWxzZTtcclxuICAgICAgICAgIGlucHV0LnBkZlRlbXBsYXRlSWQgPSBwZGZ0ZW1wbGF0ZXNbaV0udGVtcGxhdGVJZDtcclxuICAgICAgICAgIHJlcXVlc3QuaW5wdXRzLnB1c2goaW5wdXQpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLkFjdGl2ZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbD8uc2VsZWN0ZWRQcm9kdWN0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICB0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLkRvd25sb2FkRmlsZShpbnB1dC5maWxlVHlwZSArIFwiXCIsIHRoaXMuVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LlByb2R1Y3QsIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuTmFtZSwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuaWQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5nZXRGYWJyaWthbnRlbkZpbGVWaWV3TW9kZWwocmVxdWVzdCkuc3Vic2NyaWJlKChtb2RlbDogRmFicmlrYW50ZW5GaWxlVmlld01vZGVsKSA9PiB7XHJcbiAgICAgICAgdGhpcy5TdGFydERvd25sb2FkKG1vZGVsLmZpbGUgKyBcIlwiLCBcIi5cIiArIG1vZGVsLmZpbGVUeXBlKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb3dubG9hZGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBkb3dubG9hZGl0ZW1zW2ldLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBkZnRlbXBsYXRlcyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGRmdGVtcGxhdGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBkZnRlbXBsYXRlc1tpXS5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBEb3dubG9hZEN1c3RvbShjdXN0b21kb3dubG9hZDogRmFicmlrYW50ZW5DdXN0b21Eb3dubG9hZFZpZXdNb2RlbCk6IHZvaWQge1xyXG5cclxuICAgIGN1c3RvbWRvd25sb2FkLmxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIHZhciByZXF1ZXN0ID0gbmV3IEZhYnJpa2FudGVuQ3VzdG9tRG93bmxvYWRSZXF1ZXN0TW9kZWwoKTtcclxuXHJcbiAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG4gICAgcmVxdWVzdC5jdXN0b21Eb3dubG9hZElkID0gY3VzdG9tZG93bmxvYWQuaWQ7XHJcblxyXG4gICAgaWYgKHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuQWN0aXZlKSB7XHJcbiAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3QgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuRG93bmxvYWRGaWxlKGN1c3RvbWRvd25sb2FkLmRvd25sb2FkVHlwZSArIFwiXCIsIHRoaXMuVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LlByb2R1Y3QsIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuTmFtZSwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuaWQpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuZ2V0RmFicmlrYW50ZW5DdXN0b21Eb3dubG9hZFJlc3VsdE1vZGVsKHJlcXVlc3QpLnN1YnNjcmliZSgobW9kZWw6IEZhYnJpa2FudGVuQ3VzdG9tRG93bmxvYWRSZXN1bHRNb2RlbCkgPT4ge1xyXG4gICAgICB0aGlzLlN0YXJ0RG93bmxvYWQobW9kZWwuZmlsZSArIFwiXCIsIFwiLlwiICsgbW9kZWwuZmlsZVR5cGUpO1xyXG5cclxuICAgICAgY3VzdG9tZG93bmxvYWQubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgU3RhcnREb3dubG9hZCh1cmw6IHN0cmluZywgZXh0ZW5zaW9uOiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcbiAgICB2YXIgZmlsZW5hbWUgPSB0aGlzLkNvbGxlY3RGaWxlTmFtZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwuZGlzYWJsZUN1c3RvbUZpbGVOYW1lcykge1xyXG4gICAgICBmaWxlbmFtZSA9IHVybC5zdWJzdHJpbmcodXJsLmxhc3RJbmRleE9mKCdcXFxcJykgKyAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZmlsZW5hbWUgIT0gXCJcIikge1xyXG4gICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lICsgZXh0ZW5zaW9uO1xyXG5cclxuICAgICAgaWYgKGV4dGVuc2lvbiA9PSBcIi5wZGZcIikge1xyXG4gICAgICAgIHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcIi9Eb3dubG9hZC9Eb3dubG9hZD9wVXJsPVwiICsgdXJsICsgXCImcEZpbGVOYW1lPVwiICsgZmlsZW5hbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBhbGVydCgnZXJyb3I6IG5vIHByb2R1Y3Qgc2VsZWN0ZWQnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBEb3dubG9hZEJlc3RlayhkYXRhOiBzdHJpbmcpIHtcclxuXHJcbiAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLlR5cGVCZXN0ZWsgPT0gXCJTVEFCVVwiKSB7XHJcbiAgICAgIHRoaXMuRG93bmxvYWRCZXN0ZWtJbm5lcihkYXRhLCBcIi5TMDFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuQmVzdGVrU2VydmljZS5UeXBlQmVzdGVrID09IFwiT1NGXCIpIHtcclxuICAgICAgdGhpcy5Eb3dubG9hZEJlc3Rla0lubmVyKGRhdGEsIFwiLnR4dFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLlR5cGVCZXN0ZWsgPT0gXCJWcmlqXCIpIHtcclxuICAgICAgdGhpcy5Eb3dubG9hZEJlc3Rla0lubmVyKGRhdGEsIFwiLnR4dFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5TdGF0aXN0aWNzU2VydmljZS5BY3RpdmUpIHtcclxuICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWw/LnNlbGVjdGVkUHJvZHVjdCAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5TdGF0aXN0aWNzU2VydmljZS5Eb3dubG9hZEZpbGUoXCJiZXN0ZWtcIiwgdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuUHJvZHVjdCwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5pZCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIERvd25sb2FkQmVzdGVrSW5uZXIoZGF0YTogc3RyaW5nLCBleHRlbnNpb246IHN0cmluZykge1xyXG4gICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgIGMuZG93bmxvYWQgPSB0aGlzLkNvbGxlY3RGaWxlTmFtZSgpICsgZXh0ZW5zaW9uO1xyXG5cclxuICAgIHZhciB0ID0gbmV3IEJsb2IoW2RhdGFdLCB7XHJcbiAgICAgIHR5cGU6IFwidGV4dC9wbGFpblwiXHJcbiAgICB9KTtcclxuICAgIGMuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHQpO1xyXG4gICAgYy5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBDb2xsZWN0RmlsZU5hbWUoKTogc3RyaW5nIHtcclxuICAgIHZhciBmaWxlbmFtZSA9IFwiXCI7XHJcblxyXG4gICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIzRFwiKSB7XHJcbiAgICAgIGlmICh0aGlzLldlYkdMU2VydmljZS5GYWJyaWthbnRlbjNEVmlld01vZGVsICE9IG51bGwpIHtcclxuICAgICAgICBmaWxlbmFtZSA9IHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwuaW5zdGFudGllTmFhbSArIFwiXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIjJEXCIpIHtcclxuICAgICAgaWYgKHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgICAgZmlsZW5hbWUgPSB0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwuaW5zdGFudGllTmFhbSArIFwiXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIkJlc3Rla1wiKSB7XHJcbiAgICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICAgIGZpbGVuYW1lID0gdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmluc3RhbnRpZU5hYW0gKyBcIlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCJUb2ViZWhvcmVuXCIpIHtcclxuICAgICAgaWYgKHRoaXMuR2V0U2VsZWN0ZWRUb2ViZWhvcmVuKCkgIT0gbnVsbCkge1xyXG4gICAgICAgIGZpbGVuYW1lID0gdGhpcy5HZXRTZWxlY3RlZFRvZWJlaG9yZW4oKT8ubmFtZSArIFwiXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZmlsZW5hbWUgPT0gXCJcIiAmJiB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3Q/LmlkICE9IG51bGwpIHtcclxuICAgICAgdmFyIGlkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbD8uc2VsZWN0ZWRQcm9kdWN0Py5pZDtcclxuXHJcbiAgICAgIGZpbGVuYW1lID0gdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuUHJvZHVjdCwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKC9bXmEtejAtOV0vZ2ksICdfJyk7XHJcblxyXG4gICAgcmV0dXJuIGZpbGVuYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8gUmVsb2Fkc1xyXG5cclxuICBwdWJsaWMgVHJpZ2dlclJlbG9hZHMoQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuU2hvd1JlcXVpcmVkKCkpIHtcclxuICAgICAgdmFyIGFycmF5ID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3Q/LmZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbHM7XHJcblxyXG4gICAgICBpZiAoYXJyYXkgIT0gbnVsbCAmJiAoYXJyYXkubGVuZ3RoID09IDEgfHwgdGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLmFsd2F5c1Nob3dWYXJpYW50KSkge1xyXG4gICAgICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiQmVzdGVrXCIgfHwgdGhpcy5Gb3JjZVVwZGF0ZUJlc3Rlaykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuY2hlY2tzdW0gIT0gdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsPy5jaGVja3N1bSkge1xyXG4gICAgICAgICAgICB0aGlzLkJlc3Rla1NlcnZpY2UuTG9hZEZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkIGFzIHN0cmluZywgQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNNb2RlbHMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiM0RcIiB8fCB0aGlzLkZvcmNlVXBkYXRlM0QpIHtcclxuICAgICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNoZWNrc3VtICE9IHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWw/LmNoZWNrc3VtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuV2ViR0xTZXJ2aWNlLkxvYWRGYWJyaWthbnRlbjNEVmlld01vZGVsKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkIGFzIHN0cmluZywgQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNNb2RlbHMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiMkRcIiB8fCB0aGlzLkZvcmNlVXBkYXRlMkQpIHtcclxuICAgICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNoZWNrc3VtICE9IHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbD8uY2hlY2tzdW0pIHtcclxuICAgICAgICAgICAgdGhpcy5TVkdTZXJ2aWNlLkxvYWRGYWJyaWthbnRlblNWR1ZpZXdNb2RlbCh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZCBhcyBzdHJpbmcsIENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLlByb2Nlc3NEeW5hbWljTW9kZWxzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIlRleHR1cmVcIiB8fCB0aGlzLkZvcmNlVXBkYXRlVGV4dHVyZSkge1xyXG4gICAgICAgICAgdGhpcy5UZXh0dXJlU2VydmljZS5Mb2FkRmFicmlrYW50ZW5UZXh0dXJlVmlld01vZGVsKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkIGFzIHN0cmluZywgQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQnJlYWRjcnVtYlxyXG5cclxuICBwdWJsaWMgR2V0U3RlcHMoKTogQXJyYXk8RmFicmlrYW50ZW5DYXRlZ29yeVZpZXdNb2RlbD4ge1xyXG4gICAgdmFyIHJldHVybmFycmF5ID0gbmV3IEFycmF5PEZhYnJpa2FudGVuQ2F0ZWdvcnlWaWV3TW9kZWw+KCk7XHJcblxyXG4gICAgdmFyIGFycmF5ID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbD8uY2F0ZWdvcnlMYXllcnM7XHJcblxyXG4gICAgaWYgKGFycmF5ICE9IG51bGwpIHtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChhcnJheVtpXS5zZWxlY3RlZE9wdGlvbiAhPSAwKSB7XHJcbiAgICAgICAgICB2YXIgb3B0aW9ucyA9IGFycmF5W2ldLmNhdGVnb3JpZXM7XHJcblxyXG4gICAgICAgICAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG9wdGlvbnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBpZiAob3B0aW9uc1tqXS5pZCA9PT0gYXJyYXlbaV0uc2VsZWN0ZWRPcHRpb24pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybmFycmF5LnB1c2gob3B0aW9uc1tqXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldHVybmFycmF5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldFNlbGVjdGVkVG9lYmVob3JlbigpOiBGYWJyaWthbnRlbkJDQlByb2R1Y3RUb2ViZWhvcmVuVmlld01vZGVsIHwgbnVsbCB7XHJcbiAgICB2YXIgdG9lYmVob3JlbjogRmFicmlrYW50ZW5CQ0JQcm9kdWN0VG9lYmVob3JlblZpZXdNb2RlbCB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3Q/LmZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbHMgIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5mYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWxzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVsc1swXS5iY2JQcm9kdWN0VG9lYmVob3JlbiAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0LmZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbHNbMF0uYmNiUHJvZHVjdFRvZWJlaG9yZW4ubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5mYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWxzWzBdLmJjYlByb2R1Y3RUb2ViZWhvcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0LmZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbHNbMF0uYmNiUHJvZHVjdFRvZWJlaG9yZW5baV0uaWQgPT0gdGhpcy5TZWxlY3RlZFRvZWJlaG9yZW4/LmlkKSB7XHJcbiAgICAgICAgICB0b2ViZWhvcmVuID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVsc1swXS5iY2JQcm9kdWN0VG9lYmVob3JlbltpXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG9lYmVob3JlbjtcclxuICB9XHJcbn1cclxuIl19
|
|
1017
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFicmlrYW50ZW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvc2VydmljZXMvZmFicmlrYW50ZW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc5RCxtR0FBbUc7QUFFbkcsT0FBTyxFQVVMLHVCQUF1QixFQUV2QixvQkFBb0IsRUFDcEIsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6QixxQkFBcUIsRUFDckIsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIseUJBQXlCLEVBQ3pCLDZCQUE2QixFQUM3Qix5QkFBeUIsRUFJekIsbUJBQW1CLEVBRW5CLDJCQUEyQixFQUUzQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUV0Qix5QkFBeUIsRUFHekIsZ0NBQWdDLEVBR2hDLHFDQUFxQyxFQUV0QyxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7QUFlbEMsTUFDYSxrQkFBa0I7SUF3Qm5CO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDRDtJQUNDO0lBaENGLElBQUksR0FBWSxLQUFLLENBQUM7SUFFdkIsT0FBTyxHQUFZLElBQUksQ0FBQztJQUN4QixnQkFBZ0IsR0FBVyxDQUFDLENBQUM7SUFFN0IsaUJBQWlCLEdBQWtCLElBQUksQ0FBQztJQUN4QyxvQkFBb0IsQ0FBdUI7SUFFM0MsY0FBYyxHQUFZLEtBQUssQ0FBQztJQUNoQyw0QkFBNEIsQ0FBK0I7SUFFM0QsYUFBYSxHQUFXLENBQUMsQ0FBQztJQUMxQixrQkFBa0IsR0FBb0QsSUFBSSxDQUFDO0lBRTNFLFdBQVcsR0FBVyxZQUFZLENBQUM7SUFDbkMsaUJBQWlCLEdBQVksS0FBSyxDQUFDO0lBQ25DLGFBQWEsR0FBWSxLQUFL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QUMsRUFBRTtZQUU5RyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pJLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsRUFBRTtvQkFDMUksVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ25IO2FBQ0Y7U0FDRjtRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7dUdBMXNDVSxrQkFBa0I7MkdBQWxCLGtCQUFrQixjQURMLE1BQU07O1NBQ25CLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZyBhcyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbi8vaW1wb3J0IHsgRmFiRm9ybURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZmFiLWZvcm0tZGlhbG9nL2ZhYi1mb3JtLWRpYWxvZy5jb21wb25lbnQnO1xyXG5cclxuaW1wb3J0IHtcclxuICBGYWJyaWthbnRlbkFwaUNsaWVudCxcclxuICBGYWJyaWthbnRlbkZpbHRlclZpZXdNb2RlbCxcclxuICBGYWJyaWthbnRlbkZpbHRlck9wdGlvblZpZXdNb2RlbCxcclxuICBGYWJyaWthbnRlblZpZXdNb2RlbCxcclxuICBGYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLFxyXG4gIEZhYnJpa2FudGVuUHJvZHVjdFZpZXdNb2RlbCxcclxuICBGYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWwsXHJcbiAgRmFicmlrYW50ZW5DYXRlZ29yeUxheWVyVmlld01vZGVsLFxyXG4gIEZhYnJpa2FudGVuQkNCUHJvZHVjdFRvZWJlaG9yZW5WaWV3TW9kZWwsXHJcbiAgRmFicmlrYW50ZW5SZXF1ZXN0TW9kZWwsXHJcbiAgRmFicmlrYW50ZW5DYXRlZ29yeVZpZXdNb2RlbCxcclxuICBTZWxlY3RQcm9kdWN0UmVxdWVzdCxcclxuICBTZWxlY3RCQ0JQcm9kdWN0UmVxdWVzdCxcclxuICBTZWxlY3RGaWx0ZXJPcHRpb25SZXF1ZXN0LFxyXG4gIFNlbGVjdENhdGVnb3J5UmVxdWVzdCxcclxuICBTZXRSYW5nZUlucHV0UmVxdWVzdCxcclxuICBSZXNldEZpbHRlclJlcXVlc3QsXHJcbiAgUmVzZXRBbGxGaWx0ZXJzUmVxdWVzdCxcclxuICBSZXNldENhdGVnb3J5TGF5ZXJSZXF1ZXN0LFxyXG4gIFJlbW92ZVByb2R1Y3RTZWxlY3Rpb25SZXF1ZXN0LFxyXG4gIFJlc2V0QWxsQ2F0ZWdvcmllc1JlcXVlc3QsXHJcbiAgRHluYW1pY0ZpbHRlcnNWaWV3TW9kZWwsXHJcbiAgRHluYW1pY1JhbmdlSW5wdXRWaWV3TW9kZWwsXHJcbiAgRHluYW1pY0Rpc3BsYXlWYWx1ZVZpZXdNb2RlbCxcclxuICBCQ0JMaW5rUmVxdWVzdE1vZGVsLFxyXG4gIEJDQkxpbmtSZXNwb25zZU1vZGVsLFxyXG4gIEZhYnJpa2FudGVuRmlsZVJlcXVlc3RNb2RlbCxcclxuICBGYWJyaWthbnRlbkZpbGVWaWV3TW9kZWwsXHJcbiAgU2VsZWN0Q29sb3VyUmVxdWVzdCxcclxuICBUcmFuc2xhdGlvbkNhdGVnb3J5LFxyXG4gIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnksXHJcbiAgRmFicmlrYW50ZW5JbnB1dFZpZXdNb2RlbCxcclxuICBTZWxlY3RGaWx0ZXJDdXN0b21SZXF1ZXN0LFxyXG4gIEZhYnJpa2FudGVuT3Blbkluc3RhbmNlUmVxdWVzdCxcclxuICBGYWJyaWthbnRlblNldHRpbmdzRG93bmxvYWRJdGVtVmlld01vZGVsLFxyXG4gIEZhYnJpa2FudGVuRmlsZVJlcXVlc3RJbnB1dE1vZGVsLFxyXG4gIEZhYnJpa2FudGVuUERGVGVtcGxhdGVWaWV3TW9kZWwsXHJcbiAgRmFicmlrYW50ZW5DdXN0b21Eb3dubG9hZFZpZXdNb2RlbCxcclxuICBGYWJyaWthbnRlbkN1c3RvbURvd25sb2FkUmVxdWVzdE1vZGVsLFxyXG4gIEZhYnJpa2FudGVuQ3VzdG9tRG93bmxvYWRSZXN1bHRNb2RlbFxyXG59IGZyb20gJy4uL3N3YWdnZXIvU3dhZ2dlckNsaWVudCc7XHJcbmltcG9ydCB7IEJlc3Rla1NlcnZpY2UgfSBmcm9tICcuL2Jlc3Rlay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmF2aWdhdGVTZXJ2aWNlIH0gZnJvbSAnLi9uYXZpZ2F0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RhdGlzdGljc1NlcnZpY2UgfSBmcm9tICcuL3N0YXRpc3RpY3Muc2VydmljZSc7XHJcbmltcG9ydCB7IFNWR1NlcnZpY2UgfSBmcm9tICcuL3N2Zy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGV4dHVyZVNlcnZpY2UgfSBmcm9tICcuL3RleHR1cmUuc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV2ViR0xTZXJ2aWNlIH0gZnJvbSAnLi93ZWJnbC5zZXJ2aWNlJztcclxuXHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICBpbnRlcmZhY2UgV2luZG93IHtcclxuICAgIGNocm9tZT86IGFueTtcclxuICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBGYWJyaWthbnRlblNlcnZpY2Uge1xyXG4gIHByaXZhdGUgSW5pdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIFNlbGVjdGVkVGFiSW5kZXg6IG51bWJlciA9IDA7XHJcblxyXG4gIHB1YmxpYyBGb3JjZU9wZW5GaWx0ZXJJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHVibGljIEZhYnJpa2FudGVuVmlld01vZGVsOiBGYWJyaWthbnRlblZpZXdNb2RlbDtcclxuXHJcbiAgcHVibGljIFNldHRpbmdzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIEZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWw6IEZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWw7XHJcblxyXG4gIHB1YmxpYyBTZWxlY3RlZFBob3RvOiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyBTZWxlY3RlZFRvZWJlaG9yZW46IEZhYnJpa2FudGVuQkNCUHJvZHVjdFRvZWJlaG9yZW5WaWV3TW9kZWwgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHVibGljIFNlbGVjdGVkVGFiOiBzdHJpbmcgPSBcIkluZm9ybWF0aWVcIjtcclxuICBwdWJsaWMgRm9yY2VVcGRhdGVCZXN0ZWs6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgRm9yY2VVcGRhdGUzRDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBGb3JjZVVwZGF0ZTJEOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIEZvcmNlVXBkYXRlVGV4dHVyZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBGYWJyaWthbnRlbkFwaUNsaWVudDogRmFicmlrYW50ZW5BcGlDbGllbnQsXHJcbiAgICBwcml2YXRlIEJlc3Rla1NlcnZpY2U6IEJlc3Rla1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIFRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIFdlYkdMU2VydmljZTogV2ViR0xTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBTVkdTZXJ2aWNlOiBTVkdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBUZXh0dXJlU2VydmljZTogVGV4dHVyZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIE5hdmlnYXRlU2VydmljZTogTmF2aWdhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBSb3V0ZXI6IFJvdXRlcixcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgU3RhdGlzdGljc1NlcnZpY2U6IFN0YXRpc3RpY3NTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLk5hdmlnYXRlU2VydmljZS5GYWJyaWthbnRlblNlcnZpY2UgPSB0aGlzO1xyXG4gICAgdGhpcy5TVkdTZXJ2aWNlLkZhYnJpa2FudGVuU2VydmljZSA9IHRoaXM7XHJcbiAgICB0aGlzLldlYkdMU2VydmljZS5GYWJyaWthbnRlblNlcnZpY2UgPSB0aGlzO1xyXG4gICAgdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuU2VydmljZSA9IHRoaXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUmVzZXRBbGxGaWx0ZXJzKENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXNldEFsbEZpbHRlcnNSZXF1ZXN0KCk7XHJcbiAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQucmVzZXRBbGxGaWx0ZXJzKHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuUmVsb2FkTW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcblxyXG4gICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2VsZWN0T3B0aW9uKGZpbHRlcmlkOiBudW1iZXIsIGZpbHRlcm9wdGlvbmlkOiBudW1iZXIsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGU/OiBBY3RpdmF0ZWRSb3V0ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBTZWxlY3RGaWx0ZXJPcHRpb25SZXF1ZXN0KCk7XHJcblxyXG4gICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuICAgIHJlcXVlc3QuZmlsdGVyT3B0aW9uSWQgPSBmaWx0ZXJvcHRpb25pZDtcclxuICAgIHJlcXVlc3QuZmlsdGVySWQgPSBmaWx0ZXJpZDtcclxuXHJcbiAgICBpZiAodGhpcy5TdGF0aXN0aWNzU2VydmljZS5BY3RpdmUpIHtcclxuICAgICAgdGhpcy5TdGF0aXN0aWNzU2VydmljZS5TZWxlY3RGaWx0ZXJPcHRpb24odGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuRmlsdGVyLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5Lk5hbWUsIGZpbHRlcmlkKSArIFwiOiBcIiArIHRoaXMuVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkZpbHRlck9wdGlvbiwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCBmaWx0ZXJvcHRpb25pZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuc2VsZWN0RmlsdGVyT3B0aW9uKHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuUmVsb2FkTW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWYsIEFjdGl2YXRlZFJvdXRlKTtcclxuICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNlbGVjdENvbG91cihmaWx0ZXJpZDogbnVtYmVyLCBjb2xvdXI6IHN0cmluZywgY29sb3VydmFsdWU6IHN0cmluZywgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XHJcbiAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFNlbGVjdENvbG91clJlcXVlc3QoKTtcclxuXHJcbiAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG4gICAgcmVxdWVzdC5jb2xvdXJOYW1lID0gY29sb3VyO1xyXG4gICAgcmVxdWVzdC5jb2xvdXJWYWx1ZSA9IGNvbG91cnZhbHVlO1xyXG4gICAgcmVxdWVzdC5maWx0ZXJJZCA9IGZpbHRlcmlkO1xyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuc2VsZWN0Q29sb3VyKHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuUmVsb2FkTW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcblxyXG4gICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2VsZWN0RmlsdGVyQ3VzdG9tKGZpbHRlcmlkOiBudW1iZXIsIGN1c3RvbXZhbHVlOiBzdHJpbmcsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBTZWxlY3RGaWx0ZXJDdXN0b21SZXF1ZXN0KCk7XHJcblxyXG4gICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuICAgIHJlcXVlc3QuY3VzdG9tVmFsdWUgPSBjdXN0b212YWx1ZTtcclxuICAgIHJlcXVlc3QuZmlsdGVySWQgPSBmaWx0ZXJpZDtcclxuXHJcbiAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LnNlbGVjdEZpbHRlckN1c3RvbShyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLlJlbG9hZE1vZGVsKENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNldFJhbmdlSW5wdXQocmFuZ2VpbnB1dGlkOiBudW1iZXIsIHZhbHVlOiBudW1iZXIsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGU/OiBBY3RpdmF0ZWRSb3V0ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBTZXRSYW5nZUlucHV0UmVxdWVzdCgpO1xyXG5cclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICByZXF1ZXN0LnJhbmdlSW5wdXRJZCA9IHJhbmdlaW5wdXRpZDtcclxuICAgIHJlcXVlc3QudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5TdGF0aXN0aWNzU2VydmljZS5BY3RpdmUpIHtcclxuICAgICAgdGhpcy5TdGF0aXN0aWNzU2VydmljZS5TZWxlY3RSYW5nZVZhbHVlKHRoaXMuVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LlJhbmdlSW5wdXQsIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuTmFtZSwgcmFuZ2VpbnB1dGlkKSArIFwiOiBcIiArIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LnNldFJhbmdlSW5wdXQocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5SZWxvYWRNb2RlbChDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcblxyXG4gICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgRm9yY2VTZWxlY3RDYXRlZ29yeShjYXRlZ29yeWlkOiBudW1iZXIsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVzZXRBbGxDYXRlZ29yaWVzUmVxdWVzdCgpO1xyXG5cclxuICAgICAgcmVxdWVzdC5zZXNzaW9uSWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuXHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQucmVzZXRBbGxDYXRlZ29yaWVzKHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdmFyIHJlcXVlc3RjYXQgPSBuZXcgU2VsZWN0Q2F0ZWdvcnlSZXF1ZXN0KCk7XHJcblxyXG4gICAgICAgIHJlcXVlc3RjYXQuc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICAgICAgcmVxdWVzdGNhdC5jYXRlZ29yeUlkID0gY2F0ZWdvcnlpZDtcclxuICAgICAgICByZXF1ZXN0Y2F0LmNhdGVnb3J5TGF5ZXIgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LnNlbGVjdENhdGVnb3J5KHJlcXVlc3RjYXQpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLlJlbG9hZE1vZGVsKENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDQwMClcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IuanNvbigpKTtcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDAwKVxyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IuanNvbigpKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2VsZWN0Q2F0ZWdvcnkoY2F0ZWdvcnk6IEZhYnJpa2FudGVuQ2F0ZWdvcnlWaWV3TW9kZWwsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGU/OiBBY3RpdmF0ZWRSb3V0ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBTZWxlY3RDYXRlZ29yeVJlcXVlc3QoKTtcclxuXHJcbiAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG4gICAgcmVxdWVzdC5jYXRlZ29yeUlkID0gY2F0ZWdvcnkuaWQ7XHJcbiAgICByZXF1ZXN0LmNhdGVnb3J5TGF5ZXIgPSBjYXRlZ29yeS5sYXllcjtcclxuXHJcbiAgICBpZiAodGhpcy5TdGF0aXN0aWNzU2VydmljZS5BY3RpdmUpIHtcclxuICAgICAgdGhpcy5TdGF0aXN0aWNzU2VydmljZS5TZWxlY3RDYXRlZ29yeSh0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5DYXRlZ29yeSwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCBjYXRlZ29yeS5pZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuc2VsZWN0Q2F0ZWdvcnkocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5SZWxvYWRNb2RlbChDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcblxyXG4gICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2VsZWN0UHJvZHVjdChwcm9kdWN0OiBGYWJyaWthbnRlblByb2R1Y3RWaWV3TW9kZWwsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGU/OiBBY3RpdmF0ZWRSb3V0ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBTZWxlY3RQcm9kdWN0UmVxdWVzdCgpO1xyXG5cclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICByZXF1ZXN0LnByb2R1Y3RJZCA9IHByb2R1Y3QuaWQ7XHJcblxyXG4gICAgaWYgKHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuQWN0aXZlKSB7XHJcbiAgICAgIHRoaXMuU3RhdGlzdGljc1NlcnZpY2UuU2VsZWN0UHJvZHVjdCh0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Qcm9kdWN0LCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5Lk5hbWUsIHByb2R1Y3QuaWQpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LnNlbGVjdFByb2R1Y3QocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5TZWxlY3RlZFRvZWJlaG9yZW4gPSBudWxsO1xyXG4gICAgICB0aGlzLlJlc2V0VGFicygpO1xyXG5cclxuICAgICAgdGhpcy5SZWxvYWRNb2RlbChDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcblxyXG4gICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2VsZWN0QkNCUHJvZHVjdChiY2Jwcm9kdWN0OiBGYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWwsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBTZWxlY3RCQ0JQcm9kdWN0UmVxdWVzdCgpO1xyXG5cclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICByZXF1ZXN0LmJjYlByb2R1Y3RJZCA9IGJjYnByb2R1Y3QuaWQ7XHJcblxyXG4gICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5zZWxlY3RCQ0JQcm9kdWN0KHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuUmVsb2FkTW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcblxyXG4gICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUmVzZXRTZWxlY3Rpb25GaWx0ZXIoZmlsdGVyOiBGYWJyaWthbnRlbkZpbHRlclZpZXdNb2RlbCwgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZT86IEFjdGl2YXRlZFJvdXRlKTogdm9pZCB7XHJcbiAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlc2V0RmlsdGVyUmVxdWVzdCgpO1xyXG4gICAgcmVxdWVzdC5maWx0ZXJJZCA9IGZpbHRlci5pZDtcclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcblxyXG4gICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5yZXNldEZpbHRlclNlbGVjdGlvbihyZXF1ZXN0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLlJlbG9hZE1vZGVsKENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBSZXNldEFsbENhdGVnb3JpZXMoQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXNldEFsbENhdGVnb3JpZXNSZXF1ZXN0KCk7XHJcblxyXG4gICAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG5cclxuICAgICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5yZXNldEFsbENhdGVnb3JpZXMocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLlJlbG9hZE1vZGVsKENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDAwKVxyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IuanNvbigpKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUmVzZXRTZWxlY3Rpb25DYXRlZ29yeShjYXRlZ29yeWxheWVyOiBGYWJyaWthbnRlbkNhdGVnb3J5Vmlld01vZGVsLCBDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVzZXRDYXRlZ29yeUxheWVyUmVxdWVzdCgpO1xyXG4gICAgcmVxdWVzdC5jYXRlZ29yeUxheWVyID0gY2F0ZWdvcnlsYXllci5sYXllcjtcclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcblxyXG4gICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5yZXNldENhdGVnb3J5TGF5ZXJTZWxlY3Rpb24ocmVxdWVzdCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5SZXNldEFsbEZpbHRlcnMoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcblxyXG4gICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUmVtb3ZlUHJvZHVjdFNlbGVjdGlvbihDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlbW92ZVByb2R1Y3RTZWxlY3Rpb25SZXF1ZXN0KCk7XHJcblxyXG4gICAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG5cclxuICAgICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5yZW1vdmVQcm9kdWN0U2VsZWN0aW9uKHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZFRvZWJlaG9yZW4gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuUmVzZXRUYWJzKCk7XHJcblxyXG4gICAgICAgIHRoaXMuUmVsb2FkTW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA0MDApXHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvci5qc29uKCkpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBUYWJTZWxlY3Rpb25DaGFuZ2VkKHRhYjogc3RyaW5nLCBDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuICAgIHRoaXMuU2VsZWN0ZWRUYWIgPSB0YWI7XHJcblxyXG4gICAgdGhpcy5UcmlnZ2VyUmVsb2FkcyhDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgR2V0Rmlyc3RPcGVuQ2F0ZWdvcnlMYXllcigpOiBGYWJyaWthbnRlbkNhdGVnb3J5TGF5ZXJWaWV3TW9kZWwgfCBudWxsIHtcclxuICAgIHZhciBhcnJheWxheWVycyA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWw/LmNhdGVnb3J5TGF5ZXJzO1xyXG5cclxuICAgIGlmIChhcnJheWxheWVycyAhPSBudWxsKSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlsYXllcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoYXJyYXlsYXllcnNbaV0uc2VsZWN0ZWRPcHRpb24gPT0gMCkge1xyXG4gICAgICAgICAgcmV0dXJuIGFycmF5bGF5ZXJzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dDYXRlZ29yaWVzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuR2V0Rmlyc3RPcGVuQ2F0ZWdvcnlMYXllcigpICE9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd1JlcXVpcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzICE9IG51bGwpIHtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0c1tpXS5maWx0ZXI/LmhpZGRlbiAhPSB0cnVlICYmXHJcbiAgICAgICAgICB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0c1tpXS5yZXF1aXJlZCAmJlxyXG4gICAgICAgICAgIXRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzW2ldLmZpbGxlZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dUZXh0dXJlKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0Py50ZXh0dXJlQmFzZVZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93VG9lYmVob3JlbigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWw/LmVuYWJsZVRvZWJlaG9yZW4gPT0gdHJ1ZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd1ZhcmlhbnRzKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwgIT0gbnVsbCAmJiB0aGlzLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoIXRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5hbHdheXNTaG93VmFyaWFudCkge1xyXG4gICAgICAgIHZhciBiY2Jwcm9kdWN0cyA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0Py5mYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWxzO1xyXG5cclxuICAgICAgICBpZiAoYmNicHJvZHVjdHMgIT0gbnVsbCAmJiBiY2Jwcm9kdWN0cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd0FjdGlvbk1lbnUoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbD8uc2VsZWN0ZWRQcm9kdWN0ID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlNob3dWYXJpYW50cygpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIjNEXCIpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIyRFwiKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiQmVzdGVrXCIpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCJUZXh0dXJlXCIpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCJUb2ViZWhvcmVuXCIpIHtcclxuICAgICAgaWYgKHRoaXMuSGFzVG9lYmVob3JlbigpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgSGFzVG9lYmVob3JlbigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3Q/LmZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbHMgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbD8uc2VsZWN0ZWRQcm9kdWN0Py5mYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVsc1swXS5iY2JQcm9kdWN0VG9lYmVob3JlbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVsc1swXS5iY2JQcm9kdWN0VG9lYmVob3Jlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBPcGVuQkNCTGluaygpOiB2b2lkIHtcclxuICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgdmFyIHd1aWQ6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIzRFwiKSB7XHJcbiAgICAgIHd1aWQgPSB0aGlzLldlYkdMU2VydmljZS5GYWJyaWthbnRlbjNEVmlld01vZGVsLnd1aWQgKyBcIlwiXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiMkRcIikge1xyXG4gICAgICB3dWlkID0gdGhpcy5TVkdTZXJ2aWNlLkZhYnJpa2FudGVuU1ZHVmlld01vZGVsLnd1aWQgKyBcIlwiXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiQmVzdGVrXCIpIHtcclxuICAgICAgd3VpZCA9IHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbC53dWlkICsgXCJcIlxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIlRvZWJlaG9yZW5cIikge1xyXG4gICAgICB3dWlkID0gdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLnd1aWQgKyBcIlwiXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiVGV4dHVyZVwiKSB7XHJcbiAgICAgIHd1aWQgPSB0aGlzLlRleHR1cmVTZXJ2aWNlLkZhYnJpa2FudGVuVGV4dHVyZVZpZXdNb2RlbC53dWlkICsgXCJcIlxyXG4gICAgfVxyXG5cclxuICAgIHZhciByZXF1ZXN0ID0gbmV3IEJDQkxpbmtSZXF1ZXN0TW9kZWwoKTtcclxuICAgIHJlcXVlc3Qud3VpZCA9IHd1aWQ7XHJcblxyXG4gICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5nZXRCQ0JMaW5rKHJlcXVlc3QpLnN1YnNjcmliZSgobW9kZWw6IEJDQkxpbmtSZXNwb25zZU1vZGVsKSA9PiB7XHJcbiAgICAgIHdpbmRvdy5vcGVuKG1vZGVsLnVybCwgJ19ibGFuaycpO1xyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUmVsb2FkTW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZT86IEFjdGl2YXRlZFJvdXRlLCBDYWxsQmFjaz86IGFueSkge1xyXG4gICAgdGhpcy5Jbml0ID0gZmFsc2U7XHJcbiAgICB0aGlzLkxvYWRGYWJyaWthbnRlblZpZXdNb2RlbChDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUsIENhbGxCYWNrKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBMb2FkRmFicmlrYW50ZW5WaWV3TW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZT86IEFjdGl2YXRlZFJvdXRlLCBDYWxsQmFjaz86IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLkluaXQpIHtcclxuICAgICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLlNldHRpbmdzTG9hZGVkKSB7XHJcbiAgICAgICAgdGhpcy5Mb2FkRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbChDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkluaXQpIHtcclxuICAgICAgICAgIHRoaXMuVHJhbnNsYXRlU2VydmljZS5Mb2FkVHJhbnNsYXRpb25zKENoYW5nZURldGVjdG9yUmVmLCB0aGlzLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5Jbml0ID0gdHJ1ZTtcclxuICAgICAgICAgIHZhciByZXF1ZXN0ID0gbmV3IEZhYnJpa2FudGVuUmVxdWVzdE1vZGVsKCk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gXCJcIjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LmdldEZhYnJpa2FudGVuVmlld01vZGVsKHJlcXVlc3QpLnN1YnNjcmliZSgobW9kZWw6IEZhYnJpa2FudGVuVmlld01vZGVsKSA9PiB7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbD8uc2VsZWN0ZWRQcm9kdWN0Py5wZGZUZW1wbGF0ZXMgIT0gbnVsbCAmJiBtb2RlbC5zZWxlY3RlZFByb2R1Y3Q/LnBkZlRlbXBsYXRlcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgdmFyIGFycmF5MSA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0LnBkZlRlbXBsYXRlcztcclxuICAgICAgICAgICAgICB2YXIgYXJyYXkyID0gbW9kZWwuc2VsZWN0ZWRQcm9kdWN0LnBkZlRlbXBsYXRlcztcclxuXHJcbiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheTEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXJyYXkyLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChhcnJheTFbaV0udGVtcGxhdGVJZCA9PSBhcnJheTJbal0udGVtcGxhdGVJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5MltqXS5jaGVja2VkID0gYXJyYXkxW2ldLmNoZWNrZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXkyW2pdLmxvYWRpbmcgPSBhcnJheTFbaV0ubG9hZGluZztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJuZXcgRmFicmlrYW50ZW5WaWV3TW9kZWxcIik7XHJcbiAgICAgICAgICAgIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwgPSBtb2RlbDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLkZvcmNlT3BlbkZpbHRlcklkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICB2YXIgaW5wdXRzID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHM7XHJcbiAgICAgICAgICAgICAgaWYgKGlucHV0cyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgZmlsdGVyID0gaW5wdXRzW2ldLmZpbHRlcjtcclxuICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLmlkID09IHRoaXMuRm9yY2VPcGVuRmlsdGVySWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5vcGVuZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJmb3JjZWQgb3BlbiBtZW51OiBcIiArIGZpbHRlci5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuRm9yY2VPcGVuRmlsdGVySWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLlNlbGVjdGVkUGhvdG8gPSAwO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuVHJpZ2dlclJlbG9hZHMoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG5cclxuICAgICAgICAgICAgaWYgKEFjdGl2YXRlZFJvdXRlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5Qcm9jZXNzUGFyYW1ldGVycyhDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLk5hdmlnYXRlU2VydmljZS5SZWZyZXNoUGFnZShBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuTmF2aWdhdGVTZXJ2aWNlLlJlZnJlc2hQYWdlKEFjdGl2YXRlZFJvdXRlKTtcclxuICAgICAgICAgICAgICB0aGlzLkxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChDYWxsQmFjayAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgQ2FsbEJhY2soKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDQwMClcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvci5qc29uKCkpO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgTG9hZEZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZT86IEFjdGl2YXRlZFJvdXRlKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuU2V0dGluZ3NMb2FkZWQpIHtcclxuICAgICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5nZXRGYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsKCkuc3Vic2NyaWJlKChtb2RlbDogRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbCkgPT4ge1xyXG4gICAgICAgIHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbCA9IG1vZGVsO1xyXG5cclxuICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlNldHRpbmdzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwuY3VzdG9tUmVkaXJlY3QgIT0gbnVsbCAmJiB0aGlzLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwuY3VzdG9tUmVkaXJlY3QgIT0gXCJcIikge1xyXG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB0aGlzLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwuY3VzdG9tUmVkaXJlY3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5Mb2FkRmFicmlrYW50ZW5WaWV3TW9kZWwoQ2hhbmdlRGV0ZWN0b3JSZWYsIEFjdGl2YXRlZFJvdXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDQwMClcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yLmpzb24oKSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIFByb2Nlc3NQYXJhbWV0ZXJzKENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoQWN0aXZhdGVkUm91dGUgIT0gbnVsbCkge1xyXG4gICAgICB2YXIgcHJvZHVjdG5hbWUgPSBBY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoXCJwcm9kdWN0XCIpO1xyXG5cclxuICAgICAgaWYgKHByb2R1Y3RuYW1lICE9IG51bGwpIHtcclxuICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5wcm9kdWN0cyAhPSBudWxsKSB7XHJcbiAgICAgICAgICB2YXIgcHJvZHVjdDogRmFicmlrYW50ZW5Qcm9kdWN0Vmlld01vZGVsIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnByb2R1Y3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnByb2R1Y3RzW2ldLnVybE5hbWUgPT0gcHJvZHVjdG5hbWUpIHtcclxuICAgICAgICAgICAgICBwcm9kdWN0ID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5wcm9kdWN0c1tpXTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChwcm9kdWN0ICE9IG51bGwgJiYgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3Q/LmlkICE9IHByb2R1Y3QuaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5TZWxlY3RQcm9kdWN0KHByb2R1Y3QsIENoYW5nZURldGVjdG9yUmVmLCBBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBjYXRlZ29yeW5hbWUgPSBBY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoXCJjYXRlZ29yeVwiKTtcclxuXHJcbiAgICAgIGlmIChjYXRlZ29yeW5hbWUgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNhdGVnb3J5TGF5ZXJzICE9IG51bGwpIHtcclxuICAgICAgICAgIHZhciBjYXRlZ29yeTogRmFicmlrYW50ZW5DYXRlZ29yeVZpZXdNb2RlbCB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5jYXRlZ29yeUxheWVycy5sZW5ndGg7IGkrKykge1xyXG5cclxuICAgICAgICAgICAgdmFyIGxheWVyID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5jYXRlZ29yeUxheWVyc1tpXS5jYXRlZ29yaWVzO1xyXG5cclxuICAgICAgICAgICAgaWYgKGxheWVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxheWVyLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGxheWVyW2pdLnVybE5hbWUgPT0gY2F0ZWdvcnluYW1lIHx8IGxheWVyW2pdLmRlZXBsaW5rVGFnID09IGNhdGVnb3J5bmFtZSkgJiYgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5jYXRlZ29yeUxheWVyc1tpXS5zZWxlY3RlZE9wdGlvbiAhPSBsYXllcltqXS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICBjYXRlZ29yeSA9IGxheWVyW2pdO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoY2F0ZWdvcnkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLlNlbGVjdENhdGVnb3J5KGNhdGVnb3J5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5Qcm9jZXNzUGFyYW1ldGVyRmlsdGVyKFwiZmlsdGVyMVwiLCBBY3RpdmF0ZWRSb3V0ZSwgQ2hhbmdlRGV0ZWN0b3JSZWYpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5Qcm9jZXNzUGFyYW1ldGVyRmlsdGVyKFwiZmlsdGVyMlwiLCBBY3RpdmF0ZWRSb3V0ZSwgQ2hhbmdlRGV0ZWN0b3JSZWYpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5Qcm9jZXNzUGFyYW1ldGVyRmlsdGVyKFwiZmlsdGVyM1wiLCBBY3RpdmF0ZWRSb3V0ZSwgQ2hhbmdlRGV0ZWN0b3JSZWYpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5Qcm9jZXNzUGFyYW1ldGVyRmlsdGVyKFwiZmlsdGVyNFwiLCBBY3RpdmF0ZWRSb3V0ZSwgQ2hhbmdlRGV0ZWN0b3JSZWYpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIFByb2Nlc3NQYXJhbWV0ZXJGaWx0ZXIobmFtZTogc3RyaW5nLCBBY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IGJvb2xlYW4ge1xyXG4gICAgdmFyIG9wdGlvbm5hbWUgPSBBY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQobmFtZSk7XHJcblxyXG4gICAgaWYgKG9wdGlvbm5hbWUgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHMgIT0gbnVsbCkge1xyXG4gICAgICAgIHZhciBvcHRpb246IEZhYnJpa2FudGVuRmlsdGVyT3B0aW9uVmlld01vZGVsIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgdmFyIGZpbHRlcjogRmFicmlrYW50ZW5GaWx0ZXJWaWV3TW9kZWwgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdmFyIGZpbHRlcnRlbXAgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0c1tpXS5maWx0ZXI7XHJcbiAgICAgICAgICBpZiAoZmlsdGVydGVtcCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHZhciBvcHRpb25zID0gZmlsdGVydGVtcC5vcHRpb25zO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgb3B0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnNbal0udXJsTmFtZSA9PSBvcHRpb25uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbiA9IG9wdGlvbnNbal07XHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlciA9IGZpbHRlcnRlbXA7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbiAhPSBudWxsICYmIGZpbHRlciAhPSBudWxsICYmIGZpbHRlci5zZWxlY3RlZE9wdGlvbiAhPSBvcHRpb24uaWQpIHtcclxuICAgICAgICAgIHRoaXMuU2VsZWN0T3B0aW9uKGZpbHRlci5pZCwgb3B0aW9uLmlkLCBDaGFuZ2VEZXRlY3RvclJlZiwgQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBSZXNldFRhYnMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLnN0YXJ0VGFiICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5TZWxlY3RlZFRhYiA9IHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5zdGFydFRhYjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5oaWRlSW5mb3JtYXRpb25UYWIpIHtcclxuICAgICAgdGhpcy5TZWxlY3RlZFRhYiA9IFwiM0RcIjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVGFiID0gXCJJbmZvcm1hdGllXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5oaWRlSW5mb3JtYXRpb25UYWIpIHtcclxuICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIzRFwiKSB7XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZFRhYkluZGV4ID0gMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIyRFwiKSB7XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZFRhYkluZGV4ID0gMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCJCZXN0ZWtcIikge1xyXG4gICAgICAgIHRoaXMuU2VsZWN0ZWRUYWJJbmRleCA9IDI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIkluZm9ybWF0aWVcIikge1xyXG4gICAgICAgIHRoaXMuU2VsZWN0ZWRUYWJJbmRleCA9IDA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiM0RcIikge1xyXG4gICAgICAgIHRoaXMuU2VsZWN0ZWRUYWJJbmRleCA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiMkRcIikge1xyXG4gICAgICAgIHRoaXMuU2VsZWN0ZWRUYWJJbmRleCA9IDI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiQmVzdGVrXCIpIHtcclxuICAgICAgICB0aGlzLlNlbGVjdGVkVGFiSW5kZXggPSAzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBEeW5hbWljIG1vZGVsc1xyXG5cclxuICBwdWJsaWMgR2V0RHluYW1pY0Rpc3BsYXlWYWx1ZXMoKTogRHluYW1pY0Rpc3BsYXlWYWx1ZVZpZXdNb2RlbFtdIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsICE9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwgIT0gbnVsbCAmJiB0aGlzLldlYkdMU2VydmljZS5GYWJyaWthbnRlbjNEVmlld01vZGVsLmNoZWNrc3VtID09IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuY2hlY2tzdW0pIHtcclxuICAgICAgICBpZiAodGhpcy5XZWJHTFNlcnZpY2UuRmFicmlrYW50ZW4zRFZpZXdNb2RlbC5keW5hbWljRGlzcGxheVZhbHVlcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5XZWJHTFNlcnZpY2UuRmFicmlrYW50ZW4zRFZpZXdNb2RlbC5keW5hbWljRGlzcGxheVZhbHVlcztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwgIT0gbnVsbCAmJiB0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwuY2hlY2tzdW0gPT0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5jaGVja3N1bSkge1xyXG4gICAgICAgIGlmICh0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbC5keW5hbWljRGlzcGxheVZhbHVlcztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwgIT0gbnVsbCAmJiB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwuY2hlY2tzdW0gPT0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5jaGVja3N1bSkge1xyXG4gICAgICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbC5keW5hbWljRGlzcGxheVZhbHVlcztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IEFycmF5PER5bmFtaWNEaXNwbGF5VmFsdWVWaWV3TW9kZWw+KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUHJvY2Vzc0R5bmFtaWNNb2RlbHMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLldlYkdMU2VydmljZS5GYWJyaWthbnRlbjNEVmlld01vZGVsICE9IG51bGwgJiYgdGhpcy5XZWJHTFNlcnZpY2UuRmFicmlrYW50ZW4zRFZpZXdNb2RlbC5jaGVja3N1bSA9PSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmNoZWNrc3VtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwuZHluYW1pY0ZpbHRlcnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY0ZpbHRlcnModGhpcy5XZWJHTFNlcnZpY2UuRmFicmlrYW50ZW4zRFZpZXdNb2RlbC5keW5hbWljRmlsdGVycyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5XZWJHTFNlcnZpY2UuRmFicmlrYW50ZW4zRFZpZXdNb2RlbC5keW5hbWljUmFuZ2VJbnB1dHMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY1JhbmdlSW5wdXRzKHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwuZHluYW1pY1JhbmdlSW5wdXRzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLldlYkdMU2VydmljZS5GYWJyaWthbnRlbjNEVmlld01vZGVsLmR5bmFtaWNEaXNwbGF5VmFsdWVzICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNEaXNwbGF5VmFsdWVzKHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwgIT0gbnVsbCAmJiB0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwuY2hlY2tzdW0gPT0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5jaGVja3N1bSkge1xyXG4gICAgICAgIGlmICh0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwuZHluYW1pY0ZpbHRlcnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY0ZpbHRlcnModGhpcy5TVkdTZXJ2aWNlLkZhYnJpa2FudGVuU1ZHVmlld01vZGVsLmR5bmFtaWNGaWx0ZXJzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwuZHluYW1pY1JhbmdlSW5wdXRzICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNSYW5nZUlucHV0cyh0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwuZHluYW1pY1JhbmdlSW5wdXRzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNWR1NlcnZpY2UuRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwuZHluYW1pY0Rpc3BsYXlWYWx1ZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY0Rpc3BsYXlWYWx1ZXModGhpcy5TVkdTZXJ2aWNlLkZhYnJpa2FudGVuU1ZHVmlld01vZGVsLmR5bmFtaWNEaXNwbGF5VmFsdWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsICE9IG51bGwgJiYgdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmNoZWNrc3VtID09IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuY2hlY2tzdW0pIHtcclxuICAgICAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmR5bmFtaWNGaWx0ZXJzICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNGaWx0ZXJzKHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbC5keW5hbWljRmlsdGVycyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmR5bmFtaWNSYW5nZUlucHV0cyAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLlByb2Nlc3NEeW5hbWljUmFuZ2VJbnB1dHModGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmR5bmFtaWNSYW5nZUlucHV0cyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLmR5bmFtaWNEaXNwbGF5VmFsdWVzICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNEaXNwbGF5VmFsdWVzKHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbC5keW5hbWljRGlzcGxheVZhbHVlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIFByb2Nlc3NEeW5hbWljRGlzcGxheVZhbHVlcyh2YWx1ZXM6IER5bmFtaWNEaXNwbGF5VmFsdWVWaWV3TW9kZWxbXSk6IHZvaWQge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLlByb2Nlc3NEeW5hbWljRGlzcGxheVZhbHVlSW5wdXRzKHZhbHVlc1tpXSwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5maWx0ZXJDYXRlZ29yaWVzICE9IG51bGwpIHtcclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuZmlsdGVyQ2F0ZWdvcmllcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgdmFyIGlucHV0cyA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuZmlsdGVyQ2F0ZWdvcmllc1tqXS5pbnB1dHM7XHJcbiAgICAgICAgICBpZiAoaW5wdXRzICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY0Rpc3BsYXlWYWx1ZUlucHV0cyh2YWx1ZXNbaV0sIGlucHV0cyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIFByb2Nlc3NEeW5hbWljRGlzcGxheVZhbHVlSW5wdXRzKHZhbHVlOiBEeW5hbWljRGlzcGxheVZhbHVlVmlld01vZGVsLCBpbnB1dHM6IEZhYnJpa2FudGVuSW5wdXRWaWV3TW9kZWxbXSk6IHZvaWQge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdmFyIG9wdGlvbnMgPSBpbnB1dHNbaV0uZmlsdGVyPy5vcHRpb25zO1xyXG4gICAgICBpZiAob3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGlmIChvcHRpb25zWzBdLm5hbWUgPT0gdmFsdWUubmFtZSkge1xyXG4gICAgICAgICAgb3B0aW9uc1swXS5pZCA9IC0yO1xyXG4gICAgICAgICAgb3B0aW9uc1swXS5uYW1lID0gdmFsdWUudmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIFByb2Nlc3NEeW5hbWljRmlsdGVycyhmaWx0ZXJzOiBEeW5hbWljRmlsdGVyc1ZpZXdNb2RlbFtdKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHMgIT0gbnVsbCkge1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYXJyYXkgPSBmaWx0ZXJzW2ldLmZpbHRlcnM7XHJcbiAgICAgICAgaWYgKGFycmF5ICE9IG51bGwpIHtcclxuICAgICAgICAgIGZvciAodmFyIHAgPSAwOyBwIDwgYXJyYXkubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIGlmIChhcnJheVtwXS5maWx0ZXJJZCA9PSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0c1tqXS5maWx0ZXI/LmlkKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzW2pdLmZpbHRlcj8ub3B0aW9ucztcclxuICAgICAgICAgICAgICAgIHZhciBhbGxvd2VkYXJyYXkgPSBhcnJheVtwXS5maWx0ZXJPcHRpb25zQWxsb3dlZDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyAhPSBudWxsICYmIGFsbG93ZWRhcnJheSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgb3B0aW9ucy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhbGxvd2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgYWxsb3dlZGFycmF5Lmxlbmd0aDsgbCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3dlZGFycmF5W2xdID09IG9wdGlvbnNba10uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGxvd2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zW2tdLmhpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImRpc2FibGU6IFwiICsgb3B0aW9uc1trXS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgUHJvY2Vzc0R5bmFtaWNSYW5nZUlucHV0cyhyYW5nZWlucHV0czogRHluYW1pY1JhbmdlSW5wdXRWaWV3TW9kZWxbXSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzICE9IG51bGwpIHtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZWlucHV0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBhcnJheSA9IHJhbmdlaW5wdXRzW2ldLnJhbmdlSW5wdXRzO1xyXG4gICAgICAgIGlmIChhcnJheSAhPSBudWxsKSB7XHJcbiAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IGFycmF5Lmxlbmd0aDsgcCsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBpZiAoYXJyYXlbcF0gPT0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5pbnB1dHNbal0ucmFuZ2U/LmlkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnYmVyZWlrIHJhbmdlaW5wdXQ6JyArIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaW5wdXRzW2pdLnJhbmdlPy5uYW1lKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcmFuZ2VvYmplY3QgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmlucHV0c1tqXS5yYW5nZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2VvYmplY3QgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICByYW5nZW9iamVjdC5pbmNsdXNpZWZNaW5pbXVtID0gcmFuZ2VpbnB1dHNbaV0uaW5jbHVzaWVmTWluaW11bTtcclxuICAgICAgICAgICAgICAgICAgcmFuZ2VvYmplY3QubWluaW11bSA9IHJhbmdlaW5wdXRzW2ldLm1pbmltdW07XHJcblxyXG4gICAgICAgICAgICAgICAgICByYW5nZW9iamVjdC5pbmNsdXNpZWZNYXhpbXVtID0gcmFuZ2VpbnB1dHNbaV0uaW5jbHVzaWVmTWF4aW11bTtcclxuICAgICAgICAgICAgICAgICAgcmFuZ2VvYmplY3QubWF4aW11bSA9IHJhbmdlaW5wdXRzW2ldLm1heGltdW07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBEb3dubG9hZHNcclxuXHJcbiAgcHVibGljIERvd25sb2FkKGRvd25sb2FkaXRlbTogRmFicmlrYW50ZW5TZXR0aW5nc0Rvd25sb2FkSXRlbVZpZXdNb2RlbCwgY3VzdG9tYmNiZWJvaWQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgdmFyIGRvd25sb2FkaXRlbXMgPSBuZXcgQXJyYXk8RmFicmlrYW50ZW5TZXR0aW5nc0Rvd25sb2FkSXRlbVZpZXdNb2RlbD4oKTtcclxuICAgIGRvd25sb2FkaXRlbXMucHVzaChkb3dubG9hZGl0ZW0pO1xyXG5cclxuICAgIHRoaXMuRG93bmxvYWRJdGVtcyhkb3dubG9hZGl0ZW1zLCBjdXN0b21iY2JlYm9pZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgRG93bmxvYWRJdGVtcyhkb3dubG9hZGl0ZW1zOiBGYWJyaWthbnRlblNldHRpbmdzRG93bmxvYWRJdGVtVmlld01vZGVsW10sIGN1c3RvbWJjYmVib2lkOiBudW1iZXIgfCB1bmRlZmluZWQsIHBkZnRlbXBsYXRlcz86IEZhYnJpa2FudGVuUERGVGVtcGxhdGVWaWV3TW9kZWxbXSB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgLy9pZiAodGhpcy5GYWJyaWthbnRlblNldHRpbmdzVmlld01vZGVsLmRvd25sb2FkRm9ybUVuYWJsZWQgJiYgIXRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuaGFzRmlsbGVkRm9ybXMpIHtcclxuICAgIC8vICB2YXIgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihGYWJGb3JtRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAvLyAgICBkYXRhOiB7XHJcbiAgICAvLyAgICAgIGZvcm06IHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5kb3dubG9hZEZvcm1cclxuICAgIC8vICAgIH1cclxuICAgIC8vICB9KTtcclxuXHJcbiAgICAvLyAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgIC8vICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLmhhc0ZpbGxlZEZvcm1zKSB7XHJcbiAgICAvLyAgICAgIHRoaXMuRG93bmxvYWRJdGVtcyhkb3dubG9hZGl0ZW1zLCBjdXN0b21iY2JlYm9pZCwgcGRmdGVtcGxhdGVzKTtcclxuICAgIC8vICAgIH1cclxuICAgIC8vICB9KTtcclxuICAgIC8vfVxyXG4gICAgLy9lbHNlIHtcclxuICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgRmFicmlrYW50ZW5GaWxlUmVxdWVzdE1vZGVsKCk7XHJcblxyXG4gICAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkO1xyXG4gICAgICByZXF1ZXN0LmN1c3RvbUJDQkVCT0lkID0gY3VzdG9tYmNiZWJvaWQ7XHJcbiAgICAgIHJlcXVlc3QubGFuZ3VhZ2VJZCA9IHRoaXMuVHJhbnNsYXRlU2VydmljZS5BY3RpdmVMYW5ndWFnZS5pZDtcclxuICAgICAgcmVxdWVzdC5pbnB1dHMgPSBuZXcgQXJyYXkoKTtcclxuXHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG93bmxvYWRpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGRvd25sb2FkaXRlbXNbaV0ubG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIHZhciBpbnB1dCA9IG5ldyBGYWJyaWthbnRlbkZpbGVSZXF1ZXN0SW5wdXRNb2RlbCgpO1xyXG4gICAgICAgIGlucHV0LmZpbGVUeXBlID0gZG93bmxvYWRpdGVtc1tpXS5maWxlVHlwZTtcclxuICAgICAgICBpbnB1dC5tb2RlbDNEID0gZG93bmxvYWRpdGVtc1tpXS5tb2RlbDNEO1xyXG4gICAgICAgIGlucHV0LnRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkgPSBkb3dubG9hZGl0ZW1zW2ldLnRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnk7XHJcbiAgICAgICAgaW5wdXQucGRmVGVtcGxhdGVJZCA9IC0xO1xyXG4gICAgICAgIHJlcXVlc3QuaW5wdXRzLnB1c2goaW5wdXQpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5TdGF0aXN0aWNzU2VydmljZS5BY3RpdmUpIHtcclxuICAgICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3QgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLkRvd25sb2FkRmlsZShpbnB1dC5maWxlVHlwZSArIFwiXCIsIHRoaXMuVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LlByb2R1Y3QsIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuTmFtZSwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuaWQpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChwZGZ0ZW1wbGF0ZXMgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwZGZ0ZW1wbGF0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHBkZnRlbXBsYXRlc1tpXS5sb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICB2YXIgaW5wdXQgPSBuZXcgRmFicmlrYW50ZW5GaWxlUmVxdWVzdElucHV0TW9kZWwoKTtcclxuICAgICAgICAgIGlucHV0LmZpbGVUeXBlID0gXCJwZGZcIjtcclxuICAgICAgICAgIGlucHV0Lm1vZGVsM0QgPSBmYWxzZTtcclxuICAgICAgICAgIGlucHV0LnBkZlRlbXBsYXRlSWQgPSBwZGZ0ZW1wbGF0ZXNbaV0udGVtcGxhdGVJZDtcclxuICAgICAgICAgIHJlcXVlc3QuaW5wdXRzLnB1c2goaW5wdXQpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLkFjdGl2ZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbD8uc2VsZWN0ZWRQcm9kdWN0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICB0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLkRvd25sb2FkRmlsZShpbnB1dC5maWxlVHlwZSArIFwiXCIsIHRoaXMuVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LlByb2R1Y3QsIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuTmFtZSwgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuaWQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5nZXRGYWJyaWthbnRlbkZpbGVWaWV3TW9kZWwocmVxdWVzdCkuc3Vic2NyaWJlKChtb2RlbDogRmFicmlrYW50ZW5GaWxlVmlld01vZGVsKSA9PiB7XHJcbiAgICAgICAgdGhpcy5TdGFydERvd25sb2FkKG1vZGVsLmZpbGUgKyBcIlwiLCBcIi5cIiArIG1vZGVsLmZpbGVUeXBlKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb3dubG9hZGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBkb3dubG9hZGl0ZW1zW2ldLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBkZnRlbXBsYXRlcyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGRmdGVtcGxhdGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBkZnRlbXBsYXRlc1tpXS5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG4gICAgICB9KTtcclxuICAgIC8vfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIERvd25sb2FkQ3VzdG9tKGN1c3RvbWRvd25sb2FkOiBGYWJyaWthbnRlbkN1c3RvbURvd25sb2FkVmlld01vZGVsKTogdm9pZCB7XHJcblxyXG4gICAgY3VzdG9tZG93bmxvYWQubG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgRmFicmlrYW50ZW5DdXN0b21Eb3dubG9hZFJlcXVlc3RNb2RlbCgpO1xyXG5cclxuICAgIHJlcXVlc3Quc2Vzc2lvbklkID0gdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQ7XHJcbiAgICByZXF1ZXN0LmN1c3RvbURvd25sb2FkSWQgPSBjdXN0b21kb3dubG9hZC5pZDtcclxuXHJcbiAgICBpZiAodGhpcy5TdGF0aXN0aWNzU2VydmljZS5BY3RpdmUpIHtcclxuICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWw/LnNlbGVjdGVkUHJvZHVjdCAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5TdGF0aXN0aWNzU2VydmljZS5Eb3dubG9hZEZpbGUoY3VzdG9tZG93bmxvYWQuZG93bmxvYWRUeXBlICsgXCJcIiwgdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuUHJvZHVjdCwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5OYW1lLCB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5pZCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5GYWJyaWthbnRlbkFwaUNsaWVudC5nZXRGYWJyaWthbnRlbkN1c3RvbURvd25sb2FkUmVzdWx0TW9kZWwocmVxdWVzdCkuc3Vic2NyaWJlKChtb2RlbDogRmFicmlrYW50ZW5DdXN0b21Eb3dubG9hZFJlc3VsdE1vZGVsKSA9PiB7XHJcbiAgICAgIHRoaXMuU3RhcnREb3dubG9hZChtb2RlbC5maWxlICsgXCJcIiwgXCIuXCIgKyBtb2RlbC5maWxlVHlwZSk7XHJcblxyXG4gICAgICBjdXN0b21kb3dubG9hZC5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBTdGFydERvd25sb2FkKHVybDogc3RyaW5nLCBleHRlbnNpb246IHN0cmluZyk6IHZvaWQge1xyXG5cclxuICAgIHZhciBmaWxlbmFtZSA9IHRoaXMuQ29sbGVjdEZpbGVOYW1lKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5kaXNhYmxlQ3VzdG9tRmlsZU5hbWVzKSB7XHJcbiAgICAgIGZpbGVuYW1lID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJ1xcXFwnKSArIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaWxlbmFtZSAhPSBcIlwiKSB7XHJcbiAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUgKyBleHRlbnNpb247XHJcblxyXG4gICAgICBpZiAoZXh0ZW5zaW9uID09IFwiLnBkZlwiKSB7XHJcbiAgICAgICAgd2luZG93Lm9wZW4odXJsLCBcIl9ibGFua1wiKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiL0Rvd25sb2FkL0Rvd25sb2FkP3BVcmw9XCIgKyB1cmwgKyBcIiZwRmlsZU5hbWU9XCIgKyBmaWxlbmFtZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGFsZXJ0KCdlcnJvcjogbm8gcHJvZHVjdCBzZWxlY3RlZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIERvd25sb2FkQmVzdGVrKGRhdGE6IHN0cmluZykge1xyXG5cclxuICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuVHlwZUJlc3RlayA9PSBcIlNUQUJVXCIpIHtcclxuICAgICAgdGhpcy5Eb3dubG9hZEJlc3Rla0lubmVyKGRhdGEsIFwiLlMwMVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLlR5cGVCZXN0ZWsgPT0gXCJPU0ZcIikge1xyXG4gICAgICB0aGlzLkRvd25sb2FkQmVzdGVrSW5uZXIoZGF0YSwgXCIudHh0XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuVHlwZUJlc3RlayA9PSBcIlZyaWpcIikge1xyXG4gICAgICB0aGlzLkRvd25sb2FkQmVzdGVrSW5uZXIoZGF0YSwgXCIudHh0XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLkFjdGl2ZSkge1xyXG4gICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbD8uc2VsZWN0ZWRQcm9kdWN0ICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLlN0YXRpc3RpY3NTZXJ2aWNlLkRvd25sb2FkRmlsZShcImJlc3Rla1wiLCB0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Qcm9kdWN0LCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5Lk5hbWUsIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0LmlkKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgRG93bmxvYWRCZXN0ZWtJbm5lcihkYXRhOiBzdHJpbmcsIGV4dGVuc2lvbjogc3RyaW5nKSB7XHJcbiAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgYy5kb3dubG9hZCA9IHRoaXMuQ29sbGVjdEZpbGVOYW1lKCkgKyBleHRlbnNpb247XHJcblxyXG4gICAgdmFyIHQgPSBuZXcgQmxvYihbZGF0YV0sIHtcclxuICAgICAgdHlwZTogXCJ0ZXh0L3BsYWluXCJcclxuICAgIH0pO1xyXG4gICAgYy5ocmVmID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwodCk7XHJcbiAgICBjLmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIENvbGxlY3RGaWxlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgdmFyIGZpbGVuYW1lID0gXCJcIjtcclxuXHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIjNEXCIpIHtcclxuICAgICAgaWYgKHRoaXMuV2ViR0xTZXJ2aWNlLkZhYnJpa2FudGVuM0RWaWV3TW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICAgIGZpbGVuYW1lID0gdGhpcy5XZWJHTFNlcnZpY2UuRmFicmlrYW50ZW4zRFZpZXdNb2RlbC5pbnN0YW50aWVOYWFtICsgXCJcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiMkRcIikge1xyXG4gICAgICBpZiAodGhpcy5TVkdTZXJ2aWNlLkZhYnJpa2FudGVuU1ZHVmlld01vZGVsICE9IG51bGwpIHtcclxuICAgICAgICBmaWxlbmFtZSA9IHRoaXMuU1ZHU2VydmljZS5GYWJyaWthbnRlblNWR1ZpZXdNb2RlbC5pbnN0YW50aWVOYWFtICsgXCJcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiQmVzdGVrXCIpIHtcclxuICAgICAgaWYgKHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgICAgZmlsZW5hbWUgPSB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwuaW5zdGFudGllTmFhbSArIFwiXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZFRhYiA9PSBcIlRvZWJlaG9yZW5cIikge1xyXG4gICAgICBpZiAodGhpcy5HZXRTZWxlY3RlZFRvZWJlaG9yZW4oKSAhPSBudWxsKSB7XHJcbiAgICAgICAgZmlsZW5hbWUgPSB0aGlzLkdldFNlbGVjdGVkVG9lYmVob3JlbigpPy5uYW1lICsgXCJcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaWxlbmFtZSA9PSBcIlwiICYmIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWw/LnNlbGVjdGVkUHJvZHVjdD8uaWQgIT0gbnVsbCkge1xyXG4gICAgICB2YXIgaWQgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5zZWxlY3RlZFByb2R1Y3Q/LmlkO1xyXG5cclxuICAgICAgZmlsZW5hbWUgPSB0aGlzLlRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Qcm9kdWN0LCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5Lk5hbWUsIGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoL1teYS16MC05XS9naSwgJ18nKTtcclxuXHJcbiAgICByZXR1cm4gZmlsZW5hbWU7XHJcbiAgfVxyXG5cclxuICAvLyBSZWxvYWRzXHJcblxyXG4gIHB1YmxpYyBUcmlnZ2VyUmVsb2FkcyhDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5TaG93UmVxdWlyZWQoKSkge1xyXG4gICAgICB2YXIgYXJyYXkgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdD8uZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVscztcclxuXHJcbiAgICAgIGlmIChhcnJheSAhPSBudWxsICYmIChhcnJheS5sZW5ndGggPT0gMSB8fCB0aGlzLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwuYWx3YXlzU2hvd1ZhcmlhbnQpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCJCZXN0ZWtcIiB8fCB0aGlzLkZvcmNlVXBkYXRlQmVzdGVrKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5jaGVja3N1bSAhPSB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWw/LmNoZWNrc3VtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuQmVzdGVrU2VydmljZS5Mb2FkRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQgYXMgc3RyaW5nLCBDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY01vZGVscygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIzRFwiIHx8IHRoaXMuRm9yY2VVcGRhdGUzRCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuY2hlY2tzdW0gIT0gdGhpcy5XZWJHTFNlcnZpY2UuRmFicmlrYW50ZW4zRFZpZXdNb2RlbD8uY2hlY2tzdW0pIHtcclxuICAgICAgICAgICAgdGhpcy5XZWJHTFNlcnZpY2UuTG9hZEZhYnJpa2FudGVuM0RWaWV3TW9kZWwodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQgYXMgc3RyaW5nLCBDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5Qcm9jZXNzRHluYW1pY01vZGVscygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuU2VsZWN0ZWRUYWIgPT0gXCIyRFwiIHx8IHRoaXMuRm9yY2VVcGRhdGUyRCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuY2hlY2tzdW0gIT0gdGhpcy5TVkdTZXJ2aWNlLkZhYnJpa2FudGVuU1ZHVmlld01vZGVsPy5jaGVja3N1bSkge1xyXG4gICAgICAgICAgICB0aGlzLlNWR1NlcnZpY2UuTG9hZEZhYnJpa2FudGVuU1ZHVmlld01vZGVsKHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkIGFzIHN0cmluZywgQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuUHJvY2Vzc0R5bmFtaWNNb2RlbHMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNlbGVjdGVkVGFiID09IFwiVGV4dHVyZVwiIHx8IHRoaXMuRm9yY2VVcGRhdGVUZXh0dXJlKSB7XHJcbiAgICAgICAgICB0aGlzLlRleHR1cmVTZXJ2aWNlLkxvYWRGYWJyaWthbnRlblRleHR1cmVWaWV3TW9kZWwodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQgYXMgc3RyaW5nLCBDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBCcmVhZGNydW1iXHJcblxyXG4gIHB1YmxpYyBHZXRTdGVwcygpOiBBcnJheTxGYWJyaWthbnRlbkNhdGVnb3J5Vmlld01vZGVsPiB7XHJcbiAgICB2YXIgcmV0dXJuYXJyYXkgPSBuZXcgQXJyYXk8RmFicmlrYW50ZW5DYXRlZ29yeVZpZXdNb2RlbD4oKTtcclxuXHJcbiAgICB2YXIgYXJyYXkgPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsPy5jYXRlZ29yeUxheWVycztcclxuXHJcbiAgICBpZiAoYXJyYXkgIT0gbnVsbCkge1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFycmF5W2ldLnNlbGVjdGVkT3B0aW9uICE9IDApIHtcclxuICAgICAgICAgIHZhciBvcHRpb25zID0gYXJyYXlbaV0uY2F0ZWdvcmllcztcclxuXHJcbiAgICAgICAgICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgb3B0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zW2pdLmlkID09PSBhcnJheVtpXS5zZWxlY3RlZE9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuYXJyYXkucHVzaChvcHRpb25zW2pdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmV0dXJuYXJyYXk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgR2V0U2VsZWN0ZWRUb2ViZWhvcmVuKCk6IEZhYnJpa2FudGVuQkNCUHJvZHVjdFRvZWJlaG9yZW5WaWV3TW9kZWwgfCBudWxsIHtcclxuICAgIHZhciB0b2ViZWhvcmVuOiBGYWJyaWthbnRlbkJDQlByb2R1Y3RUb2ViZWhvcmVuVmlld01vZGVsIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdD8uZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVscyAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0LmZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbHMubGVuZ3RoID4gMCAmJlxyXG4gICAgICB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5mYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWxzWzBdLmJjYlByb2R1Y3RUb2ViZWhvcmVuICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVsc1swXS5iY2JQcm9kdWN0VG9lYmVob3Jlbi5sZW5ndGggPiAwKSB7XHJcblxyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0LmZhYnJpa2FudGVuQkNCUHJvZHVjdFZpZXdNb2RlbHNbMF0uYmNiUHJvZHVjdFRvZWJlaG9yZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblZpZXdNb2RlbC5zZWxlY3RlZFByb2R1Y3QuZmFicmlrYW50ZW5CQ0JQcm9kdWN0Vmlld01vZGVsc1swXS5iY2JQcm9kdWN0VG9lYmVob3JlbltpXS5pZCA9PSB0aGlzLlNlbGVjdGVkVG9lYmVob3Jlbj8uaWQpIHtcclxuICAgICAgICAgIHRvZWJlaG9yZW4gPSB0aGlzLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5mYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWxzWzBdLmJjYlByb2R1Y3RUb2ViZWhvcmVuW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b2ViZWhvcmVuO1xyXG4gIH1cclxufVxyXG4iXX0=
|