@colijnit/homedecorator 258.1.1 → 258.1.2
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/app/core/enum/icon.enum.d.ts +1 -0
- package/app/core/enum/message-type.enum.d.ts +2 -1
- package/app/core/interface/message-with-payload.interface.d.ts +1 -0
- package/app/core/model/homedecorator-settings-options.d.ts +1 -1
- package/app/core/model/homedecorator-settings.d.ts +3 -0
- package/app/core/service/3dm-api.d.ts +2 -2
- package/app/core/service/homedecorator-app-event.service.d.ts +1 -0
- package/app/core/service/homedecorator-connector-adapter.service.d.ts +9 -1
- package/app/core/service/homedecorator-connector.service.d.ts +15 -2
- package/app/core/service/utils.service.d.ts +1 -1
- package/app/core/utils/object.utils.d.ts +2 -0
- package/app/homedecorator.module.d.ts +2 -1
- package/app/plugins/core3d/service/wall-measurements.service.d.ts +2 -0
- package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +3 -0
- package/app/plugins/product-catalog/product-catalog/product-catalog.component.d.ts +2 -0
- package/app/plugins/product-configurator/product-configurator-selector-list-of-values.component.scss +28 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-button.component.d.ts +19 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-button.component.scss +38 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.d.ts +20 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.scss +0 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-list-of-values.component.d.ts +19 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-tile.component.scss +56 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-tile.compontent.d.ts +20 -0
- package/app/plugins/product-configurator/product-configurator-selector.component.d.ts +26 -0
- package/app/plugins/product-configurator/product-configurator-selector.component.scss +46 -0
- package/app/plugins/product-configurator/product-configurator.component.d.ts +38 -0
- package/app/plugins/product-configurator/product-configurator.component.scss +35 -0
- package/app/plugins/product-configurator/product-configurator.module.d.ts +18 -0
- package/app/plugins/product-configurator/template_variables.scss +13 -0
- package/app/plugins/render/model/blender-render-settings.d.ts +10 -0
- package/app/plugins/render/model/blender-scene-settings.d.ts +18 -0
- package/app/plugins/render/render-controls/render-controls.component.d.ts +19 -7
- package/app/plugins/render/service/new-render.service.d.ts +21 -4
- package/app/plugins/room-planner/components/floor-catalog/floor-catalog.component.scss +1 -1
- package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +5 -0
- package/app/plugins/threedselector/threedselector/threedselector.component.d.ts +4 -0
- package/app/plugins/threedselector/threedselector/threedselector.component.scss +17 -0
- package/app/plugins/threedselector/threedselector.module.d.ts +2 -1
- package/app/plugins/toolbar/draw-dialog/draw-dialog.component.scss +1 -1
- package/assets/icons/circle_regular.svg +0 -0
- package/bundles/colijnit-homedecorator.umd.js +1986 -835
- package/bundles/colijnit-homedecorator.umd.js.map +1 -1
- package/esm2015/app/app.version.js +3 -3
- package/esm2015/app/core/enum/icon.enum.js +2 -1
- package/esm2015/app/core/enum/message-type.enum.js +2 -1
- package/esm2015/app/core/interface/message-with-payload.interface.js +1 -1
- package/esm2015/app/core/model/homedecorator-settings-options.js +2 -2
- package/esm2015/app/core/model/homedecorator-settings.js +3 -1
- package/esm2015/app/core/model/icon.js +2 -1
- package/esm2015/app/core/service/3dm-api.js +15 -22
- package/esm2015/app/core/service/homedecorator-app-event.service.js +3 -2
- package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +65 -7
- package/esm2015/app/core/service/homedecorator-connector.service.js +150 -6
- package/esm2015/app/core/service/homedecorator-settings.service.js +8 -1
- package/esm2015/app/core/service/utils.service.js +116 -93
- package/esm2015/app/core/utils/object.utils.js +13 -1
- package/esm2015/app/homedecorator.component.js +1 -2
- package/esm2015/app/homedecorator.module.js +8 -4
- package/esm2015/app/plugins/core3d/core3d/core3d.component.js +2 -2
- package/esm2015/app/plugins/core3d/service/wall-measurements.service.js +7 -1
- package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +98 -50
- package/esm2015/app/plugins/model-uploader/model-uploader/model-uploader.component.js +4 -4
- package/esm2015/app/plugins/product-catalog/product-catalog/product-catalog.component.js +21 -11
- package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-button.component.js +67 -0
- package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.js +57 -0
- package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-list-of-values.component.js +75 -0
- package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-tile.compontent.js +90 -0
- package/esm2015/app/plugins/product-configurator/product-configurator-selector.component.js +253 -0
- package/esm2015/app/plugins/product-configurator/product-configurator.component.js +151 -0
- package/esm2015/app/plugins/product-configurator/product-configurator.module.js +115 -0
- package/esm2015/app/plugins/render/model/blender-render-settings.js +3 -0
- package/esm2015/app/plugins/render/model/blender-scene-settings.js +10 -0
- package/esm2015/app/plugins/render/model/render-parameters.js +3 -3
- package/esm2015/app/plugins/render/render-controls/render-controls.component.js +532 -446
- package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +6 -40
- package/esm2015/app/plugins/render/service/new-render.service.js +212 -44
- package/esm2015/app/plugins/render/service/render.service.js +6 -9
- package/esm2015/app/plugins/room-planner/components/floor-catalog/floor-catalog.component.js +1 -1
- package/esm2015/app/plugins/room-planner/components/texture-picker/texture-picker.component.js +1 -1
- package/esm2015/app/plugins/room-planner/room-planner/room-planner.component.js +12 -10
- package/esm2015/app/plugins/threedselector/element-buttons/element-buttons.component.js +2 -2
- package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +55 -1
- package/esm2015/app/plugins/threedselector/threedselector/service/load-furniture.service.js +3 -3
- package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +64 -15
- package/esm2015/app/plugins/threedselector/threedselector/utils/asset.utils.js +1 -1
- package/esm2015/app/plugins/threedselector/threedselector.module.js +8 -4
- package/esm2015/app/plugins/toolbar/draw-dialog/draw-dialog.component.js +1 -1
- package/esm2015/app/shared/category-library/category-library.component.js +1 -1
- package/fesm2015/colijnit-homedecorator.js +2522 -1149
- package/fesm2015/colijnit-homedecorator.js.map +1 -1
- package/package.json +4 -4
- package/styles.scss +1 -1
package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js
CHANGED
|
@@ -126,6 +126,7 @@ export class BuildFurnitureService {
|
|
|
126
126
|
this._genericSelection = false;
|
|
127
127
|
this._subs = [];
|
|
128
128
|
this._answerSelected = [];
|
|
129
|
+
this._selectionsSelected = [];
|
|
129
130
|
this._furnitureConfigurations = [];
|
|
130
131
|
this.mouseOver = () => {
|
|
131
132
|
this.isMouseOverObject = true;
|
|
@@ -279,6 +280,7 @@ export class BuildFurnitureService {
|
|
|
279
280
|
this._itemGroupService.reattachToItemGroup(this._currentCustomFloorGroup, this._currentCustomFloorGroup.itemGroup, this._currentCustomFloorGroup.position);
|
|
280
281
|
}
|
|
281
282
|
this._answerSelected.length = 0;
|
|
283
|
+
this._selectionsSelected.length = 0;
|
|
282
284
|
if (this._currentCustomFloorGroup.children.length === 0) {
|
|
283
285
|
result.resultType = ResultType.GameobjectNameMismatchInSource;
|
|
284
286
|
return Promise.reject(result);
|
|
@@ -453,6 +455,7 @@ export class BuildFurnitureService {
|
|
|
453
455
|
// For simple articles we use object uuid, because they don't have an instanceId
|
|
454
456
|
this._upsertFurniture(item.uuid, { BrandIdentifier: result.metaData.itemIdentifier }, item);
|
|
455
457
|
this._handleIntegration(item.uuid, item);
|
|
458
|
+
this._currentCustomFloorGroup = item;
|
|
456
459
|
result.furniture = item;
|
|
457
460
|
this._sceneService.updatePathTracer();
|
|
458
461
|
return result;
|
|
@@ -1070,6 +1073,9 @@ export class BuildFurnitureService {
|
|
|
1070
1073
|
_handleAnswerSelected(answer) {
|
|
1071
1074
|
this._answerSelected.push(answer);
|
|
1072
1075
|
}
|
|
1076
|
+
_handleSelectionSelected(chosenOption) {
|
|
1077
|
+
this._selectionsSelected.push(chosenOption.opvTreeNodeHierarchy);
|
|
1078
|
+
}
|
|
1073
1079
|
cancelAnswer(metadata, rebuild = true, getAnswers = false) {
|
|
1074
1080
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1075
1081
|
yield this._iOne.cancelAnswer();
|
|
@@ -1110,6 +1116,14 @@ export class BuildFurnitureService {
|
|
|
1110
1116
|
this.answerSelected.next(result);
|
|
1111
1117
|
});
|
|
1112
1118
|
}
|
|
1119
|
+
selectSelectionAsAnswer(chosenOption, metadata) {
|
|
1120
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1121
|
+
this._preloadMaterialBySelection(chosenOption);
|
|
1122
|
+
this._handleSelectionSelected(chosenOption);
|
|
1123
|
+
const result = yield this._startToBuildFromConfigurator(metadata);
|
|
1124
|
+
this.answerSelected.next(result);
|
|
1125
|
+
});
|
|
1126
|
+
}
|
|
1113
1127
|
_getActiveFurniture(instanceId) {
|
|
1114
1128
|
const configurables = this._itemService.getConfigurables();
|
|
1115
1129
|
const len = configurables.length;
|
|
@@ -1609,10 +1623,50 @@ export class BuildFurnitureService {
|
|
|
1609
1623
|
});
|
|
1610
1624
|
}
|
|
1611
1625
|
}
|
|
1626
|
+
_preloadMaterialBySelection(answer) {
|
|
1627
|
+
if (answer.elementType === DecoNodeType.Variation && answer.gameObject) {
|
|
1628
|
+
const variationDecoNode = new DecoNode();
|
|
1629
|
+
variationDecoNode.gameObjectName = answer.gameObject;
|
|
1630
|
+
const adjustablesClone = this._adjustables.map(s => Object.assign({}, s));
|
|
1631
|
+
if (this._genericSelection) {
|
|
1632
|
+
if (this.currentCustomFloorGroup) {
|
|
1633
|
+
adjustablesClone.forEach((selection) => selection.variations = [variationDecoNode]);
|
|
1634
|
+
this._variationCacheService.preloadVariationsAsync(adjustablesClone[0].schema, [variationDecoNode.gameObjectName], this.articleAssetPath)
|
|
1635
|
+
.then(() => {
|
|
1636
|
+
this._variationService.loadVariation(this.articleAssetPath, adjustablesClone, '', this.currentCustomFloorGroup, true).then(() => this._sceneService.needsRender = true);
|
|
1637
|
+
});
|
|
1638
|
+
}
|
|
1639
|
+
else {
|
|
1640
|
+
this._adjustables.forEach((selection) => selection.variations = [variationDecoNode]);
|
|
1641
|
+
}
|
|
1642
|
+
}
|
|
1643
|
+
else {
|
|
1644
|
+
const currentSelection = ObjectUtils.GetSelectionFromSelectedObject(this._activeChildElement);
|
|
1645
|
+
if (currentSelection) {
|
|
1646
|
+
if (this.currentCustomFloorGroup) {
|
|
1647
|
+
const selectionFromAdjustables = adjustablesClone
|
|
1648
|
+
.find((selection) => selection.nodeId === currentSelection.nodeId);
|
|
1649
|
+
if (selectionFromAdjustables) {
|
|
1650
|
+
selectionFromAdjustables.variations = [variationDecoNode];
|
|
1651
|
+
this._variationCacheService.preloadVariationsAsync(adjustablesClone[0].schema, [variationDecoNode.gameObjectName], this.articleAssetPath)
|
|
1652
|
+
.then(() => {
|
|
1653
|
+
this._variationService.loadVariation(this.articleAssetPath, adjustablesClone, '', this.currentCustomFloorGroup, true).then(() => this._sceneService.needsRender = true);
|
|
1654
|
+
});
|
|
1655
|
+
}
|
|
1656
|
+
}
|
|
1657
|
+
else {
|
|
1658
|
+
const selectionFromAdjustables = this._adjustables
|
|
1659
|
+
.find((selection) => selection.nodeId === currentSelection.nodeId);
|
|
1660
|
+
selectionFromAdjustables.variations = [variationDecoNode];
|
|
1661
|
+
}
|
|
1662
|
+
}
|
|
1663
|
+
}
|
|
1664
|
+
}
|
|
1665
|
+
}
|
|
1612
1666
|
}
|
|
1613
1667
|
BuildFurnitureService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BuildFurnitureService, deps: [{ token: i1.MatDialog }, { token: i2.HomedecoratorConnectorService }, { token: i3.ThreedselectorService }, { token: i4.CollisionManagerService }, { token: i5.MessageBusService }, { token: i6.HomedecoratorDictionaryService }, { token: i7.HudService }, { token: i8.SceneService }, { token: i9.CameraService }, { token: i10.SceneEventService }, { token: i11.HomedecoratorAppEventService }, { token: i12.PresetsService }, { token: i13.ItemService }, { token: i14.ElementService }, { token: i15.PermanentStoreService }, { token: i16.GoogleTagManagerService }, { token: i17.HomedecoratorSettingsService }, { token: i18.UtilsService }, { token: i19.VariationService }, { token: i20.AppStateService }, { token: i21.ErrorService }, { token: i22.ItemGroupService }, { token: i23.VariationCacheService }, { token: i24.ResizeService }, { token: i25.ViewModeService }, { token: i26.FloorService }, { token: i27.FloorPatternService }, { token: i28.FloorTileIntersectionService }, { token: i29.HomedecoratorConnectorAdapterService }, { token: i30.OutlineService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1614
1668
|
BuildFurnitureService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BuildFurnitureService });
|
|
1615
1669
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BuildFurnitureService, decorators: [{
|
|
1616
1670
|
type: Injectable
|
|
1617
1671
|
}], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.HomedecoratorConnectorService }, { type: i3.ThreedselectorService }, { type: i4.CollisionManagerService }, { type: i5.MessageBusService }, { type: i6.HomedecoratorDictionaryService }, { type: i7.HudService }, { type: i8.SceneService }, { type: i9.CameraService }, { type: i10.SceneEventService }, { type: i11.HomedecoratorAppEventService }, { type: i12.PresetsService }, { type: i13.ItemService }, { type: i14.ElementService }, { type: i15.PermanentStoreService }, { type: i16.GoogleTagManagerService }, { type: i17.HomedecoratorSettingsService }, { type: i18.UtilsService }, { type: i19.VariationService }, { type: i20.AppStateService }, { type: i21.ErrorService }, { type: i22.ItemGroupService }, { type: i23.VariationCacheService }, { type: i24.ResizeService }, { type: i25.ViewModeService }, { type: i26.FloorService }, { type: i27.FloorPatternService }, { type: i28.FloorTileIntersectionService }, { type: i29.HomedecoratorConnectorAdapterService }, { type: i30.OutlineService }]; } });
|
|
1618
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtZnVybml0dXJlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3NlcnZpY2UvYnVpbGQtZnVybml0dXJlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUN0RixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMERBQTBELENBQUM7QUFFdEYsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBaUIsS0FBSyxFQUFFLGFBQWEsRUFBa0Isb0JBQW9CLEVBQUUsUUFBUSxFQUFrQixPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFcEksT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBQzdFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDZEQUE2RCxDQUFDO0FBQzdGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRSxPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDeEUsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2hELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6RCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxpREFBaUQs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LEtBQUssaUJBQWlCLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUN4SyxDQUFDO2dCQUNGLElBQUksU0FBUyxFQUFFO29CQUNiLFNBQVMsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztpQkFDOUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2lCQUN2SCxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNULElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDO3FCQUNsSCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDdkQsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7O21IQTFwRFUscUJBQXFCO3VIQUFyQixxQkFBcUI7NEZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGVjb05vZGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvZGVjby1ub2RlJztcclxuaW1wb3J0IHtEZWNvTm9kZVR5cGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9kZWNvLW5vZGUtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtEZWNvTm9kZUtpbmR9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9kZWNvLW5vZGUta2luZC5lbnVtJztcclxuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvc2VsZWN0aW9uJztcclxuaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1N1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7QW5zd2VyfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2Fuc3dlcic7XHJcbmltcG9ydCB7QnVmZmVyR2VvbWV0cnksIEV1bGVyLCBJbnN0YW5jZWRNZXNoLCBNYXRlcmlhbCwgTWVzaCwgTWVzaFN0YW5kYXJkTWF0ZXJpYWwsIE9iamVjdDNELCBTY2VuZSwgVGV4dHVyZSwgVmVjdG9yM30gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHtOb2RlVHlwZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9lbnVtL25vZGUtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtIZGVjb1Bvc2l0aW9uaW5nfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL2VudW0vaGRlY28tcG9zaXRpb25pbmcuZW51bSc7XHJcbmltcG9ydCB7ZW52aXJvbm1lbnR9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XHJcbmltcG9ydCAqIGFzIFRXRUVOIGZyb20gJ0B0d2VlbmpzL3R3ZWVuLmpzJztcclxuaW1wb3J0IHtGYWN0b3J5fSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvZmFjdG9yeSc7XHJcbmltcG9ydCB7Q3VzdG9tRmxvb3JJdGVtfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvY3VzdG9tLWZsb29yLWl0ZW0nO1xyXG5pbXBvcnQge0l0ZW19IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtJztcclxuaW1wb3J0IHtJdGVtVHlwZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2l0ZW0tdHlwZSc7XHJcbmltcG9ydCB7TWV0YWRhdGF9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9pdGVtcy9tZXRhZGF0YSc7XHJcbmltcG9ydCB7Q3VzdG9tRmxvb3JHcm91cFJlc3VsdH0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL21vZGVsL2N1c3RvbS1mbG9vci1ncm91cC1yZXN1bHQnO1xyXG5pbXBvcnQge0Z1cm5pdHVyZUludGVncmF0aW9ufSBmcm9tICcuLi9tb2RlbC9mdXJuaXR1cmUtaW50ZWdyYXRpb24nO1xyXG5pbXBvcnQge1RocmVlZHNlbGVjdG9yU2VydmljZX0gZnJvbSAnLi90aHJlZWRzZWxlY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtDb2xsaXNpb25NYW5hZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2NvbGxpc2lvbi1tYW5hZ2VyL2NvbGxpc2lvbi1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VCdXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7SHVkU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvaHVkLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL3NlcnZpY2Uvc2NlbmUuc2VydmljZSc7XHJcbmltcG9ydCB7Q2FtZXJhU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvY2FtZXJhLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lRXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9zY2VuZS1ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmVzZXRzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3ByZXNldHMuc2VydmljZSc7XHJcbmltcG9ydCB7SXRlbVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2l0ZW0uc2VydmljZSc7XHJcbmltcG9ydCB7RWxlbWVudFNlcnZpY2V9IGZyb20gJy4vZWxlbWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQZXJtYW5lbnRTdG9yZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9wZXJtYW5lbnQtc3RvcmUuc2VydmljZSc7XHJcbmltcG9ydCB7R29vZ2xlVGFnTWFuYWdlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2UvZ29vZ2xlLXRhZy1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3V0aWxzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZhcmlhdGlvblNlcnZpY2V9IGZyb20gJy4vdmFyaWF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FwcFN0YXRlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2FwcC1zdGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtFcnJvclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9lcnJvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtJdGVtR3JvdXBTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9pdGVtLWdyb3VwLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZhcmlhdGlvbkNhY2hlU2VydmljZX0gZnJvbSAnLi92YXJpYXRpb24tY2FjaGUuc2VydmljZSc7XHJcbmltcG9ydCB7UmVzaXplU2VydmljZX0gZnJvbSAnLi9yZXNpemUuc2VydmljZSc7XHJcbmltcG9ydCB7Vmlld01vZGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2Uvdmlldy1tb2RlLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge1NjZW5lM0RVdGlsfSBmcm9tICcuLi91dGlscy9zY2VuZS0zZC51dGlscyc7XHJcbmltcG9ydCB7RXJyb3JNZXNzYWdlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL21vZGVsL2Vycm9yLW1lc3NhZ2UnO1xyXG5pbXBvcnQge1ZpZXdNb2RlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudW0vdmlldy1tb2RlLmVudW0nO1xyXG5pbXBvcnQge1Jlc3VsdFR5cGV9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9lbnVtL3Jlc3VsdC10eXBlLmVudW0nO1xyXG5pbXBvcnQge2lzTmlsbH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscy9mdW5jdGlvbi9pcy1uaWxsLmZ1bmN0aW9uJztcclxuaW1wb3J0IHtVdGlsc30gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2NvcmUvdXRpbHMnO1xyXG5pbXBvcnQge01hdGVyaWFsVXRpbHN9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdXRpbHMvbWF0ZXJpYWwudXRpbHMnO1xyXG5pbXBvcnQge0Zsb29yUGlufSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvZmxvb3ItcGluJztcclxuaW1wb3J0IHtXYWxsUGlufSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvd2FsbC1waW4nO1xyXG5pbXBvcnQge0Z1cm5pdHVyZVBhcnRJbnRlZ3JhdGlvbn0gZnJvbSAnLi4vbW9kZWwvZnVybml0dXJlLXBhcnQtaW50ZWdyYXRpb24nO1xyXG5pbXBvcnQge0N1c3RvbU1lc2gsIEN1c3RvbU9iamVjdDNEfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvY3VzdG9tLW9iamVjdHMnO1xyXG5pbXBvcnQge0Z1cm5pdHVyZVBhcnRWYXJpYXRpb259IGZyb20gJy4uL21vZGVsL2Z1cm5pdHVyZS1wYXJ0LXZhcmlhdGlvbic7XHJcbmltcG9ydCB7RnVybml0dXJlQ29ubmVjdGVkUGFydEludGVncmF0aW9ufSBmcm9tICcuLi9tb2RlbC9mdXJuaXR1cmUtY29ubmVjdGVkLXBhcnQtaW50ZWdyYXRpb24nO1xyXG5pbXBvcnQge0dvb2dsZVRhZ01hbmFnZXJFdmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9lbnVtL2dvb2dsZS10YWctbWFuYWdlci1ldmVudC5lbnVtJztcclxuaW1wb3J0IHtDaGFuZ2VzSW50ZXJmYWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9jaGFuZ2VzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7Q3VzdG9tV2FsbEZsb29ySXRlbX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2N1c3RvbS13YWxsLWZsb29yLWl0ZW0nO1xyXG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3V0aWxzL29iamVjdC51dGlscyc7XHJcbmltcG9ydCB7SW5mb0RpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2luZm8tZGlhbG9nL2luZm8tZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7SW5mb0RpYWxvZ0RhdGF9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvaW50ZXJmYWNlL2luZm8tZGlhbG9nLWRhdGEuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JEaWN0aW9uYXJ5U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItZGljdGlvbmFyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQXBwRXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1hcHAtZXZlbnQuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7Rmxvb3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9mbG9vci5zZXJ2aWNlJztcclxuaW1wb3J0IHtGbG9vclBsYW5lSXRlbX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2Zsb29yLXBsYW5lLWl0ZW0nO1xyXG5pbXBvcnQge1xyXG4gIEZsb29yUGF0dGVybixcclxuICBGbG9vclBhdHRlcm5EaXJlY3Rpb24sXHJcbiAgRmxvb3JQYXR0ZXJuU2VydmljZSxcclxuICBGbG9vclBhdHRlcm5UcmFuc2Zvcm1cclxufSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9mbG9vci1wYXR0ZXJuLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Zsb29yQ291bnRSZXN1bHQsIEZsb29yVGlsZUludGVyc2VjdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2Zsb29yLXRpbGUtaW50ZXJzZWN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JDb25uZWN0b3JBZGFwdGVyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7QXJ0aWNsZUZ1bGxPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZnVsbC1vYmplY3QnO1xyXG5pbXBvcnQge091dGxpbmVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9vdXRsaW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZhcmlhdGlvbn0gZnJvbSAnLi4vbW9kZWwvdmFyaWF0aW9uJztcclxuXHJcbmNvbnN0IGRlZmF1bHRQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKDQsIDAsIDEpO1xyXG5jb25zdCBkZWZhdWx0Um90YXRpb24gPSBuZXcgRXVsZXIoMCwgTWF0aC5QSSwgMCk7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ3VyaW5nTW9kZUNoYW5nZUludGVyZmFjZSB7XHJcbiAgbWV0YWRhdGE6IE1ldGFkYXRhO1xyXG4gIGNvbmZpZ3VyaW5nOiBib29sZWFuO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgRmxvb3JQYXR0ZXJuSW5mbyB7XHJcbiAgbWVzaElkTGVmdDogc3RyaW5nO1xyXG4gIG1lc2hJZFJpZ2h0OiBzdHJpbmc7XHJcbiAgZmxvb3JQYXR0ZXJuOiBGbG9vclBhdHRlcm47XHJcbiAgZmxvb3JQYXR0ZXJuRGlyZWN0aW9uOiBGbG9vclBhdHRlcm5EaXJlY3Rpb247XHJcbiAgaGVhcnRMaW5lOiBudW1iZXI7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEJ1aWxkRnVybml0dXJlU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgLy8gcHVibGljIGdldCBkZWNvcygpOiBNYXA8c3RyaW5nLCBEZWNvTm9kZT4ge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX2dldERlY29zRnJvbUluc3RhbmNlKCk7XHJcbiAgLy8gfVxyXG4gIHB1YmxpYyBiYXNlRWxlbWVudE5vZGVJZDogbnVtYmVyO1xyXG5cclxuICBwdWJsaWMgYXJ0aWNsZUFzc2V0UGF0aDogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgdG9nZ2xlU2VsZWN0ZWRFbGVtZW50OiBTdWJqZWN0PE1lc2g+ID0gbmV3IFN1YmplY3Q8TWVzaD4oKTtcclxuICBwdWJsaWMgY29uZmlndXJlTW9kZUNoYW5nZWQ6IFN1YmplY3Q8Q29uZmlndXJpbmdNb2RlQ2hhbmdlSW50ZXJmYWNlPiA9IG5ldyBTdWJqZWN0PHsgbWV0YWRhdGE6IHt9LCBjb25maWd1cmluZzogZmFsc2UgfT4oKTtcclxuICBwdWJsaWMgYnVpbGRGaW5pc2hlZDogU3ViamVjdDxDdXN0b21GbG9vckdyb3VwUmVzdWx0PiA9IG5ldyBTdWJqZWN0PEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+KCk7XHJcbiAgcHVibGljIGFuc3dlclNlbGVjdGVkOiBTdWJqZWN0PEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+ID0gbmV3IFN1YmplY3Q8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4oKTtcclxuICBwdWJsaWMgYXJQbGFjZW1lbnRVcGRhdGU6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIHB1YmxpYyBzaG93RWxlbWVudFRvb2xiYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIHN0YXJ0UG9zaXRpb246IFZlY3RvcjM7XHJcbiAgcHVibGljIGZ1bGwzRE9iamVjdFRvVXNlOiBPYmplY3QzRDtcclxuXHJcbiAgcHVibGljIGlzTW91c2VPdmVyT2JqZWN0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIHVzZWQgZm9yIGVsZW1lbnRzLCB0byBwbGFjZSBvYmplY3RzIG9uXHJcbiAgcHVibGljIGFjdGl2ZUNvbm5lY3RvcjogYW55O1xyXG5cclxuICBwdWJsaWMgZ2V0IHVzZU5vZGVJZFRvTGluaygpIHtcclxuICAgIHJldHVybiB0aGlzLl91c2VOb2RlSWRUb0xpbms7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGN1cnJlbnRDdXN0b21GbG9vckdyb3VwKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzdGFuZEFsb25lKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YW5kQWxvbmU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHN0YW5kQWxvbmUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3N0YW5kQWxvbmUgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9zdGFuZEFsb25lKSB7XHJcbiAgICAgIHRoaXMuX3ByZXBhcmVTdGFuZEFsb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNlbGVjdGlvbnMoKTogU2VsZWN0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lPbmUuc2VsZWN0aW9ucztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFuZEFsb25lRmlyc3RCdWlsZFJlYWR5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgZ2V0IHNjZW5lKCk6IFNjZW5lIHtcclxuICAgIHJldHVybiB0aGlzLl9zY2VuZVNlcnZpY2UuZ2V0U2NlbmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VzZU5vZGVJZFRvTGluazogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBfc3RhbmRBbG9uZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9hY3RpdmVDaGlsZEVsZW1lbnQ6IE1lc2g7XHJcblxyXG4gIHByaXZhdGUgX29yaWdpbmFsRWxlbWVudFBvc2l0aW9uOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcclxuICBwcml2YXRlIF9pbnRlZ3JhdGlvbkVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9wbGFjZWRBZGp1c3RhYmxlczogYW55W10gPSBbXTtcclxuICBwcml2YXRlIF9wbGFjZWRBZGRhYmxlczogYW55W10gPSBbXTtcclxuICBwcml2YXRlIF9hZGp1c3RhYmxlczogYW55W10gPSBbXTtcclxuICBwcml2YXRlIF9hZGRhYmxlczogYW55W10gPSBbXTtcclxuICBwcml2YXRlIF9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cDogSXRlbTtcclxuICBwcml2YXRlIF9nZW5lcmljU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIF9hbnN3ZXJTZWxlY3RlZDogQW5zd2VyW10gPSBbXTtcclxuICBwcml2YXRlIF9mdXJuaXR1cmVDb25maWd1cmF0aW9uczogRnVybml0dXJlSW50ZWdyYXRpb25bXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2RpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBfaU9uZTogSG9tZWRlY29yYXRvckNvbm5lY3RvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90aHJlZWRTZWxlY3RvclNlcnZpY2U6IFRocmVlZHNlbGVjdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NvbGxpc2lvbk1hbmFnZXI6IENvbGxpc2lvbk1hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZUJ1czogTWVzc2FnZUJ1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWN0aW9uYXJ5U2VydmljZTogSG9tZWRlY29yYXRvckRpY3Rpb25hcnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaHVkU2VydmljZTogSHVkU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2FtZXJhU2VydmljZTogQ2FtZXJhU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjZW5lRXZlbnRTZXJ2aWNlOiBTY2VuZUV2ZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgX2FwcEV2ZW50U2VydmljZTogSG9tZWRlY29yYXRvckFwcEV2ZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgX3ByZXNldFNlcnZpY2U6IFByZXNldHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudFNlcnZpY2U6IEVsZW1lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcGVybWFuZW50U3RvcmVTZXJ2aWNlOiBQZXJtYW5lbnRTdG9yZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9nb29nbGVUYWdNYW5hZ2VyOiBHb29nbGVUYWdNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3V0aWxzU2VydmljZTogVXRpbHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdmFyaWF0aW9uU2VydmljZTogVmFyaWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2FwcFN0YXRlU2VydmljZTogQXBwU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pdGVtR3JvdXBTZXJ2aWNlOiBJdGVtR3JvdXBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdmFyaWF0aW9uQ2FjaGVTZXJ2aWNlOiBWYXJpYXRpb25DYWNoZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9yZXNpemVTZXJ2aWNlOiBSZXNpemVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdmlld01vZGVTZXJ2aWNlOiBWaWV3TW9kZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mbG9vclNlcnZpY2U6IEZsb29yU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Zsb29yUGF0dGVyblNlcnZpY2U6IEZsb29yUGF0dGVyblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mbG9vclRpbGVJbnRlcnNlY3Rpb25TZXJ2aWNlOiBGbG9vclRpbGVJbnRlcnNlY3Rpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29ubmVjdG9yQWRhcHRlclNlcnZpY2U6IEhvbWVkZWNvcmF0b3JDb25uZWN0b3JBZGFwdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX291dGxpbmVTZXJ2aWNlOiBPdXRsaW5lU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9pT25lLmNvbm5lY3Rpb25SZXNldC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5faGFuZGxlQ29ubmVjdGlvblJlc2V0KCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5JdGVtUmVtb3ZlZCwgKHJlc3VsdDogeyBpdGVtOiBhbnksIGFkZGVkVG9Hcm91cDogYm9vbGVhbiB9KSA9PlxyXG4gICAgICAgIHRoaXMuX2hhbmRsZUl0ZW1SZW1vdmVkRnJvbVNjZW5lKHJlc3VsdCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5VbmRvLCAoKSA9PiB0aGlzLl9zdGFydFdpdGhOZXcoZmFsc2UpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuUmVkbywgKCkgPT4gdGhpcy5fc3RhcnRXaXRoTmV3KGZhbHNlKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlN0YXJ0V2l0aEVtcHR5Um9vbSwgKCkgPT4gdGhpcy5fc3RhcnRXaXRoTmV3KCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5TdGFydFdpdGhQcmVzZXQsICgpID0+IHRoaXMuX3N0YXJ0V2l0aE5ldygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuTG9hZFJvb21Gcm9tUHJlc2V0LCAoKSA9PiB0aGlzLl9zdGFydFdpdGhOZXcoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkxvYWRSb29tRnJvbUNsb3VkLCAoKSA9PiB0aGlzLl9zdGFydFdpdGhOZXcoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLk5ld1Jvb20sICgpID0+IHRoaXMuX3N0YXJ0V2l0aE5ldygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuUmVzZXRSb29tcGxhbiwgKCkgPT4gdGhpcy5fc3RhcnRXaXRoTmV3KCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5Mb2FkU2NhbGVkRGlhZ3JhbSwgKCkgPT4gdGhpcy5fc3RhcnRXaXRoTmV3KCkpLFxyXG4gICAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2UuZW5hYmxlSW50ZWdyYXRpb24uc3Vic2NyaWJlKChlbmFibGVkOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKGVuYWJsZWQpIHtcclxuICAgICAgICAgIHRoaXMuX2VuYWJsZUludGVncmF0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fcHJlc2V0U2VydmljZS5iZWZvcmVMb2FkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cEJlZm9yZVByZXNldExvYWQoKTtcclxuICAgICAgICB0aGlzLl9zdGFydFdpdGhOZXcoKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX3ByZXNldFNlcnZpY2UuYWZ0ZXJMb2FkLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9oYW5kbGVBZnRlclByZXNldExvYWQoKSksXHJcbiAgICAgIHRoaXMuX3Blcm1hbmVudFN0b3JlU2VydmljZS5jb2RlU2V0LnN1YnNjcmliZSgoY29kZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvZGUpIHtcclxuICAgICAgICAgIHRoaXMuX3NldENvZGVPbkZ1cm5pdHVyZUNvbmZpZ3VyYXRpb24oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGJ1aWxkKHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCk6IFByb21pc2U8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4ge1xyXG4gICAgdGhpcy5fZWxlbWVudFNlcnZpY2UucmVtb3ZlRWxlbWVudChyZXN1bHQuaW5zdGFuY2VJZCk7XHJcbiAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5tZXRhRGF0YSAmJiByZXN1bHQubWV0YURhdGEuaXRlbVR5cGUgPT09IEl0ZW1UeXBlLkZsb29yRGVjb3JhdGlvbikge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYnVpbGRGbG9vcihyZXN1bHQpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmZ1bGwzRE9iamVjdFRvVXNlKSB7IC8vIHRoZXJlJ3Mgbm8gM2QgbW9kZWwgc28gZ2V0IG91dFxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgY29uc3QgYWRqdXN0YWJsZXM6IFNlbGVjdGlvbltdID0gdGhpcy5fZ2V0QWRqdXN0YWJsZXMoKTtcclxuICAgIGlmIChhZGp1c3RhYmxlcyAmJiBhZGp1c3RhYmxlcy5sZW5ndGggPT09IDAgJiYgdGhpcy5zZWxlY3Rpb25zICYmIHRoaXMuc2VsZWN0aW9ucy5sZW5ndGggPiAwKSB7IC8vIGNoZWNrIGlmIGFydGljbGUgaGFzIGEgZ2FtZU9iamVjdFxyXG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25zWzBdLm5vZGVUeXBlID09PSBOb2RlVHlwZS5BcnRpY2xlICYmIHRoaXMuc2VsZWN0aW9uc1swXS5nYW1lT2JqZWN0KSB7XHJcbiAgICAgICAgYWRqdXN0YWJsZXMucHVzaCh0aGlzLnNlbGVjdGlvbnNbMF0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCA9IHRoaXMuX2NyZWF0ZUNvbmZpZ3VyYWJsZUl0ZW0ocmVzdWx0Lmluc3RhbmNlSWQsIHJlc3VsdC5tZXRhRGF0YSk7XHJcbiAgICBjb25zdCBpdGVtOiBJdGVtID0gdGhpcy5fY3JlYXRlQ29uZmlndXJhYmxlSXRlbShyZXN1bHQuaW5zdGFuY2VJZCwgcmVzdWx0Lm1ldGFEYXRhKTtcclxuICAgIGlmIChhZGp1c3RhYmxlcyAmJiBhZGp1c3RhYmxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBjb25uZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbjogbnVtYmVyID0gYWRqdXN0YWJsZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBjb25zdCBhZGp1c3RhYmxlOiBPYmplY3QzRCA9IHRoaXMuX2NyZWF0ZUFkanVzdGFibGUoaXRlbSwgYWRqdXN0YWJsZXNbaV0pO1xyXG4gICAgICAgIGlmIChhZGp1c3RhYmxlKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpaSA9IHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLmxlbmd0aCAtIDE7IGlpID49IDA7IGlpLS0pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzTW92ZWFibGVPYmplY3QoYWRqdXN0YWJsZSkpIHsgLy8gdnJpamUgdmVycGxhYXRzaW5nIG1vZ2VsaWprLCBjb25uZWN0ZW4gYWFuIG9wZ2VzbGFnZW4gY29ubmVjdG9yXHJcbiAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSBhZGp1c3RhYmxlLnVzZXJEYXRhLnNlbGVjdGlvbjtcclxuICAgICAgICAgICAgICB0aGlzLl9hZGRFbGVtZW50T25Db25uZWN0b3IoXHJcbiAgICAgICAgICAgICAgICBpdGVtLCBhZGp1c3RhYmxlLCBzZWxlY3Rpb24uZGVjb0Nvbm5lY3Rpb24gPyBzZWxlY3Rpb24uZGVjb0Nvbm5lY3Rpb24gOiB0aGlzLmFjdGl2ZUNvbm5lY3RvciwgdGhpcy5iYXNlRWxlbWVudE5vZGVJZCk7XHJcbiAgICAgICAgICAgICAgYWRqdXN0YWJsZS52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBjb25uZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChTY2VuZTNEVXRpbC5UcnlTZWxlY3RvckNvbm5lY3Rpb24odGhpcy5zY2VuZSxcclxuICAgICAgICAgICAgICAgIGl0ZW0sIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzW2lpXSwgYWRqdXN0YWJsZSwgaSA9PT0gMSkpIHtcclxuICAgICAgICAgICAgICAgIGFkanVzdGFibGUudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBjb25uZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbm5lY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWNvbm5lY3RlZCAmJiB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlcy5sZW5ndGggPiAxICYmICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XHJcbiAgICAgICAgICByZXN1bHQuZXJyb3JNZXNzYWdlcy5wdXNoKG5ldyBFcnJvck1lc3NhZ2UoXHJcbiAgICAgICAgICAgIGBObyBjb25uZWN0aW9uIGZvdW5kIGZvcjogJHthZGp1c3RhYmxlID8gYWRqdXN0YWJsZS5uYW1lIDogYWRqdXN0YWJsZXNbaV0uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWV9YCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9wbGFjZUFkZGFibGVzKGl0ZW0pO1xyXG4gICAgICBhd2FpdCB0aGlzLl9sb2FkVmFyaWF0aW9ucyhpdGVtLCByZXN1bHQubWV0YURhdGEuaXRlbUlkKTtcclxuICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAgPSBhd2FpdCB0aGlzLl9yZXBsYWNlQ3VycmVudEl0ZW0oaXRlbSwgcmVzdWx0Lm1ldGFEYXRhLCB0cnVlKTtcclxuICAgICAgaWYgKHRoaXMuX3ZpZXdNb2RlU2VydmljZS52aWV3TW9kZSAhPT0gVmlld01vZGUuSW5QaG90b1ZpZXcpIHtcclxuICAgICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC51cGRhdGVQaXZvdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc3VsdC5mdXJuaXR1cmUgPSB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cDtcclxuICAgICAgcmVzdWx0Lmluc3RhbmNlSWQgPSByZXN1bHQubWV0YURhdGEuaXRlbUlkO1xyXG4gICAgICB0aGlzLmFyUGxhY2VtZW50VXBkYXRlLm5leHQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUludGVncmF0aW9uKHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQsIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5pdGVtR3JvdXApIHtcclxuICAgICAgICB0aGlzLl9pdGVtR3JvdXBTZXJ2aWNlLnJlYXR0YWNoVG9JdGVtR3JvdXAoXHJcbiAgICAgICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCxcclxuICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLml0ZW1Hcm91cCxcclxuICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLnBvc2l0aW9uKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9hbnN3ZXJTZWxlY3RlZC5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5HYW1lb2JqZWN0TmFtZU1pc21hdGNoSW5Tb3VyY2U7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3VsdCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5faHVkU2VydmljZS51cGRhdGVTZWxlY3RlZEl0ZW1IdWQoKTtcclxuICAgICAgdGhpcy5idWlsZEZpbmlzaGVkLm5leHQocmVzdWx0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlc3VsdC5lcnJvck1lc3NhZ2VzLnB1c2gobmV3IEVycm9yTWVzc2FnZSgnTk9fQURKVVNUQUJMRVMnLCAnTk9fQURKVVNUQUJMRVNfSU5GTycpKTtcclxuICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLk5vQWRqdXN0YWJsZXM7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXN1bHQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLk5vU2VsZWN0aW9ucykge1xyXG4gICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuQ29uZmlndXJhdGlvbkZpeGVkO1xyXG4gICAgfSBlbHNlIGlmIChyZXN1bHQucmVzdWx0VHlwZSAhPT0gUmVzdWx0VHlwZS5PYnNvbGV0ZSAmJiByZXN1bHQucmVzdWx0VHlwZSAhPT0gUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uRml4ZWQpIHsgLy8gZG9uJ3Qgb3ZlcnJpZGUgdGhlc2VcclxuICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLkxvYWRlZDtcclxuICAgIH1cclxuICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5yZWFkeVRvUmVuZGVyLm5leHQodGhpcy5zdGFuZEFsb25lRmlyc3RCdWlsZFJlYWR5KTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS51cGRhdGVQYXRoVHJhY2VyKCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHN0YXJ0VG9CdWlsZChcclxuICAgIHJlc3VsdD86IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQsXHJcbiAgICBtZXRhZGF0YT86IE1ldGFkYXRhLFxyXG4gICAgc2hvdWxkQ29weUluc3RhbmNlOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICBsb29zZU9yaWdpbmFsQ29uZmlndXJhdGlvbjogYm9vbGVhbiA9IHRydWUsXHJcbiAgICBzdGFuZEFsb25lPzogYm9vbGVhbixcclxuICAgIGZpcnN0QnVpbGQ6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgIGZyb21QcmVzZXQ6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgIGxvYWRGcm9tUHJvamVjdDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKTogUHJvbWlzZTxDdXN0b21GbG9vckdyb3VwUmVzdWx0PiB7XHJcbiAgICBpZiAoIWlzTmlsbChzdGFuZEFsb25lKSkge1xyXG4gICAgICB0aGlzLnN0YW5kQWxvbmUgPSBzdGFuZEFsb25lO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzTmlsbChyZXN1bHQpKSB7XHJcbiAgICAgIHJlc3VsdCA9IG5ldyBDdXN0b21GbG9vckdyb3VwUmVzdWx0KFxyXG4gICAgICAgIG1ldGFkYXRhID8gbWV0YWRhdGEuaXRlbUlkZW50aWZpZXIgOiAnJyxcclxuICAgICAgICBtZXRhZGF0YSA/IG1ldGFkYXRhLml0ZW1OYW1lIDogJ3Vua25vd24nKTtcclxuICAgICAgcmVzdWx0Lm1ldGFEYXRhID0gbWV0YWRhdGE7XHJcbiAgICB9XHJcbiAgICBpZiAoc2hvdWxkQ29weUluc3RhbmNlICYmICFsb2FkRnJvbVByb2plY3QpIHtcclxuICAgICAgY29uc3Qgb3JpZ2luYWxJbnN0YW5jZUlkOiBzdHJpbmcgPSByZXN1bHQubWV0YURhdGEuaXRlbUlkO1xyXG4gICAgICBpZiAobG9vc2VPcmlnaW5hbENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICByZXN1bHQubWV0YURhdGEuaXRlbUlkID0gYXdhaXQgdGhpcy5faU9uZS5jb3B5SW5zdGFuY2VBbmRMb3NlT3JpZ2luYWxDb25maWd1cmF0aW9uKG9yaWdpbmFsSW5zdGFuY2VJZCwgcmVzdWx0KVxyXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbEluc3RhbmNlSWQ7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHQubWV0YURhdGEuaXRlbUlkID0gYXdhaXQgdGhpcy5faU9uZS5jb3B5SW5zdGFuY2VBbmRTYXZlT3JpZ2luYWxDb25maWd1cmF0aW9uKG9yaWdpbmFsSW5zdGFuY2VJZCwgcmVzdWx0KVxyXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbEluc3RhbmNlSWQ7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXN1bHQucmVzdWx0VHlwZSAhPT0gUmVzdWx0VHlwZS5BcnRpY2xlTm90Rm91bmQgJiYgIWxvYWRGcm9tUHJvamVjdCkge1xyXG4gICAgICBhd2FpdCB0aGlzLl9zZXRJbnN0YW5jZVRvQ29uZmlndXJlKHJlc3VsdClcclxuICAgICAgICAuY2F0Y2goKGUpID0+IFByb21pc2UucmVqZWN0KHJlc3VsdCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc3VsdC5pbnN0YW5jZUlkID0gcmVzdWx0Lm1ldGFEYXRhLml0ZW1JZDtcclxuICAgIHRoaXMuc3RhcnRQb3NpdGlvbiA9IHJlc3VsdC5tZXRhRGF0YS5wb3NpdGlvbiA/IHJlc3VsdC5tZXRhRGF0YS5wb3NpdGlvbi5jbG9uZSgpIDogbmV3IFZlY3RvcjMoKTtcclxuXHJcbiAgICBpZiAobG9hZEZyb21Qcm9qZWN0KSB7XHJcbiAgICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgICAgIHRoaXMuX2lPbmUuc2V0U2VsZWN0aW9ucyhyZXN1bHQubWV0YURhdGEuc2VsZWN0aW9ucyk7XHJcbiAgICAgIHRoaXMuX2lPbmUuc2V0RGVjb05vZGVzKEFycmF5LmZyb20ocmVzdWx0Lm1ldGFEYXRhLmRlY29zLnZhbHVlcygpKSk7XHJcbiAgICAgIHRoaXMuX3ByZWxvYWRNYXRlcmlhbHMocmVzdWx0Lm1ldGFEYXRhLnNjaGVtYSk7XHJcbiAgICAgIHRoaXMuX3ByZXBhcmVUaGVTZWxlY3Rpb25zKHJlc3VsdC5pbnN0YW5jZUlkKTtcclxuICAgICAgcmV0dXJuIHRoaXMuYnVpbGQocmVzdWx0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuX2lPbmUuZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzQXN5bmMoKTsgLy8gc2VlIGlmIHRoZXJlIGlzIHVzZXIgaW5wdXQgbmVlZGVkXHJcbiAgICAgIGlmICh0aGlzLl9pT25lLmFjdGl2ZUFuc3dlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fcHJlcGFyZVNlbGVjdGlvbnNBbmREZWNvcyhyZXN1bHQpXHJcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IFByb21pc2UucmVqZWN0KGUpKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5idWlsZChyZXN1bHQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChmaXJzdEJ1aWxkKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9wcmVwYXJlU2VsZWN0aW9uc0FuZERlY29zKHJlc3VsdClcclxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiBQcm9taXNlLnJlamVjdChlKSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5faU9uZS5zZWxlY3Rpb25zLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLk5lZWRzVXNlcklucHV0O1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9pT25lLnNlbGVjdGlvbnMubGVuZ3RoIDwgMikge1xyXG4gICAgICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuQnVpbGRGcm9tU2NyYXRjaDtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5faU9uZS5zZWxlY3Rpb25zLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLk5lZWRzVXNlcklucHV0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRPcHRpb25zRnJvbVNlbGVjdGlvbihiYXNlU2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBTZWxlY3Rpb25bXSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9IFtdO1xyXG4gICAgbGV0IG5vZGVMZXZlbCA9IC0xO1xyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSB0aGlzLnNlbGVjdGlvbnMubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uc1tpXTtcclxuICAgICAgY29uc3QgbGV2ZWw6IG51bWJlciA9IHNlbGVjdGlvbi5wcmVzZW50YXRpb25MZXZlbDtcclxuICAgICAgaWYgKG5vZGVMZXZlbCAhPT0gLTEpIHtcclxuICAgICAgICBpZiAobm9kZUxldmVsIDwgbGV2ZWwgJiYgdGhpcy5fY2FuQ29ubmVjdFNlbGVjdGlvbnMoYmFzZVNlbGVjdGlvbiwgc2VsZWN0aW9uKSAmJiB0aGlzLl9zZWxlY3Rpb25QdWJsaXNoZWQoc2VsZWN0aW9uKSkge1xyXG4gICAgICAgICAgc2VsZWN0aW9ucy5wdXNoKHNlbGVjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlTGV2ZWwgPj0gbGV2ZWwpIHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoc2VsZWN0aW9uLmlkID09PSBiYXNlU2VsZWN0aW9uLmlkICYmIHNlbGVjdGlvbi5ub2RlID09PSBiYXNlU2VsZWN0aW9uLm5vZGUpIHtcclxuICAgICAgICBub2RlTGV2ZWwgPSBsZXZlbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZG93bmxvYWRDdXJyZW50Q3VzdG9tRmxvb3Jncm91cCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG9iamVjdFRvRXhwb3J0OiBPYmplY3QzRCA9IHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwID8gdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAgOiB0aGlzLl9pdGVtU2VydmljZS5pdGVtc1swXTtcclxuICAgIHRoaXMuX3V0aWxzU2VydmljZS5zaG93RXhwb3J0RGlhbG9nKG9iamVjdFRvRXhwb3J0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkb3dubG9hZFVEU1pmb3JBUklPUygpOiB2b2lkIHtcclxuICAgIGNvbnN0IG9iamVjdFRvRXhwb3J0OiBPYmplY3QzRCA9IHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwID8gdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAgOiB0aGlzLl9pdGVtU2VydmljZS5pdGVtc1swXTtcclxuICAgIHRoaXMuX3V0aWxzU2VydmljZS5kb3dubG9hZFVTRFpmb3JBUklPUyhvYmplY3RUb0V4cG9ydCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZG93bmxvYWRDYW52YXMoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCkge1xyXG4gICAgICBjb25zdCBvYmplY3RUb0V4cG9ydDogT2JqZWN0M0QgPSB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5jbG9uZSh0cnVlKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX3V0aWxzU2VydmljZS5jcmVhdGVDYW52YXNJbWFnZShvYmplY3RUb0V4cG9ydCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG4gIHB1YmxpYyBkb3dubG9hZFRodW1ibmFpbCgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwKSB7XHJcbiAgICAgIGNvbnN0IG9iamVjdFRvRXhwb3J0OiBPYmplY3QzRCA9IHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLmNsb25lKCk7XHJcbiAgICAgIHJldHVybiB0aGlzLl91dGlsc1NlcnZpY2UuY3JlYXRlVGh1bWJuYWlsSW1hZ2Uob2JqZWN0VG9FeHBvcnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRvd25sb2FkU2NlbmUoKTogdm9pZCB7XHJcbiAgICBjb25zdCBhc3NldFBhdGg6IHN0cmluZyA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5hc3NldFBhdGg7XHJcbiAgICAvLyBUaGUgZ3JvdW5kIHBsYW5lIGxvb2tzIG9kZCBpbiByZW5kZXJzLlxyXG4gICAgLy8gVGhlIGh1ZC1yaW5nIGFuZCBodWQtY2lyY2xlIGFyZSB0aGUgd2Fsa3Rocm91Z2ggbW9kZSBtYXJrZXIsXHJcbiAgICAvLyB3aGljaCBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgcmVuZGVyZWQuXHJcbiAgICBjb25zdCBlbGVtZW50c1RvUmVtb3ZlID0gWydncm91bmQtcGxhbmUnLCAnaHVkLXJpbmcnLCAnaHVkLWNpcmNsZSddO1xyXG5cclxuICAgIGxldCBzY2VuZTogU2NlbmU7XHJcbiAgICBzY2VuZSA9IHRoaXMuX3NjZW5lU2VydmljZS5zY2VuZS5jbG9uZSgpO1xyXG5cclxuICAgIGVsZW1lbnRzVG9SZW1vdmUuZm9yRWFjaChlbGVtZW50TmFtZSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkT2JqZWN0OiBPYmplY3QzRCA9IHNjZW5lLmdldE9iamVjdEJ5TmFtZShlbGVtZW50TmFtZSk7XHJcbiAgICAgIHNjZW5lLnJlbW92ZShzZWxlY3RlZE9iamVjdCk7XHJcbiAgICB9KTtcclxuICAgIHNjZW5lLmFkZCh0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5jbG9uZSgpKTtcclxuXHJcbiAgICB0aGlzLl91dGlsc1NlcnZpY2Uuc2hvd0V4cG9ydERpYWxvZyhzY2VuZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlU2ltcGxlM0RNb2RlbChyZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQsIHN0YW5kQWxvbmU/OiBib29sZWFuKTogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCB7XHJcbiAgICBpZiAoIWlzTmlsbChzdGFuZEFsb25lKSkge1xyXG4gICAgICB0aGlzLnN0YW5kQWxvbmUgPSBzdGFuZEFsb25lO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmZ1bGwzRE9iamVjdFRvVXNlKSB7IC8vIHRoZXJlJ3Mgbm8gM2QgbW9kZWwgc28gZ2V0IG91dFxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgLy8gdGhlcmUgYXJlIG5vIHNlbGVjdGlvbnMgb3IgZGVjb3MgZm9yIHNpbXBsZSBhcnRpY2xlcywgc28gZW1wdHkgbGlzdHMgZm9yIGludGVncmF0aW9uIHB1cnBvc2VzXHJcbiAgICB0aGlzLl9pT25lLmVtcHR5U2VsZWN0aW9ucygpO1xyXG4gICAgdGhpcy5mdWxsM0RPYmplY3RUb1VzZS5jaGlsZHJlbi5mb3JFYWNoKGMgPT4gYy52aXNpYmxlID0gdHJ1ZSk7XHJcbiAgICBpZiAoIXJlc3VsdC5tZXRhRGF0YS5wb3NpdGlvbikge1xyXG4gICAgICByZXN1bHQubWV0YURhdGEucG9zaXRpb24gPSB0aGlzLnN0YXJ0UG9zaXRpb24gfHwgZGVmYXVsdFBvc2l0aW9uO1xyXG4gICAgfVxyXG4gICAgaWYgKCFyZXN1bHQubWV0YURhdGEucm90YXRpb24pIHtcclxuICAgICAgcmVzdWx0Lm1ldGFEYXRhLnJvdGF0aW9uID0gcmVzdWx0Lm1ldGFEYXRhLmRlZmF1bHQxODAgPyBkZWZhdWx0Um90YXRpb24gOiBuZXcgRXVsZXIoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGl0ZW1Db25zdHJ1Y3RvciA9IEZhY3RvcnkuZ2V0Q2xhc3ModGhpcy5zdGFuZEFsb25lID8gSXRlbVR5cGUuRmxvb3JHcm91cCA6IHJlc3VsdC5tZXRhRGF0YS5pdGVtVHlwZSk7XHJcbiAgICBjb25zdCBpdGVtID0gbmV3IGl0ZW1Db25zdHJ1Y3RvcihcclxuICAgICAgcmVzdWx0Lm1ldGFEYXRhLFxyXG4gICAgICB0aGlzLmZ1bGwzRE9iamVjdFRvVXNlLFxyXG4gICAgICB7XHJcbiAgICAgICAgc2hvd0hpZGVPdXRsaW5lSGFuZGxlcjogdGhpcy5zaG93SGlkZU91dGxpbmVcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHJlc3VsdC5tZXRhRGF0YS5vYmplY3RVVUlEID0gaXRlbS51dWlkO1xyXG4gICAgaXRlbS5hbGxvd1JvdGF0ZSA9ICF0aGlzLnN0YW5kQWxvbmU7XHJcbiAgICBpdGVtLmhpZ2hMaWdodERpc2FibGVkID0gIXRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnVzZVN0YW5kYWxvbmVIaWdoTGlnaHQ7XHJcblxyXG4gICAgdGhpcy5faXRlbVNlcnZpY2UuYWRkSXRlbShpdGVtKTtcclxuICAgIGlmIChpdGVtLml0ZW1Hcm91cCkge1xyXG4gICAgICB0aGlzLl9pdGVtR3JvdXBTZXJ2aWNlLnJlYXR0YWNoVG9JdGVtR3JvdXAoaXRlbSwgaXRlbS5pdGVtR3JvdXAsIGl0ZW0ucG9zaXRpb24pO1xyXG4gICAgfVxyXG4gICAgLy8gRm9yIHNpbXBsZSBhcnRpY2xlcyB3ZSB1c2Ugb2JqZWN0IHV1aWQsIGJlY2F1c2UgdGhleSBkb24ndCBoYXZlIGFuIGluc3RhbmNlSWRcclxuICAgIHRoaXMuX3Vwc2VydEZ1cm5pdHVyZShpdGVtLnV1aWQsIHtCcmFuZElkZW50aWZpZXI6IHJlc3VsdC5tZXRhRGF0YS5pdGVtSWRlbnRpZmllcn0sIGl0ZW0pO1xyXG4gICAgdGhpcy5faGFuZGxlSW50ZWdyYXRpb24oaXRlbS51dWlkLCBpdGVtKTtcclxuXHJcbiAgICByZXN1bHQuZnVybml0dXJlID0gaXRlbTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS51cGRhdGVQYXRoVHJhY2VyKCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfYnVpbGRGbG9vcihyZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQpOiBQcm9taXNlPEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+IHtcclxuICAgIGxldCBzaW1wbGVGbG9vckFydGljbGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgbGV0IGZsb29yUGF0dGVybjogRmxvb3JQYXR0ZXJuO1xyXG4gICAgY29uc3QgYXJ0aWNsZUZ1bGxPYmplY3Q6IEFydGljbGVGdWxsT2JqZWN0ID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yQWRhcHRlclNlcnZpY2UuZ2V0QXJ0aWNsZUZ1bGxPYmplY3QoK3Jlc3VsdC5tZXRhRGF0YS5nb29kSWQpO1xyXG4gICAgaWYgKGFydGljbGVGdWxsT2JqZWN0LnRhZ3MgIT09IG51bGwgJiYgYXJ0aWNsZUZ1bGxPYmplY3QudGFncy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAoY29uc3QgdGFnIG9mIGFydGljbGVGdWxsT2JqZWN0LnRhZ3MpIHtcclxuICAgICAgICBpZiAodGFnLmRlc2NyaXB0aW9uID09PSAnTk9STUFMJykge1xyXG4gICAgICAgICAgZmxvb3JQYXR0ZXJuID0gRmxvb3JQYXR0ZXJuLk5PUk1BTDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRhZy5kZXNjcmlwdGlvbiA9PT0gJ0hFUlJJTkdCT05FJykge1xyXG4gICAgICAgICAgZmxvb3JQYXR0ZXJuID0gRmxvb3JQYXR0ZXJuLkhFUlJJTkdCT05FO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGFnLmRlc2NyaXB0aW9uID09PSAnSE9ONjAnKSB7XHJcbiAgICAgICAgICBmbG9vclBhdHRlcm4gPSBGbG9vclBhdHRlcm4uSE9ONjA7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0YWcuZGVzY3JpcHRpb24gPT09ICdIT040NScpIHtcclxuICAgICAgICAgIGZsb29yUGF0dGVybiA9IEZsb29yUGF0dGVybi5IT040NTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZmxvb3JQYXR0ZXJuID0gRmxvb3JQYXR0ZXJuLk5PUk1BTDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgc2ltcGxlRmxvb3JBcnRpY2xlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNpbXBsZUZsb29yQXJ0aWNsZSkge1xyXG4gICAgICBjb25zdCBpdGVtOiBGbG9vclBsYW5lSXRlbSA9IHRoaXMuX2Zsb29yU2VydmljZS5mbG9vclRvQ29uZmlndXJlO1xyXG4gICAgICBpdGVtLm1ldGFkYXRhID0gcmVzdWx0Lm1ldGFEYXRhO1xyXG4gICAgICBpdGVtLmNoaWxkcmVuWzBdLnVzZXJEYXRhLnNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uc1swXTtcclxuICAgICAgaXRlbS5jb25maWd1cmluZ0NoYW5nZUhhbmRsZXIgPSB0aGlzLmNoYW5nZUNvbmZpZ3VyZU1vZGU7XHJcbiAgICAgIGl0ZW0uc2VsZWN0ZWRIYW5kbGVyID0gdGhpcy5zZWxlY3RJdGVtO1xyXG4gICAgICBpdGVtLnVuc2VsZWN0ZWRIYW5kbGVyID0gdGhpcy51blNlbGVjdEl0ZW07XHJcbiAgICAgIGF3YWl0IHRoaXMuX2xvYWRWYXJpYXRpb25zKGl0ZW0sIHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQpO1xyXG4gICAgICB0aGlzLl9mbG9vclNlcnZpY2UudW5IaWdoTGlnaHRGbG9vcnMoKTtcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAgPSBpdGVtO1xyXG4gICAgICByZXN1bHQuZnVybml0dXJlID0gdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXA7XHJcbiAgICAgIHJlc3VsdC5pbnN0YW5jZUlkID0gcmVzdWx0Lm1ldGFEYXRhLml0ZW1JZDtcclxuICAgICAgdGhpcy5faGFuZGxlSW50ZWdyYXRpb24ocmVzdWx0Lm1ldGFEYXRhLml0ZW1JZCwgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXApO1xyXG4gICAgICBpZiAodGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuaXRlbUdyb3VwKSB7XHJcbiAgICAgICAgdGhpcy5faXRlbUdyb3VwU2VydmljZS5yZWF0dGFjaFRvSXRlbUdyb3VwKFxyXG4gICAgICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAsXHJcbiAgICAgICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5pdGVtR3JvdXAsXHJcbiAgICAgICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5wb3NpdGlvbik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fYW5zd2VyU2VsZWN0ZWQubGVuZ3RoID0gMDtcclxuICAgICAgdGhpcy5faHVkU2VydmljZS51cGRhdGVTZWxlY3RlZEl0ZW1IdWQoKTtcclxuICAgICAgdGhpcy5idWlsZEZpbmlzaGVkLm5leHQocmVzdWx0KTtcclxuICAgICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLk5vU2VsZWN0aW9ucykge1xyXG4gICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uRml4ZWQ7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnJlc3VsdFR5cGUgIT09IFJlc3VsdFR5cGUuT2Jzb2xldGUgJiYgcmVzdWx0LnJlc3VsdFR5cGUgIT09IFJlc3VsdFR5cGUuQ29uZmlndXJhdGlvbkZpeGVkKSB7IC8vIGRvbid0IG92ZXJyaWRlIHRoZXNlXHJcbiAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLkxvYWRlZDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaXRlbTogRmxvb3JQbGFuZUl0ZW0gPSB0aGlzLl9mbG9vclNlcnZpY2UuZmxvb3JUb0NvbmZpZ3VyZTtcclxuICAgICAgaXRlbS5tZXRhZGF0YSA9IHJlc3VsdC5tZXRhRGF0YTtcclxuICAgICAgaXRlbS5jb25maWd1cmluZ0NoYW5nZUhhbmRsZXIgPSB0aGlzLmNoYW5nZUNvbmZpZ3VyZU1vZGU7XHJcbiAgICAgIGl0ZW0uc2VsZWN0ZWRIYW5kbGVyID0gdGhpcy5zZWxlY3RJdGVtO1xyXG4gICAgICBpdGVtLnVuc2VsZWN0ZWRIYW5kbGVyID0gdGhpcy51blNlbGVjdEl0ZW07XHJcbiAgICAgIHRoaXMuX2Zsb29yU2VydmljZS51bkhpZ2hMaWdodEZsb29ycygpO1xyXG4gICAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCA9IGl0ZW07XHJcbiAgICAgIHJlc3VsdC5mdXJuaXR1cmUgPSB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cDtcclxuICAgICAgcmVzdWx0Lmluc3RhbmNlSWQgPSByZXN1bHQubWV0YURhdGEuaXRlbUlkO1xyXG4gICAgICB0aGlzLl9oYW5kbGVJbnRlZ3JhdGlvbihyZXN1bHQubWV0YURhdGEuaXRlbUlkLCB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCk7XHJcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5pdGVtR3JvdXApIHtcclxuICAgICAgICB0aGlzLl9pdGVtR3JvdXBTZXJ2aWNlLnJlYXR0YWNoVG9JdGVtR3JvdXAoXHJcbiAgICAgICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCxcclxuICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLml0ZW1Hcm91cCxcclxuICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLnBvc2l0aW9uKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9hbnN3ZXJTZWxlY3RlZC5sZW5ndGggPSAwO1xyXG4gICAgICB0aGlzLl9odWRTZXJ2aWNlLnVwZGF0ZVNlbGVjdGVkSXRlbUh1ZCgpO1xyXG4gICAgICB0aGlzLl9nZW5lcmF0ZUxheWluZ1BhdHRlcm4oaXRlbSwgZmxvb3JQYXR0ZXJuKTtcclxuICAgICAgdGhpcy5idWlsZEZpbmlzaGVkLm5leHQocmVzdWx0KTtcclxuICAgICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLk5vU2VsZWN0aW9ucykge1xyXG4gICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uRml4ZWQ7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnJlc3VsdFR5cGUgIT09IFJlc3VsdFR5cGUuT2Jzb2xldGUgJiYgcmVzdWx0LnJlc3VsdFR5cGUgIT09IFJlc3VsdFR5cGUuQ29uZmlndXJhdGlvbkZpeGVkKSB7IC8vIGRvbid0IG92ZXJyaWRlIHRoZXNlXHJcbiAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLkxvYWRlZDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9mbG9vclNlcnZpY2UuZmxvb3JSZXN1bHRPYmplY3QgPSByZXN1bHQ7XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZW5lcmF0ZUxheWluZ1BhdHRlcm4oZmxvb3I6IEZsb29yUGxhbmVJdGVtLCBmbG9vclBhdHRlcm46IEZsb29yUGF0dGVybik6IHZvaWQge1xyXG4gICAgY29uc3QgZmxvb3JQYXR0ZXJuSW5mbzogRmxvb3JQYXR0ZXJuSW5mbyA9IHRoaXMuX2dlbmVyYXRlRmxvb3JQYXR0ZXJuSW5mbyhmbG9vciwgZmxvb3JQYXR0ZXJuKTtcclxuICAgIGZsb29yLnJlc3RvcmVGbG9vck9iamVjdCgpO1xyXG4gICAgY29uc3QgbWVzaExlZnQgPVxyXG4gICAgICB0aGlzLmZ1bGwzRE9iamVjdFRvVXNlLmNoaWxkcmVuLmZpbmQobSA9PiBtLm5hbWUgPT09IGZsb29yUGF0dGVybkluZm8ubWVzaElkTGVmdCkgYXMgTWVzaDtcclxuICAgIHRoaXMuX25vcm1hbGl6ZU1lc2gobWVzaExlZnQpO1xyXG5cclxuICAgIGxldCBtZXNoUmlnaHQ6IE1lc2ggPSBudWxsO1xyXG4gICAgaWYgKGZsb29yUGF0dGVybkluZm8ubWVzaElkUmlnaHQgIT09IG51bGwpIHtcclxuICAgICAgbWVzaFJpZ2h0ID0gdGhpcy5mdWxsM0RPYmplY3RUb1VzZS5jaGlsZHJlbi5maW5kKG0gPT4gbS5uYW1lID09PSBmbG9vclBhdHRlcm5JbmZvLm1lc2hJZFJpZ2h0KSBhcyBNZXNoO1xyXG4gICAgICB0aGlzLl9ub3JtYWxpemVNZXNoKG1lc2hSaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmxvb3JTaXplOiBWZWN0b3IzID0gZmxvb3Iuc2l6ZTtcclxuICAgIGNvbnN0IHBsYW5rU2l6ZTogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4gICAgbWVzaExlZnQuZ2VvbWV0cnkuYm91bmRpbmdCb3guZ2V0U2l6ZShwbGFua1NpemUpO1xyXG5cclxuICAgIGNvbnN0IGl0ZW1zOiBGbG9vclBhdHRlcm5UcmFuc2Zvcm1bXSA9IHRoaXMuX2Zsb29yUGF0dGVyblNlcnZpY2UuZ2VuZXJhdGVQYXR0ZXJuKFxyXG4gICAgICBmbG9vclBhdHRlcm5JbmZvLmZsb29yUGF0dGVybixcclxuICAgICAgcGxhbmtTaXplLFxyXG4gICAgICBmbG9vclNpemUsXHJcbiAgICAgIGZsb29yUGF0dGVybkluZm8uZmxvb3JQYXR0ZXJuRGlyZWN0aW9uLFxyXG4gICAgICBmbG9vclBhdHRlcm5JbmZvLmhlYXJ0TGluZVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBEZWJ1Z2dpbmcgb3B0aW9uXHJcbiAgICAvLyB0aGlzLl9mbG9vclRpbGVJbnRlcnNlY3Rpb25TZXJ2aWNlLnRvZ2dsZURlYnVnKCk7XHJcbiAgICBjb25zdCBmbG9vckNvdW50UmVzdWx0OiBGbG9vckNvdW50UmVzdWx0ID0gdGhpcy5fZmxvb3JUaWxlSW50ZXJzZWN0aW9uU2VydmljZS5jb3VudFRpbGVzKFxyXG4gICAgICBmbG9vci5mbG9vck1lc2gsXHJcbiAgICAgIGl0ZW1zLFxyXG4gICAgICBtZXNoTGVmdC5nZW9tZXRyeSxcclxuICAgICAgKG1lc2hSaWdodCkgPyBtZXNoUmlnaHQuZ2VvbWV0cnkgOiBudWxsLFxyXG4gICAgICB0cnVlXHJcbiAgICApO1xyXG5cclxuICAgIGZsb29yLm1ldGFkYXRhLmZsb29yQ291bnRSZXN1bHQgPSBmbG9vckNvdW50UmVzdWx0O1xyXG5cclxuICAgIGNvbnN0IGxlZnRJdGVtczogRmxvb3JQYXR0ZXJuVHJhbnNmb3JtW10gPSBuZXcgQXJyYXk8Rmxvb3JQYXR0ZXJuVHJhbnNmb3JtPigpO1xyXG4gICAgY29uc3QgcmlnaHRJdGVtczogRmxvb3JQYXR0ZXJuVHJhbnNmb3JtW10gPSBuZXcgQXJyYXk8Rmxvb3JQYXR0ZXJuVHJhbnNmb3JtPigpO1xyXG5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBmbG9vckNvdW50UmVzdWx0LmZpbHRlcmVkKSB7XHJcbiAgICAgIGlmIChpdGVtLmlzTGVmdCkge1xyXG4gICAgICAgIGxlZnRJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJpZ2h0SXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uW10gPSB0aGlzLnNlbGVjdGlvbnM7XHJcbiAgICBsZXQgdmFyaWF0aW9uR2FtZU9iamVjdDogc3RyaW5nO1xyXG4gICAgZm9yIChjb25zdCBzZWxlY3Rpb25LZXkgb2Ygc2VsZWN0aW9uKSB7XHJcbiAgICAgIGlmIChzZWxlY3Rpb25LZXkuZWxlbWVudFR5cGUgPT09ICd2YXJpYXRpb24nKSB7XHJcbiAgICAgICAgdmFyaWF0aW9uR2FtZU9iamVjdCA9IHNlbGVjdGlvbktleS5nYW1lT2JqZWN0O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZsb29yVmFyaWF0aW9uTWF0ZXJpYWw6IGFueTtcclxuICAgIGlmICh2YXJpYXRpb25HYW1lT2JqZWN0ICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX3ZhcmlhdGlvblNlcnZpY2UubG9hZFZhcmlhdGlvbkZvck1hdGVyaWFsKHRoaXMuYXJ0aWNsZUFzc2V0UGF0aCwgdmFyaWF0aW9uR2FtZU9iamVjdCwgZmxvb3IubWV0YWRhdGEuc2NoZW1hKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgZmxvb3JWYXJpYXRpb25NYXRlcmlhbCA9IHJlc3VsdDtcclxuICAgICAgICBjb25zdCB0ZXh0dXJlOiBUZXh0dXJlID0gZmxvb3JWYXJpYXRpb25NYXRlcmlhbC5tYXA7XHJcbiAgICAgICAgaWYgKGZsb29yUGF0dGVybkluZm8uZmxvb3JQYXR0ZXJuRGlyZWN0aW9uID09PSBGbG9vclBhdHRlcm5EaXJlY3Rpb24uTFlJTkcpIHtcclxuICAgICAgICAgIHRleHR1cmUucm90YXRpb24gPSBNYXRoLlBJIC8gMjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGV4dHVyZS5yb3RhdGlvbiA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1lc2hMZWZ0TWF0ZXJpYWw6IE1hdGVyaWFsIHwgTWF0ZXJpYWxbXSA9IG1lc2hMZWZ0Lm1hdGVyaWFsO1xyXG4gICAgICAgIGNvbnN0IHBsYW5rTWF0ZXJpYWwgPSBuZXcgTWVzaFN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgY29sb3I6IDB4RkYwMDAwLFxyXG4gICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgICAgICBvcGFjaXR5OiAwLjhcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgcGxhbmtzTGVmdCA9XHJcbiAgICAgICAgICB0aGlzLl9pbnN0YW5jZWRNZXNoRnJvbUZsb29yUGF0dGVyblRyYW5zZm9ybShtZXNoTGVmdC5nZW9tZXRyeSwgbGVmdEl0ZW1zLCBwbGFua01hdGVyaWFsKTtcclxuICAgICAgICBsZXQgcGxhbmtzUmlnaHQ6IEluc3RhbmNlZE1lc2g7XHJcbiAgICAgICAgaWYgKG1lc2hSaWdodCkge1xyXG4gICAgICAgICAgY29uc3QgbWVzaFJpZ2h0TWF0ZXJpYWw6IE1hdGVyaWFsIHwgTWF0ZXJpYWxbXSA9IG1lc2hSaWdodC5tYXRlcmlhbDtcclxuICAgICAgICAgIHBsYW5rc1JpZ2h0ID0gdGhpcy5faW5zdGFuY2VkTWVzaEZyb21GbG9vclBhdHRlcm5UcmFuc2Zvcm0obWVzaFJpZ2h0Lmdlb21ldHJ5LCByaWdodEl0ZW1zLCBwbGFua01hdGVyaWFsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VzdG9tRmxvb3JXcmFwcGVyID0gbmV3IE9iamVjdDNEKCk7XHJcbiAgICAgICAgY3VzdG9tRmxvb3JXcmFwcGVyLmFkZChwbGFua3NMZWZ0KTtcclxuICAgICAgICBpZiAocGxhbmtzUmlnaHQpIHtcclxuICAgICAgICAgIGN1c3RvbUZsb29yV3JhcHBlci5hZGQocGxhbmtzUmlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmbG9vci5mbG9vck9iamVjdCA9IGN1c3RvbUZsb29yV3JhcHBlcjtcclxuICAgICAgICB0aGlzLl9mbG9vclNlcnZpY2UuY29uZmlndXJhYmxlRmxvb3IgPSBjdXN0b21GbG9vcldyYXBwZXI7XHJcblxyXG4gICAgICAgIC8vIE5vdyB3ZSB1cGRhdGUgdGhlIGRlZmF1bHQgZmxvb3JwbGFuZSB3aXRoIHRoZSBtZXNoXHJcbiAgICAgICAgZmxvb3IuZmxvb3JNYXRlcmlhbCA9IGZsb29yVmFyaWF0aW9uTWF0ZXJpYWw7XHJcbiAgICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICAgICAgICAvLyBFbWl0IHVwZGF0ZSB0b2dnbGVGbG9vckZyYW1lIGV2ZW50LlxyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5GbG9vclJlYnVpbGQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luc3RhbmNlZE1lc2hGcm9tRmxvb3JQYXR0ZXJuVHJhbnNmb3JtKGdlb206IEJ1ZmZlckdlb21ldHJ5LCBwYXR0ZXJuOiBBcnJheTxGbG9vclBhdHRlcm5UcmFuc2Zvcm0+LCBtYXRlcmlhbDogTWF0ZXJpYWwgfCBNYXRlcmlhbFtdKSB7XHJcbiAgICBpZiAocGF0dGVybi5sZW5ndGggPD0gMCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IHRhcmdldFBsYW5rTWVzaCA9IG5ldyBJbnN0YW5jZWRNZXNoKGdlb20sIG1hdGVyaWFsLCBwYXR0ZXJuLmxlbmd0aCk7XHJcbiAgICBjb25zdCBkdW1teSA9IG5ldyBPYmplY3QzRCgpO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHBhdHRlcm4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgaXRlbTogRmxvb3JQYXR0ZXJuVHJhbnNmb3JtID0gcGF0dGVybltpXTtcclxuICAgICAgY29uc3QgcG9zaXRpb246IFZlY3RvcjMgPSBpdGVtLnBvc2l0aW9uO1xyXG4gICAgICBwb3NpdGlvbi55ID0gMC4wMjtcclxuICAgICAgY29uc3Qgcm90YXRpb246IFZlY3RvcjMgPSBpdGVtLnJvdGF0aW9uO1xyXG4gICAgICBkdW1teS5wb3NpdGlvbi5zZXQocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueik7XHJcbiAgICAgIGR1bW15LnJvdGF0aW9uLnNldChyb3RhdGlvbi54LCByb3RhdGlvbi55LCByb3RhdGlvbi56KTtcclxuICAgICAgZHVtbXkudXBkYXRlTWF0cml4KCk7XHJcblxyXG4gICAgICB0YXJnZXRQbGFua01lc2guc2V0TWF0cml4QXQoaSwgZHVtbXkubWF0cml4KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXRQbGFua01lc2g7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfZ2VuZXJhdGVGbG9vclBhdHRlcm5JbmZvKGl0ZW06IEl0ZW0sIGZsb29yUGF0dGVybjogRmxvb3JQYXR0ZXJuKTogRmxvb3JQYXR0ZXJuSW5mbyB7XHJcbiAgICB0aGlzLl9nZW5lcmF0ZVNlbGVjdGVkSW5NZXRhZGF0YShpdGVtKTtcclxuICAgIGNvbnN0IGluZm86IEZsb29yUGF0dGVybkluZm8gPSB7XHJcbiAgICAgIG1lc2hJZExlZnQ6IG51bGwsXHJcbiAgICAgIG1lc2hJZFJpZ2h0OiBudWxsLFxyXG4gICAgICBmbG9vclBhdHRlcm46IEZsb29yUGF0dGVybi5OT1JNQUwsXHJcbiAgICAgIGZsb29yUGF0dGVybkRpcmVjdGlvbjogRmxvb3JQYXR0ZXJuRGlyZWN0aW9uLkxZSU5HLFxyXG4gICAgICBoZWFydExpbmU6IDBcclxuICAgIH07XHJcblxyXG4gICAgbGV0IGZsb29yR2FtZU9iamVjdDogc3RyaW5nO1xyXG4gICAgZm9yIChjb25zdCBzZWxlY3Rpb25LZXkgb2YgdGhpcy5zZWxlY3Rpb25zKSB7XHJcbiAgICAgIGlmIChzZWxlY3Rpb25LZXkubm9kZVR5cGUgPT09ICdBUlQnKSB7XHJcbiAgICAgICAgZmxvb3JHYW1lT2JqZWN0ID0gc2VsZWN0aW9uS2V5LmdhbWVPYmplY3Q7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbmZvLmhlYXJ0TGluZSA9IE51bWJlcih0aGlzLl9mbG9vclNlcnZpY2UuZmxvb3JDZW50ZXJMaW5lWEF4aXMpO1xyXG5cclxuICAgIC8vIFRPRE8gY29udmVydCBmbG9vclBhdHRlcm5EaXJlY3Rpb24gdG8gdHlwZSBudW1iZXIgdG8gbGV0IHRoZSB1c2VyIHVzZSBjdXN0b20gcm90YXRpb24sIGZvciBub3cgdGhlcmUgYXJlIG9ubHkgMiBvcHRpb25zIGJhc2VkIG9uIGVudW1cclxuICAgIGlmICh0aGlzLl9mbG9vclNlcnZpY2UuZmxvb3JSb3RhdGlvbiA9PT0gMCkge1xyXG4gICAgICBpbmZvLmZsb29yUGF0dGVybkRpcmVjdGlvbiA9IEZsb29yUGF0dGVybkRpcmVjdGlvbi5MWUlORztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGluZm8uZmxvb3JQYXR0ZXJuRGlyZWN0aW9uID0gRmxvb3JQYXR0ZXJuRGlyZWN0aW9uLlNUQU5ESU5HO1xyXG4gICAgfVxyXG4gICAgaW5mby5mbG9vclBhdHRlcm4gPSBmbG9vclBhdHRlcm47XHJcbiAgICBpbmZvLm1lc2hJZExlZnQgPSBmbG9vckdhbWVPYmplY3Q7XHJcbiAgICBpZiAoaW5mby5mbG9vclBhdHRlcm4gPT09IEZsb29yUGF0dGVybi5IT040NSB8fCBpbmZvLmZsb29yUGF0dGVybiA9PT0gRmxvb3JQYXR0ZXJuLkhPTjYwKSB7XHJcbiAgICAgIGluZm8ubWVzaElkUmlnaHQgPSBgcl8ke2Zsb29yR2FtZU9iamVjdH1gO1xyXG4gICAgfVxyXG4gICAgaWYgKGluZm8uZmxvb3JQYXR0ZXJuID09PSBGbG9vclBhdHRlcm4uSEVSUklOR0JPTkUpIHtcclxuICAgICAgaW5mby5tZXNoSWRSaWdodCA9IGluZm8ubWVzaElkTGVmdDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb25zdCBhZm1ldGluZyA9IHNlbGVjdGVkLmZpbmQocyA9PiBzLnF1ZXN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdwbGFuayBhZm1ldGluZycpO1xyXG4gICAgLy8gbGV0IGFmbWV0aW5nU3RyaW5nOiBzdHJpbmcgPSBhZm1ldGluZy5hbnN3ZXIudG9Mb3dlckNhc2UoKTtcclxuICAgIC8vIGFmbWV0aW5nU3RyaW5nID0gYWZtZXRpbmdTdHJpbmcuc3Vic3RyKGFmbWV0aW5nU3RyaW5nLmxhc3RJbmRleE9mKCcgJykgKyAxKTtcclxuICAgIC8vIGNvbnN0IGxlZ1BhdHJvb25BbnN3ZXIgPSBzZWxlY3RlZC5maW5kKHMgPT4gcy5xdWVzdGlvbi50b0xvd2VyQ2FzZSgpID09PSAnbGVnIHBhdHJvb24nKS5hbnN3ZXIudG9Mb3dlckNhc2UoKTtcclxuICAgIC8vIGxldCBsZWdQYXRyb29uU3RyaW5nID0gJyc7XHJcbiAgICAvLyBjb25zdCBoYXJ0bGluZVR5cGUgPSBzZWxlY3RlZC5maW5kKHMgPT4gcy5xdWVzdGlvbi50b0xvd2VyQ2FzZSgpID09PSAnaGFydGxpam4nKTtcclxuICAgIC8vXHJcbiAgICAvLyBpZiAoaGFydGxpbmVUeXBlICYmIGhhcnRsaW5lVHlwZS5hbnN3ZXIudG9Mb3dlckNhc2UoKSA9PT0gJ2FhbmdlcGFzdCcpIHtcclxuICAgIC8vICAgY29uc3QgaGFydGxpbmVWYWx1ZSA9IHNlbGVjdGVkLmZpbmQocyA9PiBzLnF1ZXN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdoYXJ0bGlqbl9hYW5nZXBhc3QnKTtcclxuICAgIC8vICAgaWYgKGhhcnRsaW5lVmFsdWUgJiYgaGFydGxpbmVWYWx1ZS51c2VySW5wdXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAvLyAgICAgaW5mby5oZWFydExpbmUgPSBOdW1iZXIoaGFydGxpbmVWYWx1ZS51c2VySW5wdXRWYWx1ZSk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICAgIC8vXHJcbiAgICAvL1xyXG4gICAgLy8gc3dpdGNoICh0cnVlKSB7XHJcbiAgICAvLyAgIGNhc2UgbGVnUGF0cm9vbkFuc3dlci5pbmRleE9mKCdyZWNodCcpICE9PSAtMTpcclxuICAgIC8vICAgICBsZWdQYXRyb29uU3RyaW5nID0gJzkwJztcclxuICAgIC8vICAgICBpbmZvLmZsb29yUGF0dGVybiA9IEZsb29yUGF0dGVybi5OT1JNQUw7XHJcbiAgICAvLyAgICAgYnJlYWs7XHJcbiAgICAvLyAgIGNhc2UgbGVnUGF0cm9vbkFuc3dlci5pbmRleE9mKCdncmFhdCcpICE9PSAtMTpcclxuICAgIC8vICAgICBsZWdQYXRyb29uU3RyaW5nID0gJzkwJztcclxuICAgIC8vICAgICBpbmZvLmZsb29yUGF0dGVybiA9IEZsb29yUGF0dGVybi5IRVJSSU5HQk9ORTtcclxuICAgIC8vICAgICBicmVhaztcclxuICAgIC8vICAgY2FzZSBsZWdQYXRyb29uQW5zd2VyLmluZGV4T2YoJzYwJykgIT09IC0xOlxyXG4gICAgLy8gICAgIGxlZ1BhdHJvb25TdHJpbmcgPSAnNjAnO1xyXG4gICAgLy8gICAgIGluZm8uZmxvb3JQYXR0ZXJuID0gRmxvb3JQYXR0ZXJuLkhPTjYwO1xyXG4gICAgLy8gICAgIGJyZWFrO1xyXG4gICAgLy8gICBjYXNlIGxlZ1BhdHJvb25BbnN3ZXIuaW5kZXhPZignNDUnKSAhPT0gLTE6XHJcbiAgICAvLyAgICAgbGVnUGF0cm9vblN0cmluZyA9ICc0NSc7XHJcbiAgICAvLyAgICAgaW5mby5mbG9vclBhdHRlcm4gPSBGbG9vclBhdHRlcm4uSE9ONDU7XHJcbiAgICAvLyAgICAgYnJlYWs7XHJcbiAgICAvLyB9XHJcbiAgICAvL1xyXG4gICAgLy8gaW5mby5tZXNoSWRMZWZ0ID0gYCR7YWZtZXRpbmdTdHJpbmd9XyR7bGVnUGF0cm9vblN0cmluZ31gO1xyXG4gICAgLy8gaWYgKCBpbmZvLmZsb29yUGF0dGVybiA9PT0gRmxvb3JQYXR0ZXJuLkhPTjQ1IHx8IGluZm8uZmxvb3JQYXR0ZXJuID09PSBGbG9vclBhdHRlcm4uSE9ONjApIHtcclxuICAgIC8vICAgaW5mby5tZXNoSWRSaWdodCA9IGByXyR7YWZtZXRpbmdTdHJpbmd9XyR7bGVnUGF0cm9vblN0cmluZ31gO1xyXG4gICAgLy8gfVxyXG4gICAgLy9cclxuICAgIC8vIGlmIChpbmZvLmZsb29yUGF0dGVybiA9PT0gRmxvb3JQYXR0ZXJuLkhFUlJJTkdCT05FKSB7XHJcbiAgICAvLyAgIGluZm8ubWVzaElkUmlnaHQgPSBpbmZvLm1lc2hJZExlZnQ7XHJcbiAgICAvLyB9XHJcbiAgICAvL1xyXG4gICAgLy8gY29uc3QgbGVnUmljaHRpbmdBbnN3ZXIgPSBzZWxlY3RlZC5maW5kKHMgPT4gcy5xdWVzdGlvbi50b0xvd2VyQ2FzZSgpID09PSAnbGVnIHJpY2h0aW5nJykuYW5zd2VyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAvLyBpbmZvLmZsb29yUGF0dGVybkRpcmVjdGlvbiA9IChsZWdSaWNodGluZ0Fuc3dlci5pbmRleE9mKCd2ZXJ0aWNhYWwnKSAhPT0gLTEpID8gRmxvb3JQYXR0ZXJuRGlyZWN0aW9uLlNUQU5ESU5HIDogRmxvb3JQYXR0ZXJuRGlyZWN0aW9uLkxZSU5HO1xyXG5cclxuICAgIHJldHVybiBpbmZvO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2VuZXJhdGVTZWxlY3RlZEluTWV0YWRhdGEoaXRlbTogSXRlbSk6IHZvaWQge1xyXG4gICAgY29uc3QgY2xvbmVTZWxlY3Rpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGlvbnMpKTtcclxuICAgIGNsb25lU2VsZWN0aW9ucy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICBzLmltYWdlRGF0YSA9IHVuZGVmaW5lZDtcclxuICAgICAgcy5pbWFnZURhdGFMYXN0QW5zd2VyID0gdW5kZWZpbmVkO1xyXG4gICAgICBpZiAocy5hZGRhYmxlcykge1xyXG4gICAgICAgIHMuYWRkYWJsZXMuZm9yRWFjaChhID0+IHtcclxuICAgICAgICAgIGEuaW1hZ2VEYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGl0ZW0ubWV0YWRhdGEuZGVjb3MgPSBBcnJheS5mcm9tKHRoaXMuX2lPbmUuZGVjb05vZGVzKTtcclxuICAgIGl0ZW0ubWV0YWRhdGEuc2VsZWN0aW9ucyA9IGNsb25lU2VsZWN0aW9ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX25vcm1hbGl6ZU1lc2gobWVzaDogTWVzaCkge1xyXG4gICAgY29uc3QgbWVzaFNpemUgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgbWVzaC5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTtcclxuICAgIG1lc2guZ2VvbWV0cnkuYm91bmRpbmdCb3guZ2V0U2l6ZShtZXNoU2l6ZSk7XHJcbiAgICBpZiAobWVzaFNpemUueiA+IG1lc2hTaXplLngpIHtcclxuICAgICAgbWVzaC5nZW9tZXRyeS5yb3RhdGVZKE1hdGguUEkgLyAyKTtcclxuICAgIH1cclxuICAgIG1lc2guZ2VvbWV0cnkuY2VudGVyKCk7XHJcbiAgICBtZXNoLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpO1xyXG4gICAgY29uc3QgY2VudGVyID0gbmV3IFZlY3RvcjMoKTtcclxuICAgIG1lc2guZ2VvbWV0cnkuYm91bmRpbmdCb3guZ2V0Q2VudGVyKGNlbnRlcik7XHJcbiAgICBtZXNoLnBvc2l0aW9uLmNvcHkoY2VudGVyKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N0YXJ0VG9CdWlsZEZyb21Db25maWd1cmF0b3IobWV0YWRhdGE6IE1ldGFkYXRhKTogUHJvbWlzZTxDdXN0b21GbG9vckdyb3VwUmVzdWx0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGFydFRvQnVpbGQobnVsbCwgbWV0YWRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfc2V0SW5zdGFuY2VUb0NvbmZpZ3VyZShyZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQpOiBQcm9taXNlPEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+IHtcclxuICAgIGlmIChyZXN1bHQucmVzdWx0VHlwZSAhPT0gUmVzdWx0VHlwZS5UaW1lb3V0KSB7XHJcbiAgICAgIGlmIChyZXN1bHQubWV0YURhdGEuaXRlbUlkKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faU9uZS5zZXRJbnN0YW5jZShyZXN1bHQubWV0YURhdGEuaXRlbUlkKVxyXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lcnJvck1lc3NhZ2VzLnB1c2gobmV3IEVycm9yTWVzc2FnZShlKSk7XHJcbiAgICAgICAgICAgIFByb21pc2UucmVqZWN0KHJlc3VsdCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuX2lPbmUuaW5pdE5vZGVJbnN0YW5jZShyZXN1bHQubWV0YURhdGEuaXRlbUlkZW50aWZpZXIpXHJcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgcmVzdWx0LmVycm9yTWVzc2FnZXMucHVzaChuZXcgRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICAgICAgUHJvbWlzZS5yZWplY3QocmVzdWx0KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmVzdWx0Lm1ldGFEYXRhLml0ZW1JZCA9IHJlc3BvbnNlLnJlc3VsdE9iamVjdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgUHJvbWlzZS5yZWplY3QocmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faU9uZS5zZXRJbnN0YW5jZShyZXN1bHQubWV0YURhdGEuaXRlbUlkKVxyXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lcnJvck1lc3NhZ2VzLnB1c2gobmV3IEVycm9yTWVzc2FnZShlKSk7XHJcbiAgICAgICAgICAgIFByb21pc2UucmVqZWN0KHJlc3VsdCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9wcmVwYXJlU2VsZWN0aW9uc0FuZERlY29zKHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCk6IFByb21pc2U8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4ge1xyXG4gICAgdGhpcy5fcmVzZXQoKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbnNBbmREZWNvUHJvbWlzZTogUHJvbWlzZTxhbnk+W10gPSBbXTtcclxuICAgICAgc2VsZWN0aW9uc0FuZERlY29Qcm9taXNlLnB1c2godGhpcy5faU9uZS5nZXRTZWxlY3Rpb25zQXN5bmMoKSwgdGhpcy5faU9uZS5nZXREZWNvc0FzeW5jKCkpO1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChzZWxlY3Rpb25zQW5kRGVjb1Byb21pc2UpO1xyXG4gICAgICB0aGlzLl9wcmVsb2FkTWF0ZXJpYWxzKHJlc3VsdC5tZXRhRGF0YS5zY2hlbWEpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2lPbmUuc2VsZWN0aW9ucy5sZW5ndGggPCAyKSB7IC8vIG5vIHNlbGVjdGlvbnMsIG9ubHkgc2VsZWN0aW9uIG9mIHR5cGUgJ0FSVCdcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAocmVzdWx0LnJlc3VsdFR5cGUgIT09IFJlc3VsdFR5cGUuQXJ0aWNsZU5vdEZvdW5kICYmICFyZXN1bHQubWV0YURhdGEub3JpZ2luYWxJdGVtSWQpIHsgLy8gYXJ0aWNsZSBmb3VuZCwgc28gaW5pdCB0aGF0IGZpcnN0XHJcbiAgICAgICAgICByZXN1bHQubWV0YURhdGEub3JpZ2luYWxJdGVtSWQgPSByZXN1bHQubWV0YURhdGEuaXRlbUlkO1xyXG4gICAgICAgICAgcmVzdWx0Lm1ldGFEYXRhLml0ZW1JZCA9IG51bGw7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9zZXRJbnN0YW5jZVRvQ29uZmlndXJlKHJlc3VsdCk7XHJcbiAgICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuTm9TZWxlY3Rpb25zO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRUb0J1aWxkKHJlc3VsdCk7IC8vICdyZXN0YXJ0JyB0aGUgYnVpbGRcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZ2V0U2VsZWN0aW9uc0FuZERlY29zRnJvbU1ldGFkYXRhKHJlc3VsdCk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX2lPbmUuc2VsZWN0aW9ucy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICBzLnNjaGVtYSA9IHJlc3VsdC5tZXRhRGF0YS5zY2hlbWE7XHJcbiAgICAgIHMuaW5zdGFuY2VJZCA9IHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQ7XHJcbiAgICB9KTsgLy8gYWRkIHNjaGVtYSBmb3IgbWF0ZXJpYWwgY3JlYXRpb25cclxuICAgIHRoaXMuX2hhbmRsZVNlbGVjdGlvbnNSZWNlaXZlZChyZXN1bHQubWV0YURhdGEpO1xyXG4gICAgdGhpcy5fbGlua1NlbGVjdGlvbnNBbmREZWNvcygpO1xyXG4gICAgdGhpcy5fcHJlcGFyZVRoZVNlbGVjdGlvbnMocmVzdWx0Lm1ldGFEYXRhLml0ZW1JZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVsb2FkTWF0ZXJpYWxzKHNjaGVtYTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl92YXJpYXRpb25DYWNoZVNlcnZpY2UucHJlbG9hZFZhcmlhdGlvbnMoXHJcbiAgICAgIHNjaGVtYSwgdGhpcy5faU9uZS5kZWNvTm9kZXNcclxuICAgICAgICAuZmlsdGVyKGQgPT4gZC5nYW1lT2JqZWN0TmFtZSAmJiBkLnR5cGUgPT09IERlY29Ob2RlVHlwZS5WYXJpYXRpb24pXHJcbiAgICAgICAgLm1hcChkID0+IGQuZ2FtZU9iamVjdE5hbWUpLCB0aGlzLmFydGljbGVBc3NldFBhdGgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0U2VsZWN0aW9uc0FuZERlY29zRnJvbU1ldGFkYXRhKHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCk6IHZvaWQge1xyXG4gICAgaWYgKHJlc3VsdC5tZXRhRGF0YS5zZWxlY3Rpb25zICYmIHJlc3VsdC5tZXRhRGF0YS5kZWNvcykge1xyXG4gICAgICB0aGlzLl9pT25lLnNldFNlbGVjdGlvbnMocmVzdWx0Lm1ldGFEYXRhLnNlbGVjdGlvbnMpO1xyXG4gICAgICB0aGlzLl9pT25lLnNldERlY29Ob2RlcyhBcnJheS5mcm9tKHJlc3VsdC5tZXRhRGF0YS5kZWNvcy52YWx1ZXMoKSkpO1xyXG4gICAgICByZXN1bHQubWV0YURhdGEub2Jzb2xldGUgPSB0cnVlO1xyXG4gICAgICBpZiAocmVzdWx0LnJlc3VsdFR5cGUgIT09IFJlc3VsdFR5cGUuQ29uZmlndXJhdGlvbk5vdEZpeGVkKSB7XHJcbiAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLk9ic29sZXRlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5faU9uZS5zZWxlY3Rpb25zLmxlbmd0aCA8IDIgfHwgdGhpcy5faU9uZS5kZWNvTm9kZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmVzdWx0LmVycm9yTWVzc2FnZXMucHVzaChuZXcgRXJyb3JNZXNzYWdlKCdOT19TRUxFQ1RJT05TX09SX0RFQ09TJywgJ05PX1NFTEVDVElPTlNfT1JfREVDT1NfSU5GTycpKTtcclxuICAgICAgfVxyXG4gICAgICB0aHJvdyByZXN1bHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZWxlY3Rpb25QdWJsaXNoZWQoc2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoKHNlbGVjdGlvbi5oaWVyYXJjaGljYWxQdWJsaWNhdGlvbkNvZGUgPT09IG51bGwpIHx8ICgoc2VsZWN0aW9uLmhpZXJhcmNoaWNhbFB1YmxpY2F0aW9uQ29kZSAmIDIpID4gMCkpICYmXHJcbiAgICAgIChcclxuICAgICAgICAoc2VsZWN0aW9uLm5vZGVUeXBlID09PSBOb2RlVHlwZS5RdWVzdGlvbiAmJlxyXG4gICAgICAgICAgKCgoc2VsZWN0aW9uLnF1ZXN0aW9uUHVibGljYXRpb25Db2RlICYgMikgPiAwKSB8fFxyXG4gICAgICAgICAgICBzZWxlY3Rpb24ucXVlc3Rpb25QdWJsaWNhdGlvbkNvZGUgPT09IG51bGwgfHwgc2VsZWN0aW9uLnF1ZXN0aW9uUHVibGljYXRpb25Db2RlID09PSB1bmRlZmluZWQpKSB8fFxyXG4gICAgICAgIChzZWxlY3Rpb24ubm9kZVR5cGUgPT09IE5vZGVUeXBlLkFuc3dlciAmJlxyXG4gICAgICAgICAgKCgoc2VsZWN0aW9uLmFuc3dlclB1YmxpY2F0aW9uQ29kZSAmIDIpID4gMCkgfHxcclxuICAgICAgICAgICAgc2VsZWN0aW9uLmFuc3dlclB1YmxpY2F0aW9uQ29kZSA9PT0gbnVsbCB8fCBzZWxlY3Rpb24uYW5zd2VyUHVibGljYXRpb25Db2RlID09PSB1bmRlZmluZWQpKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlSW50ZWdyYXRpb24oaW5zdGFuY2VJZDogc3RyaW5nLCBvYmplY3Q6IEl0ZW0pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9pbnRlZ3JhdGlvbkVuYWJsZWQgJiYgIW9iamVjdC5tZXRhZGF0YS5vYnNvbGV0ZSkge1xyXG4gICAgICBjb25zdCBnZW5lcmljVmFyaWF0aW9uU2VsZWN0aW9uczogU2VsZWN0aW9uW10gPVxyXG4gICAgICAgIHRoaXMuX2lPbmUuc2VsZWN0aW9ucy5maWx0ZXIocyA9PiBzLmRlY29Ob2RlICYmIHMuZ2VuZXJpYyAmJlxyXG4gICAgICAgICAgKHMuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24gJiYgKHMuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24udHlwZSA9PT0gRGVjb05vZGVUeXBlLlZhcmlhdGlvbik7XHJcbiAgICAgIGlmIChnZW5lcmljVmFyaWF0aW9uU2VsZWN0aW9ucyAmJiBnZW5lcmljVmFyaWF0aW9uU2VsZWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5fdXBzZXJ0RnVybml0dXJlKGluc3RhbmNlSWQsIHtcclxuICAgICAgICAgIFZhcmlhdGlvbjogKGdlbmVyaWNWYXJpYXRpb25TZWxlY3Rpb25zWzBdLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uLmJyYW5kSWQsXHJcbiAgICAgICAgICBWYXJpYXRpb25EZXNjcmlwdGlvbjogKGdlbmVyaWNWYXJpYXRpb25TZWxlY3Rpb25zWzBdLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uLmdhbWVPYmplY3ROYW1lLFxyXG4gICAgICAgICAgU3VwcGxpZXJBcnRpY2xlTnI6IChnZW5lcmljVmFyaWF0aW9uU2VsZWN0aW9uc1swXS5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbi5zdXBwbGllckFydGljbGVOclxyXG4gICAgICAgIH0sIG9iamVjdCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5faGFuZGxlSW50ZWdyYXRpb25Db25uZWN0aW9ucyhpbnN0YW5jZUlkLCBvYmplY3QpO1xyXG4gICAgICB0aGlzLl91cHNlcnRGdXJuaXR1cmUoaW5zdGFuY2VJZCwge1Bvc2l0aW9uOiBvYmplY3QucG9zaXRpb24sIFJvdGF0aW9uOiBvYmplY3Qucm90YXRpb259LCBvYmplY3QpO1xyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLmVtaXQoTWVzc2FnZVR5cGUuQ29uZmlndXJhdGlvbkNoYW5nZWQsIHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zKTtcclxuICAgICAgLy8gY29uc29sZS5sb2codGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc3RhcnRXaXRoTmV3KGNsZWFudXA6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucy5sZW5ndGggPSAwO1xyXG4gICAgaWYgKGNsZWFudXApIHtcclxuICAgICAgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXMuZm9yRWFjaChhID0+IFV0aWxzLkRpc3Bvc2VPYmplY3QoYSkpO1xyXG4gICAgICB0aGlzLl9wbGFjZWRBZGRhYmxlcy5mb3JFYWNoKGEgPT4gVXRpbHMuRGlzcG9zZU9iamVjdChhKSk7XHJcbiAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NsZWFudXBCZWZvcmVQcmVzZXRMb2FkKCk6IHZvaWQge1xyXG4gICAgTWF0ZXJpYWxVdGlscy5DbGVhckNhY2hlcygpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDbGVhciB2YXJpYWJsZXMgdG8gbGV0IG9iamVjdHMgYmVpbmcgZGlzcG9zZWQgcHJvcGVybHlcclxuICAgKi9cclxuICBwcml2YXRlIF9oYW5kbGVBZnRlclByZXNldExvYWQoKTogdm9pZCB7XHJcbiAgICAvLyBtYWtlIHN1cmUgbm90aGluZyBpcyBrZWVwaW5nIGEgbG9ja1xyXG4gICAgdGhpcy5faU9uZS5zZXRJbnN0YW5jZShudWxsKTtcclxuICAgIC8vIGNsZWFuXHJcbiAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbGVhbnVwKCk6IHZvaWQge1xyXG4gICAgVXRpbHMuRGlzcG9zZU9iamVjdCh0aGlzLmZ1bGwzRE9iamVjdFRvVXNlKTtcclxuICAgIHRoaXMuZnVsbDNET2JqZWN0VG9Vc2UgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCA9IHVuZGVmaW5lZDtcclxuICAgIFV0aWxzLkRpc3Bvc2VPYmplY3QodGhpcy5fYWN0aXZlQ2hpbGRFbGVtZW50KTtcclxuICAgIHRoaXMuX2FjdGl2ZUNoaWxkRWxlbWVudCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLl9wbGFjZWRBZGRhYmxlcy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5fYWRqdXN0YWJsZXMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuX2FkZGFibGVzLmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9lbmFibGVJbnRlZ3JhdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuX2ludGVncmF0aW9uRW5hYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVJdGVtUmVtb3ZlZEZyb21TY2VuZShyZXN1bHQ6IHsgaXRlbTogYW55LCBhZGRlZFRvR3JvdXA6IGJvb2xlYW4gfSk6IHZvaWQge1xyXG4gICAgaWYgKHJlc3VsdC5hZGRlZFRvR3JvdXApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlc3VsdC5pdGVtIGluc3RhbmNlb2YgSXRlbSAmJiAhKHJlc3VsdC5pdGVtIGluc3RhbmNlb2YgRmxvb3JQaW4gfHwgcmVzdWx0Lml0ZW0gaW5zdGFuY2VvZiBXYWxsUGluKSkge1xyXG4gICAgICBpZiAodGhpcy5faW50ZWdyYXRpb25FbmFibGVkICYmIHJlc3VsdC5pdGVtLnVzZXJEYXRhKSB7XHJcbiAgICAgICAgY29uc3QgaWQ6IHN0cmluZyA9IHJlc3VsdC5pdGVtLnVzZXJEYXRhLml0ZW1JZCA/IHJlc3VsdC5pdGVtLnVzZXJEYXRhLml0ZW1JZCA6IHJlc3VsdC5pdGVtLnV1aWQ7XHJcbiAgICAgICAgdGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMuc3BsaWNlKHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zLmZpbmRJbmRleChmID0+IGYuSWQgPT09IGlkKSwgMSk7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLkNvbmZpZ3VyYXRpb25DaGFuZ2VkLCB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucyk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2NsZWFyRWxlbWVudHMocmVzdWx0Lml0ZW0pO1xyXG4gICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbGVhckVsZW1lbnRzKGl0ZW06IEl0ZW0pOiB2b2lkIHtcclxuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgQ3VzdG9tRmxvb3JJdGVtICYmIGl0ZW0udXNlckRhdGEgJiYgaXRlbS51c2VyRGF0YS5pdGVtSWQpIHtcclxuICAgICAgdGhpcy5iYXNlRWxlbWVudE5vZGVJZCA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5fb3JpZ2luYWxFbGVtZW50UG9zaXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgICB0aGlzLl9lbGVtZW50U2VydmljZS5yZW1vdmVFbGVtZW50KGl0ZW0udXNlckRhdGEuaXRlbUlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUludGVncmF0aW9uQ29ubmVjdGlvbnMoaWQ6IHN0cmluZywgb2JqZWN0OiBJdGVtKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYXJ0czogRnVybml0dXJlUGFydEludGVncmF0aW9uW10gPSBbXTtcclxuICAgIGNvbnN0IGNoaWxkUGFydHM6IE9iamVjdDNEW10gPSBvYmplY3QuY29uZmlndXJhYmxlID8gb2JqZWN0LmNoaWxkcmVuIDogW29iamVjdF07XHJcbiAgICBjb25zdCBsZW46IG51bWJlciA9IGNoaWxkUGFydHMubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBjb25zdCBjaGlsZDogYW55ID0gPEN1c3RvbU9iamVjdDNEPmNoaWxkUGFydHNbaV07XHJcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb246IEZ1cm5pdHVyZVBhcnRJbnRlZ3JhdGlvbiA9IG5ldyBGdXJuaXR1cmVQYXJ0SW50ZWdyYXRpb24oKTtcclxuICAgICAgY29uc3QgdmFyaWF0aW9uczogRnVybml0dXJlUGFydFZhcmlhdGlvbltdID0gW107XHJcbiAgICAgIGlmIChjaGlsZC51c2VyRGF0YSAmJiBjaGlsZC51c2VyRGF0YS5zZWxlY3Rpb24gJiYgY2hpbGQudXNlckRhdGEuc2VsZWN0aW9uLmRlY29Ob2RlKSB7XHJcbiAgICAgICAgY29ubmVjdGlvbi5JZCA9IGNoaWxkUGFydHMuZmluZEluZGV4KGMgPT4gYyA9PT0gY2hpbGQpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgY29ubmVjdGlvbi5TdXBwbGllckFydGljbGVOciA9IGNoaWxkLnVzZXJEYXRhLnNlbGVjdGlvbi5zdXBwbGllckFydGljbGVOcjtcclxuICAgICAgICBjb25uZWN0aW9uLkJyYW5kSWRlbnRpZmllciA9IGNoaWxkLnVzZXJEYXRhLnNlbGVjdGlvbi5kZWNvTm9kZS5icmFuZElkO1xyXG4gICAgICAgIGNvbm5lY3Rpb24uQnJhbmREZXNjcmlwdGlvbiA9IGNoaWxkLnVzZXJEYXRhLnNlbGVjdGlvbi5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZTtcclxuICAgICAgICBjb25uZWN0aW9uLlBvc2l0aW9uID0gY2hpbGQucG9zaXRpb247XHJcbiAgICAgICAgY29ubmVjdGlvbi5Sb3RhdGlvbiA9IGNoaWxkLnJvdGF0aW9uO1xyXG4gICAgICAgIGlmIChjaGlsZC51c2VyRGF0YS5zZWxlY3Rpb24udmFyaWF0aW9ucykge1xyXG4gICAgICAgICAgaWYgKGNoaWxkLnVzZXJEYXRhLnNlbGVjdGlvbi52YXJpYXRpb25zLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YXJpYXRpb246IGFueSA9IGNoaWxkLnVzZXJEYXRhLnNlbGVjdGlvbi52YXJpYXRpb25zWzBdO1xyXG4gICAgICAgICAgICBjb25uZWN0aW9uLlZhcmlhdGlvbiA9IHZhcmlhdGlvbi5icmFuZElkO1xyXG4gICAgICAgICAgICBjb25uZWN0aW9uLlZhcmlhdGlvbkRlc2NyaXB0aW9uID0gdmFyaWF0aW9uLmdhbWVPYmplY3ROYW1lO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjaGlsZC51c2VyRGF0YS5zZWxlY3Rpb24udmFyaWF0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHZhcmlhdGlvbjogYW55ID0gY2hpbGQudXNlckRhdGEuc2VsZWN0aW9uLnZhcmlhdGlvbnNbal07XHJcbiAgICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uUGFydDogRnVybml0dXJlUGFydFZhcmlhdGlvbiA9IG5ldyBGdXJuaXR1cmVQYXJ0VmFyaWF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgdmFyaWF0aW9uUGFydC5WYXJpYXRpb24gPSB2YXJpYXRpb24uYnJhbmRJZDtcclxuICAgICAgICAgICAgICB2YXJpYXRpb25QYXJ0LlZhcmlhdGlvbkRlc2NyaXB0aW9uID0gdmFyaWF0aW9uLmdhbWVPYmplY3ROYW1lO1xyXG4gICAgICAgICAgICAgIHZhcmlhdGlvblBhcnQuTWF0ZXJpYWxJZCA9IHZhcmlhdGlvbi5tYXRlcmlhbElkO1xyXG4gICAgICAgICAgICAgIHZhcmlhdGlvblBhcnQuU3VwcGxpZXJBcnRpY2xlTnIgPSB2YXJpYXRpb24uc3VwcGxpZXJBcnRpY2xlTnI7XHJcbiAgICAgICAgICAgICAgdmFyaWF0aW9uUGFydC5PcHRpb24gPSB2YXJpYXRpb24ub3B0aW9uVGV4dDtcclxuICAgICAgICAgICAgICB2YXJpYXRpb25zLnB1c2godmFyaWF0aW9uUGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29ubmVjdGlvbi5WYXJpYXRpb25zID0gdmFyaWF0aW9ucztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7IC8vIGEtYXJ0aWtlbFxyXG4gICAgICAgIGNvbm5lY3Rpb24uSWQgPSBjaGlsZFBhcnRzLmZpbmRJbmRleChjID0+IGMgPT09IGNoaWxkKS50b1N0cmluZygpO1xyXG4gICAgICAgIGNvbm5lY3Rpb24uQnJhbmRJZGVudGlmaWVyID0gY2hpbGQubWV0YWRhdGEuaXRlbUlkZW50aWZpZXI7XHJcbiAgICAgICAgY29ubmVjdGlvbi5CcmFuZERlc2NyaXB0aW9uID0gY2hpbGQubWV0YWRhdGEuaXRlbU5hbWU7XHJcbiAgICAgICAgY29ubmVjdGlvbi5Qb3NpdGlvbiA9IGNoaWxkLnBvc2l0aW9uO1xyXG4gICAgICAgIGNvbm5lY3Rpb24uUm90YXRpb24gPSBjaGlsZC5yb3RhdGlvbjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjb25uZWN0b3JzOiBGdXJuaXR1cmVDb25uZWN0ZWRQYXJ0SW50ZWdyYXRpb25bXSA9IFtdO1xyXG4gICAgICBjb25zdCBjbGVuOiBudW1iZXIgPSBjaGlsZC5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY2xlbjsgaisrKSB7XHJcbiAgICAgICAgY29uc3QgY29ubmVjdG9yOiBhbnkgPSBjaGlsZC5jaGlsZHJlbltqXTtcclxuICAgICAgICBpZiAoKGNvbm5lY3RvciBpbnN0YW5jZW9mIEN1c3RvbU9iamVjdDNEIHx8IGNvbm5lY3RvciBpbnN0YW5jZW9mIEN1c3RvbU1lc2gpICYmIChjb25uZWN0b3IgYXMgYW55KS5jb25uZWN0ZWRUbykge1xyXG4gICAgICAgICAgY29uc3QgY29ubjogRnVybml0dXJlQ29ubmVjdGVkUGFydEludGVncmF0aW9uID0gbmV3IEZ1cm5pdHVyZUNvbm5lY3RlZFBhcnRJbnRlZ3JhdGlvbigpO1xyXG4gICAgICAgICAgY29ubi5Db25uZWN0aW9uTGFiZWwgPSBjb25uZWN0b3IubmFtZTtcclxuICAgICAgICAgIGNvbnN0IGZvcmVpZ25QYXJ0SWR4OiBudW1iZXIgPSB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5jaGlsZHJlbi5maW5kSW5kZXgoYyA9PiBjLm5hbWUgPT09IChjb25uZWN0b3IgYXMgYW55KS5jb25uZWN0ZWRUbyk7XHJcbiAgICAgICAgICBjb25uLkZvcmVpZ25Db25uZWN0aW9uTGFiZWwgPSB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5jaGlsZHJlbltmb3JlaWduUGFydElkeF0udXNlckRhdGEuc2VsZWN0aW9uLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lO1xyXG4gICAgICAgICAgY29ubi5Gb3JlaWduUGFydElkID0gZm9yZWlnblBhcnRJZHgudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGNvbm4uUG9zaXRpb24gPSBjb25uZWN0b3IucG9zaXRpb247XHJcbiAgICAgICAgICBjb25uLlJvdGF0aW9uID0gY29ubmVjdG9yLnJvdGF0aW9uO1xyXG4gICAgICAgICAgY29ubmVjdG9ycy5wdXNoKGNvbm4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25uZWN0aW9uLkNvbm5lY3RlZFBhcnRzID0gY29ubmVjdG9ycztcclxuICAgICAgcGFydHMucHVzaChjb25uZWN0aW9uKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3Vwc2VydEZ1cm5pdHVyZShpZCwge1BhcnRzOiBwYXJ0c30sIG9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cHNlcnRGdXJuaXR1cmUoaWQ6IHN0cmluZywgb2JqZWN0OiBhbnksIGl0ZW06IEl0ZW0pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9pbnRlZ3JhdGlvbkVuYWJsZWQgJiYgIWl0ZW0ubWV0YWRhdGEub2Jzb2xldGUpIHtcclxuICAgICAgY29uc3QgaWR4OiBudW1iZXIgPSB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucy5maW5kSW5kZXgoZiA9PiBmLklkID09PSBpZCk7XHJcbiAgICAgIGxldCBmdXJuaXR1cmU6IEZ1cm5pdHVyZUludGVncmF0aW9uO1xyXG4gICAgICBpZiAoaWR4IDwgMCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucy5sZW5ndGggPT09IDEgJiYgIXRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zWzBdLklkKSB7IC8vIGVtcHR5IGVudHJ5IGZvciBtcnAgY29kZSwgcmUtdXNlIHRoYXQgb25lXHJcbiAgICAgICAgICBmdXJuaXR1cmUgPSB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9uc1swXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZnVybml0dXJlID0gbmV3IEZ1cm5pdHVyZUludGVncmF0aW9uKCk7XHJcbiAgICAgICAgICB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucy5wdXNoKGZ1cm5pdHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZ1cm5pdHVyZS5JZCA9IGlkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZ1cm5pdHVyZSA9IHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zW2lkeF07XHJcbiAgICAgIH1cclxuICAgICAgZnVybml0dXJlLk1ycENvZGUgPSB0aGlzLl9wZXJtYW5lbnRTdG9yZVNlcnZpY2UuY29kZTtcclxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKGZ1cm5pdHVyZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIG9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICBmdXJuaXR1cmVba2V5XSA9IG9iamVjdFtrZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0Q29kZU9uRnVybml0dXJlQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9pbnRlZ3JhdGlvbkVuYWJsZWQpIHtcclxuICAgICAgaWYgKHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICBjb25zdCBmdXJuaXR1cmU6IEZ1cm5pdHVyZUludGVncmF0aW9uID0gbmV3IEZ1cm5pdHVyZUludGVncmF0aW9uKCk7XHJcbiAgICAgICAgZnVybml0dXJlLk1ycENvZGUgPSB0aGlzLl9wZXJtYW5lbnRTdG9yZVNlcnZpY2UuY29kZTtcclxuICAgICAgICB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucy5wdXNoKGZ1cm5pdHVyZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMuZm9yRWFjaChmID0+IGYuTXJwQ29kZSA9IHRoaXMuX3Blcm1hbmVudFN0b3JlU2VydmljZS5jb2RlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLmVtaXQoTWVzc2FnZVR5cGUuQ29uZmlndXJhdGlvbkNoYW5nZWQsIHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NhbkNvbm5lY3RTZWxlY3Rpb25zKHNlbDE6IFNlbGVjdGlvbiwgc2VsMjogU2VsZWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXNlbDEuZGVjb05vZGUgfHwgIXNlbDIuZGVjb05vZGUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbGV0IGNhbkNvbm5lY3Q6IGJvb2xlYW4gPSBzZWwyLmRlY29Ob2RlLnR5cGUgIT09IERlY29Ob2RlVHlwZS5QYXJ0O1xyXG4gICAgaWYgKCFjYW5Db25uZWN0KSB7XHJcbiAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gc2VsMS5kZWNvTm9kZS5jb25uZWN0b3JzLmxlbmd0aDtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGxlbmk6IG51bWJlciA9IHNlbDIuZGVjb05vZGUuY29ubmVjdG9ycy5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaWkgPSAwOyBpaSA8IGxlbmk7IGlpKyspIHtcclxuICAgICAgICAgIGNhbkNvbm5lY3QgPSBTY2VuZTNEVXRpbC5DYW5TZWxlY3RvckNvbm5lY3Qoc2VsMS5kZWNvTm9kZS5jb25uZWN0b3JzLCBzZWwxLmRlY29Ob2RlLmNvbm5lY3RvcnNbaV0sIHNlbDIuZGVjb05vZGUuY29ubmVjdG9yc1tpaV0pO1xyXG4gICAgICAgICAgaWYgKGNhbkNvbm5lY3QpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBjYW5Db25uZWN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlU2VsZWN0aW9uc1JlY2VpdmVkKG1ldGFkYXRhOiBNZXRhZGF0YSkge1xyXG4gICAgaWYgKHRoaXMuX2Fuc3dlclNlbGVjdGVkLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPVxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9ucy5maW5kKHMgPT4gcy5ub2RlSWQgPT09IHRoaXMuX2Fuc3dlclNlbGVjdGVkW3RoaXMuX2Fuc3dlclNlbGVjdGVkLmxlbmd0aCAtIDFdLm5vZGVJZCk7XHJcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcclxuICAgICAgICBsZXQgaXRlbU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gICAgICAgIGlmIChtZXRhZGF0YS5pdGVtTmFtZSA9PT0gJycpIHtcclxuICAgICAgICAgIGlmIChtZXRhZGF0YS5pdGVtRGVzY3JpcHRpb24gIT09ICcnKSB7XHJcbiAgICAgICAgICAgIGl0ZW1OYW1lID0gbWV0YWRhdGEuaXRlbURlc2NyaXB0aW9uO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXRlbU5hbWUgPSBtZXRhZGF0YS5pdGVtSWRlbnRpZmllcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaXRlbU5hbWUgPSBtZXRhZGF0YS5pdGVtTmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZ29vZ2xlVGFnTWFuYWdlci5zZW5kRXZlbnQoR29vZ2xlVGFnTWFuYWdlckV2ZW50LkFuc3dlckNob3Nlbiwge1xyXG4gICAgICAgICAgJ2FydGljbGVOcic6IG1ldGFkYXRhLml0ZW1JZGVudGlmaWVyLFxyXG4gICAgICAgICAgJ3Byb2R1Y3QnOiBpdGVtTmFtZSxcclxuICAgICAgICAgICdvcHRpb25EZXNjcmlwdGlvbic6IHNlbGVjdGlvbi5jb21tZXJjaWFsQW5zd2VyID8gc2VsZWN0aW9uLmNvbW1lcmNpYWxBbnN3ZXIgOiBzZWxlY3Rpb24uYW5zd2VyLFxyXG4gICAgICAgICAgJ29wdGlvblBhdGgnOiBzZWxlY3Rpb24uc2VsZWN0aW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUNvbm5lY3Rpb25SZXNldCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCkge1xyXG4gICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5zZXRVbnNlbGVjdGVkKCk7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5JdGVtVW5zZWxlY3RlZCwgdW5kZWZpbmVkKTtcclxuICAgICAgdGhpcy5fc2hvd1dhcm5pbmcoe3RpdGxlOiAnV0FSTklORycsIG1lc3NhZ2U6ICdSRUZSRVNIX0RVRV9UT19JTkFDVElWSVRZJ30pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQW5zd2VyU2VsZWN0ZWQoYW5zd2VyOiBBbnN3ZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Fuc3dlclNlbGVjdGVkLnB1c2goYW5zd2VyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjYW5jZWxBbnN3ZXIobWV0YWRhdGE6IE1ldGFkYXRhLCByZWJ1aWxkOiBib29sZWFuID0gdHJ1ZSwgZ2V0QW5zd2VyczogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLl9pT25lLmNhbmNlbEFuc3dlcigpO1xyXG4gICAgaWYgKHJlYnVpbGQpIHtcclxuICAgICAgdGhpcy5fc3RhcnRUb0J1aWxkRnJvbUNvbmZpZ3VyYXRvcihtZXRhZGF0YSk7XHJcbiAgICB9IGVsc2UgaWYgKGdldEFuc3dlcnMpIHsgLy8gaWYgbm90IHJlYnVpbGQgdGhlbiBjaGVjayBpZiB3ZSBuZWVkIHRvIGdldCBhbnN3ZXJzXHJcbiAgICAgIGF3YWl0IHRoaXMuX2lPbmUuZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzQXN5bmMoKTsgLy8gc2VlIGlmIHRoZXJlIGlzIHVzZXIgaW5wdXQgbmVlZGVkXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2VsZWN0U2VsZWN0aW9uKFxyXG4gICAgc2VsZWN0aW9uOiBTZWxlY3Rpb24sIG1ldGFkYXRhOiBNZXRhZGF0YSwgZm9yY2VCYWNrVG9Ob2RlPzogYm9vbGVhbiwgYWZ0ZXI/OiBib29sZWFuLCBjb25uZWN0b3I/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuX2lPbmUuc2VsZWN0U2VsZWN0aW9uKHNlbGVjdGlvbiwgZm9yY2VCYWNrVG9Ob2RlLCBhZnRlciwgY29ubmVjdG9yKTtcclxuICAgIHRoaXMuX2dlbmVyaWNTZWxlY3Rpb24gPSBzZWxlY3Rpb24uZ2VuZXJpYztcclxuICAgIHRoaXMuX3N0YXJ0VG9CdWlsZEZyb21Db25maWd1cmF0b3IobWV0YWRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGRlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbiwgbWV0YWRhdGE6IE1ldGFkYXRhKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9lbGVtZW50U2VydmljZS5yZW1vdmVFbGVtZW50KHNlbGVjdGlvbi5pbnN0YW5jZUlkLCBzZWxlY3Rpb24ubm9kZSk7XHJcbiAgICBhd2FpdCB0aGlzLl9pT25lLmRlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb24pO1xyXG4gICAgdGhpcy5fc3RhcnRUb0J1aWxkRnJvbUNvbmZpZ3VyYXRvcihtZXRhZGF0YSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcmVwbGFjZVNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbiwgbWV0YWRhdGE6IE1ldGFkYXRhKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLl9pT25lLnJlcGxhY2VTZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICAgIHRoaXMuX3N0YXJ0VG9CdWlsZEZyb21Db25maWd1cmF0b3IobWV0YWRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNlbGVjdEFuc3dlcihhbnN3ZXI6IEFuc3dlciwgaW5wdXQ6IHN0cmluZywgbWV0YWRhdGE6IE1ldGFkYXRhKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9wcmVsb2FkTWF0ZXJpYWwoYW5zd2VyKTtcclxuICAgIGF3YWl0IHRoaXMuX2lPbmUuc2VsZWN0QW5zd2VyKGFuc3dlciwgaW5wdXQpO1xyXG4gICAgdGhpcy5faGFuZGxlQW5zd2VyU2VsZWN0ZWQoYW5zd2VyKTtcclxuICAgIGNvbnN0IHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCA9IGF3YWl0IHRoaXMuX3N0YXJ0VG9CdWlsZEZyb21Db25maWd1cmF0b3IobWV0YWRhdGEpO1xyXG4gICAgdGhpcy5hbnN3ZXJTZWxlY3RlZC5uZXh0KHJlc3VsdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRBY3RpdmVGdXJuaXR1cmUoaW5zdGFuY2VJZDogc3RyaW5nKTogSXRlbSB7XHJcbiAgICBjb25zdCBjb25maWd1cmFibGVzOiBhbnlbXSA9IHRoaXMuX2l0ZW1TZXJ2aWNlLmdldENvbmZpZ3VyYWJsZXMoKTtcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gY29uZmlndXJhYmxlcy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGlmIChjb25maWd1cmFibGVzW2ldLm1ldGFkYXRhICYmIGNvbmZpZ3VyYWJsZXNbaV0ubWV0YWRhdGEuaXRlbUlkID09PSBpbnN0YW5jZUlkICYmICFjb25maWd1cmFibGVzW2ldLnRlbXBPYmplY3QpIHtcclxuICAgICAgICByZXR1cm4gY29uZmlndXJhYmxlc1tpXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbGlua1NlbGVjdGlvbnNBbmREZWNvcygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gdGhpcy5zZWxlY3Rpb25zLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgLy8gY29uc3QgaWQ6IHN0cmluZyA9IHRoaXMuc2VsZWN0aW9uc1tpXS5hcnROb2RlSWREZWNvO1xyXG4gICAgICBsZXQgZGVjbzogYW55ID0gdGhpcy5faU9uZS5kZWNvTm9kZXMuZmluZChkID0+IGQubm9kZUlkID09PSB0aGlzLnNlbGVjdGlvbnNbaV0ubm9kZSk7XHJcbiAgICAgIGlmICghZGVjbykge1xyXG4gICAgICAgIGRlY28gPSBuZXcgRGVjb05vZGUoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZGVjby50eXBlICE9PSBEZWNvTm9kZVR5cGUuVmFyaWF0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgdmFyaWF0aW9uOiBhbnkgPSB0aGlzLl9nZXRWYXJpYXRpb25zKCkuZmluZCh2ID0+IHYucGFyZW50SWQgPT09IHRoaXMuc2VsZWN0aW9uc1tpXS5hcnROb2RlSWREZWNvKTtcclxuICAgICAgICBpZiAodmFyaWF0aW9uKSB7XHJcbiAgICAgICAgICBkZWNvLnZhcmlhdGlvbiA9IHZhcmlhdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZWxlY3Rpb25zW2ldLmRlY29Ob2RlID0gZGVjbztcclxuICAgIH1cclxuICAgIHRoaXMuX2lPbmUuc2VsZWN0aW9uc0FuZERlY29zTGlua2VkLm5leHQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUNvbmZpZ3VyYWJsZUl0ZW0oaW5zdGFuY2VJZDogc3RyaW5nLCBtZXRhZGF0YTogTWV0YWRhdGEpOiBJdGVtIHtcclxuICAgIC8vIGNvbnN0IGZ1cm5pdHVyZTogSXRlbSA9IHRoaXMuX2dldEFjdGl2ZUZ1cm5pdHVyZShpbnN0YW5jZUlkKTtcclxuICAgIC8vIGNvbnN0IGNsb25lU2VsZWN0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3Rpb25zKSk7XHJcbiAgICAvLyBjbG9uZVNlbGVjdGlvbnMuZm9yRWFjaChzID0+IHtcclxuICAgIC8vICAgcy5pbWFnZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgICAvLyAgIHMuaW1hZ2VEYXRhTGFzdEFuc3dlciA9IHVuZGVmaW5lZDtcclxuICAgIC8vIH0pO1xyXG4gICAgLy8gaWYgKGZ1cm5pdHVyZSkge1xyXG4gICAgLy8gICBmdXJuaXR1cmUubWV0YWRhdGEuZGVjb3MgPSBBcnJheS5mcm9tKHRoaXMuX2lPbmUuZGVjb05vZGVzKTtcclxuICAgIC8vICAgZnVybml0dXJlLm1ldGFkYXRhLnNlbGVjdGlvbnMgPSBjbG9uZVNlbGVjdGlvbnM7XHJcbiAgICAvLyAgIGZ1cm5pdHVyZS5tYXJrRm9yRGVsZXRpb25DaGlsZHJlbigpO1xyXG4gICAgLy8gICByZXR1cm4gZnVybml0dXJlO1xyXG4gICAgLy8gfVxyXG4gICAgaWYgKCFtZXRhZGF0YS5wb3NpdGlvbikge1xyXG4gICAgICBtZXRhZGF0YS5wb3NpdGlvbiA9IHRoaXMuc3RhcnRQb3NpdGlvbiB8fCBkZWZhdWx0UG9zaXRpb247XHJcbiAgICB9XHJcbiAgICBpZiAoIW1ldGFkYXRhLnJvdGF0aW9uKSB7XHJcbiAgICAgIG1ldGFkYXRhLnJvdGF0aW9uID0gbWV0YWRhdGEuZGVmYXVsdDE4MCA/IGRlZmF1bHRSb3RhdGlvbiA6IG5ldyBFdWxlcigpO1xyXG4gICAgfVxyXG4gICAgLy8gSWYgaXRlbVR5cGUgaXMgZGlmZmVyZW50IGluIGFydGljbGUgY29tcGFyZWQgdG8gc2F2ZWQgdmFsdWUgaW4gdGhlIC5qc29uLCB0aGUgaXRlbVR5cGUgaW4gYXJ0aWNsZSBpcyBhcHBsaWVkXHJcbiAgICAvLyBtZXRhZGF0YS5pdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGUgJiYgdGhpcy5pdGVtVHlwZSAhPT0gbWV0YWRhdGEuaXRlbVR5cGUgPyB0aGlzLml0ZW1UeXBlIDogbWV0YWRhdGEuaXRlbVR5cGU7XHJcbiAgICBjb25zdCBpdGVtQ29uc3RydWN0b3IgPSBGYWN0b3J5LmdldENsYXNzKHRoaXMuc3RhbmRBbG9uZSA/IEl0ZW1UeXBlLkN1c3RvbUZsb29yR3JvdXAgOiBtZXRhZGF0YS5pdGVtVHlwZSk7XHJcbiAgICBjb25zdCBpdGVtID0gbmV3IGl0ZW1Db25zdHJ1Y3RvcihcclxuICAgICAgbWV0YWRhdGEsXHJcbiAgICAgIHVuZGVmaW5lZCwgLy8gYmFzZSBvbiBlbXB0eSBvYmplY3RcclxuICAgICAge1xyXG4gICAgICAgIG1vdXNlT3ZlcjogdGhpcy5tb3VzZU92ZXIsXHJcbiAgICAgICAgbW91c2VPZmY6IHRoaXMubW91c2VPZmYsXHJcbiAgICAgICAgaXRlbVNlbGVjdGVkOiB0aGlzLnNlbGVjdEl0ZW0sXHJcbiAgICAgICAgaXRlbVVuc2VsZWN0ZWQ6IHRoaXMudW5TZWxlY3RJdGVtLFxyXG4gICAgICAgIGVsZW1lbnRTZWxlY3RlZDogdGhpcy5zZWxlY3RFbGVtZW50LFxyXG4gICAgICAgIGVsZW1lbnRVbnNlbGVjdGVkOiB0aGlzLnVuU2VsZWN0RWxlbWVudCxcclxuICAgICAgICBjb25maWd1cmluZ0NoYW5nZWQ6IHRoaXMuY2hhbmdlQ29uZmlndXJlTW9kZSxcclxuICAgICAgICBjaGlsZEVsZW1lbnRQb3NpdGlvbkNoYW5nZWRIYW5kbGVyOiB0aGlzLm1vdmVDaGlsZEVsZW1lbnQsXHJcbiAgICAgICAgY2hpbGRFbGVtZW50UGxhY2VIYW5kbGVyOiB0aGlzLnBsYWNlQ2hpbGRFbGVtZW50LFxyXG4gICAgICAgIHNob3dIaWRlT3V0bGluZUhhbmRsZXI6IHRoaXMuc2hvd0hpZGVPdXRsaW5lXHJcbiAgICAgICAgLypcclxuICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudFBvc2l0aW9uQ2hhbmdlZEhhbmRsZXI6IGFkanVzdGFibGUgPyB0aGlzLm1vdmVDaGlsZEVsZW1lbnQgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnRQbGFjZUhhbmRsZXI6IGFkanVzdGFibGUgPyB0aGlzLnBsYWNlQ2hpbGRFbGVtZW50IDogdW5kZWZpbmVkXHJcbiAgICAgICAgKi9cclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIGl0ZW0uY2FuRGVsZXRlID0gIXRoaXMuc3RhbmRBbG9uZTtcclxuICAgIGl0ZW0uY2FuQ29weSA9ICF0aGlzLnN0YW5kQWxvbmU7XHJcbiAgICBpdGVtLmFsbHdheXNDb25maWd1cmVNb2RlID0gdGhpcy5zdGFuZEFsb25lO1xyXG4gICAgaXRlbS5oaWdoTGlnaHREaXNhYmxlZCA9ICF0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy51c2VTdGFuZGFsb25lSGlnaExpZ2h0O1xyXG4gICAgaXRlbS50ZW1wT2JqZWN0ID0gdHJ1ZTtcclxuICAgIGl0ZW0ubmFtZSA9IG1ldGFkYXRhLml0ZW1OYW1lICsgJ19jbG9uZSc7XHJcbiAgICBpdGVtLnZpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmFkZEl0ZW0oaXRlbSk7XHJcbiAgICAvLyB0aGlzLl91cHNlcnRGdXJuaXR1cmUobWV0YWRhdGEuaXRlbUlkLCB7QnJhbmRJZGVudGlmaWVyOiBtZXRhZGF0YS5pdGVtSWRlbnRpZmllcn0sIGl0ZW0pO1xyXG4gICAgcmV0dXJuIGl0ZW07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVQb3NpdGlvbkFuaW1hdGlvbihvYmplY3Q6IE9iamVjdDNELCBmcm9tOiBWZWN0b3IzLCB0bzogVmVjdG9yMywgZWFzaW5nOiBUV0VFTi5FYXNpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHR3ZWVuRnJvbTogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCkuY29weShmcm9tKTtcclxuICAgIGNvbnN0IHR3ZWVuID0gbmV3IFRXRUVOLlR3ZWVuKHR3ZWVuRnJvbSlcclxuICAgICAgLnRvKHRvLCAxMDAwKVxyXG4gICAgICAuZWFzaW5nKGVhc2luZylcclxuICAgICAgLm9uVXBkYXRlKCgpID0+IHtcclxuICAgICAgICBvYmplY3QucG9zaXRpb24uY29weSh0d2VlbkZyb20pO1xyXG4gICAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4gdHdlZW4ub25Db21wbGV0ZShyZXNvbHZlLmJpbmQodGhpcywgdHdlZW4pKS5vblN0b3AocmVqZWN0KS5zdGFydCgpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2FuaW1hdGVDaGFuZ2VzKGZ1cm5pdHVyZTogSXRlbSwgY2hhbmdlczogQ2hhbmdlc0ludGVyZmFjZVtdKTogUHJvbWlzZTx2b2lkW10+IHtcclxuICAgIC8vIGl0J3MgY2hyaXN0bWFzc3NcclxuICAgIGNvbnN0IGFuaW1hdGlvbnM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xyXG4gICAgaWYgKGZ1cm5pdHVyZSBpbnN0YW5jZW9mIEN1c3RvbUZsb29ySXRlbSkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYW5nZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBlYXNpbmc6IFRXRUVOLkVhc2luZyA9ICFjaGFuZ2VzW2ldLm9sZFBvc2l0aW9uID8gVFdFRU4uRWFzaW5nLkV4cG9uZW50aWFsLk91dCA6XHJcbiAgICAgICAgICAoIWNoYW5nZXNbaV0ubmV3UG9zaXRpb24gPyBUV0VFTi5FYXNpbmcuRXhwb25lbnRpYWwuT3V0IDogVFdFRU4uRWFzaW5nLkV4cG9uZW50aWFsLkluT3V0KTtcclxuICAgICAgICBjb25zdCBmcm9tOiBWZWN0b3IzID1cclxuICAgICAgICAgIGNoYW5nZXNbaV0ub2xkUG9zaXRpb24gPyBuZXcgVmVjdG9yMygpLmNvcHkoY2hhbmdlc1tpXS5vbGRQb3NpdGlvbikgOiBuZXcgVmVjdG9yMygpLmNvcHkoY2hhbmdlc1tpXS5uZXdQb3NpdGlvbikuc2V0WSgxMCk7XHJcbiAgICAgICAgY29uc3QgdG86IFZlY3RvcjMgPVxyXG4gICAgICAgICAgY2hhbmdlc1tpXS5uZXdQb3NpdGlvbiA/IG5ldyBWZWN0b3IzKCkuY29weShjaGFuZ2VzW2ldLm5ld1Bvc2l0aW9uKSA6IG5ldyBWZWN0b3IzKCkuY29weShjaGFuZ2VzW2ldLm9sZFBvc2l0aW9uKS5zZXRZKDEwKTtcclxuICAgICAgICBjb25zdCBvYmo6IE9iamVjdDNEID0gZnVybml0dXJlLmdldE9iamVjdEJ5TmFtZShjaGFuZ2VzW2ldLm5hbWUpO1xyXG4gICAgICAgIGlmICghZnJvbS5lcXVhbHModG8pKSB7XHJcbiAgICAgICAgICBhbmltYXRpb25zLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVBvc2l0aW9uQW5pbWF0aW9uKG9iaiwgZnJvbSwgdG8sIGVhc2luZylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoYW5pbWF0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9yZXBsYWNlQ3VycmVudEl0ZW0obmV3SXRlbTogSXRlbSwgbWV0YWRhdGE6IE1ldGFkYXRhLCBhbmltYXRlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPEl0ZW0+IHtcclxuICAgIGNvbnN0IGZ1cm5pdHVyZTogSXRlbSA9IHRoaXMuX2dldEFjdGl2ZUZ1cm5pdHVyZShtZXRhZGF0YS5pdGVtSWQpO1xyXG4gICAgY29uc3QgY2xvbmVTZWxlY3Rpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGlvbnMpKTtcclxuICAgIGNsb25lU2VsZWN0aW9ucy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICBzLmltYWdlRGF0YSA9IHVuZGVmaW5lZDtcclxuICAgICAgcy5pbWFnZURhdGFMYXN0QW5zd2VyID0gdW5kZWZpbmVkO1xyXG4gICAgICBpZiAocy5hZGRhYmxlcykge1xyXG4gICAgICAgIHMuYWRkYWJsZXMuZm9yRWFjaChhID0+IHtcclxuICAgICAgICAgIGEuaW1hZ2VEYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmIChmdXJuaXR1cmUpIHtcclxuICAgICAgZnVybml0dXJlLm1ldGFkYXRhLmRlY29zID0gQXJyYXkuZnJvbSh0aGlzLl9pT25lLmRlY29Ob2Rlcyk7XHJcbiAgICAgIGZ1cm5pdHVyZS5tZXRhZGF0YS5zZWxlY3Rpb25zID0gY2xvbmVTZWxlY3Rpb25zO1xyXG4gICAgICBpZiAoZnVybml0dXJlIGluc3RhbmNlb2YgQ3VzdG9tV2FsbEZsb29ySXRlbSkge1xyXG4gICAgICAgIChuZXdJdGVtIGFzIEN1c3RvbVdhbGxGbG9vckl0ZW0pLmN1cnJlbnRXYWxsID0gZnVybml0dXJlLmN1cnJlbnRXYWxsO1xyXG4gICAgICB9XHJcbiAgICAgIG5ld0l0ZW0udXBkYXRlUGl2b3QoKTtcclxuICAgICAgY29uc3QgY2hhbmdlczogQ2hhbmdlc0ludGVyZmFjZVtdID0gZnVybml0dXJlIGluc3RhbmNlb2YgQ3VzdG9tRmxvb3JJdGVtID8gT2JqZWN0VXRpbHMuR2V0Q2hhbmdlcyhmdXJuaXR1cmUuY2hpbGRyZW4sIG5ld0l0ZW0uY2hpbGRyZW4pIDogW107XHJcbiAgICAgIC8vIGFuaW1hdGUgcmVtb3ZlZCBpdGVtc1xyXG4gICAgICBjb25zdCByZW1vdmVkQ2hhbmdlczogQ2hhbmdlc0ludGVyZmFjZVtdID0gY2hhbmdlcy5maWx0ZXIoYyA9PiAhYy5uZXdQb3NpdGlvbik7XHJcbiAgICAgIGlmIChhbmltYXRlICYmIHJlbW92ZWRDaGFuZ2VzICYmIHJlbW92ZWRDaGFuZ2VzLmxlbmd0aCA+IDApIHsgLy8gYW5pbWF0ZSBjaGFuZ2VzIHRvIHRoZSBtb2RlbFxyXG4gICAgICAgIGF3YWl0IHRoaXMuX2FuaW1hdGVDaGFuZ2VzKGZ1cm5pdHVyZSwgcmVtb3ZlZENoYW5nZXMpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHJlbW92ZSBjaGlsZHJlbiBmcm9tIGZ1cm5pdHVyZVxyXG4gICAgICBmdXJuaXR1cmUuY2xlYXJDaGlsZHJlbigpO1xyXG4gICAgICAvLyBhZGQgbmV3IGNoaWxkcmVuIHRvIGZ1cm5pdHVyZVxyXG4gICAgICBuZXdJdGVtLmNoaWxkcmVuLm1hcChjID0+IGZ1cm5pdHVyZS5hZGRDaGlsZChjKSk7XHJcbiAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLnJlbW92ZUl0ZW0obmV3SXRlbSwgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgLy8gYW5pbWF0ZSAobmV3KSBpdGVtc1xyXG4gICAgICBjb25zdCBvdGhlckNoYW5nZXM6IENoYW5nZXNJbnRlcmZhY2VbXSA9IGNoYW5nZXMuZmlsdGVyKGMgPT4gYy5uZXdQb3NpdGlvbik7XHJcbiAgICAgIGlmIChhbmltYXRlICYmIG90aGVyQ2hhbmdlcyAmJiBvdGhlckNoYW5nZXMubGVuZ3RoID4gMCkgeyAvLyBhbmltYXRlIGNoYW5nZXMgdG8gdGhlIG1vZGVsXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fYW5pbWF0ZUNoYW5nZXMoZnVybml0dXJlLCBvdGhlckNoYW5nZXMpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmdXJuaXR1cmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdJdGVtLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICBuZXdJdGVtLnRlbXBPYmplY3QgPSBmYWxzZTtcclxuICAgICAgbmV3SXRlbS5uYW1lID0gbWV0YWRhdGEuaXRlbU5hbWU7XHJcbiAgICAgIG5ld0l0ZW0ubWV0YWRhdGEuc2VsZWN0aW9ucyA9IGNsb25lU2VsZWN0aW9ucztcclxuICAgICAgbmV3SXRlbS5tZXRhZGF0YS5kZWNvcyA9IEFycmF5LmZyb20odGhpcy5faU9uZS5kZWNvTm9kZXMpO1xyXG4gICAgICB0aGlzLl91cHNlcnRGdXJuaXR1cmUobWV0YWRhdGEuaXRlbUlkLCB7QnJhbmRJZGVudGlmaWVyOiBtZXRhZGF0YS5pdGVtSWRlbnRpZmllcn0sIG5ld0l0ZW0pO1xyXG4gICAgICByZXR1cm4gbmV3SXRlbTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3VzZU92ZXIgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmlzTW91c2VPdmVyT2JqZWN0ID0gdHJ1ZTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgbW91c2VPZmYgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmlzTW91c2VPdmVyT2JqZWN0ID0gZmFsc2U7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHNlbGVjdEl0ZW0gPSAobWVzaDogTWVzaCkgPT4ge1xyXG4gICAgLy8gdGhpcy5hY3RpdmVJbnN0YW5jZSA9IG1lc2gudXNlckRhdGEuaXRlbUlkO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyB1blNlbGVjdEl0ZW0gPSAoKSA9PiB7XHJcbiAgICAvLyB0aGlzLnNob3dMaXRlU2VsZWN0b3IgPSBmYWxzZTtcclxuICAgIC8vIHRoaXMuc2hvd1NlbGVjdGlvbnMgPSBmYWxzZTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgc2VsZWN0RWxlbWVudCA9IChlbGVtZW50OiBNZXNoLCBtb3VzZVBvczogVmVjdG9yMykgPT4ge1xyXG4gICAgdGhpcy5fYWN0aXZlQ2hpbGRFbGVtZW50ID0gZWxlbWVudDtcclxuICAgIGlmIChlbGVtZW50LnBhcmVudCBpbnN0YW5jZW9mIEN1c3RvbU9iamVjdDNEKSB7XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsRWxlbWVudFBvc2l0aW9uLmNvcHkoZWxlbWVudC5wYXJlbnQucG9zaXRpb24pO1xyXG4gICAgICAvLyBpZiAodGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuYWRqdXN0YWJsZSkge1xyXG4gICAgICBpZiAodGhpcy5faXNNb3ZlYWJsZU9iamVjdChlbGVtZW50LnBhcmVudCkpIHtcclxuICAgICAgICBjb25zdCBjb25uZWN0b3I6IGFueSA9IGVsZW1lbnQucGFyZW50LmNoaWxkcmVuLmZpbmQoYyA9PiBjLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjXycpID4gLTEpO1xyXG4gICAgICAgIGlmIChjb25uZWN0b3IuY29ubmVjdGVkVG8pIHtcclxuICAgICAgICAgIGNvbnN0IGJhc2VFbGVtZW50OiBPYmplY3QzRCA9IDxDdXN0b21PYmplY3QzRD50aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5nZXRPYmplY3RCeU5hbWUoY29ubmVjdG9yLmNvbm5lY3RlZFRvKTtcclxuICAgICAgICAgIHRoaXMuYmFzZUVsZW1lbnROb2RlSWQgPSBiYXNlRWxlbWVudC51c2VyRGF0YSAmJiBiYXNlRWxlbWVudC51c2VyRGF0YS5zZWxlY3Rpb24gPyBiYXNlRWxlbWVudC51c2VyRGF0YS5zZWxlY3Rpb24ubm9kZUlkIDogMDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudG9nZ2xlU2VsZWN0ZWRFbGVtZW50Lm5leHQoZWxlbWVudCk7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHVuU2VsZWN0RWxlbWVudCA9ICgpID0+IHtcclxuICAgIHRoaXMuX2FjdGl2ZUNoaWxkRWxlbWVudCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudG9nZ2xlU2VsZWN0ZWRFbGVtZW50Lm5leHQodW5kZWZpbmVkKTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgbW92ZUNoaWxkRWxlbWVudCA9IChlbGVtZW50OiBDdXN0b21PYmplY3QzRCwgcG9zOiBWZWN0b3IzKSA9PiB7XHJcbiAgICBjb25zdCB3b3JsZFRvTG9jYWxQb3M6IFZlY3RvcjMgPSB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC53b3JsZFRvTG9jYWwocG9zLmNsb25lKCkpO1xyXG4gICAgdGhpcy5fbW92ZUNoaWxkRWxlbWVudFRvUG9zaXRpb24oZWxlbWVudCwgd29ybGRUb0xvY2FsUG9zKTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgcGxhY2VDaGlsZEVsZW1lbnQgPSBhc3luYyAoZWxlbWVudDogQ3VzdG9tT2JqZWN0M0QpID0+IHtcclxuICAgIGlmICh0aGlzLl9pc01vdmVhYmxlT2JqZWN0KGVsZW1lbnQpICYmIChlbGVtZW50IGFzIGFueSkubW92ZWQpIHtcclxuICAgICAgY29uc3QgYmFzZUVsZW1lbnQ6IE9iamVjdDNEW10gPVxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLmdldE9iamVjdHNCeVVzZXJEYXRhUHJvcCgnc2VsZWN0aW9uJywgJ25vZGVJZCcsIHRoaXMuYmFzZUVsZW1lbnROb2RlSWQpO1xyXG4gICAgICAvLyB1c2UgaW5zdGFuY2VJZCBmcm9tIHBhcmVudFxyXG4gICAgICBjb25zdCBpdGVtOiBJdGVtID0gT2JqZWN0VXRpbHMuR2V0UGFyZW50SXRlbShlbGVtZW50KTtcclxuICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICBjb25zdCBjb25uZWN0b3I6IHN0cmluZyA9XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9lbGVtZW50U2VydmljZS5wbGFjZUVsZW1lbnRPbkNvbm5lY3RvcihcclxuICAgICAgICAgICAgaXRlbS5tZXRhZGF0YS5pdGVtSWQsIGVsZW1lbnQsIGJhc2VFbGVtZW50Lmxlbmd0aCA+IDAgPyBiYXNlRWxlbWVudFswXSA6IG51bGwpO1xyXG4gICAgICAgIHRoaXMuX3NhdmVFbGVtZW50Q29ubmVjdG9yKGVsZW1lbnQsIGNvbm5lY3Rvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwdWJsaWMgY2hhbmdlQ29uZmlndXJlTW9kZSA9IGFzeW5jIChtZXRhZGF0YTogTWV0YWRhdGEsIGNvbmZpZ3VyaW5nOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZU1vZGVDaGFuZ2VkLm5leHQoe21ldGFkYXRhOiBtZXRhZGF0YSwgY29uZmlndXJpbmc6IGNvbmZpZ3VyaW5nfSk7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIGRyYWdDb25uZWN0b3IgPSBhc3luYyAoY29ubmVjdG9yOiBDdXN0b21NZXNoLCBwb3M6IFZlY3RvcjMpID0+IHtcclxuICAgIHRoaXMuX3Jlc2l6ZVNlcnZpY2UuZHJhZ0Nvbm5lY3RvclRvTmV3UG9zaXRpb24oY29ubmVjdG9yLCBwb3MpO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBzaG93SGlkZU91dGxpbmUgPSBhc3luYyAob2JqOiBJdGVtLCBzaG93OiBib29sZWFuKSA9PiB7XHJcbiAgICBzaG93ID8gdGhpcy5fb3V0bGluZVNlcnZpY2Uuc2hvd091dGxpbmUob2JqKSA6IHRoaXMuX291dGxpbmVTZXJ2aWNlLmhpZGVPdXRsaW5lKCk7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIGNhbmNlbENvbmZpZ3VyaW5nQ3VycmVudEluc3RhbmNlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLmNvbmZpZ3VyaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc01vdmVhYmxlT2JqZWN0KG9iajogT2JqZWN0M0QpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBvYmoudXNlckRhdGEgJiYgb2JqLnVzZXJEYXRhLnNlbGVjdGlvbiAmJiBvYmoudXNlckRhdGEuc2VsZWN0aW9uLmhkZWNvUG9zaXRpb25pbmcgPT09IEhkZWNvUG9zaXRpb25pbmcuVmFyaWFibGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9hZGRFbGVtZW50T25Db25uZWN0b3IoY3VycmVudEl0ZW06IEl0ZW0sIGVsZW1lbnQ6IE9iamVjdDNELCBjb25uZWN0b3I6IHN0cmluZywgY29ubmVjdGVkTm9kZUlkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIGNvbnN0IGNvbjogT2JqZWN0M0QgPSB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5nZXRPYmplY3RCeU5hbWUoY29ubmVjdG9yLmNvbm5lY3Rvcik7XHJcbiAgICAvLyBpZiAoY29uKSB7ZVxyXG4gICAgLy8gY29uc3QgcG9zOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKS5jb3B5KGNvbi5wb3NpdGlvbik7XHJcbiAgICAvLyBjb24ubG9jYWxUb1dvcmxkKHBvcyk7XHJcbiAgICBjb25zdCBjb25uZWN0b3JGcm9tRWxlbWVudCA9IGN1cnJlbnRJdGVtLmNvbm5lY3RvckZyb21FbGVtZW50KGVsZW1lbnQudXNlckRhdGEuc2VsZWN0aW9uKTtcclxuICAgIGNvbnN0IGlkRnJvbUJhc2VFbGVtZW50OiBudW1iZXIgPSBjb25uZWN0ZWROb2RlSWQgPyBjb25uZWN0ZWROb2RlSWQgOiBjb25uZWN0b3JGcm9tRWxlbWVudC5jb25uZWN0ZWROb2RlSWQ7XHJcbiAgICBjb25zdCBiYXNlRWxlbWVudDogT2JqZWN0M0RbXSA9IGN1cnJlbnRJdGVtLmdldE9iamVjdHNCeVVzZXJEYXRhUHJvcCgnc2VsZWN0aW9uJywgJ25vZGVJZCcsIGlkRnJvbUJhc2VFbGVtZW50KTtcclxuXHJcbiAgICBjb25zdCBpdGVtOiBJdGVtID0gT2JqZWN0VXRpbHMuR2V0UGFyZW50SXRlbShlbGVtZW50KTtcclxuICAgIGlmIChpdGVtKSB7XHJcbiAgICAgIGNvbnN0IGNvbm46IHN0cmluZyA9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fZWxlbWVudFNlcnZpY2UucGxhY2VFbGVtZW50T25Db25uZWN0b3IoXHJcbiAgICAgICAgICBpdGVtLm1ldGFkYXRhLml0ZW1JZCwgZWxlbWVudCwgYmFzZUVsZW1lbnQubGVuZ3RoID4gMCA/IGJhc2VFbGVtZW50WzBdIDogbnVsbCwgZmFsc2UsIGNvbm5lY3RvciwgZmFsc2UpO1xyXG4gICAgICB0aGlzLl9zYXZlRWxlbWVudENvbm5lY3RvcihlbGVtZW50LCBjb25uKTtcclxuICAgIH1cclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NhdmVFbGVtZW50Q29ubmVjdG9yKGVsZW1lbnQ6IE9iamVjdDNELCBjb25uZWN0b3I6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC51c2VyRGF0YSAmJiBlbGVtZW50LnVzZXJEYXRhLnNlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC51cGRhdGVFbGVtZW50Q29ubmVjdG9yKGVsZW1lbnQudXNlckRhdGEuc2VsZWN0aW9uLCBjb25uZWN0b3IsIHRoaXMuYmFzZUVsZW1lbnROb2RlSWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gbW92ZVxyXG4gICAqIEBwYXJhbSBwb3MgVGhlIGxvY2FsIHBvc2l0aW9uXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIF9tb3ZlQ2hpbGRFbGVtZW50VG9Qb3NpdGlvbihlbGVtZW50OiBPYmplY3QzRCwgcG9zOiBWZWN0b3IzKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faXNNb3ZlYWJsZU9iamVjdChlbGVtZW50KSkge1xyXG4gICAgICBjb25zdCB3b3JsZFRvTG9jYWxQb3M6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpLmNvcHkocG9zKS5hZGQodGhpcy5fb3JpZ2luYWxFbGVtZW50UG9zaXRpb24pO1xyXG4gICAgICBjb25zdCBiYXNlRWxlbWVudDogT2JqZWN0M0RbXSA9XHJcbiAgICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuZ2V0T2JqZWN0c0J5VXNlckRhdGFQcm9wKCdzZWxlY3Rpb24nLCAnbm9kZUlkJywgdGhpcy5iYXNlRWxlbWVudE5vZGVJZCk7XHJcbiAgICAgIGNvbnN0IGl0ZW06IEl0ZW0gPSBPYmplY3RVdGlscy5HZXRQYXJlbnRJdGVtKGVsZW1lbnQpO1xyXG4gICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgIHRoaXMuX2VsZW1lbnRTZXJ2aWNlLm1vdmVFbGVtZW50VG9OZXdQb3NpdGlvbihcclxuICAgICAgICAgIGl0ZW0ubWV0YWRhdGEuaXRlbUlkLCBlbGVtZW50LCB3b3JsZFRvTG9jYWxQb3MsIGJhc2VFbGVtZW50Lmxlbmd0aCA+IDAgPyBiYXNlRWxlbWVudFswXSA6IG51bGwpO1xyXG4gICAgICAgIC8vIHRoaXMuX3NhdmVFbGVtZW50Q29ubmVjdG9yKGVsZW1lbnQsIHBvcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Jlc2V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuX3BsYWNlZEFkZGFibGVzLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLl9hZGp1c3RhYmxlcy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5fYWRkYWJsZXMubGVuZ3RoID0gMDtcclxuICAgIC8vIHRoaXMuX3ByZXBhcmVUaGVTZWxlY3Rpb25zKCk7XHJcbiAgICAvLyB0b2RvOiBjaGVjayB0aGlzXHJcbiAgICAvLyB0aGlzLl9lbGVtZW50U2VydmljZS5yZW1vdmVFbGVtZW50KHRoaXMuYWN0aXZlSW5zdGFuY2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbWF0ZXJpYWxJZCBvZiB0aGUgcGFyZW50IHVwIHRoZSB0cmVlIHVudGlsIHByZXNlbnRpb25sZXZlbCAxIGlzIHJlYWNoZWRcclxuICAgKiBAcGFyYW0gaWRcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldE1hdGVyaWFsSWRGcm9tUGFyZW50KGlkOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgaWR4OiBudW1iZXIgPSB0aGlzLnNlbGVjdGlvbnMuZmluZEluZGV4KHMgPT4gcy5ub2RlID09PSBpZCk7XHJcbiAgICBsZXQgY3VycmVudExldmVsOiBudW1iZXIgPSA5OTk7XHJcbiAgICBpZiAoaWR4ID4gLTEpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IGlkeDsgaSA+IDA7IGktLSkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uc1tpXTtcclxuICAgICAgICBpZiAoc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsID49IGN1cnJlbnRMZXZlbCkge1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnJlbnRMZXZlbCA9IHNlbGVjdGlvbi5wcmVzZW50YXRpb25MZXZlbDtcclxuICAgICAgICBpZiAoc2VsZWN0aW9uLmhkZWNvR2FtZU9iamVjdCkge1xyXG4gICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi5oZGVjb0dhbWVPYmplY3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlcGFyZVRoZVNlbGVjdGlvbnMoaW5zdGFuY2VJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25zID0gdGhpcy5zZWxlY3Rpb25zLnNsaWNlKCk7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25PZkFydGljbGU6IFNlbGVjdGlvbiA9IHNlbGVjdGlvbnMuZmluZChzID0+IHMubm9kZVR5cGUgPT09IE5vZGVUeXBlLkFydGljbGUpO1xyXG4gICAgY29uc3QgYWRqdXN0YWJsZVNlbGVjdGlvbnM6IFNlbGVjdGlvbltdID0gc2VsZWN0aW9ucy5maWx0ZXIocyA9PiBzLmFkZEFkanVzdCA9PT0gJzInKTtcclxuICAgIGNvbnN0IGlzQXJ0aWNsZVdpdGhNYXRlcmlhbDogYm9vbGVhbiA9XHJcbiAgICAgIGFkanVzdGFibGVTZWxlY3Rpb25zLmxlbmd0aCA9PT0gMCAmJlxyXG4gICAgICBzZWxlY3Rpb25PZkFydGljbGUuZ2FtZU9iamVjdCAmJlxyXG4gICAgICBzZWxlY3Rpb25PZkFydGljbGUuZ2FtZU9iamVjdC5sZW5ndGggPiAwO1xyXG4gICAgLy8gZ2V0IGdlbmVyaWMgdmFyaWF0aW9uc1xyXG4gICAgY29uc3QgZ2xvYmFsVmFyaWF0aW9uczogRGVjb05vZGVbXSA9IHRoaXMuc2VsZWN0aW9uc1xyXG4gICAgICAuZmlsdGVyKHMgPT4gKHMuZ2VuZXJpYyB8fCBhZGp1c3RhYmxlU2VsZWN0aW9ucy5sZW5ndGggPT09IDEpICYmIChzLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uICYmICFzLmRlY29Ob2RlLnR5cGUpXHJcbiAgICAgIC5tYXAoKHZhbHVlOiBTZWxlY3Rpb24sIGluZGV4OiBudW1iZXIsIGFycmF5OiBTZWxlY3Rpb25bXSkgPT4ge1xyXG4gICAgICAgIC8vIGZpbmQgc2VsZWN0aW9uIG9mIHZhcmlhdGlvblxyXG4gICAgICAgIGNvbnN0IHNlbDogU2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25zLmZpbmQocyA9PiBzLmFydE5vZGVJZERlY28gPT09ICh2YWx1ZS5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbi5wYXJlbnRJZCk7XHJcbiAgICAgICAgaWYgKHNlbCkge1xyXG4gICAgICAgICAgKHZhbHVlLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uLnN1cHBsaWVyQXJ0aWNsZU5yID0gc2VsLnN1cHBsaWVyQXJ0aWNsZU5yO1xyXG4gICAgICAgIH1cclxuICAgICAgICAodmFsdWUuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24ubWF0ZXJpYWxJZCA9IHRoaXMuX2dldE1hdGVyaWFsSWRGcm9tUGFyZW50KHZhbHVlLm5vZGUpO1xyXG4gICAgICAgIHJldHVybiAodmFsdWUuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb247XHJcbiAgICAgIH0pO1xyXG4gICAgLy8gY29tbWVudGVkIG91dCBmb3IgdGhlIG1vbWVudFxyXG4gICAgLy8gZ2xvYmFsVmFyaWF0aW9ucy5mb3JFYWNoKGcgPT4ge1xyXG4gICAgLy8gICBjb25zdCBwYXJlbnRJZHggPSBzZWxlY3Rpb25zLmZpbmRJbmRleChzID0+IHMuZGVjb05vZGUgJiYgcy5kZWNvTm9kZS5pZCA9PT0gZy5wYXJlbnRJZCk7XHJcbiAgICAvLyAgIGlmIChwYXJlbnRJZHgpIHsgLy8gcmVtb3ZlIHBhcmVudCBzZWxlY3Rpb25cclxuICAgIC8vICAgICBzZWxlY3Rpb25zLnNwbGljZShwYXJlbnRJZHgsIDEpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIGNvbnN0IGlkeCA9IHNlbGVjdGlvbnMuZmluZEluZGV4KHMgPT4gcy5kZWNvTm9kZSAmJiBzLmRlY29Ob2RlLmlkID09PSBnLmlkKTtcclxuICAgIC8vICAgaWYgKGlkeCkgeyAvLyBtb3ZlIGdlbmVyaWMgdmFyaWF0aW9ucyB0byB0b3BcclxuICAgIC8vICAgICBjb25zdCBzZWxlY3Rpb24gPSBzZWxlY3Rpb25zW2lkeF07XHJcbiAgICAvLyAgICAgc2VsZWN0aW9ucy5zcGxpY2UoaWR4LCAxKTtcclxuICAgIC8vICAgICBzZWxlY3Rpb25zLnVuc2hpZnQoc2VsZWN0aW9uKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcblxyXG4gICAgY29uc3QgdXNlZFZhcmlhdGlvbnM6IEZ1cm5pdHVyZVBhcnRWYXJpYXRpb25bXSA9IFtdO1xyXG4gICAgbGV0IGdsb2JhbFZhcmlhdGlvbnNSZXdyaXRlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBsZW46IG51bWJlciA9IHNlbGVjdGlvbnMubGVuZ3RoO1xyXG4gICAgbGV0IGxhc3RBZGRlZDogU2VsZWN0aW9uO1xyXG4gICAgbGV0IGxhc3RBZGp1c3RhYmxlOiBTZWxlY3Rpb247XHJcbiAgICBsZXQgbmV3UGFydDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHByZXZpb3VzUHJlc0xldmVsOiBudW1iZXIgPSAtMTtcclxuICAgIGxldCBwb3NpdGlvbmluZzogYW55O1xyXG4gICAgbGV0IG9wdGlvblRleHQ6IHN0cmluZztcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSBzZWxlY3Rpb25zW2ldO1xyXG4gICAgICBpZiAoc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsID09PSAxKSB7XHJcbiAgICAgICAgcG9zaXRpb25pbmcgPSBzZWxlY3Rpb24uaGRlY29Qb3NpdGlvbmluZztcclxuICAgICAgICBvcHRpb25UZXh0ID0gc2VsZWN0aW9uLnF1ZXN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzZWxlY3Rpb24ucHJlc2VudGF0aW9uTGV2ZWwgPiBwcmV2aW91c1ByZXNMZXZlbCkge1xyXG4gICAgICAgIHNlbGVjdGlvbi5oZGVjb1Bvc2l0aW9uaW5nID0gc2VsZWN0aW9uLmhkZWNvUG9zaXRpb25pbmcgfHwgcG9zaXRpb25pbmc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNlbGVjdGlvbi5kZWNvTm9kZSkge1xyXG4gICAgICAgIGlmIChzZWxlY3Rpb24uZGVjb05vZGUudHlwZSA9PT0gRGVjb05vZGVUeXBlLlZhcmlhdGlvbikge1xyXG4gICAgICAgICAgY29uc3QgZGVjb05vZGUgPSBzZWxlY3Rpb24uZGVjb05vZGU7XHJcbiAgICAgICAgICAoZGVjb05vZGUgYXMgYW55KS5vcHRpb25UZXh0ID0gb3B0aW9uVGV4dDtcclxuICAgICAgICAgIC8vIGZpbmQgc2VsZWN0aW9uIG9mIHZhcmlhdGlvbiBhbmQgc2V0IG1hdGVyaWFsSWQgaW4gY2FzZSBvZiBtdWx0aW1hdGVyaWFsXHJcbiAgICAgICAgICAoZGVjb05vZGUgYXMgYW55KS5tYXRlcmlhbElkID0gdGhpcy5fZ2V0TWF0ZXJpYWxJZEZyb21QYXJlbnQoZGVjb05vZGUubm9kZUlkKTtcclxuICAgICAgICAgIGlmIChsYXN0QWRkZWQpIHtcclxuICAgICAgICAgICAgaWYgKG5ld1BhcnQpIHtcclxuICAgICAgICAgICAgICBpZiAoKGRlY29Ob2RlIGFzIGFueSkubWF0ZXJpYWxJZCkge1xyXG4gICAgICAgICAgICAgICAgbGFzdEFkZGVkLnZhcmlhdGlvbnMucHVzaChkZWNvTm9kZSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxhc3RBZGRlZC52YXJpYXRpb25zID0gW2RlY29Ob2RlXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGFzdEFkZGVkLnZhcmlhdGlvbnMucHVzaChkZWNvTm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbmV3UGFydCA9IGZhbHNlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGdsb2JhbFZhcmlhdGlvbnNSZXdyaXRlKSB7XHJcbiAgICAgICAgICAgICAgZ2xvYmFsVmFyaWF0aW9ucy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgIGdsb2JhbFZhcmlhdGlvbnNSZXdyaXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ2xvYmFsVmFyaWF0aW9ucy5wdXNoKGRlY29Ob2RlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIGNvbnN0IHZhcmlhdGlvbjogRnVybml0dXJlUGFydFZhcmlhdGlvbiA9IG5ldyBGdXJuaXR1cmVQYXJ0VmFyaWF0aW9uKCk7XHJcbiAgICAgICAgICAvLyB2YXJpYXRpb24uQnJhbmRJZCA9IHNlbGVjdGlvbi5kZWNvTm9kZS5icmFuZElkO1xyXG4gICAgICAgICAgLy8gdmFyaWF0aW9uLkRlc2NyaXB0aW9uID0gc2VsZWN0aW9uLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lO1xyXG4gICAgICAgICAgLy8gdmFyaWF0aW9uLk1hdGVyaWFsSWQgPSAoc2VsZWN0aW9uLmRlY29Ob2RlIGFzIGFueSkubWF0ZXJpYWxJZDtcclxuICAgICAgICAgIC8vIHZhcmlhdGlvbi5TdXBwbGllckFydGljbGVOciA9IChzZWxlY3Rpb24uZGVjb05vZGUgYXMgYW55KS5zdXBwbGllckFydGljbGVOcjtcclxuICAgICAgICAgIC8vIHVzZWRWYXJpYXRpb25zLnB1c2godmFyaWF0aW9uKTtcclxuICAgICAgICB9IGVsc2UgaWYgKChzZWxlY3Rpb24uZGVjb05vZGUudHlwZSA9PT0gRGVjb05vZGVUeXBlLlBhcnQgJiZcclxuICAgICAgICAgIHR5cGVvZiBzZWxlY3Rpb24uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUgPT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgICBzZWxlY3Rpb24uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUubGVuZ3RoKSB8fCAoaXNBcnRpY2xlV2l0aE1hdGVyaWFsKSkge1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGlvbi5kZWNvTm9kZS5raW5kID09PSBEZWNvTm9kZUtpbmQuQWRqdXN0YWJsZSB8fCAoaXNBcnRpY2xlV2l0aE1hdGVyaWFsKSkge1xyXG4gICAgICAgICAgICBzZWxlY3Rpb24udmFyaWF0aW9ucyA9IGdsb2JhbFZhcmlhdGlvbnM7XHJcbiAgICAgICAgICAgIHRoaXMuX2FkanVzdGFibGVzLnB1c2goc2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgaWYgKCFsYXN0QWRkZWQgfHwgKGxhc3RBZGRlZC5ub2RlSWQgIT09IHNlbGVjdGlvbi5ub2RlSWQgfHwgbGFzdEFkZGVkLm5vZGUgIT09IHNlbGVjdGlvbi5ub2RlKSkge1xyXG4gICAgICAgICAgICAgIG5ld1BhcnQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxhc3RBZGRlZCA9IHNlbGVjdGlvbjtcclxuICAgICAgICAgICAgbGFzdEFkanVzdGFibGUgPSBzZWxlY3Rpb247XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5kZWNvTm9kZS5raW5kID09PSBEZWNvTm9kZUtpbmQuQWRkYWJsZSkge1xyXG4gICAgICAgICAgICBzZWxlY3Rpb24udmFyaWF0aW9ucyA9IGxhc3RBZGp1c3RhYmxlID8gbGFzdEFkanVzdGFibGUudmFyaWF0aW9ucyA6IGdsb2JhbFZhcmlhdGlvbnM7XHJcbiAgICAgICAgICAgIGlmIChsYXN0QWRqdXN0YWJsZSkge1xyXG4gICAgICAgICAgICAgIGxhc3RBZGp1c3RhYmxlLmFkZGFibGVzLnB1c2goc2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9hZGRhYmxlcy5wdXNoKHNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIGlmICghbGFzdEFkZGVkIHx8IChsYXN0QWRkZWQubm9kZUlkICE9PSBzZWxlY3Rpb24ubm9kZUlkIHx8IGxhc3RBZGRlZC5ub2RlICE9PSBzZWxlY3Rpb24ubm9kZSkpIHtcclxuICAgICAgICAgICAgICBuZXdQYXJ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsYXN0QWRkZWQgPSBzZWxlY3Rpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHByZXZpb3VzUHJlc0xldmVsID0gc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5fdXBzZXJ0RnVybml0dXJlKHRoaXMuYWN0aXZlSW5zdGFuY2UsXHJcbiAgICAvLyAgIHtWYXJpYXRpb25zOiB1c2VkVmFyaWF0aW9uc30pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0QWRqdXN0YWJsZXMoY2hlY2tHYW1lT2JqZWN0OiBib29sZWFuID0gdHJ1ZSwgY2hlY2tUeXBlOiBib29sZWFuID0gdHJ1ZSk6IFNlbGVjdGlvbltdIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbnMuZmlsdGVyKHMgPT4ge1xyXG4gICAgICBjb25zdCBub2RlOiBEZWNvTm9kZSA9IHMuZGVjb05vZGU7XHJcbiAgICAgIHJldHVybiBub2RlICYmIChjaGVja0dhbWVPYmplY3QgPyBub2RlLmdhbWVPYmplY3ROYW1lIDogdHJ1ZSkgJiYgKGNoZWNrVHlwZSA/IG5vZGUudHlwZSA9PT0gRGVjb05vZGVUeXBlLlBhcnQgOiB0cnVlKSAmJiBub2RlLmtpbmQgPT09IERlY29Ob2RlS2luZC5BZGp1c3RhYmxlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRWYXJpYXRpb25zKCk6IGFueVtdIHtcclxuICAgIGlmICh0aGlzLl9pT25lLmRlY29Ob2Rlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2lPbmUuZGVjb05vZGVzLmZpbHRlcigoZGVjbzogRGVjb05vZGUpID0+IHtcclxuICAgICAgcmV0dXJuIGRlY28udHlwZSA9PT0gRGVjb05vZGVUeXBlLlZhcmlhdGlvbjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlQWRqdXN0YWJsZShpdGVtOiBJdGVtLCBhZGo6IFNlbGVjdGlvbik6IEN1c3RvbU9iamVjdDNEIHtcclxuICAgIGxldCBvYmo6IGFueSA9IHRoaXMuZnVsbDNET2JqZWN0VG9Vc2UgPyB0aGlzLmZ1bGwzRE9iamVjdFRvVXNlLmdldE9iamVjdEJ5TmFtZShhZGouZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUgfHwgYWRqLmdhbWVPYmplY3QpIDogbnVsbDtcclxuICAgIGlmICghb2JqKSB7XHJcbiAgICAgIC8vIGluIGNhc2Ugb2YgZ2xiIGZpbGVzLCB0aGUgaW1wb3J0ZXIgcmVtb3ZlcyBkb3RzIGZyb20gbmFtZXNcclxuICAgICAgY29uc3QgbmFtZSA9IGFkai5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZS5yZXBsYWNlKC9bLl0vZywgJycpO1xyXG4gICAgICBvYmogPSB0aGlzLmZ1bGwzRE9iamVjdFRvVXNlID8gdGhpcy5mdWxsM0RPYmplY3RUb1VzZS5nZXRPYmplY3RCeU5hbWUobmFtZSkgOiBudWxsO1xyXG4gICAgICBpZiAoIW9iaikge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgTm8gb2JqZWN0IHdpdGggbmFtZSAke2Fkai5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZX0gZm91bmQhYCk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBhZGp1c3RhYmxlOiBhbnkgPSBvYmouY2xvbmUoKTtcclxuICAgIGFkanVzdGFibGUubmFtZSA9IHRoaXMuX2NyZWF0ZVVuaXF1ZU5hbWUoaXRlbSwgb2JqKTtcclxuICAgIGFkanVzdGFibGUudXNlckRhdGEuc2VsZWN0aW9uID0gYWRqO1xyXG4gICAgYWRqdXN0YWJsZS5wb3NpdGlvbi5zZXQoMCwgMCwgMCk7XHJcbiAgICBhZGp1c3RhYmxlLnRyYXZlcnNlKGMgPT4ge1xyXG4gICAgICBjLnZpc2libGUgPSAhYy5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnY18nKTtcclxuICAgIH0pO1xyXG4gICAgaXRlbS5hZGRDaGlsZChhZGp1c3RhYmxlKTtcclxuICAgIC8vIHRoZSBvYmplY3QgYmVpbmcgYWRkZWQgdG8gdGhlIGN1c3RvbUZsb29yR3JvdXAgaXMgYmVpbmcgcmVjcmVhdGVkIHNvIHdlIGxvb3NlIHRoZSByZWZlcmVuY2VcclxuICAgIC8vIHRoZXJlZm9yIHdlIG5lZWQgdG8gcmV0cmlldmUgdGhlIGNyZWF0ZWQgb2JqZWN0IGFnYWluXHJcbiAgICBhZGp1c3RhYmxlID0gaXRlbS5nZXRPYmplY3RCeU5hbWUoYWRqdXN0YWJsZS5uYW1lKTtcclxuICAgIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLnB1c2goYWRqdXN0YWJsZSk7XHJcbiAgICByZXR1cm4gYWRqdXN0YWJsZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUFkZGFibGUoaXRlbTogSXRlbSwgYWRkOiBTZWxlY3Rpb24sIHBhcnQyPzogYW55LCBwYXJ0MT86IGFueSk6IEN1c3RvbU9iamVjdDNEIHtcclxuICAgIGNvbnN0IG9iajogYW55ID0gdGhpcy5mdWxsM0RPYmplY3RUb1VzZS5nZXRPYmplY3RCeU5hbWUoYWRkLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lKTtcclxuICAgIGlmICghb2JqKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSB0aGlzLl9nZXRTZWxlY3Rpb25Gcm9tSWQoYWRqLmFydE5vZGVJZERlY28pO1xyXG4gICAgY29uc3QgYWRkYWJsZTogYW55ID0gb2JqLmNsb25lKCk7XHJcbiAgICBhZGRhYmxlLm5hbWUgPSB0aGlzLl9jcmVhdGVVbmlxdWVOYW1lKGl0ZW0sIG9iaik7XHJcbiAgICBhZGRhYmxlLnVzZXJEYXRhLnNlbGVjdGlvbiA9IGFkZDtcclxuICAgIGFkZGFibGUucG9zaXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgYWRkYWJsZS52aXNpYmxlID0gdHJ1ZTtcclxuICAgIGlmIChwYXJ0MSAmJiBwYXJ0Mikge1xyXG4gICAgICByZXR1cm4gdGhpcy5fcGxhY2VBZGRhYmxlKGl0ZW0sIGFkZGFibGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFkZGFibGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wbGFjZUFkZGFibGUoaXRlbTogSXRlbSwgYWRkOiBhbnkpOiBDdXN0b21PYmplY3QzRCB7XHJcbiAgICBpdGVtLmFkZENoaWxkKGFkZCk7XHJcbiAgICBjb25zdCBhZGRhYmxlOiBDdXN0b21PYmplY3QzRCA9IGl0ZW0uZ2V0T2JqZWN0QnlOYW1lKGFkZC5uYW1lKSBhcyBDdXN0b21PYmplY3QzRDtcclxuICAgIHRoaXMuX3BsYWNlZEFkZGFibGVzLnB1c2goYWRkYWJsZSk7XHJcbiAgICByZXR1cm4gYWRkYWJsZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZVVuaXF1ZU5hbWUoaXRlbTogSXRlbSwgb2JqOiBPYmplY3QzRCk6IHN0cmluZyB7XHJcbiAgICBsZXQgaXRlcmF0aW9uID0gMDtcclxuICAgIGxldCBuYW1lID0gYCR7aXRlbS5uYW1lfV8ke29iai5uYW1lfWA7XHJcbiAgICBsZXQgZXhpc3RpbmdPYmogPSBpdGVtLmdldE9iamVjdEJ5TmFtZShuYW1lKTtcclxuICAgIHdoaWxlIChleGlzdGluZ09iaikge1xyXG4gICAgICBpdGVyYXRpb24rKztcclxuICAgICAgbmFtZSA9IGAke2l0ZW0ubmFtZX1fJHtvYmoubmFtZX1gICsgKGl0ZXJhdGlvbiAhPT0gMCA/ICgnXycgKyBpdGVyYXRpb24pIDogJycpO1xyXG4gICAgICBleGlzdGluZ09iaiA9IGl0ZW0uZ2V0T2JqZWN0QnlOYW1lKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wbGFjZUFkZGFibGVzKGl0ZW06IEl0ZW0pOiB2b2lkIHtcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXMubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5fcGxhY2VkQWRqdXN0YWJsZXNbaV0udXNlckRhdGEuaGFzT3duUHJvcGVydHkoJ3NlbGVjdGlvbicpICYmIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzW2ldLnVzZXJEYXRhLnNlbGVjdGlvbikge1xyXG4gICAgICAgIGNvbnN0IGFkanVzdGFibGVTZWxlY3Rpb246IFNlbGVjdGlvbiA9IHRoaXMuX3BsYWNlZEFkanVzdGFibGVzW2ldLnVzZXJEYXRhLnNlbGVjdGlvbjtcclxuICAgICAgICBpZiAoYWRqdXN0YWJsZVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgY29uc3QgbGVuYTogbnVtYmVyID0gYWRqdXN0YWJsZVNlbGVjdGlvbi5hZGRhYmxlcy5sZW5ndGg7XHJcbiAgICAgICAgICBsZXQgY29uQWRkYWJsZTogYW55O1xyXG4gICAgICAgICAgZm9yIChsZXQgaWEgPSAwOyBpYSA8IGxlbmE7IGlhKyspIHtcclxuICAgICAgICAgICAgU2NlbmUzRFV0aWwuVHJ5U2VsZWN0b3JDb25uZWN0aW9uKHRoaXMuc2NlbmUsXHJcbiAgICAgICAgICAgICAgaXRlbSwgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXNbaV0sIGFkanVzdGFibGVTZWxlY3Rpb24uYWRkYWJsZXNbaWFdLCBmYWxzZSxcclxuICAgICAgICAgICAgICAoYWRkLCBwYXJ0Mj8sIHBhcnQxPykgPT4gdGhpcy5fY3JlYXRlQWRkYWJsZShpdGVtLCBhZGQsIHBhcnQyLCBwYXJ0MSkpO1xyXG4gICAgICAgICAgICBpZiAoY29uQWRkYWJsZSkge1xyXG4gICAgICAgICAgICAgIFNjZW5lM0RVdGlsLlRyeVNlbGVjdG9yQ29ubmVjdGlvbih0aGlzLnNjZW5lLFxyXG4gICAgICAgICAgICAgICAgaXRlbSwgY29uQWRkYWJsZSwgYWRqdXN0YWJsZVNlbGVjdGlvbi5hZGRhYmxlc1tpYV0sIGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgKGFkZCwgcGFydDI/LCBwYXJ0MT8pID0+IHRoaXMuX2NyZWF0ZUFkZGFibGUoaXRlbSwgYWRkLCBwYXJ0MiwgcGFydDEpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25BZGRhYmxlID0gdGhpcy5fcGxhY2VkQWRkYWJsZXNbdGhpcy5fcGxhY2VkQWRkYWJsZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9sb2FkVmFyaWF0aW9ucyhpdGVtOiBJdGVtLCBpbnN0YW5jZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy51c2VWYXJpYXRpb25PblBhcnQpIHtcclxuICAgICAgYXdhaXQgdGhpcy5fdmFyaWF0aW9uU2VydmljZS5sb2FkUGFydCh0aGlzLmFydGljbGVBc3NldFBhdGgsIHRoaXMuX2FkanVzdGFibGVzLCBpbnN0YW5jZUlkLCBpdGVtLCB0cnVlKTtcclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMuX3ZhcmlhdGlvblNlcnZpY2UubG9hZFZhcmlhdGlvbih0aGlzLmFydGljbGVBc3NldFBhdGgsIHRoaXMuX2FkanVzdGFibGVzLCBpbnN0YW5jZUlkLCBpdGVtLCB0cnVlKTtcclxuICAgIGF3YWl0IHRoaXMuX3ZhcmlhdGlvblNlcnZpY2UubG9hZFZhcmlhdGlvbih0aGlzLmFydGljbGVBc3NldFBhdGgsIHRoaXMuX2FkZGFibGVzLCBpbnN0YW5jZUlkLCBpdGVtLCB0cnVlKTtcclxuICAgIHRoaXMuX3ZhcmlhdGlvblNlcnZpY2UuY2xlYXJDYWNoZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvd1dhcm5pbmcoZGF0YTogSW5mb0RpYWxvZ0RhdGEpIHtcclxuICAgIGNvbnN0IGRpYWxvZ0RhdGE6IEluZm9EaWFsb2dEYXRhID0ge1xyXG4gICAgICB0aXRsZTogdGhpcy5fZGljdGlvbmFyeVNlcnZpY2UuZ2V0KGRhdGEudGl0bGUpLCBtZXNzYWdlOiB0aGlzLl9kaWN0aW9uYXJ5U2VydmljZS5nZXQoZGF0YS5tZXNzYWdlKVxyXG4gICAgfTtcclxuICAgIHRoaXMuX2RpYWxvZy5vcGVuKEluZm9EaWFsb2dDb21wb25lbnQsIHtkYXRhOiBkaWFsb2dEYXRhfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVwYXJlU3RhbmRBbG9uZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbGxpc2lvbk1hbmFnZXIuY2hlY2tDb2xsaXNpb25zID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuY2FtZXJhUG9zaXRpb25GaXhlZCkge1xyXG4gICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmxvY2tDYW1lcmEoKTtcclxuICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5kaXNhYmxlUm90YXRlSG9yaXpvbnRhbCgpO1xyXG4gICAgICAvLyB0aGlzLl9jYW1lcmFTZXJ2aWNlLmRpc2FibGVSb3RhdGVWZXJ0aWNhbCgpO1xyXG4gICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmRpc2FibGVQYW4oKTtcclxuICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5jb250cm9scy50YXJnZXQgPSBuZXcgVmVjdG9yMygwLCA1MCwgMCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zY2VuZUV2ZW50U2VydmljZS5yb3RhdGVOb0RyYWcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlbG9hZE1hdGVyaWFsKGFuc3dlcjogQW5zd2VyKTogdm9pZCB7XHJcbiAgICBpZiAoYW5zd2VyLmVsZW1lbnRUeXBlID09PSBEZWNvTm9kZVR5cGUuVmFyaWF0aW9uICYmIGFuc3dlci5nYW1lT2JqZWN0KSB7XHJcbiAgICAgIGNvbnN0IHZhcmlhdGlvbnM6IERlY29Ob2RlW10gPSB0aGlzLl9nZXRWYXJpYXRpb25zKCk7XHJcbiAgICAgIGNvbnN0IHZhcmlhdGlvbkRlY29Ob2RlOiBEZWNvTm9kZSA9IHZhcmlhdGlvbnMuZmluZCh2ID0+XHJcbiAgICAgICAgKCh2LnBhcmVudElkICYmIGFuc3dlci5wYXJlbnRBcnRpY2xlRGVjb0lkICYmIHYucGFyZW50SWQudG9TdHJpbmcoKSA9PT0gYW5zd2VyLnBhcmVudEFydGljbGVEZWNvSWQudG9TdHJpbmcoKSkgfHxcclxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICh2LnBhcmVudElkICYmIGFuc3dlci5wYXJlbnROb2RlSWQgJiYgdi5wYXJlbnRJZC50b1N0cmluZygpID09PSBhbnN3ZXIucGFyZW50Tm9kZUlkLnRvU3RyaW5nKCkpKSk7XHJcbiAgICAgIGlmICghdmFyaWF0aW9uRGVjb05vZGUgfHwgIXRoaXMuY3VycmVudEN1c3RvbUZsb29yR3JvdXApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGFmZmVjdGVkU2VsZWN0aW9uczogU2VsZWN0aW9uW10gPSBbXTtcclxuICAgICAgaWYgKHRoaXMuX2dlbmVyaWNTZWxlY3Rpb24pIHtcclxuICAgICAgICBhZmZlY3RlZFNlbGVjdGlvbnMgPSB0aGlzLl9hZGp1c3RhYmxlcztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uOiBTZWxlY3Rpb24gPSBPYmplY3RVdGlscy5HZXRTZWxlY3Rpb25Gcm9tU2VsZWN0ZWRPYmplY3QodGhpcy5fYWN0aXZlQ2hpbGRFbGVtZW50KTtcclxuICAgICAgICBhZmZlY3RlZFNlbGVjdGlvbnMgPSBbdGhpcy5fYWRqdXN0YWJsZXMuZmluZCgoc2VsZWN0aW9uOiBTZWxlY3Rpb24pID0+IHNlbGVjdGlvbi5ub2RlSWQgPT09IGN1cnJlbnRTZWxlY3Rpb24ubm9kZUlkKV07XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYWRqdXN0YWJsZXNDbG9uZTogU2VsZWN0aW9uW10gPSBhZmZlY3RlZFNlbGVjdGlvbnMgJiYgYWZmZWN0ZWRTZWxlY3Rpb25zLmxlbmd0aCA+IDAgPyBhZmZlY3RlZFNlbGVjdGlvbnMubWFwKHMgPT4gT2JqZWN0LmFzc2lnbih7fSwgcykpIDogW107XHJcbiAgICAgIGlmIChhZGp1c3RhYmxlc0Nsb25lLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBhZGp1c3RhYmxlc0Nsb25lLmZvckVhY2goKHNlbGVjdGlvbjogU2VsZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFyaWF0aW9uID0gc2VsZWN0aW9uLnZhcmlhdGlvbnMuZmluZCh2ID0+IChcclxuICAgICAgICAgIHYgYXMgdW5rbm93biBhcyBWYXJpYXRpb24pLmRlY29JZC50b1N0cmluZygpID09PSB2YXJpYXRpb25EZWNvTm9kZS5pZC50b1N0cmluZygpICYmICh2IGFzIHVua25vd24gYXMgVmFyaWF0aW9uKS5ub2RlLnRvU3RyaW5nKCkgPT09IHZhcmlhdGlvbkRlY29Ob2RlLm5vZGVJZC50b1N0cmluZygpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodmFyaWF0aW9uKSB7XHJcbiAgICAgICAgICB2YXJpYXRpb24uZ2FtZU9iamVjdE5hbWUgPSBhbnN3ZXIuZ2FtZU9iamVjdDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLl92YXJpYXRpb25DYWNoZVNlcnZpY2UucHJlbG9hZFZhcmlhdGlvbnNBc3luYyhhZGp1c3RhYmxlc0Nsb25lWzBdLnNjaGVtYSwgW2Fuc3dlci5nYW1lT2JqZWN0XSwgdGhpcy5hcnRpY2xlQXNzZXRQYXRoKVxyXG4gICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvblNlcnZpY2UubG9hZFZhcmlhdGlvbih0aGlzLmFydGljbGVBc3NldFBhdGgsIGFkanVzdGFibGVzQ2xvbmUsICcnLCB0aGlzLmN1cnJlbnRDdXN0b21GbG9vckdyb3VwLCB0cnVlKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
1672
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtZnVybml0dXJlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3NlcnZpY2UvYnVpbGQtZnVybml0dXJlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUN0RixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMERBQTBELENBQUM7QUFFdEYsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBaUIsS0FBSyxFQUFFLGFBQWEsRUFBa0Isb0JBQW9CLEVBQUUsUUFBUSxFQUFrQixPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFcEksT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBQzdFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDZEQUE2RCxDQUFDO0FBQzdGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRSxPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDeEUsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2hELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6RCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxpREFBaUQs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O3FCQUNKO3lCQUFNO3dCQUNILE1BQU0sd0JBQXdCLEdBQWMsSUFBSSxDQUFDLFlBQVk7NkJBQ3hELElBQUksQ0FBQyxDQUFDLFNBQW9CLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ2xGLHdCQUF3QixDQUFDLFVBQVUsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7cUJBQzdEO2lCQUNKO2FBQ0o7U0FDSjtJQUNMLENBQUM7O21IQS90RFEscUJBQXFCO3VIQUFyQixxQkFBcUI7NEZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGVjb05vZGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvZGVjby1ub2RlJztcclxuaW1wb3J0IHtEZWNvTm9kZVR5cGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9kZWNvLW5vZGUtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtEZWNvTm9kZUtpbmR9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9kZWNvLW5vZGUta2luZC5lbnVtJztcclxuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvc2VsZWN0aW9uJztcclxuaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1N1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7QW5zd2VyfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2Fuc3dlcic7XHJcbmltcG9ydCB7QnVmZmVyR2VvbWV0cnksIEV1bGVyLCBJbnN0YW5jZWRNZXNoLCBNYXRlcmlhbCwgTWVzaCwgTWVzaFN0YW5kYXJkTWF0ZXJpYWwsIE9iamVjdDNELCBTY2VuZSwgVGV4dHVyZSwgVmVjdG9yM30gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHtOb2RlVHlwZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9lbnVtL25vZGUtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtIZGVjb1Bvc2l0aW9uaW5nfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL2VudW0vaGRlY28tcG9zaXRpb25pbmcuZW51bSc7XHJcbmltcG9ydCB7ZW52aXJvbm1lbnR9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XHJcbmltcG9ydCAqIGFzIFRXRUVOIGZyb20gJ0B0d2VlbmpzL3R3ZWVuLmpzJztcclxuaW1wb3J0IHtGYWN0b3J5fSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvZmFjdG9yeSc7XHJcbmltcG9ydCB7Q3VzdG9tRmxvb3JJdGVtfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvY3VzdG9tLWZsb29yLWl0ZW0nO1xyXG5pbXBvcnQge0l0ZW19IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtJztcclxuaW1wb3J0IHtJdGVtVHlwZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2l0ZW0tdHlwZSc7XHJcbmltcG9ydCB7TWV0YWRhdGF9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9pdGVtcy9tZXRhZGF0YSc7XHJcbmltcG9ydCB7Q3VzdG9tRmxvb3JHcm91cFJlc3VsdH0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL21vZGVsL2N1c3RvbS1mbG9vci1ncm91cC1yZXN1bHQnO1xyXG5pbXBvcnQge0Z1cm5pdHVyZUludGVncmF0aW9ufSBmcm9tICcuLi9tb2RlbC9mdXJuaXR1cmUtaW50ZWdyYXRpb24nO1xyXG5pbXBvcnQge1RocmVlZHNlbGVjdG9yU2VydmljZX0gZnJvbSAnLi90aHJlZWRzZWxlY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtDb2xsaXNpb25NYW5hZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2NvbGxpc2lvbi1tYW5hZ2VyL2NvbGxpc2lvbi1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VCdXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7SHVkU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvaHVkLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL3NlcnZpY2Uvc2NlbmUuc2VydmljZSc7XHJcbmltcG9ydCB7Q2FtZXJhU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvY2FtZXJhLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lRXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9zY2VuZS1ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmVzZXRzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3ByZXNldHMuc2VydmljZSc7XHJcbmltcG9ydCB7SXRlbVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2l0ZW0uc2VydmljZSc7XHJcbmltcG9ydCB7RWxlbWVudFNlcnZpY2V9IGZyb20gJy4vZWxlbWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQZXJtYW5lbnRTdG9yZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9wZXJtYW5lbnQtc3RvcmUuc2VydmljZSc7XHJcbmltcG9ydCB7R29vZ2xlVGFnTWFuYWdlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2UvZ29vZ2xlLXRhZy1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3V0aWxzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZhcmlhdGlvblNlcnZpY2V9IGZyb20gJy4vdmFyaWF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FwcFN0YXRlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2FwcC1zdGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtFcnJvclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9lcnJvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtJdGVtR3JvdXBTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9pdGVtLWdyb3VwLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZhcmlhdGlvbkNhY2hlU2VydmljZX0gZnJvbSAnLi92YXJpYXRpb24tY2FjaGUuc2VydmljZSc7XHJcbmltcG9ydCB7UmVzaXplU2VydmljZX0gZnJvbSAnLi9yZXNpemUuc2VydmljZSc7XHJcbmltcG9ydCB7Vmlld01vZGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2Uvdmlldy1tb2RlLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge1NjZW5lM0RVdGlsfSBmcm9tICcuLi91dGlscy9zY2VuZS0zZC51dGlscyc7XHJcbmltcG9ydCB7RXJyb3JNZXNzYWdlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL21vZGVsL2Vycm9yLW1lc3NhZ2UnO1xyXG5pbXBvcnQge1ZpZXdNb2RlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudW0vdmlldy1tb2RlLmVudW0nO1xyXG5pbXBvcnQge1Jlc3VsdFR5cGV9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9lbnVtL3Jlc3VsdC10eXBlLmVudW0nO1xyXG5pbXBvcnQge2lzTmlsbH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscy9mdW5jdGlvbi9pcy1uaWxsLmZ1bmN0aW9uJztcclxuaW1wb3J0IHtVdGlsc30gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2NvcmUvdXRpbHMnO1xyXG5pbXBvcnQge01hdGVyaWFsVXRpbHN9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdXRpbHMvbWF0ZXJpYWwudXRpbHMnO1xyXG5pbXBvcnQge0Zsb29yUGlufSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvZmxvb3ItcGluJztcclxuaW1wb3J0IHtXYWxsUGlufSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvd2FsbC1waW4nO1xyXG5pbXBvcnQge0Z1cm5pdHVyZVBhcnRJbnRlZ3JhdGlvbn0gZnJvbSAnLi4vbW9kZWwvZnVybml0dXJlLXBhcnQtaW50ZWdyYXRpb24nO1xyXG5pbXBvcnQge0N1c3RvbU1lc2gsIEN1c3RvbU9iamVjdDNEfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvY3VzdG9tLW9iamVjdHMnO1xyXG5pbXBvcnQge0Z1cm5pdHVyZVBhcnRWYXJpYXRpb259IGZyb20gJy4uL21vZGVsL2Z1cm5pdHVyZS1wYXJ0LXZhcmlhdGlvbic7XHJcbmltcG9ydCB7RnVybml0dXJlQ29ubmVjdGVkUGFydEludGVncmF0aW9ufSBmcm9tICcuLi9tb2RlbC9mdXJuaXR1cmUtY29ubmVjdGVkLXBhcnQtaW50ZWdyYXRpb24nO1xyXG5pbXBvcnQge0dvb2dsZVRhZ01hbmFnZXJFdmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9lbnVtL2dvb2dsZS10YWctbWFuYWdlci1ldmVudC5lbnVtJztcclxuaW1wb3J0IHtDaGFuZ2VzSW50ZXJmYWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9jaGFuZ2VzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7Q3VzdG9tV2FsbEZsb29ySXRlbX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2N1c3RvbS13YWxsLWZsb29yLWl0ZW0nO1xyXG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3V0aWxzL29iamVjdC51dGlscyc7XHJcbmltcG9ydCB7SW5mb0RpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2luZm8tZGlhbG9nL2luZm8tZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7SW5mb0RpYWxvZ0RhdGF9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvaW50ZXJmYWNlL2luZm8tZGlhbG9nLWRhdGEuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JEaWN0aW9uYXJ5U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItZGljdGlvbmFyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQXBwRXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1hcHAtZXZlbnQuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7Rmxvb3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9mbG9vci5zZXJ2aWNlJztcclxuaW1wb3J0IHtGbG9vclBsYW5lSXRlbX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2Zsb29yLXBsYW5lLWl0ZW0nO1xyXG5pbXBvcnQge1xyXG4gICAgRmxvb3JQYXR0ZXJuLFxyXG4gICAgRmxvb3JQYXR0ZXJuRGlyZWN0aW9uLFxyXG4gICAgRmxvb3JQYXR0ZXJuU2VydmljZSxcclxuICAgIEZsb29yUGF0dGVyblRyYW5zZm9ybVxyXG59IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2Zsb29yLXBhdHRlcm4uc2VydmljZSc7XHJcbmltcG9ydCB7Rmxvb3JDb3VudFJlc3VsdCwgRmxvb3JUaWxlSW50ZXJzZWN0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvZmxvb3ItdGlsZS1pbnRlcnNlY3Rpb24uc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtBcnRpY2xlRnVsbE9iamVjdH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1mdWxsLW9iamVjdCc7XHJcbmltcG9ydCB7T3V0bGluZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL291dGxpbmUuc2VydmljZSc7XHJcbmltcG9ydCB7VmFyaWF0aW9ufSBmcm9tICcuLi9tb2RlbC92YXJpYXRpb24nO1xyXG5pbXBvcnQge1NlbGVjdG9yU3RydWN0dXJlfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL3NlbGVjdG9yLXN0cnVjdHVyZS5ibyc7XHJcblxyXG5jb25zdCBkZWZhdWx0UG9zaXRpb24gPSBuZXcgVmVjdG9yMyg0LCAwLCAxKTtcclxuY29uc3QgZGVmYXVsdFJvdGF0aW9uID0gbmV3IEV1bGVyKDAsIE1hdGguUEksIDApO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb25maWd1cmluZ01vZGVDaGFuZ2VJbnRlcmZhY2Uge1xyXG4gICAgbWV0YWRhdGE6IE1ldGFkYXRhO1xyXG4gICAgY29uZmlndXJpbmc6IGJvb2xlYW47XHJcbn1cclxuXHJcbmludGVyZmFjZSBGbG9vclBhdHRlcm5JbmZvIHtcclxuICAgIG1lc2hJZExlZnQ6IHN0cmluZztcclxuICAgIG1lc2hJZFJpZ2h0OiBzdHJpbmc7XHJcbiAgICBmbG9vclBhdHRlcm46IEZsb29yUGF0dGVybjtcclxuICAgIGZsb29yUGF0dGVybkRpcmVjdGlvbjogRmxvb3JQYXR0ZXJuRGlyZWN0aW9uO1xyXG4gICAgaGVhcnRMaW5lOiBudW1iZXI7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEJ1aWxkRnVybml0dXJlU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgICAvLyBwdWJsaWMgZ2V0IGRlY29zKCk6IE1hcDxzdHJpbmcsIERlY29Ob2RlPiB7XHJcbiAgICAvLyAgIHJldHVybiB0aGlzLl9nZXREZWNvc0Zyb21JbnN0YW5jZSgpO1xyXG4gICAgLy8gfVxyXG4gICAgcHVibGljIGJhc2VFbGVtZW50Tm9kZUlkOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIGFydGljbGVBc3NldFBhdGg6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgdG9nZ2xlU2VsZWN0ZWRFbGVtZW50OiBTdWJqZWN0PE1lc2g+ID0gbmV3IFN1YmplY3Q8TWVzaD4oKTtcclxuICAgIHB1YmxpYyBjb25maWd1cmVNb2RlQ2hhbmdlZDogU3ViamVjdDxDb25maWd1cmluZ01vZGVDaGFuZ2VJbnRlcmZhY2U+ID0gbmV3IFN1YmplY3Q8eyBtZXRhZGF0YToge30sIGNvbmZpZ3VyaW5nOiBmYWxzZSB9PigpO1xyXG4gICAgcHVibGljIGJ1aWxkRmluaXNoZWQ6IFN1YmplY3Q8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4gPSBuZXcgU3ViamVjdDxDdXN0b21GbG9vckdyb3VwUmVzdWx0PigpO1xyXG4gICAgcHVibGljIGFuc3dlclNlbGVjdGVkOiBTdWJqZWN0PEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+ID0gbmV3IFN1YmplY3Q8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4oKTtcclxuICAgIHB1YmxpYyBhclBsYWNlbWVudFVwZGF0ZTogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgICBwdWJsaWMgc2hvd0VsZW1lbnRUb29sYmFyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXJ0UG9zaXRpb246IFZlY3RvcjM7XHJcbiAgICBwdWJsaWMgZnVsbDNET2JqZWN0VG9Vc2U6IE9iamVjdDNEO1xyXG5cclxuICAgIHB1YmxpYyBpc01vdXNlT3Zlck9iamVjdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHVzZWQgZm9yIGVsZW1lbnRzLCB0byBwbGFjZSBvYmplY3RzIG9uXHJcbiAgICBwdWJsaWMgYWN0aXZlQ29ubmVjdG9yOiBhbnk7XHJcblxyXG4gICAgcHVibGljIGdldCB1c2VOb2RlSWRUb0xpbmsoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZU5vZGVJZFRvTGluaztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRDdXN0b21GbG9vckdyb3VwKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHN0YW5kQWxvbmUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YW5kQWxvbmU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBzdGFuZEFsb25lKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fc3RhbmRBbG9uZSA9IHZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLl9zdGFuZEFsb25lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVTdGFuZEFsb25lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgc2VsZWN0aW9ucygpOiBTZWxlY3Rpb25bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lPbmUuc2VsZWN0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhbmRBbG9uZUZpcnN0QnVpbGRSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgZ2V0IHNjZW5lKCk6IFNjZW5lIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2NlbmVTZXJ2aWNlLmdldFNjZW5lKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdXNlTm9kZUlkVG9MaW5rOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHByaXZhdGUgX3N0YW5kQWxvbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIF9hY3RpdmVDaGlsZEVsZW1lbnQ6IE1lc2g7XHJcblxyXG4gICAgcHJpdmF0ZSBfb3JpZ2luYWxFbGVtZW50UG9zaXRpb246IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgcHJpdmF0ZSBfaW50ZWdyYXRpb25FbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9wbGFjZWRBZGp1c3RhYmxlczogYW55W10gPSBbXTtcclxuICAgIHByaXZhdGUgX3BsYWNlZEFkZGFibGVzOiBhbnlbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfYWRqdXN0YWJsZXM6IGFueVtdID0gW107XHJcbiAgICBwcml2YXRlIF9hZGRhYmxlczogYW55W10gPSBbXTtcclxuICAgIHByaXZhdGUgX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwOiBJdGVtO1xyXG4gICAgcHJpdmF0ZSBfZ2VuZXJpY1NlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICAgIHByaXZhdGUgX2Fuc3dlclNlbGVjdGVkOiBBbnN3ZXJbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uc1NlbGVjdGVkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfZnVybml0dXJlQ29uZmlndXJhdGlvbnM6IEZ1cm5pdHVyZUludGVncmF0aW9uW10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcclxuICAgICAgICBwcml2YXRlIF9pT25lOiBIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF90aHJlZWRTZWxlY3RvclNlcnZpY2U6IFRocmVlZHNlbGVjdG9yU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9jb2xsaXNpb25NYW5hZ2VyOiBDb2xsaXNpb25NYW5hZ2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9tZXNzYWdlQnVzOiBNZXNzYWdlQnVzU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9kaWN0aW9uYXJ5U2VydmljZTogSG9tZWRlY29yYXRvckRpY3Rpb25hcnlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2h1ZFNlcnZpY2U6IEh1ZFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfc2NlbmVTZXJ2aWNlOiBTY2VuZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfY2FtZXJhU2VydmljZTogQ2FtZXJhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9zY2VuZUV2ZW50U2VydmljZTogU2NlbmVFdmVudFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXBwRXZlbnRTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQXBwRXZlbnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3ByZXNldFNlcnZpY2U6IFByZXNldHNTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2l0ZW1TZXJ2aWNlOiBJdGVtU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9lbGVtZW50U2VydmljZTogRWxlbWVudFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfcGVybWFuZW50U3RvcmVTZXJ2aWNlOiBQZXJtYW5lbnRTdG9yZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZ29vZ2xlVGFnTWFuYWdlcjogR29vZ2xlVGFnTWFuYWdlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfc2V0dGluZ3NTZXJ2aWNlOiBIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3V0aWxzU2VydmljZTogVXRpbHNTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3ZhcmlhdGlvblNlcnZpY2U6IFZhcmlhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXBwU3RhdGVTZXJ2aWNlOiBBcHBTdGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfaXRlbUdyb3VwU2VydmljZTogSXRlbUdyb3VwU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF92YXJpYXRpb25DYWNoZVNlcnZpY2U6IFZhcmlhdGlvbkNhY2hlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9yZXNpemVTZXJ2aWNlOiBSZXNpemVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3ZpZXdNb2RlU2VydmljZTogVmlld01vZGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2Zsb29yU2VydmljZTogRmxvb3JTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2Zsb29yUGF0dGVyblNlcnZpY2U6IEZsb29yUGF0dGVyblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZmxvb3JUaWxlSW50ZXJzZWN0aW9uU2VydmljZTogRmxvb3JUaWxlSW50ZXJzZWN0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9jb25uZWN0b3JBZGFwdGVyU2VydmljZTogSG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX291dGxpbmVTZXJ2aWNlOiBPdXRsaW5lU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLl9pT25lLmNvbm5lY3Rpb25SZXNldC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5faGFuZGxlQ29ubmVjdGlvblJlc2V0KCkpLFxyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5JdGVtUmVtb3ZlZCwgKHJlc3VsdDogeyBpdGVtOiBhbnksIGFkZGVkVG9Hcm91cDogYm9vbGVhbiB9KSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlSXRlbVJlbW92ZWRGcm9tU2NlbmUocmVzdWx0KSksXHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlVuZG8sICgpID0+IHRoaXMuX3N0YXJ0V2l0aE5ldyhmYWxzZSkpLFxyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5SZWRvLCAoKSA9PiB0aGlzLl9zdGFydFdpdGhOZXcoZmFsc2UpKSxcclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuU3RhcnRXaXRoRW1wdHlSb29tLCAoKSA9PiB0aGlzLl9zdGFydFdpdGhOZXcoKSksXHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlN0YXJ0V2l0aFByZXNldCwgKCkgPT4gdGhpcy5fc3RhcnRXaXRoTmV3KCkpLFxyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5Mb2FkUm9vbUZyb21QcmVzZXQsICgpID0+IHRoaXMuX3N0YXJ0V2l0aE5ldygpKSxcclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuTG9hZFJvb21Gcm9tQ2xvdWQsICgpID0+IHRoaXMuX3N0YXJ0V2l0aE5ldygpKSxcclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuTmV3Um9vbSwgKCkgPT4gdGhpcy5fc3RhcnRXaXRoTmV3KCkpLFxyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5SZXNldFJvb21wbGFuLCAoKSA9PiB0aGlzLl9zdGFydFdpdGhOZXcoKSksXHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkxvYWRTY2FsZWREaWFncmFtLCAoKSA9PiB0aGlzLl9zdGFydFdpdGhOZXcoKSksXHJcbiAgICAgICAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5lbmFibGVJbnRlZ3JhdGlvbi5zdWJzY3JpYmUoKGVuYWJsZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW5hYmxlSW50ZWdyYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXNldFNlcnZpY2UuYmVmb3JlTG9hZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xlYW51cEJlZm9yZVByZXNldExvYWQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0V2l0aE5ldygpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgdGhpcy5fcHJlc2V0U2VydmljZS5hZnRlckxvYWQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2hhbmRsZUFmdGVyUHJlc2V0TG9hZCgpKSxcclxuICAgICAgICAgICAgdGhpcy5fcGVybWFuZW50U3RvcmVTZXJ2aWNlLmNvZGVTZXQuc3Vic2NyaWJlKChjb2RlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChjb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0Q29kZU9uRnVybml0dXJlQ29uZmlndXJhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGJ1aWxkKHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCk6IFByb21pc2U8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4ge1xyXG4gICAgICAgIHRoaXMuX2VsZW1lbnRTZXJ2aWNlLnJlbW92ZUVsZW1lbnQocmVzdWx0Lmluc3RhbmNlSWQpO1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lm1ldGFEYXRhICYmIHJlc3VsdC5tZXRhRGF0YS5pdGVtVHlwZSA9PT0gSXRlbVR5cGUuRmxvb3JEZWNvcmF0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWlsZEZsb29yKHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5mdWxsM0RPYmplY3RUb1VzZSkgeyAvLyB0aGVyZSdzIG5vIDNkIG1vZGVsIHNvIGdldCBvdXRcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYWRqdXN0YWJsZXM6IFNlbGVjdGlvbltdID0gdGhpcy5fZ2V0QWRqdXN0YWJsZXMoKTtcclxuICAgICAgICBpZiAoYWRqdXN0YWJsZXMgJiYgYWRqdXN0YWJsZXMubGVuZ3RoID09PSAwICYmIHRoaXMuc2VsZWN0aW9ucyAmJiB0aGlzLnNlbGVjdGlvbnMubGVuZ3RoID4gMCkgeyAvLyBjaGVjayBpZiBhcnRpY2xlIGhhcyBhIGdhbWVPYmplY3RcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uc1swXS5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuQXJ0aWNsZSAmJiB0aGlzLnNlbGVjdGlvbnNbMF0uZ2FtZU9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgYWRqdXN0YWJsZXMucHVzaCh0aGlzLnNlbGVjdGlvbnNbMF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwID0gdGhpcy5fY3JlYXRlQ29uZmlndXJhYmxlSXRlbShyZXN1bHQuaW5zdGFuY2VJZCwgcmVzdWx0Lm1ldGFEYXRhKTtcclxuICAgICAgICBjb25zdCBpdGVtOiBJdGVtID0gdGhpcy5fY3JlYXRlQ29uZmlndXJhYmxlSXRlbShyZXN1bHQuaW5zdGFuY2VJZCwgcmVzdWx0Lm1ldGFEYXRhKTtcclxuICAgICAgICBpZiAoYWRqdXN0YWJsZXMgJiYgYWRqdXN0YWJsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgY29ubmVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW46IG51bWJlciA9IGFkanVzdGFibGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhZGp1c3RhYmxlOiBPYmplY3QzRCA9IHRoaXMuX2NyZWF0ZUFkanVzdGFibGUoaXRlbSwgYWRqdXN0YWJsZXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFkanVzdGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpaSA9IHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLmxlbmd0aCAtIDE7IGlpID49IDA7IGlpLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzTW92ZWFibGVPYmplY3QoYWRqdXN0YWJsZSkpIHsgLy8gdnJpamUgdmVycGxhYXRzaW5nIG1vZ2VsaWprLCBjb25uZWN0ZW4gYWFuIG9wZ2VzbGFnZW4gY29ubmVjdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiA9IGFkanVzdGFibGUudXNlckRhdGEuc2VsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkRWxlbWVudE9uQ29ubmVjdG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sIGFkanVzdGFibGUsIHNlbGVjdGlvbi5kZWNvQ29ubmVjdGlvbiA/IHNlbGVjdGlvbi5kZWNvQ29ubmVjdGlvbiA6IHRoaXMuYWN0aXZlQ29ubmVjdG9yLCB0aGlzLmJhc2VFbGVtZW50Tm9kZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdGFibGUudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2NlbmUzRFV0aWwuVHJ5U2VsZWN0b3JDb25uZWN0aW9uKHRoaXMuc2NlbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSwgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXNbaWldLCBhZGp1c3RhYmxlLCBpID09PSAxKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdGFibGUudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbm5lY3RlZCAmJiB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlcy5sZW5ndGggPiAxICYmICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmVycm9yTWVzc2FnZXMucHVzaChuZXcgRXJyb3JNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgTm8gY29ubmVjdGlvbiBmb3VuZCBmb3I6ICR7YWRqdXN0YWJsZSA/IGFkanVzdGFibGUubmFtZSA6IGFkanVzdGFibGVzW2ldLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lfWApKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9wbGFjZUFkZGFibGVzKGl0ZW0pO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9sb2FkVmFyaWF0aW9ucyhpdGVtLCByZXN1bHQubWV0YURhdGEuaXRlbUlkKTtcclxuICAgICAgICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAgPSBhd2FpdCB0aGlzLl9yZXBsYWNlQ3VycmVudEl0ZW0oaXRlbSwgcmVzdWx0Lm1ldGFEYXRhLCB0cnVlKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3ZpZXdNb2RlU2VydmljZS52aWV3TW9kZSAhPT0gVmlld01vZGUuSW5QaG90b1ZpZXcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLnVwZGF0ZVBpdm90KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzdWx0LmZ1cm5pdHVyZSA9IHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwO1xyXG4gICAgICAgICAgICByZXN1bHQuaW5zdGFuY2VJZCA9IHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQ7XHJcbiAgICAgICAgICAgIHRoaXMuYXJQbGFjZW1lbnRVcGRhdGUubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5faGFuZGxlSW50ZWdyYXRpb24ocmVzdWx0Lm1ldGFEYXRhLml0ZW1JZCwgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXApO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLml0ZW1Hcm91cCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faXRlbUdyb3VwU2VydmljZS5yZWF0dGFjaFRvSXRlbUdyb3VwKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLml0ZW1Hcm91cCxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fYW5zd2VyU2VsZWN0ZWQubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uc1NlbGVjdGVkLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuR2FtZW9iamVjdE5hbWVNaXNtYXRjaEluU291cmNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5faHVkU2VydmljZS51cGRhdGVTZWxlY3RlZEl0ZW1IdWQoKTtcclxuICAgICAgICAgICAgdGhpcy5idWlsZEZpbmlzaGVkLm5leHQocmVzdWx0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHQuZXJyb3JNZXNzYWdlcy5wdXNoKG5ldyBFcnJvck1lc3NhZ2UoJ05PX0FESlVTVEFCTEVTJywgJ05PX0FESlVTVEFCTEVTX0lORk8nKSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5Ob0FkanVzdGFibGVzO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLk5vU2VsZWN0aW9ucykge1xyXG4gICAgICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuQ29uZmlndXJhdGlvbkZpeGVkO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnJlc3VsdFR5cGUgIT09IFJlc3VsdFR5cGUuT2Jzb2xldGUgJiYgcmVzdWx0LnJlc3VsdFR5cGUgIT09IFJlc3VsdFR5cGUuQ29uZmlndXJhdGlvbkZpeGVkKSB7IC8vIGRvbid0IG92ZXJyaWRlIHRoZXNlXHJcbiAgICAgICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5Mb2FkZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5yZWFkeVRvUmVuZGVyLm5leHQodGhpcy5zdGFuZEFsb25lRmlyc3RCdWlsZFJlYWR5KTtcclxuICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2UudXBkYXRlUGF0aFRyYWNlcigpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHN0YXJ0VG9CdWlsZChcclxuICAgICAgICByZXN1bHQ/OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0LFxyXG4gICAgICAgIG1ldGFkYXRhPzogTWV0YWRhdGEsXHJcbiAgICAgICAgc2hvdWxkQ29weUluc3RhbmNlOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICAgICAgbG9vc2VPcmlnaW5hbENvbmZpZ3VyYXRpb246IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgICAgIHN0YW5kQWxvbmU/OiBib29sZWFuLFxyXG4gICAgICAgIGZpcnN0QnVpbGQ6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgICAgICBmcm9tUHJlc2V0OiBib29sZWFuID0gZmFsc2UsXHJcbiAgICAgICAgbG9hZEZyb21Qcm9qZWN0OiBib29sZWFuID0gZmFsc2VcclxuICAgICk6IFByb21pc2U8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4ge1xyXG4gICAgICAgIGlmICghaXNOaWxsKHN0YW5kQWxvbmUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhbmRBbG9uZSA9IHN0YW5kQWxvbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc05pbGwocmVzdWx0KSkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBuZXcgQ3VzdG9tRmxvb3JHcm91cFJlc3VsdChcclxuICAgICAgICAgICAgICAgIG1ldGFkYXRhID8gbWV0YWRhdGEuaXRlbUlkZW50aWZpZXIgOiAnJyxcclxuICAgICAgICAgICAgICAgIG1ldGFkYXRhID8gbWV0YWRhdGEuaXRlbU5hbWUgOiAndW5rbm93bicpO1xyXG4gICAgICAgICAgICByZXN1bHQubWV0YURhdGEgPSBtZXRhZGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNob3VsZENvcHlJbnN0YW5jZSAmJiAhbG9hZEZyb21Qcm9qZWN0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSW5zdGFuY2VJZDogc3RyaW5nID0gcmVzdWx0Lm1ldGFEYXRhLml0ZW1JZDtcclxuICAgICAgICAgICAgaWYgKGxvb3NlT3JpZ2luYWxDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQubWV0YURhdGEuaXRlbUlkID0gYXdhaXQgdGhpcy5faU9uZS5jb3B5SW5zdGFuY2VBbmRMb3NlT3JpZ2luYWxDb25maWd1cmF0aW9uKG9yaWdpbmFsSW5zdGFuY2VJZCwgcmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxJbnN0YW5jZUlkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Lm1ldGFEYXRhLml0ZW1JZCA9IGF3YWl0IHRoaXMuX2lPbmUuY29weUluc3RhbmNlQW5kU2F2ZU9yaWdpbmFsQ29uZmlndXJhdGlvbihvcmlnaW5hbEluc3RhbmNlSWQsIHJlc3VsdClcclxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsSW5zdGFuY2VJZDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlICE9PSBSZXN1bHRUeXBlLkFydGljbGVOb3RGb3VuZCAmJiAhbG9hZEZyb21Qcm9qZWN0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NldEluc3RhbmNlVG9Db25maWd1cmUocmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiBQcm9taXNlLnJlamVjdChyZXN1bHQpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlc3VsdC5pbnN0YW5jZUlkID0gcmVzdWx0Lm1ldGFEYXRhLml0ZW1JZDtcclxuICAgICAgICB0aGlzLnN0YXJ0UG9zaXRpb24gPSByZXN1bHQubWV0YURhdGEucG9zaXRpb24gPyByZXN1bHQubWV0YURhdGEucG9zaXRpb24uY2xvbmUoKSA6IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4gICAgICAgIGlmIChsb2FkRnJvbVByb2plY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzZXQoKTtcclxuICAgICAgICAgICAgdGhpcy5faU9uZS5zZXRTZWxlY3Rpb25zKHJlc3VsdC5tZXRhRGF0YS5zZWxlY3Rpb25zKTtcclxuICAgICAgICAgICAgdGhpcy5faU9uZS5zZXREZWNvTm9kZXMoQXJyYXkuZnJvbShyZXN1bHQubWV0YURhdGEuZGVjb3MudmFsdWVzKCkpKTtcclxuICAgICAgICAgICAgdGhpcy5fcHJlbG9hZE1hdGVyaWFscyhyZXN1bHQubWV0YURhdGEuc2NoZW1hKTtcclxuICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVRoZVNlbGVjdGlvbnMocmVzdWx0Lmluc3RhbmNlSWQpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5idWlsZChyZXN1bHQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2lPbmUuZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzQXN5bmMoKTsgLy8gc2VlIGlmIHRoZXJlIGlzIHVzZXIgaW5wdXQgbmVlZGVkXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pT25lLmFjdGl2ZUFuc3dlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9wcmVwYXJlU2VsZWN0aW9uc0FuZERlY29zKHJlc3VsdClcclxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IFByb21pc2UucmVqZWN0KGUpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1aWxkKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RCdWlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3ByZXBhcmVTZWxlY3Rpb25zQW5kRGVjb3MocmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IFByb21pc2UucmVqZWN0KGUpKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faU9uZS5zZWxlY3Rpb25zLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLk5lZWRzVXNlcklucHV0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5faU9uZS5zZWxlY3Rpb25zLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLkJ1aWxkRnJvbVNjcmF0Y2g7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9pT25lLnNlbGVjdGlvbnMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuTmVlZHNVc2VySW5wdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE9wdGlvbnNGcm9tU2VsZWN0aW9uKGJhc2VTZWxlY3Rpb246IFNlbGVjdGlvbik6IFNlbGVjdGlvbltdIHtcclxuICAgICAgICBjb25zdCBzZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9IFtdO1xyXG4gICAgICAgIGxldCBub2RlTGV2ZWwgPSAtMTtcclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IHRoaXMuc2VsZWN0aW9ucy5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uc1tpXTtcclxuICAgICAgICAgICAgY29uc3QgbGV2ZWw6IG51bWJlciA9IHNlbGVjdGlvbi5wcmVzZW50YXRpb25MZXZlbDtcclxuICAgICAgICAgICAgaWYgKG5vZGVMZXZlbCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlTGV2ZWwgPCBsZXZlbCAmJiB0aGlzLl9jYW5Db25uZWN0U2VsZWN0aW9ucyhiYXNlU2VsZWN0aW9uLCBzZWxlY3Rpb24pICYmIHRoaXMuX3NlbGVjdGlvblB1Ymxpc2hlZChzZWxlY3Rpb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9ucy5wdXNoKHNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZUxldmVsID49IGxldmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5pZCA9PT0gYmFzZVNlbGVjdGlvbi5pZCAmJiBzZWxlY3Rpb24ubm9kZSA9PT0gYmFzZVNlbGVjdGlvbi5ub2RlKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlTGV2ZWwgPSBsZXZlbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2VsZWN0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZG93bmxvYWRDdXJyZW50Q3VzdG9tRmxvb3Jncm91cCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBvYmplY3RUb0V4cG9ydDogT2JqZWN0M0QgPSB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCA/IHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwIDogdGhpcy5faXRlbVNlcnZpY2UuaXRlbXNbMF07XHJcbiAgICAgICAgdGhpcy5fdXRpbHNTZXJ2aWNlLnNob3dFeHBvcnREaWFsb2cob2JqZWN0VG9FeHBvcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkb3dubG9hZFVEU1pmb3JBUklPUygpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBvYmplY3RUb0V4cG9ydDogT2JqZWN0M0QgPSB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCA/IHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwIDogdGhpcy5faXRlbVNlcnZpY2UuaXRlbXNbMF07XHJcbiAgICAgICAgdGhpcy5fdXRpbHNTZXJ2aWNlLmRvd25sb2FkVVNEWmZvckFSSU9TKG9iamVjdFRvRXhwb3J0KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZG93bmxvYWRDYW52YXMoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXApIHtcclxuICAgICAgICAgICAgY29uc3Qgb2JqZWN0VG9FeHBvcnQ6IE9iamVjdDNEID0gdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuY2xvbmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91dGlsc1NlcnZpY2UuY3JlYXRlQ2FudmFzSW1hZ2Uob2JqZWN0VG9FeHBvcnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRvd25sb2FkVGh1bWJuYWlsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdFRvRXhwb3J0OiBPYmplY3QzRCA9IHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLmNsb25lKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91dGlsc1NlcnZpY2UuY3JlYXRlVGh1bWJuYWlsSW1hZ2Uob2JqZWN0VG9FeHBvcnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZG93bmxvYWRTY2VuZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBhc3NldFBhdGg6IHN0cmluZyA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5hc3NldFBhdGg7XHJcbiAgICAgICAgLy8gVGhlIGdyb3VuZCBwbGFuZSBsb29rcyBvZGQgaW4gcmVuZGVycy5cclxuICAgICAgICAvLyBUaGUgaHVkLXJpbmcgYW5kIGh1ZC1jaXJjbGUgYXJlIHRoZSB3YWxrdGhyb3VnaCBtb2RlIG1hcmtlcixcclxuICAgICAgICAvLyB3aGljaCBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgcmVuZGVyZWQuXHJcbiAgICAgICAgY29uc3QgZWxlbWVudHNUb1JlbW92ZSA9IFsnZ3JvdW5kLXBsYW5lJywgJ2h1ZC1yaW5nJywgJ2h1ZC1jaXJjbGUnXTtcclxuXHJcbiAgICAgICAgbGV0IHNjZW5lOiBTY2VuZTtcclxuICAgICAgICBzY2VuZSA9IHRoaXMuX3NjZW5lU2VydmljZS5zY2VuZS5jbG9uZSgpO1xyXG5cclxuICAgICAgICBlbGVtZW50c1RvUmVtb3ZlLmZvckVhY2goZWxlbWVudE5hbWUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZE9iamVjdDogT2JqZWN0M0QgPSBzY2VuZS5nZXRPYmplY3RCeU5hbWUoZWxlbWVudE5hbWUpO1xyXG4gICAgICAgICAgICBzY2VuZS5yZW1vdmUoc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNjZW5lLmFkZCh0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5jbG9uZSgpKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdXRpbHNTZXJ2aWNlLnNob3dFeHBvcnREaWFsb2coc2NlbmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVTaW1wbGUzRE1vZGVsKHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCwgc3RhbmRBbG9uZT86IGJvb2xlYW4pOiBDdXN0b21GbG9vckdyb3VwUmVzdWx0IHtcclxuICAgICAgICBpZiAoIWlzTmlsbChzdGFuZEFsb25lKSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0YW5kQWxvbmUgPSBzdGFuZEFsb25lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuZnVsbDNET2JqZWN0VG9Vc2UpIHsgLy8gdGhlcmUncyBubyAzZCBtb2RlbCBzbyBnZXQgb3V0XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoZXJlIGFyZSBubyBzZWxlY3Rpb25zIG9yIGRlY29zIGZvciBzaW1wbGUgYXJ0aWNsZXMsIHNvIGVtcHR5IGxpc3RzIGZvciBpbnRlZ3JhdGlvbiBwdXJwb3Nlc1xyXG4gICAgICAgIHRoaXMuX2lPbmUuZW1wdHlTZWxlY3Rpb25zKCk7XHJcbiAgICAgICAgdGhpcy5mdWxsM0RPYmplY3RUb1VzZS5jaGlsZHJlbi5mb3JFYWNoKGMgPT4gYy52aXNpYmxlID0gdHJ1ZSk7XHJcbiAgICAgICAgaWYgKCFyZXN1bHQubWV0YURhdGEucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgcmVzdWx0Lm1ldGFEYXRhLnBvc2l0aW9uID0gdGhpcy5zdGFydFBvc2l0aW9uIHx8IGRlZmF1bHRQb3NpdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFyZXN1bHQubWV0YURhdGEucm90YXRpb24pIHtcclxuICAgICAgICAgICAgcmVzdWx0Lm1ldGFEYXRhLnJvdGF0aW9uID0gcmVzdWx0Lm1ldGFEYXRhLmRlZmF1bHQxODAgPyBkZWZhdWx0Um90YXRpb24gOiBuZXcgRXVsZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaXRlbUNvbnN0cnVjdG9yID0gRmFjdG9yeS5nZXRDbGFzcyh0aGlzLnN0YW5kQWxvbmUgPyBJdGVtVHlwZS5GbG9vckdyb3VwIDogcmVzdWx0Lm1ldGFEYXRhLml0ZW1UeXBlKTtcclxuICAgICAgICBjb25zdCBpdGVtID0gbmV3IGl0ZW1Db25zdHJ1Y3RvcihcclxuICAgICAgICAgICAgcmVzdWx0Lm1ldGFEYXRhLFxyXG4gICAgICAgICAgICB0aGlzLmZ1bGwzRE9iamVjdFRvVXNlLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzaG93SGlkZU91dGxpbmVIYW5kbGVyOiB0aGlzLnNob3dIaWRlT3V0bGluZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXN1bHQubWV0YURhdGEub2JqZWN0VVVJRCA9IGl0ZW0udXVpZDtcclxuICAgICAgICBpdGVtLmFsbG93Um90YXRlID0gIXRoaXMuc3RhbmRBbG9uZTtcclxuICAgICAgICBpdGVtLmhpZ2hMaWdodERpc2FibGVkID0gIXRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnVzZVN0YW5kYWxvbmVIaWdoTGlnaHQ7XHJcblxyXG4gICAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmFkZEl0ZW0oaXRlbSk7XHJcbiAgICAgICAgaWYgKGl0ZW0uaXRlbUdyb3VwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1Hcm91cFNlcnZpY2UucmVhdHRhY2hUb0l0ZW1Hcm91cChpdGVtLCBpdGVtLml0ZW1Hcm91cCwgaXRlbS5wb3NpdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEZvciBzaW1wbGUgYXJ0aWNsZXMgd2UgdXNlIG9iamVjdCB1dWlkLCBiZWNhdXNlIHRoZXkgZG9uJ3QgaGF2ZSBhbiBpbnN0YW5jZUlkXHJcbiAgICAgICAgdGhpcy5fdXBzZXJ0RnVybml0dXJlKGl0ZW0udXVpZCwge0JyYW5kSWRlbnRpZmllcjogcmVzdWx0Lm1ldGFEYXRhLml0ZW1JZGVudGlmaWVyfSwgaXRlbSk7XHJcbiAgICAgICAgdGhpcy5faGFuZGxlSW50ZWdyYXRpb24oaXRlbS51dWlkLCBpdGVtKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAgPSBpdGVtO1xyXG4gICAgICAgIHJlc3VsdC5mdXJuaXR1cmUgPSBpdGVtO1xyXG4gICAgICAgIHRoaXMuX3NjZW5lU2VydmljZS51cGRhdGVQYXRoVHJhY2VyKCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9idWlsZEZsb29yKHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCk6IFByb21pc2U8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4ge1xyXG4gICAgICAgIGxldCBzaW1wbGVGbG9vckFydGljbGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgICAgIGxldCBmbG9vclBhdHRlcm46IEZsb29yUGF0dGVybjtcclxuICAgICAgICBjb25zdCBhcnRpY2xlRnVsbE9iamVjdDogQXJ0aWNsZUZ1bGxPYmplY3QgPSBhd2FpdCB0aGlzLl9jb25uZWN0b3JBZGFwdGVyU2VydmljZS5nZXRBcnRpY2xlRnVsbE9iamVjdCgrcmVzdWx0Lm1ldGFEYXRhLmdvb2RJZCk7XHJcbiAgICAgICAgaWYgKGFydGljbGVGdWxsT2JqZWN0LnRhZ3MgIT09IG51bGwgJiYgYXJ0aWNsZUZ1bGxPYmplY3QudGFncy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGFnIG9mIGFydGljbGVGdWxsT2JqZWN0LnRhZ3MpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0YWcuZGVzY3JpcHRpb24gPT09ICdOT1JNQUwnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmxvb3JQYXR0ZXJuID0gRmxvb3JQYXR0ZXJuLk5PUk1BTDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnLmRlc2NyaXB0aW9uID09PSAnSEVSUklOR0JPTkUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmxvb3JQYXR0ZXJuID0gRmxvb3JQYXR0ZXJuLkhFUlJJTkdCT05FO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcuZGVzY3JpcHRpb24gPT09ICdIT042MCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBmbG9vclBhdHRlcm4gPSBGbG9vclBhdHRlcm4uSE9ONjA7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZy5kZXNjcmlwdGlvbiA9PT0gJ0hPTjQ1Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZsb29yUGF0dGVybiA9IEZsb29yUGF0dGVybi5IT040NTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmxvb3JQYXR0ZXJuID0gRmxvb3JQYXR0ZXJuLk5PUk1BTDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzaW1wbGVGbG9vckFydGljbGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzaW1wbGVGbG9vckFydGljbGUpIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbTogRmxvb3JQbGFuZUl0ZW0gPSB0aGlzLl9mbG9vclNlcnZpY2UuZmxvb3JUb0NvbmZpZ3VyZTtcclxuICAgICAgICAgICAgaXRlbS5tZXRhZGF0YSA9IHJlc3VsdC5tZXRhRGF0YTtcclxuICAgICAgICAgICAgaXRlbS5jaGlsZHJlblswXS51c2VyRGF0YS5zZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbnNbMF07XHJcbiAgICAgICAgICAgIGl0ZW0uY29uZmlndXJpbmdDaGFuZ2VIYW5kbGVyID0gdGhpcy5jaGFuZ2VDb25maWd1cmVNb2RlO1xyXG4gICAgICAgICAgICBpdGVtLnNlbGVjdGVkSGFuZGxlciA9IHRoaXMuc2VsZWN0SXRlbTtcclxuICAgICAgICAgICAgaXRlbS51bnNlbGVjdGVkSGFuZGxlciA9IHRoaXMudW5TZWxlY3RJdGVtO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9sb2FkVmFyaWF0aW9ucyhpdGVtLCByZXN1bHQubWV0YURhdGEuaXRlbUlkKTtcclxuICAgICAgICAgICAgdGhpcy5fZmxvb3JTZXJ2aWNlLnVuSGlnaExpZ2h0Rmxvb3JzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwID0gaXRlbTtcclxuICAgICAgICAgICAgcmVzdWx0LmZ1cm5pdHVyZSA9IHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwO1xyXG4gICAgICAgICAgICByZXN1bHQuaW5zdGFuY2VJZCA9IHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQ7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUludGVncmF0aW9uKHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQsIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLml0ZW1Hcm91cCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faXRlbUdyb3VwU2VydmljZS5yZWF0dGFjaFRvSXRlbUdyb3VwKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLml0ZW1Hcm91cCxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fYW5zd2VyU2VsZWN0ZWQubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgdGhpcy5faHVkU2VydmljZS51cGRhdGVTZWxlY3RlZEl0ZW1IdWQoKTtcclxuICAgICAgICAgICAgdGhpcy5idWlsZEZpbmlzaGVkLm5leHQocmVzdWx0KTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLk5vU2VsZWN0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLkNvbmZpZ3VyYXRpb25GaXhlZDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQucmVzdWx0VHlwZSAhPT0gUmVzdWx0VHlwZS5PYnNvbGV0ZSAmJiByZXN1bHQucmVzdWx0VHlwZSAhPT0gUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uRml4ZWQpIHsgLy8gZG9uJ3Qgb3ZlcnJpZGUgdGhlc2VcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5Mb2FkZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtOiBGbG9vclBsYW5lSXRlbSA9IHRoaXMuX2Zsb29yU2VydmljZS5mbG9vclRvQ29uZmlndXJlO1xyXG4gICAgICAgICAgICBpdGVtLm1ldGFkYXRhID0gcmVzdWx0Lm1ldGFEYXRhO1xyXG4gICAgICAgICAgICBpdGVtLmNvbmZpZ3VyaW5nQ2hhbmdlSGFuZGxlciA9IHRoaXMuY2hhbmdlQ29uZmlndXJlTW9kZTtcclxuICAgICAgICAgICAgaXRlbS5zZWxlY3RlZEhhbmRsZXIgPSB0aGlzLnNlbGVjdEl0ZW07XHJcbiAgICAgICAgICAgIGl0ZW0udW5zZWxlY3RlZEhhbmRsZXIgPSB0aGlzLnVuU2VsZWN0SXRlbTtcclxuICAgICAgICAgICAgdGhpcy5fZmxvb3JTZXJ2aWNlLnVuSGlnaExpZ2h0Rmxvb3JzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwID0gaXRlbTtcclxuICAgICAgICAgICAgcmVzdWx0LmZ1cm5pdHVyZSA9IHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwO1xyXG4gICAgICAgICAgICByZXN1bHQuaW5zdGFuY2VJZCA9IHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQ7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUludGVncmF0aW9uKHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQsIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLml0ZW1Hcm91cCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faXRlbUdyb3VwU2VydmljZS5yZWF0dGFjaFRvSXRlbUdyb3VwKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLml0ZW1Hcm91cCxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fYW5zd2VyU2VsZWN0ZWQubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgdGhpcy5faHVkU2VydmljZS51cGRhdGVTZWxlY3RlZEl0ZW1IdWQoKTtcclxuICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVMYXlpbmdQYXR0ZXJuKGl0ZW0sIGZsb29yUGF0dGVybik7XHJcbiAgICAgICAgICAgIHRoaXMuYnVpbGRGaW5pc2hlZC5uZXh0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0VHlwZSA9PT0gUmVzdWx0VHlwZS5Ob1NlbGVjdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uRml4ZWQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnJlc3VsdFR5cGUgIT09IFJlc3VsdFR5cGUuT2Jzb2xldGUgJiYgcmVzdWx0LnJlc3VsdFR5cGUgIT09IFJlc3VsdFR5cGUuQ29uZmlndXJhdGlvbkZpeGVkKSB7IC8vIGRvbid0IG92ZXJyaWRlIHRoZXNlXHJcbiAgICAgICAgICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuTG9hZGVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2Zsb29yU2VydmljZS5mbG9vclJlc3VsdE9iamVjdCA9IHJlc3VsdDtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2VuZXJhdGVMYXlpbmdQYXR0ZXJuKGZsb29yOiBGbG9vclBsYW5lSXRlbSwgZmxvb3JQYXR0ZXJuOiBGbG9vclBhdHRlcm4pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBmbG9vclBhdHRlcm5JbmZvOiBGbG9vclBhdHRlcm5JbmZvID0gdGhpcy5fZ2VuZXJhdGVGbG9vclBhdHRlcm5JbmZvKGZsb29yLCBmbG9vclBhdHRlcm4pO1xyXG4gICAgICAgIGZsb29yLnJlc3RvcmVGbG9vck9iamVjdCgpO1xyXG4gICAgICAgIGNvbnN0IG1lc2hMZWZ0ID1cclxuICAgICAgICAgICAgdGhpcy5mdWxsM0RPYmplY3RUb1VzZS5jaGlsZHJlbi5maW5kKG0gPT4gbS5uYW1lID09PSBmbG9vclBhdHRlcm5JbmZvLm1lc2hJZExlZnQpIGFzIE1lc2g7XHJcbiAgICAgICAgdGhpcy5fbm9ybWFsaXplTWVzaChtZXNoTGVmdCk7XHJcblxyXG4gICAgICAgIGxldCBtZXNoUmlnaHQ6IE1lc2ggPSBudWxsO1xyXG4gICAgICAgIGlmIChmbG9vclBhdHRlcm5JbmZvLm1lc2hJZFJpZ2h0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIG1lc2hSaWdodCA9IHRoaXMuZnVsbDNET2JqZWN0VG9Vc2UuY2hpbGRyZW4uZmluZChtID0+IG0ubmFtZSA9PT0gZmxvb3JQYXR0ZXJuSW5mby5tZXNoSWRSaWdodCkgYXMgTWVzaDtcclxuICAgICAgICAgICAgdGhpcy5fbm9ybWFsaXplTWVzaChtZXNoUmlnaHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZmxvb3JTaXplOiBWZWN0b3IzID0gZmxvb3Iuc2l6ZTtcclxuICAgICAgICBjb25zdCBwbGFua1NpemU6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuICAgICAgICBtZXNoTGVmdC5nZW9tZXRyeS5ib3VuZGluZ0JveC5nZXRTaXplKHBsYW5rU2l6ZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGl0ZW1zOiBGbG9vclBhdHRlcm5UcmFuc2Zvcm1bXSA9IHRoaXMuX2Zsb29yUGF0dGVyblNlcnZpY2UuZ2VuZXJhdGVQYXR0ZXJuKFxyXG4gICAgICAgICAgICBmbG9vclBhdHRlcm5JbmZvLmZsb29yUGF0dGVybixcclxuICAgICAgICAgICAgcGxhbmtTaXplLFxyXG4gICAgICAgICAgICBmbG9vclNpemUsXHJcbiAgICAgICAgICAgIGZsb29yUGF0dGVybkluZm8uZmxvb3JQYXR0ZXJuRGlyZWN0aW9uLFxyXG4gICAgICAgICAgICBmbG9vclBhdHRlcm5JbmZvLmhlYXJ0TGluZVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIERlYnVnZ2luZyBvcHRpb25cclxuICAgICAgICAvLyB0aGlzLl9mbG9vclRpbGVJbnRlcnNlY3Rpb25TZXJ2aWNlLnRvZ2dsZURlYnVnKCk7XHJcbiAgICAgICAgY29uc3QgZmxvb3JDb3VudFJlc3VsdDogRmxvb3JDb3VudFJlc3VsdCA9IHRoaXMuX2Zsb29yVGlsZUludGVyc2VjdGlvblNlcnZpY2UuY291bnRUaWxlcyhcclxuICAgICAgICAgICAgZmxvb3IuZmxvb3JNZXNoLFxyXG4gICAgICAgICAgICBpdGVtcyxcclxuICAgICAgICAgICAgbWVzaExlZnQuZ2VvbWV0cnksXHJcbiAgICAgICAgICAgIChtZXNoUmlnaHQpID8gbWVzaFJpZ2h0Lmdlb21ldHJ5IDogbnVsbCxcclxuICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGZsb29yLm1ldGFkYXRhLmZsb29yQ291bnRSZXN1bHQgPSBmbG9vckNvdW50UmVzdWx0O1xyXG5cclxuICAgICAgICBjb25zdCBsZWZ0SXRlbXM6IEZsb29yUGF0dGVyblRyYW5zZm9ybVtdID0gbmV3IEFycmF5PEZsb29yUGF0dGVyblRyYW5zZm9ybT4oKTtcclxuICAgICAgICBjb25zdCByaWdodEl0ZW1zOiBGbG9vclBhdHRlcm5UcmFuc2Zvcm1bXSA9IG5ldyBBcnJheTxGbG9vclBhdHRlcm5UcmFuc2Zvcm0+KCk7XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBmbG9vckNvdW50UmVzdWx0LmZpbHRlcmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLmlzTGVmdCkge1xyXG4gICAgICAgICAgICAgICAgbGVmdEl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByaWdodEl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uW10gPSB0aGlzLnNlbGVjdGlvbnM7XHJcbiAgICAgICAgbGV0IHZhcmlhdGlvbkdhbWVPYmplY3Q6IHN0cmluZztcclxuICAgICAgICBmb3IgKGNvbnN0IHNlbGVjdGlvbktleSBvZiBzZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbktleS5lbGVtZW50VHlwZSA9PT0gJ3ZhcmlhdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHZhcmlhdGlvbkdhbWVPYmplY3QgPSBzZWxlY3Rpb25LZXkuZ2FtZU9iamVjdDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZmxvb3JWYXJpYXRpb25NYXRlcmlhbDogYW55O1xyXG4gICAgICAgIGlmICh2YXJpYXRpb25HYW1lT2JqZWN0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvblNlcnZpY2UubG9hZFZhcmlhdGlvbkZvck1hdGVyaWFsKHRoaXMuYXJ0aWNsZUFzc2V0UGF0aCwgdmFyaWF0aW9uR2FtZU9iamVjdCwgZmxvb3IubWV0YWRhdGEuc2NoZW1hKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBmbG9vclZhcmlhdGlvbk1hdGVyaWFsID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dHVyZTogVGV4dHVyZSA9IGZsb29yVmFyaWF0aW9uTWF0ZXJpYWwubWFwO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZsb29yUGF0dGVybkluZm8uZmxvb3JQYXR0ZXJuRGlyZWN0aW9uID09PSBGbG9vclBhdHRlcm5EaXJlY3Rpb24uTFlJTkcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLnJvdGF0aW9uID0gTWF0aC5QSSAvIDI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHR1cmUucm90YXRpb24gPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbWVzaExlZnRNYXRlcmlhbDogTWF0ZXJpYWwgfCBNYXRlcmlhbFtdID0gbWVzaExlZnQubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwbGFua01hdGVyaWFsID0gbmV3IE1lc2hTdGFuZGFyZE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogMHhGRjAwMDAsXHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC44XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwbGFua3NMZWZ0ID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZWRNZXNoRnJvbUZsb29yUGF0dGVyblRyYW5zZm9ybShtZXNoTGVmdC5nZW9tZXRyeSwgbGVmdEl0ZW1zLCBwbGFua01hdGVyaWFsKTtcclxuICAgICAgICAgICAgICAgIGxldCBwbGFua3NSaWdodDogSW5zdGFuY2VkTWVzaDtcclxuICAgICAgICAgICAgICAgIGlmIChtZXNoUmlnaHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNoUmlnaHRNYXRlcmlhbDogTWF0ZXJpYWwgfCBNYXRlcmlhbFtdID0gbWVzaFJpZ2h0Lm1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgICAgIHBsYW5rc1JpZ2h0ID0gdGhpcy5faW5zdGFuY2VkTWVzaEZyb21GbG9vclBhdHRlcm5UcmFuc2Zvcm0obWVzaFJpZ2h0Lmdlb21ldHJ5LCByaWdodEl0ZW1zLCBwbGFua01hdGVyaWFsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbUZsb29yV3JhcHBlciA9IG5ldyBPYmplY3QzRCgpO1xyXG4gICAgICAgICAgICAgICAgY3VzdG9tRmxvb3JXcmFwcGVyLmFkZChwbGFua3NMZWZ0KTtcclxuICAgICAgICAgICAgICAgIGlmIChwbGFua3NSaWdodCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZsb29yV3JhcHBlci5hZGQocGxhbmtzUmlnaHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZmxvb3IuZmxvb3JPYmplY3QgPSBjdXN0b21GbG9vcldyYXBwZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mbG9vclNlcnZpY2UuY29uZmlndXJhYmxlRmxvb3IgPSBjdXN0b21GbG9vcldyYXBwZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTm93IHdlIHVwZGF0ZSB0aGUgZGVmYXVsdCBmbG9vcnBsYW5lIHdpdGggdGhlIG1lc2hcclxuICAgICAgICAgICAgICAgIGZsb29yLmZsb29yTWF0ZXJpYWwgPSBmbG9vclZhcmlhdGlvbk1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIEVtaXQgdXBkYXRlIHRvZ2dsZUZsb29yRnJhbWUgZXZlbnQuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlQnVzLmVtaXQoTWVzc2FnZVR5cGUuRmxvb3JSZWJ1aWxkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2luc3RhbmNlZE1lc2hGcm9tRmxvb3JQYXR0ZXJuVHJhbnNmb3JtKGdlb206IEJ1ZmZlckdlb21ldHJ5LCBwYXR0ZXJuOiBBcnJheTxGbG9vclBhdHRlcm5UcmFuc2Zvcm0+LCBtYXRlcmlhbDogTWF0ZXJpYWwgfCBNYXRlcmlhbFtdKSB7XHJcbiAgICAgICAgaWYgKHBhdHRlcm4ubGVuZ3RoIDw9IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRhcmdldFBsYW5rTWVzaCA9IG5ldyBJbnN0YW5jZWRNZXNoKGdlb20sIG1hdGVyaWFsLCBwYXR0ZXJuLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgZHVtbXkgPSBuZXcgT2JqZWN0M0QoKTtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgcGF0dGVybi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtOiBGbG9vclBhdHRlcm5UcmFuc2Zvcm0gPSBwYXR0ZXJuW2ldO1xyXG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbjogVmVjdG9yMyA9IGl0ZW0ucG9zaXRpb247XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnkgPSAwLjAyO1xyXG4gICAgICAgICAgICBjb25zdCByb3RhdGlvbjogVmVjdG9yMyA9IGl0ZW0ucm90YXRpb247XHJcbiAgICAgICAgICAgIGR1bW15LnBvc2l0aW9uLnNldChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KTtcclxuICAgICAgICAgICAgZHVtbXkucm90YXRpb24uc2V0KHJvdGF0aW9uLngsIHJvdGF0aW9uLnksIHJvdGF0aW9uLnopO1xyXG4gICAgICAgICAgICBkdW1teS51cGRhdGVNYXRyaXgoKTtcclxuXHJcbiAgICAgICAgICAgIHRhcmdldFBsYW5rTWVzaC5zZXRNYXRyaXhBdChpLCBkdW1teS5tYXRyaXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0UGxhbmtNZXNoO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIF9nZW5lcmF0ZUZsb29yUGF0dGVybkluZm8oaXRlbTogSXRlbSwgZmxvb3JQYXR0ZXJuOiBGbG9vclBhdHRlcm4pOiBGbG9vclBhdHRlcm5JbmZvIHtcclxuICAgICAgICB0aGlzLl9nZW5lcmF0ZVNlbGVjdGVkSW5NZXRhZGF0YShpdGVtKTtcclxuICAgICAgICBjb25zdCBpbmZvOiBGbG9vclBhdHRlcm5JbmZvID0ge1xyXG4gICAgICAgICAgICBtZXNoSWRMZWZ0OiBudWxsLFxyXG4gICAgICAgICAgICBtZXNoSWRSaWdodDogbnVsbCxcclxuICAgICAgICAgICAgZmxvb3JQYXR0ZXJuOiBGbG9vclBhdHRlcm4uTk9STUFMLFxyXG4gICAgICAgICAgICBmbG9vclBhdHRlcm5EaXJlY3Rpb246IEZsb29yUGF0dGVybkRpcmVjdGlvbi5MWUlORyxcclxuICAgICAgICAgICAgaGVhcnRMaW5lOiAwXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgbGV0IGZsb29yR2FtZU9iamVjdDogc3RyaW5nO1xyXG4gICAgICAgIGZvciAoY29uc3Qgc2VsZWN0aW9uS2V5IG9mIHRoaXMuc2VsZWN0aW9ucykge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uS2V5Lm5vZGVUeXBlID09PSAnQVJUJykge1xyXG4gICAgICAgICAgICAgICAgZmxvb3JHYW1lT2JqZWN0ID0gc2VsZWN0aW9uS2V5LmdhbWVPYmplY3Q7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaW5mby5oZWFydExpbmUgPSBOdW1iZXIodGhpcy5fZmxvb3JTZXJ2aWNlLmZsb29yQ2VudGVyTGluZVhBeGlzKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBjb252ZXJ0IGZsb29yUGF0dGVybkRpcmVjdGlvbiB0byB0eXBlIG51bWJlciB0byBsZXQgdGhlIHVzZXIgdXNlIGN1c3RvbSByb3RhdGlvbiwgZm9yIG5vdyB0aGVyZSBhcmUgb25seSAyIG9wdGlvbnMgYmFzZWQgb24gZW51bVxyXG4gICAgICAgIGlmICh0aGlzLl9mbG9vclNlcnZpY2UuZmxvb3JSb3RhdGlvbiA9PT0gMCkge1xyXG4gICAgICAgICAgICBpbmZvLmZsb29yUGF0dGVybkRpcmVjdGlvbiA9IEZsb29yUGF0dGVybkRpcmVjdGlvbi5MWUlORztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbmZvLmZsb29yUGF0dGVybkRpcmVjdGlvbiA9IEZsb29yUGF0dGVybkRpcmVjdGlvbi5TVEFORElORztcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5mby5mbG9vclBhdHRlcm4gPSBmbG9vclBhdHRlcm47XHJcbiAgICAgICAgaW5mby5tZXNoSWRMZWZ0ID0gZmxvb3JHYW1lT2JqZWN0O1xyXG4gICAgICAgIGlmIChpbmZvLmZsb29yUGF0dGVybiA9PT0gRmxvb3JQYXR0ZXJuLkhPTjQ1IHx8IGluZm8uZmxvb3JQYXR0ZXJuID09PSBGbG9vclBhdHRlcm4uSE9ONjApIHtcclxuICAgICAgICAgICAgaW5mby5tZXNoSWRSaWdodCA9IGByXyR7Zmxvb3JHYW1lT2JqZWN0fWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbmZvLmZsb29yUGF0dGVybiA9PT0gRmxvb3JQYXR0ZXJuLkhFUlJJTkdCT05FKSB7XHJcbiAgICAgICAgICAgIGluZm8ubWVzaElkUmlnaHQgPSBpbmZvLm1lc2hJZExlZnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjb25zdCBhZm1ldGluZyA9IHNlbGVjdGVkLmZpbmQocyA9PiBzLnF1ZXN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdwbGFuayBhZm1ldGluZycpO1xyXG4gICAgICAgIC8vIGxldCBhZm1ldGluZ1N0cmluZzogc3RyaW5nID0gYWZtZXRpbmcuYW5zd2VyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgLy8gYWZtZXRpbmdTdHJpbmcgPSBhZm1ldGluZ1N0cmluZy5zdWJzdHIoYWZtZXRpbmdTdHJpbmcubGFzdEluZGV4T2YoJyAnKSArIDEpO1xyXG4gICAgICAgIC8vIGNvbnN0IGxlZ1BhdHJvb25BbnN3ZXIgPSBzZWxlY3RlZC5maW5kKHMgPT4gcy5xdWVzdGlvbi50b0xvd2VyQ2FzZSgpID09PSAnbGVnIHBhdHJvb24nKS5hbnN3ZXIudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAvLyBsZXQgbGVnUGF0cm9vblN0cmluZyA9ICcnO1xyXG4gICAgICAgIC8vIGNvbnN0IGhhcnRsaW5lVHlwZSA9IHNlbGVjdGVkLmZpbmQocyA9PiBzLnF1ZXN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdoYXJ0bGlqbicpO1xyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gaWYgKGhhcnRsaW5lVHlwZSAmJiBoYXJ0bGluZVR5cGUuYW5zd2VyLnRvTG93ZXJDYXNlKCkgPT09ICdhYW5nZXBhc3QnKSB7XHJcbiAgICAgICAgLy8gICBjb25zdCBoYXJ0bGluZVZhbHVlID0gc2VsZWN0ZWQuZmluZChzID0+IHMucXVlc3Rpb24udG9Mb3dlckNhc2UoKSA9PT0gJ2hhcnRsaWpuX2FhbmdlcGFzdCcpO1xyXG4gICAgICAgIC8vICAgaWYgKGhhcnRsaW5lVmFsdWUgJiYgaGFydGxpbmVWYWx1ZS51c2VySW5wdXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgLy8gICAgIGluZm8uaGVhcnRMaW5lID0gTnVtYmVyKGhhcnRsaW5lVmFsdWUudXNlcklucHV0VmFsdWUpO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgICAvL1xyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgICAgLy8gICBjYXNlIGxlZ1BhdHJvb25BbnN3ZXIuaW5kZXhPZigncmVjaHQnKSAhPT0gLTE6XHJcbiAgICAgICAgLy8gICAgIGxlZ1BhdHJvb25TdHJpbmcgPSAnOTAnO1xyXG4gICAgICAgIC8vICAgICBpbmZvLmZsb29yUGF0dGVybiA9IEZsb29yUGF0dGVybi5OT1JNQUw7XHJcbiAgICAgICAgLy8gICAgIGJyZWFrO1xyXG4gICAgICAgIC8vICAgY2FzZSBsZWdQYXRyb29uQW5zd2VyLmluZGV4T2YoJ2dyYWF0JykgIT09IC0xOlxyXG4gICAgICAgIC8vICAgICBsZWdQYXRyb29uU3RyaW5nID0gJzkwJztcclxuICAgICAgICAvLyAgICAgaW5mby5mbG9vclBhdHRlcm4gPSBGbG9vclBhdHRlcm4uSEVSUklOR0JPTkU7XHJcbiAgICAgICAgLy8gICAgIGJyZWFrO1xyXG4gICAgICAgIC8vICAgY2FzZSBsZWdQYXRyb29uQW5zd2VyLmluZGV4T2YoJzYwJykgIT09IC0xOlxyXG4gICAgICAgIC8vICAgICBsZWdQYXRyb29uU3RyaW5nID0gJzYwJztcclxuICAgICAgICAvLyAgICAgaW5mby5mbG9vclBhdHRlcm4gPSBGbG9vclBhdHRlcm4uSE9ONjA7XHJcbiAgICAgICAgLy8gICAgIGJyZWFrO1xyXG4gICAgICAgIC8vICAgY2FzZSBsZWdQYXRyb29uQW5zd2VyLmluZGV4T2YoJzQ1JykgIT09IC0xOlxyXG4gICAgICAgIC8vICAgICBsZWdQYXRyb29uU3RyaW5nID0gJzQ1JztcclxuICAgICAgICAvLyAgICAgaW5mby5mbG9vclBhdHRlcm4gPSBGbG9vclBhdHRlcm4uSE9ONDU7XHJcbiAgICAgICAgLy8gICAgIGJyZWFrO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICAvL1xyXG4gICAgICAgIC8vIGluZm8ubWVzaElkTGVmdCA9IGAke2FmbWV0aW5nU3RyaW5nfV8ke2xlZ1BhdHJvb25TdHJpbmd9YDtcclxuICAgICAgICAvLyBpZiAoIGluZm8uZmxvb3JQYXR0ZXJuID09PSBGbG9vclBhdHRlcm4uSE9ONDUgfHwgaW5mby5mbG9vclBhdHRlcm4gPT09IEZsb29yUGF0dGVybi5IT042MCkge1xyXG4gICAgICAgIC8vICAgaW5mby5tZXNoSWRSaWdodCA9IGByXyR7YWZtZXRpbmdTdHJpbmd9XyR7bGVnUGF0cm9vblN0cmluZ31gO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICAvL1xyXG4gICAgICAgIC8vIGlmIChpbmZvLmZsb29yUGF0dGVybiA9PT0gRmxvb3JQYXR0ZXJuLkhFUlJJTkdCT05FKSB7XHJcbiAgICAgICAgLy8gICBpbmZvLm1lc2hJZFJpZ2h0ID0gaW5mby5tZXNoSWRMZWZ0O1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICAvL1xyXG4gICAgICAgIC8vIGNvbnN0IGxlZ1JpY2h0aW5nQW5zd2VyID0gc2VsZWN0ZWQuZmluZChzID0+IHMucXVlc3Rpb24udG9Mb3dlckNhc2UoKSA9PT0gJ2xlZyByaWNodGluZycpLmFuc3dlci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIC8vIGluZm8uZmxvb3JQYXR0ZXJuRGlyZWN0aW9uID0gKGxlZ1JpY2h0aW5nQW5zd2VyLmluZGV4T2YoJ3ZlcnRpY2FhbCcpICE9PSAtMSkgPyBGbG9vclBhdHRlcm5EaXJlY3Rpb24uU1RBTkRJTkcgOiBGbG9vclBhdHRlcm5EaXJlY3Rpb24uTFlJTkc7XHJcblxyXG4gICAgICAgIHJldHVybiBpbmZvO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2dlbmVyYXRlU2VsZWN0ZWRJbk1ldGFkYXRhKGl0ZW06IEl0ZW0pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjbG9uZVNlbGVjdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0aW9ucykpO1xyXG4gICAgICAgIGNsb25lU2VsZWN0aW9ucy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICAgICAgICBzLmltYWdlRGF0YSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgcy5pbWFnZURhdGFMYXN0QW5zd2VyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBpZiAocy5hZGRhYmxlcykge1xyXG4gICAgICAgICAgICAgICAgcy5hZGRhYmxlcy5mb3JFYWNoKGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGEuaW1hZ2VEYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpdGVtLm1ldGFkYXRhLmRlY29zID0gQXJyYXkuZnJvbSh0aGlzLl9pT25lLmRlY29Ob2Rlcyk7XHJcbiAgICAgICAgaXRlbS5tZXRhZGF0YS5zZWxlY3Rpb25zID0gY2xvbmVTZWxlY3Rpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX25vcm1hbGl6ZU1lc2gobWVzaDogTWVzaCkge1xyXG4gICAgICAgIGNvbnN0IG1lc2hTaXplID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICBtZXNoLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIG1lc2guZ2VvbWV0cnkuYm91bmRpbmdCb3guZ2V0U2l6ZShtZXNoU2l6ZSk7XHJcbiAgICAgICAgaWYgKG1lc2hTaXplLnogPiBtZXNoU2l6ZS54KSB7XHJcbiAgICAgICAgICAgIG1lc2guZ2VvbWV0cnkucm90YXRlWShNYXRoLlBJIC8gMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1lc2guZ2VvbWV0cnkuY2VudGVyKCk7XHJcbiAgICAgICAgbWVzaC5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTtcclxuICAgICAgICBjb25zdCBjZW50ZXIgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIG1lc2guZ2VvbWV0cnkuYm91bmRpbmdCb3guZ2V0Q2VudGVyKGNlbnRlcik7XHJcbiAgICAgICAgbWVzaC5wb3NpdGlvbi5jb3B5KGNlbnRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc3RhcnRUb0J1aWxkRnJvbUNvbmZpZ3VyYXRvcihtZXRhZGF0YTogTWV0YWRhdGEpOiBQcm9taXNlPEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydFRvQnVpbGQobnVsbCwgbWV0YWRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX3NldEluc3RhbmNlVG9Db25maWd1cmUocmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0KTogUHJvbWlzZTxDdXN0b21GbG9vckdyb3VwUmVzdWx0PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlICE9PSBSZXN1bHRUeXBlLlRpbWVvdXQpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2lPbmUuc2V0SW5zdGFuY2UocmVzdWx0Lm1ldGFEYXRhLml0ZW1JZClcclxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmVycm9yTWVzc2FnZXMucHVzaChuZXcgRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZWplY3QocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5faU9uZS5pbml0Tm9kZUluc3RhbmNlKHJlc3VsdC5tZXRhRGF0YS5pdGVtSWRlbnRpZmllcilcclxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmVycm9yTWVzc2FnZXMucHVzaChuZXcgRXJyb3JNZXNzYWdlKGUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZWplY3QocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQgPSByZXNwb25zZS5yZXN1bHRPYmplY3Q7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVqZWN0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9pT25lLnNldEluc3RhbmNlKHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lcnJvck1lc3NhZ2VzLnB1c2gobmV3IEVycm9yTWVzc2FnZShlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVqZWN0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfcHJlcGFyZVNlbGVjdGlvbnNBbmREZWNvcyhyZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQpOiBQcm9taXNlPEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+IHtcclxuICAgICAgICB0aGlzLl9yZXNldCgpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbnNBbmREZWNvUHJvbWlzZTogUHJvbWlzZTxhbnk+W10gPSBbXTtcclxuICAgICAgICAgICAgc2VsZWN0aW9uc0FuZERlY29Qcm9taXNlLnB1c2godGhpcy5faU9uZS5nZXRTZWxlY3Rpb25zQXN5bmMoKSwgdGhpcy5faU9uZS5nZXREZWNvc0FzeW5jKCkpO1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChzZWxlY3Rpb25zQW5kRGVjb1Byb21pc2UpO1xyXG4gICAgICAgICAgICB0aGlzLl9wcmVsb2FkTWF0ZXJpYWxzKHJlc3VsdC5tZXRhRGF0YS5zY2hlbWEpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2lPbmUuc2VsZWN0aW9ucy5sZW5ndGggPCAyKSB7IC8vIG5vIHNlbGVjdGlvbnMsIG9ubHkgc2VsZWN0aW9uIG9mIHR5cGUgJ0FSVCdcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0VHlwZSAhPT0gUmVzdWx0VHlwZS5BcnRpY2xlTm90Rm91bmQgJiYgIXJlc3VsdC5tZXRhRGF0YS5vcmlnaW5hbEl0ZW1JZCkgeyAvLyBhcnRpY2xlIGZvdW5kLCBzbyBpbml0IHRoYXQgZmlyc3RcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQubWV0YURhdGEub3JpZ2luYWxJdGVtSWQgPSByZXN1bHQubWV0YURhdGEuaXRlbUlkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NldEluc3RhbmNlVG9Db25maWd1cmUocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuTm9TZWxlY3Rpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXJ0VG9CdWlsZChyZXN1bHQpOyAvLyAncmVzdGFydCcgdGhlIGJ1aWxkXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRTZWxlY3Rpb25zQW5kRGVjb3NGcm9tTWV0YWRhdGEocmVzdWx0KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2lPbmUuc2VsZWN0aW9ucy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICAgICAgICBzLnNjaGVtYSA9IHJlc3VsdC5tZXRhRGF0YS5zY2hlbWE7XHJcbiAgICAgICAgICAgIHMuaW5zdGFuY2VJZCA9IHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQ7XHJcbiAgICAgICAgfSk7IC8vIGFkZCBzY2hlbWEgZm9yIG1hdGVyaWFsIGNyZWF0aW9uXHJcbiAgICAgICAgdGhpcy5faGFuZGxlU2VsZWN0aW9uc1JlY2VpdmVkKHJlc3VsdC5tZXRhRGF0YSk7XHJcbiAgICAgICAgdGhpcy5fbGlua1NlbGVjdGlvbnNBbmREZWNvcygpO1xyXG4gICAgICAgIHRoaXMuX3ByZXBhcmVUaGVTZWxlY3Rpb25zKHJlc3VsdC5tZXRhRGF0YS5pdGVtSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3ByZWxvYWRNYXRlcmlhbHMoc2NoZW1hOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl92YXJpYXRpb25DYWNoZVNlcnZpY2UucHJlbG9hZFZhcmlhdGlvbnMoXHJcbiAgICAgICAgICAgIHNjaGVtYSwgdGhpcy5faU9uZS5kZWNvTm9kZXNcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZCA9PiBkLmdhbWVPYmplY3ROYW1lICYmIGQudHlwZSA9PT0gRGVjb05vZGVUeXBlLlZhcmlhdGlvbilcclxuICAgICAgICAgICAgICAgIC5tYXAoZCA9PiBkLmdhbWVPYmplY3ROYW1lKSwgdGhpcy5hcnRpY2xlQXNzZXRQYXRoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9nZXRTZWxlY3Rpb25zQW5kRGVjb3NGcm9tTWV0YWRhdGEocmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5tZXRhRGF0YS5zZWxlY3Rpb25zICYmIHJlc3VsdC5tZXRhRGF0YS5kZWNvcykge1xyXG4gICAgICAgICAgICB0aGlzLl9pT25lLnNldFNlbGVjdGlvbnMocmVzdWx0Lm1ldGFEYXRhLnNlbGVjdGlvbnMpO1xyXG4gICAgICAgICAgICB0aGlzLl9pT25lLnNldERlY29Ob2RlcyhBcnJheS5mcm9tKHJlc3VsdC5tZXRhRGF0YS5kZWNvcy52YWx1ZXMoKSkpO1xyXG4gICAgICAgICAgICByZXN1bHQubWV0YURhdGEub2Jzb2xldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdFR5cGUgIT09IFJlc3VsdFR5cGUuQ29uZmlndXJhdGlvbk5vdEZpeGVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuT2Jzb2xldGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faU9uZS5zZWxlY3Rpb25zLmxlbmd0aCA8IDIgfHwgdGhpcy5faU9uZS5kZWNvTm9kZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuZXJyb3JNZXNzYWdlcy5wdXNoKG5ldyBFcnJvck1lc3NhZ2UoJ05PX1NFTEVDVElPTlNfT1JfREVDT1MnLCAnTk9fU0VMRUNUSU9OU19PUl9ERUNPU19JTkZPJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uUHVibGlzaGVkKHNlbGVjdGlvbjogU2VsZWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICgoc2VsZWN0aW9uLmhpZXJhcmNoaWNhbFB1YmxpY2F0aW9uQ29kZSA9PT0gbnVsbCkgfHwgKChzZWxlY3Rpb24uaGllcmFyY2hpY2FsUHVibGljYXRpb25Db2RlICYgMikgPiAwKSkgJiZcclxuICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGlvbi5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuUXVlc3Rpb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAoKChzZWxlY3Rpb24ucXVlc3Rpb25QdWJsaWNhdGlvbkNvZGUgJiAyKSA+IDApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5xdWVzdGlvblB1YmxpY2F0aW9uQ29kZSA9PT0gbnVsbCB8fCBzZWxlY3Rpb24ucXVlc3Rpb25QdWJsaWNhdGlvbkNvZGUgPT09IHVuZGVmaW5lZCkpIHx8XHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uLm5vZGVUeXBlID09PSBOb2RlVHlwZS5BbnN3ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICAoKChzZWxlY3Rpb24uYW5zd2VyUHVibGljYXRpb25Db2RlICYgMikgPiAwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5zd2VyUHVibGljYXRpb25Db2RlID09PSBudWxsIHx8IHNlbGVjdGlvbi5hbnN3ZXJQdWJsaWNhdGlvbkNvZGUgPT09IHVuZGVmaW5lZCkpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaGFuZGxlSW50ZWdyYXRpb24oaW5zdGFuY2VJZDogc3RyaW5nLCBvYmplY3Q6IEl0ZW0pOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5faW50ZWdyYXRpb25FbmFibGVkICYmICFvYmplY3QubWV0YWRhdGEub2Jzb2xldGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZ2VuZXJpY1ZhcmlhdGlvblNlbGVjdGlvbnM6IFNlbGVjdGlvbltdID1cclxuICAgICAgICAgICAgICAgIHRoaXMuX2lPbmUuc2VsZWN0aW9ucy5maWx0ZXIocyA9PiBzLmRlY29Ob2RlICYmIHMuZ2VuZXJpYyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChzLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uICYmIChzLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uLnR5cGUgPT09IERlY29Ob2RlVHlwZS5WYXJpYXRpb24pO1xyXG4gICAgICAgICAgICBpZiAoZ2VuZXJpY1ZhcmlhdGlvblNlbGVjdGlvbnMgJiYgZ2VuZXJpY1ZhcmlhdGlvblNlbGVjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXBzZXJ0RnVybml0dXJlKGluc3RhbmNlSWQsIHtcclxuICAgICAgICAgICAgICAgICAgICBWYXJpYXRpb246IChnZW5lcmljVmFyaWF0aW9uU2VsZWN0aW9uc1swXS5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbi5icmFuZElkLFxyXG4gICAgICAgICAgICAgICAgICAgIFZhcmlhdGlvbkRlc2NyaXB0aW9uOiAoZ2VuZXJpY1ZhcmlhdGlvblNlbGVjdGlvbnNbMF0uZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24uZ2FtZU9iamVjdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgU3VwcGxpZXJBcnRpY2xlTnI6IChnZW5lcmljVmFyaWF0aW9uU2VsZWN0aW9uc1swXS5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbi5zdXBwbGllckFydGljbGVOclxyXG4gICAgICAgICAgICAgICAgfSwgb2JqZWN0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVJbnRlZ3JhdGlvbkNvbm5lY3Rpb25zKGluc3RhbmNlSWQsIG9iamVjdCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Vwc2VydEZ1cm5pdHVyZShpbnN0YW5jZUlkLCB7UG9zaXRpb246IG9iamVjdC5wb3NpdGlvbiwgUm90YXRpb246IG9iamVjdC5yb3RhdGlvbn0sIG9iamVjdCk7XHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5Db25maWd1cmF0aW9uQ2hhbmdlZCwgdGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3N0YXJ0V2l0aE5ldyhjbGVhbnVwOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgaWYgKGNsZWFudXApIHtcclxuICAgICAgICAgICAgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXMuZm9yRWFjaChhID0+IFV0aWxzLkRpc3Bvc2VPYmplY3QoYSkpO1xyXG4gICAgICAgICAgICB0aGlzLl9wbGFjZWRBZGRhYmxlcy5mb3JFYWNoKGEgPT4gVXRpbHMuRGlzcG9zZU9iamVjdChhKSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY2xlYW51cEJlZm9yZVByZXNldExvYWQoKTogdm9pZCB7XHJcbiAgICAgICAgTWF0ZXJpYWxVdGlscy5DbGVhckNhY2hlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBDbGVhciB2YXJpYWJsZXMgdG8gbGV0IG9iamVjdHMgYmVpbmcgZGlzcG9zZWQgcHJvcGVybHlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfaGFuZGxlQWZ0ZXJQcmVzZXRMb2FkKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSBub3RoaW5nIGlzIGtlZXBpbmcgYSBsb2NrXHJcbiAgICAgICAgdGhpcy5faU9uZS5zZXRJbnN0YW5jZShudWxsKTtcclxuICAgICAgICAvLyBjbGVhblxyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jbGVhbnVwKCk6IHZvaWQge1xyXG4gICAgICAgIFV0aWxzLkRpc3Bvc2VPYmplY3QodGhpcy5mdWxsM0RPYmplY3RUb1VzZSk7XHJcbiAgICAgICAgdGhpcy5mdWxsM0RPYmplY3RUb1VzZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCA9IHVuZGVmaW5lZDtcclxuICAgICAgICBVdGlscy5EaXNwb3NlT2JqZWN0KHRoaXMuX2FjdGl2ZUNoaWxkRWxlbWVudCk7XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlQ2hpbGRFbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fcGxhY2VkQWRkYWJsZXMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9hZGp1c3RhYmxlcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRoaXMuX2FkZGFibGVzLmxlbmd0aCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZW5hYmxlSW50ZWdyYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5faW50ZWdyYXRpb25FbmFibGVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9oYW5kbGVJdGVtUmVtb3ZlZEZyb21TY2VuZShyZXN1bHQ6IHsgaXRlbTogYW55LCBhZGRlZFRvR3JvdXA6IGJvb2xlYW4gfSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChyZXN1bHQuYWRkZWRUb0dyb3VwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdC5pdGVtIGluc3RhbmNlb2YgSXRlbSAmJiAhKHJlc3VsdC5pdGVtIGluc3RhbmNlb2YgRmxvb3JQaW4gfHwgcmVzdWx0Lml0ZW0gaW5zdGFuY2VvZiBXYWxsUGluKSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faW50ZWdyYXRpb25FbmFibGVkICYmIHJlc3VsdC5pdGVtLnVzZXJEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpZDogc3RyaW5nID0gcmVzdWx0Lml0ZW0udXNlckRhdGEuaXRlbUlkID8gcmVzdWx0Lml0ZW0udXNlckRhdGEuaXRlbUlkIDogcmVzdWx0Lml0ZW0udXVpZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zLnNwbGljZSh0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucy5maW5kSW5kZXgoZiA9PiBmLklkID09PSBpZCksIDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLkNvbmZpZ3VyYXRpb25DaGFuZ2VkLCB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fY2xlYXJFbGVtZW50cyhyZXN1bHQuaXRlbSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsZWFudXAoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY2xlYXJFbGVtZW50cyhpdGVtOiBJdGVtKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBDdXN0b21GbG9vckl0ZW0gJiYgaXRlbS51c2VyRGF0YSAmJiBpdGVtLnVzZXJEYXRhLml0ZW1JZCkge1xyXG4gICAgICAgICAgICB0aGlzLmJhc2VFbGVtZW50Tm9kZUlkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLl9vcmlnaW5hbEVsZW1lbnRQb3NpdGlvbi5zZXQoMCwgMCwgMCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRTZXJ2aWNlLnJlbW92ZUVsZW1lbnQoaXRlbS51c2VyRGF0YS5pdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9oYW5kbGVJbnRlZ3JhdGlvbkNvbm5lY3Rpb25zKGlkOiBzdHJpbmcsIG9iamVjdDogSXRlbSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHBhcnRzOiBGdXJuaXR1cmVQYXJ0SW50ZWdyYXRpb25bXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkUGFydHM6IE9iamVjdDNEW10gPSBvYmplY3QuY29uZmlndXJhYmxlID8gb2JqZWN0LmNoaWxkcmVuIDogW29iamVjdF07XHJcbiAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSBjaGlsZFBhcnRzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkOiBhbnkgPSA8Q3VzdG9tT2JqZWN0M0Q+Y2hpbGRQYXJ0c1tpXTtcclxuICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbjogRnVybml0dXJlUGFydEludGVncmF0aW9uID0gbmV3IEZ1cm5pdHVyZVBhcnRJbnRlZ3JhdGlvbigpO1xyXG4gICAgICAgICAgICBjb25zdCB2YXJpYXRpb25zOiBGdXJuaXR1cmVQYXJ0VmFyaWF0aW9uW10gPSBbXTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkLnVzZXJEYXRhICYmIGNoaWxkLnVzZXJEYXRhLnNlbGVjdGlvbiAmJiBjaGlsZC51c2VyRGF0YS5zZWxlY3Rpb24uZGVjb05vZGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uSWQgPSBjaGlsZFBhcnRzLmZpbmRJbmRleChjID0+IGMgPT09IGNoaWxkKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5TdXBwbGllckFydGljbGVOciA9IGNoaWxkLnVzZXJEYXRhLnNlbGVjdGlvbi5zdXBwbGllckFydGljbGVOcjtcclxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uQnJhbmRJZGVudGlmaWVyID0gY2hpbGQudXNlckRhdGEuc2VsZWN0aW9uLmRlY29Ob2RlLmJyYW5kSWQ7XHJcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uLkJyYW5kRGVzY3JpcHRpb24gPSBjaGlsZC51c2VyRGF0YS5zZWxlY3Rpb24uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWU7XHJcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlBvc2l0aW9uID0gY2hpbGQucG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uLlJvdGF0aW9uID0gY2hpbGQucm90YXRpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQudXNlckRhdGEuc2VsZWN0aW9uLnZhcmlhdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQudXNlckRhdGEuc2VsZWN0aW9uLnZhcmlhdGlvbnMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhdGlvbjogYW55ID0gY2hpbGQudXNlckRhdGEuc2VsZWN0aW9uLnZhcmlhdGlvbnNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uVmFyaWF0aW9uID0gdmFyaWF0aW9uLmJyYW5kSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uVmFyaWF0aW9uRGVzY3JpcHRpb24gPSB2YXJpYXRpb24uZ2FtZU9iamVjdE5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjaGlsZC51c2VyRGF0YS5zZWxlY3Rpb24udmFyaWF0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uOiBhbnkgPSBjaGlsZC51c2VyRGF0YS5zZWxlY3Rpb24udmFyaWF0aW9uc1tqXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhdGlvblBhcnQ6IEZ1cm5pdHVyZVBhcnRWYXJpYXRpb24gPSBuZXcgRnVybml0dXJlUGFydFZhcmlhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uUGFydC5WYXJpYXRpb24gPSB2YXJpYXRpb24uYnJhbmRJZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvblBhcnQuVmFyaWF0aW9uRGVzY3JpcHRpb24gPSB2YXJpYXRpb24uZ2FtZU9iamVjdE5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb25QYXJ0Lk1hdGVyaWFsSWQgPSB2YXJpYXRpb24ubWF0ZXJpYWxJZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvblBhcnQuU3VwcGxpZXJBcnRpY2xlTnIgPSB2YXJpYXRpb24uc3VwcGxpZXJBcnRpY2xlTnI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb25QYXJ0Lk9wdGlvbiA9IHZhcmlhdGlvbi5vcHRpb25UZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9ucy5wdXNoKHZhcmlhdGlvblBhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uVmFyaWF0aW9ucyA9IHZhcmlhdGlvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBhLWFydGlrZWxcclxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uSWQgPSBjaGlsZFBhcnRzLmZpbmRJbmRleChjID0+IGMgPT09IGNoaWxkKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5CcmFuZElkZW50aWZpZXIgPSBjaGlsZC5tZXRhZGF0YS5pdGVtSWRlbnRpZmllcjtcclxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uQnJhbmREZXNjcmlwdGlvbiA9IGNoaWxkLm1ldGFkYXRhLml0ZW1OYW1lO1xyXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5Qb3NpdGlvbiA9IGNoaWxkLnBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5Sb3RhdGlvbiA9IGNoaWxkLnJvdGF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3RvcnM6IEZ1cm5pdHVyZUNvbm5lY3RlZFBhcnRJbnRlZ3JhdGlvbltdID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGNsZW46IG51bWJlciA9IGNoaWxkLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjbGVuOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm5lY3RvcjogYW55ID0gY2hpbGQuY2hpbGRyZW5bal07XHJcbiAgICAgICAgICAgICAgICBpZiAoKGNvbm5lY3RvciBpbnN0YW5jZW9mIEN1c3RvbU9iamVjdDNEIHx8IGNvbm5lY3RvciBpbnN0YW5jZW9mIEN1c3RvbU1lc2gpICYmIChjb25uZWN0b3IgYXMgYW55KS5jb25uZWN0ZWRUbykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbm46IEZ1cm5pdHVyZUNvbm5lY3RlZFBhcnRJbnRlZ3JhdGlvbiA9IG5ldyBGdXJuaXR1cmVDb25uZWN0ZWRQYXJ0SW50ZWdyYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25uLkNvbm5lY3Rpb25MYWJlbCA9IGNvbm5lY3Rvci5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcmVpZ25QYXJ0SWR4OiBudW1iZXIgPSB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5jaGlsZHJlbi5maW5kSW5kZXgoYyA9PiBjLm5hbWUgPT09IChjb25uZWN0b3IgYXMgYW55KS5jb25uZWN0ZWRUbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29ubi5Gb3JlaWduQ29ubmVjdGlvbkxhYmVsID0gdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuY2hpbGRyZW5bZm9yZWlnblBhcnRJZHhdLnVzZXJEYXRhLnNlbGVjdGlvbi5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25uLkZvcmVpZ25QYXJ0SWQgPSBmb3JlaWduUGFydElkeC50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbm4uUG9zaXRpb24gPSBjb25uZWN0b3IucG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgY29ubi5Sb3RhdGlvbiA9IGNvbm5lY3Rvci5yb3RhdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JzLnB1c2goY29ubik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29ubmVjdGlvbi5Db25uZWN0ZWRQYXJ0cyA9IGNvbm5lY3RvcnM7XHJcbiAgICAgICAgICAgIHBhcnRzLnB1c2goY29ubmVjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3Vwc2VydEZ1cm5pdHVyZShpZCwge1BhcnRzOiBwYXJ0c30sIG9iamVjdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdXBzZXJ0RnVybml0dXJlKGlkOiBzdHJpbmcsIG9iamVjdDogYW55LCBpdGVtOiBJdGVtKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludGVncmF0aW9uRW5hYmxlZCAmJiAhaXRlbS5tZXRhZGF0YS5vYnNvbGV0ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBpZHg6IG51bWJlciA9IHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zLmZpbmRJbmRleChmID0+IGYuSWQgPT09IGlkKTtcclxuICAgICAgICAgICAgbGV0IGZ1cm5pdHVyZTogRnVybml0dXJlSW50ZWdyYXRpb247XHJcbiAgICAgICAgICAgIGlmIChpZHggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMubGVuZ3RoID09PSAxICYmICF0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9uc1swXS5JZCkgeyAvLyBlbXB0eSBlbnRyeSBmb3IgbXJwIGNvZGUsIHJlLXVzZSB0aGF0IG9uZVxyXG4gICAgICAgICAgICAgICAgICAgIGZ1cm5pdHVyZSA9IHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zWzBdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBmdXJuaXR1cmUgPSBuZXcgRnVybml0dXJlSW50ZWdyYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucy5wdXNoKGZ1cm5pdHVyZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmdXJuaXR1cmUuSWQgPSBpZDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZ1cm5pdHVyZSA9IHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zW2lkeF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZnVybml0dXJlLk1ycENvZGUgPSB0aGlzLl9wZXJtYW5lbnRTdG9yZVNlcnZpY2UuY29kZTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnVybml0dXJlLmhhc093blByb3BlcnR5KGtleSkgJiYgb2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmdXJuaXR1cmVba2V5XSA9IG9iamVjdFtrZXldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NldENvZGVPbkZ1cm5pdHVyZUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ludGVncmF0aW9uRW5hYmxlZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZnVybml0dXJlQ29uZmlndXJhdGlvbnMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZnVybml0dXJlOiBGdXJuaXR1cmVJbnRlZ3JhdGlvbiA9IG5ldyBGdXJuaXR1cmVJbnRlZ3JhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgZnVybml0dXJlLk1ycENvZGUgPSB0aGlzLl9wZXJtYW5lbnRTdG9yZVNlcnZpY2UuY29kZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zLnB1c2goZnVybml0dXJlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Z1cm5pdHVyZUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZiA9PiBmLk1ycENvZGUgPSB0aGlzLl9wZXJtYW5lbnRTdG9yZVNlcnZpY2UuY29kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLkNvbmZpZ3VyYXRpb25DaGFuZ2VkLCB0aGlzLl9mdXJuaXR1cmVDb25maWd1cmF0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NhbkNvbm5lY3RTZWxlY3Rpb25zKHNlbDE6IFNlbGVjdGlvbiwgc2VsMjogU2VsZWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFzZWwxLmRlY29Ob2RlIHx8ICFzZWwyLmRlY29Ob2RlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGNhbkNvbm5lY3Q6IGJvb2xlYW4gPSBzZWwyLmRlY29Ob2RlLnR5cGUgIT09IERlY29Ob2RlVHlwZS5QYXJ0O1xyXG4gICAgICAgIGlmICghY2FuQ29ubmVjdCkge1xyXG4gICAgICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IHNlbDEuZGVjb05vZGUuY29ubmVjdG9ycy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxlbmk6IG51bWJlciA9IHNlbDIuZGVjb05vZGUuY29ubmVjdG9ycy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpaSA9IDA7IGlpIDwgbGVuaTsgaWkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbkNvbm5lY3QgPSBTY2VuZTNEVXRpbC5DYW5TZWxlY3RvckNvbm5lY3Qoc2VsMS5kZWNvTm9kZS5jb25uZWN0b3JzLCBzZWwxLmRlY29Ob2RlLmNvbm5lY3RvcnNbaV0sIHNlbDIuZGVjb05vZGUuY29ubmVjdG9yc1tpaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYW5Db25uZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjYW5Db25uZWN0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2hhbmRsZVNlbGVjdGlvbnNSZWNlaXZlZChtZXRhZGF0YTogTWV0YWRhdGEpIHtcclxuICAgICAgICBpZiAodGhpcy5fYW5zd2VyU2VsZWN0ZWQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbnMuZmluZChzID0+IHMubm9kZUlkID09PSB0aGlzLl9hbnN3ZXJTZWxlY3RlZFt0aGlzLl9hbnN3ZXJTZWxlY3RlZC5sZW5ndGggLSAxXS5ub2RlSWQpO1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlbU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gICAgICAgICAgICAgICAgaWYgKG1ldGFkYXRhLml0ZW1OYW1lID09PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXRhZGF0YS5pdGVtRGVzY3JpcHRpb24gIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lID0gbWV0YWRhdGEuaXRlbURlc2NyaXB0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lID0gbWV0YWRhdGEuaXRlbUlkZW50aWZpZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZSA9IG1ldGFkYXRhLml0ZW1OYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZ29vZ2xlVGFnTWFuYWdlci5zZW5kRXZlbnQoR29vZ2xlVGFnTWFuYWdlckV2ZW50LkFuc3dlckNob3Nlbiwge1xyXG4gICAgICAgICAgICAgICAgICAgICdhcnRpY2xlTnInOiBtZXRhZGF0YS5pdGVtSWRlbnRpZmllcixcclxuICAgICAgICAgICAgICAgICAgICAncHJvZHVjdCc6IGl0ZW1OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICdvcHRpb25EZXNjcmlwdGlvbic6IHNlbGVjdGlvbi5jb21tZXJjaWFsQW5zd2VyID8gc2VsZWN0aW9uLmNvbW1lcmNpYWxBbnN3ZXIgOiBzZWxlY3Rpb24uYW5zd2VyLFxyXG4gICAgICAgICAgICAgICAgICAgICdvcHRpb25QYXRoJzogc2VsZWN0aW9uLnNlbGVjdGlvblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaGFuZGxlQ29ubmVjdGlvblJlc2V0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5zZXRVbnNlbGVjdGVkKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5JdGVtVW5zZWxlY3RlZCwgdW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgdGhpcy5fc2hvd1dhcm5pbmcoe3RpdGxlOiAnV0FSTklORycsIG1lc3NhZ2U6ICdSRUZSRVNIX0RVRV9UT19JTkFDVElWSVRZJ30pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9oYW5kbGVBbnN3ZXJTZWxlY3RlZChhbnN3ZXI6IEFuc3dlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2Fuc3dlclNlbGVjdGVkLnB1c2goYW5zd2VyKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9oYW5kbGVTZWxlY3Rpb25TZWxlY3RlZChjaG9zZW5PcHRpb246IFNlbGVjdG9yU3RydWN0dXJlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uc1NlbGVjdGVkLnB1c2goY2hvc2VuT3B0aW9uLm9wdlRyZWVOb2RlSGllcmFyY2h5KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgY2FuY2VsQW5zd2VyKG1ldGFkYXRhOiBNZXRhZGF0YSwgcmVidWlsZDogYm9vbGVhbiA9IHRydWUsIGdldEFuc3dlcnM6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2lPbmUuY2FuY2VsQW5zd2VyKCk7XHJcbiAgICAgICAgaWYgKHJlYnVpbGQpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRUb0J1aWxkRnJvbUNvbmZpZ3VyYXRvcihtZXRhZGF0YSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChnZXRBbnN3ZXJzKSB7IC8vIGlmIG5vdCByZWJ1aWxkIHRoZW4gY2hlY2sgaWYgd2UgbmVlZCB0byBnZXQgYW5zd2Vyc1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9pT25lLmdldFF1ZXN0aW9uQW5kQW5zd2Vyc0FzeW5jKCk7IC8vIHNlZSBpZiB0aGVyZSBpcyB1c2VyIGlucHV0IG5lZWRlZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgc2VsZWN0U2VsZWN0aW9uKFxyXG4gICAgICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uLCBtZXRhZGF0YTogTWV0YWRhdGEsIGZvcmNlQmFja1RvTm9kZT86IGJvb2xlYW4sIGFmdGVyPzogYm9vbGVhbiwgY29ubmVjdG9yPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faU9uZS5zZWxlY3RTZWxlY3Rpb24oc2VsZWN0aW9uLCBmb3JjZUJhY2tUb05vZGUsIGFmdGVyLCBjb25uZWN0b3IpO1xyXG4gICAgICAgIHRoaXMuX2dlbmVyaWNTZWxlY3Rpb24gPSBzZWxlY3Rpb24uZ2VuZXJpYztcclxuICAgICAgICB0aGlzLl9zdGFydFRvQnVpbGRGcm9tQ29uZmlndXJhdG9yKG1ldGFkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvbjogU2VsZWN0aW9uLCBtZXRhZGF0YTogTWV0YWRhdGEpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLl9lbGVtZW50U2VydmljZS5yZW1vdmVFbGVtZW50KHNlbGVjdGlvbi5pbnN0YW5jZUlkLCBzZWxlY3Rpb24ubm9kZSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faU9uZS5kZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICAgICAgICB0aGlzLl9zdGFydFRvQnVpbGRGcm9tQ29uZmlndXJhdG9yKG1ldGFkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgcmVwbGFjZVNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbiwgbWV0YWRhdGE6IE1ldGFkYXRhKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faU9uZS5yZXBsYWNlU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgICAgICAgdGhpcy5fc3RhcnRUb0J1aWxkRnJvbUNvbmZpZ3VyYXRvcihtZXRhZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNlbGVjdEFuc3dlcihhbnN3ZXI6IEFuc3dlciwgaW5wdXQ6IHN0cmluZywgbWV0YWRhdGE6IE1ldGFkYXRhKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy5fcHJlbG9hZE1hdGVyaWFsKGFuc3dlcik7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faU9uZS5zZWxlY3RBbnN3ZXIoYW5zd2VyLCBpbnB1dCk7XHJcbiAgICAgICAgdGhpcy5faGFuZGxlQW5zd2VyU2VsZWN0ZWQoYW5zd2VyKTtcclxuICAgICAgICBjb25zdCByZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQgPSBhd2FpdCB0aGlzLl9zdGFydFRvQnVpbGRGcm9tQ29uZmlndXJhdG9yKG1ldGFkYXRhKTtcclxuICAgICAgICB0aGlzLmFuc3dlclNlbGVjdGVkLm5leHQocmVzdWx0KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgc2VsZWN0U2VsZWN0aW9uQXNBbnN3ZXIoY2hvc2VuT3B0aW9uOiBTZWxlY3RvclN0cnVjdHVyZSwgbWV0YWRhdGE6IE1ldGFkYXRhKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy5fcHJlbG9hZE1hdGVyaWFsQnlTZWxlY3Rpb24oY2hvc2VuT3B0aW9uKTtcclxuICAgICAgICB0aGlzLl9oYW5kbGVTZWxlY3Rpb25TZWxlY3RlZChjaG9zZW5PcHRpb24pO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCA9IGF3YWl0IHRoaXMuX3N0YXJ0VG9CdWlsZEZyb21Db25maWd1cmF0b3IobWV0YWRhdGEpO1xyXG4gICAgICAgIHRoaXMuYW5zd2VyU2VsZWN0ZWQubmV4dChyZXN1bHQpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIF9nZXRBY3RpdmVGdXJuaXR1cmUoaW5zdGFuY2VJZDogc3RyaW5nKTogSXRlbSB7XHJcbiAgICAgICAgY29uc3QgY29uZmlndXJhYmxlczogYW55W10gPSB0aGlzLl9pdGVtU2VydmljZS5nZXRDb25maWd1cmFibGVzKCk7XHJcbiAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSBjb25maWd1cmFibGVzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChjb25maWd1cmFibGVzW2ldLm1ldGFkYXRhICYmIGNvbmZpZ3VyYWJsZXNbaV0ubWV0YWRhdGEuaXRlbUlkID09PSBpbnN0YW5jZUlkICYmICFjb25maWd1cmFibGVzW2ldLnRlbXBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWd1cmFibGVzW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2xpbmtTZWxlY3Rpb25zQW5kRGVjb3MoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSB0aGlzLnNlbGVjdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gY29uc3QgaWQ6IHN0cmluZyA9IHRoaXMuc2VsZWN0aW9uc1tpXS5hcnROb2RlSWREZWNvO1xyXG4gICAgICAgICAgICBsZXQgZGVjbzogYW55ID0gdGhpcy5faU9uZS5kZWNvTm9kZXMuZmluZChkID0+IGQubm9kZUlkID09PSB0aGlzLnNlbGVjdGlvbnNbaV0ubm9kZSk7XHJcbiAgICAgICAgICAgIGlmICghZGVjbykge1xyXG4gICAgICAgICAgICAgICAgZGVjbyA9IG5ldyBEZWNvTm9kZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkZWNvLnR5cGUgIT09IERlY29Ob2RlVHlwZS5WYXJpYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhdGlvbjogYW55ID0gdGhpcy5fZ2V0VmFyaWF0aW9ucygpLmZpbmQodiA9PiB2LnBhcmVudElkID09PSB0aGlzLnNlbGVjdGlvbnNbaV0uYXJ0Tm9kZUlkRGVjbyk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVjby52YXJpYXRpb24gPSB2YXJpYXRpb247XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25zW2ldLmRlY29Ob2RlID0gZGVjbztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5faU9uZS5zZWxlY3Rpb25zQW5kRGVjb3NMaW5rZWQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NyZWF0ZUNvbmZpZ3VyYWJsZUl0ZW0oaW5zdGFuY2VJZDogc3RyaW5nLCBtZXRhZGF0YTogTWV0YWRhdGEpOiBJdGVtIHtcclxuICAgICAgICAvLyBjb25zdCBmdXJuaXR1cmU6IEl0ZW0gPSB0aGlzLl9nZXRBY3RpdmVGdXJuaXR1cmUoaW5zdGFuY2VJZCk7XHJcbiAgICAgICAgLy8gY29uc3QgY2xvbmVTZWxlY3Rpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGlvbnMpKTtcclxuICAgICAgICAvLyBjbG9uZVNlbGVjdGlvbnMuZm9yRWFjaChzID0+IHtcclxuICAgICAgICAvLyAgIHMuaW1hZ2VEYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIC8vICAgcy5pbWFnZURhdGFMYXN0QW5zd2VyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICAgIC8vIGlmIChmdXJuaXR1cmUpIHtcclxuICAgICAgICAvLyAgIGZ1cm5pdHVyZS5tZXRhZGF0YS5kZWNvcyA9IEFycmF5LmZyb20odGhpcy5faU9uZS5kZWNvTm9kZXMpO1xyXG4gICAgICAgIC8vICAgZnVybml0dXJlLm1ldGFkYXRhLnNlbGVjdGlvbnMgPSBjbG9uZVNlbGVjdGlvbnM7XHJcbiAgICAgICAgLy8gICBmdXJuaXR1cmUubWFya0ZvckRlbGV0aW9uQ2hpbGRyZW4oKTtcclxuICAgICAgICAvLyAgIHJldHVybiBmdXJuaXR1cmU7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIGlmICghbWV0YWRhdGEucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgbWV0YWRhdGEucG9zaXRpb24gPSB0aGlzLnN0YXJ0UG9zaXRpb24gfHwgZGVmYXVsdFBvc2l0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW1ldGFkYXRhLnJvdGF0aW9uKSB7XHJcbiAgICAgICAgICAgIG1ldGFkYXRhLnJvdGF0aW9uID0gbWV0YWRhdGEuZGVmYXVsdDE4MCA/IGRlZmF1bHRSb3RhdGlvbiA6IG5ldyBFdWxlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBpdGVtVHlwZSBpcyBkaWZmZXJlbnQgaW4gYXJ0aWNsZSBjb21wYXJlZCB0byBzYXZlZCB2YWx1ZSBpbiB0aGUgLmpzb24sIHRoZSBpdGVtVHlwZSBpbiBhcnRpY2xlIGlzIGFwcGxpZWRcclxuICAgICAgICAvLyBtZXRhZGF0YS5pdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGUgJiYgdGhpcy5pdGVtVHlwZSAhPT0gbWV0YWRhdGEuaXRlbVR5cGUgPyB0aGlzLml0ZW1UeXBlIDogbWV0YWRhdGEuaXRlbVR5cGU7XHJcbiAgICAgICAgY29uc3QgaXRlbUNvbnN0cnVjdG9yID0gRmFjdG9yeS5nZXRDbGFzcyh0aGlzLnN0YW5kQWxvbmUgPyBJdGVtVHlwZS5DdXN0b21GbG9vckdyb3VwIDogbWV0YWRhdGEuaXRlbVR5cGUpO1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBuZXcgaXRlbUNvbnN0cnVjdG9yKFxyXG4gICAgICAgICAgICBtZXRhZGF0YSxcclxuICAgICAgICAgICAgdW5kZWZpbmVkLCAvLyBiYXNlIG9uIGVtcHR5IG9iamVjdFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBtb3VzZU92ZXI6IHRoaXMubW91c2VPdmVyLFxyXG4gICAgICAgICAgICAgICAgbW91c2VPZmY6IHRoaXMubW91c2VPZmYsXHJcbiAgICAgICAgICAgICAgICBpdGVtU2VsZWN0ZWQ6IHRoaXMuc2VsZWN0SXRlbSxcclxuICAgICAgICAgICAgICAgIGl0ZW1VbnNlbGVjdGVkOiB0aGlzLnVuU2VsZWN0SXRlbSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRTZWxlY3RlZDogdGhpcy5zZWxlY3RFbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudFVuc2VsZWN0ZWQ6IHRoaXMudW5TZWxlY3RFbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgY29uZmlndXJpbmdDaGFuZ2VkOiB0aGlzLmNoYW5nZUNvbmZpZ3VyZU1vZGUsXHJcbiAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnRQb3NpdGlvbkNoYW5nZWRIYW5kbGVyOiB0aGlzLm1vdmVDaGlsZEVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBjaGlsZEVsZW1lbnRQbGFjZUhhbmRsZXI6IHRoaXMucGxhY2VDaGlsZEVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBzaG93SGlkZU91dGxpbmVIYW5kbGVyOiB0aGlzLnNob3dIaWRlT3V0bGluZVxyXG4gICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50UG9zaXRpb25DaGFuZ2VkSGFuZGxlcjogYWRqdXN0YWJsZSA/IHRoaXMubW92ZUNoaWxkRWxlbWVudCA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFbGVtZW50UGxhY2VIYW5kbGVyOiBhZGp1c3RhYmxlID8gdGhpcy5wbGFjZUNoaWxkRWxlbWVudCA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaXRlbS5jYW5EZWxldGUgPSAhdGhpcy5zdGFuZEFsb25lO1xyXG4gICAgICAgIGl0ZW0uY2FuQ29weSA9ICF0aGlzLnN0YW5kQWxvbmU7XHJcbiAgICAgICAgaXRlbS5hbGx3YXlzQ29uZmlndXJlTW9kZSA9IHRoaXMuc3RhbmRBbG9uZTtcclxuICAgICAgICBpdGVtLmhpZ2hMaWdodERpc2FibGVkID0gIXRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnVzZVN0YW5kYWxvbmVIaWdoTGlnaHQ7XHJcbiAgICAgICAgaXRlbS50ZW1wT2JqZWN0ID0gdHJ1ZTtcclxuICAgICAgICBpdGVtLm5hbWUgPSBtZXRhZGF0YS5pdGVtTmFtZSArICdfY2xvbmUnO1xyXG4gICAgICAgIGl0ZW0udmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmFkZEl0ZW0oaXRlbSk7XHJcbiAgICAgICAgLy8gdGhpcy5fdXBzZXJ0RnVybml0dXJlKG1ldGFkYXRhLml0ZW1JZCwge0JyYW5kSWRlbnRpZmllcjogbWV0YWRhdGEuaXRlbUlkZW50aWZpZXJ9LCBpdGVtKTtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jcmVhdGVQb3NpdGlvbkFuaW1hdGlvbihvYmplY3Q6IE9iamVjdDNELCBmcm9tOiBWZWN0b3IzLCB0bzogVmVjdG9yMywgZWFzaW5nOiBUV0VFTi5FYXNpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCB0d2VlbkZyb206IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpLmNvcHkoZnJvbSk7XHJcbiAgICAgICAgY29uc3QgdHdlZW4gPSBuZXcgVFdFRU4uVHdlZW4odHdlZW5Gcm9tKVxyXG4gICAgICAgICAgICAudG8odG8sIDEwMDApXHJcbiAgICAgICAgICAgIC5lYXNpbmcoZWFzaW5nKVxyXG4gICAgICAgICAgICAub25VcGRhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb2JqZWN0LnBvc2l0aW9uLmNvcHkodHdlZW5Gcm9tKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHR3ZWVuLm9uQ29tcGxldGUocmVzb2x2ZS5iaW5kKHRoaXMsIHR3ZWVuKSkub25TdG9wKHJlamVjdCkuc3RhcnQoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfYW5pbWF0ZUNoYW5nZXMoZnVybml0dXJlOiBJdGVtLCBjaGFuZ2VzOiBDaGFuZ2VzSW50ZXJmYWNlW10pOiBQcm9taXNlPHZvaWRbXT4ge1xyXG4gICAgICAgIC8vIGl0J3MgY2hyaXN0bWFzc3NcclxuICAgICAgICBjb25zdCBhbmltYXRpb25zOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcclxuICAgICAgICBpZiAoZnVybml0dXJlIGluc3RhbmNlb2YgQ3VzdG9tRmxvb3JJdGVtKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWFzaW5nOiBUV0VFTi5FYXNpbmcgPSAhY2hhbmdlc1tpXS5vbGRQb3NpdGlvbiA/IFRXRUVOLkVhc2luZy5FeHBvbmVudGlhbC5PdXQgOlxyXG4gICAgICAgICAgICAgICAgICAgICghY2hhbmdlc1tpXS5uZXdQb3NpdGlvbiA/IFRXRUVOLkVhc2luZy5FeHBvbmVudGlhbC5PdXQgOiBUV0VFTi5FYXNpbmcuRXhwb25lbnRpYWwuSW5PdXQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZnJvbTogVmVjdG9yMyA9XHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlc1tpXS5vbGRQb3NpdGlvbiA/IG5ldyBWZWN0b3IzKCkuY29weShjaGFuZ2VzW2ldLm9sZFBvc2l0aW9uKSA6IG5ldyBWZWN0b3IzKCkuY29weShjaGFuZ2VzW2ldLm5ld1Bvc2l0aW9uKS5zZXRZKDEwKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRvOiBWZWN0b3IzID1cclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzW2ldLm5ld1Bvc2l0aW9uID8gbmV3IFZlY3RvcjMoKS5jb3B5KGNoYW5nZXNbaV0ubmV3UG9zaXRpb24pIDogbmV3IFZlY3RvcjMoKS5jb3B5KGNoYW5nZXNbaV0ub2xkUG9zaXRpb24pLnNldFkoMTApO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqOiBPYmplY3QzRCA9IGZ1cm5pdHVyZS5nZXRPYmplY3RCeU5hbWUoY2hhbmdlc1tpXS5uYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmICghZnJvbS5lcXVhbHModG8pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVQb3NpdGlvbkFuaW1hdGlvbihvYmosIGZyb20sIHRvLCBlYXNpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoYW5pbWF0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfcmVwbGFjZUN1cnJlbnRJdGVtKG5ld0l0ZW06IEl0ZW0sIG1ldGFkYXRhOiBNZXRhZGF0YSwgYW5pbWF0ZTogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxJdGVtPiB7XHJcbiAgICAgICAgY29uc3QgZnVybml0dXJlOiBJdGVtID0gdGhpcy5fZ2V0QWN0aXZlRnVybml0dXJlKG1ldGFkYXRhLml0ZW1JZCk7XHJcbiAgICAgICAgY29uc3QgY2xvbmVTZWxlY3Rpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGlvbnMpKTtcclxuICAgICAgICBjbG9uZVNlbGVjdGlvbnMuZm9yRWFjaChzID0+IHtcclxuICAgICAgICAgICAgcy5pbWFnZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHMuaW1hZ2VEYXRhTGFzdEFuc3dlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgaWYgKHMuYWRkYWJsZXMpIHtcclxuICAgICAgICAgICAgICAgIHMuYWRkYWJsZXMuZm9yRWFjaChhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBhLmltYWdlRGF0YSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGZ1cm5pdHVyZSkge1xyXG4gICAgICAgICAgICBmdXJuaXR1cmUubWV0YWRhdGEuZGVjb3MgPSBBcnJheS5mcm9tKHRoaXMuX2lPbmUuZGVjb05vZGVzKTtcclxuICAgICAgICAgICAgZnVybml0dXJlLm1ldGFkYXRhLnNlbGVjdGlvbnMgPSBjbG9uZVNlbGVjdGlvbnM7XHJcbiAgICAgICAgICAgIGlmIChmdXJuaXR1cmUgaW5zdGFuY2VvZiBDdXN0b21XYWxsRmxvb3JJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAobmV3SXRlbSBhcyBDdXN0b21XYWxsRmxvb3JJdGVtKS5jdXJyZW50V2FsbCA9IGZ1cm5pdHVyZS5jdXJyZW50V2FsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuZXdJdGVtLnVwZGF0ZVBpdm90KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXM6IENoYW5nZXNJbnRlcmZhY2VbXSA9IGZ1cm5pdHVyZSBpbnN0YW5jZW9mIEN1c3RvbUZsb29ySXRlbSA/IE9iamVjdFV0aWxzLkdldENoYW5nZXMoZnVybml0dXJlLmNoaWxkcmVuLCBuZXdJdGVtLmNoaWxkcmVuKSA6IFtdO1xyXG4gICAgICAgICAgICAvLyBhbmltYXRlIHJlbW92ZWQgaXRlbXNcclxuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZENoYW5nZXM6IENoYW5nZXNJbnRlcmZhY2VbXSA9IGNoYW5nZXMuZmlsdGVyKGMgPT4gIWMubmV3UG9zaXRpb24pO1xyXG4gICAgICAgICAgICBpZiAoYW5pbWF0ZSAmJiByZW1vdmVkQ2hhbmdlcyAmJiByZW1vdmVkQ2hhbmdlcy5sZW5ndGggPiAwKSB7IC8vIGFuaW1hdGUgY2hhbmdlcyB0byB0aGUgbW9kZWxcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2FuaW1hdGVDaGFuZ2VzKGZ1cm5pdHVyZSwgcmVtb3ZlZENoYW5nZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSBjaGlsZHJlbiBmcm9tIGZ1cm5pdHVyZVxyXG4gICAgICAgICAgICBmdXJuaXR1cmUuY2xlYXJDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICAvLyBhZGQgbmV3IGNoaWxkcmVuIHRvIGZ1cm5pdHVyZVxyXG4gICAgICAgICAgICBuZXdJdGVtLmNoaWxkcmVuLm1hcChjID0+IGZ1cm5pdHVyZS5hZGRDaGlsZChjKSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLnJlbW92ZUl0ZW0obmV3SXRlbSwgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgICAgICAgLy8gYW5pbWF0ZSAobmV3KSBpdGVtc1xyXG4gICAgICAgICAgICBjb25zdCBvdGhlckNoYW5nZXM6IENoYW5nZXNJbnRlcmZhY2VbXSA9IGNoYW5nZXMuZmlsdGVyKGMgPT4gYy5uZXdQb3NpdGlvbik7XHJcbiAgICAgICAgICAgIGlmIChhbmltYXRlICYmIG90aGVyQ2hhbmdlcyAmJiBvdGhlckNoYW5nZXMubGVuZ3RoID4gMCkgeyAvLyBhbmltYXRlIGNoYW5nZXMgdG8gdGhlIG1vZGVsXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9hbmltYXRlQ2hhbmdlcyhmdXJuaXR1cmUsIG90aGVyQ2hhbmdlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZ1cm5pdHVyZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBuZXdJdGVtLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICBuZXdJdGVtLnRlbXBPYmplY3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgbmV3SXRlbS5uYW1lID0gbWV0YWRhdGEuaXRlbU5hbWU7XHJcbiAgICAgICAgICAgIG5ld0l0ZW0ubWV0YWRhdGEuc2VsZWN0aW9ucyA9IGNsb25lU2VsZWN0aW9ucztcclxuICAgICAgICAgICAgbmV3SXRlbS5tZXRhZGF0YS5kZWNvcyA9IEFycmF5LmZyb20odGhpcy5faU9uZS5kZWNvTm9kZXMpO1xyXG4gICAgICAgICAgICB0aGlzLl91cHNlcnRGdXJuaXR1cmUobWV0YWRhdGEuaXRlbUlkLCB7QnJhbmRJZGVudGlmaWVyOiBtZXRhZGF0YS5pdGVtSWRlbnRpZmllcn0sIG5ld0l0ZW0pO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3SXRlbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1vdXNlT3ZlciA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLmlzTW91c2VPdmVyT2JqZWN0ID0gdHJ1ZTtcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIG1vdXNlT2ZmID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNNb3VzZU92ZXJPYmplY3QgPSBmYWxzZTtcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIHNlbGVjdEl0ZW0gPSAobWVzaDogTWVzaCkgPT4ge1xyXG4gICAgICAgIC8vIHRoaXMuYWN0aXZlSW5zdGFuY2UgPSBtZXNoLnVzZXJEYXRhLml0ZW1JZDtcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIHVuU2VsZWN0SXRlbSA9ICgpID0+IHtcclxuICAgICAgICAvLyB0aGlzLnNob3dMaXRlU2VsZWN0b3IgPSBmYWxzZTtcclxuICAgICAgICAvLyB0aGlzLnNob3dTZWxlY3Rpb25zID0gZmFsc2U7XHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBzZWxlY3RFbGVtZW50ID0gKGVsZW1lbnQ6IE1lc2gsIG1vdXNlUG9zOiBWZWN0b3IzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlQ2hpbGRFbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICBpZiAoZWxlbWVudC5wYXJlbnQgaW5zdGFuY2VvZiBDdXN0b21PYmplY3QzRCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vcmlnaW5hbEVsZW1lbnRQb3NpdGlvbi5jb3B5KGVsZW1lbnQucGFyZW50LnBvc2l0aW9uKTtcclxuICAgICAgICAgICAgLy8gaWYgKHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLmFkanVzdGFibGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzTW92ZWFibGVPYmplY3QoZWxlbWVudC5wYXJlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb25uZWN0b3I6IGFueSA9IGVsZW1lbnQucGFyZW50LmNoaWxkcmVuLmZpbmQoYyA9PiBjLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjXycpID4gLTEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rvci5jb25uZWN0ZWRUbykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2VFbGVtZW50OiBPYmplY3QzRCA9IDxDdXN0b21PYmplY3QzRD50aGlzLl9jdXJyZW50Q3VzdG9tRmxvb3JHcm91cC5nZXRPYmplY3RCeU5hbWUoY29ubmVjdG9yLmNvbm5lY3RlZFRvKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJhc2VFbGVtZW50Tm9kZUlkID0gYmFzZUVsZW1lbnQudXNlckRhdGEgJiYgYmFzZUVsZW1lbnQudXNlckRhdGEuc2VsZWN0aW9uID8gYmFzZUVsZW1lbnQudXNlckRhdGEuc2VsZWN0aW9uLm5vZGVJZCA6IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50b2dnbGVTZWxlY3RlZEVsZW1lbnQubmV4dChlbGVtZW50KTtcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIHVuU2VsZWN0RWxlbWVudCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLl9hY3RpdmVDaGlsZEVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy50b2dnbGVTZWxlY3RlZEVsZW1lbnQubmV4dCh1bmRlZmluZWQpO1xyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgbW92ZUNoaWxkRWxlbWVudCA9IChlbGVtZW50OiBDdXN0b21PYmplY3QzRCwgcG9zOiBWZWN0b3IzKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgd29ybGRUb0xvY2FsUG9zOiBWZWN0b3IzID0gdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAud29ybGRUb0xvY2FsKHBvcy5jbG9uZSgpKTtcclxuICAgICAgICB0aGlzLl9tb3ZlQ2hpbGRFbGVtZW50VG9Qb3NpdGlvbihlbGVtZW50LCB3b3JsZFRvTG9jYWxQb3MpO1xyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgcGxhY2VDaGlsZEVsZW1lbnQgPSBhc3luYyAoZWxlbWVudDogQ3VzdG9tT2JqZWN0M0QpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5faXNNb3ZlYWJsZU9iamVjdChlbGVtZW50KSAmJiAoZWxlbWVudCBhcyBhbnkpLm1vdmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJhc2VFbGVtZW50OiBPYmplY3QzRFtdID1cclxuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLmdldE9iamVjdHNCeVVzZXJEYXRhUHJvcCgnc2VsZWN0aW9uJywgJ25vZGVJZCcsIHRoaXMuYmFzZUVsZW1lbnROb2RlSWQpO1xyXG4gICAgICAgICAgICAvLyB1c2UgaW5zdGFuY2VJZCBmcm9tIHBhcmVudFxyXG4gICAgICAgICAgICBjb25zdCBpdGVtOiBJdGVtID0gT2JqZWN0VXRpbHMuR2V0UGFyZW50SXRlbShlbGVtZW50KTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rvcjogc3RyaW5nID1cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9lbGVtZW50U2VydmljZS5wbGFjZUVsZW1lbnRPbkNvbm5lY3RvcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZXRhZGF0YS5pdGVtSWQsIGVsZW1lbnQsIGJhc2VFbGVtZW50Lmxlbmd0aCA+IDAgPyBiYXNlRWxlbWVudFswXSA6IG51bGwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2F2ZUVsZW1lbnRDb25uZWN0b3IoZWxlbWVudCwgY29ubmVjdG9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIGNoYW5nZUNvbmZpZ3VyZU1vZGUgPSBhc3luYyAobWV0YWRhdGE6IE1ldGFkYXRhLCBjb25maWd1cmluZzogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIHRoaXMuY29uZmlndXJlTW9kZUNoYW5nZWQubmV4dCh7bWV0YWRhdGE6IG1ldGFkYXRhLCBjb25maWd1cmluZzogY29uZmlndXJpbmd9KTtcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIGRyYWdDb25uZWN0b3IgPSBhc3luYyAoY29ubmVjdG9yOiBDdXN0b21NZXNoLCBwb3M6IFZlY3RvcjMpID0+IHtcclxuICAgICAgICB0aGlzLl9yZXNpemVTZXJ2aWNlLmRyYWdDb25uZWN0b3JUb05ld1Bvc2l0aW9uKGNvbm5lY3RvciwgcG9zKTtcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIHNob3dIaWRlT3V0bGluZSA9IGFzeW5jIChvYmo6IEl0ZW0sIHNob3c6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBzaG93ID8gdGhpcy5fb3V0bGluZVNlcnZpY2Uuc2hvd091dGxpbmUob2JqKSA6IHRoaXMuX291dGxpbmVTZXJ2aWNlLmhpZGVPdXRsaW5lKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxDb25maWd1cmluZ0N1cnJlbnRJbnN0YW5jZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXApIHtcclxuICAgICAgICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuY29uZmlndXJpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaXNNb3ZlYWJsZU9iamVjdChvYmo6IE9iamVjdDNEKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIG9iai51c2VyRGF0YSAmJiBvYmoudXNlckRhdGEuc2VsZWN0aW9uICYmIG9iai51c2VyRGF0YS5zZWxlY3Rpb24uaGRlY29Qb3NpdGlvbmluZyA9PT0gSGRlY29Qb3NpdGlvbmluZy5WYXJpYWJsZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9hZGRFbGVtZW50T25Db25uZWN0b3IoY3VycmVudEl0ZW06IEl0ZW0sIGVsZW1lbnQ6IE9iamVjdDNELCBjb25uZWN0b3I6IHN0cmluZywgY29ubmVjdGVkTm9kZUlkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICAvLyBjb25zdCBjb246IE9iamVjdDNEID0gdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAuZ2V0T2JqZWN0QnlOYW1lKGNvbm5lY3Rvci5jb25uZWN0b3IpO1xyXG4gICAgICAgIC8vIGlmIChjb24pIHtlXHJcbiAgICAgICAgLy8gY29uc3QgcG9zOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKS5jb3B5KGNvbi5wb3NpdGlvbik7XHJcbiAgICAgICAgLy8gY29uLmxvY2FsVG9Xb3JsZChwb3MpO1xyXG4gICAgICAgIGNvbnN0IGNvbm5lY3RvckZyb21FbGVtZW50ID0gY3VycmVudEl0ZW0uY29ubmVjdG9yRnJvbUVsZW1lbnQoZWxlbWVudC51c2VyRGF0YS5zZWxlY3Rpb24pO1xyXG4gICAgICAgIGNvbnN0IGlkRnJvbUJhc2VFbGVtZW50OiBudW1iZXIgPSBjb25uZWN0ZWROb2RlSWQgPyBjb25uZWN0ZWROb2RlSWQgOiBjb25uZWN0b3JGcm9tRWxlbWVudC5jb25uZWN0ZWROb2RlSWQ7XHJcbiAgICAgICAgY29uc3QgYmFzZUVsZW1lbnQ6IE9iamVjdDNEW10gPSBjdXJyZW50SXRlbS5nZXRPYmplY3RzQnlVc2VyRGF0YVByb3AoJ3NlbGVjdGlvbicsICdub2RlSWQnLCBpZEZyb21CYXNlRWxlbWVudCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGl0ZW06IEl0ZW0gPSBPYmplY3RVdGlscy5HZXRQYXJlbnRJdGVtKGVsZW1lbnQpO1xyXG4gICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbm46IHN0cmluZyA9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9lbGVtZW50U2VydmljZS5wbGFjZUVsZW1lbnRPbkNvbm5lY3RvcihcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLm1ldGFkYXRhLml0ZW1JZCwgZWxlbWVudCwgYmFzZUVsZW1lbnQubGVuZ3RoID4gMCA/IGJhc2VFbGVtZW50WzBdIDogbnVsbCwgZmFsc2UsIGNvbm5lY3RvciwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLl9zYXZlRWxlbWVudENvbm5lY3RvcihlbGVtZW50LCBjb25uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NhdmVFbGVtZW50Q29ubmVjdG9yKGVsZW1lbnQ6IE9iamVjdDNELCBjb25uZWN0b3I6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQudXNlckRhdGEgJiYgZWxlbWVudC51c2VyRGF0YS5zZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5fY3VycmVudEN1c3RvbUZsb29yR3JvdXAudXBkYXRlRWxlbWVudENvbm5lY3RvcihlbGVtZW50LnVzZXJEYXRhLnNlbGVjdGlvbiwgY29ubmVjdG9yLCB0aGlzLmJhc2VFbGVtZW50Tm9kZUlkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBtb3ZlXHJcbiAgICAgKiBAcGFyYW0gcG9zIFRoZSBsb2NhbCBwb3NpdGlvblxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfbW92ZUNoaWxkRWxlbWVudFRvUG9zaXRpb24oZWxlbWVudDogT2JqZWN0M0QsIHBvczogVmVjdG9yMyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc01vdmVhYmxlT2JqZWN0KGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdvcmxkVG9Mb2NhbFBvczogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCkuY29weShwb3MpLmFkZCh0aGlzLl9vcmlnaW5hbEVsZW1lbnRQb3NpdGlvbik7XHJcbiAgICAgICAgICAgIGNvbnN0IGJhc2VFbGVtZW50OiBPYmplY3QzRFtdID1cclxuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDdXN0b21GbG9vckdyb3VwLmdldE9iamVjdHNCeVVzZXJEYXRhUHJvcCgnc2VsZWN0aW9uJywgJ25vZGVJZCcsIHRoaXMuYmFzZUVsZW1lbnROb2RlSWQpO1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtOiBJdGVtID0gT2JqZWN0VXRpbHMuR2V0UGFyZW50SXRlbShlbGVtZW50KTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRTZXJ2aWNlLm1vdmVFbGVtZW50VG9OZXdQb3NpdGlvbihcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLm1ldGFkYXRhLml0ZW1JZCwgZWxlbWVudCwgd29ybGRUb0xvY2FsUG9zLCBiYXNlRWxlbWVudC5sZW5ndGggPiAwID8gYmFzZUVsZW1lbnRbMF0gOiBudWxsKTtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMuX3NhdmVFbGVtZW50Q29ubmVjdG9yKGVsZW1lbnQsIHBvcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcmVzZXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9wbGFjZWRBZGRhYmxlcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRoaXMuX2FkanVzdGFibGVzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fYWRkYWJsZXMubGVuZ3RoID0gMDtcclxuICAgICAgICAvLyB0aGlzLl9wcmVwYXJlVGhlU2VsZWN0aW9ucygpO1xyXG4gICAgICAgIC8vIHRvZG86IGNoZWNrIHRoaXNcclxuICAgICAgICAvLyB0aGlzLl9lbGVtZW50U2VydmljZS5yZW1vdmVFbGVtZW50KHRoaXMuYWN0aXZlSW5zdGFuY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgbWF0ZXJpYWxJZCBvZiB0aGUgcGFyZW50IHVwIHRoZSB0cmVlIHVudGlsIHByZXNlbnRpb25sZXZlbCAxIGlzIHJlYWNoZWRcclxuICAgICAqIEBwYXJhbSBpZFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfZ2V0TWF0ZXJpYWxJZEZyb21QYXJlbnQoaWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgaWR4OiBudW1iZXIgPSB0aGlzLnNlbGVjdGlvbnMuZmluZEluZGV4KHMgPT4gcy5ub2RlID09PSBpZCk7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRMZXZlbDogbnVtYmVyID0gOTk5O1xyXG4gICAgICAgIGlmIChpZHggPiAtMSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gaWR4OyBpID4gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbnNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsID49IGN1cnJlbnRMZXZlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY3VycmVudExldmVsID0gc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5oZGVjb0dhbWVPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uLmhkZWNvR2FtZU9iamVjdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3ByZXBhcmVUaGVTZWxlY3Rpb25zKGluc3RhbmNlSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbnMgPSB0aGlzLnNlbGVjdGlvbnMuc2xpY2UoKTtcclxuICAgICAgICBjb25zdCBzZWxlY3Rpb25PZkFydGljbGU6IFNlbGVjdGlvbiA9IHNlbGVjdGlvbnMuZmluZChzID0+IHMubm9kZVR5cGUgPT09IE5vZGVUeXBlLkFydGljbGUpO1xyXG4gICAgICAgIGNvbnN0IGFkanVzdGFibGVTZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9IHNlbGVjdGlvbnMuZmlsdGVyKHMgPT4gcy5hZGRBZGp1c3QgPT09ICcyJyk7XHJcbiAgICAgICAgY29uc3QgaXNBcnRpY2xlV2l0aE1hdGVyaWFsOiBib29sZWFuID1cclxuICAgICAgICAgICAgYWRqdXN0YWJsZVNlbGVjdGlvbnMubGVuZ3RoID09PSAwICYmXHJcbiAgICAgICAgICAgIHNlbGVjdGlvbk9mQXJ0aWNsZS5nYW1lT2JqZWN0ICYmXHJcbiAgICAgICAgICAgIHNlbGVjdGlvbk9mQXJ0aWNsZS5nYW1lT2JqZWN0Lmxlbmd0aCA+IDA7XHJcbiAgICAgICAgLy8gZ2V0IGdlbmVyaWMgdmFyaWF0aW9uc1xyXG4gICAgICAgIGNvbnN0IGdsb2JhbFZhcmlhdGlvbnM6IERlY29Ob2RlW10gPSB0aGlzLnNlbGVjdGlvbnNcclxuICAgICAgICAgICAgLmZpbHRlcihzID0+IChzLmdlbmVyaWMgfHwgYWRqdXN0YWJsZVNlbGVjdGlvbnMubGVuZ3RoID09PSAxKSAmJiAocy5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbiAmJiAhcy5kZWNvTm9kZS50eXBlKVxyXG4gICAgICAgICAgICAubWFwKCh2YWx1ZTogU2VsZWN0aW9uLCBpbmRleDogbnVtYmVyLCBhcnJheTogU2VsZWN0aW9uW10pID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIGZpbmQgc2VsZWN0aW9uIG9mIHZhcmlhdGlvblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsOiBTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbnMuZmluZChzID0+IHMuYXJ0Tm9kZUlkRGVjbyA9PT0gKHZhbHVlLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uLnBhcmVudElkKTtcclxuICAgICAgICAgICAgICAgIGlmIChzZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAodmFsdWUuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24uc3VwcGxpZXJBcnRpY2xlTnIgPSBzZWwuc3VwcGxpZXJBcnRpY2xlTnI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAodmFsdWUuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24ubWF0ZXJpYWxJZCA9IHRoaXMuX2dldE1hdGVyaWFsSWRGcm9tUGFyZW50KHZhbHVlLm5vZGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICh2YWx1ZS5kZWNvTm9kZSBhcyBhbnkpLnZhcmlhdGlvbjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gY29tbWVudGVkIG91dCBmb3IgdGhlIG1vbWVudFxyXG4gICAgICAgIC8vIGdsb2JhbFZhcmlhdGlvbnMuZm9yRWFjaChnID0+IHtcclxuICAgICAgICAvLyAgIGNvbnN0IHBhcmVudElkeCA9IHNlbGVjdGlvbnMuZmluZEluZGV4KHMgPT4gcy5kZWNvTm9kZSAmJiBzLmRlY29Ob2RlLmlkID09PSBnLnBhcmVudElkKTtcclxuICAgICAgICAvLyAgIGlmIChwYXJlbnRJZHgpIHsgLy8gcmVtb3ZlIHBhcmVudCBzZWxlY3Rpb25cclxuICAgICAgICAvLyAgICAgc2VsZWN0aW9ucy5zcGxpY2UocGFyZW50SWR4LCAxKTtcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyAgIGNvbnN0IGlkeCA9IHNlbGVjdGlvbnMuZmluZEluZGV4KHMgPT4gcy5kZWNvTm9kZSAmJiBzLmRlY29Ob2RlLmlkID09PSBnLmlkKTtcclxuICAgICAgICAvLyAgIGlmIChpZHgpIHsgLy8gbW92ZSBnZW5lcmljIHZhcmlhdGlvbnMgdG8gdG9wXHJcbiAgICAgICAgLy8gICAgIGNvbnN0IHNlbGVjdGlvbiA9IHNlbGVjdGlvbnNbaWR4XTtcclxuICAgICAgICAvLyAgICAgc2VsZWN0aW9ucy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAvLyAgICAgc2VsZWN0aW9ucy51bnNoaWZ0KHNlbGVjdGlvbik7XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHVzZWRWYXJpYXRpb25zOiBGdXJuaXR1cmVQYXJ0VmFyaWF0aW9uW10gPSBbXTtcclxuICAgICAgICBsZXQgZ2xvYmFsVmFyaWF0aW9uc1Jld3JpdGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IHNlbGVjdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIGxldCBsYXN0QWRkZWQ6IFNlbGVjdGlvbjtcclxuICAgICAgICBsZXQgbGFzdEFkanVzdGFibGU6IFNlbGVjdGlvbjtcclxuICAgICAgICBsZXQgbmV3UGFydDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcmV2aW91c1ByZXNMZXZlbDogbnVtYmVyID0gLTE7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uaW5nOiBhbnk7XHJcbiAgICAgICAgbGV0IG9wdGlvblRleHQ6IHN0cmluZztcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uID0gc2VsZWN0aW9uc1tpXTtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5wcmVzZW50YXRpb25MZXZlbCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25pbmcgPSBzZWxlY3Rpb24uaGRlY29Qb3NpdGlvbmluZztcclxuICAgICAgICAgICAgICAgIG9wdGlvblRleHQgPSBzZWxlY3Rpb24ucXVlc3Rpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5wcmVzZW50YXRpb25MZXZlbCA+IHByZXZpb3VzUHJlc0xldmVsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uaGRlY29Qb3NpdGlvbmluZyA9IHNlbGVjdGlvbi5oZGVjb1Bvc2l0aW9uaW5nIHx8IHBvc2l0aW9uaW5nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24uZGVjb05vZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24uZGVjb05vZGUudHlwZSA9PT0gRGVjb05vZGVUeXBlLlZhcmlhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlY29Ob2RlID0gc2VsZWN0aW9uLmRlY29Ob2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIChkZWNvTm9kZSBhcyBhbnkpLm9wdGlvblRleHQgPSBvcHRpb25UZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGZpbmQgc2VsZWN0aW9uIG9mIHZhcmlhdGlvbiBhbmQgc2V0IG1hdGVyaWFsSWQgaW4gY2FzZSBvZiBtdWx0aW1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICAgICAgKGRlY29Ob2RlIGFzIGFueSkubWF0ZXJpYWxJZCA9IHRoaXMuX2dldE1hdGVyaWFsSWRGcm9tUGFyZW50KGRlY29Ob2RlLm5vZGVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RBZGRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3UGFydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChkZWNvTm9kZSBhcyBhbnkpLm1hdGVyaWFsSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0QWRkZWQudmFyaWF0aW9ucy5wdXNoKGRlY29Ob2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEFkZGVkLnZhcmlhdGlvbnMgPSBbZGVjb05vZGVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEFkZGVkLnZhcmlhdGlvbnMucHVzaChkZWNvTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFydCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbG9iYWxWYXJpYXRpb25zUmV3cml0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWF0aW9ucy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWF0aW9uc1Jld3JpdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYXRpb25zLnB1c2goZGVjb05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCB2YXJpYXRpb246IEZ1cm5pdHVyZVBhcnRWYXJpYXRpb24gPSBuZXcgRnVybml0dXJlUGFydFZhcmlhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhdGlvbi5CcmFuZElkID0gc2VsZWN0aW9uLmRlY29Ob2RlLmJyYW5kSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWF0aW9uLkRlc2NyaXB0aW9uID0gc2VsZWN0aW9uLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhdGlvbi5NYXRlcmlhbElkID0gKHNlbGVjdGlvbi5kZWNvTm9kZSBhcyBhbnkpLm1hdGVyaWFsSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWF0aW9uLlN1cHBsaWVyQXJ0aWNsZU5yID0gKHNlbGVjdGlvbi5kZWNvTm9kZSBhcyBhbnkpLnN1cHBsaWVyQXJ0aWNsZU5yO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHVzZWRWYXJpYXRpb25zLnB1c2godmFyaWF0aW9uKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHNlbGVjdGlvbi5kZWNvTm9kZS50eXBlID09PSBEZWNvTm9kZVR5cGUuUGFydCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBzZWxlY3Rpb24uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUgPT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lLmxlbmd0aCkgfHwgKGlzQXJ0aWNsZVdpdGhNYXRlcmlhbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uLmRlY29Ob2RlLmtpbmQgPT09IERlY29Ob2RlS2luZC5BZGp1c3RhYmxlIHx8IChpc0FydGljbGVXaXRoTWF0ZXJpYWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi52YXJpYXRpb25zID0gZ2xvYmFsVmFyaWF0aW9ucztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRqdXN0YWJsZXMucHVzaChzZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxhc3RBZGRlZCB8fCAobGFzdEFkZGVkLm5vZGVJZCAhPT0gc2VsZWN0aW9uLm5vZGVJZCB8fCBsYXN0QWRkZWQubm9kZSAhPT0gc2VsZWN0aW9uLm5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXJ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0QWRkZWQgPSBzZWxlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RBZGp1c3RhYmxlID0gc2VsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmRlY29Ob2RlLmtpbmQgPT09IERlY29Ob2RlS2luZC5BZGRhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi52YXJpYXRpb25zID0gbGFzdEFkanVzdGFibGUgPyBsYXN0QWRqdXN0YWJsZS52YXJpYXRpb25zIDogZ2xvYmFsVmFyaWF0aW9ucztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RBZGp1c3RhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0QWRqdXN0YWJsZS5hZGRhYmxlcy5wdXNoKHNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkYWJsZXMucHVzaChzZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxhc3RBZGRlZCB8fCAobGFzdEFkZGVkLm5vZGVJZCAhPT0gc2VsZWN0aW9uLm5vZGVJZCB8fCBsYXN0QWRkZWQubm9kZSAhPT0gc2VsZWN0aW9uLm5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXJ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0QWRkZWQgPSBzZWxlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZpb3VzUHJlc0xldmVsID0gc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0aGlzLl91cHNlcnRGdXJuaXR1cmUodGhpcy5hY3RpdmVJbnN0YW5jZSxcclxuICAgICAgICAvLyAgIHtWYXJpYXRpb25zOiB1c2VkVmFyaWF0aW9uc30pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2dldEFkanVzdGFibGVzKGNoZWNrR2FtZU9iamVjdDogYm9vbGVhbiA9IHRydWUsIGNoZWNrVHlwZTogYm9vbGVhbiA9IHRydWUpOiBTZWxlY3Rpb25bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9ucy5maWx0ZXIocyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGU6IERlY29Ob2RlID0gcy5kZWNvTm9kZTtcclxuICAgICAgICAgICAgcmV0dXJuIG5vZGUgJiYgKGNoZWNrR2FtZU9iamVjdCA/IG5vZGUuZ2FtZU9iamVjdE5hbWUgOiB0cnVlKSAmJiAoY2hlY2tUeXBlID8gbm9kZS50eXBlID09PSBEZWNvTm9kZVR5cGUuUGFydCA6IHRydWUpICYmIG5vZGUua2luZCA9PT0gRGVjb05vZGVLaW5kLkFkanVzdGFibGU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0VmFyaWF0aW9ucygpOiBhbnlbXSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lPbmUuZGVjb05vZGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pT25lLmRlY29Ob2Rlcy5maWx0ZXIoKGRlY286IERlY29Ob2RlKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZWNvLnR5cGUgPT09IERlY29Ob2RlVHlwZS5WYXJpYXRpb247XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY3JlYXRlQWRqdXN0YWJsZShpdGVtOiBJdGVtLCBhZGo6IFNlbGVjdGlvbik6IEN1c3RvbU9iamVjdDNEIHtcclxuICAgICAgICBsZXQgb2JqOiBhbnkgPSB0aGlzLmZ1bGwzRE9iamVjdFRvVXNlID8gdGhpcy5mdWxsM0RPYmplY3RUb1VzZS5nZXRPYmplY3RCeU5hbWUoYWRqLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lIHx8IGFkai5nYW1lT2JqZWN0KSA6IG51bGw7XHJcbiAgICAgICAgaWYgKCFvYmopIHtcclxuICAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBnbGIgZmlsZXMsIHRoZSBpbXBvcnRlciByZW1vdmVzIGRvdHMgZnJvbSBuYW1lc1xyXG4gICAgICAgICAgICBjb25zdCBuYW1lID0gYWRqLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lLnJlcGxhY2UoL1suXS9nLCAnJyk7XHJcbiAgICAgICAgICAgIG9iaiA9IHRoaXMuZnVsbDNET2JqZWN0VG9Vc2UgPyB0aGlzLmZ1bGwzRE9iamVjdFRvVXNlLmdldE9iamVjdEJ5TmFtZShuYW1lKSA6IG51bGw7XHJcbiAgICAgICAgICAgIGlmICghb2JqKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYE5vIG9iamVjdCB3aXRoIG5hbWUgJHthZGouZGVjb05vZGUuZ2FtZU9iamVjdE5hbWV9IGZvdW5kIWApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFkanVzdGFibGU6IGFueSA9IG9iai5jbG9uZSgpO1xyXG4gICAgICAgIGFkanVzdGFibGUubmFtZSA9IHRoaXMuX2NyZWF0ZVVuaXF1ZU5hbWUoaXRlbSwgb2JqKTtcclxuICAgICAgICBhZGp1c3RhYmxlLnVzZXJEYXRhLnNlbGVjdGlvbiA9IGFkajtcclxuICAgICAgICBhZGp1c3RhYmxlLnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgICAgICBhZGp1c3RhYmxlLnRyYXZlcnNlKGMgPT4ge1xyXG4gICAgICAgICAgICBjLnZpc2libGUgPSAhYy5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnY18nKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpdGVtLmFkZENoaWxkKGFkanVzdGFibGUpO1xyXG4gICAgICAgIC8vIHRoZSBvYmplY3QgYmVpbmcgYWRkZWQgdG8gdGhlIGN1c3RvbUZsb29yR3JvdXAgaXMgYmVpbmcgcmVjcmVhdGVkIHNvIHdlIGxvb3NlIHRoZSByZWZlcmVuY2VcclxuICAgICAgICAvLyB0aGVyZWZvciB3ZSBuZWVkIHRvIHJldHJpZXZlIHRoZSBjcmVhdGVkIG9iamVjdCBhZ2FpblxyXG4gICAgICAgIGFkanVzdGFibGUgPSBpdGVtLmdldE9iamVjdEJ5TmFtZShhZGp1c3RhYmxlLm5hbWUpO1xyXG4gICAgICAgIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLnB1c2goYWRqdXN0YWJsZSk7XHJcbiAgICAgICAgcmV0dXJuIGFkanVzdGFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY3JlYXRlQWRkYWJsZShpdGVtOiBJdGVtLCBhZGQ6IFNlbGVjdGlvbiwgcGFydDI/OiBhbnksIHBhcnQxPzogYW55KTogQ3VzdG9tT2JqZWN0M0Qge1xyXG4gICAgICAgIGNvbnN0IG9iajogYW55ID0gdGhpcy5mdWxsM0RPYmplY3RUb1VzZS5nZXRPYmplY3RCeU5hbWUoYWRkLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lKTtcclxuICAgICAgICBpZiAoIW9iaikge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSB0aGlzLl9nZXRTZWxlY3Rpb25Gcm9tSWQoYWRqLmFydE5vZGVJZERlY28pO1xyXG4gICAgICAgIGNvbnN0IGFkZGFibGU6IGFueSA9IG9iai5jbG9uZSgpO1xyXG4gICAgICAgIGFkZGFibGUubmFtZSA9IHRoaXMuX2NyZWF0ZVVuaXF1ZU5hbWUoaXRlbSwgb2JqKTtcclxuICAgICAgICBhZGRhYmxlLnVzZXJEYXRhLnNlbGVjdGlvbiA9IGFkZDtcclxuICAgICAgICBhZGRhYmxlLnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgICAgICBhZGRhYmxlLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIGlmIChwYXJ0MSAmJiBwYXJ0Mikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxhY2VBZGRhYmxlKGl0ZW0sIGFkZGFibGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYWRkYWJsZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9wbGFjZUFkZGFibGUoaXRlbTogSXRlbSwgYWRkOiBhbnkpOiBDdXN0b21PYmplY3QzRCB7XHJcbiAgICAgICAgaXRlbS5hZGRDaGlsZChhZGQpO1xyXG4gICAgICAgIGNvbnN0IGFkZGFibGU6IEN1c3RvbU9iamVjdDNEID0gaXRlbS5nZXRPYmplY3RCeU5hbWUoYWRkLm5hbWUpIGFzIEN1c3RvbU9iamVjdDNEO1xyXG4gICAgICAgIHRoaXMuX3BsYWNlZEFkZGFibGVzLnB1c2goYWRkYWJsZSk7XHJcbiAgICAgICAgcmV0dXJuIGFkZGFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY3JlYXRlVW5pcXVlTmFtZShpdGVtOiBJdGVtLCBvYmo6IE9iamVjdDNEKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgaXRlcmF0aW9uID0gMDtcclxuICAgICAgICBsZXQgbmFtZSA9IGAke2l0ZW0ubmFtZX1fJHtvYmoubmFtZX1gO1xyXG4gICAgICAgIGxldCBleGlzdGluZ09iaiA9IGl0ZW0uZ2V0T2JqZWN0QnlOYW1lKG5hbWUpO1xyXG4gICAgICAgIHdoaWxlIChleGlzdGluZ09iaikge1xyXG4gICAgICAgICAgICBpdGVyYXRpb24rKztcclxuICAgICAgICAgICAgbmFtZSA9IGAke2l0ZW0ubmFtZX1fJHtvYmoubmFtZX1gICsgKGl0ZXJhdGlvbiAhPT0gMCA/ICgnXycgKyBpdGVyYXRpb24pIDogJycpO1xyXG4gICAgICAgICAgICBleGlzdGluZ09iaiA9IGl0ZW0uZ2V0T2JqZWN0QnlOYW1lKG5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9wbGFjZUFkZGFibGVzKGl0ZW06IEl0ZW0pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9wbGFjZWRBZGp1c3RhYmxlc1tpXS51c2VyRGF0YS5oYXNPd25Qcm9wZXJ0eSgnc2VsZWN0aW9uJykgJiYgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXNbaV0udXNlckRhdGEuc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhZGp1c3RhYmxlU2VsZWN0aW9uOiBTZWxlY3Rpb24gPSB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlc1tpXS51c2VyRGF0YS5zZWxlY3Rpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoYWRqdXN0YWJsZVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmE6IG51bWJlciA9IGFkanVzdGFibGVTZWxlY3Rpb24uYWRkYWJsZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb25BZGRhYmxlOiBhbnk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaWEgPSAwOyBpYSA8IGxlbmE7IGlhKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgU2NlbmUzRFV0aWwuVHJ5U2VsZWN0b3JDb25uZWN0aW9uKHRoaXMuc2NlbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLCB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlc1tpXSwgYWRqdXN0YWJsZVNlbGVjdGlvbi5hZGRhYmxlc1tpYV0sIGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkZCwgcGFydDI/LCBwYXJ0MT8pID0+IHRoaXMuX2NyZWF0ZUFkZGFibGUoaXRlbSwgYWRkLCBwYXJ0MiwgcGFydDEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbkFkZGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjZW5lM0RVdGlsLlRyeVNlbGVjdG9yQ29ubmVjdGlvbih0aGlzLnNjZW5lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sIGNvbkFkZGFibGUsIGFkanVzdGFibGVTZWxlY3Rpb24uYWRkYWJsZXNbaWFdLCBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWRkLCBwYXJ0Mj8sIHBhcnQxPykgPT4gdGhpcy5fY3JlYXRlQWRkYWJsZShpdGVtLCBhZGQsIHBhcnQyLCBwYXJ0MSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbkFkZGFibGUgPSB0aGlzLl9wbGFjZWRBZGRhYmxlc1t0aGlzLl9wbGFjZWRBZGRhYmxlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfbG9hZFZhcmlhdGlvbnMoaXRlbTogSXRlbSwgaW5zdGFuY2VJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnVzZVZhcmlhdGlvbk9uUGFydCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl92YXJpYXRpb25TZXJ2aWNlLmxvYWRQYXJ0KHRoaXMuYXJ0aWNsZUFzc2V0UGF0aCwgdGhpcy5fYWRqdXN0YWJsZXMsIGluc3RhbmNlSWQsIGl0ZW0sIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl92YXJpYXRpb25TZXJ2aWNlLmxvYWRWYXJpYXRpb24odGhpcy5hcnRpY2xlQXNzZXRQYXRoLCB0aGlzLl9hZGp1c3RhYmxlcywgaW5zdGFuY2VJZCwgaXRlbSwgdHJ1ZSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fdmFyaWF0aW9uU2VydmljZS5sb2FkVmFyaWF0aW9uKHRoaXMuYXJ0aWNsZUFzc2V0UGF0aCwgdGhpcy5fYWRkYWJsZXMsIGluc3RhbmNlSWQsIGl0ZW0sIHRydWUpO1xyXG4gICAgICAgIHRoaXMuX3ZhcmlhdGlvblNlcnZpY2UuY2xlYXJDYWNoZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3Nob3dXYXJuaW5nKGRhdGE6IEluZm9EaWFsb2dEYXRhKSB7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nRGF0YTogSW5mb0RpYWxvZ0RhdGEgPSB7XHJcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLl9kaWN0aW9uYXJ5U2VydmljZS5nZXQoZGF0YS50aXRsZSksIG1lc3NhZ2U6IHRoaXMuX2RpY3Rpb25hcnlTZXJ2aWNlLmdldChkYXRhLm1lc3NhZ2UpXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLl9kaWFsb2cub3BlbihJbmZvRGlhbG9nQ29tcG9uZW50LCB7ZGF0YTogZGlhbG9nRGF0YX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3ByZXBhcmVTdGFuZEFsb25lKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2NvbGxpc2lvbk1hbmFnZXIuY2hlY2tDb2xsaXNpb25zID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmNhbWVyYVBvc2l0aW9uRml4ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5sb2NrQ2FtZXJhKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuZGlzYWJsZVJvdGF0ZUhvcml6b250YWwoKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5fY2FtZXJhU2VydmljZS5kaXNhYmxlUm90YXRlVmVydGljYWwoKTtcclxuICAgICAgICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5kaXNhYmxlUGFuKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY29udHJvbHMudGFyZ2V0ID0gbmV3IFZlY3RvcjMoMCwgNTAsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9zY2VuZUV2ZW50U2VydmljZS5yb3RhdGVOb0RyYWcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3ByZWxvYWRNYXRlcmlhbChhbnN3ZXI6IEFuc3dlcik6IHZvaWQge1xyXG4gICAgICAgIGlmIChhbnN3ZXIuZWxlbWVudFR5cGUgPT09IERlY29Ob2RlVHlwZS5WYXJpYXRpb24gJiYgYW5zd2VyLmdhbWVPYmplY3QpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uczogRGVjb05vZGVbXSA9IHRoaXMuX2dldFZhcmlhdGlvbnMoKTtcclxuICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uRGVjb05vZGU6IERlY29Ob2RlID0gdmFyaWF0aW9ucy5maW5kKHYgPT5cclxuICAgICAgICAgICAgICAgICgodi5wYXJlbnRJZCAmJiBhbnN3ZXIucGFyZW50QXJ0aWNsZURlY29JZCAmJiB2LnBhcmVudElkLnRvU3RyaW5nKCkgPT09IGFuc3dlci5wYXJlbnRBcnRpY2xlRGVjb0lkLnRvU3RyaW5nKCkpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgICh2LnBhcmVudElkICYmIGFuc3dlci5wYXJlbnROb2RlSWQgJiYgdi5wYXJlbnRJZC50b1N0cmluZygpID09PSBhbnN3ZXIucGFyZW50Tm9kZUlkLnRvU3RyaW5nKCkpKSk7XHJcbiAgICAgICAgICAgIGlmICghdmFyaWF0aW9uRGVjb05vZGUgfHwgIXRoaXMuY3VycmVudEN1c3RvbUZsb29yR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgYWZmZWN0ZWRTZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9IFtdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZ2VuZXJpY1NlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgYWZmZWN0ZWRTZWxlY3Rpb25zID0gdGhpcy5fYWRqdXN0YWJsZXM7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uOiBTZWxlY3Rpb24gPSBPYmplY3RVdGlscy5HZXRTZWxlY3Rpb25Gcm9tU2VsZWN0ZWRPYmplY3QodGhpcy5fYWN0aXZlQ2hpbGRFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIGFmZmVjdGVkU2VsZWN0aW9ucyA9IFt0aGlzLl9hZGp1c3RhYmxlcy5maW5kKChzZWxlY3Rpb246IFNlbGVjdGlvbikgPT4gc2VsZWN0aW9uLm5vZGVJZCA9PT0gY3VycmVudFNlbGVjdGlvbi5ub2RlSWQpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBhZGp1c3RhYmxlc0Nsb25lOiBTZWxlY3Rpb25bXSA9IGFmZmVjdGVkU2VsZWN0aW9ucyAmJiBhZmZlY3RlZFNlbGVjdGlvbnMubGVuZ3RoID4gMCA/IGFmZmVjdGVkU2VsZWN0aW9ucy5tYXAocyA9PiBPYmplY3QuYXNzaWduKHt9LCBzKSkgOiBbXTtcclxuICAgICAgICAgICAgaWYgKGFkanVzdGFibGVzQ2xvbmUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWRqdXN0YWJsZXNDbG9uZS5mb3JFYWNoKChzZWxlY3Rpb246IFNlbGVjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uID0gc2VsZWN0aW9uLnZhcmlhdGlvbnMuZmluZCh2ID0+IChcclxuICAgICAgICAgICAgICAgICAgICB2IGFzIHVua25vd24gYXMgVmFyaWF0aW9uKS5kZWNvSWQudG9TdHJpbmcoKSA9PT0gdmFyaWF0aW9uRGVjb05vZGUuaWQudG9TdHJpbmcoKSAmJiAodiBhcyB1bmtub3duIGFzIFZhcmlhdGlvbikubm9kZS50b1N0cmluZygpID09PSB2YXJpYXRpb25EZWNvTm9kZS5ub2RlSWQudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24uZ2FtZU9iamVjdE5hbWUgPSBhbnN3ZXIuZ2FtZU9iamVjdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvbkNhY2hlU2VydmljZS5wcmVsb2FkVmFyaWF0aW9uc0FzeW5jKGFkanVzdGFibGVzQ2xvbmVbMF0uc2NoZW1hLCBbYW5zd2VyLmdhbWVPYmplY3RdLCB0aGlzLmFydGljbGVBc3NldFBhdGgpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFyaWF0aW9uU2VydmljZS5sb2FkVmFyaWF0aW9uKHRoaXMuYXJ0aWNsZUFzc2V0UGF0aCwgYWRqdXN0YWJsZXNDbG9uZSwgJycsIHRoaXMuY3VycmVudEN1c3RvbUZsb29yR3JvdXAsIHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIF9wcmVsb2FkTWF0ZXJpYWxCeVNlbGVjdGlvbihhbnN3ZXI6IFNlbGVjdG9yU3RydWN0dXJlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGFuc3dlci5lbGVtZW50VHlwZSA9PT0gRGVjb05vZGVUeXBlLlZhcmlhdGlvbiAmJiBhbnN3ZXIuZ2FtZU9iamVjdCkge1xyXG4gICAgICAgICAgICBjb25zdCB2YXJpYXRpb25EZWNvTm9kZTogRGVjb05vZGUgPSBuZXcgRGVjb05vZGUoKTtcclxuICAgICAgICAgICAgdmFyaWF0aW9uRGVjb05vZGUuZ2FtZU9iamVjdE5hbWUgPSBhbnN3ZXIuZ2FtZU9iamVjdDtcclxuICAgICAgICAgICAgY29uc3QgYWRqdXN0YWJsZXNDbG9uZTogU2VsZWN0aW9uW10gPSB0aGlzLl9hZGp1c3RhYmxlcy5tYXAocyA9PiBPYmplY3QuYXNzaWduKHt9LCBzKSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fZ2VuZXJpY1NlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEN1c3RvbUZsb29yR3JvdXApIHtcclxuICAgICAgICAgICAgICAgICAgICBhZGp1c3RhYmxlc0Nsb25lLmZvckVhY2goKHNlbGVjdGlvbjogU2VsZWN0aW9uKSA9PiBzZWxlY3Rpb24udmFyaWF0aW9ucyA9IFt2YXJpYXRpb25EZWNvTm9kZV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvbkNhY2hlU2VydmljZS5wcmVsb2FkVmFyaWF0aW9uc0FzeW5jKGFkanVzdGFibGVzQ2xvbmVbMF0uc2NoZW1hLCBbdmFyaWF0aW9uRGVjb05vZGUuZ2FtZU9iamVjdE5hbWVdLCB0aGlzLmFydGljbGVBc3NldFBhdGgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvblNlcnZpY2UubG9hZFZhcmlhdGlvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFydGljbGVBc3NldFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0YWJsZXNDbG9uZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDdXN0b21GbG9vckdyb3VwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkudGhlbigoKSA9PiB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkanVzdGFibGVzLmZvckVhY2goKHNlbGVjdGlvbjogU2VsZWN0aW9uKSA9PiBzZWxlY3Rpb24udmFyaWF0aW9ucyA9IFt2YXJpYXRpb25EZWNvTm9kZV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdGlvbjogU2VsZWN0aW9uID0gT2JqZWN0VXRpbHMuR2V0U2VsZWN0aW9uRnJvbVNlbGVjdGVkT2JqZWN0KHRoaXMuX2FjdGl2ZUNoaWxkRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRDdXN0b21GbG9vckdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkZyb21BZGp1c3RhYmxlczogU2VsZWN0aW9uID0gYWRqdXN0YWJsZXNDbG9uZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoKHNlbGVjdGlvbjogU2VsZWN0aW9uKSA9PiBzZWxlY3Rpb24ubm9kZUlkID09PSBjdXJyZW50U2VsZWN0aW9uLm5vZGVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Gcm9tQWRqdXN0YWJsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkZyb21BZGp1c3RhYmxlcy52YXJpYXRpb25zID0gW3ZhcmlhdGlvbkRlY29Ob2RlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvbkNhY2hlU2VydmljZS5wcmVsb2FkVmFyaWF0aW9uc0FzeW5jKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdGFibGVzQ2xvbmVbMF0uc2NoZW1hLCBbdmFyaWF0aW9uRGVjb05vZGUuZ2FtZU9iamVjdE5hbWVdLCB0aGlzLmFydGljbGVBc3NldFBhdGgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YXJpYXRpb25TZXJ2aWNlLmxvYWRWYXJpYXRpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFydGljbGVBc3NldFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RhYmxlc0Nsb25lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDdXN0b21GbG9vckdyb3VwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnRoZW4oKCkgPT4gdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Gcm9tQWRqdXN0YWJsZXM6IFNlbGVjdGlvbiA9IHRoaXMuX2FkanVzdGFibGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmluZCgoc2VsZWN0aW9uOiBTZWxlY3Rpb24pID0+IHNlbGVjdGlvbi5ub2RlSWQgPT09IGN1cnJlbnRTZWxlY3Rpb24ubm9kZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uRnJvbUFkanVzdGFibGVzLnZhcmlhdGlvbnMgPSBbdmFyaWF0aW9uRGVjb05vZGVdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG59XHJcbiJdfQ==
|