@sapui5/sap.fe.core 1.130.0 → 1.131.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +3 -3
- package/src/sap/fe/core/ActionRuntime.ts +1 -1
- package/src/sap/fe/core/CommonUtils.js +38 -14
- package/src/sap/fe/core/CommonUtils.ts +39 -15
- package/src/sap/fe/core/TemplateComponent.js +4 -1
- package/src/sap/fe/core/TemplateComponent.ts +2 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +248 -0
- package/src/sap/fe/core/buildingBlocks/{BuildingBlockBase.ts → BuildingBlock.ts} +73 -132
- package/src/sap/fe/core/controllerextensions/EditFlow.js +17 -7
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +17 -6
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +4 -2
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +3 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +5 -2
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +4 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +47 -19
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +57 -19
- package/src/sap/fe/core/controllerextensions/PageReady.js +20 -18
- package/src/sap/fe/core/controllerextensions/PageReady.ts +19 -18
- package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +3 -2
- package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +5 -1
- package/src/sap/fe/core/controllerextensions/ViewState.ts +4 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +9 -5
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +17 -6
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +4 -3
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +4 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +3 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +17 -20
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +30 -29
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +5 -5
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +4 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +77 -35
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +88 -43
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +3 -7
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -4
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +70 -0
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.ts +99 -0
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +14 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +20 -6
- package/src/sap/fe/core/converters/ConverterContext.js +10 -3
- package/src/sap/fe/core/converters/ConverterContext.ts +8 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +5 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +10 -5
- package/src/sap/fe/core/converters/controls/Common/KPI.js +26 -9
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +48 -5
- package/src/sap/fe/core/converters/controls/Common/Table.js +63 -67
- package/src/sap/fe/core/converters/controls/Common/Table.ts +87 -81
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +2 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +2 -3
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +2 -2
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +12 -8
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +10 -6
- package/src/sap/fe/core/formatters/StandardFormatter.js +4 -1
- package/src/sap/fe/core/formatters/StandardFormatter.ts +4 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +37 -10
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +38 -14
- package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
- package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +3 -2
- package/src/sap/fe/core/helpers/DeleteHelper.ts +2 -1
- package/src/sap/fe/core/helpers/MetaPath.js +17 -2
- package/src/sap/fe/core/helpers/MetaPath.ts +27 -6
- package/src/sap/fe/core/helpers/RecommendationHelper.js +2 -2
- package/src/sap/fe/core/helpers/RecommendationHelper.ts +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +8 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +9 -2
- package/src/sap/fe/core/library.js +5 -2
- package/src/sap/fe/core/library.support.js +3 -3
- package/src/sap/fe/core/library.support.ts +2 -1
- package/src/sap/fe/core/library.ts +4 -0
- package/src/sap/fe/core/messagebundle.properties +6 -0
- package/src/sap/fe/core/messagebundle_ar.properties +11 -3
- package/src/sap/fe/core/messagebundle_bg.properties +14 -6
- package/src/sap/fe/core/messagebundle_ca.properties +10 -2
- package/src/sap/fe/core/messagebundle_cnr.properties +10 -2
- package/src/sap/fe/core/messagebundle_cs.properties +10 -2
- package/src/sap/fe/core/messagebundle_cy.properties +10 -2
- package/src/sap/fe/core/messagebundle_da.properties +10 -2
- package/src/sap/fe/core/messagebundle_de.properties +12 -4
- package/src/sap/fe/core/messagebundle_el.properties +10 -2
- package/src/sap/fe/core/messagebundle_en.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +10 -2
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +10 -2
- package/src/sap/fe/core/messagebundle_es.properties +12 -4
- package/src/sap/fe/core/messagebundle_es_MX.properties +10 -2
- package/src/sap/fe/core/messagebundle_et.properties +10 -2
- package/src/sap/fe/core/messagebundle_fi.properties +10 -2
- package/src/sap/fe/core/messagebundle_fr.properties +10 -2
- package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -3
- package/src/sap/fe/core/messagebundle_hi.properties +10 -2
- package/src/sap/fe/core/messagebundle_hr.properties +11 -3
- package/src/sap/fe/core/messagebundle_hu.properties +11 -3
- package/src/sap/fe/core/messagebundle_id.properties +10 -2
- package/src/sap/fe/core/messagebundle_it.properties +10 -2
- package/src/sap/fe/core/messagebundle_iw.properties +11 -3
- package/src/sap/fe/core/messagebundle_ja.properties +10 -2
- package/src/sap/fe/core/messagebundle_kk.properties +10 -2
- package/src/sap/fe/core/messagebundle_ko.properties +10 -2
- package/src/sap/fe/core/messagebundle_lt.properties +10 -2
- package/src/sap/fe/core/messagebundle_lv.properties +10 -2
- package/src/sap/fe/core/messagebundle_mk.properties +10 -2
- package/src/sap/fe/core/messagebundle_ms.properties +10 -2
- package/src/sap/fe/core/messagebundle_nl.properties +12 -4
- package/src/sap/fe/core/messagebundle_no.properties +11 -3
- package/src/sap/fe/core/messagebundle_pl.properties +10 -2
- package/src/sap/fe/core/messagebundle_pt.properties +10 -2
- package/src/sap/fe/core/messagebundle_pt_PT.properties +10 -2
- package/src/sap/fe/core/messagebundle_ro.properties +10 -2
- package/src/sap/fe/core/messagebundle_ru.properties +10 -2
- package/src/sap/fe/core/messagebundle_sh.properties +10 -2
- package/src/sap/fe/core/messagebundle_sk.properties +10 -2
- package/src/sap/fe/core/messagebundle_sl.properties +10 -2
- package/src/sap/fe/core/messagebundle_sr.properties +10 -2
- package/src/sap/fe/core/messagebundle_sv.properties +10 -2
- package/src/sap/fe/core/messagebundle_th.properties +12 -4
- package/src/sap/fe/core/messagebundle_tr.properties +12 -4
- package/src/sap/fe/core/messagebundle_uk.properties +10 -2
- package/src/sap/fe/core/messagebundle_vi.properties +11 -3
- package/src/sap/fe/core/messagebundle_zh_CN.properties +10 -2
- package/src/sap/fe/core/messagebundle_zh_TW.properties +10 -2
- package/src/sap/fe/core/operationsHelper.js +4 -4
- package/src/sap/fe/core/operationsHelper.ts +4 -4
- package/src/sap/fe/core/rootView/Fcl.controller.js +2 -2
- package/src/sap/fe/core/rootView/Fcl.controller.ts +4 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +5 -5
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -3
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -28
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -35
- package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -3
- package/src/sap/fe/core/services/ShellServicesFactory.js +2 -13
- package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -17
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +5 -3
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +3 -4
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
- package/src/sap/fe/core/templating/DataFieldFormatters.js +13 -6
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -6
- package/src/sap/fe/core/templating/UIFormatters.js +3 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +4 -3
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +0 -326
|
@@ -465,8 +465,9 @@ class TransactionHelper {
|
|
|
465
465
|
resourceModel: ResourceModel,
|
|
466
466
|
messageHandler: MessageHandler
|
|
467
467
|
): Promise<ODataV4Context | undefined> {
|
|
468
|
+
const headerContextPath = mainListBinding.getHeaderContext()!.getPath();
|
|
468
469
|
const metaModel = mainListBinding.getModel().getMetaModel();
|
|
469
|
-
const metaPath = metaModel.getMetaPath(
|
|
470
|
+
const metaPath = metaModel.getMetaPath(headerContextPath);
|
|
470
471
|
const messagesPath = ModelHelper.getMessagesPath(metaModel, metaPath);
|
|
471
472
|
const bindingParameters: BindContextParameters = { $$patchWithoutSideEffects: true };
|
|
472
473
|
|
|
@@ -476,7 +477,7 @@ class TransactionHelper {
|
|
|
476
477
|
const result = await this.callAction(
|
|
477
478
|
actionName,
|
|
478
479
|
{
|
|
479
|
-
contexts: mainListBinding.getHeaderContext(),
|
|
480
|
+
contexts: mainListBinding.getModel().bindList(headerContextPath).getHeaderContext(),
|
|
480
481
|
showActionParameterDialog: true,
|
|
481
482
|
label: this._getSpecificCreateActionDialogLabel(metaModel, metaPath, actionName, resourceModel),
|
|
482
483
|
bindingParameters: bindingParameters,
|
|
@@ -89,7 +89,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
89
89
|
const oEditPromise = oOperation.execute(groupId, undefined, operationsHelper.fnOnStrictHandlingFailed.bind(draft, groupId, {
|
|
90
90
|
label: sActionName,
|
|
91
91
|
model: oContext.getModel()
|
|
92
|
-
}, resourceModel, null, null, null, messageHandler, undefined), oContext.getBinding().isA("sap.ui.model.odata.v4.ODataListBinding"));
|
|
92
|
+
}, resourceModel, null, null, null, messageHandler, undefined, undefined), oContext.getBinding().isA("sap.ui.model.odata.v4.ODataListBinding"));
|
|
93
93
|
if (overwriteChange) {
|
|
94
94
|
oOperation.getModel().submitBatch(groupId);
|
|
95
95
|
}
|
|
@@ -155,7 +155,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
155
155
|
return await oOperation.execute(sGroupId, bIgnoreEtag, sGroupId ? operationsHelper.fnOnStrictHandlingFailed.bind(draft, sGroupId, {
|
|
156
156
|
label: sActionName,
|
|
157
157
|
model: oContext.getModel()
|
|
158
|
-
}, resourceModel, null, null, null, messageHandler, undefined) : undefined, oContext.getBinding().isA("sap.ui.model.odata.v4.ODataListBinding"));
|
|
158
|
+
}, resourceModel, null, null, null, messageHandler, undefined, undefined) : undefined, oContext.getBinding().isA("sap.ui.model.odata.v4.ODataListBinding"));
|
|
159
159
|
} catch (e) {
|
|
160
160
|
if (bHasPrepareAction) {
|
|
161
161
|
const actionName = getActionName(oContext, draftOperations.PREPARE),
|
|
@@ -266,7 +266,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
266
266
|
const oDiscardPromise = !bEnableStrictHandling ? oDiscardOperation.execute(sGroupId) : oDiscardOperation.execute(sGroupId, undefined, operationsHelper.fnOnStrictHandlingFailed.bind(draft, sGroupId, {
|
|
267
267
|
label: sActionName,
|
|
268
268
|
model: oContext.getModel()
|
|
269
|
-
}, resourceModel, null, null, null, messageHandler, undefined), false);
|
|
269
|
+
}, resourceModel, null, null, null, messageHandler, undefined, undefined), false);
|
|
270
270
|
oContext.getModel().submitBatch(sGroupId);
|
|
271
271
|
await oDiscardPromise;
|
|
272
272
|
} else {
|
|
@@ -620,4 +620,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
620
620
|
};
|
|
621
621
|
return draft;
|
|
622
622
|
}, false);
|
|
623
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkcmFmdE9wZXJhdGlvbnMiLCJFRElUIiwiQUNUSVZBVElPTiIsIkRJU0NBUkQiLCJQUkVQQVJFIiwiZ2V0QWN0aW9uTmFtZSIsIm9Db250ZXh0Iiwic09wZXJhdGlvbiIsIm9Nb2RlbCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNFbnRpdHlTZXRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiZ2V0T2JqZWN0IiwiY3JlYXRlT3BlcmF0aW9uIiwib09wdGlvbnMiLCJzT3BlcmF0aW9uTmFtZSIsImJpbmRDb250ZXh0IiwiZ2V0UmV0dXJuVHlwZSIsImhhc1ByZXBhcmVBY3Rpb24iLCJleGVjdXRlRHJhZnRFZGl0QWN0aW9uIiwiYlByZXNlcnZlQ2hhbmdlcyIsIm9WaWV3IiwiZ3JvdXBJZCIsIm1lc3NhZ2VIYW5kbGVyIiwib3ZlcndyaXRlQ2hhbmdlIiwiZ2V0UHJvcGVydHkiLCIkJGluaGVyaXRFeHBhbmRTZWxlY3QiLCJvT3BlcmF0aW9uIiwiZHJhZnQiLCJzZXRQYXJhbWV0ZXIiLCJyZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsInNBY3Rpb25OYW1lIiwiZ2V0VGV4dCIsIm9FZGl0UHJvbWlzZSIsImV4ZWN1dGUiLCJ1bmRlZmluZWQiLCJvcGVyYXRpb25zSGVscGVyIiwiZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkIiwiYmluZCIsImxhYmVsIiwibW9kZWwiLCJnZXRCaW5kaW5nIiwiaXNBIiwic3VibWl0QmF0Y2giLCJFcnJvciIsImV4ZWN1dGVEcmFmdFZhbGlkYXRpb24iLCJjb250ZXh0IiwiYXBwQ29tcG9uZW50IiwiaWdub3JlRVRhZyIsIk1vZGVsSGVscGVyIiwiZ2V0TWVzc2FnZXNQYXRoIiwiaXNLZWVwQWxpdmUiLCJyZXF1ZXN0T2JqZWN0Iiwib3BlcmF0aW9uIiwiZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb24iLCJnZXRVcGRhdGVHcm91cElkIiwicmVxdWVzdE1lc3NhZ2VzIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZXJyb3IiLCJMb2ciLCJleGVjdXRlRHJhZnRBY3RpdmF0aW9uQWN0aW9uIiwib0FwcENvbXBvbmVudCIsInNHcm91cElkIiwiYkhhc1ByZXBhcmVBY3Rpb24iLCJiSWdub3JlRXRhZyIsImUiLCJhY3Rpb25OYW1lIiwib1NpZGVFZmZlY3RzU2VydmljZSIsIm9CaW5kaW5nUGFyYW1ldGVycyIsImdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMiLCJhVGFyZ2V0UGF0aHMiLCJwYXRoRXhwcmVzc2lvbnMiLCJsZW5ndGgiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJvRXJyb3IiLCJnZXRNZXNzYWdlUGF0aEZvclByZXBhcmUiLCJnZXRNZXNzYWdlUGF0aEZvckNvbnRleHQiLCJfY29udmVydGVkQ29udGV4dCR0YXIiLCJtZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0IiwiY29udmVydGVkQ29udGV4dCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsIm1lc3NhZ2VzIiwidGFyZ2V0RW50aXR5VHlwZSIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiTWVzc2FnZXMiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsInBhdGgiLCJiTWVzc2FnZXMiLCJzTWVzc2FnZXNQYXRoIiwiJHNlbGVjdCIsImdldEdyb3VwSWQiLCJ0aGVuIiwiY2F0Y2giLCJleGVjdXRlRHJhZnREaXNjYXJkQWN0aW9uIiwiYkVuYWJsZVN0cmljdEhhbmRsaW5nIiwib0Rpc2NhcmRPcGVyYXRpb24iLCJvRGlzY2FyZFByb21pc2UiLCJjb21wdXRlU2libGluZ0luZm9ybWF0aW9uIiwicm9vdEN1cnJlbnRDb250ZXh0IiwicmlnaHRtb3N0Q3VycmVudENvbnRleHQiLCJyb290Q29udGV4dEluZm8iLCJzdGFydHNXaXRoIiwiYWRkaXRpb25hbFBhdGgiLCJyZXBsYWNlIiwic2VnbWVudHMiLCJzdWJzdHJpbmciLCJzcGxpdCIsInVuc2hpZnQiLCJvbGRQYXRocyIsIm5ld1BhdGhzIiwiY3VycmVudFBhdGgiLCJwYXRocyIsInJvb3RTaWJsaW5nUGF0aFByb21pc2UiLCJfcm9vdEN1cnJlbnRDb250ZXh0JGciLCJzaGlmdCIsImNhbm9uaWNhbFBhdGhQcm9taXNlcyIsIm1hcCIsInNlZ21lbnQiLCJlbmRzV2l0aCIsInNpYmxpbmdDb250ZXh0IiwiJCRncm91cElkIiwiZ2V0Qm91bmRDb250ZXh0IiwicmVxdWVzdENhbm9uaWNhbFBhdGgiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNhbm9uaWNhbFBhdGhzIiwiYWxsIiwiX2F3YWl0JHJvb3RDb250ZXh0SW5mIiwicm9vdFNpYmxpbmdQYXRoIiwicHVzaCIsInNpYmxpbmdQYXRoIiwiZm9yRWFjaCIsImNhbm9uaWNhbFBhdGgiLCJpbmRleCIsIm5hdmlnYXRpb24iLCJrZXlzIiwidGFyZ2V0Q29udGV4dCIsInBhdGhNYXBwaW5nIiwib2xkUGF0aCIsIm5ld1BhdGgiLCJjcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudCIsIm1QYXJhbWV0ZXJzIiwibVBhcmFtIiwiYlJ1blByZXNlcnZlQ2hhbmdlc0Zsb3ciLCJyZXNwb25zZSIsImRyYWZ0RGF0YUNvbnRleHQiLCJkcmFmdEFkbWluRGF0YSIsIm1lc3NhZ2VIYW5kbGluZyIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJzSW5mbyIsIkluUHJvY2Vzc0J5VXNlckRlc2NyaXB0aW9uIiwiSW5Qcm9jZXNzQnlVc2VyIiwic0VudGl0eVNldCIsImdldFZpZXdEYXRhIiwiZW50aXR5U2V0Iiwic0xvY2tlZEJ5VXNlck1zZyIsIk1lc3NhZ2VCb3giLCJDcmVhdGVkQnlVc2VyRGVzY3JpcHRpb24iLCJDcmVhdGVkQnlVc2VyIiwic1Vuc2F2ZWRDaGFuZ2VzTXNnIiwic2hvd0VkaXRDb25maXJtYXRpb25NZXNzYWdlQm94IiwibWVzc2FnZSIsIm9EcmFmdENvbnRleHQiLCJvUmVzcG9uc2UiLCJzdGF0dXMiLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsInNpYmxpbmdJbmZvIiwiQ29tbW9uVXRpbHMiLCJ3YWl0Rm9yQ29udGV4dFJlcXVlc3RlZCIsImNhbmNlbGVkIiwiX29TaWRlRWZmZWN0cyR0cmlnZ2VyIiwic0VkaXRBY3Rpb25OYW1lIiwib1NpZGVFZmZlY3RzIiwidHJpZ2dlckFjdGlvbnMiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JPRGF0YUFjdGlvbiIsImFjdGl2YXRlRG9jdW1lbnQiLCJiRXhlY3V0ZSIsImZuQmVmb3JlQWN0aXZhdGVEb2N1bWVudCIsIm9BY3RpdmVEb2N1bWVudENvbnRleHQiLCJzQmF0Y2hHcm91cCIsImlnbm9yZUV0YWciLCJoYXNQZW5kaW5nQ2hhbmdlcyIsIm9QcmVwYXJlUHJvbWlzZSIsIm9BY3RpdmF0ZVByb21pc2UiLCJ2YWx1ZXMiLCJlcnIiLCJkYXRhIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZm5BZnRlckFjdGl2YXRlRG9jdW1lbnQiLCJsb2NhbEkxOG5SZWYiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJyZWplY3QiLCJvRGlhbG9nIiwiRGlhbG9nIiwidGl0bGUiLCJzdGF0ZSIsImNvbnRlbnQiLCJUZXh0IiwidGV4dCIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwidHlwZSIsInByZXNzIiwiY2xvc2UiLCJlbmRCdXR0b24iLCJhZnRlckNsb3NlIiwiZGVzdHJveSIsImFkZFN0eWxlQ2xhc3MiLCJvcGVuIiwiZGVsZXRlRHJhZnQiLCJzRGlzY2FyZEFjdGlvbiIsImJJc0FjdGl2ZUVudGl0eSIsIklzQWN0aXZlRW50aXR5IiwiaXNJbmFjdGl2ZSIsInJlc2V0Q2hhbmdlcyIsImRlbGV0ZSIsIl9nZXRJbnZvbHZlZERhdGFNb2RlbCIsImlzRHJhZnRSb290IiwidGFyZ2V0RW50aXR5U2V0IiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJkcmFmdERhdGFMb3NzUG9wdXAiLCJzaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb24iLCJOYXZpZ2F0aW9uVHlwZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiZHJhZnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IGRyYWZ0RGF0YUxvc3NQb3B1cCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnREYXRhTG9zc1BvcHVwXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBTaWRlRWZmZWN0c1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRFcnJvclR5cGUgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCIuLi8uLi9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCIuLi8uLi9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgb3BlcmF0aW9uc0hlbHBlciBmcm9tIFwiLi4vLi4vb3BlcmF0aW9uc0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXIgZnJvbSBcIi4uL01lc3NhZ2VIYW5kbGVyXCI7XG5cbmV4cG9ydCB0eXBlIFNpYmxpbmdJbmZvcm1hdGlvbiA9IHtcblx0dGFyZ2V0Q29udGV4dDogQ29udGV4dDtcblx0cGF0aE1hcHBpbmc6IHsgb2xkUGF0aDogc3RyaW5nOyBuZXdQYXRoOiBzdHJpbmcgfVtdO1xufTtcblxuZXhwb3J0IHR5cGUgUm9vdENvbnRleHRJbmZvID0ge1xuXHRyb290U2libGluZ1BhdGhQcm9taXNlOiBQcm9taXNlPENvbnRleHQgfCB1bmRlZmluZWQ+O1xufTtcblxuZXhwb3J0IHR5cGUgQmluZENvbnRleHRQYXJhbWV0ZXJzID0ge1xuXHQvKipcblx0ICogVGhlIHZhbHVlIGZvciB0aGUgXCI1LjEuMiBTeXN0ZW0gUXVlcnkgT3B0aW9uICRleHBhbmRcIiBvciBhbiBvYmplY3Qgd2hpY2ggZGV0ZXJtaW5lcyB0aGF0IHZhbHVlLiBUaGUgb2JqZWN0XG5cdCAqIGlzIGEgbWFwIGZyb20gZXhwYW5kIHBhdGggdG8gZXhwYW5kIG9wdGlvbnMsIHdoZXJlIHRoZSBvcHRpb25zIGFyZSBhZ2FpbiBtYXBzIG9mIHN5c3RlbSBxdWVyeSBvcHRpb25zLFxuXHQgKiB0eXBpY2FsbHkgd2l0aCBzdHJpbmcgdmFsdWVzLiAkY291bnQgY2FuIGFsc28gYmUgZ2l2ZW4gYXMgYSBgYm9vbGVhbmAgdmFsdWUsICRleHBhbmQgY2FuIHJlY3Vyc2l2ZWx5XG5cdCAqIGJlIGdpdmVuIGFzIGEgbWFwLCAkbGV2ZWxzIGNhbiBhbHNvIGJlIGdpdmVuIGFzIGEgYG51bWJlcmAgdmFsdWUsIGFuZCAkc2VsZWN0IGNhbiBhbHNvIGJlIGdpdmVuIGFzIGFuXG5cdCAqIGFycmF5IChidXQgd2l0aG91dCBuYXZpZ2F0aW9uIHBhdGhzKS4gQW4gZW1wdHkgbWFwIGNhbiBhbHNvIGJlIGdpdmVuIGFzIGBudWxsYCBvciBgdHJ1ZWAuIFNlZSBhbHNvIHtAbGluayBodHRwczovL3VpNS5zYXAuY29tLyMvdG9waWMvMWFiNGY2MmRlNmFiNDY3MDk2YTJhOThiMzYzYTEzNzMgUGFyYW1ldGVyc30uXG5cdCAqL1xuXHQkZXhwYW5kPzogc3RyaW5nIHwgb2JqZWN0O1xuXHQvKipcblx0ICogQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvciBhbiBhcnJheSBvZiBpdGVtcyB3aGljaCBkZXRlcm1pbmUgdGhlIHZhbHVlIGZvciB0aGUgXCI1LjEuMyBTeXN0ZW0gUXVlcnkgT3B0aW9uXG5cdCAqICRzZWxlY3RcIi4gU2luY2UgMS43NS4wLCB3aGVuIHVzaW5nIHRoZSBcImF1dG9FeHBhbmRTZWxlY3RcIiBtb2RlbCBwYXJhbWV0ZXIgKHNlZSB7QGxpbmsgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWwjY29uc3RydWN0b3J9KSxcblx0ICogcGF0aHMgd2l0aCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgY2FuIGJlIGluY2x1ZGVkIGFuZCB3aWxsIGNvbnRyaWJ1dGUgdG8gdGhlIFwiNS4xLjIgU3lzdGVtIFF1ZXJ5IE9wdGlvblxuXHQgKiAkZXhwYW5kXCIuXG5cdCAqL1xuXHQkc2VsZWN0Pzogc3RyaW5nO1xuXHQvKipcblx0ICogV2hldGhlciBhIGJpbmRpbmcgcmVsYXRpdmUgdG8gYW4ge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSB1c2VzIHRoZSBjYW5vbmljYWwgcGF0aCBjb21wdXRlZFxuXHQgKiBmcm9tIGl0cyBjb250ZXh0J3MgcGF0aCBmb3IgZGF0YSBzZXJ2aWNlIHJlcXVlc3RzOyBvbmx5IHRoZSB2YWx1ZSBgdHJ1ZWAgaXMgYWxsb3dlZC5cblx0ICovXG5cdCQkY2Fub25pY2FsUGF0aD86IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBUaGUgZ3JvdXAgSUQgdG8gYmUgdXNlZCBmb3IgKipyZWFkKiogcmVxdWVzdHMgdHJpZ2dlcmVkIGJ5IHRoaXMgYmluZGluZzsgaWYgbm90IHNwZWNpZmllZCwgZWl0aGVyIHRoZVxuXHQgKiBwYXJlbnQgYmluZGluZydzIGdyb3VwIElEIChpZiB0aGUgYmluZGluZyBpcyByZWxhdGl2ZSkgb3IgdGhlIG1vZGVsJ3MgZ3JvdXAgSUQgaXMgdXNlZCwgc2VlIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbCNjb25zdHJ1Y3Rvcn0uXG5cdCAqIFZhbGlkIHZhbHVlcyBhcmUgYHVuZGVmaW5lZGAsICckYXV0bycsICckYXV0by4qJywgJyRkaXJlY3QnIG9yIGFwcGxpY2F0aW9uIGdyb3VwIElEcyBhcyBzcGVjaWZpZWQgaW5cblx0ICoge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsfS5cblx0ICovXG5cdCQkZ3JvdXBJZD86IHN0cmluZztcblx0LyoqXG5cdCAqIEZvciBvcGVyYXRpb24gYmluZGluZ3Mgb25seTogV2hldGhlciAkZXhwYW5kIGFuZCAkc2VsZWN0IGZyb20gdGhlIHBhcmVudCBiaW5kaW5nIGFyZSB1c2VkIGluIHRoZSByZXF1ZXN0XG5cdCAqIHNlbnQgb24ge0BsaW5rICNleGVjdXRlfS4gSWYgc2V0IHRvIGB0cnVlYCwgdGhlIGJpbmRpbmcgbXVzdCBub3Qgc2V0IHRoZSAkZXhwYW5kIGl0c2VsZiwgdGhlIG9wZXJhdGlvblxuXHQgKiBtdXN0IGJlIGJvdW5kLCBhbmQgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlIGJpbmRpbmcgcGFyYW1ldGVyIG11c3QgYmVsb25nIHRvIHRoZSBzYW1lIGVudGl0eSBzZXQuXG5cdCAqL1xuXHQkJGluaGVyaXRFeHBhbmRTZWxlY3Q/OiBib29sZWFuO1xuXHQvKipcblx0ICogV2hldGhlciB0aGUgYmluZGluZyBhbHdheXMgdXNlcyBhbiBvd24gc2VydmljZSByZXF1ZXN0IHRvIHJlYWQgaXRzIGRhdGE7IG9ubHkgdGhlIHZhbHVlIGB0cnVlYCBpcyBhbGxvd2VkLlxuXHQgKi9cblx0JCRvd25SZXF1ZXN0PzogYm9vbGVhbjtcblx0LyoqXG5cdCAqIFdoZXRoZXIgaW1wbGljaXQgbG9hZGluZyBvZiBzaWRlIGVmZmVjdHMgdmlhIFBBVENIIHJlcXVlc3RzIGlzIHN3aXRjaGVkIG9mZjsgb25seSB0aGUgdmFsdWUgYHRydWVgIGlzXG5cdCAqIGFsbG93ZWQuIFRoaXMgc2V0cyB0aGUgcHJlZmVyZW5jZSBcInJldHVybj1taW5pbWFsXCIgYW5kIHJlcXVpcmVzIHRoZSBzZXJ2aWNlIHRvIHJldHVybiBhbiBFVGFnIGhlYWRlclxuXHQgKiBmb3IgXCIyMDQgTm8gQ29udGVudFwiIHJlc3BvbnNlcy4gSWYgbm90IHNwZWNpZmllZCwgdGhlIHZhbHVlIG9mIHRoZSBwYXJlbnQgYmluZGluZyBpcyB1c2VkLlxuXHQgKi9cblx0JCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0cz86IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBUaGUgZ3JvdXAgSUQgdG8gYmUgdXNlZCBmb3IgKip1cGRhdGUqKiByZXF1ZXN0cyB0cmlnZ2VyZWQgYnkgdGhpcyBiaW5kaW5nOyBpZiBub3Qgc3BlY2lmaWVkLCBlaXRoZXIgdGhlXG5cdCAqIHBhcmVudCBiaW5kaW5nJ3MgdXBkYXRlIGdyb3VwIElEIChpZiB0aGUgYmluZGluZyBpcyByZWxhdGl2ZSkgb3IgdGhlIG1vZGVsJ3MgdXBkYXRlIGdyb3VwIElEIGlzIHVzZWQsXG5cdCAqIHNlZSB7QGxpbmsgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWwjY29uc3RydWN0b3J9LiBGb3IgdmFsaWQgdmFsdWVzLCBzZWUgcGFyYW1ldGVyIFwiJCRncm91cElkXCIuXG5cdCAqL1xuXHQkJHVwZGF0ZUdyb3VwSWQ/OiBzdHJpbmc7XG59O1xuXG4vKiBDb25zdGFudHMgZm9yIGRyYWZ0IG9wZXJhdGlvbnMgKi9cbmNvbnN0IGRyYWZ0T3BlcmF0aW9ucyA9IHtcblx0RURJVDogXCJFZGl0QWN0aW9uXCIsXG5cdEFDVElWQVRJT046IFwiQWN0aXZhdGlvbkFjdGlvblwiLFxuXHRESVNDQVJEOiBcIkRpc2NhcmRBY3Rpb25cIixcblx0UFJFUEFSRTogXCJQcmVwYXJhdGlvbkFjdGlvblwiXG59O1xuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgZm9yIHRoZSBkcmFmdCBwcm9ncmFtbWluZyBtb2RlbFxuICogQG5hbWVzcGFjZVxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1vZHVsZSBpcyBvbmx5IGZvciBleHBlcmltZW50YWwgdXNlISA8YnIvPjxiPlRoaXMgaXMgb25seSBhIFBPQyBhbmQgbWF5YmUgZGVsZXRlZDwvYj5cbiAqIEBzaW5jZSAxLjU0LjBcbiAqL1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIGFjdGlvbiBuYW1lIGZvciBhIGRyYWZ0IG9wZXJhdGlvbi5cbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IHNob3VsZCBiZSBib3VuZCB0byB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0gc09wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIG5hbWVcbiAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIHRoZSBkcmFmdCBvcGVyYXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aW9uTmFtZShvQ29udGV4dDogQ29udGV4dCwgc09wZXJhdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3Qgb01vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdHNFbnRpdHlTZXRQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpO1xuXG5cdHJldHVybiBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzRW50aXR5U2V0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdC8ke3NPcGVyYXRpb259YCk7XG59XG4vKipcbiAqIENyZWF0ZXMgYW4gb3BlcmF0aW9uIGNvbnRleHQgYmluZGluZyBmb3IgdGhlIGdpdmVuIGNvbnRleHQgYW5kIG9wZXJhdGlvbi5cbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IHNob3VsZCBiZSBib3VuZCB0byB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0gc09wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIChhY3Rpb24gb3IgZnVuY3Rpb24gaW1wb3J0KVxuICogQHBhcmFtIG9PcHRpb25zIE9wdGlvbnMgdG8gY3JlYXRlIHRoZSBvcGVyYXRpb24gY29udGV4dFxuICogQHJldHVybnMgVGhlIGNvbnRleHQgYmluZGluZyBvZiB0aGUgYm91bmQgb3BlcmF0aW9uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdGlvbihvQ29udGV4dDogQ29udGV4dCwgc09wZXJhdGlvbjogc3RyaW5nLCBvT3B0aW9ucz86IEJpbmRDb250ZXh0UGFyYW1ldGVycyk6IE9EYXRhQ29udGV4dEJpbmRpbmcge1xuXHRjb25zdCBzT3BlcmF0aW9uTmFtZSA9IGdldEFjdGlvbk5hbWUob0NvbnRleHQsIHNPcGVyYXRpb24pO1xuXG5cdHJldHVybiBvQ29udGV4dC5nZXRNb2RlbCgpLmJpbmRDb250ZXh0KGAke3NPcGVyYXRpb25OYW1lfSguLi4pYCwgb0NvbnRleHQsIG9PcHRpb25zKTtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgcmV0dXJuIHR5cGUgZm9yIGEgZHJhZnQgb3BlcmF0aW9uLlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgc2hvdWxkIGJlIGJvdW5kIHRvIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBzT3BlcmF0aW9uIFRoZSBvcGVyYXRpb24gbmFtZVxuICogQHJldHVybnMgVGhlIHJldHVybiB0eXBlIG9mIHRoZSBkcmFmdCBvcGVyYXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0UmV0dXJuVHlwZShvQ29udGV4dDogQ29udGV4dCwgc09wZXJhdGlvbjogc3RyaW5nKTogdW5rbm93biB7XG5cdGNvbnN0IG9Nb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCksXG5cdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzRW50aXR5U2V0UGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0NvbnRleHQuZ2V0UGF0aCgpKTtcblxuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3QvJHtzT3BlcmF0aW9ufS8kUmV0dXJuVHlwZWApO1xufVxuLyoqXG4gKiBDaGVjayBpZiBvcHRpb25hbCBkcmFmdCBwcmVwYXJlIGFjdGlvbiBleGlzdHMuXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBzaG91bGQgYmUgYm91bmQgdG8gdGhlIG9wZXJhdGlvblxuICogQHJldHVybnMgVHJ1ZSBpZiBhIGEgcHJlcGFyZSBhY3Rpb24gZXhpc3RzXG4gKi9cbmZ1bmN0aW9uIGhhc1ByZXBhcmVBY3Rpb24ob0NvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0cmV0dXJuICEhZ2V0QWN0aW9uTmFtZShvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLlBSRVBBUkUpO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGRyYWZ0IGZyb20gYW4gYWN0aXZlIGRvY3VtZW50LlxuICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHBlcmZvcm1lZFxuICogQHBhcmFtIGJQcmVzZXJ2ZUNoYW5nZXMgSWYgdHJ1ZSAtIGV4aXN0aW5nIGNoYW5nZXMgZnJvbSBhbm90aGVyIHVzZXIgdGhhdCBhcmUgbm90IGxvY2tlZCBhcmUgcHJlc2VydmVkIGFuZCBhbiBlcnJvciBpcyBzZW50IGZyb20gdGhlIGJhY2tlbmQsIG90aGVyd2lzZSBmYWxzZSAtIGV4aXN0aW5nIGNoYW5nZXMgZnJvbSBhbm90aGVyIHVzZXIgdGhhdCBhcmUgbm90IGxvY2tlZCBhcmUgb3ZlcndyaXR0ZW48L2xpPlxuICogQHBhcmFtIG9WaWV3IElmIHRydWUgLSBleGlzdGluZyBjaGFuZ2VzIGZyb20gYW5vdGhlclxuICogQHBhcmFtIGdyb3VwSWQgVGhlIGJhdGNoIGdyb3VwSWQgZm9yIHBvc3QgY2FsbCBvZiBlZGl0IGFjdGlvblxuICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyICBUaGUgbWVzc2FnZSBoYW5kbGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG4gKiBAcGFyYW0gb3ZlcndyaXRlQ2hhbmdlXG4gKiBAcmV0dXJucyBSZXNvbHZlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvbnRleHQgb2YgdGhlIG9wZXJhdGlvblxuICovXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlRHJhZnRFZGl0QWN0aW9uKFxuXHRvQ29udGV4dDogQ29udGV4dCxcblx0YlByZXNlcnZlQ2hhbmdlczogYm9vbGVhbixcblx0b1ZpZXc6IFZpZXcsXG5cdGdyb3VwSWQ6IHN0cmluZyxcblx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRvdmVyd3JpdGVDaGFuZ2U/OiBib29sZWFuXG4pOiBQcm9taXNlPENvbnRleHQ+IHtcblx0aWYgKG9Db250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikpIHtcblx0XHRjb25zdCBvT3B0aW9ucyA9IHsgJCRpbmhlcml0RXhwYW5kU2VsZWN0OiB0cnVlIH07XG5cdFx0Y29uc3Qgb09wZXJhdGlvbiA9IGRyYWZ0LmNyZWF0ZU9wZXJhdGlvbihvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLkVESVQsIG9PcHRpb25zKTtcblx0XHRvT3BlcmF0aW9uLnNldFBhcmFtZXRlcihcIlByZXNlcnZlQ2hhbmdlc1wiLCBiUHJlc2VydmVDaGFuZ2VzKTtcblxuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKG9WaWV3KTtcblx0XHRjb25zdCBzQWN0aW9uTmFtZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX09CSkVDVF9QQUdFX0VESVRcIik7XG5cdFx0Ly9JZiB0aGUgY29udGV4dCBpcyBjb21pbmcgZnJvbSBhIGxpc3QgYmluZGluZyB3ZSBwYXNzIHRoZSBmbGFnIHRydWUgdG8gcmVwbGFjZSB0aGUgY29udGV4dCBieSB0aGUgYWN0aXZlIG9uZVxuXHRcdGNvbnN0IG9FZGl0UHJvbWlzZSA9IG9PcGVyYXRpb24uZXhlY3V0ZShcblx0XHRcdGdyb3VwSWQsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRvcGVyYXRpb25zSGVscGVyLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRkcmFmdCxcblx0XHRcdFx0Z3JvdXBJZCxcblx0XHRcdFx0eyBsYWJlbDogc0FjdGlvbk5hbWUsIG1vZGVsOiBvQ29udGV4dC5nZXRNb2RlbCgpIH0sXG5cdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHR1bmRlZmluZWRcblx0XHRcdCksXG5cdFx0XHRvQ29udGV4dC5nZXRCaW5kaW5nKCkuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIilcblx0XHQpO1xuXHRcdGlmIChvdmVyd3JpdGVDaGFuZ2UpIHtcblx0XHRcdG9PcGVyYXRpb24uZ2V0TW9kZWwoKS5zdWJtaXRCYXRjaChncm91cElkKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9FZGl0UHJvbWlzZTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJZb3UgY2Fubm90IGVkaXQgdGhpcyBkcmFmdCBkb2N1bWVudFwiKTtcblx0fVxufVxuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBkcmFmdC4gVGhlIFByZXBhcmVBY3Rpb24gaXMgdHJpZ2dlcmVkIGlmIHRoZSBtZXNzYWdlcyBhcmUgYW5ub3RhdGVkIGFuZCBlbnRpdHlTZXQgZ2V0cyBhIFByZXBhcmF0aW9uQWN0aW9uIGFubm90YXRlZC5cbiAqIElmIHRoZSBvcGVyYXRpb24gc3VjY2VlZHMgYW5kIG9wZXJhdGlvbiBkb2Vzbid0IGdldCBhIHJldHVybiB0eXBlIChSQVAgc3lzdGVtKSB0aGUgbWVzc2FnZXMgYXJlIHJlcXVlc3RlZC5cbiAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBQcmVwYXJlQWN0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWRcbiAqIEBwYXJhbSBhcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIGlnbm9yZUVUYWcgSWYgc2V0IHRvIHRydWUsIEVUYWdzIGFyZSBpZ25vcmVkIHdoZW4gZXhlY3V0aW5nIHRoZSBhY3Rpb25cbiAqIEByZXR1cm5zIFJlc29sdmUgZnVuY3Rpb24gcmV0dXJuc1xuICogIC0gdGhlIGNvbnRleHQgb2YgdGhlIG9wZXJhdGlvbiBpZiB0aGUgYWN0aW9uIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZFxuICogIC0gdm9pZCBpZiB0aGUgYWN0aW9uIGhhcyBmYWlsZWRcbiAqICAtIHVuZGVmaW5lZCBpZiB0aGUgYWN0aW9uIGhhcyBub3QgYmVlbiB0cmlnZ2VyZWQgc2luY2UgdGhlIHByZXJlcXVpc2l0ZXMgYXJlIG5vdCBtZXRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbihcblx0Y29udGV4dDogQ29udGV4dCxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdGlnbm9yZUVUYWc6IGJvb2xlYW5cbik6IFByb21pc2U8T0RhdGFDb250ZXh0QmluZGluZyB8IHZvaWQgfCB1bmRlZmluZWQ+IHtcblx0aWYgKE1vZGVsSGVscGVyLmdldE1lc3NhZ2VzUGF0aChjb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksIGNvbnRleHQuZ2V0UGF0aCgpKSAmJiBkcmFmdC5oYXNQcmVwYXJlQWN0aW9uKGNvbnRleHQpKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGlmICghaWdub3JlRVRhZyAmJiAhY29udGV4dC5pc0tlZXBBbGl2ZSgpKSB7XG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGVudGl0eSByZWxhdGVkIHRvIHRoZSBjb250ZXh0IHRvIHBvc3QgdGhlIGFjdGlvbiB3aXRoIHRoZSBJZi1NYXRjaCBoZWFkZXJcblx0XHRcdFx0Ly8gU29tZSB0cmlnZ2VycyAoZW50ZXIgb24gdGFibGUpIGNhbiBnZW5lcmF0ZSBhIHByb21pc2UgaW4gdGhlIGNhY2hlIHNvIGlmIHdlIGRvbid0IHdhaXQgZm9yIHRoZSBlbnRpdHlcblx0XHRcdFx0Ly8gdGhlIFBPU1Qgd2lsbCBiZSBzZW50IHdpdGhvdXQgSWYtTWF0Y2ggYW5kIHdpbGwgZ2VuZXJhdGUgYW4gZXJyb3Igb24gYmFja2VuZCBzaWRlLlxuXHRcdFx0XHRhd2FpdCAoY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFDb250ZXh0QmluZGluZykucmVxdWVzdE9iamVjdChcIlwiKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG9wZXJhdGlvbiA9IGF3YWl0IGRyYWZ0LmV4ZWN1dGVEcmFmdFByZXBhcmF0aW9uQWN0aW9uKGNvbnRleHQsIGNvbnRleHQuZ2V0VXBkYXRlR3JvdXBJZCgpLCB0cnVlLCBpZ25vcmVFVGFnKTtcblx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIHJldHVybmVkIG9wZXJhdGlvbiBieSBleGVjdXRlRHJhZnRQcmVwYXJhdGlvbkFjdGlvbiAtPiB0aGUgYWN0aW9uIGhhcyBmYWlsZWRcblx0XHRcdGlmIChvcGVyYXRpb24gJiYgIWdldFJldHVyblR5cGUoY29udGV4dCwgZHJhZnRPcGVyYXRpb25zLlBSRVBBUkUpKSB7XG5cdFx0XHRcdHJlcXVlc3RNZXNzYWdlcyhjb250ZXh0LCBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG9wZXJhdGlvbjtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBtZXNzYWdlc1wiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQWN0aXZhdGVzIGEgZHJhZnQgZG9jdW1lbnQuIFRoZSBkcmFmdCB3aWxsIHJlcGxhY2UgdGhlIHNpYmxpbmcgZW50aXR5IGFuZCB3aWxsIGJlIGRlbGV0ZWQgYnkgdGhlIGJhY2sgZW5kLlxuICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHBlcmZvcm1lZFxuICogQHBhcmFtIG9BcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyXG4gKiBAcGFyYW0gW3NHcm91cElkXSBUaGUgb3B0aW9uYWwgYmF0Y2ggZ3JvdXAgaW4gd2hpY2ggdGhlIG9wZXJhdGlvbiBpcyB0byBiZSBleGVjdXRlZFxuICogQHJldHVybnMgUmVzb2x2ZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb250ZXh0IG9mIHRoZSBvcGVyYXRpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZURyYWZ0QWN0aXZhdGlvbkFjdGlvbihcblx0b0NvbnRleHQ6IENvbnRleHQsXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRzR3JvdXBJZD86IHN0cmluZ1xuKTogUHJvbWlzZTxDb250ZXh0PiB7XG5cdGNvbnN0IGJIYXNQcmVwYXJlQWN0aW9uID0gaGFzUHJlcGFyZUFjdGlvbihvQ29udGV4dCk7XG5cdC8vIEFjY29yZGluZyB0byB0aGUgZHJhZnQgc3BlYyBpZiB0aGUgc2VydmljZSBjb250YWlucyBhIHByZXBhcmUgYWN0aW9uIGFuZCB3ZSB0cmlnZ2VyIGJvdGggcHJlcGFyZSBhbmRcblx0Ly8gYWN0aXZhdGUgaW4gb25lICRiYXRjaCB0aGUgYWN0aXZhdGUgYWN0aW9uIGlzIGNhbGxlZCB3aXRoIGlGLU1hdGNoPSpcblx0Y29uc3QgYklnbm9yZUV0YWcgPSBiSGFzUHJlcGFyZUFjdGlvbjtcblxuXHRpZiAoIW9Db250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikpIHtcblx0XHRjb25zdCBvT3BlcmF0aW9uID0gY3JlYXRlT3BlcmF0aW9uKG9Db250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuQUNUSVZBVElPTiwgeyAkJGluaGVyaXRFeHBhbmRTZWxlY3Q6IHRydWUgfSk7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob0FwcENvbXBvbmVudCk7XG5cdFx0Y29uc3Qgc0FjdGlvbk5hbWUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX09QX09CSkVDVF9QQUdFX1NBVkVcIik7XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBhd2FpdCBvT3BlcmF0aW9uLmV4ZWN1dGUoXG5cdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRiSWdub3JlRXRhZyxcblx0XHRcdFx0c0dyb3VwSWRcblx0XHRcdFx0XHQ/IG9wZXJhdGlvbnNIZWxwZXIuZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkLmJpbmQoXG5cdFx0XHRcdFx0XHRcdGRyYWZ0LFxuXHRcdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0eyBsYWJlbDogc0FjdGlvbk5hbWUsIG1vZGVsOiBvQ29udGV4dC5nZXRNb2RlbCgpIH0sXG5cdFx0XHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHR1bmRlZmluZWRcblx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0b0NvbnRleHQuZ2V0QmluZGluZygpLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpXG5cdFx0XHQpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGlmIChiSGFzUHJlcGFyZUFjdGlvbikge1xuXHRcdFx0XHRjb25zdCBhY3Rpb25OYW1lID0gZ2V0QWN0aW9uTmFtZShvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLlBSRVBBUkUpLFxuXHRcdFx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2UgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLFxuXHRcdFx0XHRcdG9CaW5kaW5nUGFyYW1ldGVycyA9IG9TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0T0RhdGFBY3Rpb25TaWRlRWZmZWN0cyhhY3Rpb25OYW1lLCBvQ29udGV4dCksXG5cdFx0XHRcdFx0YVRhcmdldFBhdGhzID0gb0JpbmRpbmdQYXJhbWV0ZXJzICYmIG9CaW5kaW5nUGFyYW1ldGVycy5wYXRoRXhwcmVzc2lvbnM7XG5cdFx0XHRcdGlmIChhVGFyZ2V0UGF0aHMgJiYgYVRhcmdldFBhdGhzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0YXdhaXQgb1NpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMoYVRhcmdldFBhdGhzLCBvQ29udGV4dCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIHNpZGUgZWZmZWN0c1wiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGF3YWl0IHJlcXVlc3RNZXNzYWdlcyhvQ29udGV4dCwgb1NpZGVFZmZlY3RzU2VydmljZSk7XG5cdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIG1lc3NhZ2VzXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhyb3cgZTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlIGFjdGl2YXRpb24gYWN0aW9uIGNhbm5vdCBiZSBleGVjdXRlZCBvbiBhbiBhY3RpdmUgZG9jdW1lbnRcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBzdXBwb3J0ZWQgbWVzc2FnZSBwcm9wZXJ0eSBwYXRoIG9uIHRoZSBQcmVwYXJlQWN0aW9uIGZvciBhIGNvbnRleHQuXG4gKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIFBhdGggdG8gdGhlIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZ2V0TWVzc2FnZVBhdGhGb3JQcmVwYXJlKGNvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHQvLyBJZiB0aGVyZSBpcyBubyByZXR1cm4gcGFyYW1ldGVyLCBpdCBpcyBub3QgcG9zc2libGUgdG8gcmVxdWVzdCBNZXNzYWdlcy5cblx0Ly8gUkFQIGRyYWZ0IHByZXBhcmUgaGFzIG5vIHJldHVybiBwYXJhbWV0ZXJcblx0cmV0dXJuIGdldFJldHVyblR5cGUoY29udGV4dCwgZHJhZnRPcGVyYXRpb25zLlBSRVBBUkUpID8gZ2V0TWVzc2FnZVBhdGhGb3JDb250ZXh0KGNvbnRleHQpIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHN1cHBvcnRlZCBtZXNzYWdlIHByb3BlcnR5IHBhdGggZm9yIGEgY29udGV4dC5cbiAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgUGF0aCB0byB0aGUgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlUGF0aEZvckNvbnRleHQoY29udGV4dDogQ29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1ldGFDb250ZXh0ID0gY29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE1ldGFDb250ZXh0KGNvbnRleHQuZ2V0UGF0aCgpKTtcblx0Y29uc3QgY29udmVydGVkQ29udGV4dCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhQ29udGV4dCk7XG5cdGNvbnN0IG1lc3NhZ2VzID0gY29udmVydGVkQ29udGV4dC50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zLkNvbW1vbj8uTWVzc2FnZXM7XG5cdHJldHVybiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihtZXNzYWdlcykgPyBtZXNzYWdlcy5wYXRoIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEV4ZWN1dGUgYSBwcmVwYXJhdGlvbiBhY3Rpb24uXG4gKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBmb3Igd2hpY2ggdGhlIGFjdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkXG4gKiBAcGFyYW0gZ3JvdXBJZCBUaGUgb3B0aW9uYWwgYmF0Y2ggZ3JvdXAgaW4gd2hpY2ggd2Ugd2FudCB0byBleGVjdXRlIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBiTWVzc2FnZXMgSWYgc2V0IHRvIHRydWUsIHRoZSBQUkVQQVJFIGFjdGlvbiByZXRyaWV2ZXMgU0FQX01lc3NhZ2VzXG4gKiBAcGFyYW0gaWdub3JlRVRhZyBJZiBzZXQgdG8gdHJ1ZSwgRVRhZyBpbmZvcm1hdGlvbiBpcyBpZ25vcmVkIHdoZW4gdGhlIGFjdGlvbiBpcyBleGVjdXRlZFxuICogQHJldHVybnMgUmVzb2x2ZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb250ZXh0IG9mIHRoZSBvcGVyYXRpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb24oXG5cdG9Db250ZXh0OiBDb250ZXh0LFxuXHRncm91cElkPzogc3RyaW5nLFxuXHRiTWVzc2FnZXM/OiBib29sZWFuLFxuXHRpZ25vcmVFVGFnPzogYm9vbGVhblxuKTogUHJvbWlzZTx2b2lkIHwgT0RhdGFDb250ZXh0QmluZGluZz4ge1xuXHRpZiAoIW9Db250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikpIHtcblx0XHRjb25zdCBzTWVzc2FnZXNQYXRoID0gYk1lc3NhZ2VzID8gZ2V0TWVzc2FnZVBhdGhGb3JQcmVwYXJlKG9Db250ZXh0KSA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBvT3BlcmF0aW9uID0gY3JlYXRlT3BlcmF0aW9uKG9Db250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuUFJFUEFSRSwgc01lc3NhZ2VzUGF0aCA/IHsgJHNlbGVjdDogc01lc3NhZ2VzUGF0aCB9IDogdW5kZWZpbmVkKTtcblxuXHRcdC8vIFRPRE86IHNpZGUgZWZmZWN0cyBxdWFsaWZpZXIgc2hhbGwgYmUgZXZlbiBkZXByZWNhdGVkIHRvIGJlIGNoZWNrZWRcblx0XHRvT3BlcmF0aW9uLnNldFBhcmFtZXRlcihcIlNpZGVFZmZlY3RzUXVhbGlmaWVyXCIsIFwiXCIpO1xuXG5cdFx0Y29uc3Qgc0dyb3VwSWQgPSBncm91cElkIHx8IG9PcGVyYXRpb24uZ2V0R3JvdXBJZCgpO1xuXHRcdHJldHVybiBvT3BlcmF0aW9uXG5cdFx0XHQuZXhlY3V0ZShzR3JvdXBJZCwgaWdub3JlRVRhZylcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIG9PcGVyYXRpb247XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIHRoZSBvcGVyYXRpb25cIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcHJlcGFyYXRpb24gYWN0aW9uIGNhbm5vdCBiZSBleGVjdXRlZCBvbiBhbiBhY3RpdmUgZG9jdW1lbnRcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBSZXF1ZXN0cyB0aGUgbWVzc2FnZXMgaWYgYW5ub3RhdGVkIGZvciBhIGdpdmVuIGNvbnRleHQuXG4gKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBmb3Igd2hpY2ggdGhlIG1lc3NhZ2VzIHNoYWxsIGJlIHJlcXVlc3RlZFxuICogQHBhcmFtIG9TaWRlRWZmZWN0c1NlcnZpY2UgU2VydmljZSBmb3IgdGhlIFNpZGVFZmZlY3RzIG9uIFNBUCBGaW9yaSBlbGVtZW50c1xuICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIG1lc3NhZ2VzIHdlcmUgcmVxdWVzdGVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RNZXNzYWdlcyhvQ29udGV4dDogQ29udGV4dCwgb1NpZGVFZmZlY3RzU2VydmljZTogU2lkZUVmZmVjdHNTZXJ2aWNlKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IHNNZXNzYWdlc1BhdGggPSBNb2RlbEhlbHBlci5nZXRNZXNzYWdlc1BhdGgob0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSwgb0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0aWYgKHNNZXNzYWdlc1BhdGgpIHtcblx0XHRyZXR1cm4gb1NpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMoW3NNZXNzYWdlc1BhdGhdLCBvQ29udGV4dCk7XG5cdH1cblx0cmV0dXJuO1xufVxuLyoqXG4gKiBFeGVjdXRlcyBkaXNjYXJkIG9mIGEgZHJhZnQgZnVuY3Rpb24gdXNpbmcgSFRUUCBQb3N0LlxuICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHBlcmZvcm1lZFxuICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyIFRoZSBtZXNzYWdlIGhhbmRsZXIgY29udHJvbGxlciBleHRlbnNpb25cbiAqIEBwYXJhbSBvQXBwQ29tcG9uZW50IEFwcCBDb21wb25lbnRcbiAqIEBwYXJhbSBiRW5hYmxlU3RyaWN0SGFuZGxpbmdcbiAqIEByZXR1cm5zIFJlc29sdmUgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29udGV4dCBvZiB0aGUgb3BlcmF0aW9uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVEcmFmdERpc2NhcmRBY3Rpb24oXG5cdG9Db250ZXh0OiBDb250ZXh0LFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdG9BcHBDb21wb25lbnQ/OiBBcHBDb21wb25lbnQsXG5cdGJFbmFibGVTdHJpY3RIYW5kbGluZz86IGJvb2xlYW5cbik6IFByb21pc2U8dm9pZD4ge1xuXHRpZiAoIW9Db250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikpIHtcblx0XHRjb25zdCBvRGlzY2FyZE9wZXJhdGlvbiA9IGRyYWZ0LmNyZWF0ZU9wZXJhdGlvbihvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLkRJU0NBUkQpO1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBvQXBwQ29tcG9uZW50ICYmIGdldFJlc291cmNlTW9kZWwob0FwcENvbXBvbmVudCk7XG5cdFx0Y29uc3Qgc0dyb3VwSWQgPSBcImRpcmVjdFwiO1xuXHRcdGNvbnN0IHNBY3Rpb25OYW1lID0gcmVzb3VyY2VNb2RlbD8uZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0RSQUZUX0RJU0NBUkRfQlVUVE9OXCIpIHx8IFwiXCI7XG5cdFx0Ly8gYXMgdGhlIGRpc2NhcmQgYWN0aW9uIGRvZXNudCcgc2VuZCB0aGUgYWN0aXZlIHZlcnNpb24gaW4gdGhlIHJlc3BvbnNlIHdlIGRvIG5vdCB1c2UgdGhlIHJlcGxhY2UgaW4gY2FjaGVcblx0XHRjb25zdCBvRGlzY2FyZFByb21pc2UgPSAhYkVuYWJsZVN0cmljdEhhbmRsaW5nXG5cdFx0XHQ/IG9EaXNjYXJkT3BlcmF0aW9uLmV4ZWN1dGUoc0dyb3VwSWQpXG5cdFx0XHQ6IG9EaXNjYXJkT3BlcmF0aW9uLmV4ZWN1dGUoXG5cdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdG9wZXJhdGlvbnNIZWxwZXIuZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkLmJpbmQoXG5cdFx0XHRcdFx0XHRkcmFmdCxcblx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0eyBsYWJlbDogc0FjdGlvbk5hbWUsIG1vZGVsOiBvQ29udGV4dC5nZXRNb2RlbCgpIH0sXG5cdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHR1bmRlZmluZWRcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGZhbHNlXG5cdFx0XHQgICk7XG5cdFx0b0NvbnRleHQuZ2V0TW9kZWwoKS5zdWJtaXRCYXRjaChzR3JvdXBJZCk7XG5cdFx0YXdhaXQgb0Rpc2NhcmRQcm9taXNlO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBkaXNjYXJkIGFjdGlvbiBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gYW4gYWN0aXZlIGRvY3VtZW50XCIpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIHNpYmxpbmcgY29udGV4dCBmb3IgYSBzdWJvYmplY3QgcGFnZSBhbmQgY2FsY3VsYXRlcyBhIHNpYmxpbmcgcGF0aCBmb3IgYWxsIGludGVybWVkaWF0ZSBwYXRoc1xuICogYmV0d2VlbiB0aGUgb2JqZWN0IHBhZ2UgYW5kIHRoZSBzdWJvYmplY3QgcGFnZS5cbiAqIEBwYXJhbSByb290Q3VycmVudENvbnRleHQgVGhlIGNvbnRleHQgZm9yIHRoZSByb290IG9mIHRoZSBkcmFmdFxuICogQHBhcmFtIHJpZ2h0bW9zdEN1cnJlbnRDb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBzdWJvYmplY3QgcGFnZVxuICogQHBhcmFtIHJvb3RDb250ZXh0SW5mbyBUaGUgY29udGV4dCBpbmZvIG9mIHJvb3Qgb2YgdGhlIGRyYWZ0XG4gKiBAcGFyYW0gZ3JvdXBJZFxuICogQHJldHVybnMgVGhlIHNpYmxpbmdJbmZvcm1hdGlvbiBvYmplY3RcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbihcblx0cm9vdEN1cnJlbnRDb250ZXh0OiBDb250ZXh0LFxuXHRyaWdodG1vc3RDdXJyZW50Q29udGV4dDogQ29udGV4dCxcblx0cm9vdENvbnRleHRJbmZvPzogUm9vdENvbnRleHRJbmZvLFxuXHRncm91cElkPzogc3RyaW5nXG4pOiBQcm9taXNlPFNpYmxpbmdJbmZvcm1hdGlvbiB8IHVuZGVmaW5lZD4ge1xuXHRpZiAoIXJpZ2h0bW9zdEN1cnJlbnRDb250ZXh0LmdldFBhdGgoKS5zdGFydHNXaXRoKHJvb3RDdXJyZW50Q29udGV4dC5nZXRQYXRoKCkpKSB7XG5cdFx0Ly8gV3JvbmcgdXNhZ2UgISFcblx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgY29tcHV0ZSByaWdodG1vc3Qgc2libGluZyBjb250ZXh0XCIpO1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjb21wdXRlIHJpZ2h0bW9zdCBzaWJsaW5nIGNvbnRleHRcIik7XG5cdH1cblxuXHRpZiAoXG5cdFx0cmlnaHRtb3N0Q3VycmVudENvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKSA9PT0gZmFsc2UgJiZcblx0XHRyaWdodG1vc3RDdXJyZW50Q29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKSA9PT0gZmFsc2Vcblx0KSB7XG5cdFx0Ly8gV2UgYWxyZWFkeSBrbm93IHRoZSBzaWJsaW5nIGZvciByaWdodG1vc3RDdXJyZW50Q29udGV4dCBkb2Vzbid0IGV4aXN0XG5cdFx0Ly8gLS0+IE5vIG5lZWQgdG8gY2hlY2sgY2Fub25pY2FsIHBhdGhzIGV0Yy4uLlxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCBtb2RlbCA9IHJvb3RDdXJyZW50Q29udGV4dC5nZXRNb2RlbCgpO1xuXHR0cnkge1xuXHRcdC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRcdC8vIDEuIEZpbmQgYWxsIHNlZ21lbnRzIGJldHdlZW4gdGhlIHJvb3Qgb2JqZWN0IGFuZCB0aGUgc3ViLW9iamVjdFxuXHRcdC8vIEV4YW1wbGU6IGZvciByb290ID0gL1BhcmFtKGFhKS9FbnRpdHkoYmIpIGFuZCByaWdodE1vc3QgPSAvUGFyYW0oYWEpL0VudGl0eShiYikvX05hdihjYykvX1N1Yk5hdihkZClcblx0XHQvLyAtLS0+IFtcIlBhcmFtKGFhKS9FbnRpdHkoYmIpXCIsIFwiX05hdihjYylcIiwgXCJfU3ViTmF2KGRkKVwiXVxuXG5cdFx0Ly8gRmluZCBhbGwgc2VnbWVudHMgaW4gdGhlIHJpZ2h0bW9zdCBwYXRoXG5cdFx0Y29uc3QgYWRkaXRpb25hbFBhdGggPSByaWdodG1vc3RDdXJyZW50Q29udGV4dC5nZXRQYXRoKCkucmVwbGFjZShyb290Q3VycmVudENvbnRleHQuZ2V0UGF0aCgpLCBcIlwiKTtcblx0XHRjb25zdCBzZWdtZW50cyA9IGFkZGl0aW9uYWxQYXRoID8gYWRkaXRpb25hbFBhdGguc3Vic3RyaW5nKDEpLnNwbGl0KFwiL1wiKSA6IFtdO1xuXHRcdC8vIEZpcnN0IHNlZ21lbnQgaXMgYWx3YXlzIHRoZSBmdWxsIHBhdGggb2YgdGhlIHJvb3Qgb2JqZWN0LCB3aGljaCBjYW4gY29udGFpbiAnLycgaW4gY2FzZSBvZiBhIHBhcmFtZXRyaXplZCBlbnRpdHlcblx0XHRzZWdtZW50cy51bnNoaWZ0KHJvb3RDdXJyZW50Q29udGV4dC5nZXRQYXRoKCkuc3Vic3RyaW5nKDEpKTtcblxuXHRcdC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRcdC8vIDIuIFJlcXVlc3QgY2Fub25pY2FsIHBhdGhzIG9mIHRoZSBzaWJsaW5nIGVudGl0eSBmb3IgZWFjaCBzZWdtZW50XG5cdFx0Ly8gRXhhbXBsZTogZm9yIFtcIlBhcmFtKGFhKS9FbnRpdHkoYmIpXCIsIFwiX05hdihjYylcIiwgXCJfU3ViTmF2KGRkKVwiXVxuXHRcdC8vIC0tPiByZXF1ZXN0IGNhbm9uaWNhbCBwYXRocyBmb3IgXCJQYXJhbShhYSkvRW50aXR5KGJiKS9TaWJsaW5nRW50aXR5XCIsIFwiUGFyYW0oYWEpL0VudGl0eShiYikvX05hdihjYykvU2libGluZ0VudGl0eVwiLCBcIlBhcmFtKGFhKS9FbnRpdHkoYmIpL19OYXYoY2MpL19TdWJOYXYoZGQpL1NpYmxpbmdFbnRpdHlcIlxuXHRcdGNvbnN0IG9sZFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IG5ld1BhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGxldCBjdXJyZW50UGF0aCA9IFwiXCI7XG5cblx0XHQvLyBDb21wdXRpbmcgc2libGluZyBlbnRpdHkgb2Ygcm9vdCBvZiB0aGUgZHJhZnQgY29udGV4dCBpcyBub3QgcmVxdWlyZWQgaWYgdGhlIGNvbnRleHQgaXMgYWxyZWFkeSBpbiB0aGUgc3ViLU9QXG5cdFx0Ly8gRXhhbXBsZTogRWRpdCBpbiBTdWItT1Agd2hlcmUgbmV3IGNvbnRleHQgaXMgYWxyZWFkeSBhdmFpbGFibGVcblx0XHRjb25zdCBwYXRocyA9IFsuLi5zZWdtZW50c107XG5cdFx0aWYgKHJvb3RDb250ZXh0SW5mbz8ucm9vdFNpYmxpbmdQYXRoUHJvbWlzZSkge1xuXHRcdFx0cGF0aHMuc2hpZnQoKTtcblx0XHRcdGN1cnJlbnRQYXRoID0gXCIvXCIgKyByb290Q3VycmVudENvbnRleHQ/LmdldFBhdGgoKT8uc3Vic3RyaW5nKDEpO1xuXHRcdH1cblx0XHRjb25zdCBjYW5vbmljYWxQYXRoUHJvbWlzZXMgPSBwYXRocy5tYXAoYXN5bmMgKHNlZ21lbnQpID0+IHtcblx0XHRcdGN1cnJlbnRQYXRoICs9IGAvJHtzZWdtZW50fWA7XG5cdFx0XHRvbGRQYXRocy51bnNoaWZ0KGN1cnJlbnRQYXRoKTtcblx0XHRcdGlmIChjdXJyZW50UGF0aC5lbmRzV2l0aChcIilcIikpIHtcblx0XHRcdFx0Y29uc3Qgc2libGluZ0NvbnRleHQgPSBtb2RlbFxuXHRcdFx0XHRcdC5iaW5kQ29udGV4dChgJHtjdXJyZW50UGF0aH0vU2libGluZ0VudGl0eWAsIHVuZGVmaW5lZCwgZ3JvdXBJZCA/IHsgJCRncm91cElkOiBncm91cElkIH0gOiB1bmRlZmluZWQpXG5cdFx0XHRcdFx0LmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHRyZXR1cm4gc2libGluZ0NvbnRleHQucmVxdWVzdENhbm9uaWNhbFBhdGgoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTsgLy8gMS0xIHJlbGF0aW9uXG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0XHQvLyAzLiBSZWNvbnN0cnVjdCB0aGUgZnVsbCBwYXRocyBmcm9tIGNhbm9uaWNhbCBwYXRocyAoZm9yIHBhdGggbWFwcGluZylcblx0XHQvLyBFeGFtcGxlOiBmb3IgY2Fub25pY2FsIHBhdGhzIFwiL1BhcmFtKGFhKS9FbnRpdHkoYmItc2libGluZylcIiwgXCIvRW50aXR5MihjYy1zaWJsaW5nKVwiLCBcIi9FbnRpdHkzKGRkLXNpYmxpbmcpXCJcblx0XHQvLyAtLT4gW1wiUGFyYW0oYWEpL0VudGl0eShiYi1zaWJsaW5nKVwiLCBcIlBhcmFtKGFhKS9FbnRpdHkoYmItc2libGluZykvX05hdihjYy1zaWJsaW5nKVwiLCBcIlBhcmFtKGFhKS9FbnRpdHkoYmItc2libGluZykvX05hdihjYy1zaWJsaW5nKS9fU3ViTmF2KGRkLXNpYmxpbmcpXCJdXG5cdFx0Y29uc3QgY2Fub25pY2FsUGF0aHMgPSAoYXdhaXQgUHJvbWlzZS5hbGwoY2Fub25pY2FsUGF0aFByb21pc2VzKSkgYXMgc3RyaW5nW107XG5cblx0XHRpZiAocm9vdENvbnRleHRJbmZvPy5yb290U2libGluZ1BhdGhQcm9taXNlKSB7XG5cdFx0XHRjb25zdCByb290U2libGluZ1BhdGggPSAoYXdhaXQgcm9vdENvbnRleHRJbmZvLnJvb3RTaWJsaW5nUGF0aFByb21pc2UpPy5nZXRQYXRoKCkgYXMgc3RyaW5nO1xuXHRcdFx0Y2Fub25pY2FsUGF0aHMudW5zaGlmdChyb290U2libGluZ1BhdGgpO1xuXHRcdFx0b2xkUGF0aHMucHVzaChyb290Q3VycmVudENvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0bGV0IHNpYmxpbmdQYXRoID0gXCJcIjtcblx0XHRjYW5vbmljYWxQYXRocy5mb3JFYWNoKChjYW5vbmljYWxQYXRoLCBpbmRleCkgPT4ge1xuXHRcdFx0aWYgKGluZGV4ICE9PSAwKSB7XG5cdFx0XHRcdGlmIChzZWdtZW50c1tpbmRleF0uZW5kc1dpdGgoXCIpXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvbiA9IHNlZ21lbnRzW2luZGV4XS5yZXBsYWNlKC9cXCguKiQvLCBcIlwiKTsgLy8gS2VlcCBvbmx5IG5hdmlnYXRpb24gbmFtZSBmcm9tIHRoZSBzZWdtZW50LCBpLmUuIGFhYSh4eHgpIC0tPiBhYWFcblx0XHRcdFx0XHRjb25zdCBrZXlzID0gY2Fub25pY2FsUGF0aC5yZXBsYWNlKC8uKlxcKC8sIFwiKFwiKTsgLy8gS2VlcCBvbmx5IHRoZSBrZXlzIGZyb20gdGhlIGNhbm9uaWNhbCBwYXRoLCBpLmUuIGFhYSh4eHgpIC0tPiAoeHh4KVxuXHRcdFx0XHRcdHNpYmxpbmdQYXRoICs9IGAvJHtuYXZpZ2F0aW9ufSR7a2V5c31gO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNpYmxpbmdQYXRoICs9IGAvJHtzZWdtZW50c1tpbmRleF19YDsgLy8gMS0xIHJlbGF0aW9uXG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNpYmxpbmdQYXRoID0gY2Fub25pY2FsUGF0aDsgLy8gVG8gbWFuYWdlIHBhcmFtZXRyaXplZCBlbnRpdGllc1xuXHRcdFx0fVxuXHRcdFx0bmV3UGF0aHMudW5zaGlmdChzaWJsaW5nUGF0aCk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dGFyZ2V0Q29udGV4dDogbW9kZWxcblx0XHRcdFx0LmJpbmRDb250ZXh0KHNpYmxpbmdQYXRoLCB1bmRlZmluZWQsIHtcblx0XHRcdFx0XHQkc2VsZWN0OiBnZXRNZXNzYWdlUGF0aEZvckNvbnRleHQocmlnaHRtb3N0Q3VycmVudENvbnRleHQpLFxuXHRcdFx0XHRcdCQkZ3JvdXBJZDogXCIkYXV0by5IZXJvZXNcIlxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZ2V0Qm91bmRDb250ZXh0KCksIC8vIENyZWF0ZSB0aGUgcmlnaHRtb3N0IHNpYmxpbmcgY29udGV4dCBmcm9tIGl0cyBwYXRoXG5cdFx0XHRwYXRoTWFwcGluZzogb2xkUGF0aHMubWFwKChvbGRQYXRoLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdG9sZFBhdGgsXG5cdFx0XHRcdFx0bmV3UGF0aDogbmV3UGF0aHNbaW5kZXhdXG5cdFx0XHRcdH07XG5cdFx0XHR9KVxuXHRcdH07XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gQSBjYW5vbmljYWwgcGF0aCBjb3VsZG4ndCBiZSByZXNvbHZlZCAoYmVjYXVzZSBhIHNpYmxpbmcgZG9lc24ndCBleGlzdClcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRyYWZ0IGRvY3VtZW50IGZyb20gYW4gZXhpc3RpbmcgZG9jdW1lbnQuXG4gKlxuICogVGhlIGZ1bmN0aW9uIHN1cHBvcnRzIHNldmVyYWwgaG9va3MgYXMgdGhlcmUgaXMgYSBjZXJ0YWluIGNvcmVvZ3JhcGh5IGRlZmluZWQuXG4gKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBvZiB0aGUgYWN0aXZlIGRvY3VtZW50IGZvciB0aGUgbmV3IGRyYWZ0XG4gKiBAcGFyYW0gb0FwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gbVBhcmFtZXRlcnMgVGhlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMub1ZpZXddIFRoZSB2aWV3XG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmJQcmVzZXJ2ZUNoYW5nZXNdIFByZXNlcnZlIGNoYW5nZXMgb2YgYW4gZXhpc3RpbmcgZHJhZnQgb2YgYW5vdGhlciB1c2VyXG4gKiBAcGFyYW0gZ3JvdXBJZCBUaGUgYmF0Y2ggZ3JvdXBJZCBmb3IgcG9zdCBjYWxsIG9mIGVkaXQgYWN0aW9uXG4gKiBAcGFyYW0gbWVzc2FnZUhhbmRsZXIgVGhlIG1lc3NhZ2UgaGFuZGxlciBjb250cm9sbGVyIGV4dGVuc2lvblxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIHRoZSB7QGxpbmsgc2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHQgY29udGV4dH0gb2YgdGhlIG5ldyBkcmFmdCBkb2N1bWVudFxuICovXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudChcblx0b0NvbnRleHQ6IENvbnRleHQsXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0bVBhcmFtZXRlcnM6IHtcblx0XHRvVmlldzogRkVWaWV3O1xuXHRcdGJQcmVzZXJ2ZUNoYW5nZXM/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHR9LFxuXHRncm91cElkOiBzdHJpbmcsXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlclxuKTogUHJvbWlzZTxDb250ZXh0IHwgdW5kZWZpbmVkPiB7XG5cdGNvbnN0IG1QYXJhbSA9IG1QYXJhbWV0ZXJzIHx8IHt9LFxuXHRcdGJSdW5QcmVzZXJ2ZUNoYW5nZXNGbG93ID1cblx0XHRcdHR5cGVvZiBtUGFyYW0uYlByZXNlcnZlQ2hhbmdlcyA9PT0gXCJ1bmRlZmluZWRcIiB8fCAodHlwZW9mIG1QYXJhbS5iUHJlc2VydmVDaGFuZ2VzID09PSBcImJvb2xlYW5cIiAmJiBtUGFyYW0uYlByZXNlcnZlQ2hhbmdlcyk7IC8vZGVmYXVsdCB0cnVlXG5cblx0LyoqXG5cdCAqIE92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgY2hhbmdlLlxuXHQgKiBAcGFyYW0gcmVzcG9uc2UgQ29udGV4dCBvZiB0aGUgYWN0aXZlIGRvY3VtZW50IGZvciB0aGUgbmV3IGRyYWZ0IG9yIHRoZSBlcnJvciByZXRyaWV2ZWRcblx0ICogQHJldHVybnMgUmVzb2x2ZXMgd2l0aCByZXN1bHQgb2Yge0BsaW5rIHNhcC5mZS5jb3JlLmFjdGlvbnMjZXhlY3V0ZURyYWZ0RWRpdEFjdGlvbn1cblx0ICovXG5cdGFzeW5jIGZ1bmN0aW9uIG92ZXJ3cml0ZUNoYW5nZShyZXNwb25zZTogQ29udGV4dCB8IENvbnRleHRFcnJvclR5cGUpOiBQcm9taXNlPENvbnRleHQgfCBDb250ZXh0RXJyb3JUeXBlIHwgdW5kZWZpbmVkPiB7XG5cdFx0Ly9PdmVyd3JpdGUgZXhpc3RpbmcgY2hhbmdlc1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCk7XG5cdFx0Y29uc3QgZHJhZnREYXRhQ29udGV4dCA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtvQ29udGV4dC5nZXRQYXRoKCl9L0RyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhYCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwobVBhcmFtZXRlcnMub1ZpZXcpO1xuXHRcdGNvbnN0IGRyYWZ0QWRtaW5EYXRhID0gYXdhaXQgZHJhZnREYXRhQ29udGV4dC5yZXF1ZXN0T2JqZWN0KCk7XG5cdFx0aWYgKGRyYWZ0QWRtaW5EYXRhKSB7XG5cdFx0XHQvLyByZW1vdmUgYWxsIHVuYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBhcyB3ZSBzaG93IGEgc3BlY2lhbCBkaWFsb2dcblx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRsZXQgc0luZm8gPSBkcmFmdEFkbWluRGF0YS5JblByb2Nlc3NCeVVzZXJEZXNjcmlwdGlvbiB8fCBkcmFmdEFkbWluRGF0YS5JblByb2Nlc3NCeVVzZXI7XG5cdFx0XHRjb25zdCBzRW50aXR5U2V0ID0gbVBhcmFtZXRlcnMub1ZpZXcuZ2V0Vmlld0RhdGEoKS5lbnRpdHlTZXQ7XG5cdFx0XHRpZiAoc0luZm8pIHtcblx0XHRcdFx0Y29uc3Qgc0xvY2tlZEJ5VXNlck1zZyA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfRFJBRlRfT0JKRUNUX1BBR0VfRFJBRlRfTE9DS0VEX0JZX1VTRVJcIiwgc0luZm8sIHNFbnRpdHlTZXQpO1xuXHRcdFx0XHRNZXNzYWdlQm94LmVycm9yKHNMb2NrZWRCeVVzZXJNc2cpO1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3Ioc0xvY2tlZEJ5VXNlck1zZyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzSW5mbyA9IGRyYWZ0QWRtaW5EYXRhLkNyZWF0ZWRCeVVzZXJEZXNjcmlwdGlvbiB8fCBkcmFmdEFkbWluRGF0YS5DcmVhdGVkQnlVc2VyO1xuXHRcdFx0XHRjb25zdCBzVW5zYXZlZENoYW5nZXNNc2cgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0RSQUZUX09CSkVDVF9QQUdFX0RSQUZUX1VOU0FWRURfQ0hBTkdFU1wiLCBzSW5mbywgc0VudGl0eVNldCk7XG5cdFx0XHRcdGF3YWl0IGRyYWZ0LnNob3dFZGl0Q29uZmlybWF0aW9uTWVzc2FnZUJveChzVW5zYXZlZENoYW5nZXNNc2csIG9Db250ZXh0KTtcblx0XHRcdFx0cmV0dXJuIGRyYWZ0LmV4ZWN1dGVEcmFmdEVkaXRBY3Rpb24ob0NvbnRleHQsIGZhbHNlLCBtUGFyYW1ldGVycy5vVmlldywgZ3JvdXBJZCwgbWVzc2FnZUhhbmRsZXIsIHRydWUpOyAvLyB0cnVlIGJlY2F1c2Ugd2Ugb3ZlcndyaXRlIGNoYW5nZXNcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKChyZXNwb25zZSBhcyBDb250ZXh0RXJyb3JUeXBlKT8ubWVzc2FnZSkge1xuXHRcdFx0TWVzc2FnZUJveC5lcnJvcigocmVzcG9uc2UgYXMgQ29udGV4dEVycm9yVHlwZSkubWVzc2FnZSk7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBFcnJvcihgRHJhZnQgY3JlYXRpb24gYWJvcnRlZCBmb3IgZG9jdW1lbnQ6ICR7b0NvbnRleHQuZ2V0UGF0aCgpfWApO1xuXHR9XG5cblx0aWYgKCFvQ29udGV4dCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkJpbmRpbmcgY29udGV4dCB0byBhY3RpdmUgZG9jdW1lbnQgaXMgcmVxdWlyZWRcIik7XG5cdH1cblx0bGV0IG9EcmFmdENvbnRleHQ6IENvbnRleHQgfCBDb250ZXh0RXJyb3JUeXBlIHwgdW5kZWZpbmVkO1xuXHR0cnkge1xuXHRcdG9EcmFmdENvbnRleHQgPSBhd2FpdCBkcmFmdC5leGVjdXRlRHJhZnRFZGl0QWN0aW9uKG9Db250ZXh0LCBiUnVuUHJlc2VydmVDaGFuZ2VzRmxvdywgbVBhcmFtZXRlcnMub1ZpZXcsIGdyb3VwSWQsIG1lc3NhZ2VIYW5kbGVyKTtcblx0fSBjYXRjaCAob1Jlc3BvbnNlKSB7XG5cdFx0aWYgKChvUmVzcG9uc2UgYXMgQ29udGV4dEVycm9yVHlwZSkuc3RhdHVzID09PSA0MDkgfHwgKG9SZXNwb25zZSBhcyBDb250ZXh0RXJyb3JUeXBlKS5zdGF0dXMgPT09IDQyMykge1xuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0Y29uc3Qgc2libGluZ0luZm8gPSBhd2FpdCBkcmFmdC5jb21wdXRlU2libGluZ0luZm9ybWF0aW9uKG9Db250ZXh0LCBvQ29udGV4dCk7XG5cdFx0XHRpZiAoc2libGluZ0luZm8/LnRhcmdldENvbnRleHQpIHtcblx0XHRcdFx0Ly90aGVyZSBpcyBhIGNvbnRleHQgYXV0aG9yaXplZCB0byBiZSBlZGl0ZWQgYnkgdGhlIGN1cnJlbnQgdXNlclxuXHRcdFx0XHRhd2FpdCBDb21tb25VdGlscy53YWl0Rm9yQ29udGV4dFJlcXVlc3RlZChzaWJsaW5nSW5mby50YXJnZXRDb250ZXh0KTtcblx0XHRcdFx0cmV0dXJuIHNpYmxpbmdJbmZvLnRhcmdldENvbnRleHQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL3RoZXJlIGlzIG5vIGRyYWZ0IG93bmVkIGJ5IHRoZSBjdXJyZW50IHVzZXJcblx0XHRcdFx0b0RyYWZ0Q29udGV4dCA9IGF3YWl0IG92ZXJ3cml0ZUNoYW5nZShvUmVzcG9uc2UgYXMgQ29udGV4dEVycm9yVHlwZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICghKG9SZXNwb25zZSAmJiAob1Jlc3BvbnNlIGFzIENvbnRleHRFcnJvclR5cGUpLmNhbmNlbGVkKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKG9SZXNwb25zZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChvRHJhZnRDb250ZXh0KSB7XG5cdFx0Y29uc3Qgc0VkaXRBY3Rpb25OYW1lID0gZHJhZnQuZ2V0QWN0aW9uTmFtZShvRHJhZnRDb250ZXh0IGFzIENvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5FRElUKTtcblx0XHRjb25zdCBvU2lkZUVmZmVjdHMgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLmdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMoc0VkaXRBY3Rpb25OYW1lLCBvRHJhZnRDb250ZXh0IGFzIENvbnRleHQpO1xuXHRcdGlmIChvU2lkZUVmZmVjdHM/LnRyaWdnZXJBY3Rpb25zPy5sZW5ndGgpIHtcblx0XHRcdGF3YWl0IG9BcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCkucmVxdWVzdFNpZGVFZmZlY3RzRm9yT0RhdGFBY3Rpb24ob1NpZGVFZmZlY3RzLCBvRHJhZnRDb250ZXh0IGFzIENvbnRleHQpO1xuXHRcdFx0cmV0dXJuIG9EcmFmdENvbnRleHQgYXMgQ29udGV4dDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG9EcmFmdENvbnRleHQgYXMgQ29udGV4dDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuLyoqXG4gKiBDcmVhdGVzIGFuIGFjdGl2ZSBkb2N1bWVudCBmcm9tIGEgZHJhZnQgZG9jdW1lbnQuXG4gKlxuICogVGhlIGZ1bmN0aW9uIHN1cHBvcnRzIHNldmVyYWwgaG9va3MgYXMgdGhlcmUgaXMgYSBjZXJ0YWluIGNob3Jlb2dyYXBoeSBkZWZpbmVkLlxuICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgb2YgdGhlIGFjdGl2ZSBkb2N1bWVudCBmb3IgdGhlIG5ldyBkcmFmdFxuICogQHBhcmFtIG9BcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIG1QYXJhbWV0ZXJzIFRoZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmZuQmVmb3JlQWN0aXZhdGVEb2N1bWVudF0gQ2FsbGJhY2sgdGhhdCBhbGxvd3MgYSB2ZXRvIGJlZm9yZSB0aGUgJ0NyZWF0ZScgcmVxdWVzdCBpcyBleGVjdXRlZFxuICogQHBhcmFtIFttUGFyYW1ldGVycy5mbkFmdGVyQWN0aXZhdGVEb2N1bWVudF0gQ2FsbGJhY2sgZm9yIHBvc3Rwcm9jZXNzaW5nIGFmdGVyIGRvY3VtZW50IHdhcyBhY3RpdmF0ZWQuXG4gKiBAcGFyYW0gbWVzc2FnZUhhbmRsZXIgVGhlIG1lc3NhZ2UgaGFuZGxlciBjb250cm9sbGVyIGV4dGVuc2lvblxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIHRoZSB7QGxpbmsgc2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHQgY29udGV4dH0gb2YgdGhlIG5ldyBkcmFmdCBkb2N1bWVudFxuICovXG5hc3luYyBmdW5jdGlvbiBhY3RpdmF0ZURvY3VtZW50KFxuXHRvQ29udGV4dDogQ29udGV4dCxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtUGFyYW1ldGVyczogeyBmbkJlZm9yZUFjdGl2YXRlRG9jdW1lbnQ/OiBGdW5jdGlvbjsgZm5BZnRlckFjdGl2YXRlRG9jdW1lbnQ/OiBGdW5jdGlvbiB9LFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXJcbik6IFByb21pc2U8Q29udGV4dD4ge1xuXHRjb25zdCBtUGFyYW0gPSBtUGFyYW1ldGVycyB8fCB7fTtcblx0aWYgKCFvQ29udGV4dCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkJpbmRpbmcgY29udGV4dCB0byBkcmFmdCBkb2N1bWVudCBpcyByZXF1aXJlZFwiKTtcblx0fVxuXG5cdGNvbnN0IGJFeGVjdXRlID0gbVBhcmFtLmZuQmVmb3JlQWN0aXZhdGVEb2N1bWVudCA/IGF3YWl0IG1QYXJhbS5mbkJlZm9yZUFjdGl2YXRlRG9jdW1lbnQob0NvbnRleHQpIDogdHJ1ZTtcblx0aWYgKCFiRXhlY3V0ZSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgQWN0aXZhdGlvbiBvZiB0aGUgZG9jdW1lbnQgd2FzIGFib3J0ZWQgYnkgZXh0ZW5zaW9uIGZvciBkb2N1bWVudDogJHtvQ29udGV4dC5nZXRQYXRoKCl9YCk7XG5cdH1cblxuXHRsZXQgb0FjdGl2ZURvY3VtZW50Q29udGV4dDogQ29udGV4dDtcblx0aWYgKCFoYXNQcmVwYXJlQWN0aW9uKG9Db250ZXh0KSkge1xuXHRcdG9BY3RpdmVEb2N1bWVudENvbnRleHQgPSBhd2FpdCBleGVjdXRlRHJhZnRBY3RpdmF0aW9uQWN0aW9uKG9Db250ZXh0LCBvQXBwQ29tcG9uZW50LCBtZXNzYWdlSGFuZGxlcik7XG5cdH0gZWxzZSB7XG5cdFx0LyogYWN0aXZhdGlvbiByZXF1aXJlcyBwcmVwYXJhdGlvbiAqL1xuXHRcdGNvbnN0IHNCYXRjaEdyb3VwID0gXCIkYXV0b1wiO1xuXHRcdC8vd2hlbiB0aGVyZSBhcmUgcGVuZGluZyBjaGFuZ2VzIHRoZXJlIHdpbGwgYmUgYSBwYXRjaCByZXF1ZXN0IG1lcmdlZCB0b2dldGhlciB3aXRoIHRoZSBkcmFmdFByZXBhcmUgYW5kIGRyYWZ0QWNpdmF0ZS5cblx0XHQvL1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBFdGFnLCB0aGVyZm9yZSB0aGUgcHJlcGFyZSBuZWVkcyB0byBpZ25vcmUgRXRhZ3Ncblx0XHRjb25zdCBpZ25vcmVFdGFnOiBib29sZWFuID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5oYXNQZW5kaW5nQ2hhbmdlcyhcIiRhdXRvXCIpID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdC8vIHdlIHVzZSB0aGUgc2FtZSBiYXRjaEdyb3VwIHRvIGZvcmNlIHByZXBhcmUgYW5kIGFjdGl2YXRlIGluIGEgc2FtZSBiYXRjaCBidXQgd2l0aCBkaWZmZXJlbnQgY2hhbmdlc2V0XG5cdFx0bGV0IG9QcmVwYXJlUHJvbWlzZSA9IGRyYWZ0LmV4ZWN1dGVEcmFmdFByZXBhcmF0aW9uQWN0aW9uKG9Db250ZXh0LCBzQmF0Y2hHcm91cCwgdW5kZWZpbmVkLCBpZ25vcmVFdGFnKTtcblx0XHRvQ29udGV4dC5nZXRNb2RlbCgpLnN1Ym1pdEJhdGNoKHNCYXRjaEdyb3VwKTtcblx0XHRjb25zdCBvQWN0aXZhdGVQcm9taXNlID0gZHJhZnQuZXhlY3V0ZURyYWZ0QWN0aXZhdGlvbkFjdGlvbihvQ29udGV4dCwgb0FwcENvbXBvbmVudCwgbWVzc2FnZUhhbmRsZXIsIHNCYXRjaEdyb3VwKTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdmFsdWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoW29QcmVwYXJlUHJvbWlzZSwgb0FjdGl2YXRlUHJvbWlzZV0pO1xuXHRcdFx0b0FjdGl2ZURvY3VtZW50Q29udGV4dCA9IHZhbHVlc1sxXTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdC8vIEJDUCAyMjcwMDg0MDc1XG5cdFx0XHQvLyBpZiB0aGUgQWN0aXZhdGlvbiBmYWlscywgdGhlbiB0aGUgbWVzc2FnZXMgYXJlIHJldHJpZXZlZCBmcm9tIFBSRVBBUkFUSU9OIGFjdGlvblxuXHRcdFx0Y29uc3Qgc01lc3NhZ2VzUGF0aCA9IGdldE1lc3NhZ2VQYXRoRm9yUHJlcGFyZShvQ29udGV4dCk7XG5cdFx0XHRpZiAoc01lc3NhZ2VzUGF0aCkge1xuXHRcdFx0XHRvUHJlcGFyZVByb21pc2UgPSBkcmFmdC5leGVjdXRlRHJhZnRQcmVwYXJhdGlvbkFjdGlvbihvQ29udGV4dCwgc0JhdGNoR3JvdXAsIHRydWUpO1xuXHRcdFx0XHRvQ29udGV4dC5nZXRNb2RlbCgpLnN1Ym1pdEJhdGNoKHNCYXRjaEdyb3VwKTtcblx0XHRcdFx0YXdhaXQgb1ByZXBhcmVQcm9taXNlO1xuXHRcdFx0XHRjb25zdCBkYXRhID0gYXdhaXQgb0NvbnRleHQucmVxdWVzdE9iamVjdCgpO1xuXHRcdFx0XHRpZiAoZGF0YVtzTWVzc2FnZXNQYXRoXS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Ly9pZiBtZXNzYWdlcyBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFBSRVBBUkFUSU9OIGFjdGlvbiwgdGhlbiBwcmV2aW91cyB0cmFuc2l0aW9uIG1lc3NhZ2VzIGFyZSByZW1vdmVkXG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXI/LnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhmYWxzZSwgZmFsc2UsIG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IGVycjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1QYXJhbS5mbkFmdGVyQWN0aXZhdGVEb2N1bWVudCA/IG1QYXJhbS5mbkFmdGVyQWN0aXZhdGVEb2N1bWVudChvQ29udGV4dCwgb0FjdGl2ZURvY3VtZW50Q29udGV4dCkgOiBvQWN0aXZlRG9jdW1lbnRDb250ZXh0O1xufVxuXG4vKipcbiAqIERpc3BsYXkgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgYm94IGFmdGVyIHByZXNzaW5nIHRoZSBlZGl0IGJ1dHRvbiBvZiBhbiBvYmplY3QgcGFnZSB3aXRoIHVuc2F2ZWQgY2hhbmdlcy5cbiAqIEBwYXJhbSBzVW5zYXZlZENoYW5nZXNNc2cgRGlhbG9nIGJveCBtZXNzYWdlIGluZm9ybWluZyB0aGUgdXNlciB0aGF0IGlmIGhlIHN0YXJ0cyBlZGl0aW5nLCB0aGUgcHJldmlvdXMgdW5zYXZlZCBjaGFuZ2VzIHdpbGwgYmUgbG9zdFxuICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgb2YgdGhlIGFjdGl2ZSBkb2N1bWVudCBmb3IgdGhlIG5ldyBkcmFmdFxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlc1xuICovXG5hc3luYyBmdW5jdGlvbiBzaG93RWRpdENvbmZpcm1hdGlvbk1lc3NhZ2VCb3goc1Vuc2F2ZWRDaGFuZ2VzTXNnOiBzdHJpbmcsIG9Db250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdGNvbnN0IGxvY2FsSTE4blJlZiA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkLCByZWplY3Q6IChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkKSB7XG5cdFx0Y29uc3Qgb0RpYWxvZyA9IG5ldyBEaWFsb2coe1xuXHRcdFx0dGl0bGU6IGxvY2FsSTE4blJlZi5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfV0FSTklOR1wiKSxcblx0XHRcdHN0YXRlOiBcIldhcm5pbmdcIixcblx0XHRcdGNvbnRlbnQ6IG5ldyBUZXh0KHtcblx0XHRcdFx0dGV4dDogc1Vuc2F2ZWRDaGFuZ2VzTXNnXG5cdFx0XHR9KSxcblx0XHRcdGJlZ2luQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0dGV4dDogbG9jYWxJMThuUmVmLmdldFRleHQoXCJDX0NPTU1PTl9PQkpFQ1RfUEFHRV9FRElUXCIpLFxuXHRcdFx0XHR0eXBlOiBcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHR0ZXh0OiBsb2NhbEkxOG5SZWYuZ2V0VGV4dChcIkNfQ09NTU9OX09CSkVDVF9QQUdFX0NBTkNFTFwiKSxcblx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0cmVqZWN0KGBEcmFmdCBjcmVhdGlvbiBhYm9ydGVkIGZvciBkb2N1bWVudDogJHtvQ29udGV4dC5nZXRQYXRoKCl9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0YWZ0ZXJDbG9zZTogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRvRGlhbG9nLmRlc3Ryb3koKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRvRGlhbG9nLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaUNvbnRlbnRQYWRkaW5nXCIpO1xuXHRcdG9EaWFsb2cub3BlbigpO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBIVFRQIFBPU1QgY2FsbCB3aGVuIERyYWZ0QWN0aW9uIGlzIHByZXNlbnQgZm9yIERyYWZ0IERlbGV0ZTsgSFRUUCBERUxFVEUgY2FsbCB3aGVuIHRoZXJlIGlzIG5vIERyYWZ0QWN0aW9uXG4gKiBhbmQgQWN0aXZlIEluc3RhbmNlIGFsd2F5cyB1c2VzIERFTEVURS5cbiAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBkb2N1bWVudCB0byBiZSBkaXNjYXJkZWRcbiAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlciBUaGUgbWVzc2FnZSBoYW5kbGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG4gKiBAcGFyYW0gb0FwcENvbXBvbmVudCBDb250ZXh0IG9mIHRoZSBkb2N1bWVudCB0byBiZSBkaXNjYXJkZWRcbiAqIEBwYXJhbSBiRW5hYmxlU3RyaWN0SGFuZGxpbmdcbiAqIEByZXR1cm5zIEEgUHJvbWlzZSByZXNvbHZlZCB3aGVuIHRoZSBjb250ZXh0IGlzIGRlbGV0ZWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVsZXRlRHJhZnQoXG5cdG9Db250ZXh0OiBDb250ZXh0LFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdG9BcHBDb21wb25lbnQ/OiBBcHBDb21wb25lbnQsXG5cdGJFbmFibGVTdHJpY3RIYW5kbGluZz86IGJvb2xlYW5cbik6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBzRGlzY2FyZEFjdGlvbiA9IGdldEFjdGlvbk5hbWUob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5ESVNDQVJEKSxcblx0XHRiSXNBY3RpdmVFbnRpdHkgPSBvQ29udGV4dC5nZXRPYmplY3QoKS5Jc0FjdGl2ZUVudGl0eTtcblxuXHRpZiAoYklzQWN0aXZlRW50aXR5IHx8ICghYklzQWN0aXZlRW50aXR5ICYmICFzRGlzY2FyZEFjdGlvbikpIHtcblx0XHQvL1VzZSBEZWxldGUgaW4gY2FzZSBvZiBhY3RpdmUgZW50aXR5IGFuZCBubyBkaXNjYXJkIGFjdGlvbiBhdmFpbGFibGUgZm9yIGRyYWZ0XG5cdFx0aWYgKG9Db250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkgJiYgIW9Db250ZXh0LmlzSW5hY3RpdmUoKSkge1xuXHRcdFx0cmV0dXJuIG9Db250ZXh0XG5cdFx0XHRcdC5nZXRCaW5kaW5nKClcblx0XHRcdFx0LnJlc2V0Q2hhbmdlcygpXG5cdFx0XHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbnRleHQuZGVsZXRlKCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFdoZW4gY2FuY2VsbGluZyBhbiBlZGl0IGRyYWZ0IHJvb3Qgbm9kZSwgdXNlIG1vZGVsLmRlbGV0ZSBpbnN0ZWFkIG9mIGNvbnRleHQuZGVsZXRlLCB0byBvbmx5IHNlbmQgZGVsZXRpb24gdG8gYmFja2VuZCxcblx0XHRcdC8vIGJ1dCBrZWVwIGNvbnRleHQgYWxpdmUgKGluY2x1ZGluZyBiaW5kaW5ncykuIFRodXMsIHdlIGNhbiBlbnN1cmUgc2VhbWxlc3MgdHJhbnNpc3Rpb24gZnJvbSBkcmFmdCB0byBhY3RpdmUgaW5zdGFuY2Vcblx0XHRcdC8vICh3aXRob3V0IGludGVybWVkaWF0ZSB1bmRlZmluZWQgYmluZGluZ3MgZS5nLiBsZWFkaW5nIHRvIGZsaWNrZXJpbmcpLlxuXHRcdFx0Ly8gSW4gb3RoZXIgY2FzZXMgKGRlbGV0aW5nIGFjdGl2ZSwgZGlzY2FyZGluZyBjcmVhdGUgZHJhZnQgb3IgZGlzY2FyZGluZyBkcmFmdCBub2RlKSwgc3RheSB3aXRoIGNvbnRleHQuZGVsZXRlLlxuXHRcdFx0Ly8gV2hlbiBjYW5jZWxsaW5nIGEgY3JlYXRlIGRyYWZ0LCBwYWdlIGlzIGNsb3NlZCwgdGh1cyB0aGUgcHJvYmxlbSBvZiBmbGlja2VyaW5nIGNhbm5vdCBvY2N1ci5cblx0XHRcdC8vIEluIGNhc2Ugb2YgZGlzY2FyZGluZyBhIGRyYWZ0IG5vZGUsIHRoZW9yZXRpY2FsbHkgdGhlIHNhbWUgcHJvYmxlbSBjb3VsZFxuXHRcdFx0Ly8gb2NjdXIsIGJ1dCBuZWVkcyBxdWl0ZSBzcGVjaWZpYyBtb2RlbGxpbmcgKGJ1dHRvbiB2aXNpYmlsaXR5IG9uIGl0ZW0gbGV2ZWwgYm91bmQgYWdhaW5zdCBzZXJ2aWNlIHByb3BlcnR5IGluIGFuIEZDTCBhcHApXG5cdFx0XHQvLyBhbmQgYWN0aW5nIChsb29raW5nIGF0IGJ1dHRvbiBvbiB0aGlyZCBjb2x1bW4gd2hpbGUgZGlzY2FyZGluZyBvbiAybmQgY29sdW1uKS4gQ3VycmVudGx5LCBtb2RlbCBzZWVtcyBub3QgdG8gYmUgcHJlcGFyZWRcblx0XHRcdC8vIGZvciB0aGF0IGNhc2UsIHRodXMgZHVlIHRvIHRoZSBtaW5pbWFsIGltcGFjdCAob25seSBpbnRlcm1lZGlhdGUgdmlzdWFsIHN0YXRlKSwgYWNjZXB0aW5nIHRoaXMgZm9yIHRoZSB0aW1lIGJlaW5nLlxuXHRcdFx0cmV0dXJuICFvQ29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpICYmXG5cdFx0XHRcdE1vZGVsSGVscGVyLmlzRHJhZnRSb290KFxuXHRcdFx0XHRcdGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE1ldGFDb250ZXh0KG9Db250ZXh0LmdldFBhdGgoKSkpPy50YXJnZXRFbnRpdHlTZXRcblx0XHRcdFx0KSAmJlxuXHRcdFx0XHRvQ29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKVxuXHRcdFx0XHQ/IG9Db250ZXh0LmdldE1vZGVsKCkuZGVsZXRlKG9Db250ZXh0KVxuXHRcdFx0XHQ6IG9Db250ZXh0LmRlbGV0ZSgpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvL1VzZSBEaXNjYXJkIFBvc3QgQWN0aW9uIGlmIGl0IGlzIGEgZHJhZnQgZW50aXR5IGFuZCBkaXNjYXJkIGFjdGlvbiBleGlzdHNcblx0XHRhd2FpdCBleGVjdXRlRHJhZnREaXNjYXJkQWN0aW9uKG9Db250ZXh0LCBtZXNzYWdlSGFuZGxlciwgb0FwcENvbXBvbmVudCwgYkVuYWJsZVN0cmljdEhhbmRsaW5nKTtcblx0fVxufVxuXG5jb25zdCBkcmFmdCA9IHtcblx0Y3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnQ6IGNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50LFxuXHRhY3RpdmF0ZURvY3VtZW50OiBhY3RpdmF0ZURvY3VtZW50LFxuXHRkZWxldGVEcmFmdDogZGVsZXRlRHJhZnQsXG5cdGV4ZWN1dGVEcmFmdEVkaXRBY3Rpb246IGV4ZWN1dGVEcmFmdEVkaXRBY3Rpb24sXG5cdGV4ZWN1dGVEcmFmdFZhbGlkYXRpb246IGV4ZWN1dGVEcmFmdFZhbGlkYXRpb24sXG5cdGV4ZWN1dGVEcmFmdFByZXBhcmF0aW9uQWN0aW9uOiBleGVjdXRlRHJhZnRQcmVwYXJhdGlvbkFjdGlvbixcblx0ZXhlY3V0ZURyYWZ0QWN0aXZhdGlvbkFjdGlvbjogZXhlY3V0ZURyYWZ0QWN0aXZhdGlvbkFjdGlvbixcblx0aGFzUHJlcGFyZUFjdGlvbjogaGFzUHJlcGFyZUFjdGlvbixcblx0Y29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbjogY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbixcblx0cHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb246IGRyYWZ0RGF0YUxvc3NQb3B1cC5wcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbixcblx0c2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uOiBkcmFmdERhdGFMb3NzUG9wdXAuc2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uLFxuXHRjcmVhdGVPcGVyYXRpb246IGNyZWF0ZU9wZXJhdGlvbixcblx0ZXhlY3V0ZURyYWZ0RGlzY2FyZEFjdGlvbjogZXhlY3V0ZURyYWZ0RGlzY2FyZEFjdGlvbixcblx0TmF2aWdhdGlvblR5cGU6IGRyYWZ0RGF0YUxvc3NQb3B1cC5OYXZpZ2F0aW9uVHlwZSxcblx0Z2V0QWN0aW9uTmFtZTogZ2V0QWN0aW9uTmFtZSxcblx0c2hvd0VkaXRDb25maXJtYXRpb25NZXNzYWdlQm94OiBzaG93RWRpdENvbmZpcm1hdGlvbk1lc3NhZ2VCb3hcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGRyYWZ0O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0VBb0ZBO0VBQ0EsTUFBTUEsZUFBZSxHQUFHO0lBQ3ZCQyxJQUFJLEVBQUUsWUFBWTtJQUNsQkMsVUFBVSxFQUFFLGtCQUFrQjtJQUM5QkMsT0FBTyxFQUFFLGVBQWU7SUFDeEJDLE9BQU8sRUFBRTtFQUNWLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNDLGFBQWFBLENBQUNDLFFBQWlCLEVBQUVDLFVBQWtCLEVBQVU7SUFDckUsTUFBTUMsTUFBTSxHQUFHRixRQUFRLENBQUNHLFFBQVEsQ0FBQyxDQUFDO01BQ2pDQyxVQUFVLEdBQUdGLE1BQU0sQ0FBQ0csWUFBWSxDQUFDLENBQUM7TUFDbENDLGNBQWMsR0FBR0YsVUFBVSxDQUFDRyxXQUFXLENBQUNQLFFBQVEsQ0FBQ1EsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUU1RCxPQUFPSixVQUFVLENBQUNLLFNBQVMsQ0FBQyxHQUFHSCxjQUFjLDZDQUE2Q0wsVUFBVSxFQUFFLENBQUM7RUFDeEc7RUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNTLGVBQWVBLENBQUNWLFFBQWlCLEVBQUVDLFVBQWtCLEVBQUVVLFFBQWdDLEVBQXVCO0lBQ3RILE1BQU1DLGNBQWMsR0FBR2IsYUFBYSxDQUFDQyxRQUFRLEVBQUVDLFVBQVUsQ0FBQztJQUUxRCxPQUFPRCxRQUFRLENBQUNHLFFBQVEsQ0FBQyxDQUFDLENBQUNVLFdBQVcsQ0FBQyxH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
|
|
623
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkcmFmdE9wZXJhdGlvbnMiLCJFRElUIiwiQUNUSVZBVElPTiIsIkRJU0NBUkQiLCJQUkVQQVJFIiwiZ2V0QWN0aW9uTmFtZSIsIm9Db250ZXh0Iiwic09wZXJhdGlvbiIsIm9Nb2RlbCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNFbnRpdHlTZXRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiZ2V0T2JqZWN0IiwiY3JlYXRlT3BlcmF0aW9uIiwib09wdGlvbnMiLCJzT3BlcmF0aW9uTmFtZSIsImJpbmRDb250ZXh0IiwiZ2V0UmV0dXJuVHlwZSIsImhhc1ByZXBhcmVBY3Rpb24iLCJleGVjdXRlRHJhZnRFZGl0QWN0aW9uIiwiYlByZXNlcnZlQ2hhbmdlcyIsIm9WaWV3IiwiZ3JvdXBJZCIsIm1lc3NhZ2VIYW5kbGVyIiwib3ZlcndyaXRlQ2hhbmdlIiwiZ2V0UHJvcGVydHkiLCIkJGluaGVyaXRFeHBhbmRTZWxlY3QiLCJvT3BlcmF0aW9uIiwiZHJhZnQiLCJzZXRQYXJhbWV0ZXIiLCJyZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsInNBY3Rpb25OYW1lIiwiZ2V0VGV4dCIsIm9FZGl0UHJvbWlzZSIsImV4ZWN1dGUiLCJ1bmRlZmluZWQiLCJvcGVyYXRpb25zSGVscGVyIiwiZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkIiwiYmluZCIsImxhYmVsIiwibW9kZWwiLCJnZXRCaW5kaW5nIiwiaXNBIiwic3VibWl0QmF0Y2giLCJFcnJvciIsImV4ZWN1dGVEcmFmdFZhbGlkYXRpb24iLCJjb250ZXh0IiwiYXBwQ29tcG9uZW50IiwiaWdub3JlRVRhZyIsIk1vZGVsSGVscGVyIiwiZ2V0TWVzc2FnZXNQYXRoIiwiaXNLZWVwQWxpdmUiLCJyZXF1ZXN0T2JqZWN0Iiwib3BlcmF0aW9uIiwiZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb24iLCJnZXRVcGRhdGVHcm91cElkIiwicmVxdWVzdE1lc3NhZ2VzIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZXJyb3IiLCJMb2ciLCJleGVjdXRlRHJhZnRBY3RpdmF0aW9uQWN0aW9uIiwib0FwcENvbXBvbmVudCIsInNHcm91cElkIiwiYkhhc1ByZXBhcmVBY3Rpb24iLCJiSWdub3JlRXRhZyIsImUiLCJhY3Rpb25OYW1lIiwib1NpZGVFZmZlY3RzU2VydmljZSIsIm9CaW5kaW5nUGFyYW1ldGVycyIsImdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMiLCJhVGFyZ2V0UGF0aHMiLCJwYXRoRXhwcmVzc2lvbnMiLCJsZW5ndGgiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJvRXJyb3IiLCJnZXRNZXNzYWdlUGF0aEZvclByZXBhcmUiLCJnZXRNZXNzYWdlUGF0aEZvckNvbnRleHQiLCJfY29udmVydGVkQ29udGV4dCR0YXIiLCJtZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0IiwiY29udmVydGVkQ29udGV4dCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsIm1lc3NhZ2VzIiwidGFyZ2V0RW50aXR5VHlwZSIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiTWVzc2FnZXMiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsInBhdGgiLCJiTWVzc2FnZXMiLCJzTWVzc2FnZXNQYXRoIiwiJHNlbGVjdCIsImdldEdyb3VwSWQiLCJ0aGVuIiwiY2F0Y2giLCJleGVjdXRlRHJhZnREaXNjYXJkQWN0aW9uIiwiYkVuYWJsZVN0cmljdEhhbmRsaW5nIiwib0Rpc2NhcmRPcGVyYXRpb24iLCJvRGlzY2FyZFByb21pc2UiLCJjb21wdXRlU2libGluZ0luZm9ybWF0aW9uIiwicm9vdEN1cnJlbnRDb250ZXh0IiwicmlnaHRtb3N0Q3VycmVudENvbnRleHQiLCJyb290Q29udGV4dEluZm8iLCJzdGFydHNXaXRoIiwiYWRkaXRpb25hbFBhdGgiLCJyZXBsYWNlIiwic2VnbWVudHMiLCJzdWJzdHJpbmciLCJzcGxpdCIsInVuc2hpZnQiLCJvbGRQYXRocyIsIm5ld1BhdGhzIiwiY3VycmVudFBhdGgiLCJwYXRocyIsInJvb3RTaWJsaW5nUGF0aFByb21pc2UiLCJfcm9vdEN1cnJlbnRDb250ZXh0JGciLCJzaGlmdCIsImNhbm9uaWNhbFBhdGhQcm9taXNlcyIsIm1hcCIsInNlZ21lbnQiLCJlbmRzV2l0aCIsInNpYmxpbmdDb250ZXh0IiwiJCRncm91cElkIiwiZ2V0Qm91bmRDb250ZXh0IiwicmVxdWVzdENhbm9uaWNhbFBhdGgiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNhbm9uaWNhbFBhdGhzIiwiYWxsIiwiX2F3YWl0JHJvb3RDb250ZXh0SW5mIiwicm9vdFNpYmxpbmdQYXRoIiwicHVzaCIsInNpYmxpbmdQYXRoIiwiZm9yRWFjaCIsImNhbm9uaWNhbFBhdGgiLCJpbmRleCIsIm5hdmlnYXRpb24iLCJrZXlzIiwidGFyZ2V0Q29udGV4dCIsInBhdGhNYXBwaW5nIiwib2xkUGF0aCIsIm5ld1BhdGgiLCJjcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudCIsIm1QYXJhbWV0ZXJzIiwibVBhcmFtIiwiYlJ1blByZXNlcnZlQ2hhbmdlc0Zsb3ciLCJyZXNwb25zZSIsImRyYWZ0RGF0YUNvbnRleHQiLCJkcmFmdEFkbWluRGF0YSIsIm1lc3NhZ2VIYW5kbGluZyIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJzSW5mbyIsIkluUHJvY2Vzc0J5VXNlckRlc2NyaXB0aW9uIiwiSW5Qcm9jZXNzQnlVc2VyIiwic0VudGl0eVNldCIsImdldFZpZXdEYXRhIiwiZW50aXR5U2V0Iiwic0xvY2tlZEJ5VXNlck1zZyIsIk1lc3NhZ2VCb3giLCJDcmVhdGVkQnlVc2VyRGVzY3JpcHRpb24iLCJDcmVhdGVkQnlVc2VyIiwic1Vuc2F2ZWRDaGFuZ2VzTXNnIiwic2hvd0VkaXRDb25maXJtYXRpb25NZXNzYWdlQm94IiwibWVzc2FnZSIsIm9EcmFmdENvbnRleHQiLCJvUmVzcG9uc2UiLCJzdGF0dXMiLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsInNpYmxpbmdJbmZvIiwiQ29tbW9uVXRpbHMiLCJ3YWl0Rm9yQ29udGV4dFJlcXVlc3RlZCIsImNhbmNlbGVkIiwiX29TaWRlRWZmZWN0cyR0cmlnZ2VyIiwic0VkaXRBY3Rpb25OYW1lIiwib1NpZGVFZmZlY3RzIiwidHJpZ2dlckFjdGlvbnMiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JPRGF0YUFjdGlvbiIsImFjdGl2YXRlRG9jdW1lbnQiLCJiRXhlY3V0ZSIsImZuQmVmb3JlQWN0aXZhdGVEb2N1bWVudCIsIm9BY3RpdmVEb2N1bWVudENvbnRleHQiLCJzQmF0Y2hHcm91cCIsImlnbm9yZUV0YWciLCJoYXNQZW5kaW5nQ2hhbmdlcyIsIm9QcmVwYXJlUHJvbWlzZSIsIm9BY3RpdmF0ZVByb21pc2UiLCJ2YWx1ZXMiLCJlcnIiLCJkYXRhIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZm5BZnRlckFjdGl2YXRlRG9jdW1lbnQiLCJsb2NhbEkxOG5SZWYiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJyZWplY3QiLCJvRGlhbG9nIiwiRGlhbG9nIiwidGl0bGUiLCJzdGF0ZSIsImNvbnRlbnQiLCJUZXh0IiwidGV4dCIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwidHlwZSIsInByZXNzIiwiY2xvc2UiLCJlbmRCdXR0b24iLCJhZnRlckNsb3NlIiwiZGVzdHJveSIsImFkZFN0eWxlQ2xhc3MiLCJvcGVuIiwiZGVsZXRlRHJhZnQiLCJzRGlzY2FyZEFjdGlvbiIsImJJc0FjdGl2ZUVudGl0eSIsIklzQWN0aXZlRW50aXR5IiwiaXNJbmFjdGl2ZSIsInJlc2V0Q2hhbmdlcyIsImRlbGV0ZSIsIl9nZXRJbnZvbHZlZERhdGFNb2RlbCIsImlzRHJhZnRSb290IiwidGFyZ2V0RW50aXR5U2V0IiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJkcmFmdERhdGFMb3NzUG9wdXAiLCJzaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb24iLCJOYXZpZ2F0aW9uVHlwZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiZHJhZnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IGRyYWZ0RGF0YUxvc3NQb3B1cCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnREYXRhTG9zc1BvcHVwXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBTaWRlRWZmZWN0c1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRFcnJvclR5cGUgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCIuLi8uLi9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCIuLi8uLi9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgb3BlcmF0aW9uc0hlbHBlciBmcm9tIFwiLi4vLi4vb3BlcmF0aW9uc0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXIgZnJvbSBcIi4uL01lc3NhZ2VIYW5kbGVyXCI7XG5cbmV4cG9ydCB0eXBlIFNpYmxpbmdJbmZvcm1hdGlvbiA9IHtcblx0dGFyZ2V0Q29udGV4dDogQ29udGV4dDtcblx0cGF0aE1hcHBpbmc6IHsgb2xkUGF0aDogc3RyaW5nOyBuZXdQYXRoOiBzdHJpbmcgfVtdO1xufTtcblxuZXhwb3J0IHR5cGUgUm9vdENvbnRleHRJbmZvID0ge1xuXHRyb290U2libGluZ1BhdGhQcm9taXNlOiBQcm9taXNlPENvbnRleHQgfCB1bmRlZmluZWQ+O1xufTtcblxuZXhwb3J0IHR5cGUgQmluZENvbnRleHRQYXJhbWV0ZXJzID0ge1xuXHQvKipcblx0ICogVGhlIHZhbHVlIGZvciB0aGUgXCI1LjEuMiBTeXN0ZW0gUXVlcnkgT3B0aW9uICRleHBhbmRcIiBvciBhbiBvYmplY3Qgd2hpY2ggZGV0ZXJtaW5lcyB0aGF0IHZhbHVlLiBUaGUgb2JqZWN0XG5cdCAqIGlzIGEgbWFwIGZyb20gZXhwYW5kIHBhdGggdG8gZXhwYW5kIG9wdGlvbnMsIHdoZXJlIHRoZSBvcHRpb25zIGFyZSBhZ2FpbiBtYXBzIG9mIHN5c3RlbSBxdWVyeSBvcHRpb25zLFxuXHQgKiB0eXBpY2FsbHkgd2l0aCBzdHJpbmcgdmFsdWVzLiAkY291bnQgY2FuIGFsc28gYmUgZ2l2ZW4gYXMgYSBgYm9vbGVhbmAgdmFsdWUsICRleHBhbmQgY2FuIHJlY3Vyc2l2ZWx5XG5cdCAqIGJlIGdpdmVuIGFzIGEgbWFwLCAkbGV2ZWxzIGNhbiBhbHNvIGJlIGdpdmVuIGFzIGEgYG51bWJlcmAgdmFsdWUsIGFuZCAkc2VsZWN0IGNhbiBhbHNvIGJlIGdpdmVuIGFzIGFuXG5cdCAqIGFycmF5IChidXQgd2l0aG91dCBuYXZpZ2F0aW9uIHBhdGhzKS4gQW4gZW1wdHkgbWFwIGNhbiBhbHNvIGJlIGdpdmVuIGFzIGBudWxsYCBvciBgdHJ1ZWAuIFNlZSBhbHNvIHtAbGluayBodHRwczovL3VpNS5zYXAuY29tLyMvdG9waWMvMWFiNGY2MmRlNmFiNDY3MDk2YTJhOThiMzYzYTEzNzMgUGFyYW1ldGVyc30uXG5cdCAqL1xuXHQkZXhwYW5kPzogc3RyaW5nIHwgb2JqZWN0O1xuXHQvKipcblx0ICogQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvciBhbiBhcnJheSBvZiBpdGVtcyB3aGljaCBkZXRlcm1pbmUgdGhlIHZhbHVlIGZvciB0aGUgXCI1LjEuMyBTeXN0ZW0gUXVlcnkgT3B0aW9uXG5cdCAqICRzZWxlY3RcIi4gU2luY2UgMS43NS4wLCB3aGVuIHVzaW5nIHRoZSBcImF1dG9FeHBhbmRTZWxlY3RcIiBtb2RlbCBwYXJhbWV0ZXIgKHNlZSB7QGxpbmsgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWwjY29uc3RydWN0b3J9KSxcblx0ICogcGF0aHMgd2l0aCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgY2FuIGJlIGluY2x1ZGVkIGFuZCB3aWxsIGNvbnRyaWJ1dGUgdG8gdGhlIFwiNS4xLjIgU3lzdGVtIFF1ZXJ5IE9wdGlvblxuXHQgKiAkZXhwYW5kXCIuXG5cdCAqL1xuXHQkc2VsZWN0Pzogc3RyaW5nO1xuXHQvKipcblx0ICogV2hldGhlciBhIGJpbmRpbmcgcmVsYXRpdmUgdG8gYW4ge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSB1c2VzIHRoZSBjYW5vbmljYWwgcGF0aCBjb21wdXRlZFxuXHQgKiBmcm9tIGl0cyBjb250ZXh0J3MgcGF0aCBmb3IgZGF0YSBzZXJ2aWNlIHJlcXVlc3RzOyBvbmx5IHRoZSB2YWx1ZSBgdHJ1ZWAgaXMgYWxsb3dlZC5cblx0ICovXG5cdCQkY2Fub25pY2FsUGF0aD86IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBUaGUgZ3JvdXAgSUQgdG8gYmUgdXNlZCBmb3IgKipyZWFkKiogcmVxdWVzdHMgdHJpZ2dlcmVkIGJ5IHRoaXMgYmluZGluZzsgaWYgbm90IHNwZWNpZmllZCwgZWl0aGVyIHRoZVxuXHQgKiBwYXJlbnQgYmluZGluZydzIGdyb3VwIElEIChpZiB0aGUgYmluZGluZyBpcyByZWxhdGl2ZSkgb3IgdGhlIG1vZGVsJ3MgZ3JvdXAgSUQgaXMgdXNlZCwgc2VlIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbCNjb25zdHJ1Y3Rvcn0uXG5cdCAqIFZhbGlkIHZhbHVlcyBhcmUgYHVuZGVmaW5lZGAsICckYXV0bycsICckYXV0by4qJywgJyRkaXJlY3QnIG9yIGFwcGxpY2F0aW9uIGdyb3VwIElEcyBhcyBzcGVjaWZpZWQgaW5cblx0ICoge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsfS5cblx0ICovXG5cdCQkZ3JvdXBJZD86IHN0cmluZztcblx0LyoqXG5cdCAqIEZvciBvcGVyYXRpb24gYmluZGluZ3Mgb25seTogV2hldGhlciAkZXhwYW5kIGFuZCAkc2VsZWN0IGZyb20gdGhlIHBhcmVudCBiaW5kaW5nIGFyZSB1c2VkIGluIHRoZSByZXF1ZXN0XG5cdCAqIHNlbnQgb24ge0BsaW5rICNleGVjdXRlfS4gSWYgc2V0IHRvIGB0cnVlYCwgdGhlIGJpbmRpbmcgbXVzdCBub3Qgc2V0IHRoZSAkZXhwYW5kIGl0c2VsZiwgdGhlIG9wZXJhdGlvblxuXHQgKiBtdXN0IGJlIGJvdW5kLCBhbmQgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlIGJpbmRpbmcgcGFyYW1ldGVyIG11c3QgYmVsb25nIHRvIHRoZSBzYW1lIGVudGl0eSBzZXQuXG5cdCAqL1xuXHQkJGluaGVyaXRFeHBhbmRTZWxlY3Q/OiBib29sZWFuO1xuXHQvKipcblx0ICogV2hldGhlciB0aGUgYmluZGluZyBhbHdheXMgdXNlcyBhbiBvd24gc2VydmljZSByZXF1ZXN0IHRvIHJlYWQgaXRzIGRhdGE7IG9ubHkgdGhlIHZhbHVlIGB0cnVlYCBpcyBhbGxvd2VkLlxuXHQgKi9cblx0JCRvd25SZXF1ZXN0PzogYm9vbGVhbjtcblx0LyoqXG5cdCAqIFdoZXRoZXIgaW1wbGljaXQgbG9hZGluZyBvZiBzaWRlIGVmZmVjdHMgdmlhIFBBVENIIHJlcXVlc3RzIGlzIHN3aXRjaGVkIG9mZjsgb25seSB0aGUgdmFsdWUgYHRydWVgIGlzXG5cdCAqIGFsbG93ZWQuIFRoaXMgc2V0cyB0aGUgcHJlZmVyZW5jZSBcInJldHVybj1taW5pbWFsXCIgYW5kIHJlcXVpcmVzIHRoZSBzZXJ2aWNlIHRvIHJldHVybiBhbiBFVGFnIGhlYWRlclxuXHQgKiBmb3IgXCIyMDQgTm8gQ29udGVudFwiIHJlc3BvbnNlcy4gSWYgbm90IHNwZWNpZmllZCwgdGhlIHZhbHVlIG9mIHRoZSBwYXJlbnQgYmluZGluZyBpcyB1c2VkLlxuXHQgKi9cblx0JCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0cz86IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBUaGUgZ3JvdXAgSUQgdG8gYmUgdXNlZCBmb3IgKip1cGRhdGUqKiByZXF1ZXN0cyB0cmlnZ2VyZWQgYnkgdGhpcyBiaW5kaW5nOyBpZiBub3Qgc3BlY2lmaWVkLCBlaXRoZXIgdGhlXG5cdCAqIHBhcmVudCBiaW5kaW5nJ3MgdXBkYXRlIGdyb3VwIElEIChpZiB0aGUgYmluZGluZyBpcyByZWxhdGl2ZSkgb3IgdGhlIG1vZGVsJ3MgdXBkYXRlIGdyb3VwIElEIGlzIHVzZWQsXG5cdCAqIHNlZSB7QGxpbmsgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWwjY29uc3RydWN0b3J9LiBGb3IgdmFsaWQgdmFsdWVzLCBzZWUgcGFyYW1ldGVyIFwiJCRncm91cElkXCIuXG5cdCAqL1xuXHQkJHVwZGF0ZUdyb3VwSWQ/OiBzdHJpbmc7XG59O1xuXG4vKiBDb25zdGFudHMgZm9yIGRyYWZ0IG9wZXJhdGlvbnMgKi9cbmNvbnN0IGRyYWZ0T3BlcmF0aW9ucyA9IHtcblx0RURJVDogXCJFZGl0QWN0aW9uXCIsXG5cdEFDVElWQVRJT046IFwiQWN0aXZhdGlvbkFjdGlvblwiLFxuXHRESVNDQVJEOiBcIkRpc2NhcmRBY3Rpb25cIixcblx0UFJFUEFSRTogXCJQcmVwYXJhdGlvbkFjdGlvblwiXG59O1xuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgZm9yIHRoZSBkcmFmdCBwcm9ncmFtbWluZyBtb2RlbFxuICogQG5hbWVzcGFjZVxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1vZHVsZSBpcyBvbmx5IGZvciBleHBlcmltZW50YWwgdXNlISA8YnIvPjxiPlRoaXMgaXMgb25seSBhIFBPQyBhbmQgbWF5YmUgZGVsZXRlZDwvYj5cbiAqIEBzaW5jZSAxLjU0LjBcbiAqL1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIGFjdGlvbiBuYW1lIGZvciBhIGRyYWZ0IG9wZXJhdGlvbi5cbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IHNob3VsZCBiZSBib3VuZCB0byB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0gc09wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIG5hbWVcbiAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIHRoZSBkcmFmdCBvcGVyYXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aW9uTmFtZShvQ29udGV4dDogQ29udGV4dCwgc09wZXJhdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3Qgb01vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdHNFbnRpdHlTZXRQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpO1xuXG5cdHJldHVybiBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzRW50aXR5U2V0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdC8ke3NPcGVyYXRpb259YCk7XG59XG4vKipcbiAqIENyZWF0ZXMgYW4gb3BlcmF0aW9uIGNvbnRleHQgYmluZGluZyBmb3IgdGhlIGdpdmVuIGNvbnRleHQgYW5kIG9wZXJhdGlvbi5cbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IHNob3VsZCBiZSBib3VuZCB0byB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0gc09wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIChhY3Rpb24gb3IgZnVuY3Rpb24gaW1wb3J0KVxuICogQHBhcmFtIG9PcHRpb25zIE9wdGlvbnMgdG8gY3JlYXRlIHRoZSBvcGVyYXRpb24gY29udGV4dFxuICogQHJldHVybnMgVGhlIGNvbnRleHQgYmluZGluZyBvZiB0aGUgYm91bmQgb3BlcmF0aW9uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdGlvbihvQ29udGV4dDogQ29udGV4dCwgc09wZXJhdGlvbjogc3RyaW5nLCBvT3B0aW9ucz86IEJpbmRDb250ZXh0UGFyYW1ldGVycyk6IE9EYXRhQ29udGV4dEJpbmRpbmcge1xuXHRjb25zdCBzT3BlcmF0aW9uTmFtZSA9IGdldEFjdGlvbk5hbWUob0NvbnRleHQsIHNPcGVyYXRpb24pO1xuXG5cdHJldHVybiBvQ29udGV4dC5nZXRNb2RlbCgpLmJpbmRDb250ZXh0KGAke3NPcGVyYXRpb25OYW1lfSguLi4pYCwgb0NvbnRleHQsIG9PcHRpb25zKTtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgcmV0dXJuIHR5cGUgZm9yIGEgZHJhZnQgb3BlcmF0aW9uLlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgc2hvdWxkIGJlIGJvdW5kIHRvIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBzT3BlcmF0aW9uIFRoZSBvcGVyYXRpb24gbmFtZVxuICogQHJldHVybnMgVGhlIHJldHVybiB0eXBlIG9mIHRoZSBkcmFmdCBvcGVyYXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0UmV0dXJuVHlwZShvQ29udGV4dDogQ29udGV4dCwgc09wZXJhdGlvbjogc3RyaW5nKTogdW5rbm93biB7XG5cdGNvbnN0IG9Nb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCksXG5cdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzRW50aXR5U2V0UGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0NvbnRleHQuZ2V0UGF0aCgpKTtcblxuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3QvJHtzT3BlcmF0aW9ufS8kUmV0dXJuVHlwZWApO1xufVxuLyoqXG4gKiBDaGVjayBpZiBvcHRpb25hbCBkcmFmdCBwcmVwYXJlIGFjdGlvbiBleGlzdHMuXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBzaG91bGQgYmUgYm91bmQgdG8gdGhlIG9wZXJhdGlvblxuICogQHJldHVybnMgVHJ1ZSBpZiBhIGEgcHJlcGFyZSBhY3Rpb24gZXhpc3RzXG4gKi9cbmZ1bmN0aW9uIGhhc1ByZXBhcmVBY3Rpb24ob0NvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0cmV0dXJuICEhZ2V0QWN0aW9uTmFtZShvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLlBSRVBBUkUpO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGRyYWZ0IGZyb20gYW4gYWN0aXZlIGRvY3VtZW50LlxuICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHBlcmZvcm1lZFxuICogQHBhcmFtIGJQcmVzZXJ2ZUNoYW5nZXMgSWYgdHJ1ZSAtIGV4aXN0aW5nIGNoYW5nZXMgZnJvbSBhbm90aGVyIHVzZXIgdGhhdCBhcmUgbm90IGxvY2tlZCBhcmUgcHJlc2VydmVkIGFuZCBhbiBlcnJvciBpcyBzZW50IGZyb20gdGhlIGJhY2tlbmQsIG90aGVyd2lzZSBmYWxzZSAtIGV4aXN0aW5nIGNoYW5nZXMgZnJvbSBhbm90aGVyIHVzZXIgdGhhdCBhcmUgbm90IGxvY2tlZCBhcmUgb3ZlcndyaXR0ZW48L2xpPlxuICogQHBhcmFtIG9WaWV3IElmIHRydWUgLSBleGlzdGluZyBjaGFuZ2VzIGZyb20gYW5vdGhlclxuICogQHBhcmFtIGdyb3VwSWQgVGhlIGJhdGNoIGdyb3VwSWQgZm9yIHBvc3QgY2FsbCBvZiBlZGl0IGFjdGlvblxuICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyICBUaGUgbWVzc2FnZSBoYW5kbGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG4gKiBAcGFyYW0gb3ZlcndyaXRlQ2hhbmdlXG4gKiBAcmV0dXJucyBSZXNvbHZlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvbnRleHQgb2YgdGhlIG9wZXJhdGlvblxuICovXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlRHJhZnRFZGl0QWN0aW9uKFxuXHRvQ29udGV4dDogQ29udGV4dCxcblx0YlByZXNlcnZlQ2hhbmdlczogYm9vbGVhbixcblx0b1ZpZXc6IFZpZXcsXG5cdGdyb3VwSWQ6IHN0cmluZyxcblx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRvdmVyd3JpdGVDaGFuZ2U/OiBib29sZWFuXG4pOiBQcm9taXNlPENvbnRleHQ+IHtcblx0aWYgKG9Db250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikpIHtcblx0XHRjb25zdCBvT3B0aW9ucyA9IHsgJCRpbmhlcml0RXhwYW5kU2VsZWN0OiB0cnVlIH07XG5cdFx0Y29uc3Qgb09wZXJhdGlvbiA9IGRyYWZ0LmNyZWF0ZU9wZXJhdGlvbihvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLkVESVQsIG9PcHRpb25zKTtcblx0XHRvT3BlcmF0aW9uLnNldFBhcmFtZXRlcihcIlByZXNlcnZlQ2hhbmdlc1wiLCBiUHJlc2VydmVDaGFuZ2VzKTtcblxuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKG9WaWV3KTtcblx0XHRjb25zdCBzQWN0aW9uTmFtZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX09CSkVDVF9QQUdFX0VESVRcIik7XG5cdFx0Ly9JZiB0aGUgY29udGV4dCBpcyBjb21pbmcgZnJvbSBhIGxpc3QgYmluZGluZyB3ZSBwYXNzIHRoZSBmbGFnIHRydWUgdG8gcmVwbGFjZSB0aGUgY29udGV4dCBieSB0aGUgYWN0aXZlIG9uZVxuXHRcdGNvbnN0IG9FZGl0UHJvbWlzZSA9IG9PcGVyYXRpb24uZXhlY3V0ZShcblx0XHRcdGdyb3VwSWQsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRvcGVyYXRpb25zSGVscGVyLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRkcmFmdCxcblx0XHRcdFx0Z3JvdXBJZCxcblx0XHRcdFx0eyBsYWJlbDogc0FjdGlvbk5hbWUsIG1vZGVsOiBvQ29udGV4dC5nZXRNb2RlbCgpIH0sXG5cdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdHVuZGVmaW5lZFxuXHRcdFx0KSxcblx0XHRcdG9Db250ZXh0LmdldEJpbmRpbmcoKS5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKVxuXHRcdCk7XG5cdFx0aWYgKG92ZXJ3cml0ZUNoYW5nZSkge1xuXHRcdFx0b09wZXJhdGlvbi5nZXRNb2RlbCgpLnN1Ym1pdEJhdGNoKGdyb3VwSWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gb0VkaXRQcm9taXNlO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIllvdSBjYW5ub3QgZWRpdCB0aGlzIGRyYWZ0IGRvY3VtZW50XCIpO1xuXHR9XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGRyYWZ0LiBUaGUgUHJlcGFyZUFjdGlvbiBpcyB0cmlnZ2VyZWQgaWYgdGhlIG1lc3NhZ2VzIGFyZSBhbm5vdGF0ZWQgYW5kIGVudGl0eVNldCBnZXRzIGEgUHJlcGFyYXRpb25BY3Rpb24gYW5ub3RhdGVkLlxuICogSWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkcyBhbmQgb3BlcmF0aW9uIGRvZXNuJ3QgZ2V0IGEgcmV0dXJuIHR5cGUgKFJBUCBzeXN0ZW0pIHRoZSBtZXNzYWdlcyBhcmUgcmVxdWVzdGVkLlxuICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCBmb3Igd2hpY2ggdGhlIFByZXBhcmVBY3Rpb24gc2hvdWxkIGJlIHBlcmZvcm1lZFxuICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gaWdub3JlRVRhZyBJZiBzZXQgdG8gdHJ1ZSwgRVRhZ3MgYXJlIGlnbm9yZWQgd2hlbiBleGVjdXRpbmcgdGhlIGFjdGlvblxuICogQHJldHVybnMgUmVzb2x2ZSBmdW5jdGlvbiByZXR1cm5zXG4gKiAgLSB0aGUgY29udGV4dCBvZiB0aGUgb3BlcmF0aW9uIGlmIHRoZSBhY3Rpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkXG4gKiAgLSB2b2lkIGlmIHRoZSBhY3Rpb24gaGFzIGZhaWxlZFxuICogIC0gdW5kZWZpbmVkIGlmIHRoZSBhY3Rpb24gaGFzIG5vdCBiZWVuIHRyaWdnZXJlZCBzaW5jZSB0aGUgcHJlcmVxdWlzaXRlcyBhcmUgbm90IG1ldFxuICovXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlRHJhZnRWYWxpZGF0aW9uKFxuXHRjb250ZXh0OiBDb250ZXh0LFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0aWdub3JlRVRhZzogYm9vbGVhblxuKTogUHJvbWlzZTxPRGF0YUNvbnRleHRCaW5kaW5nIHwgdm9pZCB8IHVuZGVmaW5lZD4ge1xuXHRpZiAoTW9kZWxIZWxwZXIuZ2V0TWVzc2FnZXNQYXRoKGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSwgY29udGV4dC5nZXRQYXRoKCkpICYmIGRyYWZ0Lmhhc1ByZXBhcmVBY3Rpb24oY29udGV4dCkpIHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKCFpZ25vcmVFVGFnICYmICFjb250ZXh0LmlzS2VlcEFsaXZlKCkpIHtcblx0XHRcdFx0Ly8gV2UgbmVlZCB0byB3YWl0IGZvciB0aGUgZW50aXR5IHJlbGF0ZWQgdG8gdGhlIGNvbnRleHQgdG8gcG9zdCB0aGUgYWN0aW9uIHdpdGggdGhlIElmLU1hdGNoIGhlYWRlclxuXHRcdFx0XHQvLyBTb21lIHRyaWdnZXJzIChlbnRlciBvbiB0YWJsZSkgY2FuIGdlbmVyYXRlIGEgcHJvbWlzZSBpbiB0aGUgY2FjaGUgc28gaWYgd2UgZG9uJ3Qgd2FpdCBmb3IgdGhlIGVudGl0eVxuXHRcdFx0XHQvLyB0aGUgUE9TVCB3aWxsIGJlIHNlbnQgd2l0aG91dCBJZi1NYXRjaCBhbmQgd2lsbCBnZW5lcmF0ZSBhbiBlcnJvciBvbiBiYWNrZW5kIHNpZGUuXG5cdFx0XHRcdGF3YWl0IChjb250ZXh0LmdldEJpbmRpbmcoKSBhcyBPRGF0YUNvbnRleHRCaW5kaW5nKS5yZXF1ZXN0T2JqZWN0KFwiXCIpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb3BlcmF0aW9uID0gYXdhaXQgZHJhZnQuZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb24oY29udGV4dCwgY29udGV4dC5nZXRVcGRhdGVHcm91cElkKCksIHRydWUsIGlnbm9yZUVUYWcpO1xuXHRcdFx0Ly8gaWYgdGhlcmUgaXMgbm8gcmV0dXJuZWQgb3BlcmF0aW9uIGJ5IGV4ZWN1dGVEcmFmdFByZXBhcmF0aW9uQWN0aW9uIC0+IHRoZSBhY3Rpb24gaGFzIGZhaWxlZFxuXHRcdFx0aWYgKG9wZXJhdGlvbiAmJiAhZ2V0UmV0dXJuVHlwZShjb250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuUFJFUEFSRSkpIHtcblx0XHRcdFx0cmVxdWVzdE1lc3NhZ2VzKGNvbnRleHQsIGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3BlcmF0aW9uO1xuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIG1lc3NhZ2VzXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBBY3RpdmF0ZXMgYSBkcmFmdCBkb2N1bWVudC4gVGhlIGRyYWZ0IHdpbGwgcmVwbGFjZSB0aGUgc2libGluZyBlbnRpdHkgYW5kIHdpbGwgYmUgZGVsZXRlZCBieSB0aGUgYmFjayBlbmQuXG4gKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBmb3Igd2hpY2ggdGhlIGFjdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkXG4gKiBAcGFyYW0gb0FwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gbWVzc2FnZUhhbmRsZXJcbiAqIEBwYXJhbSBbc0dyb3VwSWRdIFRoZSBvcHRpb25hbCBiYXRjaCBncm91cCBpbiB3aGljaCB0aGUgb3BlcmF0aW9uIGlzIHRvIGJlIGV4ZWN1dGVkXG4gKiBAcmV0dXJucyBSZXNvbHZlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvbnRleHQgb2YgdGhlIG9wZXJhdGlvblxuICovXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlRHJhZnRBY3RpdmF0aW9uQWN0aW9uKFxuXHRvQ29udGV4dDogQ29udGV4dCxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdHNHcm91cElkPzogc3RyaW5nXG4pOiBQcm9taXNlPENvbnRleHQ+IHtcblx0Y29uc3QgYkhhc1ByZXBhcmVBY3Rpb24gPSBoYXNQcmVwYXJlQWN0aW9uKG9Db250ZXh0KTtcblx0Ly8gQWNjb3JkaW5nIHRvIHRoZSBkcmFmdCBzcGVjIGlmIHRoZSBzZXJ2aWNlIGNvbnRhaW5zIGEgcHJlcGFyZSBhY3Rpb24gYW5kIHdlIHRyaWdnZXIgYm90aCBwcmVwYXJlIGFuZFxuXHQvLyBhY3RpdmF0ZSBpbiBvbmUgJGJhdGNoIHRoZSBhY3RpdmF0ZSBhY3Rpb24gaXMgY2FsbGVkIHdpdGggaUYtTWF0Y2g9KlxuXHRjb25zdCBiSWdub3JlRXRhZyA9IGJIYXNQcmVwYXJlQWN0aW9uO1xuXG5cdGlmICghb0NvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKSkge1xuXHRcdGNvbnN0IG9PcGVyYXRpb24gPSBjcmVhdGVPcGVyYXRpb24ob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5BQ1RJVkFUSU9OLCB7ICQkaW5oZXJpdEV4cGFuZFNlbGVjdDogdHJ1ZSB9KTtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbChvQXBwQ29tcG9uZW50KTtcblx0XHRjb25zdCBzQWN0aW9uTmFtZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfT1BfT0JKRUNUX1BBR0VfU0FWRVwiKTtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGF3YWl0IG9PcGVyYXRpb24uZXhlY3V0ZShcblx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdGJJZ25vcmVFdGFnLFxuXHRcdFx0XHRzR3JvdXBJZFxuXHRcdFx0XHRcdD8gb3BlcmF0aW9uc0hlbHBlci5mbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQuYmluZChcblx0XHRcdFx0XHRcdFx0ZHJhZnQsXG5cdFx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0XHR7IGxhYmVsOiBzQWN0aW9uTmFtZSwgbW9kZWw6IG9Db250ZXh0LmdldE1vZGVsKCkgfSxcblx0XHRcdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkXG5cdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRcdG9Db250ZXh0LmdldEJpbmRpbmcoKS5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKVxuXHRcdFx0KTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoYkhhc1ByZXBhcmVBY3Rpb24pIHtcblx0XHRcdFx0Y29uc3QgYWN0aW9uTmFtZSA9IGdldEFjdGlvbk5hbWUob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5QUkVQQVJFKSxcblx0XHRcdFx0XHRvU2lkZUVmZmVjdHNTZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKSxcblx0XHRcdFx0XHRvQmluZGluZ1BhcmFtZXRlcnMgPSBvU2lkZUVmZmVjdHNTZXJ2aWNlLmdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMoYWN0aW9uTmFtZSwgb0NvbnRleHQpLFxuXHRcdFx0XHRcdGFUYXJnZXRQYXRocyA9IG9CaW5kaW5nUGFyYW1ldGVycyAmJiBvQmluZGluZ1BhcmFtZXRlcnMucGF0aEV4cHJlc3Npb25zO1xuXHRcdFx0XHRpZiAoYVRhcmdldFBhdGhzICYmIGFUYXJnZXRQYXRocy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGF3YWl0IG9TaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKGFUYXJnZXRQYXRocywgb0NvbnRleHQpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBzaWRlIGVmZmVjdHNcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRhd2FpdCByZXF1ZXN0TWVzc2FnZXMob0NvbnRleHQsIG9TaWRlRWZmZWN0c1NlcnZpY2UpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBtZXNzYWdlc1wiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IGU7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBhY3RpdmF0aW9uIGFjdGlvbiBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gYW4gYWN0aXZlIGRvY3VtZW50XCIpO1xuXHR9XG59XG5cbi8qKlxuICogR2V0cyB0aGUgc3VwcG9ydGVkIG1lc3NhZ2UgcHJvcGVydHkgcGF0aCBvbiB0aGUgUHJlcGFyZUFjdGlvbiBmb3IgYSBjb250ZXh0LlxuICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBQYXRoIHRvIHRoZSBtZXNzYWdlXG4gKi9cbmZ1bmN0aW9uIGdldE1lc3NhZ2VQYXRoRm9yUHJlcGFyZShjb250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Ly8gSWYgdGhlcmUgaXMgbm8gcmV0dXJuIHBhcmFtZXRlciwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlcXVlc3QgTWVzc2FnZXMuXG5cdC8vIFJBUCBkcmFmdCBwcmVwYXJlIGhhcyBubyByZXR1cm4gcGFyYW1ldGVyXG5cdHJldHVybiBnZXRSZXR1cm5UeXBlKGNvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5QUkVQQVJFKSA/IGdldE1lc3NhZ2VQYXRoRm9yQ29udGV4dChjb250ZXh0KSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBzdXBwb3J0ZWQgbWVzc2FnZSBwcm9wZXJ0eSBwYXRoIGZvciBhIGNvbnRleHQuXG4gKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIFBhdGggdG8gdGhlIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZ2V0TWVzc2FnZVBhdGhGb3JDb250ZXh0KGNvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBtZXRhQ29udGV4dCA9IGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhQ29udGV4dChjb250ZXh0LmdldFBhdGgoKSk7XG5cdGNvbnN0IGNvbnZlcnRlZENvbnRleHQgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpO1xuXHRjb25zdCBtZXNzYWdlcyA9IGNvbnZlcnRlZENvbnRleHQudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucy5Db21tb24/Lk1lc3NhZ2VzO1xuXHRyZXR1cm4gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24obWVzc2FnZXMpID8gbWVzc2FnZXMucGF0aCA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBFeGVjdXRlIGEgcHJlcGFyYXRpb24gYWN0aW9uLlxuICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHBlcmZvcm1lZFxuICogQHBhcmFtIGdyb3VwSWQgVGhlIG9wdGlvbmFsIGJhdGNoIGdyb3VwIGluIHdoaWNoIHdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0gYk1lc3NhZ2VzIElmIHNldCB0byB0cnVlLCB0aGUgUFJFUEFSRSBhY3Rpb24gcmV0cmlldmVzIFNBUF9NZXNzYWdlc1xuICogQHBhcmFtIGlnbm9yZUVUYWcgSWYgc2V0IHRvIHRydWUsIEVUYWcgaW5mb3JtYXRpb24gaXMgaWdub3JlZCB3aGVuIHRoZSBhY3Rpb24gaXMgZXhlY3V0ZWRcbiAqIEByZXR1cm5zIFJlc29sdmUgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29udGV4dCBvZiB0aGUgb3BlcmF0aW9uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVEcmFmdFByZXBhcmF0aW9uQWN0aW9uKFxuXHRvQ29udGV4dDogQ29udGV4dCxcblx0Z3JvdXBJZD86IHN0cmluZyxcblx0Yk1lc3NhZ2VzPzogYm9vbGVhbixcblx0aWdub3JlRVRhZz86IGJvb2xlYW5cbik6IFByb21pc2U8dm9pZCB8IE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0aWYgKCFvQ29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpKSB7XG5cdFx0Y29uc3Qgc01lc3NhZ2VzUGF0aCA9IGJNZXNzYWdlcyA/IGdldE1lc3NhZ2VQYXRoRm9yUHJlcGFyZShvQ29udGV4dCkgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgb09wZXJhdGlvbiA9IGNyZWF0ZU9wZXJhdGlvbihvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLlBSRVBBUkUsIHNNZXNzYWdlc1BhdGggPyB7ICRzZWxlY3Q6IHNNZXNzYWdlc1BhdGggfSA6IHVuZGVmaW5lZCk7XG5cblx0XHQvLyBUT0RPOiBzaWRlIGVmZmVjdHMgcXVhbGlmaWVyIHNoYWxsIGJlIGV2ZW4gZGVwcmVjYXRlZCB0byBiZSBjaGVja2VkXG5cdFx0b09wZXJhdGlvbi5zZXRQYXJhbWV0ZXIoXCJTaWRlRWZmZWN0c1F1YWxpZmllclwiLCBcIlwiKTtcblxuXHRcdGNvbnN0IHNHcm91cElkID0gZ3JvdXBJZCB8fCBvT3BlcmF0aW9uLmdldEdyb3VwSWQoKTtcblx0XHRyZXR1cm4gb09wZXJhdGlvblxuXHRcdFx0LmV4ZWN1dGUoc0dyb3VwSWQsIGlnbm9yZUVUYWcpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBvT3BlcmF0aW9uO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGV4ZWN1dGluZyB0aGUgb3BlcmF0aW9uXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlIHByZXBhcmF0aW9uIGFjdGlvbiBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gYW4gYWN0aXZlIGRvY3VtZW50XCIpO1xuXHR9XG59XG5cbi8qKlxuICogUmVxdWVzdHMgdGhlIG1lc3NhZ2VzIGlmIGFubm90YXRlZCBmb3IgYSBnaXZlbiBjb250ZXh0LlxuICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBtZXNzYWdlcyBzaGFsbCBiZSByZXF1ZXN0ZWRcbiAqIEBwYXJhbSBvU2lkZUVmZmVjdHNTZXJ2aWNlIFNlcnZpY2UgZm9yIHRoZSBTaWRlRWZmZWN0cyBvbiBTQVAgRmlvcmkgZWxlbWVudHNcbiAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSBtZXNzYWdlcyB3ZXJlIHJlcXVlc3RlZFxuICovXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0TWVzc2FnZXMob0NvbnRleHQ6IENvbnRleHQsIG9TaWRlRWZmZWN0c1NlcnZpY2U6IFNpZGVFZmZlY3RzU2VydmljZSk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBzTWVzc2FnZXNQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWVzc2FnZXNQYXRoKG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksIG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdGlmIChzTWVzc2FnZXNQYXRoKSB7XG5cdFx0cmV0dXJuIG9TaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKFtzTWVzc2FnZXNQYXRoXSwgb0NvbnRleHQpO1xuXHR9XG5cdHJldHVybjtcbn1cbi8qKlxuICogRXhlY3V0ZXMgZGlzY2FyZCBvZiBhIGRyYWZ0IGZ1bmN0aW9uIHVzaW5nIEhUVFAgUG9zdC5cbiAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgYWN0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWRcbiAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlciBUaGUgbWVzc2FnZSBoYW5kbGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG4gKiBAcGFyYW0gb0FwcENvbXBvbmVudCBBcHAgQ29tcG9uZW50XG4gKiBAcGFyYW0gYkVuYWJsZVN0cmljdEhhbmRsaW5nXG4gKiBAcmV0dXJucyBSZXNvbHZlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvbnRleHQgb2YgdGhlIG9wZXJhdGlvblxuICovXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlRHJhZnREaXNjYXJkQWN0aW9uKFxuXHRvQ29udGV4dDogQ29udGV4dCxcblx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRvQXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50LFxuXHRiRW5hYmxlU3RyaWN0SGFuZGxpbmc/OiBib29sZWFuXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0aWYgKCFvQ29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpKSB7XG5cdFx0Y29uc3Qgb0Rpc2NhcmRPcGVyYXRpb24gPSBkcmFmdC5jcmVhdGVPcGVyYXRpb24ob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5ESVNDQVJEKTtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gb0FwcENvbXBvbmVudCAmJiBnZXRSZXNvdXJjZU1vZGVsKG9BcHBDb21wb25lbnQpO1xuXHRcdGNvbnN0IHNHcm91cElkID0gXCJkaXJlY3RcIjtcblx0XHRjb25zdCBzQWN0aW9uTmFtZSA9IHJlc291cmNlTW9kZWw/LmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9EUkFGVF9ESVNDQVJEX0JVVFRPTlwiKSB8fCBcIlwiO1xuXHRcdC8vIGFzIHRoZSBkaXNjYXJkIGFjdGlvbiBkb2VzbnQnIHNlbmQgdGhlIGFjdGl2ZSB2ZXJzaW9uIGluIHRoZSByZXNwb25zZSB3ZSBkbyBub3QgdXNlIHRoZSByZXBsYWNlIGluIGNhY2hlXG5cdFx0Y29uc3Qgb0Rpc2NhcmRQcm9taXNlID0gIWJFbmFibGVTdHJpY3RIYW5kbGluZ1xuXHRcdFx0PyBvRGlzY2FyZE9wZXJhdGlvbi5leGVjdXRlKHNHcm91cElkKVxuXHRcdFx0OiBvRGlzY2FyZE9wZXJhdGlvbi5leGVjdXRlKFxuXHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRvcGVyYXRpb25zSGVscGVyLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRcdFx0ZHJhZnQsXG5cdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdHsgbGFiZWw6IHNBY3Rpb25OYW1lLCBtb2RlbDogb0NvbnRleHQuZ2V0TW9kZWwoKSB9LFxuXHRcdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0ICApO1xuXHRcdG9Db250ZXh0LmdldE1vZGVsKCkuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRcdGF3YWl0IG9EaXNjYXJkUHJvbWlzZTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgZGlzY2FyZCBhY3Rpb24gY2Fubm90IGJlIGV4ZWN1dGVkIG9uIGFuIGFjdGl2ZSBkb2N1bWVudFwiKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBzaWJsaW5nIGNvbnRleHQgZm9yIGEgc3Vib2JqZWN0IHBhZ2UgYW5kIGNhbGN1bGF0ZXMgYSBzaWJsaW5nIHBhdGggZm9yIGFsbCBpbnRlcm1lZGlhdGUgcGF0aHNcbiAqIGJldHdlZW4gdGhlIG9iamVjdCBwYWdlIGFuZCB0aGUgc3Vib2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gcm9vdEN1cnJlbnRDb250ZXh0IFRoZSBjb250ZXh0IGZvciB0aGUgcm9vdCBvZiB0aGUgZHJhZnRcbiAqIEBwYXJhbSByaWdodG1vc3RDdXJyZW50Q29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgc3Vib2JqZWN0IHBhZ2VcbiAqIEBwYXJhbSByb290Q29udGV4dEluZm8gVGhlIGNvbnRleHQgaW5mbyBvZiByb290IG9mIHRoZSBkcmFmdFxuICogQHBhcmFtIGdyb3VwSWRcbiAqIEByZXR1cm5zIFRoZSBzaWJsaW5nSW5mb3JtYXRpb24gb2JqZWN0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbXB1dGVTaWJsaW5nSW5mb3JtYXRpb24oXG5cdHJvb3RDdXJyZW50Q29udGV4dDogQ29udGV4dCxcblx0cmlnaHRtb3N0Q3VycmVudENvbnRleHQ6IENvbnRleHQsXG5cdHJvb3RDb250ZXh0SW5mbz86IFJvb3RDb250ZXh0SW5mbyxcblx0Z3JvdXBJZD86IHN0cmluZ1xuKTogUHJvbWlzZTxTaWJsaW5nSW5mb3JtYXRpb24gfCB1bmRlZmluZWQ+IHtcblx0aWYgKCFyaWdodG1vc3RDdXJyZW50Q29udGV4dC5nZXRQYXRoKCkuc3RhcnRzV2l0aChyb290Q3VycmVudENvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdC8vIFdyb25nIHVzYWdlICEhXG5cdFx0TG9nLmVycm9yKFwiQ2Fubm90IGNvbXB1dGUgcmlnaHRtb3N0IHNpYmxpbmcgY29udGV4dFwiKTtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY29tcHV0ZSByaWdodG1vc3Qgc2libGluZyBjb250ZXh0XCIpO1xuXHR9XG5cblx0aWYgKFxuXHRcdHJpZ2h0bW9zdEN1cnJlbnRDb250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikgPT09IGZhbHNlICYmXG5cdFx0cmlnaHRtb3N0Q3VycmVudENvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNBY3RpdmVFbnRpdHlcIikgPT09IGZhbHNlXG5cdCkge1xuXHRcdC8vIFdlIGFscmVhZHkga25vdyB0aGUgc2libGluZyBmb3IgcmlnaHRtb3N0Q3VycmVudENvbnRleHQgZG9lc24ndCBleGlzdFxuXHRcdC8vIC0tPiBObyBuZWVkIHRvIGNoZWNrIGNhbm9uaWNhbCBwYXRocyBldGMuLi5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Y29uc3QgbW9kZWwgPSByb290Q3VycmVudENvbnRleHQuZ2V0TW9kZWwoKTtcblx0dHJ5IHtcblx0XHQvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0XHQvLyAxLiBGaW5kIGFsbCBzZWdtZW50cyBiZXR3ZWVuIHRoZSByb290IG9iamVjdCBhbmQgdGhlIHN1Yi1vYmplY3Rcblx0XHQvLyBFeGFtcGxlOiBmb3Igcm9vdCA9IC9QYXJhbShhYSkvRW50aXR5KGJiKSBhbmQgcmlnaHRNb3N0ID0gL1BhcmFtKGFhKS9FbnRpdHkoYmIpL19OYXYoY2MpL19TdWJOYXYoZGQpXG5cdFx0Ly8gLS0tPiBbXCJQYXJhbShhYSkvRW50aXR5KGJiKVwiLCBcIl9OYXYoY2MpXCIsIFwiX1N1Yk5hdihkZClcIl1cblxuXHRcdC8vIEZpbmQgYWxsIHNlZ21lbnRzIGluIHRoZSByaWdodG1vc3QgcGF0aFxuXHRcdGNvbnN0IGFkZGl0aW9uYWxQYXRoID0gcmlnaHRtb3N0Q3VycmVudENvbnRleHQuZ2V0UGF0aCgpLnJlcGxhY2Uocm9vdEN1cnJlbnRDb250ZXh0LmdldFBhdGgoKSwgXCJcIik7XG5cdFx0Y29uc3Qgc2VnbWVudHMgPSBhZGRpdGlvbmFsUGF0aCA/IGFkZGl0aW9uYWxQYXRoLnN1YnN0cmluZygxKS5zcGxpdChcIi9cIikgOiBbXTtcblx0XHQvLyBGaXJzdCBzZWdtZW50IGlzIGFsd2F5cyB0aGUgZnVsbCBwYXRoIG9mIHRoZSByb290IG9iamVjdCwgd2hpY2ggY2FuIGNvbnRhaW4gJy8nIGluIGNhc2Ugb2YgYSBwYXJhbWV0cml6ZWQgZW50aXR5XG5cdFx0c2VnbWVudHMudW5zaGlmdChyb290Q3VycmVudENvbnRleHQuZ2V0UGF0aCgpLnN1YnN0cmluZygxKSk7XG5cblx0XHQvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0XHQvLyAyLiBSZXF1ZXN0IGNhbm9uaWNhbCBwYXRocyBvZiB0aGUgc2libGluZyBlbnRpdHkgZm9yIGVhY2ggc2VnbWVudFxuXHRcdC8vIEV4YW1wbGU6IGZvciBbXCJQYXJhbShhYSkvRW50aXR5KGJiKVwiLCBcIl9OYXYoY2MpXCIsIFwiX1N1Yk5hdihkZClcIl1cblx0XHQvLyAtLT4gcmVxdWVzdCBjYW5vbmljYWwgcGF0aHMgZm9yIFwiUGFyYW0oYWEpL0VudGl0eShiYikvU2libGluZ0VudGl0eVwiLCBcIlBhcmFtKGFhKS9FbnRpdHkoYmIpL19OYXYoY2MpL1NpYmxpbmdFbnRpdHlcIiwgXCJQYXJhbShhYSkvRW50aXR5KGJiKS9fTmF2KGNjKS9fU3ViTmF2KGRkKS9TaWJsaW5nRW50aXR5XCJcblx0XHRjb25zdCBvbGRQYXRoczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBuZXdQYXRoczogc3RyaW5nW10gPSBbXTtcblx0XHRsZXQgY3VycmVudFBhdGggPSBcIlwiO1xuXG5cdFx0Ly8gQ29tcHV0aW5nIHNpYmxpbmcgZW50aXR5IG9mIHJvb3Qgb2YgdGhlIGRyYWZ0IGNvbnRleHQgaXMgbm90IHJlcXVpcmVkIGlmIHRoZSBjb250ZXh0IGlzIGFscmVhZHkgaW4gdGhlIHN1Yi1PUFxuXHRcdC8vIEV4YW1wbGU6IEVkaXQgaW4gU3ViLU9QIHdoZXJlIG5ldyBjb250ZXh0IGlzIGFscmVhZHkgYXZhaWxhYmxlXG5cdFx0Y29uc3QgcGF0aHMgPSBbLi4uc2VnbWVudHNdO1xuXHRcdGlmIChyb290Q29udGV4dEluZm8/LnJvb3RTaWJsaW5nUGF0aFByb21pc2UpIHtcblx0XHRcdHBhdGhzLnNoaWZ0KCk7XG5cdFx0XHRjdXJyZW50UGF0aCA9IFwiL1wiICsgcm9vdEN1cnJlbnRDb250ZXh0Py5nZXRQYXRoKCk/LnN1YnN0cmluZygxKTtcblx0XHR9XG5cdFx0Y29uc3QgY2Fub25pY2FsUGF0aFByb21pc2VzID0gcGF0aHMubWFwKGFzeW5jIChzZWdtZW50KSA9PiB7XG5cdFx0XHRjdXJyZW50UGF0aCArPSBgLyR7c2VnbWVudH1gO1xuXHRcdFx0b2xkUGF0aHMudW5zaGlmdChjdXJyZW50UGF0aCk7XG5cdFx0XHRpZiAoY3VycmVudFBhdGguZW5kc1dpdGgoXCIpXCIpKSB7XG5cdFx0XHRcdGNvbnN0IHNpYmxpbmdDb250ZXh0ID0gbW9kZWxcblx0XHRcdFx0XHQuYmluZENvbnRleHQoYCR7Y3VycmVudFBhdGh9L1NpYmxpbmdFbnRpdHlgLCB1bmRlZmluZWQsIGdyb3VwSWQgPyB7ICQkZ3JvdXBJZDogZ3JvdXBJZCB9IDogdW5kZWZpbmVkKVxuXHRcdFx0XHRcdC5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0cmV0dXJuIHNpYmxpbmdDb250ZXh0LnJlcXVlc3RDYW5vbmljYWxQYXRoKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7IC8vIDEtMSByZWxhdGlvblxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdFx0Ly8gMy4gUmVjb25zdHJ1Y3QgdGhlIGZ1bGwgcGF0aHMgZnJvbSBjYW5vbmljYWwgcGF0aHMgKGZvciBwYXRoIG1hcHBpbmcpXG5cdFx0Ly8gRXhhbXBsZTogZm9yIGNhbm9uaWNhbCBwYXRocyBcIi9QYXJhbShhYSkvRW50aXR5KGJiLXNpYmxpbmcpXCIsIFwiL0VudGl0eTIoY2Mtc2libGluZylcIiwgXCIvRW50aXR5MyhkZC1zaWJsaW5nKVwiXG5cdFx0Ly8gLS0+IFtcIlBhcmFtKGFhKS9FbnRpdHkoYmItc2libGluZylcIiwgXCJQYXJhbShhYSkvRW50aXR5KGJiLXNpYmxpbmcpL19OYXYoY2Mtc2libGluZylcIiwgXCJQYXJhbShhYSkvRW50aXR5KGJiLXNpYmxpbmcpL19OYXYoY2Mtc2libGluZykvX1N1Yk5hdihkZC1zaWJsaW5nKVwiXVxuXHRcdGNvbnN0IGNhbm9uaWNhbFBhdGhzID0gKGF3YWl0IFByb21pc2UuYWxsKGNhbm9uaWNhbFBhdGhQcm9taXNlcykpIGFzIHN0cmluZ1tdO1xuXG5cdFx0aWYgKHJvb3RDb250ZXh0SW5mbz8ucm9vdFNpYmxpbmdQYXRoUHJvbWlzZSkge1xuXHRcdFx0Y29uc3Qgcm9vdFNpYmxpbmdQYXRoID0gKGF3YWl0IHJvb3RDb250ZXh0SW5mby5yb290U2libGluZ1BhdGhQcm9taXNlKT8uZ2V0UGF0aCgpIGFzIHN0cmluZztcblx0XHRcdGNhbm9uaWNhbFBhdGhzLnVuc2hpZnQocm9vdFNpYmxpbmdQYXRoKTtcblx0XHRcdG9sZFBhdGhzLnB1c2gocm9vdEN1cnJlbnRDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0fVxuXHRcdGxldCBzaWJsaW5nUGF0aCA9IFwiXCI7XG5cdFx0Y2Fub25pY2FsUGF0aHMuZm9yRWFjaCgoY2Fub25pY2FsUGF0aCwgaW5kZXgpID0+IHtcblx0XHRcdGlmIChpbmRleCAhPT0gMCkge1xuXHRcdFx0XHRpZiAoc2VnbWVudHNbaW5kZXhdLmVuZHNXaXRoKFwiKVwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IG5hdmlnYXRpb24gPSBzZWdtZW50c1tpbmRleF0ucmVwbGFjZSgvXFwoLiokLywgXCJcIik7IC8vIEtlZXAgb25seSBuYXZpZ2F0aW9uIG5hbWUgZnJvbSB0aGUgc2VnbWVudCwgaS5lLiBhYWEoeHh4KSAtLT4gYWFhXG5cdFx0XHRcdFx0Y29uc3Qga2V5cyA9IGNhbm9uaWNhbFBhdGgucmVwbGFjZSgvLipcXCgvLCBcIihcIik7IC8vIEtlZXAgb25seSB0aGUga2V5cyBmcm9tIHRoZSBjYW5vbmljYWwgcGF0aCwgaS5lLiBhYWEoeHh4KSAtLT4gKHh4eClcblx0XHRcdFx0XHRzaWJsaW5nUGF0aCArPSBgLyR7bmF2aWdhdGlvbn0ke2tleXN9YDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzaWJsaW5nUGF0aCArPSBgLyR7c2VnbWVudHNbaW5kZXhdfWA7IC8vIDEtMSByZWxhdGlvblxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzaWJsaW5nUGF0aCA9IGNhbm9uaWNhbFBhdGg7IC8vIFRvIG1hbmFnZSBwYXJhbWV0cml6ZWQgZW50aXRpZXNcblx0XHRcdH1cblx0XHRcdG5ld1BhdGhzLnVuc2hpZnQoc2libGluZ1BhdGgpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRhcmdldENvbnRleHQ6IG1vZGVsXG5cdFx0XHRcdC5iaW5kQ29udGV4dChzaWJsaW5nUGF0aCwgdW5kZWZpbmVkLCB7XG5cdFx0XHRcdFx0JHNlbGVjdDogZ2V0TWVzc2FnZVBhdGhGb3JDb250ZXh0KHJpZ2h0bW9zdEN1cnJlbnRDb250ZXh0KSxcblx0XHRcdFx0XHQkJGdyb3VwSWQ6IFwiJGF1dG8uSGVyb2VzXCJcblx0XHRcdFx0fSlcblx0XHRcdFx0LmdldEJvdW5kQ29udGV4dCgpLCAvLyBDcmVhdGUgdGhlIHJpZ2h0bW9zdCBzaWJsaW5nIGNvbnRleHQgZnJvbSBpdHMgcGF0aFxuXHRcdFx0cGF0aE1hcHBpbmc6IG9sZFBhdGhzLm1hcCgob2xkUGF0aCwgaW5kZXgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRvbGRQYXRoLFxuXHRcdFx0XHRcdG5ld1BhdGg6IG5ld1BhdGhzW2luZGV4XVxuXHRcdFx0XHR9O1xuXHRcdFx0fSlcblx0XHR9O1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIEEgY2Fub25pY2FsIHBhdGggY291bGRuJ3QgYmUgcmVzb2x2ZWQgKGJlY2F1c2UgYSBzaWJsaW5nIGRvZXNuJ3QgZXhpc3QpXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBkcmFmdCBkb2N1bWVudCBmcm9tIGFuIGV4aXN0aW5nIGRvY3VtZW50LlxuICpcbiAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyBzZXZlcmFsIGhvb2tzIGFzIHRoZXJlIGlzIGEgY2VydGFpbiBjb3Jlb2dyYXBoeSBkZWZpbmVkLlxuICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgb2YgdGhlIGFjdGl2ZSBkb2N1bWVudCBmb3IgdGhlIG5ldyBkcmFmdFxuICogQHBhcmFtIG9BcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIG1QYXJhbWV0ZXJzIFRoZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm9WaWV3XSBUaGUgdmlld1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5iUHJlc2VydmVDaGFuZ2VzXSBQcmVzZXJ2ZSBjaGFuZ2VzIG9mIGFuIGV4aXN0aW5nIGRyYWZ0IG9mIGFub3RoZXIgdXNlclxuICogQHBhcmFtIGdyb3VwSWQgVGhlIGJhdGNoIGdyb3VwSWQgZm9yIHBvc3QgY2FsbCBvZiBlZGl0IGFjdGlvblxuICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyIFRoZSBtZXNzYWdlIGhhbmRsZXIgY29udHJvbGxlciBleHRlbnNpb25cbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCB0aGUge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0IGNvbnRleHR9IG9mIHRoZSBuZXcgZHJhZnQgZG9jdW1lbnRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnQoXG5cdG9Db250ZXh0OiBDb250ZXh0LFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdG1QYXJhbWV0ZXJzOiB7XG5cdFx0b1ZpZXc6IEZFVmlldztcblx0XHRiUHJlc2VydmVDaGFuZ2VzPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0fSxcblx0Z3JvdXBJZDogc3RyaW5nLFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXJcbik6IFByb21pc2U8Q29udGV4dCB8IHVuZGVmaW5lZD4ge1xuXHRjb25zdCBtUGFyYW0gPSBtUGFyYW1ldGVycyB8fCB7fSxcblx0XHRiUnVuUHJlc2VydmVDaGFuZ2VzRmxvdyA9XG5cdFx0XHR0eXBlb2YgbVBhcmFtLmJQcmVzZXJ2ZUNoYW5nZXMgPT09IFwidW5kZWZpbmVkXCIgfHwgKHR5cGVvZiBtUGFyYW0uYlByZXNlcnZlQ2hhbmdlcyA9PT0gXCJib29sZWFuXCIgJiYgbVBhcmFtLmJQcmVzZXJ2ZUNoYW5nZXMpOyAvL2RlZmF1bHQgdHJ1ZVxuXG5cdC8qKlxuXHQgKiBPdmVyd3JpdGUgdGhlIGV4aXN0aW5nIGNoYW5nZS5cblx0ICogQHBhcmFtIHJlc3BvbnNlIENvbnRleHQgb2YgdGhlIGFjdGl2ZSBkb2N1bWVudCBmb3IgdGhlIG5ldyBkcmFmdCBvciB0aGUgZXJyb3IgcmV0cmlldmVkXG5cdCAqIEByZXR1cm5zIFJlc29sdmVzIHdpdGggcmVzdWx0IG9mIHtAbGluayBzYXAuZmUuY29yZS5hY3Rpb25zI2V4ZWN1dGVEcmFmdEVkaXRBY3Rpb259XG5cdCAqL1xuXHRhc3luYyBmdW5jdGlvbiBvdmVyd3JpdGVDaGFuZ2UocmVzcG9uc2U6IENvbnRleHQgfCBDb250ZXh0RXJyb3JUeXBlKTogUHJvbWlzZTxDb250ZXh0IHwgQ29udGV4dEVycm9yVHlwZSB8IHVuZGVmaW5lZD4ge1xuXHRcdC8vT3ZlcndyaXRlIGV4aXN0aW5nIGNoYW5nZXNcblx0XHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IGRyYWZ0RGF0YUNvbnRleHQgPSBvTW9kZWwuYmluZENvbnRleHQoYCR7b0NvbnRleHQuZ2V0UGF0aCgpfS9EcmFmdEFkbWluaXN0cmF0aXZlRGF0YWApLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKG1QYXJhbWV0ZXJzLm9WaWV3KTtcblx0XHRjb25zdCBkcmFmdEFkbWluRGF0YSA9IGF3YWl0IGRyYWZ0RGF0YUNvbnRleHQucmVxdWVzdE9iamVjdCgpO1xuXHRcdGlmIChkcmFmdEFkbWluRGF0YSkge1xuXHRcdFx0Ly8gcmVtb3ZlIGFsbCB1bmJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgYXMgd2Ugc2hvdyBhIHNwZWNpYWwgZGlhbG9nXG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0bGV0IHNJbmZvID0gZHJhZnRBZG1pbkRhdGEuSW5Qcm9jZXNzQnlVc2VyRGVzY3JpcHRpb24gfHwgZHJhZnRBZG1pbkRhdGEuSW5Qcm9jZXNzQnlVc2VyO1xuXHRcdFx0Y29uc3Qgc0VudGl0eVNldCA9IG1QYXJhbWV0ZXJzLm9WaWV3LmdldFZpZXdEYXRhKCkuZW50aXR5U2V0O1xuXHRcdFx0aWYgKHNJbmZvKSB7XG5cdFx0XHRcdGNvbnN0IHNMb2NrZWRCeVVzZXJNc2cgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0RSQUZUX09CSkVDVF9QQUdFX0RSQUZUX0xPQ0tFRF9CWV9VU0VSXCIsIHNJbmZvLCBzRW50aXR5U2V0KTtcblx0XHRcdFx0TWVzc2FnZUJveC5lcnJvcihzTG9ja2VkQnlVc2VyTXNnKTtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKHNMb2NrZWRCeVVzZXJNc2cpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c0luZm8gPSBkcmFmdEFkbWluRGF0YS5DcmVhdGVkQnlVc2VyRGVzY3JpcHRpb24gfHwgZHJhZnRBZG1pbkRhdGEuQ3JlYXRlZEJ5VXNlcjtcblx0XHRcdFx0Y29uc3Qgc1Vuc2F2ZWRDaGFuZ2VzTXNnID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19EUkFGVF9PQkpFQ1RfUEFHRV9EUkFGVF9VTlNBVkVEX0NIQU5HRVNcIiwgc0luZm8sIHNFbnRpdHlTZXQpO1xuXHRcdFx0XHRhd2FpdCBkcmFmdC5zaG93RWRpdENvbmZpcm1hdGlvbk1lc3NhZ2VCb3goc1Vuc2F2ZWRDaGFuZ2VzTXNnLCBvQ29udGV4dCk7XG5cdFx0XHRcdHJldHVybiBkcmFmdC5leGVjdXRlRHJhZnRFZGl0QWN0aW9uKG9Db250ZXh0LCBmYWxzZSwgbVBhcmFtZXRlcnMub1ZpZXcsIGdyb3VwSWQsIG1lc3NhZ2VIYW5kbGVyLCB0cnVlKTsgLy8gdHJ1ZSBiZWNhdXNlIHdlIG92ZXJ3cml0ZSBjaGFuZ2VzXG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICgocmVzcG9uc2UgYXMgQ29udGV4dEVycm9yVHlwZSk/Lm1lc3NhZ2UpIHtcblx0XHRcdE1lc3NhZ2VCb3guZXJyb3IoKHJlc3BvbnNlIGFzIENvbnRleHRFcnJvclR5cGUpLm1lc3NhZ2UpO1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgRXJyb3IoYERyYWZ0IGNyZWF0aW9uIGFib3J0ZWQgZm9yIGRvY3VtZW50OiAke29Db250ZXh0LmdldFBhdGgoKX1gKTtcblx0fVxuXG5cdGlmICghb0NvbnRleHQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJCaW5kaW5nIGNvbnRleHQgdG8gYWN0aXZlIGRvY3VtZW50IGlzIHJlcXVpcmVkXCIpO1xuXHR9XG5cdGxldCBvRHJhZnRDb250ZXh0OiBDb250ZXh0IHwgQ29udGV4dEVycm9yVHlwZSB8IHVuZGVmaW5lZDtcblx0dHJ5IHtcblx0XHRvRHJhZnRDb250ZXh0ID0gYXdhaXQgZHJhZnQuZXhlY3V0ZURyYWZ0RWRpdEFjdGlvbihvQ29udGV4dCwgYlJ1blByZXNlcnZlQ2hhbmdlc0Zsb3csIG1QYXJhbWV0ZXJzLm9WaWV3LCBncm91cElkLCBtZXNzYWdlSGFuZGxlcik7XG5cdH0gY2F0Y2ggKG9SZXNwb25zZSkge1xuXHRcdGlmICgob1Jlc3BvbnNlIGFzIENvbnRleHRFcnJvclR5cGUpLnN0YXR1cyA9PT0gNDA5IHx8IChvUmVzcG9uc2UgYXMgQ29udGV4dEVycm9yVHlwZSkuc3RhdHVzID09PSA0MjMpIHtcblx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdGNvbnN0IHNpYmxpbmdJbmZvID0gYXdhaXQgZHJhZnQuY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbihvQ29udGV4dCwgb0NvbnRleHQpO1xuXHRcdFx0aWYgKHNpYmxpbmdJbmZvPy50YXJnZXRDb250ZXh0KSB7XG5cdFx0XHRcdC8vdGhlcmUgaXMgYSBjb250ZXh0IGF1dGhvcml6ZWQgdG8gYmUgZWRpdGVkIGJ5IHRoZSBjdXJyZW50IHVzZXJcblx0XHRcdFx0YXdhaXQgQ29tbW9uVXRpbHMud2FpdEZvckNvbnRleHRSZXF1ZXN0ZWQoc2libGluZ0luZm8udGFyZ2V0Q29udGV4dCk7XG5cdFx0XHRcdHJldHVybiBzaWJsaW5nSW5mby50YXJnZXRDb250ZXh0O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly90aGVyZSBpcyBubyBkcmFmdCBvd25lZCBieSB0aGUgY3VycmVudCB1c2VyXG5cdFx0XHRcdG9EcmFmdENvbnRleHQgPSBhd2FpdCBvdmVyd3JpdGVDaGFuZ2Uob1Jlc3BvbnNlIGFzIENvbnRleHRFcnJvclR5cGUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIShvUmVzcG9uc2UgJiYgKG9SZXNwb25zZSBhcyBDb250ZXh0RXJyb3JUeXBlKS5jYW5jZWxlZCkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihvUmVzcG9uc2UgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHRpZiAob0RyYWZ0Q29udGV4dCkge1xuXHRcdGNvbnN0IHNFZGl0QWN0aW9uTmFtZSA9IGRyYWZ0LmdldEFjdGlvbk5hbWUob0RyYWZ0Q29udGV4dCBhcyBDb250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuRURJVCk7XG5cdFx0Y29uc3Qgb1NpZGVFZmZlY3RzID0gb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKS5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKHNFZGl0QWN0aW9uTmFtZSwgb0RyYWZ0Q29udGV4dCBhcyBDb250ZXh0KTtcblx0XHRpZiAob1NpZGVFZmZlY3RzPy50cmlnZ2VyQWN0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRhd2FpdCBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLnJlcXVlc3RTaWRlRWZmZWN0c0Zvck9EYXRhQWN0aW9uKG9TaWRlRWZmZWN0cywgb0RyYWZ0Q29udGV4dCBhcyBDb250ZXh0KTtcblx0XHRcdHJldHVybiBvRHJhZnRDb250ZXh0IGFzIENvbnRleHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBvRHJhZnRDb250ZXh0IGFzIENvbnRleHQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBhY3RpdmUgZG9jdW1lbnQgZnJvbSBhIGRyYWZ0IGRvY3VtZW50LlxuICpcbiAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyBzZXZlcmFsIGhvb2tzIGFzIHRoZXJlIGlzIGEgY2VydGFpbiBjaG9yZW9ncmFwaHkgZGVmaW5lZC5cbiAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBhY3RpdmUgZG9jdW1lbnQgZm9yIHRoZSBuZXcgZHJhZnRcbiAqIEBwYXJhbSBvQXBwQ29tcG9uZW50IFRoZSBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSBtUGFyYW1ldGVycyBUaGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5mbkJlZm9yZUFjdGl2YXRlRG9jdW1lbnRdIENhbGxiYWNrIHRoYXQgYWxsb3dzIGEgdmV0byBiZWZvcmUgdGhlICdDcmVhdGUnIHJlcXVlc3QgaXMgZXhlY3V0ZWRcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuZm5BZnRlckFjdGl2YXRlRG9jdW1lbnRdIENhbGxiYWNrIGZvciBwb3N0cHJvY2Vzc2luZyBhZnRlciBkb2N1bWVudCB3YXMgYWN0aXZhdGVkLlxuICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyIFRoZSBtZXNzYWdlIGhhbmRsZXIgY29udHJvbGxlciBleHRlbnNpb25cbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCB0aGUge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0IGNvbnRleHR9IG9mIHRoZSBuZXcgZHJhZnQgZG9jdW1lbnRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVEb2N1bWVudChcblx0b0NvbnRleHQ6IENvbnRleHQsXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0bVBhcmFtZXRlcnM6IHsgZm5CZWZvcmVBY3RpdmF0ZURvY3VtZW50PzogRnVuY3Rpb247IGZuQWZ0ZXJBY3RpdmF0ZURvY3VtZW50PzogRnVuY3Rpb24gfSxcblx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyXG4pOiBQcm9taXNlPENvbnRleHQ+IHtcblx0Y29uc3QgbVBhcmFtID0gbVBhcmFtZXRlcnMgfHwge307XG5cdGlmICghb0NvbnRleHQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJCaW5kaW5nIGNvbnRleHQgdG8gZHJhZnQgZG9jdW1lbnQgaXMgcmVxdWlyZWRcIik7XG5cdH1cblxuXHRjb25zdCBiRXhlY3V0ZSA9IG1QYXJhbS5mbkJlZm9yZUFjdGl2YXRlRG9jdW1lbnQgPyBhd2FpdCBtUGFyYW0uZm5CZWZvcmVBY3RpdmF0ZURvY3VtZW50KG9Db250ZXh0KSA6IHRydWU7XG5cdGlmICghYkV4ZWN1dGUpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYEFjdGl2YXRpb24gb2YgdGhlIGRvY3VtZW50IHdhcyBhYm9ydGVkIGJ5IGV4dGVuc2lvbiBmb3IgZG9jdW1lbnQ6ICR7b0NvbnRleHQuZ2V0UGF0aCgpfWApO1xuXHR9XG5cblx0bGV0IG9BY3RpdmVEb2N1bWVudENvbnRleHQ6IENvbnRleHQ7XG5cdGlmICghaGFzUHJlcGFyZUFjdGlvbihvQ29udGV4dCkpIHtcblx0XHRvQWN0aXZlRG9jdW1lbnRDb250ZXh0ID0gYXdhaXQgZXhlY3V0ZURyYWZ0QWN0aXZhdGlvbkFjdGlvbihvQ29udGV4dCwgb0FwcENvbXBvbmVudCwgbWVzc2FnZUhhbmRsZXIpO1xuXHR9IGVsc2Uge1xuXHRcdC8qIGFjdGl2YXRpb24gcmVxdWlyZXMgcHJlcGFyYXRpb24gKi9cblx0XHRjb25zdCBzQmF0Y2hHcm91cCA9IFwiJGF1dG9cIjtcblx0XHQvL3doZW4gdGhlcmUgYXJlIHBlbmRpbmcgY2hhbmdlcyB0aGVyZSB3aWxsIGJlIGEgcGF0Y2ggcmVxdWVzdCBtZXJnZWQgdG9nZXRoZXIgd2l0aCB0aGUgZHJhZnRQcmVwYXJlIGFuZCBkcmFmdEFjaXZhdGUuXG5cdFx0Ly9UaGUgcGF0Y2ggY2hhbmdlcyB0aGUgRXRhZywgdGhlcmZvcmUgdGhlIHByZXBhcmUgbmVlZHMgdG8gaWdub3JlIEV0YWdzXG5cdFx0Y29uc3QgaWdub3JlRXRhZzogYm9vbGVhbiA9IG9Db250ZXh0LmdldE1vZGVsKCkuaGFzUGVuZGluZ0NoYW5nZXMoXCIkYXV0b1wiKSA/IHRydWUgOiBmYWxzZTtcblx0XHQvLyB3ZSB1c2UgdGhlIHNhbWUgYmF0Y2hHcm91cCB0byBmb3JjZSBwcmVwYXJlIGFuZCBhY3RpdmF0ZSBpbiBhIHNhbWUgYmF0Y2ggYnV0IHdpdGggZGlmZmVyZW50IGNoYW5nZXNldFxuXHRcdGxldCBvUHJlcGFyZVByb21pc2UgPSBkcmFmdC5leGVjdXRlRHJhZnRQcmVwYXJhdGlvbkFjdGlvbihvQ29udGV4dCwgc0JhdGNoR3JvdXAsIHVuZGVmaW5lZCwgaWdub3JlRXRhZyk7XG5cdFx0b0NvbnRleHQuZ2V0TW9kZWwoKS5zdWJtaXRCYXRjaChzQmF0Y2hHcm91cCk7XG5cdFx0Y29uc3Qgb0FjdGl2YXRlUHJvbWlzZSA9IGRyYWZ0LmV4ZWN1dGVEcmFmdEFjdGl2YXRpb25BY3Rpb24ob0NvbnRleHQsIG9BcHBDb21wb25lbnQsIG1lc3NhZ2VIYW5kbGVyLCBzQmF0Y2hHcm91cCk7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKFtvUHJlcGFyZVByb21pc2UsIG9BY3RpdmF0ZVByb21pc2VdKTtcblx0XHRcdG9BY3RpdmVEb2N1bWVudENvbnRleHQgPSB2YWx1ZXNbMV07XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHQvLyBCQ1AgMjI3MDA4NDA3NVxuXHRcdFx0Ly8gaWYgdGhlIEFjdGl2YXRpb24gZmFpbHMsIHRoZW4gdGhlIG1lc3NhZ2VzIGFyZSByZXRyaWV2ZWQgZnJvbSBQUkVQQVJBVElPTiBhY3Rpb25cblx0XHRcdGNvbnN0IHNNZXNzYWdlc1BhdGggPSBnZXRNZXNzYWdlUGF0aEZvclByZXBhcmUob0NvbnRleHQpO1xuXHRcdFx0aWYgKHNNZXNzYWdlc1BhdGgpIHtcblx0XHRcdFx0b1ByZXBhcmVQcm9taXNlID0gZHJhZnQuZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb24ob0NvbnRleHQsIHNCYXRjaEdyb3VwLCB0cnVlKTtcblx0XHRcdFx0b0NvbnRleHQuZ2V0TW9kZWwoKS5zdWJtaXRCYXRjaChzQmF0Y2hHcm91cCk7XG5cdFx0XHRcdGF3YWl0IG9QcmVwYXJlUHJvbWlzZTtcblx0XHRcdFx0Y29uc3QgZGF0YSA9IGF3YWl0IG9Db250ZXh0LnJlcXVlc3RPYmplY3QoKTtcblx0XHRcdFx0aWYgKGRhdGFbc01lc3NhZ2VzUGF0aF0ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdC8vaWYgbWVzc2FnZXMgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBQUkVQQVJBVElPTiBhY3Rpb24sIHRoZW4gcHJldmlvdXMgdHJhbnNpdGlvbiBtZXNzYWdlcyBhcmUgcmVtb3ZlZFxuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyPy5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoZmFsc2UsIGZhbHNlLCBvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBlcnI7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtUGFyYW0uZm5BZnRlckFjdGl2YXRlRG9jdW1lbnQgPyBtUGFyYW0uZm5BZnRlckFjdGl2YXRlRG9jdW1lbnQob0NvbnRleHQsIG9BY3RpdmVEb2N1bWVudENvbnRleHQpIDogb0FjdGl2ZURvY3VtZW50Q29udGV4dDtcbn1cblxuLyoqXG4gKiBEaXNwbGF5IHRoZSBjb25maXJtYXRpb24gZGlhbG9nIGJveCBhZnRlciBwcmVzc2luZyB0aGUgZWRpdCBidXR0b24gb2YgYW4gb2JqZWN0IHBhZ2Ugd2l0aCB1bnNhdmVkIGNoYW5nZXMuXG4gKiBAcGFyYW0gc1Vuc2F2ZWRDaGFuZ2VzTXNnIERpYWxvZyBib3ggbWVzc2FnZSBpbmZvcm1pbmcgdGhlIHVzZXIgdGhhdCBpZiBoZSBzdGFydHMgZWRpdGluZywgdGhlIHByZXZpb3VzIHVuc2F2ZWQgY2hhbmdlcyB3aWxsIGJlIGxvc3RcbiAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBhY3RpdmUgZG9jdW1lbnQgZm9yIHRoZSBuZXcgZHJhZnRcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2hvd0VkaXRDb25maXJtYXRpb25NZXNzYWdlQm94KHNVbnNhdmVkQ2hhbmdlc01zZzogc3RyaW5nLCBvQ29udGV4dDogQ29udGV4dCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRjb25zdCBsb2NhbEkxOG5SZWYgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZCwgcmVqZWN0OiAocmVhc29uPzogdW5rbm93bikgPT4gdm9pZCkge1xuXHRcdGNvbnN0IG9EaWFsb2cgPSBuZXcgRGlhbG9nKHtcblx0XHRcdHRpdGxlOiBsb2NhbEkxOG5SZWYuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1dBUk5JTkdcIiksXG5cdFx0XHRzdGF0ZTogXCJXYXJuaW5nXCIsXG5cdFx0XHRjb250ZW50OiBuZXcgVGV4dCh7XG5cdFx0XHRcdHRleHQ6IHNVbnNhdmVkQ2hhbmdlc01zZ1xuXHRcdFx0fSksXG5cdFx0XHRiZWdpbkJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdHRleHQ6IGxvY2FsSTE4blJlZi5nZXRUZXh0KFwiQ19DT01NT05fT0JKRUNUX1BBR0VfRURJVFwiKSxcblx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0ZW5kQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0dGV4dDogbG9jYWxJMThuUmVmLmdldFRleHQoXCJDX0NPTU1PTl9PQkpFQ1RfUEFHRV9DQU5DRUxcIiksXG5cdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdHJlamVjdChgRHJhZnQgY3JlYXRpb24gYWJvcnRlZCBmb3IgZG9jdW1lbnQ6ICR7b0NvbnRleHQuZ2V0UGF0aCgpfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0b0RpYWxvZy5kZXN0cm95KCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0b0RpYWxvZy5hZGRTdHlsZUNsYXNzKFwic2FwVWlDb250ZW50UGFkZGluZ1wiKTtcblx0XHRvRGlhbG9nLm9wZW4oKTtcblx0fSk7XG59XG5cbi8qKlxuICogSFRUUCBQT1NUIGNhbGwgd2hlbiBEcmFmdEFjdGlvbiBpcyBwcmVzZW50IGZvciBEcmFmdCBEZWxldGU7IEhUVFAgREVMRVRFIGNhbGwgd2hlbiB0aGVyZSBpcyBubyBEcmFmdEFjdGlvblxuICogYW5kIEFjdGl2ZSBJbnN0YW5jZSBhbHdheXMgdXNlcyBERUxFVEUuXG4gKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBvZiB0aGUgZG9jdW1lbnQgdG8gYmUgZGlzY2FyZGVkXG4gKiBAcGFyYW0gbWVzc2FnZUhhbmRsZXIgVGhlIG1lc3NhZ2UgaGFuZGxlciBjb250cm9sbGVyIGV4dGVuc2lvblxuICogQHBhcmFtIG9BcHBDb21wb25lbnQgQ29udGV4dCBvZiB0aGUgZG9jdW1lbnQgdG8gYmUgZGlzY2FyZGVkXG4gKiBAcGFyYW0gYkVuYWJsZVN0cmljdEhhbmRsaW5nXG4gKiBAcmV0dXJucyBBIFByb21pc2UgcmVzb2x2ZWQgd2hlbiB0aGUgY29udGV4dCBpcyBkZWxldGVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZURyYWZ0KFxuXHRvQ29udGV4dDogQ29udGV4dCxcblx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRvQXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50LFxuXHRiRW5hYmxlU3RyaWN0SGFuZGxpbmc/OiBib29sZWFuXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3Qgc0Rpc2NhcmRBY3Rpb24gPSBnZXRBY3Rpb25OYW1lKG9Db250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuRElTQ0FSRCksXG5cdFx0YklzQWN0aXZlRW50aXR5ID0gb0NvbnRleHQuZ2V0T2JqZWN0KCkuSXNBY3RpdmVFbnRpdHk7XG5cblx0aWYgKGJJc0FjdGl2ZUVudGl0eSB8fCAoIWJJc0FjdGl2ZUVudGl0eSAmJiAhc0Rpc2NhcmRBY3Rpb24pKSB7XG5cdFx0Ly9Vc2UgRGVsZXRlIGluIGNhc2Ugb2YgYWN0aXZlIGVudGl0eSBhbmQgbm8gZGlzY2FyZCBhY3Rpb24gYXZhaWxhYmxlIGZvciBkcmFmdFxuXHRcdGlmIChvQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpICYmICFvQ29udGV4dC5pc0luYWN0aXZlKCkpIHtcblx0XHRcdHJldHVybiBvQ29udGV4dFxuXHRcdFx0XHQuZ2V0QmluZGluZygpXG5cdFx0XHRcdC5yZXNldENoYW5nZXMoKVxuXHRcdFx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db250ZXh0LmRlbGV0ZSgpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBXaGVuIGNhbmNlbGxpbmcgYW4gZWRpdCBkcmFmdCByb290IG5vZGUsIHVzZSBtb2RlbC5kZWxldGUgaW5zdGVhZCBvZiBjb250ZXh0LmRlbGV0ZSwgdG8gb25seSBzZW5kIGRlbGV0aW9uIHRvIGJhY2tlbmQsXG5cdFx0XHQvLyBidXQga2VlcCBjb250ZXh0IGFsaXZlIChpbmNsdWRpbmcgYmluZGluZ3MpLiBUaHVzLCB3ZSBjYW4gZW5zdXJlIHNlYW1sZXNzIHRyYW5zaXN0aW9uIGZyb20gZHJhZnQgdG8gYWN0aXZlIGluc3RhbmNlXG5cdFx0XHQvLyAod2l0aG91dCBpbnRlcm1lZGlhdGUgdW5kZWZpbmVkIGJpbmRpbmdzIGUuZy4gbGVhZGluZyB0byBmbGlja2VyaW5nKS5cblx0XHRcdC8vIEluIG90aGVyIGNhc2VzIChkZWxldGluZyBhY3RpdmUsIGRpc2NhcmRpbmcgY3JlYXRlIGRyYWZ0IG9yIGRpc2NhcmRpbmcgZHJhZnQgbm9kZSksIHN0YXkgd2l0aCBjb250ZXh0LmRlbGV0ZS5cblx0XHRcdC8vIFdoZW4gY2FuY2VsbGluZyBhIGNyZWF0ZSBkcmFmdCwgcGFnZSBpcyBjbG9zZWQsIHRodXMgdGhlIHByb2JsZW0gb2YgZmxpY2tlcmluZyBjYW5ub3Qgb2NjdXIuXG5cdFx0XHQvLyBJbiBjYXNlIG9mIGRpc2NhcmRpbmcgYSBkcmFmdCBub2RlLCB0aGVvcmV0aWNhbGx5IHRoZSBzYW1lIHByb2JsZW0gY291bGRcblx0XHRcdC8vIG9jY3VyLCBidXQgbmVlZHMgcXVpdGUgc3BlY2lmaWMgbW9kZWxsaW5nIChidXR0b24gdmlzaWJpbGl0eSBvbiBpdGVtIGxldmVsIGJvdW5kIGFnYWluc3Qgc2VydmljZSBwcm9wZXJ0eSBpbiBhbiBGQ0wgYXBwKVxuXHRcdFx0Ly8gYW5kIGFjdGluZyAobG9va2luZyBhdCBidXR0b24gb24gdGhpcmQgY29sdW1uIHdoaWxlIGRpc2NhcmRpbmcgb24gMm5kIGNvbHVtbikuIEN1cnJlbnRseSwgbW9kZWwgc2VlbXMgbm90IHRvIGJlIHByZXBhcmVkXG5cdFx0XHQvLyBmb3IgdGhhdCBjYXNlLCB0aHVzIGR1ZSB0byB0aGUgbWluaW1hbCBpbXBhY3QgKG9ubHkgaW50ZXJtZWRpYXRlIHZpc3VhbCBzdGF0ZSksIGFjY2VwdGluZyB0aGlzIGZvciB0aGUgdGltZSBiZWluZy5cblx0XHRcdHJldHVybiAhb0NvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKSAmJlxuXHRcdFx0XHRNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdChcblx0XHRcdFx0XHRnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhQ29udGV4dChvQ29udGV4dC5nZXRQYXRoKCkpKT8udGFyZ2V0RW50aXR5U2V0XG5cdFx0XHRcdCkgJiZcblx0XHRcdFx0b0NvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNBY3RpdmVFbnRpdHlcIilcblx0XHRcdFx0PyBvQ29udGV4dC5nZXRNb2RlbCgpLmRlbGV0ZShvQ29udGV4dClcblx0XHRcdFx0OiBvQ29udGV4dC5kZWxldGUoKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly9Vc2UgRGlzY2FyZCBQb3N0IEFjdGlvbiBpZiBpdCBpcyBhIGRyYWZ0IGVudGl0eSBhbmQgZGlzY2FyZCBhY3Rpb24gZXhpc3RzXG5cdFx0YXdhaXQgZXhlY3V0ZURyYWZ0RGlzY2FyZEFjdGlvbihvQ29udGV4dCwgbWVzc2FnZUhhbmRsZXIsIG9BcHBDb21wb25lbnQsIGJFbmFibGVTdHJpY3RIYW5kbGluZyk7XG5cdH1cbn1cblxuY29uc3QgZHJhZnQgPSB7XG5cdGNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50OiBjcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudCxcblx0YWN0aXZhdGVEb2N1bWVudDogYWN0aXZhdGVEb2N1bWVudCxcblx0ZGVsZXRlRHJhZnQ6IGRlbGV0ZURyYWZ0LFxuXHRleGVjdXRlRHJhZnRFZGl0QWN0aW9uOiBleGVjdXRlRHJhZnRFZGl0QWN0aW9uLFxuXHRleGVjdXRlRHJhZnRWYWxpZGF0aW9uOiBleGVjdXRlRHJhZnRWYWxpZGF0aW9uLFxuXHRleGVjdXRlRHJhZnRQcmVwYXJhdGlvbkFjdGlvbjogZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb24sXG5cdGV4ZWN1dGVEcmFmdEFjdGl2YXRpb25BY3Rpb246IGV4ZWN1dGVEcmFmdEFjdGl2YXRpb25BY3Rpb24sXG5cdGhhc1ByZXBhcmVBY3Rpb246IGhhc1ByZXBhcmVBY3Rpb24sXG5cdGNvbXB1dGVTaWJsaW5nSW5mb3JtYXRpb246IGNvbXB1dGVTaWJsaW5nSW5mb3JtYXRpb24sXG5cdHByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uOiBkcmFmdERhdGFMb3NzUG9wdXAucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24sXG5cdHNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbjogZHJhZnREYXRhTG9zc1BvcHVwLnNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbixcblx0Y3JlYXRlT3BlcmF0aW9uOiBjcmVhdGVPcGVyYXRpb24sXG5cdGV4ZWN1dGVEcmFmdERpc2NhcmRBY3Rpb246IGV4ZWN1dGVEcmFmdERpc2NhcmRBY3Rpb24sXG5cdE5hdmlnYXRpb25UeXBlOiBkcmFmdERhdGFMb3NzUG9wdXAuTmF2aWdhdGlvblR5cGUsXG5cdGdldEFjdGlvbk5hbWU6IGdldEFjdGlvbk5hbWUsXG5cdHNob3dFZGl0Q29uZmlybWF0aW9uTWVzc2FnZUJveDogc2hvd0VkaXRDb25maXJtYXRpb25NZXNzYWdlQm94XG59O1xuXG5leHBvcnQgZGVmYXVsdCBkcmFmdDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztFQW9GQTtFQUNBLE1BQU1BLGVBQWUsR0FBRztJQUN2QkMsSUFBSSxFQUFFLFlBQVk7SUFDbEJDLFVBQVUsRUFBRSxrQkFBa0I7SUFDOUJDLE9BQU8sRUFBRSxlQUFlO0lBQ3hCQyxPQUFPLEVBQUU7RUFDVixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQyxhQUFhQSxDQUFDQyxRQUFpQixFQUFFQyxVQUFrQixFQUFVO0lBQ3JFLE1BQU1DLE1BQU0sR0FBR0YsUUFBUSxDQUFDRyxRQUFRLENBQUMsQ0FBQztNQUNqQ0MsVUFBVSxHQUFHRixNQUFNLENBQUNHLFlBQVksQ0FBQyxDQUFDO01BQ2xDQyxjQUFjLEdBQUdGLFVBQVUsQ0FBQ0csV0FBVyxDQUFDUCxRQUFRLENBQUNRLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFNUQsT0FBT0osVUFBVSxDQUFDSyxTQUFTLENBQUMsR0FBR0gsY0FBYyw2Q0FBNkNMLFVBQVUsRUFBRSxDQUFDO0VBQ3hHO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTUyxlQUFlQSxDQUFDVixRQUFpQixFQUFFQyxVQUFrQixFQUFFVSxRQUFnQyxFQUF1QjtJQUN0SCxNQUFNQyxjQUFjLEdBQUdiLGFBQWEsQ0FBQ0MsUUFBUSxF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
|
|
@@ -181,6 +181,7 @@ async function executeDraftEditAction(
|
|
|
181
181
|
null,
|
|
182
182
|
null,
|
|
183
183
|
messageHandler,
|
|
184
|
+
undefined,
|
|
184
185
|
undefined
|
|
185
186
|
),
|
|
186
187
|
oContext.getBinding().isA("sap.ui.model.odata.v4.ODataListBinding")
|
|
@@ -269,6 +270,7 @@ async function executeDraftActivationAction(
|
|
|
269
270
|
null,
|
|
270
271
|
null,
|
|
271
272
|
messageHandler,
|
|
273
|
+
undefined,
|
|
272
274
|
undefined
|
|
273
275
|
)
|
|
274
276
|
: undefined,
|
|
@@ -406,6 +408,7 @@ async function executeDraftDiscardAction(
|
|
|
406
408
|
null,
|
|
407
409
|
null,
|
|
408
410
|
messageHandler,
|
|
411
|
+
undefined,
|
|
409
412
|
undefined
|
|
410
413
|
),
|
|
411
414
|
false
|