@sapui5/sap.fe.core 1.141.2 → 1.142.1
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/package.json +1 -1
- package/src/sap/fe/core/.library +4 -1
- package/src/sap/fe/core/ActionRuntime.js +48 -23
- package/src/sap/fe/core/ActionRuntime.ts +61 -35
- package/src/sap/fe/core/AppComponent.js +76 -6
- package/src/sap/fe/core/AppComponent.ts +94 -8
- package/src/sap/fe/core/AppStateHandler.js +9 -8
- package/src/sap/fe/core/AppStateHandler.ts +13 -9
- package/src/sap/fe/core/BaseController.js +8 -5
- package/src/sap/fe/core/BaseController.ts +6 -1
- package/src/sap/fe/core/CommonUtils.js +4 -123
- package/src/sap/fe/core/CommonUtils.ts +3 -172
- package/src/sap/fe/core/ExtensionAPI.js +3 -10
- package/src/sap/fe/core/ExtensionAPI.ts +2 -14
- package/src/sap/fe/core/PageController.js +64 -43
- package/src/sap/fe/core/PageController.ts +62 -47
- package/src/sap/fe/core/TemplateComponent.js +20 -1
- package/src/sap/fe/core/TemplateComponent.ts +24 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +4 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -0
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -39
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +91 -54
- package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -3
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +8 -9
- package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
- package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.js +9 -5
- package/src/sap/fe/core/controllerextensions/Routing.ts +7 -7
- package/src/sap/fe/core/controllerextensions/Share.js +5 -5
- package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
- package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +33 -11
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +45 -14
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +7 -7
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +6 -5
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +10 -6
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +6 -5
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +11 -9
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +22 -9
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +31 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +34 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
- package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
- package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
- package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
- package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +88 -35
- package/src/sap/fe/core/converters/controls/Common/Action.js +57 -20
- package/src/sap/fe/core/converters/controls/Common/Action.ts +71 -21
- package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
- package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +89 -57
- package/src/sap/fe/core/converters/controls/Common/Table.ts +110 -56
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +172 -78
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
- package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
- package/src/sap/fe/core/converters/helpers/ID.js +3 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
- package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
- package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
- package/src/sap/fe/core/fpm/Component.js +8 -1
- package/src/sap/fe/core/fpm/Component.ts +8 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +91 -32
- package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
- package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
- package/src/sap/fe/core/helpers/ModelHelper.js +48 -9
- package/src/sap/fe/core/helpers/ModelHelper.ts +55 -10
- package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
- package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
- package/src/sap/fe/core/helpers/WebSocket.js +6 -7
- package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
- package/src/sap/fe/core/library.js +30 -3
- package/src/sap/fe/core/library.ts +28 -1
- package/src/sap/fe/core/messagebundle.properties +8 -1
- package/src/sap/fe/core/messagebundle_ar.properties +7 -0
- package/src/sap/fe/core/messagebundle_bg.properties +10 -3
- package/src/sap/fe/core/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/messagebundle_cy.properties +8 -1
- package/src/sap/fe/core/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/messagebundle_en.properties +8 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +5 -0
- package/src/sap/fe/core/messagebundle_es.properties +8 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/messagebundle_fr.properties +16 -9
- package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/messagebundle_hi.properties +8 -1
- package/src/sap/fe/core/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/messagebundle_ja.properties +8 -1
- package/src/sap/fe/core/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/messagebundle_no.properties +7 -0
- package/src/sap/fe/core/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
- package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
- package/src/sap/fe/core/rootView/Fcl.controller.ts +28 -6
- package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
- package/src/sap/fe/core/services/RoutingServiceFactory.js +16 -7
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +23 -10
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +62 -6
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +74 -11
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
- package/src/sap/fe/core/templating/UIFormatters.js +17 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
- package/ui5.yaml +2 -0
|
@@ -33,6 +33,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
|
|
|
33
33
|
var getMatchingManifestAction = Action.getMatchingManifestAction;
|
|
34
34
|
var getAnnotationMenuActionItems = Action.getAnnotationMenuActionItems;
|
|
35
35
|
var getActionsFromManifest = Action.getActionsFromManifest;
|
|
36
|
+
var addSeparators = Action.addSeparators;
|
|
36
37
|
var not = BindingToolkit.not;
|
|
37
38
|
var ifElse = BindingToolkit.ifElse;
|
|
38
39
|
var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
|
|
@@ -162,7 +163,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
|
|
|
162
163
|
* @returns The current custom section
|
|
163
164
|
*/
|
|
164
165
|
function getSectionFromManifest(customSectionDefinition, sectionKey, converterContext) {
|
|
165
|
-
const customSectionID = customSectionDefinition.id
|
|
166
|
+
const customSectionID = customSectionDefinition.id ? getCustomSectionID(customSectionDefinition.id) : getCustomSectionID(sectionKey);
|
|
166
167
|
let position = customSectionDefinition.position;
|
|
167
168
|
if (!position) {
|
|
168
169
|
position = {
|
|
@@ -220,7 +221,9 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
|
|
|
220
221
|
position: OverrideType.overwrite,
|
|
221
222
|
menu: OverrideType.overwrite,
|
|
222
223
|
priority: OverrideType.overwrite,
|
|
223
|
-
group: OverrideType.overwrite
|
|
224
|
+
group: OverrideType.overwrite,
|
|
225
|
+
overflowGroup: OverrideType.overwrite,
|
|
226
|
+
disableStrictHandling: OverrideType.overwrite
|
|
224
227
|
};
|
|
225
228
|
// 2. Get actions from manifest
|
|
226
229
|
const manifestActions = getActionsFromManifest(manifestWrapper.getHeaderActions(), converterContext, annotationHeaderActions, undefined, undefined, getHiddenHeaderActions(converterContext));
|
|
@@ -240,6 +243,9 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
|
|
|
240
243
|
headerActions = getVisibilityEnablementMenuActions(headerActions);
|
|
241
244
|
// 10. Apply primary action overflow protection
|
|
242
245
|
headerActions = ActionUtilities.ensurePrimaryActionNeverOverflows(headerActions);
|
|
246
|
+
// 10. Add toolbar separators in case of grouped actions
|
|
247
|
+
const overflowGroupsConfig = manifestWrapper.getHeaderOverflowGroups();
|
|
248
|
+
headerActions = addSeparators(headerActions, overflowGroupsConfig);
|
|
243
249
|
return {
|
|
244
250
|
actions: headerActions,
|
|
245
251
|
commandActions: manifestActions.commandActions
|
|
@@ -247,7 +253,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
|
|
|
247
253
|
};
|
|
248
254
|
|
|
249
255
|
/**
|
|
250
|
-
* Retrieves the ObjectPage footer actions
|
|
256
|
+
* Retrieves the ObjectPage footer actions which includes the default actions and the custom actions defined in the manifest.json file.
|
|
251
257
|
* @param converterContext The converter context
|
|
252
258
|
* @param capabilities The predefined environment capabilities
|
|
253
259
|
* @returns An array containing all the actions for this ObjectPage footer
|
|
@@ -265,13 +271,18 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
|
|
|
265
271
|
command: OverrideType.overwrite,
|
|
266
272
|
position: OverrideType.overwrite,
|
|
267
273
|
priority: OverrideType.overwrite,
|
|
268
|
-
group: OverrideType.overwrite
|
|
274
|
+
group: OverrideType.overwrite,
|
|
275
|
+
overflowGroup: OverrideType.overwrite,
|
|
276
|
+
disableStrictHandling: OverrideType.overwrite
|
|
269
277
|
};
|
|
270
|
-
|
|
278
|
+
let footerActions = insertCustomElements(aAnnotationFooterActions, manifestActions.actions, actionOverwriteConfig);
|
|
271
279
|
// Apply primary action overflow protection
|
|
272
|
-
|
|
280
|
+
footerActions = ActionUtilities.ensurePrimaryActionNeverOverflows(footerActions);
|
|
281
|
+
// Add toolbar separators in case of grouped actions
|
|
282
|
+
const overflowGroupsConfig = manifestWrapper.getFooterOverflowGroups();
|
|
283
|
+
footerActions = addSeparators(footerActions, overflowGroupsConfig);
|
|
273
284
|
return {
|
|
274
|
-
actions:
|
|
285
|
+
actions: footerActions,
|
|
275
286
|
commandActions: manifestActions.commandActions
|
|
276
287
|
};
|
|
277
288
|
};
|
|
@@ -538,4 +549,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
|
|
|
538
549
|
_exports.convertPage = convertPage;
|
|
539
550
|
return _exports;
|
|
540
551
|
}, false);
|
|
541
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRTZWN0aW9uS2V5IiwiZmFjZXREZWZpbml0aW9uIiwiZmFsbGJhY2siLCJJRCIsInRvU3RyaW5nIiwiTGFiZWwiLCJjcmVhdGVFZGl0YWJsZUhlYWRlclNlY3Rpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiYWxsSGVhZGVyRmFjZXRzIiwiZWRpdGFibGVIZWFkZXJTZWN0aW9uSUQiLCJnZXRFZGl0YWJsZUhlYWRlclNlY3Rpb25JRCIsImhlYWRlckZhY2V0cyIsImdldEVudGl0eVR5cGUiLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGVhZGVyRmFjZXRzIiwiaGVhZGVyZmFjZXRTdWJTZWN0aW9ucyIsImNyZWF0ZVN1YlNlY3Rpb25zIiwiY3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucyIsImxlbmd0aCIsImkiLCJmb3JFYWNoIiwiaXRlbSIsInZpc2libGUiLCJwdXNoIiwia2V5Iiwic2xpY2UiLCJsYXN0SW5kZXhPZiIsImN1c3RvbUl0ZW0iLCJoZWFkZXJTZWN0aW9uIiwiaWQiLCJ0aXRsZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiSXNFZGl0YWJsZSIsInN1YlNlY3Rpb25zIiwiX2V4cG9ydHMiLCJnZXRTZWN0aW9uc0Zyb21Bbm5vdGF0aW9uIiwiZW50aXR5VHlwZSIsIm9iamVjdFBhZ2VTZWN0aW9ucyIsIkZhY2V0cyIsIm1hcCIsImdldFNlY3Rpb25Gcm9tQW5ub3RhdGlvbiIsImdldFVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzIiwibWFuaWZlc3RXcmFwcGVyIiwic2VjdGlvbktleSIsInNlY3Rpb25zSW5NYW5pZmVzdCIsImdldFNlY3Rpb25zIiwic2VjdGlvblNldHRpbmdzIiwidXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMiLCJmYWNldCIsInNlY3Rpb25JRCIsImdldFNlY3Rpb25JRCIsImhpZGRlbkV4cHJlc3Npb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJIaWRkZW4iLCJwYXRoIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsImdldE1hbmlmZXN0V3JhcHBlciIsInNlY3Rpb24iLCJ1bmRlZmluZWQiLCJzaG93VGl0bGUiLCJub3QiLCJlcXVhbCIsImdldFNlY3Rpb25zRnJvbU1hbmlmZXN0IiwibWFuaWZlc3RTZWN0aW9ucyIsInNlY3Rpb25zIiwiT2JqZWN0Iiwia2V5cyIsIm1hbmlmZXN0U2VjdGlvbktleSIsImdldFNlY3Rpb25Gcm9tTWFuaWZlc3QiLCJjdXN0b21TZWN0aW9uRGVmaW5pdGlvbiIsImN1c3RvbVNlY3Rpb25JRCIsImdldEN1c3RvbVNlY3Rpb25JRCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJtYW5pZmVzdFN1YlNlY3Rpb25zIiwiYXBwbHlTdGF0ZSIsInJldHJpZXZlU3RhdGUiLCJjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyIsImN1c3RvbVNlY3Rpb24iLCJvblNlY3Rpb25Mb2FkZWQiLCJnZXRIZWFkZXJBY3Rpb25zIiwiY2FwYWJpbGl0aWVzIiwiYW5ub3RhdGlvbkhlYWRlckFjdGlvbnMiLCJnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyIsImFjdGlvbk92ZXJ3cml0ZUNvbmZpZyIsImlzTmF2aWdhYmxlIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiZW5hYmxlZCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImNvbW1hbmQiLCJtZW51IiwicHJpb3JpdHkiLCJncm91cCIsIm1hbmlmZXN0QWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRIaWRkZW5IZWFkZXJBY3Rpb25zIiwiYW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyIsImdldEFubm90YXRpb25NZW51QWN0aW9uSXRlbXMiLCJtYXRjaGluZ01hbmlmZXN0QWN0aW9ucyIsImdldE1hdGNoaW5nTWFuaWZlc3RBY3Rpb24iLCJhY3Rpb25zIiwib3ZlcndyaXR0ZW5NZW51QWN0aW9uSXRlbXMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImhlYWRlckFjdGlvbnMiLCJwcmVwYXJlTWVudUFjdGlvbnMiLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRNZW51QWN0aW9ucyIsIkFjdGlvblV0aWxpdGllcyIsImVuc3VyZVByaW1hcnlBY3Rpb25OZXZlck92ZXJmbG93cyIsImNvbW1hbmRBY3Rpb25zIiwiZ2V0Rm9vdGVyQWN0aW9ucyIsImFBbm5vdGF0aW9uRm9vdGVyQWN0aW9ucyIsImdldEZvb3RlckRlZmF1bHRBY3Rpb25zIiwiZ2V0Vmlld0xldmVsIiwiZm9vdGVyQWN0aW9ucyIsInByb3RlY3RlZEZvb3RlckFjdGlvbnMiLCJfZ2V0U3ViU2VjdGlvblZpc3VhbGl6YXRpb24iLCJzdWJTZWN0aW9uIiwicHJlc2VudGF0aW9uIiwidmlzdWFsaXphdGlvbnMiLCJfaXNGYWNldEhhc05vblJlc3BvbnNpdmVUYWJsZVZpc2libGUiLCJkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24iLCJzdWJTZWN0aW9uVmlzdWFsaXphdGlvbiIsInR5cGUiLCJjb250cm9sIiwiX3NldE5vblJlc3BvbnNpdmVUYWJsZVZpc3VhbGl6YXRpb25JbmZvcm1hdGlvbiIsInNlY3Rpb25MYXlvdXQiLCJ0YWJsZUNvbnRyb2xDb25maWd1cmF0aW9uIiwiZGF0YVZpc3VhbGl6YXRpb25PcHRpb25zIiwicm93Q291bnRNb2RlIiwidXNlQ29uZGVuc2VkVGFibGVMYXlvdXQiLCJfc2V0Tm9uUmVzcG9uc2l2ZVRhYmxlV2l0aE1peEZhY2V0c0luZm9ybWF0aW9uIiwiZmlyc3RTZWN0aW9uIiwiY29udGVudCIsIlN1YlNlY3Rpb25UeXBlIiwiRGF0YVZpc3VhbGl6YXRpb24iLCJ0YWJsZUNvbnRyb2wiLCJfc2V0Tm9uUmVzcG9uc2l2ZVRhYmxlU3ViU2VjdGlvbkNvbnRyb2xDb25maWd1cmF0aW9uIiwiX3JlbW92ZUNvbmRlbnNlZEZyb21TdWJTZWN0aW9ucyIsInNpbmdsZVZpc3VhbGl6YXRpb24iLCJWaXN1YWxpemF0aW9uVHlwZSIsIlRhYmxlIiwic2luZ2xlQ29udGVudCIsIm1lcmdlIiwic2lkZUNvbnRlbnQiLCJvYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQiLCJnZXRTZWN0aW9uTGF5b3V0IiwiZmlyc3RGb3JtIiwiZmluZCIsImVsZW1lbnQiLCJGb3JtIiwiaGFzSGVhZGVyQ29udGVudCIsImdldEhlYWRlckZhY2V0cyIsImdldFNob3dIZWFkZXJDb250ZW50RXhwcmVzc2lvbiIsImlmRWxzZSIsImNvbnN0YW50IiwiaXNIZWFkZXJFZGl0YWJsZSIsImdldFNob3dIZWFkZXJDb250ZW50IiwiZ2V0RWFzeUZpbGxWaXNpYmxlIiwiZW50aXR5U2V0IiwiZ2V0RW50aXR5U2V0IiwiaXNVcGRhdGVIaWRkZW4iLCJNb2RlbEhlbHBlciIsInJvb3RFbnRpdHlTZXRQYXRoIiwiZ2V0Um9vdEVudGl0eVNldFBhdGgiLCJnZXRDb250ZXh0UGF0aCIsInJvb3RDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImlzUm9vdFVwZGF0ZUhpZGRlbiIsImlzRHJhZnRFbmFibGVkIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiaXNTdGlja3kiLCJzdGFydGluZ0VudGl0eVNldCIsInZpZXdMZXZlbCIsInVwZGF0YWJsZVByb3BlcnR5UGF0aCIsIkNhcGFiaWxpdGllcyIsIlVwZGF0ZVJlc3RyaWN0aW9ucyIsIlVwZGF0YWJsZSIsImlzRWRpdEVuYWJsZWQiLCJnZXRFZGl0QnV0dG9uRW5hYmxlZEV4cHJlc3Npb24iLCJhbmQiLCJnZXRFeHBhbmRlZEltYWdlVmlzaWJsZSIsImNvbnZlcnRQYWdlIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0IiwiSGVhZGVySW5mbyIsInRlbXBsYXRlIiwiVGVtcGxhdGVUeXBlIiwiT2JqZWN0UGFnZSIsImhlYWRlciIsImdldFNob3dPYmplY3RQYWdlSGVhZGVyIiwiZmFjZXRzIiwiZWFzeUZpbGxWaXNpYmxlIiwic2hvd0NvbnRlbnQiLCJoYXNDb250ZW50IiwiYXZhdGFyIiwiZ2V0QXZhdGFyIiwiZXhwYW5kZWRJbWFnZVZpc2libGUiLCJoZWFkZXJDb21tYW5kQWN0aW9ucyIsImZvb3RlckNvbW1hbmRBY3Rpb25zIiwic2hvd0FuY2hvckJhciIsImdldFNob3dBbmNob3JCYXIiLCJ1c2VJY29uVGFiQmFyIiwidHJhbnNwb3J0U2VsZWN0aW9uIiwiZ2V0VHJhbnNwb3J0U2VsZWN0aW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPYmplY3RQYWdlQ29udmVydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBGYWNldFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBhbmQsIGNvbXBpbGVFeHByZXNzaW9uLCBjb25zdGFudCwgZXF1YWwsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgaWZFbHNlLCBub3QgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFjdGlvbiwgQ29tYmluZWRBY3Rpb24sIEN1c3RvbUFjdGlvbiwgT3ZlcnJpZGVUeXBlQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHtcblx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdCxcblx0Z2V0QW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyxcblx0Z2V0TWF0Y2hpbmdNYW5pZmVzdEFjdGlvbixcblx0Z2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRNZW51QWN0aW9ucyxcblx0cHJlcGFyZU1lbnVBY3Rpb25zLFxuXHRyZW1vdmVEdXBsaWNhdGVBY3Rpb25zXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQge1xuXHRnZXRFZGl0QnV0dG9uRW5hYmxlZEV4cHJlc3Npb24sXG5cdGdldEZvb3RlckRlZmF1bHRBY3Rpb25zLFxuXHRnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyxcblx0Z2V0SGlkZGVuSGVhZGVyQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9vYmplY3RQYWdlL0hlYWRlckFuZEZvb3RlckFjdGlvblwiO1xuaW1wb3J0IEFjdGlvblV0aWxpdGllcyBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9BY3Rpb25VdGlsaXRpZXNcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgVUksIHNpbmdsZXRvblBhdGhWaXNpdG9yIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudENhcGFiaWxpdGllcyB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9FbnZpcm9ubWVudFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0U2VjdGlvbiwgTWFuaWZlc3RTdWJTZWN0aW9uLCBUcmFuc3BvcnRTZWxlY3Rpb25EZWZpbml0aW9uIH0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IFRlbXBsYXRlVHlwZSwgVmlzdWFsaXphdGlvblR5cGUgfSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCIuLi9NYW5pZmVzdFdyYXBwZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0LCBQYWdlRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBBdmF0YXIgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9BdmF0YXJcIjtcbmltcG9ydCB7IGdldEF2YXRhciB9IGZyb20gXCIuLi9jb250cm9scy9PYmplY3RQYWdlL0F2YXRhclwiO1xuaW1wb3J0IHR5cGUgeyBPYmplY3RQYWdlSGVhZGVyRmFjZXQgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHsgZ2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zLCBnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHR5cGUge1xuXHRDdXN0b21PYmplY3RQYWdlU2VjdGlvbixcblx0RGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLFxuXHRGb3JtU3ViU2VjdGlvbixcblx0TWl4ZWRTdWJTZWN0aW9uLFxuXHRPYmplY3RQYWdlU2VjdGlvbixcblx0T2JqZWN0UGFnZVN1YlNlY3Rpb25cbn0gZnJvbSBcIi4uL2NvbnRyb2xzL09iamVjdFBhZ2UvU3ViU2VjdGlvblwiO1xuaW1wb3J0IHtcblx0U3ViU2VjdGlvblR5cGUsXG5cdGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMsXG5cdGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zLFxuXHRjcmVhdGVTdWJTZWN0aW9uc1xufSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9TdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZVJlY29yZCwgUG9zaXRpb24gfSBmcm9tIFwiLi4vaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IE92ZXJyaWRlVHlwZSwgUGxhY2VtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCIuLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgZ2V0Q3VzdG9tU2VjdGlvbklELCBnZXRFZGl0YWJsZUhlYWRlclNlY3Rpb25JRCwgZ2V0U2VjdGlvbklEIH0gZnJvbSBcIi4uL2hlbHBlcnMvSURcIjtcblxuZXhwb3J0IHR5cGUgT2JqZWN0UGFnZURlZmluaXRpb24gPSBQYWdlRGVmaW5pdGlvbiAmIHtcblx0aGVhZGVyOiB7XG5cdFx0dmlzaWJsZTogYm9vbGVhbjtcblx0XHRzZWN0aW9uPzogT2JqZWN0UGFnZVNlY3Rpb247XG5cdFx0ZmFjZXRzOiBPYmplY3RQYWdlSGVhZGVyRmFjZXRbXTtcblx0XHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdFx0ZWFzeUZpbGxWaXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHRzaG93Q29udGVudDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0aGFzQ29udGVudDogYm9vbGVhbjtcblx0XHRhdmF0YXI/OiBBdmF0YXI7XG5cdFx0dGl0bGU6IHtcblx0XHRcdGV4cGFuZGVkSW1hZ2VWaXNpYmxlOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHR9O1xuXHR9O1xuXHRzZWN0aW9uczogT2JqZWN0UGFnZVNlY3Rpb25bXTtcblx0Zm9vdGVyQWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRoZWFkZXJDb21tYW5kQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcblx0Zm9vdGVyQ29tbWFuZEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG5cdHNob3dBbmNob3JCYXI6IGJvb2xlYW47XG5cdHVzZUljb25UYWJCYXI6IGJvb2xlYW47XG5cdHRyYW5zcG9ydFNlbGVjdGlvbj86IFRyYW5zcG9ydFNlbGVjdGlvbkRlZmluaXRpb247XG59O1xuXG5jb25zdCBnZXRTZWN0aW9uS2V5ID0gKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBmYWNldERlZmluaXRpb24uSUQ/LnRvU3RyaW5nKCkgfHwgZmFjZXREZWZpbml0aW9uLkxhYmVsPy50b1N0cmluZygpIHx8IGZhbGxiYWNrO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2VjdGlvbiB0aGF0IHJlcHJlc2VudHMgdGhlIGVkaXRhYmxlIGhlYWRlciBwYXJ0OyBpdCBpcyBvbmx5IHZpc2libGUgaW4gZWRpdCBtb2RlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gYWxsSGVhZGVyRmFjZXRzIFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIHNlY3Rpb24gcmVwcmVzZW50aW5nIHRoZSBlZGl0YWJsZSBoZWFkZXIgcGFydHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVkaXRhYmxlSGVhZGVyU2VjdGlvbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhbGxIZWFkZXJGYWNldHM6IE9iamVjdFBhZ2VIZWFkZXJGYWNldFtdXG4pOiBPYmplY3RQYWdlU2VjdGlvbiB7XG5cdGNvbnN0IGVkaXRhYmxlSGVhZGVyU2VjdGlvbklEID0gZ2V0RWRpdGFibGVIZWFkZXJTZWN0aW9uSUQoKTtcblx0Y29uc3QgaGVhZGVyRmFjZXRzID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJGYWNldHM7XG5cdGNvbnN0IGhlYWRlcmZhY2V0U3ViU2VjdGlvbnMgPSBoZWFkZXJGYWNldHMgPyBjcmVhdGVTdWJTZWN0aW9ucyhoZWFkZXJGYWNldHMsIGNvbnZlcnRlckNvbnRleHQsIHRydWUpIDogW107XG5cdGNvbnN0IGN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMgPSBjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgYWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10gPSBbXTtcblx0aWYgKGN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdC8vIG1lcmdlIGFubm90YXRpb24gYmFzZWQgaGVhZGVyIGZhY2V0cyBhbmQgY3VzdG9tIGhlYWRlciBmYWNldHMgaW4gdGhlIHJpZ2h0IG9yZGVyXG5cdFx0bGV0IGkgPSAwO1xuXHRcdGFsbEhlYWRlckZhY2V0cy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0XHQvLyBoaWRkZW4gaGVhZGVyIGZhY2V0cyBhcmUgbm90IGluY2x1ZGVkIGluIGFsbEhlYWRlckZhY2V0cyBhcnJheSA9PiBhZGQgdGhlbSBhbnl3YXlcblx0XHRcdHdoaWxlIChoZWFkZXJmYWNldFN1YlNlY3Rpb25zLmxlbmd0aCA+IGkgJiYgaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS52aXNpYmxlID09PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0YWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnMucHVzaChoZWFkZXJmYWNldFN1YlNlY3Rpb25zW2ldKTtcblx0XHRcdFx0aSsrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRoZWFkZXJmYWNldFN1YlNlY3Rpb25zLmxlbmd0aCA+IGkgJiZcblx0XHRcdFx0KGl0ZW0ua2V5ID09PSBoZWFkZXJmYWNldFN1YlNlY3Rpb25zW2ldLmtleSB8fFxuXHRcdFx0XHRcdC8vIGZvciBoZWFkZXIgZmFjZXRzIHdpdGggbm8gaWQgdGhlIGtleXMgb2YgaGVhZGVyIGZhY2V0IGFuZCBzdWJzZWN0aW9uIGFyZSBkaWZmZXJlbnQgPT4gY2hlY2sgb25seSB0aGUgbGFzdCBwYXJ0XG5cdFx0XHRcdFx0aXRlbS5rZXkuc2xpY2UoaXRlbS5rZXkubGFzdEluZGV4T2YoXCI6OlwiKSArIDIpID09PVxuXHRcdFx0XHRcdFx0aGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS5rZXkuc2xpY2UoaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS5rZXkubGFzdEluZGV4T2YoXCI6OlwiKSArIDIpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zLnB1c2goaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXSk7XG5cdFx0XHRcdGkrKztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoY3VzdG9tSXRlbSkge1xuXHRcdFx0XHRcdGlmIChpdGVtLmtleSA9PT0gY3VzdG9tSXRlbS5rZXkpIHtcblx0XHRcdFx0XHRcdGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zLnB1c2goY3VzdG9tSXRlbSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucyA9IGhlYWRlcmZhY2V0U3ViU2VjdGlvbnM7XG5cdH1cblx0Y29uc3QgaGVhZGVyU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IGVkaXRhYmxlSGVhZGVyU2VjdGlvbklELFxuXHRcdGtleTogXCJFZGl0YWJsZUhlYWRlckNvbnRlbnRcIixcblx0XHR0aXRsZTogXCJ7c2FwLmZlLmkxOG4+VF9DT01NT05fT0JKRUNUX1BBR0VfSEVBREVSX1NFQ1RJT059XCIsXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oVUkuSXNFZGl0YWJsZSksXG5cdFx0c3ViU2VjdGlvbnM6IGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zXG5cdH07XG5cdHJldHVybiBoZWFkZXJTZWN0aW9uO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBkZWZpbml0aW9uIGZvciBhIHNlY3Rpb24gYmFzZWQgb24gdGhlIEZhY2V0IGFubm90YXRpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIEFsbCBzZWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRTZWN0aW9uc0Zyb21Bbm5vdGF0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IE9iamVjdFBhZ2VTZWN0aW9uW10ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IG9iamVjdFBhZ2VTZWN0aW9uczogT2JqZWN0UGFnZVNlY3Rpb25bXSA9XG5cdFx0ZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkZhY2V0cz8ubWFwKChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMpID0+XG5cdFx0XHRnZXRTZWN0aW9uRnJvbUFubm90YXRpb24oZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdCkgfHwgW107XG5cdHJldHVybiBvYmplY3RQYWdlU2VjdGlvbnM7XG59XG5cbi8qKlxuICogQ2hlY2sgbWFuaWZlc3QgZm9yIHNldHRpbmcgJ3VzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzJy5cbiAqIElmIHRoaXMgc2V0dGluZyBpcyB0cnVlLCB0aGVuIHRoZSBsYWJlbCBvZiB0aGUgc2luZ2xlIHRleHQtYXJlYSBmaWVsZCBpbiBhIGZvcm0gY29udGFpbmVyIHdpbGwgYmUgaGlkZGVuLlxuICogQHBhcmFtIG1hbmlmZXN0V3JhcHBlclxuICogQHBhcmFtIHNlY3Rpb25LZXlcbiAqIEByZXR1cm5zIElmIHRoZSBmb3JtIGVsZW1lbnQncyBsYWJlbCBuZWVkcyB0byBiZSBoaWRkZW4uXG4gKi9cbmZ1bmN0aW9uIGdldFVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzKG1hbmlmZXN0V3JhcHBlcjogTWFuaWZlc3RXcmFwcGVyLCBzZWN0aW9uS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcblx0Y29uc3Qgc2VjdGlvbnNJbk1hbmlmZXN0ID0gbWFuaWZlc3RXcmFwcGVyLmdldFNlY3Rpb25zKCk7XG5cdGNvbnN0IHNlY3Rpb25TZXR0aW5ncyA9IHNlY3Rpb25zSW5NYW5pZmVzdD8uW3NlY3Rpb25LZXldO1xuXHRyZXR1cm4gc2VjdGlvblNldHRpbmdzPy51c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyA/PyBmYWxzZTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gYW5ub3RhdGlvbiBiYXNlZCBzZWN0aW9uLlxuICogQHBhcmFtIGZhY2V0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIGN1cnJlbnQgc2VjdGlvblxuICovXG5mdW5jdGlvbiBnZXRTZWN0aW9uRnJvbUFubm90YXRpb24oZmFjZXQ6IEZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IE9iamVjdFBhZ2VTZWN0aW9uIHtcblx0Y29uc3Qgc2VjdGlvbklEID0gZ2V0U2VjdGlvbklEKGZhY2V0KTtcblx0Y29uc3Qgc2VjdGlvbktleSA9IGdldFNlY3Rpb25LZXkoZmFjZXQsIHNlY3Rpb25JRCk7XG5cdC8vIFNldCBhYnNvbHV0ZSBiaW5kaW5nIHBhdGggZm9yIFNpbmdsZXRvbiByZWZlcmVuY2VzLCBvdGhlcndpc2UgdGhlIGNvbmZpZ3VyZWQgYW5ub3RhdGlvbiBwYXRoIGl0c2VsZi5cblx0Y29uc3QgaGlkZGVuRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiwgW10sIGZhbHNlLCAocGF0aDogc3RyaW5nKSA9PlxuXHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgW10pXG5cdCk7XG5cdGNvbnN0IHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzID0gZ2V0VXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMoY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKSwgc2VjdGlvbktleSk7XG5cdGNvbnN0IHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uID0ge1xuXHRcdGlkOiBzZWN0aW9uSUQsXG5cdFx0a2V5OiBzZWN0aW9uS2V5LFxuXHRcdHRpdGxlOiBmYWNldC5MYWJlbCA/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmYWNldC5MYWJlbCkpIDogdW5kZWZpbmVkLFxuXHRcdHNob3dUaXRsZTogISFmYWNldC5MYWJlbCxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoaGlkZGVuRXhwcmVzc2lvbiwgdHJ1ZSkpKSxcblx0XHRzdWJTZWN0aW9uczogY3JlYXRlU3ViU2VjdGlvbnMoW2ZhY2V0XSwgY29udmVydGVyQ29udGV4dCwgdW5kZWZpbmVkLCB1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyksXG5cdFx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM6IHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzXG5cdH07XG5cdHJldHVybiBzZWN0aW9uO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgc2VjdGlvbiBkZWZpbml0aW9ucyBiYXNlZCBvbiB0aGUgbWFuaWZlc3QgZGVmaW5pdGlvbnMuXG4gKiBAcGFyYW0gbWFuaWZlc3RTZWN0aW9ucyBUaGUgc2VjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgc2VjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdG1hbmlmZXN0U2VjdGlvbnM6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdFNlY3Rpb24+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uPiB7XG5cdGNvbnN0IHNlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU2VjdGlvbj4gPSB7fTtcblx0T2JqZWN0LmtleXMobWFuaWZlc3RTZWN0aW9ucykuZm9yRWFjaCgobWFuaWZlc3RTZWN0aW9uS2V5KSA9PiB7XG5cdFx0c2VjdGlvbnNbbWFuaWZlc3RTZWN0aW9uS2V5XSA9IGdldFNlY3Rpb25Gcm9tTWFuaWZlc3QobWFuaWZlc3RTZWN0aW9uc1ttYW5pZmVzdFNlY3Rpb25LZXldLCBtYW5pZmVzdFNlY3Rpb25LZXksIGNvbnZlcnRlckNvbnRleHQpO1xuXHR9KTtcblx0cmV0dXJuIHNlY3Rpb25zO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIG1hbmlmZXN0LWJhc2VkIGN1c3RvbSBzZWN0aW9uLlxuICogQHBhcmFtIGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uXG4gKiBAcGFyYW0gc2VjdGlvbktleVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGN1c3RvbSBzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldFNlY3Rpb25Gcm9tTWFuaWZlc3QoXG5cdGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uOiBNYW5pZmVzdFNlY3Rpb24sXG5cdHNlY3Rpb25LZXk6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBDdXN0b21PYmplY3RQYWdlU2VjdGlvbiB7XG5cdGNvbnN0IGN1c3RvbVNlY3Rpb25JRCA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLmlkIHx8IGdldEN1c3RvbVNlY3Rpb25JRChzZWN0aW9uS2V5KTtcblx0bGV0IHBvc2l0aW9uOiBQb3NpdGlvbiB8IHVuZGVmaW5lZCA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnBvc2l0aW9uO1xuXHRpZiAoIXBvc2l0aW9uKSB7XG5cdFx0cG9zaXRpb24gPSB7XG5cdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlclxuXHRcdH07XG5cdH1cblx0bGV0IG1hbmlmZXN0U3ViU2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0U3ViU2VjdGlvbj47XG5cdGlmICghY3VzdG9tU2VjdGlvbkRlZmluaXRpb24uc3ViU2VjdGlvbnMpIHtcblx0XHQvLyBJZiB0aGVyZSBpcyBubyBzdWJTZWN0aW9uIGRlZmluZWQsIHdlIGFkZCB0aGUgY29udGVudCBvZiB0aGUgY3VzdG9tIHNlY3Rpb24gYXMgc3Vic2VjdGlvbnNcblx0XHQvLyBhbmQgbWFrZSBzdXJlIHRvIHNldCB0aGUgdmlzaWJpbGl0eSB0byAndHJ1ZScsIGFzIHRoZSBhY3R1YWwgdmlzaWJpbGl0eSBpcyBoYW5kbGVkIGJ5IHRoZSBzZWN0aW9uIGl0c2VsZlxuXHRcdG1hbmlmZXN0U3ViU2VjdGlvbnMgPSB7XG5cdFx0XHRbc2VjdGlvbktleV06IHtcblx0XHRcdFx0Li4uY3VzdG9tU2VjdGlvbkRlZmluaXRpb24sXG5cdFx0XHRcdHBvc2l0aW9uOiB1bmRlZmluZWQsXG5cdFx0XHRcdHZpc2libGU6IFwidHJ1ZVwiLFxuXHRcdFx0XHRhcHBseVN0YXRlOiB1bmRlZmluZWQsXG5cdFx0XHRcdHJldHJpZXZlU3RhdGU6IHVuZGVmaW5lZFxuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0bWFuaWZlc3RTdWJTZWN0aW9ucyA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnN1YlNlY3Rpb25zO1xuXHR9XG5cdGNvbnN0IHN1YlNlY3Rpb25zID0gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMobWFuaWZlc3RTdWJTZWN0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cblx0Y29uc3QgY3VzdG9tU2VjdGlvbjogQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IGN1c3RvbVNlY3Rpb25JRCxcblx0XHRrZXk6IHNlY3Rpb25LZXksXG5cdFx0dGl0bGU6IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnRpdGxlLFxuXHRcdHNob3dUaXRsZTogISFjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi50aXRsZSxcblx0XHR2aXNpYmxlOiBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi52aXNpYmxlIDogXCJ0cnVlXCIsXG5cdFx0cG9zaXRpb246IHBvc2l0aW9uLFxuXHRcdHN1YlNlY3Rpb25zOiBzdWJTZWN0aW9ucyxcblx0XHRvblNlY3Rpb25Mb2FkZWQ6IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLm9uU2VjdGlvbkxvYWRlZCxcblx0XHRhcHBseVN0YXRlOiBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi5hcHBseVN0YXRlLFxuXHRcdHJldHJpZXZlU3RhdGU6IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnJldHJpZXZlU3RhdGVcblx0fTtcblx0cmV0dXJuIGN1c3RvbVNlY3Rpb247XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBPYmplY3RQYWdlIGhlYWRlciBhY3Rpb25zIChib3RoIHRoZSBkZWZhdWx0IG9uZXMgYW5kIHRoZSBjdXN0b20gb25lcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCkuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBjYXBhYmlsaXRpZXNcbiAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGlzIE9iamVjdFBhZ2UgaGVhZGVyXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRIZWFkZXJBY3Rpb25zID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGNhcGFiaWxpdGllcz86IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiBDb21iaW5lZEFjdGlvbiB7XG5cdC8vIDEuIEdldCBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnNcblx0Y29uc3QgYW5ub3RhdGlvbkhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEhlYWRlckRlZmF1bHRBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQsIGNhcGFiaWxpdGllcyk7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IGFjdGlvbk92ZXJ3cml0ZUNvbmZpZzogT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dmlzaWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRtZW51OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHByaW9yaXR5OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGdyb3VwOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH07XG5cdC8vIDIuIEdldCBhY3Rpb25zIGZyb20gbWFuaWZlc3Rcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRtYW5pZmVzdFdyYXBwZXIuZ2V0SGVhZGVyQWN0aW9ucygpLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0YW5ub3RhdGlvbkhlYWRlckFjdGlvbnMsXG5cdFx0dW5kZWZpbmVkLFxuXHRcdHVuZGVmaW5lZCxcblx0XHRnZXRIaWRkZW5IZWFkZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpXG5cdCk7XG5cdC8vIDMuIEdldCBhbGwgYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdGNvbnN0IGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMgPSBnZXRBbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zKGFubm90YXRpb25IZWFkZXJBY3Rpb25zKTtcblx0Ly8gNC4gRmluZCBtYW5pZmVzdCBhY3Rpb25zIHdoaWNoIG92ZXJyaWRlIGFueSBhbm5vdGF0aW9uIG1lbnUgaXRlbXNcblx0Y29uc3QgbWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMgPSBnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uKGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKTtcblx0Ly8gNS4gR2V0IG92ZXJyaWRkZW4gYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdGNvbnN0IG92ZXJ3cml0dGVuTWVudUFjdGlvbkl0ZW1zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcywgbWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMsIGFjdGlvbk92ZXJ3cml0ZUNvbmZpZyk7XG5cdC8vIDYuIE92ZXJyaWRlIGFsbCBhY3Rpb25zXG5cdGxldCBoZWFkZXJBY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYW5ub3RhdGlvbkhlYWRlckFjdGlvbnMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLCBhY3Rpb25PdmVyd3JpdGVDb25maWcpIGFzIEN1c3RvbUFjdGlvbltdO1xuXHQvLyA3LiBSZXBsYWNlIG9yaWdpbmFsIG1lbnUgaXRlbXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIG92ZXJyaWRkZW4gbWVudSBpdGVtc1xuXHRwcmVwYXJlTWVudUFjdGlvbnMoaGVhZGVyQWN0aW9ucywgb3ZlcndyaXR0ZW5NZW51QWN0aW9uSXRlbXMpO1xuXHQvLyA4LiBSZW1vdmUgZHVwbGljYXRlIGFjdGlvbnMgd2hpY2ggYXJlIG1lbnUgaXRlbXNcblx0aGVhZGVyQWN0aW9ucyA9IHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoaGVhZGVyQWN0aW9ucyk7XG5cdC8vIDkuIEhpZGUgbWVudXMgd2hlcmUgYWxsIG1lbnUgaXRlbXMgYXJlIGhpZGRlblxuXHRoZWFkZXJBY3Rpb25zID0gZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRNZW51QWN0aW9ucyhoZWFkZXJBY3Rpb25zKTtcblx0Ly8gMTAuIEFwcGx5IHByaW1hcnkgYWN0aW9uIG92ZXJmbG93IHByb3RlY3Rpb25cblx0aGVhZGVyQWN0aW9ucyA9IEFjdGlvblV0aWxpdGllcy5lbnN1cmVQcmltYXJ5QWN0aW9uTmV2ZXJPdmVyZmxvd3MoaGVhZGVyQWN0aW9ucykgYXMgQ3VzdG9tQWN0aW9uW107XG5cdHJldHVybiB7XG5cdFx0YWN0aW9uczogaGVhZGVyQWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogbWFuaWZlc3RBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdH07XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgT2JqZWN0UGFnZSBmb290ZXIgYWN0aW9ucyAoYm90aCB0aGUgZGVmYXVsdCBvbmVzIGFuZCB0aGUgY3VzdG9tIG9uZXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gY2FwYWJpbGl0aWVzIFRoZSBwcmVkZWZpbmVkIGVudmlyb25tZW50IGNhcGFiaWxpdGllc1xuICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGFjdGlvbnMgZm9yIHRoaXMgT2JqZWN0UGFnZSBmb290ZXJcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZvb3RlckFjdGlvbnMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0Y2FwYWJpbGl0aWVzPzogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IENvbWJpbmVkQWN0aW9uIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgYUFubm90YXRpb25Gb290ZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBnZXRGb290ZXJEZWZhdWx0QWN0aW9ucyhtYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0xldmVsKCksIGNvbnZlcnRlckNvbnRleHQsIGNhcGFiaWxpdGllcyk7XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RXcmFwcGVyLmdldEZvb3RlckFjdGlvbnMoKSwgY29udmVydGVyQ29udGV4dCwgYUFubm90YXRpb25Gb290ZXJBY3Rpb25zKTtcblxuXHRjb25zdCBhY3Rpb25PdmVyd3JpdGVDb25maWc6IE92ZXJyaWRlVHlwZUFjdGlvbiA9IHtcblx0XHRpc05hdmlnYWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRlbmFibGVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGNvbW1hbmQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cG9zaXRpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cHJpb3JpdHk6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Z3JvdXA6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fTtcblx0Y29uc3QgZm9vdGVyQWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKGFBbm5vdGF0aW9uRm9vdGVyQWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMsIGFjdGlvbk92ZXJ3cml0ZUNvbmZpZyk7XG5cdC8vIEFwcGx5IHByaW1hcnkgYWN0aW9uIG92ZXJmbG93IHByb3RlY3Rpb25cblx0Y29uc3QgcHJvdGVjdGVkRm9vdGVyQWN0aW9ucyA9IEFjdGlvblV0aWxpdGllcy5lbnN1cmVQcmltYXJ5QWN0aW9uTmV2ZXJPdmVyZmxvd3MoZm9vdGVyQWN0aW9ucyk7XG5cdHJldHVybiB7XG5cdFx0YWN0aW9uczogcHJvdGVjdGVkRm9vdGVyQWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogbWFuaWZlc3RBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdH07XG59O1xuXG5mdW5jdGlvbiBfZ2V0U3ViU2VjdGlvblZpc3VhbGl6YXRpb24oc3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uKTogVGFibGVWaXN1YWxpemF0aW9uIHtcblx0cmV0dXJuIChzdWJTZWN0aW9uPy5wcmVzZW50YXRpb24/LnZpc3VhbGl6YXRpb25zWzBdID8gc3ViU2VjdGlvbi5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnNbMF0gOiB1bmRlZmluZWQpIGFzIFRhYmxlVmlzdWFsaXphdGlvbjtcbn1cblxuZnVuY3Rpb24gX2lzRmFjZXRIYXNOb25SZXNwb25zaXZlVGFibGVWaXNpYmxlKFxuXHRkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb246IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbixcblx0c3ViU2VjdGlvblZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvblxuKTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLnZpc2libGUgPT09IFwidHJ1ZVwiICYmXG5cdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uPy5wcmVzZW50YXRpb24/LnZpc3VhbGl6YXRpb25zICYmXG5cdFx0c3ViU2VjdGlvblZpc3VhbGl6YXRpb24/LnR5cGUgPT09IFwiVGFibGVcIiAmJlxuXHRcdHN1YlNlY3Rpb25WaXN1YWxpemF0aW9uPy5jb250cm9sPy50eXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiXG5cdCk7XG59XG5cbmZ1bmN0aW9uIF9zZXROb25SZXNwb25zaXZlVGFibGVWaXN1YWxpemF0aW9uSW5mb3JtYXRpb24oXG5cdHNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdLFxuXHRkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb246IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbixcblx0c3ViU2VjdGlvblZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0c2VjdGlvbkxheW91dDogc3RyaW5nXG4pOiB2b2lkIHtcblx0aWYgKF9pc0ZhY2V0SGFzTm9uUmVzcG9uc2l2ZVRhYmxlVmlzaWJsZShkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24sIHN1YlNlY3Rpb25WaXN1YWxpemF0aW9uKSkge1xuXHRcdGNvbnN0IHRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gPSBzdWJTZWN0aW9uVmlzdWFsaXphdGlvbi5jb250cm9sO1xuXHRcdGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbi5kYXRhVmlzdWFsaXphdGlvbk9wdGlvbnMgPz89IHt9O1xuXHRcdGlmICghKHNlY3Rpb25MYXlvdXQgPT09IFwiUGFnZVwiICYmIHNlY3Rpb25zLmxlbmd0aCA+IDEpKSB7XG5cdFx0XHRkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24uZGF0YVZpc3VhbGl6YXRpb25PcHRpb25zW1wicm93Q291bnRNb2RlXCJdID0gXCJBdXRvXCI7XG5cdFx0XHR0YWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLnJvd0NvdW50TW9kZSA9IFwiQXV0b1wiO1xuXHRcdH1cblx0XHRpZiAoc2VjdGlvbkxheW91dCAhPT0gXCJUYWJzXCIpIHtcblx0XHRcdGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbi5kYXRhVmlzdWFsaXphdGlvbk9wdGlvbnNbXCJ1c2VDb25kZW5zZWRUYWJsZUxheW91dFwiXSA9IGZhbHNlO1xuXHRcdFx0dGFibGVDb250cm9sQ29uZmlndXJhdGlvbi51c2VDb25kZW5zZWRUYWJsZUxheW91dCA9IGZhbHNlO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBfc2V0Tm9uUmVzcG9uc2l2ZVRhYmxlV2l0aE1peEZhY2V0c0luZm9ybWF0aW9uKHN1YlNlY3Rpb246IE1peGVkU3ViU2VjdGlvbiwgc2VjdGlvbkxheW91dDogc3RyaW5nKTogdm9pZCB7XG5cdGNvbnN0IGZpcnN0U2VjdGlvbiA9IHN1YlNlY3Rpb24/LmNvbnRlbnQ/Lmxlbmd0aCA9PT0gMSA/IHN1YlNlY3Rpb24uY29udGVudFswXSA6IHVuZGVmaW5lZDtcblx0aWYgKGZpcnN0U2VjdGlvbj8udHlwZSA9PT0gU3ViU2VjdGlvblR5cGUuRGF0YVZpc3VhbGl6YXRpb24pIHtcblx0XHRjb25zdCB0YWJsZUNvbnRyb2wgPSAoZmlyc3RTZWN0aW9uLnByZXNlbnRhdGlvbj8udmlzdWFsaXphdGlvbnNbMF0gYXMgVGFibGVWaXN1YWxpemF0aW9uKS5jb250cm9sO1xuXHRcdGlmICh0YWJsZUNvbnRyb2wudHlwZSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdFx0Zmlyc3RTZWN0aW9uLmRhdGFWaXN1YWxpemF0aW9uT3B0aW9ucyA/Pz0ge307XG5cdFx0XHRmaXJzdFNlY3Rpb24uZGF0YVZpc3VhbGl6YXRpb25PcHRpb25zW1wicm93Q291bnRNb2RlXCJdID0gXCJBdXRvXCI7XG5cdFx0XHR0YWJsZUNvbnRyb2wucm93Q291bnRNb2RlID0gXCJBdXRvXCI7XG5cdFx0XHRpZiAoc2VjdGlvbkxheW91dCAhPT0gXCJUYWJzXCIpIHtcblx0XHRcdFx0Zmlyc3RTZWN0aW9uLmRhdGFWaXN1YWxpemF0aW9uT3B0aW9uc1tcInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0XCJdID0gZmFsc2U7XG5cdFx0XHRcdHRhYmxlQ29udHJvbC51c2VDb25kZW5zZWRUYWJsZUxheW91dCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIFNldCB0aGUgTm9uUmVzcG9uc2l2ZSBUYWJsZSAoZ3JpZCwgdHJlZSwgYW5hbHl0aWNhbCkgZGlzcGxheSBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSBzZWN0aW9ucyBUaGUgT2JqZWN0UGFnZSBzZWN0aW9uc1xuICogQHBhcmFtIHNlY3Rpb24gVGhlIGN1cnJlbnQgT2JqZWN0UGFnZSBzZWN0aW9uIHByb2Nlc3NlZFxuICogQHBhcmFtIHNlY3Rpb25MYXlvdXRcbiAqL1xuZnVuY3Rpb24gX3NldE5vblJlc3BvbnNpdmVUYWJsZVN1YlNlY3Rpb25Db250cm9sQ29uZmlndXJhdGlvbihcblx0c2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10sXG5cdHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uLFxuXHRzZWN0aW9uTGF5b3V0OiBzdHJpbmdcbik6IHZvaWQge1xuXHRsZXQgc3ViU2VjdGlvblZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbjtcblx0Y29uc3Qgc3ViU2VjdGlvbnMgPSBzZWN0aW9uLnN1YlNlY3Rpb25zO1xuXHRpZiAoc3ViU2VjdGlvbnMubGVuZ3RoID09PSAxKSB7XG5cdFx0Y29uc3Qgc3ViU2VjdGlvbiA9IHN1YlNlY3Rpb25zWzBdO1xuXHRcdHN3aXRjaCAoc3ViU2VjdGlvbi50eXBlKSB7XG5cdFx0XHRjYXNlIFwiRGF0YVZpc3VhbGl6YXRpb25cIjpcblx0XHRcdFx0c3ViU2VjdGlvblZpc3VhbGl6YXRpb24gPSBfZ2V0U3ViU2VjdGlvblZpc3VhbGl6YXRpb24oc3ViU2VjdGlvbik7XG5cdFx0XHRcdF9zZXROb25SZXNwb25zaXZlVGFibGVWaXN1YWxpemF0aW9uSW5mb3JtYXRpb24oc2VjdGlvbnMsIHN1YlNlY3Rpb24sIHN1YlNlY3Rpb25WaXN1YWxpemF0aW9uLCBzZWN0aW9uTGF5b3V0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTWl4ZWRcIjpcblx0XHRcdFx0X3NldE5vblJlc3BvbnNpdmVUYWJsZVdpdGhNaXhGYWNldHNJbmZvcm1hdGlvbihzdWJTZWN0aW9uLCBzZWN0aW9uTGF5b3V0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cdF9yZW1vdmVDb25kZW5zZWRGcm9tU3ViU2VjdGlvbnMoc3ViU2VjdGlvbnMpO1xufVxuXG4vKipcbiAqIFJlbW92ZSB0aGUgY29uZGVuc2UgbGF5b3V0IG1vZGUgZnJvbSB0aGUgc3Vic2VjdGlvbnMuXG4gKiBAcGFyYW0gc3ViU2VjdGlvbnMgVGhlIHN1YlNlY3Rpb25zIHdoZXJlIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBjb25kZW5zZWQgbGF5b3V0XG4gKi9cbmZ1bmN0aW9uIF9yZW1vdmVDb25kZW5zZWRGcm9tU3ViU2VjdGlvbnMoc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10pOiB2b2lkIHtcblx0bGV0IGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uO1xuXHQvLyBXZSBjaGVjayBpbiBlYWNoIHN1YnNlY3Rpb24gaWYgdGhlcmUgaXMgdmlzdWFsaXphdGlvbnNcblx0c3ViU2VjdGlvbnMuZm9yRWFjaCgoc3ViU2VjdGlvbikgPT4ge1xuXHRcdGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiA9IHN1YlNlY3Rpb24gYXMgRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uO1xuXHRcdGlmIChkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24/LnByZXNlbnRhdGlvbj8udmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbj8ucHJlc2VudGF0aW9uPy52aXN1YWxpemF0aW9ucy5mb3JFYWNoKChzaW5nbGVWaXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRcdGlmIChzaW5nbGVWaXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG5cdFx0XHRcdFx0c2luZ2xlVmlzdWFsaXphdGlvbi5jb250cm9sLnVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvLyBUaGVuIHdlIGNoZWNrIHRoZSBjb250ZW50IG9mIHRoZSBzdWJzZWN0aW9uLCBhbmQgaW4gZWFjaCBjb250ZW50IHdlIGNoZWNrIGlmIHRoZXJlIGlzIGEgdGFibGUgdG8gc2V0IGl0cyBjb25kZW5zZWQgbGF5b3V0IHRvIGZhbHNlXG5cdFx0aWYgKGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbj8uY29udGVudCkge1xuXHRcdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLmNvbnRlbnQuZm9yRWFjaCgoc2luZ2xlQ29udGVudCkgPT4ge1xuXHRcdFx0XHQoc2luZ2xlQ29udGVudCBhcyBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24pLnByZXNlbnRhdGlvbj8udmlzdWFsaXphdGlvbnMuZm9yRWFjaCgoc2luZ2xlVmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0XHRcdGlmIChzaW5nbGVWaXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG5cdFx0XHRcdFx0XHRzaW5nbGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudXNlQ29uZGVuc2VkVGFibGVMYXlvdXQgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn1cbi8qKlxuICogUmV0cmlldmVzIGFuZCBtZXJnZXMgdGhlIE9iamVjdFBhZ2Ugc2VjdGlvbnMgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbiBhbmQgaW4gdGhlIG1hbmlmZXN0LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzZWN0aW9ucy5cbiAqL1xuXG5leHBvcnQgY29uc3QgZ2V0U2VjdGlvbnMgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogT2JqZWN0UGFnZVNlY3Rpb25bXSB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IHNlY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0Z2V0U2VjdGlvbnNGcm9tQW5ub3RhdGlvbihjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRnZXRTZWN0aW9uc0Zyb21NYW5pZmVzdChtYW5pZmVzdFdyYXBwZXIuZ2V0U2VjdGlvbnMoKSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0e1xuXHRcdFx0dGl0bGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHR2aXNpYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0c3ViU2VjdGlvbnM6IHtcblx0XHRcdFx0YWN0aW9uczogT3ZlcnJpZGVUeXBlLm1lcmdlLFxuXHRcdFx0XHR0aXRsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdFx0c2lkZUNvbnRlbnQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRcdG9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHRcdFx0fVxuXHRcdH1cblx0KTtcblx0Ly8gTGV2ZWwgQWRqdXN0bWVudCBmb3IgXCJNaXhlZFwiIENvbGxlY3Rpb24gRmFjZXRzOlxuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cdC8vIFRoZSBtYW5pZmVzdCBkZWZpbml0aW9uIG9mIGN1c3RvbSBzaWRlIGNvbnRlbnRzIGFuZCBhY3Rpb25zIHN0aWxsIG5lZWRzIHRvIGJlIGFsaWduZWQgZm9yIFwiTWl4ZWRcIiBjb2xsZWN0aW9uIGZhY2V0czpcblx0Ly8gQ29sbGVjdGlvbiBmYWNldHMgY29udGFpbmluZyB0YWJsZXMgZ2FpbiBhbiBleHRyYSByZWZlcmVuY2UgZmFjZXQgYXMgYSB0YWJsZSB3cmFwcGVyIHRvIGVuc3VyZSwgdGhhdCB0aGUgdGFibGUgaXMgYWx3YXlzXG5cdC8vIHBsYWNlZCBpbiBhbiBvd24gaW5kaXZpZHVhbCBPYmplY3QgUGFnZSBCbG9jazsgdGhpcyBhZGRpdGlvbmFsIGhpZXJhcmNoeSBsZXZlbCBpcyB1bmtub3duIHRvIGFwcCBkZXZlbG9wZXJzLCB3aGljaCBhcmVcblx0Ly8gZGVmaW5pbmcgdGhlIHNpZGUgY29udGVudCBhbmQgYWN0aW9ucyBpbiB0aGUgbWFuaWZlc3QgYXQgY29sbGVjdGlvbiBmYWNldCBsZXZlbDsgbm93LCBzaW5jZSB0aGUgc2lkZUNvbnRlbnQgYWx3YXlzIG5lZWRzXG5cdC8vIHRvIGJlIGFzc2lnbmVkIHRvIGEgYmxvY2ssIGFuZCBhY3Rpb25zIGFsd2F5cyBuZWVkIHRvIGJlIGFzc2lnbmVkIHRvIGEgZm9ybSxcblx0Ly8gd2UgbmVlZCB0byBtb3ZlIHRoZSBzaWRlQ29udGVudCBhbmQgYWN0aW9ucyBmcm9tIGEgbWl4ZWQgY29sbGVjdGlvbiBmYWNldCB0byBpdHMgY29udGVudC5cblx0Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXHRzZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChzZWN0aW9uKSB7XG5cdFx0X3NldE5vblJlc3BvbnNpdmVUYWJsZVN1YlNlY3Rpb25Db250cm9sQ29uZmlndXJhdGlvbihzZWN0aW9ucywgc2VjdGlvbiwgbWFuaWZlc3RXcmFwcGVyLmdldFNlY3Rpb25MYXlvdXQoKSk7XG5cdFx0c2VjdGlvbi5zdWJTZWN0aW9ucz8uZm9yRWFjaChmdW5jdGlvbiAoc3ViU2VjdGlvbikge1xuXHRcdFx0c3ViU2VjdGlvbi50aXRsZSA9IHN1YlNlY3Rpb24udGl0bGUgPT09IFwidW5kZWZpbmVkXCIgPyB1bmRlZmluZWQgOiBzdWJTZWN0aW9uLnRpdGxlO1xuXHRcdFx0aWYgKHN1YlNlY3Rpb24udHlwZSA9PT0gXCJNaXhlZFwiKSB7XG5cdFx0XHRcdHN1YlNlY3Rpb24uY29udGVudD8uZm9yRWFjaCgoY29udGVudCkgPT4ge1xuXHRcdFx0XHRcdGNvbnRlbnQub2JqZWN0UGFnZUxhenlMb2FkZXJFbmFibGVkID0gc3ViU2VjdGlvbi5vYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQ7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHN1YlNlY3Rpb24udHlwZSA9PT0gXCJNaXhlZFwiICYmIHN1YlNlY3Rpb24uY29udGVudD8ubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IGZpcnN0Rm9ybSA9IHN1YlNlY3Rpb24uY29udGVudC5maW5kKFxuXHRcdFx0XHRcdChlbGVtZW50KSA9PiAoZWxlbWVudCBhcyBGb3JtU3ViU2VjdGlvbikudHlwZSA9PT0gU3ViU2VjdGlvblR5cGUuRm9ybVxuXHRcdFx0XHQpIGFzIEZvcm1TdWJTZWN0aW9uO1xuXG5cdFx0XHRcdC8vIDEuIENvcHkgc2lkZUNvbnRlbnQgdG8gdGhlIFN1YlNlY3Rpb24ncyBmaXJzdCBmb3JtOyBvciAtLSBpZiB1bmF2YWlsYWJsZSAtLSB0byBpdHMgZmlyc3QgY29udGVudFxuXHRcdFx0XHQvLyAyLiBDb3B5IGFjdGlvbnMgdG8gdGhlIGZpcnN0IGZvcm0gb2YgdGhlIFN1YlNlY3Rpb24ncyBjb250ZW50XG5cdFx0XHRcdC8vIDMuIERlbGV0ZSBzaWRlQ29udGVudCAvIGFjdGlvbnMgYXQgdGhlIChpbnZhbGlkKSBtYW5pZmVzdCBsZXZlbFxuXG5cdFx0XHRcdGlmIChzdWJTZWN0aW9uLnNpZGVDb250ZW50KSB7XG5cdFx0XHRcdFx0aWYgKGZpcnN0Rm9ybSkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYSBmb3JtLCBpdCBhbHdheXMgbmVlZHMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGZvcm0sIGFzIHRoZSBmb3JtIGluaGVyaXRzIHRoZSBJRCBvZiB0aGUgU3ViU2VjdGlvblxuXHRcdFx0XHRcdFx0Zmlyc3RGb3JtLnNpZGVDb250ZW50ID0gc3ViU2VjdGlvbi5zaWRlQ29udGVudDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c3ViU2VjdGlvbi5jb250ZW50WzBdLnNpZGVDb250ZW50ID0gc3ViU2VjdGlvbi5zaWRlQ29udGVudDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c3ViU2VjdGlvbi5zaWRlQ29udGVudCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChmaXJzdEZvcm0gJiYgKHN1YlNlY3Rpb24gYXMgdW5rbm93biBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Zmlyc3RGb3JtLmFjdGlvbnMgPSAoc3ViU2VjdGlvbiBhcyB1bmtub3duIGFzIEZvcm1TdWJTZWN0aW9uKS5hY3Rpb25zO1xuXHRcdFx0XHRcdChzdWJTZWN0aW9uIGFzIHVua25vd24gYXMgRm9ybVN1YlNlY3Rpb24pLmFjdGlvbnMgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcblx0cmV0dXJuIHNlY3Rpb25zO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBPYmplY3RQYWdlIGhhcyBoZWFkZXIgY29udGVudC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbiBoZWFkZXIgZmFjZXRcbiAqL1xuZnVuY3Rpb24gaGFzSGVhZGVyQ29udGVudChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBib29sZWFuIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0cmV0dXJuIChcblx0XHQoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJGYWNldHMgfHwgW10pLmxlbmd0aCA+IDAgfHxcblx0XHRPYmplY3Qua2V5cyhtYW5pZmVzdFdyYXBwZXIuZ2V0SGVhZGVyRmFjZXRzKCkpLmxlbmd0aCA+IDBcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBoZWFkZXIgY29udGVudC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBEZWxldGUgYnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGdldFNob3dIZWFkZXJDb250ZW50RXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdCFoYXNIZWFkZXJDb250ZW50KGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGNvbnN0YW50KGZhbHNlKSxcblx0XHRpZkVsc2UoZXF1YWwobWFuaWZlc3RXcmFwcGVyLmlzSGVhZGVyRWRpdGFibGUoKSwgZmFsc2UpLCBjb25zdGFudCh0cnVlKSwgbm90KFVJLklzRWRpdGFibGUpKVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgaGVhZGVyIGNvbnRlbnQuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5leHBvcnQgY29uc3QgZ2V0U2hvd0hlYWRlckNvbnRlbnQgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZ2V0U2hvd0hlYWRlckNvbnRlbnRFeHByZXNzaW9uKGNvbnZlcnRlckNvbnRleHQpKTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBFYXN5RmlsbCBidXR0b24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIEVhc3lGaWxsIGJ1dHRvblxuICovXG5leHBvcnQgY29uc3QgZ2V0RWFzeUZpbGxWaXNpYmxlID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5U2V0KCksXG5cdFx0ZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLFxuXHRcdGlzVXBkYXRlSGlkZGVuID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKE1vZGVsSGVscGVyLmlzVXBkYXRlSGlkZGVuKGVudGl0eVNldCwgZW50aXR5VHlwZSkpO1xuXHRjb25zdCByb290RW50aXR5U2V0UGF0aCA9IE1vZGVsSGVscGVyLmdldFJvb3RFbnRpdHlTZXRQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSk7XG5cdGNvbnN0IHJvb3RDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4oXCIvXCIgKyByb290RW50aXR5U2V0UGF0aCk7XG5cdGNvbnN0IGlzUm9vdFVwZGF0ZUhpZGRlbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRNb2RlbEhlbHBlci5pc1VwZGF0ZUhpZGRlbihyb290Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSwgcm9vdENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKVxuXHQpO1xuXHRjb25zdCBpc0RyYWZ0RW5hYmxlZCA9IE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0Y29uc3QgaXNTdGlja3kgPSBNb2RlbEhlbHBlci5pc1N0aWNreShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS5zdGFydGluZ0VudGl0eVNldCk7XG5cdC8vIEVhc3lGaWxsIGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBvYmplY3QgcGF0aCBpcyBkcmFmdCBlbmFibGVkIGFuZCBzdGlja3lcblx0aWYgKCFpc0RyYWZ0RW5hYmxlZCAmJiAhaXNTdGlja3kpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZmFsc2UpO1xuXHR9XG5cdGNvbnN0IHZpZXdMZXZlbCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0Vmlld0xldmVsKCk7XG5cdGNvbnN0IHVwZGF0YWJsZVByb3BlcnR5UGF0aCA9IHZpZXdMZXZlbCA+IDEgPyBlbnRpdHlTZXQ/LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uVXBkYXRlUmVzdHJpY3Rpb25zPy5VcGRhdGFibGUgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGlzRWRpdEVuYWJsZWQgPSBnZXRFZGl0QnV0dG9uRW5hYmxlZEV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCwgdXBkYXRhYmxlUHJvcGVydHlQYXRoLCB2aWV3TGV2ZWwpO1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0aWZFbHNlKFxuXHRcdFx0dmlld0xldmVsID4gMSxcblx0XHRcdGFuZChub3QoaXNVcGRhdGVIaWRkZW4pLCBVSS5Jc0VkaXRhYmxlLCBpc0VkaXRFbmFibGVkKSxcblx0XHRcdGFuZChub3QoaXNVcGRhdGVIaWRkZW4pLCBub3QoaXNSb290VXBkYXRlSGlkZGVuKSwgaXNFZGl0RW5hYmxlZClcblx0XHQpXG5cdCk7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgYXZhdGFyIHdoZW4gdGhlIGhlYWRlciBpcyBpbiBleHBhbmRlZCBzdGF0ZS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBEZWxldGUgYnV0dG9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHBhbmRlZEltYWdlVmlzaWJsZSA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihub3QoZ2V0U2hvd0hlYWRlckNvbnRlbnRFeHByZXNzaW9uKGNvbnZlcnRlckNvbnRleHQpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29udmVydFBhZ2UgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0Y2FwYWJpbGl0aWVzPzogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IE9iamVjdFBhZ2VEZWZpbml0aW9uIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0bGV0IGhlYWRlclNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cblx0Ly8gUmV0cmlldmUgYWxsIGhlYWRlciBmYWNldHMgKGZyb20gYW5ub3RhdGlvbnMgJiBjdXN0b20pXG5cdGNvbnN0IGhlYWRlckZhY2V0cyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdGdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QobWFuaWZlc3RXcmFwcGVyLmdldEhlYWRlckZhY2V0cygpKVxuXHQpO1xuXG5cdC8vIFJldHJpZXZlIHRoZSBwYWdlIGhlYWRlciBhY3Rpb25zXG5cdGNvbnN0IGhlYWRlckFjdGlvbnMgPSBnZXRIZWFkZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQsIGNhcGFiaWxpdGllcyk7XG5cblx0Ly8gUmV0cmlldmUgdGhlIHBhZ2UgZm9vdGVyIGFjdGlvbnNcblx0Y29uc3QgZm9vdGVyQWN0aW9ucyA9IGdldEZvb3RlckFjdGlvbnMoY29udmVydGVyQ29udGV4dCwgY2FwYWJpbGl0aWVzKTtcblxuXHRpZiAobWFuaWZlc3RXcmFwcGVyLmlzSGVhZGVyRWRpdGFibGUoKSAmJiAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucy5VST8uSGVhZGVyRmFjZXRzIHx8IGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkhlYWRlckluZm8pKSB7XG5cdFx0aGVhZGVyU2VjdGlvbiA9IGNyZWF0ZUVkaXRhYmxlSGVhZGVyU2VjdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBoZWFkZXJGYWNldHMpO1xuXHR9XG5cblx0Y29uc3Qgc2VjdGlvbnMgPSBnZXRTZWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRyZXR1cm4ge1xuXHRcdHRlbXBsYXRlOiBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSxcblx0XHRoZWFkZXI6IHtcblx0XHRcdHZpc2libGU6IG1hbmlmZXN0V3JhcHBlci5nZXRTaG93T2JqZWN0UGFnZUhlYWRlcigpLFxuXHRcdFx0c2VjdGlvbjogaGVhZGVyU2VjdGlvbixcblx0XHRcdGZhY2V0czogaGVhZGVyRmFjZXRzLFxuXHRcdFx0YWN0aW9uczogaGVhZGVyQWN0aW9ucy5hY3Rpb25zLFxuXHRcdFx0ZWFzeUZpbGxWaXNpYmxlOiBnZXRFYXN5RmlsbFZpc2libGUoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRzaG93Q29udGVudDogZ2V0U2hvd0hlYWRlckNvbnRlbnQoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRoYXNDb250ZW50OiBoYXNIZWFkZXJDb250ZW50KGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0YXZhdGFyOiBnZXRBdmF0YXIoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHR0aXRsZToge1xuXHRcdFx0XHRleHBhbmRlZEltYWdlVmlzaWJsZTogZ2V0RXhwYW5kZWRJbWFnZVZpc2libGUoY29udmVydGVyQ29udGV4dClcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlY3Rpb25zOiBzZWN0aW9ucyxcblx0XHRmb290ZXJBY3Rpb25zOiBmb290ZXJBY3Rpb25zLmFjdGlvbnMsXG5cdFx0aGVhZGVyQ29tbWFuZEFjdGlvbnM6IGhlYWRlckFjdGlvbnMuY29tbWFuZEFjdGlvbnMsXG5cdFx0Zm9vdGVyQ29tbWFuZEFjdGlvbnM6IGZvb3RlckFjdGlvbnMuY29tbWFuZEFjdGlvbnMsXG5cdFx0c2hvd0FuY2hvckJhcjogbWFuaWZlc3RXcmFwcGVyLmdldFNob3dBbmNob3JCYXIoKSxcblx0XHR1c2VJY29uVGFiQmFyOiBtYW5pZmVzdFdyYXBwZXIudXNlSWNvblRhYkJhcigpLFxuXHRcdHRyYW5zcG9ydFNlbGVjdGlvbjogbWFuaWZlc3RXcmFwcGVyLmdldFRyYW5zcG9ydFNlbGVjdGlvbigpXG5cdH07XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEwRUEsTUFBTUEsYUFBYSxHQUFHQSxDQUFDQyxlQUEyQixFQUFFQyxRQUFnQixLQUFhO0lBQ2hGLE9BQU9ELGVBQWUsQ0FBQ0UsRUFBRSxFQUFFQyxRQUFRLENBQUMsQ0FBQyxJQUFJSCxlQUFlLENBQUNJLEtBQUssRUFBRUQsUUFBUSxDQUFDLENBQUMsSUFBSUYsUUFBUTtFQUN2RixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNJLDJCQUEyQkEsQ0FDMUNDLGdCQUF5RCxFQUN6REMsZUFBd0MsRUFDcEI7SUFDcEIsTUFBTUMsdUJBQXVCLEdBQUdDLDBCQUEwQixDQUFDLENBQUM7SUFDNUQsTUFBTUMsWUFBWSxHQUFHSixnQkFBZ0IsQ0FBQ0ssYUFBYSxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxFQUFFQyxFQUFFLEVBQUVDLFlBQVk7SUFDbkYsTUFBTUMsc0JBQXNCLEdBQUdMLFlBQVksR0FBR00saUJBQWlCLENBQUNOLFlBQVksRUFBRUosZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtJQUMxRyxNQUFNVyw0QkFBNEIsR0FBR0Msa0NBQWtDLENB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
|
|
552
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRTZWN0aW9uS2V5IiwiZmFjZXREZWZpbml0aW9uIiwiZmFsbGJhY2siLCJJRCIsInRvU3RyaW5nIiwiTGFiZWwiLCJjcmVhdGVFZGl0YWJsZUhlYWRlclNlY3Rpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiYWxsSGVhZGVyRmFjZXRzIiwiZWRpdGFibGVIZWFkZXJTZWN0aW9uSUQiLCJnZXRFZGl0YWJsZUhlYWRlclNlY3Rpb25JRCIsImhlYWRlckZhY2V0cyIsImdldEVudGl0eVR5cGUiLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGVhZGVyRmFjZXRzIiwiaGVhZGVyZmFjZXRTdWJTZWN0aW9ucyIsImNyZWF0ZVN1YlNlY3Rpb25zIiwiY3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucyIsImxlbmd0aCIsImkiLCJmb3JFYWNoIiwiaXRlbSIsInZpc2libGUiLCJwdXNoIiwia2V5Iiwic2xpY2UiLCJsYXN0SW5kZXhPZiIsImN1c3RvbUl0ZW0iLCJoZWFkZXJTZWN0aW9uIiwiaWQiLCJ0aXRsZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiSXNFZGl0YWJsZSIsInN1YlNlY3Rpb25zIiwiX2V4cG9ydHMiLCJnZXRTZWN0aW9uc0Zyb21Bbm5vdGF0aW9uIiwiZW50aXR5VHlwZSIsIm9iamVjdFBhZ2VTZWN0aW9ucyIsIkZhY2V0cyIsIm1hcCIsImdldFNlY3Rpb25Gcm9tQW5ub3RhdGlvbiIsImdldFVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzIiwibWFuaWZlc3RXcmFwcGVyIiwic2VjdGlvbktleSIsInNlY3Rpb25zSW5NYW5pZmVzdCIsImdldFNlY3Rpb25zIiwic2VjdGlvblNldHRpbmdzIiwidXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMiLCJmYWNldCIsInNlY3Rpb25JRCIsImdldFNlY3Rpb25JRCIsImhpZGRlbkV4cHJlc3Npb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJIaWRkZW4iLCJwYXRoIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsImdldE1hbmlmZXN0V3JhcHBlciIsInNlY3Rpb24iLCJ1bmRlZmluZWQiLCJzaG93VGl0bGUiLCJub3QiLCJlcXVhbCIsImdldFNlY3Rpb25zRnJvbU1hbmlmZXN0IiwibWFuaWZlc3RTZWN0aW9ucyIsInNlY3Rpb25zIiwiT2JqZWN0Iiwia2V5cyIsIm1hbmlmZXN0U2VjdGlvbktleSIsImdldFNlY3Rpb25Gcm9tTWFuaWZlc3QiLCJjdXN0b21TZWN0aW9uRGVmaW5pdGlvbiIsImN1c3RvbVNlY3Rpb25JRCIsImdldEN1c3RvbVNlY3Rpb25JRCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJtYW5pZmVzdFN1YlNlY3Rpb25zIiwiYXBwbHlTdGF0ZSIsInJldHJpZXZlU3RhdGUiLCJjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyIsImN1c3RvbVNlY3Rpb24iLCJvblNlY3Rpb25Mb2FkZWQiLCJnZXRIZWFkZXJBY3Rpb25zIiwiY2FwYWJpbGl0aWVzIiwiYW5ub3RhdGlvbkhlYWRlckFjdGlvbnMiLCJnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyIsImFjdGlvbk92ZXJ3cml0ZUNvbmZpZyIsImlzTmF2aWdhYmxlIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiZW5hYmxlZCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImNvbW1hbmQiLCJtZW51IiwicHJpb3JpdHkiLCJncm91cCIsIm92ZXJmbG93R3JvdXAiLCJkaXNhYmxlU3RyaWN0SGFuZGxpbmciLCJtYW5pZmVzdEFjdGlvbnMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0SGlkZGVuSGVhZGVyQWN0aW9ucyIsImFubm90YXRpb25NZW51QWN0aW9uSXRlbXMiLCJnZXRBbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zIiwibWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMiLCJnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uIiwiYWN0aW9ucyIsIm92ZXJ3cml0dGVuTWVudUFjdGlvbkl0ZW1zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJoZWFkZXJBY3Rpb25zIiwicHJlcGFyZU1lbnVBY3Rpb25zIiwicmVtb3ZlRHVwbGljYXRlQWN0aW9ucyIsImdldFZpc2liaWxpdHlFbmFibGVtZW50TWVudUFjdGlvbnMiLCJBY3Rpb25VdGlsaXRpZXMiLCJlbnN1cmVQcmltYXJ5QWN0aW9uTmV2ZXJPdmVyZmxvd3MiLCJvdmVyZmxvd0dyb3Vwc0NvbmZpZyIsImdldEhlYWRlck92ZXJmbG93R3JvdXBzIiwiYWRkU2VwYXJhdG9ycyIsImNvbW1hbmRBY3Rpb25zIiwiZ2V0Rm9vdGVyQWN0aW9ucyIsImFBbm5vdGF0aW9uRm9vdGVyQWN0aW9ucyIsImdldEZvb3RlckRlZmF1bHRBY3Rpb25zIiwiZ2V0Vmlld0xldmVsIiwiZm9vdGVyQWN0aW9ucyIsImdldEZvb3Rlck92ZXJmbG93R3JvdXBzIiwiX2dldFN1YlNlY3Rpb25WaXN1YWxpemF0aW9uIiwic3ViU2VjdGlvbiIsInByZXNlbnRhdGlvbiIsInZpc3VhbGl6YXRpb25zIiwiX2lzRmFjZXRIYXNOb25SZXNwb25zaXZlVGFibGVWaXNpYmxlIiwiZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uIiwic3ViU2VjdGlvblZpc3VhbGl6YXRpb24iLCJ0eXBlIiwiY29udHJvbCIsIl9zZXROb25SZXNwb25zaXZlVGFibGVWaXN1YWxpemF0aW9uSW5mb3JtYXRpb24iLCJzZWN0aW9uTGF5b3V0IiwidGFibGVDb250cm9sQ29uZmlndXJhdGlvbiIsImRhdGFWaXN1YWxpemF0aW9uT3B0aW9ucyIsInJvd0NvdW50TW9kZSIsInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0IiwiX3NldE5vblJlc3BvbnNpdmVUYWJsZVdpdGhNaXhGYWNldHNJbmZvcm1hdGlvbiIsImZpcnN0U2VjdGlvbiIsImNvbnRlbnQiLCJTdWJTZWN0aW9uVHlwZSIsIkRhdGFWaXN1YWxpemF0aW9uIiwidGFibGVDb250cm9sIiwiX3NldE5vblJlc3BvbnNpdmVUYWJsZVN1YlNlY3Rpb25Db250cm9sQ29uZmlndXJhdGlvbiIsIl9yZW1vdmVDb25kZW5zZWRGcm9tU3ViU2VjdGlvbnMiLCJzaW5nbGVWaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvblR5cGUiLCJUYWJsZSIsInNpbmdsZUNvbnRlbnQiLCJtZXJnZSIsInNpZGVDb250ZW50Iiwib2JqZWN0UGFnZUxhenlMb2FkZXJFbmFibGVkIiwiZ2V0U2VjdGlvbkxheW91dCIsImZpcnN0Rm9ybSIsImZpbmQiLCJlbGVtZW50IiwiRm9ybSIsImhhc0hlYWRlckNvbnRlbnQiLCJnZXRIZWFkZXJGYWNldHMiLCJnZXRTaG93SGVhZGVyQ29udGVudEV4cHJlc3Npb24iLCJpZkVsc2UiLCJjb25zdGFudCIsImlzSGVhZGVyRWRpdGFibGUiLCJnZXRTaG93SGVhZGVyQ29udGVudCIsImdldEVhc3lGaWxsVmlzaWJsZSIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImlzVXBkYXRlSGlkZGVuIiwiTW9kZWxIZWxwZXIiLCJyb290RW50aXR5U2V0UGF0aCIsImdldFJvb3RFbnRpdHlTZXRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJyb290Q29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJpc1Jvb3RVcGRhdGVIaWRkZW4iLCJpc0RyYWZ0RW5hYmxlZCIsImlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzU3RpY2t5Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJ2aWV3TGV2ZWwiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJDYXBhYmlsaXRpZXMiLCJVcGRhdGVSZXN0cmljdGlvbnMiLCJVcGRhdGFibGUiLCJpc0VkaXRFbmFibGVkIiwiZ2V0RWRpdEJ1dHRvbkVuYWJsZWRFeHByZXNzaW9uIiwiYW5kIiwiZ2V0RXhwYW5kZWRJbWFnZVZpc2libGUiLCJjb252ZXJ0UGFnZSIsImdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucyIsImdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdCIsIkhlYWRlckluZm8iLCJ0ZW1wbGF0ZSIsIlRlbXBsYXRlVHlwZSIsIk9iamVjdFBhZ2UiLCJoZWFkZXIiLCJnZXRTaG93T2JqZWN0UGFnZUhlYWRlciIsImZhY2V0cyIsImVhc3lGaWxsVmlzaWJsZSIsInNob3dDb250ZW50IiwiaGFzQ29udGVudCIsImF2YXRhciIsImdldEF2YXRhciIsImV4cGFuZGVkSW1hZ2VWaXNpYmxlIiwiaGVhZGVyQ29tbWFuZEFjdGlvbnMiLCJmb290ZXJDb21tYW5kQWN0aW9ucyIsInNob3dBbmNob3JCYXIiLCJnZXRTaG93QW5jaG9yQmFyIiwidXNlSWNvblRhYkJhciIsInRyYW5zcG9ydFNlbGVjdGlvbiIsImdldFRyYW5zcG9ydFNlbGVjdGlvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT2JqZWN0UGFnZUNvbnZlcnRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRmFjZXRUeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgYW5kLCBjb21waWxlRXhwcmVzc2lvbiwgY29uc3RhbnQsIGVxdWFsLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sIGlmRWxzZSwgbm90IH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24sIENvbWJpbmVkQWN0aW9uLCBDdXN0b21BY3Rpb24sIE92ZXJyaWRlVHlwZUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7XG5cdGFkZFNlcGFyYXRvcnMsXG5cdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsXG5cdGdldEFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsXG5cdGdldE1hdGNoaW5nTWFuaWZlc3RBY3Rpb24sXG5cdGdldFZpc2liaWxpdHlFbmFibGVtZW50TWVudUFjdGlvbnMsXG5cdHByZXBhcmVNZW51QWN0aW9ucyxcblx0cmVtb3ZlRHVwbGljYXRlQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHtcblx0Z2V0RWRpdEJ1dHRvbkVuYWJsZWRFeHByZXNzaW9uLFxuXHRnZXRGb290ZXJEZWZhdWx0QWN0aW9ucyxcblx0Z2V0SGVhZGVyRGVmYXVsdEFjdGlvbnMsXG5cdGdldEhpZGRlbkhlYWRlckFjdGlvbnNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvb2JqZWN0UGFnZS9IZWFkZXJBbmRGb290ZXJBY3Rpb25cIjtcbmltcG9ydCBBY3Rpb25VdGlsaXRpZXMgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQWN0aW9uVXRpbGl0aWVzXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IFVJLCBzaW5nbGV0b25QYXRoVmlzaXRvciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvRW52aXJvbm1lbnRTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdFNlY3Rpb24sIE1hbmlmZXN0U3ViU2VjdGlvbiwgVHJhbnNwb3J0U2VsZWN0aW9uRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZVR5cGUsIFZpc3VhbGl6YXRpb25UeXBlIH0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIE1hbmlmZXN0V3JhcHBlciBmcm9tIFwiLi4vTWFuaWZlc3RXcmFwcGVyXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCwgUGFnZURlZmluaXRpb24gfSBmcm9tIFwiLi4vVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQXZhdGFyIH0gZnJvbSBcIi4uL2NvbnRyb2xzL09iamVjdFBhZ2UvQXZhdGFyXCI7XG5pbXBvcnQgeyBnZXRBdmF0YXIgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9BdmF0YXJcIjtcbmltcG9ydCB0eXBlIHsgT2JqZWN0UGFnZUhlYWRlckZhY2V0IH0gZnJvbSBcIi4uL2NvbnRyb2xzL09iamVjdFBhZ2UvSGVhZGVyRmFjZXRcIjtcbmltcG9ydCB7IGdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucywgZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0IH0gZnJvbSBcIi4uL2NvbnRyb2xzL09iamVjdFBhZ2UvSGVhZGVyRmFjZXRcIjtcbmltcG9ydCB0eXBlIHtcblx0Q3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24sXG5cdERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbixcblx0Rm9ybVN1YlNlY3Rpb24sXG5cdE1peGVkU3ViU2VjdGlvbixcblx0T2JqZWN0UGFnZVNlY3Rpb24sXG5cdE9iamVjdFBhZ2VTdWJTZWN0aW9uXG59IGZyb20gXCIuLi9jb250cm9scy9PYmplY3RQYWdlL1N1YlNlY3Rpb25cIjtcbmltcG9ydCB7XG5cdFN1YlNlY3Rpb25UeXBlLFxuXHRjcmVhdGVDdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zLFxuXHRjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyxcblx0Y3JlYXRlU3ViU2VjdGlvbnNcbn0gZnJvbSBcIi4uL2NvbnRyb2xzL09iamVjdFBhZ2UvU3ViU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVSZWNvcmQsIFBvc2l0aW9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBPdmVycmlkZVR5cGUsIFBsYWNlbWVudCwgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgfSBmcm9tIFwiLi4vaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGdldEN1c3RvbVNlY3Rpb25JRCwgZ2V0RWRpdGFibGVIZWFkZXJTZWN0aW9uSUQsIGdldFNlY3Rpb25JRCB9IGZyb20gXCIuLi9oZWxwZXJzL0lEXCI7XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VEZWZpbml0aW9uID0gUGFnZURlZmluaXRpb24gJiB7XG5cdGhlYWRlcjoge1xuXHRcdHZpc2libGU6IGJvb2xlYW47XG5cdFx0c2VjdGlvbj86IE9iamVjdFBhZ2VTZWN0aW9uO1xuXHRcdGZhY2V0czogT2JqZWN0UGFnZUhlYWRlckZhY2V0W107XG5cdFx0YWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRcdGVhc3lGaWxsVmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0c2hvd0NvbnRlbnQ6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRcdGhhc0NvbnRlbnQ6IGJvb2xlYW47XG5cdFx0YXZhdGFyPzogQXZhdGFyO1xuXHRcdHRpdGxlOiB7XG5cdFx0XHRleHBhbmRlZEltYWdlVmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0fTtcblx0fTtcblx0c2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW107XG5cdGZvb3RlckFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0aGVhZGVyQ29tbWFuZEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG5cdGZvb3RlckNvbW1hbmRBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xuXHRzaG93QW5jaG9yQmFyOiBib29sZWFuO1xuXHR1c2VJY29uVGFiQmFyOiBib29sZWFuO1xuXHR0cmFuc3BvcnRTZWxlY3Rpb24/OiBUcmFuc3BvcnRTZWxlY3Rpb25EZWZpbml0aW9uO1xufTtcblxuY29uc3QgZ2V0U2VjdGlvbktleSA9IChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gZmFjZXREZWZpbml0aW9uLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvbi5MYWJlbD8udG9TdHJpbmcoKSB8fCBmYWxsYmFjaztcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNlY3Rpb24gdGhhdCByZXByZXNlbnRzIHRoZSBlZGl0YWJsZSBoZWFkZXIgcGFydDsgaXQgaXMgb25seSB2aXNpYmxlIGluIGVkaXQgbW9kZS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGFsbEhlYWRlckZhY2V0cyBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBzZWN0aW9uIHJlcHJlc2VudGluZyB0aGUgZWRpdGFibGUgaGVhZGVyIHBhcnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFZGl0YWJsZUhlYWRlclNlY3Rpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YWxsSGVhZGVyRmFjZXRzOiBPYmplY3RQYWdlSGVhZGVyRmFjZXRbXVxuKTogT2JqZWN0UGFnZVNlY3Rpb24ge1xuXHRjb25zdCBlZGl0YWJsZUhlYWRlclNlY3Rpb25JRCA9IGdldEVkaXRhYmxlSGVhZGVyU2VjdGlvbklEKCk7XG5cdGNvbnN0IGhlYWRlckZhY2V0cyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVyRmFjZXRzO1xuXHRjb25zdCBoZWFkZXJmYWNldFN1YlNlY3Rpb25zID0gaGVhZGVyRmFjZXRzID8gY3JlYXRlU3ViU2VjdGlvbnMoaGVhZGVyRmFjZXRzLCBjb252ZXJ0ZXJDb250ZXh0LCB0cnVlKSA6IFtdO1xuXHRjb25zdCBjdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zID0gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0bGV0IGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cdGlmIChjdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zLmxlbmd0aCA+IDApIHtcblx0XHQvLyBtZXJnZSBhbm5vdGF0aW9uIGJhc2VkIGhlYWRlciBmYWNldHMgYW5kIGN1c3RvbSBoZWFkZXIgZmFjZXRzIGluIHRoZSByaWdodCBvcmRlclxuXHRcdGxldCBpID0gMDtcblx0XHRhbGxIZWFkZXJGYWNldHMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0Ly8gaGlkZGVuIGhlYWRlciBmYWNldHMgYXJlIG5vdCBpbmNsdWRlZCBpbiBhbGxIZWFkZXJGYWNldHMgYXJyYXkgPT4gYWRkIHRoZW0gYW55d2F5XG5cdFx0XHR3aGlsZSAoaGVhZGVyZmFjZXRTdWJTZWN0aW9ucy5sZW5ndGggPiBpICYmIGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0udmlzaWJsZSA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zLnB1c2goaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXSk7XG5cdFx0XHRcdGkrKztcblx0XHRcdH1cblx0XHRcdGlmIChcblx0XHRcdFx0aGVhZGVyZmFjZXRTdWJTZWN0aW9ucy5sZW5ndGggPiBpICYmXG5cdFx0XHRcdChpdGVtLmtleSA9PT0gaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS5rZXkgfHxcblx0XHRcdFx0XHQvLyBmb3IgaGVhZGVyIGZhY2V0cyB3aXRoIG5vIGlkIHRoZSBrZXlzIG9mIGhlYWRlciBmYWNldCBhbmQgc3Vic2VjdGlvbiBhcmUgZGlmZmVyZW50ID0+IGNoZWNrIG9ubHkgdGhlIGxhc3QgcGFydFxuXHRcdFx0XHRcdGl0ZW0ua2V5LnNsaWNlKGl0ZW0ua2V5Lmxhc3RJbmRleE9mKFwiOjpcIikgKyAyKSA9PT1cblx0XHRcdFx0XHRcdGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0ua2V5LnNsaWNlKGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0ua2V5Lmxhc3RJbmRleE9mKFwiOjpcIikgKyAyKSlcblx0XHRcdCkge1xuXHRcdFx0XHRhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucy5wdXNoKGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0pO1xuXHRcdFx0XHRpKys7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGN1c3RvbUl0ZW0pIHtcblx0XHRcdFx0XHRpZiAoaXRlbS5rZXkgPT09IGN1c3RvbUl0ZW0ua2V5KSB7XG5cdFx0XHRcdFx0XHRhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucy5wdXNoKGN1c3RvbUl0ZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0YWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnMgPSBoZWFkZXJmYWNldFN1YlNlY3Rpb25zO1xuXHR9XG5cdGNvbnN0IGhlYWRlclNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uID0ge1xuXHRcdGlkOiBlZGl0YWJsZUhlYWRlclNlY3Rpb25JRCxcblx0XHRrZXk6IFwiRWRpdGFibGVIZWFkZXJDb250ZW50XCIsXG5cdFx0dGl0bGU6IFwie3NhcC5mZS5pMThuPlRfQ09NTU9OX09CSkVDVF9QQUdFX0hFQURFUl9TRUNUSU9OfVwiLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKFVJLklzRWRpdGFibGUpLFxuXHRcdHN1YlNlY3Rpb25zOiBhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9uc1xuXHR9O1xuXHRyZXR1cm4gaGVhZGVyU2VjdGlvbjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVmaW5pdGlvbiBmb3IgYSBzZWN0aW9uIGJhc2VkIG9uIHRoZSBGYWNldCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBBbGwgc2VjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbnNGcm9tQW5ub3RhdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBPYmplY3RQYWdlU2VjdGlvbltdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBvYmplY3RQYWdlU2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10gPVxuXHRcdGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5GYWNldHM/Lm1hcCgoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzKSA9PlxuXHRcdFx0Z2V0U2VjdGlvbkZyb21Bbm5vdGF0aW9uKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dClcblx0XHQpIHx8IFtdO1xuXHRyZXR1cm4gb2JqZWN0UGFnZVNlY3Rpb25zO1xufVxuXG4vKipcbiAqIENoZWNrIG1hbmlmZXN0IGZvciBzZXR0aW5nICd1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcycuXG4gKiBJZiB0aGlzIHNldHRpbmcgaXMgdHJ1ZSwgdGhlbiB0aGUgbGFiZWwgb2YgdGhlIHNpbmdsZSB0ZXh0LWFyZWEgZmllbGQgaW4gYSBmb3JtIGNvbnRhaW5lciB3aWxsIGJlIGhpZGRlbi5cbiAqIEBwYXJhbSBtYW5pZmVzdFdyYXBwZXJcbiAqIEBwYXJhbSBzZWN0aW9uS2V5XG4gKiBAcmV0dXJucyBJZiB0aGUgZm9ybSBlbGVtZW50J3MgbGFiZWwgbmVlZHMgdG8gYmUgaGlkZGVuLlxuICovXG5mdW5jdGlvbiBnZXRVc2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyhtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlciwgc2VjdGlvbktleTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGNvbnN0IHNlY3Rpb25zSW5NYW5pZmVzdCA9IG1hbmlmZXN0V3JhcHBlci5nZXRTZWN0aW9ucygpO1xuXHRjb25zdCBzZWN0aW9uU2V0dGluZ3MgPSBzZWN0aW9uc0luTWFuaWZlc3Q/LltzZWN0aW9uS2V5XTtcblx0cmV0dXJuIHNlY3Rpb25TZXR0aW5ncz8udXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMgPz8gZmFsc2U7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFubm90YXRpb24gYmFzZWQgc2VjdGlvbi5cbiAqIEBwYXJhbSBmYWNldFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHNlY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2V0U2VjdGlvbkZyb21Bbm5vdGF0aW9uKGZhY2V0OiBGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBPYmplY3RQYWdlU2VjdGlvbiB7XG5cdGNvbnN0IHNlY3Rpb25JRCA9IGdldFNlY3Rpb25JRChmYWNldCk7XG5cdGNvbnN0IHNlY3Rpb25LZXkgPSBnZXRTZWN0aW9uS2V5KGZhY2V0LCBzZWN0aW9uSUQpO1xuXHQvLyBTZXQgYWJzb2x1dGUgYmluZGluZyBwYXRoIGZvciBTaW5nbGV0b24gcmVmZXJlbmNlcywgb3RoZXJ3aXNlIHRoZSBjb25maWd1cmVkIGFubm90YXRpb24gcGF0aCBpdHNlbGYuXG5cdGNvbnN0IGhpZGRlbkV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sIFtdLCBmYWxzZSwgKHBhdGg6IHN0cmluZykgPT5cblx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIFtdKVxuXHQpO1xuXHRjb25zdCB1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyA9IGdldFVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzKGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCksIHNlY3Rpb25LZXkpO1xuXHRjb25zdCBzZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbiA9IHtcblx0XHRpZDogc2VjdGlvbklELFxuXHRcdGtleTogc2VjdGlvbktleSxcblx0XHR0aXRsZTogZmFjZXQuTGFiZWwgPyBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmFjZXQuTGFiZWwpKSA6IHVuZGVmaW5lZCxcblx0XHRzaG93VGl0bGU6ICEhZmFjZXQuTGFiZWwsXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKGhpZGRlbkV4cHJlc3Npb24sIHRydWUpKSksXG5cdFx0c3ViU2VjdGlvbnM6IGNyZWF0ZVN1YlNlY3Rpb25zKFtmYWNldF0sIGNvbnZlcnRlckNvbnRleHQsIHVuZGVmaW5lZCwgdXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMpLFxuXHRcdHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzOiB1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3Rlc1xuXHR9O1xuXHRyZXR1cm4gc2VjdGlvbjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHNlY3Rpb24gZGVmaW5pdGlvbnMgYmFzZWQgb24gdGhlIG1hbmlmZXN0IGRlZmluaXRpb25zLlxuICogQHBhcmFtIG1hbmlmZXN0U2VjdGlvbnMgVGhlIHNlY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIHNlY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKi9cbmZ1bmN0aW9uIGdldFNlY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRtYW5pZmVzdFNlY3Rpb25zOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RTZWN0aW9uPixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU2VjdGlvbj4ge1xuXHRjb25zdCBzZWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24+ID0ge307XG5cdE9iamVjdC5rZXlzKG1hbmlmZXN0U2VjdGlvbnMpLmZvckVhY2goKG1hbmlmZXN0U2VjdGlvbktleSkgPT4ge1xuXHRcdHNlY3Rpb25zW21hbmlmZXN0U2VjdGlvbktleV0gPSBnZXRTZWN0aW9uRnJvbU1hbmlmZXN0KG1hbmlmZXN0U2VjdGlvbnNbbWFuaWZlc3RTZWN0aW9uS2V5XSwgbWFuaWZlc3RTZWN0aW9uS2V5LCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0fSk7XG5cdHJldHVybiBzZWN0aW9ucztcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBtYW5pZmVzdC1iYXNlZCBjdXN0b20gc2VjdGlvbi5cbiAqIEBwYXJhbSBjdXN0b21TZWN0aW9uRGVmaW5pdGlvblxuICogQHBhcmFtIHNlY3Rpb25LZXlcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgY3VycmVudCBjdXN0b20gc2VjdGlvblxuICovXG5mdW5jdGlvbiBnZXRTZWN0aW9uRnJvbU1hbmlmZXN0KFxuXHRjdXN0b21TZWN0aW9uRGVmaW5pdGlvbjogTWFuaWZlc3RTZWN0aW9uLFxuXHRzZWN0aW9uS2V5OiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24ge1xuXHRjb25zdCBjdXN0b21TZWN0aW9uSUQgPSBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi5pZCA/IGdldEN1c3RvbVNlY3Rpb25JRChjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi5pZCkgOiBnZXRDdXN0b21TZWN0aW9uSUQoc2VjdGlvbktleSk7XG5cdGxldCBwb3NpdGlvbjogUG9zaXRpb24gfCB1bmRlZmluZWQgPSBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi5wb3NpdGlvbjtcblx0aWYgKCFwb3NpdGlvbikge1xuXHRcdHBvc2l0aW9uID0ge1xuXHRcdFx0cGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXJcblx0XHR9O1xuXHR9XG5cdGxldCBtYW5pZmVzdFN1YlNlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdFN1YlNlY3Rpb24+O1xuXHRpZiAoIWN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnN1YlNlY3Rpb25zKSB7XG5cdFx0Ly8gSWYgdGhlcmUgaXMgbm8gc3ViU2VjdGlvbiBkZWZpbmVkLCB3ZSBhZGQgdGhlIGNvbnRlbnQgb2YgdGhlIGN1c3RvbSBzZWN0aW9uIGFzIHN1YnNlY3Rpb25zXG5cdFx0Ly8gYW5kIG1ha2Ugc3VyZSB0byBzZXQgdGhlIHZpc2liaWxpdHkgdG8gJ3RydWUnLCBhcyB0aGUgYWN0dWFsIHZpc2liaWxpdHkgaXMgaGFuZGxlZCBieSB0aGUgc2VjdGlvbiBpdHNlbGZcblx0XHRtYW5pZmVzdFN1YlNlY3Rpb25zID0ge1xuXHRcdFx0W3NlY3Rpb25LZXldOiB7XG5cdFx0XHRcdC4uLmN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLFxuXHRcdFx0XHRwb3NpdGlvbjogdW5kZWZpbmVkLFxuXHRcdFx0XHR2aXNpYmxlOiBcInRydWVcIixcblx0XHRcdFx0YXBwbHlTdGF0ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRyZXRyaWV2ZVN0YXRlOiB1bmRlZmluZWRcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdG1hbmlmZXN0U3ViU2VjdGlvbnMgPSBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi5zdWJTZWN0aW9ucztcblx0fVxuXHRjb25zdCBzdWJTZWN0aW9ucyA9IGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zKG1hbmlmZXN0U3ViU2VjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdGNvbnN0IGN1c3RvbVNlY3Rpb246IEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uID0ge1xuXHRcdGlkOiBjdXN0b21TZWN0aW9uSUQsXG5cdFx0a2V5OiBzZWN0aW9uS2V5LFxuXHRcdHRpdGxlOiBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi50aXRsZSxcblx0XHRzaG93VGl0bGU6ICEhY3VzdG9tU2VjdGlvbkRlZmluaXRpb24udGl0bGUsXG5cdFx0dmlzaWJsZTogY3VzdG9tU2VjdGlvbkRlZmluaXRpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkID8gY3VzdG9tU2VjdGlvbkRlZmluaXRpb24udmlzaWJsZSA6IFwidHJ1ZVwiLFxuXHRcdHBvc2l0aW9uOiBwb3NpdGlvbixcblx0XHRzdWJTZWN0aW9uczogc3ViU2VjdGlvbnMsXG5cdFx0b25TZWN0aW9uTG9hZGVkOiBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi5vblNlY3Rpb25Mb2FkZWQsXG5cdFx0YXBwbHlTdGF0ZTogY3VzdG9tU2VjdGlvbkRlZmluaXRpb24uYXBwbHlTdGF0ZSxcblx0XHRyZXRyaWV2ZVN0YXRlOiBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi5yZXRyaWV2ZVN0YXRlXG5cdH07XG5cdHJldHVybiBjdXN0b21TZWN0aW9uO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgT2JqZWN0UGFnZSBoZWFkZXIgYWN0aW9ucyAoYm90aCB0aGUgZGVmYXVsdCBvbmVzIGFuZCB0aGUgY3VzdG9tIG9uZXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gY2FwYWJpbGl0aWVzXG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhpcyBPYmplY3RQYWdlIGhlYWRlclxuICovXG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyQWN0aW9ucyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRjYXBhYmlsaXRpZXM/OiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1xuKTogQ29tYmluZWRBY3Rpb24ge1xuXHQvLyAxLiBHZXQgYWN0aW9ucyBmcm9tIGFubm90YXRpb25zXG5cdGNvbnN0IGFubm90YXRpb25IZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBjYXBhYmlsaXRpZXMpO1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBhY3Rpb25PdmVyd3JpdGVDb25maWc6IE92ZXJyaWRlVHlwZUFjdGlvbiA9IHtcblx0XHRpc05hdmlnYWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRlbmFibGVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGNvbW1hbmQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cG9zaXRpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0bWVudTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwcmlvcml0eTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRncm91cDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRvdmVyZmxvd0dyb3VwOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGRpc2FibGVTdHJpY3RIYW5kbGluZzogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9O1xuXHQvLyAyLiBHZXQgYWN0aW9ucyBmcm9tIG1hbmlmZXN0XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0bWFuaWZlc3RXcmFwcGVyLmdldEhlYWRlckFjdGlvbnMoKSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGFubm90YXRpb25IZWFkZXJBY3Rpb25zLFxuXHRcdHVuZGVmaW5lZCxcblx0XHR1bmRlZmluZWQsXG5cdFx0Z2V0SGlkZGVuSGVhZGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KVxuXHQpO1xuXHQvLyAzLiBHZXQgYWxsIGFubm90YXRpb24gbWVudSBpdGVtc1xuXHRjb25zdCBhbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zID0gZ2V0QW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyhhbm5vdGF0aW9uSGVhZGVyQWN0aW9ucyk7XG5cdC8vIDQuIEZpbmQgbWFuaWZlc3QgYWN0aW9ucyB3aGljaCBvdmVycmlkZSBhbnkgYW5ub3RhdGlvbiBtZW51IGl0ZW1zXG5cdGNvbnN0IG1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zID0gZ2V0TWF0Y2hpbmdNYW5pZmVzdEFjdGlvbihhbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zLCBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyk7XG5cdC8vIDUuIEdldCBvdmVycmlkZGVuIGFubm90YXRpb24gbWVudSBpdGVtc1xuXHRjb25zdCBvdmVyd3JpdHRlbk1lbnVBY3Rpb25JdGVtcyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKGFubm90YXRpb25NZW51QWN0aW9uSXRlbXMsIG1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zLCBhY3Rpb25PdmVyd3JpdGVDb25maWcpO1xuXHQvLyA2LiBPdmVycmlkZSBhbGwgYWN0aW9uc1xuXHRsZXQgaGVhZGVyQWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKGFubm90YXRpb25IZWFkZXJBY3Rpb25zLCBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucywgYWN0aW9uT3ZlcndyaXRlQ29uZmlnKSBhcyBDdXN0b21BY3Rpb25bXTtcblx0Ly8gNy4gUmVwbGFjZSBvcmlnaW5hbCBtZW51IGl0ZW1zIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBvdmVycmlkZGVuIG1lbnUgaXRlbXNcblx0cHJlcGFyZU1lbnVBY3Rpb25zKGhlYWRlckFjdGlvbnMsIG92ZXJ3cml0dGVuTWVudUFjdGlvbkl0ZW1zKTtcblx0Ly8gOC4gUmVtb3ZlIGR1cGxpY2F0ZSBhY3Rpb25zIHdoaWNoIGFyZSBtZW51IGl0ZW1zXG5cdGhlYWRlckFjdGlvbnMgPSByZW1vdmVEdXBsaWNhdGVBY3Rpb25zKGhlYWRlckFjdGlvbnMpO1xuXHQvLyA5LiBIaWRlIG1lbnVzIHdoZXJlIGFsbCBtZW51IGl0ZW1zIGFyZSBoaWRkZW5cblx0aGVhZGVyQWN0aW9ucyA9IGdldFZpc2liaWxpdHlFbmFibGVtZW50TWVudUFjdGlvbnMoaGVhZGVyQWN0aW9ucyk7XG5cdC8vIDEwLiBBcHBseSBwcmltYXJ5IGFjdGlvbiBvdmVyZmxvdyBwcm90ZWN0aW9uXG5cdGhlYWRlckFjdGlvbnMgPSBBY3Rpb25VdGlsaXRpZXMuZW5zdXJlUHJpbWFyeUFjdGlvbk5ldmVyT3ZlcmZsb3dzKGhlYWRlckFjdGlvbnMpIGFzIEN1c3RvbUFjdGlvbltdO1xuXHQvLyAxMC4gQWRkIHRvb2xiYXIgc2VwYXJhdG9ycyBpbiBjYXNlIG9mIGdyb3VwZWQgYWN0aW9uc1xuXHRjb25zdCBvdmVyZmxvd0dyb3Vwc0NvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJPdmVyZmxvd0dyb3VwcygpO1xuXHRoZWFkZXJBY3Rpb25zID0gYWRkU2VwYXJhdG9ycyhoZWFkZXJBY3Rpb25zLCBvdmVyZmxvd0dyb3Vwc0NvbmZpZykgYXMgQ3VzdG9tQWN0aW9uW107XG5cdHJldHVybiB7XG5cdFx0YWN0aW9uczogaGVhZGVyQWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogbWFuaWZlc3RBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdH07XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgT2JqZWN0UGFnZSBmb290ZXIgYWN0aW9ucyB3aGljaCBpbmNsdWRlcyB0aGUgZGVmYXVsdCBhY3Rpb25zIGFuZCB0aGUgY3VzdG9tIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuanNvbiBmaWxlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gY2FwYWJpbGl0aWVzIFRoZSBwcmVkZWZpbmVkIGVudmlyb25tZW50IGNhcGFiaWxpdGllc1xuICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGFjdGlvbnMgZm9yIHRoaXMgT2JqZWN0UGFnZSBmb290ZXJcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZvb3RlckFjdGlvbnMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0Y2FwYWJpbGl0aWVzPzogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IENvbWJpbmVkQWN0aW9uIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgYUFubm90YXRpb25Gb290ZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBnZXRGb290ZXJEZWZhdWx0QWN0aW9ucyhtYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0xldmVsKCksIGNvbnZlcnRlckNvbnRleHQsIGNhcGFiaWxpdGllcyk7XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RXcmFwcGVyLmdldEZvb3RlckFjdGlvbnMoKSwgY29udmVydGVyQ29udGV4dCwgYUFubm90YXRpb25Gb290ZXJBY3Rpb25zKTtcblxuXHRjb25zdCBhY3Rpb25PdmVyd3JpdGVDb25maWc6IE92ZXJyaWRlVHlwZUFjdGlvbiA9IHtcblx0XHRpc05hdmlnYWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRlbmFibGVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGNvbW1hbmQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cG9zaXRpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cHJpb3JpdHk6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Z3JvdXA6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0b3ZlcmZsb3dHcm91cDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRkaXNhYmxlU3RyaWN0SGFuZGxpbmc6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fTtcblx0bGV0IGZvb3RlckFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLCBhY3Rpb25PdmVyd3JpdGVDb25maWcpO1xuXHQvLyBBcHBseSBwcmltYXJ5IGFjdGlvbiBvdmVyZmxvdyBwcm90ZWN0aW9uXG5cdGZvb3RlckFjdGlvbnMgPSBBY3Rpb25VdGlsaXRpZXMuZW5zdXJlUHJpbWFyeUFjdGlvbk5ldmVyT3ZlcmZsb3dzKGZvb3RlckFjdGlvbnMpO1xuXHQvLyBBZGQgdG9vbGJhciBzZXBhcmF0b3JzIGluIGNhc2Ugb2YgZ3JvdXBlZCBhY3Rpb25zXG5cdGNvbnN0IG92ZXJmbG93R3JvdXBzQ29uZmlnID0gbWFuaWZlc3RXcmFwcGVyLmdldEZvb3Rlck92ZXJmbG93R3JvdXBzKCk7XG5cdGZvb3RlckFjdGlvbnMgPSBhZGRTZXBhcmF0b3JzKGZvb3RlckFjdGlvbnMsIG92ZXJmbG93R3JvdXBzQ29uZmlnKSBhcyBDdXN0b21BY3Rpb25bXTtcblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zOiBmb290ZXJBY3Rpb25zLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiBtYW5pZmVzdEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0fTtcbn07XG5cbmZ1bmN0aW9uIF9nZXRTdWJTZWN0aW9uVmlzdWFsaXphdGlvbihzdWJTZWN0aW9uOiBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24pOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRyZXR1cm4gKHN1YlNlY3Rpb24/LnByZXNlbnRhdGlvbj8udmlzdWFsaXphdGlvbnNbMF0gPyBzdWJTZWN0aW9uLnByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSA6IHVuZGVmaW5lZCkgYXMgVGFibGVWaXN1YWxpemF0aW9uO1xufVxuXG5mdW5jdGlvbiBfaXNGYWNldEhhc05vblJlc3BvbnNpdmVUYWJsZVZpc2libGUoXG5cdGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLFxuXHRzdWJTZWN0aW9uVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uXG4pOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgJiZcblx0XHRkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24/LnByZXNlbnRhdGlvbj8udmlzdWFsaXphdGlvbnMgJiZcblx0XHRzdWJTZWN0aW9uVmlzdWFsaXphdGlvbj8udHlwZSA9PT0gXCJUYWJsZVwiICYmXG5cdFx0c3ViU2VjdGlvblZpc3VhbGl6YXRpb24/LmNvbnRyb2w/LnR5cGUgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCJcblx0KTtcbn1cblxuZnVuY3Rpb24gX3NldE5vblJlc3BvbnNpdmVUYWJsZVZpc3VhbGl6YXRpb25JbmZvcm1hdGlvbihcblx0c2VjdGlvbnM6IE9iamVjdFBhZ2VTZWN0aW9uW10sXG5cdGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLFxuXHRzdWJTZWN0aW9uVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRzZWN0aW9uTGF5b3V0OiBzdHJpbmdcbik6IHZvaWQge1xuXHRpZiAoX2lzRmFjZXRIYXNOb25SZXNwb25zaXZlVGFibGVWaXNpYmxlKGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiwgc3ViU2VjdGlvblZpc3VhbGl6YXRpb24pKSB7XG5cdFx0Y29uc3QgdGFibGVDb250cm9sQ29uZmlndXJhdGlvbiA9IHN1YlNlY3Rpb25WaXN1YWxpemF0aW9uLmNvbnRyb2w7XG5cdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLmRhdGFWaXN1YWxpemF0aW9uT3B0aW9ucyA/Pz0ge307XG5cdFx0aWYgKCEoc2VjdGlvbkxheW91dCA9PT0gXCJQYWdlXCIgJiYgc2VjdGlvbnMubGVuZ3RoID4gMSkpIHtcblx0XHRcdGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbi5kYXRhVmlzdWFsaXphdGlvbk9wdGlvbnNbXCJyb3dDb3VudE1vZGVcIl0gPSBcIkF1dG9cIjtcblx0XHRcdHRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24ucm93Q291bnRNb2RlID0gXCJBdXRvXCI7XG5cdFx0fVxuXHRcdGlmIChzZWN0aW9uTGF5b3V0ICE9PSBcIlRhYnNcIikge1xuXHRcdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLmRhdGFWaXN1YWxpemF0aW9uT3B0aW9uc1tcInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0XCJdID0gZmFsc2U7XG5cdFx0XHR0YWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLnVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gZmFsc2U7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIF9zZXROb25SZXNwb25zaXZlVGFibGVXaXRoTWl4RmFjZXRzSW5mb3JtYXRpb24oc3ViU2VjdGlvbjogTWl4ZWRTdWJTZWN0aW9uLCBzZWN0aW9uTGF5b3V0OiBzdHJpbmcpOiB2b2lkIHtcblx0Y29uc3QgZmlyc3RTZWN0aW9uID0gc3ViU2VjdGlvbj8uY29udGVudD8ubGVuZ3RoID09PSAxID8gc3ViU2VjdGlvbi5jb250ZW50WzBdIDogdW5kZWZpbmVkO1xuXHRpZiAoZmlyc3RTZWN0aW9uPy50eXBlID09PSBTdWJTZWN0aW9uVHlwZS5EYXRhVmlzdWFsaXphdGlvbikge1xuXHRcdGNvbnN0IHRhYmxlQ29udHJvbCA9IChmaXJzdFNlY3Rpb24ucHJlc2VudGF0aW9uPy52aXN1YWxpemF0aW9uc1swXSBhcyBUYWJsZVZpc3VhbGl6YXRpb24pLmNvbnRyb2w7XG5cdFx0aWYgKHRhYmxlQ29udHJvbC50eXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0XHRmaXJzdFNlY3Rpb24uZGF0YVZpc3VhbGl6YXRpb25PcHRpb25zID8/PSB7fTtcblx0XHRcdGZpcnN0U2VjdGlvbi5kYXRhVmlzdWFsaXphdGlvbk9wdGlvbnNbXCJyb3dDb3VudE1vZGVcIl0gPSBcIkF1dG9cIjtcblx0XHRcdHRhYmxlQ29udHJvbC5yb3dDb3VudE1vZGUgPSBcIkF1dG9cIjtcblx0XHRcdGlmIChzZWN0aW9uTGF5b3V0ICE9PSBcIlRhYnNcIikge1xuXHRcdFx0XHRmaXJzdFNlY3Rpb24uZGF0YVZpc3VhbGl6YXRpb25PcHRpb25zW1widXNlQ29uZGVuc2VkVGFibGVMYXlvdXRcIl0gPSBmYWxzZTtcblx0XHRcdFx0dGFibGVDb250cm9sLnVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogU2V0IHRoZSBOb25SZXNwb25zaXZlIFRhYmxlIChncmlkLCB0cmVlLCBhbmFseXRpY2FsKSBkaXNwbGF5IGluZm9ybWF0aW9uLlxuICogQHBhcmFtIHNlY3Rpb25zIFRoZSBPYmplY3RQYWdlIHNlY3Rpb25zXG4gKiBAcGFyYW0gc2VjdGlvbiBUaGUgY3VycmVudCBPYmplY3RQYWdlIHNlY3Rpb24gcHJvY2Vzc2VkXG4gKiBAcGFyYW0gc2VjdGlvbkxheW91dFxuICovXG5mdW5jdGlvbiBfc2V0Tm9uUmVzcG9uc2l2ZVRhYmxlU3ViU2VjdGlvbkNvbnRyb2xDb25maWd1cmF0aW9uKFxuXHRzZWN0aW9uczogT2JqZWN0UGFnZVNlY3Rpb25bXSxcblx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdHNlY3Rpb25MYXlvdXQ6IHN0cmluZ1xuKTogdm9pZCB7XG5cdGxldCBzdWJTZWN0aW9uVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uO1xuXHRjb25zdCBzdWJTZWN0aW9ucyA9IHNlY3Rpb24uc3ViU2VjdGlvbnM7XG5cdGlmIChzdWJTZWN0aW9ucy5sZW5ndGggPT09IDEpIHtcblx0XHRjb25zdCBzdWJTZWN0aW9uID0gc3ViU2VjdGlvbnNbMF07XG5cdFx0c3dpdGNoIChzdWJTZWN0aW9uLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJEYXRhVmlzdWFsaXphdGlvblwiOlxuXHRcdFx0XHRzdWJTZWN0aW9uVmlzdWFsaXphdGlvbiA9IF9nZXRTdWJTZWN0aW9uVmlzdWFsaXphdGlvbihzdWJTZWN0aW9uKTtcblx0XHRcdFx0X3NldE5vblJlc3BvbnNpdmVUYWJsZVZpc3VhbGl6YXRpb25JbmZvcm1hdGlvbihzZWN0aW9ucywgc3ViU2VjdGlvbiwgc3ViU2VjdGlvblZpc3VhbGl6YXRpb24sIHNlY3Rpb25MYXlvdXQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJNaXhlZFwiOlxuXHRcdFx0XHRfc2V0Tm9uUmVzcG9uc2l2ZVRhYmxlV2l0aE1peEZhY2V0c0luZm9ybWF0aW9uKHN1YlNlY3Rpb24sIHNlY3Rpb25MYXlvdXQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblx0X3JlbW92ZUNvbmRlbnNlZEZyb21TdWJTZWN0aW9ucyhzdWJTZWN0aW9ucyk7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBjb25kZW5zZSBsYXlvdXQgbW9kZSBmcm9tIHRoZSBzdWJzZWN0aW9ucy5cbiAqIEBwYXJhbSBzdWJTZWN0aW9ucyBUaGUgc3ViU2VjdGlvbnMgd2hlcmUgd2UgbmVlZCB0byByZW1vdmUgdGhlIGNvbmRlbnNlZCBsYXlvdXRcbiAqL1xuZnVuY3Rpb24gX3JlbW92ZUNvbmRlbnNlZEZyb21TdWJTZWN0aW9ucyhzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSk6IHZvaWQge1xuXHRsZXQgZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uOiBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb247XG5cdC8vIFdlIGNoZWNrIGluIGVhY2ggc3Vic2VjdGlvbiBpZiB0aGVyZSBpcyB2aXN1YWxpemF0aW9uc1xuXHRzdWJTZWN0aW9ucy5mb3JFYWNoKChzdWJTZWN0aW9uKSA9PiB7XG5cdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uID0gc3ViU2VjdGlvbiBhcyBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb247XG5cdFx0aWYgKGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbj8ucHJlc2VudGF0aW9uPy52aXN1YWxpemF0aW9ucykge1xuXHRcdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uPy5wcmVzZW50YXRpb24/LnZpc3VhbGl6YXRpb25zLmZvckVhY2goKHNpbmdsZVZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdFx0aWYgKHNpbmdsZVZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHRzaW5nbGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudXNlQ29uZGVuc2VkVGFibGVMYXlvdXQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8vIFRoZW4gd2UgY2hlY2sgdGhlIGNvbnRlbnQgb2YgdGhlIHN1YnNlY3Rpb24sIGFuZCBpbiBlYWNoIGNvbnRlbnQgd2UgY2hlY2sgaWYgdGhlcmUgaXMgYSB0YWJsZSB0byBzZXQgaXRzIGNvbmRlbnNlZCBsYXlvdXQgdG8gZmFsc2Vcblx0XHRpZiAoZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uPy5jb250ZW50KSB7XG5cdFx0XHRkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24uY29udGVudC5mb3JFYWNoKChzaW5nbGVDb250ZW50KSA9PiB7XG5cdFx0XHRcdChzaW5nbGVDb250ZW50IGFzIERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbikucHJlc2VudGF0aW9uPy52aXN1YWxpemF0aW9ucy5mb3JFYWNoKChzaW5nbGVWaXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHNpbmdsZVZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHRcdHNpbmdsZVZpc3VhbGl6YXRpb24uY29udHJvbC51c2VDb25kZW5zZWRUYWJsZUxheW91dCA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufVxuLyoqXG4gKiBSZXRyaWV2ZXMgYW5kIG1lcmdlcyB0aGUgT2JqZWN0UGFnZSBzZWN0aW9ucyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uIGFuZCBpbiB0aGUgbWFuaWZlc3QuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHNlY3Rpb25zLlxuICovXG5cbmV4cG9ydCBjb25zdCBnZXRTZWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBPYmplY3RQYWdlU2VjdGlvbltdIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3Qgc2VjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRnZXRTZWN0aW9uc0Zyb21Bbm5vdGF0aW9uKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldFNlY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRTZWN0aW9ucygpLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHR7XG5cdFx0XHR0aXRsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRzdWJTZWN0aW9uczoge1xuXHRcdFx0XHRhY3Rpb25zOiBPdmVycmlkZVR5cGUubWVyZ2UsXG5cdFx0XHRcdHRpdGxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0XHRzaWRlQ29udGVudDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdFx0b2JqZWN0UGFnZUxhenlMb2FkZXJFbmFibGVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xuXHQvLyBMZXZlbCBBZGp1c3RtZW50IGZvciBcIk1peGVkXCIgQ29sbGVjdGlvbiBGYWNldHM6XG5cdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblx0Ly8gVGhlIG1hbmlmZXN0IGRlZmluaXRpb24gb2YgY3VzdG9tIHNpZGUgY29udGVudHMgYW5kIGFjdGlvbnMgc3RpbGwgbmVlZHMgdG8gYmUgYWxpZ25lZCBmb3IgXCJNaXhlZFwiIGNvbGxlY3Rpb24gZmFjZXRzOlxuXHQvLyBDb2xsZWN0aW9uIGZhY2V0cyBjb250YWluaW5nIHRhYmxlcyBnYWluIGFuIGV4dHJhIHJlZmVyZW5jZSBmYWNldCBhcyBhIHRhYmxlIHdyYXBwZXIgdG8gZW5zdXJlLCB0aGF0IHRoZSB0YWJsZSBpcyBhbHdheXNcblx0Ly8gcGxhY2VkIGluIGFuIG93biBpbmRpdmlkdWFsIE9iamVjdCBQYWdlIEJsb2NrOyB0aGlzIGFkZGl0aW9uYWwgaGllcmFyY2h5IGxldmVsIGlzIHVua25vd24gdG8gYXBwIGRldmVsb3BlcnMsIHdoaWNoIGFyZVxuXHQvLyBkZWZpbmluZyB0aGUgc2lkZSBjb250ZW50IGFuZCBhY3Rpb25zIGluIHRoZSBtYW5pZmVzdCBhdCBjb2xsZWN0aW9uIGZhY2V0IGxldmVsOyBub3csIHNpbmNlIHRoZSBzaWRlQ29udGVudCBhbHdheXMgbmVlZHNcblx0Ly8gdG8gYmUgYXNzaWduZWQgdG8gYSBibG9jaywgYW5kIGFjdGlvbnMgYWx3YXlzIG5lZWQgdG8gYmUgYXNzaWduZWQgdG8gYSBmb3JtLFxuXHQvLyB3ZSBuZWVkIHRvIG1vdmUgdGhlIHNpZGVDb250ZW50IGFuZCBhY3Rpb25zIGZyb20gYSBtaXhlZCBjb2xsZWN0aW9uIGZhY2V0IHRvIGl0cyBjb250ZW50LlxuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cdHNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKHNlY3Rpb24pIHtcblx0XHRfc2V0Tm9uUmVzcG9uc2l2ZVRhYmxlU3ViU2VjdGlvbkNvbnRyb2xDb25maWd1cmF0aW9uKHNlY3Rpb25zLCBzZWN0aW9uLCBtYW5pZmVzdFdyYXBwZXIuZ2V0U2VjdGlvbkxheW91dCgpKTtcblx0XHRzZWN0aW9uLnN1YlNlY3Rpb25zPy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJTZWN0aW9uKSB7XG5cdFx0XHRzdWJTZWN0aW9uLnRpdGxlID0gc3ViU2VjdGlvbi50aXRsZSA9PT0gXCJ1bmRlZmluZWRcIiA/IHVuZGVmaW5lZCA6IHN1YlNlY3Rpb24udGl0bGU7XG5cdFx0XHRpZiAoc3ViU2VjdGlvbi50eXBlID09PSBcIk1peGVkXCIpIHtcblx0XHRcdFx0c3ViU2VjdGlvbi5jb250ZW50Py5mb3JFYWNoKChjb250ZW50KSA9PiB7XG5cdFx0XHRcdFx0Y29udGVudC5vYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQgPSBzdWJTZWN0aW9uLm9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc3ViU2VjdGlvbi50eXBlID09PSBcIk1peGVkXCIgJiYgc3ViU2VjdGlvbi5jb250ZW50Py5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgZmlyc3RGb3JtID0gc3ViU2VjdGlvbi5jb250ZW50LmZpbmQoXG5cdFx0XHRcdFx0KGVsZW1lbnQpID0+IChlbGVtZW50IGFzIEZvcm1TdWJTZWN0aW9uKS50eXBlID09PSBTdWJTZWN0aW9uVHlwZS5Gb3JtXG5cdFx0XHRcdCkgYXMgRm9ybVN1YlNlY3Rpb247XG5cblx0XHRcdFx0Ly8gMS4gQ29weSBzaWRlQ29udGVudCB0byB0aGUgU3ViU2VjdGlvbidzIGZpcnN0IGZvcm07IG9yIC0tIGlmIHVuYXZhaWxhYmxlIC0tIHRvIGl0cyBmaXJzdCBjb250ZW50XG5cdFx0XHRcdC8vIDIuIENvcHkgYWN0aW9ucyB0byB0aGUgZmlyc3QgZm9ybSBvZiB0aGUgU3ViU2VjdGlvbidzIGNvbnRlbnRcblx0XHRcdFx0Ly8gMy4gRGVsZXRlIHNpZGVDb250ZW50IC8gYWN0aW9ucyBhdCB0aGUgKGludmFsaWQpIG1hbmlmZXN0IGxldmVsXG5cblx0XHRcdFx0aWYgKHN1YlNlY3Rpb24uc2lkZUNvbnRlbnQpIHtcblx0XHRcdFx0XHRpZiAoZmlyc3RGb3JtKSB7XG5cdFx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhIGZvcm0sIGl0IGFsd2F5cyBuZWVkcyB0byBiZSBhdHRhY2hlZCB0byB0aGUgZm9ybSwgYXMgdGhlIGZvcm0gaW5oZXJpdHMgdGhlIElEIG9mIHRoZSBTdWJTZWN0aW9uXG5cdFx0XHRcdFx0XHRmaXJzdEZvcm0uc2lkZUNvbnRlbnQgPSBzdWJTZWN0aW9uLnNpZGVDb250ZW50O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzdWJTZWN0aW9uLmNvbnRlbnRbMF0uc2lkZUNvbnRlbnQgPSBzdWJTZWN0aW9uLnNpZGVDb250ZW50O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzdWJTZWN0aW9uLnNpZGVDb250ZW50ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGZpcnN0Rm9ybSAmJiAoc3ViU2VjdGlvbiBhcyB1bmtub3duIGFzIEZvcm1TdWJTZWN0aW9uKS5hY3Rpb25zPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRmaXJzdEZvcm0uYWN0aW9ucyA9IChzdWJTZWN0aW9uIGFzIHVua25vd24gYXMgRm9ybVN1YlNlY3Rpb24pLmFjdGlvbnM7XG5cdFx0XHRcdFx0KHN1YlNlY3Rpb24gYXMgdW5rbm93biBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucyA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xuXHRyZXR1cm4gc2VjdGlvbnM7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIE9iamVjdFBhZ2UgaGFzIGhlYWRlciBjb250ZW50LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uIGhlYWRlciBmYWNldFxuICovXG5mdW5jdGlvbiBoYXNIZWFkZXJDb250ZW50KGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IGJvb2xlYW4ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRyZXR1cm4gKFxuXHRcdChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckZhY2V0cyB8fCBbXSkubGVuZ3RoID4gMCB8fFxuXHRcdE9iamVjdC5rZXlzKG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJGYWNldHMoKSkubGVuZ3RoID4gMFxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGhlYWRlciBjb250ZW50LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIERlbGV0ZSBidXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0U2hvd0hlYWRlckNvbnRlbnRFeHByZXNzaW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0IWhhc0hlYWRlckNvbnRlbnQoY29udmVydGVyQ29udGV4dCksXG5cdFx0Y29uc3RhbnQoZmFsc2UpLFxuXHRcdGlmRWxzZShlcXVhbChtYW5pZmVzdFdyYXBwZXIuaXNIZWFkZXJFZGl0YWJsZSgpLCBmYWxzZSksIGNvbnN0YW50KHRydWUpLCBub3QoVUkuSXNFZGl0YWJsZSkpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBoZWFkZXIgY29udGVudC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBEZWxldGUgYnV0dG9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTaG93SGVhZGVyQ29udGVudCA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRTaG93SGVhZGVyQ29udGVudEV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCkpO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIEVhc3lGaWxsIGJ1dHRvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRWFzeUZpbGwgYnV0dG9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFYXN5RmlsbFZpc2libGUgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlTZXQoKSxcblx0XHRlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0aXNVcGRhdGVIaWRkZW4gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oTW9kZWxIZWxwZXIuaXNVcGRhdGVIaWRkZW4oZW50aXR5U2V0LCBlbnRpdHlUeXBlKSk7XG5cdGNvbnN0IHJvb3RFbnRpdHlTZXRQYXRoID0gTW9kZWxIZWxwZXIuZ2V0Um9vdEVudGl0eVNldFBhdGgoY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpKTtcblx0Y29uc3Qgcm9vdENvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PihcIi9cIiArIHJvb3RFbnRpdHlTZXRQYXRoKTtcblx0Y29uc3QgaXNSb290VXBkYXRlSGlkZGVuID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdE1vZGVsSGVscGVyLmlzVXBkYXRlSGlkZGVuKHJvb3RDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpLCByb290Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpXG5cdCk7XG5cdGNvbnN0IGlzRHJhZnRFbmFibGVkID0gTW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRjb25zdCBpc1N0aWNreSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5KGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnN0YXJ0aW5nRW50aXR5U2V0KTtcblx0Ly8gRWFzeUZpbGwgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIG9iamVjdCBwYXRoIGlzIGRyYWZ0IGVuYWJsZWQgYW5kIHN0aWNreVxuXHRpZiAoIWlzRHJhZnRFbmFibGVkICYmICFpc1N0aWNreSkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihmYWxzZSk7XG5cdH1cblx0Y29uc3Qgdmlld0xldmVsID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRWaWV3TGV2ZWwoKTtcblx0Y29uc3QgdXBkYXRhYmxlUHJvcGVydHlQYXRoID0gdmlld0xldmVsID4gMSA/IGVudGl0eVNldD8uYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5VcGRhdGVSZXN0cmljdGlvbnM/LlVwZGF0YWJsZSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNFZGl0RW5hYmxlZCA9IGdldEVkaXRCdXR0b25FbmFibGVkRXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0LCB1cGRhdGFibGVQcm9wZXJ0eVBhdGgsIHZpZXdMZXZlbCk7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRpZkVsc2UoXG5cdFx0XHR2aWV3TGV2ZWwgPiAxLFxuXHRcdFx0YW5kKG5vdChpc1VwZGF0ZUhpZGRlbiksIFVJLklzRWRpdGFibGUsIGlzRWRpdEVuYWJsZWQpLFxuXHRcdFx0YW5kKG5vdChpc1VwZGF0ZUhpZGRlbiksIG5vdChpc1Jvb3RVcGRhdGVIaWRkZW4pLCBpc0VkaXRFbmFibGVkKVxuXHRcdClcblx0KTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBhdmF0YXIgd2hlbiB0aGUgaGVhZGVyIGlzIGluIGV4cGFuZGVkIHN0YXRlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIERlbGV0ZSBidXR0b25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cGFuZGVkSW1hZ2VWaXNpYmxlID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG5vdChnZXRTaG93SGVhZGVyQ29udGVudEV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCkpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0UGFnZSA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRjYXBhYmlsaXRpZXM/OiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1xuKTogT2JqZWN0UGFnZURlZmluaXRpb24ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRsZXQgaGVhZGVyU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGNvbnN0IGVudGl0eVR5cGU6IEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblxuXHQvLyBSZXRyaWV2ZSBhbGwgaGVhZGVyIGZhY2V0cyAoZnJvbSBhbm5vdGF0aW9ucyAmIGN1c3RvbSlcblx0Y29uc3QgaGVhZGVyRmFjZXRzID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0Z2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdChtYW5pZmVzdFdyYXBwZXIuZ2V0SGVhZGVyRmFjZXRzKCkpXG5cdCk7XG5cblx0Ly8gUmV0cmlldmUgdGhlIHBhZ2UgaGVhZGVyIGFjdGlvbnNcblx0Y29uc3QgaGVhZGVyQWN0aW9ucyA9IGdldEhlYWRlckFjdGlvbnMoY29udmVydGVyQ29udGV4dCwgY2FwYWJpbGl0aWVzKTtcblxuXHQvLyBSZXRyaWV2ZSB0aGUgcGFnZSBmb290ZXIgYWN0aW9uc1xuXHRjb25zdCBmb290ZXJBY3Rpb25zID0gZ2V0Rm9vdGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBjYXBhYmlsaXRpZXMpO1xuXG5cdGlmIChtYW5pZmVzdFdyYXBwZXIuaXNIZWFkZXJFZGl0YWJsZSgpICYmIChlbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5IZWFkZXJGYWNldHMgfHwgZW50aXR5VHlwZS5hbm5vdGF0aW9ucy5VST8uSGVhZGVySW5mbykpIHtcblx0XHRoZWFkZXJTZWN0aW9uID0gY3JlYXRlRWRpdGFibGVIZWFkZXJTZWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGhlYWRlckZhY2V0cyk7XG5cdH1cblxuXHRjb25zdCBzZWN0aW9ucyA9IGdldFNlY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdHJldHVybiB7XG5cdFx0dGVtcGxhdGU6IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlLFxuXHRcdGhlYWRlcjoge1xuXHRcdFx0dmlzaWJsZTogbWFuaWZlc3RXcmFwcGVyLmdldFNob3dPYmplY3RQYWdlSGVhZGVyKCksXG5cdFx0XHRzZWN0aW9uOiBoZWFkZXJTZWN0aW9uLFxuXHRcdFx0ZmFjZXRzOiBoZWFkZXJGYWNldHMsXG5cdFx0XHRhY3Rpb25zOiBoZWFkZXJBY3Rpb25zLmFjdGlvbnMsXG5cdFx0XHRlYXN5RmlsbFZpc2libGU6IGdldEVhc3lGaWxsVmlzaWJsZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdHNob3dDb250ZW50OiBnZXRTaG93SGVhZGVyQ29udGVudChjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGhhc0NvbnRlbnQ6IGhhc0hlYWRlckNvbnRlbnQoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRhdmF0YXI6IGdldEF2YXRhcihjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdGV4cGFuZGVkSW1hZ2VWaXNpYmxlOiBnZXRFeHBhbmRlZEltYWdlVmlzaWJsZShjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0c2VjdGlvbnM6IHNlY3Rpb25zLFxuXHRcdGZvb3RlckFjdGlvbnM6IGZvb3RlckFjdGlvbnMuYWN0aW9ucyxcblx0XHRoZWFkZXJDb21tYW5kQWN0aW9uczogaGVhZGVyQWN0aW9ucy5jb21tYW5kQWN0aW9ucyxcblx0XHRmb290ZXJDb21tYW5kQWN0aW9uczogZm9vdGVyQWN0aW9ucy5jb21tYW5kQWN0aW9ucyxcblx0XHRzaG93QW5jaG9yQmFyOiBtYW5pZmVzdFdyYXBwZXIuZ2V0U2hvd0FuY2hvckJhcigpLFxuXHRcdHVzZUljb25UYWJCYXI6IG1hbmlmZXN0V3JhcHBlci51c2VJY29uVGFiQmFyKCksXG5cdFx0dHJhbnNwb3J0U2VsZWN0aW9uOiBtYW5pZmVzdFdyYXBwZXIuZ2V0VHJhbnNwb3J0U2VsZWN0aW9uKClcblx0fTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEyRUEsTUFBTUEsYUFBYSxHQUFHQSxDQUFDQyxlQUEyQixFQUFFQyxRQUFnQixLQUFhO0lBQ2hGLE9BQU9ELGVBQWUsQ0FBQ0UsRUFBRSxFQUFFQyxRQUFRLENBQUMsQ0FBQyxJQUFJSCxlQUFlLENBQUNJLEtBQUssRUFBRUQsUUFBUSxDQUFDLENBQUMsSUFBSUYsUUFBUTtFQUN2RixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNJLDJCQUEyQkEsQ0FDMUNDLGdCQUF5RCxFQUN6REMsZUFBd0MsRUFDcEI7SUFDcEIsTUFBTUMsdUJBQXVCLEdBQUdDLDBCQUEwQixDQUFDLENBQUM7SUFDNUQsTUFBTUMsWUFBWSxHQUFHSixnQkFBZ0IsQ0FBQ0ssYUFBYSxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxFQUFFQyxFQUFFLEVBQUVDLFlBQVk7SUFDbkYsTUFBTUMsc0JBQXNCLEdBQUdMLFlBQVksR0FBR00saUJBQWlCLENBQUNOLFlBQVksRUFBRUosZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtJQUMxRyxNQUFNVyw0QkFBNEIsR0FBR0Msa0NBQWtDLENBQUNaLGdCQUFnQixDQUFDO0lBQ3pGLElBQUlhLDBCQUFrRCxHQUFHLEVBQUU7SUFDM0QsSUFBSUYsNEJBQTRCLENBQUNHLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFD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
|
|
@@ -4,6 +4,7 @@ import type { BindingToolkitExpression, CompiledBindingToolkitExpression } from
|
|
|
4
4
|
import { and, compileExpression, constant, equal, getExpressionFromAnnotation, ifElse, not } from "sap/fe/base/BindingToolkit";
|
|
5
5
|
import type { BaseAction, CombinedAction, CustomAction, OverrideTypeAction } from "sap/fe/core/converters/controls/Common/Action";
|
|
6
6
|
import {
|
|
7
|
+
addSeparators,
|
|
7
8
|
getActionsFromManifest,
|
|
8
9
|
getAnnotationMenuActionItems,
|
|
9
10
|
getMatchingManifestAction,
|
|
@@ -212,7 +213,7 @@ function getSectionFromManifest(
|
|
|
212
213
|
sectionKey: string,
|
|
213
214
|
converterContext: ConverterContext<PageContextPathTarget>
|
|
214
215
|
): CustomObjectPageSection {
|
|
215
|
-
const customSectionID = customSectionDefinition.id
|
|
216
|
+
const customSectionID = customSectionDefinition.id ? getCustomSectionID(customSectionDefinition.id) : getCustomSectionID(sectionKey);
|
|
216
217
|
let position: Position | undefined = customSectionDefinition.position;
|
|
217
218
|
if (!position) {
|
|
218
219
|
position = {
|
|
@@ -274,7 +275,9 @@ export const getHeaderActions = function (
|
|
|
274
275
|
position: OverrideType.overwrite,
|
|
275
276
|
menu: OverrideType.overwrite,
|
|
276
277
|
priority: OverrideType.overwrite,
|
|
277
|
-
group: OverrideType.overwrite
|
|
278
|
+
group: OverrideType.overwrite,
|
|
279
|
+
overflowGroup: OverrideType.overwrite,
|
|
280
|
+
disableStrictHandling: OverrideType.overwrite
|
|
278
281
|
};
|
|
279
282
|
// 2. Get actions from manifest
|
|
280
283
|
const manifestActions = getActionsFromManifest(
|
|
@@ -301,6 +304,9 @@ export const getHeaderActions = function (
|
|
|
301
304
|
headerActions = getVisibilityEnablementMenuActions(headerActions);
|
|
302
305
|
// 10. Apply primary action overflow protection
|
|
303
306
|
headerActions = ActionUtilities.ensurePrimaryActionNeverOverflows(headerActions) as CustomAction[];
|
|
307
|
+
// 10. Add toolbar separators in case of grouped actions
|
|
308
|
+
const overflowGroupsConfig = manifestWrapper.getHeaderOverflowGroups();
|
|
309
|
+
headerActions = addSeparators(headerActions, overflowGroupsConfig) as CustomAction[];
|
|
304
310
|
return {
|
|
305
311
|
actions: headerActions,
|
|
306
312
|
commandActions: manifestActions.commandActions
|
|
@@ -308,7 +314,7 @@ export const getHeaderActions = function (
|
|
|
308
314
|
};
|
|
309
315
|
|
|
310
316
|
/**
|
|
311
|
-
* Retrieves the ObjectPage footer actions
|
|
317
|
+
* Retrieves the ObjectPage footer actions which includes the default actions and the custom actions defined in the manifest.json file.
|
|
312
318
|
* @param converterContext The converter context
|
|
313
319
|
* @param capabilities The predefined environment capabilities
|
|
314
320
|
* @returns An array containing all the actions for this ObjectPage footer
|
|
@@ -329,13 +335,18 @@ export const getFooterActions = function (
|
|
|
329
335
|
command: OverrideType.overwrite,
|
|
330
336
|
position: OverrideType.overwrite,
|
|
331
337
|
priority: OverrideType.overwrite,
|
|
332
|
-
group: OverrideType.overwrite
|
|
338
|
+
group: OverrideType.overwrite,
|
|
339
|
+
overflowGroup: OverrideType.overwrite,
|
|
340
|
+
disableStrictHandling: OverrideType.overwrite
|
|
333
341
|
};
|
|
334
|
-
|
|
342
|
+
let footerActions = insertCustomElements(aAnnotationFooterActions, manifestActions.actions, actionOverwriteConfig);
|
|
335
343
|
// Apply primary action overflow protection
|
|
336
|
-
|
|
344
|
+
footerActions = ActionUtilities.ensurePrimaryActionNeverOverflows(footerActions);
|
|
345
|
+
// Add toolbar separators in case of grouped actions
|
|
346
|
+
const overflowGroupsConfig = manifestWrapper.getFooterOverflowGroups();
|
|
347
|
+
footerActions = addSeparators(footerActions, overflowGroupsConfig) as CustomAction[];
|
|
337
348
|
return {
|
|
338
|
-
actions:
|
|
349
|
+
actions: footerActions,
|
|
339
350
|
commandActions: manifestActions.commandActions
|
|
340
351
|
};
|
|
341
352
|
};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/MetaPath", "sap/ui/core/Component", "sap/ui/core/Lib", "sap/fe/core/
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/MetaPath", "sap/ui/core/Component", "sap/ui/core/Lib", "sap/fe/core/CommonUtils", "sap/fe/core/templating/PropertyHelper", "sap/ui/rta/plugin/annotations/AnnotationTypes"], function (Log, MetaModelConverter, MetaPath, Component, Lib, CommonUtils, PropertyHelper, AnnotationTypes) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -63,7 +63,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/MetaModelConverter", "sap
|
|
|
63
63
|
buildingBlock = buildingBlock.getParent();
|
|
64
64
|
}
|
|
65
65
|
let metaPath = contextPathToUse;
|
|
66
|
-
if (
|
|
66
|
+
if (control.getBindingContext()) {
|
|
67
|
+
const contextMetaPath = metaModel?.getMetaPath(control.getBindingContext()?.getPath() ?? "");
|
|
68
|
+
if (contextMetaPath) {
|
|
69
|
+
metaPath = contextMetaPath;
|
|
70
|
+
}
|
|
71
|
+
} else if (buildingBlock) {
|
|
67
72
|
metaPath = buildingBlock.getProperty("metaPath") ?? contextPathToUse;
|
|
68
73
|
}
|
|
69
74
|
const properties = [];
|
|
@@ -181,4 +186,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/MetaModelConverter", "sap
|
|
|
181
186
|
_exports.getTextArrangementChangeAction = getTextArrangementChangeAction;
|
|
182
187
|
return _exports;
|
|
183
188
|
}, false);
|
|
184
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXNvdXJjZUJ1bmRsZURlc2lnbnRpbWUiLCJMaWIiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImdldFRleHQiLCJrZXkiLCJfZXhwb3J0cyIsIlRFWFRfQVJSQU5HRU1FTlRfTEFCRUxTIiwiZmlsdGVyUHJvcGVydHlXaXRoVGV4dEFubm90YXRpb24iLCJwcm9wIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJUZXh0IiwidW5kZWZpbmVkIiwiaGFzQ3VycmVuY3kiLCJoYXNVbml0IiwiaXNDdXJyZW5jeSIsImlzVW5pdCIsIl9jb2xsZWN0UHJvcGVydGllcyIsImVudGl0eVR5cGUiLCJwcm9wZXJ0aWVzIiwiZmlsdGVyRm4iLCJ2aXNpdGVkRW50aXR5IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwicHVzaCIsImVudGl0eVByb3BlcnRpZXMiLCJmaWx0ZXIiLCJVSSIsIkhpZGRlbiIsInZhbHVlT2YiLCJ0YXJnZXRUeXBlIiwibWFwIiwicHJvcGVydHkiLCJjb2xsZWN0UHJvcGVydGllcyIsInRlbXBsYXRlQ29tcG9uZW50IiwiY29udHJvbCIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsImNvbnRleHRQYXRoVG9Vc2UiLCJnZXRGdWxsQ29udGV4dFBhdGgiLCJidWlsZGluZ0Jsb2NrIiwiaXNBIiwiZ2V0UGFyZW50IiwibWV0YVBhdGgiLCJnZXRQcm9wZXJ0eSIsInRhcmdldEVudGl0eSIsIk1ldGFQYXRoIiwiY29udmVydFR5cGVzIiwiZSIsIkxvZyIsIndhcm5pbmciLCJnZXRDbG9zZXN0RW50aXR5VHlwZSIsImdldFRhcmdldFByb3BlcnR5RnJvbUZvcm1FbGVtZW50Iiwib0NvbnRyb2wiLCJ0YXJnZXRQcm9wZXJ0eSIsImZpZWxkcyIsImdldEZpZWxkcyIsImxlbmd0aCIsInRhcmdldE9iamVjdCIsImdldE1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCIsImdldFJlbmFtZUFjdGlvbiIsImlzQXRFbGVtZW50TGV2ZWwiLCJhcmd1bWVudHMiLCJjaGFuZ2VUeXBlIiwidGl0bGUiLCJpY29uIiwic2luZ2xlUmVuYW1lIiwiY29udHJvbEJhc2VkUmVuYW1lQ2hhbmdlVHlwZSIsInR5cGUiLCJBbm5vdGF0aW9uVHlwZXMiLCJTdHJpbmdUeXBlIiwiZGVsZWdhdGUiLCJnZXRBbm5vdGF0aW9uc0NoYW5nZUluZm8iLCJfYW5ub3RhdGlvbiIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwidmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJnZXRPd25lckNvbXBvbmVudCIsInRhcmdldFByb3BlcnR5UGF0aCIsImZpbmQiLCJuYW1lIiwic2VydmljZVVybCIsImdldE1vZGVsIiwiZ2V0U2VydmljZVVybCIsInByb3BlcnR5TmFtZSIsImFubm90YXRpb25QYXRoIiwiY3VycmVudFZhbHVlIiwiTGFiZWwiLCJ0b1N0cmluZyIsInBvc3NpYmxlVmFsdWVzIiwicHJlU2VsZWN0ZWRQcm9wZXJ0eSIsImdldFRleHRBcnJhbmdlbWVudENoYW5nZUFjdGlvbiIsIlZhbHVlTGlzdFR5cGUiLCJkZWZhdWx0VHlwZSIsIlRleHRBcnJhbmdlbWVudCIsIk9iamVjdCIsImtleXMiLCJzS2V5IiwidGV4dCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQW5ub3RhdGlvbkJhc2VkQ2hhbmdlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBUZXh0QXJyYW5nZW1lbnRUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2sgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IE1ldGFQYXRoIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFQYXRoXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBMaWIgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbi8vIE9LIHNpbmNlIHdlIGFyZSBpbiBkZXNpZ250aW1lIHdlIGNhbiBpZ25vcmUgdGhhdCBkZXBlbmRlbmN5XG5pbXBvcnQgeyBoYXNDdXJyZW5jeSwgaGFzVW5pdCwgaXNDdXJyZW5jeSwgaXNVbml0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvZmUvbWFjcm9zL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBGb3JtRWxlbWVudCBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0Zvcm1FbGVtZW50XCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEFubm90YXRpb25UeXBlcyBmcm9tIFwic2FwL3VpL3J0YS9wbHVnaW4vYW5ub3RhdGlvbnMvQW5ub3RhdGlvblR5cGVzXCI7XG5cbmNvbnN0IHJlc291cmNlQnVuZGxlRGVzaWdudGltZSA9IExpYi5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlLmRlc2lnbnRpbWVcIikhO1xuXG5leHBvcnQgY29uc3QgZ2V0VGV4dCA9IGZ1bmN0aW9uIChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiByZXNvdXJjZUJ1bmRsZURlc2lnbnRpbWUuZ2V0VGV4dChrZXkpO1xufTtcblxudHlwZSBBbm5vdGF0aW9uQ2hhbmdlUmV0dXJuVHlwZSA9IHtcblx0c2VydmljZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRwcm9wZXJ0aWVzOiB7XG5cdFx0cHJvcGVydHlOYW1lOiBzdHJpbmc7XG5cdFx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0XHRjdXJyZW50VmFsdWU6IHN0cmluZztcblx0fVtdO1xuXHRwb3NzaWJsZVZhbHVlczogeyBrZXk6IHN0cmluZzsgdGV4dDogc3RyaW5nIH1bXTtcblx0cHJlU2VsZWN0ZWRQcm9wZXJ0eTogc3RyaW5nOyAvLyBpZiB0aGUgYWN0aW9uIGlzIHRyaWdnZXJlZCBmcm9tIGEgY29udHJvbCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgcHJvcGVydHksIG9ubHkgdGhpcyBvbmUgd2lsbCBiZSBzaG93biBpbiB0aGUgRGlhbG9nIGluaXRpYWxseSAoc2VhcmNoIGZpZWxkIHBvcHVsYXRlZCB3aXRoIHRoaXMgc3RyaW5nKVxufTtcblxuY29uc3QgVEVYVF9BUlJBTkdFTUVOVF9MQUJFTFMgPSB7XG5cdFtUZXh0QXJyYW5nZW1lbnRUeXBlLlRleHRPbmx5XTogXCJUZXh0IE9ubHlcIixcblx0W1RleHRBcnJhbmdlbWVudFR5cGUuVGV4dEZpcnN0XTogXCJUZXh0IEZpcnN0XCIsXG5cdFtUZXh0QXJyYW5nZW1lbnRUeXBlLlRleHRMYXN0XTogXCJUZXh0IExhc3RcIixcblx0W1RleHRBcnJhbmdlbWVudFR5cGUuVGV4dFNlcGFyYXRlXTogXCJJRCBPbmx5XCJcbn07XG5cbmZ1bmN0aW9uIGZpbHRlclByb3BlcnR5V2l0aFRleHRBbm5vdGF0aW9uKHByb3A6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiBwcm9wLmFubm90YXRpb25zLkNvbW1vbj8uVGV4dCAhPT0gdW5kZWZpbmVkICYmICFoYXNDdXJyZW5jeShwcm9wKSAmJiAhaGFzVW5pdChwcm9wKSAmJiAhaXNDdXJyZW5jeShwcm9wKSAmJiAhaXNVbml0KHByb3ApO1xufVxuXG4vKipcbiAqIENvbGxlY3RzIGFsbCBwcm9wZXJ0aWVzIHdpdGggYSBUZXh0IGFubm90YXRpb24gZnJvbSB0aGUgZ2l2ZW4gZW50aXR5IHR5cGUgYW5kIGl0cyBuYXZpZ2F0aW9uIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgdG8gc3RhcnQgd2l0aFxuICogQHBhcmFtIHByb3BlcnRpZXMgVGhlIGFycmF5IHRvIGNvbGxlY3QgdGhlIHByb3BlcnRpZXMgaW5cbiAqIEBwYXJhbSBmaWx0ZXJGbiBBIGZpbHRlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hpY2ggcHJvcGVydGllcyB0byBjb2xsZWN0XG4gKiBAcGFyYW0gdmlzaXRlZEVudGl0eSBBIG1hcCB0byBrZWVwIHRyYWNrIG9mIHZpc2l0ZWQgZW50aXRpZXNcbiAqL1xuZnVuY3Rpb24gX2NvbGxlY3RQcm9wZXJ0aWVzKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0aWVzOiB7IHByb3BlcnR5OiBQcm9wZXJ0eTsgZW50aXR5VHlwZTogRW50aXR5VHlwZSB9W10sXG5cdGZpbHRlckZuOiAocHJvcDogUHJvcGVydHkpID0+IGJvb2xlYW4sXG5cdHZpc2l0ZWRFbnRpdHk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+XG4pOiB2b2lkIHtcblx0aWYgKHZpc2l0ZWRFbnRpdHlbZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHZpc2l0ZWRFbnRpdHlbZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdID0gdHJ1ZTtcblx0cHJvcGVydGllcy5wdXNoKFxuXHRcdC4uLmVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllc1xuXHRcdFx0LmZpbHRlcihmaWx0ZXJGbilcblx0XHRcdC5maWx0ZXIoKHByb3ApID0+IHtcblx0XHRcdFx0Ly8gQWx3YXlzIGZpbHRlciBvdXQgVUkuSGlkZGVuID0gdHJ1ZVxuXHRcdFx0XHQvLyBBbHdheXMgZmlsdGVyIG91dCBjb21wbGV4IHR5cGVcblx0XHRcdFx0aWYgKHByb3AuYW5ub3RhdGlvbnMuVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlIHx8ICEhcHJvcC50YXJnZXRUeXBlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSlcblx0XHRcdC5tYXAoKHByb3A6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0cHJvcGVydHk6IHByb3AsXG5cdFx0XHRcdFx0ZW50aXR5VHlwZTogZW50aXR5VHlwZVxuXHRcdFx0XHR9O1xuXHRcdFx0fSlcblx0KTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdFByb3BlcnRpZXMoXG5cdHRlbXBsYXRlQ29tcG9uZW50OiBUZW1wbGF0ZUNvbXBvbmVudCxcblx0Y29udHJvbDogTWFuYWdlZE9iamVjdCxcblx0ZmlsdGVyRm46IChwcm9wOiBQcm9wZXJ0eSkgPT4gYm9vbGVhblxuKTogeyBwcm9wZXJ0eTogUHJvcGVydHk7IGVudGl0eVR5cGU6IEVudGl0eVR5cGUgfVtdIHwgbnVsbCB7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IHRlbXBsYXRlQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBjb250ZXh0UGF0aFRvVXNlID0gdGVtcGxhdGVDb21wb25lbnQuZ2V0RnVsbENvbnRleHRQYXRoKCk7XG5cdC8vIEZpbmQgY2xvc2VzdCBidWlsZGluZyBibG9ja1xuXHRsZXQgYnVpbGRpbmdCbG9jazogTWFuYWdlZE9iamVjdCB8IG51bGwgPSBjb250cm9sO1xuXHR3aGlsZSAoYnVpbGRpbmdCbG9jayAmJiAhYnVpbGRpbmdCbG9jay5pc0E8QnVpbGRpbmdCbG9jaz4oXCJzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrcy5CdWlsZGluZ0Jsb2NrXCIpKSB7XG5cdFx0YnVpbGRpbmdCbG9jayA9IGJ1aWxkaW5nQmxvY2suZ2V0UGFyZW50KCk7XG5cdH1cblx0bGV0IG1ldGFQYXRoID0gY29udGV4dFBhdGhUb1VzZSE7XG5cdGlmIChidWlsZGluZ0Jsb2NrKSB7XG5cdFx0bWV0YVBhdGggPSBidWlsZGluZ0Jsb2NrLmdldFByb3BlcnR5KFwibWV0YVBhdGhcIikgPz8gY29udGV4dFBhdGhUb1VzZTtcblx0fVxuXHRjb25zdCBwcm9wZXJ0aWVzOiB7IHByb3BlcnR5OiBQcm9wZXJ0eTsgZW50aXR5VHlwZTogRW50aXR5VHlwZSB9W10gPSBbXTtcblx0aWYgKG1ldGFNb2RlbCAmJiBjb250ZXh0UGF0aFRvVXNlKSB7XG5cdFx0bGV0IHRhcmdldEVudGl0eTogTWV0YVBhdGg8RW50aXR5VHlwZT47XG5cdFx0dHJ5IHtcblx0XHRcdHRhcmdldEVudGl0eSA9IG5ldyBNZXRhUGF0aChjb252ZXJ0VHlwZXMobWV0YU1vZGVsKSwgbWV0YVBhdGgsIGNvbnRleHRQYXRoVG9Vc2UpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy53YXJuaW5nKGBObyBtZXRhbW9kZWwgb3IgbWV0YVBhdGggaXMgbm90IHJlYWNoYWJsZSB3aXRoICR7bWV0YVBhdGh9IGFuZCAke2NvbnRleHRQYXRoVG9Vc2V9YCk7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRjb25zdCB2aXNpdGVkRW50aXR5OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXHRcdC8vIENvbGxlY3QgYWxsIHByb3BlcnRpZXMsIGRvbid0IGFwcGx5IGZpbHRlcnNcblx0XHRfY29sbGVjdFByb3BlcnRpZXModGFyZ2V0RW50aXR5LmdldENsb3Nlc3RFbnRpdHlUeXBlKCksIHByb3BlcnRpZXMsIGZpbHRlckZuLCB2aXNpdGVkRW50aXR5KTtcblx0fVxuXHRyZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcmdldFByb3BlcnR5RnJvbUZvcm1FbGVtZW50KG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IHRhcmdldFByb3BlcnR5O1xuXHRpZiAob0NvbnRyb2wuaXNBPEZvcm1FbGVtZW50PihcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtRWxlbWVudFwiKSkge1xuXHRcdGNvbnN0IGZpZWxkcyA9IG9Db250cm9sLmdldEZpZWxkcygpO1xuXHRcdGlmIChmaWVsZHM/Lmxlbmd0aCA+IDAgJiYgZmllbGRzWzBdLmlzQTxGaWVsZD4oXCJzYXAuZmUubWFjcm9zLkZpZWxkXCIpKSB7XG5cdFx0XHRjb25zdCB0YXJnZXRPYmplY3QgPSBmaWVsZHNbMF07XG5cdFx0XHR0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldE9iamVjdC5nZXRNYWluUHJvcGVydHlSZWxhdGl2ZVBhdGgoKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRhcmdldFByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVuYW1lQWN0aW9uKGlzQXRFbGVtZW50TGV2ZWwgPSBmYWxzZSk6IHtcblx0Y2hhbmdlVHlwZTogc3RyaW5nO1xuXHRzaW5nbGVSZW5hbWU6IGJvb2xlYW47XG5cdGNvbnRyb2xCYXNlZFJlbmFtZUNoYW5nZVR5cGU6IHN0cmluZztcblx0dGl0bGU6ICgpID0+IHN0cmluZztcblx0aWNvbjogc3RyaW5nO1xuXHR0eXBlOiBzdHJpbmc7XG5cdGRlbGVnYXRlOiB7IGdldEFubm90YXRpb25zQ2hhbmdlSW5mbzogKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LCBfYW5ub3RhdGlvbjogc3RyaW5nKSA9PiBBbm5vdGF0aW9uQ2hhbmdlUmV0dXJuVHlwZSB8IG51bGwgfTtcbn0ge1xuXHRyZXR1cm4ge1xuXHRcdGNoYW5nZVR5cGU6IFwicmVuYW1lTGFiZWxcIixcblx0XHR0aXRsZTogKCk6IHN0cmluZyA9PiAoaXNBdEVsZW1lbnRMZXZlbCA/IGdldFRleHQoXCJSVEFfQ09OVEVYVF9BQ1RJT05NRU5VX1JFTkFNRVwiKSA6IGdldFRleHQoXCJSVEFfQ09OVEVYVF9BQ1RJT05NRU5VX0NIQU5HRUxBQkVMU1wiKSksXG5cdFx0aWNvbjogXCJzYXAtaWNvbjovL2VkaXRcIixcblx0XHRzaW5nbGVSZW5hbWU6IGlzQXRFbGVtZW50TGV2ZWwsXG5cdFx0Y29udHJvbEJhc2VkUmVuYW1lQ2hhbmdlVHlwZTogXCJyZW5hbWVGaWVsZFwiLFxuXHRcdHR5cGU6IEFubm90YXRpb25UeXBlcy5TdHJpbmdUeXBlLFxuXHRcdGRlbGVnYXRlOiB7XG5cdFx0XHRnZXRBbm5vdGF0aW9uc0NoYW5nZUluZm86IChvQ29udHJvbDogTWFuYWdlZE9iamVjdCwgX2Fubm90YXRpb246IHN0cmluZyk6IEFubm90YXRpb25DaGFuZ2VSZXR1cm5UeXBlIHwgbnVsbCA9PiB7XG5cdFx0XHRcdGxldCB0ZW1wbGF0ZUNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihvQ29udHJvbCkgYXMgVGVtcGxhdGVDb21wb25lbnQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmICghdGVtcGxhdGVDb21wb25lbnQpIHtcblx0XHRcdFx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhvQ29udHJvbCk7XG5cdFx0XHRcdFx0dGVtcGxhdGVDb21wb25lbnQgPSB2aWV3Py5nZXRDb250cm9sbGVyKCkuZ2V0T3duZXJDb21wb25lbnQoKSBhcyBUZW1wbGF0ZUNvbXBvbmVudCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGVtcGxhdGVDb21wb25lbnQpIHtcblx0XHRcdFx0XHRsZXQgdGFyZ2V0UHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGNvbnN0IHByb3BlcnRpZXMgPSBjb2xsZWN0UHJvcGVydGllcyh0ZW1wbGF0ZUNvbXBvbmVudCwgb0NvbnRyb2wsICgpID0+IHRydWUpO1xuXHRcdFx0XHRcdGNvbnN0IHRhcmdldFByb3BlcnR5UGF0aCA9IGdldFRhcmdldFByb3BlcnR5RnJvbUZvcm1FbGVtZW50KG9Db250cm9sKTtcblx0XHRcdFx0XHRpZiAodGFyZ2V0UHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdFx0XHR0YXJnZXRQcm9wZXJ0eSA9IHByb3BlcnRpZXM/LmZpbmQoKHByb3ApID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHByb3AucHJvcGVydHkubmFtZSA9PT0gdGFyZ2V0UHJvcGVydHlQYXRoO1xuXHRcdFx0XHRcdFx0fSk/LnByb3BlcnR5O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChwcm9wZXJ0aWVzICYmIHByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0c2VydmljZVVybDogKG9Db250cm9sLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCB8IHVuZGVmaW5lZCk/LmdldFNlcnZpY2VVcmwoKSxcblx0XHRcdFx0XHRcdFx0cHJvcGVydGllczogcHJvcGVydGllcy5tYXAoKHByb3A6IHsgcHJvcGVydHk6IFByb3BlcnR5OyBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlIH0pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlOYW1lOiBgJHtwcm9wLnByb3BlcnR5Lm5hbWV9YCxcblx0XHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcIi9cIiArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHByb3AuZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcIi9cIiArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHByb3AucHJvcGVydHkubmFtZSArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZhbHVlOiBwcm9wLnByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gcHJvcC5wcm9wZXJ0eS5uYW1lXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdHBvc3NpYmxlVmFsdWVzOiBbXSxcblx0XHRcdFx0XHRcdFx0cHJlU2VsZWN0ZWRQcm9wZXJ0eTogdGFyZ2V0UHJvcGVydHlcblx0XHRcdFx0XHRcdFx0XHQ/IFwiL1wiICsgdGFyZ2V0UHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lICsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCJcblx0XHRcdFx0XHRcdFx0XHQ6IFwiXCIgLy8gaWYgdGhlIGFjdGlvbiBpcyB0cmlnZ2VyZWQgZnJvbSBhIGNvbnRyb2wgdGhhdCBjb3JyZXNwb25kcyB0byBhIHByb3BlcnR5LCBvbmx5IHRoaXMgb25lIHdpbGwgYmUgc2hvd24gaW4gdGhlIERpYWxvZyBpbml0aWFsbHkgKHNlYXJjaCBmaWVsZCBwb3B1bGF0ZWQgd2l0aCB0aGlzIHN0cmluZylcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRBcnJhbmdlbWVudENoYW5nZUFjdGlvbihrZXkgPSBcIlJUQV9DT05URVhUX0FDVElPTk1FTlVfVEVYVEFSUkFOR0VcIik6IHtcblx0Y2hhbmdlVHlwZTogc3RyaW5nO1xuXHR0aXRsZTogKCkgPT4gc3RyaW5nO1xuXHR0eXBlOiBzdHJpbmc7XG5cdGRlbGVnYXRlOiB7IGdldEFubm90YXRpb25zQ2hhbmdlSW5mbzogKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LCBfYW5ub3RhdGlvbjogc3RyaW5nKSA9PiBBbm5vdGF0aW9uQ2hhbmdlUmV0dXJuVHlwZSB8IG51bGwgfTtcbn0ge1xuXHRyZXR1cm4ge1xuXHRcdGNoYW5nZVR5cGU6IFwidGV4dEFycmFuZ2VtZW50X1Rlc3RcIixcblx0XHR0aXRsZTogKCk6IHN0cmluZyA9PiBnZXRUZXh0KGtleSksXG5cdFx0dHlwZTogQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFR5cGUsXG5cdFx0ZGVsZWdhdGU6IHtcblx0XHRcdGdldEFubm90YXRpb25zQ2hhbmdlSW5mbzogKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LCBfYW5ub3RhdGlvbjogc3RyaW5nKTogQW5ub3RhdGlvbkNoYW5nZVJldHVyblR5cGUgfCBudWxsID0+IHtcblx0XHRcdFx0bGV0IHRlbXBsYXRlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db250cm9sKSBhcyBUZW1wbGF0ZUNvbXBvbmVudCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKCF0ZW1wbGF0ZUNvbXBvbmVudCkge1xuXHRcdFx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KG9Db250cm9sKTtcblx0XHRcdFx0XHR0ZW1wbGF0ZUNvbXBvbmVudCA9IHZpZXc/LmdldENvbnRyb2xsZXIoKS5nZXRPd25lckNvbXBvbmVudCgpIGFzIFRlbXBsYXRlQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0ZW1wbGF0ZUNvbXBvbmVudCkge1xuXHRcdFx0XHRcdGNvbnN0IHByb3BlcnRpZXMgPSBjb2xsZWN0UHJvcGVydGllcyh0ZW1wbGF0ZUNvbXBvbmVudCwgb0NvbnRyb2wsIGZpbHRlclByb3BlcnR5V2l0aFRleHRBbm5vdGF0aW9uKTtcblx0XHRcdFx0XHRpZiAocHJvcGVydGllcyAmJiBwcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdHNlcnZpY2VVcmw6IChvQ29udHJvbC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwgfCB1bmRlZmluZWQpPy5nZXRTZXJ2aWNlVXJsKCksXG5cdFx0XHRcdFx0XHRcdHByb3BlcnRpZXM6IHByb3BlcnRpZXMubWFwKChwcm9wOiB7IHByb3BlcnR5OiBQcm9wZXJ0eTsgZW50aXR5VHlwZTogRW50aXR5VHlwZSB9KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgZGVmYXVsdFR5cGUgPVxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvcC5lbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5UZXh0QXJyYW5nZW1lbnQ/LnRvU3RyaW5nKCkgPz8gVGV4dEFycmFuZ2VtZW50VHlwZS5UZXh0Rmlyc3QudG9TdHJpbmcoKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlOYW1lOiBwcm9wLnByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gcHJvcC5wcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiL1wiICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcC5lbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiL1wiICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcC5wcm9wZXJ0eS5uYW1lICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VmFsdWU6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHByb3AucHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudD8udG9TdHJpbmcoKSA/PyBkZWZhdWx0VHlwZVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRwb3NzaWJsZVZhbHVlczogT2JqZWN0LmtleXMoVEVYVF9BUlJBTkdFTUVOVF9MQUJFTFMpLm1hcCgoc0tleSkgPT4gKHtcblx0XHRcdFx0XHRcdFx0XHRrZXk6IHNLZXksXG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogVEVYVF9BUlJBTkdFTUVOVF9MQUJFTFNbc0tleSBhcyB1bmtub3duIGFzIGtleW9mIHR5cGVvZiBURVhUX0FSUkFOR0VNRU5UX0xBQkVMU11cblx0XHRcdFx0XHRcdFx0fSkpLFxuXHRcdFx0XHRcdFx0XHRwcmVTZWxlY3RlZFByb3BlcnR5OiBcIlwiIC8vIGlmIHRoZSBhY3Rpb24gaXMgdHJpZ2dlcmVkIGZyb20gYSBjb250cm9sIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBwcm9wZXJ0eSwgb25seSB0aGlzIG9uZSB3aWxsIGJlIHNob3duIGluIHRoZSBEaWFsb2cgaW5pdGlhbGx5IChzZWFyY2ggZmllbGQgcG9wdWxhdGVkIHdpdGggdGhpcyBzdHJpbmcpXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7RUFXQTtFQUlBO0VBSUEsTUFBTUEsd0JBQXdCLEdBQUdDLEdBQUcsQ0FBQ0Msb0JBQW9CLENBQUMsd0JBQXdCLENBQUU7RUFFN0UsTUFBTUMsT0FBTyxHQUFHLFNBQUFBLENBQVVDLEdBQVcsRUFBVTtJQUNyRCxPQUFPSix3QkFBd0IsQ0FBQ0csT0FBTyxDQUFDQyxHQUFHLENBQUM7RUFDN0MsQ0FBQztFQUFDQyxRQUFBLENBQUFGLE9BQUEsR0FBQUEsT0FBQTtFQWFGLE1BQU1HLHVCQUF1QixHQUFHO0lBQy9CLHFD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RUFBRTtZQUN0QixNQUFNZCxVQUFVLEdBQUdhLGlCQUFpQixDQUFDQyxpQkFBaUIsRUFBRW1CLFFBQVEsRUFBRTdDLGdDQUFnQyxDQUFDO1lBQ25HLElBQUlZLFVBQVUsSUFBSUEsVUFBVSxDQUFDcUMsTUFBTSxHQUFHLENBQUMsRUFBRTtjQUN4QyxPQUFPO2dCQUNOMkIsVUFBVSxFQUFHL0IsUUFBUSxDQUFDZ0MsUUFBUSxDQUFDLENBQUMsRUFBNkJDLGFBQWEsQ0FBQyxDQUFDO2dCQUM1RWxFLFVBQVUsRUFBRUEsVUFBVSxDQUFDVyxHQUFHLENBQUV0QixJQUFvRCxJQUFLO2tCQUNwRixNQUFNdUYsV0FBVyxHQUNoQnZGLElBQUksQ0FBQ1UsVUFBVSxDQUFDVCxXQUFXLENBQUNpQixFQUFFLEVBQUVzRSxlQUFlLEVBQUVOLFFBQVEsQ0FBQyxDQUFDLElBQUksbUNBQThCQSxRQUFRLENBQUMsQ0FBQztrQkFDeEcsT0FBTztvQkFDTkosWUFBWSxFQUFFOUUsSUFBSSxDQUFDdUIsUUFBUSxDQUFDdEIsV0FBVyxDQUFDQyxNQUFNLEVBQUUrRSxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUFDLElBQUlsRixJQUFJLENBQUN1QixRQUFRLENBQUNtRCxJQUFJO29CQUN2RkssY0FBYyxFQUNiLEdBQUcsR0FDSC9FLElBQUksQ0FBQ1UsVUFBVSxDQUFDSSxrQkFBa0IsR0FDbEMsR0FBRyxHQUNIZCxJQUFJLENBQUN1QixRQUFRLENBQUNtRCxJQUFJLEdBQ2xCLGlGQUFpRjtvQkFDbEZNLFlBQVksRUFDWGhGLElBQUksQ0FBQ3VCLFFBQVEsQ0FBQ3RCLFdBQVcsQ0FBQ0MsTUFBTSxFQUFFQyxJQUFJLEVBQUVGLFdBQVcsRUFBRWlCLEVBQUUsRUFBRXNFLGVBQWUsRUFBRU4sUUFBUSxDQUFDLENBQUMsSUFBSUs7a0JBQzFGLENBQUM7Z0JBQ0YsQ0FBQyxDQUFDO2dCQUNGSixjQUFjLEVBQUVNLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDNUYsdUJBQXVCLENBQUMsQ0FBQ3dCLEdBQUcsQ0FBRXFFLElBQUksS0FBTTtrQkFDbkUvRixHQUFHLEVBQUUrRixJQUFJO2tCQUNUQyxJQUFJLEVBQUU5Rix1QkFBdUIsQ0FBQzZGLElBQUk7Z0JBQ25DLENBQUMsQ0FBQyxDQUFDO2dCQUNIUCxtQkFBbUIsRUFBRSxFQUFFLENBQUM7Y0FDekIsQ0FBQztZQUNGO1VBQ0Q7VUFDQSxPQUFPLElBQUk7UUFDWjtNQUNEO0lBQ0QsQ0FBQztFQUNGO0VBQUN2RixRQUFBLENBQUF3Riw4QkFBQSxHQUFBQSw4QkFBQTtFQUFBLE9BQUF4RixRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
189
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXNvdXJjZUJ1bmRsZURlc2lnbnRpbWUiLCJMaWIiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImdldFRleHQiLCJrZXkiLCJfZXhwb3J0cyIsIlRFWFRfQVJSQU5HRU1FTlRfTEFCRUxTIiwiZmlsdGVyUHJvcGVydHlXaXRoVGV4dEFubm90YXRpb24iLCJwcm9wIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJUZXh0IiwidW5kZWZpbmVkIiwiaGFzQ3VycmVuY3kiLCJoYXNVbml0IiwiaXNDdXJyZW5jeSIsImlzVW5pdCIsIl9jb2xsZWN0UHJvcGVydGllcyIsImVudGl0eVR5cGUiLCJwcm9wZXJ0aWVzIiwiZmlsdGVyRm4iLCJ2aXNpdGVkRW50aXR5IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwicHVzaCIsImVudGl0eVByb3BlcnRpZXMiLCJmaWx0ZXIiLCJVSSIsIkhpZGRlbiIsInZhbHVlT2YiLCJ0YXJnZXRUeXBlIiwibWFwIiwicHJvcGVydHkiLCJjb2xsZWN0UHJvcGVydGllcyIsInRlbXBsYXRlQ29tcG9uZW50IiwiY29udHJvbCIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsImNvbnRleHRQYXRoVG9Vc2UiLCJnZXRGdWxsQ29udGV4dFBhdGgiLCJidWlsZGluZ0Jsb2NrIiwiaXNBIiwiZ2V0UGFyZW50IiwibWV0YVBhdGgiLCJnZXRCaW5kaW5nQ29udGV4dCIsImNvbnRleHRNZXRhUGF0aCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsImdldFByb3BlcnR5IiwidGFyZ2V0RW50aXR5IiwiTWV0YVBhdGgiLCJjb252ZXJ0VHlwZXMiLCJlIiwiTG9nIiwid2FybmluZyIsImdldENsb3Nlc3RFbnRpdHlUeXBlIiwiZ2V0VGFyZ2V0UHJvcGVydHlGcm9tRm9ybUVsZW1lbnQiLCJvQ29udHJvbCIsInRhcmdldFByb3BlcnR5IiwiZmllbGRzIiwiZ2V0RmllbGRzIiwibGVuZ3RoIiwidGFyZ2V0T2JqZWN0IiwiZ2V0TWFpblByb3BlcnR5UmVsYXRpdmVQYXRoIiwiZ2V0UmVuYW1lQWN0aW9uIiwiaXNBdEVsZW1lbnRMZXZlbCIsImFyZ3VtZW50cyIsImNoYW5nZVR5cGUiLCJ0aXRsZSIsImljb24iLCJzaW5nbGVSZW5hbWUiLCJjb250cm9sQmFzZWRSZW5hbWVDaGFuZ2VUeXBlIiwidHlwZSIsIkFubm90YXRpb25UeXBlcyIsIlN0cmluZ1R5cGUiLCJkZWxlZ2F0ZSIsImdldEFubm90YXRpb25zQ2hhbmdlSW5mbyIsIl9hbm5vdGF0aW9uIiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJ2aWV3IiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldE93bmVyQ29tcG9uZW50IiwidGFyZ2V0UHJvcGVydHlQYXRoIiwiZmluZCIsIm5hbWUiLCJzZXJ2aWNlVXJsIiwiZ2V0TW9kZWwiLCJnZXRTZXJ2aWNlVXJsIiwicHJvcGVydHlOYW1lIiwiYW5ub3RhdGlvblBhdGgiLCJjdXJyZW50VmFsdWUiLCJMYWJlbCIsInRvU3RyaW5nIiwicG9zc2libGVWYWx1ZXMiLCJwcmVTZWxlY3RlZFByb3BlcnR5IiwiZ2V0VGV4dEFycmFuZ2VtZW50Q2hhbmdlQWN0aW9uIiwiVmFsdWVMaXN0VHlwZSIsImRlZmF1bHRUeXBlIiwiVGV4dEFycmFuZ2VtZW50IiwiT2JqZWN0Iiwia2V5cyIsInNLZXkiLCJ0ZXh0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBbm5vdGF0aW9uQmFzZWRDaGFuZ2VzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5VHlwZSwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IFRleHRBcnJhbmdlbWVudFR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgTWV0YVBhdGggZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YVBhdGhcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IExpYiBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuLy8gT0sgc2luY2Ugd2UgYXJlIGluIGRlc2lnbnRpbWUgd2UgY2FuIGlnbm9yZSB0aGF0IGRlcGVuZGVuY3lcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGhhc0N1cnJlbmN5LCBoYXNVbml0LCBpc0N1cnJlbmN5LCBpc1VuaXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC9mZS9tYWNyb3MvRmllbGRcIjtcbmltcG9ydCB0eXBlIEZvcm1FbGVtZW50IGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybUVsZW1lbnRcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVzdHJpY3RlZC1pbXBvcnRzXG5pbXBvcnQgQW5ub3RhdGlvblR5cGVzIGZyb20gXCJzYXAvdWkvcnRhL3BsdWdpbi9hbm5vdGF0aW9ucy9Bbm5vdGF0aW9uVHlwZXNcIjtcblxuY29uc3QgcmVzb3VyY2VCdW5kbGVEZXNpZ250aW1lID0gTGliLmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmUuZGVzaWdudGltZVwiKSE7XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0ID0gZnVuY3Rpb24gKGtleTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIHJlc291cmNlQnVuZGxlRGVzaWdudGltZS5nZXRUZXh0KGtleSk7XG59O1xuXG50eXBlIEFubm90YXRpb25DaGFuZ2VSZXR1cm5UeXBlID0ge1xuXHRzZXJ2aWNlVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHByb3BlcnRpZXM6IHtcblx0XHRwcm9wZXJ0eU5hbWU6IHN0cmluZztcblx0XHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRcdGN1cnJlbnRWYWx1ZTogc3RyaW5nO1xuXHR9W107XG5cdHBvc3NpYmxlVmFsdWVzOiB7IGtleTogc3RyaW5nOyB0ZXh0OiBzdHJpbmcgfVtdO1xuXHRwcmVTZWxlY3RlZFByb3BlcnR5OiBzdHJpbmc7IC8vIGlmIHRoZSBhY3Rpb24gaXMgdHJpZ2dlcmVkIGZyb20gYSBjb250cm9sIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBwcm9wZXJ0eSwgb25seSB0aGlzIG9uZSB3aWxsIGJlIHNob3duIGluIHRoZSBEaWFsb2cgaW5pdGlhbGx5IChzZWFyY2ggZmllbGQgcG9wdWxhdGVkIHdpdGggdGhpcyBzdHJpbmcpXG59O1xuXG5jb25zdCBURVhUX0FSUkFOR0VNRU5UX0xBQkVMUyA9IHtcblx0W1RleHRBcnJhbmdlbWVudFR5cGUuVGV4dE9ubHldOiBcIlRleHQgT25seVwiLFxuXHRbVGV4dEFycmFuZ2VtZW50VHlwZS5UZXh0Rmlyc3RdOiBcIlRleHQgRmlyc3RcIixcblx0W1RleHRBcnJhbmdlbWVudFR5cGUuVGV4dExhc3RdOiBcIlRleHQgTGFzdFwiLFxuXHRbVGV4dEFycmFuZ2VtZW50VHlwZS5UZXh0U2VwYXJhdGVdOiBcIklEIE9ubHlcIlxufTtcblxuZnVuY3Rpb24gZmlsdGVyUHJvcGVydHlXaXRoVGV4dEFubm90YXRpb24ocHJvcDogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuIHByb3AuYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0ICE9PSB1bmRlZmluZWQgJiYgIWhhc0N1cnJlbmN5KHByb3ApICYmICFoYXNVbml0KHByb3ApICYmICFpc0N1cnJlbmN5KHByb3ApICYmICFpc1VuaXQocHJvcCk7XG59XG5cbi8qKlxuICogQ29sbGVjdHMgYWxsIHByb3BlcnRpZXMgd2l0aCBhIFRleHQgYW5ub3RhdGlvbiBmcm9tIHRoZSBnaXZlbiBlbnRpdHkgdHlwZSBhbmQgaXRzIG5hdmlnYXRpb24gcHJvcGVydGllcy5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSB0byBzdGFydCB3aXRoXG4gKiBAcGFyYW0gcHJvcGVydGllcyBUaGUgYXJyYXkgdG8gY29sbGVjdCB0aGUgcHJvcGVydGllcyBpblxuICogQHBhcmFtIGZpbHRlckZuIEEgZmlsdGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGljaCBwcm9wZXJ0aWVzIHRvIGNvbGxlY3RcbiAqIEBwYXJhbSB2aXNpdGVkRW50aXR5IEEgbWFwIHRvIGtlZXAgdHJhY2sgb2YgdmlzaXRlZCBlbnRpdGllc1xuICovXG5mdW5jdGlvbiBfY29sbGVjdFByb3BlcnRpZXMoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHByb3BlcnRpZXM6IHsgcHJvcGVydHk6IFByb3BlcnR5OyBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlIH1bXSxcblx0ZmlsdGVyRm46IChwcm9wOiBQcm9wZXJ0eSkgPT4gYm9vbGVhbixcblx0dmlzaXRlZEVudGl0eTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj5cbik6IHZvaWQge1xuXHRpZiAodmlzaXRlZEVudGl0eVtlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV0pIHtcblx0XHRyZXR1cm47XG5cdH1cblx0dmlzaXRlZEVudGl0eVtlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSB0cnVlO1xuXHRwcm9wZXJ0aWVzLnB1c2goXG5cdFx0Li4uZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzXG5cdFx0XHQuZmlsdGVyKGZpbHRlckZuKVxuXHRcdFx0LmZpbHRlcigocHJvcCkgPT4ge1xuXHRcdFx0XHQvLyBBbHdheXMgZmlsdGVyIG91dCBVSS5IaWRkZW4gPSB0cnVlXG5cdFx0XHRcdC8vIEFsd2F5cyBmaWx0ZXIgb3V0IGNvbXBsZXggdHlwZVxuXHRcdFx0XHRpZiAocHJvcC5hbm5vdGF0aW9ucy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWUgfHwgISFwcm9wLnRhcmdldFR5cGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9KVxuXHRcdFx0Lm1hcCgocHJvcDogUHJvcGVydHkpID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRwcm9wZXJ0eTogcHJvcCxcblx0XHRcdFx0XHRlbnRpdHlUeXBlOiBlbnRpdHlUeXBlXG5cdFx0XHRcdH07XG5cdFx0XHR9KVxuXHQpO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0UHJvcGVydGllcyhcblx0dGVtcGxhdGVDb21wb25lbnQ6IFRlbXBsYXRlQ29tcG9uZW50LFxuXHRjb250cm9sOiBNYW5hZ2VkT2JqZWN0LFxuXHRmaWx0ZXJGbjogKHByb3A6IFByb3BlcnR5KSA9PiBib29sZWFuXG4pOiB7IHByb3BlcnR5OiBQcm9wZXJ0eTsgZW50aXR5VHlwZTogRW50aXR5VHlwZSB9W10gfCBudWxsIHtcblx0Y29uc3QgbWV0YU1vZGVsID0gdGVtcGxhdGVDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IGNvbnRleHRQYXRoVG9Vc2UgPSB0ZW1wbGF0ZUNvbXBvbmVudC5nZXRGdWxsQ29udGV4dFBhdGgoKTtcblx0Ly8gRmluZCBjbG9zZXN0IGJ1aWxkaW5nIGJsb2NrXG5cdGxldCBidWlsZGluZ0Jsb2NrOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCA9IGNvbnRyb2w7XG5cdHdoaWxlIChidWlsZGluZ0Jsb2NrICYmICFidWlsZGluZ0Jsb2NrLmlzQTxCdWlsZGluZ0Jsb2NrPihcInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLkJ1aWxkaW5nQmxvY2tcIikpIHtcblx0XHRidWlsZGluZ0Jsb2NrID0gYnVpbGRpbmdCbG9jay5nZXRQYXJlbnQoKTtcblx0fVxuXHRsZXQgbWV0YVBhdGggPSBjb250ZXh0UGF0aFRvVXNlITtcblx0aWYgKGNvbnRyb2wuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdGNvbnN0IGNvbnRleHRNZXRhUGF0aCA9IG1ldGFNb2RlbD8uZ2V0TWV0YVBhdGgoY29udHJvbC5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgPz8gXCJcIik7XG5cdFx0aWYgKGNvbnRleHRNZXRhUGF0aCkge1xuXHRcdFx0bWV0YVBhdGggPSBjb250ZXh0TWV0YVBhdGg7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGJ1aWxkaW5nQmxvY2spIHtcblx0XHRtZXRhUGF0aCA9IGJ1aWxkaW5nQmxvY2suZ2V0UHJvcGVydHkoXCJtZXRhUGF0aFwiKSA/PyBjb250ZXh0UGF0aFRvVXNlO1xuXHR9XG5cdGNvbnN0IHByb3BlcnRpZXM6IHsgcHJvcGVydHk6IFByb3BlcnR5OyBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlIH1bXSA9IFtdO1xuXHRpZiAobWV0YU1vZGVsICYmIGNvbnRleHRQYXRoVG9Vc2UpIHtcblx0XHRsZXQgdGFyZ2V0RW50aXR5OiBNZXRhUGF0aDxFbnRpdHlUeXBlPjtcblx0XHR0cnkge1xuXHRcdFx0dGFyZ2V0RW50aXR5ID0gbmV3IE1ldGFQYXRoKGNvbnZlcnRUeXBlcyhtZXRhTW9kZWwpLCBtZXRhUGF0aCwgY29udGV4dFBhdGhUb1VzZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLndhcm5pbmcoYE5vIG1ldGFtb2RlbCBvciBtZXRhUGF0aCBpcyBub3QgcmVhY2hhYmxlIHdpdGggJHttZXRhUGF0aH0gYW5kICR7Y29udGV4dFBhdGhUb1VzZX1gKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZpc2l0ZWRFbnRpdHk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdFx0Ly8gQ29sbGVjdCBhbGwgcHJvcGVydGllcywgZG9uJ3QgYXBwbHkgZmlsdGVyc1xuXHRcdF9jb2xsZWN0UHJvcGVydGllcyh0YXJnZXRFbnRpdHkuZ2V0Q2xvc2VzdEVudGl0eVR5cGUoKSwgcHJvcGVydGllcywgZmlsdGVyRm4sIHZpc2l0ZWRFbnRpdHkpO1xuXHR9XG5cdHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0UHJvcGVydHlGcm9tRm9ybUVsZW1lbnQob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgdGFyZ2V0UHJvcGVydHk7XG5cdGlmIChvQ29udHJvbC5pc0E8Rm9ybUVsZW1lbnQ+KFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1FbGVtZW50XCIpKSB7XG5cdFx0Y29uc3QgZmllbGRzID0gb0NvbnRyb2wuZ2V0RmllbGRzKCk7XG5cdFx0aWYgKGZpZWxkcz8ubGVuZ3RoID4gMCAmJiBmaWVsZHNbMF0uaXNBPEZpZWxkPihcInNhcC5mZS5tYWNyb3MuRmllbGRcIikpIHtcblx0XHRcdGNvbnN0IHRhcmdldE9iamVjdCA9IGZpZWxkc1swXTtcblx0XHRcdHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0T2JqZWN0LmdldE1haW5Qcm9wZXJ0eVJlbGF0aXZlUGF0aCgpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdGFyZ2V0UHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZW5hbWVBY3Rpb24oaXNBdEVsZW1lbnRMZXZlbCA9IGZhbHNlKToge1xuXHRjaGFuZ2VUeXBlOiBzdHJpbmc7XG5cdHNpbmdsZVJlbmFtZTogYm9vbGVhbjtcblx0Y29udHJvbEJhc2VkUmVuYW1lQ2hhbmdlVHlwZTogc3RyaW5nO1xuXHR0aXRsZTogKCkgPT4gc3RyaW5nO1xuXHRpY29uOiBzdHJpbmc7XG5cdHR5cGU6IHN0cmluZztcblx0ZGVsZWdhdGU6IHsgZ2V0QW5ub3RhdGlvbnNDaGFuZ2VJbmZvOiAob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QsIF9hbm5vdGF0aW9uOiBzdHJpbmcpID0+IEFubm90YXRpb25DaGFuZ2VSZXR1cm5UeXBlIHwgbnVsbCB9O1xufSB7XG5cdHJldHVybiB7XG5cdFx0Y2hhbmdlVHlwZTogXCJyZW5hbWVMYWJlbFwiLFxuXHRcdHRpdGxlOiAoKTogc3RyaW5nID0+IChpc0F0RWxlbWVudExldmVsID8gZ2V0VGV4dChcIlJUQV9DT05URVhUX0FDVElPTk1FTlVfUkVOQU1FXCIpIDogZ2V0VGV4dChcIlJUQV9DT05URVhUX0FDVElPTk1FTlVfQ0hBTkdFTEFCRUxTXCIpKSxcblx0XHRpY29uOiBcInNhcC1pY29uOi8vZWRpdFwiLFxuXHRcdHNpbmdsZVJlbmFtZTogaXNBdEVsZW1lbnRMZXZlbCxcblx0XHRjb250cm9sQmFzZWRSZW5hbWVDaGFuZ2VUeXBlOiBcInJlbmFtZUZpZWxkXCIsXG5cdFx0dHlwZTogQW5ub3RhdGlvblR5cGVzLlN0cmluZ1R5cGUsXG5cdFx0ZGVsZWdhdGU6IHtcblx0XHRcdGdldEFubm90YXRpb25zQ2hhbmdlSW5mbzogKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LCBfYW5ub3RhdGlvbjogc3RyaW5nKTogQW5ub3RhdGlvbkNoYW5nZVJldHVyblR5cGUgfCBudWxsID0+IHtcblx0XHRcdFx0bGV0IHRlbXBsYXRlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db250cm9sKSBhcyBUZW1wbGF0ZUNvbXBvbmVudCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKCF0ZW1wbGF0ZUNvbXBvbmVudCkge1xuXHRcdFx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KG9Db250cm9sKTtcblx0XHRcdFx0XHR0ZW1wbGF0ZUNvbXBvbmVudCA9IHZpZXc/LmdldENvbnRyb2xsZXIoKS5nZXRPd25lckNvbXBvbmVudCgpIGFzIFRlbXBsYXRlQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0ZW1wbGF0ZUNvbXBvbmVudCkge1xuXHRcdFx0XHRcdGxldCB0YXJnZXRQcm9wZXJ0eTogUHJvcGVydHkgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydGllcyA9IGNvbGxlY3RQcm9wZXJ0aWVzKHRlbXBsYXRlQ29tcG9uZW50LCBvQ29udHJvbCwgKCkgPT4gdHJ1ZSk7XG5cdFx0XHRcdFx0Y29uc3QgdGFyZ2V0UHJvcGVydHlQYXRoID0gZ2V0VGFyZ2V0UHJvcGVydHlGcm9tRm9ybUVsZW1lbnQob0NvbnRyb2wpO1xuXHRcdFx0XHRcdGlmICh0YXJnZXRQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0XHRcdHRhcmdldFByb3BlcnR5ID0gcHJvcGVydGllcz8uZmluZCgocHJvcCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcHJvcC5wcm9wZXJ0eS5uYW1lID09PSB0YXJnZXRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdFx0XHR9KT8ucHJvcGVydHk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHByb3BlcnRpZXMgJiYgcHJvcGVydGllcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRzZXJ2aWNlVXJsOiAob0NvbnRyb2wuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsIHwgdW5kZWZpbmVkKT8uZ2V0U2VydmljZVVybCgpLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLm1hcCgocHJvcDogeyBwcm9wZXJ0eTogUHJvcGVydHk7IGVudGl0eVR5cGU6IEVudGl0eVR5cGUgfSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eU5hbWU6IGAke3Byb3AucHJvcGVydHkubmFtZX1gLFxuXHRcdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiL1wiICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcC5lbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiL1wiICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcC5wcm9wZXJ0eS5uYW1lICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VmFsdWU6IHByb3AucHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSA/PyBwcm9wLnByb3BlcnR5Lm5hbWVcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0cG9zc2libGVWYWx1ZXM6IFtdLFxuXHRcdFx0XHRcdFx0XHRwcmVTZWxlY3RlZFByb3BlcnR5OiB0YXJnZXRQcm9wZXJ0eVxuXHRcdFx0XHRcdFx0XHRcdD8gXCIvXCIgKyB0YXJnZXRQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWUgKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWxcIlxuXHRcdFx0XHRcdFx0XHRcdDogXCJcIiAvLyBpZiB0aGUgYWN0aW9uIGlzIHRyaWdnZXJlZCBmcm9tIGEgY29udHJvbCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgcHJvcGVydHksIG9ubHkgdGhpcyBvbmUgd2lsbCBiZSBzaG93biBpbiB0aGUgRGlhbG9nIGluaXRpYWxseSAoc2VhcmNoIGZpZWxkIHBvcHVsYXRlZCB3aXRoIHRoaXMgc3RyaW5nKVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dEFycmFuZ2VtZW50Q2hhbmdlQWN0aW9uKGtleSA9IFwiUlRBX0NPTlRFWFRfQUNUSU9OTUVOVV9URVhUQVJSQU5HRVwiKToge1xuXHRjaGFuZ2VUeXBlOiBzdHJpbmc7XG5cdHRpdGxlOiAoKSA9PiBzdHJpbmc7XG5cdHR5cGU6IHN0cmluZztcblx0ZGVsZWdhdGU6IHsgZ2V0QW5ub3RhdGlvbnNDaGFuZ2VJbmZvOiAob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QsIF9hbm5vdGF0aW9uOiBzdHJpbmcpID0+IEFubm90YXRpb25DaGFuZ2VSZXR1cm5UeXBlIHwgbnVsbCB9O1xufSB7XG5cdHJldHVybiB7XG5cdFx0Y2hhbmdlVHlwZTogXCJ0ZXh0QXJyYW5nZW1lbnRfVGVzdFwiLFxuXHRcdHRpdGxlOiAoKTogc3RyaW5nID0+IGdldFRleHQoa2V5KSxcblx0XHR0eXBlOiBBbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0VHlwZSxcblx0XHRkZWxlZ2F0ZToge1xuXHRcdFx0Z2V0QW5ub3RhdGlvbnNDaGFuZ2VJbmZvOiAob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QsIF9hbm5vdGF0aW9uOiBzdHJpbmcpOiBBbm5vdGF0aW9uQ2hhbmdlUmV0dXJuVHlwZSB8IG51bGwgPT4ge1xuXHRcdFx0XHRsZXQgdGVtcGxhdGVDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbnRyb2wpIGFzIFRlbXBsYXRlQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAoIXRlbXBsYXRlQ29tcG9uZW50KSB7XG5cdFx0XHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcob0NvbnRyb2wpO1xuXHRcdFx0XHRcdHRlbXBsYXRlQ29tcG9uZW50ID0gdmlldz8uZ2V0Q29udHJvbGxlcigpLmdldE93bmVyQ29tcG9uZW50KCkgYXMgVGVtcGxhdGVDb21wb25lbnQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRlbXBsYXRlQ29tcG9uZW50KSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydGllcyA9IGNvbGxlY3RQcm9wZXJ0aWVzKHRlbXBsYXRlQ29tcG9uZW50LCBvQ29udHJvbCwgZmlsdGVyUHJvcGVydHlXaXRoVGV4dEFubm90YXRpb24pO1xuXHRcdFx0XHRcdGlmIChwcm9wZXJ0aWVzICYmIHByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0c2VydmljZVVybDogKG9Db250cm9sLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCB8IHVuZGVmaW5lZCk/LmdldFNlcnZpY2VVcmwoKSxcblx0XHRcdFx0XHRcdFx0cHJvcGVydGllczogcHJvcGVydGllcy5tYXAoKHByb3A6IHsgcHJvcGVydHk6IFByb3BlcnR5OyBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlIH0pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBkZWZhdWx0VHlwZSA9XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9wLmVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LlRleHRBcnJhbmdlbWVudD8udG9TdHJpbmcoKSA/PyBUZXh0QXJyYW5nZW1lbnRUeXBlLlRleHRGaXJzdC50b1N0cmluZygpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eU5hbWU6IHByb3AucHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSA/PyBwcm9wLnByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCIvXCIgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9wLmVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCIvXCIgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9wLnByb3BlcnR5Lm5hbWUgK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIixcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRWYWx1ZTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcC5wcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LlRleHQ/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50Py50b1N0cmluZygpID8/IGRlZmF1bHRUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdHBvc3NpYmxlVmFsdWVzOiBPYmplY3Qua2V5cyhURVhUX0FSUkFOR0VNRU5UX0xBQkVMUykubWFwKChzS2V5KSA9PiAoe1xuXHRcdFx0XHRcdFx0XHRcdGtleTogc0tleSxcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBURVhUX0FSUkFOR0VNRU5UX0xBQkVMU1tzS2V5IGFzIHVua25vd24gYXMga2V5b2YgdHlwZW9mIFRFWFRfQVJSQU5HRU1FTlRfTEFCRUxTXVxuXHRcdFx0XHRcdFx0XHR9KSksXG5cdFx0XHRcdFx0XHRcdHByZVNlbGVjdGVkUHJvcGVydHk6IFwiXCIgLy8gaWYgdGhlIGFjdGlvbiBpcyB0cmlnZ2VyZWQgZnJvbSBhIGNvbnRyb2wgdGhhdCBjb3JyZXNwb25kcyB0byBhIHByb3BlcnR5LCBvbmx5IHRoaXMgb25lIHdpbGwgYmUgc2hvd24gaW4gdGhlIERpYWxvZyBpbml0aWFsbHkgKHNlYXJjaCBmaWVsZCBwb3B1bGF0ZWQgd2l0aCB0aGlzIHN0cmluZylcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxu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
|