@sapui5/sap.fe.core 1.141.2 → 1.143.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 +4 -1
- package/src/sap/fe/core/ActionRuntime.js +78 -23
- package/src/sap/fe/core/ActionRuntime.ts +91 -35
- package/src/sap/fe/core/AppComponent.js +76 -6
- package/src/sap/fe/core/AppComponent.ts +91 -8
- package/src/sap/fe/core/AppStateHandler.js +7 -7
- package/src/sap/fe/core/AppStateHandler.ts +9 -8
- package/src/sap/fe/core/BaseController.js +8 -5
- package/src/sap/fe/core/BaseController.ts +6 -1
- package/src/sap/fe/core/CommonUtils.js +4 -123
- package/src/sap/fe/core/CommonUtils.ts +3 -172
- package/src/sap/fe/core/ExtensionAPI.js +3 -11
- package/src/sap/fe/core/ExtensionAPI.ts +3 -16
- package/src/sap/fe/core/PageController.js +64 -43
- package/src/sap/fe/core/PageController.ts +62 -47
- package/src/sap/fe/core/TemplateComponent.js +12 -1
- package/src/sap/fe/core/TemplateComponent.ts +16 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +5 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +5 -2
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -44
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +92 -59
- package/src/sap/fe/core/controllerextensions/EditFlow.js +74 -48
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +87 -50
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +10 -9
- package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
- package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.js +4 -4
- package/src/sap/fe/core/controllerextensions/Routing.ts +3 -6
- package/src/sap/fe/core/controllerextensions/Share.js +5 -5
- package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
- package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +49 -21
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +64 -24
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +6 -7
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +5 -5
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +21 -15
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +18 -15
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -6
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +8 -5
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +3 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +2 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
- package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
- package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
- package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.ts +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
- package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +118 -39
- package/src/sap/fe/core/converters/controls/Common/Action.js +58 -21
- package/src/sap/fe/core/converters/controls/Common/Action.ts +72 -22
- package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
- package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +87 -22
- package/src/sap/fe/core/converters/controls/Common/Table.ts +112 -21
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +174 -79
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
- package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
- package/src/sap/fe/core/converters/helpers/ID.js +3 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +10 -5
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +13 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
- package/src/sap/fe/core/flexibility/AppComponent.flexibility.js +55 -0
- package/src/sap/fe/core/flexibility/AppComponent.flexibility.ts +65 -0
- package/src/sap/fe/core/flexibility/XMLTools.js +71 -0
- package/src/sap/fe/core/flexibility/XMLTools.ts +61 -0
- package/src/sap/fe/core/fpm/manifest.json +2 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +92 -32
- package/src/sap/fe/core/helpers/DeleteHelper.js +13 -13
- package/src/sap/fe/core/helpers/DeleteHelper.ts +17 -15
- package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
- package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
- package/src/sap/fe/core/helpers/ModelHelper.js +47 -11
- package/src/sap/fe/core/helpers/ModelHelper.ts +62 -15
- package/src/sap/fe/core/helpers/PasteHelper.js +6 -2
- package/src/sap/fe/core/helpers/PasteHelper.ts +5 -7
- package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
- package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
- package/src/sap/fe/core/helpers/WebSocket.js +6 -7
- package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
- package/src/sap/fe/core/library.js +33 -3
- package/src/sap/fe/core/library.ts +31 -1
- package/src/sap/fe/core/messagebundle.properties +8 -1
- package/src/sap/fe/core/messagebundle_ar.properties +8 -1
- package/src/sap/fe/core/messagebundle_bg.properties +10 -3
- package/src/sap/fe/core/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/messagebundle_cy.properties +8 -1
- package/src/sap/fe/core/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/messagebundle_en.properties +8 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +8 -1
- package/src/sap/fe/core/messagebundle_es.properties +8 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/messagebundle_fr.properties +16 -9
- package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/messagebundle_hi.properties +8 -1
- package/src/sap/fe/core/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/messagebundle_ja.properties +8 -1
- package/src/sap/fe/core/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/messagebundle_no.properties +9 -2
- package/src/sap/fe/core/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
- package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
- package/src/sap/fe/core/rootView/Fcl.controller.ts +22 -5
- package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +2 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +9 -9
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
- package/src/sap/fe/core/services/RoutingServiceFactory.js +9 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -6
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +57 -5
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +69 -10
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
- package/src/sap/fe/core/templating/UIFormatters.js +17 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
- package/ui5.yaml +2 -0
|
@@ -142,21 +142,21 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/editFlow/draft"
|
|
|
142
142
|
}
|
|
143
143
|
return retTxt;
|
|
144
144
|
}
|
|
145
|
-
function getUnSavedContextUser(unSavedContext) {
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
sLastChangedByUser = draftAdminData["LastChangedByUserDescription"] || draftAdminData["LastChangedByUser"] || "";
|
|
145
|
+
async function getUnSavedContextUser(unSavedContext) {
|
|
146
|
+
const adminDataPre = unSavedContext.getObject("DraftAdministrativeData");
|
|
147
|
+
if (!adminDataPre?.LastChangedByUserDescription && !adminDataPre?.LastChangedByUser) {
|
|
148
|
+
await unSavedContext.requestProperty(["DraftAdministrativeData/LastChangedByUserDescription", "DraftAdministrativeData/LastChangedByUser"]);
|
|
150
149
|
}
|
|
151
|
-
|
|
150
|
+
const adminData = unSavedContext.getObject("DraftAdministrativeData");
|
|
151
|
+
return adminData?.LastChangedByUserDescription ?? adminData?.LastChangedByUser ?? "";
|
|
152
152
|
}
|
|
153
|
-
function getUnsavedContextsText(resourceModel, numberOfSelectedContexts, unSavedContexts, totalDeletable) {
|
|
153
|
+
async function getUnsavedContextsText(resourceModel, numberOfSelectedContexts, unSavedContexts, totalDeletable) {
|
|
154
154
|
let infoTxt = "",
|
|
155
155
|
optionTxt = "",
|
|
156
156
|
optionWithoutTxt = false;
|
|
157
157
|
if (numberOfSelectedContexts === 1 && unSavedContexts.length === 1) {
|
|
158
158
|
//only one unsaved object are selected
|
|
159
|
-
const lastChangedByUser = getUnSavedContextUser(unSavedContexts[0]);
|
|
159
|
+
const lastChangedByUser = await getUnSavedContextUser(unSavedContexts[0]);
|
|
160
160
|
infoTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_CHANGES", [lastChangedByUser]);
|
|
161
161
|
optionWithoutTxt = true;
|
|
162
162
|
} else if (numberOfSelectedContexts === unSavedContexts.length) {
|
|
@@ -166,7 +166,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/editFlow/draft"
|
|
|
166
166
|
} else if (totalDeletable === unSavedContexts.length) {
|
|
167
167
|
// non-deletable/locked exists, all deletable are unsaved by others
|
|
168
168
|
if (unSavedContexts.length === 1) {
|
|
169
|
-
const lastChangedByUser = getUnSavedContextUser(unSavedContexts[0]);
|
|
169
|
+
const lastChangedByUser = await getUnSavedContextUser(unSavedContexts[0]);
|
|
170
170
|
infoTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_AND_FEW_OBJECTS_LOCKED_SINGULAR", [lastChangedByUser]);
|
|
171
171
|
} else {
|
|
172
172
|
infoTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_AND_FEW_OBJECTS_LOCKED_PLURAL");
|
|
@@ -175,7 +175,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/editFlow/draft"
|
|
|
175
175
|
} else if (totalDeletable > unSavedContexts.length) {
|
|
176
176
|
// non-deletable/locked exists, deletable include unsaved and other types.
|
|
177
177
|
if (unSavedContexts.length === 1) {
|
|
178
|
-
const lastChangedByUser = getUnSavedContextUser(unSavedContexts[0]);
|
|
178
|
+
const lastChangedByUser = await getUnSavedContextUser(unSavedContexts[0]);
|
|
179
179
|
optionTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_UNSAVED_SINGULAR", [lastChangedByUser]);
|
|
180
180
|
} else {
|
|
181
181
|
optionTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_UNSAVED_PLURAL");
|
|
@@ -235,7 +235,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/editFlow/draft"
|
|
|
235
235
|
return option.selected && option.type === DeleteOptionTypes.draftsToDeleteBeforeActive ? result.concat(option.contexts) : result;
|
|
236
236
|
}, contexts);
|
|
237
237
|
}
|
|
238
|
-
function updateDraftOptionsForDeletableTexts(mParameters, vContexts, totalDeletable, resourceModel, items, options) {
|
|
238
|
+
async function updateDraftOptionsForDeletableTexts(mParameters, vContexts, totalDeletable, resourceModel, items, options) {
|
|
239
239
|
let {
|
|
240
240
|
numberOfSelectedContexts,
|
|
241
241
|
draftsWithDeletableActive,
|
|
@@ -284,7 +284,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/editFlow/draft"
|
|
|
284
284
|
|
|
285
285
|
// option: unsaved changes by others
|
|
286
286
|
if (unSavedContexts.length > 0) {
|
|
287
|
-
const unsavedChangesTxts = deleteHelper.getUnsavedContextsText(resourceModel, numberOfSelectedContexts, unSavedContexts, totalDeletable) || {};
|
|
287
|
+
const unsavedChangesTxts = (await deleteHelper.getUnsavedContextsText(resourceModel, numberOfSelectedContexts, unSavedContexts, totalDeletable)) || {};
|
|
288
288
|
if (unsavedChangesTxts.infoTxt) {
|
|
289
289
|
items.push(new Text({
|
|
290
290
|
text: unsavedChangesTxts.infoTxt
|
|
@@ -725,4 +725,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/editFlow/draft"
|
|
|
725
725
|
};
|
|
726
726
|
return deleteHelper;
|
|
727
727
|
}, false);
|
|
728
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZWxldGVPcHRpb25UeXBlcyIsIkRlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sIiwiZ2V0VXBkYXRlZFNlbGVjdGlvbnMiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsInR5cGUiLCJzZWxlY3RlZENvbnRleHRzIiwiY29udGV4dHNUb1JlbW92ZSIsInJldFNlbGVjdGVkQ29udGV4dHMiLCJmb3JFYWNoIiwiY29udGV4dCIsImlkeCIsImluZGV4T2YiLCJzcGxpY2UiLCJzZXRQcm9wZXJ0eSIsImNsZWFyU2VsZWN0ZWRDb250ZXh0c0Zvck9wdGlvbiIsIm9wdGlvbiIsImdldFByb3BlcnR5IiwiZGVsZXRhYmxlQ29udGV4dHMiLCJkcmFmdFNpYmxpbmdQYWlycyIsImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUiLCJkcmFmdHMiLCJtYXAiLCJjb250ZXh0UGFpciIsImRyYWZ0IiwibGVuZ3RoIiwiYWZ0ZXJEZWxldGVQcm9jZXNzIiwicGFyYW1ldGVycyIsIm9wdGlvbnMiLCJjb250ZXh0cyIsInJlc291cmNlTW9kZWwiLCJsYXN0RGVsZXRlZFJvd0luZGV4IiwiZW50aXR5U2V0TmFtZSIsInVuZGVmaW5lZCIsInNlbGVjdGVkIiwic29tZSIsImlzTXVsdGlWYWx1ZUZpZWxkIiwicGFyZW50Q29udHJvbCIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsInNob3VsZFNob3dUb2FzdCIsInNpbGVudE1vZGUiLCJtZXNzYWdlS2V5IiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsImdldFRleHQiLCJkZWxldGVIZWxwZXIiLCJzZXRGb2N1c0FmdGVyRGVsZXRlIiwiY29udGV4dFBhdGgiLCJnZXRQYXRoIiwiZ2V0TW9kZWwiLCJsb2NhbEFubm90YXRpb25Nb2RlbCIsImdldExvY2FsQW5ub3RhdGlvbk1vZGVsIiwiYW5ub3RhdGlvbk9iamVjdCIsImdldE9iamVjdCIsImtleSIsIk9iamVjdCIsImtleXMiLCJpbmNsdWRlcyIsInRhYmxlIiwiZGVsZXRlZFJvd3NDb3VudCIsInRhYmxlUm93c0NvdW50IiwiZ2V0Um93QmluZGluZyIsImdldENvdW50Iiwib3JpZ2luYWxUYWJsZVJvd3NDb3VudCIsIm5leHRGb2N1c1Jvd0luZGV4IiwiZm9jdXNSb3ciLCJmb2N1cyIsImdldExvY2tlZENvbnRleHRVc2VyIiwibG9ja2VkQ29udGV4dCIsImRyYWZ0QWRtaW5EYXRhIiwiZ2V0TG9ja2VkT2JqZWN0c1RleHQiLCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMiLCJsb2NrZWRDb250ZXh0cyIsInJldFR4dCIsImxvY2tlZFVzZXIiLCJnZXROb25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0IiwibnVtYmVyT2ZEcmFmdHMiLCJ0b3RhbERlbGV0YWJsZSIsImdldFVuU2F2ZWRDb250ZXh0VXNlciIsInVuU2F2ZWRDb250ZXh0Iiwic0xhc3RDaGFuZ2VkQnlVc2VyIiwiZ2V0VW5zYXZlZENvbnRleHRzVGV4dCIsInVuU2F2ZWRDb250ZXh0cyIsImluZm9UeHQiLCJvcHRpb25UeHQiLCJvcHRpb25XaXRob3V0VHh0IiwibGFzdENoYW5nZWRCeVVzZXIiLCJnZXROb25EZWxldGFibGVUZXh0IiwibVBhcmFtZXRlcnMiLCJ0b3RhbE51bURlbGV0YWJsZUNvbnRleHRzIiwiZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSIsIm5vbkRlbGV0YWJsZUNvbnRleHRzIiwiVGV4dCIsInRleHQiLCJnZXRDb25maXJtZWREZWxldGFibGVDb250ZXh0IiwicmVkdWNlIiwicmVzdWx0IiwiZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUiLCJjb25jYXQiLCJnZXREcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSIsInVwZGF0ZURyYWZ0T3B0aW9uc0ZvckRlbGV0YWJsZVRleHRzIiwidkNvbnRleHRzIiwiaXRlbXMiLCJsb2NrZWRDb250ZXh0c1R4dCIsImRlbGV0YWJsZURyYWZ0SW5mbyIsInB1c2giLCJzaWJsaW5nSW5mbyIsInRhcmdldENvbnRleHQiLCJub25EZWxldGFibGVFeGlzdHMiLCJub25EZWxldGFibGVUZXh0Q3RybCIsInVuc2F2ZWRDaGFuZ2VzVHh0cyIsImNvbnRyb2wiLCJDSEVDS0JPWCIsIm5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQiLCJURVhUIiwidXBkYXRlQ29udGVudEZvckRlbGV0ZURpYWxvZyIsInNldFRleHQiLCJDaGVja0JveCIsInNlbGVjdCIsIm9FdmVudCIsImNoZWNrQm94IiwiZ2V0U291cmNlIiwiZ2V0U2VsZWN0ZWQiLCJfZ2V0T3JpZ2luYWxTZWxlY3RlZFJlY29yZCIsImNvbnRleHRUb0RlbGV0ZSIsInJldCIsImZpbmQiLCJkcmFmdFNpYmxpbmdQYWlyIiwiZ2V0T3B0aW9uc0ZvckRlbGV0YWJsZVRleHRzIiwiZGlyZWN0RGVsZXRhYmxlQ29udGV4dHMiLCJkZXNjcmlwdGlvbiIsIm9UYWJsZSIsInNLZXkiLCJnZXRQYXJlbnQiLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwidHh0IiwiZGVzY3JpcHRpb25QYXRoIiwicGF0aCIsIm9MaW5lQ29udGV4dERhdGEiLCJzS2V5VmFsdWUiLCJzRGVzY3JpcHRpb24iLCJkZWxldGFibGVPcHRpb25UeHQiLCJ1bnNoaWZ0IiwiYWxsRGVsZXRhYmxlVHh0IiwiZGVsZXRlRHJhZnRzQmVmb3JlQWN0aXZlc0FuZEdldEVycm9ycyIsIm1lc3NhZ2VIYW5kbGVyIiwiYXBwQ29tcG9uZW50IiwiZW5hYmxlU3RyaWN0SGFuZGxpbmciLCJkcmFmdEVycm9ycyIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwiZGVsZXRlRHJhZnQiLCJlIiwiTG9nIiwiZXJyb3IiLCJyZW1vdmVEZXNjZW5kYW50Q29udGV4dHMiLCJ0ZW1wQ29udGV4dHMiLCJwYXJlbnRDb250ZXh0IiwicGFyZW50SW5kZXgiLCJjaGlsZEluZGV4IiwiY2hpbGRDb250ZXh0IiwiaXNBbmNlc3Rvck9mIiwic2V0U2VsZWN0ZWQiLCJmaWx0ZXIiLCJkZWxldGVDb25maXJtSGFuZGxlciIsImRyYWZ0RW5hYmxlZCIsImJpbmRpbmdUeXBlIiwibWVzc2FnZUhhbmRsaW5nS2V5IiwicmVnaXN0ZXJUb0hvbGRNZXNzYWdlcyIsImdldEluZGV4IiwiYmVmb3JlRGVsZXRlQ2FsbEJhY2siLCJjb250ZXh0c1RvRGVsZXRlIiwiYWxsIiwiZHJhZnRXaXRoRGVsZXRhYmxlQWN0aXZlIiwicmVzZXRDaGFuZ2VzIiwiZGVsZXRlIiwiZ2V0Q2Fub25pY2FsUGF0aCIsIkVycm9yIiwicmVtb3ZlSG9sZEtleSIsIm9FcnJvciIsImFkZEdlbmVyaWNEZWxldGVGYWlsdXJlTWVzc2FnZSIsInNob3dNZXNzYWdlcyIsInVuSG9sZEtleSIsIk1lc3NhZ2luZyIsImFkZE1lc3NhZ2VzIiwiTWVzc2FnZSIsIm1lc3NhZ2UiLCJNZXNzYWdlVHlwZSIsInRhcmdldCIsInBlcnNpc3RlbnQiLCJjb2RlIiwidGVjaG5pY2FsRGV0YWlscyIsImZlIiwiY2hhbmdlU2V0UHJlVGV4dEZvclNpbmdsZUVycm9yIiwidXBkYXRlSW5mb0Zyb21TaWJsaW5nIiwiaW5mbyIsImRlbGV0YWJsZVBhdGgiLCJzdGF0aWNEZWxldGFibGUiLCJpc0FjdGl2ZSIsImhhc0FjdGl2ZSIsInNpYmxpbmdJbmZvcm1hdGlvbiIsImNvbXB1dGVTaWJsaW5nSW5mb3JtYXRpb24iLCJzaWJsaW5nRGVsZXRhYmxlIiwicmVxdWVzdFByb3BlcnR5IiwiaGFzRHJhZnQiLCJwcm9wZXJ0aWVzVG9GZXRjaCIsImxvY2tlZCIsInBhdGhNYXBwaW5nIiwiZGVsZXRhYmxlIiwiX2UiLCJnZXRDb250ZXh0SW5mb3MiLCJpc1RyYW5zaWVudCIsImlzSW5hY3RpdmUiLCJtZXRhQ29udGV4dCIsImdldE1ldGFNb2RlbCIsImdldE1ldGFDb250ZXh0IiwiaXNEcmFmdFJvb3QiLCJpc0RyYWZ0Tm9kZSIsImlzSW5hY3RpdmVDb250ZXh0IiwiY29udGV4dERhdGEiLCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSIsIkluUHJvY2Vzc0J5VXNlciIsIkhhc0RyYWZ0RW50aXR5IiwiSXNBY3RpdmVFbnRpdHkiLCJIYXNBY3RpdmVFbnRpdHkiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsImZvckNvbnRleHRNZW51IiwiYXJndW1lbnRzIiwiY29udGV4dEluZm9zIiwiYnVja2V0cyIsInZhbHVlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJEZWxldGVIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBTaWJsaW5nSW5mb3JtYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHR5cGUgeyBDaGVja0JveCRTZWxlY3RFdmVudCB9IGZyb20gXCJzYXAvbS9DaGVja0JveFwiO1xuaW1wb3J0IENoZWNrQm94IGZyb20gXCJzYXAvbS9DaGVja0JveFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcblxuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwiLi9Nb2RlbEhlbHBlclwiO1xuXG5lbnVtIERlbGV0ZU9wdGlvblR5cGVzIHtcblx0ZGVsZXRhYmxlQ29udGV4dHMgPSBcImRlbGV0YWJsZUNvbnRleHRzXCIsXG5cdGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUgPSBcImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVcIixcblx0dW5TYXZlZENvbnRleHRzID0gXCJ1blNhdmVkQ29udGV4dHNcIixcblx0ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSA9IFwiZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZVwiLFxuXHRkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSA9IFwiZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmVcIlxufVxuXG5lbnVtIERlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sIHtcblx0Q0hFQ0tCT1ggPSBcImNoZWNrQm94XCIsXG5cdFRFWFQgPSBcInRleHRcIlxufVxuXG5leHBvcnQgdHlwZSBEcmFmdFNpYmxpbmdQYWlyID0ge1xuXHRkcmFmdDogT0RhdGFWNENvbnRleHQ7XG5cdHNpYmxpbmdJbmZvOiBTaWJsaW5nSW5mb3JtYXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBEZWxldGVPcHRpb24gPSB7XG5cdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzO1xuXHRjb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0c2VsZWN0ZWQ6IGJvb2xlYW47XG5cdHRleHQ/OiBzdHJpbmc7XG5cdGNvbnRyb2w/OiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbDtcbn07XG5cbmV4cG9ydCB0eXBlIENvbnRleHRJbmZvID0ge1xuXHRjb250ZXh0OiBPRGF0YVY0Q29udGV4dDtcblx0c2libGluZ0luZm86IFNpYmxpbmdJbmZvcm1hdGlvbiB8IHVuZGVmaW5lZDtcblx0aXNEcmFmdFJvb3Q6IGJvb2xlYW47XG5cdGlzRHJhZnROb2RlOiBib29sZWFuO1xuXHRpc0FjdGl2ZTogYm9vbGVhbjtcblx0aGFzQWN0aXZlOiBib29sZWFuO1xuXHRoYXNEcmFmdDogYm9vbGVhbjtcblx0bG9ja2VkOiBib29sZWFuO1xuXHRkZWxldGFibGU6IGJvb2xlYW47XG5cdHNpYmxpbmdEZWxldGFibGU6IGJvb2xlYW47XG5cdGlzSW5hY3RpdmVDb250ZXh0OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFUeXBlID0ge1xuXHREcmFmdFVVSUQ6IHN0cmluZztcblx0SW5Qcm9jZXNzQnlVc2VyPzogc3RyaW5nO1xuXHRJblByb2Nlc3NCeVVzZXJEZXNjcmlwdGlvbj86IHN0cmluZztcblx0Q3JlYXRlZEJ5VXNlckRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXHRDcmVhdGVkQnlVc2VyPzogc3RyaW5nO1xuXHRMYXN0Q2hhbmdlZEJ5VXNlckRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXHRMYXN0Q2hhbmdlZEJ5VXNlcj86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERlbGV0ZVBhcmFtZXRlcnMgPSB7XG5cdGludGVybmFsTW9kZWxDb250ZXh0PzogSW50ZXJuYWxNb2RlbENvbnRleHQgfCBudWxsO1xuXHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHM/OiBudW1iZXI7XG5cdGVudGl0eVNldE5hbWU/OiBzdHJpbmc7XG5cdHBhcmVudENvbnRyb2w/OiBDb250cm9sO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZyB8IHsgcGF0aDogc3RyaW5nIH07XG5cdGJlZm9yZURlbGV0ZUNhbGxCYWNrPzogRnVuY3Rpb247XG5cdHVuU2F2ZWRDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmU/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRsb2NrZWRDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmU/OiBEcmFmdFNpYmxpbmdQYWlyW107XG5cdHNpbGVudE1vZGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRGVsZXRlVGV4dEluZm8gPSB7XG5cdGluZm9UeHQ/OiBzdHJpbmc7XG5cdG9wdGlvblR4dD86IHN0cmluZztcblx0b3B0aW9uV2l0aG91dFR4dD86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBnZXRVcGRhdGVkU2VsZWN0aW9ucyhcblx0aW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcyxcblx0c2VsZWN0ZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0Y29udGV4dHNUb1JlbW92ZTogT0RhdGFWNENvbnRleHRbXVxuKTogT0RhdGFWNENvbnRleHRbXSB7XG5cdGNvbnN0IHJldFNlbGVjdGVkQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10gPSBbLi4uc2VsZWN0ZWRDb250ZXh0c107XG5cdGNvbnRleHRzVG9SZW1vdmUuZm9yRWFjaCgoY29udGV4dDogT0RhdGFWNENvbnRleHQpID0+IHtcblx0XHRjb25zdCBpZHggPSByZXRTZWxlY3RlZENvbnRleHRzLmluZGV4T2YoY29udGV4dCk7XG5cdFx0aWYgKGlkeCAhPT0gLTEpIHtcblx0XHRcdHJldFNlbGVjdGVkQ29udGV4dHMuc3BsaWNlKGlkeCwgMSk7XG5cdFx0fVxuXHR9KTtcblx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkodHlwZSwgW10pO1xuXG5cdHJldHVybiByZXRTZWxlY3RlZENvbnRleHRzO1xufVxuXG5mdW5jdGlvbiBjbGVhclNlbGVjdGVkQ29udGV4dHNGb3JPcHRpb24oaW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LCBvcHRpb246IERlbGV0ZU9wdGlvbik6IHZvaWQge1xuXHRsZXQgc2VsZWN0ZWRDb250ZXh0cyA9IChpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIikgYXMgT0RhdGFWNENvbnRleHRbXSkgfHwgW107XG5cblx0aWYgKG9wdGlvbi50eXBlID09PSBEZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cykge1xuXHRcdHNlbGVjdGVkQ29udGV4dHMgPSBnZXRVcGRhdGVkU2VsZWN0aW9ucyhcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0RGVsZXRlT3B0aW9uVHlwZXMuZGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHRzZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoRGVsZXRlT3B0aW9uVHlwZXMuZGVsZXRhYmxlQ29udGV4dHMpIHx8IFtdXG5cdFx0KTtcblxuXHRcdGNvbnN0IGRyYWZ0U2libGluZ1BhaXJzID0gaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoRGVsZXRlT3B0aW9uVHlwZXMuZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSkgfHwgW107XG5cdFx0Y29uc3QgZHJhZnRzID0gZHJhZnRTaWJsaW5nUGFpcnMubWFwKChjb250ZXh0UGFpcjogRHJhZnRTaWJsaW5nUGFpcikgPT4ge1xuXHRcdFx0cmV0dXJuIGNvbnRleHRQYWlyLmRyYWZ0O1xuXHRcdH0pO1xuXHRcdHNlbGVjdGVkQ29udGV4dHMgPSBnZXRVcGRhdGVkU2VsZWN0aW9ucyhcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0RGVsZXRlT3B0aW9uVHlwZXMuZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSxcblx0XHRcdHNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRkcmFmdHNcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGNvbnRleHRzVG9SZW1vdmUgPSBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShvcHRpb24udHlwZSkgfHwgW107XG5cdFx0c2VsZWN0ZWRDb250ZXh0cyA9IGdldFVwZGF0ZWRTZWxlY3Rpb25zKGludGVybmFsTW9kZWxDb250ZXh0LCBvcHRpb24udHlwZSwgc2VsZWN0ZWRDb250ZXh0cywgY29udGV4dHNUb1JlbW92ZSk7XG5cdH1cblx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIHNlbGVjdGVkQ29udGV4dHMpO1xuXHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBzZWxlY3RlZENvbnRleHRzLmxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGFmdGVyRGVsZXRlUHJvY2Vzcyhcblx0cGFyYW1ldGVyczogRGVsZXRlUGFyYW1ldGVycyxcblx0b3B0aW9uczogRGVsZXRlT3B0aW9uW10sXG5cdGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRsYXN0RGVsZXRlZFJvd0luZGV4OiBudW1iZXJcbik6IHZvaWQge1xuXHRjb25zdCB7IGludGVybmFsTW9kZWxDb250ZXh0LCBlbnRpdHlTZXROYW1lIH0gPSBwYXJhbWV0ZXJzO1xuXHRpZiAoaW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRpZiAoaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkZWxldGVFbmFibGVkXCIpICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0b3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcblx0XHRcdFx0Ly8gaWYgYW4gb3B0aW9uIGlzIHNlbGVjdGVkLCB0aGVuIGl0IGlzIGRlbGV0ZWQuIFNvLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGVtIGZyb20gc2VsZWN0ZWQgY29udGV4dHMuXG5cdFx0XHRcdGlmIChvcHRpb24uc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRjbGVhclNlbGVjdGVkQ29udGV4dHNGb3JPcHRpb24oaW50ZXJuYWxNb2RlbENvbnRleHQsIG9wdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvLyBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIG9wdGlvbnMgaXMgbm90IHNlbGVjdGVkLCB0aGVuIHRoZSBkZWxldGUgYnV0dG9uIG5lZWRzIHRvIGJlIGVuYWJsZWQuXG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXG5cdFx0XHRcImRlbGV0ZUVuYWJsZWRcIixcblx0XHRcdG9wdGlvbnMuc29tZSgob3B0aW9uKSA9PiAhb3B0aW9uLnNlbGVjdGVkKVxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCBpc011bHRpVmFsdWVGaWVsZCA9IHBhcmFtZXRlcnMucGFyZW50Q29udHJvbD8uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGRcIjtcblx0Y29uc3Qgc2hvdWxkU2hvd1RvYXN0ID0gIXBhcmFtZXRlcnMucGFyZW50Q29udHJvbCB8fCAhaXNNdWx0aVZhbHVlRmllbGQ7XG5cblx0aWYgKHNob3VsZFNob3dUb2FzdCAmJiBwYXJhbWV0ZXJzLnNpbGVudE1vZGUgIT09IHRydWUpIHtcblx0XHRjb25zdCBtZXNzYWdlS2V5ID1cblx0XHRcdGNvbnRleHRzLmxlbmd0aCA9PT0gMSA/IFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfREVMRVRFX1RPQVNUX1NJTkdVTEFSXCIgOiBcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0RFTEVURV9UT0FTVF9QTFVSQUxcIjtcblx0XHRNZXNzYWdlVG9hc3Quc2hvdyhyZXNvdXJjZU1vZGVsLmdldFRleHQobWVzc2FnZUtleSwgdW5kZWZpbmVkLCBlbnRpdHlTZXROYW1lKSk7XG5cdH1cblxuXHQvLyBUaGUgTXVsdGlWYWx1ZUZpZWxkIGRvZXMgbm90IG5lZWQgcmVzZXR0aW5nIG9mIGZvY3VzIGxpa2UgdGhlIHRhYmxlLCB3aXRoIHRoZSByZXNldHRpbmcgd2UgZ2V0IGNvbnNvbGUgZXJyb3JzIHdlIGF2b2lkIHRyb3VnaCB0aGlzIGNoZWNrXG5cdGlmIChwYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wgJiYgIWlzTXVsdGlWYWx1ZUZpZWxkKSB7XG5cdFx0ZGVsZXRlSGVscGVyLnNldEZvY3VzQWZ0ZXJEZWxldGUocGFyYW1ldGVycy5wYXJlbnRDb250cm9sIGFzIFRhYmxlLCBjb250ZXh0cy5sZW5ndGgsIGxhc3REZWxldGVkUm93SW5kZXgpO1xuXHR9XG5cblx0aWYgKGNvbnRleHRzPy5sZW5ndGgpIHtcblx0XHRjb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG5cdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0aWYgKGNvbnRleHRQYXRoICYmIGNvbnRleHQuZ2V0TW9kZWwoKSkge1xuXHRcdFx0XHRjb25zdCBsb2NhbEFubm90YXRpb25Nb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRMb2NhbEFubm90YXRpb25Nb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uT2JqZWN0ID0gbG9jYWxBbm5vdGF0aW9uTW9kZWwuZ2V0T2JqZWN0KGNvbnRleHRQYXRoKTtcblx0XHRcdFx0aWYgKGFubm90YXRpb25PYmplY3QgJiYgdHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhhbm5vdGF0aW9uT2JqZWN0KSkge1xuXHRcdFx0XHRcdFx0aWYgKGtleS5pbmNsdWRlcyhcInVpNS5mZS5yZWNvbW1lbmRhdGlvbnNcIikpIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIGFubm90YXRpb25PYmplY3Rba2V5XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0UHJvcGVydHkoY29udGV4dFBhdGgsIGFubm90YXRpb25PYmplY3QpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0Rm9jdXNBZnRlckRlbGV0ZSh0YWJsZTogVGFibGUsIGRlbGV0ZWRSb3dzQ291bnQ6IG51bWJlciwgbGFzdERlbGV0ZWRSb3dJbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IHRhYmxlUm93c0NvdW50ID0gdGFibGUuZ2V0Um93QmluZGluZz8uKCk/LmdldENvdW50KCk7XG5cdGNvbnN0IG9yaWdpbmFsVGFibGVSb3dzQ291bnQgPSAodGFibGVSb3dzQ291bnQgPz8gMCkgKyBkZWxldGVkUm93c0NvdW50O1xuXHRsZXQgbmV4dEZvY3VzUm93SW5kZXg7XG5cblx0aWYgKGxhc3REZWxldGVkUm93SW5kZXggIT09IC0xICYmIHRhYmxlUm93c0NvdW50ICE9PSB1bmRlZmluZWQgJiYgdGFibGVSb3dzQ291bnQgPiAwKSB7XG5cdFx0Ly9JZiB0aGUgbGFzdCByb3cgaXMgZGVsZXRlZCwgbW92ZSB0aGUgZm9jdXMgdG8gcHJldmlvdXMgcm93IHRvIGl0XG5cdFx0aWYgKGxhc3REZWxldGVkUm93SW5kZXggPT09IG9yaWdpbmFsVGFibGVSb3dzQ291bnQgLSAxKSB7XG5cdFx0XHRuZXh0Rm9jdXNSb3dJbmRleCA9IHRhYmxlUm93c0NvdW50IC0gMTtcblx0XHRcdC8vRm9yIHRoZSBub3JtYWwgc2NlbmFyaW8sIG1vdmUgdGhlIGZvY3VzIHRvIHRoZSBuZXh0IHJvd1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRuZXh0Rm9jdXNSb3dJbmRleCA9IGxhc3REZWxldGVkUm93SW5kZXggLSBkZWxldGVkUm93c0NvdW50ICsgMTtcblx0XHR9XG5cdFx0YXdhaXQgdGFibGUuZm9jdXNSb3cobmV4dEZvY3VzUm93SW5kZXgsIGZhbHNlKTtcblx0fSBlbHNlIHtcblx0XHQvLyBGb3IgemVybyByb3dzIG9yIGRlZmF1bHQgY2FzZSwgbW92ZSBmb2N1cyB0byB0YWJsZVxuXHRcdHRhYmxlLmZvY3VzKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0TG9ja2VkQ29udGV4dFVzZXIobG9ja2VkQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiBzdHJpbmcge1xuXHRjb25zdCBkcmFmdEFkbWluRGF0YSA9IGxvY2tlZENvbnRleHQuZ2V0T2JqZWN0KClbXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiXSBhcyBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVR5cGU7XG5cdHJldHVybiAoZHJhZnRBZG1pbkRhdGEgJiYgZHJhZnRBZG1pbkRhdGFbXCJJblByb2Nlc3NCeVVzZXJcIl0pIHx8IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGdldExvY2tlZE9iamVjdHNUZXh0KHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsIG51bWJlck9mU2VsZWN0ZWRDb250ZXh0czogbnVtYmVyLCBsb2NrZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSk6IHN0cmluZyB7XG5cdGxldCByZXRUeHQgPSBcIlwiO1xuXG5cdGlmIChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPT09IDEgJiYgbG9ja2VkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0Ly9vbmx5IG9uZSB1bnNhdmVkIG9iamVjdFxuXHRcdGNvbnN0IGxvY2tlZFVzZXIgPSBnZXRMb2NrZWRDb250ZXh0VXNlcihsb2NrZWRDb250ZXh0c1swXSk7XG5cdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9TSU5HTEVfT0JKRUNUX0xPQ0tFRFwiLCBbbG9ja2VkVXNlcl0pO1xuXHR9IGVsc2UgaWYgKGxvY2tlZENvbnRleHRzLmxlbmd0aCA9PSAxKSB7XG5cdFx0Y29uc3QgbG9ja2VkVXNlciA9IGdldExvY2tlZENvbnRleHRVc2VyKGxvY2tlZENvbnRleHRzWzBdKTtcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9fQU5EX09ORV9PQkpFQ1RfTE9DS0VEXCIsIFtcblx0XHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdGxvY2tlZFVzZXJcblx0XHRdKTtcblx0fSBlbHNlIGlmIChsb2NrZWRDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPX0FORF9GRVdfT0JKRUNUU19MT0NLRURcIiwgW1xuXHRcdFx0bG9ja2VkQ29udGV4dHMubGVuZ3RoLFxuXHRcdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXG5cdFx0XSk7XG5cdH1cblxuXHRyZXR1cm4gcmV0VHh0O1xufVxuXG5mdW5jdGlvbiBnZXROb25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0KHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsIG51bWJlck9mRHJhZnRzOiBudW1iZXIsIHRvdGFsRGVsZXRhYmxlOiBudW1iZXIpOiBzdHJpbmcge1xuXHRsZXQgcmV0VHh0ID0gXCJcIjtcblxuXHRpZiAodG90YWxEZWxldGFibGUgPT09IG51bWJlck9mRHJhZnRzKSB7XG5cdFx0aWYgKG51bWJlck9mRHJhZnRzID09PSAxKSB7XG5cdFx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9PTkxZX0RSQUZUX09GX05PTl9ERUxFVEFCTEVfQUNUSVZFXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9PTkxZX0RSQUZUU19PRl9OT05fREVMRVRBQkxFX0FDVElWRVwiKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAobnVtYmVyT2ZEcmFmdHMgPT09IDEpIHtcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9EUkFGVF9PRl9OT05fREVMRVRBQkxFX0FDVElWRVwiKTtcblx0fSBlbHNlIHtcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9EUkFGVFNfT0ZfTk9OX0RFTEVUQUJMRV9BQ1RJVkVcIik7XG5cdH1cblxuXHRyZXR1cm4gcmV0VHh0O1xufVxuXG5mdW5jdGlvbiBnZXRVblNhdmVkQ29udGV4dFVzZXIodW5TYXZlZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogc3RyaW5nIHtcblx0Y29uc3QgZHJhZnRBZG1pbkRhdGEgPSB1blNhdmVkQ29udGV4dC5nZXRPYmplY3QoKVtcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCJdIGFzIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhVHlwZTtcblx0bGV0IHNMYXN0Q2hhbmdlZEJ5VXNlciA9IFwiXCI7XG5cdGlmIChkcmFmdEFkbWluRGF0YSkge1xuXHRcdHNMYXN0Q2hhbmdlZEJ5VXNlciA9IGRyYWZ0QWRtaW5EYXRhW1wiTGFzdENoYW5nZWRCeVVzZXJEZXNjcmlwdGlvblwiXSB8fCBkcmFmdEFkbWluRGF0YVtcIkxhc3RDaGFuZ2VkQnlVc2VyXCJdIHx8IFwiXCI7XG5cdH1cblxuXHRyZXR1cm4gc0xhc3RDaGFuZ2VkQnlVc2VyO1xufVxuXG5mdW5jdGlvbiBnZXRVbnNhdmVkQ29udGV4dHNUZXh0KFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHM6IG51bWJlcixcblx0dW5TYXZlZENvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHR0b3RhbERlbGV0YWJsZTogbnVtYmVyXG4pOiBEZWxldGVUZXh0SW5mbyB7XG5cdGxldCBpbmZvVHh0ID0gXCJcIixcblx0XHRvcHRpb25UeHQgPSBcIlwiLFxuXHRcdG9wdGlvbldpdGhvdXRUeHQgPSBmYWxzZTtcblx0aWYgKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9PT0gMSAmJiB1blNhdmVkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0Ly9vbmx5IG9uZSB1bnNhdmVkIG9iamVjdCBhcmUgc2VsZWN0ZWRcblx0XHRjb25zdCBsYXN0Q2hhbmdlZEJ5VXNlciA9IGdldFVuU2F2ZWRDb250ZXh0VXNlcih1blNhdmVkQ29udGV4dHNbMF0pO1xuXHRcdGluZm9UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1VOU0FWRURfQ0hBTkdFU1wiLCBbbGFzdENoYW5nZWRCeVVzZXJdKTtcblx0XHRvcHRpb25XaXRob3V0VHh0ID0gdHJ1ZTtcblx0fSBlbHNlIGlmIChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPT09IHVuU2F2ZWRDb250ZXh0cy5sZW5ndGgpIHtcblx0XHQvL29ubHkgbXVsdGlwbGUgdW5zYXZlZCBvYmplY3RzIGFyZSBzZWxlY3RlZFxuXHRcdGluZm9UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1VOU0FWRURfQ0hBTkdFU19NVUxUSVBMRV9PQkpFQ1RTXCIpO1xuXHRcdG9wdGlvbldpdGhvdXRUeHQgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKHRvdGFsRGVsZXRhYmxlID09PSB1blNhdmVkQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0Ly8gbm9uLWRlbGV0YWJsZS9sb2NrZWQgZXhpc3RzLCBhbGwgZGVsZXRhYmxlIGFyZSB1bnNhdmVkIGJ5IG90aGVyc1xuXHRcdGlmICh1blNhdmVkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCBsYXN0Q2hhbmdlZEJ5VXNlciA9IGdldFVuU2F2ZWRDb250ZXh0VXNlcih1blNhdmVkQ29udGV4dHNbMF0pO1xuXHRcdFx0aW5mb1R4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfVU5TQVZFRF9BTkRfRkVXX09CSkVDVFNfTE9DS0VEX1NJTkdVTEFSXCIsIFtcblx0XHRcdFx0bGFzdENoYW5nZWRCeVVzZXJcblx0XHRcdF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbmZvVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9VTlNBVkVEX0FORF9GRVdfT0JKRUNUU19MT0NLRURfUExVUkFMXCIpO1xuXHRcdH1cblx0XHRvcHRpb25XaXRob3V0VHh0ID0gdHJ1ZTtcblx0fSBlbHNlIGlmICh0b3RhbERlbGV0YWJsZSA+IHVuU2F2ZWRDb250ZXh0cy5sZW5ndGgpIHtcblx0XHQvLyBub24tZGVsZXRhYmxlL2xvY2tlZCBleGlzdHMsIGRlbGV0YWJsZSBpbmNsdWRlIHVuc2F2ZWQgYW5kIG90aGVyIHR5cGVzLlxuXHRcdGlmICh1blNhdmVkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCBsYXN0Q2hhbmdlZEJ5VXNlciA9IGdldFVuU2F2ZWRDb250ZXh0VXNlcih1blNhdmVkQ29udGV4dHNbMF0pO1xuXHRcdFx0b3B0aW9uVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPX0FORF9GRVdfT0JKRUNUU19VTlNBVkVEX1NJTkdVTEFSXCIsIFtcblx0XHRcdFx0bGFzdENoYW5nZWRCeVVzZXJcblx0XHRcdF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvcHRpb25UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9fQU5EX0ZFV19PQkpFQ1RTX1VOU0FWRURfUExVUkFMXCIpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IGluZm9UeHQsIG9wdGlvblR4dCwgb3B0aW9uV2l0aG91dFR4dCB9O1xufVxuXG5mdW5jdGlvbiBnZXROb25EZWxldGFibGVUZXh0KFxuXHRtUGFyYW1ldGVyczogRGVsZXRlUGFyYW1ldGVycyxcblx0dG90YWxOdW1EZWxldGFibGVDb250ZXh0czogbnVtYmVyLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsXG4pOiBUZXh0IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgeyBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMsIGVudGl0eVNldE5hbWUsIGxvY2tlZENvbnRleHRzID0gW10sIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUgPSBbXSB9ID0gbVBhcmFtZXRlcnM7XG5cdGNvbnN0IG5vbkRlbGV0YWJsZUNvbnRleHRzID1cblx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMhIC0gKGxvY2tlZENvbnRleHRzLmxlbmd0aCArIHRvdGFsTnVtRGVsZXRhYmxlQ29udGV4dHMgLSBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCk7XG5cdGxldCByZXRUeHQgPSBcIlwiO1xuXG5cdGlmIChcblx0XHRub25EZWxldGFibGVDb250ZXh0cyA+IDAgJiZcblx0XHQodG90YWxOdW1EZWxldGFibGVDb250ZXh0cyA9PT0gMCB8fCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCA9PT0gdG90YWxOdW1EZWxldGFibGVDb250ZXh0cylcblx0KSB7XG5cdFx0Ly8gMS4gTm9uZSBvZiB0aGUgY2NvbnRleHRzIGFyZSBkZWxldGFibGVcblx0XHQvLyAyLiBPbmx5IGRyYWZ0cyBvZiBub24gZGVsZXRhYmxlIGNvbnRleHRzIGV4aXN0LlxuXHRcdGlmIChsb2NrZWRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBMb2NrZWQgY29udGV4dHMgZXhpc3Rcblx0XHRcdGlmIChub25EZWxldGFibGVDb250ZXh0cyA9PT0gMSkge1xuXHRcdFx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX0FMTF9SRU1BSU5JTkdfTk9OX0RFTEVUQUJMRV9TSU5HVUxBUlwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfQUxMX1JFTUFJTklOR19OT05fREVMRVRBQkxFX1BMVVJBTFwiKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG5vbkRlbGV0YWJsZUNvbnRleHRzID09PSAxKSB7XG5cdFx0XHQvLyBPbmx5IHB1cmUgbm9uLWRlbGV0YWJsZSBjb250ZXh0cyBleGlzdCBzaW5nbGVcblx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1NJTkdMRV9BTkRfT05FX09CSkVDVF9OT05fREVMRVRBQkxFXCIsXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gT25seSBwdXJlIG5vbi1kZWxldGFibGUgY29udGV4dHMgZXhpc3QgbXVsdGlwbGVcblx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX01VTFRJUExFX0FORF9BTExfT0JKRUNUX05PTl9ERUxFVEFCTEVcIixcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRlbnRpdHlTZXROYW1lXG5cdFx0XHQpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChub25EZWxldGFibGVDb250ZXh0cyA9PT0gMSkge1xuXHRcdC8vIGRlbGV0YWJsZSBhbmQgbm9uLWRlbGV0YWJsZSBleGlzdHMgdG9nZXRoZXIsIHNpbmdsZVxuXHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPX0FORF9PTkVfT0JKRUNUX05PTl9ERUxFVEFCTEVcIixcblx0XHRcdFtudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNdLFxuXHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAobm9uRGVsZXRhYmxlQ29udGV4dHMgPiAxKSB7XG5cdFx0Ly8gZGVsZXRhYmxlIGFuZCBub24tZGVsZXRhYmxlIGV4aXN0cyB0b2dldGhlciwgbXVsdGlwbGVcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUSU5GT19BTkRfRkVXX09CSkVDVFNfTk9OX0RFTEVUQUJMRVwiLFxuXHRcdFx0W25vbkRlbGV0YWJsZUNvbnRleHRzLCBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNdLFxuXHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gcmV0VHh0ID8gbmV3IFRleHQoeyB0ZXh0OiByZXRUeHQgfSkgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldENvbmZpcm1lZERlbGV0YWJsZUNvbnRleHQoY29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sIG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdKTogT0RhdGFWNENvbnRleHRbXSB7XG5cdHJldHVybiBvcHRpb25zLnJlZHVjZSgocmVzdWx0LCBvcHRpb24pID0+IHtcblx0XHRyZXR1cm4gb3B0aW9uLnNlbGVjdGVkICYmIG9wdGlvbi50eXBlICE9PSBEZWxldGVPcHRpb25UeXBlcy5kcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSA/IHJlc3VsdC5jb25jYXQob3B0aW9uLmNvbnRleHRzKSA6IHJlc3VsdDtcblx0fSwgY29udGV4dHMpO1xufVxuXG5mdW5jdGlvbiBnZXREcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZShvcHRpb25zOiBEZWxldGVPcHRpb25bXSk6IE9EYXRhVjRDb250ZXh0W10ge1xuXHRjb25zdCBjb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IFtdO1xuXHRyZXR1cm4gb3B0aW9ucy5yZWR1Y2UoKHJlc3VsdCwgb3B0aW9uKSA9PiB7XG5cdFx0cmV0dXJuIG9wdGlvbi5zZWxlY3RlZCAmJiBvcHRpb24udHlwZSA9PT0gRGVsZXRlT3B0aW9uVHlwZXMuZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUgPyByZXN1bHQuY29uY2F0KG9wdGlvbi5jb250ZXh0cykgOiByZXN1bHQ7XG5cdH0sIGNvbnRleHRzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRHJhZnRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMoXG5cdG1QYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLFxuXHR2Q29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sXG5cdHRvdGFsRGVsZXRhYmxlOiBudW1iZXIsXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdGl0ZW1zOiBDb250cm9sW10sXG5cdG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdXG4pOiB2b2lkIHtcblx0bGV0IHsgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCBkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLCB1blNhdmVkQ29udGV4dHMsIGxvY2tlZENvbnRleHRzLCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlIH0gPVxuXHRcdG1QYXJhbWV0ZXJzO1xuXHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlID8/PSBbXTtcblx0dW5TYXZlZENvbnRleHRzID8/PSBbXTtcblx0bG9ja2VkQ29udGV4dHMgPz89IFtdO1xuXHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlID8/PSBbXTtcblx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID8/PSAwO1xuXHRsZXQgbG9ja2VkQ29udGV4dHNUeHQgPSBcIlwiO1xuXG5cdC8vIGRyYWZ0cyB3aXRoIGFjdGl2ZVxuXHRpZiAoZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZS5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmU6IE9EYXRhVjRDb250ZXh0W10gPSBbXTtcblx0XHRkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLmZvckVhY2goKGRlbGV0YWJsZURyYWZ0SW5mbzogRHJhZnRTaWJsaW5nUGFpcikgPT4ge1xuXHRcdFx0Ly8gSW4gZWl0aGVyIGNhc2VzLCBpZiBhbiBvd24gZHJhZnQgaXMgbG9ja2VkIG9yIG5vdCB0aGUgZHJhZnQgbmVlZHMgdG8gYmUgZGlzY2FyZGVkIGJlZm9yZSBkZWxldGluZyBhY3RpdmUgcmVjb3JkLlxuXHRcdFx0ZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUucHVzaChkZWxldGFibGVEcmFmdEluZm8uZHJhZnQpO1xuXHRcdFx0dkNvbnRleHRzLnB1c2goZGVsZXRhYmxlRHJhZnRJbmZvLnNpYmxpbmdJbmZvLnRhcmdldENvbnRleHQpO1xuXHRcdH0pO1xuXHRcdGlmIChkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy5kcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSxcblx0XHRcdFx0Y29udGV4dHM6IGRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlLFxuXHRcdFx0XHRzZWxlY3RlZDogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gaXRlbXMgbG9ja2VkIG1zZ1xuXHRpZiAobG9ja2VkQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdGxvY2tlZENvbnRleHRzVHh0ID0gZGVsZXRlSGVscGVyLmdldExvY2tlZE9iamVjdHNUZXh0KHJlc291cmNlTW9kZWwsIG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgbG9ja2VkQ29udGV4dHMpIHx8IFwiXCI7XG5cdFx0aXRlbXMucHVzaChuZXcgVGV4dCh7IHRleHQ6IGxvY2tlZENvbnRleHRzVHh0IH0pKTtcblx0fVxuXG5cdC8vIG5vbiBkZWxldGFibGUgbXNnXG5cdGNvbnN0IG5vbkRlbGV0YWJsZUV4aXN0cyA9IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyAhPSB0b3RhbERlbGV0YWJsZSAtIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoICsgbG9ja2VkQ29udGV4dHMubGVuZ3RoO1xuXHRjb25zdCBub25EZWxldGFibGVUZXh0Q3RybCA9IG5vbkRlbGV0YWJsZUV4aXN0cyAmJiBkZWxldGVIZWxwZXIuZ2V0Tm9uRGVsZXRhYmxlVGV4dChtUGFyYW1ldGVycywgdG90YWxEZWxldGFibGUsIHJlc291cmNlTW9kZWwpO1xuXHRpZiAobm9uRGVsZXRhYmxlVGV4dEN0cmwpIHtcblx0XHRpdGVtcy5wdXNoKG5vbkRlbGV0YWJsZVRleHRDdHJsKTtcblx0fVxuXG5cdC8vIG9wdGlvbjogdW5zYXZlZCBjaGFuZ2VzIGJ5IG90aGVyc1xuXHRpZiAodW5TYXZlZENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCB1bnNhdmVkQ2hhbmdlc1R4dHMgPVxuXHRcdFx0ZGVsZXRlSGVscGVyLmdldFVuc2F2ZWRDb250ZXh0c1RleHQocmVzb3VyY2VNb2RlbCwgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCB1blNhdmVkQ29udGV4dHMsIHRvdGFsRGVsZXRhYmxlKSB8fCB7fTtcblx0XHRpZiAodW5zYXZlZENoYW5nZXNUeHRzLmluZm9UeHQpIHtcblx0XHRcdGl0ZW1zLnB1c2gobmV3IFRleHQoeyB0ZXh0OiB1bnNhdmVkQ2hhbmdlc1R4dHMuaW5mb1R4dCB9KSk7XG5cdFx0fVxuXHRcdGlmICh1bnNhdmVkQ2hhbmdlc1R4dHMub3B0aW9uVHh0IHx8IHVuc2F2ZWRDaGFuZ2VzVHh0cy5vcHRpb25XaXRob3V0VHh0KSB7XG5cdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy51blNhdmVkQ29udGV4dHMsXG5cdFx0XHRcdGNvbnRleHRzOiB1blNhdmVkQ29udGV4dHMsXG5cdFx0XHRcdHRleHQ6IHVuc2F2ZWRDaGFuZ2VzVHh0cy5vcHRpb25UeHQsXG5cdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRjb250cm9sOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5DSEVDS0JPWFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gb3B0aW9uOiBkcmFmdHMgd2l0aCBhY3RpdmUgbm90IGRlbGV0YWJsZVxuXHRpZiAoZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZS5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3Qgbm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dCA9XG5cdFx0XHRkZWxldGVIZWxwZXIuZ2V0Tm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dChyZXNvdXJjZU1vZGVsLCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCwgdG90YWxEZWxldGFibGUpIHx8IFwiXCI7XG5cdFx0aWYgKG5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQpIHtcblx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLmRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUsXG5cdFx0XHRcdGNvbnRleHRzOiBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLFxuXHRcdFx0XHR0ZXh0OiBub25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0LFxuXHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0Y29udHJvbDogdG90YWxEZWxldGFibGUgPiAwID8gRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wuQ0hFQ0tCT1ggOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5URVhUXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29udGVudEZvckRlbGV0ZURpYWxvZyhvcHRpb25zOiBEZWxldGVPcHRpb25bXSwgaXRlbXM6IENvbnRyb2xbXSk6IHZvaWQge1xuXHRpZiAob3B0aW9ucy5sZW5ndGggPT09IDEpIHtcblx0XHQvLyBTaW5nbGUgb3B0aW9uIGRvZXNuJ3QgbmVlZCBjaGVja0JveFxuXHRcdGNvbnN0IG9wdGlvbiA9IG9wdGlvbnNbMF07XG5cdFx0aWYgKG9wdGlvbi50ZXh0KSB7XG5cdFx0XHRjb25zdCB0ZXh0ID0gbmV3IFRleHQoKTtcblx0XHRcdHRleHQuc2V0VGV4dChvcHRpb24udGV4dCk7XG5cdFx0XHRpdGVtcy5wdXNoKHRleHQpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChvcHRpb25zLmxlbmd0aCA+IDEpIHtcblx0XHQvLyBNdWx0aXBsZSBPcHRpb25zXG5cblx0XHQvLyBUZXh0c1xuXHRcdG9wdGlvbnMuZm9yRWFjaCgob3B0aW9uOiBEZWxldGVPcHRpb24pID0+IHtcblx0XHRcdGlmIChvcHRpb24uY29udHJvbCA9PT0gXCJ0ZXh0XCIgJiYgb3B0aW9uLnRleHQpIHtcblx0XHRcdFx0Y29uc3QgdGV4dCA9IG5ldyBUZXh0KCk7XG5cdFx0XHRcdHRleHQuc2V0VGV4dChvcHRpb24udGV4dCk7XG5cdFx0XHRcdGl0ZW1zLnB1c2godGV4dCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly8gQ2hlY2tCb3hzXG5cdFx0b3B0aW9ucy5mb3JFYWNoKChvcHRpb246IERlbGV0ZU9wdGlvbikgPT4ge1xuXHRcdFx0aWYgKG9wdGlvbi5jb250cm9sID09PSBcImNoZWNrQm94XCIgJiYgb3B0aW9uLnRleHQpIHtcblx0XHRcdFx0aXRlbXMucHVzaChcblx0XHRcdFx0XHRuZXcgQ2hlY2tCb3goe1xuXHRcdFx0XHRcdFx0dGV4dDogb3B0aW9uLnRleHQsXG5cdFx0XHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdHNlbGVjdDogZnVuY3Rpb24gKG9FdmVudDogQ2hlY2tCb3gkU2VsZWN0RXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hlY2tCb3ggPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkID0gY2hlY2tCb3guZ2V0U2VsZWN0ZWQoKTtcblx0XHRcdFx0XHRcdFx0b3B0aW9uLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuXG4vKipcbiAqIEdldCB0aGUgb3JpZ2luYWwgcmVjb3JkIHNlbGVjdGVkIG9uIHRoZSBVSS5cbiAqXG4gKiBJbiB0aGUgY2FzZSB0aGUgY29udGV4dCB0byBkZWxldGUgaXMgYW4gYWN0aXZlIHJlY29yZCBidXQgdGhlIHNlbGVjdGVkIGNvbnRleHQgaXMgYSBkcmFmdCByZWNvcmQuXG4gKiBAcGFyYW0gbVBhcmFtZXRlcnMgRGVsZXRlIHBhcmFtZXRlcnMgYW5kIGluZm9ybWF0aW9uIG9mIHNlbGVjdGVkIGNvbnRleHRzLlxuICogQHBhcmFtIGNvbnRleHRUb0RlbGV0ZSBPRGF0YVY0Q29udGV4dCB0byBjaGVjay5cbiAqIEByZXR1cm5zIE9EYXRhVjRDb250ZXh0IGZvciBkZWxldGUuXG4gKi9cbmZ1bmN0aW9uIF9nZXRPcmlnaW5hbFNlbGVjdGVkUmVjb3JkKG1QYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLCBjb250ZXh0VG9EZWxldGU6IE9EYXRhVjRDb250ZXh0KTogT0RhdGFWNENvbnRleHQge1xuXHRjb25zdCB7IGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUgfSA9IG1QYXJhbWV0ZXJzO1xuXHRjb25zdCByZXQgPSBkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlPy5maW5kKChkcmFmdFNpYmxpbmdQYWlyKSA9PiBkcmFmdFNpYmxpbmdQYWlyLnNpYmxpbmdJbmZvLnRhcmdldENvbnRleHQgPT09IGNvbnRleHRUb0RlbGV0ZSk7XG5cdHJldHVybiByZXQ/LmRyYWZ0ID8gcmV0LmRyYWZ0IDogY29udGV4dFRvRGVsZXRlO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcG9zc2libGUgb3B0aW9ucyBmb3IgZGVsZXRpb24gb2YgdGhlIHNlbGVjdGVkIGNvbnRleHRzLlxuICogQHBhcmFtIG1QYXJhbWV0ZXJzIERlbGV0ZSBwYXJhbWV0ZXJzIGFuZCBpbmZvcm1hdGlvbiBvZiBzZWxlY3RlZCBjb250ZXh0cy5cbiAqIEBwYXJhbSBkaXJlY3REZWxldGFibGVDb250ZXh0cyBDb250ZXh0cyB0aGF0IGNhbiBiZSBkZWxldGFibGUgZGlyZWN0bHkuXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbCBSZXNvdXJjZSBtb2RlbC5cbiAqIEByZXR1cm5zIE9wdGlvbnMgdGhhdCBhcmUgcG9zc2libGUgZm9yIHNlbGVjdGVkIHJlY29yZHMuXG4gKi9cbmZ1bmN0aW9uIGdldE9wdGlvbnNGb3JEZWxldGFibGVUZXh0cyhcblx0bVBhcmFtZXRlcnM6IERlbGV0ZVBhcmFtZXRlcnMsXG5cdGRpcmVjdERlbGV0YWJsZUNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsXG4pOiBEZWxldGVPcHRpb25bXSB7XG5cdGxldCB7IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgbG9ja2VkQ29udGV4dHMsIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUsIHVuU2F2ZWRDb250ZXh0cyB9ID0gbVBhcmFtZXRlcnM7XG5cdGNvbnN0IHsgZW50aXR5U2V0TmFtZSwgcGFyZW50Q29udHJvbCwgZGVzY3JpcHRpb24gfSA9IG1QYXJhbWV0ZXJzO1xuXHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlID8/PSBbXTtcblx0dW5TYXZlZENvbnRleHRzID8/PSBbXTtcblx0bG9ja2VkQ29udGV4dHMgPz89IFtdO1xuXHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlID8/PSBbXTtcblx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID8/PSAwO1xuXHRjb25zdCB0b3RhbERlbGV0YWJsZSA9IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLmxlbmd0aCArIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoICsgdW5TYXZlZENvbnRleHRzLmxlbmd0aDtcblx0Y29uc3Qgbm9uRGVsZXRhYmxlQ29udGV4dHMgPSBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgLSAobG9ja2VkQ29udGV4dHMubGVuZ3RoICsgdG90YWxEZWxldGFibGUgLSBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCk7XG5cdGNvbnN0IG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdID0gW107XG5cblx0aWYgKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9PT0gMSAmJiBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPT09IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLmxlbmd0aCkge1xuXHRcdC8vIHNpbmdsZSBkZWxldGFibGUgY29udGV4dFxuXHRcdGNvbnN0IG9UYWJsZSA9IHBhcmVudENvbnRyb2wgYXMgVGFibGU7XG5cdFx0Y29uc3Qgc0tleSA9IG9UYWJsZSAmJiAoKG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0SWRlbnRpZmllckNvbHVtbigpIGFzIHN0cmluZyk7XG5cdFx0bGV0IHR4dDtcblx0XHRpZiAoc0tleSkge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRpb25QYXRoID0gZGVzY3JpcHRpb24gJiYgKGRlc2NyaXB0aW9uIGFzIHsgcGF0aD86IHN0cmluZyB9KS5wYXRoO1xuXHRcdFx0Ly8gSW4gY2FzZSB0aGUgc2VsZWN0ZWQgcmVjb3JkIGlzIGRyYWZ0KGluIFVJKS4gVGhlIEFjdGl2ZSByZWNvcmQgbmVlZHMgdG8gYmUgZGVsZXRlZChkaXJlY3REZWxldGFibGVDb250ZXh0cyBoYXMgYWN0aXZlIHJlY29yZCksIGJ1dCBkYXRhIGlzIG5vdCByZXF1ZXN0ZWQgb3IgcGFydGlhbC4gV2UgZ2V0IGRhdGEgZnJvbSB0aGUgZHJhZnQuXG5cdFx0XHRjb25zdCBvTGluZUNvbnRleHREYXRhID0gX2dldE9yaWdpbmFsU2VsZWN0ZWRSZWNvcmQobVBhcmFtZXRlcnMsIGRpcmVjdERlbGV0YWJsZUNvbnRleHRzWzBdKS5nZXRPYmplY3QoKTtcblx0XHRcdGNvbnN0IHNLZXlWYWx1ZSA9IHNLZXkgPyBvTGluZUNvbnRleHREYXRhW3NLZXldIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3Qgc0Rlc2NyaXB0aW9uID0gZGVzY3JpcHRpb25QYXRoICYmIG9MaW5lQ29udGV4dERhdGFbZGVzY3JpcHRpb25QYXRoXTtcblx0XHRcdGlmIChzS2V5VmFsdWUpIHtcblx0XHRcdFx0aWYgKHNEZXNjcmlwdGlvbiAmJiBkZXNjcmlwdGlvbiAmJiBzS2V5ICE9PSAoZGVzY3JpcHRpb24gYXMgeyBwYXRoPzogc3RyaW5nIH0pLnBhdGgpIHtcblx0XHRcdFx0XHR0eHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUSU5GT1wiLFxuXHRcdFx0XHRcdFx0W3NLZXlWYWx1ZSwgc0Rlc2NyaXB0aW9uXSxcblx0XHRcdFx0XHRcdGVudGl0eVNldE5hbWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUVElUTEVfT05MWVwiLCBbc0tleVZhbHVlXSwgZW50aXR5U2V0TmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUVElUTEVfU0lOR1VMQVJcIiwgdW5kZWZpbmVkLCBlbnRpdHlTZXROYW1lKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9TSU5HVUxBUlwiLCB1bmRlZmluZWQsIGVudGl0eVNldE5hbWUpO1xuXHRcdH1cblx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0dHlwZTogRGVsZXRlT3B0aW9uVHlwZXMuZGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHRjb250ZXh0czogZGlyZWN0RGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHR0ZXh0OiB0eHQsXG5cdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdGNvbnRyb2w6IERlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sLlRFWFRcblx0XHR9KTtcblx0fSBlbHNlIGlmIChcblx0XHR1blNhdmVkQ29udGV4dHMubGVuZ3RoICE9PSB0b3RhbERlbGV0YWJsZSAmJlxuXHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA+IDAgJiZcblx0XHQoZGlyZWN0RGVsZXRhYmxlQ29udGV4dHMubGVuZ3RoID4gMCB8fCAodW5TYXZlZENvbnRleHRzLmxlbmd0aCA+IDAgJiYgZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZS5sZW5ndGggPiAwKSlcblx0KSB7XG5cdFx0aWYgKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA+IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLmxlbmd0aCAmJiBub25EZWxldGFibGVDb250ZXh0cyArIGxvY2tlZENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIG90aGVyIHR5cGVzIGV4aXN0cyB3aXRoIHB1cmUgZGVsZXRhYmxlIG9uZXNcblx0XHRcdGxldCBkZWxldGFibGVPcHRpb25UeHQgPSBcIlwiO1xuXHRcdFx0aWYgKHRvdGFsRGVsZXRhYmxlID09PSAxKSB7XG5cdFx0XHRcdGRlbGV0YWJsZU9wdGlvblR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUVElUTEVfU0lOR1VMQVJfTk9OX0RFTEVUQUJMRVwiLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRlbnRpdHlTZXROYW1lXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWxldGFibGVPcHRpb25UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX1BMVVJBTF9OT05fREVMRVRBQkxFXCIsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdGVudGl0eVNldE5hbWVcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG9wdGlvbnMudW5zaGlmdCh7XG5cdFx0XHRcdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLmRlbGV0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHRjb250ZXh0czogZGlyZWN0RGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHRcdHRleHQ6IGRlbGV0YWJsZU9wdGlvblR4dCxcblx0XHRcdFx0c2VsZWN0ZWQ6IHRydWUsXG5cdFx0XHRcdGNvbnRyb2w6IERlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sLlRFWFRcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBvbmx5IGRlbGV0YWJsZVxuXHRcdFx0Y29uc3QgYWxsRGVsZXRhYmxlVHh0ID1cblx0XHRcdFx0dG90YWxEZWxldGFibGUgPT09IDFcblx0XHRcdFx0XHQ/IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUVElUTEVfU0lOR1VMQVJcIiwgdW5kZWZpbmVkLCBlbnRpdHlTZXROYW1lKVxuXHRcdFx0XHRcdDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9QTFVSQUxcIiwgdW5kZWZpbmVkLCBlbnRpdHlTZXROYW1lKTtcblx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLmRlbGV0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHRjb250ZXh0czogZGlyZWN0RGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHRcdHRleHQ6IGFsbERlbGV0YWJsZVR4dCxcblx0XHRcdFx0c2VsZWN0ZWQ6IHRydWUsXG5cdFx0XHRcdGNvbnRyb2w6IERlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sLlRFWFRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvcHRpb25zO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkZWxldGVEcmFmdHNCZWZvcmVBY3RpdmVzQW5kR2V0RXJyb3JzKFxuXHRkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZTogT0RhdGFWNENvbnRleHRbXSxcblx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0ZW5hYmxlU3RyaWN0SGFuZGxpbmc6IGJvb2xlYW5cbik6IFByb21pc2U8dW5rbm93bltdPiB7XG5cdGNvbnN0IGRyYWZ0RXJyb3JzOiB1bmtub3duW10gPSBbXTtcblx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuXHRcdGRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlLm1hcChhc3luYyBmdW5jdGlvbiAoY29udGV4dDogT0RhdGFWNENvbnRleHQpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiBhd2FpdCBkcmFmdC5kZWxldGVEcmFmdChjb250ZXh0LCBtZXNzYWdlSGFuZGxlciwgYXBwQ29tcG9uZW50LCBlbmFibGVTdHJpY3RIYW5kbGluZyk7XG5cdFx0XHR9IGNhdGNoIChlOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgRkUgOiBjb3JlIDogRGVsZXRlSGVscGVyIDogRXJyb3Igd2hpbGUgZGlzY2FyZGluZyBkcmFmdCB3aXRoIHBhdGggOiAke2NvbnRleHQuZ2V0UGF0aCgpfWApO1xuXHRcdFx0XHRkcmFmdEVycm9ycy5wdXNoKGUpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdCk7XG5cdHJldHVybiBkcmFmdEVycm9ycztcbn1cblxuLyoqXG4gKiBJbiBjYXNlIG9mIGEgdHJlZSB0YWJsZSwgd2Ugc2hhbGwgbm90IGRlbGV0ZSBhIGNvbnRleHQgaWYgb25lIGlmIGl0cyBhbmNlc3RvcnMgaXMgYWxzbyB0byBiZSBkZWxldGVkLlxuICogVGhpcyBmdW5jdGlvbnMgZmlsdGVycyBvdXQgc3VjaCBjb250ZXh0cy5cbiAqIEBwYXJhbSBjb250ZXh0c1xuICogQHJldHVybnMgVGhlIGZpbHRlcmVkIGNvbnRleHRzXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZURlc2NlbmRhbnRDb250ZXh0cyhjb250ZXh0czogT0RhdGFWNENvbnRleHRbXSk6IE9EYXRhVjRDb250ZXh0W10ge1xuXHRjb25zdCB0ZW1wQ29udGV4dHM6IChPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZClbXSA9IFsuLi5jb250ZXh0c107XG5cdC8vIEZpbHRlciBvdXQgY29udGV4dHMgd2hvc2UgYW5jZXN0b3IgaXMgYWxzbyBkZWxldGVkLCBhcyB0aGV5IHdpbGwgYmUgZGVsZXRlZCB3aXRoIHRoZWlyIGFuY2VzdG9yXG5cdHRlbXBDb250ZXh0cy5mb3JFYWNoKChwYXJlbnRDb250ZXh0LCBwYXJlbnRJbmRleCkgPT4ge1xuXHRcdGlmIChwYXJlbnRDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRmb3IgKGxldCBjaGlsZEluZGV4ID0gcGFyZW50SW5kZXggKyAxOyBjaGlsZEluZGV4IDwgdGVtcENvbnRleHRzLmxlbmd0aDsgY2hpbGRJbmRleCsrKSB7XG5cdFx0XHRjb25zdCBjaGlsZENvbnRleHQgPSB0ZW1wQ29udGV4dHNbY2hpbGRJbmRleF07XG5cdFx0XHRpZiAoY2hpbGRDb250ZXh0ICYmIHBhcmVudENvbnRleHQuaXNBbmNlc3Rvck9mKGNoaWxkQ29udGV4dCkpIHtcblx0XHRcdFx0dGVtcENvbnRleHRzW2NoaWxkSW5kZXhdPy5zZXRTZWxlY3RlZChmYWxzZSk7XG5cdFx0XHRcdHRlbXBDb250ZXh0c1tjaGlsZEluZGV4XSA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiB0ZW1wQ29udGV4dHMuZmlsdGVyKChjb250ZXh0KSA9PiBjb250ZXh0ICE9PSB1bmRlZmluZWQpIGFzIE9EYXRhVjRDb250ZXh0W107XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUNvbmZpcm1IYW5kbGVyKFxuXHRvcHRpb25zOiBEZWxldGVPcHRpb25bXSxcblx0bVBhcmFtZXRlcnM6IERlbGV0ZVBhcmFtZXRlcnMsXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdGRyYWZ0RW5hYmxlZDogYm9vbGVhbixcblx0YmluZGluZ1R5cGU/OiBcIlRyZWVcIiB8IFwiQW5hbHl0aWNhbFwiXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgbWVzc2FnZUhhbmRsaW5nS2V5ID0gbWVzc2FnZUhhbmRsZXIucmVnaXN0ZXJUb0hvbGRNZXNzYWdlcygpO1xuXHRsZXQgY29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10gPSBbXTtcblx0dHJ5IHtcblx0XHRjb250ZXh0cyA9IGRlbGV0ZUhlbHBlci5nZXRDb25maXJtZWREZWxldGFibGVDb250ZXh0KFtdLCBvcHRpb25zKTtcblx0XHRjb25zdCBsYXN0RGVsZXRlZFJvd0luZGV4ID0gY29udGV4dHNbY29udGV4dHMubGVuZ3RoIC0gMV0uZ2V0SW5kZXgoKSA/PyAtMTtcblx0XHRjb25zdCBkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSA9IGdldERyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlKG9wdGlvbnMpO1xuXG5cdFx0Y29uc3QgeyBiZWZvcmVEZWxldGVDYWxsQmFjayB9ID0gbVBhcmFtZXRlcnM7XG5cdFx0aWYgKGJlZm9yZURlbGV0ZUNhbGxCYWNrKSB7XG5cdFx0XHRhd2FpdCBiZWZvcmVEZWxldGVDYWxsQmFjayh7IGNvbnRleHRzOiBjb250ZXh0cyB9KTtcblx0XHR9XG5cblx0XHRpZiAoY29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBlbmFibGVTdHJpY3RIYW5kbGluZyA9IGNvbnRleHRzLmxlbmd0aCA9PT0gMSA/IHRydWUgOiBmYWxzZTtcblx0XHRcdGNvbnN0IGRyYWZ0RXJyb3JzOiB1bmtub3duW10gPSBhd2FpdCBkZWxldGVEcmFmdHNCZWZvcmVBY3RpdmVzQW5kR2V0RXJyb3JzKFxuXHRcdFx0XHRkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSxcblx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdGFwcENvbXBvbmVudCxcblx0XHRcdFx0ZW5hYmxlU3RyaWN0SGFuZGxpbmdcblx0XHRcdCk7XG5cblx0XHRcdGxldCBjb250ZXh0c1RvRGVsZXRlID0gY29udGV4dHM7XG5cdFx0XHRpZiAoYmluZGluZ1R5cGUgPT09IFwiVHJlZVwiKSB7XG5cdFx0XHRcdGNvbnRleHRzVG9EZWxldGUgPSByZW1vdmVEZXNjZW5kYW50Q29udGV4dHMoY29udGV4dHMpO1xuXHRcdFx0fVxuXG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0Y29udGV4dHNUb0RlbGV0ZS5tYXAoYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Ly8gSWYgdGhlIGNvbnRleHQgdG8gZGVsZXRlIGlzIGEgZHJhZnQgKGkuZS4gYWN1dGFsbHkgd2UganVzdCB3bmF0IHRvIGRpc2NhcmQpLCB3ZSBzaG91bGQgdXNlIGRyYWZ0LmRlbGV0ZURyYWZ0IGluIG9yZGVyIHRvIHVzZSBhIGRpc2NhcmQgYWN0aW9uIGlmIGRlZmluZWRcblx0XHRcdFx0XHQvLyBIb3dldmVyLCBkcmFmdC5kZWxldGVEcmFmdCB1c2VzIGdldFByb3BlcnR5LCB3aGljaCByZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgY29udGV4dCBpcyBub3QgcmVhZCBmcm9tIHRoZSBiYWNrZW5kLlxuXHRcdFx0XHRcdC8vIFRoaXMgY2FuIGJlIHRoZSBjYXNlLCBpZiB3ZSBoYXZlIHJldHJpZXZlZCB0aGlzIGNvbnRleHQgdmlhIHRoZSBzaWJsaW5nIChlLmcuIHdoZW4gYSBkcmFmdCBleGlzdGVkIGFuZCB3ZSB3YW50IHRvIGRlbGV0ZSBib3RoIC0gaW4gdGhhdCBjYXNlXG5cdFx0XHRcdFx0Ly8gd2UgaGF2ZSBhbHJlYWR5IGRpc2NhcmRlZCB0aGUgZHJhZnQgYWJvdmUsIGFuZCBub3cgbmVlZCB0byBkZWxldGUgdGhlIGFjdGl2ZSBvbmUpLiBUbyBpZGVudGlmeSB0aGlzIHNpdHVhdGlvbiwgd2UgbXVzdCBub3QgdXNlIGdldFByb3BlcnR5XG5cdFx0XHRcdFx0Ly8gKGFzIHRoZSBjb250ZXh0IGlzIG5vdCByZWFkKSwgYnV0IGNoZWNrIHRoZSBzYW1lIGluIHRoZSBtUGFyYW1ldGVycy5cblx0XHRcdFx0XHQvLyBJbiB0aGlzIGNhc2UsIHdlIGNhbiBqdXN0IGRlbGV0ZSB0aGUgY29udGV4dC4gQnV0IHdlIHNob3VsZCBub3QgdXNlIGNvbnRleHQuZGVsZXRlIChhbHNvIHVwZGF0aW5nIGJpbmRpbmdzLCB3aGljaCBmYWlscyBpbiB0aGUgZGVzY3JpYmVkIHNpdHVhdGlvbiksXG5cdFx0XHRcdFx0Ly8gYnV0IG1vZGVsLmRlbGV0ZSAob25seSBzZW5kaW5nIHRoZSBkZWxldGUpLiBJbiBvdGhlciBjYXNlcyAoZS5nLiBub24tZHJhZnQpLCB0aGlzIGlzIGFsc28gc3VmZmljaWVudCwgYXMgd2UgYW55d2F5IHRha2UgY2FyZSBvZiBzZXR0aW5nXG5cdFx0XHRcdFx0Ly8gY29ycmVjdCBiaWRuaW5ncyB3aXRoIHRoZSBuYXZpZ2F0aW9uIHRyaWdnZXJlZCBieSB0aGUgZGVsZXRpb24uXG5cdFx0XHRcdFx0Ly8gSW4gY2FzZSBvbiBhbmFseXRpY2FsIHRhYmxlLCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gY2FsbCBjb250ZXh0LmRlbGV0ZSwgYXMgaXQgd2lsbCBmYWlsLlxuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdCFkcmFmdEVuYWJsZWQgfHxcblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmU/LmZpbmQoXG5cdFx0XHRcdFx0XHRcdChkcmFmdFdpdGhEZWxldGFibGVBY3RpdmUpID0+IGRyYWZ0V2l0aERlbGV0YWJsZUFjdGl2ZS5zaWJsaW5nSW5mby50YXJnZXRDb250ZXh0ID09PSBjb250ZXh0XG5cdFx0XHRcdFx0XHQpIHx8XG5cdFx0XHRcdFx0XHRiaW5kaW5nVHlwZSA9PT0gXCJBbmFseXRpY2FsXCJcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGNvbnRleHQucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRNb2RlbCgpLmRlbGV0ZShjb250ZXh0LmdldENhbm9uaWNhbFBhdGgoKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBkcmFmdC5kZWxldGVEcmFmdChjb250ZXh0LCBtZXNzYWdlSGFuZGxlciwgYXBwQ29tcG9uZW50LCBlbmFibGVTdHJpY3RIYW5kbGluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHRcdGRlbGV0ZUhlbHBlci5hZnRlckRlbGV0ZVByb2Nlc3MobVBhcmFtZXRlcnMsIG9wdGlvbnMsIGNvbnRleHRzLCByZXNvdXJjZU1vZGVsLCBsYXN0RGVsZXRlZFJvd0luZGV4KTtcblx0XHRcdGlmIChkcmFmdEVycm9ycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHRocm93IEVycm9yKGBGRSA6IGNvcmUgOiBEZWxldGVIZWxwZXIgOiBFcnJvcnMgb24gZHJhZnQgZGVsZXRlIDogJHtkcmFmdEVycm9yc31gKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlSG9sZEtleShtZXNzYWdlSGFuZGxpbmdLZXkpO1xuXHR9IGNhdGNoIChvRXJyb3IpIHtcblx0XHRpZiAoY29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0ZGVsZXRlSGVscGVyLmFkZEdlbmVyaWNEZWxldGVGYWlsdXJlTWVzc2FnZShyZXNvdXJjZU1vZGVsKTtcblx0XHR9XG5cdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKHsgdW5Ib2xkS2V5OiBtZXNzYWdlSGFuZGxpbmdLZXkgfSk7XG5cdFx0Ly8gcmUtdGhyb3cgZXJyb3IgdG8gZW5mb3JjZSByZWplY3RpbmcgdGhlIGdlbmVyYWwgcHJvbWlzZVxuXHRcdHRocm93IG9FcnJvcjtcblx0fVxufVxuXG4vKipcbiAqIEFkZGluZyBhIGdlbmVyaWMgZGVsZXRlIGZhaWx1cmUgbWVzc2FnZSB0byBtZXNzYWdlIG1vZGVsIGZvciByZWFkYWJpbGl0eS5cbiAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFJlc291cmNlIG1vZGVsIGZvciBtZXNzYWdlIHRleHRcbiAqL1xuZnVuY3Rpb24gYWRkR2VuZXJpY0RlbGV0ZUZhaWx1cmVNZXNzYWdlKHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiB2b2lkIHtcblx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKFxuXHRcdG5ldyBNZXNzYWdlKHtcblx0XHRcdG1lc3NhZ2U6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RFTEVURV9DSEFOR0VTRVRfRkFJTFVSRV9NVUxUSVBMRV9FUlJPUlNfVEVYVFwiKSxcblx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcdFx0dGFyZ2V0OiB1bmRlZmluZWQsXG5cdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0Y29kZTogXCJGRV9DVVNUT01fTUVTU0FHRV9DSEFOR0VTRVRfQUxMX0ZBSUxFRFwiLFxuXHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RFTEVURV9DSEFOR0VTRVRfRkFJTFVSRV9NVUxUSVBMRV9FUlJPUlNfREVUQUlMU19URVhUXCIpLFxuXHRcdFx0dGVjaG5pY2FsRGV0YWlsczoge1xuXHRcdFx0XHRmZToge1xuXHRcdFx0XHRcdGNoYW5nZVNldFByZVRleHRGb3JTaW5nbGVFcnJvcjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fREVMRVRFX0NIQU5HRVNFVF9GQUlMVVJFX1NJTkdMRV9FUlJPUl9URVhUXCIpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KVxuXHQpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgYSBDb250ZXh0SW5mbyB1c2luZyBpdHMgc2libGluZyBjb250ZXh0LCBpZiBuZWVkZWQuXG4gKiBSZXF1ZXN0cyB0aGUgc2libGluZyBjb250ZXh0IGFuZCB1cGRhdGVzIHRoZSBzaWJsaW5nRGVsZXRhYmxlIHByb3BlcnR5LlxuICogQWxzbyBtYW5hZ2VzIHRoZSBjYXNlIHdoZXJlIHRoZSBtYWluIGNvbnRleHQgaXMgYWN0aXZlIGJ1dCBoYXMgYSBkcmFmdCBzaWJsaW5nICgtLT4gc3dhcCBiZXR3ZWVuIG1haW4gYW5kIHNpYmxpbmcgY29udGV4dCkuXG4gKiBAcGFyYW0gaW5mb1xuICogQHBhcmFtIGRlbGV0YWJsZVBhdGhcbiAqIEBwYXJhbSBzdGF0aWNEZWxldGFibGVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdXBkYXRlSW5mb0Zyb21TaWJsaW5nKGluZm86IENvbnRleHRJbmZvLCBkZWxldGFibGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsIHN0YXRpY0RlbGV0YWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuXHR0cnkge1xuXHRcdGlmICghaW5mby5pc0FjdGl2ZSAmJiBpbmZvLmhhc0FjdGl2ZSkge1xuXHRcdFx0Ly8gQ2FzZSAxOiB0aGUgY29udGV4dCBpcyBhIGRyYWZ0LCB3ZSBuZWVkIHRvIGdldCBpdHMgYWN0aXZlIHNpYmxpbmdcblx0XHRcdGNvbnN0IHNpYmxpbmdJbmZvcm1hdGlvbiA9IGF3YWl0IGRyYWZ0LmNvbXB1dGVTaWJsaW5nSW5mb3JtYXRpb24oaW5mby5jb250ZXh0LCBpbmZvLmNvbnRleHQpO1xuXHRcdFx0aW5mby5zaWJsaW5nSW5mbyA9IHNpYmxpbmdJbmZvcm1hdGlvbjtcblx0XHRcdGluZm8uc2libGluZ0RlbGV0YWJsZSA9IGRlbGV0YWJsZVBhdGhcblx0XHRcdFx0PyBhd2FpdCBzaWJsaW5nSW5mb3JtYXRpb24/LnRhcmdldENvbnRleHQ/LnJlcXVlc3RQcm9wZXJ0eShkZWxldGFibGVQYXRoKVxuXHRcdFx0XHQ6IHN0YXRpY0RlbGV0YWJsZTtcblx0XHR9IGVsc2UgaWYgKGluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNEcmFmdCkge1xuXHRcdFx0Ly8gQ2FzZSAyOiB0aGUgY29udGV4dCBpcyBhY3RpdmUsIHdlIG5lZWQgdG8gZ2V0IGl0cyBkcmFmdCBzaWJsaW5nXG5cdFx0XHRjb25zdCBzaWJsaW5nSW5mb3JtYXRpb24gPSBhd2FpdCBkcmFmdC5jb21wdXRlU2libGluZ0luZm9ybWF0aW9uKGluZm8uY29udGV4dCwgaW5mby5jb250ZXh0KTtcblx0XHRcdGlmIChzaWJsaW5nSW5mb3JtYXRpb24/LnRhcmdldENvbnRleHQpIHtcblx0XHRcdFx0Ly8gV2Ugd2VyZSBhYmxlIHRvIHJldHJpZXZlIHRoZSBkcmFmdCBzaWJsaW5nIGZyb20gdGhlIGFjdGl2ZSBpbnN0YW5jZSAtLT4gZmFsbGJhY2sgdG8gY2FzZSAxXG5cdFx0XHRcdC8vIGJ5IGV4Y2hhbmdpbmcgdGhlIGNvbnRleHQgd2l0aCB0aGUgc2libGluZyBjb250ZXh0IGluIHRoZSBpbmZvIG9iamVjdC5cblx0XHRcdFx0Y29uc3QgcHJvcGVydGllc1RvRmV0Y2ggPSBbXCJJc0FjdGl2ZUVudGl0eVwiLCBcIkhhc0FjdGl2ZUVudGl0eVwiXTtcblx0XHRcdFx0aWYgKGRlbGV0YWJsZVBhdGgpIHtcblx0XHRcdFx0XHRwcm9wZXJ0aWVzVG9GZXRjaC5wdXNoKGRlbGV0YWJsZVBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGF3YWl0IHNpYmxpbmdJbmZvcm1hdGlvbi50YXJnZXRDb250ZXh0LnJlcXVlc3RQcm9wZXJ0eShwcm9wZXJ0aWVzVG9GZXRjaCk7XG5cdFx0XHRcdGluZm8ubG9ja2VkID0gZmFsc2U7XG5cdFx0XHRcdGluZm8uaGFzRHJhZnQgPSBmYWxzZTtcblx0XHRcdFx0aW5mby5pc0FjdGl2ZSA9IGZhbHNlO1xuXHRcdFx0XHRpbmZvLmhhc0FjdGl2ZSA9IHRydWU7XG5cdFx0XHRcdC8vIEV4Y2hhbmdlIGNvbnRleHQgd2l0aCBzaWJsaW5nIGNvbnRleHRcblx0XHRcdFx0aW5mby5zaWJsaW5nSW5mbyA9IHsgdGFyZ2V0Q29udGV4dDogaW5mby5jb250ZXh0LCBwYXRoTWFwcGluZzogW10gfTtcblx0XHRcdFx0aW5mby5jb250ZXh0ID0gc2libGluZ0luZm9ybWF0aW9uLnRhcmdldENvbnRleHQ7XG5cdFx0XHRcdC8vIEV4Y2hhbmdlIGRlbGV0YWJsZSB3aXRoIHNpYmxpbmcgZGVsZXRhYmxlXG5cdFx0XHRcdGluZm8uc2libGluZ0RlbGV0YWJsZSA9IGluZm8uZGVsZXRhYmxlO1xuXHRcdFx0XHRpbmZvLmRlbGV0YWJsZSA9IGRlbGV0YWJsZVBhdGggPyBzaWJsaW5nSW5mb3JtYXRpb24udGFyZ2V0Q29udGV4dC5nZXRQcm9wZXJ0eShkZWxldGFibGVQYXRoKSA6IHN0YXRpY0RlbGV0YWJsZTtcblx0XHRcdH1cblx0XHR9XG5cdH0gY2F0Y2ggKF9lKSB7XG5cdFx0Ly8gRG8gbm90aGluZ1xuXHR9XG59XG5cbi8qKlxuICogQ29sbGVjdCBjb250ZXh0IGluZm9ybWF0aW9uIChpc0RyYWZ0Um9vdCwgaXNEcmFmdE5vZGUsIEhhc0RyYWZ0RW50aXR5LCBJc0FjdGl2ZUVudGl0eSwgSGFzQWN0aXZlRW50aXR5LCBpc0xvY2tlZCwgaXNJbmFjdGl2ZSkuXG4gKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgVGhlIGNvbnRleHQgaW5mbyBwcm9taXNlLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRDb250ZXh0SW5mb3MoY29udGV4dDogT0RhdGFWNENvbnRleHQpOiBQcm9taXNlPENvbnRleHRJbmZvPiB7XG5cdGNvbnN0IGlzVHJhbnNpZW50ID0gISFjb250ZXh0Py5nZXRPYmplY3QoKT8uW1wiQCR1aTUuY29udGV4dC5pc1RyYW5zaWVudFwiXTtcblx0Y29uc3QgaXNJbmFjdGl2ZSA9IGNvbnRleHQ/LmlzSW5hY3RpdmUoKTtcblx0Y29uc3QgbWV0YUNvbnRleHQgPVxuXHRcdGlzSW5hY3RpdmUgfHwgKCFpc0luYWN0aXZlICYmIGlzVHJhbnNpZW50KVxuXHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdDogY29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE1ldGFDb250ZXh0KGNvbnRleHQuZ2V0Q2Fub25pY2FsUGF0aCgpKTtcblx0Y29uc3QgZGVsZXRhYmxlUGF0aCA9IG1ldGFDb250ZXh0Py5nZXRQcm9wZXJ0eShcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlbGV0ZVJlc3RyaWN0aW9ucy9EZWxldGFibGUvJFBhdGhcIik7XG5cdGNvbnN0IHN0YXRpY0RlbGV0YWJsZSA9ICFkZWxldGFibGVQYXRoICYmIG1ldGFDb250ZXh0Py5nZXRQcm9wZXJ0eShcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlbGV0ZVJlc3RyaWN0aW9ucy9EZWxldGFibGVcIikgIT09IGZhbHNlO1xuXHRjb25zdCBkZWxldGFibGUgPSBkZWxldGFibGVQYXRoID8gY29udGV4dC5nZXRQcm9wZXJ0eShkZWxldGFibGVQYXRoKSA6IHN0YXRpY0RlbGV0YWJsZTtcblxuXHRjb25zdCBpbmZvOiBDb250ZXh0SW5mbyA9IHtcblx0XHRjb250ZXh0OiBjb250ZXh0LFxuXHRcdGlzRHJhZnRSb290OiAhIW1ldGFDb250ZXh0Py5nZXRQcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCIpLFxuXHRcdGlzRHJhZnROb2RlOiAhIW1ldGFDb250ZXh0Py5nZXRQcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlXCIpLFxuXHRcdGlzQWN0aXZlOiB0cnVlLFxuXHRcdGhhc0FjdGl2ZTogZmFsc2UsXG5cdFx0aGFzRHJhZnQ6IGZhbHNlLFxuXHRcdGxvY2tlZDogZmFsc2UsXG5cdFx0Ly8gZm9yIGFuIGVtcHR5Um93IChpbmFjdGl2ZSBjb250ZXh0KSBpdCdzIGFsd2F5cyBkZWxldGFibGUgYXMgbG9uZyBhcyB0aGUgY29udGV4dCBrZXB0IGluYWN0aXZlLi5cblx0XHRkZWxldGFibGU6IGRlbGV0YWJsZSxcblx0XHRzaWJsaW5nSW5mbzogdW5kZWZpbmVkLFxuXHRcdHNpYmxpbmdEZWxldGFibGU6IGZhbHNlLFxuXHRcdGlzSW5hY3RpdmVDb250ZXh0OiAhIWNvbnRleHQuaXNJbmFjdGl2ZSgpXG5cdH07XG5cdGlmICghY29udGV4dC5pc0luYWN0aXZlKCkgJiYgaW5mby5pc0RyYWZ0Um9vdCkge1xuXHRcdGNvbnN0IGNvbnRleHREYXRhID0gY29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRpbmZvLmxvY2tlZCA9ICEhY29udGV4dERhdGEuRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGE/LkluUHJvY2Vzc0J5VXNlcjtcblx0XHRpbmZvLmhhc0RyYWZ0ID0gY29udGV4dERhdGEuSGFzRHJhZnRFbnRpdHk7XG5cdFx0aW5mby5pc0FjdGl2ZSA9IGNvbnRleHREYXRhLklzQWN0aXZlRW50aXR5O1xuXHRcdGluZm8uaGFzQWN0aXZlID0gY29udGV4dERhdGEuSGFzQWN0aXZlRW50aXR5O1xuXHRcdGF3YWl0IHVwZGF0ZUluZm9Gcm9tU2libGluZyhpbmZvLCBkZWxldGFibGVQYXRoLCBzdGF0aWNEZWxldGFibGUpO1xuXHR9XG5cdHJldHVybiBpbmZvO1xufVxuXG4vLyBUYWJsZSBSdW50aW1lIEhlbHBlcnM6XG5cbi8qIHJlZnJlc2hlcyBkYXRhIGluIGludGVybmFsIG1vZGVsIHJlbGV2YW50IGZvciBlbmFibGVtZW50IG9mIGRlbGV0ZSBidXR0b24gYWNjb3JkaW5nIHRvIHNlbGVjdGVkIGNvbnRleHRzXG5yZWxldmFudCBkYXRhIGFyZTogZGVsZXRhYmxlQ29udGV4dHMsIGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUsIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUsIHVuU2F2ZWRDb250ZXh0cywgZGVsZXRlRW5hYmxlZFxubm90IHJlbGV2YW50OiBsb2NrZWRDb250ZXh0c1xuKi9cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzKFxuXHRpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdHNlbGVjdGVkQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBjb250ZXh0SW5mb3MgPSBhd2FpdCBQcm9taXNlLmFsbChzZWxlY3RlZENvbnRleHRzLm1hcChnZXRDb250ZXh0SW5mb3MpKTtcblxuXHRjb25zdCBidWNrZXRzID0gW1xuXHRcdHtcblx0XHRcdGtleTogXCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlXCIsXG5cdFx0XHQvLyBvbmx5IGZvciBkcmFmdCByb290OiBJbiB0aGF0IGNhc2UsIHRoZSBkZWxldGUgcmVxdWVzdCBuZWVkcyB0byBiZSBzZW50IGZvciB0aGUgYWN0aXZlIChpLmUuIHRoZSBzaWJsaW5nKSxcblx0XHRcdC8vIHdoaWxlIGluIGRyYWZ0IG5vZGUsIHRoZSBkZWxldGUgcmVxdWVzdCBuZWVkcyB0byBiZSBzZW5kIGZvciB0aGUgZHJhZnQgaXRzZWxmXG5cdFx0XHR2YWx1ZTogY29udGV4dEluZm9zLmZpbHRlcihcblx0XHRcdFx0KGluZm8pID0+ICFpbmZvLmlzSW5hY3RpdmVDb250ZXh0ICYmIGluZm8uaXNEcmFmdFJvb3QgJiYgIWluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNBY3RpdmUgJiYgaW5mby5zaWJsaW5nRGVsZXRhYmxlXG5cdFx0XHQpXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IFwiZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZVwiLFxuXHRcdFx0Ly8gb25seSBmb3IgZHJhZnQgcm9vdDogRm9yIGRyYWZ0IG5vZGUsIHdlIG9ubHkgcmVseSBvbiBpbmZvcm1hdGlvbiBpbiB0aGUgZHJhZnQgaXRzZWxmIChub3QgaXRzIGFjdGl2ZSBzaWJsaW5nKVxuXHRcdFx0Ly8gYXBwbGljYXRpb24gaGFzIHRvIHRha2UgY2FyZSB0byBzZXQgdGhpcyBjb3JyZWN0bHkgKGluIGNhc2UgYWN0aXZlIHNpYmxpbmcgbXVzdCBub3QgYmUgZGVsZXRhYmxlLCBhY3RpdmF0aW9uXG5cdFx0XHQvLyBvZiBkcmFmdCB3aXRoIGRlbGV0ZWQgbm9kZSB3b3VsZCBhbHNvIGRlbHRlIGFjdGl2ZSBzaWJsaW5nID0+IGRlbGV0aW9uIG9mIGRyYWZ0IG5vZGUgdG8gYmUgYXZvaWRlZClcblx0XHRcdHZhbHVlOiBjb250ZXh0SW5mb3MuZmlsdGVyKFxuXHRcdFx0XHQoaW5mbykgPT4gIWluZm8uaXNJbmFjdGl2ZUNvbnRleHQgJiYgaW5mby5pc0RyYWZ0Um9vdCAmJiAhaW5mby5pc0FjdGl2ZSAmJiBpbmZvLmhhc0FjdGl2ZSAmJiAhaW5mby5zaWJsaW5nRGVsZXRhYmxlXG5cdFx0XHQpXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IFwibG9ja2VkQ29udGV4dHNcIixcblx0XHRcdHZhbHVlOiBjb250ZXh0SW5mb3MuZmlsdGVyKFxuXHRcdFx0XHQoaW5mbykgPT4gIWluZm8uaXNJbmFjdGl2ZUNvbnRleHQgJiYgaW5mby5pc0RyYWZ0Um9vdCAmJiBpbmZvLmlzQWN0aXZlICYmIGluZm8uaGFzRHJhZnQgJiYgaW5mby5sb2NrZWRcblx0XHRcdClcblx0XHR9LFxuXHRcdHtcblx0XHRcdGtleTogXCJ1blNhdmVkQ29udGV4dHNcIixcblx0XHRcdHZhbHVlOiBjb250ZXh0SW5mb3MuZmlsdGVyKFxuXHRcdFx0XHQoaW5mbykgPT4gIWluZm8uaXNJbmFjdGl2ZUNvbnRleHQgJiYgaW5mby5pc0RyYWZ0Um9vdCAmJiBpbmZvLmlzQWN0aXZlICYmIGluZm8uaGFzRHJhZnQgJiYgIWluZm8ubG9ja2VkXG5cdFx0XHQpXG5cdFx0fSxcblx0XHQvLyBub24tZHJhZnQvc3RpY2t5IGFuZCBkZWxldGFibGVcblx0XHQvLyBhY3RpdmUgZHJhZnQgcm9vdCB3aXRob3V0IGFueSBkcmFmdCBhbmQgZGVsZXRhYmxlXG5cdFx0Ly8gY3JlYXRlZCBkcmFmdCByb290IChyZWdhcmRsZXNzIG9mIGRlbGV0YWJsZSlcblx0XHQvLyBkcmFmdCBub2RlIG9ubHkgYWNjb3JkaW5nIHRvIGl0cyBhbm5vdGF0aW9uXG5cdFx0e1xuXHRcdFx0a2V5OiBcImRlbGV0YWJsZUNvbnRleHRzXCIsXG5cdFx0XHR2YWx1ZTogY29udGV4dEluZm9zLmZpbHRlcihcblx0XHRcdFx0KGluZm8pID0+XG5cdFx0XHRcdFx0aW5mby5pc0luYWN0aXZlQ29udGV4dCB8fFxuXHRcdFx0XHRcdCghaW5mby5pc0RyYWZ0Um9vdCAmJiAhaW5mby5pc0RyYWZ0Tm9kZSAmJiBpbmZvLmRlbGV0YWJsZSkgfHxcblx0XHRcdFx0XHQoaW5mby5pc0RyYWZ0Um9vdCAmJiBpbmZvLmlzQWN0aXZlICYmICFpbmZvLmhhc0RyYWZ0ICYmIGluZm8uZGVsZXRhYmxlKSB8fFxuXHRcdFx0XHRcdChpbmZvLmlzRHJhZnRSb290ICYmICFpbmZvLmlzQWN0aXZlICYmICFpbmZvLmhhc0FjdGl2ZSkgfHwgLy8gd2Ugc2F5IHRoYXQgZHJhZnQgd2l0aCBhbiBhY3RpdmUgdmVyc2lvbiBhcmUgbm90IGRlbGV0YWJsZSB0byBnbyB0aHJvdWdoIGFub3RoZXIgbWVjaGFuaXNtIHZpYSB0aGUgc2VsZWN0ZWQgY29udGV4dHNcblx0XHRcdFx0XHQoaW5mby5pc0RyYWZ0Tm9kZSAmJiBpbmZvLmRlbGV0YWJsZSlcblx0XHRcdClcblx0XHR9XG5cdF07XG5cdGNvbnN0IGNvbnRleHRQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCJcIiA6IFwiY29udGV4dG1lbnUvXCI7XG5cdGZvciAoY29uc3QgeyBrZXksIHZhbHVlIH0gb2YgYnVja2V0cykge1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFxuXHRcdFx0Y29udGV4dFBhdGggKyBrZXksXG5cdFx0XHQvLyBDdXJyZW50bHksIGJ1Y2tldCBkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlIGhhcyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgKGNvbnRhaW5pbmcgYWxzbyBzaWJsaW5nIGluZm9ybWF0aW9uLCB3aGljaCBpcyB1c2VkXG5cdFx0XHQvLyBpbiBjYXNlIG9mIGRlbGV0aW9uKS4gUG9zc2libGUgaW1wcm92ZW1lbnQ6IFJlYWQgc2libGluZyBpbmZvcm1hdGlvbiBvbmx5IHdoZW4gbmVlZGVkLCBhbmQgYnVpbGQgYWxsIGJ1Y2tldHMgd2l0aCBzYW1lXG5cdFx0XHQvLyBzdHJ1Y3R1cmUuIEhvd2V2ZXIsIGluIHRoYXQgY2FzZSBzaWJsaW5nSW5mb3JtYXRpb24gbWlnaHQgbmVlZCB0byBiZSByZWFkIHR3aWNlIChpZiBhbHJlYWR5IG5lZWRlZCBmb3IgYnV0dG9uIGVuYWJsZW1lbnQpLFxuXHRcdFx0Ly8gdGh1cyBhIGJ1ZmZlciBwcm9iYWJseSB3b3VsZCBtYWtlIHNlbnNlLlxuXHRcdFx0dmFsdWUubWFwKChpbmZvKSA9PlxuXHRcdFx0XHRrZXkgPT09IFwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZVwiID8geyBkcmFmdDogaW5mby5jb250ZXh0LCBzaWJsaW5nSW5mbzogaW5mby5zaWJsaW5nSW5mbyB9IDogaW5mby5jb250ZXh0XG5cdFx0XHQpXG5cdFx0KTtcblx0fVxufVxuXG5jb25zdCBkZWxldGVIZWxwZXIgPSB7XG5cdGdldE5vbkRlbGV0YWJsZVRleHQsXG5cdGRlbGV0ZUNvbmZpcm1IYW5kbGVyLFxuXHRnZXRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMsXG5cdHVwZGF0ZUNvbnRlbnRGb3JEZWxldGVEaWFsb2csXG5cdHVwZGF0ZURyYWZ0T3B0aW9uc0ZvckRlbGV0YWJsZVRleHRzLFxuXHRnZXRDb25maXJtZWREZWxldGFibGVDb250ZXh0LFxuXHRnZXRMb2NrZWRPYmplY3RzVGV4dCxcblx0Z2V0VW5zYXZlZENvbnRleHRzVGV4dCxcblx0Z2V0Tm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dCxcblx0YWZ0ZXJEZWxldGVQcm9jZXNzLFxuXHR1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyxcblx0RGVsZXRlT3B0aW9uVHlwZXMsXG5cdERlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sLFxuXHRzZXRGb2N1c0FmdGVyRGVsZXRlLFxuXHRnZXRDb250ZXh0SW5mb3MsXG5cdGFkZEdlbmVyaWNEZWxldGVGYWlsdXJlTWVzc2FnZSxcblx0cmVtb3ZlRGVzY2VuZGFudENvbnRleHRzXG59O1xuXG5leHBvcnQgZGVmYXVsdCBkZWxldGVIZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7TUFvQktBLGlCQUFpQiwwQkFBakJBLGlCQUFpQjtJQUFqQkEsaUJBQWlCO0lBQWpCQSxpQkFBaUI7SUFBakJBLGlCQUFpQjtJQUFqQkEsaUJBQWlCO0lBQWpCQSxpQkFBaUI7SUFBQSxPQUFqQkEsaUJBQWlCO0VBQUEsRUFBakJBLGlCQUFpQjtFQUFBLElBUWpCQywwQkFBMEIsMEJBQTFCQSwwQkFBMEI7SUFBMUJBLDBCQUEwQjtJQUExQkEsMEJBQTBCO0lBQUEsT0FBMUJBLDBCQUEwQjtFQUFBLEVBQTFCQSwwQkFBMEI7RUE4RC9C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
|
|
728
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZWxldGVPcHRpb25UeXBlcyIsIkRlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sIiwiZ2V0VXBkYXRlZFNlbGVjdGlvbnMiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsInR5cGUiLCJzZWxlY3RlZENvbnRleHRzIiwiY29udGV4dHNUb1JlbW92ZSIsInJldFNlbGVjdGVkQ29udGV4dHMiLCJmb3JFYWNoIiwiY29udGV4dCIsImlkeCIsImluZGV4T2YiLCJzcGxpY2UiLCJzZXRQcm9wZXJ0eSIsImNsZWFyU2VsZWN0ZWRDb250ZXh0c0Zvck9wdGlvbiIsIm9wdGlvbiIsImdldFByb3BlcnR5IiwiZGVsZXRhYmxlQ29udGV4dHMiLCJkcmFmdFNpYmxpbmdQYWlycyIsImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUiLCJkcmFmdHMiLCJtYXAiLCJjb250ZXh0UGFpciIsImRyYWZ0IiwibGVuZ3RoIiwiYWZ0ZXJEZWxldGVQcm9jZXNzIiwicGFyYW1ldGVycyIsIm9wdGlvbnMiLCJjb250ZXh0cyIsInJlc291cmNlTW9kZWwiLCJsYXN0RGVsZXRlZFJvd0luZGV4IiwiZW50aXR5U2V0TmFtZSIsInVuZGVmaW5lZCIsInNlbGVjdGVkIiwic29tZSIsImlzTXVsdGlWYWx1ZUZpZWxkIiwicGFyZW50Q29udHJvbCIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsInNob3VsZFNob3dUb2FzdCIsInNpbGVudE1vZGUiLCJtZXNzYWdlS2V5IiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsImdldFRleHQiLCJkZWxldGVIZWxwZXIiLCJzZXRGb2N1c0FmdGVyRGVsZXRlIiwiY29udGV4dFBhdGgiLCJnZXRQYXRoIiwiZ2V0TW9kZWwiLCJsb2NhbEFubm90YXRpb25Nb2RlbCIsImdldExvY2FsQW5ub3RhdGlvbk1vZGVsIiwiYW5ub3RhdGlvbk9iamVjdCIsImdldE9iamVjdCIsImtleSIsIk9iamVjdCIsImtleXMiLCJpbmNsdWRlcyIsInRhYmxlIiwiZGVsZXRlZFJvd3NDb3VudCIsInRhYmxlUm93c0NvdW50IiwiZ2V0Um93QmluZGluZyIsImdldENvdW50Iiwib3JpZ2luYWxUYWJsZVJvd3NDb3VudCIsIm5leHRGb2N1c1Jvd0luZGV4IiwiZm9jdXNSb3ciLCJmb2N1cyIsImdldExvY2tlZENvbnRleHRVc2VyIiwibG9ja2VkQ29udGV4dCIsImRyYWZ0QWRtaW5EYXRhIiwiZ2V0TG9ja2VkT2JqZWN0c1RleHQiLCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMiLCJsb2NrZWRDb250ZXh0cyIsInJldFR4dCIsImxvY2tlZFVzZXIiLCJnZXROb25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0IiwibnVtYmVyT2ZEcmFmdHMiLCJ0b3RhbERlbGV0YWJsZSIsImdldFVuU2F2ZWRDb250ZXh0VXNlciIsInVuU2F2ZWRDb250ZXh0IiwiYWRtaW5EYXRhUHJlIiwiTGFzdENoYW5nZWRCeVVzZXJEZXNjcmlwdGlvbiIsIkxhc3RDaGFuZ2VkQnlVc2VyIiwicmVxdWVzdFByb3BlcnR5IiwiYWRtaW5EYXRhIiwiZ2V0VW5zYXZlZENvbnRleHRzVGV4dCIsInVuU2F2ZWRDb250ZXh0cyIsImluZm9UeHQiLCJvcHRpb25UeHQiLCJvcHRpb25XaXRob3V0VHh0IiwibGFzdENoYW5nZWRCeVVzZXIiLCJnZXROb25EZWxldGFibGVUZXh0IiwibVBhcmFtZXRlcnMiLCJ0b3RhbE51bURlbGV0YWJsZUNvbnRleHRzIiwiZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSIsIm5vbkRlbGV0YWJsZUNvbnRleHRzIiwiVGV4dCIsInRleHQiLCJnZXRDb25maXJtZWREZWxldGFibGVDb250ZXh0IiwicmVkdWNlIiwicmVzdWx0IiwiZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUiLCJjb25jYXQiLCJnZXREcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSIsInVwZGF0ZURyYWZ0T3B0aW9uc0ZvckRlbGV0YWJsZVRleHRzIiwidkNvbnRleHRzIiwiaXRlbXMiLCJsb2NrZWRDb250ZXh0c1R4dCIsImRlbGV0YWJsZURyYWZ0SW5mbyIsInB1c2giLCJzaWJsaW5nSW5mbyIsInRhcmdldENvbnRleHQiLCJub25EZWxldGFibGVFeGlzdHMiLCJub25EZWxldGFibGVUZXh0Q3RybCIsInVuc2F2ZWRDaGFuZ2VzVHh0cyIsImNvbnRyb2wiLCJDSEVDS0JPWCIsIm5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQiLCJURVhUIiwidXBkYXRlQ29udGVudEZvckRlbGV0ZURpYWxvZyIsInNldFRleHQiLCJDaGVja0JveCIsInNlbGVjdCIsIm9FdmVudCIsImNoZWNrQm94IiwiZ2V0U291cmNlIiwiZ2V0U2VsZWN0ZWQiLCJfZ2V0T3JpZ2luYWxTZWxlY3RlZFJlY29yZCIsImNvbnRleHRUb0RlbGV0ZSIsInJldCIsImZpbmQiLCJkcmFmdFNpYmxpbmdQYWlyIiwiZ2V0T3B0aW9uc0ZvckRlbGV0YWJsZVRleHRzIiwiZGlyZWN0RGVsZXRhYmxlQ29udGV4dHMiLCJkZXNjcmlwdGlvbiIsIm9UYWJsZSIsInNLZXkiLCJnZXRQYXJlbnQiLCJnZXRJZGVudGlmaWVyQ29sdW1uIiwidHh0IiwiZGVzY3JpcHRpb25QYXRoIiwicGF0aCIsIm9MaW5lQ29udGV4dERhdGEiLCJzS2V5VmFsdWUiLCJzRGVzY3JpcHRpb24iLCJkZWxldGFibGVPcHRpb25UeHQiLCJ1bnNoaWZ0IiwiYWxsRGVsZXRhYmxlVHh0IiwiZGVsZXRlRHJhZnRzQmVmb3JlQWN0aXZlc0FuZEdldEVycm9ycyIsIm1lc3NhZ2VIYW5kbGVyIiwiYXBwQ29tcG9uZW50IiwiZW5hYmxlU3RyaWN0SGFuZGxpbmciLCJkcmFmdEVycm9ycyIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwiZGVsZXRlRHJhZnQiLCJlIiwiTG9nIiwiZXJyb3IiLCJyZW1vdmVEZXNjZW5kYW50Q29udGV4dHMiLCJ0ZW1wQ29udGV4dHMiLCJwYXJlbnRDb250ZXh0IiwicGFyZW50SW5kZXgiLCJjaGlsZEluZGV4IiwiY2hpbGRDb250ZXh0IiwiaXNBbmNlc3Rvck9mIiwic2V0U2VsZWN0ZWQiLCJmaWx0ZXIiLCJkZWxldGVDb25maXJtSGFuZGxlciIsImRyYWZ0RW5hYmxlZCIsImJpbmRpbmdUeXBlIiwibWVzc2FnZUhhbmRsaW5nS2V5IiwicmVnaXN0ZXJUb0hvbGRNZXNzYWdlcyIsImdldEluZGV4IiwiYmVmb3JlRGVsZXRlQ2FsbEJhY2siLCJjb250ZXh0c1RvRGVsZXRlIiwiYWxsIiwiZHJhZnRXaXRoRGVsZXRhYmxlQWN0aXZlIiwicmVzZXRDaGFuZ2VzIiwiZGVsZXRlIiwiZ2V0Q2Fub25pY2FsUGF0aCIsIkVycm9yIiwicmVtb3ZlSG9sZEtleSIsIm9FcnJvciIsImFkZEdlbmVyaWNEZWxldGVGYWlsdXJlTWVzc2FnZSIsInNob3dNZXNzYWdlcyIsInVuSG9sZEtleSIsIk1lc3NhZ2luZyIsImFkZE1lc3NhZ2VzIiwiTWVzc2FnZSIsIm1lc3NhZ2UiLCJNZXNzYWdlVHlwZSIsInRhcmdldCIsInBlcnNpc3RlbnQiLCJjb2RlIiwidGVjaG5pY2FsRGV0YWlscyIsImZlIiwiY2hhbmdlU2V0UHJlVGV4dEZvclNpbmdsZUVycm9yIiwidXBkYXRlSW5mb0Zyb21TaWJsaW5nIiwiaW5mbyIsImRlbGV0YWJsZVBhdGgiLCJzdGF0aWNEZWxldGFibGUiLCJpc0FjdGl2ZSIsImhhc0FjdGl2ZSIsInNpYmxpbmdJbmZvcm1hdGlvbiIsImNvbXB1dGVTaWJsaW5nSW5mb3JtYXRpb24iLCJzaWJsaW5nRGVsZXRhYmxlIiwiaGFzRHJhZnQiLCJwcm9wZXJ0aWVzVG9GZXRjaCIsImxvY2tlZCIsInBhdGhNYXBwaW5nIiwiZGVsZXRhYmxlIiwiX2UiLCJnZXRDb250ZXh0SW5mb3MiLCJpc1RyYW5zaWVudCIsImlzSW5hY3RpdmUiLCJtZXRhQ29udGV4dCIsImdldE1ldGFNb2RlbCIsImdldE1ldGFDb250ZXh0IiwiaXNEcmFmdFJvb3QiLCJpc0RyYWZ0Tm9kZSIsImlzSW5hY3RpdmVDb250ZXh0IiwiY29udGV4dERhdGEiLCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSIsIkluUHJvY2Vzc0J5VXNlciIsIkhhc0RyYWZ0RW50aXR5IiwiSXNBY3RpdmVFbnRpdHkiLCJIYXNBY3RpdmVFbnRpdHkiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsImZvckNvbnRleHRNZW51IiwiYXJndW1lbnRzIiwiY29udGV4dEluZm9zIiwiYnVja2V0cyIsInZhbHVlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJEZWxldGVIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBTaWJsaW5nSW5mb3JtYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHR5cGUgeyBDaGVja0JveCRTZWxlY3RFdmVudCB9IGZyb20gXCJzYXAvbS9DaGVja0JveFwiO1xuaW1wb3J0IENoZWNrQm94IGZyb20gXCJzYXAvbS9DaGVja0JveFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcblxuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwiLi9Nb2RlbEhlbHBlclwiO1xuXG5lbnVtIERlbGV0ZU9wdGlvblR5cGVzIHtcblx0ZGVsZXRhYmxlQ29udGV4dHMgPSBcImRlbGV0YWJsZUNvbnRleHRzXCIsXG5cdGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUgPSBcImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVcIixcblx0dW5TYXZlZENvbnRleHRzID0gXCJ1blNhdmVkQ29udGV4dHNcIixcblx0ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSA9IFwiZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZVwiLFxuXHRkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSA9IFwiZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmVcIlxufVxuXG5lbnVtIERlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sIHtcblx0Q0hFQ0tCT1ggPSBcImNoZWNrQm94XCIsXG5cdFRFWFQgPSBcInRleHRcIlxufVxuXG5leHBvcnQgdHlwZSBEcmFmdFNpYmxpbmdQYWlyID0ge1xuXHRkcmFmdDogT0RhdGFWNENvbnRleHQ7XG5cdHNpYmxpbmdJbmZvOiBTaWJsaW5nSW5mb3JtYXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBEZWxldGVPcHRpb24gPSB7XG5cdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzO1xuXHRjb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0c2VsZWN0ZWQ6IGJvb2xlYW47XG5cdHRleHQ/OiBzdHJpbmc7XG5cdGNvbnRyb2w/OiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbDtcbn07XG5cbmV4cG9ydCB0eXBlIENvbnRleHRJbmZvID0ge1xuXHRjb250ZXh0OiBPRGF0YVY0Q29udGV4dDtcblx0c2libGluZ0luZm86IFNpYmxpbmdJbmZvcm1hdGlvbiB8IHVuZGVmaW5lZDtcblx0aXNEcmFmdFJvb3Q6IGJvb2xlYW47XG5cdGlzRHJhZnROb2RlOiBib29sZWFuO1xuXHRpc0FjdGl2ZTogYm9vbGVhbjtcblx0aGFzQWN0aXZlOiBib29sZWFuO1xuXHRoYXNEcmFmdDogYm9vbGVhbjtcblx0bG9ja2VkOiBib29sZWFuO1xuXHRkZWxldGFibGU6IGJvb2xlYW47XG5cdHNpYmxpbmdEZWxldGFibGU6IGJvb2xlYW47XG5cdGlzSW5hY3RpdmVDb250ZXh0OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFUeXBlID0ge1xuXHREcmFmdFVVSUQ6IHN0cmluZztcblx0SW5Qcm9jZXNzQnlVc2VyPzogc3RyaW5nO1xuXHRJblByb2Nlc3NCeVVzZXJEZXNjcmlwdGlvbj86IHN0cmluZztcblx0Q3JlYXRlZEJ5VXNlckRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXHRDcmVhdGVkQnlVc2VyPzogc3RyaW5nO1xuXHRMYXN0Q2hhbmdlZEJ5VXNlckRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXHRMYXN0Q2hhbmdlZEJ5VXNlcj86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERlbGV0ZVBhcmFtZXRlcnMgPSB7XG5cdGludGVybmFsTW9kZWxDb250ZXh0PzogSW50ZXJuYWxNb2RlbENvbnRleHQgfCBudWxsO1xuXHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHM/OiBudW1iZXI7XG5cdGVudGl0eVNldE5hbWU/OiBzdHJpbmc7XG5cdHBhcmVudENvbnRyb2w/OiBDb250cm9sO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZyB8IHsgcGF0aDogc3RyaW5nIH07XG5cdGJlZm9yZURlbGV0ZUNhbGxCYWNrPzogRnVuY3Rpb247XG5cdHVuU2F2ZWRDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmU/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRsb2NrZWRDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmU/OiBEcmFmdFNpYmxpbmdQYWlyW107XG5cdHNpbGVudE1vZGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRGVsZXRlVGV4dEluZm8gPSB7XG5cdGluZm9UeHQ/OiBzdHJpbmc7XG5cdG9wdGlvblR4dD86IHN0cmluZztcblx0b3B0aW9uV2l0aG91dFR4dD86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBnZXRVcGRhdGVkU2VsZWN0aW9ucyhcblx0aW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcyxcblx0c2VsZWN0ZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0Y29udGV4dHNUb1JlbW92ZTogT0RhdGFWNENvbnRleHRbXVxuKTogT0RhdGFWNENvbnRleHRbXSB7XG5cdGNvbnN0IHJldFNlbGVjdGVkQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10gPSBbLi4uc2VsZWN0ZWRDb250ZXh0c107XG5cdGNvbnRleHRzVG9SZW1vdmUuZm9yRWFjaCgoY29udGV4dDogT0RhdGFWNENvbnRleHQpID0+IHtcblx0XHRjb25zdCBpZHggPSByZXRTZWxlY3RlZENvbnRleHRzLmluZGV4T2YoY29udGV4dCk7XG5cdFx0aWYgKGlkeCAhPT0gLTEpIHtcblx0XHRcdHJldFNlbGVjdGVkQ29udGV4dHMuc3BsaWNlKGlkeCwgMSk7XG5cdFx0fVxuXHR9KTtcblx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkodHlwZSwgW10pO1xuXG5cdHJldHVybiByZXRTZWxlY3RlZENvbnRleHRzO1xufVxuXG5mdW5jdGlvbiBjbGVhclNlbGVjdGVkQ29udGV4dHNGb3JPcHRpb24oaW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LCBvcHRpb246IERlbGV0ZU9wdGlvbik6IHZvaWQge1xuXHRsZXQgc2VsZWN0ZWRDb250ZXh0cyA9IChpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIikgYXMgT0RhdGFWNENvbnRleHRbXSkgfHwgW107XG5cblx0aWYgKG9wdGlvbi50eXBlID09PSBEZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cykge1xuXHRcdHNlbGVjdGVkQ29udGV4dHMgPSBnZXRVcGRhdGVkU2VsZWN0aW9ucyhcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0RGVsZXRlT3B0aW9uVHlwZXMuZGVsZXRhYmxlQ29udGV4dHMsXG5cdFx0XHRzZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoRGVsZXRlT3B0aW9uVHlwZXMuZGVsZXRhYmxlQ29udGV4dHMpIHx8IFtdXG5cdFx0KTtcblxuXHRcdGNvbnN0IGRyYWZ0U2libGluZ1BhaXJzID0gaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoRGVsZXRlT3B0aW9uVHlwZXMuZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSkgfHwgW107XG5cdFx0Y29uc3QgZHJhZnRzID0gZHJhZnRTaWJsaW5nUGFpcnMubWFwKChjb250ZXh0UGFpcjogRHJhZnRTaWJsaW5nUGFpcikgPT4ge1xuXHRcdFx0cmV0dXJuIGNvbnRleHRQYWlyLmRyYWZ0O1xuXHRcdH0pO1xuXHRcdHNlbGVjdGVkQ29udGV4dHMgPSBnZXRVcGRhdGVkU2VsZWN0aW9ucyhcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0RGVsZXRlT3B0aW9uVHlwZXMuZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSxcblx0XHRcdHNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRkcmFmdHNcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGNvbnRleHRzVG9SZW1vdmUgPSBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShvcHRpb24udHlwZSkgfHwgW107XG5cdFx0c2VsZWN0ZWRDb250ZXh0cyA9IGdldFVwZGF0ZWRTZWxlY3Rpb25zKGludGVybmFsTW9kZWxDb250ZXh0LCBvcHRpb24udHlwZSwgc2VsZWN0ZWRDb250ZXh0cywgY29udGV4dHNUb1JlbW92ZSk7XG5cdH1cblx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIHNlbGVjdGVkQ29udGV4dHMpO1xuXHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBzZWxlY3RlZENvbnRleHRzLmxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGFmdGVyRGVsZXRlUHJvY2Vzcyhcblx0cGFyYW1ldGVyczogRGVsZXRlUGFyYW1ldGVycyxcblx0b3B0aW9uczogRGVsZXRlT3B0aW9uW10sXG5cdGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRsYXN0RGVsZXRlZFJvd0luZGV4OiBudW1iZXJcbik6IHZvaWQge1xuXHRjb25zdCB7IGludGVybmFsTW9kZWxDb250ZXh0LCBlbnRpdHlTZXROYW1lIH0gPSBwYXJhbWV0ZXJzO1xuXHRpZiAoaW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRpZiAoaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkZWxldGVFbmFibGVkXCIpICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0b3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcblx0XHRcdFx0Ly8gaWYgYW4gb3B0aW9uIGlzIHNlbGVjdGVkLCB0aGVuIGl0IGlzIGRlbGV0ZWQuIFNvLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGVtIGZyb20gc2VsZWN0ZWQgY29udGV4dHMuXG5cdFx0XHRcdGlmIChvcHRpb24uc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRjbGVhclNlbGVjdGVkQ29udGV4dHNGb3JPcHRpb24oaW50ZXJuYWxNb2RlbENvbnRleHQsIG9wdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvLyBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIG9wdGlvbnMgaXMgbm90IHNlbGVjdGVkLCB0aGVuIHRoZSBkZWxldGUgYnV0dG9uIG5lZWRzIHRvIGJlIGVuYWJsZWQuXG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXG5cdFx0XHRcImRlbGV0ZUVuYWJsZWRcIixcblx0XHRcdG9wdGlvbnMuc29tZSgob3B0aW9uKSA9PiAhb3B0aW9uLnNlbGVjdGVkKVxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCBpc011bHRpVmFsdWVGaWVsZCA9IHBhcmFtZXRlcnMucGFyZW50Q29udHJvbD8uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGRcIjtcblx0Y29uc3Qgc2hvdWxkU2hvd1RvYXN0ID0gIXBhcmFtZXRlcnMucGFyZW50Q29udHJvbCB8fCAhaXNNdWx0aVZhbHVlRmllbGQ7XG5cblx0aWYgKHNob3VsZFNob3dUb2FzdCAmJiBwYXJhbWV0ZXJzLnNpbGVudE1vZGUgIT09IHRydWUpIHtcblx0XHRjb25zdCBtZXNzYWdlS2V5ID1cblx0XHRcdGNvbnRleHRzLmxlbmd0aCA9PT0gMSA/IFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfREVMRVRFX1RPQVNUX1NJTkdVTEFSXCIgOiBcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0RFTEVURV9UT0FTVF9QTFVSQUxcIjtcblx0XHRNZXNzYWdlVG9hc3Quc2hvdyhyZXNvdXJjZU1vZGVsLmdldFRleHQobWVzc2FnZUtleSwgdW5kZWZpbmVkLCBlbnRpdHlTZXROYW1lKSk7XG5cdH1cblxuXHQvLyBUaGUgTXVsdGlWYWx1ZUZpZWxkIGRvZXMgbm90IG5lZWQgcmVzZXR0aW5nIG9mIGZvY3VzIGxpa2UgdGhlIHRhYmxlLCB3aXRoIHRoZSByZXNldHRpbmcgd2UgZ2V0IGNvbnNvbGUgZXJyb3JzIHdlIGF2b2lkIHRyb3VnaCB0aGlzIGNoZWNrXG5cdGlmIChwYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wgJiYgIWlzTXVsdGlWYWx1ZUZpZWxkKSB7XG5cdFx0ZGVsZXRlSGVscGVyLnNldEZvY3VzQWZ0ZXJEZWxldGUocGFyYW1ldGVycy5wYXJlbnRDb250cm9sIGFzIFRhYmxlLCBjb250ZXh0cy5sZW5ndGgsIGxhc3REZWxldGVkUm93SW5kZXgpO1xuXHR9XG5cblx0aWYgKGNvbnRleHRzPy5sZW5ndGgpIHtcblx0XHRjb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG5cdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0aWYgKGNvbnRleHRQYXRoICYmIGNvbnRleHQuZ2V0TW9kZWwoKSkge1xuXHRcdFx0XHRjb25zdCBsb2NhbEFubm90YXRpb25Nb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRMb2NhbEFubm90YXRpb25Nb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uT2JqZWN0ID0gbG9jYWxBbm5vdGF0aW9uTW9kZWwuZ2V0T2JqZWN0KGNvbnRleHRQYXRoKTtcblx0XHRcdFx0aWYgKGFubm90YXRpb25PYmplY3QgJiYgdHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhhbm5vdGF0aW9uT2JqZWN0KSkge1xuXHRcdFx0XHRcdFx0aWYgKGtleS5pbmNsdWRlcyhcInVpNS5mZS5yZWNvbW1lbmRhdGlvbnNcIikpIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIGFubm90YXRpb25PYmplY3Rba2V5XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0UHJvcGVydHkoY29udGV4dFBhdGgsIGFubm90YXRpb25PYmplY3QpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0Rm9jdXNBZnRlckRlbGV0ZSh0YWJsZTogVGFibGUsIGRlbGV0ZWRSb3dzQ291bnQ6IG51bWJlciwgbGFzdERlbGV0ZWRSb3dJbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IHRhYmxlUm93c0NvdW50ID0gdGFibGUuZ2V0Um93QmluZGluZz8uKCk/LmdldENvdW50KCk7XG5cdGNvbnN0IG9yaWdpbmFsVGFibGVSb3dzQ291bnQgPSAodGFibGVSb3dzQ291bnQgPz8gMCkgKyBkZWxldGVkUm93c0NvdW50O1xuXHRsZXQgbmV4dEZvY3VzUm93SW5kZXg7XG5cblx0aWYgKGxhc3REZWxldGVkUm93SW5kZXggIT09IC0xICYmIHRhYmxlUm93c0NvdW50ICE9PSB1bmRlZmluZWQgJiYgdGFibGVSb3dzQ291bnQgPiAwKSB7XG5cdFx0Ly9JZiB0aGUgbGFzdCByb3cgaXMgZGVsZXRlZCwgbW92ZSB0aGUgZm9jdXMgdG8gcHJldmlvdXMgcm93IHRvIGl0XG5cdFx0aWYgKGxhc3REZWxldGVkUm93SW5kZXggPT09IG9yaWdpbmFsVGFibGVSb3dzQ291bnQgLSAxKSB7XG5cdFx0XHRuZXh0Rm9jdXNSb3dJbmRleCA9IHRhYmxlUm93c0NvdW50IC0gMTtcblx0XHRcdC8vRm9yIHRoZSBub3JtYWwgc2NlbmFyaW8sIG1vdmUgdGhlIGZvY3VzIHRvIHRoZSBuZXh0IHJvd1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRuZXh0Rm9jdXNSb3dJbmRleCA9IGxhc3REZWxldGVkUm93SW5kZXggLSBkZWxldGVkUm93c0NvdW50ICsgMTtcblx0XHR9XG5cdFx0YXdhaXQgdGFibGUuZm9jdXNSb3cobmV4dEZvY3VzUm93SW5kZXgsIGZhbHNlKTtcblx0fSBlbHNlIHtcblx0XHQvLyBGb3IgemVybyByb3dzIG9yIGRlZmF1bHQgY2FzZSwgbW92ZSBmb2N1cyB0byB0YWJsZVxuXHRcdHRhYmxlLmZvY3VzKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0TG9ja2VkQ29udGV4dFVzZXIobG9ja2VkQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiBzdHJpbmcge1xuXHRjb25zdCBkcmFmdEFkbWluRGF0YSA9IGxvY2tlZENvbnRleHQuZ2V0T2JqZWN0KClbXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiXSBhcyBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVR5cGU7XG5cdHJldHVybiAoZHJhZnRBZG1pbkRhdGEgJiYgZHJhZnRBZG1pbkRhdGFbXCJJblByb2Nlc3NCeVVzZXJcIl0pIHx8IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGdldExvY2tlZE9iamVjdHNUZXh0KHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsIG51bWJlck9mU2VsZWN0ZWRDb250ZXh0czogbnVtYmVyLCBsb2NrZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSk6IHN0cmluZyB7XG5cdGxldCByZXRUeHQgPSBcIlwiO1xuXG5cdGlmIChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPT09IDEgJiYgbG9ja2VkQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0Ly9vbmx5IG9uZSB1bnNhdmVkIG9iamVjdFxuXHRcdGNvbnN0IGxvY2tlZFVzZXIgPSBnZXRMb2NrZWRDb250ZXh0VXNlcihsb2NrZWRDb250ZXh0c1swXSk7XG5cdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9TSU5HTEVfT0JKRUNUX0xPQ0tFRFwiLCBbbG9ja2VkVXNlcl0pO1xuXHR9IGVsc2UgaWYgKGxvY2tlZENvbnRleHRzLmxlbmd0aCA9PSAxKSB7XG5cdFx0Y29uc3QgbG9ja2VkVXNlciA9IGdldExvY2tlZENvbnRleHRVc2VyKGxvY2tlZENvbnRleHRzWzBdKTtcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9fQU5EX09ORV9PQkpFQ1RfTE9DS0VEXCIsIFtcblx0XHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdGxvY2tlZFVzZXJcblx0XHRdKTtcblx0fSBlbHNlIGlmIChsb2NrZWRDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPX0FORF9GRVdfT0JKRUNUU19MT0NLRURcIiwgW1xuXHRcdFx0bG9ja2VkQ29udGV4dHMubGVuZ3RoLFxuXHRcdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXG5cdFx0XSk7XG5cdH1cblxuXHRyZXR1cm4gcmV0VHh0O1xufVxuXG5mdW5jdGlvbiBnZXROb25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0KHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsIG51bWJlck9mRHJhZnRzOiBudW1iZXIsIHRvdGFsRGVsZXRhYmxlOiBudW1iZXIpOiBzdHJpbmcge1xuXHRsZXQgcmV0VHh0ID0gXCJcIjtcblxuXHRpZiAodG90YWxEZWxldGFibGUgPT09IG51bWJlck9mRHJhZnRzKSB7XG5cdFx0aWYgKG51bWJlck9mRHJhZnRzID09PSAxKSB7XG5cdFx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9PTkxZX0RSQUZUX09GX05PTl9ERUxFVEFCTEVfQUNUSVZFXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9PTkxZX0RSQUZUU19PRl9OT05fREVMRVRBQkxFX0FDVElWRVwiKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAobnVtYmVyT2ZEcmFmdHMgPT09IDEpIHtcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9EUkFGVF9PRl9OT05fREVMRVRBQkxFX0FDVElWRVwiKTtcblx0fSBlbHNlIHtcblx0XHRyZXRUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9EUkFGVFNfT0ZfTk9OX0RFTEVUQUJMRV9BQ1RJVkVcIik7XG5cdH1cblxuXHRyZXR1cm4gcmV0VHh0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRVblNhdmVkQ29udGV4dFVzZXIodW5TYXZlZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0Y29uc3QgYWRtaW5EYXRhUHJlID0gdW5TYXZlZENvbnRleHQuZ2V0T2JqZWN0KFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFcIikgYXMgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFUeXBlIHwgdW5kZWZpbmVkO1xuXHRpZiAoIWFkbWluRGF0YVByZT8uTGFzdENoYW5nZWRCeVVzZXJEZXNjcmlwdGlvbiAmJiAhYWRtaW5EYXRhUHJlPy5MYXN0Q2hhbmdlZEJ5VXNlcikge1xuXHRcdGF3YWl0IHVuU2F2ZWRDb250ZXh0LnJlcXVlc3RQcm9wZXJ0eShbXG5cdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VkQnlVc2VyRGVzY3JpcHRpb25cIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZWRCeVVzZXJcIlxuXHRcdF0pO1xuXHR9XG5cdGNvbnN0IGFkbWluRGF0YSA9IHVuU2F2ZWRDb250ZXh0LmdldE9iamVjdChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCIpIGFzIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhVHlwZSB8IHVuZGVmaW5lZDtcblx0cmV0dXJuIGFkbWluRGF0YT8uTGFzdENoYW5nZWRCeVVzZXJEZXNjcmlwdGlvbiA/PyBhZG1pbkRhdGE/Lkxhc3RDaGFuZ2VkQnlVc2VyID8/IFwiXCI7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFVuc2F2ZWRDb250ZXh0c1RleHQoXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0czogbnVtYmVyLFxuXHR1blNhdmVkQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sXG5cdHRvdGFsRGVsZXRhYmxlOiBudW1iZXJcbik6IFByb21pc2U8RGVsZXRlVGV4dEluZm8+IHtcblx0bGV0IGluZm9UeHQgPSBcIlwiLFxuXHRcdG9wdGlvblR4dCA9IFwiXCIsXG5cdFx0b3B0aW9uV2l0aG91dFR4dCA9IGZhbHNlO1xuXHRpZiAobnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID09PSAxICYmIHVuU2F2ZWRDb250ZXh0cy5sZW5ndGggPT09IDEpIHtcblx0XHQvL29ubHkgb25lIHVuc2F2ZWQgb2JqZWN0IGFyZSBzZWxlY3RlZFxuXHRcdGNvbnN0IGxhc3RDaGFuZ2VkQnlVc2VyID0gYXdhaXQgZ2V0VW5TYXZlZENvbnRleHRVc2VyKHVuU2F2ZWRDb250ZXh0c1swXSk7XG5cdFx0aW5mb1R4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfVU5TQVZFRF9DSEFOR0VTXCIsIFtsYXN0Q2hhbmdlZEJ5VXNlcl0pO1xuXHRcdG9wdGlvbldpdGhvdXRUeHQgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9PT0gdW5TYXZlZENvbnRleHRzLmxlbmd0aCkge1xuXHRcdC8vb25seSBtdWx0aXBsZSB1bnNhdmVkIG9iamVjdHMgYXJlIHNlbGVjdGVkXG5cdFx0aW5mb1R4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfVU5TQVZFRF9DSEFOR0VTX01VTFRJUExFX09CSkVDVFNcIik7XG5cdFx0b3B0aW9uV2l0aG91dFR4dCA9IHRydWU7XG5cdH0gZWxzZSBpZiAodG90YWxEZWxldGFibGUgPT09IHVuU2F2ZWRDb250ZXh0cy5sZW5ndGgpIHtcblx0XHQvLyBub24tZGVsZXRhYmxlL2xvY2tlZCBleGlzdHMsIGFsbCBkZWxldGFibGUgYXJlIHVuc2F2ZWQgYnkgb3RoZXJzXG5cdFx0aWYgKHVuU2F2ZWRDb250ZXh0cy5sZW5ndGggPT09IDEpIHtcblx0XHRcdGNvbnN0IGxhc3RDaGFuZ2VkQnlVc2VyID0gYXdhaXQgZ2V0VW5TYXZlZENvbnRleHRVc2VyKHVuU2F2ZWRDb250ZXh0c1swXSk7XG5cdFx0XHRpbmZvVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9VTlNBVkVEX0FORF9GRVdfT0JKRUNUU19MT0NLRURfU0lOR1VMQVJcIiwgW1xuXHRcdFx0XHRsYXN0Q2hhbmdlZEJ5VXNlclxuXHRcdFx0XSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGluZm9UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1VOU0FWRURfQU5EX0ZFV19PQkpFQ1RTX0xPQ0tFRF9QTFVSQUxcIik7XG5cdFx0fVxuXHRcdG9wdGlvbldpdGhvdXRUeHQgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKHRvdGFsRGVsZXRhYmxlID4gdW5TYXZlZENvbnRleHRzLmxlbmd0aCkge1xuXHRcdC8vIG5vbi1kZWxldGFibGUvbG9ja2VkIGV4aXN0cywgZGVsZXRhYmxlIGluY2x1ZGUgdW5zYXZlZCBhbmQgb3RoZXIgdHlwZXMuXG5cdFx0aWYgKHVuU2F2ZWRDb250ZXh0cy5sZW5ndGggPT09IDEpIHtcblx0XHRcdGNvbnN0IGxhc3RDaGFuZ2VkQnlVc2VyID0gYXdhaXQgZ2V0VW5TYXZlZENvbnRleHRVc2VyKHVuU2F2ZWRDb250ZXh0c1swXSk7XG5cdFx0XHRvcHRpb25UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9fQU5EX0ZFV19PQkpFQ1RTX1VOU0FWRURfU0lOR1VMQVJcIiwgW1xuXHRcdFx0XHRsYXN0Q2hhbmdlZEJ5VXNlclxuXHRcdFx0XSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9wdGlvblR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUSU5GT19BTkRfRkVXX09CSkVDVFNfVU5TQVZFRF9QTFVSQUxcIik7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgaW5mb1R4dCwgb3B0aW9uVHh0LCBvcHRpb25XaXRob3V0VHh0IH07XG59XG5cbmZ1bmN0aW9uIGdldE5vbkRlbGV0YWJsZVRleHQoXG5cdG1QYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLFxuXHR0b3RhbE51bURlbGV0YWJsZUNvbnRleHRzOiBudW1iZXIsXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWxcbik6IFRleHQgfCB1bmRlZmluZWQge1xuXHRjb25zdCB7IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgZW50aXR5U2V0TmFtZSwgbG9ja2VkQ29udGV4dHMgPSBbXSwgZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSA9IFtdIH0gPSBtUGFyYW1ldGVycztcblx0Y29uc3Qgbm9uRGVsZXRhYmxlQ29udGV4dHMgPVxuXHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyEgLSAobG9ja2VkQ29udGV4dHMubGVuZ3RoICsgdG90YWxOdW1EZWxldGFibGVDb250ZXh0cyAtIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoKTtcblx0bGV0IHJldFR4dCA9IFwiXCI7XG5cblx0aWYgKFxuXHRcdG5vbkRlbGV0YWJsZUNvbnRleHRzID4gMCAmJlxuXHRcdCh0b3RhbE51bURlbGV0YWJsZUNvbnRleHRzID09PSAwIHx8IGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoID09PSB0b3RhbE51bURlbGV0YWJsZUNvbnRleHRzKVxuXHQpIHtcblx0XHQvLyAxLiBOb25lIG9mIHRoZSBjY29udGV4dHMgYXJlIGRlbGV0YWJsZVxuXHRcdC8vIDIuIE9ubHkgZHJhZnRzIG9mIG5vbiBkZWxldGFibGUgY29udGV4dHMgZXhpc3QuXG5cdFx0aWYgKGxvY2tlZENvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIExvY2tlZCBjb250ZXh0cyBleGlzdFxuXHRcdFx0aWYgKG5vbkRlbGV0YWJsZUNvbnRleHRzID09PSAxKSB7XG5cdFx0XHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfQUxMX1JFTUFJTklOR19OT05fREVMRVRBQkxFX1NJTkdVTEFSXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9BTExfUkVNQUlOSU5HX05PTl9ERUxFVEFCTEVfUExVUkFMXCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobm9uRGVsZXRhYmxlQ29udGV4dHMgPT09IDEpIHtcblx0XHRcdC8vIE9ubHkgcHVyZSBub24tZGVsZXRhYmxlIGNvbnRleHRzIGV4aXN0IHNpbmdsZVxuXHRcdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfU0lOR0xFX0FORF9PTkVfT0JKRUNUX05PTl9ERUxFVEFCTEVcIixcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRlbnRpdHlTZXROYW1lXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBPbmx5IHB1cmUgbm9uLWRlbGV0YWJsZSBjb250ZXh0cyBleGlzdCBtdWx0aXBsZVxuXHRcdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfTVVMVElQTEVfQU5EX0FMTF9PQkpFQ1RfTk9OX0RFTEVUQUJMRVwiLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdGVudGl0eVNldE5hbWVcblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5vbkRlbGV0YWJsZUNvbnRleHRzID09PSAxKSB7XG5cdFx0Ly8gZGVsZXRhYmxlIGFuZCBub24tZGVsZXRhYmxlIGV4aXN0cyB0b2dldGhlciwgc2luZ2xlXG5cdFx0cmV0VHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9fQU5EX09ORV9PQkpFQ1RfTk9OX0RFTEVUQUJMRVwiLFxuXHRcdFx0W251bWJlck9mU2VsZWN0ZWRDb250ZXh0c10sXG5cdFx0XHRlbnRpdHlTZXROYW1lXG5cdFx0KTtcblx0fSBlbHNlIGlmIChub25EZWxldGFibGVDb250ZXh0cyA+IDEpIHtcblx0XHQvLyBkZWxldGFibGUgYW5kIG5vbi1kZWxldGFibGUgZXhpc3RzIHRvZ2V0aGVyLCBtdWx0aXBsZVxuXHRcdHJldFR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RJTkZPX0FORF9GRVdfT0JKRUNUU19OT05fREVMRVRBQkxFXCIsXG5cdFx0XHRbbm9uRGVsZXRhYmxlQ29udGV4dHMsIG51bWJlck9mU2VsZWN0ZWRDb250ZXh0c10sXG5cdFx0XHRlbnRpdHlTZXROYW1lXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiByZXRUeHQgPyBuZXcgVGV4dCh7IHRleHQ6IHJldFR4dCB9KSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29uZmlybWVkRGVsZXRhYmxlQ29udGV4dChjb250ZXh0czogT0RhdGFWNENvbnRleHRbXSwgb3B0aW9uczogRGVsZXRlT3B0aW9uW10pOiBPRGF0YVY0Q29udGV4dFtdIHtcblx0cmV0dXJuIG9wdGlvbnMucmVkdWNlKChyZXN1bHQsIG9wdGlvbikgPT4ge1xuXHRcdHJldHVybiBvcHRpb24uc2VsZWN0ZWQgJiYgb3B0aW9uLnR5cGUgIT09IERlbGV0ZU9wdGlvblR5cGVzLmRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlID8gcmVzdWx0LmNvbmNhdChvcHRpb24uY29udGV4dHMpIDogcmVzdWx0O1xuXHR9LCBjb250ZXh0cyk7XG59XG5cbmZ1bmN0aW9uIGdldERyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlKG9wdGlvbnM6IERlbGV0ZU9wdGlvbltdKTogT0RhdGFWNENvbnRleHRbXSB7XG5cdGNvbnN0IGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdID0gW107XG5cdHJldHVybiBvcHRpb25zLnJlZHVjZSgocmVzdWx0LCBvcHRpb24pID0+IHtcblx0XHRyZXR1cm4gb3B0aW9uLnNlbGVjdGVkICYmIG9wdGlvbi50eXBlID09PSBEZWxldGVPcHRpb25UeXBlcy5kcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZSA/IHJlc3VsdC5jb25jYXQob3B0aW9uLmNvbnRleHRzKSA6IHJlc3VsdDtcblx0fSwgY29udGV4dHMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVEcmFmdE9wdGlvbnNGb3JEZWxldGFibGVUZXh0cyhcblx0bVBhcmFtZXRlcnM6IERlbGV0ZVBhcmFtZXRlcnMsXG5cdHZDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0dG90YWxEZWxldGFibGU6IG51bWJlcixcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0aXRlbXM6IENvbnRyb2xbXSxcblx0b3B0aW9uczogRGVsZXRlT3B0aW9uW11cbik6IFByb21pc2U8dm9pZD4ge1xuXHRsZXQgeyBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMsIGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUsIHVuU2F2ZWRDb250ZXh0cywgbG9ja2VkQ29udGV4dHMsIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUgfSA9XG5cdFx0bVBhcmFtZXRlcnM7XG5cdGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUgPz89IFtdO1xuXHR1blNhdmVkQ29udGV4dHMgPz89IFtdO1xuXHRsb2NrZWRDb250ZXh0cyA/Pz0gW107XG5cdGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUgPz89IFtdO1xuXHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPz89IDA7XG5cdGxldCBsb2NrZWRDb250ZXh0c1R4dCA9IFwiXCI7XG5cblx0Ly8gZHJhZnRzIHdpdGggYWN0aXZlXG5cdGlmIChkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZTogT0RhdGFWNENvbnRleHRbXSA9IFtdO1xuXHRcdGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmUuZm9yRWFjaCgoZGVsZXRhYmxlRHJhZnRJbmZvOiBEcmFmdFNpYmxpbmdQYWlyKSA9PiB7XG5cdFx0XHQvLyBJbiBlaXRoZXIgY2FzZXMsIGlmIGFuIG93biBkcmFmdCBpcyBsb2NrZWQgb3Igbm90IHRoZSBkcmFmdCBuZWVkcyB0byBiZSBkaXNjYXJkZWQgYmVmb3JlIGRlbGV0aW5nIGFjdGl2ZSByZWNvcmQuXG5cdFx0XHRkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZS5wdXNoKGRlbGV0YWJsZURyYWZ0SW5mby5kcmFmdCk7XG5cdFx0XHR2Q29udGV4dHMucHVzaChkZWxldGFibGVEcmFmdEluZm8uc2libGluZ0luZm8udGFyZ2V0Q29udGV4dCk7XG5cdFx0fSk7XG5cdFx0aWYgKGRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlLmxlbmd0aCA+IDApIHtcblx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLmRyYWZ0c1RvRGVsZXRlQmVmb3JlQWN0aXZlLFxuXHRcdFx0XHRjb250ZXh0czogZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUsXG5cdFx0XHRcdHNlbGVjdGVkOiB0cnVlXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvLyBpdGVtcyBsb2NrZWQgbXNnXG5cdGlmIChsb2NrZWRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0bG9ja2VkQ29udGV4dHNUeHQgPSBkZWxldGVIZWxwZXIuZ2V0TG9ja2VkT2JqZWN0c1RleHQocmVzb3VyY2VNb2RlbCwgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCBsb2NrZWRDb250ZXh0cykgfHwgXCJcIjtcblx0XHRpdGVtcy5wdXNoKG5ldyBUZXh0KHsgdGV4dDogbG9ja2VkQ29udGV4dHNUeHQgfSkpO1xuXHR9XG5cblx0Ly8gbm9uIGRlbGV0YWJsZSBtc2dcblx0Y29uc3Qgbm9uRGVsZXRhYmxlRXhpc3RzID0gbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzICE9IHRvdGFsRGVsZXRhYmxlIC0gZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZS5sZW5ndGggKyBsb2NrZWRDb250ZXh0cy5sZW5ndGg7XG5cdGNvbnN0IG5vbkRlbGV0YWJsZVRleHRDdHJsID0gbm9uRGVsZXRhYmxlRXhpc3RzICYmIGRlbGV0ZUhlbHBlci5nZXROb25EZWxldGFibGVUZXh0KG1QYXJhbWV0ZXJzLCB0b3RhbERlbGV0YWJsZSwgcmVzb3VyY2VNb2RlbCk7XG5cdGlmIChub25EZWxldGFibGVUZXh0Q3RybCkge1xuXHRcdGl0ZW1zLnB1c2gobm9uRGVsZXRhYmxlVGV4dEN0cmwpO1xuXHR9XG5cblx0Ly8gb3B0aW9uOiB1bnNhdmVkIGNoYW5nZXMgYnkgb3RoZXJzXG5cdGlmICh1blNhdmVkQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IHVuc2F2ZWRDaGFuZ2VzVHh0cyA9XG5cdFx0XHQoYXdhaXQgZGVsZXRlSGVscGVyLmdldFVuc2F2ZWRDb250ZXh0c1RleHQocmVzb3VyY2VNb2RlbCwgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzLCB1blNhdmVkQ29udGV4dHMsIHRvdGFsRGVsZXRhYmxlKSkgfHwge307XG5cdFx0aWYgKHVuc2F2ZWRDaGFuZ2VzVHh0cy5pbmZvVHh0KSB7XG5cdFx0XHRpdGVtcy5wdXNoKG5ldyBUZXh0KHsgdGV4dDogdW5zYXZlZENoYW5nZXNUeHRzLmluZm9UeHQgfSkpO1xuXHRcdH1cblx0XHRpZiAodW5zYXZlZENoYW5nZXNUeHRzLm9wdGlvblR4dCB8fCB1bnNhdmVkQ2hhbmdlc1R4dHMub3B0aW9uV2l0aG91dFR4dCkge1xuXHRcdFx0b3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogRGVsZXRlT3B0aW9uVHlwZXMudW5TYXZlZENvbnRleHRzLFxuXHRcdFx0XHRjb250ZXh0czogdW5TYXZlZENvbnRleHRzLFxuXHRcdFx0XHR0ZXh0OiB1bnNhdmVkQ2hhbmdlc1R4dHMub3B0aW9uVHh0LFxuXHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0Y29udHJvbDogRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wuQ0hFQ0tCT1hcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8vIG9wdGlvbjogZHJhZnRzIHdpdGggYWN0aXZlIG5vdCBkZWxldGFibGVcblx0aWYgKGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IG5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQgPVxuXHRcdFx0ZGVsZXRlSGVscGVyLmdldE5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQocmVzb3VyY2VNb2RlbCwgZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZS5sZW5ndGgsIHRvdGFsRGVsZXRhYmxlKSB8fCBcIlwiO1xuXHRcdGlmIChub25EZWxldGFibGVBY3RpdmVzT2ZEcmFmdHNUZXh0KSB7XG5cdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy5kcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLFxuXHRcdFx0XHRjb250ZXh0czogZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSxcblx0XHRcdFx0dGV4dDogbm9uRGVsZXRhYmxlQWN0aXZlc09mRHJhZnRzVGV4dCxcblx0XHRcdFx0c2VsZWN0ZWQ6IHRydWUsXG5cdFx0XHRcdGNvbnRyb2w6IHRvdGFsRGVsZXRhYmxlID4gMCA/IERlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sLkNIRUNLQk9YIDogRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wuVEVYVFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRlbnRGb3JEZWxldGVEaWFsb2cob3B0aW9uczogRGVsZXRlT3B0aW9uW10sIGl0ZW1zOiBDb250cm9sW10pOiB2b2lkIHtcblx0aWYgKG9wdGlvbnMubGVuZ3RoID09PSAxKSB7XG5cdFx0Ly8gU2luZ2xlIG9wdGlvbiBkb2Vzbid0IG5lZWQgY2hlY2tCb3hcblx0XHRjb25zdCBvcHRpb24gPSBvcHRpb25zWzBdO1xuXHRcdGlmIChvcHRpb24udGV4dCkge1xuXHRcdFx0Y29uc3QgdGV4dCA9IG5ldyBUZXh0KCk7XG5cdFx0XHR0ZXh0LnNldFRleHQob3B0aW9uLnRleHQpO1xuXHRcdFx0aXRlbXMucHVzaCh0ZXh0KTtcblx0XHR9XG5cdH0gZWxzZSBpZiAob3B0aW9ucy5sZW5ndGggPiAxKSB7XG5cdFx0Ly8gTXVsdGlwbGUgT3B0aW9uc1xuXG5cdFx0Ly8gVGV4dHNcblx0XHRvcHRpb25zLmZvckVhY2goKG9wdGlvbjogRGVsZXRlT3B0aW9uKSA9PiB7XG5cdFx0XHRpZiAob3B0aW9uLmNvbnRyb2wgPT09IFwidGV4dFwiICYmIG9wdGlvbi50ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IHRleHQgPSBuZXcgVGV4dCgpO1xuXHRcdFx0XHR0ZXh0LnNldFRleHQob3B0aW9uLnRleHQpO1xuXHRcdFx0XHRpdGVtcy5wdXNoKHRleHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vIENoZWNrQm94c1xuXHRcdG9wdGlvbnMuZm9yRWFjaCgob3B0aW9uOiBEZWxldGVPcHRpb24pID0+IHtcblx0XHRcdGlmIChvcHRpb24uY29udHJvbCA9PT0gXCJjaGVja0JveFwiICYmIG9wdGlvbi50ZXh0KSB7XG5cdFx0XHRcdGl0ZW1zLnB1c2goXG5cdFx0XHRcdFx0bmV3IENoZWNrQm94KHtcblx0XHRcdFx0XHRcdHRleHQ6IG9wdGlvbi50ZXh0LFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRzZWxlY3Q6IGZ1bmN0aW9uIChvRXZlbnQ6IENoZWNrQm94JFNlbGVjdEV2ZW50KTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNoZWNrQm94ID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzZWxlY3RlZCA9IGNoZWNrQm94LmdldFNlbGVjdGVkKCk7XG5cdFx0XHRcdFx0XHRcdG9wdGlvbi5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIG9yaWdpbmFsIHJlY29yZCBzZWxlY3RlZCBvbiB0aGUgVUkuXG4gKlxuICogSW4gdGhlIGNhc2UgdGhlIGNvbnRleHQgdG8gZGVsZXRlIGlzIGFuIGFjdGl2ZSByZWNvcmQgYnV0IHRoZSBzZWxlY3RlZCBjb250ZXh0IGlzIGEgZHJhZnQgcmVjb3JkLlxuICogQHBhcmFtIG1QYXJhbWV0ZXJzIERlbGV0ZSBwYXJhbWV0ZXJzIGFuZCBpbmZvcm1hdGlvbiBvZiBzZWxlY3RlZCBjb250ZXh0cy5cbiAqIEBwYXJhbSBjb250ZXh0VG9EZWxldGUgT0RhdGFWNENvbnRleHQgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBPRGF0YVY0Q29udGV4dCBmb3IgZGVsZXRlLlxuICovXG5mdW5jdGlvbiBfZ2V0T3JpZ2luYWxTZWxlY3RlZFJlY29yZChtUGFyYW1ldGVyczogRGVsZXRlUGFyYW1ldGVycywgY29udGV4dFRvRGVsZXRlOiBPRGF0YVY0Q29udGV4dCk6IE9EYXRhVjRDb250ZXh0IHtcblx0Y29uc3QgeyBkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlIH0gPSBtUGFyYW1ldGVycztcblx0Y29uc3QgcmV0ID0gZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZT8uZmluZCgoZHJhZnRTaWJsaW5nUGFpcikgPT4gZHJhZnRTaWJsaW5nUGFpci5zaWJsaW5nSW5mby50YXJnZXRDb250ZXh0ID09PSBjb250ZXh0VG9EZWxldGUpO1xuXHRyZXR1cm4gcmV0Py5kcmFmdCA/IHJldC5kcmFmdCA6IGNvbnRleHRUb0RlbGV0ZTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHBvc3NpYmxlIG9wdGlvbnMgZm9yIGRlbGV0aW9uIG9mIHRoZSBzZWxlY3RlZCBjb250ZXh0cy5cbiAqIEBwYXJhbSBtUGFyYW1ldGVycyBEZWxldGUgcGFyYW1ldGVycyBhbmQgaW5mb3JtYXRpb24gb2Ygc2VsZWN0ZWQgY29udGV4dHMuXG4gKiBAcGFyYW0gZGlyZWN0RGVsZXRhYmxlQ29udGV4dHMgQ29udGV4dHMgdGhhdCBjYW4gYmUgZGVsZXRhYmxlIGRpcmVjdGx5LlxuICogQHBhcmFtIHJlc291cmNlTW9kZWwgUmVzb3VyY2UgbW9kZWwuXG4gKiBAcmV0dXJucyBPcHRpb25zIHRoYXQgYXJlIHBvc3NpYmxlIGZvciBzZWxlY3RlZCByZWNvcmRzLlxuICovXG5mdW5jdGlvbiBnZXRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMoXG5cdG1QYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLFxuXHRkaXJlY3REZWxldGFibGVDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbFxuKTogRGVsZXRlT3B0aW9uW10ge1xuXHRsZXQgeyBudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMsIGxvY2tlZENvbnRleHRzLCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLCB1blNhdmVkQ29udGV4dHMgfSA9IG1QYXJhbWV0ZXJzO1xuXHRjb25zdCB7IGVudGl0eVNldE5hbWUsIHBhcmVudENvbnRyb2wsIGRlc2NyaXB0aW9uIH0gPSBtUGFyYW1ldGVycztcblx0ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSA/Pz0gW107XG5cdHVuU2F2ZWRDb250ZXh0cyA/Pz0gW107XG5cdGxvY2tlZENvbnRleHRzID8/PSBbXTtcblx0ZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSA/Pz0gW107XG5cdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA/Pz0gMDtcblx0Y29uc3QgdG90YWxEZWxldGFibGUgPSBkaXJlY3REZWxldGFibGVDb250ZXh0cy5sZW5ndGggKyBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLmxlbmd0aCArIHVuU2F2ZWRDb250ZXh0cy5sZW5ndGg7XG5cdGNvbnN0IG5vbkRlbGV0YWJsZUNvbnRleHRzID0gbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIC0gKGxvY2tlZENvbnRleHRzLmxlbmd0aCArIHRvdGFsRGVsZXRhYmxlIC0gZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZS5sZW5ndGgpO1xuXHRjb25zdCBvcHRpb25zOiBEZWxldGVPcHRpb25bXSA9IFtdO1xuXG5cdGlmIChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPT09IDEgJiYgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID09PSBkaXJlY3REZWxldGFibGVDb250ZXh0cy5sZW5ndGgpIHtcblx0XHQvLyBzaW5nbGUgZGVsZXRhYmxlIGNvbnRleHRcblx0XHRjb25zdCBvVGFibGUgPSBwYXJlbnRDb250cm9sIGFzIFRhYmxlO1xuXHRcdGNvbnN0IHNLZXkgPSBvVGFibGUgJiYgKChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmcpO1xuXHRcdGxldCB0eHQ7XG5cdFx0aWYgKHNLZXkpIHtcblx0XHRcdGNvbnN0IGRlc2NyaXB0aW9uUGF0aCA9IGRlc2NyaXB0aW9uICYmIChkZXNjcmlwdGlvbiBhcyB7IHBhdGg/OiBzdHJpbmcgfSkucGF0aDtcblx0XHRcdC8vIEluIGNhc2UgdGhlIHNlbGVjdGVkIHJlY29yZCBpcyBkcmFmdChpbiBVSSkuIFRoZSBBY3RpdmUgcmVjb3JkIG5lZWRzIHRvIGJlIGRlbGV0ZWQoZGlyZWN0RGVsZXRhYmxlQ29udGV4dHMgaGFzIGFjdGl2ZSByZWNvcmQpLCBidXQgZGF0YSBpcyBub3QgcmVxdWVzdGVkIG9yIHBhcnRpYWwuIFdlIGdldCBkYXRhIGZyb20gdGhlIGRyYWZ0LlxuXHRcdFx0Y29uc3Qgb0xpbmVDb250ZXh0RGF0YSA9IF9nZXRPcmlnaW5hbFNlbGVjdGVkUmVjb3JkKG1QYXJhbWV0ZXJzLCBkaXJlY3REZWxldGFibGVDb250ZXh0c1swXSkuZ2V0T2JqZWN0KCk7XG5cdFx0XHRjb25zdCBzS2V5VmFsdWUgPSBzS2V5ID8gb0xpbmVDb250ZXh0RGF0YVtzS2V5XSA6IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IHNEZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uUGF0aCAmJiBvTGluZUNvbnRleHREYXRhW2Rlc2NyaXB0aW9uUGF0aF07XG5cdFx0XHRpZiAoc0tleVZhbHVlKSB7XG5cdFx0XHRcdGlmIChzRGVzY3JpcHRpb24gJiYgZGVzY3JpcHRpb24gJiYgc0tleSAhPT0gKGRlc2NyaXB0aW9uIGFzIHsgcGF0aD86IHN0cmluZyB9KS5wYXRoKSB7XG5cdFx0XHRcdFx0dHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVElORk9cIixcblx0XHRcdFx0XHRcdFtzS2V5VmFsdWUsIHNEZXNjcmlwdGlvbl0sXG5cdFx0XHRcdFx0XHRlbnRpdHlTZXROYW1lXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0eHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX09OTFlcIiwgW3NLZXlWYWx1ZV0sIGVudGl0eVNldE5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0eHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX1NJTkdVTEFSXCIsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUVElUTEVfU0lOR1VMQVJcIiwgdW5kZWZpbmVkLCBlbnRpdHlTZXROYW1lKTtcblx0XHR9XG5cdFx0b3B0aW9ucy5wdXNoKHtcblx0XHRcdHR5cGU6IERlbGV0ZU9wdGlvblR5cGVzLmRlbGV0YWJsZUNvbnRleHRzLFxuXHRcdFx0Y29udGV4dHM6IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLFxuXHRcdFx0dGV4dDogdHh0LFxuXHRcdFx0c2VsZWN0ZWQ6IHRydWUsXG5cdFx0XHRjb250cm9sOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5URVhUXG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0dW5TYXZlZENvbnRleHRzLmxlbmd0aCAhPT0gdG90YWxEZWxldGFibGUgJiZcblx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPiAwICYmXG5cdFx0KGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLmxlbmd0aCA+IDAgfHwgKHVuU2F2ZWRDb250ZXh0cy5sZW5ndGggPiAwICYmIGRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUubGVuZ3RoID4gMCkpXG5cdCkge1xuXHRcdGlmIChudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPiBkaXJlY3REZWxldGFibGVDb250ZXh0cy5sZW5ndGggJiYgbm9uRGVsZXRhYmxlQ29udGV4dHMgKyBsb2NrZWRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBvdGhlciB0eXBlcyBleGlzdHMgd2l0aCBwdXJlIGRlbGV0YWJsZSBvbmVzXG5cdFx0XHRsZXQgZGVsZXRhYmxlT3B0aW9uVHh0ID0gXCJcIjtcblx0XHRcdGlmICh0b3RhbERlbGV0YWJsZSA9PT0gMSkge1xuXHRcdFx0XHRkZWxldGFibGVPcHRpb25UeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX1NJTkdVTEFSX05PTl9ERUxFVEFCTEVcIixcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsZXRhYmxlT3B0aW9uVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9QTFVSQUxfTk9OX0RFTEVUQUJMRVwiLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRlbnRpdHlTZXROYW1lXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRvcHRpb25zLnVuc2hpZnQoe1xuXHRcdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cyxcblx0XHRcdFx0Y29udGV4dHM6IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHR0ZXh0OiBkZWxldGFibGVPcHRpb25UeHQsXG5cdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRjb250cm9sOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5URVhUXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gb25seSBkZWxldGFibGVcblx0XHRcdGNvbnN0IGFsbERlbGV0YWJsZVR4dCA9XG5cdFx0XHRcdHRvdGFsRGVsZXRhYmxlID09PSAxXG5cdFx0XHRcdFx0PyByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX09CSkVDVFRJVExFX1NJTkdVTEFSXCIsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSlcblx0XHRcdFx0XHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUVElUTEVfUExVUkFMXCIsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSk7XG5cdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cyxcblx0XHRcdFx0Y29udGV4dHM6IGRpcmVjdERlbGV0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHR0ZXh0OiBhbGxEZWxldGFibGVUeHQsXG5cdFx0XHRcdHNlbGVjdGVkOiB0cnVlLFxuXHRcdFx0XHRjb250cm9sOiBEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbC5URVhUXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVsZXRlRHJhZnRzQmVmb3JlQWN0aXZlc0FuZEdldEVycm9ycyhcblx0ZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmU6IE9EYXRhVjRDb250ZXh0W10sXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdGVuYWJsZVN0cmljdEhhbmRsaW5nOiBib29sZWFuXG4pOiBQcm9taXNlPHVua25vd25bXT4ge1xuXHRjb25zdCBkcmFmdEVycm9yczogdW5rbm93bltdID0gW107XG5cdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcblx0XHRkcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZS5tYXAoYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gYXdhaXQgZHJhZnQuZGVsZXRlRHJhZnQoY29udGV4dCwgbWVzc2FnZUhhbmRsZXIsIGFwcENvbXBvbmVudCwgZW5hYmxlU3RyaWN0SGFuZGxpbmcpO1xuXHRcdFx0fSBjYXRjaCAoZTogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEZFIDogY29yZSA6IERlbGV0ZUhlbHBlciA6IEVycm9yIHdoaWxlIGRpc2NhcmRpbmcgZHJhZnQgd2l0aCBwYXRoIDogJHtjb250ZXh0LmdldFBhdGgoKX1gKTtcblx0XHRcdFx0ZHJhZnRFcnJvcnMucHVzaChlKTtcblx0XHRcdH1cblx0XHR9KVxuXHQpO1xuXHRyZXR1cm4gZHJhZnRFcnJvcnM7XG59XG5cbi8qKlxuICogSW4gY2FzZSBvZiBhIHRyZWUgdGFibGUsIHdlIHNoYWxsIG5vdCBkZWxldGUgYSBjb250ZXh0IGlmIG9uZSBpZiBpdHMgYW5jZXN0b3JzIGlzIGFsc28gdG8gYmUgZGVsZXRlZC5cbiAqIFRoaXMgZnVuY3Rpb25zIGZpbHRlcnMgb3V0IHN1Y2ggY29udGV4dHMuXG4gKiBAcGFyYW0gY29udGV4dHNcbiAqIEByZXR1cm5zIFRoZSBmaWx0ZXJlZCBjb250ZXh0c1xuICovXG5mdW5jdGlvbiByZW1vdmVEZXNjZW5kYW50Q29udGV4dHMoY29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10pOiBPRGF0YVY0Q29udGV4dFtdIHtcblx0Y29uc3QgdGVtcENvbnRleHRzOiAoT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpW10gPSBbLi4uY29udGV4dHNdO1xuXHQvLyBGaWx0ZXIgb3V0IGNvbnRleHRzIHdob3NlIGFuY2VzdG9yIGlzIGFsc28gZGVsZXRlZCwgYXMgdGhleSB3aWxsIGJlIGRlbGV0ZWQgd2l0aCB0aGVpciBhbmNlc3RvclxuXHR0ZW1wQ29udGV4dHMuZm9yRWFjaCgocGFyZW50Q29udGV4dCwgcGFyZW50SW5kZXgpID0+IHtcblx0XHRpZiAocGFyZW50Q29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgY2hpbGRJbmRleCA9IHBhcmVudEluZGV4ICsgMTsgY2hpbGRJbmRleCA8IHRlbXBDb250ZXh0cy5sZW5ndGg7IGNoaWxkSW5kZXgrKykge1xuXHRcdFx0Y29uc3QgY2hpbGRDb250ZXh0ID0gdGVtcENvbnRleHRzW2NoaWxkSW5kZXhdO1xuXHRcdFx0aWYgKGNoaWxkQ29udGV4dCAmJiBwYXJlbnRDb250ZXh0LmlzQW5jZXN0b3JPZihjaGlsZENvbnRleHQpKSB7XG5cdFx0XHRcdHRlbXBDb250ZXh0c1tjaGlsZEluZGV4XT8uc2V0U2VsZWN0ZWQoZmFsc2UpO1xuXHRcdFx0XHR0ZW1wQ29udGV4dHNbY2hpbGRJbmRleF0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gdGVtcENvbnRleHRzLmZpbHRlcigoY29udGV4dCkgPT4gY29udGV4dCAhPT0gdW5kZWZpbmVkKSBhcyBPRGF0YVY0Q29udGV4dFtdO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkZWxldGVDb25maXJtSGFuZGxlcihcblx0b3B0aW9uczogRGVsZXRlT3B0aW9uW10sXG5cdG1QYXJhbWV0ZXJzOiBEZWxldGVQYXJhbWV0ZXJzLFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRkcmFmdEVuYWJsZWQ6IGJvb2xlYW4sXG5cdGJpbmRpbmdUeXBlPzogXCJUcmVlXCIgfCBcIkFuYWx5dGljYWxcIlxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IG1lc3NhZ2VIYW5kbGluZ0tleSA9IG1lc3NhZ2VIYW5kbGVyLnJlZ2lzdGVyVG9Ib2xkTWVzc2FnZXMoKTtcblx0bGV0IGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdID0gW107XG5cdHRyeSB7XG5cdFx0Y29udGV4dHMgPSBkZWxldGVIZWxwZXIuZ2V0Q29uZmlybWVkRGVsZXRhYmxlQ29udGV4dChbXSwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgbGFzdERlbGV0ZWRSb3dJbmRleCA9IGNvbnRleHRzW2NvbnRleHRzLmxlbmd0aCAtIDFdLmdldEluZGV4KCkgPz8gLTE7XG5cdFx0Y29uc3QgZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUgPSBnZXREcmFmdHNUb0RlbGV0ZUJlZm9yZUFjdGl2ZShvcHRpb25zKTtcblxuXHRcdGNvbnN0IHsgYmVmb3JlRGVsZXRlQ2FsbEJhY2sgfSA9IG1QYXJhbWV0ZXJzO1xuXHRcdGlmIChiZWZvcmVEZWxldGVDYWxsQmFjaykge1xuXHRcdFx0YXdhaXQgYmVmb3JlRGVsZXRlQ2FsbEJhY2soeyBjb250ZXh0czogY29udGV4dHMgfSk7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgZW5hYmxlU3RyaWN0SGFuZGxpbmcgPSBjb250ZXh0cy5sZW5ndGggPT09IDEgPyB0cnVlIDogZmFsc2U7XG5cdFx0XHRjb25zdCBkcmFmdEVycm9yczogdW5rbm93bltdID0gYXdhaXQgZGVsZXRlRHJhZnRzQmVmb3JlQWN0aXZlc0FuZEdldEVycm9ycyhcblx0XHRcdFx0ZHJhZnRzVG9EZWxldGVCZWZvcmVBY3RpdmUsXG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRhcHBDb21wb25lbnQsXG5cdFx0XHRcdGVuYWJsZVN0cmljdEhhbmRsaW5nXG5cdFx0XHQpO1xuXG5cdFx0XHRsZXQgY29udGV4dHNUb0RlbGV0ZSA9IGNvbnRleHRzO1xuXHRcdFx0aWYgKGJpbmRpbmdUeXBlID09PSBcIlRyZWVcIikge1xuXHRcdFx0XHRjb250ZXh0c1RvRGVsZXRlID0gcmVtb3ZlRGVzY2VuZGFudENvbnRleHRzKGNvbnRleHRzKTtcblx0XHRcdH1cblxuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdGNvbnRleHRzVG9EZWxldGUubWFwKGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCkge1xuXHRcdFx0XHRcdC8vIElmIHRoZSBjb250ZXh0IHRvIGRlbGV0ZSBpcyBhIGRyYWZ0IChpLmUuIGFjdXRhbGx5IHdlIGp1c3Qgd25hdCB0byBkaXNjYXJkKSwgd2Ugc2hvdWxkIHVzZSBkcmFmdC5kZWxldGVEcmFmdCBpbiBvcmRlciB0byB1c2UgYSBkaXNjYXJkIGFjdGlvbiBpZiBkZWZpbmVkXG5cdFx0XHRcdFx0Ly8gSG93ZXZlciwgZHJhZnQuZGVsZXRlRHJhZnQgdXNlcyBnZXRQcm9wZXJ0eSwgd2hpY2ggcmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIGNvbnRleHQgaXMgbm90IHJlYWQgZnJvbSB0aGUgYmFja2VuZC5cblx0XHRcdFx0XHQvLyBUaGlzIGNhbiBiZSB0aGUgY2FzZSwgaWYgd2UgaGF2ZSByZXRyaWV2ZWQgdGhpcyBjb250ZXh0IHZpYSB0aGUgc2libGluZyAoZS5nLiB3aGVuIGEgZHJhZnQgZXhpc3RlZCBhbmQgd2Ugd2FudCB0byBkZWxldGUgYm90aCAtIGluIHRoYXQgY2FzZVxuXHRcdFx0XHRcdC8vIHdlIGhhdmUgYWxyZWFkeSBkaXNjYXJkZWQgdGhlIGRyYWZ0IGFib3ZlLCBhbmQgbm93IG5lZWQgdG8gZGVsZXRlIHRoZSBhY3RpdmUgb25lKS4gVG8gaWRlbnRpZnkgdGhpcyBzaXR1YXRpb24sIHdlIG11c3Qgbm90IHVzZSBnZXRQcm9wZXJ0eVxuXHRcdFx0XHRcdC8vIChhcyB0aGUgY29udGV4dCBpcyBub3QgcmVhZCksIGJ1dCBjaGVjayB0aGUgc2FtZSBpbiB0aGUgbVBhcmFtZXRlcnMuXG5cdFx0XHRcdFx0Ly8gSW4gdGhpcyBjYXNlLCB3ZSBjYW4ganVzdCBkZWxldGUgdGhlIGNvbnRleHQuIEJ1dCB3ZSBzaG91bGQgbm90IHVzZSBjb250ZXh0LmRlbGV0ZSAoYWxzbyB1cGRhdGluZyBiaW5kaW5ncywgd2hpY2ggZmFpbHMgaW4gdGhlIGRlc2NyaWJlZCBzaXR1YXRpb24pLFxuXHRcdFx0XHRcdC8vIGJ1dCBtb2RlbC5kZWxldGUgKG9ubHkgc2VuZGluZyB0aGUgZGVsZXRlKS4gSW4gb3RoZXIgY2FzZXMgKGUuZy4gbm9uLWRyYWZ0KSwgdGhpcyBpcyBhbHNvIHN1ZmZpY2llbnQsIGFzIHdlIGFueXdheSB0YWtlIGNhcmUgb2Ygc2V0dGluZ1xuXHRcdFx0XHRcdC8vIGNvcnJlY3QgYmlkbmluZ3Mgd2l0aCB0aGUgbmF2aWdhdGlvbiB0cmlnZ2VyZWQgYnkgdGhlIGRlbGV0aW9uLlxuXHRcdFx0XHRcdC8vIEluIGNhc2Ugb24gYW5hbHl0aWNhbCB0YWJsZSwgd2UgYWxzbyBkb24ndCB3YW50IHRvIGNhbGwgY29udGV4dC5kZWxldGUsIGFzIGl0IHdpbGwgZmFpbC5cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHQhZHJhZnRFbmFibGVkIHx8XG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5kcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlPy5maW5kKFxuXHRcdFx0XHRcdFx0XHQoZHJhZnRXaXRoRGVsZXRhYmxlQWN0aXZlKSA9PiBkcmFmdFdpdGhEZWxldGFibGVBY3RpdmUuc2libGluZ0luZm8udGFyZ2V0Q29udGV4dCA9PT0gY29udGV4dFxuXHRcdFx0XHRcdFx0KSB8fFxuXHRcdFx0XHRcdFx0YmluZGluZ1R5cGUgPT09IFwiQW5hbHl0aWNhbFwiXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0LnJlc2V0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0TW9kZWwoKS5kZWxldGUoY29udGV4dC5nZXRDYW5vbmljYWxQYXRoKCkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZHJhZnQuZGVsZXRlRHJhZnQoY29udGV4dCwgbWVzc2FnZUhhbmRsZXIsIGFwcENvbXBvbmVudCwgZW5hYmxlU3RyaWN0SGFuZGxpbmcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0XHRkZWxldGVIZWxwZXIuYWZ0ZXJEZWxldGVQcm9jZXNzKG1QYXJhbWV0ZXJzLCBvcHRpb25zLCBjb250ZXh0cywgcmVzb3VyY2VNb2RlbCwgbGFzdERlbGV0ZWRSb3dJbmRleCk7XG5cdFx0XHRpZiAoZHJhZnRFcnJvcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHR0aHJvdyBFcnJvcihgRkUgOiBjb3JlIDogRGVsZXRlSGVscGVyIDogRXJyb3JzIG9uIGRyYWZ0IGRlbGV0ZSA6ICR7ZHJhZnRFcnJvcnN9YCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG1lc3NhZ2VIYW5kbGVyLnJlbW92ZUhvbGRLZXkobWVzc2FnZUhhbmRsaW5nS2V5KTtcblx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0aWYgKGNvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGRlbGV0ZUhlbHBlci5hZGRHZW5lcmljRGVsZXRlRmFpbHVyZU1lc3NhZ2UocmVzb3VyY2VNb2RlbCk7XG5cdFx0fVxuXHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyh7IHVuSG9sZEtleTogbWVzc2FnZUhhbmRsaW5nS2V5IH0pO1xuXHRcdC8vIHJlLXRocm93IGVycm9yIHRvIGVuZm9yY2UgcmVqZWN0aW5nIHRoZSBnZW5lcmFsIHByb21pc2Vcblx0XHR0aHJvdyBvRXJyb3I7XG5cdH1cbn1cblxuLyoqXG4gKiBBZGRpbmcgYSBnZW5lcmljIGRlbGV0ZSBmYWlsdXJlIG1lc3NhZ2UgdG8gbWVzc2FnZSBtb2RlbCBmb3IgcmVhZGFiaWxpdHkuXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbCBSZXNvdXJjZSBtb2RlbCBmb3IgbWVzc2FnZSB0ZXh0XG4gKi9cbmZ1bmN0aW9uIGFkZEdlbmVyaWNEZWxldGVGYWlsdXJlTWVzc2FnZShyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsKTogdm9pZCB7XG5cdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhcblx0XHRuZXcgTWVzc2FnZSh7XG5cdFx0XHRtZXNzYWdlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ERUxFVEVfQ0hBTkdFU0VUX0ZBSUxVUkVfTVVMVElQTEVfRVJST1JTX1RFWFRcIiksXG5cdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XHRcdHRhcmdldDogdW5kZWZpbmVkLFxuXHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdGNvZGU6IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIixcblx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ERUxFVEVfQ0hBTkdFU0VUX0ZBSUxVUkVfTVVMVElQTEVfRVJST1JTX0RFVEFJTFNfVEVYVFwiKSxcblx0XHRcdHRlY2huaWNhbERldGFpbHM6IHtcblx0XHRcdFx0ZmU6IHtcblx0XHRcdFx0XHRjaGFuZ2VTZXRQcmVUZXh0Rm9yU2luZ2xlRXJyb3I6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RFTEVURV9DSEFOR0VTRVRfRkFJTFVSRV9TSU5HTEVfRVJST1JfVEVYVFwiKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSlcblx0KTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIGEgQ29udGV4dEluZm8gdXNpbmcgaXRzIHNpYmxpbmcgY29udGV4dCwgaWYgbmVlZGVkLlxuICogUmVxdWVzdHMgdGhlIHNpYmxpbmcgY29udGV4dCBhbmQgdXBkYXRlcyB0aGUgc2libGluZ0RlbGV0YWJsZSBwcm9wZXJ0eS5cbiAqIEFsc28gbWFuYWdlcyB0aGUgY2FzZSB3aGVyZSB0aGUgbWFpbiBjb250ZXh0IGlzIGFjdGl2ZSBidXQgaGFzIGEgZHJhZnQgc2libGluZyAoLS0+IHN3YXAgYmV0d2VlbiBtYWluIGFuZCBzaWJsaW5nIGNvbnRleHQpLlxuICogQHBhcmFtIGluZm9cbiAqIEBwYXJhbSBkZWxldGFibGVQYXRoXG4gKiBAcGFyYW0gc3RhdGljRGVsZXRhYmxlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUluZm9Gcm9tU2libGluZyhpbmZvOiBDb250ZXh0SW5mbywgZGVsZXRhYmxlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLCBzdGF0aWNEZWxldGFibGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0dHJ5IHtcblx0XHRpZiAoIWluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNBY3RpdmUpIHtcblx0XHRcdC8vIENhc2UgMTogdGhlIGNvbnRleHQgaXMgYSBkcmFmdCwgd2UgbmVlZCB0byBnZXQgaXRzIGFjdGl2ZSBzaWJsaW5nXG5cdFx0XHRjb25zdCBzaWJsaW5nSW5mb3JtYXRpb24gPSBhd2FpdCBkcmFmdC5jb21wdXRlU2libGluZ0luZm9ybWF0aW9uKGluZm8uY29udGV4dCwgaW5mby5jb250ZXh0KTtcblx0XHRcdGluZm8uc2libGluZ0luZm8gPSBzaWJsaW5nSW5mb3JtYXRpb247XG5cdFx0XHRpbmZvLnNpYmxpbmdEZWxldGFibGUgPSBkZWxldGFibGVQYXRoXG5cdFx0XHRcdD8gYXdhaXQgc2libGluZ0luZm9ybWF0aW9uPy50YXJnZXRDb250ZXh0Py5yZXF1ZXN0UHJvcGVydHkoZGVsZXRhYmxlUGF0aClcblx0XHRcdFx0OiBzdGF0aWNEZWxldGFibGU7XG5cdFx0fSBlbHNlIGlmIChpbmZvLmlzQWN0aXZlICYmIGluZm8uaGFzRHJhZnQpIHtcblx0XHRcdC8vIENhc2UgMjogdGhlIGNvbnRleHQgaXMgYWN0aXZlLCB3ZSBuZWVkIHRvIGdldCBpdHMgZHJhZnQgc2libGluZ1xuXHRcdFx0Y29uc3Qgc2libGluZ0luZm9ybWF0aW9uID0gYXdhaXQgZHJhZnQuY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbihpbmZvLmNvbnRleHQsIGluZm8uY29udGV4dCk7XG5cdFx0XHRpZiAoc2libGluZ0luZm9ybWF0aW9uPy50YXJnZXRDb250ZXh0KSB7XG5cdFx0XHRcdC8vIFdlIHdlcmUgYWJsZSB0byByZXRyaWV2ZSB0aGUgZHJhZnQgc2libGluZyBmcm9tIHRoZSBhY3RpdmUgaW5zdGFuY2UgLS0+IGZhbGxiYWNrIHRvIGNhc2UgMVxuXHRcdFx0XHQvLyBieSBleGNoYW5naW5nIHRoZSBjb250ZXh0IHdpdGggdGhlIHNpYmxpbmcgY29udGV4dCBpbiB0aGUgaW5mbyBvYmplY3QuXG5cdFx0XHRcdGNvbnN0IHByb3BlcnRpZXNUb0ZldGNoID0gW1wiSXNBY3RpdmVFbnRpdHlcIiwgXCJIYXNBY3RpdmVFbnRpdHlcIl07XG5cdFx0XHRcdGlmIChkZWxldGFibGVQYXRoKSB7XG5cdFx0XHRcdFx0cHJvcGVydGllc1RvRmV0Y2gucHVzaChkZWxldGFibGVQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhd2FpdCBzaWJsaW5nSW5mb3JtYXRpb24udGFyZ2V0Q29udGV4dC5yZXF1ZXN0UHJvcGVydHkocHJvcGVydGllc1RvRmV0Y2gpO1xuXHRcdFx0XHRpbmZvLmxvY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHRpbmZvLmhhc0RyYWZ0ID0gZmFsc2U7XG5cdFx0XHRcdGluZm8uaXNBY3RpdmUgPSBmYWxzZTtcblx0XHRcdFx0aW5mby5oYXNBY3RpdmUgPSB0cnVlO1xuXHRcdFx0XHQvLyBFeGNoYW5nZSBjb250ZXh0IHdpdGggc2libGluZyBjb250ZXh0XG5cdFx0XHRcdGluZm8uc2libGluZ0luZm8gPSB7IHRhcmdldENvbnRleHQ6IGluZm8uY29udGV4dCwgcGF0aE1hcHBpbmc6IFtdIH07XG5cdFx0XHRcdGluZm8uY29udGV4dCA9IHNpYmxpbmdJbmZvcm1hdGlvbi50YXJnZXRDb250ZXh0O1xuXHRcdFx0XHQvLyBFeGNoYW5nZSBkZWxldGFibGUgd2l0aCBzaWJsaW5nIGRlbGV0YWJsZVxuXHRcdFx0XHRpbmZvLnNpYmxpbmdEZWxldGFibGUgPSBpbmZvLmRlbGV0YWJsZTtcblx0XHRcdFx0aW5mby5kZWxldGFibGUgPSBkZWxldGFibGVQYXRoID8gc2libGluZ0luZm9ybWF0aW9uLnRhcmdldENvbnRleHQuZ2V0UHJvcGVydHkoZGVsZXRhYmxlUGF0aCkgOiBzdGF0aWNEZWxldGFibGU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGNhdGNoIChfZSkge1xuXHRcdC8vIERvIG5vdGhpbmdcblx0fVxufVxuXG4vKipcbiAqIENvbGxlY3QgY29udGV4dCBpbmZvcm1hdGlvbiAoaXNEcmFmdFJvb3QsIGlzRHJhZnROb2RlLCBIYXNEcmFmdEVudGl0eSwgSXNBY3RpdmVFbnRpdHksIEhhc0FjdGl2ZUVudGl0eSwgaXNMb2NrZWQsIGlzSW5hY3RpdmUpLlxuICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB0byBldmFsdWF0ZS5cbiAqIEByZXR1cm5zIFRoZSBjb250ZXh0IGluZm8gcHJvbWlzZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0Q29udGV4dEluZm9zKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogUHJvbWlzZTxDb250ZXh0SW5mbz4ge1xuXHRjb25zdCBpc1RyYW5zaWVudCA9ICEhY29udGV4dD8uZ2V0T2JqZWN0KCk/LltcIkAkdWk1LmNvbnRleHQuaXNUcmFuc2llbnRcIl07XG5cdGNvbnN0IGlzSW5hY3RpdmUgPSBjb250ZXh0Py5pc0luYWN0aXZlKCk7XG5cdGNvbnN0IG1ldGFDb250ZXh0ID1cblx0XHRpc0luYWN0aXZlIHx8ICghaXNJbmFjdGl2ZSAmJiBpc1RyYW5zaWVudClcblx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHQ6IGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhQ29udGV4dChjb250ZXh0LmdldENhbm9uaWNhbFBhdGgoKSk7XG5cdGNvbnN0IGRlbGV0YWJsZVBhdGggPSBtZXRhQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWxldGVSZXN0cmljdGlvbnMvRGVsZXRhYmxlLyRQYXRoXCIpO1xuXHRjb25zdCBzdGF0aWNEZWxldGFibGUgPSAhZGVsZXRhYmxlUGF0aCAmJiBtZXRhQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWxldGVSZXN0cmljdGlvbnMvRGVsZXRhYmxlXCIpICE9PSBmYWxzZTtcblx0Y29uc3QgZGVsZXRhYmxlID0gZGVsZXRhYmxlUGF0aCA/IGNvbnRleHQuZ2V0UHJvcGVydHkoZGVsZXRhYmxlUGF0aCkgOiBzdGF0aWNEZWxldGFibGU7XG5cblx0Y29uc3QgaW5mbzogQ29udGV4dEluZm8gPSB7XG5cdFx0Y29udGV4dDogY29udGV4dCxcblx0XHRpc0RyYWZ0Um9vdDogISFtZXRhQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiKSxcblx0XHRpc0RyYWZ0Tm9kZTogISFtZXRhQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZVwiKSxcblx0XHRpc0FjdGl2ZTogdHJ1ZSxcblx0XHRoYXNBY3RpdmU6IGZhbHNlLFxuXHRcdGhhc0RyYWZ0OiBmYWxzZSxcblx0XHRsb2NrZWQ6IGZhbHNlLFxuXHRcdC8vIGZvciBhbiBlbXB0eVJvdyAoaW5hY3RpdmUgY29udGV4dCkgaXQncyBhbHdheXMgZGVsZXRhYmxlIGFzIGxvbmcgYXMgdGhlIGNvbnRleHQga2VwdCBpbmFjdGl2ZS4uXG5cdFx0ZGVsZXRhYmxlOiBkZWxldGFibGUsXG5cdFx0c2libGluZ0luZm86IHVuZGVmaW5lZCxcblx0XHRzaWJsaW5nRGVsZXRhYmxlOiBmYWxzZSxcblx0XHRpc0luYWN0aXZlQ29udGV4dDogISFjb250ZXh0LmlzSW5hY3RpdmUoKVxuXHR9O1xuXHRpZiAoIWNvbnRleHQuaXNJbmFjdGl2ZSgpICYmIGluZm8uaXNEcmFmdFJvb3QpIHtcblx0XHRjb25zdCBjb250ZXh0RGF0YSA9IGNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0aW5mby5sb2NrZWQgPSAhIWNvbnRleHREYXRhLkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhPy5JblByb2Nlc3NCeVVzZXI7XG5cdFx0aW5mby5oYXNEcmFmdCA9IGNvbnRleHREYXRhLkhhc0RyYWZ0RW50aXR5O1xuXHRcdGluZm8uaXNBY3RpdmUgPSBjb250ZXh0RGF0YS5Jc0FjdGl2ZUVudGl0eTtcblx0XHRpbmZvLmhhc0FjdGl2ZSA9IGNvbnRleHREYXRhLkhhc0FjdGl2ZUVudGl0eTtcblx0XHRhd2FpdCB1cGRhdGVJbmZvRnJvbVNpYmxpbmcoaW5mbywgZGVsZXRhYmxlUGF0aCwgc3RhdGljRGVsZXRhYmxlKTtcblx0fVxuXHRyZXR1cm4gaW5mbztcbn1cblxuLy8gVGFibGUgUnVudGltZSBIZWxwZXJzOlxuXG4vKiByZWZyZXNoZXMgZGF0YSBpbiBpbnRlcm5hbCBtb2RlbCByZWxldmFudCBmb3IgZW5hYmxlbWVudCBvZiBkZWxldGUgYnV0dG9uIGFjY29yZGluZyB0byBzZWxlY3RlZCBjb250ZXh0c1xucmVsZXZhbnQgZGF0YSBhcmU6IGRlbGV0YWJsZUNvbnRleHRzLCBkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLCBkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlLCB1blNhdmVkQ29udGV4dHMsIGRlbGV0ZUVuYWJsZWRcbm5vdCByZWxldmFudDogbG9ja2VkQ29udGV4dHNcbiovXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyhcblx0aW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRzZWxlY3RlZENvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgY29udGV4dEluZm9zID0gYXdhaXQgUHJvbWlzZS5hbGwoc2VsZWN0ZWRDb250ZXh0cy5tYXAoZ2V0Q29udGV4dEluZm9zKSk7XG5cblx0Y29uc3QgYnVja2V0cyA9IFtcblx0XHR7XG5cdFx0XHRrZXk6IFwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZVwiLFxuXHRcdFx0Ly8gb25seSBmb3IgZHJhZnQgcm9vdDogSW4gdGhhdCBjYXNlLCB0aGUgZGVsZXRlIHJlcXVlc3QgbmVlZHMgdG8gYmUgc2VudCBmb3IgdGhlIGFjdGl2ZSAoaS5lLiB0aGUgc2libGluZyksXG5cdFx0XHQvLyB3aGlsZSBpbiBkcmFmdCBub2RlLCB0aGUgZGVsZXRlIHJlcXVlc3QgbmVlZHMgdG8gYmUgc2VuZCBmb3IgdGhlIGRyYWZ0IGl0c2VsZlxuXHRcdFx0dmFsdWU6IGNvbnRleHRJbmZvcy5maWx0ZXIoXG5cdFx0XHRcdChpbmZvKSA9PiAhaW5mby5pc0luYWN0aXZlQ29udGV4dCAmJiBpbmZvLmlzRHJhZnRSb290ICYmICFpbmZvLmlzQWN0aXZlICYmIGluZm8uaGFzQWN0aXZlICYmIGluZm8uc2libGluZ0RlbGV0YWJsZVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiBcImRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmVcIixcblx0XHRcdC8vIG9ubHkgZm9yIGRyYWZ0IHJvb3Q6IEZvciBkcmFmdCBub2RlLCB3ZSBvbmx5IHJlbHkgb24gaW5mb3JtYXRpb24gaW4gdGhlIGRyYWZ0IGl0c2VsZiAobm90IGl0cyBhY3RpdmUgc2libGluZylcblx0XHRcdC8vIGFwcGxpY2F0aW9uIGhhcyB0byB0YWtlIGNhcmUgdG8gc2V0IHRoaXMgY29ycmVjdGx5IChpbiBjYXNlIGFjdGl2ZSBzaWJsaW5nIG11c3Qgbm90IGJlIGRlbGV0YWJsZSwgYWN0aXZhdGlvblxuXHRcdFx0Ly8gb2YgZHJhZnQgd2l0aCBkZWxldGVkIG5vZGUgd291bGQgYWxzbyBkZWx0ZSBhY3RpdmUgc2libGluZyA9PiBkZWxldGlvbiBvZiBkcmFmdCBub2RlIHRvIGJlIGF2b2lkZWQpXG5cdFx0XHR2YWx1ZTogY29udGV4dEluZm9zLmZpbHRlcihcblx0XHRcdFx0KGluZm8pID0+ICFpbmZvLmlzSW5hY3RpdmVDb250ZXh0ICYmIGluZm8uaXNEcmFmdFJvb3QgJiYgIWluZm8uaXNBY3RpdmUgJiYgaW5mby5oYXNBY3RpdmUgJiYgIWluZm8uc2libGluZ0RlbGV0YWJsZVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiBcImxvY2tlZENvbnRleHRzXCIsXG5cdFx0XHR2YWx1ZTogY29udGV4dEluZm9zLmZpbHRlcihcblx0XHRcdFx0KGluZm8pID0+ICFpbmZvLmlzSW5hY3RpdmVDb250ZXh0ICYmIGluZm8uaXNEcmFmdFJvb3QgJiYgaW5mby5pc0FjdGl2ZSAmJiBpbmZvLmhhc0RyYWZ0ICYmIGluZm8ubG9ja2VkXG5cdFx0XHQpXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IFwidW5TYXZlZENvbnRleHRzXCIsXG5cdFx0XHR2YWx1ZTogY29udGV4dEluZm9zLmZpbHRlcihcblx0XHRcdFx0KGluZm8pID0+ICFpbmZvLmlzSW5hY3RpdmVDb250ZXh0ICYmIGluZm8uaXNEcmFmdFJvb3QgJiYgaW5mby5pc0FjdGl2ZSAmJiBpbmZvLmhhc0RyYWZ0ICYmICFpbmZvLmxvY2tlZFxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0Ly8gbm9uLWRyYWZ0L3N0aWNreSBhbmQgZGVsZXRhYmxlXG5cdFx0Ly8gYWN0aXZlIGRyYWZ0IHJvb3Qgd2l0aG91dCBhbnkgZHJhZnQgYW5kIGRlbGV0YWJsZVxuXHRcdC8vIGNyZWF0ZWQgZHJhZnQgcm9vdCAocmVnYXJkbGVzcyBvZiBkZWxldGFibGUpXG5cdFx0Ly8gZHJhZnQgbm9kZSBvbmx5IGFjY29yZGluZyB0byBpdHMgYW5ub3RhdGlvblxuXHRcdHtcblx0XHRcdGtleTogXCJkZWxldGFibGVDb250ZXh0c1wiLFxuXHRcdFx0dmFsdWU6IGNvbnRleHRJbmZvcy5maWx0ZXIoXG5cdFx0XHRcdChpbmZvKSA9PlxuXHRcdFx0XHRcdGluZm8uaXNJbmFjdGl2ZUNvbnRleHQgfHxcblx0XHRcdFx0XHQoIWluZm8uaXNEcmFmdFJvb3QgJiYgIWluZm8uaXNEcmFmdE5vZGUgJiYgaW5mby5kZWxldGFibGUpIHx8XG5cdFx0XHRcdFx0KGluZm8uaXNEcmFmdFJvb3QgJiYgaW5mby5pc0FjdGl2ZSAmJiAhaW5mby5oYXNEcmFmdCAmJiBpbmZvLmRlbGV0YWJsZSkgfHxcblx0XHRcdFx0XHQoaW5mby5pc0RyYWZ0Um9vdCAmJiAhaW5mby5pc0FjdGl2ZSAmJiAhaW5mby5oYXNBY3RpdmUpIHx8IC8vIHdlIHNheSB0aGF0IGRyYWZ0IHdpdGggYW4gYWN0aXZlIHZlcnNpb24gYXJlIG5vdCBkZWxldGFibGUgdG8gZ28gdGhyb3VnaCBhbm90aGVyIG1lY2hhbmlzbSB2aWEgdGhlIHNlbGVjdGVkIGNvbnRleHRzXG5cdFx0XHRcdFx0KGluZm8uaXNEcmFmdE5vZGUgJiYgaW5mby5kZWxldGFibGUpXG5cdFx0XHQpXG5cdFx0fVxuXHRdO1xuXHRjb25zdCBjb250ZXh0UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiXCIgOiBcImNvbnRleHRtZW51L1wiO1xuXHRmb3IgKGNvbnN0IHsga2V5LCB2YWx1ZSB9IG9mIGJ1Y2tldHMpIHtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdGNvbnRleHRQYXRoICsga2V5LFxuXHRcdFx0Ly8gQ3VycmVudGx5LCBidWNrZXQgZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSBoYXMgYSBkaWZmZXJlbnQgc3RydWN0dXJlIChjb250YWluaW5nIGFsc28gc2libGluZyBpbmZvcm1hdGlvbiwgd2hpY2ggaXMgdXNlZFxuXHRcdFx0Ly8gaW4gY2FzZSBvZiBkZWxldGlvbikuIFBvc3NpYmxlIGltcHJvdmVtZW50OiBSZWFkIHNpYmxpbmcgaW5mb3JtYXRpb24gb25seSB3aGVuIG5lZWRlZCwgYW5kIGJ1aWxkIGFsbCBidWNrZXRzIHdpdGggc2FtZVxuXHRcdFx0Ly8gc3RydWN0dXJlLiBIb3dldmVyLCBpbiB0aGF0IGNhc2Ugc2libGluZ0luZm9ybWF0aW9uIG1pZ2h0IG5lZWQgdG8gYmUgcmVhZCB0d2ljZSAoaWYgYWxyZWFkeSBuZWVkZWQgZm9yIGJ1dHRvbiBlbmFibGVtZW50KSxcblx0XHRcdC8vIHRodXMgYSBidWZmZXIgcHJvYmFibHkgd291bGQgbWFrZSBzZW5zZS5cblx0XHRcdHZhbHVlLm1hcCgoaW5mbykgPT5cblx0XHRcdFx0a2V5ID09PSBcImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVcIiA/IHsgZHJhZnQ6IGluZm8uY29udGV4dCwgc2libGluZ0luZm86IGluZm8uc2libGluZ0luZm8gfSA6IGluZm8uY29udGV4dFxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cbn1cblxuY29uc3QgZGVsZXRlSGVscGVyID0ge1xuXHRnZXROb25EZWxldGFibGVUZXh0LFxuXHRkZWxldGVDb25maXJtSGFuZGxlcixcblx0Z2V0T3B0aW9uc0ZvckRlbGV0YWJsZVRleHRzLFxuXHR1cGRhdGVDb250ZW50Rm9yRGVsZXRlRGlhbG9nLFxuXHR1cGRhdGVEcmFmdE9wdGlvbnNGb3JEZWxldGFibGVUZXh0cyxcblx0Z2V0Q29uZmlybWVkRGVsZXRhYmxlQ29udGV4dCxcblx0Z2V0TG9ja2VkT2JqZWN0c1RleHQsXG5cdGdldFVuc2F2ZWRDb250ZXh0c1RleHQsXG5cdGdldE5vbkRlbGV0YWJsZUFjdGl2ZXNPZkRyYWZ0c1RleHQsXG5cdGFmdGVyRGVsZXRlUHJvY2Vzcyxcblx0dXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMsXG5cdERlbGV0ZU9wdGlvblR5cGVzLFxuXHREZWxldGVEaWFsb2dDb250ZW50Q29udHJvbCxcblx0c2V0Rm9jdXNBZnRlckRlbGV0ZSxcblx0Z2V0Q29udGV4dEluZm9zLFxuXHRhZGRHZW5lcmljRGVsZXRlRmFpbHVyZU1lc3NhZ2UsXG5cdHJlbW92ZURlc2NlbmRhbnRDb250ZXh0c1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZGVsZXRlSGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O01Bb0JLQSxpQkFBaUIsMEJBQWpCQSxpQkFBaUI7SUFBakJBLGlCQUFpQjtJQUFqQkEsaUJBQWlCO0lBQWpCQSxpQkFBaUI7SUFBakJBLGlCQUFpQjtJQUFqQkEsaUJBQWlCO0lBQUEsT0FBakJBLGlCQUFpQjtFQUFBLEVBQWpCQSxpQkFBaUI7RUFBQSxJQVFqQkMsMEJBQTBCLDBCQUExQkEsMEJBQTBCO0lBQTFCQSwwQkFBMEI7SUFBMUJBLDBCQUEwQjtJQUFBLE9BQTFCQSwwQkFBMEI7RUFBQSxFQUExQkEsMEJBQTBCO0VBOEQvQixTQUFTQyxvQkFBb0JBLENBQzVCQyxvQkFBMEMsRUFDMUNDLElBQXVCLEVBQ3ZCQyxnQkFBa0MsRUFDbENDLGdCQUFrQyxFQUNmO0lBQ25CLE1BQU1DLG1CQUFxQyxHQUFHLENBQUMsR0FBR0YsZ0JBQWdCLENBQUM7SUFDbkVDLGdCQUFnQixDQUFDRSxPQUFPLENBQUVDLE9BQXVCLElBQUs7TUFDckQsTUFBTUMsR0FBRyxHQUFHSCxtQkFBbUIsQ0FBQ0ksT0FBTyxDQUFDRixPQUFPLENBQUM7TUFDaEQsSUFBSUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQ2ZILG1CQUFtQixDQUFDSyxNQUFNLENBQUNGLEdBQUcsRUFBRSxDQUFDLENBQUM7TUFDbkM7SUFDRCxDQUFDLENBQUM7SUFDRlAsb0JBQW9CLENBQUNVLFdBQVcsQ0FBQ1QsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUUxQyxPQUFPRyxtQkFBbUI7RUFDM0I7RUFFQSxTQUFTTyw4QkFBOEJBLENBQUNYLG9CQUEwQyxFQUFFWSxNQUFvQixFQUFRO0lBQy9HLElBQUlWLGdCQUFnQixHQUFJRixvQkFBb0IsQ0FBQ2EsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQXlCLEVBQUU7SUFFdkcsSUFBSUQsTUFBTSxDQUFDWCxJQUFJLEtBQUtKLGlCQUFpQixDQUFDaUIsaUJBQWlCLEVBQUU7TUFDeERaLGdCQUFnQixHQUFHSCxvQkFBb0IsQ0FDdENDLG9CQUFvQixFQUNwQkgsaUJBQWlCLENBQUNpQixpQkFBaUIsRUFDbkNaLGdCQUFnQixFQUNoQkYsb0JBQW9CLENBQUNhLFdBQVcsQ0FBQ2hCLGlCQUFpQixDQUFDaUIsaUJBQWlCLENBQUMsSUFBSSxFQUMxRSxDQUFDO01BRUQsTUFBTUMsaUJBQWlCLEdBQUdmLG9CQUFvQixDQUFDYSxXQUFXLENBQUNoQixpQkFBaUIsQ0FBQ21CLHlCQUF5QixDQUFDLElBQUksRUFBRTtNQUM3RyxNQUFNQyxNQUFNLEdBQUdGLGlCQUFpQixDQUFDRyxHQUFHLENBQUVDLFdBQTZCLElBQUs7UUFDdkUsT0FBT0EsV0FBVyxDQUFDQyxLQUFLO01BQ3pCLENBQUMsQ0FBQztNQUNGbEIsZ0JBQWdCLEdBQUdILG9CQUFvQixDQUN0Q0Msb0JBQW9CLEVBQ3BCSCxpQkFBaUIsQ0FBQ21CLHlCQUF5QixFQUMzQ2QsZ0JBQWdCLEVBQ2hCZSxNQUNELENBQUM7SUFDRixDQUFDLE1BQU07TUFDTixNQUFNZCxnQkFBZ0IsR0FBR0gsb0JBQW9CLENBQUNhLFdBQVcsQ0FBQ0QsTUFBTSxDQUFDWCxJQUFJLENBQUMsSUFBSSxFQUFFO01BQzVFQyxnQkFBZ0IsR0FBR0gsb0JBQW9CLENBQUNDLG9CQUFvQixFQUFFWSxNQUFNLENBQUNYLElBQUksRUFBRUMsZ0JBQWdCLEVBQUVDLGdCQUFnQixDQUFDO0lBQy9HO0lBQ0FILG9CQUFvQixDQUFDVSxXQUFXLENBQUMsa0JBQWtCLEVBQUVSLGdCQUFnQixDQUFDO0lBQ3RFRixvQkFBb0IsQ0FBQ1UsV0FBVyxDQUFDLDBCQUEwQixFQUFFUixnQkFBZ0IsQ0FBQ21CLE1BQU0sQ0FBQztFQUN0RjtFQUVBLFNBQVNDLGtCQUFrQkEsQ0FDMUJDLFVBQTRCLEVBQzVCQyxPQUF1QixFQUN2QkMsUUFBMEIsRUFDMUJDLGFBQTRCLEVBQzVCQyxtQkFBMkIsRUFDcEI7SUFDUCxNQUFNO01BQUUzQixvQkFBb0I7TUFBRTRCO0lBQWMsQ0FBQyxHQUFHTCxVQUFVO0lBQzFELElBQUl2QixvQkFBb0IsRUFBRTtNQUN6QixJQUFJQSxvQkFBb0IsQ0FBQ2EsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJZ0IsU0FBUyxFQUFFO1FBQ25FTCxPQUFPLENBQUNuQixPQUFPLENBQUVPLE1BQU0sSUFBSztVQUMzQjtVQUNBLElBQUlBLE1BQU0sQ0FBQ2tCLFFBQVEsRUFBRTtZQUNwQm5CLDhCQUE4QixDQUFDWCxvQkFBb0IsRUFBRVksTUFBTSxDQUFDO1VBQzdEO1FBQ0QsQ0FBQyxDQUFDO01BQ0g7TUFDQTtNQUNBWixvQkFBb0IsQ0FBQ1UsV0FBVyxDQUMvQixlQUFlLEVBQ2ZjLE9BQU8sQ0FBQ08sSUFBSSxDQUFFbkIsTUFBTSxJQUFLLENBQUNBLE1BQU0sQ0FBQ2tCLFFBQVEsQ0FDMUMsQ0FBQztJQUNGO0lBRUEsTUFBTUUsaUJBQWlCLEdBQUdULFVBQVUsQ0FBQ1UsYUFBYSxFQUFFQyxXQUFXLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxLQUFLLDRCQUE0QjtJQUM1RyxNQUFNQyxlQUFlLEdBQUcsQ0FBQ2IsVUFBVSxDQUFDVSxhQUFhLElBQUksQ0FBQ0QsaUJBQWlCO0lBRXZFLElBQUlJLGVBQWUsSUFBSWIsVUFBVSxDQUFDYyxVQUFVLEtBQUssSUFBSSxFQUFFO01BQ3RELE1BQU1DLFVBQVUsR0FDZmIsUUFBUSxDQUFDSixNQUFNLEtBQUssQ0FBQyxHQUFHLDRDQUE0QyxHQUFHLDBDQUEwQztNQUNsSGtCLFlBQVksQ0FBQ0MsSUFBSSxDQUFDZCxhQUFhLENBQUNlLE9BQU8sQ0FBQ0gsVUFBVSxFQUFFVCxTQUFTLEVBQUVELGFBQWEsQ0FBQyxDQUFDO0lBQy9FOztJQUVBO0lBQ0EsSUFBSUwsVUFBVSxDQUFDVSxhQUFhLElBQUksQ0FBQ0QsaUJBQWlCLEVBQUU7TUFDbkRVLFlBQVksQ0FBQ0MsbUJBQW1CLENBQUNwQixVQUFVLENBQUNVLGFBQWEsRUFBV1IsUUFBUSxDQUFDSixNQUFNLEVBQUVNLG1CQUFtQixDQUFDO0lBQzFHO0lBRUEsSUFBSUYsUUFBUSxFQUFFSixNQUFNLEVBQUU7TUFDckJJLFFBQVEsQ0FBQ3BCLE9BQU8sQ0FBRUMsT0FBTyxJQUFLO1FBQzdCLE1BQU1zQyxXQUFXLEdBQUd0QyxPQUFPLENBQUN1QyxPQUFPLENBQUMsQ0FBQztRQUNyQyxJQUFJRCxXQUFXLElBQUl0QyxPQUFPLENBQUN3QyxRQUFRLENBQUMsQ0FBQyxFQUFFO1VBQ3RDLE1BQU1DLG9CQUFvQixHQUFHekMsT0FBTyxDQUFDd0MsUUFBUSxDQUFDLENBQUMsQ0FBQ0UsdUJBQXVCLENBQUMsQ0FBQztVQUN6RSxNQUFNQyxnQkFBZ0IsR0FBR0Ysb0JBQW9CLENBQUNHLFNBQVMsQ0FBQ04sV0FBVyxDQUFDO1VBQ3BFLElBQUlLLGdCQUFnQixJQUFJLE9BQU9BLGdCQUFnQixLQUFLLFFBQVEsRUFBRTtZQUM3RCxLQUFLLE1BQU1FLEdBQUcsSUFBSUMsTUFBTSxDQUFDQyxJQUFJLENBQUNKLGdCQUFnQixDQUFDLEVBQUU7Y0FDaEQsSUFBSUUsR0FBRyxDQUFDRyxRQUFRLENBQUMsd0JBQXdCLENBQUMsRUFBRTtnQkFDM0MsT0FBT0wsZ0JBQWdCLENBQUNFLEdBQUcsQ0FBQztjQUM3QjtZQUNEO1lBQ0FKLG9CQUFvQixDQUFDckMsV0FBVyxDQUFDa0MsV0FBVyxFQUFFSyxnQkFBZ0IsQ0FBQztVQUNoRTtRQUNEO01BQ0QsQ0FBQyxDQUFDO0lBQ0g7RUFDRDtFQUVBLGVBQWVOLG1CQUFtQkEsQ0FBQ1ksS0FBWSxFQUFFQyxnQkFBd0IsRUFBRTdCLG1CQUEyQixFQUFpQjtJQUN0SCxNQUFNOEIsY0FBYyxHQUFHRixLQUFLLENBQUNHLGFBQWEsR0FBRyxDQUFDLEVBQUVDLFFBQVEsQ0FBQyxDQUFDO0lBQzFELE1BQU1DLHNCQUFzQixHQUFHLENBQUNILGNBQWMsSUFBSSxDQUFDLElBQUlELGdCQUFnQjtJQUN2RSxJQUFJSyxpQkFBaUI7SUFFckIsSUFBSWxDLG1CQUFtQixLQUFLLENBQUMsQ0FBQyxJQUFJOEIsY0FBYyxLQUFLNUIsU0FBUyxJQUFJNEIsY0FBYyxHQUFHLENBQUMsRUFBRTtNQUNyRjtNQUNBLElBQUk5QixtQkFBbUIsS0FBS2lDLHNCQUFzQixHQUFHLENBQUMsRUFBRTtRQUN2REMsaUJBQWlCLEdBQUdKLGNBQWMsR0FBRyxDQUFDO1FBQ3RDO01BQ0QsQ0FBQyxNQUFNO1FBQ05JLGlCQUFpQixHQUFHbEMsbUJBQW1CLEdBQUc2QixnQkFBZ0IsR0FBRyxDQUFDO01BQy9EO01BQ0EsTUFBTUQsS0FBSyxDQUFDTyxRQUFRLENBQUNELGlCQUFpQixFQUFFLEtBQUssQ0FBQztJQUMvQyxDQUFDLE1BQU07TUFDTjtNQUNBTixLQUFLLENBQUNRLEtBQUssQ0FBQyxDQUFDO0lBQ2Q7RUFDRDtFQUVBLFNBQVNDLG9CQUFvQkEsQ0FBQ0MsYUFBNkIsRUFBVTtJQUNwRSxNQUFNQyxjQUFjLEdBQUdELGFBQWEsQ0FBQ2YsU0FBUyxDQUFDLENBQUMsQ0FBQyx5QkFBeUIsQ0FBZ0M7SUFDMUcsT0FBUWdCLGNBQWMsSUFBSUEsY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUssRUFBRTtFQUNuRTtFQUVBLFNBQVNDLG9CQUFvQkEsQ0FBQ3pDLGFBQTRCLEVBQUUwQyx3QkFBZ0MsRUFBRUMsY0FBZ0MsRUFBVTtJQUN2SSxJQUFJQyxNQUFNLEdBQUcsRUFBRTtJQUVmLElBQUlGLHdCQUF3QixLQUFLLENBQUMsSUFBSUMsY0FBYyxDQUFDaEQsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUNsRTtNQUNBLE1BQU1rRCxVQUFVLEdBQUdQLG9CQUFvQixDQUFDSyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDMURDLE1BQU0sR0FBRzVDLGFBQWEsQ0FBQ2UsT0FBTyxDQUFDLCtEQUErRCxFQUFFLENBQUM4QixVQUFVLENBQUMsQ0FBQztJQUM5RyxDQUFDLE1BQU0sSUFBSUYsY0FBYyxDQUFDaEQsTUFBTSxJQUFJLENBQUMsRUFBRTtNQUN0QyxNQUFNa0QsVUFBVSxHQUFHUCxvQkFBb0IsQ0FBQ0ssY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzFEQyxNQUFNLEdBQUc1QyxhQUFhLENBQUNlLE9BQU8sQ0FBQywyRUFBMkUsRUFBRSxDQUMzRzJCLHdCQUF3QixFQUN4QkcsVUFBVSxDQUNWLENBQUM7SUFDSCxDQUFDLE1BQU0sSUFBSUYsY0FBYyxDQUFDaEQsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUNyQ2lELE1BQU0sR0FBRzVDLGFBQWEsQ0FBQ2UsT0FBTyxDQUFDLDRFQUE0RSxFQUFFLENBQzVHNEIsY0FBYyxDQUFDaEQsTUFBTSxFQUNyQitDLHdCQUF3QixDQUN4QixDQUFDO0lBQ0g7SUFFQSxPQUFPRSxNQUFNO0VBQ2Q7RUFFQSxTQUFTRSxrQ0FBa0NBLENBQUM5QyxhQUE0QixFQUFFK0MsY0FBc0IsRUFBRUMsY0FBc0IsRUFBVTtJQUNqSSxJQUFJSixNQUFNLEdBQUcsRUFBRTtJQUVmLElBQUlJLGNBQWMsS0FBS0QsY0FBYyxFQUFFO01BQ3RDLElBQUlBLGNBQWMsS0FBSyxDQUFDLEVBQUU7UUFDekJILE1BQU0sR0FBRzVDLGFBQWEsQ0FBQ2UsT0FBTyxDQUFDLHdFQUF3RSxDQUFDO01BQ3pHLENBQUMsTUFBTTtRQUNONkIsTUFBTSxHQUFHNUMsYUFBYSxDQUFDZSxPQUFPLENBQUMseUVBQXlFLENBQUM7TUFDMUc7SUFDRCxDQUFDLE1BQU0sSUFBSWdDLGNBQWMsS0FBSyxDQUFDLEVBQUU7TUFDaENILE1BQU0sR0FBRzVDLGFBQWEsQ0FBQ2UsT0FBTyxDQUFDLG1FQUFtRSxDQUFDO0lBQ3BHLENBQUMsTUFBTTtNQUNONkIsTUFBTSxHQUFHNUMsYUFBYSxDQUFDZSxPQUFPLENBQUMsb0VBQW9FLENBQUM7SUFDckc7SUFFQSxPQUFPNkIsTUFBTTtFQUNkO0VBRUEsZUFBZUsscUJBQXFCQSxDQUFDQyxjQUE4QixFQUFtQjtJQUNyRixNQUFNQyxZQUFZLEdBQUdELGNBQWMsQ0FBQzFCLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBNEM7SUFDbkgsSUFBSSxDQUFDMkIsWUFBWSxFQUFFQyw0QkFBNEIsSUFBSSxDQUFDRCxZQUFZLEVBQUVFLGlCQUFpQixFQUFFO01BQ3BGLE1BQU1ILGNBQWMsQ0FBQ0ksZUFBZSxDQUFDLENBQ3BDLHNEQUFzRCxFQUN0RCwyQ0FBMkMsQ0FDM0MsQ0FBQztJQUNIO0lBQ0EsTUFBTUMsU0FBUyxHQUFHTCxjQUFjLENBQUMxQixTQUFTLENBQUMseUJBQXlCLENBQTRDO0lBQ2hILE9BQU8rQixTQUFTLEVBQUVILDRCQUE0QixJQUFJRyxTQUFTLEVBQUVGLGlCQUFpQixJQUFJLEVBQUU7RUFDckY7RUFFQSxlQUFlRyxzQkFBc0JBLENBQ3BDeEQsYUFBNEIsRUFDNUIwQyx3QkFBZ0MsRUFDaENlLGVBQWlDLEVBQ2pDVCxjQUFzQixFQUNJO0lBQzFCLElBQUlVLE9BQU8sR0FBRyxFQUFFO01BQ2ZDLFNBQVMsR0FBRyxFQUFFO01BQ2RDLGdCQUFnQixHQUFHLEtBQUs7SUFDekIsSUFBSWxCLHdCQUF3QixLQUFLLENBQUMsSUFBSWUsZUFBZSxDQUFDOUQsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUNuRTtNQUNBLE1BQU1rRSxpQkFBaUIsR0FBRyxNQUFNWixxQkFBcUIsQ0FBQ1EsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3pFQyxPQUFPLEdBQUcxRCxhQUFhLENBQUNlLE9BQU8sQ0FBQywwREFBMEQsRUFBRSxDQUFDOEMsaUJBQWlCLENBQUMsQ0FBQztNQUNoSEQsZ0JBQWdCLEdBQUcsSUFBSTtJQUN4QixDQUFDLE1BQU0sSUFBSWxCLHdCQUF3QixLQUFLZSxlQUFlLENBQUM5RCxNQUFNLEVBQUU7TUFDL0Q7TUFDQStELE9BQU8sR0FBRzFELGFBQWEsQ0FBQ2UsT0FBTyxDQUFDLDJFQUEyRSxDQUFDO01BQzVHNkMsZ0JBQWdCLEdBQUcsSUFBSTtJQUN4QixDQUFDLE1BQU0sSUFBSVosY0FBYyxLQUFLUyxlQUFlLENBQUM5RCxNQUFNLEVBQUU7TUFDckQ7TUFDQSxJQUFJOEQsZUFBZSxDQUFDOUQsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNqQyxNQUFNa0UsaUJBQWlCLEdBQUcsTUFBTVoscUJBQXFCLENBQUNRLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RUMsT0FBTyxHQUFHMUQsYUFBYSxDQUFDZSxPQUFPLENBQUMsa0ZBQWtGLEVBQUUsQ0FDbkg4QyxpQkFBaUIsQ0FDakIsQ0FBQztNQUNILENBQUMsTUFBTTtRQUNOSCxPQUFPLEdBQUcxRCxhQUFhLENBQUNlLE9BQU8sQ0FBQyxnRkFBZ0YsQ0FBQztNQUNsSDtNQUNBNkMsZ0JBQWdCLEdBQUcsSUFBSTtJQUN4QixDQUFDLE1BQU0sSUFBSVosY0FBYyxHQUFHUyxlQUFlLENBQUM5RCxNQUFNLEVBQUU7TUFDbkQ7TUFDQSxJQUFJOEQsZUFBZSxDQUFDOUQsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNqQyxNQUFNa0UsaUJBQWlCLEdBQUcsTUFBTVoscUJBQXFCLENBQUNRLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RUUsU0FBUyxHQUFHM0QsYUFBYSxDQUFDZSxPQUFPLENBQUMsc0ZBQXNGLEVBQUUsQ0FDekg4QyxpQkFBaUIsQ0FDakIsQ0FBQztNQUNILENBQUMsTUFBTTtRQUNORixTQUFTLEdBQUczRCxhQUFhLENBQUNlLE9BQU8sQ0FBQyxvRkFBb0YsQ0FBQztNQUN4SDtJQUNEO0lBRUEsT0FBTztNQUFFMkMsT0FBTztNQUFFQyxTQUFTO01BQUVDO0lBQWlCLENBQUM7RUFDaEQ7RUFFQSxTQUFTRSxtQkFBbUJBLENBQzNCQyxXQUE2QixFQUM3QkMseUJBQWlDLEVBQ2pDaEUsYUFBNEIsRUFDVDtJQUNuQixNQUFNO01BQUUwQyx3QkFBd0I7TUFBRXhDLGFBQWE7TUFBRXlDLGNBQWMsR0FBRyxFQUFFO01BQUVzQiw0QkFBNEIsR0FBRztJQUFHLENBQUMsR0FBR0YsV0FBVztJQUN2SCxNQUFNRyxvQkFBb0IsR0FDekJ4Qix3QkFBd0IsSUFBS0MsY0FBYyxDQUFDaEQsTUFBTSxHQUFHcUUseUJBQXlCLEdBQUdDLDRCQUE0QixDQUFDdEUsTUFBTSxDQUFDO0lBQ3RILElBQUlpRCxNQUFNLEdBQUcsRUFBRTtJQUVmLElBQ0NzQixvQkFBb0IsR0FBRyxDQUFDLEtBQ3ZCRix5QkFBeUIsS0FBSyxDQUFDLElBQUlDLDRCQUE0QixDQUFDdEUsTUFBTSxLQUFLcUUseUJBQXlCLENBQUMsRUFDckc7TUFDRDtNQUNBO01BQ0EsSUFBSXJCLGNBQWMsQ0FBQ2hELE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDOUI7UUFDQSxJQUFJdUUsb0JBQW9CLEtBQUssQ0FBQyxFQUFFO1VBQy9CdEIsTUFBTSxHQUFHNUMsYUFBYSxDQUFDZSxPQUFPLENBQUMsK0VBQStFLENBQUM7UUFDaEgsQ0FBQyxNQUFNO1VBQ042QixNQUFNLEdBQUc1QyxhQUFhLENBQUNlLE9BQU8sQ0FBQyw2RUFBNkUsQ0FBQztRQUM5RztNQUNELENBQUMsTUFBTSxJQUFJbUQsb0JBQW9CLEtBQUssQ0FBQyxFQUFFO1FBQ3RDO1FBQ0F0QixNQUFNLEdBQUc1QyxhQUFhLENBQUNlLE9BQU8sQ0FDN0IsOEVBQThFLEVBQzlFWixTQUFTLEVBQ1RELGFBQ0QsQ0FBQztNQUNGLENBQUMsTUFBTTtRQUNOO1FBQ0EwQyxNQUFNLEdBQUc1QyxhQUFhLENBQUNlLE9BQU8sQ0FDN0IsZ0ZBQWdGLEVBQ2hGWixTQUFTLEVBQ1RELGFBQ0QsQ0FBQztNQUNGO0lBQ0QsQ0FBQyxNQUFNLElBQUlnRSxvQkFBb0IsS0FBSyxDQUFDLEVBQUU7TUFDdEM7TUFDQXRCLE1BQU0sR0FBRzVDLGFBQWEsQ0FBQ2UsT0FBTyxDQUM3QixrRkFBa0YsRUFDbEYsQ0FBQzJCLHdCQUF3QixDQUFDLEVBQzFCeEMsYUFDRCxDQUFDO0lBQ0YsQ0FBQyxNQUFNLElBQUlnRSxvQkFBb0IsR0FBRyxDQUFDLEVBQUU7TUFDcEM7TUFDQXRCLE1BQU0sR0FBRzVDLGFBQWEsQ0FBQ2UsT0FBTyxDQUM3QixtRkFBbUYsRUFDbkYsQ0FBQ21ELG9CQUFvQixFQUFFeEIsd0JBQXdCLENBQUMsRUFDaER4QyxhQUNELENBQUM7SUFDRjtJQUVBLE9BQU8wQyxNQUFNLEdBQUcsSUFBSXVCLElBQUksQ0FBQztNQUFFQyxJQUFJLEVBQUV4QjtJQUFPLENBQUMsQ0FBQyxHQUFHekMsU0FBUztFQUN2RDtFQUVBLFNBQVNrRSw0QkFBNEJBLENBQUN0RSxRQUEwQixFQUFFRCxPQUF1QixFQUFvQjtJQUM1RyxPQUFPQSxPQUFPLENBQUN3RSxNQUFNLENBQUMsQ0FBQ0MsTUFBTSxFQUFFckYsTUFBTSxLQUFLO01BQ3pDLE9BQU9BLE1BQU0sQ0FBQ2tCLFFBQVEsSUFBSWxCLE1BQU0sQ0FBQ1gsSUFBSSxLQUFLSixpQkFBaUIsQ0FBQ3FHLDBCQUEwQixHQUFHRCxNQUFNLENBQUNFLE1BQU0sQ0FBQ3ZGLE1BQU0sQ0FBQ2EsUUFBUSxDQUFDLEdBQUd3RSxNQUFNO0lBQ2pJLENBQUMsRUFBRXhFLFFBQVEsQ0FBQztFQUNiO0VBRUEsU0FBUzJFLDZCQUE2QkEsQ0FBQzVFLE9BQXVCLEVBQW9CO0lBQ2pGLE1BQU1DLFFBQTBCLEdBQUcsRUFBRTtJQUNyQyxPQUFPRCxPQUFPLENBQUN3RSxNQUFNLENBQUMsQ0FBQ0MsTUFBTSxFQUFFckYsTUFBTSxLQUFLO01BQ3pDLE9BQU9BLE1BQU0sQ0FBQ2tCLFFBQVEsSUFBSWxCLE1BQU0sQ0FBQ1gsSUFBSSxLQUFLSixpQkFBaUIsQ0FBQ3FHLDBCQUEwQixHQUFHRCxNQUFNLENBQUNFLE1BQU0sQ0FBQ3ZGLE1BQU0sQ0FBQ2EsUUFBUSxDQUFDLEdBQUd3RSxNQUFNO0lBQ2pJLENBQUMsRUFBRXhFLFFBQVEsQ0FBQztFQUNiO0VBRUEsZUFBZTRFLG1DQUFtQ0EsQ0FDakRaLFdBQTZCLEVBQzdCYSxTQUEyQixFQUMzQjVCLGNBQXNCLEVBQ3RCaEQsYUFBNEIsRUFDNUI2RSxLQUFnQixFQUNoQi9FLE9BQXVCLEVBQ1A7SUFDaEIsSUFBSTtNQUFFNEMsd0JBQXdCO01BQUVwRCx5QkFBeUI7TUFBRW1FLGVBQWU7TUFBRWQsY0FBYztNQUFFc0I7SUFBNkIsQ0FBQyxHQUN6SEYsV0FBVztJQUNaekUseUJBQXlCLEtBQUssRUFBRTtJQUNoQ21FLGVBQWUsS0FBSyxFQUFFO0lBQ3RCZCxjQUFjLEtBQUssRUFBRTtJQUNyQnNCLDRCQUE0QixLQUFLLEVBQUU7SUFDbkN2Qix3QkFBd0IsS0FBSyxDQUFDO0lBQzlCLElBQUlvQyxpQkFBaUIsR0FBRyxFQUFFOztJQUUxQjtJQUNBLElBQUl4Rix5QkFBeUIsQ0FBQ0ssTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN6QyxNQUFNNkUsMEJBQTRDLEdBQUcsRUFBRTtNQUN2RGxGLHlCQUF5QixDQUFDWCxPQUFPLENBQUVvRyxrQkFBb0MsSUFBSztRQUMzRTtRQUNBUCwwQkFBMEIsQ0FBQ1EsSUFBSSxDQUFDRCxrQkFBa0IsQ0FBQ3JGLEtBQUssQ0FBQztRQUN6RGtGLFNBQVMsQ0FBQ0ksSUFBSSxDQUFDRCxrQkFBa0IsQ0FBQ0UsV0FBVyxDQUFDQyxhQUFhLENBQUM7TUFDN0QsQ0FBQyxDQUFDO01BQ0YsSUFBSVYsMEJBQTBCLENBQUM3RSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzFDRyxPQUFPLENBQUNrRixJQUFJLENBQUM7VUFDWnpHLElBQUksRUFBRUosaUJBQWlCLENBQUNxRywwQkFBMEI7VUFDbER6RSxRQUFRLEVBQUV5RSwwQkFBMEI7VUFDcENwRSxRQUFRLEVBQUU7UUFDWCxDQUFDLENBQUM7TUFDSDtJQUNEOztJQUVBO0lBQ0EsSUFBSXVDLGNBQWMsQ0FBQ2hELE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDOUJtRixpQkFBaUIsR0FBRzlELFlBQVksQ0FBQ3lCLG9CQUFvQixDQUFDekMsYUFBYSxFQUFFMEMsd0JBQXdCLEVBQUVDLGNBQWMsQ0FBQyxJQUFJLEVBQUU7TUFDcEhrQyxLQUFLLENBQUNHLElBQUksQ0FBQyxJQUFJYixJQUFJLENBQUM7UUFBRUMsSUFBSSxFQUFFVTtNQUFrQixDQUFDLENBQUMsQ0FBQztJQUNsRDs7SUFFQTtJQUNBLE1BQU1LLGtCQUFrQixHQUFHekMsd0JBQXdCLElBQUlNLGNBQWMsR0FBR2lCLDRCQUE0QixDQUFDdEUsTUFBTSxHQUFHZ0QsY0FBYyxDQUFDaEQsTUFBTTtJQUNuSSxNQUFNeUYsb0JBQW9CLEdBQUdELGtCQUFrQixJQUFJbkUsWUFBWSxDQUFDOEMsbUJBQW1CLENBQUNDLFdBQVcsRUFBRWYsY0FBYyxFQUFFaEQsYUFBYSxDQUFDO0lBQy9ILElBQUlvRixvQkFBb0IsRUFBRTtNQUN6QlAsS0FBSyxDQUFDRyxJQUFJLENBQUNJLG9CQUFvQixDQUFDO0lBQ2pDOztJQUVBO0lBQ0EsSUFBSTNCLGVBQWUsQ0FBQzlELE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDL0IsTUFBTTBGLGtCQUFrQixHQUN2QixDQUFDLE1BQU1yRSxZQUFZLENBQUN3QyxzQkFBc0IsQ0FBQ3hELGFBQWEsRUFBRTBDLHdCQUF3QixFQUFFZSxlQUFlLEVBQUVULGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUM1SCxJQUFJcUMsa0JBQWtCLENBQUMzQixPQUFPLEVBQUU7UUFDL0JtQixLQUFLLENBQUNHLElBQUksQ0FBQyxJQUFJYixJQUFJLENBQUM7VUFBRUMsSUFBSSxFQUFFaUIsa0JBQWtCLENBQUMzQjtRQUFRLENBQUMsQ0FBQyxDQUFDO01BQzNEO01BQ0EsSUFBSTJCLGtCQUFrQixDQUFDMUIsU0FBUyxJQUFJMEIsa0JBQWtCLENBQUN6QixnQkFBZ0IsRUFBRTtRQUN4RTlELE9BQU8sQ0FBQ2tGLElBQUksQ0FBQztVQUNaekcsSUFBSSxFQUFFSixpQkFBaUIsQ0FBQ3NGLGVBQWU7VUFDdkMxRCxRQUFRLEVBQUUwRCxlQUFlO1VBQ3pCVyxJQUFJLEVBQUVpQixrQkFBa0IsQ0FBQzFCLFNBQVM7VUFDbEN2RCxRQUFRLEVBQUUsSUFBSTtVQUNka0YsT0FBTyxFQUFFbEgsMEJBQTBCLENBQUNtSDtRQUNyQyxDQUFDLENBQUM7TUFDSDtJQUNEOztJQUVBO0lBQ0EsSUFBSXRCLDRCQUE0QixDQUFDdEUsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUM1QyxNQUFNNkYsK0JBQStCLEdBQ3BDeEUsWUFBWSxDQUFDOEIsa0NBQWtDLENBQUM5QyxhQUFhLEVBQUVpRSw0QkFBNEIsQ0FBQ3RFLE1BQU0sRUFBRXFELGNBQWMsQ0FBQyxJQUFJLEVBQUU7TUFDMUgsSUFBSXdDLCtCQUErQixFQUFFO1FBQ3BDMUYsT0FBTyxDQUFDa0YsSUFBSSxDQUFDO1VBQ1p6RyxJQUFJLEVBQUVKLGlCQUFpQixDQUFDOEYsNEJBQTRCO1VBQ3BEbEUsUUFBUSxFQUFFa0UsNEJBQTRCO1VBQ3RDRyxJQUFJLEVBQUVvQiwrQkFBK0I7VUFDckNwRixRQUFRLEVBQUUsSUFBSTtVQUNka0YsT0FBTyxFQUFFdEMsY0FBYyxHQUFHLENBQUMsR0FBRzVFLDBCQUEwQixDQUFDbUgsUUFBUSxHQUFHbkgsMEJBQTBCLENBQUNxSDtRQUNoRyxDQUFDLENBQUM7TUFDSDtJQUNEO0VBQ0Q7RUFFQSxTQUFTQyw0QkFBNEJBLENBQUM1RixPQUF1QixFQUFFK0UsS0FBZ0IsRUFBUTtJQUN0RixJQUFJL0UsT0FBTyxDQUFDSCxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQ3pCO01BQ0EsTUFBTVQsTUFBTSxHQUFHWSxPQUFPLENBQUMsQ0FBQyxDQUFDO01BQ3pCLElBQUlaLE1BQU0sQ0FBQ2tGLElBQUksRUFBRTtRQUNoQixNQUFNQSxJQUFJLEdBQUcsSUFBSUQsSUFBSSxDQUFDLENBQUM7UUFDdkJDLElBQUksQ0FBQ3VCLE9BQU8sQ0FBQ3pHLE1BQU0sQ0FBQ2tGLElBQUksQ0FBQztRQUN6QlMsS0FBSyxDQUFDRyxJQUFJLENBQUNaLElBQUksQ0FBQztNQUNqQjtJQUNELENBQUMsTUFBTSxJQUFJdEUsT0FBTyxDQUFDSCxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQzlCOztNQUVBO01BQ0FHLE9BQU8sQ0FBQ25CLE9BQU8sQ0FBRU8sTUFBb0IsSUFBSztRQUN6QyxJQUFJQSxNQUFNLENBQUNvRyxPQUFPLEtBQUssTUFBTSxJQUFJcEcsTUFBTSxDQUFDa0YsSUFBSSxFQUFFO1VBQzdDLE1BQU1BLElBQUksR0FBRyxJQUFJRCxJQUFJLENBQUMsQ0FBQztVQUN2QkMsSUFBSSxDQUFDdUIsT0FBTyxDQUFDekcsTUFBTSxDQUFDa0YsSUFBSSxDQUFDO1VBQ3pCUyxLQUFLLENBQUNHLElBQUksQ0FBQ1osSUFBSSxDQUFDO1FBQ2pCO01BQ0QsQ0FBQyxDQUFDO01BQ0Y7TUFDQXRFLE9BQU8sQ0FBQ25CLE9BQU8sQ0FBRU8sTUFBb0IsSUFBSztRQUN6QyxJQUFJQSxNQUFNLENBQUNvRyxPQUFPLEtBQUssVUFBVSxJQUFJcEcsTUFBTSxDQUFDa0YsSUFBSSxFQUFFO1VBQ2pEUyxLQUFLLENBQUNHLElBQUksQ0FDVCxJQUFJWSxRQUFRLENBQUM7WUFDWnhCLElBQUksRUFBRWxGLE1BQU0sQ0FBQ2tGLElBQUk7WUFDakJoRSxRQUFRLEVBQUUsSUFBSTtZQUNkeUYsTUFBTSxFQUFFLFNBQUFBLENBQVVDLE1BQTRCLEVBQVE7Y0FDckQsTUFBTUMsUUFBUSxHQUFHRCxNQUFNLENBQUNFLFNBQVMsQ0FBQyxDQUFDO2NBQ25DLE1BQU01RixRQUFRLEdBQUcyRixRQUFRLENBQUNFLFdBQVcsQ0FBQyxDQUFDO2NBQ3ZDL0csTUFBTSxDQUFDa0IsUUFBUSxHQUFHQSxRQUFRO1lBQzNCO1VBQ0QsQ0FBQyxDQUNGLENBQUM7UUFDRjtNQUNELENBQUMsQ0FBQztJQUNIO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVM4RiwwQkFBMEJBLENBQUNuQyxXQUE2QixFQUFFb0MsZUFBK0IsRUFBa0I7SUFDbkgsTUFBTTtNQUFFN0c7SUFBMEIsQ0FBQyxHQUFHeUUsV0FBVztJQUNqRCxNQUFNcUMsR0FBRyxHQUFHOUcseUJBQXlCLEVBQUUrRyxJQUFJLENBQUVDLGdCQUFnQixJQUFLQSxnQkFBZ0IsQ0FBQ3JCLFdBQVcsQ0FBQ0MsYUFBYSxLQUFLaUIsZUFBZSxDQUFDO0lBQ2pJLE9BQU9DLEdBQUcsRUFBRTFHLEtBQUssR0FBRzBHLEdBQUcsQ0FBQzFHLEtBQUssR0FBR3lHLGVBQWU7RUFDaEQ7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTSSwyQkFBMkJBLENBQ25DeEMsV0FBNkIsRUFDN0J5Qyx1QkFBeUMsRUFDekN4RyxhQUE0QixFQUNYO0lBQ2pCLElBQUk7TUFBRTBDLHdCQUF3QjtNQUFFQyxjQUFjO01BQUVzQiw0QkFBNEI7TUFBRVI7SUFBZ0IsQ0FBQyxHQUFHTSxXQUFXO0lBQzdHLE1BQU07TUFBRTdELGFBQWE7TUFBRUssYUFBYTtNQUFFa0c7SUFBWSxDQUFDLEdBQUcxQyxXQUFXO0lBQ2pFRSw0QkFBNEIsS0FBSyxFQUFFO0lBQ25DUixlQUFlLEtBQUssRUFBRTtJQUN0QmQsY0FBYyxLQUFLLEVBQUU7SUFDckJzQiw0QkFBNEIsS0FBSyxFQUFFO0lBQ25DdkIsd0JBQXdCLEtBQUssQ0FBQztJQUM5QixNQUFNTSxjQUFjLEdBQUd3RCx1QkFBdUIsQ0FBQzdHLE1BQU0sR0FBR3NFLDRCQUE0QixDQUFDdEUsTUFBTSxHQUFHOEQsZUFBZSxDQUFDOUQsTUFBTTtJQUNwSCxNQUFNdUUsb0JBQW9CLEdBQUd4Qix3QkFBd0IsSUFBSUMsY0FBYyxDQUFDaEQsTUFBTSxHQUFHcUQsY0FBYyxHQUFHaUIsNEJBQTRCLENBQUN0RSxNQUFNLENBQUM7SUFDdEksTUFBTUcsT0FBdUIsR0FBRyxFQUFFO0lBRWxDLElBQUk0Qyx3QkFBd0IsS0FBSyxDQUFDLElBQUlBLHdCQUF3QixLQUFLOEQsdUJBQXVCLENBQUM3RyxNQUFNLEVBQUU7TUFDbEc7TUFDQSxNQUFNK0csTUFBTSxHQUFHbkcsYUFBc0I7TUFDckMsTUFBTW9HLElBQUksR0FBR0QsTUFBTSxJQUFNQSxNQUFNLENBQUNFLFNBQVMsQ0FBQyxDQUFDLENBQWNDLG1CQUFtQixDQUFDLENBQVk7TUFDekYsSUFBSUMsR0FBRztNQUNQLElBQUlILElBQUksRUFBRTtRQUNULE1BQU1JLGVBQWUsR0FBR04sV0FBVyxJQUFLQSxXQUFXLENBQXVCTyxJQUFJO1FBQzlFO1FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUdmLDBCQUEwQixDQUFDbkMsV0FBVyxFQUFFeUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2hGLFNBQVMsQ0FBQyxDQUFDO1FBQ3hHLE1BQU0wRixTQUFTLEdBQUdQLElBQUksR0FBR00sZ0JBQWdCLENBQUNOLElBQUksQ0FBQyxHQUFHeEcsU0FBUztRQUMzRCxNQUFNZ0gsWUFBWSxHQUFHSixlQUFlLElBQUlFLGdCQUFnQixDQUFDRixlQUFlLENBQUM7UUFDekUsSUFBSUcsU0FBUyxFQUFFO1VBQ2QsSUFBSUMsWUFBWSxJQUFJVixXQUFXLElBQUlFLElBQUksS0FBTUYsV0FBVyxDQUF1Qk8sSUFBSSxFQUFFO1lBQ3BGRixHQUFHLEdBQUc5RyxhQUFhLENBQUNlLE9BQU8sQ0FDMUIscURBQXFELEVBQ3JELENBQUNtRyxTQUFTLEVBQUVDLFlBQVksQ0FBQyxFQUN6QmpILGFBQ0QsQ0FBQztVQUNGLENBQUMsTUFBTTtZQUNONEcsR0FBRyxHQUFHOUcsYUFBYSxDQUFDZSxPQUFPLENBQUMsMkRBQTJELEVBQUUsQ0FBQ21HLFNBQVMsQ0FBQyxFQUFFaEgsYUFBYSxDQUFDO1VBQ3JIO1FBQ0QsQ0FBQyxNQUFNO1VBQ040RyxHQUFHLEdBQUc5RyxhQUFhLENBQUNlLE9BQU8sQ0FBQywrREFBK0QsRUFBRVosU0FBUyxFQUFFRCxhQUFhLENBQUM7UUFDdkg7TUFDRCxDQUFDLE1BQU07UUFDTjRHLEdBQUcsR0FBRzlHLGFBQWEsQ0FBQ2UsT0FBTyxDQUFDLCtEQUErRCxFQUFFWixTQUFTLEVBQUVELGFBQWEsQ0FBQztNQUN2SDtNQUNBSixPQUFPLENBQUNrRixJQUFJLENBQUM7UUFDWnpHLElBQUksRUFBRUosaUJBQWlCLENBQUNpQixpQkFBaUI7UUFDekNXLFFBQVEsRUFBRXlHLHVCQUF1QjtRQUNqQ3BDLElBQUksRUFBRTBDLEdBQUc7UUFDVDFHLFFBQVEsRUFBRSxJQUFJO1FBQ2RrRixPQUFPLEVBQUVsSCwwQkFBMEIsQ0FBQ3FIO01BQ3JDLENBQUMsQ0FBQztJQUNILENBQUMsTUFBTSxJQUNOaEMsZUFBZSxDQUFDOUQsTUFBTSxLQUFLcUQsY0FBYyxJQUN6Q04sd0JBQXdCLEdBQUcsQ0FBQyxLQUMzQjhELHVCQUF1QixDQUFDN0csTUFBTSxHQUFHLENBQUMsSUFBSzhELGVBQWUsQ0FBQzlELE1BQU0sR0FBRyxDQUFDLElBQUlzRSw0QkFBNEIsQ0FBQ3RFLE1BQU0sR0FBRyxDQUFFLENBQUMsRUFDOUc7TUFDRCxJQUFJK0Msd0JBQXdCLEdBQUc4RCx1QkFBdUIsQ0FBQzdHLE1BQU0sSUFBSXVFLG9CQUFvQixHQUFHdkIsY0FBYyxDQUFDaEQsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNsSDtRQUNBLElBQUl5SCxrQkFBa0IsR0FBRyxFQUFFO1FBQzNCLElBQUlwRSxjQUFjLEtBQUssQ0FBQyxFQUFFO1VBQ3pCb0Usa0JBQWtCLEdBQUdwSCxhQUFhLENBQUNlLE9BQU8sQ0FDekMsNkVBQTZFLEVBQzdFWixTQUFTLEVBQ1RELGFBQ0QsQ0FBQztRQUNGLENBQUMsTUFBTTtVQUNOa0gsa0JBQWtCLEdBQUdwSCxhQUFhLENBQUNlLE9BQU8sQ0FDekMsMkVBQTJFLEVBQzNFWixTQUFTLEVBQ1RELGFBQ0QsQ0FBQztRQUNGO1FBQ0FKLE9BQU8sQ0FBQ3VILE9BQU8sQ0FBQztVQUNmOUksSUFBSSxFQUFFSixpQkFBaUIsQ0FBQ2lCLGlCQUFpQjtVQUN6Q1csUUFBUSxFQUFFeUcsdUJBQXVCO1VBQ2pDcEMsSUFBSSxFQUFFZ0Qsa0JBQWtCO1VBQ3hCaEgsUUFBUSxFQUFFLElBQUk7VUFDZGtGLE9BQU8sRUFBRWxILDBCQUEwQixDQUFDcUg7UUFDckMsQ0FBQyxDQUFDO01BQ0gsQ0FBQyxNQUFNO1FBQ047UUFDQSxNQUFNNkIsZUFBZSxHQUNwQnRFLGNBQWMsS0FBSyxDQUFDLEdBQ2pCaEQsYUFBYSxDQUFDZSxPQUFPLENBQUMsK0RBQStELEVBQUVaLFNBQVMsRUFBRUQsYUFBYSxDQUFDLEdBQ2hIRixhQUFhLENBQUNlLE9BQU8sQ0FBQyw2REFBNkQsRUFBRVosU0FBUyxFQUFFRCxhQUFhLENBQUM7UUFDbEhKLE9BQU8sQ0FBQ2tGLElBQUksQ0FBQztVQUNaekcsSUFBSSxFQUFFSixpQkFBaUIsQ0FBQ2lCLGlCQUFpQjtVQUN6Q1csUUFBUSxFQUFFeUcsdUJBQXVCO1VBQ2pDcEMsSUFBSSxFQUFFa0QsZUFBZTtVQUNyQmxILFFBQVEsRUFBRSxJQUFJO1VBQ2RrRixPQUFPLEVBQUVsSCwwQkFBMEIsQ0FBQ3FIO1FBQ3JDLENBQUMsQ0FBQztNQUNIO0lBQ0Q7SUFFQSxPQUFPM0YsT0FBTztFQUNmO0VBRUEsZUFBZXlILHFDQUFxQ0EsQ0FDbkQvQywwQkFBNEMsRUFDNUNnRCxjQUE4QixFQUM5QkMsWUFBMEIsRUFDMUJDLG9CQUE2QixFQUNSO0lBQ3JCLE1BQU1DLFdBQXNCLEdBQUcsRUFBRTtJQUNqQyxNQUFNQyxPQUFPLENBQUNDLFVBQVUsQ0FDdkJyRCwwQkFBMEIsQ0FBQ2hGLEdBQUcsQ0FBQyxnQkFBZ0JaLE9BQXVCLEVBQUU7TUFDdkUsSUFBSTtRQUNILE9BQU8sTUFBTWMsS0FBSyxDQUFDb0ksV0FBVyxDQUFDbEosT0FBTyxFQUFFNEksY0FBYyxFQUFFQyxZQUFZLEVBQUVDLG9CQUFvQixDQUFDO01BQzVGLENBQUMsQ0FBQyxPQUFPSyxDQUFVLEVBQUU7UUFDcEJDLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLHVFQUF1RXJKLE9BQU8sQ0FBQ3VDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyR3dHLFdBQVcsQ0FBQzNDLElBQUksQ0FBQytDLENBQUMsQ0FBQztNQUNwQjtJQUNELENBQUMsQ0FDRixDQUFDO0lBQ0QsT0FBT0osV0FBVztFQUNuQjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTTyx3QkFBd0JBLENBQUNuSSxRQUEwQixFQUFvQjtJQUMvRSxNQUFNb0ksWUFBNEMsR0FBRyxDQUFDLEdBQUdwSSxRQUFRLENBQUM7SUFDbEU7SUFDQW9JLFlBQVksQ0FBQ3hKLE9BQU8sQ0FBQyxDQUFDeUosYUFBYSxFQUFFQyxXQUFXLEtBQUs7TUFDcEQsSUFBSUQsYUFBYSxLQUFLakksU0FBUyxFQUFFO1FBQ2hDO01BQ0Q7TUFFQSxLQUFLLElBQUltSSxVQUFVLEdBQUdELFdBQVcsR0FBRyxDQUFDLEVBQUVDLFVBQVUsR0FBR0gsWUFBWSxDQUFDeEksTUFBTSxFQUFFMkksVUFBVSxFQUFFLEVBQUU7UUFDdEYsTUFBTUMsWUFBWSxHQUFHSixZQUFZLENBQUNHLFVBQVUsQ0FBQztRQUM3QyxJQUFJQyxZQUFZLElBQUlILGFBQWEsQ0FBQ0ksWUFBWSxDQUFDRCxZQUFZLENBQUMsRUFBRTtVQUM3REosWUFBWSxDQUFDRyxVQUFVLENBQUMsRUFBRUcsV0FBVyxDQUFDLEtBQUssQ0FBQztVQUM1Q04sWUFBWSxDQUFDRyxVQUFVLENBQUMsR0FBR25JLFNBQVM7UUFDckM7TUFDRDtJQUNELENBQUMsQ0FBQztJQUVGLE9BQU9nSSxZQUFZLENBQUNPLE1BQU0sQ0FBRTlKLE9BQU8sSUFBS0EsT0FBTyxLQUFLdUIsU0FBUyxDQUFDO0VBQy9EO0VBRUEsZUFBZXdJLG9CQUFvQkEsQ0FDbEM3SSxPQUF1QixFQUN2QmlFLFdBQTZCLEVBQzdCeUQsY0FBOEIsRUFDOUJ4SCxhQUE0QixFQUM1QnlILFlBQTBCLEVBQzFCbUIsWUFBcUIsRUFDckJDLFdBQW1DLEVBQ25CO0lBQ2hCLE1BQU1DLGtCQUFrQixHQUFHdEIsY0FBYyxDQUFDdUIsc0JBQXNCLENBQUMsQ0FBQztJQUNsRSxJQUFJaEosUUFBMEIsR0FBRyxFQUFFO0lBQ25DLElBQUk7TUFDSEEsUUFBUSxHQUFHaUIsWUFBWSxDQUFDcUQsNEJBQTRCLENBQUMsRUFBRSxFQUFFdkUsT0FBTyxDQUFDO01BQ2pFLE1BQU1HLG1CQUFtQixHQUFHRixRQUFRLENBQUNBLFFBQVEsQ0FBQ0osTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDcUosUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDMUUsTUFBTXhFLDBCQUEwQixHQUFHRSw2QkFBNkIsQ0FBQzVFLE9BQU8sQ0FBQztNQUV6RSxNQUFNO1FBQUVtSjtNQUFxQixDQUFDLEdBQUdsRixXQUFXO01BQzVDLElBQUlrRixvQkFBb0IsRUFBRTtRQUN6QixNQUFNQSxvQkFBb0IsQ0FBQztVQUFFbEosUUFBUSxFQUFFQTtRQUFTLENBQUMsQ0FBQztNQUNuRDtNQUVBLElBQUlBLFFBQVEsQ0FBQ0osTUFBTSxFQUFFO1FBQ3BCLE1BQU0rSCxvQkFBb0IsR0FBRzNILFFBQVEsQ0FBQ0osTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSztRQUNqRSxNQUFNZ0ksV0FBc0IsR0FBRyxNQUFNSixxQ0FBcUMsQ0FDekUvQywwQkFBMEIsRUFDMUJnRCxjQUFjLEVBQ2RDLFlBQVksRUFDWkMsb0JBQ0QsQ0FBQztRQUVELElBQUl3QixnQkFBZ0IsR0FBR25KLFFBQVE7UUFDL0IsSUFBSThJLFdBQVcsS0FBSyxNQUFNLEVBQUU7VUFDM0JLLGdCQUFnQixHQUFHaEIsd0JBQXdCLENBQUNuSSxRQUFRLENBQUM7UUFDdEQ7UUFFQSxNQUFNNkgsT0FBTyxDQUFDdUIsR0FBRyxDQUNoQkQsZ0JBQWdCLENBQUMxSixHQUFHLENBQUMsZ0JBQWdCWixPQUF1QixFQUFFO1VBQzdEO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBLElBQ0MsQ0FBQ2dLLFlBQVksSUFDYjdFLFdBQVcsQ0FBQ3pFLHlCQUF5QixFQUFFK0csSUFBSSxDQUN6QytDLHdCQUF3QixJQUFLQSx3QkFBd0IsQ0FBQ25FLFdBQVcsQ0FBQ0MsYUFBYSxLQUFLdEcsT0FDdEYsQ0FBQyxJQUNEaUssV0FBVyxLQUFLLFlBQVksRUFDM0I7WUFDRGpLLE9BQU8sQ0FBQ3lLLFlBQVksQ0FBQyxDQUFDO1lBQ3RCLE9BQU96SyxPQUFPLENBQUN3QyxRQUFRLENBQUMsQ0FBQyxDQUFDa0ksTUFBTSxDQUFDMUssT0FBTyxDQUFDMkssZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1VBQzdELENBQUMsTUFBTTtZQUNOLE9BQU83SixLQUFLLENBQUNvSSxXQUFXLENBQUNsSixPQUFPLEVBQUU0SSxjQUFjLEVBQUVDLFlBQVksRUFBRUMsb0JBQW9CLENBQUM7VUFDdEY7UUFDRCxDQUFDLENBQ0YsQ0FBQztRQUNEMUcsWUFBWSxDQUFDcEIsa0JBQWtCLENBQUNtRSxXQUFXLEVBQUVqRSxPQUFPLEVBQUVDLFFBQVEsRUFBRUMsYUFBYSxFQUFFQyxtQkFBbUIsQ0FBQztRQUNuRyxJQUFJMEgsV0FBVyxDQUFDaEksTUFBTSxHQUFHLENBQUMsRUFBRTtVQUMzQixNQUFNNkosS0FBSyxDQUFDLHVEQUF1RDdCLFdBQVcsRUFBRSxDQUFDO1FBQ2xGO01BQ0Q7TUFDQUgsY0FBYyxDQUFDaUMsYUFBYSxDQUFDWCxrQkFBa0IsQ0FBQztJQUNqRCxDQUFDLENBQUMsT0FBT1ksTUFBTSxFQUFFO01BQ2hCLElBQUkzSixRQUFRLENBQUNKLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDeEJxQixZQUFZLENBQUMySSw4QkFBOEIsQ0FBQzNKLGFBQWEsQ0FBQztNQUMzRDtNQUNBLE1BQU13SCxjQUFjLENBQUNvQyxZQUFZLENBQUM7UUFBRUMsU0FBUyxFQUFFZjtNQUFtQixDQUFDLENBQUM7TUFDcEU7TUFDQSxNQUFNWSxNQUFNO0lBQ2I7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNDLDhCQUE4QkEsQ0FBQzNKLGFBQTRCLEVBQVE7SUFDM0U4SixTQUFTLENBQUNDLFdBQVcsQ0FDcEIsSUFBSUMsT0FBTyxDQUFDO01BQ1hDLE9BQU8sRUFBRWpLLGFBQWEsQ0FBQ2UsT0FBTyxDQUFDLHdEQUF3RCxDQUFDO01BQ3hGeEMsSUFBSSxFQUFFMkwsV0FBVyxDQUFDVixLQUFLO01BQ3ZCVyxNQUFNLEVBQUVoSyxTQUFTO01BQ2pCaUssVUFBVSxFQUFFLElBQUk7TUFDaEJDLElBQUksRUFBRSx3Q0FBd0M7TUFDOUM1RCxXQUFXLEVBQUV6RyxhQUFhLENBQUNlLE9BQU8sQ0FBQyxnRUFBZ0UsQ0FBQztNQUNwR3VKLGdCQUFnQixFQUFFO1FBQ2pCQyxFQUFFLEVBQUU7VUFDSEMsOEJBQThCLEVBQUV4SyxhQUFhLENBQUNlLE9BQU8sQ0FBQyxxREFBcUQ7UUFDNUc7TUFDRDtJQUNELENBQUMsQ0FDRixDQUFDO0VBQ0Y7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLGVBQWUwSixxQkFBcUJBLENBQUNDLElBQWlCLEVBQUVDLGFBQWlDLEVBQUVDLGVBQXdCLEVBQWlCO0lBQ25JLElBQUk7TUFDSCxJQUFJLENBQUNGLElBQUksQ0FBQ0csUUFBUSxJQUFJSCxJQUFJLENBQUNJLFNBQVMsRUFBRTtRQUNyQztRQUNBLE1BQU1DLGtCQUFrQixHQUFHLE1BQU1yTCxLQUFLLENBQUNzTCx5QkFBeUIsQ0FBQ04sSUFBSSxDQUFDOUwsT0FBTyxFQUFFOEwsSUFBSSxDQUFDOUwsT0FBTyxDQUFDO1FBQzVGOEwsSUFBSSxDQUFDekYsV0FBVyxHQUFHOEYsa0JBQWtCO1FBQ3JDTCxJQUFJLENBQUNPLGdCQUFnQixHQUFHTixhQUFhLEdBQ2xDLE1BQU1JLGtCQUFrQixFQUFFN0YsYUFBYSxFQUFFNUIsZUFBZSxDQUFDcUgsYUFBYSxDQUFDLEdBQ3ZFQyxlQUFlO01BQ25CLENBQUMsTUFBTSxJQUFJRixJQUFJLENBQUNHLFFBQVEsSUFBSUgsSUFBSSxDQUFDUSxRQUFRLEVBQUU7UUFDMUM7UUFDQSxNQUFNSCxrQkFBa0IsR0FBRyxNQUFNckwsS0FBSyxDQUFDc0wseUJBQXlCLENBQUNOLElBQUksQ0FBQzlMLE9BQU8sRUFBRThMLElBQUksQ0FBQzlMLE9BQU8sQ0FBQztRQUM1RixJQUFJbU0sa0JBQWtCLEVBQUU3RixhQUFhLEVBQUU7VUFDdEM7VUFDQTtVQUNBLE1BQU1pRyxpQkFBaUIsR0FBRyxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDO1VBQy9ELElBQUlSLGFBQWEsRUFBRTtZQUNsQlEsaUJBQWlCLENBQUNuRyxJQUFJLENBQUMyRixhQUFhLENBQUM7VUFDdEM7VUFDQSxNQUFNSSxrQkFBa0IsQ0FBQzdGLGFBQWEsQ0FBQzVCLGVBQWUsQ0FBQzZILGlCQUFpQixDQUFDO1VBQ3pFVCxJQUFJLENBQUNVLE1BQU0sR0FBRyxLQUFLO1VBQ25CVixJQUFJLENBQUNRLFFBQVEsR0FBRyxLQUFLO1VBQ3JCUixJQUFJLENBQUNHLFFBQVEsR0FBRyxLQUFLO1VBQ3JCSCxJQUFJLENBQUNJLFNBQVMsR0FBRyxJQUFJO1VBQ3JCO1VBQ0FKLElBQUksQ0FBQ3pGLFdBQVcsR0FBRztZQUFFQyxhQUFhLEVBQUV3RixJQUFJLENBQUM5TCxPQUFPO1lBQUV5TSxXQUFXLEVBQUU7VUFBRyxDQUFDO1VBQ25FWCxJQUFJLENBQUM5TCxPQUFPLEdBQUdtTSxrQkFBa0IsQ0FBQzdGLGFBQWE7VUFDL0M7VUFDQXdGLElBQUksQ0FBQ08sZ0JBQWdCLEdBQUdQLElBQUksQ0FBQ1ksU0FBUztVQUN0Q1osSUFBSSxDQUFDWSxTQUFTLEdBQUdYLGFBQWEsR0FBR0ksa0JBQWtCLENBQUM3RixhQUFhLENBQUMvRixXQUFXLENBQUN3TCxhQUFhLENBQUMsR0FBR0MsZUFBZTtRQUMvRztNQUNEO0lBQ0QsQ0FBQyxDQUFDLE9BQU9XLEVBQUUsRUFBRTtNQUNaO0lBQUE7RUFFRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsZUFBZUMsZUFBZUEsQ0FBQzVNLE9BQXVCLEVBQXdCO0lBQzdFLE1BQU02TSxXQUFXLEdBQUcsQ0FBQyxDQUFDN00sT0FBTyxFQUFFNEMsU0FBUyxDQUFDLENBQUMsR0FBRywyQkFBMkIsQ0FBQztJQUN6RSxNQUFNa0ssVUFBVSxHQUFHOU0sT0FBTyxFQUFFOE0sVUFBVSxDQUFDLENBQUM7SUFDeEMsTUFBTUMsV0FBVyxHQUNoQkQsVUFBVSxJQUFLLENBQUNBLFVBQVUsSUFBSUQsV0FBWSxHQUN2Q3RMLFNBQVMsR0FDVHZCLE9BQU8sQ0FBQ3dDLFFBQVEsQ0FBQyxDQUFDLENBQUN3SyxZQUFZLENBQUMsQ0FBQyxDQUFDQyxjQUFjLENBQUNqTixPQUFPLENBQUMySyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDaEYsTUFBTW9CLGFBQWEsR0FBR2dCLFdBQVcsRUFBRXhNLFdBQVcsQ0FBQywrREFBK0QsQ0FBQztJQUMvRyxNQUFNeUwsZUFBZSxHQUFHLENBQUNELGFBQWEsSUFBSWdCLFdBQVcsRUFBRXhNLFdBQVcsQ0FBQyx5REFBeUQsQ0FBQyxLQUFLLEtBQUs7SUFDdkksTUFBTW1NLFNBQVMsR0FBR1gsYUFBYSxHQUFHL0wsT0FBTyxDQUFDTyxXQUFXLENBQUN3TCxhQUFhLENBQUMsR0FBR0MsZUFBZTtJQUV0RixNQUFNRixJQUFpQixHQUFHO01BQ3pCOUwsT0FBTyxFQUFFQSxPQUFPO01BQ2hCa04sV0FBVyxFQUFFLENBQUMsQ0FBQ0gsV0FBVyxFQUFFeE0sV0FBVyxDQUFDLDJDQUEyQyxDQUFDO01BQ3BGNE0sV0FBVyxFQUFFLENBQUMsQ0FBQ0osV0FBVyxFQUFFeE0sV0FBVyxDQUFDLDJDQUEyQyxDQUFDO01BQ3BGMEwsUUFBUSxFQUFFLElBQUk7TUFDZEMsU0FBUyxFQUFFLEtBQUs7TUFDaEJJLFFBQVEsRUFBRSxLQUFLO01BQ2ZFLE1BQU0sRUFBRSxLQUFLO01BQ2I7TUFDQUUsU0FBUyxFQUFFQSxTQUFTO01BQ3BCckcsV0FBVyxFQUFFOUUsU0FBUztNQUN0QjhLLGdCQUFnQixFQUFFLEtBQUs7TUFDdkJlLGlCQUFpQixFQUFFLENBQUMsQ0FBQ3BOLE9BQU8sQ0FBQzhNLFVBQVUsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsSUFBSSxDQUFDOU0sT0FBTyxDQUFDOE0sVUFBVSxDQUFDLENBQUMsSUFBSWhCLElBQUksQ0FBQ29CLFdBQVcsRUFBRTtNQUM5QyxNQUFNRyxXQUFXLEdBQUdyTixPQUFPLENBQUM0QyxTQUFTLENBQUMsQ0FBQztNQUN2Q2tKLElBQUksQ0FBQ1UsTUFBTSxHQUFHLENBQUMsQ0FBQ2EsV0FBVyxDQUFDQyx1QkFBdUIsRUFBRUMsZUFBZTtNQUNwRXpCLElBQUksQ0FBQ1EsUUFBUSxHQUFHZSxXQUFXLENBQUNHLGNBQWM7TUFDMUMxQixJQUFJLENBQUNHLFFBQVEsR0FBR29CLFdBQVcsQ0FBQ0ksY0FBYztNQUMxQzNCLElBQUksQ0FBQ0ksU0FBUyxHQUFHbUIsV0FBVyxDQUFDSyxlQUFlO01BQzVDLE1BQU03QixxQkFBcUIsQ0FBQ0MsSUFBSSxFQUFFQyxhQUFhLEVBQUVDLGVBQWUsQ0FBQztJQUNsRTtJQUNBLE9BQU9GLElBQUk7RUFDWjs7RUFFQTs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLGVBQWU2QixtQ0FBbUNBLENBQ2pEak8sb0JBQTBDLEVBQzFDRSxnQkFBa0MsRUFFbEI7SUFBQSxJQURoQmdPLGNBQWMsR0FBQUMsU0FBQSxDQUFBOU0sTUFBQSxRQUFBOE0sU0FBQSxRQUFBdE0sU0FBQSxHQUFBc00sU0FBQSxNQUFHLEtBQUs7SUFFdEIsTUFBTUMsWUFBWSxHQUFHLE1BQU05RSxPQUFPLENBQUN1QixHQUFHLENBQUMzSyxnQkFBZ0IsQ0FBQ2dCLEdBQUcsQ0FBQ2dNLGVBQWUsQ0FBQyxDQUFDO0lBRTdFLE1BQU1tQixPQUFPLEdBQUcsQ0FDZjtNQUNDbEwsR0FBRyxFQUFFLDJCQUEyQjtNQUNoQztNQUNBO01BQ0FtTCxLQUFLLEVBQUVGLFlBQVksQ0FBQ2hFLE1BQU0sQ0FDeEJnQyxJQUFJLElBQUssQ0FBQ0EsSUFBSSxDQUFDc0IsaUJBQWlCLElBQUl0QixJQUFJLENBQUNvQixXQUFXLElBQUksQ0FBQ3BCLElBQUksQ0FBQ0csUUFBUSxJQUFJSCxJQUFJLENBQUNJLFNBQVMsSUFBSUosSUFBSSxDQUFDTyxnQkFDbkc7SUFDRCxDQUFDLEVBQ0Q7TUFDQ3hKLEdBQUcsRUFBRSw4QkFBOEI7TUFDbkM7TUFDQTtNQUNBO01BQ0FtTCxLQUFLLEVBQUVGLFlBQVksQ0FBQ2hFLE1BQU0sQ0FDeEJnQyxJQUFJLElBQUssQ0FBQ0EsSUFBSSxDQUFDc0IsaUJBQWlCLElBQUl0QixJQUFJLENBQUNvQixXQUFXLElBQUksQ0FBQ3BCLElBQUksQ0FBQ0csUUFBUSxJQUFJSCxJQUFJLENBQUNJLFNBQVMsSUFBSSxDQUFDSixJQUFJLENBQUNPLGdCQUNwRztJQUNELENBQUMsRUFDRDtNQUNDeEosR0FBRyxFQUFFLGdCQUFnQjtNQUNyQm1MLEtBQUssRUFBRUYsWUFBWSxDQUFDaEUsTUFBTSxDQUN4QmdDLElBQUksSUFBSyxDQUFDQSxJQUFJLENBQUNzQixpQkFBaUIsSUFBSXRCLElBQUksQ0FBQ29CLFdBQVcsSUFBSXBCLElBQUksQ0FBQ0csUUFBUSxJQUFJSCxJQUFJLENBQUNRLFFBQVEsSUFBSVIsSUFBSSxDQUFDVSxNQUNqRztJQUNELENBQUMsRUFDRDtNQUNDM0osR0FBRyxFQUFFLGlCQUFpQjtNQUN0Qm1MLEtBQUssRUFBRUYsWUFBWSxDQUFDaEUsTUFBTSxDQUN4QmdDLElBQUksSUFBSyxDQUFDQSxJQUFJLENBQUNzQixpQkFBaUIsSUFBSXRCLElBQUksQ0FBQ29CLFdBQVcsSUFBSXBCLElBQUksQ0FBQ0csUUFBUSxJQUFJSCxJQUFJLENBQUNRLFFBQVEsSUFBSSxDQUFDUixJQUFJLENBQUNVLE1BQ2xHO0lBQ0QsQ0FBQztJQUNEO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7TUFDQzNKLEdBQUcsRUFBRSxtQkFBbUI7TUFDeEJtTCxLQUFLLEVBQUVGLFlBQVksQ0FBQ2hFLE1BQU0sQ0FDeEJnQyxJQUFJLElBQ0pBLElBQUksQ0FBQ3NCLGlCQUFpQixJQUNyQixDQUFDdEIsSUFBSSxDQUFDb0IsV0FBVyxJQUFJLENBQUNwQixJQUFJLENBQUNxQixXQUFXLElBQUlyQixJQUFJLENBQUNZLFNBQVUsSUFDekRaLElBQUksQ0FBQ29CLFdBQVcsSUFBSXBCLElBQUksQ0FBQ0csUUFBUSxJQUFJLENBQUNILElBQUksQ0FBQ1EsUUFBUSxJQUFJUixJQUFJLENBQUNZLFNBQVUsSUFDdEVaLElBQUksQ0FBQ29CLFdBQVcsSUFBSSxDQUFDcEIsSUFBSSxDQUFDRyxRQUFRLElBQUksQ0FBQ0gsSUFBSSxDQUFDSSxTQUFVO01BQUk7TUFDMURKLElBQUksQ0FBQ3FCLFdBQVcsSUFBSXJCLElBQUksQ0FBQ1ksU0FDNUI7SUFDRCxDQUFDLENBQ0Q7SUFDRCxNQUFNcEssV0FBVyxHQUFHLENBQUNzTCxjQUFjLEdBQUcsRUFBRSxHQUFHLGNBQWM7SUFDekQsS0FBSyxNQUFNO01BQUUvSyxHQUFHO01BQUVtTDtJQUFNLENBQUMsSUFBSUQsT0FBTyxFQUFFO01BQ3JDck8sb0JBQW9CLENBQUNVLFdBQVcsQ0FDL0JrQyxXQUFXLEdBQUdPLEdBQUc7TUFDakI7TUFDQTtNQUNBO01BQ0E7TUFDQW1MLEtBQUssQ0FBQ3BOLEdBQUcsQ0FBRWtMLElBQUksSUFDZGpKLEdBQUcsS0FBSywyQkFBMkIsR0FBRztRQUFFL0IsS0FBSyxFQUFFZ0wsSUFBSSxDQUFDOUwsT0FBTztRQUFFcUcsV0FBVyxFQUFFeUYsSUFBSSxDQUFDekY7TUFBWSxDQUFDLEdBQUd5RixJQUFJLENBQUM5TCxPQUNyRyxDQUNELENBQUM7SUFDRjtFQUNEO0VBRUEsTUFBTW9DLFlBQVksR0FBRztJQUNwQjhDLG1CQUFtQjtJQUNuQjZFLG9CQUFvQjtJQUNwQnBDLDJCQUEyQjtJQUMzQmIsNEJBQTRCO0lBQzVCZixtQ0FBbUM7SUFDbkNOLDRCQUE0QjtJQUM1QjVCLG9CQUFvQjtJQUNwQmUsc0JBQXNCO0lBQ3RCVixrQ0FBa0M7SUFDbENsRCxrQkFBa0I7SUFDbEIyTSxtQ0FBbUM7SUFDbkNwTyxpQkFBaUI7SUFDakJDLDBCQUEwQjtJQUMxQjZDLG1CQUFtQjtJQUNuQnVLLGVBQWU7SUFDZjdCLDhCQUE4QjtJQUM5QnpCO0VBQ0QsQ0FBQztFQUFDLE9BRWFsSCxZQUFZO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -258,28 +258,30 @@ function getNonDeletableActivesOfDraftsText(resourceModel: ResourceModel, number
|
|
|
258
258
|
return retTxt;
|
|
259
259
|
}
|
|
260
260
|
|
|
261
|
-
function getUnSavedContextUser(unSavedContext: ODataV4Context): string {
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
261
|
+
async function getUnSavedContextUser(unSavedContext: ODataV4Context): Promise<string> {
|
|
262
|
+
const adminDataPre = unSavedContext.getObject("DraftAdministrativeData") as DraftAdministrativeDataType | undefined;
|
|
263
|
+
if (!adminDataPre?.LastChangedByUserDescription && !adminDataPre?.LastChangedByUser) {
|
|
264
|
+
await unSavedContext.requestProperty([
|
|
265
|
+
"DraftAdministrativeData/LastChangedByUserDescription",
|
|
266
|
+
"DraftAdministrativeData/LastChangedByUser"
|
|
267
|
+
]);
|
|
266
268
|
}
|
|
267
|
-
|
|
268
|
-
return
|
|
269
|
+
const adminData = unSavedContext.getObject("DraftAdministrativeData") as DraftAdministrativeDataType | undefined;
|
|
270
|
+
return adminData?.LastChangedByUserDescription ?? adminData?.LastChangedByUser ?? "";
|
|
269
271
|
}
|
|
270
272
|
|
|
271
|
-
function getUnsavedContextsText(
|
|
273
|
+
async function getUnsavedContextsText(
|
|
272
274
|
resourceModel: ResourceModel,
|
|
273
275
|
numberOfSelectedContexts: number,
|
|
274
276
|
unSavedContexts: ODataV4Context[],
|
|
275
277
|
totalDeletable: number
|
|
276
|
-
): DeleteTextInfo {
|
|
278
|
+
): Promise<DeleteTextInfo> {
|
|
277
279
|
let infoTxt = "",
|
|
278
280
|
optionTxt = "",
|
|
279
281
|
optionWithoutTxt = false;
|
|
280
282
|
if (numberOfSelectedContexts === 1 && unSavedContexts.length === 1) {
|
|
281
283
|
//only one unsaved object are selected
|
|
282
|
-
const lastChangedByUser = getUnSavedContextUser(unSavedContexts[0]);
|
|
284
|
+
const lastChangedByUser = await getUnSavedContextUser(unSavedContexts[0]);
|
|
283
285
|
infoTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_CHANGES", [lastChangedByUser]);
|
|
284
286
|
optionWithoutTxt = true;
|
|
285
287
|
} else if (numberOfSelectedContexts === unSavedContexts.length) {
|
|
@@ -289,7 +291,7 @@ function getUnsavedContextsText(
|
|
|
289
291
|
} else if (totalDeletable === unSavedContexts.length) {
|
|
290
292
|
// non-deletable/locked exists, all deletable are unsaved by others
|
|
291
293
|
if (unSavedContexts.length === 1) {
|
|
292
|
-
const lastChangedByUser = getUnSavedContextUser(unSavedContexts[0]);
|
|
294
|
+
const lastChangedByUser = await getUnSavedContextUser(unSavedContexts[0]);
|
|
293
295
|
infoTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_AND_FEW_OBJECTS_LOCKED_SINGULAR", [
|
|
294
296
|
lastChangedByUser
|
|
295
297
|
]);
|
|
@@ -300,7 +302,7 @@ function getUnsavedContextsText(
|
|
|
300
302
|
} else if (totalDeletable > unSavedContexts.length) {
|
|
301
303
|
// non-deletable/locked exists, deletable include unsaved and other types.
|
|
302
304
|
if (unSavedContexts.length === 1) {
|
|
303
|
-
const lastChangedByUser = getUnSavedContextUser(unSavedContexts[0]);
|
|
305
|
+
const lastChangedByUser = await getUnSavedContextUser(unSavedContexts[0]);
|
|
304
306
|
optionTxt = resourceModel.getText("C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_UNSAVED_SINGULAR", [
|
|
305
307
|
lastChangedByUser
|
|
306
308
|
]);
|
|
@@ -382,14 +384,14 @@ function getDraftsToDeleteBeforeActive(options: DeleteOption[]): ODataV4Context[
|
|
|
382
384
|
}, contexts);
|
|
383
385
|
}
|
|
384
386
|
|
|
385
|
-
function updateDraftOptionsForDeletableTexts(
|
|
387
|
+
async function updateDraftOptionsForDeletableTexts(
|
|
386
388
|
mParameters: DeleteParameters,
|
|
387
389
|
vContexts: ODataV4Context[],
|
|
388
390
|
totalDeletable: number,
|
|
389
391
|
resourceModel: ResourceModel,
|
|
390
392
|
items: Control[],
|
|
391
393
|
options: DeleteOption[]
|
|
392
|
-
): void {
|
|
394
|
+
): Promise<void> {
|
|
393
395
|
let { numberOfSelectedContexts, draftsWithDeletableActive, unSavedContexts, lockedContexts, draftsWithNonDeletableActive } =
|
|
394
396
|
mParameters;
|
|
395
397
|
draftsWithDeletableActive ??= [];
|
|
@@ -432,7 +434,7 @@ function updateDraftOptionsForDeletableTexts(
|
|
|
432
434
|
// option: unsaved changes by others
|
|
433
435
|
if (unSavedContexts.length > 0) {
|
|
434
436
|
const unsavedChangesTxts =
|
|
435
|
-
deleteHelper.getUnsavedContextsText(resourceModel, numberOfSelectedContexts, unSavedContexts, totalDeletable) || {};
|
|
437
|
+
(await deleteHelper.getUnsavedContextsText(resourceModel, numberOfSelectedContexts, unSavedContexts, totalDeletable)) || {};
|
|
436
438
|
if (unsavedChangesTxts.infoTxt) {
|
|
437
439
|
items.push(new Text({ text: unsavedChangesTxts.infoTxt }));
|
|
438
440
|
}
|
|
@@ -24,7 +24,10 @@ sap.ui.define([], function () {
|
|
|
24
24
|
function getRouteTargetNames(target) {
|
|
25
25
|
return (Array.isArray(target) ? target : [target]).map(getRouteTargetName);
|
|
26
26
|
}
|
|
27
|
-
|
|
27
|
+
_exports.getRouteTargetNames = getRouteTargetNames;
|
|
28
|
+
function getRouteTargets(target) {
|
|
29
|
+
return Array.isArray(target) ? target : [target];
|
|
30
|
+
}
|
|
28
31
|
/**
|
|
29
32
|
* Map one route target to the target name.
|
|
30
33
|
* @example
|
|
@@ -36,11 +39,11 @@ sap.ui.define([], function () {
|
|
|
36
39
|
* @param target A route target manifest configuration entry
|
|
37
40
|
* @returns The target name
|
|
38
41
|
*/
|
|
39
|
-
_exports.
|
|
42
|
+
_exports.getRouteTargets = getRouteTargets;
|
|
40
43
|
function getRouteTargetName(target) {
|
|
41
44
|
return typeof target === "object" ? target.name : target;
|
|
42
45
|
}
|
|
43
46
|
_exports.getRouteTargetName = getRouteTargetName;
|
|
44
47
|
return _exports;
|
|
45
48
|
}, false);
|
|
46
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRSb3V0ZVRhcmdldE5hbWVzIiwidGFyZ2V0IiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiZ2V0Um91dGVUYXJnZXROYW1lIiwiX2V4cG9ydHMiLCJnZXRSb3V0ZVRhcmdldHMiLCJuYW1lIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNYW5pZmVzdEhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJvdXRlVGFyZ2V0IH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5cbi8qKlxuICogTWFwIGEgcm91dGUncyB0YXJnZXQgcHJvcGVydHkgLSBmcm9tIFwic2FwLnVpNS9yb3V0aW5nL3JvdXRlcy9bXS90YXJnZXRcIiAtIHRvIGEgbGlzdCBvZiB0YXJnZXQgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICogZ2V0Um91dGVUYXJnZXROYW1lcyhcIm15VGFyZ2V0XCIpO1xuICogLy8gW1wibXlUYXJnZXRcIl1cbiAqXG4gKiBnZXRSb3V0ZVRhcmdldE5hbWVzKFtcIm15VGFyZ2V0MVwiLCBcIm15VGFyZ2V0MlwiXSk7XG4gKiAvLyBbXCJteVRhcmdldDFcIiwgXCJteVRhcmdldDJcIl1cbiAqXG4gKiBnZXRSb3V0ZVRhcmdldE5hbWVzKFtcIm15VGFyZ2V0MVwiLCB7IG5hbWU6IFwibXlUYXJnZXQyXCIgfV0pO1xuICogLy8gW1wibXlUYXJnZXQxXCIsIFwibXlUYXJnZXQyXCJdXG4gKiBAc2VlIE1hbmlmZXN0Q29udGVudFVJNVxuICogQHBhcmFtIHRhcmdldCBUaGUgcm91dGUncyBcInRhcmdldFwiIHByb3BlcnR5IHZhbHVlXG4gKiBAcmV0dXJucyBUaGUgdGFyZ2V0IG5hbWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3V0ZVRhcmdldE5hbWVzKHRhcmdldDogUm91dGVUYXJnZXQgfCBSb3V0ZVRhcmdldFtdKTogc3RyaW5nW10ge1xuXHRyZXR1cm4gKEFycmF5LmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldCA6IFt0YXJnZXRdKS5tYXAoZ2V0Um91dGVUYXJnZXROYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvdXRlVGFyZ2V0cyh0YXJnZXQ6IFJvdXRlVGFyZ2V0IHwgUm91dGVUYXJnZXRbXSk6IFJvdXRlVGFyZ2V0W10ge1xuXHRyZXR1cm4gQXJyYXkuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0IDogW3RhcmdldF07XG59XG4vKipcbiAqIE1hcCBvbmUgcm91dGUgdGFyZ2V0IHRvIHRoZSB0YXJnZXQgbmFtZS5cbiAqIEBleGFtcGxlXG4gKiBnZXRSb3V0ZVRhcmdldE5hbWUoXCJteVRhcmdldFwiKTtcbiAqIC8vIFwibXlUYXJnZXRcIlxuICpcbiAqIGdldFJvdXRlVGFyZ2V0TmFtZSh7IG5hbWU6IFwibXlUYXJnZXRcIiB9KTtcbiAqIC8vIFwibXlUYXJnZXRcIlxuICogQHBhcmFtIHRhcmdldCBBIHJvdXRlIHRhcmdldCBtYW5pZmVzdCBjb25maWd1cmF0aW9uIGVudHJ5XG4gKiBAcmV0dXJucyBUaGUgdGFyZ2V0IG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJvdXRlVGFyZ2V0TmFtZSh0YXJnZXQ6IFJvdXRlVGFyZ2V0KTogc3RyaW5nIHtcblx0cmV0dXJuIHR5cGVvZiB0YXJnZXQgPT09IFwib2JqZWN0XCIgPyB0YXJnZXQubmFtZSA6IHRhcmdldDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTQSxtQkFBbUJBLENBQUNDLE1BQW1DLEVBQVk7SUFDbEYsT0FBTyxDQUFDQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0YsTUFBTSxDQUFDLEdBQUdBLE1BQU0sR0FBRyxDQUFDQSxNQUFNLENBQUMsRUFBRUcsR0FBRyxDQUFDQyxrQkFBa0IsQ0FBQztFQUMzRTtFQUFDQyxRQUFBLENBQUFOLG1CQUFBLEdBQUFBLG1CQUFBO0VBRU0sU0FBU08sZUFBZUEsQ0FBQ04sTUFBbUMsRUFBaUI7SUFDbkYsT0FBT0MsS0FBSyxDQUFDQyxPQUFPLENBQUNGLE1BQU0sQ0FBQyxHQUFHQSxNQUFNLEdBQUcsQ0FBQ0EsTUFBTSxDQUFDO0VBQ2pEO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVZBSyxRQUFBLENBQUFDLGVBQUEsR0FBQUEsZUFBQTtFQVdPLFNBQVNGLGtCQUFrQkEsQ0FBQ0osTUFBbUIsRUFBVTtJQUMvRCxPQUFPLE9BQU9BLE1BQU0sS0FBSyxRQUFRLEdBQUdBLE1BQU0sQ0FBQ08sSUFBSSxHQUFHUCxNQUFNO0VBQ3pEO0VBQUNLLFFBQUEsQ0FBQUQsa0JBQUEsR0FBQUEsa0JBQUE7RUFBQSxPQUFBQyxRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|