@sapui5/sap.fe.macros 1.142.0 → 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/macros/.library +1 -1
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +1 -7
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +0 -6
- package/src/sap/fe/macros/ConditionalSwitch.js +1 -2
- package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
- package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
- package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
- package/src/sap/fe/macros/Field.js +5 -5
- package/src/sap/fe/macros/Field.ts +5 -3
- package/src/sap/fe/macros/FooterContent.js +3 -2
- package/src/sap/fe/macros/FooterContent.tsx +2 -10
- package/src/sap/fe/macros/KPITag.js +6 -6
- package/src/sap/fe/macros/KPITag.tsx +5 -5
- package/src/sap/fe/macros/MacroAPI.js +2 -2
- package/src/sap/fe/macros/MacroAPI.ts +1 -1
- package/src/sap/fe/macros/MessageButton.js +3 -3
- package/src/sap/fe/macros/MessageButton.tsx +3 -2
- package/src/sap/fe/macros/MicroChart.js +3 -2
- package/src/sap/fe/macros/MicroChart.tsx +1 -1
- package/src/sap/fe/macros/Share.js +7 -7
- package/src/sap/fe/macros/Share.tsx +9 -6
- package/src/sap/fe/macros/Status.js +6 -5
- package/src/sap/fe/macros/Status.tsx +3 -4
- package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
- package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
- package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
- package/src/sap/fe/macros/chart/ChartDelegate.js +22 -1
- package/src/sap/fe/macros/chart/ChartDelegate.ts +29 -2
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +5 -2
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +5 -2
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
- package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
- package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
- package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +4 -4
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +3 -3
- package/src/sap/fe/macros/field/FieldFormatOptions.js +2 -2
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
- package/src/sap/fe/macros/field/FieldRuntime.js +7 -2
- package/src/sap/fe/macros/field/FieldRuntime.ts +7 -1
- package/src/sap/fe/macros/filter/FilterUtils.js +31 -5
- package/src/sap/fe/macros/filter/FilterUtils.ts +40 -6
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +6 -3
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +5 -1
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +19 -9
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +76 -61
- package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
- package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
- package/src/sap/fe/macros/form/FormContainer.block.js +22 -6
- package/src/sap/fe/macros/form/FormContainer.block.ts +24 -6
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
- package/src/sap/fe/macros/library.js +5 -6
- package/src/sap/fe/macros/{library.ts → library.tsx} +1 -1
- package/src/sap/fe/macros/messagebundle.properties +6 -0
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
- package/src/sap/fe/macros/messages/MessageButton.js +21 -12
- package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
- package/src/sap/fe/macros/quickView/QuickView.js +5 -4
- package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
- package/src/sap/fe/macros/table/Action.js +7 -4
- package/src/sap/fe/macros/table/Action.ts +3 -3
- package/src/sap/fe/macros/table/Column.js +3 -2
- package/src/sap/fe/macros/table/Column.ts +1 -1
- package/src/sap/fe/macros/table/MdcTableTemplate.js +6 -9
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +5 -7
- package/src/sap/fe/macros/table/Table.block.js +6 -3
- package/src/sap/fe/macros/table/Table.block.tsx +13 -3
- package/src/sap/fe/macros/table/TableAPI.js +13 -8
- package/src/sap/fe/macros/table/TableAPI.ts +10 -3
- package/src/sap/fe/macros/table/TableDefinition.js +2 -2
- package/src/sap/fe/macros/table/TableDefinition.ts +1 -1
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +3 -1
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +4 -0
- package/src/sap/fe/macros/table/TableRuntime.js +24 -12
- package/src/sap/fe/macros/table/TableRuntime.ts +27 -11
- package/src/sap/fe/macros/table/Utils.js +9 -3
- package/src/sap/fe/macros/table/Utils.ts +14 -8
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +6 -4
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +6 -5
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -5
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +13 -4
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +37 -10
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +39 -15
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
- package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
- package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
|
@@ -138,7 +138,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
138
138
|
width: "100%",
|
|
139
139
|
multipleLines: parameter.annotations.UI?.MultiLineText?.valueOf() === true,
|
|
140
140
|
required: compileExpression(isActionParameterRequiredExpression(parameter, this.action, convertTypes(this.metaModel))),
|
|
141
|
-
valueHelp: hasValueHelp(parameter) ? generate([this.actionName, parameter.name]) : undefined,
|
|
141
|
+
valueHelp: hasValueHelp(parameter) ? generate([this.actionName, parameter.name, "FieldValueHelp"]) : undefined,
|
|
142
142
|
change: async e => this.handleFieldChange(e, parameter),
|
|
143
143
|
visible: compileExpression(not(equal(getExpressionFromAnnotation(parameter.annotations?.UI?.Hidden), true))),
|
|
144
144
|
ariaLabelledBy: [generate(["APD_", parameter.name, "Label"])],
|
|
@@ -244,7 +244,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
244
244
|
multipleLines: isMultiLineText(parameter),
|
|
245
245
|
required: compileExpression(isActionParameterRequiredExpression(parameter, this.action, convertTypes(this.metaModel))),
|
|
246
246
|
change: async e => this.handleFieldChange(e, parameter),
|
|
247
|
-
valueHelp: hasValueHelp(parameter) ? generate([this.actionName, parameter.name]) : undefined,
|
|
247
|
+
valueHelp: hasValueHelp(parameter) ? generate([this.actionName, parameter.name, "FieldValueHelp"]) : undefined,
|
|
248
248
|
dependents: this.createParameterDialogValueHelp(parameter, parameterContext),
|
|
249
249
|
visible: compileExpression(ifElse(parameter.name === "ResultIsActiveEntity", false, not(equal(getExpressionFromAnnotation(parameter.annotations?.UI?.Hidden), true)))),
|
|
250
250
|
ariaLabelledBy: [generate(["APD_", parameter.name, "Label"])],
|
|
@@ -263,7 +263,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
263
263
|
return undefined;
|
|
264
264
|
}
|
|
265
265
|
return _jsx(ValueHelp, {
|
|
266
|
-
id: generate([this.actionName, parameter.name]),
|
|
266
|
+
id: generate([this.actionName, parameter.name, "FieldValueHelp"]),
|
|
267
267
|
delegate: {
|
|
268
268
|
name: "sap/fe/macros/valuehelp/ValueHelpDelegate",
|
|
269
269
|
payload: {
|
|
@@ -1091,4 +1091,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
1091
1091
|
_exports = ActionParameterDialog;
|
|
1092
1092
|
return _exports;
|
|
1093
1093
|
}, false);
|
|
1094
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJhY3Rpb24iLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyVmFsdWVzIiwiZW50aXR5U2V0TmFtZSIsIm1lc3NhZ2VIYW5kbGVyIiwiaXNEaWFsb2dPcGVuIiwiYnV0dG9uTG9jayIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicGFyYW1ldGVyTW9kZWwiLCJKU09OTW9kZWwiLCIkZGlzcGxheU1vZGUiLCJhY3Rpb25OYW1lIiwiYWN0aW9uSGVscGVyIiwiZ2V0QWN0aW9uTmFtZSIsIm1ldGFNb2RlbCIsIm1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicmVzb3VyY2VNb2RlbCIsInZpZXciLCJnZXRSZXNvdXJjZU1vZGVsIiwiYXBwQ29tcG9uZW50IiwicGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlIiwicGFyYW1ldGVyc1ZhbHVlc1JlamVjdCIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0UGFyYW1ldGVyRWRpdE1vZGUiLCJwYXJhbWV0ZXIiLCJhbm5vdGF0aW9ucyIsImZpZWxkQ29udHJvbCIsIkNvbW1vbiIsIkZpZWxkQ29udHJvbCIsImltbXV0YWJsZSIsIkNvcmUiLCJJbW11dGFibGUiLCJ2YWx1ZU9mIiwiY29tcHV0ZWQiLCJDb21wdXRlZCIsImNvbnN0YW50IiwiRmllbGRFZGl0TW9kZSIsIlJlYWRPbmx5IiwiaWZFbHNlIiwiaXNSZWFkT25seUV4cHJlc3Npb24iLCJpc0Rpc2FibGVkRXhwcmVzc2lvbiIsIkRpc2FibGVkIiwiRWRpdGFibGUiLCJjcmVhdGVGb3JtRWxlbWVudCIsImFjdGlvbk1ldGFQYXRoIiwiaXNCb3VuZCIsImdldE1ldGFQYXRoIiwiY29udGV4dHMiLCJnZXRQYXRoIiwiY29udmVydFR5cGVzIiwibmFtZXNwYWNlIiwibmFtZSIsIm1ldGFDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJmaWVsZCIsImxhYmVsIiwiTGFiZWwiLCJnZXRUZXh0IiwidG9TdHJpbmciLCJzdHJlYW1QYXJhbWV0ZXIiLCJpc0NvbGxlY3Rpb24iLCJjcmVhdGVNdWx0aUZpZWxkIiwidHlwZSIsInN0YXJ0c1dpdGgiLCJnZXRTdHJlYW1Qcm9wZXJ0eSIsImNyZWF0ZUZpbGVVcGxvYWRlciIsImNyZWF0ZUZpZWxkIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJjaGlsZHJlbiIsIl9qc3giLCJpZCIsImdlbmVyYXRlIiwidGV4dCIsInBhcmFtZXRlckNvbnRleHQiLCJkaXNwbGF5IiwiRmllbGRIZWxwZXIiLCJnZXRBUERpYWxvZ0Rpc3BsYXlGb3JtYXQiLCJnZXRPYmplY3QiLCJjb250ZXh0IiwiZXJyIiwiTG9nIiwid2FybmluZyIsInBsYWNlSG9sZGVyIiwiVUkiLCJQbGFjZWhvbGRlciIsInBsYWNlSG9sZGVyRXhwcmVzc2lvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwidW5kZWZpbmVkIiwicGFyYW1ldGVyVHlwZSIsIkVETV9UWVBFX01BUFBJTkciLCJNdWx0aVZhbHVlRmllbGQiLCJwbGFjZWhvbGRlciIsIml0ZW1zIiwicGF0aCIsImRlbGVnYXRlIiwiZWRpdE1vZGUiLCJ3aWR0aCIsIm11bHRpcGxlTGluZXMiLCJNdWx0aUxpbmVUZXh0IiwicmVxdWlyZWQiLCJpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbiIsInZhbHVlSGVscCIsImhhc1ZhbHVlSGVscCIsImNoYW5nZSIsImUiLCJoYW5kbGVGaWVsZENoYW5nZSIsInZpc2libGUiLCJub3QiLCJlcXVhbCIsIkhpZGRlbiIsImFyaWFMYWJlbGxlZEJ5IiwiZGVwZW5kZW50cyIsImNyZWF0ZVBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscCIsIk11bHRpVmFsdWVGaWVsZEl0ZW0iLCJkZXNjcmlwdGlvbiIsImZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcyIsIkFjY2VwdGFibGVNZWRpYVR5cGVzIiwiYWNjZXB0ZWRUeXBlcyIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImpvaW4iLCJoYW5kbGVUeXBlTWlzc21hdGNoIiwiZXZlbnQiLCJmaWxlVXBsb2FkZXIiLCJnZXRTb3VyY2UiLCJnaXZlblR5cGUiLCJnZXRQYXJhbWV0ZXIiLCJnZXRNaW1lVHlwZSIsInNob3dUeXBlTWlzbWF0Y2hEaWFsb2ciLCJmaWxlTWF4aW11bVNpemUiLCJjYWxjdWxhdGVNQmZyb21CeXRlIiwibWF4TGVuZ3RoIiwiaGFuZGxlRmlsZVNpemVFeGNlZWQiLCJzaG93RmlsZVNpemVFeGNlZWREaWFsb2ciLCJnZXRNYXhpbXVtRmlsZVNpemUiLCJ0b0ZpeGVkIiwib25VcGxvYWRDb21wbGV0ZSIsImRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkIiwiRmlsZVVwbG9hZGVyIiwiYnV0dG9uT25seSIsImljb25Pbmx5IiwibXVsdGlwbGUiLCJ0b29sdGlwIiwiaWNvbiIsInN0eWxlIiwic2VuZFhIUiIsInVzZU11bHRpcGFydCIsInNhbWVGaWxlbmFtZUFsbG93ZWQiLCJ1cGxvYWRPbkNoYW5nZSIsIm1pbWVUeXBlIiwidHlwZU1pc3NtYXRjaCIsIm1heGltdW1GaWxlU2l6ZSIsImZpbGVTaXplRXhjZWVkIiwiaHR0cFJlcXVlc3RNZXRob2QiLCJGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCIsIlB1dCIsInVwbG9hZENvbXBsZXRlIiwiaGFuZGxlRmlsZVVwbG9hZGVyQ2hhbmdlIiwiYWRkaXRpb25hbFZhbHVlIiwiYmluZGluZ1ZhbHVlIiwiZ2V0QVBEaWFsb2dCaW5kaW5nVmFsdWUiLCJnZXRBZGRpdGlvbmFsVmFsdWUiLCJGaWVsZCIsInBheWxvYWQiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwidmFsdWUiLCJpc011bHRpTGluZVRleHQiLCJWYWx1ZUhlbHAiLCJwcm9wZXJ0eVBhdGgiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwicXVhbGlmaWVycyIsInZhbHVlSGVscFF1YWxpZmllciIsInZhbGlkYXRlSW5wdXQiLCJyZXF1aXJlc1ZhbGlkYXRpb24iLCJ0eXBlYWhlYWQiLCJQb3BvdmVyIiwiTVRhYmxlIiwiY2FzZVNlbnNpdGl2ZSIsInVzZUNhc2VTZW5zaXRpdmVGaWx0ZXJSZXF1ZXN0cyIsImVudGl0eUNvbnRhaW5lciIsIkNhcGFiaWxpdGllcyIsIkZpbHRlckZ1bmN0aW9ucyIsIk1vZGVsSGVscGVyIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwidXNlQXNWYWx1ZUhlbHAiLCJWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJkaWFsb2ciLCJjcmVhdGVGaWVsZFZIRGlhbG9nIiwiVkhEaWFsb2ciLCJmaWVsZFByb21pc2UiLCJwYXJhbWV0ZXJJbmZvIiwiZmluZCIsImFjdGlvblBhcmFtZXRlckluZm8iLCJ2YWxpZGF0aW9uUHJvbWlzZSIsInJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyIiwicGFyYW1ldGVyc1ZhbHVlcyIsImhhc0Vycm9yIiwiZXJyb3IiLCJBY3Rpb25SdW50aW1lIiwiX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIiLCJtZXNzYWdlIiwiZmlsZXMiLCJnZXRCYXNlNjRGaWxlIiwiZ2V0TWltZVR5cGVQYXRoIiwiZ2V0RmlsZU5hbWVQYXRoIiwiQ29udGVudERpc3Bvc2l0aW9uIiwiRmlsZW5hbWUiLCJNZWRpYVR5cGUiLCJ0eXBlUmVmZXJlbmNlIiwicHJvcGVydGllcyIsInByb3BlcnR5IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsInJlc3VsdCIsInNwbGl0IiwicmVhZEFzRGF0YVVSTCIsIml0ZW0iLCJtZXNzYWdlcyIsIk1lc3NhZ2luZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJjb250cm9sSWQiLCJyZWxldmFudE1lc3NhZ2VzIiwiZmlsdGVyIiwibXNnIiwiZ2V0Q29udHJvbElkcyIsInNvbWUiLCJpbmNsdWRlcyIsInJlbW92ZU1lc3NhZ2VzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnRzIiwiZ2V0RGlhbG9nIiwiY3JlYXRlRGlhbG9nIiwiZGlhbG9nQ29udGVudHMiLCJkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzIiwiYWN0aW9uUGFyYW1ldGVycyIsInNsaWNlIiwiT3BlcmF0aW9uUGFyYW1ldGVyRmFjZXRzIiwiYWN0aW9uUGFyYW1ldGVyR3JvdXBzIiwiZm9yRWFjaCIsImZhY2V0IiwiZmFjZXRUaXRsZSIsIiRUeXBlIiwiaGFzRmllbGRHcm91cFRhcmdldCIsImZpZWxkR3JvdXAiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiZ3JvdXBlZEFjdGlvblBhcmFtZXRlcnMiLCJEYXRhIiwiZ3JvdXAiLCJwdXNoIiwiVmFsdWUiLCJkYXRhIiwiZ2V0R3JvdXBGb3JtIiwiYWxsIiwiYmluZCIsImZvcm1EYXRhIiwicGFyYW1ldGVyR3JvdXAiLCJvcEZhY2V0cyIsImRpYWxvZ0NvbnRlbnQiLCJUaXRsZSIsImVsZW1lbnQiLCJvcEZhY2V0IiwicmVnaXN0ZXJBY3Rpb25QYXJhbWV0ZXJJbmZvIiwibWVzc2FnZVN0cmlwIiwiZ2V0Q3VzdG9tQWN0aW9uTWVzc2FnZVN0cmlwVGV4dCIsImVuZEJ1dHRvbiIsIkJ1dHRvbiIsInByZXNzIiwib25DYW5jZWwiLCJEaWFsb2ciLCJ0aXRsZSIsImdldFRpdGxlVGV4dCIsImVzY2FwZUhhbmRsZXIiLCJkcmFnZ2FibGUiLCJyZXNpemFibGUiLCJhZnRlckNsb3NlIiwiYmVmb3JlT3BlbiIsImFmdGVyT3BlbiIsImluaXRpYWxGb2N1cyIsImJlZ2luQnV0dG9uIiwiaXNDcmVhdGVBY3Rpb24iLCJnZXRCZWdpbkJ1dHRvbkxhYmVsIiwib25BcHBseSIsImNvbnRlbnQiLCJNZXNzYWdlU3RyaXAiLCJzaG93SWNvbiIsIlNpbXBsZUZvcm0iLCJjb2x1bW5zTSIsImVkaXRhYmxlIiwibGFiZWxTcGFuTCIsImxhYmVsU3Bhbk0iLCJiaW5kaW5nIiwiYWN0aW9uTGFiZWwiLCJrZXkiLCJkZWZhdWx0S2V5IiwiZ2V0T3ZlcnJpZGRlblRleHQiLCJib3VuZEFjdGlvbk5hbWUiLCJwb3AiLCJzdWZmaXhSZXNvdXJjZUtleSIsImNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyIsImdldE9iamVjdEJpbmRpbmciLCJnZXRQYXJhbWV0ZXJDb250ZXh0IiwiQnVzeUxvY2tlciIsImxvY2siLCJ2YWxpZGF0ZVByb3BlcnRpZXMiLCJ1bmxvY2siLCJuZXdWYWx1ZXNEaWN0aW9uYXJ5IiwiT2JqZWN0IiwiYXNzaWduIiwidmFsdWVzIiwiZ2V0TW9kZWwiLCJnZXRQcm9wZXJ0eSIsInBhcmFtVmFsdWUiLCJLZXkiLCJpc05ld1ZhbHVlIiwic2V0UHJvcGVydHkiLCJVaU1vZGVsQ29uc3RhbnRzIiwiRG9jdW1lbnRNb2RpZmllZCIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsInJlc2V0U3RhdGUiLCJ1bmxvY2tEaWFsb2ciLCJ1cGRhdGVEaWFsb2dCaW5kaW5nQ29udGV4dEZvckVycm9yIiwibGVuZ3RoIiwid2FybmluZ0NvbnRleHQiLCJpbmZvQ29udGV4dCIsImVycm9uZW91c0N0eCIsImdldE1lc3NhZ2VzIiwiZ2V0VHlwZSIsIk1lc3NhZ2VUeXBlIiwiV2FybmluZyIsIkluZm9ybWF0aW9uIiwiRXJyb3IiLCJjb250ZXh0VG9Vc2UiLCJzZXRCaW5kaW5nQ29udGV4dCIsImlzTG9ja2VkIiwiRkVMaWJyYXJ5IiwiQ29uc3RhbnRzIiwiQ2FuY2VsQWN0aW9uRGlhbG9nIiwiY2xvc2VEaWFsb2ciLCJldmVudHMiLCJvblBhcmFtZXRlckRpYWxvZ0Nsb3NlZCIsImkiLCJjbG9zZSIsIm9wZW5EaWFsb2ciLCJDb21tb25VdGlscyIsInNldFVzZXJEZWZhdWx0cyIsInNldE1vZGVscyIsImFkZERlcGVuZGVudCIsInNldE9wZXJhdGlvbkRlZmF1bHRWYWx1ZXMiLCJvcGVuIiwic2V0TW9kZWwiLCJiaW5kRWxlbWVudCIsIl9ldmVudCIsIndhaXRGb3JQYXJhbWV0ZXJzVmFsdWVzIiwiaXNPcGVuIiwiZ2V0UGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwiYmluZGluZ1BhcmFtZXRlciIsIm9wZXJhdGlvbkJpbmRpbmciLCJwYXJhbWV0ZXJNb2RlbERhdGEiLCJwYXJhbU5hbWUiLCJkZWZhdWx0VmFsdWUiLCJQYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsInBhdGhGb3JDb250ZXh0IiwicmVwbGFjZSIsInJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eSIsInJlcXVlc3RQcm9wZXJ0eSIsIm5vUG9zc2libGVWYWx1ZSIsImxhdGVQcm9wZXJ0eUVycm9yIiwiZ2V0TWFuaWZlc3RGdW5jdGlvblZhbHVlcyIsImJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJGUE1IZWxwZXIiLCJsb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZCIsImdldFByZURlZmluZWRWYWx1ZXMiLCJib3VuZEZ1bmN0aW9uTmFtZSIsIkRlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsInJlcXVlc3RDb250ZXh0T2JqZWN0IiwiZnVuY3Rpb25QYXJhbXMiLCJib3VuZEZ1bmN0aW9uIiwiT3BlcmF0aW9uIiwiZ2V0T3BlcmF0aW9uRnJvbU5hbWUiLCJPRGF0YU9wZXJhdGlvbiIsImVuaGFuY2Ukc2VsZWN0IiwiZ3JvdXBJZCIsImV4ZWN1dGUiLCJpc0Z1bGZpbGxlZCIsImJvdW5kQ29udGV4dCIsInJlcXVlc3RPYmplY3QiLCJjb250ZXh0VmFsdWVzIiwicHJvbWlzZXMiLCJkZWZhdWx0VmFsdWVzIiwiZnVuY3Rpb25WYWx1ZXMiLCJtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzIiwiZmlyc3RWaXNpYmxlUGFyYW1ldGVyIiwiZ2V0VmlzaWJsZSIsImZpcnN0RmllbGQiLCJmb2N1c0luZm8iLCJnZXRGb2N1c0luZm8iLCJ0YXJnZXRJbmZvIiwic2lsZW50IiwiZm9jdXMiLCJvblBhcmFtZXRlckRpYWxvZ09wZW5lZCIsImlzTXVsdGlWYWx1ZSIsInNldFBhcmFtZXRlciIsInBhcmFtZXRlck5hbWUiLCJwYXJhbWV0ZXJQcm92aWRlZFZhbHVlIiwiaGFzT3duUHJvcGVydHkiLCJzZXRPZkZ1bmN0aW9uVmFsdWVzIiwiU2V0IiwiaW5kZXgiLCJzaXplIiwibmV4dCIsInJlZnJlc2giLCJNZXNzYWdlQm94IiwiYWN0aW9ucyIsIkFjdGlvbiIsIk9LIiwiZW1waGFzaXplZEFjdGlvbiIsIm9uQ2xvc2UiLCJleHRlbnNpb25BUEkiLCJnZXRDb250cm9sbGVyIiwiZ2V0RXh0ZW5zaW9uQVBJIiwiY29udGVudFdpZHRoIiwiZnVuY3Rpb25Db250ZXh0IiwiZ2V0QmluZGluZyIsImlzQSIsImRlc3Ryb3kiLCJvSW50ZXJmYWNlIiwidGV4dENvbnRleHQiLCJjb250ZXh0UGF0aCIsImxvY2FsRGF0YVByb3BlcnR5IiwiJE5hbWUiLCJ2YWx1ZUxpc3RCeVF1YWxpZmllciIsInJlcXVlc3RWYWx1ZUxpc3RJbmZvIiwidmFsdWVMaXN0UGFyYW1ldGVyIiwiUGFyYW1ldGVycyIsIkxvY2FsRGF0YVByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIlZhbHVlTGlzdFByb3BlcnR5IiwidGV4dFByb3BlcnR5IiwiQ29sbGVjdGlvblBhdGgiLCJwcm9wQW5ub3RhdGlvbnMiLCJ0ZXh0UHJvcCIsInRleHRQYXRoIiwiJFBhdGgiLCJBbm5vdGF0aW9uSGVscGVyIiwiZm9ybWF0Iiwib01vZGVsIiwic0NvbnRleHRQYXRoIiwib0FjdGlvblBhcmFtZXRlckFubm90YXRpb25zIiwicHJvcGVydHlPYmplY3RQYXRoIiwiZ2V0VmFsdWVCaW5kaW5nIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPcGVyYXRpb25QYXJhbWV0ZXJEaWFsb2cudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tcGxleFR5cGUsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJpbWl0aXZlVHlwZSwgUHJvcGVydHksIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEFjdGlvbiwgdHlwZSBBY3Rpb25QYXJhbWV0ZXIgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgUHJvcGVydHlBbm5vdGF0aW9uc19Db3JlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db3JlX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhRmllbGQsIEZpZWxkR3JvdXBUeXBlLCBSZWZlcmVuY2VGYWNldCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdEVETV9UWVBFX01BUFBJTkcsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRub3QsXG5cdHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25QYXJhbWV0ZXJJbmZvIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBVaU1vZGVsQ29uc3RhbnRzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9lZGl0Rmxvd0NvbnN0YW50c1wiO1xuaW1wb3J0IE9EYXRhT3BlcmF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL09EYXRhT3BlcmF0aW9uXCI7XG5pbXBvcnQgT3BlcmF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL09wZXJhdGlvblwiO1xuaW1wb3J0IGFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvb3BlcmF0aW9ucy9hY3Rpb25IZWxwZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcywgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBoYXNGaWVsZEdyb3VwVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgaXNGdWxmaWxsZWQsIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgZ2V0VGFyZ2V0TmF2aWdhdGlvblBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbiwgaXNEaXNhYmxlZEV4cHJlc3Npb24sIGlzUmVhZE9ubHlFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNWYWx1ZUhlbHAsIGlzTXVsdGlMaW5lVGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyByZXF1aXJlc1ZhbGlkYXRpb24sIHVzZUNhc2VTZW5zaXRpdmVGaWx0ZXJSZXF1ZXN0cyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUhlbHBUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0RXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIHsgRGlhbG9nJEJlZm9yZU9wZW5FdmVudCB9IGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgVGl0bGUgZnJvbSBcInNhcC91aS9jb3JlL1RpdGxlXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IFNpbXBsZUZvcm0gZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9TaW1wbGVGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCBGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgVmFsdWVIZWxwIGZyb20gXCJzYXAvdWkvbWRjL1ZhbHVlSGVscFwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IE11bHRpVmFsdWVGaWVsZEl0ZW0gZnJvbSBcInNhcC91aS9tZGMvZmllbGQvTXVsdGlWYWx1ZUZpZWxkSXRlbVwiO1xuaW1wb3J0IFZIRGlhbG9nIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9EaWFsb2dcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9Qb3BvdmVyXCI7XG5pbXBvcnQgTVRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRGaWxlU2l6ZUV4Y2VlZEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVXBsb2FkQ29tcGxldGVFdmVudFxufSBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgRmlsZVVwbG9hZGVyIGZyb20gXCJzYXAvdWkvdW5pZmllZC9GaWxlVXBsb2FkZXJcIjtcbmltcG9ydCBGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVySHR0cFJlcXVlc3RNZXRob2RcIjtcbmltcG9ydCB7IGRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkLCBzaG93RmlsZVNpemVFeGNlZWREaWFsb2csIHNob3dUeXBlTWlzbWF0Y2hEaWFsb2cgfSBmcm9tIFwiLi4vaW50ZXJuYWwvaGVscGVycy9VcGxvYWRcIjtcblxuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0VmFsdWVCaW5kaW5nIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG50eXBlIFBhcmFtZXRlckRlZmF1bHRWYWx1ZSA9IHsgcGFyYW1OYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyBsYXRlUHJvcGVydHlFcnJvcj86IGJvb2xlYW47IG5vUG9zc2libGVWYWx1ZT86IGJvb2xlYW4gfTtcblxudHlwZSBFbGVtZW50R3JvdXAgPSB7IGZhY2V0VGl0bGU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4gfCB1bmRlZmluZWQ7IGRhdGE6IEFjdGlvblBhcmFtZXRlcltdIH07XG50eXBlIEVsZW1lbnRHcm91cENvbnZlcnRlZCA9IHsgZmFjZXRUaXRsZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8c3RyaW5nPiB8IHVuZGVmaW5lZDsgZGF0YTogRGlhbG9nQ29udGVudFR5cGVzW10gfTtcblxudHlwZSBGb3JtRWxlbWVudFR5cGUgPSBbTGFiZWwsIEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkXTtcblxudHlwZSBEaWFsb2dDb250ZW50VHlwZXMgPSB7XG5cdGZvcm1FbGVtZW50czogRm9ybUVsZW1lbnRUeXBlO1xuXHRwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcjtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY3Rpb25QYXJhbWV0ZXJEaWFsb2cge1xuXHRwcml2YXRlIHBhcmFtZXRlcnNWYWx1ZXNQcm9taXNlOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+PjtcblxuXHRwcml2YXRlIHBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlITogKHJlc29sdmVWYWx1ZTogUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT4pID0+IHZvaWQ7XG5cblx0cHJpdmF0ZSBwYXJhbWV0ZXJzVmFsdWVzUmVqZWN0ITogKGVycm9yOiB1bmtub3duKSA9PiB2b2lkO1xuXG5cdC8vIHRoZSBkaWFsb2cgaXMgY29uc2lkZXJlZCBhcyBjbG9zZWQgYWZ0ZXIgdGhlIGFmdGVyQ2xvc2UgZXZlbnQgaGFzIGJlZW4gdHJpZ2dlcmVkXG5cdC8vIHRoaXMgaXMgYXN5bmNocm9ub3VzLCBzbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGRpYWxvZyBzdGF0ZSBzaW5jZSB0aGUgbWVzc2FnZSBoYW5kbGluZyBpcyBzeW5jaHJvbm91c1xuXHQvLyBhbmQgd2UgbmVlZCB0byBrbm93IGlmIHRoZSBkaWFsb2cgaXMgb3BlbiBvciBjbG9zZWRcblx0cHJpdmF0ZSBpc0RpYWxvZ09wZW4gPSBmYWxzZTtcblxuXHRwcml2YXRlIGRpYWxvZzogRGlhbG9nIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uTmFtZTogc3RyaW5nO1xuXG5cdHByaXZhdGUgYnV0dG9uTG9jayA9IGZhbHNlO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFjdGlvblBhcmFtZXRlckluZm9zOiAoQWN0aW9uUGFyYW1ldGVySW5mbyAmIHsgcGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIgfSlbXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyTW9kZWw6IEpTT05Nb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdCRkaXNwbGF5TW9kZToge31cblx0fSk7XG5cblx0cHJpdmF0ZSByZWFkb25seSByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uOiBBY3Rpb24sXG5cdFx0cHJpdmF0ZSByZWFkb25seSBwYXJhbWV0ZXJzOiB7XG5cdFx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcblx0XHRcdGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0cGFyYW1ldGVyc1ZhbHVlczogUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT47XG5cdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdFx0XHRpc0NyZWF0ZUFjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdG1vZGVsOiBPRGF0YU1vZGVsO1xuXHRcdFx0dmlldz86IEZFVmlldztcblx0XHRcdGV2ZW50cz86IHtcblx0XHRcdFx0b25QYXJhbWV0ZXJEaWFsb2dPcGVuZWQ/OiAoKSA9PiB2b2lkO1xuXHRcdFx0XHRvblBhcmFtZXRlckRpYWxvZ0Nsb3NlZD86ICgpID0+IHZvaWQ7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0cHJpdmF0ZSByZWFkb25seSBwYXJhbWV0ZXJWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gfCB1bmRlZmluZWQsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBlbnRpdHlTZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXJcblx0KSB7XG5cdFx0dGhpcy5hY3Rpb25OYW1lID0gYWN0aW9uSGVscGVyLmdldEFjdGlvbk5hbWUodGhpcy5hY3Rpb24pO1xuXHRcdHRoaXMubWV0YU1vZGVsID0gdGhpcy5wYXJhbWV0ZXJzLm1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdHRoaXMucmVzb3VyY2VNb2RlbCA9IHRoaXMucGFyYW1ldGVycy52aWV3ID8gZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMudmlldykgOiBnZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpO1xuXHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1JlamVjdCA9IHJlamVjdDtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGJpbmRpbmcgZXhwcmVzc2lvbiBvZiB0aGUgZWRpdCBtb2RlIHByb3BlcnR5IGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24uXG5cdCAqL1xuXHRwcml2YXRlIGdldFBhcmFtZXRlckVkaXRNb2RlKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPEZpZWxkRWRpdE1vZGU+IHtcblx0XHRjb25zdCBhbm5vdGF0aW9ucyA9IHBhcmFtZXRlci5hbm5vdGF0aW9ucyxcblx0XHRcdGZpZWxkQ29udHJvbCA9IGFubm90YXRpb25zLkNvbW1vbj8uRmllbGRDb250cm9sLFxuXHRcdFx0aW1tdXRhYmxlID0gKGFubm90YXRpb25zLkNvcmUgYXMgdW5rbm93biBhcyBQcm9wZXJ0eUFubm90YXRpb25zX0NvcmUpPy5JbW11dGFibGU/LnZhbHVlT2YoKSxcblx0XHRcdGNvbXB1dGVkID0gKGFubm90YXRpb25zLkNvcmUgYXMgdW5rbm93biBhcyBQcm9wZXJ0eUFubm90YXRpb25zX0NvcmUpPy5Db21wdXRlZD8udmFsdWVPZigpO1xuXG5cdFx0aWYgKGltbXV0YWJsZSB8fCBjb21wdXRlZCkge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KEZpZWxkRWRpdE1vZGUuUmVhZE9ubHkpO1xuXHRcdH0gZWxzZSBpZiAoZmllbGRDb250cm9sKSB7XG5cdFx0XHRyZXR1cm4gaWZFbHNlKFxuXHRcdFx0XHRpc1JlYWRPbmx5RXhwcmVzc2lvbihwYXJhbWV0ZXIpLFxuXHRcdFx0XHRGaWVsZEVkaXRNb2RlLlJlYWRPbmx5LFxuXHRcdFx0XHRpZkVsc2UoaXNEaXNhYmxlZEV4cHJlc3Npb24ocGFyYW1ldGVyKSwgRmllbGRFZGl0TW9kZS5EaXNhYmxlZCwgRmllbGRFZGl0TW9kZS5FZGl0YWJsZSlcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBjb25zdGFudChGaWVsZEVkaXRNb2RlLkVkaXRhYmxlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBmb3JtIGVsZW1lbnQgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybSBlbGVtZW50IGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZUZvcm1FbGVtZW50KHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogUHJvbWlzZTxGb3JtRWxlbWVudFR5cGU+IHtcblx0XHRjb25zdCBhY3Rpb25NZXRhUGF0aCA9IHRoaXMuYWN0aW9uLmlzQm91bmRcblx0XHRcdD8gYCR7dGhpcy5tZXRhTW9kZWwuZ2V0TWV0YVBhdGgodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldFBhdGgoKSl9LyR7Y29udmVydFR5cGVzKHRoaXMubWV0YU1vZGVsKS5uYW1lc3BhY2V9LiR7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24ubmFtZVxuXHRcdFx0ICB9YFxuXHRcdFx0OiBgLyR7dGhpcy5hY3Rpb24ubmFtZX1gO1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7YWN0aW9uTWV0YVBhdGh9LyR7cGFyYW1ldGVyLm5hbWV9YCkhO1xuXHRcdGxldCBmaWVsZDtcblx0XHRsZXQgbGFiZWwgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbFxuXHRcdFx0PyB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uLkxhYmVsLnRvU3RyaW5nKCkpXG5cdFx0XHQ6IHBhcmFtZXRlci5uYW1lO1xuXHRcdGxldCBzdHJlYW1QYXJhbWV0ZXI7XG5cdFx0aWYgKHBhcmFtZXRlci5pc0NvbGxlY3Rpb24pIHtcblx0XHRcdGZpZWxkID0gYXdhaXQgdGhpcy5jcmVhdGVNdWx0aUZpZWxkKHBhcmFtZXRlciwgbWV0YUNvbnRleHQpO1xuXHRcdH0gZWxzZSBpZiAoIXBhcmFtZXRlci50eXBlLnN0YXJ0c1dpdGgoXCJFZG0uXCIpICYmIHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKSkge1xuXHRcdFx0c3RyZWFtUGFyYW1ldGVyID0gdGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpO1xuXHRcdFx0Ly8gY2FsY3VsYXRlIGxhYmVsIGZyb20gdGhlIHN0cmVhbSBwcm9wZXJ0eSB3aXRoaW4gdGhlIENvbXBsZXhUeXBlXG5cdFx0XHRsYWJlbCA9IHN0cmVhbVBhcmFtZXRlcj8uYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbFxuXHRcdFx0XHQ/IHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KHN0cmVhbVBhcmFtZXRlci5hbm5vdGF0aW9ucy5Db21tb24uTGFiZWwudG9TdHJpbmcoKSlcblx0XHRcdFx0OiAoc3RyZWFtUGFyYW1ldGVyPy5uYW1lIGFzIHN0cmluZyk7XG5cdFx0XHRmaWVsZCA9IHRoaXMuY3JlYXRlRmlsZVVwbG9hZGVyKHBhcmFtZXRlcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZpZWxkID0gYXdhaXQgdGhpcy5jcmVhdGVGaWVsZChwYXJhbWV0ZXIsIG1ldGFDb250ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdDw+XG5cdFx0XHRcdDxMYWJlbCBpZD17Z2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIubmFtZSwgc3RyZWFtUGFyYW1ldGVyPy5uYW1lLCBcIkxhYmVsXCJdKX0gdGV4dD17bGFiZWx9IC8+XG5cdFx0XHRcdHtmaWVsZH1cblx0XHRcdDwvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgbXVsdGkgZmllbGQgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIG11bHRpIHZhbHVlIGZpZWxkIGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZU11bHRpRmllbGQocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPE11bHRpVmFsdWVGaWVsZD4ge1xuXHRcdGxldCBkaXNwbGF5ID0gXCJWYWx1ZVwiO1xuXHRcdHRyeSB7XG5cdFx0XHRkaXNwbGF5ID0gYXdhaXQgRmllbGRIZWxwZXIuZ2V0QVBEaWFsb2dEaXNwbGF5Rm9ybWF0KHBhcmFtZXRlckNvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogcGFyYW1ldGVyQ29udGV4dCB9KTtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdExvZy53YXJuaW5nKGBQYXJhbWV0ZXIgZGlhbG9nIG11bHRpZmllbGQ6IGRpc3BsYXkgZm9ybWF0IGNvdWxkbid0IGJlIGNhbGN1bGF0ZWQgZm9yIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nOiAke2Vycn1gKTtcblx0XHR9XG5cdFx0Y29uc3QgcGxhY2VIb2xkZXIgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/LlBsYWNlaG9sZGVyIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFByaW1pdGl2ZVR5cGU+IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHBsYWNlSG9sZGVyRXhwcmVzc2lvbiA9IHBsYWNlSG9sZGVyID8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHBsYWNlSG9sZGVyKSkgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgcGFyYW1ldGVyVHlwZSA9IEVETV9UWVBFX01BUFBJTkc/LltwYXJhbWV0ZXIudHlwZV0/LnR5cGU7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNdWx0aVZhbHVlRmllbGRcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWVdKX1cblx0XHRcdFx0cGxhY2Vob2xkZXI9e3BsYWNlSG9sZGVyRXhwcmVzc2lvbn1cblx0XHRcdFx0aXRlbXM9e3sgcGF0aDogYG12ZnZpZXc+LyR7cGFyYW1ldGVyLm5hbWV9YCB9fVxuXHRcdFx0XHRkZWxlZ2F0ZT17eyBuYW1lOiBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL011bHRpVmFsdWVQYXJhbWV0ZXJEZWxlZ2F0ZVwiIH19XG5cdFx0XHRcdGRpc3BsYXk9e2Rpc3BsYXl9XG5cdFx0XHRcdGVkaXRNb2RlPXt0aGlzLmdldFBhcmFtZXRlckVkaXRNb2RlKHBhcmFtZXRlcil9XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdG11bHRpcGxlTGluZXM9e3BhcmFtZXRlci5hbm5vdGF0aW9ucy5VST8uTXVsdGlMaW5lVGV4dD8udmFsdWVPZigpID09PSB0cnVlfVxuXHRcdFx0XHRyZXF1aXJlZD17Y29tcGlsZUV4cHJlc3Npb24oaXNBY3Rpb25QYXJhbWV0ZXJSZXF1aXJlZEV4cHJlc3Npb24ocGFyYW1ldGVyLCB0aGlzLmFjdGlvbiwgY29udmVydFR5cGVzKHRoaXMubWV0YU1vZGVsKSkpfVxuXHRcdFx0XHR2YWx1ZUhlbHA9e2hhc1ZhbHVlSGVscChwYXJhbWV0ZXIpID8gZ2VuZXJhdGUoW3RoaXMuYWN0aW9uTmFtZSwgcGFyYW1ldGVyLm5hbWVdKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0Y2hhbmdlPXthc3luYyAoZSk6IFByb21pc2U8dm9pZD4gPT4gdGhpcy5oYW5kbGVGaWVsZENoYW5nZShlLCBwYXJhbWV0ZXIpfVxuXHRcdFx0XHR2aXNpYmxlPXtjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHBhcmFtZXRlci5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSl9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbZ2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIubmFtZSwgXCJMYWJlbFwiXSldfVxuXHRcdFx0XHRkZXBlbmRlbnRzPXt0aGlzLmNyZWF0ZVBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscChwYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQpfVxuXHRcdFx0PlxuXHRcdFx0XHQ8TXVsdGlWYWx1ZUZpZWxkSXRlbSBrZXk9e2B7cGF0aDogJ212ZnZpZXc+S2V5JywgdHlwZTonJHtwYXJhbWV0ZXJUeXBlfSd9YH0gZGVzY3JpcHRpb249XCJ7bXZmdmlldz5EZXNjfVwiIC8+XG5cdFx0XHQ8L011bHRpVmFsdWVGaWVsZD5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIEZpbGVVcGxvYWRlciBjb250cm9sIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFRoZSBGaWxlVXBsb2FkZXIgY29udHJvbC5cblx0ICovXG5cdHByaXZhdGUgY3JlYXRlRmlsZVVwbG9hZGVyKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogRmlsZVVwbG9hZGVyIHtcblx0XHRsZXQgZmlsZUFjY2VwdGFibGVNZWRpYVR5cGVzO1xuXHRcdGlmICh0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/LmFubm90YXRpb25zLkNvcmU/LkFjY2VwdGFibGVNZWRpYVR5cGVzKSB7XG5cdFx0XHRjb25zdCBhY2NlcHRlZFR5cGVzID0gQXJyYXkuZnJvbShcblx0XHRcdFx0dGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5hbm5vdGF0aW9ucy5Db3JlPy5BY2NlcHRhYmxlTWVkaWFUeXBlcyBhcyB1bmtub3duIGFzIHN0cmluZ1tdXG5cdFx0XHQpLm1hcCgodHlwZSkgPT4gYCcke3R5cGV9J2ApO1xuXHRcdFx0ZmlsZUFjY2VwdGFibGVNZWRpYVR5cGVzID0gYHs9b2RhdGEuY29sbGVjdGlvbihbJHthY2NlcHRlZFR5cGVzLmpvaW4oXCIsXCIpfV0pfWA7XG5cdFx0fVxuXHRcdGNvbnN0IGhhbmRsZVR5cGVNaXNzbWF0Y2ggPSBmdW5jdGlvbiAoZXZlbnQ6IEZpbGVVcGxvYWRlciRUeXBlTWlzc21hdGNoRXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZpbGVVcGxvYWRlciA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0Y29uc3QgZ2l2ZW5UeXBlID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwibWltZVR5cGVcIik7XG5cdFx0XHRjb25zdCBhY2NlcHRlZFR5cGVzID0gZmlsZVVwbG9hZGVyLmdldE1pbWVUeXBlKCk7XG5cdFx0XHRpZiAoZ2l2ZW5UeXBlKSB7XG5cdFx0XHRcdHNob3dUeXBlTWlzbWF0Y2hEaWFsb2coZmlsZVVwbG9hZGVyLCBnaXZlblR5cGUsIGFjY2VwdGVkVHlwZXMpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Ly8gdmVyaWZ5IGNoZWNrIGZvciBzdHJlYW1cblx0XHRjb25zdCBmaWxlTWF4aW11bVNpemUgPSBGaWVsZEhlbHBlci5jYWxjdWxhdGVNQmZyb21CeXRlKHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKT8ubWF4TGVuZ3RoKTtcblx0XHRjb25zdCBoYW5kbGVGaWxlU2l6ZUV4Y2VlZCA9IGZ1bmN0aW9uIChldmVudDogRmlsZVVwbG9hZGVyJEZpbGVTaXplRXhjZWVkRXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZpbGVVcGxvYWRlciA9IGV2ZW50Py5nZXRTb3VyY2UoKTtcblx0XHRcdHNob3dGaWxlU2l6ZUV4Y2VlZERpYWxvZyhmaWxlVXBsb2FkZXIsIGZpbGVVcGxvYWRlci5nZXRNYXhpbXVtRmlsZVNpemUoKS50b0ZpeGVkKDMpKTtcblx0XHR9O1xuXHRcdGNvbnN0IG9uVXBsb2FkQ29tcGxldGUgPSBmdW5jdGlvbiAoZXZlbnQ6IEZpbGVVcGxvYWRlciRVcGxvYWRDb21wbGV0ZUV2ZW50KTogdm9pZCB7XG5cdFx0XHRpZiAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwic3RhdHVzXCIpID09PSAwIHx8IChldmVudC5nZXRQYXJhbWV0ZXIoXCJzdGF0dXNcIikgYXMgbnVtYmVyKSA+PSA0MDApIHtcblx0XHRcdFx0ZGlzcGxheU1lc3NhZ2VGb3JGYWlsZWRVcGxvYWQoXG5cdFx0XHRcdFx0ZXZlbnQuZ2V0U291cmNlKCksXG5cdFx0XHRcdFx0KGV2ZW50LmdldFBhcmFtZXRlcihcInJlc3BvbnNlUmF3XCIpIGFzIHN0cmluZykgfHwgKGV2ZW50LmdldFBhcmFtZXRlcihcInJlc3BvbnNlXCIpIGFzIHN0cmluZylcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RmlsZVVwbG9hZGVyXG5cdFx0XHRcdG5hbWU9XCJGRVY0RmlsZVVwbG9hZFwiXG5cdFx0XHRcdGJ1dHRvbk9ubHk9XCJmYWxzZVwiXG5cdFx0XHRcdGljb25Pbmx5PVwidHJ1ZVwiXG5cdFx0XHRcdG11bHRpcGxlPVwiZmFsc2VcIlxuXHRcdFx0XHR0b29sdGlwPVwie3NhcC5mZS5pMThuPk1fRklFTERfRklMRVVQTE9BREVSX1VQTE9BRF9CVVRUT05fVE9PTFRJUH1cIlxuXHRcdFx0XHRpY29uPVwic2FwLWljb246Ly91cGxvYWRcIlxuXHRcdFx0XHRzdHlsZT1cIlRyYW5zcGFyZW50XCJcblx0XHRcdFx0c2VuZFhIUj1cInRydWVcIlxuXHRcdFx0XHR1c2VNdWx0aXBhcnQ9XCJmYWxzZVwiXG5cdFx0XHRcdHNhbWVGaWxlbmFtZUFsbG93ZWQ9XCJ0cnVlXCJcblx0XHRcdFx0dXBsb2FkT25DaGFuZ2U9XCJmYWxzZVwiXG5cdFx0XHRcdG1pbWVUeXBlPXtmaWxlQWNjZXB0YWJsZU1lZGlhVHlwZXN9XG5cdFx0XHRcdHR5cGVNaXNzbWF0Y2g9e2hhbmRsZVR5cGVNaXNzbWF0Y2h9XG5cdFx0XHRcdG1heGltdW1GaWxlU2l6ZT17ZmlsZU1heGltdW1TaXplfVxuXHRcdFx0XHRmaWxlU2l6ZUV4Y2VlZD17aGFuZGxlRmlsZVNpemVFeGNlZWR9XG5cdFx0XHRcdGh0dHBSZXF1ZXN0TWV0aG9kPXtGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZC5QdXR9XG5cdFx0XHRcdHVwbG9hZENvbXBsZXRlPXtvblVwbG9hZENvbXBsZXRlfVxuXHRcdFx0XHRjaGFuZ2U9e2FzeW5jIChlKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmhhbmRsZUZpbGVVcGxvYWRlckNoYW5nZShlLCBwYXJhbWV0ZXIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGZpZWxkIGNvbnRyb2wgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIHBhcmFtZXRlckNvbnRleHQgVGhlIHBhcmFtZXRlciBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBmaWVsZCBjb250cm9sLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBjcmVhdGVGaWVsZChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dDogQ29udGV4dCk6IFByb21pc2U8RmllbGQ+IHtcblx0XHRsZXQgZGlzcGxheSA9IFwiVmFsdWVcIjtcblx0XHRsZXQgYWRkaXRpb25hbFZhbHVlO1xuXHRcdGxldCBiaW5kaW5nVmFsdWU7XG5cdFx0dHJ5IHtcblx0XHRcdGRpc3BsYXkgPSBhd2FpdCBGaWVsZEhlbHBlci5nZXRBUERpYWxvZ0Rpc3BsYXlGb3JtYXQocGFyYW1ldGVyQ29udGV4dC5nZXRPYmplY3QoKSwgeyBjb250ZXh0OiBwYXJhbWV0ZXJDb250ZXh0IH0pO1xuXHRcdFx0YmluZGluZ1ZhbHVlID0gYXdhaXQgdGhpcy5nZXRBUERpYWxvZ0JpbmRpbmdWYWx1ZShwYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQsIHsgY29udGV4dDogcGFyYW1ldGVyQ29udGV4dCB9KTtcblx0XHRcdGlmIChoYXNWYWx1ZUhlbHAocGFyYW1ldGVyKSkge1xuXHRcdFx0XHRhZGRpdGlvbmFsVmFsdWUgPSBhd2FpdCB0aGlzLmdldEFkZGl0aW9uYWxWYWx1ZSh7IGNvbnRleHQ6IHBhcmFtZXRlckNvbnRleHQgfSk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRMb2cud2FybmluZyhgUGFyYW1ldGVyIGRpYWxvZyBmaWVsZDogZGlzcGxheSBmb3JtYXQgY291bGRuJ3QgYmUgY2FsY3VsYXRlZCBmb3IgcGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfSc6ICR7ZXJyfWApO1xuXHRcdH1cblx0XHRjb25zdCBwbGFjZUhvbGRlciA9IHBhcmFtZXRlci5hbm5vdGF0aW9ucy5VST8uUGxhY2Vob2xkZXIgYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8UHJpbWl0aXZlVHlwZT4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgcGxhY2VIb2xkZXJFeHByZXNzaW9uID0gcGxhY2VIb2xkZXIgPyBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocGxhY2VIb2xkZXIpKSA6IHVuZGVmaW5lZDtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZpZWxkXG5cdFx0XHRcdGRlbGVnYXRlPXt7IG5hbWU6IFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZEJhc2VEZWxlZ2F0ZVwiLCBwYXlsb2FkOiB7IHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Q6IHRydWUgfSB9fVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIubmFtZV0pfVxuXHRcdFx0XHR2YWx1ZT17YmluZGluZ1ZhbHVlfVxuXHRcdFx0XHRwbGFjZWhvbGRlcj17cGxhY2VIb2xkZXJFeHByZXNzaW9ufVxuXHRcdFx0XHRkaXNwbGF5PXtkaXNwbGF5fVxuXHRcdFx0XHRlZGl0TW9kZT17dGhpcy5nZXRQYXJhbWV0ZXJFZGl0TW9kZShwYXJhbWV0ZXIpfVxuXHRcdFx0XHR3aWR0aD1cIjEwMCVcIlxuXHRcdFx0XHRtdWx0aXBsZUxpbmVzPXtpc011bHRpTGluZVRleHQocGFyYW1ldGVyKX1cblx0XHRcdFx0cmVxdWlyZWQ9e2NvbXBpbGVFeHByZXNzaW9uKGlzQWN0aW9uUGFyYW1ldGVyUmVxdWlyZWRFeHByZXNzaW9uKHBhcmFtZXRlciwgdGhpcy5hY3Rpb24sIGNvbnZlcnRUeXBlcyh0aGlzLm1ldGFNb2RlbCkpKX1cblx0XHRcdFx0Y2hhbmdlPXthc3luYyAoZSk6IFByb21pc2U8dm9pZD4gPT4gdGhpcy5oYW5kbGVGaWVsZENoYW5nZShlLCBwYXJhbWV0ZXIpfVxuXHRcdFx0XHR2YWx1ZUhlbHA9e2hhc1ZhbHVlSGVscChwYXJhbWV0ZXIpID8gZ2VuZXJhdGUoW3RoaXMuYWN0aW9uTmFtZSwgcGFyYW1ldGVyLm5hbWVdKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0ZGVwZW5kZW50cz17dGhpcy5jcmVhdGVQYXJhbWV0ZXJEaWFsb2dWYWx1ZUhlbHAocGFyYW1ldGVyLCBwYXJhbWV0ZXJDb250ZXh0KX1cblx0XHRcdFx0dmlzaWJsZT17Y29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyLm5hbWUgPT09IFwiUmVzdWx0SXNBY3RpdmVFbnRpdHlcIixcblx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0bm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwYXJhbWV0ZXIuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbZ2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIubmFtZSwgXCJMYWJlbFwiXSldfVxuXHRcdFx0XHRhZGRpdGlvbmFsVmFsdWU9e2FkZGl0aW9uYWxWYWx1ZX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSB2YWx1ZUhlbHAgIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJDb250ZXh0IFRoZSBwYXJhbWV0ZXIgY29udGV4dFxuXHQgKiBAcmV0dXJucyBBIHZhbHVlSGVscCBpZiB0aGUgcGFyYW1ldGVyIGhhcyBhIFZILCB1bmRlZmluZWQgb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZVBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dDogQ29udGV4dCk6IFZhbHVlSGVscCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCFoYXNWYWx1ZUhlbHAocGFyYW1ldGVyKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdDxWYWx1ZUhlbHBcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0aGlzLmFjdGlvbk5hbWUsIHBhcmFtZXRlci5uYW1lXSl9XG5cdFx0XHRcdGRlbGVnYXRlPXt7XG5cdFx0XHRcdFx0bmFtZTogXCJzYXAvZmUvbWFjcm9zL3ZhbHVlaGVscC9WYWx1ZUhlbHBEZWxlZ2F0ZVwiLFxuXHRcdFx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aDogdGhpcy5hY3Rpb24uaXNCb3VuZFxuXHRcdFx0XHRcdFx0XHQ/IGAke2dldFRhcmdldE5hdmlnYXRpb25QYXRoKGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxBY3Rpb25QYXJhbWV0ZXI+KHBhcmFtZXRlckNvbnRleHQpKX0vJHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWN0aW9uTmFtZVxuXHRcdFx0XHRcdFx0XHQgIH0vJHtwYXJhbWV0ZXIubmFtZX1gXG5cdFx0XHRcdFx0XHRcdDogYC8ke3RoaXMuYWN0aW9uLm5hbWUuc3Vic3RyaW5nKHRoaXMuYWN0aW9uLm5hbWUubGFzdEluZGV4T2YoXCIuXCIpICsgMSl9LyR7cGFyYW1ldGVyLm5hbWV9YCxcblx0XHRcdFx0XHRcdHF1YWxpZmllcnM6IHt9LFxuXHRcdFx0XHRcdFx0dmFsdWVIZWxwUXVhbGlmaWVyOiBcIlwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9fVxuXHRcdFx0XHR2YWxpZGF0ZUlucHV0PXtyZXF1aXJlc1ZhbGlkYXRpb24ocGFyYW1ldGVyKX1cblx0XHRcdFx0dHlwZWFoZWFkPXtcblx0XHRcdFx0XHQ8UG9wb3Zlcj5cblx0XHRcdFx0XHRcdDxNVGFibGVcblx0XHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0aGlzLmFjdGlvbk5hbWUsIHBhcmFtZXRlci5uYW1lLCBcIlBvcG92ZXJcIiwgXCJxdWFsaWZpZXJcIl0pfVxuXHRcdFx0XHRcdFx0XHRjYXNlU2Vuc2l0aXZlPXtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFjdGlvbi5pc0JvdW5kXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IHVzZUNhc2VTZW5zaXRpdmVGaWx0ZXJSZXF1ZXN0cyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8QWN0aW9uUGFyYW1ldGVyPihwYXJhbWV0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoY29udmVydFR5cGVzKHRoaXMubWV0YU1vZGVsKS5lbnRpdHlDb250YWluZXIuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/LkZpbHRlckZ1bmN0aW9ucyBhcyB1bmtub3duIGFzIHN0cmluZ1tdKSA/PyBbXVxuXHRcdFx0XHRcdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IE1vZGVsSGVscGVyLmlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSh0aGlzLm1ldGFNb2RlbClcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR1c2VBc1ZhbHVlSGVscD17ISFwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uPy5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXN9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvUG9wb3Zlcj5cblx0XHRcdFx0fVxuXHRcdFx0XHRkaWFsb2c9e3RoaXMuY3JlYXRlRmllbGRWSERpYWxvZyhwYXJhbWV0ZXIpfVxuXHRcdFx0PjwvVmFsdWVIZWxwPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgVmFsdWVIZWxwIGRpYWxvZyBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBBIGRpYWxvZyBpZiB0aGUgcGFyYW1ldGVyIGhhcyBhIFZILCB1bmRlZmluZWQgb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZUZpZWxkVkhEaWFsb2cocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBWSERpYWxvZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHBhcmFtZXRlci5hbm5vdGF0aW9ucy5Db21tb24/LlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcz8udmFsdWVPZigpICE9PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gPFZIRGlhbG9nIC8+O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBmaWVsZCBjaGFuZ2UgZXZlbnQgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIHVpNSBldmVudFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgUHJvbWlzZS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgaGFuZGxlRmllbGRDaGFuZ2UoZXZlbnQ6IE11bHRpVmFsdWVGaWVsZCRDaGFuZ2VFdmVudCB8IEZpZWxkJENoYW5nZUV2ZW50LCBwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGZpZWxkUHJvbWlzZSA9IChldmVudCBhcyBGaWVsZCRDaGFuZ2VFdmVudCkuZ2V0UGFyYW1ldGVyKFwicHJvbWlzZVwiKTtcblx0XHRjb25zdCBmaWVsZCA9IChldmVudCBhcyBGaWVsZCRDaGFuZ2VFdmVudCkuZ2V0U291cmNlKCkgYXMgRmllbGQgfCBNdWx0aVZhbHVlRmllbGQ7XG5cdFx0Y29uc3QgcGFyYW1ldGVySW5mbyA9IHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZCgoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZCA9PT0gZmllbGQpO1xuXHRcdGlmICghcGFyYW1ldGVySW5mbykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRwYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlID0gZmllbGRQcm9taXNlO1xuXHRcdC8vIGZpZWxkIHZhbHVlIGlzIGJlaW5nIGNoYW5nZWQsIHRodXMgZXhpc3RpbmcgbWVzc2FnZXMgcmVsYXRlZCB0byB0aGF0IGZpZWxkIGFyZSBub3QgdmFsaWQgYW55bW9yZVxuXHRcdHRoaXMucmVtb3ZlTWVzc2FnZXNGb3JQYXJhbWV0ZXIocGFyYW1ldGVyKTtcblx0XHR0cnkge1xuXHRcdFx0cGFyYW1ldGVySW5mby52YWx1ZSA9IGF3YWl0IGZpZWxkUHJvbWlzZTtcblx0XHRcdHRoaXMucGFyYW1ldGVycy5wYXJhbWV0ZXJzVmFsdWVzW3BhcmFtZXRlckluZm8ucGFyYW1ldGVyLm5hbWVdID0gcGFyYW1ldGVySW5mby52YWx1ZTtcblx0XHRcdHBhcmFtZXRlckluZm8uaGFzRXJyb3IgPSBmYWxzZTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0ZGVsZXRlIHBhcmFtZXRlckluZm8udmFsdWU7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLmhhc0Vycm9yID0gdHJ1ZTtcblx0XHRcdEFjdGlvblJ1bnRpbWUuX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIoW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mbzogcGFyYW1ldGVySW5mbyxcblx0XHRcdFx0XHRtZXNzYWdlOiAoZXJyb3IgYXMgeyBtZXNzYWdlOiBzdHJpbmcgfSkubWVzc2FnZVxuXHRcdFx0XHR9XG5cdFx0XHRdKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgRmlsZVVwbG9hZGVyIGNoYW5nZSBldmVudCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgU0FQVUk1IGV2ZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIEZpbGVVcGxvYWRlciBjaGFuZ2UgZXZlbnQuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEByZXR1cm5zIFByb21pc2UuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGhhbmRsZUZpbGVVcGxvYWRlckNoYW5nZShldmVudDogRmlsZVVwbG9hZGVyJENoYW5nZUV2ZW50LCBwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGZpbGVzID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwiZmlsZXNcIik7XG5cdFx0Y29uc3QgZmlsZVVwbG9hZGVyID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Ly8gY29ycmVjdGlvbiBuZWVkZWQgZm9yIG11bHRpcGxlIGZpbGUgdXBsb2FkZXJzXG5cdFx0Y29uc3QgcGFyYW1ldGVySW5mbyA9IHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZCgoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZCA9PT0gZmlsZVVwbG9hZGVyKTtcblx0XHRpZiAoIXBhcmFtZXRlckluZm8gfHwgIWZpbGVzKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMucmVtb3ZlTWVzc2FnZXNGb3JQYXJhbWV0ZXIocGFyYW1ldGVyKTtcblx0XHRwYXJhbWV0ZXJJbmZvLnZhbHVlID0ge307XG5cdFx0aWYgKHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKSkge1xuXHRcdFx0cGFyYW1ldGVySW5mby52YWx1ZVt0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/Lm5hbWUgYXMga2V5b2YgdHlwZW9mIHBhcmFtZXRlckluZm8udmFsdWVdID1cblx0XHRcdFx0YXdhaXQgdGhpcy5nZXRCYXNlNjRGaWxlKGZpbGVzKTtcblx0XHRcdHBhcmFtZXRlckluZm8udmFsdWVbKHRoaXMuZ2V0TWltZVR5cGVQYXRoKHBhcmFtZXRlcikgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPHN0cmluZz4pLnBhdGhdID1cblx0XHRcdFx0KGZpbGVzWzBdIGFzIEZpbGUpLnR5cGUgfHwgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIjtcblx0XHRcdHBhcmFtZXRlckluZm8udmFsdWVbdGhpcy5nZXRGaWxlTmFtZVBhdGgocGFyYW1ldGVyKSBhcyBzdHJpbmddID0gKGZpbGVzWzBdIGFzIEZpbGUpLm5hbWU7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLmhhc0Vycm9yID0gZmFsc2U7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMucGFyYW1ldGVyc1ZhbHVlc1twYXJhbWV0ZXJJbmZvLnBhcmFtZXRlci5uYW1lXSA9IHBhcmFtZXRlckluZm8udmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBwcm9wZXJ0eSBuYW1lIGZvciB0aGUgZmlsZSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgU3RyZWFtIHByb3BlcnR5IGluIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcmV0dXJucyBQYXRoIGFzIGEgc3RyaW5nLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRGaWxlTmFtZVBhdGgocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiAodGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5hbm5vdGF0aW9ucy5Db3JlPy5Db250ZW50RGlzcG9zaXRpb24/LkZpbGVuYW1lIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KS5wYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBwcm9wZXJ0eSBuYW1lIGZvciB0aGUgTWltZSB0eXBlIHdpdGggdGhlIGFzc29jaWF0ZWQgU3RyZWFtIHByb3BlcnR5IGluIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcmV0dXJucyBUaGUgcGF0aCBleHByZXNzaW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRNaW1lVHlwZVBhdGgocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/LmFubm90YXRpb25zLkNvcmU/Lk1lZGlhVHlwZSk7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIFN0cmVhbSBwcm9wZXJ0eSBhc3NvY2lhdGVkIHdpdGggdGhlIENvbXBsZXggdHlwZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcmV0dXJucyBUaGUgRWRtLlN0cmVhbSBwcm9wZXJ0eS5cblx0ICovXG5cdHByaXZhdGUgZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIChwYXJhbWV0ZXIudHlwZVJlZmVyZW5jZSBhcyBDb21wbGV4VHlwZSkucHJvcGVydGllcz8uZmluZCgocHJvcGVydHkpID0+IHByb3BlcnR5LnR5cGUgPT09IFwiRWRtLlN0cmVhbVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgY29udGVudCBvZiB0aGUgZmlsZS5cblx0ICogQHBhcmFtIGZpbGVzIFRoZSBmaWxlIHNlbGVjdGVkLlxuXHQgKiBAcmV0dXJucyBUaGUgZmlsZSBjb250ZW50LlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRCYXNlNjRGaWxlKGZpbGVzOiBvYmplY3RbXSk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXHRcdFx0cmVhZGVyLm9ubG9hZCA9ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKCFyZWFkZXIucmVzdWx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlc29sdmUoKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKS5zcGxpdChcIixcIilbMV0pO1xuXHRcdFx0fTtcblx0XHRcdHJlYWRlci5yZWFkQXNEYXRhVVJMKChmaWxlcyBhcyB1bmtub3duIGFzIEZpbGVMaXN0KS5pdGVtKDApISk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgbWVzc2FnZXMgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICovXG5cdHByaXZhdGUgcmVtb3ZlTWVzc2FnZXNGb3JQYXJhbWV0ZXIocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiB2b2lkIHtcblx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgY29udHJvbElkID0gZ2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIubmFtZV0pO1xuXHRcdC8vIGFsc28gcmVtb3ZlIG1lc3NhZ2VzIGFzc2lnbmVkIHRvIGlubmVyIGNvbnRyb2xzLCBidXQgYXZvaWQgcmVtb3ZpbmcgbWVzc2FnZXMgZm9yIGRpZmZlcmVudCBwYXJhbWV0ZXJzICh3aXRoIG5hbWUgYmVpbmcgc3Vic3RyaW5nIG9mIGFub3RoZXIgcGFyYW1ldGVyIG5hbWUpXG5cdFx0Y29uc3QgcmVsZXZhbnRNZXNzYWdlcyA9IG1lc3NhZ2VzLmZpbHRlcigobXNnOiBNZXNzYWdlKSA9PlxuXHRcdFx0bXNnLmdldENvbnRyb2xJZHMoKS5zb21lKChpZDogc3RyaW5nKSA9PiBjb250cm9sSWQuc3BsaXQoXCItXCIpLmluY2x1ZGVzKGlkKSlcblx0XHQpO1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhyZWxldmFudE1lc3NhZ2VzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBGb3JtRWxlbWVudHMgYWxvbmcgd2l0aCB0aGUgYXJyYXkgb2YgcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFRoZSBwYXJhbWV0ZXIgaW5mb3JtYXRpb24gYWxvbmcgd2l0aCB0aGUgRm9ybUVsZW1lbnRzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRGb3JtRWxlbWVudHMocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBQcm9taXNlPERpYWxvZ0NvbnRlbnRUeXBlcz4ge1xuXHRcdGNvbnN0IGZvcm1FbGVtZW50cyA9IGF3YWl0IHRoaXMuY3JlYXRlRm9ybUVsZW1lbnQocGFyYW1ldGVyKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Zm9ybUVsZW1lbnRzOiBmb3JtRWxlbWVudHMsXG5cdFx0XHRwYXJhbWV0ZXI6IHBhcmFtZXRlclxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFRoZSBkaWFsb2cgb3IgdW5kZWZpbmVkLlxuXHQgKi9cblx0Z2V0RGlhbG9nKCk6IERpYWxvZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZGlhbG9nO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgZGlhbG9nLlxuXHQgKi9cblx0YXN5bmMgY3JlYXRlRGlhbG9nKCk6IFByb21pc2U8RGlhbG9nPiB7XG5cdFx0bGV0IGRpYWxvZ0NvbnRlbnRzOiBGb3JtRWxlbWVudFR5cGVbXSA9IFtdO1xuXHRcdGxldCBkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzOiBEaWFsb2dDb250ZW50VHlwZXNbXSA9IFtdO1xuXHRcdGNvbnN0IGFjdGlvblBhcmFtZXRlcnMgPSB0aGlzLmFjdGlvbi5pc0JvdW5kID8gdGhpcy5hY3Rpb24ucGFyYW1ldGVycy5zbGljZSgxKSA6IHRoaXMuYWN0aW9uLnBhcmFtZXRlcnM7XG5cblx0XHQvLyBJZiBPcGVyYXRpb25hbFBhcmFtZXRlckZhY2V0cyBoYXZlIGJlZW4gZGVmaW5lZCBmb3IgdGhpcyBhY3Rpb24sIHRoZXkgYXJlIHVzZWQgdG8gZ3JvdXAgdGhlIGFjdGlvbiBwYXJhbWV0ZXJzXG5cdFx0Ly8gd2l0aCB0aXRsZXNcblx0XHRpZiAodGhpcy5hY3Rpb24uYW5ub3RhdGlvbnM/LlVJPy5PcGVyYXRpb25QYXJhbWV0ZXJGYWNldHMpIHtcblx0XHRcdGNvbnN0IGFjdGlvblBhcmFtZXRlckdyb3VwczogRWxlbWVudEdyb3VwW10gPSBbXTtcblx0XHRcdHRoaXMuYWN0aW9uLmFubm90YXRpb25zLlVJPy5PcGVyYXRpb25QYXJhbWV0ZXJGYWNldHM/LmZvckVhY2goZnVuY3Rpb24gKGZhY2V0OiBSZWZlcmVuY2VGYWNldCkge1xuXHRcdFx0XHRsZXQgZmFjZXRUaXRsZTtcblx0XHRcdFx0aWYgKGZhY2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCkge1xuXHRcdFx0XHRcdGZhY2V0VGl0bGUgPSBmYWNldC5MYWJlbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaGFzRmllbGRHcm91cFRhcmdldChmYWNldCkpIHtcblx0XHRcdFx0XHRjb25zdCBmaWVsZEdyb3VwID0gZmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwVHlwZTtcblx0XHRcdFx0XHRjb25zdCBncm91cGVkQWN0aW9uUGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyW10gPSBbXTtcblxuXHRcdFx0XHRcdGZpZWxkR3JvdXAuRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cDogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0Z3JvdXBlZEFjdGlvblBhcmFtZXRlcnMucHVzaCgoZ3JvdXAgYXMgRGF0YUZpZWxkKS5WYWx1ZS4kdGFyZ2V0IGFzIEFjdGlvblBhcmFtZXRlcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVyR3JvdXBzLnB1c2goe1xuXHRcdFx0XHRcdFx0ZmFjZXRUaXRsZTogZmFjZXRUaXRsZSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxzdHJpbmc+IHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0ZGF0YTogZ3JvdXBlZEFjdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEdldCB0aGUgZmllbGRzIGZvciBlYWNoIHBhcmFtZXRlciBncm91cFxuXHRcdFx0Y29uc3QgZ2V0R3JvdXBGb3JtID0gYXN5bmMgKGdyb3VwOiBFbGVtZW50R3JvdXApOiBQcm9taXNlPEVsZW1lbnRHcm91cENvbnZlcnRlZD4gPT4ge1xuXHRcdFx0XHRjb25zdCBmb3JtRWxlbWVudHMgPSBhd2FpdCBQcm9taXNlLmFsbChncm91cC5kYXRhLm1hcCh0aGlzLmdldEZvcm1FbGVtZW50cy5iaW5kKHRoaXMpKSk7XG5cdFx0XHRcdHJldHVybiB7IGZhY2V0VGl0bGU6IGdyb3VwLmZhY2V0VGl0bGUsIGRhdGE6IGZvcm1FbGVtZW50cyB9O1xuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3QgZm9ybURhdGEgPSBhY3Rpb25QYXJhbWV0ZXJHcm91cHMubWFwKGFzeW5jIChwYXJhbWV0ZXJHcm91cCkgPT4gZ2V0R3JvdXBGb3JtKHBhcmFtZXRlckdyb3VwKSk7XG5cdFx0XHRjb25zdCBvcEZhY2V0cyA9IGF3YWl0IFByb21pc2UuYWxsKGZvcm1EYXRhKTtcblxuXHRcdFx0Ly8gQWRkIHRoZSB0aXRsZSBjb250cm9sIHRvIGVhY2ggcGFyYW1ldGVyIGdyb3VwXG5cdFx0XHRvcEZhY2V0cy5mb3JFYWNoKChkaWFsb2dDb250ZW50KSA9PiB7XG5cdFx0XHRcdGRpYWxvZ0NvbnRlbnRzLnB1c2goPFRpdGxlIHRleHQ9e2RpYWxvZ0NvbnRlbnQuZmFjZXRUaXRsZX0gLz4pO1xuXHRcdFx0XHRyZXR1cm4gZGlhbG9nQ29udGVudC5kYXRhLm1hcCgoZWxlbWVudCkgPT4gZGlhbG9nQ29udGVudHMucHVzaChlbGVtZW50LmZvcm1FbGVtZW50cykpO1xuXHRcdFx0fSk7XG5cblx0XHRcdG9wRmFjZXRzLmZvckVhY2goZnVuY3Rpb24gKG9wRmFjZXQpIHtcblx0XHRcdFx0b3BGYWNldC5kYXRhLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRcdFx0XHRkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzLnB1c2goZWxlbWVudCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vIE9wZXJhdGlvblBhcmFtZXRlckZhY2V0cyBoYXZlIGJlZW4gZGVmaW5lZFxuXHRcdFx0ZGlhbG9nQ29udGVudHNXaXRoUGFyYW1ldGVycyA9IGF3YWl0IFByb21pc2UuYWxsKGFjdGlvblBhcmFtZXRlcnMubWFwKHRoaXMuZ2V0Rm9ybUVsZW1lbnRzLmJpbmQodGhpcykpKTtcblx0XHRcdGRpYWxvZ0NvbnRlbnRzID0gZGlhbG9nQ29udGVudHNXaXRoUGFyYW1ldGVycy5tYXAoKGRpYWxvZ0NvbnRlbnQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGRpYWxvZ0NvbnRlbnQuZm9ybUVsZW1lbnRzO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5yZWdpc3RlckFjdGlvblBhcmFtZXRlckluZm8oZGlhbG9nQ29udGVudHNXaXRoUGFyYW1ldGVycyk7XG5cblx0XHQvLyBJbiBjYXNlIG9mIGRlZmVycmVkIGNyZWF0ZSB3ZSBoYXZlIG5vIHZpZXcsIHNvIHdlIG5lZWQgdG8gZ2V0IHRoZSByZXNvdXJjZSBtb2RlbCBmcm9tIHRoZSBhcHAgY29tcG9uZW50XG5cblx0XHRjb25zdCBtZXNzYWdlU3RyaXAgPSB0aGlzLmdldEN1c3RvbUFjdGlvbk1lc3NhZ2VTdHJpcFRleHQoKTtcblxuXHRcdGNvbnN0IGVuZEJ1dHRvbiA9IChcblx0XHRcdDxCdXR0b25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCB0aGlzLmFjdGlvbk5hbWUsIFwiQWN0aW9uXCIsIFwiQ2FuY2VsXCJdKX1cblx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19DQU5DRUxcIil9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vbkNhbmNlbC5iaW5kKHRoaXMpKCk7XG5cdFx0XHRcdH19XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0Y29uc3QgZGlhbG9nID0gKFxuXHRcdFx0PERpYWxvZ1xuXHRcdFx0XHR0aXRsZT17dGhpcy5nZXRUaXRsZVRleHQodGhpcy5wYXJhbWV0ZXJzLmxhYmVsKX1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCB0aGlzLmFjdGlvbk5hbWVdKX1cblx0XHRcdFx0ZXNjYXBlSGFuZGxlcj17dGhpcy5vbkNhbmNlbC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRkcmFnZ2FibGU9e3RydWV9XG5cdFx0XHRcdHJlc2l6YWJsZT17dHJ1ZX1cblx0XHRcdFx0YWZ0ZXJDbG9zZT17dGhpcy5hZnRlckNsb3NlLmJpbmQodGhpcyl9XG5cdFx0XHRcdGJlZm9yZU9wZW49e3RoaXMuYmVmb3JlT3Blbi5iaW5kKHRoaXMpfVxuXHRcdFx0XHRhZnRlck9wZW49eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmFmdGVyT3BlbigpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRpbml0aWFsRm9jdXM9e2VuZEJ1dHRvbn0gLy8gVGhlIGluaXRpYWwgZm9jdXMgaXMgc2V0IHByb2dyYW1tYXRpY2FsbHkgaW4gYWZ0ZXJPcGVuLCB0byBhdm9pZCBvcGVuaW5nIHRoZSBWSCBkaWFsb2dcblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRiZWdpbkJ1dHRvbjogKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHRoaXMuYWN0aW9uTmFtZSwgXCJBY3Rpb25cIiwgXCJPa1wiXSl9XG5cdFx0XHRcdFx0XHRcdHRleHQ9e1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pc0NyZWF0ZUFjdGlvbiA9PT0gdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0PyB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX1NBUEZFX0FDVElPTl9DUkVBVEVfQlVUVE9OX0NPTlRJTlVFXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZ2V0QmVnaW5CdXR0b25MYWJlbCh0aGlzLnBhcmFtZXRlcnMubGFiZWwpXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uQXBwbHkuYmluZCh0aGlzKSgpO1xuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiRW1waGFzaXplZFwiXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZW5kQnV0dG9uOiBlbmRCdXR0b24sXG5cdFx0XHRcdFx0Y29udGVudDogKFxuXHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZSAodW5rbm93biBwcm9wZXJ0eSBiaW5kaW5nKVxuXHRcdFx0XHRcdFx0Ly8gY29sdW1uc00gb25seSB0YWtlcyBlZmZlY3QgaWYgdGhlcmUgYXJlIHRpdGxlcyBpbiB0aGUgY29udGVudC5cblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHttZXNzYWdlU3RyaXAgJiYgPE1lc3NhZ2VTdHJpcCBzaG93SWNvbj1cInRydWVcIiB0ZXh0PXttZXNzYWdlU3RyaXB9PjwvTWVzc2FnZVN0cmlwPn1cblx0XHRcdFx0XHRcdFx0PFNpbXBsZUZvcm0gY29sdW1uc009e1wiMlwifSBlZGl0YWJsZT1cInRydWVcIiBsYWJlbFNwYW5MPXtcIjEyXCJ9IGxhYmVsU3Bhbk09e1wiMTJcIn0gYmluZGluZz17XCIkUGFyYW1ldGVyXCJ9PlxuXHRcdFx0XHRcdFx0XHRcdHt7IGNvbnRlbnQ6IGRpYWxvZ0NvbnRlbnRzIH19XG5cdFx0XHRcdFx0XHRcdDwvU2ltcGxlRm9ybT5cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvRGlhbG9nPlxuXHRcdCk7XG5cdFx0dGhpcy5kaWFsb2cgPSBkaWFsb2c7XG5cdFx0cmV0dXJuIGRpYWxvZztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBsYWJlbCBmb3IgdGhlIGJlZ2luIGJ1dHRvbiBvZiB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gYWN0aW9uTGFiZWwgVGhlIGxhYmVsIG9mIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIGxhYmVsLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRCZWdpbkJ1dHRvbkxhYmVsKGFjdGlvbkxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGtleSA9IFwiQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfQUNUSU9OX05BTUVcIjtcblx0XHRjb25zdCBkZWZhdWx0S2V5ID0gXCJDX0NPTU1PTl9ESUFMT0dfT0tcIjtcblx0XHRyZXR1cm4gdGhpcy5nZXRPdmVycmlkZGVuVGV4dChrZXksIGRlZmF1bHRLZXksIGFjdGlvbkxhYmVsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB0aXRsZSBvZiB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gYWN0aW9uTGFiZWwgVGhlIGxhYmVsIG9mIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIHRpdGxlLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRUaXRsZVRleHQoYWN0aW9uTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qga2V5ID0gXCJBQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19BQ1RJT05fVElUTEVcIjtcblx0XHRjb25zdCBkZWZhdWx0S2V5ID0gXCJDX09QRVJBVElPTlNfQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfVElUTEVcIjtcblx0XHRyZXR1cm4gdGhpcy5nZXRPdmVycmlkZGVuVGV4dChrZXksIGRlZmF1bHRLZXksIGFjdGlvbkxhYmVsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGFuIG92ZXJyaWRkZW4gdGV4dCBmb3IgbWVzc2FnZSBzdHJpcC5cblx0ICogQHJldHVybnMgVGhlIG92ZXJyaWRkZW4gdGV4dCBmb3IgbWVzc2FnZSBzdHJpcC5cblx0ICovXG5cdHByaXZhdGUgZ2V0Q3VzdG9tQWN0aW9uTWVzc2FnZVN0cmlwVGV4dCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGtleSA9IFwiQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfTUVTU0FHRV9URVhUXCI7XG5cdFx0bGV0IGJvdW5kQWN0aW9uTmFtZSA9IHRoaXMuYWN0aW9uTmFtZTtcblx0XHRib3VuZEFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpLnBvcCgpID8/IGJvdW5kQWN0aW9uTmFtZTtcblx0XHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJvdW5kQWN0aW9uTmFtZSAmJiB0aGlzLmVudGl0eVNldE5hbWUgPyBgJHt0aGlzLmVudGl0eVNldE5hbWV9fCR7Ym91bmRBY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRcdGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX18JHtzdWZmaXhSZXNvdXJjZUtleX1gKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX18JHt0aGlzLmVudGl0eVNldE5hbWV9YCkpIHtcblx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXksIHVuZGVmaW5lZCwgYCR7dGhpcy5lbnRpdHlTZXROYW1lfWApO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtrZXl9YCkpIHtcblx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYW4gb3ZlcnJpZGRlbiB0ZXh0LlxuXHQgKiBAcGFyYW0ga2V5IFRoZSBrZXkgZm9yIGFuIG92ZXJyaWRkZW4gdGV4dFxuXHQgKiBAcGFyYW0gZGVmYXVsdEtleSBUaGUgZGVmYXVsdCBrZXkgZm9yIHRoZSB0ZXh0XG5cdCAqIEBwYXJhbSBhY3Rpb25MYWJlbCBUaGUgbGFiZWwgb2YgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgb3ZlcnJpZGRlbiB0ZXh0IG9yIGxhYmVsLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRPdmVycmlkZGVuVGV4dChrZXk6IHN0cmluZywgZGVmYXVsdEtleTogc3RyaW5nLCBhY3Rpb25MYWJlbD86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0bGV0IGJvdW5kQWN0aW9uTmFtZSA9IHRoaXMuYWN0aW9uTmFtZTtcblx0XHRib3VuZEFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpLnBvcCgpID8/IGJvdW5kQWN0aW9uTmFtZTtcblx0XHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJvdW5kQWN0aW9uTmFtZSAmJiB0aGlzLmVudGl0eVNldE5hbWUgPyBgJHt0aGlzLmVudGl0eVNldE5hbWV9fCR7Ym91bmRBY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRcdGlmIChhY3Rpb25MYWJlbCkge1xuXHRcdFx0aWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fXwke3N1ZmZpeFJlc291cmNlS2V5fWApKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXksIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX18JHt0aGlzLmVudGl0eVNldE5hbWV9YCkpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSwgdW5kZWZpbmVkLCBgJHt0aGlzLmVudGl0eVNldE5hbWV9YCk7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fWApKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGFjdGlvbkxhYmVsO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoZGVmYXVsdEtleSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIHByZXNzIGV2ZW50IG9mIHRoZSBiZWdpbiBidXR0b24gb2YgdGhlIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2UuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIG9uQXBwbHkoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gcHJldmVudCBtdWx0aXBsZSBwcmVzcyBldmVudHMuIFRoZSBCdXN5TG9ja2VyIGlzIG5vdCBmYXN0IGVub3VnaC4gKEJDUDogMjM3MDEzMDIxMClcblx0XHRpZiAodGhpcy5idXR0b25Mb2NrIHx8ICF0aGlzLmRpYWxvZykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBkaWFsb2cgPSB0aGlzLmRpYWxvZztcblxuXHRcdGNvbnN0IHBhcmFtZXRlckNvbnRleHQgPSAoZGlhbG9nLmdldE9iamVjdEJpbmRpbmcoKSBhcyBPRGF0YUNvbnRleHRCaW5kaW5nIHwgdW5kZWZpbmVkKT8uZ2V0UGFyYW1ldGVyQ29udGV4dCgpO1xuXG5cdFx0Ly8gbG9jayB0aGUgYnV0dG9uIHRvIHByZXZlbnQgbXVsdGlwbGUgcHJlc3MgZXZlbnRzXG5cdFx0dGhpcy5idXR0b25Mb2NrID0gdHJ1ZTtcblx0XHRCdXN5TG9ja2VyLmxvY2soZGlhbG9nKTtcblxuXHRcdC8vIHZhbGlkYXRlIHRoZSBhY3Rpb24gcGFyYW1ldGVycy4gSXQgaXMgaW1wb3J0YW50IHRvIGRvIHRoaXMgYXMgYSBmaXJzdCBvcGVyYXRpb24gYXMgdGhlcmUgaXMgYVxuXHRcdC8vIHdhaXQgZG9uZSBmb3IgdGhlIHZhbHVlIGNoYW5nZXMgdG8gY29tcGxldGUgdXBkYXRpbmcgdGhlIG1vZGVsLiBFdmVuIGluIGNhc2VzIHdoZXJlIHZhbGlkYXRpb24gaXNcblx0XHQvLyBub3QgY29uZmlndXJlZCB0aGlzIHByb21pc2UgbmVlZHMgdG8gYmUgcmVzb2x2ZWQgdG8gcmVhZCBmcm9tIHRoZSBtb2RlbCB0byByZXR1cm4gdXNlciBlbnRlcmVkIHZhbHVlcy5cblx0XHRpZiAoIShhd2FpdCBBY3Rpb25SdW50aW1lLnZhbGlkYXRlUHJvcGVydGllcyh0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLCB0aGlzLnJlc291cmNlTW9kZWwpKSkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2soZGlhbG9nKTtcblx0XHRcdHRoaXMuYnV0dG9uTG9jayA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IG5ld1ZhbHVlc0RpY3Rpb25hcnkgPSBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHQuLi50aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLm1hcCgoYWN0aW9uUGFyYW1ldGVySW5mb3MpID0+IHtcblx0XHRcdFx0Y29uc3QgcGFyYW1ldGVyID0gYWN0aW9uUGFyYW1ldGVySW5mb3MucGFyYW1ldGVyO1xuXHRcdFx0XHRsZXQgdmFsdWU7XG5cdFx0XHRcdGlmIChwYXJhbWV0ZXIuaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBPYmplY3QudmFsdWVzKChkaWFsb2cuZ2V0TW9kZWwoXCJtdmZ2aWV3XCIpIGFzIEpTT05Nb2RlbCkuZ2V0UHJvcGVydHkoYC8ke3BhcmFtZXRlci5uYW1lfWApID8/IHt9KS5tYXAoXG5cdFx0XHRcdFx0XHQocGFyYW1WYWx1ZSkgPT4gKHBhcmFtVmFsdWUgYXMgeyBLZXk/OiBQcmltaXRpdmVUeXBlIH0pPy5LZXlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFwYXJhbWV0ZXIudHlwZS5zdGFydHNXaXRoKFwiRWRtLlwiKSAmJiB0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcikpIHtcblx0XHRcdFx0XHQvLyBGaWxlIFVwbG9hZGVyXG5cdFx0XHRcdFx0dmFsdWUgPSBhY3Rpb25QYXJhbWV0ZXJJbmZvcy52YWx1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHBhcmFtZXRlckNvbnRleHQ/LmdldFByb3BlcnR5KHBhcmFtZXRlci5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4geyBbcGFyYW1ldGVyLm5hbWVdOiB2YWx1ZSB9O1xuXHRcdFx0fSlcblx0XHQpIGFzIFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+O1xuXHRcdGNvbnN0IGlzTmV3VmFsdWUgPSBPYmplY3QudmFsdWVzKG5ld1ZhbHVlc0RpY3Rpb25hcnkpLnNvbWUoKHZhbHVlKSA9PiAhIXZhbHVlKTtcblxuXHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Jlc29sdmUobmV3VmFsdWVzRGljdGlvbmFyeSk7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LmdldE1vZGVsKFwidWlcIikuc2V0UHJvcGVydHkoVWlNb2RlbENvbnN0YW50cy5Eb2N1bWVudE1vZGlmaWVkLCBpc05ld1ZhbHVlKTtcblx0XHQvLyBEdWUgdG8gdXNpbmcgdGhlIHNlYXJjaCBhbmQgdmFsdWUgaGVscHMgb24gdGhlIGFjdGlvbiBkaWFsb2cgdHJhbnNpZW50IG1lc3NhZ2VzIGNvdWxkIGFwcGVhclxuXHRcdC8vIHdlIG5lZWQgYW4gVVggZGVzaWduIGZvciB0aG9zZSB0byBzaG93IHRoZW0gdG8gdGhlIHVzZXIgLSBmb3Igbm93IHJlbW92ZSB0aGVtIGJlZm9yZSBjb250aW51aW5nXG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldCB0aGUgc3RhdGUgb2YgdGhlIGRpYWxvZyB0byBzdGFydCBhIG5ldyBpdGVyYXRpb24uXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgcmVzZXRTdGF0ZSgpOiB2b2lkIHtcblx0XHR0aGlzLnVubG9ja0RpYWxvZygpO1xuXHRcdHRoaXMuYnV0dG9uTG9jayA9IGZhbHNlO1xuXHRcdHRoaXMudXBkYXRlRGlhbG9nQmluZGluZ0NvbnRleHRGb3JFcnJvcigpO1xuXHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1JlamVjdCA9IHJlamVjdDtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFuZ2UgdGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgZGlhbG9nIHRvIG9uZSB3aXRoIHByaW9yaXR5IG1lc3NhZ2UuXG5cdCAqXG5cdCAqIE9uIGluaXRpYWwgYWN0aW9uIGV4ZWN1dGlvbiwgd2UgbWlnaHQgaGF2ZSBib3VuZCBtZXNzYWdlcyB3aXRoIGFueSBzZWxlY3RlZCBjb250ZXh0cyBhcyB0YXJnZXQgYXBhcnQgZnJvbSB0aGUgZGlhbG9nJ3MgaW5pdGlhbCBjb250ZXh0LlxuXHQgKiBXZSBjaGFuZ2UgdGhlIGJpbmRpbmcgY29udGV4dCBvZiBkaWFsb2cgZm9yIHRoZSBwYXJhbWV0ZXIgZmllbGRzJyB0byBnZXQgdGhlIHZhbGlkIHZhbHVlIHN0YXRlIGZyb20gdGhlIHByaW9yaXR5IGJvdW5kIG1lc3NhZ2UuXG5cdCAqL1xuXHR1cGRhdGVEaWFsb2dCaW5kaW5nQ29udGV4dEZvckVycm9yKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoIDwgMikge1xuXHRcdFx0Ly8gV2Ugd291bGQgbmVlZCB0byBzd2l0Y2ggdGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgZGlhbG9nIG9ubHkgd2hlbiB3ZSBoYXZlIG11bHRpcGxlIGNvbnRleHRzIGZvciBleGVjdXRpbmcgdGhlIGFjdGlvbi5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgd2FybmluZ0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLCBpbmZvQ29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZXJyb25lb3VzQ3R4ID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmZpbmQoKGNvbnRleHQpID0+IHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzID0gY29udGV4dC5nZXRNZXNzYWdlcygpO1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2VzLnNvbWUoKG1zZykgPT4ge1xuXHRcdFx0XHQvLyBXZSBob2xkIGZpcnN0IGNvbnRleHQgd2l0aCB3YXJuaW5nIG9yIGluZm8gbWVzc2FnZXMuXG5cdFx0XHRcdHdhcm5pbmdDb250ZXh0ID0gIXdhcm5pbmdDb250ZXh0ICYmIG1zZy5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLldhcm5pbmcgPyBjb250ZXh0IDogdW5kZWZpbmVkO1xuXHRcdFx0XHRpbmZvQ29udGV4dCA9ICFpbmZvQ29udGV4dCAmJiBtc2cuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbiA/IGNvbnRleHQgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdC8vIEVycm9yIGlzIGZvdW5kISEhIFdlIHNoYWxsIGV4aXQuXG5cdFx0XHRcdHJldHVybiBtc2cuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdGNvbnN0IGNvbnRleHRUb1VzZSA9IGVycm9uZW91c0N0eCA/PyB3YXJuaW5nQ29udGV4dCA/PyBpbmZvQ29udGV4dDtcblxuXHRcdGlmIChjb250ZXh0VG9Vc2UpIHtcblx0XHRcdHRoaXMuZGlhbG9nPy5zZXRCaW5kaW5nQ29udGV4dChjb250ZXh0VG9Vc2UpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBidXN5IHN0YXRlIG9mIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRwcml2YXRlIHVubG9ja0RpYWxvZygpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5kaWFsb2cgJiYgQnVzeUxvY2tlci5pc0xvY2tlZCh0aGlzLmRpYWxvZykpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMuZGlhbG9nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgdGhlIGNhbmNlbCBhY3Rpb24gb2YgdGhlIGRpYWxvZy5cblx0ICovXG5cdHByaXZhdGUgb25DYW5jZWwoKTogdm9pZCB7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUmVqZWN0KEZFTGlicmFyeS5Db25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHR0aGlzLmNsb3NlRGlhbG9nKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRwdWJsaWMgY2xvc2VEaWFsb2coKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZGlhbG9nKSB7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblBhcmFtZXRlckRpYWxvZ0Nsb3NlZD8uKCk7XG5cdFx0XHQvLyB3aGVuIHRoZSBkaWFsb2cgaXMgY2FuY2VsbGVkLCBtZXNzYWdlcyBuZWVkIHRvIGJlIHJlbW92ZWQgaW4gY2FzZSB0aGUgc2FtZSBhY3Rpb24gc2hvdWxkIGJlIGV4ZWN1dGVkIGFnYWluXG5cdFx0XHRmb3IgKGNvbnN0IGkgaW4gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0XHR0aGlzLnJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyKHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3NbaV0ucGFyYW1ldGVyKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuZGlhbG9nLmNsb3NlKCk7XG5cdFx0fVxuXHRcdHRoaXMuaXNEaWFsb2dPcGVuID0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIGFjdGlvbiByZXN1bHQuXG5cdCAqL1xuXHRhc3luYyBvcGVuRGlhbG9nKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghdGhpcy5kaWFsb2cpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkVycm9yIG9uIG9wZW5pbmcgdGhlIGRpYWxvZ1wiKTtcblx0XHR9XG5cdFx0YXdhaXQgQ29tbW9uVXRpbHMuc2V0VXNlckRlZmF1bHRzKFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudCxcblx0XHRcdHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MubWFwKChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PiBhY3Rpb25QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlciksXG5cdFx0XHR0aGlzLnBhcmFtZXRlck1vZGVsLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdFx0dGhpcy5zZXRNb2RlbHModGhpcy5kaWFsb2cpO1xuXHRcdHRoaXMucGFyYW1ldGVycy52aWV3Py5hZGREZXBlbmRlbnQodGhpcy5kaWFsb2cpO1xuXHRcdGF3YWl0IHRoaXMuc2V0T3BlcmF0aW9uRGVmYXVsdFZhbHVlcyh0aGlzLmRpYWxvZyk7XG5cdFx0dGhpcy5kaWFsb2cub3BlbigpO1xuXHRcdHRoaXMuaXNEaWFsb2dPcGVuID0gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBtb2RlbCBjb25maWd1cmF0aW9uIGZvciB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBvd25lciBvZiB0aGUgZGlhbG9nXG5cdCAqL1xuXHRwcml2YXRlIHNldE1vZGVscyhkaWFsb2c6IERpYWxvZyk6IHZvaWQge1xuXHRcdGRpYWxvZy5zZXRNb2RlbCh0aGlzLnBhcmFtZXRlck1vZGVsLCBcInBhcmFtc01vZGVsXCIpO1xuXHRcdGRpYWxvZy5iaW5kRWxlbWVudCh7XG5cdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdG1vZGVsOiBcInBhcmFtc01vZGVsXCJcblx0XHR9KTtcblx0XHRkaWFsb2cuc2V0TW9kZWwodGhpcy5wYXJhbWV0ZXJzLm1vZGVsKTtcblx0XHRkaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0cGF0aDogYCR7dGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA/IFwiXCIgOiBcIi9cIn0ke3RoaXMuYWN0aW9uTmFtZX0oLi4uKWBcblx0XHR9KTtcblxuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRkaWFsb2cuc2V0QmluZGluZ0NvbnRleHQodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdKTsgLy8gdXNlIGNvbnRleHQgb2YgZmlyc3Qgc2VsZWN0ZWQgbGluZSBpdGVtXG5cdFx0fVxuXHRcdC8vIGVtcHR5IG1vZGVsIHRvIGFkZCBlbGVtZW50cyBkeW5hbWljYWxseSBkZXBlbmRpbmcgb24gbnVtYmVyIG9mIE1WRiBmaWVsZHMgZGVmaW5lZCBvbiB0aGUgZGlhbG9nXG5cdFx0ZGlhbG9nLnNldE1vZGVsKG5ldyBKU09OTW9kZWwoe30pLCBcIm12ZnZpZXdcIik7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgbWVzc2FnZXMgYmVmb3JlIG9wZW5pbmcgdGhlIGRpYWxvZy5cblx0ICogQHBhcmFtIF9ldmVudFxuXHQgKi9cblx0cHJpdmF0ZSBiZWZvcmVPcGVuKF9ldmVudDogRGlhbG9nJEJlZm9yZU9wZW5FdmVudCk6IHZvaWQge1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogV2FpdCBmb3IgdGhlIHBhcmFtZXRlciB2YWx1ZXMgdG8gYmUgc2V0LlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIGNvbnRhaW5pbmcgdGhlIHBhcmFtZXRlciB2YWx1ZXMuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgd2FpdEZvclBhcmFtZXRlcnNWYWx1ZXMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPj4ge1xuXHRcdHJldHVybiB0aGlzLnBhcmFtZXRlcnNWYWx1ZXNQcm9taXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgaWYgdGhlIGRpYWxvZyBpcyBvcGVuZWQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRpYWxvZyBpcyBvcGVuZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdHB1YmxpYyBpc09wZW4oKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaXNEaWFsb2dPcGVuO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBiaW5kaW5nUGFyYW1ldGVyIFRoZSBiaW5kaW5nIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBkaWFsb2dcblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIGRlZmF1bHQgdmFsdWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUoXG5cdFx0cGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsXG5cdFx0YmluZGluZ1BhcmFtZXRlcjogc3RyaW5nLFxuXHRcdGRpYWxvZzogRGlhbG9nXG5cdCk6IFByb21pc2U8UGFyYW1ldGVyRGVmYXVsdFZhbHVlPiB7XG5cdFx0Y29uc3Qgb3BlcmF0aW9uQmluZGluZyA9IGRpYWxvZy5nZXRPYmplY3RCaW5kaW5nKCkgYXMgT0RhdGFDb250ZXh0QmluZGluZztcblx0XHRjb25zdCBwYXJhbWV0ZXJNb2RlbERhdGEgPSB0aGlzLnBhcmFtZXRlck1vZGVsLmdldERhdGEoKTtcblx0XHRjb25zdCBwYXJhbU5hbWUgPSBwYXJhbWV0ZXIubmFtZTtcblx0XHRjb25zdCBkZWZhdWx0VmFsdWUgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/LlBhcmFtZXRlckRlZmF1bHRWYWx1ZTtcblx0XHQvLyBDYXNlIDE6IFRoZXJlIGlzIGEgUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGFubm90YXRpb25cblx0XHRpZiAoZGVmYXVsdFZhbHVlKSB7XG5cdFx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA+IDAgJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZGVmYXVsdFZhbHVlKSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IHBhdGhGb3JDb250ZXh0OiBzdHJpbmcgPVxuXHRcdFx0XHRcdFx0YmluZGluZ1BhcmFtZXRlciAmJiBkZWZhdWx0VmFsdWUucGF0aC5zdGFydHNXaXRoKGAke2JpbmRpbmdQYXJhbWV0ZXJ9L2ApXG5cdFx0XHRcdFx0XHRcdD8gZGVmYXVsdFZhbHVlLnBhdGgucmVwbGFjZShgJHtiaW5kaW5nUGFyYW1ldGVyfS9gLCBcIlwiKVxuXHRcdFx0XHRcdFx0XHQ6IGRlZmF1bHRWYWx1ZS5wYXRoO1xuXHRcdFx0XHRcdGxldCBwYXJhbVZhbHVlID0gYXdhaXQgQ29tbW9uVXRpbHMucmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KGRlZmF1bHRWYWx1ZS5wYXRoLCBvcGVyYXRpb25CaW5kaW5nLmdldE1vZGVsKCkpO1xuXHRcdFx0XHRcdGlmIChwYXJhbVZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRwYXJhbVZhbHVlID0gYXdhaXQgb3BlcmF0aW9uQmluZGluZy5nZXRQYXJhbWV0ZXJDb250ZXh0KCkucmVxdWVzdFByb3BlcnR5KGRlZmF1bHRWYWx1ZS5wYXRoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHQvLyBGb3IgbXVsdGkgc2VsZWN0LCBuZWVkIHRvIGxvb3Agb3ZlciBjb250ZXh0cyAoYXMgY29udGV4dHMgY2Fubm90IGJlIHJldHJpZXZlZCB2aWEgYmluZGluZyBwYXJhbWV0ZXIgb2YgdGhlIG9wZXJhdGlvbiBiaW5kaW5nKVxuXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLnNvbWUoKGNvbnRleHQpID0+IGNvbnRleHQuZ2V0UHJvcGVydHkocGF0aEZvckNvbnRleHQpICE9PSBwYXJhbVZhbHVlKSkge1xuXHRcdFx0XHRcdFx0XHQvLyBpZiB0aGUgdmFsdWVzIGZyb20gdGhlIGNvbnRleHRzIGFyZSBub3QgYWxsIHRoZSBzYW1lLCBkbyBub3QgcHJlZmlsbFxuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdG5vUG9zc2libGVWYWx1ZTogdHJ1ZVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWUsIHZhbHVlOiBwYXJhbVZhbHVlIH07XG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVhZGluZyBkZWZhdWx0IGFjdGlvbiBwYXJhbWV0ZXJcIiwgcGFyYW1OYW1lLCB0aGlzLmFjdGlvbi5uYW1lKTtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0cGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdGxhdGVQcm9wZXJ0eUVycm9yOiB0cnVlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQ2FzZSAxLjI6IFBhcmFtZXRlckRlZmF1bHRWYWx1ZSBkZWZpbmVzIGEgZml4ZWQgc3RyaW5nIHZhbHVlIChpLmUuIHZQYXJhbURlZmF1bHRWYWx1ZSA9ICdzb21lU3RyaW5nJylcblx0XHRcdFx0cmV0dXJuIHsgcGFyYW1OYW1lLCB2YWx1ZTogZGVmYXVsdFZhbHVlLnZhbHVlT2YoKSB9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4geyBwYXJhbU5hbWUsIHZhbHVlOiBwYXJhbWV0ZXJNb2RlbERhdGFbcGFyYW1OYW1lXSB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG1hbmlmZXN0IHZhbHVlcy5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG1hbmlmZXN0IHZhbHVlcy5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0TWFuaWZlc3RGdW5jdGlvblZhbHVlcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSB0aGlzLmRpYWxvZz8uZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRpZiAoIXRoaXMucGFyYW1ldGVycy52aWV3IHx8ICF0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIHx8ICFiaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblxuXHRcdHJldHVybiBGUE1IZWxwZXIubG9hZE1vZHVsZUFuZENhbGxNZXRob2QoXG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uXG5cdFx0XHRcdC5zdWJzdHJpbmcoMCwgdGhpcy5wYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgfHwgLTEpXG5cdFx0XHRcdC5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKSxcblx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24uc3Vic3RyaW5nKFxuXHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSArIDEsXG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24ubGVuZ3RoXG5cdFx0XHQpLFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLnZpZXcsXG5cdFx0XHRiaW5kaW5nQ29udGV4dCxcblx0XHRcdHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1xuXHRcdCkgYXMgUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJlZGVmaW5lZCB2YWx1ZXMgZm9yIHRoZSBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gYmluZGluZ1BhcmFtZXRlciBUaGUgYmluZGluZyBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIGRpYWxvZyBUaGUgZGlhbG9nXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIGNvbnRhaW5pbmcgYWxsIHByZWRlZmluZWQgdmFsdWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRQcmVEZWZpbmVkVmFsdWVzKFxuXHRcdGJpbmRpbmdQYXJhbWV0ZXI6IHN0cmluZyxcblx0XHRkaWFsb2c6IERpYWxvZ1xuXHQpOiBQcm9taXNlPHtcblx0XHRjb250ZXh0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRkZWZhdWx0VmFsdWVzOiBQYXJhbWV0ZXJEZWZhdWx0VmFsdWVbXTtcblx0XHRmdW5jdGlvblZhbHVlczogT0RhdGFWNENvbnRleHRbXTtcblx0XHRtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0fT4ge1xuXHRcdGNvbnN0IGJvdW5kRnVuY3Rpb25OYW1lID0gdGhpcy5hY3Rpb24uYW5ub3RhdGlvbnMuQ29tbW9uPy5EZWZhdWx0VmFsdWVzRnVuY3Rpb24/LnZhbHVlT2YoKTtcblx0XHRsZXQgcmVxdWVzdENvbnRleHRPYmplY3Q6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0XHRsZXQgZnVuY3Rpb25QYXJhbXM6IFByb21pc2U8T0RhdGFWNENvbnRleHQ+W10gPSBbXTtcblx0XHRpZiAodGhpcy5hY3Rpb24uaXNCb3VuZCkge1xuXHRcdFx0aWYgKHR5cGVvZiBib3VuZEZ1bmN0aW9uTmFtZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRjb25zdCBtb2RlbCA9IHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5nZXRNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBib3VuZEZ1bmN0aW9uID0gT3BlcmF0aW9uLmdldE9wZXJhdGlvbkZyb21OYW1lKGJvdW5kRnVuY3Rpb25OYW1lLCBtb2RlbCwgdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdKTtcblx0XHRcdFx0aWYgKGJvdW5kRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRmdW5jdGlvblBhcmFtcyA9IHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5tYXAoYXN5bmMgKGNvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IG5ldyBPRGF0YU9wZXJhdGlvbihcblx0XHRcdFx0XHRcdFx0Ym91bmRGdW5jdGlvbixcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGFwcENvbXBvbmVudDogdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdFx0XHRtb2RlbDogbW9kZWwsXG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dHM6IFtjb250ZXh0XVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0ZW5oYW5jZSRzZWxlY3Q6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGdyb3VwSWQ6IFwiZnVuY3Rpb25Hcm91cFwiXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCkuZXhlY3V0ZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdC5maWx0ZXIoaXNGdWxmaWxsZWQpWzBdPy52YWx1ZS5ib3VuZENvbnRleHQ7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRyZXF1ZXN0Q29udGV4dE9iamVjdCA9IHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5yZXF1ZXN0T2JqZWN0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGNvbnRleHRWYWx1ZXMgPSBhd2FpdCByZXF1ZXN0Q29udGV4dE9iamVjdDtcblxuXHRcdFx0Y29uc3QgcHJvbWlzZXMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MubWFwKGFzeW5jIChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PlxuXHRcdFx0XHRcdFx0dGhpcy5nZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUoYWN0aW9uUGFyYW1ldGVySW5mby5wYXJhbWV0ZXIsIGJpbmRpbmdQYXJhbWV0ZXIsIGRpYWxvZylcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCksXG5cdFx0XHRcdFByb21pc2UuYWxsKGZ1bmN0aW9uUGFyYW1zKSxcblx0XHRcdFx0dGhpcy5nZXRNYW5pZmVzdEZ1bmN0aW9uVmFsdWVzKClcblx0XHRcdF0pO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Y29udGV4dFZhbHVlcyxcblx0XHRcdFx0ZGVmYXVsdFZhbHVlczogcHJvbWlzZXNbMF0sXG5cdFx0XHRcdGZ1bmN0aW9uVmFsdWVzOiBwcm9taXNlc1sxXSxcblx0XHRcdFx0bWFuaWZlc3RGdW5jdGlvblZhbHVlczogcHJvbWlzZXNbMl1cblx0XHRcdH07XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHBhcmFtZXRlclwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0Ly8gUmVtb3ZlIG1lc3NhZ2VzIHJlbGF0aW5nIHRvIHRoZSBmdW5jdGlvbiBmb3IgZGVmYXVsdCB2YWx1ZXMgYXMgdGhleSBhcmVuJ3QgaGVscGZ1bCBmb3IgYSB1c2VyXG5cdFx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Y29udGV4dFZhbHVlczoge30sXG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXM6IFtdLFxuXHRcdFx0XHRmdW5jdGlvblZhbHVlczogW10sXG5cdFx0XHRcdG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXM6IHt9XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsYmFjayB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmVkLiBTZXRzIHRoZSBmb2N1cyBvbiB0aGUgZmlyc3QgZmllbGQgd2l0aG91dCBvcGVuaW5nIHRoZSBWSCBkaWFsb2cuXG5cdCAqL1xuXHRwcml2YXRlIGFmdGVyT3BlbigpOiB2b2lkIHtcblx0XHRjb25zdCBmaXJzdFZpc2libGVQYXJhbWV0ZXIgPSB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoKHBhcmFtZXRlckluZm8pID0+IHBhcmFtZXRlckluZm8uZmllbGQuZ2V0VmlzaWJsZSgpKTtcblx0XHRpZiAoZmlyc3RWaXNpYmxlUGFyYW1ldGVyKSB7XG5cdFx0XHRjb25zdCBmaXJzdEZpZWxkID0gZmlyc3RWaXNpYmxlUGFyYW1ldGVyPy5maWVsZDtcblx0XHRcdGNvbnN0IGZvY3VzSW5mbyA9IGZpcnN0RmllbGQ/LmdldEZvY3VzSW5mbygpIGFzIHsgdGFyZ2V0SW5mbzogb2JqZWN0IH07XG5cdFx0XHRmb2N1c0luZm8udGFyZ2V0SW5mbyA9IHsgc2lsZW50OiB0cnVlIH07XG5cdFx0XHRmaXJzdEZpZWxkPy5mb2N1cyhmb2N1c0luZm8pO1xuXHRcdH1cblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblBhcmFtZXRlckRpYWxvZ09wZW5lZD8uKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGluZm8uXG5cdCAqIEBwYXJhbSBkaWFsb2dDb250ZW50cyBUaGUgZGlhbG9nIGNvbnRlbnRzXG5cdCAqL1xuXHRwcml2YXRlIHJlZ2lzdGVyQWN0aW9uUGFyYW1ldGVySW5mbyhkaWFsb2dDb250ZW50czogRGlhbG9nQ29udGVudFR5cGVzW10pOiB2b2lkIHtcblx0XHQvL1JlZ2lzdGVyIHRoZSBmaWVsZFxuXHRcdGRpYWxvZ0NvbnRlbnRzLmZvckVhY2goKGRpYWxvZ0NvbnRlbnQpID0+IHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlciA9IGRpYWxvZ0NvbnRlbnQ/LnBhcmFtZXRlcjtcblx0XHRcdGNvbnN0IGZpZWxkID0gZGlhbG9nQ29udGVudD8uZm9ybUVsZW1lbnRzPy5bMV07XG5cdFx0XHR0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLnB1c2goe1xuXHRcdFx0XHRwYXJhbWV0ZXIsXG5cdFx0XHRcdGZpZWxkLFxuXHRcdFx0XHRpc011bHRpVmFsdWU6IHBhcmFtZXRlci5pc0NvbGxlY3Rpb24sXG5cdFx0XHRcdGhhc0Vycm9yOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBkaWFsb2dcblx0ICogQHJldHVybnMgVGhlIHByb21pc2UuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHNldE9wZXJhdGlvbkRlZmF1bHRWYWx1ZXMoZGlhbG9nOiBEaWFsb2cpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyID0gdGhpcy5hY3Rpb24uaXNCb3VuZCA/IHRoaXMuYWN0aW9uLnBhcmFtZXRlcnNbMF0ubmFtZSA6IFwiXCI7XG5cdFx0Y29uc3QgeyBjb250ZXh0VmFsdWVzLCBkZWZhdWx0VmFsdWVzLCBmdW5jdGlvblZhbHVlcywgbWFuaWZlc3RGdW5jdGlvblZhbHVlcyB9ID0gYXdhaXQgdGhpcy5nZXRQcmVEZWZpbmVkVmFsdWVzKFxuXHRcdFx0YmluZGluZ1BhcmFtZXRlcixcblx0XHRcdGRpYWxvZ1xuXHRcdCk7XG5cdFx0Y29uc3Qgb3BlcmF0aW9uQmluZGluZyA9IGRpYWxvZy5nZXRPYmplY3RCaW5kaW5nKCkgYXMgT0RhdGFDb250ZXh0QmluZGluZztcblxuXHRcdGlmIChiaW5kaW5nUGFyYW1ldGVyKSB7XG5cdFx0XHRvcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihiaW5kaW5nUGFyYW1ldGVyLCBjb250ZXh0VmFsdWVzKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGkgaW4gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0aWYgKHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3NbaV0ucGFyYW1ldGVyLm5hbWUgIT09IFwiUmVzdWx0SXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJOYW1lID0gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvc1tpXS5wYXJhbWV0ZXIubmFtZTtcblx0XHRcdFx0Ly8gUGFyYW1ldGVyIHZhbHVlcyBwcm92aWRlZCBpbiB0aGUgY2FsbCBvZiBpbnZva2VBY3Rpb24gb3ZlcnJ1bGUgb3RoZXIgc291cmNlc1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJQcm92aWRlZFZhbHVlID0gdGhpcy5wYXJhbWV0ZXJWYWx1ZXM/LmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQubmFtZSA9PT0gcGFyYW1ldGVyTmFtZSk/LnZhbHVlO1xuXHRcdFx0XHRpZiAocGFyYW1ldGVyUHJvdmlkZWRWYWx1ZSkge1xuXHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIHBhcmFtZXRlclByb3ZpZGVkVmFsdWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXMuaGFzT3duUHJvcGVydHkocGFyYW1ldGVyTmFtZSkpIHtcblx0XHRcdFx0XHRvcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihwYXJhbWV0ZXJOYW1lLCBtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzW3BhcmFtZXRlck5hbWVdKTtcblx0XHRcdFx0fSBlbHNlIGlmIChkZWZhdWx0VmFsdWVzW2ldICYmIGRlZmF1bHRWYWx1ZXNbaV0udmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIGRlZmF1bHRWYWx1ZXNbaV0udmFsdWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuYWN0aW9uLmFubm90YXRpb25zLkNvbW1vbj8uRGVmYXVsdFZhbHVlc0Z1bmN0aW9uICYmICFkZWZhdWx0VmFsdWVzW2ldLm5vUG9zc2libGVWYWx1ZSkge1xuXHRcdFx0XHRcdGNvbnN0IHNldE9mRnVuY3Rpb25WYWx1ZXMgPSBuZXcgU2V0PHN0cmluZz4oXG5cdFx0XHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubWFwKChjb250ZXh0LCBpbmRleCkgPT4gZnVuY3Rpb25WYWx1ZXNbaW5kZXhdLmdldE9iamVjdChwYXJhbWV0ZXJOYW1lKSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChzZXRPZkZ1bmN0aW9uVmFsdWVzLnNpemUgPT09IDEgJiYgc2V0T2ZGdW5jdGlvblZhbHVlcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Ly9wYXJhbSB2YWx1ZXMgYXJlIGFsbCB0aGUgc2FtZTpcblx0XHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIEFycmF5LmZyb20oc2V0T2ZGdW5jdGlvblZhbHVlcylbMF0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIGF0IGxlYXN0IG9uZSBEZWZhdWx0IFByb3BlcnR5IGlzIGEgTGF0ZSBQcm9wZXJ0eSBhbmQgYW4gZVRhZyBlcnJvciB3YXMgcmFpc2VkLlxuXHRcdGlmIChkZWZhdWx0VmFsdWVzLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZS5sYXRlUHJvcGVydHlFcnJvcikpIHtcblx0XHRcdGNvbnN0IHJlZnJlc2ggPSB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX1JFRlJFU0hcIik7XG5cdFx0XHRNZXNzYWdlQm94Lndhcm5pbmcoZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50KS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfTEFURV9QUk9QRVJUWVwiKSwge1xuXHRcdFx0XHRhY3Rpb25zOiBbcmVmcmVzaCwgTWVzc2FnZUJveC5BY3Rpb24uT0tdLFxuXHRcdFx0XHRlbXBoYXNpemVkQWN0aW9uOiByZWZyZXNoLFxuXHRcdFx0XHRvbkNsb3NlOiAoYWN0aW9uOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRpZiAoYWN0aW9uID09PSByZWZyZXNoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBleHRlbnNpb25BUEkgPSB0aGlzLnBhcmFtZXRlcnMudmlldz8uZ2V0Q29udHJvbGxlcigpLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdFx0XHRcdFx0KGV4dGVuc2lvbkFQSSBhcyBMaXN0UmVwb3J0RXh0ZW5zaW9uQVBJIHwgT2JqZWN0UGFnZUV4dGVuc2lvbkFQSSkucmVmcmVzaCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjI1ZW1cIlxuXHRcdFx0fSBhcyBvYmplY3QpO1xuXHRcdH1cblxuXHRcdC8vIGRlc3Ryb3kgdGhlIG9kYXRhQ29udGV4dEJpbmRpbmcgcmVsYXRlZCB0byB0aGUgZnVuY3Rpb24gY2FsbFxuXHRcdGZvciAoY29uc3QgZnVuY3Rpb25Db250ZXh0IG9mIGZ1bmN0aW9uVmFsdWVzKSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nID0gZnVuY3Rpb25Db250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRcdGlmIChiaW5kaW5nPy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFDb250ZXh0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRiaW5kaW5nLmRlc3Ryb3koKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgY2xvc2Ugb2YgdGhlIGRpYWxvZy5cblx0ICovXG5cdHByaXZhdGUgYWZ0ZXJDbG9zZSgpOiB2b2lkIHtcblx0XHR0aGlzLmRpYWxvZz8uZGVzdHJveSgpO1xuXHRcdHRoaXMuYnV0dG9uTG9jayA9IGZhbHNlOyAvL25lZWRlZCBoZXJlLCBub3QgaW4gdGhlIHByZXNzIGV2ZW50cyBmaW5hbGx5IGNsYXVzZS4gSW4gY2FzZSB0aGUgVUkgaXMgc2x1Z2dpc2gsIGJlZ2luIGJ1dHRvbiBjb3VsZCBiZSBwcmVzc2VkIGFnYWluLlxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5IHVzZWQgZm9yIHRleHQgYW5ub3RhdGlvbiBpbiB0aGUgVmFsdWVIZWxwIGZvciB0aGUgYWN0aW9uIHBhcmFtZXRlciBhbmQgcHJvdmlkZXMgdGhlIGZvcm1hdHRlZCBiaW5kaW5nLlxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZSBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFRoZSBmb3JtIGVsZW1lbnQgY29udHJvbC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0QWRkaXRpb25hbFZhbHVlKG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0bGV0IHRleHRDb250ZXh0O1xuXG5cdFx0Y29uc3QgY29udGV4dFBhdGggPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IGxvY2FsRGF0YVByb3BlcnR5ID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE9iamVjdCgpPy4kTmFtZTtcblx0XHRjb25zdCB2YWx1ZUxpc3RCeVF1YWxpZmllciA9IGF3YWl0IHRoaXMubWV0YU1vZGVsLnJlcXVlc3RWYWx1ZUxpc3RJbmZvKGNvbnRleHRQYXRoLCB0cnVlKTtcblxuXHRcdC8vIExvb2sgZm9yIExvY2FsRGF0YVByb3BlcnR5IGluIFZhbHVlTGlzdFBhcmFtZXRlck91dCBvciBWYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCB3aGVyZSB0aGlzIGlzIHRoZSBwYXJhbWV0ZXIgbmFtZVxuXHRcdC8vIFdlIG9ubHkgY29uc2lkZXIgVGV4dEFubm90YXRpb25zIGZvciB0aGlzIGFjdGlvbiBwYXJhbWV0ZXJcblx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbWV0ZXIgPSB2YWx1ZUxpc3RCeVF1YWxpZmllcltcIlwiXS5QYXJhbWV0ZXJzLmZpbmQoXG5cdFx0XHQocGFyYW1ldGVyOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyKSA9PlxuXHRcdFx0XHRwYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0KHBhcmFtZXRlci4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVyT3V0XCIgJiZcblx0XHRcdFx0XHRwYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGggPT09IGxvY2FsRGF0YVByb3BlcnR5KVxuXHRcdCk7XG5cblx0XHRpZiAodmFsdWVMaXN0UGFyYW1ldGVyICYmIHZhbHVlTGlzdFBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSkge1xuXHRcdFx0Y29uc3QgdGV4dFByb3BlcnR5ID0gdmFsdWVMaXN0UGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5O1xuXHRcdFx0Ly8gTm93IHdlIGhhdmUgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgaXMgdGhlIGFubm90YXRlZCB0ZXh0XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBgLyR7dmFsdWVMaXN0QnlRdWFsaWZpZXJbXCJcIl0uQ29sbGVjdGlvblBhdGh9LyR7dGV4dFByb3BlcnR5fWA7XG5cdFx0XHRjb25zdCBwcm9wQW5ub3RhdGlvbnMgPSB0aGlzLm1ldGFNb2RlbC5nZXRPYmplY3QoYCR7cHJvcGVydHlQYXRofUBgKTtcblxuXHRcdFx0aWYgKHByb3BBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl0pIHtcblx0XHRcdFx0Y29uc3QgdGV4dFByb3AgPSBwcm9wQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl07XG5cdFx0XHRcdGNvbnN0IHRleHRQYXRoID0gYC8ke3ZhbHVlTGlzdEJ5UXVhbGlmaWVyW1wiXCJdLkNvbGxlY3Rpb25QYXRofS8ke3RleHRQcm9wLiRQYXRofWA7XG5cdFx0XHRcdHRleHRDb250ZXh0ID0gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQodGV4dFBhdGgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGV4dENvbnRleHQpIHtcblx0XHRcdFx0cmV0dXJuIEFubm90YXRpb25IZWxwZXIuZm9ybWF0KHRleHRDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IHRleHRDb250ZXh0IH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2YWx1ZSBiaW5kaW5nIGZvciBhbiBhY3Rpb24gcGFyYW1ldGVyLiBXZSBhZGQgc3BlY2lhbCBoYW5kbGluZyBmb3IgY3VycmVuY3kgYW5kIHVuaXQgYmVhdXNlIHRoZXkgYXJlIG5vdFxuXHQgKiBwYXJ0IG9mIHRoZSBhbm5vdGF0aW9uIGhlbHBlciBmb3JtYXQgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHBhcmFtIG9JbnRlcmZhY2UgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyBmb3IgdGhlIHZhbHVlIG9mIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRBUERpYWxvZ0JpbmRpbmdWYWx1ZShcblx0XHRwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcixcblx0XHRwYXJhbWV0ZXJDb250ZXh0OiBDb250ZXh0LFxuXHRcdG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZVxuXHQpOiBQcm9taXNlPENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgc3RyaW5nPiB7XG5cdFx0Y29uc3Qgb01vZGVsID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnMgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH1AYCk7XG5cdFx0bGV0IHByb3BlcnR5T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cblx0XHRpZiAoXG5cdFx0XHRvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLklTT0N1cnJlbmN5XCJdIHx8XG5cdFx0XHRvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlVuaXRcIl1cblx0XHQpIHtcblx0XHRcdGNvbnN0IGFjdGlvbk1ldGFQYXRoID0gdGhpcy5hY3Rpb24uaXNCb3VuZFxuXHRcdFx0XHQ/IGAke3RoaXMubWV0YU1vZGVsLmdldE1ldGFQYXRoKHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5nZXRQYXRoKCkpfS8ke2NvbnZlcnRUeXBlcyh0aGlzLm1ldGFNb2RlbCkubmFtZXNwYWNlfS4ke1xuXHRcdFx0XHRcdFx0dGhpcy5hY3Rpb24ubmFtZVxuXHRcdFx0XHQgIH1gXG5cdFx0XHRcdDogYC8ke3RoaXMuYWN0aW9uLm5hbWV9YDtcblx0XHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7YWN0aW9uTWV0YVBhdGh9LyR7cGFyYW1ldGVyLm5hbWV9YCkhO1xuXHRcdFx0cHJvcGVydHlPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KTtcblx0XHRcdHJldHVybiBnZXRWYWx1ZUJpbmRpbmcocHJvcGVydHlPYmplY3RQYXRoLCB7fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBBbm5vdGF0aW9uSGVscGVyLmZvcm1hdChwYXJhbWV0ZXJDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IHBhcmFtZXRlckNvbnRleHQgfSk7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFpR3FCQSxxQkFBcUI7SUE0QnpDLFNBQUFBLHNCQUNrQkMsTUFBYyxFQUNkQyxVQWFoQixFQUNnQkMsZUFBc0QsRUFDdERDLGFBQWlDLEVBQ2pDQyxjQUE4QixFQUM5QztNQXhDRjtNQUNBO01BQ0E7TUFBQSxLQUNRQyxZQUFZLEdBQUcsS0FBSztNQUFBLEtBTXBCQyxVQUFVLEdBQUcsS0FBSztNQUFBLEtBSVRDLG9CQUFvQixHQUE2RCxFQUFFO01BQUEsS0FFbkZDLGNBQWMsR0FBYyxJQUFJQyxTQUFTLENBQUM7UUFDMURDLFlBQVksRUFBRSxDQUFDO01BQ2hCLENBQUMsQ0FBQztNQUFBLEtBS2dCVixNQUFjLEdBQWRBLE1BQWM7TUFBQSxLQUNkQyxVQWFoQixHQWJnQkEsVUFhaEI7TUFBQSxLQUNnQkMsZUFBc0QsR0FBdERBLGVBQXNEO01BQUEsS0FDdERDLGFBQWlDLEdBQWpDQSxhQUFpQztNQUFBLEtBQ2pDQyxjQUE4QixHQUE5QkEsY0FBOEI7TUFFL0MsSUFBSSxDQUFDTyxVQUFVLEdBQUdDLFlBQVksQ0FBQ0MsYUFBYSxDQUFDLElBQUksQ0FBQ2IsTUFBTSxDQUFDO01BQ3pELElBQUksQ0FBQ2MsU0FBUyxHQUFHLElBQUksQ0FBQ2IsVUFBVSxDQUFDYyxLQUFLLENBQUNDLFlBQVksQ0FBQyxDQUFDO01BQ3JELElBQUksQ0FBQ0MsYUFBYSxHQUFHLElBQUksQ0FBQ2hCLFVBQVUsQ0FBQ2lCLElBQUksR0FBR0MsZ0JBQWdCLENBQUMsSUFBSSxDQUFDbEIsVUFBVSxDQUFDaUIsSUFBSSxDQUFDLEdBQUdDLGdCQUFnQixDQUFDLElBQUksQ0FBQ2xCLFVBQVUsQ0FBQ21CLFlBQVksQ0FBQztNQUNuSSxJQUFJLENBQUND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
|
|
1094
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJhY3Rpb24iLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyVmFsdWVzIiwiZW50aXR5U2V0TmFtZSIsIm1lc3NhZ2VIYW5kbGVyIiwiaXNEaWFsb2dPcGVuIiwiYnV0dG9uTG9jayIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicGFyYW1ldGVyTW9kZWwiLCJKU09OTW9kZWwiLCIkZGlzcGxheU1vZGUiLCJhY3Rpb25OYW1lIiwiYWN0aW9uSGVscGVyIiwiZ2V0QWN0aW9uTmFtZSIsIm1ldGFNb2RlbCIsIm1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicmVzb3VyY2VNb2RlbCIsInZpZXciLCJnZXRSZXNvdXJjZU1vZGVsIiwiYXBwQ29tcG9uZW50IiwicGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlIiwicGFyYW1ldGVyc1ZhbHVlc1JlamVjdCIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0UGFyYW1ldGVyRWRpdE1vZGUiLCJwYXJhbWV0ZXIiLCJhbm5vdGF0aW9ucyIsImZpZWxkQ29udHJvbCIsIkNvbW1vbiIsIkZpZWxkQ29udHJvbCIsImltbXV0YWJsZSIsIkNvcmUiLCJJbW11dGFibGUiLCJ2YWx1ZU9mIiwiY29tcHV0ZWQiLCJDb21wdXRlZCIsImNvbnN0YW50IiwiRmllbGRFZGl0TW9kZSIsIlJlYWRPbmx5IiwiaWZFbHNlIiwiaXNSZWFkT25seUV4cHJlc3Npb24iLCJpc0Rpc2FibGVkRXhwcmVzc2lvbiIsIkRpc2FibGVkIiwiRWRpdGFibGUiLCJjcmVhdGVGb3JtRWxlbWVudCIsImFjdGlvbk1ldGFQYXRoIiwiaXNCb3VuZCIsImdldE1ldGFQYXRoIiwiY29udGV4dHMiLCJnZXRQYXRoIiwiY29udmVydFR5cGVzIiwibmFtZXNwYWNlIiwibmFtZSIsIm1ldGFDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJmaWVsZCIsImxhYmVsIiwiTGFiZWwiLCJnZXRUZXh0IiwidG9TdHJpbmciLCJzdHJlYW1QYXJhbWV0ZXIiLCJpc0NvbGxlY3Rpb24iLCJjcmVhdGVNdWx0aUZpZWxkIiwidHlwZSIsInN0YXJ0c1dpdGgiLCJnZXRTdHJlYW1Qcm9wZXJ0eSIsImNyZWF0ZUZpbGVVcGxvYWRlciIsImNyZWF0ZUZpZWxkIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJjaGlsZHJlbiIsIl9qc3giLCJpZCIsImdlbmVyYXRlIiwidGV4dCIsInBhcmFtZXRlckNvbnRleHQiLCJkaXNwbGF5IiwiRmllbGRIZWxwZXIiLCJnZXRBUERpYWxvZ0Rpc3BsYXlGb3JtYXQiLCJnZXRPYmplY3QiLCJjb250ZXh0IiwiZXJyIiwiTG9nIiwid2FybmluZyIsInBsYWNlSG9sZGVyIiwiVUkiLCJQbGFjZWhvbGRlciIsInBsYWNlSG9sZGVyRXhwcmVzc2lvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwidW5kZWZpbmVkIiwicGFyYW1ldGVyVHlwZSIsIkVETV9UWVBFX01BUFBJTkciLCJNdWx0aVZhbHVlRmllbGQiLCJwbGFjZWhvbGRlciIsIml0ZW1zIiwicGF0aCIsImRlbGVnYXRlIiwiZWRpdE1vZGUiLCJ3aWR0aCIsIm11bHRpcGxlTGluZXMiLCJNdWx0aUxpbmVUZXh0IiwicmVxdWlyZWQiLCJpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbiIsInZhbHVlSGVscCIsImhhc1ZhbHVlSGVscCIsImNoYW5nZSIsImUiLCJoYW5kbGVGaWVsZENoYW5nZSIsInZpc2libGUiLCJub3QiLCJlcXVhbCIsIkhpZGRlbiIsImFyaWFMYWJlbGxlZEJ5IiwiZGVwZW5kZW50cyIsImNyZWF0ZVBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscCIsIk11bHRpVmFsdWVGaWVsZEl0ZW0iLCJkZXNjcmlwdGlvbiIsImZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcyIsIkFjY2VwdGFibGVNZWRpYVR5cGVzIiwiYWNjZXB0ZWRUeXBlcyIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImpvaW4iLCJoYW5kbGVUeXBlTWlzc21hdGNoIiwiZXZlbnQiLCJmaWxlVXBsb2FkZXIiLCJnZXRTb3VyY2UiLCJnaXZlblR5cGUiLCJnZXRQYXJhbWV0ZXIiLCJnZXRNaW1lVHlwZSIsInNob3dUeXBlTWlzbWF0Y2hEaWFsb2ciLCJmaWxlTWF4aW11bVNpemUiLCJjYWxjdWxhdGVNQmZyb21CeXRlIiwibWF4TGVuZ3RoIiwiaGFuZGxlRmlsZVNpemVFeGNlZWQiLCJzaG93RmlsZVNpemVFeGNlZWREaWFsb2ciLCJnZXRNYXhpbXVtRmlsZVNpemUiLCJ0b0ZpeGVkIiwib25VcGxvYWRDb21wbGV0ZSIsImRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkIiwiRmlsZVVwbG9hZGVyIiwiYnV0dG9uT25seSIsImljb25Pbmx5IiwibXVsdGlwbGUiLCJ0b29sdGlwIiwiaWNvbiIsInN0eWxlIiwic2VuZFhIUiIsInVzZU11bHRpcGFydCIsInNhbWVGaWxlbmFtZUFsbG93ZWQiLCJ1cGxvYWRPbkNoYW5nZSIsIm1pbWVUeXBlIiwidHlwZU1pc3NtYXRjaCIsIm1heGltdW1GaWxlU2l6ZSIsImZpbGVTaXplRXhjZWVkIiwiaHR0cFJlcXVlc3RNZXRob2QiLCJGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCIsIlB1dCIsInVwbG9hZENvbXBsZXRlIiwiaGFuZGxlRmlsZVVwbG9hZGVyQ2hhbmdlIiwiYWRkaXRpb25hbFZhbHVlIiwiYmluZGluZ1ZhbHVlIiwiZ2V0QVBEaWFsb2dCaW5kaW5nVmFsdWUiLCJnZXRBZGRpdGlvbmFsVmFsdWUiLCJGaWVsZCIsInBheWxvYWQiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwidmFsdWUiLCJpc011bHRpTGluZVRleHQiLCJWYWx1ZUhlbHAiLCJwcm9wZXJ0eVBhdGgiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwicXVhbGlmaWVycyIsInZhbHVlSGVscFF1YWxpZmllciIsInZhbGlkYXRlSW5wdXQiLCJyZXF1aXJlc1ZhbGlkYXRpb24iLCJ0eXBlYWhlYWQiLCJQb3BvdmVyIiwiTVRhYmxlIiwiY2FzZVNlbnNpdGl2ZSIsInVzZUNhc2VTZW5zaXRpdmVGaWx0ZXJSZXF1ZXN0cyIsImVudGl0eUNvbnRhaW5lciIsIkNhcGFiaWxpdGllcyIsIkZpbHRlckZ1bmN0aW9ucyIsIk1vZGVsSGVscGVyIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwidXNlQXNWYWx1ZUhlbHAiLCJWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJkaWFsb2ciLCJjcmVhdGVGaWVsZFZIRGlhbG9nIiwiVkhEaWFsb2ciLCJmaWVsZFByb21pc2UiLCJwYXJhbWV0ZXJJbmZvIiwiZmluZCIsImFjdGlvblBhcmFtZXRlckluZm8iLCJ2YWxpZGF0aW9uUHJvbWlzZSIsInJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyIiwicGFyYW1ldGVyc1ZhbHVlcyIsImhhc0Vycm9yIiwiZXJyb3IiLCJBY3Rpb25SdW50aW1lIiwiX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIiLCJtZXNzYWdlIiwiZmlsZXMiLCJnZXRCYXNlNjRGaWxlIiwiZ2V0TWltZVR5cGVQYXRoIiwiZ2V0RmlsZU5hbWVQYXRoIiwiQ29udGVudERpc3Bvc2l0aW9uIiwiRmlsZW5hbWUiLCJNZWRpYVR5cGUiLCJ0eXBlUmVmZXJlbmNlIiwicHJvcGVydGllcyIsInByb3BlcnR5IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsInJlc3VsdCIsInNwbGl0IiwicmVhZEFzRGF0YVVSTCIsIml0ZW0iLCJtZXNzYWdlcyIsIk1lc3NhZ2luZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJjb250cm9sSWQiLCJyZWxldmFudE1lc3NhZ2VzIiwiZmlsdGVyIiwibXNnIiwiZ2V0Q29udHJvbElkcyIsInNvbWUiLCJpbmNsdWRlcyIsInJlbW92ZU1lc3NhZ2VzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnRzIiwiZ2V0RGlhbG9nIiwiY3JlYXRlRGlhbG9nIiwiZGlhbG9nQ29udGVudHMiLCJkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzIiwiYWN0aW9uUGFyYW1ldGVycyIsInNsaWNlIiwiT3BlcmF0aW9uUGFyYW1ldGVyRmFjZXRzIiwiYWN0aW9uUGFyYW1ldGVyR3JvdXBzIiwiZm9yRWFjaCIsImZhY2V0IiwiZmFjZXRUaXRsZSIsIiRUeXBlIiwiaGFzRmllbGRHcm91cFRhcmdldCIsImZpZWxkR3JvdXAiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiZ3JvdXBlZEFjdGlvblBhcmFtZXRlcnMiLCJEYXRhIiwiZ3JvdXAiLCJwdXNoIiwiVmFsdWUiLCJkYXRhIiwiZ2V0R3JvdXBGb3JtIiwiYWxsIiwiYmluZCIsImZvcm1EYXRhIiwicGFyYW1ldGVyR3JvdXAiLCJvcEZhY2V0cyIsImRpYWxvZ0NvbnRlbnQiLCJUaXRsZSIsImVsZW1lbnQiLCJvcEZhY2V0IiwicmVnaXN0ZXJBY3Rpb25QYXJhbWV0ZXJJbmZvIiwibWVzc2FnZVN0cmlwIiwiZ2V0Q3VzdG9tQWN0aW9uTWVzc2FnZVN0cmlwVGV4dCIsImVuZEJ1dHRvbiIsIkJ1dHRvbiIsInByZXNzIiwib25DYW5jZWwiLCJEaWFsb2ciLCJ0aXRsZSIsImdldFRpdGxlVGV4dCIsImVzY2FwZUhhbmRsZXIiLCJkcmFnZ2FibGUiLCJyZXNpemFibGUiLCJhZnRlckNsb3NlIiwiYmVmb3JlT3BlbiIsImFmdGVyT3BlbiIsImluaXRpYWxGb2N1cyIsImJlZ2luQnV0dG9uIiwiaXNDcmVhdGVBY3Rpb24iLCJnZXRCZWdpbkJ1dHRvbkxhYmVsIiwib25BcHBseSIsImNvbnRlbnQiLCJNZXNzYWdlU3RyaXAiLCJzaG93SWNvbiIsIlNpbXBsZUZvcm0iLCJjb2x1bW5zTSIsImVkaXRhYmxlIiwibGFiZWxTcGFuTCIsImxhYmVsU3Bhbk0iLCJiaW5kaW5nIiwiYWN0aW9uTGFiZWwiLCJrZXkiLCJkZWZhdWx0S2V5IiwiZ2V0T3ZlcnJpZGRlblRleHQiLCJib3VuZEFjdGlvbk5hbWUiLCJwb3AiLCJzdWZmaXhSZXNvdXJjZUtleSIsImNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyIsImdldE9iamVjdEJpbmRpbmciLCJnZXRQYXJhbWV0ZXJDb250ZXh0IiwiQnVzeUxvY2tlciIsImxvY2siLCJ2YWxpZGF0ZVByb3BlcnRpZXMiLCJ1bmxvY2siLCJuZXdWYWx1ZXNEaWN0aW9uYXJ5IiwiT2JqZWN0IiwiYXNzaWduIiwidmFsdWVzIiwiZ2V0TW9kZWwiLCJnZXRQcm9wZXJ0eSIsInBhcmFtVmFsdWUiLCJLZXkiLCJpc05ld1ZhbHVlIiwic2V0UHJvcGVydHkiLCJVaU1vZGVsQ29uc3RhbnRzIiwiRG9jdW1lbnRNb2RpZmllZCIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsInJlc2V0U3RhdGUiLCJ1bmxvY2tEaWFsb2ciLCJ1cGRhdGVEaWFsb2dCaW5kaW5nQ29udGV4dEZvckVycm9yIiwibGVuZ3RoIiwid2FybmluZ0NvbnRleHQiLCJpbmZvQ29udGV4dCIsImVycm9uZW91c0N0eCIsImdldE1lc3NhZ2VzIiwiZ2V0VHlwZSIsIk1lc3NhZ2VUeXBlIiwiV2FybmluZyIsIkluZm9ybWF0aW9uIiwiRXJyb3IiLCJjb250ZXh0VG9Vc2UiLCJzZXRCaW5kaW5nQ29udGV4dCIsImlzTG9ja2VkIiwiRkVMaWJyYXJ5IiwiQ29uc3RhbnRzIiwiQ2FuY2VsQWN0aW9uRGlhbG9nIiwiY2xvc2VEaWFsb2ciLCJldmVudHMiLCJvblBhcmFtZXRlckRpYWxvZ0Nsb3NlZCIsImkiLCJjbG9zZSIsIm9wZW5EaWFsb2ciLCJDb21tb25VdGlscyIsInNldFVzZXJEZWZhdWx0cyIsInNldE1vZGVscyIsImFkZERlcGVuZGVudCIsInNldE9wZXJhdGlvbkRlZmF1bHRWYWx1ZXMiLCJvcGVuIiwic2V0TW9kZWwiLCJiaW5kRWxlbWVudCIsIl9ldmVudCIsIndhaXRGb3JQYXJhbWV0ZXJzVmFsdWVzIiwiaXNPcGVuIiwiZ2V0UGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwiYmluZGluZ1BhcmFtZXRlciIsIm9wZXJhdGlvbkJpbmRpbmciLCJwYXJhbWV0ZXJNb2RlbERhdGEiLCJwYXJhbU5hbWUiLCJkZWZhdWx0VmFsdWUiLCJQYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsInBhdGhGb3JDb250ZXh0IiwicmVwbGFjZSIsInJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eSIsInJlcXVlc3RQcm9wZXJ0eSIsIm5vUG9zc2libGVWYWx1ZSIsImxhdGVQcm9wZXJ0eUVycm9yIiwiZ2V0TWFuaWZlc3RGdW5jdGlvblZhbHVlcyIsImJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJGUE1IZWxwZXIiLCJsb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZCIsImdldFByZURlZmluZWRWYWx1ZXMiLCJib3VuZEZ1bmN0aW9uTmFtZSIsIkRlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsInJlcXVlc3RDb250ZXh0T2JqZWN0IiwiZnVuY3Rpb25QYXJhbXMiLCJib3VuZEZ1bmN0aW9uIiwiT3BlcmF0aW9uIiwiZ2V0T3BlcmF0aW9uRnJvbU5hbWUiLCJPRGF0YU9wZXJhdGlvbiIsImVuaGFuY2Ukc2VsZWN0IiwiZ3JvdXBJZCIsImV4ZWN1dGUiLCJpc0Z1bGZpbGxlZCIsImJvdW5kQ29udGV4dCIsInJlcXVlc3RPYmplY3QiLCJjb250ZXh0VmFsdWVzIiwicHJvbWlzZXMiLCJkZWZhdWx0VmFsdWVzIiwiZnVuY3Rpb25WYWx1ZXMiLCJtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzIiwiZmlyc3RWaXNpYmxlUGFyYW1ldGVyIiwiZ2V0VmlzaWJsZSIsImZpcnN0RmllbGQiLCJmb2N1c0luZm8iLCJnZXRGb2N1c0luZm8iLCJ0YXJnZXRJbmZvIiwic2lsZW50IiwiZm9jdXMiLCJvblBhcmFtZXRlckRpYWxvZ09wZW5lZCIsImlzTXVsdGlWYWx1ZSIsInNldFBhcmFtZXRlciIsInBhcmFtZXRlck5hbWUiLCJwYXJhbWV0ZXJQcm92aWRlZFZhbHVlIiwiaGFzT3duUHJvcGVydHkiLCJzZXRPZkZ1bmN0aW9uVmFsdWVzIiwiU2V0IiwiaW5kZXgiLCJzaXplIiwibmV4dCIsInJlZnJlc2giLCJNZXNzYWdlQm94IiwiYWN0aW9ucyIsIkFjdGlvbiIsIk9LIiwiZW1waGFzaXplZEFjdGlvbiIsIm9uQ2xvc2UiLCJleHRlbnNpb25BUEkiLCJnZXRDb250cm9sbGVyIiwiZ2V0RXh0ZW5zaW9uQVBJIiwiY29udGVudFdpZHRoIiwiZnVuY3Rpb25Db250ZXh0IiwiZ2V0QmluZGluZyIsImlzQSIsImRlc3Ryb3kiLCJvSW50ZXJmYWNlIiwidGV4dENvbnRleHQiLCJjb250ZXh0UGF0aCIsImxvY2FsRGF0YVByb3BlcnR5IiwiJE5hbWUiLCJ2YWx1ZUxpc3RCeVF1YWxpZmllciIsInJlcXVlc3RWYWx1ZUxpc3RJbmZvIiwidmFsdWVMaXN0UGFyYW1ldGVyIiwiUGFyYW1ldGVycyIsIkxvY2FsRGF0YVByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIlZhbHVlTGlzdFByb3BlcnR5IiwidGV4dFByb3BlcnR5IiwiQ29sbGVjdGlvblBhdGgiLCJwcm9wQW5ub3RhdGlvbnMiLCJ0ZXh0UHJvcCIsInRleHRQYXRoIiwiJFBhdGgiLCJBbm5vdGF0aW9uSGVscGVyIiwiZm9ybWF0Iiwib01vZGVsIiwic0NvbnRleHRQYXRoIiwib0FjdGlvblBhcmFtZXRlckFubm90YXRpb25zIiwicHJvcGVydHlPYmplY3RQYXRoIiwiZ2V0VmFsdWVCaW5kaW5nIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPcGVyYXRpb25QYXJhbWV0ZXJEaWFsb2cudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tcGxleFR5cGUsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJpbWl0aXZlVHlwZSwgUHJvcGVydHksIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEFjdGlvbiwgdHlwZSBBY3Rpb25QYXJhbWV0ZXIgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgUHJvcGVydHlBbm5vdGF0aW9uc19Db3JlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db3JlX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhRmllbGQsIEZpZWxkR3JvdXBUeXBlLCBSZWZlcmVuY2VGYWNldCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdEVETV9UWVBFX01BUFBJTkcsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRub3QsXG5cdHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25QYXJhbWV0ZXJJbmZvIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBVaU1vZGVsQ29uc3RhbnRzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9lZGl0Rmxvd0NvbnN0YW50c1wiO1xuaW1wb3J0IE9EYXRhT3BlcmF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL09EYXRhT3BlcmF0aW9uXCI7XG5pbXBvcnQgT3BlcmF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL09wZXJhdGlvblwiO1xuaW1wb3J0IGFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvb3BlcmF0aW9ucy9hY3Rpb25IZWxwZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcywgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBoYXNGaWVsZEdyb3VwVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgaXNGdWxmaWxsZWQsIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgZ2V0VGFyZ2V0TmF2aWdhdGlvblBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbiwgaXNEaXNhYmxlZEV4cHJlc3Npb24sIGlzUmVhZE9ubHlFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNWYWx1ZUhlbHAsIGlzTXVsdGlMaW5lVGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyByZXF1aXJlc1ZhbGlkYXRpb24sIHVzZUNhc2VTZW5zaXRpdmVGaWx0ZXJSZXF1ZXN0cyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUhlbHBUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0RXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIHsgRGlhbG9nJEJlZm9yZU9wZW5FdmVudCB9IGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgVGl0bGUgZnJvbSBcInNhcC91aS9jb3JlL1RpdGxlXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IFNpbXBsZUZvcm0gZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9TaW1wbGVGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCBGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgVmFsdWVIZWxwIGZyb20gXCJzYXAvdWkvbWRjL1ZhbHVlSGVscFwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IE11bHRpVmFsdWVGaWVsZEl0ZW0gZnJvbSBcInNhcC91aS9tZGMvZmllbGQvTXVsdGlWYWx1ZUZpZWxkSXRlbVwiO1xuaW1wb3J0IFZIRGlhbG9nIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9EaWFsb2dcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9Qb3BvdmVyXCI7XG5pbXBvcnQgTVRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRGaWxlU2l6ZUV4Y2VlZEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVXBsb2FkQ29tcGxldGVFdmVudFxufSBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgRmlsZVVwbG9hZGVyIGZyb20gXCJzYXAvdWkvdW5pZmllZC9GaWxlVXBsb2FkZXJcIjtcbmltcG9ydCBGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVySHR0cFJlcXVlc3RNZXRob2RcIjtcbmltcG9ydCB7IGRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkLCBzaG93RmlsZVNpemVFeGNlZWREaWFsb2csIHNob3dUeXBlTWlzbWF0Y2hEaWFsb2cgfSBmcm9tIFwiLi4vaW50ZXJuYWwvaGVscGVycy9VcGxvYWRcIjtcblxuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0VmFsdWVCaW5kaW5nIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG50eXBlIFBhcmFtZXRlckRlZmF1bHRWYWx1ZSA9IHsgcGFyYW1OYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyBsYXRlUHJvcGVydHlFcnJvcj86IGJvb2xlYW47IG5vUG9zc2libGVWYWx1ZT86IGJvb2xlYW4gfTtcblxudHlwZSBFbGVtZW50R3JvdXAgPSB7IGZhY2V0VGl0bGU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4gfCB1bmRlZmluZWQ7IGRhdGE6IEFjdGlvblBhcmFtZXRlcltdIH07XG50eXBlIEVsZW1lbnRHcm91cENvbnZlcnRlZCA9IHsgZmFjZXRUaXRsZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8c3RyaW5nPiB8IHVuZGVmaW5lZDsgZGF0YTogRGlhbG9nQ29udGVudFR5cGVzW10gfTtcblxudHlwZSBGb3JtRWxlbWVudFR5cGUgPSBbTGFiZWwsIEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkXTtcblxudHlwZSBEaWFsb2dDb250ZW50VHlwZXMgPSB7XG5cdGZvcm1FbGVtZW50czogRm9ybUVsZW1lbnRUeXBlO1xuXHRwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcjtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY3Rpb25QYXJhbWV0ZXJEaWFsb2cge1xuXHRwcml2YXRlIHBhcmFtZXRlcnNWYWx1ZXNQcm9taXNlOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+PjtcblxuXHRwcml2YXRlIHBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlITogKHJlc29sdmVWYWx1ZTogUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT4pID0+IHZvaWQ7XG5cblx0cHJpdmF0ZSBwYXJhbWV0ZXJzVmFsdWVzUmVqZWN0ITogKGVycm9yOiB1bmtub3duKSA9PiB2b2lkO1xuXG5cdC8vIHRoZSBkaWFsb2cgaXMgY29uc2lkZXJlZCBhcyBjbG9zZWQgYWZ0ZXIgdGhlIGFmdGVyQ2xvc2UgZXZlbnQgaGFzIGJlZW4gdHJpZ2dlcmVkXG5cdC8vIHRoaXMgaXMgYXN5bmNocm9ub3VzLCBzbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGRpYWxvZyBzdGF0ZSBzaW5jZSB0aGUgbWVzc2FnZSBoYW5kbGluZyBpcyBzeW5jaHJvbm91c1xuXHQvLyBhbmQgd2UgbmVlZCB0byBrbm93IGlmIHRoZSBkaWFsb2cgaXMgb3BlbiBvciBjbG9zZWRcblx0cHJpdmF0ZSBpc0RpYWxvZ09wZW4gPSBmYWxzZTtcblxuXHRwcml2YXRlIGRpYWxvZzogRGlhbG9nIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uTmFtZTogc3RyaW5nO1xuXG5cdHByaXZhdGUgYnV0dG9uTG9jayA9IGZhbHNlO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFjdGlvblBhcmFtZXRlckluZm9zOiAoQWN0aW9uUGFyYW1ldGVySW5mbyAmIHsgcGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIgfSlbXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyTW9kZWw6IEpTT05Nb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdCRkaXNwbGF5TW9kZToge31cblx0fSk7XG5cblx0cHJpdmF0ZSByZWFkb25seSByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uOiBBY3Rpb24sXG5cdFx0cHJpdmF0ZSByZWFkb25seSBwYXJhbWV0ZXJzOiB7XG5cdFx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcblx0XHRcdGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0cGFyYW1ldGVyc1ZhbHVlczogUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT47XG5cdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdFx0XHRpc0NyZWF0ZUFjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdG1vZGVsOiBPRGF0YU1vZGVsO1xuXHRcdFx0dmlldz86IEZFVmlldztcblx0XHRcdGV2ZW50cz86IHtcblx0XHRcdFx0b25QYXJhbWV0ZXJEaWFsb2dPcGVuZWQ/OiAoKSA9PiB2b2lkO1xuXHRcdFx0XHRvblBhcmFtZXRlckRpYWxvZ0Nsb3NlZD86ICgpID0+IHZvaWQ7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0cHJpdmF0ZSByZWFkb25seSBwYXJhbWV0ZXJWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gfCB1bmRlZmluZWQsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBlbnRpdHlTZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXJcblx0KSB7XG5cdFx0dGhpcy5hY3Rpb25OYW1lID0gYWN0aW9uSGVscGVyLmdldEFjdGlvbk5hbWUodGhpcy5hY3Rpb24pO1xuXHRcdHRoaXMubWV0YU1vZGVsID0gdGhpcy5wYXJhbWV0ZXJzLm1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdHRoaXMucmVzb3VyY2VNb2RlbCA9IHRoaXMucGFyYW1ldGVycy52aWV3ID8gZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMudmlldykgOiBnZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpO1xuXHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1JlamVjdCA9IHJlamVjdDtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGJpbmRpbmcgZXhwcmVzc2lvbiBvZiB0aGUgZWRpdCBtb2RlIHByb3BlcnR5IGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24uXG5cdCAqL1xuXHRwcml2YXRlIGdldFBhcmFtZXRlckVkaXRNb2RlKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPEZpZWxkRWRpdE1vZGU+IHtcblx0XHRjb25zdCBhbm5vdGF0aW9ucyA9IHBhcmFtZXRlci5hbm5vdGF0aW9ucyxcblx0XHRcdGZpZWxkQ29udHJvbCA9IGFubm90YXRpb25zLkNvbW1vbj8uRmllbGRDb250cm9sLFxuXHRcdFx0aW1tdXRhYmxlID0gKGFubm90YXRpb25zLkNvcmUgYXMgdW5rbm93biBhcyBQcm9wZXJ0eUFubm90YXRpb25zX0NvcmUpPy5JbW11dGFibGU/LnZhbHVlT2YoKSxcblx0XHRcdGNvbXB1dGVkID0gKGFubm90YXRpb25zLkNvcmUgYXMgdW5rbm93biBhcyBQcm9wZXJ0eUFubm90YXRpb25zX0NvcmUpPy5Db21wdXRlZD8udmFsdWVPZigpO1xuXG5cdFx0aWYgKGltbXV0YWJsZSB8fCBjb21wdXRlZCkge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KEZpZWxkRWRpdE1vZGUuUmVhZE9ubHkpO1xuXHRcdH0gZWxzZSBpZiAoZmllbGRDb250cm9sKSB7XG5cdFx0XHRyZXR1cm4gaWZFbHNlKFxuXHRcdFx0XHRpc1JlYWRPbmx5RXhwcmVzc2lvbihwYXJhbWV0ZXIpLFxuXHRcdFx0XHRGaWVsZEVkaXRNb2RlLlJlYWRPbmx5LFxuXHRcdFx0XHRpZkVsc2UoaXNEaXNhYmxlZEV4cHJlc3Npb24ocGFyYW1ldGVyKSwgRmllbGRFZGl0TW9kZS5EaXNhYmxlZCwgRmllbGRFZGl0TW9kZS5FZGl0YWJsZSlcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBjb25zdGFudChGaWVsZEVkaXRNb2RlLkVkaXRhYmxlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBmb3JtIGVsZW1lbnQgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybSBlbGVtZW50IGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZUZvcm1FbGVtZW50KHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogUHJvbWlzZTxGb3JtRWxlbWVudFR5cGU+IHtcblx0XHRjb25zdCBhY3Rpb25NZXRhUGF0aCA9IHRoaXMuYWN0aW9uLmlzQm91bmRcblx0XHRcdD8gYCR7dGhpcy5tZXRhTW9kZWwuZ2V0TWV0YVBhdGgodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldFBhdGgoKSl9LyR7Y29udmVydFR5cGVzKHRoaXMubWV0YU1vZGVsKS5uYW1lc3BhY2V9LiR7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24ubmFtZVxuXHRcdFx0ICB9YFxuXHRcdFx0OiBgLyR7dGhpcy5hY3Rpb24ubmFtZX1gO1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7YWN0aW9uTWV0YVBhdGh9LyR7cGFyYW1ldGVyLm5hbWV9YCkhO1xuXHRcdGxldCBmaWVsZDtcblx0XHRsZXQgbGFiZWwgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbFxuXHRcdFx0PyB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uLkxhYmVsLnRvU3RyaW5nKCkpXG5cdFx0XHQ6IHBhcmFtZXRlci5uYW1lO1xuXHRcdGxldCBzdHJlYW1QYXJhbWV0ZXI7XG5cdFx0aWYgKHBhcmFtZXRlci5pc0NvbGxlY3Rpb24pIHtcblx0XHRcdGZpZWxkID0gYXdhaXQgdGhpcy5jcmVhdGVNdWx0aUZpZWxkKHBhcmFtZXRlciwgbWV0YUNvbnRleHQpO1xuXHRcdH0gZWxzZSBpZiAoIXBhcmFtZXRlci50eXBlLnN0YXJ0c1dpdGgoXCJFZG0uXCIpICYmIHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKSkge1xuXHRcdFx0c3RyZWFtUGFyYW1ldGVyID0gdGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpO1xuXHRcdFx0Ly8gY2FsY3VsYXRlIGxhYmVsIGZyb20gdGhlIHN0cmVhbSBwcm9wZXJ0eSB3aXRoaW4gdGhlIENvbXBsZXhUeXBlXG5cdFx0XHRsYWJlbCA9IHN0cmVhbVBhcmFtZXRlcj8uYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbFxuXHRcdFx0XHQ/IHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KHN0cmVhbVBhcmFtZXRlci5hbm5vdGF0aW9ucy5Db21tb24uTGFiZWwudG9TdHJpbmcoKSlcblx0XHRcdFx0OiAoc3RyZWFtUGFyYW1ldGVyPy5uYW1lIGFzIHN0cmluZyk7XG5cdFx0XHRmaWVsZCA9IHRoaXMuY3JlYXRlRmlsZVVwbG9hZGVyKHBhcmFtZXRlcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZpZWxkID0gYXdhaXQgdGhpcy5jcmVhdGVGaWVsZChwYXJhbWV0ZXIsIG1ldGFDb250ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdDw+XG5cdFx0XHRcdDxMYWJlbCBpZD17Z2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIubmFtZSwgc3RyZWFtUGFyYW1ldGVyPy5uYW1lLCBcIkxhYmVsXCJdKX0gdGV4dD17bGFiZWx9IC8+XG5cdFx0XHRcdHtmaWVsZH1cblx0XHRcdDwvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgbXVsdGkgZmllbGQgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIG11bHRpIHZhbHVlIGZpZWxkIGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZU11bHRpRmllbGQocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPE11bHRpVmFsdWVGaWVsZD4ge1xuXHRcdGxldCBkaXNwbGF5ID0gXCJWYWx1ZVwiO1xuXHRcdHRyeSB7XG5cdFx0XHRkaXNwbGF5ID0gYXdhaXQgRmllbGRIZWxwZXIuZ2V0QVBEaWFsb2dEaXNwbGF5Rm9ybWF0KHBhcmFtZXRlckNvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogcGFyYW1ldGVyQ29udGV4dCB9KTtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdExvZy53YXJuaW5nKGBQYXJhbWV0ZXIgZGlhbG9nIG11bHRpZmllbGQ6IGRpc3BsYXkgZm9ybWF0IGNvdWxkbid0IGJlIGNhbGN1bGF0ZWQgZm9yIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nOiAke2Vycn1gKTtcblx0XHR9XG5cdFx0Y29uc3QgcGxhY2VIb2xkZXIgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/LlBsYWNlaG9sZGVyIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFByaW1pdGl2ZVR5cGU+IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHBsYWNlSG9sZGVyRXhwcmVzc2lvbiA9IHBsYWNlSG9sZGVyID8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHBsYWNlSG9sZGVyKSkgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgcGFyYW1ldGVyVHlwZSA9IEVETV9UWVBFX01BUFBJTkc/LltwYXJhbWV0ZXIudHlwZV0/LnR5cGU7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNdWx0aVZhbHVlRmllbGRcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWVdKX1cblx0XHRcdFx0cGxhY2Vob2xkZXI9e3BsYWNlSG9sZGVyRXhwcmVzc2lvbn1cblx0XHRcdFx0aXRlbXM9e3sgcGF0aDogYG12ZnZpZXc+LyR7cGFyYW1ldGVyLm5hbWV9YCB9fVxuXHRcdFx0XHRkZWxlZ2F0ZT17eyBuYW1lOiBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL011bHRpVmFsdWVQYXJhbWV0ZXJEZWxlZ2F0ZVwiIH19XG5cdFx0XHRcdGRpc3BsYXk9e2Rpc3BsYXl9XG5cdFx0XHRcdGVkaXRNb2RlPXt0aGlzLmdldFBhcmFtZXRlckVkaXRNb2RlKHBhcmFtZXRlcil9XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdG11bHRpcGxlTGluZXM9e3BhcmFtZXRlci5hbm5vdGF0aW9ucy5VST8uTXVsdGlMaW5lVGV4dD8udmFsdWVPZigpID09PSB0cnVlfVxuXHRcdFx0XHRyZXF1aXJlZD17Y29tcGlsZUV4cHJlc3Npb24oaXNBY3Rpb25QYXJhbWV0ZXJSZXF1aXJlZEV4cHJlc3Npb24ocGFyYW1ldGVyLCB0aGlzLmFjdGlvbiwgY29udmVydFR5cGVzKHRoaXMubWV0YU1vZGVsKSkpfVxuXHRcdFx0XHR2YWx1ZUhlbHA9e2hhc1ZhbHVlSGVscChwYXJhbWV0ZXIpID8gZ2VuZXJhdGUoW3RoaXMuYWN0aW9uTmFtZSwgcGFyYW1ldGVyLm5hbWUsIFwiRmllbGRWYWx1ZUhlbHBcIl0pIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRjaGFuZ2U9e2FzeW5jIChlKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmhhbmRsZUZpZWxkQ2hhbmdlKGUsIHBhcmFtZXRlcil9XG5cdFx0XHRcdHZpc2libGU9e2NvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocGFyYW1ldGVyLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKX1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tnZW5lcmF0ZShbXCJBUERfXCIsIHBhcmFtZXRlci5uYW1lLCBcIkxhYmVsXCJdKV19XG5cdFx0XHRcdGRlcGVuZGVudHM9e3RoaXMuY3JlYXRlUGFyYW1ldGVyRGlhbG9nVmFsdWVIZWxwKHBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dCl9XG5cdFx0XHQ+XG5cdFx0XHRcdDxNdWx0aVZhbHVlRmllbGRJdGVtIGtleT17YHtwYXRoOiAnbXZmdmlldz5LZXknLCB0eXBlOicke3BhcmFtZXRlclR5cGV9J31gfSBkZXNjcmlwdGlvbj1cInttdmZ2aWV3PkRlc2N9XCIgLz5cblx0XHRcdDwvTXVsdGlWYWx1ZUZpZWxkPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgRmlsZVVwbG9hZGVyIGNvbnRyb2wgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIEZpbGVVcGxvYWRlciBjb250cm9sLlxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVGaWxlVXBsb2FkZXIocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBGaWxlVXBsb2FkZXIge1xuXHRcdGxldCBmaWxlQWNjZXB0YWJsZU1lZGlhVHlwZXM7XG5cdFx0aWYgKHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKT8uYW5ub3RhdGlvbnMuQ29yZT8uQWNjZXB0YWJsZU1lZGlhVHlwZXMpIHtcblx0XHRcdGNvbnN0IGFjY2VwdGVkVHlwZXMgPSBBcnJheS5mcm9tKFxuXHRcdFx0XHR0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/LmFubm90YXRpb25zLkNvcmU/LkFjY2VwdGFibGVNZWRpYVR5cGVzIGFzIHVua25vd24gYXMgc3RyaW5nW11cblx0XHRcdCkubWFwKCh0eXBlKSA9PiBgJyR7dHlwZX0nYCk7XG5cdFx0XHRmaWxlQWNjZXB0YWJsZU1lZGlhVHlwZXMgPSBgez1vZGF0YS5jb2xsZWN0aW9uKFske2FjY2VwdGVkVHlwZXMuam9pbihcIixcIil9XSl9YDtcblx0XHR9XG5cdFx0Y29uc3QgaGFuZGxlVHlwZU1pc3NtYXRjaCA9IGZ1bmN0aW9uIChldmVudDogRmlsZVVwbG9hZGVyJFR5cGVNaXNzbWF0Y2hFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsZVVwbG9hZGVyID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRjb25zdCBnaXZlblR5cGUgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJtaW1lVHlwZVwiKTtcblx0XHRcdGNvbnN0IGFjY2VwdGVkVHlwZXMgPSBmaWxlVXBsb2FkZXIuZ2V0TWltZVR5cGUoKTtcblx0XHRcdGlmIChnaXZlblR5cGUpIHtcblx0XHRcdFx0c2hvd1R5cGVNaXNtYXRjaERpYWxvZyhmaWxlVXBsb2FkZXIsIGdpdmVuVHlwZSwgYWNjZXB0ZWRUeXBlcyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHQvLyB2ZXJpZnkgY2hlY2sgZm9yIHN0cmVhbVxuXHRcdGNvbnN0IGZpbGVNYXhpbXVtU2l6ZSA9IEZpZWxkSGVscGVyLmNhbGN1bGF0ZU1CZnJvbUJ5dGUodGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5tYXhMZW5ndGgpO1xuXHRcdGNvbnN0IGhhbmRsZUZpbGVTaXplRXhjZWVkID0gZnVuY3Rpb24gKGV2ZW50OiBGaWxlVXBsb2FkZXIkRmlsZVNpemVFeGNlZWRFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsZVVwbG9hZGVyID0gZXZlbnQ/LmdldFNvdXJjZSgpO1xuXHRcdFx0c2hvd0ZpbGVTaXplRXhjZWVkRGlhbG9nKGZpbGVVcGxvYWRlciwgZmlsZVVwbG9hZGVyLmdldE1heGltdW1GaWxlU2l6ZSgpLnRvRml4ZWQoMykpO1xuXHRcdH07XG5cdFx0Y29uc3Qgb25VcGxvYWRDb21wbGV0ZSA9IGZ1bmN0aW9uIChldmVudDogRmlsZVVwbG9hZGVyJFVwbG9hZENvbXBsZXRlRXZlbnQpOiB2b2lkIHtcblx0XHRcdGlmIChldmVudC5nZXRQYXJhbWV0ZXIoXCJzdGF0dXNcIikgPT09IDAgfHwgKGV2ZW50LmdldFBhcmFtZXRlcihcInN0YXR1c1wiKSBhcyBudW1iZXIpID49IDQwMCkge1xuXHRcdFx0XHRkaXNwbGF5TWVzc2FnZUZvckZhaWxlZFVwbG9hZChcblx0XHRcdFx0XHRldmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdFx0XHQoZXZlbnQuZ2V0UGFyYW1ldGVyKFwicmVzcG9uc2VSYXdcIikgYXMgc3RyaW5nKSB8fCAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwicmVzcG9uc2VcIikgYXMgc3RyaW5nKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGaWxlVXBsb2FkZXJcblx0XHRcdFx0bmFtZT1cIkZFVjRGaWxlVXBsb2FkXCJcblx0XHRcdFx0YnV0dG9uT25seT1cImZhbHNlXCJcblx0XHRcdFx0aWNvbk9ubHk9XCJ0cnVlXCJcblx0XHRcdFx0bXVsdGlwbGU9XCJmYWxzZVwiXG5cdFx0XHRcdHRvb2x0aXA9XCJ7c2FwLmZlLmkxOG4+TV9GSUVMRF9GSUxFVVBMT0FERVJfVVBMT0FEX0JVVFRPTl9UT09MVElQfVwiXG5cdFx0XHRcdGljb249XCJzYXAtaWNvbjovL3VwbG9hZFwiXG5cdFx0XHRcdHN0eWxlPVwiVHJhbnNwYXJlbnRcIlxuXHRcdFx0XHRzZW5kWEhSPVwidHJ1ZVwiXG5cdFx0XHRcdHVzZU11bHRpcGFydD1cImZhbHNlXCJcblx0XHRcdFx0c2FtZUZpbGVuYW1lQWxsb3dlZD1cInRydWVcIlxuXHRcdFx0XHR1cGxvYWRPbkNoYW5nZT1cImZhbHNlXCJcblx0XHRcdFx0bWltZVR5cGU9e2ZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlc31cblx0XHRcdFx0dHlwZU1pc3NtYXRjaD17aGFuZGxlVHlwZU1pc3NtYXRjaH1cblx0XHRcdFx0bWF4aW11bUZpbGVTaXplPXtmaWxlTWF4aW11bVNpemV9XG5cdFx0XHRcdGZpbGVTaXplRXhjZWVkPXtoYW5kbGVGaWxlU2l6ZUV4Y2VlZH1cblx0XHRcdFx0aHR0cFJlcXVlc3RNZXRob2Q9e0ZpbGVVcGxvYWRlckh0dHBSZXF1ZXN0TWV0aG9kLlB1dH1cblx0XHRcdFx0dXBsb2FkQ29tcGxldGU9e29uVXBsb2FkQ29tcGxldGV9XG5cdFx0XHRcdGNoYW5nZT17YXN5bmMgKGUpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuaGFuZGxlRmlsZVVwbG9hZGVyQ2hhbmdlKGUsIHBhcmFtZXRlcil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgZmllbGQgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGZpZWxkIGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZUZpZWxkKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyLCBwYXJhbWV0ZXJDb250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTxGaWVsZD4ge1xuXHRcdGxldCBkaXNwbGF5ID0gXCJWYWx1ZVwiO1xuXHRcdGxldCBhZGRpdGlvbmFsVmFsdWU7XG5cdFx0bGV0IGJpbmRpbmdWYWx1ZTtcblx0XHR0cnkge1xuXHRcdFx0ZGlzcGxheSA9IGF3YWl0IEZpZWxkSGVscGVyLmdldEFQRGlhbG9nRGlzcGxheUZvcm1hdChwYXJhbWV0ZXJDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IHBhcmFtZXRlckNvbnRleHQgfSk7XG5cdFx0XHRiaW5kaW5nVmFsdWUgPSBhd2FpdCB0aGlzLmdldEFQRGlhbG9nQmluZGluZ1ZhbHVlKHBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dCwgeyBjb250ZXh0OiBwYXJhbWV0ZXJDb250ZXh0IH0pO1xuXHRcdFx0aWYgKGhhc1ZhbHVlSGVscChwYXJhbWV0ZXIpKSB7XG5cdFx0XHRcdGFkZGl0aW9uYWxWYWx1ZSA9IGF3YWl0IHRoaXMuZ2V0QWRkaXRpb25hbFZhbHVlKHsgY29udGV4dDogcGFyYW1ldGVyQ29udGV4dCB9KTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdExvZy53YXJuaW5nKGBQYXJhbWV0ZXIgZGlhbG9nIGZpZWxkOiBkaXNwbGF5IGZvcm1hdCBjb3VsZG4ndCBiZSBjYWxjdWxhdGVkIGZvciBwYXJhbWV0ZXIgJyR7cGFyYW1ldGVyLm5hbWV9JzogJHtlcnJ9YCk7XG5cdFx0fVxuXHRcdGNvbnN0IHBsYWNlSG9sZGVyID0gcGFyYW1ldGVyLmFubm90YXRpb25zLlVJPy5QbGFjZWhvbGRlciBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxQcmltaXRpdmVUeXBlPiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBwbGFjZUhvbGRlckV4cHJlc3Npb24gPSBwbGFjZUhvbGRlciA/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwbGFjZUhvbGRlcikpIDogdW5kZWZpbmVkO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RmllbGRcblx0XHRcdFx0ZGVsZWdhdGU9e3sgbmFtZTogXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkQmFzZURlbGVnYXRlXCIsIHBheWxvYWQ6IHsgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdDogdHJ1ZSB9IH19XG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbXCJBUERfXCIsIHBhcmFtZXRlci5uYW1lXSl9XG5cdFx0XHRcdHZhbHVlPXtiaW5kaW5nVmFsdWV9XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXtwbGFjZUhvbGRlckV4cHJlc3Npb259XG5cdFx0XHRcdGRpc3BsYXk9e2Rpc3BsYXl9XG5cdFx0XHRcdGVkaXRNb2RlPXt0aGlzLmdldFBhcmFtZXRlckVkaXRNb2RlKHBhcmFtZXRlcil9XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdG11bHRpcGxlTGluZXM9e2lzTXVsdGlMaW5lVGV4dChwYXJhbWV0ZXIpfVxuXHRcdFx0XHRyZXF1aXJlZD17Y29tcGlsZUV4cHJlc3Npb24oaXNBY3Rpb25QYXJhbWV0ZXJSZXF1aXJlZEV4cHJlc3Npb24ocGFyYW1ldGVyLCB0aGlzLmFjdGlvbiwgY29udmVydFR5cGVzKHRoaXMubWV0YU1vZGVsKSkpfVxuXHRcdFx0XHRjaGFuZ2U9e2FzeW5jIChlKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmhhbmRsZUZpZWxkQ2hhbmdlKGUsIHBhcmFtZXRlcil9XG5cdFx0XHRcdHZhbHVlSGVscD17aGFzVmFsdWVIZWxwKHBhcmFtZXRlcikgPyBnZW5lcmF0ZShbdGhpcy5hY3Rpb25OYW1lLCBwYXJhbWV0ZXIubmFtZSwgXCJGaWVsZFZhbHVlSGVscFwiXSkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGRlcGVuZGVudHM9e3RoaXMuY3JlYXRlUGFyYW1ldGVyRGlhbG9nVmFsdWVIZWxwKHBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dCl9XG5cdFx0XHRcdHZpc2libGU9e2NvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdHBhcmFtZXRlci5uYW1lID09PSBcIlJlc3VsdElzQWN0aXZlRW50aXR5XCIsXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocGFyYW1ldGVyLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17W2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWUsIFwiTGFiZWxcIl0pXX1cblx0XHRcdFx0YWRkaXRpb25hbFZhbHVlPXthZGRpdGlvbmFsVmFsdWV9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgdmFsdWVIZWxwICBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgQSB2YWx1ZUhlbHAgaWYgdGhlIHBhcmFtZXRlciBoYXMgYSBWSCwgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVQYXJhbWV0ZXJEaWFsb2dWYWx1ZUhlbHAocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQ6IENvbnRleHQpOiBWYWx1ZUhlbHAgfCB1bmRlZmluZWQge1xuXHRcdGlmICghaGFzVmFsdWVIZWxwKHBhcmFtZXRlcikpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8VmFsdWVIZWxwXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGhpcy5hY3Rpb25OYW1lLCBwYXJhbWV0ZXIubmFtZSwgXCJGaWVsZFZhbHVlSGVscFwiXSl9XG5cdFx0XHRcdGRlbGVnYXRlPXt7XG5cdFx0XHRcdFx0bmFtZTogXCJzYXAvZmUvbWFjcm9zL3ZhbHVlaGVscC9WYWx1ZUhlbHBEZWxlZ2F0ZVwiLFxuXHRcdFx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aDogdGhpcy5hY3Rpb24uaXNCb3VuZFxuXHRcdFx0XHRcdFx0XHQ/IGAke2dldFRhcmdldE5hdmlnYXRpb25QYXRoKGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxBY3Rpb25QYXJhbWV0ZXI+KHBhcmFtZXRlckNvbnRleHQpKX0vJHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWN0aW9uTmFtZVxuXHRcdFx0XHRcdFx0XHQgIH0vJHtwYXJhbWV0ZXIubmFtZX1gXG5cdFx0XHRcdFx0XHRcdDogYC8ke3RoaXMuYWN0aW9uLm5hbWUuc3Vic3RyaW5nKHRoaXMuYWN0aW9uLm5hbWUubGFzdEluZGV4T2YoXCIuXCIpICsgMSl9LyR7cGFyYW1ldGVyLm5hbWV9YCxcblx0XHRcdFx0XHRcdHF1YWxpZmllcnM6IHt9LFxuXHRcdFx0XHRcdFx0dmFsdWVIZWxwUXVhbGlmaWVyOiBcIlwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9fVxuXHRcdFx0XHR2YWxpZGF0ZUlucHV0PXtyZXF1aXJlc1ZhbGlkYXRpb24ocGFyYW1ldGVyKX1cblx0XHRcdFx0dHlwZWFoZWFkPXtcblx0XHRcdFx0XHQ8UG9wb3Zlcj5cblx0XHRcdFx0XHRcdDxNVGFibGVcblx0XHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0aGlzLmFjdGlvbk5hbWUsIHBhcmFtZXRlci5uYW1lLCBcIlBvcG92ZXJcIiwgXCJxdWFsaWZpZXJcIl0pfVxuXHRcdFx0XHRcdFx0XHRjYXNlU2Vuc2l0aXZlPXtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFjdGlvbi5pc0JvdW5kXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IHVzZUNhc2VTZW5zaXRpdmVGaWx0ZXJSZXF1ZXN0cyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8QWN0aW9uUGFyYW1ldGVyPihwYXJhbWV0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoY29udmVydFR5cGVzKHRoaXMubWV0YU1vZGVsKS5lbnRpdHlDb250YWluZXIuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/LkZpbHRlckZ1bmN0aW9ucyBhcyB1bmtub3duIGFzIHN0cmluZ1tdKSA/PyBbXVxuXHRcdFx0XHRcdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IE1vZGVsSGVscGVyLmlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSh0aGlzLm1ldGFNb2RlbClcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR1c2VBc1ZhbHVlSGVscD17ISFwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uPy5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXN9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvUG9wb3Zlcj5cblx0XHRcdFx0fVxuXHRcdFx0XHRkaWFsb2c9e3RoaXMuY3JlYXRlRmllbGRWSERpYWxvZyhwYXJhbWV0ZXIpfVxuXHRcdFx0PjwvVmFsdWVIZWxwPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgVmFsdWVIZWxwIGRpYWxvZyBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBBIGRpYWxvZyBpZiB0aGUgcGFyYW1ldGVyIGhhcyBhIFZILCB1bmRlZmluZWQgb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZUZpZWxkVkhEaWFsb2cocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBWSERpYWxvZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHBhcmFtZXRlci5hbm5vdGF0aW9ucy5Db21tb24/LlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcz8udmFsdWVPZigpICE9PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gPFZIRGlhbG9nIC8+O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBmaWVsZCBjaGFuZ2UgZXZlbnQgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIHVpNSBldmVudFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgUHJvbWlzZS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgaGFuZGxlRmllbGRDaGFuZ2UoZXZlbnQ6IE11bHRpVmFsdWVGaWVsZCRDaGFuZ2VFdmVudCB8IEZpZWxkJENoYW5nZUV2ZW50LCBwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGZpZWxkUHJvbWlzZSA9IChldmVudCBhcyBGaWVsZCRDaGFuZ2VFdmVudCkuZ2V0UGFyYW1ldGVyKFwicHJvbWlzZVwiKTtcblx0XHRjb25zdCBmaWVsZCA9IChldmVudCBhcyBGaWVsZCRDaGFuZ2VFdmVudCkuZ2V0U291cmNlKCkgYXMgRmllbGQgfCBNdWx0aVZhbHVlRmllbGQ7XG5cdFx0Y29uc3QgcGFyYW1ldGVySW5mbyA9IHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZCgoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZCA9PT0gZmllbGQpO1xuXHRcdGlmICghcGFyYW1ldGVySW5mbykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRwYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlID0gZmllbGRQcm9taXNlO1xuXHRcdC8vIGZpZWxkIHZhbHVlIGlzIGJlaW5nIGNoYW5nZWQsIHRodXMgZXhpc3RpbmcgbWVzc2FnZXMgcmVsYXRlZCB0byB0aGF0IGZpZWxkIGFyZSBub3QgdmFsaWQgYW55bW9yZVxuXHRcdHRoaXMucmVtb3ZlTWVzc2FnZXNGb3JQYXJhbWV0ZXIocGFyYW1ldGVyKTtcblx0XHR0cnkge1xuXHRcdFx0cGFyYW1ldGVySW5mby52YWx1ZSA9IGF3YWl0IGZpZWxkUHJvbWlzZTtcblx0XHRcdHRoaXMucGFyYW1ldGVycy5wYXJhbWV0ZXJzVmFsdWVzW3BhcmFtZXRlckluZm8ucGFyYW1ldGVyLm5hbWVdID0gcGFyYW1ldGVySW5mby52YWx1ZTtcblx0XHRcdHBhcmFtZXRlckluZm8uaGFzRXJyb3IgPSBmYWxzZTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0ZGVsZXRlIHBhcmFtZXRlckluZm8udmFsdWU7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLmhhc0Vycm9yID0gdHJ1ZTtcblx0XHRcdEFjdGlvblJ1bnRpbWUuX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIoW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mbzogcGFyYW1ldGVySW5mbyxcblx0XHRcdFx0XHRtZXNzYWdlOiAoZXJyb3IgYXMgeyBtZXNzYWdlOiBzdHJpbmcgfSkubWVzc2FnZVxuXHRcdFx0XHR9XG5cdFx0XHRdKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgRmlsZVVwbG9hZGVyIGNoYW5nZSBldmVudCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgU0FQVUk1IGV2ZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIEZpbGVVcGxvYWRlciBjaGFuZ2UgZXZlbnQuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEByZXR1cm5zIFByb21pc2UuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGhhbmRsZUZpbGVVcGxvYWRlckNoYW5nZShldmVudDogRmlsZVVwbG9hZGVyJENoYW5nZUV2ZW50LCBwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGZpbGVzID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwiZmlsZXNcIik7XG5cdFx0Y29uc3QgZmlsZVVwbG9hZGVyID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Ly8gY29ycmVjdGlvbiBuZWVkZWQgZm9yIG11bHRpcGxlIGZpbGUgdXBsb2FkZXJzXG5cdFx0Y29uc3QgcGFyYW1ldGVySW5mbyA9IHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZCgoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZCA9PT0gZmlsZVVwbG9hZGVyKTtcblx0XHRpZiAoIXBhcmFtZXRlckluZm8gfHwgIWZpbGVzKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMucmVtb3ZlTWVzc2FnZXNGb3JQYXJhbWV0ZXIocGFyYW1ldGVyKTtcblx0XHRwYXJhbWV0ZXJJbmZvLnZhbHVlID0ge307XG5cdFx0aWYgKHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKSkge1xuXHRcdFx0cGFyYW1ldGVySW5mby52YWx1ZVt0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/Lm5hbWUgYXMga2V5b2YgdHlwZW9mIHBhcmFtZXRlckluZm8udmFsdWVdID1cblx0XHRcdFx0YXdhaXQgdGhpcy5nZXRCYXNlNjRGaWxlKGZpbGVzKTtcblx0XHRcdHBhcmFtZXRlckluZm8udmFsdWVbKHRoaXMuZ2V0TWltZVR5cGVQYXRoKHBhcmFtZXRlcikgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPHN0cmluZz4pLnBhdGhdID1cblx0XHRcdFx0KGZpbGVzWzBdIGFzIEZpbGUpLnR5cGUgfHwgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIjtcblx0XHRcdHBhcmFtZXRlckluZm8udmFsdWVbdGhpcy5nZXRGaWxlTmFtZVBhdGgocGFyYW1ldGVyKSBhcyBzdHJpbmddID0gKGZpbGVzWzBdIGFzIEZpbGUpLm5hbWU7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLmhhc0Vycm9yID0gZmFsc2U7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMucGFyYW1ldGVyc1ZhbHVlc1twYXJhbWV0ZXJJbmZvLnBhcmFtZXRlci5uYW1lXSA9IHBhcmFtZXRlckluZm8udmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBwcm9wZXJ0eSBuYW1lIGZvciB0aGUgZmlsZSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgU3RyZWFtIHByb3BlcnR5IGluIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcmV0dXJucyBQYXRoIGFzIGEgc3RyaW5nLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRGaWxlTmFtZVBhdGgocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiAodGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5hbm5vdGF0aW9ucy5Db3JlPy5Db250ZW50RGlzcG9zaXRpb24/LkZpbGVuYW1lIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KS5wYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBwcm9wZXJ0eSBuYW1lIGZvciB0aGUgTWltZSB0eXBlIHdpdGggdGhlIGFzc29jaWF0ZWQgU3RyZWFtIHByb3BlcnR5IGluIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcmV0dXJucyBUaGUgcGF0aCBleHByZXNzaW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRNaW1lVHlwZVBhdGgocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/LmFubm90YXRpb25zLkNvcmU/Lk1lZGlhVHlwZSk7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIFN0cmVhbSBwcm9wZXJ0eSBhc3NvY2lhdGVkIHdpdGggdGhlIENvbXBsZXggdHlwZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcmV0dXJucyBUaGUgRWRtLlN0cmVhbSBwcm9wZXJ0eS5cblx0ICovXG5cdHByaXZhdGUgZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIChwYXJhbWV0ZXIudHlwZVJlZmVyZW5jZSBhcyBDb21wbGV4VHlwZSkucHJvcGVydGllcz8uZmluZCgocHJvcGVydHkpID0+IHByb3BlcnR5LnR5cGUgPT09IFwiRWRtLlN0cmVhbVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgY29udGVudCBvZiB0aGUgZmlsZS5cblx0ICogQHBhcmFtIGZpbGVzIFRoZSBmaWxlIHNlbGVjdGVkLlxuXHQgKiBAcmV0dXJucyBUaGUgZmlsZSBjb250ZW50LlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRCYXNlNjRGaWxlKGZpbGVzOiBvYmplY3RbXSk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXHRcdFx0cmVhZGVyLm9ubG9hZCA9ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKCFyZWFkZXIucmVzdWx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlc29sdmUoKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKS5zcGxpdChcIixcIilbMV0pO1xuXHRcdFx0fTtcblx0XHRcdHJlYWRlci5yZWFkQXNEYXRhVVJMKChmaWxlcyBhcyB1bmtub3duIGFzIEZpbGVMaXN0KS5pdGVtKDApISk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgbWVzc2FnZXMgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICovXG5cdHByaXZhdGUgcmVtb3ZlTWVzc2FnZXNGb3JQYXJhbWV0ZXIocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiB2b2lkIHtcblx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgY29udHJvbElkID0gZ2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIubmFtZV0pO1xuXHRcdC8vIGFsc28gcmVtb3ZlIG1lc3NhZ2VzIGFzc2lnbmVkIHRvIGlubmVyIGNvbnRyb2xzLCBidXQgYXZvaWQgcmVtb3ZpbmcgbWVzc2FnZXMgZm9yIGRpZmZlcmVudCBwYXJhbWV0ZXJzICh3aXRoIG5hbWUgYmVpbmcgc3Vic3RyaW5nIG9mIGFub3RoZXIgcGFyYW1ldGVyIG5hbWUpXG5cdFx0Y29uc3QgcmVsZXZhbnRNZXNzYWdlcyA9IG1lc3NhZ2VzLmZpbHRlcigobXNnOiBNZXNzYWdlKSA9PlxuXHRcdFx0bXNnLmdldENvbnRyb2xJZHMoKS5zb21lKChpZDogc3RyaW5nKSA9PiBjb250cm9sSWQuc3BsaXQoXCItXCIpLmluY2x1ZGVzKGlkKSlcblx0XHQpO1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhyZWxldmFudE1lc3NhZ2VzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBGb3JtRWxlbWVudHMgYWxvbmcgd2l0aCB0aGUgYXJyYXkgb2YgcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFRoZSBwYXJhbWV0ZXIgaW5mb3JtYXRpb24gYWxvbmcgd2l0aCB0aGUgRm9ybUVsZW1lbnRzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRGb3JtRWxlbWVudHMocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBQcm9taXNlPERpYWxvZ0NvbnRlbnRUeXBlcz4ge1xuXHRcdGNvbnN0IGZvcm1FbGVtZW50cyA9IGF3YWl0IHRoaXMuY3JlYXRlRm9ybUVsZW1lbnQocGFyYW1ldGVyKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Zm9ybUVsZW1lbnRzOiBmb3JtRWxlbWVudHMsXG5cdFx0XHRwYXJhbWV0ZXI6IHBhcmFtZXRlclxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFRoZSBkaWFsb2cgb3IgdW5kZWZpbmVkLlxuXHQgKi9cblx0Z2V0RGlhbG9nKCk6IERpYWxvZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZGlhbG9nO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgZGlhbG9nLlxuXHQgKi9cblx0YXN5bmMgY3JlYXRlRGlhbG9nKCk6IFByb21pc2U8RGlhbG9nPiB7XG5cdFx0bGV0IGRpYWxvZ0NvbnRlbnRzOiBGb3JtRWxlbWVudFR5cGVbXSA9IFtdO1xuXHRcdGxldCBkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzOiBEaWFsb2dDb250ZW50VHlwZXNbXSA9IFtdO1xuXHRcdGNvbnN0IGFjdGlvblBhcmFtZXRlcnMgPSB0aGlzLmFjdGlvbi5pc0JvdW5kID8gdGhpcy5hY3Rpb24ucGFyYW1ldGVycy5zbGljZSgxKSA6IHRoaXMuYWN0aW9uLnBhcmFtZXRlcnM7XG5cblx0XHQvLyBJZiBPcGVyYXRpb25hbFBhcmFtZXRlckZhY2V0cyBoYXZlIGJlZW4gZGVmaW5lZCBmb3IgdGhpcyBhY3Rpb24sIHRoZXkgYXJlIHVzZWQgdG8gZ3JvdXAgdGhlIGFjdGlvbiBwYXJhbWV0ZXJzXG5cdFx0Ly8gd2l0aCB0aXRsZXNcblx0XHRpZiAodGhpcy5hY3Rpb24uYW5ub3RhdGlvbnM/LlVJPy5PcGVyYXRpb25QYXJhbWV0ZXJGYWNldHMpIHtcblx0XHRcdGNvbnN0IGFjdGlvblBhcmFtZXRlckdyb3VwczogRWxlbWVudEdyb3VwW10gPSBbXTtcblx0XHRcdHRoaXMuYWN0aW9uLmFubm90YXRpb25zLlVJPy5PcGVyYXRpb25QYXJhbWV0ZXJGYWNldHM/LmZvckVhY2goZnVuY3Rpb24gKGZhY2V0OiBSZWZlcmVuY2VGYWNldCkge1xuXHRcdFx0XHRsZXQgZmFjZXRUaXRsZTtcblx0XHRcdFx0aWYgKGZhY2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCkge1xuXHRcdFx0XHRcdGZhY2V0VGl0bGUgPSBmYWNldC5MYWJlbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaGFzRmllbGRHcm91cFRhcmdldChmYWNldCkpIHtcblx0XHRcdFx0XHRjb25zdCBmaWVsZEdyb3VwID0gZmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwVHlwZTtcblx0XHRcdFx0XHRjb25zdCBncm91cGVkQWN0aW9uUGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyW10gPSBbXTtcblxuXHRcdFx0XHRcdGZpZWxkR3JvdXAuRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cDogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0Z3JvdXBlZEFjdGlvblBhcmFtZXRlcnMucHVzaCgoZ3JvdXAgYXMgRGF0YUZpZWxkKS5WYWx1ZS4kdGFyZ2V0IGFzIEFjdGlvblBhcmFtZXRlcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVyR3JvdXBzLnB1c2goe1xuXHRcdFx0XHRcdFx0ZmFjZXRUaXRsZTogZmFjZXRUaXRsZSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxzdHJpbmc+IHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0ZGF0YTogZ3JvdXBlZEFjdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEdldCB0aGUgZmllbGRzIGZvciBlYWNoIHBhcmFtZXRlciBncm91cFxuXHRcdFx0Y29uc3QgZ2V0R3JvdXBGb3JtID0gYXN5bmMgKGdyb3VwOiBFbGVtZW50R3JvdXApOiBQcm9taXNlPEVsZW1lbnRHcm91cENvbnZlcnRlZD4gPT4ge1xuXHRcdFx0XHRjb25zdCBmb3JtRWxlbWVudHMgPSBhd2FpdCBQcm9taXNlLmFsbChncm91cC5kYXRhLm1hcCh0aGlzLmdldEZvcm1FbGVtZW50cy5iaW5kKHRoaXMpKSk7XG5cdFx0XHRcdHJldHVybiB7IGZhY2V0VGl0bGU6IGdyb3VwLmZhY2V0VGl0bGUsIGRhdGE6IGZvcm1FbGVtZW50cyB9O1xuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3QgZm9ybURhdGEgPSBhY3Rpb25QYXJhbWV0ZXJHcm91cHMubWFwKGFzeW5jIChwYXJhbWV0ZXJHcm91cCkgPT4gZ2V0R3JvdXBGb3JtKHBhcmFtZXRlckdyb3VwKSk7XG5cdFx0XHRjb25zdCBvcEZhY2V0cyA9IGF3YWl0IFByb21pc2UuYWxsKGZvcm1EYXRhKTtcblxuXHRcdFx0Ly8gQWRkIHRoZSB0aXRsZSBjb250cm9sIHRvIGVhY2ggcGFyYW1ldGVyIGdyb3VwXG5cdFx0XHRvcEZhY2V0cy5mb3JFYWNoKChkaWFsb2dDb250ZW50KSA9PiB7XG5cdFx0XHRcdGRpYWxvZ0NvbnRlbnRzLnB1c2goPFRpdGxlIHRleHQ9e2RpYWxvZ0NvbnRlbnQuZmFjZXRUaXRsZX0gLz4pO1xuXHRcdFx0XHRyZXR1cm4gZGlhbG9nQ29udGVudC5kYXRhLm1hcCgoZWxlbWVudCkgPT4gZGlhbG9nQ29udGVudHMucHVzaChlbGVtZW50LmZvcm1FbGVtZW50cykpO1xuXHRcdFx0fSk7XG5cblx0XHRcdG9wRmFjZXRzLmZvckVhY2goZnVuY3Rpb24gKG9wRmFjZXQpIHtcblx0XHRcdFx0b3BGYWNldC5kYXRhLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRcdFx0XHRkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzLnB1c2goZWxlbWVudCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vIE9wZXJhdGlvblBhcmFtZXRlckZhY2V0cyBoYXZlIGJlZW4gZGVmaW5lZFxuXHRcdFx0ZGlhbG9nQ29udGVudHNXaXRoUGFyYW1ldGVycyA9IGF3YWl0IFByb21pc2UuYWxsKGFjdGlvblBhcmFtZXRlcnMubWFwKHRoaXMuZ2V0Rm9ybUVsZW1lbnRzLmJpbmQodGhpcykpKTtcblx0XHRcdGRpYWxvZ0NvbnRlbnRzID0gZGlhbG9nQ29udGVudHNXaXRoUGFyYW1ldGVycy5tYXAoKGRpYWxvZ0NvbnRlbnQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGRpYWxvZ0NvbnRlbnQuZm9ybUVsZW1lbnRzO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5yZWdpc3RlckFjdGlvblBhcmFtZXRlckluZm8oZGlhbG9nQ29udGVudHNXaXRoUGFyYW1ldGVycyk7XG5cblx0XHQvLyBJbiBjYXNlIG9mIGRlZmVycmVkIGNyZWF0ZSB3ZSBoYXZlIG5vIHZpZXcsIHNvIHdlIG5lZWQgdG8gZ2V0IHRoZSByZXNvdXJjZSBtb2RlbCBmcm9tIHRoZSBhcHAgY29tcG9uZW50XG5cblx0XHRjb25zdCBtZXNzYWdlU3RyaXAgPSB0aGlzLmdldEN1c3RvbUFjdGlvbk1lc3NhZ2VTdHJpcFRleHQoKTtcblxuXHRcdGNvbnN0IGVuZEJ1dHRvbiA9IChcblx0XHRcdDxCdXR0b25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCB0aGlzLmFjdGlvbk5hbWUsIFwiQWN0aW9uXCIsIFwiQ2FuY2VsXCJdKX1cblx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19DQU5DRUxcIil9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vbkNhbmNlbC5iaW5kKHRoaXMpKCk7XG5cdFx0XHRcdH19XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0Y29uc3QgZGlhbG9nID0gKFxuXHRcdFx0PERpYWxvZ1xuXHRcdFx0XHR0aXRsZT17dGhpcy5nZXRUaXRsZVRleHQodGhpcy5wYXJhbWV0ZXJzLmxhYmVsKX1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCB0aGlzLmFjdGlvbk5hbWVdKX1cblx0XHRcdFx0ZXNjYXBlSGFuZGxlcj17dGhpcy5vbkNhbmNlbC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRkcmFnZ2FibGU9e3RydWV9XG5cdFx0XHRcdHJlc2l6YWJsZT17dHJ1ZX1cblx0XHRcdFx0YWZ0ZXJDbG9zZT17dGhpcy5hZnRlckNsb3NlLmJpbmQodGhpcyl9XG5cdFx0XHRcdGJlZm9yZU9wZW49e3RoaXMuYmVmb3JlT3Blbi5iaW5kKHRoaXMpfVxuXHRcdFx0XHRhZnRlck9wZW49eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmFmdGVyT3BlbigpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRpbml0aWFsRm9jdXM9e2VuZEJ1dHRvbn0gLy8gVGhlIGluaXRpYWwgZm9jdXMgaXMgc2V0IHByb2dyYW1tYXRpY2FsbHkgaW4gYWZ0ZXJPcGVuLCB0byBhdm9pZCBvcGVuaW5nIHRoZSBWSCBkaWFsb2dcblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRiZWdpbkJ1dHRvbjogKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHRoaXMuYWN0aW9uTmFtZSwgXCJBY3Rpb25cIiwgXCJPa1wiXSl9XG5cdFx0XHRcdFx0XHRcdHRleHQ9e1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pc0NyZWF0ZUFjdGlvbiA9PT0gdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0PyB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX1NBUEZFX0FDVElPTl9DUkVBVEVfQlVUVE9OX0NPTlRJTlVFXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZ2V0QmVnaW5CdXR0b25MYWJlbCh0aGlzLnBhcmFtZXRlcnMubGFiZWwpXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uQXBwbHkuYmluZCh0aGlzKSgpO1xuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiRW1waGFzaXplZFwiXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZW5kQnV0dG9uOiBlbmRCdXR0b24sXG5cdFx0XHRcdFx0Y29udGVudDogKFxuXHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZSAodW5rbm93biBwcm9wZXJ0eSBiaW5kaW5nKVxuXHRcdFx0XHRcdFx0Ly8gY29sdW1uc00gb25seSB0YWtlcyBlZmZlY3QgaWYgdGhlcmUgYXJlIHRpdGxlcyBpbiB0aGUgY29udGVudC5cblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHttZXNzYWdlU3RyaXAgJiYgPE1lc3NhZ2VTdHJpcCBzaG93SWNvbj1cInRydWVcIiB0ZXh0PXttZXNzYWdlU3RyaXB9PjwvTWVzc2FnZVN0cmlwPn1cblx0XHRcdFx0XHRcdFx0PFNpbXBsZUZvcm0gY29sdW1uc009e1wiMlwifSBlZGl0YWJsZT1cInRydWVcIiBsYWJlbFNwYW5MPXtcIjEyXCJ9IGxhYmVsU3Bhbk09e1wiMTJcIn0gYmluZGluZz17XCIkUGFyYW1ldGVyXCJ9PlxuXHRcdFx0XHRcdFx0XHRcdHt7IGNvbnRlbnQ6IGRpYWxvZ0NvbnRlbnRzIH19XG5cdFx0XHRcdFx0XHRcdDwvU2ltcGxlRm9ybT5cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvRGlhbG9nPlxuXHRcdCk7XG5cdFx0dGhpcy5kaWFsb2cgPSBkaWFsb2c7XG5cdFx0cmV0dXJuIGRpYWxvZztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBsYWJlbCBmb3IgdGhlIGJlZ2luIGJ1dHRvbiBvZiB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gYWN0aW9uTGFiZWwgVGhlIGxhYmVsIG9mIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIGxhYmVsLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRCZWdpbkJ1dHRvbkxhYmVsKGFjdGlvbkxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGtleSA9IFwiQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfQUNUSU9OX05BTUVcIjtcblx0XHRjb25zdCBkZWZhdWx0S2V5ID0gXCJDX0NPTU1PTl9ESUFMT0dfT0tcIjtcblx0XHRyZXR1cm4gdGhpcy5nZXRPdmVycmlkZGVuVGV4dChrZXksIGRlZmF1bHRLZXksIGFjdGlvbkxhYmVsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB0aXRsZSBvZiB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gYWN0aW9uTGFiZWwgVGhlIGxhYmVsIG9mIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIHRpdGxlLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRUaXRsZVRleHQoYWN0aW9uTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qga2V5ID0gXCJBQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19BQ1RJT05fVElUTEVcIjtcblx0XHRjb25zdCBkZWZhdWx0S2V5ID0gXCJDX09QRVJBVElPTlNfQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfVElUTEVcIjtcblx0XHRyZXR1cm4gdGhpcy5nZXRPdmVycmlkZGVuVGV4dChrZXksIGRlZmF1bHRLZXksIGFjdGlvbkxhYmVsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGFuIG92ZXJyaWRkZW4gdGV4dCBmb3IgbWVzc2FnZSBzdHJpcC5cblx0ICogQHJldHVybnMgVGhlIG92ZXJyaWRkZW4gdGV4dCBmb3IgbWVzc2FnZSBzdHJpcC5cblx0ICovXG5cdHByaXZhdGUgZ2V0Q3VzdG9tQWN0aW9uTWVzc2FnZVN0cmlwVGV4dCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGtleSA9IFwiQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfTUVTU0FHRV9URVhUXCI7XG5cdFx0bGV0IGJvdW5kQWN0aW9uTmFtZSA9IHRoaXMuYWN0aW9uTmFtZTtcblx0XHRib3VuZEFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpLnBvcCgpID8/IGJvdW5kQWN0aW9uTmFtZTtcblx0XHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJvdW5kQWN0aW9uTmFtZSAmJiB0aGlzLmVudGl0eVNldE5hbWUgPyBgJHt0aGlzLmVudGl0eVNldE5hbWV9fCR7Ym91bmRBY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRcdGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX18JHtzdWZmaXhSZXNvdXJjZUtleX1gKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX18JHt0aGlzLmVudGl0eVNldE5hbWV9YCkpIHtcblx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXksIHVuZGVmaW5lZCwgYCR7dGhpcy5lbnRpdHlTZXROYW1lfWApO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtrZXl9YCkpIHtcblx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYW4gb3ZlcnJpZGRlbiB0ZXh0LlxuXHQgKiBAcGFyYW0ga2V5IFRoZSBrZXkgZm9yIGFuIG92ZXJyaWRkZW4gdGV4dFxuXHQgKiBAcGFyYW0gZGVmYXVsdEtleSBUaGUgZGVmYXVsdCBrZXkgZm9yIHRoZSB0ZXh0XG5cdCAqIEBwYXJhbSBhY3Rpb25MYWJlbCBUaGUgbGFiZWwgb2YgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgb3ZlcnJpZGRlbiB0ZXh0IG9yIGxhYmVsLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRPdmVycmlkZGVuVGV4dChrZXk6IHN0cmluZywgZGVmYXVsdEtleTogc3RyaW5nLCBhY3Rpb25MYWJlbD86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0bGV0IGJvdW5kQWN0aW9uTmFtZSA9IHRoaXMuYWN0aW9uTmFtZTtcblx0XHRib3VuZEFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpLnBvcCgpID8/IGJvdW5kQWN0aW9uTmFtZTtcblx0XHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJvdW5kQWN0aW9uTmFtZSAmJiB0aGlzLmVudGl0eVNldE5hbWUgPyBgJHt0aGlzLmVudGl0eVNldE5hbWV9fCR7Ym91bmRBY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRcdGlmIChhY3Rpb25MYWJlbCkge1xuXHRcdFx0aWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fXwke3N1ZmZpeFJlc291cmNlS2V5fWApKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXksIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX18JHt0aGlzLmVudGl0eVNldE5hbWV9YCkpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSwgdW5kZWZpbmVkLCBgJHt0aGlzLmVudGl0eVNldE5hbWV9YCk7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fWApKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGFjdGlvbkxhYmVsO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoZGVmYXVsdEtleSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIHByZXNzIGV2ZW50IG9mIHRoZSBiZWdpbiBidXR0b24gb2YgdGhlIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2UuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIG9uQXBwbHkoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gcHJldmVudCBtdWx0aXBsZSBwcmVzcyBldmVudHMuIFRoZSBCdXN5TG9ja2VyIGlzIG5vdCBmYXN0IGVub3VnaC4gKEJDUDogMjM3MDEzMDIxMClcblx0XHRpZiAodGhpcy5idXR0b25Mb2NrIHx8ICF0aGlzLmRpYWxvZykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBkaWFsb2cgPSB0aGlzLmRpYWxvZztcblxuXHRcdGNvbnN0IHBhcmFtZXRlckNvbnRleHQgPSAoZGlhbG9nLmdldE9iamVjdEJpbmRpbmcoKSBhcyBPRGF0YUNvbnRleHRCaW5kaW5nIHwgdW5kZWZpbmVkKT8uZ2V0UGFyYW1ldGVyQ29udGV4dCgpO1xuXG5cdFx0Ly8gbG9jayB0aGUgYnV0dG9uIHRvIHByZXZlbnQgbXVsdGlwbGUgcHJlc3MgZXZlbnRzXG5cdFx0dGhpcy5idXR0b25Mb2NrID0gdHJ1ZTtcblx0XHRCdXN5TG9ja2VyLmxvY2soZGlhbG9nKTtcblxuXHRcdC8vIHZhbGlkYXRlIHRoZSBhY3Rpb24gcGFyYW1ldGVycy4gSXQgaXMgaW1wb3J0YW50IHRvIGRvIHRoaXMgYXMgYSBmaXJzdCBvcGVyYXRpb24gYXMgdGhlcmUgaXMgYVxuXHRcdC8vIHdhaXQgZG9uZSBmb3IgdGhlIHZhbHVlIGNoYW5nZXMgdG8gY29tcGxldGUgdXBkYXRpbmcgdGhlIG1vZGVsLiBFdmVuIGluIGNhc2VzIHdoZXJlIHZhbGlkYXRpb24gaXNcblx0XHQvLyBub3QgY29uZmlndXJlZCB0aGlzIHByb21pc2UgbmVlZHMgdG8gYmUgcmVzb2x2ZWQgdG8gcmVhZCBmcm9tIHRoZSBtb2RlbCB0byByZXR1cm4gdXNlciBlbnRlcmVkIHZhbHVlcy5cblx0XHRpZiAoIShhd2FpdCBBY3Rpb25SdW50aW1lLnZhbGlkYXRlUHJvcGVydGllcyh0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLCB0aGlzLnJlc291cmNlTW9kZWwpKSkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2soZGlhbG9nKTtcblx0XHRcdHRoaXMuYnV0dG9uTG9jayA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IG5ld1ZhbHVlc0RpY3Rpb25hcnkgPSBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHQuLi50aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLm1hcCgoYWN0aW9uUGFyYW1ldGVySW5mb3MpID0+IHtcblx0XHRcdFx0Y29uc3QgcGFyYW1ldGVyID0gYWN0aW9uUGFyYW1ldGVySW5mb3MucGFyYW1ldGVyO1xuXHRcdFx0XHRsZXQgdmFsdWU7XG5cdFx0XHRcdGlmIChwYXJhbWV0ZXIuaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBPYmplY3QudmFsdWVzKChkaWFsb2cuZ2V0TW9kZWwoXCJtdmZ2aWV3XCIpIGFzIEpTT05Nb2RlbCkuZ2V0UHJvcGVydHkoYC8ke3BhcmFtZXRlci5uYW1lfWApID8/IHt9KS5tYXAoXG5cdFx0XHRcdFx0XHQocGFyYW1WYWx1ZSkgPT4gKHBhcmFtVmFsdWUgYXMgeyBLZXk/OiBQcmltaXRpdmVUeXBlIH0pPy5LZXlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFwYXJhbWV0ZXIudHlwZS5zdGFydHNXaXRoKFwiRWRtLlwiKSAmJiB0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcikpIHtcblx0XHRcdFx0XHQvLyBGaWxlIFVwbG9hZGVyXG5cdFx0XHRcdFx0dmFsdWUgPSBhY3Rpb25QYXJhbWV0ZXJJbmZvcy52YWx1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHBhcmFtZXRlckNvbnRleHQ/LmdldFByb3BlcnR5KHBhcmFtZXRlci5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4geyBbcGFyYW1ldGVyLm5hbWVdOiB2YWx1ZSB9O1xuXHRcdFx0fSlcblx0XHQpIGFzIFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+O1xuXHRcdGNvbnN0IGlzTmV3VmFsdWUgPSBPYmplY3QudmFsdWVzKG5ld1ZhbHVlc0RpY3Rpb25hcnkpLnNvbWUoKHZhbHVlKSA9PiAhIXZhbHVlKTtcblxuXHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Jlc29sdmUobmV3VmFsdWVzRGljdGlvbmFyeSk7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LmdldE1vZGVsKFwidWlcIikuc2V0UHJvcGVydHkoVWlNb2RlbENvbnN0YW50cy5Eb2N1bWVudE1vZGlmaWVkLCBpc05ld1ZhbHVlKTtcblx0XHQvLyBEdWUgdG8gdXNpbmcgdGhlIHNlYXJjaCBhbmQgdmFsdWUgaGVscHMgb24gdGhlIGFjdGlvbiBkaWFsb2cgdHJhbnNpZW50IG1lc3NhZ2VzIGNvdWxkIGFwcGVhclxuXHRcdC8vIHdlIG5lZWQgYW4gVVggZGVzaWduIGZvciB0aG9zZSB0byBzaG93IHRoZW0gdG8gdGhlIHVzZXIgLSBmb3Igbm93IHJlbW92ZSB0aGVtIGJlZm9yZSBjb250aW51aW5nXG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldCB0aGUgc3RhdGUgb2YgdGhlIGRpYWxvZyB0byBzdGFydCBhIG5ldyBpdGVyYXRpb24uXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgcmVzZXRTdGF0ZSgpOiB2b2lkIHtcblx0XHR0aGlzLnVubG9ja0RpYWxvZygpO1xuXHRcdHRoaXMuYnV0dG9uTG9jayA9IGZhbHNlO1xuXHRcdHRoaXMudXBkYXRlRGlhbG9nQmluZGluZ0NvbnRleHRGb3JFcnJvcigpO1xuXHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1JlamVjdCA9IHJlamVjdDtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFuZ2UgdGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgZGlhbG9nIHRvIG9uZSB3aXRoIHByaW9yaXR5IG1lc3NhZ2UuXG5cdCAqXG5cdCAqIE9uIGluaXRpYWwgYWN0aW9uIGV4ZWN1dGlvbiwgd2UgbWlnaHQgaGF2ZSBib3VuZCBtZXNzYWdlcyB3aXRoIGFueSBzZWxlY3RlZCBjb250ZXh0cyBhcyB0YXJnZXQgYXBhcnQgZnJvbSB0aGUgZGlhbG9nJ3MgaW5pdGlhbCBjb250ZXh0LlxuXHQgKiBXZSBjaGFuZ2UgdGhlIGJpbmRpbmcgY29udGV4dCBvZiBkaWFsb2cgZm9yIHRoZSBwYXJhbWV0ZXIgZmllbGRzJyB0byBnZXQgdGhlIHZhbGlkIHZhbHVlIHN0YXRlIGZyb20gdGhlIHByaW9yaXR5IGJvdW5kIG1lc3NhZ2UuXG5cdCAqL1xuXHR1cGRhdGVEaWFsb2dCaW5kaW5nQ29udGV4dEZvckVycm9yKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoIDwgMikge1xuXHRcdFx0Ly8gV2Ugd291bGQgbmVlZCB0byBzd2l0Y2ggdGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgZGlhbG9nIG9ubHkgd2hlbiB3ZSBoYXZlIG11bHRpcGxlIGNvbnRleHRzIGZvciBleGVjdXRpbmcgdGhlIGFjdGlvbi5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgd2FybmluZ0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLCBpbmZvQ29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZXJyb25lb3VzQ3R4ID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmZpbmQoKGNvbnRleHQpID0+IHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzID0gY29udGV4dC5nZXRNZXNzYWdlcygpO1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2VzLnNvbWUoKG1zZykgPT4ge1xuXHRcdFx0XHQvLyBXZSBob2xkIGZpcnN0IGNvbnRleHQgd2l0aCB3YXJuaW5nIG9yIGluZm8gbWVzc2FnZXMuXG5cdFx0XHRcdHdhcm5pbmdDb250ZXh0ID0gIXdhcm5pbmdDb250ZXh0ICYmIG1zZy5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLldhcm5pbmcgPyBjb250ZXh0IDogdW5kZWZpbmVkO1xuXHRcdFx0XHRpbmZvQ29udGV4dCA9ICFpbmZvQ29udGV4dCAmJiBtc2cuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbiA/IGNvbnRleHQgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdC8vIEVycm9yIGlzIGZvdW5kISEhIFdlIHNoYWxsIGV4aXQuXG5cdFx0XHRcdHJldHVybiBtc2cuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdGNvbnN0IGNvbnRleHRUb1VzZSA9IGVycm9uZW91c0N0eCA/PyB3YXJuaW5nQ29udGV4dCA/PyBpbmZvQ29udGV4dDtcblxuXHRcdGlmIChjb250ZXh0VG9Vc2UpIHtcblx0XHRcdHRoaXMuZGlhbG9nPy5zZXRCaW5kaW5nQ29udGV4dChjb250ZXh0VG9Vc2UpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBidXN5IHN0YXRlIG9mIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRwcml2YXRlIHVubG9ja0RpYWxvZygpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5kaWFsb2cgJiYgQnVzeUxvY2tlci5pc0xvY2tlZCh0aGlzLmRpYWxvZykpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMuZGlhbG9nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgdGhlIGNhbmNlbCBhY3Rpb24gb2YgdGhlIGRpYWxvZy5cblx0ICovXG5cdHByaXZhdGUgb25DYW5jZWwoKTogdm9pZCB7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUmVqZWN0KEZFTGlicmFyeS5Db25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHR0aGlzLmNsb3NlRGlhbG9nKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRwdWJsaWMgY2xvc2VEaWFsb2coKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZGlhbG9nKSB7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblBhcmFtZXRlckRpYWxvZ0Nsb3NlZD8uKCk7XG5cdFx0XHQvLyB3aGVuIHRoZSBkaWFsb2cgaXMgY2FuY2VsbGVkLCBtZXNzYWdlcyBuZWVkIHRvIGJlIHJlbW92ZWQgaW4gY2FzZSB0aGUgc2FtZSBhY3Rpb24gc2hvdWxkIGJlIGV4ZWN1dGVkIGFnYWluXG5cdFx0XHRmb3IgKGNvbnN0IGkgaW4gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0XHR0aGlzLnJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyKHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3NbaV0ucGFyYW1ldGVyKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuZGlhbG9nLmNsb3NlKCk7XG5cdFx0fVxuXHRcdHRoaXMuaXNEaWFsb2dPcGVuID0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIGFjdGlvbiByZXN1bHQuXG5cdCAqL1xuXHRhc3luYyBvcGVuRGlhbG9nKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghdGhpcy5kaWFsb2cpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkVycm9yIG9uIG9wZW5pbmcgdGhlIGRpYWxvZ1wiKTtcblx0XHR9XG5cdFx0YXdhaXQgQ29tbW9uVXRpbHMuc2V0VXNlckRlZmF1bHRzKFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudCxcblx0XHRcdHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MubWFwKChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PiBhY3Rpb25QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlciksXG5cdFx0XHR0aGlzLnBhcmFtZXRlck1vZGVsLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdFx0dGhpcy5zZXRNb2RlbHModGhpcy5kaWFsb2cpO1xuXHRcdHRoaXMucGFyYW1ldGVycy52aWV3Py5hZGREZXBlbmRlbnQodGhpcy5kaWFsb2cpO1xuXHRcdGF3YWl0IHRoaXMuc2V0T3BlcmF0aW9uRGVmYXVsdFZhbHVlcyh0aGlzLmRpYWxvZyk7XG5cdFx0dGhpcy5kaWFsb2cub3BlbigpO1xuXHRcdHRoaXMuaXNEaWFsb2dPcGVuID0gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBtb2RlbCBjb25maWd1cmF0aW9uIGZvciB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBvd25lciBvZiB0aGUgZGlhbG9nXG5cdCAqL1xuXHRwcml2YXRlIHNldE1vZGVscyhkaWFsb2c6IERpYWxvZyk6IHZvaWQge1xuXHRcdGRpYWxvZy5zZXRNb2RlbCh0aGlzLnBhcmFtZXRlck1vZGVsLCBcInBhcmFtc01vZGVsXCIpO1xuXHRcdGRpYWxvZy5iaW5kRWxlbWVudCh7XG5cdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdG1vZGVsOiBcInBhcmFtc01vZGVsXCJcblx0XHR9KTtcblx0XHRkaWFsb2cuc2V0TW9kZWwodGhpcy5wYXJhbWV0ZXJzLm1vZGVsKTtcblx0XHRkaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0cGF0aDogYCR7dGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA/IFwiXCIgOiBcIi9cIn0ke3RoaXMuYWN0aW9uTmFtZX0oLi4uKWBcblx0XHR9KTtcblxuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRkaWFsb2cuc2V0QmluZGluZ0NvbnRleHQodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdKTsgLy8gdXNlIGNvbnRleHQgb2YgZmlyc3Qgc2VsZWN0ZWQgbGluZSBpdGVtXG5cdFx0fVxuXHRcdC8vIGVtcHR5IG1vZGVsIHRvIGFkZCBlbGVtZW50cyBkeW5hbWljYWxseSBkZXBlbmRpbmcgb24gbnVtYmVyIG9mIE1WRiBmaWVsZHMgZGVmaW5lZCBvbiB0aGUgZGlhbG9nXG5cdFx0ZGlhbG9nLnNldE1vZGVsKG5ldyBKU09OTW9kZWwoe30pLCBcIm12ZnZpZXdcIik7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgbWVzc2FnZXMgYmVmb3JlIG9wZW5pbmcgdGhlIGRpYWxvZy5cblx0ICogQHBhcmFtIF9ldmVudFxuXHQgKi9cblx0cHJpdmF0ZSBiZWZvcmVPcGVuKF9ldmVudDogRGlhbG9nJEJlZm9yZU9wZW5FdmVudCk6IHZvaWQge1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogV2FpdCBmb3IgdGhlIHBhcmFtZXRlciB2YWx1ZXMgdG8gYmUgc2V0LlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIGNvbnRhaW5pbmcgdGhlIHBhcmFtZXRlciB2YWx1ZXMuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgd2FpdEZvclBhcmFtZXRlcnNWYWx1ZXMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPj4ge1xuXHRcdHJldHVybiB0aGlzLnBhcmFtZXRlcnNWYWx1ZXNQcm9taXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgaWYgdGhlIGRpYWxvZyBpcyBvcGVuZWQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRpYWxvZyBpcyBvcGVuZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdHB1YmxpYyBpc09wZW4oKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaXNEaWFsb2dPcGVuO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBiaW5kaW5nUGFyYW1ldGVyIFRoZSBiaW5kaW5nIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBkaWFsb2dcblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIGRlZmF1bHQgdmFsdWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUoXG5cdFx0cGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsXG5cdFx0YmluZGluZ1BhcmFtZXRlcjogc3RyaW5nLFxuXHRcdGRpYWxvZzogRGlhbG9nXG5cdCk6IFByb21pc2U8UGFyYW1ldGVyRGVmYXVsdFZhbHVlPiB7XG5cdFx0Y29uc3Qgb3BlcmF0aW9uQmluZGluZyA9IGRpYWxvZy5nZXRPYmplY3RCaW5kaW5nKCkgYXMgT0RhdGFDb250ZXh0QmluZGluZztcblx0XHRjb25zdCBwYXJhbWV0ZXJNb2RlbERhdGEgPSB0aGlzLnBhcmFtZXRlck1vZGVsLmdldERhdGEoKTtcblx0XHRjb25zdCBwYXJhbU5hbWUgPSBwYXJhbWV0ZXIubmFtZTtcblx0XHRjb25zdCBkZWZhdWx0VmFsdWUgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/LlBhcmFtZXRlckRlZmF1bHRWYWx1ZTtcblx0XHQvLyBDYXNlIDE6IFRoZXJlIGlzIGEgUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGFubm90YXRpb25cblx0XHRpZiAoZGVmYXVsdFZhbHVlKSB7XG5cdFx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA+IDAgJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZGVmYXVsdFZhbHVlKSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IHBhdGhGb3JDb250ZXh0OiBzdHJpbmcgPVxuXHRcdFx0XHRcdFx0YmluZGluZ1BhcmFtZXRlciAmJiBkZWZhdWx0VmFsdWUucGF0aC5zdGFydHNXaXRoKGAke2JpbmRpbmdQYXJhbWV0ZXJ9L2ApXG5cdFx0XHRcdFx0XHRcdD8gZGVmYXVsdFZhbHVlLnBhdGgucmVwbGFjZShgJHtiaW5kaW5nUGFyYW1ldGVyfS9gLCBcIlwiKVxuXHRcdFx0XHRcdFx0XHQ6IGRlZmF1bHRWYWx1ZS5wYXRoO1xuXHRcdFx0XHRcdGxldCBwYXJhbVZhbHVlID0gYXdhaXQgQ29tbW9uVXRpbHMucmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KGRlZmF1bHRWYWx1ZS5wYXRoLCBvcGVyYXRpb25CaW5kaW5nLmdldE1vZGVsKCkpO1xuXHRcdFx0XHRcdGlmIChwYXJhbVZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRwYXJhbVZhbHVlID0gYXdhaXQgb3BlcmF0aW9uQmluZGluZy5nZXRQYXJhbWV0ZXJDb250ZXh0KCkucmVxdWVzdFByb3BlcnR5KGRlZmF1bHRWYWx1ZS5wYXRoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHQvLyBGb3IgbXVsdGkgc2VsZWN0LCBuZWVkIHRvIGxvb3Agb3ZlciBjb250ZXh0cyAoYXMgY29udGV4dHMgY2Fubm90IGJlIHJldHJpZXZlZCB2aWEgYmluZGluZyBwYXJhbWV0ZXIgb2YgdGhlIG9wZXJhdGlvbiBiaW5kaW5nKVxuXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLnNvbWUoKGNvbnRleHQpID0+IGNvbnRleHQuZ2V0UHJvcGVydHkocGF0aEZvckNvbnRleHQpICE9PSBwYXJhbVZhbHVlKSkge1xuXHRcdFx0XHRcdFx0XHQvLyBpZiB0aGUgdmFsdWVzIGZyb20gdGhlIGNvbnRleHRzIGFyZSBub3QgYWxsIHRoZSBzYW1lLCBkbyBub3QgcHJlZmlsbFxuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdG5vUG9zc2libGVWYWx1ZTogdHJ1ZVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWUsIHZhbHVlOiBwYXJhbVZhbHVlIH07XG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVhZGluZyBkZWZhdWx0IGFjdGlvbiBwYXJhbWV0ZXJcIiwgcGFyYW1OYW1lLCB0aGlzLmFjdGlvbi5uYW1lKTtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0cGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdGxhdGVQcm9wZXJ0eUVycm9yOiB0cnVlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQ2FzZSAxLjI6IFBhcmFtZXRlckRlZmF1bHRWYWx1ZSBkZWZpbmVzIGEgZml4ZWQgc3RyaW5nIHZhbHVlIChpLmUuIHZQYXJhbURlZmF1bHRWYWx1ZSA9ICdzb21lU3RyaW5nJylcblx0XHRcdFx0cmV0dXJuIHsgcGFyYW1OYW1lLCB2YWx1ZTogZGVmYXVsdFZhbHVlLnZhbHVlT2YoKSB9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4geyBwYXJhbU5hbWUsIHZhbHVlOiBwYXJhbWV0ZXJNb2RlbERhdGFbcGFyYW1OYW1lXSB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG1hbmlmZXN0IHZhbHVlcy5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG1hbmlmZXN0IHZhbHVlcy5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0TWFuaWZlc3RGdW5jdGlvblZhbHVlcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSB0aGlzLmRpYWxvZz8uZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRpZiAoIXRoaXMucGFyYW1ldGVycy52aWV3IHx8ICF0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIHx8ICFiaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblxuXHRcdHJldHVybiBGUE1IZWxwZXIubG9hZE1vZHVsZUFuZENhbGxNZXRob2QoXG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uXG5cdFx0XHRcdC5zdWJzdHJpbmcoMCwgdGhpcy5wYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgfHwgLTEpXG5cdFx0XHRcdC5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKSxcblx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24uc3Vic3RyaW5nKFxuXHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSArIDEsXG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24ubGVuZ3RoXG5cdFx0XHQpLFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLnZpZXcsXG5cdFx0XHRiaW5kaW5nQ29udGV4dCxcblx0XHRcdHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1xuXHRcdCkgYXMgUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJlZGVmaW5lZCB2YWx1ZXMgZm9yIHRoZSBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gYmluZGluZ1BhcmFtZXRlciBUaGUgYmluZGluZyBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIGRpYWxvZyBUaGUgZGlhbG9nXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIGNvbnRhaW5pbmcgYWxsIHByZWRlZmluZWQgdmFsdWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRQcmVEZWZpbmVkVmFsdWVzKFxuXHRcdGJpbmRpbmdQYXJhbWV0ZXI6IHN0cmluZyxcblx0XHRkaWFsb2c6IERpYWxvZ1xuXHQpOiBQcm9taXNlPHtcblx0XHRjb250ZXh0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRkZWZhdWx0VmFsdWVzOiBQYXJhbWV0ZXJEZWZhdWx0VmFsdWVbXTtcblx0XHRmdW5jdGlvblZhbHVlczogT0RhdGFWNENvbnRleHRbXTtcblx0XHRtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0fT4ge1xuXHRcdGNvbnN0IGJvdW5kRnVuY3Rpb25OYW1lID0gdGhpcy5hY3Rpb24uYW5ub3RhdGlvbnMuQ29tbW9uPy5EZWZhdWx0VmFsdWVzRnVuY3Rpb24/LnZhbHVlT2YoKTtcblx0XHRsZXQgcmVxdWVzdENvbnRleHRPYmplY3Q6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0XHRsZXQgZnVuY3Rpb25QYXJhbXM6IFByb21pc2U8T0RhdGFWNENvbnRleHQ+W10gPSBbXTtcblx0XHRpZiAodGhpcy5hY3Rpb24uaXNCb3VuZCkge1xuXHRcdFx0aWYgKHR5cGVvZiBib3VuZEZ1bmN0aW9uTmFtZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRjb25zdCBtb2RlbCA9IHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5nZXRNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBib3VuZEZ1bmN0aW9uID0gT3BlcmF0aW9uLmdldE9wZXJhdGlvbkZyb21OYW1lKGJvdW5kRnVuY3Rpb25OYW1lLCBtb2RlbCwgdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdKTtcblx0XHRcdFx0aWYgKGJvdW5kRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRmdW5jdGlvblBhcmFtcyA9IHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5tYXAoYXN5bmMgKGNvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IG5ldyBPRGF0YU9wZXJhdGlvbihcblx0XHRcdFx0XHRcdFx0Ym91bmRGdW5jdGlvbixcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGFwcENvbXBvbmVudDogdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdFx0XHRtb2RlbDogbW9kZWwsXG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dHM6IFtjb250ZXh0XVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0ZW5oYW5jZSRzZWxlY3Q6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGdyb3VwSWQ6IFwiZnVuY3Rpb25Hcm91cFwiXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCkuZXhlY3V0ZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdC5maWx0ZXIoaXNGdWxmaWxsZWQpWzBdPy52YWx1ZS5ib3VuZENvbnRleHQ7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRyZXF1ZXN0Q29udGV4dE9iamVjdCA9IHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5yZXF1ZXN0T2JqZWN0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGNvbnRleHRWYWx1ZXMgPSBhd2FpdCByZXF1ZXN0Q29udGV4dE9iamVjdDtcblxuXHRcdFx0Y29uc3QgcHJvbWlzZXMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MubWFwKGFzeW5jIChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PlxuXHRcdFx0XHRcdFx0dGhpcy5nZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUoYWN0aW9uUGFyYW1ldGVySW5mby5wYXJhbWV0ZXIsIGJpbmRpbmdQYXJhbWV0ZXIsIGRpYWxvZylcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCksXG5cdFx0XHRcdFByb21pc2UuYWxsKGZ1bmN0aW9uUGFyYW1zKSxcblx0XHRcdFx0dGhpcy5nZXRNYW5pZmVzdEZ1bmN0aW9uVmFsdWVzKClcblx0XHRcdF0pO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Y29udGV4dFZhbHVlcyxcblx0XHRcdFx0ZGVmYXVsdFZhbHVlczogcHJvbWlzZXNbMF0sXG5cdFx0XHRcdGZ1bmN0aW9uVmFsdWVzOiBwcm9taXNlc1sxXSxcblx0XHRcdFx0bWFuaWZlc3RGdW5jdGlvblZhbHVlczogcHJvbWlzZXNbMl1cblx0XHRcdH07XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHBhcmFtZXRlclwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0Ly8gUmVtb3ZlIG1lc3NhZ2VzIHJlbGF0aW5nIHRvIHRoZSBmdW5jdGlvbiBmb3IgZGVmYXVsdCB2YWx1ZXMgYXMgdGhleSBhcmVuJ3QgaGVscGZ1bCBmb3IgYSB1c2VyXG5cdFx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Y29udGV4dFZhbHVlczoge30sXG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXM6IFtdLFxuXHRcdFx0XHRmdW5jdGlvblZhbHVlczogW10sXG5cdFx0XHRcdG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXM6IHt9XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsYmFjayB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmVkLiBTZXRzIHRoZSBmb2N1cyBvbiB0aGUgZmlyc3QgZmllbGQgd2l0aG91dCBvcGVuaW5nIHRoZSBWSCBkaWFsb2cuXG5cdCAqL1xuXHRwcml2YXRlIGFmdGVyT3BlbigpOiB2b2lkIHtcblx0XHRjb25zdCBmaXJzdFZpc2libGVQYXJhbWV0ZXIgPSB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoKHBhcmFtZXRlckluZm8pID0+IHBhcmFtZXRlckluZm8uZmllbGQuZ2V0VmlzaWJsZSgpKTtcblx0XHRpZiAoZmlyc3RWaXNpYmxlUGFyYW1ldGVyKSB7XG5cdFx0XHRjb25zdCBmaXJzdEZpZWxkID0gZmlyc3RWaXNpYmxlUGFyYW1ldGVyPy5maWVsZDtcblx0XHRcdGNvbnN0IGZvY3VzSW5mbyA9IGZpcnN0RmllbGQ/LmdldEZvY3VzSW5mbygpIGFzIHsgdGFyZ2V0SW5mbzogb2JqZWN0IH07XG5cdFx0XHRmb2N1c0luZm8udGFyZ2V0SW5mbyA9IHsgc2lsZW50OiB0cnVlIH07XG5cdFx0XHRmaXJzdEZpZWxkPy5mb2N1cyhmb2N1c0luZm8pO1xuXHRcdH1cblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblBhcmFtZXRlckRpYWxvZ09wZW5lZD8uKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGluZm8uXG5cdCAqIEBwYXJhbSBkaWFsb2dDb250ZW50cyBUaGUgZGlhbG9nIGNvbnRlbnRzXG5cdCAqL1xuXHRwcml2YXRlIHJlZ2lzdGVyQWN0aW9uUGFyYW1ldGVySW5mbyhkaWFsb2dDb250ZW50czogRGlhbG9nQ29udGVudFR5cGVzW10pOiB2b2lkIHtcblx0XHQvL1JlZ2lzdGVyIHRoZSBmaWVsZFxuXHRcdGRpYWxvZ0NvbnRlbnRzLmZvckVhY2goKGRpYWxvZ0NvbnRlbnQpID0+IHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlciA9IGRpYWxvZ0NvbnRlbnQ/LnBhcmFtZXRlcjtcblx0XHRcdGNvbnN0IGZpZWxkID0gZGlhbG9nQ29udGVudD8uZm9ybUVsZW1lbnRzPy5bMV07XG5cdFx0XHR0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLnB1c2goe1xuXHRcdFx0XHRwYXJhbWV0ZXIsXG5cdFx0XHRcdGZpZWxkLFxuXHRcdFx0XHRpc011bHRpVmFsdWU6IHBhcmFtZXRlci5pc0NvbGxlY3Rpb24sXG5cdFx0XHRcdGhhc0Vycm9yOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBkaWFsb2dcblx0ICogQHJldHVybnMgVGhlIHByb21pc2UuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHNldE9wZXJhdGlvbkRlZmF1bHRWYWx1ZXMoZGlhbG9nOiBEaWFsb2cpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyID0gdGhpcy5hY3Rpb24uaXNCb3VuZCA/IHRoaXMuYWN0aW9uLnBhcmFtZXRlcnNbMF0ubmFtZSA6IFwiXCI7XG5cdFx0Y29uc3QgeyBjb250ZXh0VmFsdWVzLCBkZWZhdWx0VmFsdWVzLCBmdW5jdGlvblZhbHVlcywgbWFuaWZlc3RGdW5jdGlvblZhbHVlcyB9ID0gYXdhaXQgdGhpcy5nZXRQcmVEZWZpbmVkVmFsdWVzKFxuXHRcdFx0YmluZGluZ1BhcmFtZXRlcixcblx0XHRcdGRpYWxvZ1xuXHRcdCk7XG5cdFx0Y29uc3Qgb3BlcmF0aW9uQmluZGluZyA9IGRpYWxvZy5nZXRPYmplY3RCaW5kaW5nKCkgYXMgT0RhdGFDb250ZXh0QmluZGluZztcblxuXHRcdGlmIChiaW5kaW5nUGFyYW1ldGVyKSB7XG5cdFx0XHRvcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihiaW5kaW5nUGFyYW1ldGVyLCBjb250ZXh0VmFsdWVzKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGkgaW4gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0aWYgKHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3NbaV0ucGFyYW1ldGVyLm5hbWUgIT09IFwiUmVzdWx0SXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJOYW1lID0gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvc1tpXS5wYXJhbWV0ZXIubmFtZTtcblx0XHRcdFx0Ly8gUGFyYW1ldGVyIHZhbHVlcyBwcm92aWRlZCBpbiB0aGUgY2FsbCBvZiBpbnZva2VBY3Rpb24gb3ZlcnJ1bGUgb3RoZXIgc291cmNlc1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJQcm92aWRlZFZhbHVlID0gdGhpcy5wYXJhbWV0ZXJWYWx1ZXM/LmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQubmFtZSA9PT0gcGFyYW1ldGVyTmFtZSk/LnZhbHVlO1xuXHRcdFx0XHRpZiAocGFyYW1ldGVyUHJvdmlkZWRWYWx1ZSkge1xuXHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIHBhcmFtZXRlclByb3ZpZGVkVmFsdWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXMuaGFzT3duUHJvcGVydHkocGFyYW1ldGVyTmFtZSkpIHtcblx0XHRcdFx0XHRvcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihwYXJhbWV0ZXJOYW1lLCBtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzW3BhcmFtZXRlck5hbWVdKTtcblx0XHRcdFx0fSBlbHNlIGlmIChkZWZhdWx0VmFsdWVzW2ldICYmIGRlZmF1bHRWYWx1ZXNbaV0udmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIGRlZmF1bHRWYWx1ZXNbaV0udmFsdWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuYWN0aW9uLmFubm90YXRpb25zLkNvbW1vbj8uRGVmYXVsdFZhbHVlc0Z1bmN0aW9uICYmICFkZWZhdWx0VmFsdWVzW2ldLm5vUG9zc2libGVWYWx1ZSkge1xuXHRcdFx0XHRcdGNvbnN0IHNldE9mRnVuY3Rpb25WYWx1ZXMgPSBuZXcgU2V0PHN0cmluZz4oXG5cdFx0XHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubWFwKChjb250ZXh0LCBpbmRleCkgPT4gZnVuY3Rpb25WYWx1ZXNbaW5kZXhdLmdldE9iamVjdChwYXJhbWV0ZXJOYW1lKSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChzZXRPZkZ1bmN0aW9uVmFsdWVzLnNpemUgPT09IDEgJiYgc2V0T2ZGdW5jdGlvblZhbHVlcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Ly9wYXJhbSB2YWx1ZXMgYXJlIGFsbCB0aGUgc2FtZTpcblx0XHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIEFycmF5LmZyb20oc2V0T2ZGdW5jdGlvblZhbHVlcylbMF0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIGF0IGxlYXN0IG9uZSBEZWZhdWx0IFByb3BlcnR5IGlzIGEgTGF0ZSBQcm9wZXJ0eSBhbmQgYW4gZVRhZyBlcnJvciB3YXMgcmFpc2VkLlxuXHRcdGlmIChkZWZhdWx0VmFsdWVzLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZS5sYXRlUHJvcGVydHlFcnJvcikpIHtcblx0XHRcdGNvbnN0IHJlZnJlc2ggPSB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX1JFRlJFU0hcIik7XG5cdFx0XHRNZXNzYWdlQm94Lndhcm5pbmcoZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50KS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfTEFURV9QUk9QRVJUWVwiKSwge1xuXHRcdFx0XHRhY3Rpb25zOiBbcmVmcmVzaCwgTWVzc2FnZUJveC5BY3Rpb24uT0tdLFxuXHRcdFx0XHRlbXBoYXNpemVkQWN0aW9uOiByZWZyZXNoLFxuXHRcdFx0XHRvbkNsb3NlOiAoYWN0aW9uOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRpZiAoYWN0aW9uID09PSByZWZyZXNoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBleHRlbnNpb25BUEkgPSB0aGlzLnBhcmFtZXRlcnMudmlldz8uZ2V0Q29udHJvbGxlcigpLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdFx0XHRcdFx0KGV4dGVuc2lvbkFQSSBhcyBMaXN0UmVwb3J0RXh0ZW5zaW9uQVBJIHwgT2JqZWN0UGFnZUV4dGVuc2lvbkFQSSkucmVmcmVzaCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjI1ZW1cIlxuXHRcdFx0fSBhcyBvYmplY3QpO1xuXHRcdH1cblxuXHRcdC8vIGRlc3Ryb3kgdGhlIG9kYXRhQ29udGV4dEJpbmRpbmcgcmVsYXRlZCB0byB0aGUgZnVuY3Rpb24gY2FsbFxuXHRcdGZvciAoY29uc3QgZnVuY3Rpb25Db250ZXh0IG9mIGZ1bmN0aW9uVmFsdWVzKSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nID0gZnVuY3Rpb25Db250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRcdGlmIChiaW5kaW5nPy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFDb250ZXh0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRiaW5kaW5nLmRlc3Ryb3koKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgY2xvc2Ugb2YgdGhlIGRpYWxvZy5cblx0ICovXG5cdHByaXZhdGUgYWZ0ZXJDbG9zZSgpOiB2b2lkIHtcblx0XHR0aGlzLmRpYWxvZz8uZGVzdHJveSgpO1xuXHRcdHRoaXMuYnV0dG9uTG9jayA9IGZhbHNlOyAvL25lZWRlZCBoZXJlLCBub3QgaW4gdGhlIHByZXNzIGV2ZW50cyBmaW5hbGx5IGNsYXVzZS4gSW4gY2FzZSB0aGUgVUkgaXMgc2x1Z2dpc2gsIGJlZ2luIGJ1dHRvbiBjb3VsZCBiZSBwcmVzc2VkIGFnYWluLlxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5IHVzZWQgZm9yIHRleHQgYW5ub3RhdGlvbiBpbiB0aGUgVmFsdWVIZWxwIGZvciB0aGUgYWN0aW9uIHBhcmFtZXRlciBhbmQgcHJvdmlkZXMgdGhlIGZvcm1hdHRlZCBiaW5kaW5nLlxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZSBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFRoZSBmb3JtIGVsZW1lbnQgY29udHJvbC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0QWRkaXRpb25hbFZhbHVlKG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0bGV0IHRleHRDb250ZXh0O1xuXG5cdFx0Y29uc3QgY29udGV4dFBhdGggPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IGxvY2FsRGF0YVByb3BlcnR5ID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE9iamVjdCgpPy4kTmFtZTtcblx0XHRjb25zdCB2YWx1ZUxpc3RCeVF1YWxpZmllciA9IGF3YWl0IHRoaXMubWV0YU1vZGVsLnJlcXVlc3RWYWx1ZUxpc3RJbmZvKGNvbnRleHRQYXRoLCB0cnVlKTtcblxuXHRcdC8vIExvb2sgZm9yIExvY2FsRGF0YVByb3BlcnR5IGluIFZhbHVlTGlzdFBhcmFtZXRlck91dCBvciBWYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCB3aGVyZSB0aGlzIGlzIHRoZSBwYXJhbWV0ZXIgbmFtZVxuXHRcdC8vIFdlIG9ubHkgY29uc2lkZXIgVGV4dEFubm90YXRpb25zIGZvciB0aGlzIGFjdGlvbiBwYXJhbWV0ZXJcblx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbWV0ZXIgPSB2YWx1ZUxpc3RCeVF1YWxpZmllcltcIlwiXS5QYXJhbWV0ZXJzLmZpbmQoXG5cdFx0XHQocGFyYW1ldGVyOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyKSA9PlxuXHRcdFx0XHRwYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0KHBhcmFtZXRlci4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVyT3V0XCIgJiZcblx0XHRcdFx0XHRwYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGggPT09IGxvY2FsRGF0YVByb3BlcnR5KVxuXHRcdCk7XG5cblx0XHRpZiAodmFsdWVMaXN0UGFyYW1ldGVyICYmIHZhbHVlTGlzdFBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSkge1xuXHRcdFx0Y29uc3QgdGV4dFByb3BlcnR5ID0gdmFsdWVMaXN0UGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5O1xuXHRcdFx0Ly8gTm93IHdlIGhhdmUgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgaXMgdGhlIGFubm90YXRlZCB0ZXh0XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBgLyR7dmFsdWVMaXN0QnlRdWFsaWZpZXJbXCJcIl0uQ29sbGVjdGlvblBhdGh9LyR7dGV4dFByb3BlcnR5fWA7XG5cdFx0XHRjb25zdCBwcm9wQW5ub3RhdGlvbnMgPSB0aGlzLm1ldGFNb2RlbC5nZXRPYmplY3QoYCR7cHJvcGVydHlQYXRofUBgKTtcblxuXHRcdFx0aWYgKHByb3BBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl0pIHtcblx0XHRcdFx0Y29uc3QgdGV4dFByb3AgPSBwcm9wQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl07XG5cdFx0XHRcdGNvbnN0IHRleHRQYXRoID0gYC8ke3ZhbHVlTGlzdEJ5UXVhbGlmaWVyW1wiXCJdLkNvbGxlY3Rpb25QYXRofS8ke3RleHRQcm9wLiRQYXRofWA7XG5cdFx0XHRcdHRleHRDb250ZXh0ID0gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQodGV4dFBhdGgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGV4dENvbnRleHQpIHtcblx0XHRcdFx0cmV0dXJuIEFubm90YXRpb25IZWxwZXIuZm9ybWF0KHRleHRDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IHRleHRDb250ZXh0IH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2YWx1ZSBiaW5kaW5nIGZvciBhbiBhY3Rpb24gcGFyYW1ldGVyLiBXZSBhZGQgc3BlY2lhbCBoYW5kbGluZyBmb3IgY3VycmVuY3kgYW5kIHVuaXQgYmVhdXNlIHRoZXkgYXJlIG5vdFxuXHQgKiBwYXJ0IG9mIHRoZSBhbm5vdGF0aW9uIGhlbHBlciBmb3JtYXQgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHBhcmFtIG9JbnRlcmZhY2UgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyBmb3IgdGhlIHZhbHVlIG9mIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRBUERpYWxvZ0JpbmRpbmdWYWx1ZShcblx0XHRwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcixcblx0XHRwYXJhbWV0ZXJDb250ZXh0OiBDb250ZXh0LFxuXHRcdG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZVxuXHQpOiBQcm9taXNlPENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgc3RyaW5nPiB7XG5cdFx0Y29uc3Qgb01vZGVsID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnMgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH1AYCk7XG5cdFx0bGV0IHByb3BlcnR5T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cblx0XHRpZiAoXG5cdFx0XHRvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLklTT0N1cnJlbmN5XCJdIHx8XG5cdFx0XHRvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlVuaXRcIl1cblx0XHQpIHtcblx0XHRcdGNvbnN0IGFjdGlvbk1ldGFQYXRoID0gdGhpcy5hY3Rpb24uaXNCb3VuZFxuXHRcdFx0XHQ/IGAke3RoaXMubWV0YU1vZGVsLmdldE1ldGFQYXRoKHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5nZXRQYXRoKCkpfS8ke2NvbnZlcnRUeXBlcyh0aGlzLm1ldGFNb2RlbCkubmFtZXNwYWNlfS4ke1xuXHRcdFx0XHRcdFx0dGhpcy5hY3Rpb24ubmFtZVxuXHRcdFx0XHQgIH1gXG5cdFx0XHRcdDogYC8ke3RoaXMuYWN0aW9uLm5hbWV9YDtcblx0XHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7YWN0aW9uTWV0YVBhdGh9LyR7cGFyYW1ldGVyLm5hbWV9YCkhO1xuXHRcdFx0cHJvcGVydHlPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KTtcblx0XHRcdHJldHVybiBnZXRWYWx1ZUJpbmRpbmcocHJvcGVydHlPYmplY3RQYXRoLCB7fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBBbm5vdGF0aW9uSGVscGVyLmZvcm1hdChwYXJhbWV0ZXJDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IHBhcmFtZXRlckNvbnRleHQgfSk7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFpR3FCQSxxQkFBcUI7SUE0QnpDLFNBQUFBLHNCQUNrQkMsTUFBYyxFQUNkQyxVQWFoQixFQUNnQkMsZUFBc0QsRUFDdERDLGFBQWlDLEVBQ2pDQyxjQUE4QixFQUM5QztNQXhDRjtNQUNBO01BQ0E7TUFBQSxLQUNRQyxZQUFZLEdBQUcsS0FBSztNQUFBLEtBTXBCQyxVQUFVLEdBQUcsS0FBSztNQUFBLEtBSVRDLG9CQUFvQixHQUE2RCxFQUFFO01BQUEsS0FFbkZDLGNBQWMsR0FBYyxJQUFJQyxTQUFTLENBQUM7UUFDMURDLFlBQVksRUFBRSxDQUFDO01BQ2hCLENBQUMsQ0FBQztNQUFBLEtBS2dCVixNQUFjLEdBQWRBLE1BQWM7TUFBQSxLQUNkQyxVQWFoQixHQWJnQkEsVUFhaEI7TUFBQSxLQUNnQkMsZUFBc0QsR0FBdERBLGVBQXNEO01BQUEsS0FDdERDLGFBQWlDLEdBQWpDQSxhQUFpQztNQUFBLEtBQ2pDQyxjQUE4QixHQUE5QkEsY0FBOEI7TUFFL0MsSUFBSSxDQUFDTyxVQUFVLEdBQUdDLFlBQVksQ0FBQ0MsYUFBYSxDQUFDLElBQUksQ0FBQ2IsTUFBTSxDQUFDO01BQ3pELElBQUksQ0FBQ2MsU0FBUyxHQUFHLElBQUksQ0FBQ2IsVUFBVSxDQUFDYyxLQUFLLENBQUNDLFlBQVksQ0FBQyxDQUFDO01BQ3JELElBQUksQ0FBQ0MsYUFBYSxHQUFHLElBQUksQ0FBQ2hCLFVBQVUsQ0FBQ2lCLElBQUksR0FBR0MsZ0JBQWdCLENBQUMsSUFBSSxDQUFDbEIsVUFBVSxDQUFDaUIsSUFBSSxDQUFDLEdBQUdDLGdC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Q0EsT0FQQztJQUFBamEsTUFBQSxDQVFjOEksdUJBQXVCLEdBQXJDLGVBQWNBLHVCQUF1QkEsQ0FDcEMzSSxTQUEwQixFQUMxQmtELGdCQUF5QixFQUN6QjJXLFVBQXVDLEVBQ2M7TUFDckQsTUFBTW9CLE1BQU0sR0FBR3BCLFVBQVUsQ0FBQ3RXLE9BQU8sQ0FBQytPLFFBQVEsQ0FBQyxDQUFtQjtNQUM5RCxNQUFNNEksWUFBWSxHQUFHckIsVUFBVSxDQUFDdFcsT0FBTyxDQUFDL0IsT0FBTyxDQUFDLENBQUM7TUFDakQsTUFBTTJaLDJCQUEyQixHQUFHRixNQUFNLENBQUMzWCxTQUFTLENBQUMsR0FBRzRYLFlBQVksR0FBRyxDQUFDO01BQ3hFLElBQUlFLGtCQUFpRDtNQUVyRCxJQUNDRCwyQkFBMkIsQ0FBQyxvQ0FBb0MsQ0FBQyxJQUNqRUEsMkJBQTJCLENBQUMsNkJBQTZCLENBQUMsRUFDekQ7UUFDRCxNQUFNL1osY0FBYyxHQUFHLElBQUksQ0FBQ25ELE1BQU0sQ0FBQ29ELE9BQU8sR0FDdkMsR0FBRyxJQUFJLENBQUN0QyxTQUFTLENBQUN1QyxXQUFXLENBQUMsSUFBSSxDQUFDcEQsVUFBVSxDQUFDcUQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUlDLFlBQVksQ0FBQyxJQUFJLENBQUMxQyxTQUFTLENBQUMsQ0FBQzJDLFNBQVMsSUFDOUcsSUFBSSxDQUFDekQsTUFBTSxDQUFDMEQsSUFBSSxFQUNkLEdBQ0YsSUFBSSxJQUFJLENBQUMxRCxNQUFNLENBQUMwRCxJQUFJLEVBQUU7UUFDekIsTUFBTUMsV0FBVyxHQUFHLElBQUksQ0FBQzdDLFNBQVMsQ0FBQzhDLG9CQUFvQixDQUFDLEdBQUdULGNBQWMsSUFBSXBCLFNBQVMsQ0FBQzJCLElBQUksRUFBRSxDQUFFO1FBQy9GeVosa0JBQWtCLEdBQUcvUiwyQkFBMkIsQ0FBQ3pILFdBQVcsQ0FBQztRQUM3RCxPQUFPeVosZUFBZSxDQUFDRCxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUMvQyxDQUFDLE1BQU07UUFDTixPQUFPTCxnQkFBZ0IsQ0FBQ0MsTUFBTSxDQUFDOVgsZ0JBQWdCLENBQUNJLFNBQVMsQ0FBQyxDQUFDLEVBQUU7VUFBRUMsT0FBTyxFQUFFTDtRQUFpQixDQUFDLENBQUM7TUFDNUY7SUFDRCxDQUFDO0lBQUEsT0FBQWxGLHFCQUFBO0VBQUE7RUFBQTRCLFFBQUEsR0FBQTVCLHFCQUFBO0VBQUEsT0FBQTRCLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|