@sapui5/sap.fe.macros 1.141.1 → 1.142.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/Breadcrumbs.js +4 -10
- package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
- package/src/sap/fe/macros/Chart.js +34 -23
- package/src/sap/fe/macros/Chart.tsx +25 -11
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +48 -31
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +51 -26
- package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
- package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
- package/src/sap/fe/macros/CommonHelper.js +14 -24
- package/src/sap/fe/macros/CommonHelper.ts +18 -25
- package/src/sap/fe/macros/Field.js +30 -13
- package/src/sap/fe/macros/Field.ts +60 -30
- package/src/sap/fe/macros/FooterContent.js +5 -2
- package/src/sap/fe/macros/FooterContent.tsx +6 -3
- package/src/sap/fe/macros/KPITag.js +1 -1
- package/src/sap/fe/macros/KPITag.tsx +3 -1
- package/src/sap/fe/macros/MacroAPI.js +3 -2
- package/src/sap/fe/macros/MacroAPI.ts +2 -2
- package/src/sap/fe/macros/MessageButton.js +3 -2
- package/src/sap/fe/macros/MessageButton.tsx +5 -2
- package/src/sap/fe/macros/MicroChart.js +10 -6
- package/src/sap/fe/macros/MicroChart.tsx +8 -2
- package/src/sap/fe/macros/MultiValueField.js +22 -36
- package/src/sap/fe/macros/MultiValueField.tsx +34 -66
- package/src/sap/fe/macros/RichTextEditor.js +3 -4
- package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
- package/src/sap/fe/macros/Status.js +35 -8
- package/src/sap/fe/macros/Status.tsx +23 -2
- package/src/sap/fe/macros/ValueHelp.js +5 -2
- package/src/sap/fe/macros/ValueHelp.tsx +5 -0
- package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
- package/src/sap/fe/macros/chart/Action.js +25 -2
- package/src/sap/fe/macros/chart/Action.ts +13 -0
- package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
- package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
- package/src/sap/fe/macros/chart/ChartDelegate.js +8 -8
- package/src/sap/fe/macros/chart/ChartDelegate.ts +17 -12
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +54 -11
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +70 -11
- package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
- package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
- package/src/sap/fe/macros/controls/FilterBar.js +39 -3
- package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
- package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
- package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
- 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 +37 -9
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +45 -6
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
- package/src/sap/fe/macros/field/FieldFormatOptions.js +3 -3
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
- package/src/sap/fe/macros/field/FieldHelper.js +4 -3
- package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
- package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
- package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
- package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
- package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
- package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
- package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
- package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
- package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
- package/src/sap/fe/macros/filter/FilterUtils.js +100 -36
- package/src/sap/fe/macros/filter/FilterUtils.ts +127 -39
- package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
- package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +10 -7
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +31 -16
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +4 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
- package/src/sap/fe/macros/form/Form.block.js +27 -2
- package/src/sap/fe/macros/form/Form.block.ts +31 -11
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
- package/src/sap/fe/macros/form/FormContainer.block.js +96 -65
- package/src/sap/fe/macros/form/FormContainer.block.ts +104 -65
- package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
- package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
- package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
- package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
- package/src/sap/fe/macros/insights/InsightsService.js +3 -2
- package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
- package/src/sap/fe/macros/internal/DataPoint.js +7 -8
- package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
- package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
- package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
- package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
- package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
- package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
- package/src/sap/fe/macros/library.js +3 -3
- package/src/sap/fe/macros/library.ts +2 -0
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
- package/src/sap/fe/macros/messagebundle.properties +7 -5
- package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
- package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
- package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
- package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
- package/src/sap/fe/macros/messagebundle_da.properties +12 -3
- package/src/sap/fe/macros/messagebundle_de.properties +16 -7
- package/src/sap/fe/macros/messagebundle_el.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_es.properties +12 -3
- package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
- package/src/sap/fe/macros/messagebundle_et.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
- package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
- package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
- package/src/sap/fe/macros/messagebundle_id.properties +18 -9
- package/src/sap/fe/macros/messagebundle_it.properties +12 -3
- package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
- package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
- package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
- package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
- package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
- package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
- package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
- package/src/sap/fe/macros/messagebundle_no.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
- package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
- package/src/sap/fe/macros/messagebundle_th.properties +11 -2
- package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
- package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
- package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
- package/src/sap/fe/macros/table/Action.js +15 -2
- package/src/sap/fe/macros/table/Action.ts +11 -1
- package/src/sap/fe/macros/table/ActionGroup.js +15 -2
- package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
- package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
- package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
- package/src/sap/fe/macros/table/ActionOverride.js +14 -2
- package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
- package/src/sap/fe/macros/table/MdcTableTemplate.js +91 -10
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +131 -10
- package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
- package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
- package/src/sap/fe/macros/table/Table.block.js +70 -29
- package/src/sap/fe/macros/table/Table.block.tsx +65 -12
- package/src/sap/fe/macros/table/TableAPI.js +169 -131
- package/src/sap/fe/macros/table/TableAPI.ts +58 -28
- package/src/sap/fe/macros/table/TableDefinition.js +19 -2
- package/src/sap/fe/macros/table/TableDefinition.ts +17 -1
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +4 -3
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +8 -9
- package/src/sap/fe/macros/table/TableHelper.js +5 -2
- package/src/sap/fe/macros/table/TableHelper.ts +5 -2
- package/src/sap/fe/macros/table/TableRuntime.js +2 -2
- package/src/sap/fe/macros/table/TableRuntime.ts +4 -6
- package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
- package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +67 -26
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +108 -118
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +2 -2
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +1 -1
- package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
- package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +6 -5
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +10 -4
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
- package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
- package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
- package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
- package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
|
@@ -113,7 +113,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/CommonUti
|
|
|
113
113
|
const propertyPath = getTargetObjectPath(dataModelPropertyPath, true);
|
|
114
114
|
const textAnnotation = property.annotations?.Common?.Text,
|
|
115
115
|
textArrangement = textAnnotation?.annotations?.UI?.TextArrangement?.toString(),
|
|
116
|
-
displayMode = textAnnotation && textArrangement && getDisplayMode(property);
|
|
116
|
+
displayMode = textAnnotation && textArrangement && getDisplayMode(property, dataModelPropertyPath.targetEntityType);
|
|
117
117
|
if (displayMode === "Description") {
|
|
118
118
|
relatedProperties[additionalPropertyPath] = additionalProperty;
|
|
119
119
|
} else if (displayMode && displayMode !== "Value" || !textAnnotation) {
|
|
@@ -168,8 +168,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/CommonUti
|
|
|
168
168
|
} else {
|
|
169
169
|
propertyInfo.path = columnDef.path;
|
|
170
170
|
propertyInfo.dataType = typeConfig.className;
|
|
171
|
-
propertyInfo.constraints =
|
|
172
|
-
propertyInfo.formatOptions =
|
|
171
|
+
propertyInfo.constraints = typeConfig.typeInstance.oConstraints;
|
|
172
|
+
propertyInfo.formatOptions = typeConfig.typeInstance.oFormatOptions;
|
|
173
173
|
propertyInfo.sortable = isSortableProperty(sortRestrictionsInfo, columnDef);
|
|
174
174
|
propertyInfo.filterable = isFilterableProperty(filterRestrictionsInfo, columnDef);
|
|
175
175
|
propertyInfo.maxConditions = getPropertyMaxConditions(filterRestrictionsInfo, columnDef);
|
|
@@ -464,4 +464,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/CommonUti
|
|
|
464
464
|
}
|
|
465
465
|
return ODataTableDelegate;
|
|
466
466
|
}, false);
|
|
467
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPRGF0YVRhYmxlRGVsZWdhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJUYWJsZURlbGVnYXRlIiwiZmV0Y2hQcm9wZXJ0aWVzIiwidGFibGUiLCJtb2RlbCIsIl9nZXRNb2RlbCIsInByb3BlcnRpZXMiLCJfY3JlYXRlUHJvcGVydHlJbmZvcyIsImNyZWF0ZUludGVybmFsQmluZGluZ0NvbnRleHQiLCJzZXRTb3J0Q29uZGl0aW9ucyIsIk1hY3Jvc0RlbGVnYXRlVXRpbCIsInNldENhY2hlZFByb3BlcnRpZXMiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNldFByb3BlcnR5Iiwic29ydENvbmRpdGlvbnNDRCIsImRhdGEiLCJyYXdTb3J0Q29uZGl0aW9ucyIsIkNvbW1vbkhlbHBlciIsInBhcnNlQ3VzdG9tRGF0YSIsInNvcnRlcnMiLCJmb3JFYWNoIiwic29ydENvbmRpdGlvbiIsImluZm9OYW1lIiwiY29udmVydFByb3BlcnR5UGF0aFRvSW5mb05hbWUiLCJuYW1lIiwicHJvcGVydHlQYXRoIiwicHJvcGVydHlJbmZvIiwiZmluZCIsImNvbHVtbiIsInByb3BlcnR5SW5mb3MiLCJwYXRoIiwia2V5IiwiZGlhbG9nIiwiaXNBIiwiZ2V0UGFyZW50IiwiaW50ZXJuYWxNb2RlbCIsImdldE1vZGVsIiwiaW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsIm5ld0ludGVybmFsQmluZGluZ0NvbnRleHRQYXRoIiwiZ2V0UGF0aCIsImdldElkIiwiZ2V0UHJvcGVydHkiLCJuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyIsImRhdGFNb2RlbFByb3BlcnR5UGF0aCIsImRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgiLCJnZXRBZGRpdGlvbmFsUHJvcGVydHkiLCJyZWxhdGVkUHJvcGVydGllcyIsInRhcmdldE9iamVjdCIsImFkZGl0aW9uYWxQcm9wZXJ0eSIsImFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwicHJvcGVydHkiLCJ0ZXh0QW5ub3RhdGlvbiIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiVGV4dCIsInRleHRBcnJhbmdlbWVudCIsIlVJIiwiVGV4dEFycmFuZ2VtZW50IiwidG9TdHJpbmciLCJkaXNwbGF5TW9kZSIsImdldERpc3BsYXlNb2RlIiwibWV0YWRhdGFJbmZvIiwiZ2V0RGVsZWdhdGUiLCJwYXlsb2FkIiwiZW50aXR5U2V0UGF0aCIsImNvbGxlY3Rpb25OYW1lIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicmVxdWVzdE9iamVjdCIsInRoZW4iLCJlbnRpdHlTZXRBbm5vdGF0aW9ucyIsInNvcnRSZXN0cmljdGlvbnNJbmZvIiwiZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8iLCJmaWx0ZXJSZXN0cmljdGlvbnMiLCJmaWx0ZXJSZXN0cmljdGlvbnNJbmZvIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zSW5mbyIsImZpbHRlckZ1bmN0aW9ucyIsImNhc2VTZW5zaXRpdmUiLCJNb2RlbEhlbHBlciIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsImN1c3RvbURhdGFGb3JDb2x1bW5zIiwiZ2V0Q3VzdG9tRGF0YSIsInByb3BlcnRpZXNUb0JlQ3JlYXRlZCIsImRhdGFNb2RlbEVudGl0eVBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXRDb250ZXh0IiwiY3VzdG9tRGF0YSIsImNvbHVtbkRlZiIsInR5cGVDb25maWciLCJpc1R5cGVGaWx0ZXJhYmxlIiwiJFR5cGUiLCJnZXRUeXBlTWFwIiwiZ2V0VHlwZUNvbmZpZyIsIlR5cGVNYXAiLCJsYWJlbCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwidGFyZ2V0UHJvcGVydHlQYXRoIiwidHlwZSIsInByb3BlcnR5VHlwZUNvbmZpZyIsImZvcm1hdE9wdGlvbnMiLCJjb25zdHJhaW50cyIsInJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyIsInJlbGF0ZWRQcm9wZXJ0eVBhdGhzIiwia2V5cyIsImxlbmd0aCIsImRhdGFUeXBlIiwiY2xhc3NOYW1lIiwic29ydGFibGUiLCJpc1NvcnRhYmxlUHJvcGVydHkiLCJmaWx0ZXJhYmxlIiwiaXNGaWx0ZXJhYmxlUHJvcGVydHkiLCJtYXhDb25kaXRpb25zIiwiZ2V0UHJvcGVydHlNYXhDb25kaXRpb25zIiwicHVzaCIsInJlbGF0ZWRDb2x1bW5zIiwiY3JlYXRlUmVsYXRlZFByb3BlcnRpZXMiLCJjb25jYXQiLCJ1cGRhdGVCaW5kaW5nSW5mbyIsIm1kY1RhYmxlIiwiYmluZGluZ0luZm8iLCJhcHBseSIsImNvbGxlY3Rpb25QYXRoIiwicGFyYW1ldGVycyIsImZpbHRlckJhciIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldEZpbHRlciIsImlzRmlsdGVyRW5hYmxlZCIsImlzRmlsdGVyaW5nRW5hYmxlZCIsImNvbmRpdGlvbnMiLCJpbm5lckZpbHRlckluZm8iLCJvdXRlckZpbHRlckluZm8iLCJmaWx0ZXJzIiwidGFibGVQcm9wZXJ0aWVzIiwiZ2V0Q2FjaGVkUHJvcGVydGllcyIsImdldENvbmRpdGlvbnMiLCJGaWx0ZXJVdGlsIiwiZ2V0RmlsdGVySW5mbyIsImlzVHJlZVRhYmxlIiwiaGllcmFyY2h5UXVhbGlmaWVyIiwiJCRhZ2dyZWdhdGlvbiIsImV4cGFuZFRvIiwiaW5pdGlhbEV4cGFuc2lvbkxldmVsIiwicGFyYW1ldGVyTmFtZXMiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRQYXJhbWV0ZXJOYW1lcyIsIl91cGRhdGVQcm9wZXJ0eUluZm8iLCJwYXJhbWV0ZXJQYXRoIiwiZ2V0UGFyYW1ldGVyc0luZm8iLCIkc2VhcmNoIiwiQ29tbW9uVXRpbHMiLCJub3JtYWxpemVTZWFyY2hUZXJtIiwiZ2V0U2VhcmNoIiwidW5kZWZpbmVkIiwic2VhcmNoIiwiTnVtYmVyIiwiTUFYX1NBRkVfSU5URUdFUiIsIiQkc2hhcmVkUmVxdWVzdCIsIl9hcHBseURlZmF1bHRTb3J0aW5nIiwiJHNlbGVjdCIsInJlZHVjZSIsInF1ZXJ5IiwiaW5jbHVkZXMiLCIkY291bnQiLCJpc0RyYWZ0U3VwcG9ydGVkIiwiRmlsdGVyIiwiRmlsdGVyT3BlcmF0b3IiLCJFUSIsIlByb21pc2UiLCJyZXNvbHZlIiwiYXR0YWNoRXZlbnRPbmNlIiwic29ydGVyIiwiZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUiLCJTb3J0ZXIiLCJhVGFibGVQcm9wZXJ0aWVzIiwib01EQ1RhYmxlIiwibUNvbmRpdGlvbnMiLCJvTWV0YWRhdGFJbmZvIiwiYUNvbmRpdGlvbktleSIsIm9NZXRhTW9kZWwiLCJjb25kaXRpb25LZXkiLCJjb25kaXRpb25LZXlUeXBlIiwiZ2V0T2JqZWN0IiwidGFibGVQcm9wZXJ0eSIsImluZGV4IiwiZmluZEluZGV4Iiwib0NvbHVtbkRlZiIsInR5cGVJbnN0YW5jZSIsImJhc2VUeXBlIiwib0Zvcm1hdE9wdGlvbnMiLCJvQ29uc3RyYWludHMiLCJ1cGRhdGVCaW5kaW5nIiwib1RhYmxlIiwib0JpbmRpbmdJbmZvIiwib0JpbmRpbmciLCJiTmVlZE1hbnVhbFJlZnJlc2giLCJvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsInNNYW51YWxVcGRhdGVQcm9wZXJ0eUtleSIsInNMYXN0U2VhcmNoIiwic0xhc3RGaWx0ZXIiLCJiUGVuZGluZ01hbnVhbFVwZGF0ZSIsImxhc3RTZWFyY2giLCJsYXN0RmlsdGVyIiwib1Jvd0JpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwiZGVlcEVxdWFsIiwicmVxdWVzdFJlZnJlc2giLCJnZXRHcm91cElkIiwiZmluYWxseSIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJmaXJlRXZlbnQiLCJleGlzdGluZ0NvbHVtbnMiLCJyZWxhdGVkUHJvcGVydHlOYW1lTWFwIiwicmVsYXRlZENvbHVtbiIsIm5ld05hbWUiLCJ2YWx1ZUhlbHBDb2x1bW5UeXBlQ29uZmlnIiwidmFsdWVIZWxwVGFibGVDb2x1bW4iLCJnZXRMYWJlbCIsIm1hcCIsImNvbHVtbk5hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsImlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24iLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoIiwiZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZURlbGVnYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0VHlwZUNvbmZpZyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlclJlc3RyaWN0aW9uc0luZm9UeXBlLCBTb3J0UmVzdHJpY3Rpb25zSW5mb1R5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IHsgZ2V0RmlsdGVyUmVzdHJpY3Rpb25zSW5mbywgZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8sIGlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0VGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgsXG5cdGdldExhYmVsXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERlZmF1bHRUeXBlRm9yRWRtVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IHsgaXNUeXBlRmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uQmluZGluZ0luZm8sIEZpbHRlckluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db2xsZWN0aW9uQmluZGluZ0luZm9cIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgTWFjcm9zRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJDb25kaXRpb25zIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UGF0aCwgaXNGaWx0ZXJhYmxlUHJvcGVydHksIGlzU29ydGFibGVQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9UYWJsZURlbGVnYXRlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBZ2dyZWdhdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBNRENUYWJsZVByb3BlcnR5SW5mbyBhcyBQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBDb25kaXRpb25PYmplY3QgfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgVGFibGVEZWxlZ2F0ZSBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UYWJsZURlbGVnYXRlXCI7XG5pbXBvcnQgVHlwZU1hcCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UeXBlTWFwXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L3V0aWwvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgRmlsdGVyVXRpbCBmcm9tIFwic2FwL3VpL21kYy91dGlsL0ZpbHRlclV0aWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG50eXBlIENvbXBsZXhQcm9wZXJ0eU1hcCA9IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5PjtcblxudHlwZSBNZGNUYWJsZURlbGVnYXRlID0geyBuYW1lOiBzdHJpbmc7IHBheWxvYWQ6IFBheWxvYWQgfTtcblxudHlwZSBQYXlsb2FkID0ge1xuXHRjb2xsZWN0aW9uTmFtZT86IHN0cmluZztcblx0Y29sbGVjdGlvblBhdGg/OiBzdHJpbmc7XG5cdGRlZmF1bHRTb3J0UHJvcGVydHlOYW1lPzogc3RyaW5nO1xuXHRoaWVyYXJjaHlRdWFsaWZpZXI/OiBzdHJpbmc7XG5cdGluaXRpYWxFeHBhbnNpb25MZXZlbD86IG51bWJlcjtcbn07XG4vKipcbiAqIFRlc3QgZGVsZWdhdGUgZm9yIE9EYXRhIFY0LlxuICovXG5jb25zdCBPRGF0YVRhYmxlRGVsZWdhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBUYWJsZURlbGVnYXRlKTtcblxuLyoqXG4gKiBGZXRjaGVzIHRoZSByZWxldmFudCBtZXRhZGF0YSBmb3IgdGhlIHRhYmxlIGFuZCByZXR1cm5zIHByb3BlcnR5IGluZm8gYXJyYXkuXG4gKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG4gKiBAcmV0dXJucyBBcnJheSBvZiBwcm9wZXJ0eSBpbmZvXG4gKi9cbk9EYXRhVGFibGVEZWxlZ2F0ZS5mZXRjaFByb3BlcnRpZXMgPSBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTxQcm9wZXJ0eUluZm8+IHtcblx0Y29uc3QgbW9kZWwgPSBhd2FpdCB0aGlzLl9nZXRNb2RlbCh0YWJsZSk7XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBhd2FpdCB0aGlzLl9jcmVhdGVQcm9wZXJ0eUluZm9zKHRhYmxlLCBtb2RlbCk7XG5cdE9EYXRhVGFibGVEZWxlZ2F0ZS5jcmVhdGVJbnRlcm5hbEJpbmRpbmdDb250ZXh0KHRhYmxlKTtcblx0T0RhdGFUYWJsZURlbGVnYXRlLnNldFNvcnRDb25kaXRpb25zKHRhYmxlLCBwcm9wZXJ0aWVzKTtcblx0TWFjcm9zRGVsZWdhdGVVdGlsLnNldENhY2hlZFByb3BlcnRpZXModGFibGUsIHByb3BlcnRpZXMpO1xuXHQodGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0KS5zZXRQcm9wZXJ0eShcInRhYmxlUHJvcGVydGllc0F2YWlsYWJsZVwiLCB0cnVlKTtcblx0cmV0dXJuIHByb3BlcnRpZXM7XG59O1xuXG4vKipcbiAqIFNldCBzb3J0IGNvbmRpdGlvbnMgb24gdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlIFZhbHVlaGVscCB0YWJsZSBpbnN0YW5jZVxuICogQHBhcmFtIHByb3BlcnRpZXMgUHJvcGVydHlJbmZvIGFycmF5XG4gKi9cbk9EYXRhVGFibGVEZWxlZ2F0ZS5zZXRTb3J0Q29uZGl0aW9ucyA9IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIHByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdKTogdm9pZCB7XG5cdGNvbnN0IHNvcnRDb25kaXRpb25zQ0QgPSB0YWJsZS5kYXRhKFwic29ydENvbmRpdGlvbnNcIik7XG5cdGNvbnN0IHJhd1NvcnRDb25kaXRpb25zID0gQ29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShzb3J0Q29uZGl0aW9uc0NEKSBhcyB7IHNvcnRlcnM6IHsgbmFtZTogc3RyaW5nIH1bXSB9IHwgdW5kZWZpbmVkO1xuXHRpZiAocmF3U29ydENvbmRpdGlvbnM/LnNvcnRlcnMpIHtcblx0XHRyYXdTb3J0Q29uZGl0aW9ucy5zb3J0ZXJzLmZvckVhY2goKHNvcnRDb25kaXRpb24pID0+IHtcblx0XHRcdGNvbnN0IGluZm9OYW1lID0gT0RhdGFUYWJsZURlbGVnYXRlLmNvbnZlcnRQcm9wZXJ0eVBhdGhUb0luZm9OYW1lKHNvcnRDb25kaXRpb24ubmFtZSwgcHJvcGVydGllcyk7XG5cdFx0XHRpZiAoaW5mb05hbWUgJiYgaW5mb05hbWUgIT09IHNvcnRDb25kaXRpb24ubmFtZSkge1xuXHRcdFx0XHRzb3J0Q29uZGl0aW9uLm5hbWUgPSBpbmZvTmFtZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHR0YWJsZS5zZXRTb3J0Q29uZGl0aW9ucyh7IC4uLnJhd1NvcnRDb25kaXRpb25zIH0pO1xuXHR9XG59O1xuXG4vKipcbiAqIENvbnZlcnQgYSBwcm9wZXJ0eSBwYXRoIHRvIGl0cyBjb3JyZXNwb25kaW5nIGluZm8gbmFtZS5cbiAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggUHJvcGVydHkgcGF0aCB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcGFyYW0gcHJvcGVydGllcyBUYWJsZSBQcm9wZXJ0eUluZm8gYXJyYXlcbiAqIEByZXR1cm5zIFByb3BlcnR5IGluZm8gbmFtZSBpZiBmb3VuZCwgb3RoZXJ3aXNlIHJldHVybnMgdGhlIG9yaWdpbmFsIHByb3BlcnR5IHBhdGguXG4gKi9cbk9EYXRhVGFibGVEZWxlZ2F0ZS5jb252ZXJ0UHJvcGVydHlQYXRoVG9JbmZvTmFtZSA9IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IHN0cmluZywgcHJvcGVydGllczogUHJvcGVydHlJbmZvW10pOiBzdHJpbmcge1xuXHRjb25zdCBwcm9wZXJ0eUluZm8gPSBwcm9wZXJ0aWVzLmZpbmQoKGNvbHVtbikgPT4ge1xuXHRcdHJldHVybiAhY29sdW1uLnByb3BlcnR5SW5mb3MgJiYgY29sdW1uLnBhdGggPT09IHByb3BlcnR5UGF0aDtcblx0fSk7XG5cdHJldHVybiBwcm9wZXJ0eUluZm8/LmtleSA/PyBwcm9wZXJ0eVBhdGg7XG59O1xuXG5PRGF0YVRhYmxlRGVsZWdhdGUuY3JlYXRlSW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiB2b2lkIHtcblx0bGV0IGRpYWxvZzogTWFuYWdlZE9iamVjdCB8IG51bGwgPSB0YWJsZTtcblx0d2hpbGUgKGRpYWxvZyAmJiAhZGlhbG9nLmlzQShcInNhcC51aS5tZGMudmFsdWVoZWxwLkRpYWxvZ1wiKSkge1xuXHRcdGRpYWxvZyA9IChkaWFsb2cgYXMgTWFuYWdlZE9iamVjdCkuZ2V0UGFyZW50KCk7XG5cdH1cblxuXHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGFibGUuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cblx0aWYgKGRpYWxvZyAmJiBpbnRlcm5hbE1vZGVsKSB7XG5cdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IGRpYWxvZy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGxldCBuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0UGF0aDtcblx0XHRpZiAoaW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0bmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dFBhdGggPSBpbnRlcm5hbEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSArIGA6OlZIRGlhbG9nOjoke2RpYWxvZy5nZXRJZCgpfTo6dGFibGVgO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0UGF0aCA9IGAvYnVpbGRpbmdibG9ja3MvJHt0YWJsZS5nZXRJZCgpfWA7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL2J1aWxkaW5nYmxvY2tzXCIsIHsgLi4uaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9idWlsZGluZ2Jsb2Nrc1wiKSB9KTtcblx0XHR9XG5cdFx0Y29uc3QgbmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IGludGVybmFsTW9kZWwuYmluZENvbnRleHQobmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dFBhdGgpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdHRhYmxlLnNldEJpbmRpbmdDb250ZXh0KG5ld0ludGVybmFsQmluZGluZ0NvbnRleHQsIFwiaW50ZXJuYWxcIik7XG5cdH1cbn07XG5cbi8qKlxuICogQ29sbGVjdCByZWxhdGVkIHByb3BlcnRpZXMgZnJvbSBhIHByb3BlcnR5J3MgYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gZGF0YU1vZGVsUHJvcGVydHlQYXRoIFRoZSBtb2RlbCBvYmplY3QgcGF0aCBvZiB0aGUgcHJvcGVydHkuXG4gKiBAcmV0dXJucyBUaGUgcmVsYXRlZCBwcm9wZXJ0aWVzIHRoYXQgd2VyZSBpZGVudGlmaWVkLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKGRhdGFNb2RlbFByb3BlcnR5UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pOiBDb21wbGV4UHJvcGVydHlNYXAge1xuXHRjb25zdCBkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHlQYXRoID0gZ2V0QWRkaXRpb25hbFByb3BlcnR5KGRhdGFNb2RlbFByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0aWVzOiBDb21wbGV4UHJvcGVydHlNYXAgPSB7fTtcblx0aWYgKGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eVBhdGg/LnRhcmdldE9iamVjdCkge1xuXHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eSA9IGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgsIHRydWUpO1xuXG5cdFx0Y29uc3QgcHJvcGVydHkgPSBkYXRhTW9kZWxQcm9wZXJ0eVBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgoZGF0YU1vZGVsUHJvcGVydHlQYXRoLCB0cnVlKTtcblxuXHRcdGNvbnN0IHRleHRBbm5vdGF0aW9uID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCxcblx0XHRcdHRleHRBcnJhbmdlbWVudCA9IHRleHRBbm5vdGF0aW9uPy5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudD8udG9TdHJpbmcoKSxcblx0XHRcdGRpc3BsYXlNb2RlID0gdGV4dEFubm90YXRpb24gJiYgdGV4dEFycmFuZ2VtZW50ICYmIGdldERpc3BsYXlNb2RlKHByb3BlcnR5KTtcblxuXHRcdGlmIChkaXNwbGF5TW9kZSA9PT0gXCJEZXNjcmlwdGlvblwiKSB7XG5cdFx0XHRyZWxhdGVkUHJvcGVydGllc1thZGRpdGlvbmFsUHJvcGVydHlQYXRoXSA9IGFkZGl0aW9uYWxQcm9wZXJ0eTtcblx0XHR9IGVsc2UgaWYgKChkaXNwbGF5TW9kZSAmJiBkaXNwbGF5TW9kZSAhPT0gXCJWYWx1ZVwiKSB8fCAhdGV4dEFubm90YXRpb24pIHtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5UGF0aF0gPSBwcm9wZXJ0eTtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzW2FkZGl0aW9uYWxQcm9wZXJ0eVBhdGhdID0gYWRkaXRpb25hbFByb3BlcnR5O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVsYXRlZFByb3BlcnRpZXM7XG59XG5cbk9EYXRhVGFibGVEZWxlZ2F0ZS5fY3JlYXRlUHJvcGVydHlJbmZvcyA9IGFzeW5jIGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIG1vZGVsOiBPRGF0YU1vZGVsKTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRjb25zdCBtZXRhZGF0YUluZm8gPSAodGFibGUuZ2V0RGVsZWdhdGUoKSBhcyB7IHBheWxvYWQ6IFBheWxvYWQgfSkucGF5bG9hZDtcblx0Y29uc3QgcHJvcGVydGllczogUHJvcGVydHlJbmZvW10gPSBbXTtcblx0Y29uc3QgZW50aXR5U2V0UGF0aCA9IGAvJHttZXRhZGF0YUluZm8uY29sbGVjdGlvbk5hbWV9YDtcblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cblx0cmV0dXJuIG1ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9QGApLnRoZW4oZnVuY3Rpb24gKGVudGl0eVNldEFubm90YXRpb25zOiBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3Qgc29ydFJlc3RyaWN0aW9uc0luZm8gPSBnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbyhlbnRpdHlTZXRBbm5vdGF0aW9ucyk7XG5cdFx0Y29uc3QgZmlsdGVyUmVzdHJpY3Rpb25zID0gZW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIl07XG5cdFx0Y29uc3QgZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyA9IGdldEZpbHRlclJlc3RyaWN0aW9uc0luZm8oZmlsdGVyUmVzdHJpY3Rpb25zKTtcblx0XHRjb25zdCBmaWx0ZXJGdW5jdGlvbnMgPSBlbnRpdHlTZXRBbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlckZ1bmN0aW9uc1wiXTtcblx0XHRjb25zdCBjYXNlU2Vuc2l0aXZlID0gTW9kZWxIZWxwZXIuaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKG1ldGFNb2RlbCwgZmlsdGVyRnVuY3Rpb25zKTtcblx0XHRjb25zdCBjdXN0b21EYXRhRm9yQ29sdW1ucyA9IE1hY3Jvc0RlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHtcblx0XHRcdGN1c3RvbURhdGE6IChQcm9wZXJ0eUluZm8gJiB7ICRUeXBlOiBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlIH0pW107XG5cdFx0fT4odGFibGUsIFwiY29sdW1uc1wiKSE7XG5cdFx0Y29uc3QgcHJvcGVydGllc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4gPSB7fTtcblx0XHRjb25zdCBkYXRhTW9kZWxFbnRpdHlQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKCh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpLmdldENvbnRleHQoZW50aXR5U2V0UGF0aCkpO1xuXHRcdGN1c3RvbURhdGFGb3JDb2x1bW5zLmN1c3RvbURhdGEuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uRGVmOiBQcm9wZXJ0eUluZm8gJiB7ICRUeXBlOiBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlIH0pIHtcblx0XHRcdGxldCB0eXBlQ29uZmlnID0gaXNUeXBlRmlsdGVyYWJsZShjb2x1bW5EZWYuJFR5cGUpXG5cdFx0XHRcdD8gdGFibGUuZ2V0VHlwZU1hcCgpLmdldFR5cGVDb25maWcoY29sdW1uRGVmLiRUeXBlKVxuXHRcdFx0XHQ6IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvID0ge1xuXHRcdFx0XHRrZXk6IGNvbHVtbkRlZi5wYXRoISxcblx0XHRcdFx0bGFiZWw6IGNvbHVtbkRlZi5sYWJlbFxuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3QgZGF0YU1vZGVsUHJvcGVydHlQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHk+KGRhdGFNb2RlbEVudGl0eVBhdGgsIGNvbHVtbkRlZi5wYXRoKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5ID0gZGF0YU1vZGVsUHJvcGVydHlQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0XHRcdGlmIChwcm9wZXJ0eSkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRQcm9wZXJ0eVBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbFByb3BlcnR5UGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdGlmIChpc1R5cGVGaWx0ZXJhYmxlKHByb3BlcnR5LnR5cGUgYXMga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZSkpIHtcblx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKHByb3BlcnR5KTtcblx0XHRcdFx0XHR0eXBlQ29uZmlnID1cblx0XHRcdFx0XHRcdFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPz8gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIixcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50c1xuXHRcdFx0XHRcdFx0KSA/PyB0eXBlQ29uZmlnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vQ2hlY2sgaWYgdGhlcmUgaXMgYW4gYWRkaXRpb25hbCBwcm9wZXJ0eSBsaW5rZWQgdG8gdGhlIHByb3BlcnR5IGFzIGEgVW5pdCwgQ3VycmVuY3ksIFRpbWV6b25lIG9yIHRleHRBcnJhbmdlbWVudFxuXHRcdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydGllc0luZm8gPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoZGF0YU1vZGVsUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnR5UGF0aHM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvKTtcblxuXHRcdFx0XHRpZiAocmVsYXRlZFByb3BlcnR5UGF0aHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MgPSByZWxhdGVkUHJvcGVydHlQYXRocztcblx0XHRcdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eVBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRcdFx0XHRcdHByb3BlcnRpZXNUb0JlQ3JlYXRlZFtwYXRoXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mb1twYXRoXTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQvLyBBbHNvIGFkZCBwcm9wZXJ0eSBmb3IgdGhlIGluT3V0IFBhcmFtZXRlcnMgb24gdGhlIFZhbHVlSGVscCB3aGVuIHRleHRBcnJhbmdlbWVudCBpcyBzZXQgdG8gI1RleHRPbmx5XG5cdFx0XHRcdFx0Ly8gSXQgd2lsbCBub3QgYmUgbGlua2VkIHRvIHRoZSBjb21wbGV4IFByb3BlcnR5IChCQ1AgMjI3MDE0MTE1NClcblx0XHRcdFx0XHRpZiAoIXJlbGF0ZWRQcm9wZXJ0eVBhdGhzLmZpbmQoKHBhdGgpID0+IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mb1twYXRoXSA9PT0gcHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0aWVzVG9CZUNyZWF0ZWRbdGFyZ2V0UHJvcGVydHlQYXRoXSA9IHByb3BlcnR5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8ucGF0aCA9IGNvbHVtbkRlZi5wYXRoO1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mby5kYXRhVHlwZSA9IHR5cGVDb25maWcuY2xhc3NOYW1lO1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mby5jb25zdHJhaW50cyA9IGNvbHVtbkRlZi5jb25zdHJhaW50cztcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZm9ybWF0T3B0aW9ucyA9IGNvbHVtbkRlZi5mb3JtYXRPcHRpb25zO1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mby5zb3J0YWJsZSA9IGlzU29ydGFibGVQcm9wZXJ0eShzb3J0UmVzdHJpY3Rpb25zSW5mbywgY29sdW1uRGVmKTtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZmlsdGVyYWJsZSA9IGlzRmlsdGVyYWJsZVByb3BlcnR5KGZpbHRlclJlc3RyaWN0aW9uc0luZm8sIGNvbHVtbkRlZik7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLm1heENvbmRpdGlvbnMgPSBnZXRQcm9wZXJ0eU1heENvbmRpdGlvbnMoZmlsdGVyUmVzdHJpY3Rpb25zSW5mbywgY29sdW1uRGVmKTtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uY2FzZVNlbnNpdGl2ZSA9IGNhc2VTZW5zaXRpdmU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHByb3BlcnR5SW5mby5wYXRoID0gY29sdW1uRGVmLnBhdGg7XG5cdFx0XHRcdHByb3BlcnR5SW5mby5jYXNlU2Vuc2l0aXZlID0gY2FzZVNlbnNpdGl2ZTtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmRhdGFUeXBlID0gdHlwZUNvbmZpZy5jbGFzc05hbWU7XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlJbmZvKTtcblx0XHR9KTtcblx0XHRjb25zdCByZWxhdGVkQ29sdW1ucyA9IGNyZWF0ZVJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0cHJvcGVydGllc1RvQmVDcmVhdGVkLFxuXHRcdFx0cHJvcGVydGllcyxcblx0XHRcdHNvcnRSZXN0cmljdGlvbnNJbmZvLFxuXHRcdFx0ZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyxcblx0XHRcdGNhc2VTZW5zaXRpdmVcblx0XHQpO1xuXHRcdHJldHVybiBwcm9wZXJ0aWVzLmNvbmNhdChyZWxhdGVkQ29sdW1ucyk7XG5cdH0pO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBiaW5kaW5nIGluZm8gd2l0aCB0aGUgcmVsZXZhbnQgcGF0aCBhbmQgbW9kZWwgZnJvbSB0aGUgbWV0YWRhdGEuXG4gKiBAcGFyYW0gbWRjVGFibGUgVGhlIE1EQ1RhYmxlIGluc3RhbmNlXG4gKiBAcGFyYW0gYmluZGluZ0luZm8gVGhlIGJpbmRpbmdJbmZvIG9mIHRoZSB0YWJsZVxuICovXG5PRGF0YVRhYmxlRGVsZWdhdGUudXBkYXRlQmluZGluZ0luZm8gPSBmdW5jdGlvbiAobWRjVGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKTogdm9pZCB7XG5cdFRhYmxlRGVsZWdhdGUudXBkYXRlQmluZGluZ0luZm8uYXBwbHkodGhpcywgW21kY1RhYmxlLCBiaW5kaW5nSW5mb10pO1xuXG5cdGNvbnN0IG1ldGFkYXRhSW5mbyA9IChtZGNUYWJsZS5nZXREZWxlZ2F0ZSgpIGFzIE1kY1RhYmxlRGVsZWdhdGUpLnBheWxvYWQ7XG5cblx0aWYgKG1ldGFkYXRhSW5mbykge1xuXHRcdGJpbmRpbmdJbmZvLnBhdGggPSBiaW5kaW5nSW5mbz8ucGF0aCB8fCBtZXRhZGF0YUluZm8uY29sbGVjdGlvblBhdGggfHwgYC8ke21ldGFkYXRhSW5mby5jb2xsZWN0aW9uTmFtZX1gO1xuXHR9XG5cblx0YmluZGluZ0luZm8ucGFyYW1ldGVycyA9IGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMgfHwge307XG5cblx0Y29uc3QgZmlsdGVyQmFyID0gRWxlbWVudC5nZXRFbGVtZW50QnlJZChtZGNUYWJsZS5nZXRGaWx0ZXIoKSkgYXMgRmlsdGVyQmFyLFxuXHRcdGlzRmlsdGVyRW5hYmxlZCA9IG1kY1RhYmxlLmlzRmlsdGVyaW5nRW5hYmxlZCgpO1xuXHRsZXQgY29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPjtcblx0bGV0IGlubmVyRmlsdGVySW5mbywgb3V0ZXJGaWx0ZXJJbmZvOiBGaWx0ZXJJbmZvO1xuXHRjb25zdCBmaWx0ZXJzID0gW107XG5cdGNvbnN0IHRhYmxlUHJvcGVydGllcyA9IE1hY3Jvc0RlbGVnYXRlVXRpbC5nZXRDYWNoZWRQcm9wZXJ0aWVzKG1kY1RhYmxlKSBhcyB1bmtub3duIGFzIFByb3BlcnR5SW5mb1tdO1xuXG5cdC8vVE9ETzogY29uc2lkZXIgYSBtZWNoYW5pc20gKCdGaWx0ZXJNZXJnZVV0aWwnIG9yIGVuaGFuY2UgJ0ZpbHRlclV0aWwnKSB0byBhbGxvdyB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIGRpZmZlcmVudCBmaWx0ZXJzKVxuXHRpZiAoaXNGaWx0ZXJFbmFibGVkKSB7XG5cdFx0Y29uZGl0aW9ucyA9IG1kY1RhYmxlLmdldENvbmRpdGlvbnMoKTtcblx0XHRpbm5lckZpbHRlckluZm8gPSBGaWx0ZXJVdGlsLmdldEZpbHRlckluZm8obWRjVGFibGUsIGNvbmRpdGlvbnMsIHRhYmxlUHJvcGVydGllcywgW10pIGFzIEZpbHRlckluZm87XG5cdFx0aWYgKGlubmVyRmlsdGVySW5mby5maWx0ZXJzKSB7XG5cdFx0XHRmaWx0ZXJzLnB1c2goaW5uZXJGaWx0ZXJJbmZvLmZpbHRlcnMpO1xuXHRcdH1cblx0fVxuXHRjb25zdCBpc1RyZWVUYWJsZSA9ICEhbWV0YWRhdGFJbmZvPy5oaWVyYXJjaHlRdWFsaWZpZXI7XG5cdGlmIChpc1RyZWVUYWJsZSkge1xuXHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRhZ2dyZWdhdGlvbiA9IHtcblx0XHRcdGhpZXJhcmNoeVF1YWxpZmllcjogbWV0YWRhdGFJbmZvLmhpZXJhcmNoeVF1YWxpZmllcixcblx0XHRcdGV4cGFuZFRvOiBtZXRhZGF0YUluZm8uaW5pdGlhbEV4cGFuc2lvbkxldmVsXG5cdFx0fTtcblx0fVxuXHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0Y29uZGl0aW9ucyA9IGZpbHRlckJhci5nZXRDb25kaXRpb25zKCk7XG5cdFx0aWYgKGNvbmRpdGlvbnMpIHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlck5hbWVzID0gRGVsZWdhdGVVdGlsLmdldFBhcmFtZXRlck5hbWVzKGZpbHRlckJhcik7XG5cdFx0XHQvLyBUaGUgdGFibGUgcHJvcGVydGllcyBuZWVkcyB0byB1cGRhdGVkIHdpdGggdGhlIGZpbHRlciBmaWVsZCBpZiBubyBTZWxlY3Rpb25maWVsZHMgYXJlIGFubm90YXRlZCBhbmQgbm90IHBhcnQgYXMgdmFsdWUgaGVscCBwYXJhbWV0ZXJcblx0XHRcdE9EYXRhVGFibGVEZWxlZ2F0ZS5fdXBkYXRlUHJvcGVydHlJbmZvKHRhYmxlUHJvcGVydGllcywgbWRjVGFibGUsIGNvbmRpdGlvbnMsIG1ldGFkYXRhSW5mbyk7XG5cdFx0XHRvdXRlckZpbHRlckluZm8gPSBGaWx0ZXJVdGlsLmdldEZpbHRlckluZm8oZmlsdGVyQmFyLCBjb25kaXRpb25zLCB0YWJsZVByb3BlcnRpZXMsIHBhcmFtZXRlck5hbWVzKTtcblxuXHRcdFx0aWYgKG91dGVyRmlsdGVySW5mby5maWx0ZXJzKSB7XG5cdFx0XHRcdGZpbHRlcnMucHVzaChvdXRlckZpbHRlckluZm8uZmlsdGVycyk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHBhcmFtZXRlclBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0UGFyYW1ldGVyc0luZm8oZmlsdGVyQmFyLCBjb25kaXRpb25zKTtcblx0XHRcdGlmIChwYXJhbWV0ZXJQYXRoKSB7XG5cdFx0XHRcdGJpbmRpbmdJbmZvLnBhdGggPSBwYXJhbWV0ZXJQYXRoO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIWlzVHJlZVRhYmxlKSB7XG5cdFx0XHQvLyBnZXQgdGhlIGJhc2ljIHNlYXJjaFxuXHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoID0gQ29tbW9uVXRpbHMubm9ybWFsaXplU2VhcmNoVGVybShmaWx0ZXJCYXIuZ2V0U2VhcmNoKCkpIHx8IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKGZpbHRlckJhci5nZXRTZWFyY2goKSkge1xuXHRcdFx0aWYgKCFiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkYWdncmVnYXRpb24pIHtcblx0XHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kJGFnZ3JlZ2F0aW9uID0ge307XG5cdFx0XHR9XG5cdFx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkYWdncmVnYXRpb24uc2VhcmNoID0gQ29tbW9uVXRpbHMubm9ybWFsaXplU2VhcmNoVGVybShmaWx0ZXJCYXIuZ2V0U2VhcmNoKCkpO1xuXHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kJGFnZ3JlZ2F0aW9uLmV4cGFuZFRvID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG5cdFx0fVxuXHR9XG5cdC8vIEJDUDogMjM3MDA3ODY2MCAtIHNoYXJlZFJlcXVlc3QgaXMgc2V0IHRvIGZhbHNlIGluIG9yZGVyIHRvIGF2b2lkIGRlYWRsb2NrIHNpdHVhdGlvbiB3aGVyZSB0aGUgdGhlIG9EYXRhXG5cdC8vIG1vZGVsIGNhY2hlIGlzIG5laXRoZXIgY2hhbmdlYWJsZSAocmVzdWx0IG9mIExpc3RCaW5kaW5nLiQkc2hhcmVkUmVxdWVzdCA9IHRydWUpIG5vciBkZWxldGFibGVcblx0Ly8gKHJlc3VsdCBvZiBDb250ZXh0LnNldFNlbGVjdGVkKHRydWUpIC0+IExpc3RCaW5kaW5nLmtlZXBBbGl2ZSlcblx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kJHNoYXJlZFJlcXVlc3QgPSBmYWxzZTtcblxuXHR0aGlzLl9hcHBseURlZmF1bHRTb3J0aW5nKGJpbmRpbmdJbmZvLCAobWRjVGFibGUuZ2V0RGVsZWdhdGUoKSBhcyBNZGNUYWJsZURlbGVnYXRlKS5wYXlsb2FkKTtcblx0Ly8gYWRkIHNlbGVjdCB0byBiaW5kaW5nSW5mbyAoQkNQIDIxNzAxNjMwMTIpXG5cdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlbGVjdCA9IHRhYmxlUHJvcGVydGllcz8ucmVkdWNlKGZ1bmN0aW9uIChxdWVyeTogc3RyaW5nLCBwcm9wZXJ0eTogUHJvcGVydHlJbmZvKSB7XG5cdFx0Ly8gTmF2aWdhdGlvbiBwcm9wZXJ0aWVzIChyZXByZXNlbnRlZCBieSBYL1kpIHNob3VsZCBub3QgYmUgYWRkZWQgdG8gJHNlbGVjdC5cblx0XHQvLyBUb0RvIDogVGhleSBzaG91bGQgYmUgYWRkZWQgYXMgJGV4cGFuZD1YKCRzZWxlY3Q9WSkgaW5zdGVhZFxuXHRcdGlmIChwcm9wZXJ0eS5wYXRoICYmICFwcm9wZXJ0eS5wYXRoLmluY2x1ZGVzKFwiL1wiKSkge1xuXHRcdFx0cXVlcnkgPSBxdWVyeSA/IGAke3F1ZXJ5fSwke3Byb3BlcnR5LnBhdGh9YCA6IHByb3BlcnR5LnBhdGg7XG5cdFx0fVxuXHRcdHJldHVybiBxdWVyeTtcblx0fSwgXCJcIik7XG5cblx0Ly8gQWRkICRjb3VudFxuXHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRjb3VudCA9IHRydWU7XG5cblx0Ly9JZiB0aGUgZW50aXR5IGlzIERyYWZ0RW5hYmxlZCBhZGQgYSBEcmFmdEZpbHRlclxuXHRpZiAoYmluZGluZ0luZm8ucGF0aCAmJiBNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKG1kY1RhYmxlLmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLCBiaW5kaW5nSW5mby5wYXRoKSkge1xuXHRcdGZpbHRlcnMucHVzaChuZXcgRmlsdGVyKFwiSXNBY3RpdmVFbnRpdHlcIiwgRmlsdGVyT3BlcmF0b3IuRVEsIHRydWUpKTtcblx0fVxuXHRiaW5kaW5nSW5mby5maWx0ZXJzID0gbmV3IEZpbHRlcihmaWx0ZXJzIGFzIEZpbHRlcltdLCB0cnVlKTtcbn07XG5cbk9EYXRhVGFibGVEZWxlZ2F0ZS5nZXRUeXBlTWFwID0gZnVuY3Rpb24gKCk6IG9iamVjdCB7XG5cdHJldHVybiBUeXBlTWFwO1xufTtcblxuLyoqXG4gKiBHZXQgdGFibGUgTW9kZWwuXG4gKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG4gKiBAcmV0dXJucyBNb2RlbFxuICovXG5PRGF0YVRhYmxlRGVsZWdhdGUuX2dldE1vZGVsID0gYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8TW9kZWw+IHtcblx0Y29uc3QgbWV0YWRhdGFJbmZvID0gKHRhYmxlLmdldERlbGVnYXRlKCkgYXMgeyBwYXlsb2FkOiB7IG1vZGVsOiBzdHJpbmcgfSB9KS5wYXlsb2FkO1xuXHRsZXQgbW9kZWw6IE1vZGVsID0gdGFibGUuZ2V0TW9kZWwobWV0YWRhdGFJbmZvLm1vZGVsKSE7XG5cdGlmICghbW9kZWwpIHtcblx0XHRhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0dGFibGUuYXR0YWNoRXZlbnRPbmNlKFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIHJlc29sdmUpO1xuXHRcdH0pO1xuXHRcdG1vZGVsID0gdGFibGUuZ2V0TW9kZWwobWV0YWRhdGFJbmZvLm1vZGVsKSE7XG5cdH1cblx0cmV0dXJuIG1vZGVsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgZGVmYXVsdCBzb3J0IG9yZGVyIGlmIG5lZWRlZC4gVGhpcyBpcyBvbmx5IHRoZSBjYXNlIGlmIHRoZSByZXF1ZXN0IGlzIG5vdCBhICRzZWFyY2ggcmVxdWVzdFxuICogKG1lYW5zIHRoZSBwYXJhbWV0ZXIgJHNlYXJjaCBvZiB0aGUgYmluZGluZ0luZm8gaXMgdW5kZWZpbmVkKSBhbmQgaWYgYSBzb3J0IG9yZGVyIGhhcyBub3QgYmVlbiBzZXQgYWxyZWFkeSxcbiAqIGZvciBleGFtcGxlLCB1c2luZyBhIHByZXNlbnRhdGlvbiB2YXJpYW50IG9yIG1hbnVhbGx5IHNldCBieSB0aGUgdXNlci5cbiAqIEBwYXJhbSBiaW5kaW5nSW5mbyBUaGUgYmluZGluZ0luZm8gb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gcGF5bG9hZCBUaGUgcGF5bG9hZCBvZiB0aGUgVGFibGVEZWxlZ2F0ZVxuICovXG5PRGF0YVRhYmxlRGVsZWdhdGUuX2FwcGx5RGVmYXVsdFNvcnRpbmcgPSBmdW5jdGlvbiAoYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbywgcGF5bG9hZDogUGF5bG9hZCk6IHZvaWQge1xuXHRpZiAoXG5cdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycyAmJlxuXHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCA9PSB1bmRlZmluZWQgJiZcblx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkYWdncmVnYXRpb24/LnNlYXJjaCA9PSB1bmRlZmluZWQgJiZcblx0XHRiaW5kaW5nSW5mby5zb3J0ZXIgJiZcblx0XHRiaW5kaW5nSW5mby5zb3J0ZXIubGVuZ3RoID09IDBcblx0KSB7XG5cdFx0Y29uc3QgZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgPSBwYXlsb2FkID8gcGF5bG9hZC5kZWZhdWx0U29ydFByb3BlcnR5TmFtZSA6IHVuZGVmaW5lZDtcblx0XHRpZiAoZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUpIHtcblx0XHRcdGJpbmRpbmdJbmZvLnNvcnRlci5wdXNoKG5ldyBTb3J0ZXIoZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUsIGZhbHNlKSk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRhYmxlIHByb3BlcnRpZXMgd2l0aCBmaWx0ZXIgZmllbGQgaW5mb3MuXG4gKiBAcGFyYW0gYVRhYmxlUHJvcGVydGllcyBBcnJheSB3aXRoIHRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBvTURDVGFibGUgVGhlIE1EQ1RhYmxlIGluc3RhbmNlXG4gKiBAcGFyYW0gbUNvbmRpdGlvbnMgVGhlIGNvbmRpdGlvbnMgb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gb01ldGFkYXRhSW5mbyBUaGUgbWV0YWRhdGEgaW5mbyBvZiB0aGUgZmlsdGVyIGZpZWxkXG4gKi9cbk9EYXRhVGFibGVEZWxlZ2F0ZS5fdXBkYXRlUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKFxuXHRhVGFibGVQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSxcblx0b01EQ1RhYmxlOiBUYWJsZSxcblx0bUNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPixcblx0b01ldGFkYXRhSW5mbzogUGF5bG9hZFxuKTogdm9pZCB7XG5cdGNvbnN0IGFDb25kaXRpb25LZXkgPSBPYmplY3Qua2V5cyhtQ29uZGl0aW9ucyksXG5cdFx0b01ldGFNb2RlbCA9IChvTURDVGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSE7XG5cdGFDb25kaXRpb25LZXkuZm9yRWFjaChmdW5jdGlvbiAoY29uZGl0aW9uS2V5OiBzdHJpbmcpIHtcblx0XHQvLyBUaGUgdHlwZUNvbmZpZyBpcyBub3Qgc2V0IGluIHRoZSB0YWJsZSBwcm9wZXJ0eUluZm9zLCBidXQgd2UgbmVlZCB0byBzZXQgaXQgZm9yIHRoZSBmaWx0ZXIgZmllbGRzXG5cdFx0Y29uc3QgY29uZGl0aW9uS2V5VHlwZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtvTWV0YWRhdGFJbmZvLmNvbGxlY3Rpb25OYW1lfS8ke2NvbmRpdGlvbktleX1gKT8uJFR5cGUgPz8gXCJFZG0uU3RyaW5nXCI7XG5cdFx0Y29uc3QgdHlwZUNvbmZpZyA9IG9NRENUYWJsZS5nZXRUeXBlTWFwKCkuZ2V0VHlwZUNvbmZpZyhjb25kaXRpb25LZXlUeXBlKTtcblx0XHRhVGFibGVQcm9wZXJ0aWVzLmZvckVhY2goKHRhYmxlUHJvcGVydHksIGluZGV4KSA9PiB7XG5cdFx0XHRpZiAodGFibGVQcm9wZXJ0eS5wYXRoID09PSBjb25kaXRpb25LZXkpIHtcblx0XHRcdFx0KGFUYWJsZVByb3BlcnRpZXNbaW5kZXhdIGFzIFByb3BlcnR5SW5mbyAmIHsgdHlwZUNvbmZpZzogb2JqZWN0IH0pLnR5cGVDb25maWcgPSB0eXBlQ29uZmlnO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChcblx0XHRcdGFUYWJsZVByb3BlcnRpZXMuZmluZEluZGV4KGZ1bmN0aW9uICh0YWJsZVByb3BlcnR5OiBQcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0cmV0dXJuIHRhYmxlUHJvcGVydHkucGF0aCA9PT0gY29uZGl0aW9uS2V5O1xuXHRcdFx0fSkgPT09IC0xXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBvQ29sdW1uRGVmOiBQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRcdGtleTogY29uZGl0aW9uS2V5LFxuXHRcdFx0XHRsYWJlbDogY29uZGl0aW9uS2V5LFxuXHRcdFx0XHRwYXRoOiBjb25kaXRpb25LZXksXG5cdFx0XHRcdGRhdGFUeXBlOiB0eXBlQ29uZmlnLnR5cGVJbnN0YW5jZS5iYXNlVHlwZSxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogdHlwZUNvbmZpZy50eXBlSW5zdGFuY2U/Lm9Gb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRjb25zdHJhaW50czogdHlwZUNvbmZpZy50eXBlSW5zdGFuY2U/Lm9Db25zdHJhaW50c1xuXHRcdFx0fTtcblx0XHRcdGFUYWJsZVByb3BlcnRpZXMucHVzaChvQ29sdW1uRGVmKTtcblx0XHR9XG5cdH0pO1xufTtcblxuT0RhdGFUYWJsZURlbGVnYXRlLnVwZGF0ZUJpbmRpbmcgPSBmdW5jdGlvbiAoXG5cdG9UYWJsZTogVGFibGUsXG5cdG9CaW5kaW5nSW5mbzogQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8gJiB7XG5cdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0JHNlYXJjaD86IHN0cmluZztcblx0XHR9O1xuXHR9LFxuXHRvQmluZGluZzogT0RhdGFMaXN0QmluZGluZ1xuKTogdm9pZCB7XG5cdGxldCBiTmVlZE1hbnVhbFJlZnJlc2ggPSBmYWxzZTtcblx0Y29uc3Qgb0ludGVybmFsQmluZGluZ0NvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0Y29uc3Qgc01hbnVhbFVwZGF0ZVByb3BlcnR5S2V5ID0gXCJwZW5kaW5nTWFudWFsQmluZGluZ1VwZGF0ZVwiO1xuXHRjb25zdCBzTGFzdFNlYXJjaCA9IFwibGFzdFNlYXJjaFwiO1xuXHRjb25zdCBzTGFzdEZpbHRlciA9IFwibGFzdEZpbHRlclwiO1xuXHRjb25zdCBiUGVuZGluZ01hbnVhbFVwZGF0ZSA9IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShzTWFudWFsVXBkYXRlUHJvcGVydHlLZXkpO1xuXHRjb25zdCBsYXN0U2VhcmNoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KHNMYXN0U2VhcmNoKTtcblx0Y29uc3QgbGFzdEZpbHRlciA9IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShzTGFzdEZpbHRlcik7XG5cdGxldCBvUm93QmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cblx0Ly9vQmluZGluZz1udWxsIG1lYW5zIHRoYXQgYSByZWJpbmRpbmcgbmVlZHMgdG8gYmUgZm9yY2VkIHZpYSB1cGRhdGVCaW5kaW5nIGluIG1kYyBUYWJsZURlbGVnYXRlXG5cdFRhYmxlRGVsZWdhdGUudXBkYXRlQmluZGluZy5hcHBseShPRGF0YVRhYmxlRGVsZWdhdGUsIFtvVGFibGUsIG9CaW5kaW5nSW5mbywgb0JpbmRpbmddKTtcblx0Ly9nZXQgcm93IGJpbmRpbmcgYWZ0ZXIgcmViaW5kIGZyb20gVGFibGVEZWxlZ2F0ZS51cGRhdGVCaW5kaW5nIGluIGNhc2Ugb0JpbmRpbmcgd2FzIG51bGxcblx0aWYgKCFvUm93QmluZGluZykge1xuXHRcdG9Sb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0fVxuXHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHQvKipcblx0XHQgKiBNYW51YWwgcmVmcmVzaCBpZiBmaWx0ZXJzIGFyZSBub3QgY2hhbmdlZCBieSBiaW5kaW5nLnJlZnJlc2goKSBzaW5jZSB1cGRhdGluZyB0aGUgYmluZGluZ0luZm9cblx0XHQgKiBpcyBub3QgZW5vdWdoIHRvIHRyaWdnZXIgYSBiYXRjaCByZXF1ZXN0LlxuXHRcdCAqIEluIGNhc2UgdGhlcmUgaXMgbm8gaW50ZXJuYWxCaW5kaW5nQ29udGV4dCAoc2VlIEJDUCAyMjgwMTYxNTI0KSB3ZSBjYW4gbm90IGRldGVybWluZSBpZiBhIG1hbnVhbFxuXHRcdCAqIHJlZnJlc2ggaXMgbmVlZGVkIG9yIG5vdC4gVGhlcmVmb3JlLCB3ZSBhbHdheXMgcmVmcmVzaCBpbiB0aGlzIHNwZWNpYWwgY2FzZVxuXHRcdCAqL1xuXHRcdGJOZWVkTWFudWFsUmVmcmVzaCA9IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0XG5cdFx0XHQ/IGRlZXBFcXVhbChvQmluZGluZ0luZm8uZmlsdGVycywgbGFzdEZpbHRlcikgJiYgb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnM/LiRzZWFyY2ggPT09IGxhc3RTZWFyY2ggJiYgIWJQZW5kaW5nTWFudWFsVXBkYXRlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblx0b0ludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KHNMYXN0U2VhcmNoLCBvQmluZGluZ0luZm8ucGFyYW1ldGVycz8uJHNlYXJjaCk7XG5cdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShzTGFzdEZpbHRlciwgb0JpbmRpbmdJbmZvLmZpbHRlcnMpO1xuXG5cdGlmIChiTmVlZE1hbnVhbFJlZnJlc2ggJiYgb1RhYmxlLmdldEZpbHRlcigpKSB7XG5cdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KHNNYW51YWxVcGRhdGVQcm9wZXJ0eUtleSwgdHJ1ZSk7XG5cdFx0b1Jvd0JpbmRpbmdcblx0XHRcdC5yZXF1ZXN0UmVmcmVzaChvUm93QmluZGluZy5nZXRHcm91cElkKCkpXG5cdFx0XHQuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShzTWFudWFsVXBkYXRlUHJvcGVydHlLZXksIGZhbHNlKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZWZyZXNoaW5nIGEgZmlsdGVyQmFyIFZIIHRhYmxlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH1cblx0b1RhYmxlLmZpcmVFdmVudChcImJpbmRpbmdVcGRhdGVkXCIpO1xuXHQvL25vIG5lZWQgdG8gY2hlY2sgZm9yIHNlbWFudGljIHRhcmdldHMgaGVyZSBzaW5jZSB3ZSBhcmUgaW4gYSBWSCBhbmQgZG9uJ3Qgd2FudCB0byBhbGxvdyBmdXJ0aGVyIG5hdmlnYXRpb25cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNpbXBsZSBwcm9wZXJ0eSBmb3IgZWFjaCBpZGVudGlmaWVkIGNvbXBsZXggcHJvcGVydHkuXG4gKiBAcGFyYW0gcHJvcGVydGllc1RvQmVDcmVhdGVkIElkZW50aWZpZWQgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBleGlzdGluZ0NvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyBjcmVhdGVkIGZvciBwcm9wZXJ0aWVzIGRlZmluZWQgb24gdGhlIFZhbHVlIExpc3QuXG4gKiBAcGFyYW0gc29ydFJlc3RyaWN0aW9uc0luZm8gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHNvcnQgcmVzdHJpY3Rpb24gaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBmaWx0ZXJSZXN0cmljdGlvbnNJbmZvIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBmaWx0ZXIgcmVzdHJpY3Rpb24gaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBjYXNlU2Vuc2l0aXZlXG4gKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgcHJvcGVydGllcyBjcmVhdGVkLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVsYXRlZFByb3BlcnRpZXMoXG5cdHByb3BlcnRpZXNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRleGlzdGluZ0NvbHVtbnM6IFByb3BlcnR5SW5mb1tdLFxuXHRzb3J0UmVzdHJpY3Rpb25zSW5mbzogU29ydFJlc3RyaWN0aW9uc0luZm9UeXBlLFxuXHRmaWx0ZXJSZXN0cmljdGlvbnNJbmZvOiBGaWx0ZXJSZXN0cmljdGlvbnNJbmZvVHlwZSxcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW5cbik6IFByb3BlcnR5SW5mb1tdIHtcblx0Y29uc3QgcmVsYXRlZFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9LFxuXHRcdHJlbGF0ZWRDb2x1bW5zOiBQcm9wZXJ0eUluZm9bXSA9IFtdO1xuXHRPYmplY3Qua2V5cyhwcm9wZXJ0aWVzVG9CZUNyZWF0ZWQpLmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnRpZXNUb0JlQ3JlYXRlZFtwYXRoXSxcblx0XHRcdHJlbGF0ZWRDb2x1bW4gPSBleGlzdGluZ0NvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ucGF0aCA9PT0gcGF0aCk7IC8vIENvbXBsZXggcHJvcGVydGllcyBkb2Vzbid0IGhhdmUgcGF0aCBzbyBvbmx5IHNpbXBsZSBjb2x1bW4gYXJlIGZvdW5kXG5cdFx0aWYgKCFyZWxhdGVkQ29sdW1uKSB7XG5cdFx0XHRjb25zdCBuZXdOYW1lID0gYFByb3BlcnR5Ojoke3BhdGh9YDtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbcGF0aF0gPSBuZXdOYW1lO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnID0gZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eSk7XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHBDb2x1bW5UeXBlQ29uZmlnID0gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKFxuXHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcudHlwZSA/PyBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgdmFsdWVIZWxwVGFibGVDb2x1bW46IFByb3BlcnR5SW5mbyA9IHtcblx0XHRcdFx0a2V5OiBuZXdOYW1lLFxuXHRcdFx0XHRsYWJlbDogZ2V0TGFiZWwocHJvcGVydHkpLFxuXHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRzb3J0YWJsZTogaXNTb3J0YWJsZVByb3BlcnR5KHNvcnRSZXN0cmljdGlvbnNJbmZvLCBwcm9wZXJ0eSksXG5cdFx0XHRcdGZpbHRlcmFibGU6IGlzRmlsdGVyYWJsZVByb3BlcnR5KGZpbHRlclJlc3RyaWN0aW9uc0luZm8sIHByb3BlcnR5KSxcblx0XHRcdFx0ZGF0YVR5cGU6IHZhbHVlSGVscENvbHVtblR5cGVDb25maWcuY2xhc3NOYW1lLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiBpc1R5cGVGaWx0ZXJhYmxlKHByb3BlcnR5LnR5cGUgYXMga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZSlcblx0XHRcdFx0XHQ/IHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRcdGNvbnN0cmFpbnRzOiBpc1R5cGVGaWx0ZXJhYmxlKHByb3BlcnR5LnR5cGUgYXMga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZSlcblx0XHRcdFx0XHQ/IHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50c1xuXHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0XHRjYXNlU2Vuc2l0aXZlXG5cdFx0XHR9O1xuXHRcdFx0dmFsdWVIZWxwVGFibGVDb2x1bW4ubWF4Q29uZGl0aW9ucyA9IGdldFByb3BlcnR5TWF4Q29uZGl0aW9ucyhmaWx0ZXJSZXN0cmljdGlvbnNJbmZvLCB2YWx1ZUhlbHBUYWJsZUNvbHVtbik7XG5cdFx0XHRyZWxhdGVkQ29sdW1ucy5wdXNoKHZhbHVlSGVscFRhYmxlQ29sdW1uKTtcblx0XHR9XG5cdH0pO1xuXHQvLyBUaGUgcHJvcGVydHkgJ2tleScgaGFzIGJlZW4gcHJlZml4ZWQgd2l0aCAnUHJvcGVydHk6OicgZm9yIHVuaXF1ZW5lc3MuXG5cdC8vIFVwZGF0ZSB0aGUgc2FtZSBpbiBvdGhlciBwcm9wZXJ0eUluZm9zW10gcmVmZXJlbmNlcyB3aGljaCBwb2ludCB0byB0aGlzIHByb3BlcnR5LlxuXHRleGlzdGluZ0NvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0aWYgKGNvbHVtbi5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRjb2x1bW4ucHJvcGVydHlJbmZvcyA9IGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5tYXAoKGNvbHVtbk5hbWUpID0+IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbY29sdW1uTmFtZV0gPz8gY29sdW1uTmFtZSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHJlbGF0ZWRDb2x1bW5zO1xufVxuXG4vKipcbiAqIElkZW50aWZpZXMgdGhlIG1heENvbmRpdGlvbnMgZm9yIGEgZ2l2ZW4gcHJvcGVydHkuXG4gKiBAcGFyYW0gZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyBUaGUgZmlsdGVyIHJlc3RyaWN0aW9uIGluZm9ybWF0aW9uIGZyb20gdGhlIHJlc3RyaWN0aW9uIGFubm90YXRpb24uXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIGAtMWAgb3IgYDFgIGlmIHRoZSBwcm9wZXJ0eSBpcyBhIE11bHRpVmFsdWVGaWx0ZXJFeHByZXNzaW9uLlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eU1heENvbmRpdGlvbnMoZmlsdGVyUmVzdHJpY3Rpb25zSW5mbzogRmlsdGVyUmVzdHJpY3Rpb25zSW5mb1R5cGUsIHByb3BlcnR5OiBQcm9wZXJ0eUluZm8gfCBQcm9wZXJ0eSk6IG51bWJlciB7XG5cdGNvbnN0IHByb3BlcnR5UGF0aCA9IGdldFBhdGgocHJvcGVydHkpO1xuXHRyZXR1cm4gcHJvcGVydHlQYXRoICYmXG5cdFx0ZmlsdGVyUmVzdHJpY3Rpb25zSW5mby5wcm9wZXJ0eUluZm8/Lmhhc093blByb3BlcnR5KHByb3BlcnR5UGF0aCkgJiZcblx0XHRpc011bHRpVmFsdWVGaWx0ZXJFeHByZXNzaW9uKGZpbHRlclJlc3RyaWN0aW9uc0luZm8ucHJvcGVydHlJbmZvW3Byb3BlcnR5UGF0aF0gYXMgdW5rbm93biBhcyBzdHJpbmcpXG5cdFx0PyAtMVxuXHRcdDogMTtcbn1cblxuLyoqXG4gKiBJZGVudGlmaWVzIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHdoaWNoIHJlZmVyZW5jZXMgdG8gdGhlIHVuaXQsIHRpbWV6b25lLCB0ZXh0QXJyYW5nZW1lbnQgb3IgY3VycmVuY3kuXG4gKiBAcGFyYW0gZGF0YU1vZGVsUHJvcGVydHlQYXRoIFRoZSBtb2RlbCBvYmplY3QgcGF0aCBvZiB0aGUgcHJvcGVydHkuXG4gKiBAcmV0dXJucyBUaGUgYWRkaXRpb25hbCBwcm9wZXJ0eS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldEFkZGl0aW9uYWxQcm9wZXJ0eShkYXRhTW9kZWxQcm9wZXJ0eVBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KTogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBwcm9wZXJ0eSA9IGRhdGFNb2RlbFByb3BlcnR5UGF0aC50YXJnZXRPYmplY3Q7XG5cdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGggPVxuXHRcdHByb3BlcnR5ICYmXG5cdFx0KGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoKHByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoKHByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgocHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgocHJvcGVydHkpKTtcblx0aWYgKCFhZGRpdGlvbmFsUHJvcGVydHlQYXRoKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRjb25zdCBkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHkgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oZGF0YU1vZGVsUHJvcGVydHlQYXRoLCBhZGRpdGlvbmFsUHJvcGVydHlQYXRoKTtcblxuXHQvL0FkZGl0aW9uYWwgUHJvcGVydHkgY291bGQgcmVmZXIgdG8gYSBuYXZpZ2F0aW9uIHByb3BlcnR5LCBrZWVwIHRoZSBrZXkgYW5kIHBhdGggYXMgbmF2aWdhdGlvbiBwcm9wZXJ0eVxuXHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHkgPSBkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHkudGFyZ2V0T2JqZWN0O1xuXHRpZiAoIWFkZGl0aW9uYWxQcm9wZXJ0eSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT0RhdGFUYWJsZURlbGVnYXRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEyREE7QUFDQTtBQUNBO0VBQ0EsTUFBTUEsa0JBQWtCLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFQyxhQUFhLENBQUM7O0VBRTNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQUgsa0JBQWtCLENBQUNJLGVBQWUsR0FBRyxnQkFBZ0JDLEtBQVksRUFBeUI7SUFDekYsTUFBTUMsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDQyxTQUFTLENBQUNGLEtBQUssQ0FBQztJQUN6QyxNQUFNRyxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUNDLG9C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
|
|
467
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPRGF0YVRhYmxlRGVsZWdhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJUYWJsZURlbGVnYXRlIiwiZmV0Y2hQcm9wZXJ0aWVzIiwidGFibGUiLCJtb2RlbCIsIl9nZXRNb2RlbCIsInByb3BlcnRpZXMiLCJfY3JlYXRlUHJvcGVydHlJbmZvcyIsImNyZWF0ZUludGVybmFsQmluZGluZ0NvbnRleHQiLCJzZXRTb3J0Q29uZGl0aW9ucyIsIk1hY3Jvc0RlbGVnYXRlVXRpbCIsInNldENhY2hlZFByb3BlcnRpZXMiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNldFByb3BlcnR5Iiwic29ydENvbmRpdGlvbnNDRCIsImRhdGEiLCJyYXdTb3J0Q29uZGl0aW9ucyIsIkNvbW1vbkhlbHBlciIsInBhcnNlQ3VzdG9tRGF0YSIsInNvcnRlcnMiLCJmb3JFYWNoIiwic29ydENvbmRpdGlvbiIsImluZm9OYW1lIiwiY29udmVydFByb3BlcnR5UGF0aFRvSW5mb05hbWUiLCJuYW1lIiwicHJvcGVydHlQYXRoIiwicHJvcGVydHlJbmZvIiwiZmluZCIsImNvbHVtbiIsInByb3BlcnR5SW5mb3MiLCJwYXRoIiwia2V5IiwiZGlhbG9nIiwiaXNBIiwiZ2V0UGFyZW50IiwiaW50ZXJuYWxNb2RlbCIsImdldE1vZGVsIiwiaW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsIm5ld0ludGVybmFsQmluZGluZ0NvbnRleHRQYXRoIiwiZ2V0UGF0aCIsImdldElkIiwiZ2V0UHJvcGVydHkiLCJuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyIsImRhdGFNb2RlbFByb3BlcnR5UGF0aCIsImRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgiLCJnZXRBZGRpdGlvbmFsUHJvcGVydHkiLCJyZWxhdGVkUHJvcGVydGllcyIsInRhcmdldE9iamVjdCIsImFkZGl0aW9uYWxQcm9wZXJ0eSIsImFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwicHJvcGVydHkiLCJ0ZXh0QW5ub3RhdGlvbiIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiVGV4dCIsInRleHRBcnJhbmdlbWVudCIsIlVJIiwiVGV4dEFycmFuZ2VtZW50IiwidG9TdHJpbmciLCJkaXNwbGF5TW9kZSIsImdldERpc3BsYXlNb2RlIiwidGFyZ2V0RW50aXR5VHlwZSIsIm1ldGFkYXRhSW5mbyIsImdldERlbGVnYXRlIiwicGF5bG9hZCIsImVudGl0eVNldFBhdGgiLCJjb2xsZWN0aW9uTmFtZSIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInJlcXVlc3RPYmplY3QiLCJ0aGVuIiwiZW50aXR5U2V0QW5ub3RhdGlvbnMiLCJzb3J0UmVzdHJpY3Rpb25zSW5mbyIsImdldFNvcnRSZXN0cmljdGlvbnNJbmZvIiwiZmlsdGVyUmVzdHJpY3Rpb25zIiwiZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyIsImdldEZpbHRlclJlc3RyaWN0aW9uc0luZm8iLCJmaWx0ZXJGdW5jdGlvbnMiLCJjYXNlU2Vuc2l0aXZlIiwiTW9kZWxIZWxwZXIiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJjdXN0b21EYXRhRm9yQ29sdW1ucyIsImdldEN1c3RvbURhdGEiLCJwcm9wZXJ0aWVzVG9CZUNyZWF0ZWQiLCJkYXRhTW9kZWxFbnRpdHlQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0Q29udGV4dCIsImN1c3RvbURhdGEiLCJjb2x1bW5EZWYiLCJ0eXBlQ29uZmlnIiwiaXNUeXBlRmlsdGVyYWJsZSIsIiRUeXBlIiwiZ2V0VHlwZU1hcCIsImdldFR5cGVDb25maWciLCJUeXBlTWFwIiwibGFiZWwiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInRhcmdldFByb3BlcnR5UGF0aCIsInR5cGUiLCJwcm9wZXJ0eVR5cGVDb25maWciLCJmb3JtYXRPcHRpb25zIiwiY29uc3RyYWludHMiLCJyZWxhdGVkUHJvcGVydGllc0luZm8iLCJyZWxhdGVkUHJvcGVydHlQYXRocyIsImtleXMiLCJsZW5ndGgiLCJkYXRhVHlwZSIsImNsYXNzTmFtZSIsInR5cGVJbnN0YW5jZSIsIm9Db25zdHJhaW50cyIsIm9Gb3JtYXRPcHRpb25zIiwic29ydGFibGUiLCJpc1NvcnRhYmxlUHJvcGVydHkiLCJmaWx0ZXJhYmxlIiwiaXNGaWx0ZXJhYmxlUHJvcGVydHkiLCJtYXhDb25kaXRpb25zIiwiZ2V0UHJvcGVydHlNYXhDb25kaXRpb25zIiwicHVzaCIsInJlbGF0ZWRDb2x1bW5zIiwiY3JlYXRlUmVsYXRlZFByb3BlcnRpZXMiLCJjb25jYXQiLCJ1cGRhdGVCaW5kaW5nSW5mbyIsIm1kY1RhYmxlIiwiYmluZGluZ0luZm8iLCJhcHBseSIsImNvbGxlY3Rpb25QYXRoIiwicGFyYW1ldGVycyIsImZpbHRlckJhciIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldEZpbHRlciIsImlzRmlsdGVyRW5hYmxlZCIsImlzRmlsdGVyaW5nRW5hYmxlZCIsImNvbmRpdGlvbnMiLCJpbm5lckZpbHRlckluZm8iLCJvdXRlckZpbHRlckluZm8iLCJmaWx0ZXJzIiwidGFibGVQcm9wZXJ0aWVzIiwiZ2V0Q2FjaGVkUHJvcGVydGllcyIsImdldENvbmRpdGlvbnMiLCJGaWx0ZXJVdGlsIiwiZ2V0RmlsdGVySW5mbyIsImlzVHJlZVRhYmxlIiwiaGllcmFyY2h5UXVhbGlmaWVyIiwiJCRhZ2dyZWdhdGlvbiIsImV4cGFuZFRvIiwiaW5pdGlhbEV4cGFuc2lvbkxldmVsIiwicGFyYW1ldGVyTmFtZXMiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRQYXJhbWV0ZXJOYW1lcyIsIl91cGRhdGVQcm9wZXJ0eUluZm8iLCJwYXJhbWV0ZXJQYXRoIiwiZ2V0UGFyYW1ldGVyc0luZm8iLCIkc2VhcmNoIiwiQ29tbW9uVXRpbHMiLCJub3JtYWxpemVTZWFyY2hUZXJtIiwiZ2V0U2VhcmNoIiwidW5kZWZpbmVkIiwic2VhcmNoIiwiTnVtYmVyIiwiTUFYX1NBRkVfSU5URUdFUiIsIiQkc2hhcmVkUmVxdWVzdCIsIl9hcHBseURlZmF1bHRTb3J0aW5nIiwiJHNlbGVjdCIsInJlZHVjZSIsInF1ZXJ5IiwiaW5jbHVkZXMiLCIkY291bnQiLCJpc0RyYWZ0U3VwcG9ydGVkIiwiRmlsdGVyIiwiRmlsdGVyT3BlcmF0b3IiLCJFUSIsIlByb21pc2UiLCJyZXNvbHZlIiwiYXR0YWNoRXZlbnRPbmNlIiwic29ydGVyIiwiZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUiLCJTb3J0ZXIiLCJhVGFibGVQcm9wZXJ0aWVzIiwib01EQ1RhYmxlIiwibUNvbmRpdGlvbnMiLCJvTWV0YWRhdGFJbmZvIiwiYUNvbmRpdGlvbktleSIsIm9NZXRhTW9kZWwiLCJjb25kaXRpb25LZXkiLCJjb25kaXRpb25LZXlUeXBlIiwiZ2V0T2JqZWN0IiwidGFibGVQcm9wZXJ0eSIsImluZGV4IiwiZmluZEluZGV4Iiwib0NvbHVtbkRlZiIsImJhc2VUeXBlIiwidXBkYXRlQmluZGluZyIsIm9UYWJsZSIsIm9CaW5kaW5nSW5mbyIsIm9CaW5kaW5nIiwiYk5lZWRNYW51YWxSZWZyZXNoIiwib0ludGVybmFsQmluZGluZ0NvbnRleHQiLCJzTWFudWFsVXBkYXRlUHJvcGVydHlLZXkiLCJzTGFzdFNlYXJjaCIsInNMYXN0RmlsdGVyIiwiYlBlbmRpbmdNYW51YWxVcGRhdGUiLCJsYXN0U2VhcmNoIiwibGFzdEZpbHRlciIsIm9Sb3dCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsImRlZXBFcXVhbCIsInJlcXVlc3RSZWZyZXNoIiwiZ2V0R3JvdXBJZCIsImZpbmFsbHkiLCJjYXRjaCIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwiZmlyZUV2ZW50IiwiZXhpc3RpbmdDb2x1bW5zIiwicmVsYXRlZFByb3BlcnR5TmFtZU1hcCIsInJlbGF0ZWRDb2x1bW4iLCJuZXdOYW1lIiwidmFsdWVIZWxwQ29sdW1uVHlwZUNvbmZpZyIsInZhbHVlSGVscFRhYmxlQ29sdW1uIiwiZ2V0TGFiZWwiLCJtYXAiLCJjb2x1bW5OYW1lIiwiaGFzT3duUHJvcGVydHkiLCJpc011bHRpVmFsdWVGaWx0ZXJFeHByZXNzaW9uIiwiZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aCIsImRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVEZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBkZWVwRXF1YWwgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEVxdWFsXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGdldFR5cGVDb25maWcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJSZXN0cmljdGlvbnNJbmZvVHlwZSwgU29ydFJlc3RyaWN0aW9uc0luZm9UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YU1vZGVsRnVuY3Rpb25cIjtcbmltcG9ydCB7IGdldEZpbHRlclJlc3RyaWN0aW9uc0luZm8sIGdldFNvcnRSZXN0cmljdGlvbnNJbmZvLCBpc011bHRpVmFsdWVGaWx0ZXJFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YU1vZGVsRnVuY3Rpb25cIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldFRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoLFxuXHRnZXRMYWJlbFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEZWZhdWx0VHlwZUZvckVkbVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9FRE1cIjtcbmltcG9ydCB7IGlzVHlwZUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9FRE1cIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVySW5mbywgU2VyaWFsaXplZENvbGxlY3Rpb25CaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbGxlY3Rpb25CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBNYWNyb3NEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckNvbmRpdGlvbnMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVySGVscGVyXCI7XG5pbXBvcnQgeyBnZXRQYXRoLCBpc0ZpbHRlcmFibGVQcm9wZXJ0eSwgaXNTb3J0YWJsZVByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1RhYmxlRGVsZWdhdGVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IEVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IE1EQ1RhYmxlUHJvcGVydHlJbmZvIGFzIFByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCBUYWJsZURlbGVnYXRlIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1RhYmxlRGVsZWdhdGVcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvdXRpbC9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBGaWx0ZXJVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3V0aWwvRmlsdGVyVXRpbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbnR5cGUgQ29tcGxleFByb3BlcnR5TWFwID0gUmVjb3JkPHN0cmluZywgUHJvcGVydHk+O1xuXG50eXBlIE1kY1RhYmxlRGVsZWdhdGUgPSB7IG5hbWU6IHN0cmluZzsgcGF5bG9hZDogUGF5bG9hZCB9O1xuXG50eXBlIFBheWxvYWQgPSB7XG5cdGNvbGxlY3Rpb25OYW1lPzogc3RyaW5nO1xuXHRjb2xsZWN0aW9uUGF0aD86IHN0cmluZztcblx0ZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWU/OiBzdHJpbmc7XG5cdGhpZXJhcmNoeVF1YWxpZmllcj86IHN0cmluZztcblx0aW5pdGlhbEV4cGFuc2lvbkxldmVsPzogbnVtYmVyO1xufTtcbi8qKlxuICogVGVzdCBkZWxlZ2F0ZSBmb3IgT0RhdGEgVjQuXG4gKi9cbmNvbnN0IE9EYXRhVGFibGVEZWxlZ2F0ZSA9IE9iamVjdC5hc3NpZ24oe30sIFRhYmxlRGVsZWdhdGUpO1xuXG4vKipcbiAqIEZldGNoZXMgdGhlIHJlbGV2YW50IG1ldGFkYXRhIGZvciB0aGUgdGFibGUgYW5kIHJldHVybnMgcHJvcGVydHkgaW5mbyBhcnJheS5cbiAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0aGUgTURDdGFibGVcbiAqIEByZXR1cm5zIEFycmF5IG9mIHByb3BlcnR5IGluZm9cbiAqL1xuT0RhdGFUYWJsZURlbGVnYXRlLmZldGNoUHJvcGVydGllcyA9IGFzeW5jIGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBQcm9taXNlPFByb3BlcnR5SW5mbz4ge1xuXHRjb25zdCBtb2RlbCA9IGF3YWl0IHRoaXMuX2dldE1vZGVsKHRhYmxlKTtcblx0Y29uc3QgcHJvcGVydGllcyA9IGF3YWl0IHRoaXMuX2NyZWF0ZVByb3BlcnR5SW5mb3ModGFibGUsIG1vZGVsKTtcblx0T0RhdGFUYWJsZURlbGVnYXRlLmNyZWF0ZUludGVybmFsQmluZGluZ0NvbnRleHQodGFibGUpO1xuXHRPRGF0YVRhYmxlRGVsZWdhdGUuc2V0U29ydENvbmRpdGlvbnModGFibGUsIHByb3BlcnRpZXMpO1xuXHRNYWNyb3NEZWxlZ2F0ZVV0aWwuc2V0Q2FjaGVkUHJvcGVydGllcyh0YWJsZSwgcHJvcGVydGllcyk7XG5cdCh0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIENvbnRleHQpLnNldFByb3BlcnR5KFwidGFibGVQcm9wZXJ0aWVzQXZhaWxhYmxlXCIsIHRydWUpO1xuXHRyZXR1cm4gcHJvcGVydGllcztcbn07XG5cbi8qKlxuICogU2V0IHNvcnQgY29uZGl0aW9ucyBvbiB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGUgVmFsdWVoZWxwIHRhYmxlIGluc3RhbmNlXG4gKiBAcGFyYW0gcHJvcGVydGllcyBQcm9wZXJ0eUluZm8gYXJyYXlcbiAqL1xuT0RhdGFUYWJsZURlbGVnYXRlLnNldFNvcnRDb25kaXRpb25zID0gZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgcHJvcGVydGllczogUHJvcGVydHlJbmZvW10pOiB2b2lkIHtcblx0Y29uc3Qgc29ydENvbmRpdGlvbnNDRCA9IHRhYmxlLmRhdGEoXCJzb3J0Q29uZGl0aW9uc1wiKTtcblx0Y29uc3QgcmF3U29ydENvbmRpdGlvbnMgPSBDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKHNvcnRDb25kaXRpb25zQ0QpIGFzIHsgc29ydGVyczogeyBuYW1lOiBzdHJpbmcgfVtdIH0gfCB1bmRlZmluZWQ7XG5cdGlmIChyYXdTb3J0Q29uZGl0aW9ucz8uc29ydGVycykge1xuXHRcdHJhd1NvcnRDb25kaXRpb25zLnNvcnRlcnMuZm9yRWFjaCgoc29ydENvbmRpdGlvbikgPT4ge1xuXHRcdFx0Y29uc3QgaW5mb05hbWUgPSBPRGF0YVRhYmxlRGVsZWdhdGUuY29udmVydFByb3BlcnR5UGF0aFRvSW5mb05hbWUoc29ydENvbmRpdGlvbi5uYW1lLCBwcm9wZXJ0aWVzKTtcblx0XHRcdGlmIChpbmZvTmFtZSAmJiBpbmZvTmFtZSAhPT0gc29ydENvbmRpdGlvbi5uYW1lKSB7XG5cdFx0XHRcdHNvcnRDb25kaXRpb24ubmFtZSA9IGluZm9OYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRhYmxlLnNldFNvcnRDb25kaXRpb25zKHsgLi4ucmF3U29ydENvbmRpdGlvbnMgfSk7XG5cdH1cbn07XG5cbi8qKlxuICogQ29udmVydCBhIHByb3BlcnR5IHBhdGggdG8gaXRzIGNvcnJlc3BvbmRpbmcgaW5mbyBuYW1lLlxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBQcm9wZXJ0eSBwYXRoIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIFRhYmxlIFByb3BlcnR5SW5mbyBhcnJheVxuICogQHJldHVybnMgUHJvcGVydHkgaW5mbyBuYW1lIGlmIGZvdW5kLCBvdGhlcndpc2UgcmV0dXJucyB0aGUgb3JpZ2luYWwgcHJvcGVydHkgcGF0aC5cbiAqL1xuT0RhdGFUYWJsZURlbGVnYXRlLmNvbnZlcnRQcm9wZXJ0eVBhdGhUb0luZm9OYW1lID0gZnVuY3Rpb24gKHByb3BlcnR5UGF0aDogc3RyaW5nLCBwcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSk6IHN0cmluZyB7XG5cdGNvbnN0IHByb3BlcnR5SW5mbyA9IHByb3BlcnRpZXMuZmluZCgoY29sdW1uKSA9PiB7XG5cdFx0cmV0dXJuICFjb2x1bW4ucHJvcGVydHlJbmZvcyAmJiBjb2x1bW4ucGF0aCA9PT0gcHJvcGVydHlQYXRoO1xuXHR9KTtcblx0cmV0dXJuIHByb3BlcnR5SW5mbz8ua2V5ID8/IHByb3BlcnR5UGF0aDtcbn07XG5cbk9EYXRhVGFibGVEZWxlZ2F0ZS5jcmVhdGVJbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRsZXQgZGlhbG9nOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCA9IHRhYmxlO1xuXHR3aGlsZSAoZGlhbG9nICYmICFkaWFsb2cuaXNBKFwic2FwLnVpLm1kYy52YWx1ZWhlbHAuRGlhbG9nXCIpKSB7XG5cdFx0ZGlhbG9nID0gKGRpYWxvZyBhcyBNYW5hZ2VkT2JqZWN0KS5nZXRQYXJlbnQoKTtcblx0fVxuXG5cdGNvbnN0IGludGVybmFsTW9kZWwgPSB0YWJsZS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblxuXHRpZiAoZGlhbG9nICYmIGludGVybmFsTW9kZWwpIHtcblx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gZGlhbG9nLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0bGV0IG5ld0ludGVybmFsQmluZGluZ0NvbnRleHRQYXRoO1xuXHRcdGlmIChpbnRlcm5hbEJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0UGF0aCA9IGludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpICsgYDo6VkhEaWFsb2c6OiR7ZGlhbG9nLmdldElkKCl9Ojp0YWJsZWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5ld0ludGVybmFsQmluZGluZ0NvbnRleHRQYXRoID0gYC9idWlsZGluZ2Jsb2Nrcy8ke3RhYmxlLmdldElkKCl9YDtcblx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvYnVpbGRpbmdibG9ja3NcIiwgeyAuLi5pbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL2J1aWxkaW5nYmxvY2tzXCIpIH0pO1xuXHRcdH1cblx0XHRjb25zdCBuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gaW50ZXJuYWxNb2RlbC5iaW5kQ29udGV4dChuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0UGF0aCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0dGFibGUuc2V0QmluZGluZ0NvbnRleHQobmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dCwgXCJpbnRlcm5hbFwiKTtcblx0fVxufTtcblxuLyoqXG4gKiBDb2xsZWN0IHJlbGF0ZWQgcHJvcGVydGllcyBmcm9tIGEgcHJvcGVydHkncyBhbm5vdGF0aW9ucy5cbiAqIEBwYXJhbSBkYXRhTW9kZWxQcm9wZXJ0eVBhdGggVGhlIG1vZGVsIG9iamVjdCBwYXRoIG9mIHRoZSBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgdGhhdCB3ZXJlIGlkZW50aWZpZWQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoZGF0YU1vZGVsUHJvcGVydHlQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik6IENvbXBsZXhQcm9wZXJ0eU1hcCB7XG5cdGNvbnN0IGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eVBhdGggPSBnZXRBZGRpdGlvbmFsUHJvcGVydHkoZGF0YU1vZGVsUHJvcGVydHlQYXRoKTtcblx0Y29uc3QgcmVsYXRlZFByb3BlcnRpZXM6IENvbXBsZXhQcm9wZXJ0eU1hcCA9IHt9O1xuXHRpZiAoZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5UGF0aD8udGFyZ2V0T2JqZWN0KSB7XG5cdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5ID0gZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5UGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5UGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgoZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5UGF0aCwgdHJ1ZSk7XG5cblx0XHRjb25zdCBwcm9wZXJ0eSA9IGRhdGFNb2RlbFByb3BlcnR5UGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxQcm9wZXJ0eVBhdGgsIHRydWUpO1xuXG5cdFx0Y29uc3QgdGV4dEFubm90YXRpb24gPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0LFxuXHRcdFx0dGV4dEFycmFuZ2VtZW50ID0gdGV4dEFubm90YXRpb24/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50Py50b1N0cmluZygpLFxuXHRcdFx0ZGlzcGxheU1vZGUgPSB0ZXh0QW5ub3RhdGlvbiAmJiB0ZXh0QXJyYW5nZW1lbnQgJiYgZ2V0RGlzcGxheU1vZGUocHJvcGVydHksIGRhdGFNb2RlbFByb3BlcnR5UGF0aC50YXJnZXRFbnRpdHlUeXBlKTtcblxuXHRcdGlmIChkaXNwbGF5TW9kZSA9PT0gXCJEZXNjcmlwdGlvblwiKSB7XG5cdFx0XHRyZWxhdGVkUHJvcGVydGllc1thZGRpdGlvbmFsUHJvcGVydHlQYXRoXSA9IGFkZGl0aW9uYWxQcm9wZXJ0eTtcblx0XHR9IGVsc2UgaWYgKChkaXNwbGF5TW9kZSAmJiBkaXNwbGF5TW9kZSAhPT0gXCJWYWx1ZVwiKSB8fCAhdGV4dEFubm90YXRpb24pIHtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5UGF0aF0gPSBwcm9wZXJ0eTtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzW2FkZGl0aW9uYWxQcm9wZXJ0eVBhdGhdID0gYWRkaXRpb25hbFByb3BlcnR5O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVsYXRlZFByb3BlcnRpZXM7XG59XG5cbk9EYXRhVGFibGVEZWxlZ2F0ZS5fY3JlYXRlUHJvcGVydHlJbmZvcyA9IGFzeW5jIGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIG1vZGVsOiBPRGF0YU1vZGVsKTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRjb25zdCBtZXRhZGF0YUluZm8gPSAodGFibGUuZ2V0RGVsZWdhdGUoKSBhcyB7IHBheWxvYWQ6IFBheWxvYWQgfSkucGF5bG9hZDtcblx0Y29uc3QgcHJvcGVydGllczogUHJvcGVydHlJbmZvW10gPSBbXTtcblx0Y29uc3QgZW50aXR5U2V0UGF0aCA9IGAvJHttZXRhZGF0YUluZm8uY29sbGVjdGlvbk5hbWV9YDtcblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cblx0cmV0dXJuIG1ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9QGApLnRoZW4oZnVuY3Rpb24gKGVudGl0eVNldEFubm90YXRpb25zOiBNZXRhTW9kZWxFbnRpdHlTZXRBbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3Qgc29ydFJlc3RyaWN0aW9uc0luZm8gPSBnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbyhlbnRpdHlTZXRBbm5vdGF0aW9ucyk7XG5cdFx0Y29uc3QgZmlsdGVyUmVzdHJpY3Rpb25zID0gZW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIl07XG5cdFx0Y29uc3QgZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyA9IGdldEZpbHRlclJlc3RyaWN0aW9uc0luZm8oZmlsdGVyUmVzdHJpY3Rpb25zKTtcblx0XHRjb25zdCBmaWx0ZXJGdW5jdGlvbnMgPSBlbnRpdHlTZXRBbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlckZ1bmN0aW9uc1wiXTtcblx0XHRjb25zdCBjYXNlU2Vuc2l0aXZlID0gTW9kZWxIZWxwZXIuaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKG1ldGFNb2RlbCwgZmlsdGVyRnVuY3Rpb25zKTtcblx0XHRjb25zdCBjdXN0b21EYXRhRm9yQ29sdW1ucyA9IE1hY3Jvc0RlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHtcblx0XHRcdGN1c3RvbURhdGE6IChQcm9wZXJ0eUluZm8gJiB7ICRUeXBlOiBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlIH0pW107XG5cdFx0fT4odGFibGUsIFwiY29sdW1uc1wiKSE7XG5cdFx0Y29uc3QgcHJvcGVydGllc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4gPSB7fTtcblx0XHRjb25zdCBkYXRhTW9kZWxFbnRpdHlQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKCh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpLmdldENvbnRleHQoZW50aXR5U2V0UGF0aCkpO1xuXHRcdGN1c3RvbURhdGFGb3JDb2x1bW5zLmN1c3RvbURhdGEuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uRGVmOiBQcm9wZXJ0eUluZm8gJiB7ICRUeXBlOiBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlIH0pIHtcblx0XHRcdGxldCB0eXBlQ29uZmlnID0gaXNUeXBlRmlsdGVyYWJsZShjb2x1bW5EZWYuJFR5cGUpXG5cdFx0XHRcdD8gdGFibGUuZ2V0VHlwZU1hcCgpLmdldFR5cGVDb25maWcoY29sdW1uRGVmLiRUeXBlKVxuXHRcdFx0XHQ6IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvID0ge1xuXHRcdFx0XHRrZXk6IGNvbHVtbkRlZi5wYXRoISxcblx0XHRcdFx0bGFiZWw6IGNvbHVtbkRlZi5sYWJlbFxuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3QgZGF0YU1vZGVsUHJvcGVydHlQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHk+KGRhdGFNb2RlbEVudGl0eVBhdGgsIGNvbHVtbkRlZi5wYXRoKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5ID0gZGF0YU1vZGVsUHJvcGVydHlQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0XHRcdGlmIChwcm9wZXJ0eSkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRQcm9wZXJ0eVBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbFByb3BlcnR5UGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdGlmIChpc1R5cGVGaWx0ZXJhYmxlKHByb3BlcnR5LnR5cGUgYXMga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZSkpIHtcblx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKHByb3BlcnR5KTtcblx0XHRcdFx0XHR0eXBlQ29uZmlnID1cblx0XHRcdFx0XHRcdFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPz8gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIixcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50c1xuXHRcdFx0XHRcdFx0KSA/PyB0eXBlQ29uZmlnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vQ2hlY2sgaWYgdGhlcmUgaXMgYW4gYWRkaXRpb25hbCBwcm9wZXJ0eSBsaW5rZWQgdG8gdGhlIHByb3BlcnR5IGFzIGEgVW5pdCwgQ3VycmVuY3ksIFRpbWV6b25lIG9yIHRleHRBcnJhbmdlbWVudFxuXHRcdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydGllc0luZm8gPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoZGF0YU1vZGVsUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnR5UGF0aHM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvKTtcblxuXHRcdFx0XHRpZiAocmVsYXRlZFByb3BlcnR5UGF0aHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MgPSByZWxhdGVkUHJvcGVydHlQYXRocztcblx0XHRcdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eVBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRcdFx0XHRcdHByb3BlcnRpZXNUb0JlQ3JlYXRlZFtwYXRoXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mb1twYXRoXTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQvLyBBbHNvIGFkZCBwcm9wZXJ0eSBmb3IgdGhlIGluT3V0IFBhcmFtZXRlcnMgb24gdGhlIFZhbHVlSGVscCB3aGVuIHRleHRBcnJhbmdlbWVudCBpcyBzZXQgdG8gI1RleHRPbmx5XG5cdFx0XHRcdFx0Ly8gSXQgd2lsbCBub3QgYmUgbGlua2VkIHRvIHRoZSBjb21wbGV4IFByb3BlcnR5IChCQ1AgMjI3MDE0MTE1NClcblx0XHRcdFx0XHRpZiAoIXJlbGF0ZWRQcm9wZXJ0eVBhdGhzLmZpbmQoKHBhdGgpID0+IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mb1twYXRoXSA9PT0gcHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0aWVzVG9CZUNyZWF0ZWRbdGFyZ2V0UHJvcGVydHlQYXRoXSA9IHByb3BlcnR5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8ucGF0aCA9IGNvbHVtbkRlZi5wYXRoO1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mby5kYXRhVHlwZSA9IHR5cGVDb25maWcuY2xhc3NOYW1lO1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mby5jb25zdHJhaW50cyA9IHR5cGVDb25maWcudHlwZUluc3RhbmNlLm9Db25zdHJhaW50cztcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZm9ybWF0T3B0aW9ucyA9IHR5cGVDb25maWcudHlwZUluc3RhbmNlLm9Gb3JtYXRPcHRpb25zO1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mby5zb3J0YWJsZSA9IGlzU29ydGFibGVQcm9wZXJ0eShzb3J0UmVzdHJpY3Rpb25zSW5mbywgY29sdW1uRGVmKTtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZmlsdGVyYWJsZSA9IGlzRmlsdGVyYWJsZVByb3BlcnR5KGZpbHRlclJlc3RyaWN0aW9uc0luZm8sIGNvbHVtbkRlZik7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLm1heENvbmRpdGlvbnMgPSBnZXRQcm9wZXJ0eU1heENvbmRpdGlvbnMoZmlsdGVyUmVzdHJpY3Rpb25zSW5mbywgY29sdW1uRGVmKTtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uY2FzZVNlbnNpdGl2ZSA9IGNhc2VTZW5zaXRpdmU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHByb3BlcnR5SW5mby5wYXRoID0gY29sdW1uRGVmLnBhdGg7XG5cdFx0XHRcdHByb3BlcnR5SW5mby5jYXNlU2Vuc2l0aXZlID0gY2FzZVNlbnNpdGl2ZTtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmRhdGFUeXBlID0gdHlwZUNvbmZpZy5jbGFzc05hbWU7XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlJbmZvKTtcblx0XHR9KTtcblx0XHRjb25zdCByZWxhdGVkQ29sdW1ucyA9IGNyZWF0ZVJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0cHJvcGVydGllc1RvQmVDcmVhdGVkLFxuXHRcdFx0cHJvcGVydGllcyxcblx0XHRcdHNvcnRSZXN0cmljdGlvbnNJbmZvLFxuXHRcdFx0ZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyxcblx0XHRcdGNhc2VTZW5zaXRpdmVcblx0XHQpO1xuXHRcdHJldHVybiBwcm9wZXJ0aWVzLmNvbmNhdChyZWxhdGVkQ29sdW1ucyk7XG5cdH0pO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBiaW5kaW5nIGluZm8gd2l0aCB0aGUgcmVsZXZhbnQgcGF0aCBhbmQgbW9kZWwgZnJvbSB0aGUgbWV0YWRhdGEuXG4gKiBAcGFyYW0gbWRjVGFibGUgVGhlIE1EQ1RhYmxlIGluc3RhbmNlXG4gKiBAcGFyYW0gYmluZGluZ0luZm8gVGhlIGJpbmRpbmdJbmZvIG9mIHRoZSB0YWJsZVxuICovXG5PRGF0YVRhYmxlRGVsZWdhdGUudXBkYXRlQmluZGluZ0luZm8gPSBmdW5jdGlvbiAobWRjVGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogU2VyaWFsaXplZENvbGxlY3Rpb25CaW5kaW5nSW5mbyk6IHZvaWQge1xuXHRUYWJsZURlbGVnYXRlLnVwZGF0ZUJpbmRpbmdJbmZvLmFwcGx5KHRoaXMsIFttZGNUYWJsZSwgYmluZGluZ0luZm9dKTtcblxuXHRjb25zdCBtZXRhZGF0YUluZm8gPSAobWRjVGFibGUuZ2V0RGVsZWdhdGUoKSBhcyBNZGNUYWJsZURlbGVnYXRlKS5wYXlsb2FkO1xuXG5cdGlmIChtZXRhZGF0YUluZm8pIHtcblx0XHRiaW5kaW5nSW5mby5wYXRoID0gYmluZGluZ0luZm8/LnBhdGggfHwgbWV0YWRhdGFJbmZvLmNvbGxlY3Rpb25QYXRoIHx8IGAvJHttZXRhZGF0YUluZm8uY29sbGVjdGlvbk5hbWV9YDtcblx0fVxuXG5cdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMgPSBiaW5kaW5nSW5mby5wYXJhbWV0ZXJzIHx8IHt9O1xuXG5cdGNvbnN0IGZpbHRlckJhciA9IEVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQobWRjVGFibGUuZ2V0RmlsdGVyKCkpIGFzIEZpbHRlckJhcixcblx0XHRpc0ZpbHRlckVuYWJsZWQgPSBtZGNUYWJsZS5pc0ZpbHRlcmluZ0VuYWJsZWQoKTtcblx0bGV0IGNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT47XG5cdGxldCBpbm5lckZpbHRlckluZm8sIG91dGVyRmlsdGVySW5mbzogRmlsdGVySW5mbztcblx0Y29uc3QgZmlsdGVycyA9IFtdO1xuXHRjb25zdCB0YWJsZVByb3BlcnRpZXMgPSBNYWNyb3NEZWxlZ2F0ZVV0aWwuZ2V0Q2FjaGVkUHJvcGVydGllcyhtZGNUYWJsZSkgYXMgdW5rbm93biBhcyBQcm9wZXJ0eUluZm9bXTtcblxuXHQvL1RPRE86IGNvbnNpZGVyIGEgbWVjaGFuaXNtICgnRmlsdGVyTWVyZ2VVdGlsJyBvciBlbmhhbmNlICdGaWx0ZXJVdGlsJykgdG8gYWxsb3cgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBkaWZmZXJlbnQgZmlsdGVycylcblx0aWYgKGlzRmlsdGVyRW5hYmxlZCkge1xuXHRcdGNvbmRpdGlvbnMgPSBtZGNUYWJsZS5nZXRDb25kaXRpb25zKCk7XG5cdFx0aW5uZXJGaWx0ZXJJbmZvID0gRmlsdGVyVXRpbC5nZXRGaWx0ZXJJbmZvKG1kY1RhYmxlLCBjb25kaXRpb25zLCB0YWJsZVByb3BlcnRpZXMsIFtdKSBhcyBGaWx0ZXJJbmZvO1xuXHRcdGlmIChpbm5lckZpbHRlckluZm8uZmlsdGVycykge1xuXHRcdFx0ZmlsdGVycy5wdXNoKGlubmVyRmlsdGVySW5mby5maWx0ZXJzKTtcblx0XHR9XG5cdH1cblx0Y29uc3QgaXNUcmVlVGFibGUgPSAhIW1ldGFkYXRhSW5mbz8uaGllcmFyY2h5UXVhbGlmaWVyO1xuXHRpZiAoaXNUcmVlVGFibGUpIHtcblx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkYWdncmVnYXRpb24gPSB7XG5cdFx0XHRoaWVyYXJjaHlRdWFsaWZpZXI6IG1ldGFkYXRhSW5mby5oaWVyYXJjaHlRdWFsaWZpZXIsXG5cdFx0XHRleHBhbmRUbzogbWV0YWRhdGFJbmZvLmluaXRpYWxFeHBhbnNpb25MZXZlbFxuXHRcdH07XG5cdH1cblx0aWYgKGZpbHRlckJhcikge1xuXHRcdGNvbmRpdGlvbnMgPSBmaWx0ZXJCYXIuZ2V0Q29uZGl0aW9ucygpO1xuXHRcdGlmIChjb25kaXRpb25zKSB7XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJOYW1lcyA9IERlbGVnYXRlVXRpbC5nZXRQYXJhbWV0ZXJOYW1lcyhmaWx0ZXJCYXIpO1xuXHRcdFx0Ly8gVGhlIHRhYmxlIHByb3BlcnRpZXMgbmVlZHMgdG8gdXBkYXRlZCB3aXRoIHRoZSBmaWx0ZXIgZmllbGQgaWYgbm8gU2VsZWN0aW9uZmllbGRzIGFyZSBhbm5vdGF0ZWQgYW5kIG5vdCBwYXJ0IGFzIHZhbHVlIGhlbHAgcGFyYW1ldGVyXG5cdFx0XHRPRGF0YVRhYmxlRGVsZWdhdGUuX3VwZGF0ZVByb3BlcnR5SW5mbyh0YWJsZVByb3BlcnRpZXMsIG1kY1RhYmxlLCBjb25kaXRpb25zLCBtZXRhZGF0YUluZm8pO1xuXHRcdFx0b3V0ZXJGaWx0ZXJJbmZvID0gRmlsdGVyVXRpbC5nZXRGaWx0ZXJJbmZvKGZpbHRlckJhciwgY29uZGl0aW9ucywgdGFibGVQcm9wZXJ0aWVzLCBwYXJhbWV0ZXJOYW1lcyk7XG5cblx0XHRcdGlmIChvdXRlckZpbHRlckluZm8uZmlsdGVycykge1xuXHRcdFx0XHRmaWx0ZXJzLnB1c2gob3V0ZXJGaWx0ZXJJbmZvLmZpbHRlcnMpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJQYXRoID0gRGVsZWdhdGVVdGlsLmdldFBhcmFtZXRlcnNJbmZvKGZpbHRlckJhciwgY29uZGl0aW9ucyk7XG5cdFx0XHRpZiAocGFyYW1ldGVyUGF0aCkge1xuXHRcdFx0XHRiaW5kaW5nSW5mby5wYXRoID0gcGFyYW1ldGVyUGF0aDtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCFpc1RyZWVUYWJsZSkge1xuXHRcdFx0Ly8gZ2V0IHRoZSBiYXNpYyBzZWFyY2hcblx0XHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCA9IENvbW1vblV0aWxzLm5vcm1hbGl6ZVNlYXJjaFRlcm0oZmlsdGVyQmFyLmdldFNlYXJjaCgpKSB8fCB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIGlmIChmaWx0ZXJCYXIuZ2V0U2VhcmNoKCkpIHtcblx0XHRcdGlmICghYmluZGluZ0luZm8ucGFyYW1ldGVycy4kJGFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRhZ2dyZWdhdGlvbiA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kJGFnZ3JlZ2F0aW9uLnNlYXJjaCA9IENvbW1vblV0aWxzLm5vcm1hbGl6ZVNlYXJjaFRlcm0oZmlsdGVyQmFyLmdldFNlYXJjaCgpKTtcblx0XHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRhZ2dyZWdhdGlvbi5leHBhbmRUbyA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuXHRcdH1cblx0fVxuXHQvLyBCQ1A6IDIzNzAwNzg2NjAgLSBzaGFyZWRSZXF1ZXN0IGlzIHNldCB0byBmYWxzZSBpbiBvcmRlciB0byBhdm9pZCBkZWFkbG9jayBzaXR1YXRpb24gd2hlcmUgdGhlIHRoZSBvRGF0YVxuXHQvLyBtb2RlbCBjYWNoZSBpcyBuZWl0aGVyIGNoYW5nZWFibGUgKHJlc3VsdCBvZiBMaXN0QmluZGluZy4kJHNoYXJlZFJlcXVlc3QgPSB0cnVlKSBub3IgZGVsZXRhYmxlXG5cdC8vIChyZXN1bHQgb2YgQ29udGV4dC5zZXRTZWxlY3RlZCh0cnVlKSAtPiBMaXN0QmluZGluZy5rZWVwQWxpdmUpXG5cdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRzaGFyZWRSZXF1ZXN0ID0gZmFsc2U7XG5cblx0dGhpcy5fYXBwbHlEZWZhdWx0U29ydGluZyhiaW5kaW5nSW5mbywgKG1kY1RhYmxlLmdldERlbGVnYXRlKCkgYXMgTWRjVGFibGVEZWxlZ2F0ZSkucGF5bG9hZCk7XG5cdC8vIGFkZCBzZWxlY3QgdG8gYmluZGluZ0luZm8gKEJDUCAyMTcwMTYzMDEyKVxuXHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWxlY3QgPSB0YWJsZVByb3BlcnRpZXM/LnJlZHVjZShmdW5jdGlvbiAocXVlcnk6IHN0cmluZywgcHJvcGVydHk6IFByb3BlcnR5SW5mbykge1xuXHRcdC8vIE5hdmlnYXRpb24gcHJvcGVydGllcyAocmVwcmVzZW50ZWQgYnkgWC9ZKSBzaG91bGQgbm90IGJlIGFkZGVkIHRvICRzZWxlY3QuXG5cdFx0Ly8gVG9EbyA6IFRoZXkgc2hvdWxkIGJlIGFkZGVkIGFzICRleHBhbmQ9WCgkc2VsZWN0PVkpIGluc3RlYWRcblx0XHRpZiAocHJvcGVydHkucGF0aCAmJiAhcHJvcGVydHkucGF0aC5pbmNsdWRlcyhcIi9cIikpIHtcblx0XHRcdHF1ZXJ5ID0gcXVlcnkgPyBgJHtxdWVyeX0sJHtwcm9wZXJ0eS5wYXRofWAgOiBwcm9wZXJ0eS5wYXRoO1xuXHRcdH1cblx0XHRyZXR1cm4gcXVlcnk7XG5cdH0sIFwiXCIpO1xuXG5cdC8vIEFkZCAkY291bnRcblx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kY291bnQgPSB0cnVlO1xuXG5cdC8vSWYgdGhlIGVudGl0eSBpcyBEcmFmdEVuYWJsZWQgYWRkIGEgRHJhZnRGaWx0ZXJcblx0aWYgKGJpbmRpbmdJbmZvLnBhdGggJiYgTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChtZGNUYWJsZS5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCwgYmluZGluZ0luZm8ucGF0aCkpIHtcblx0XHRmaWx0ZXJzLnB1c2gobmV3IEZpbHRlcihcIklzQWN0aXZlRW50aXR5XCIsIEZpbHRlck9wZXJhdG9yLkVRLCB0cnVlKSk7XG5cdH1cblx0YmluZGluZ0luZm8uZmlsdGVycyA9IG5ldyBGaWx0ZXIoZmlsdGVycyBhcyBGaWx0ZXJbXSwgdHJ1ZSk7XG59O1xuXG5PRGF0YVRhYmxlRGVsZWdhdGUuZ2V0VHlwZU1hcCA9IGZ1bmN0aW9uICgpOiBvYmplY3Qge1xuXHRyZXR1cm4gVHlwZU1hcDtcbn07XG5cbi8qKlxuICogR2V0IHRhYmxlIE1vZGVsLlxuICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIHRoZSBNREN0YWJsZVxuICogQHJldHVybnMgTW9kZWxcbiAqL1xuT0RhdGFUYWJsZURlbGVnYXRlLl9nZXRNb2RlbCA9IGFzeW5jIGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBQcm9taXNlPE1vZGVsPiB7XG5cdGNvbnN0IG1ldGFkYXRhSW5mbyA9ICh0YWJsZS5nZXREZWxlZ2F0ZSgpIGFzIHsgcGF5bG9hZDogeyBtb2RlbDogc3RyaW5nIH0gfSkucGF5bG9hZDtcblx0bGV0IG1vZGVsOiBNb2RlbCA9IHRhYmxlLmdldE1vZGVsKG1ldGFkYXRhSW5mby5tb2RlbCkhO1xuXHRpZiAoIW1vZGVsKSB7XG5cdFx0YXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdHRhYmxlLmF0dGFjaEV2ZW50T25jZShcIm1vZGVsQ29udGV4dENoYW5nZVwiLCByZXNvbHZlKTtcblx0XHR9KTtcblx0XHRtb2RlbCA9IHRhYmxlLmdldE1vZGVsKG1ldGFkYXRhSW5mby5tb2RlbCkhO1xuXHR9XG5cdHJldHVybiBtb2RlbDtcbn07XG5cbi8qKlxuICogQXBwbGllcyBhIGRlZmF1bHQgc29ydCBvcmRlciBpZiBuZWVkZWQuIFRoaXMgaXMgb25seSB0aGUgY2FzZSBpZiB0aGUgcmVxdWVzdCBpcyBub3QgYSAkc2VhcmNoIHJlcXVlc3RcbiAqIChtZWFucyB0aGUgcGFyYW1ldGVyICRzZWFyY2ggb2YgdGhlIGJpbmRpbmdJbmZvIGlzIHVuZGVmaW5lZCkgYW5kIGlmIGEgc29ydCBvcmRlciBoYXMgbm90IGJlZW4gc2V0IGFscmVhZHksXG4gKiBmb3IgZXhhbXBsZSwgdXNpbmcgYSBwcmVzZW50YXRpb24gdmFyaWFudCBvciBtYW51YWxseSBzZXQgYnkgdGhlIHVzZXIuXG4gKiBAcGFyYW0gYmluZGluZ0luZm8gVGhlIGJpbmRpbmdJbmZvIG9mIHRoZSB0YWJsZVxuICogQHBhcmFtIHBheWxvYWQgVGhlIHBheWxvYWQgb2YgdGhlIFRhYmxlRGVsZWdhdGVcbiAqL1xuT0RhdGFUYWJsZURlbGVnYXRlLl9hcHBseURlZmF1bHRTb3J0aW5nID0gZnVuY3Rpb24gKGJpbmRpbmdJbmZvOiBTZXJpYWxpemVkQ29sbGVjdGlvbkJpbmRpbmdJbmZvLCBwYXlsb2FkOiBQYXlsb2FkKTogdm9pZCB7XG5cdGlmIChcblx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzICYmXG5cdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoID09IHVuZGVmaW5lZCAmJlxuXHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRhZ2dyZWdhdGlvbj8uc2VhcmNoID09IHVuZGVmaW5lZCAmJlxuXHRcdGJpbmRpbmdJbmZvLnNvcnRlciAmJlxuXHRcdGJpbmRpbmdJbmZvLnNvcnRlci5sZW5ndGggPT0gMFxuXHQpIHtcblx0XHRjb25zdCBkZWZhdWx0U29ydFByb3BlcnR5TmFtZSA9IHBheWxvYWQgPyBwYXlsb2FkLmRlZmF1bHRTb3J0UHJvcGVydHlOYW1lIDogdW5kZWZpbmVkO1xuXHRcdGlmIChkZWZhdWx0U29ydFByb3BlcnR5TmFtZSkge1xuXHRcdFx0YmluZGluZ0luZm8uc29ydGVyLnB1c2gobmV3IFNvcnRlcihkZWZhdWx0U29ydFByb3BlcnR5TmFtZSwgZmFsc2UpKTtcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdGFibGUgcHJvcGVydGllcyB3aXRoIGZpbHRlciBmaWVsZCBpbmZvcy5cbiAqIEBwYXJhbSBhVGFibGVQcm9wZXJ0aWVzIEFycmF5IHdpdGggdGFibGUgcHJvcGVydGllc1xuICogQHBhcmFtIG9NRENUYWJsZSBUaGUgTURDVGFibGUgaW5zdGFuY2VcbiAqIEBwYXJhbSBtQ29uZGl0aW9ucyBUaGUgY29uZGl0aW9ucyBvZiB0aGUgdGFibGVcbiAqIEBwYXJhbSBvTWV0YWRhdGFJbmZvIFRoZSBtZXRhZGF0YSBpbmZvIG9mIHRoZSBmaWx0ZXIgZmllbGRcbiAqL1xuT0RhdGFUYWJsZURlbGVnYXRlLl91cGRhdGVQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoXG5cdGFUYWJsZVByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdLFxuXHRvTURDVGFibGU6IFRhYmxlLFxuXHRtQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+LFxuXHRvTWV0YWRhdGFJbmZvOiBQYXlsb2FkXG4pOiB2b2lkIHtcblx0Y29uc3QgYUNvbmRpdGlvbktleSA9IE9iamVjdC5rZXlzKG1Db25kaXRpb25zKSxcblx0XHRvTWV0YU1vZGVsID0gKG9NRENUYWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpITtcblx0YUNvbmRpdGlvbktleS5mb3JFYWNoKGZ1bmN0aW9uIChjb25kaXRpb25LZXk6IHN0cmluZykge1xuXHRcdC8vIFRoZSB0eXBlQ29uZmlnIGlzIG5vdCBzZXQgaW4gdGhlIHRhYmxlIHByb3BlcnR5SW5mb3MsIGJ1dCB3ZSBuZWVkIHRvIHNldCBpdCBmb3IgdGhlIGZpbHRlciBmaWVsZHNcblx0XHRjb25zdCBjb25kaXRpb25LZXlUeXBlID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYC8ke29NZXRhZGF0YUluZm8uY29sbGVjdGlvbk5hbWV9LyR7Y29uZGl0aW9uS2V5fWApPy4kVHlwZSA/PyBcIkVkbS5TdHJpbmdcIjtcblx0XHRjb25zdCB0eXBlQ29uZmlnID0gb01EQ1RhYmxlLmdldFR5cGVNYXAoKS5nZXRUeXBlQ29uZmlnKGNvbmRpdGlvbktleVR5cGUpO1xuXHRcdGFUYWJsZVByb3BlcnRpZXMuZm9yRWFjaCgodGFibGVQcm9wZXJ0eSwgaW5kZXgpID0+IHtcblx0XHRcdGlmICh0YWJsZVByb3BlcnR5LnBhdGggPT09IGNvbmRpdGlvbktleSkge1xuXHRcdFx0XHQoYVRhYmxlUHJvcGVydGllc1tpbmRleF0gYXMgUHJvcGVydHlJbmZvICYgeyB0eXBlQ29uZmlnOiBvYmplY3QgfSkudHlwZUNvbmZpZyA9IHR5cGVDb25maWc7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKFxuXHRcdFx0YVRhYmxlUHJvcGVydGllcy5maW5kSW5kZXgoZnVuY3Rpb24gKHRhYmxlUHJvcGVydHk6IFByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRyZXR1cm4gdGFibGVQcm9wZXJ0eS5wYXRoID09PSBjb25kaXRpb25LZXk7XG5cdFx0XHR9KSA9PT0gLTFcblx0XHQpIHtcblx0XHRcdGNvbnN0IG9Db2x1bW5EZWY6IFByb3BlcnR5SW5mbyA9IHtcblx0XHRcdFx0a2V5OiBjb25kaXRpb25LZXksXG5cdFx0XHRcdGxhYmVsOiBjb25kaXRpb25LZXksXG5cdFx0XHRcdHBhdGg6IGNvbmRpdGlvbktleSxcblx0XHRcdFx0ZGF0YVR5cGU6IHR5cGVDb25maWcudHlwZUluc3RhbmNlLmJhc2VUeXBlLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiB0eXBlQ29uZmlnLnR5cGVJbnN0YW5jZT8ub0Zvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdGNvbnN0cmFpbnRzOiB0eXBlQ29uZmlnLnR5cGVJbnN0YW5jZT8ub0NvbnN0cmFpbnRzXG5cdFx0XHR9O1xuXHRcdFx0YVRhYmxlUHJvcGVydGllcy5wdXNoKG9Db2x1bW5EZWYpO1xuXHRcdH1cblx0fSk7XG59O1xuXG5PRGF0YVRhYmxlRGVsZWdhdGUudXBkYXRlQmluZGluZyA9IGZ1bmN0aW9uIChcblx0b1RhYmxlOiBUYWJsZSxcblx0b0JpbmRpbmdJbmZvOiBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbyAmIHtcblx0XHRwYXJhbWV0ZXJzOiB7XG5cdFx0XHQkc2VhcmNoPzogc3RyaW5nO1xuXHRcdH07XG5cdH0sXG5cdG9CaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nXG4pOiB2b2lkIHtcblx0bGV0IGJOZWVkTWFudWFsUmVmcmVzaCA9IGZhbHNlO1xuXHRjb25zdCBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRjb25zdCBzTWFudWFsVXBkYXRlUHJvcGVydHlLZXkgPSBcInBlbmRpbmdNYW51YWxCaW5kaW5nVXBkYXRlXCI7XG5cdGNvbnN0IHNMYXN0U2VhcmNoID0gXCJsYXN0U2VhcmNoXCI7XG5cdGNvbnN0IHNMYXN0RmlsdGVyID0gXCJsYXN0RmlsdGVyXCI7XG5cdGNvbnN0IGJQZW5kaW5nTWFudWFsVXBkYXRlID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KHNNYW51YWxVcGRhdGVQcm9wZXJ0eUtleSk7XG5cdGNvbnN0IGxhc3RTZWFyY2ggPSBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoc0xhc3RTZWFyY2gpO1xuXHRjb25zdCBsYXN0RmlsdGVyID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KHNMYXN0RmlsdGVyKTtcblx0bGV0IG9Sb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblxuXHQvL29CaW5kaW5nPW51bGwgbWVhbnMgdGhhdCBhIHJlYmluZGluZyBuZWVkcyB0byBiZSBmb3JjZWQgdmlhIHVwZGF0ZUJpbmRpbmcgaW4gbWRjIFRhYmxlRGVsZWdhdGVcblx0VGFibGVEZWxlZ2F0ZS51cGRhdGVCaW5kaW5nLmFwcGx5KE9EYXRhVGFibGVEZWxlZ2F0ZSwgW29UYWJsZSwgb0JpbmRpbmdJbmZvLCBvQmluZGluZ10pO1xuXHQvL2dldCByb3cgYmluZGluZyBhZnRlciByZWJpbmQgZnJvbSBUYWJsZURlbGVnYXRlLnVwZGF0ZUJpbmRpbmcgaW4gY2FzZSBvQmluZGluZyB3YXMgbnVsbFxuXHRpZiAoIW9Sb3dCaW5kaW5nKSB7XG5cdFx0b1Jvd0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHR9XG5cdGlmIChvUm93QmluZGluZykge1xuXHRcdC8qKlxuXHRcdCAqIE1hbnVhbCByZWZyZXNoIGlmIGZpbHRlcnMgYXJlIG5vdCBjaGFuZ2VkIGJ5IGJpbmRpbmcucmVmcmVzaCgpIHNpbmNlIHVwZGF0aW5nIHRoZSBiaW5kaW5nSW5mb1xuXHRcdCAqIGlzIG5vdCBlbm91Z2ggdG8gdHJpZ2dlciBhIGJhdGNoIHJlcXVlc3QuXG5cdFx0ICogSW4gY2FzZSB0aGVyZSBpcyBubyBpbnRlcm5hbEJpbmRpbmdDb250ZXh0IChzZWUgQkNQIDIyODAxNjE1MjQpIHdlIGNhbiBub3QgZGV0ZXJtaW5lIGlmIGEgbWFudWFsXG5cdFx0ICogcmVmcmVzaCBpcyBuZWVkZWQgb3Igbm90LiBUaGVyZWZvcmUsIHdlIGFsd2F5cyByZWZyZXNoIGluIHRoaXMgc3BlY2lhbCBjYXNlXG5cdFx0ICovXG5cdFx0Yk5lZWRNYW51YWxSZWZyZXNoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHRcblx0XHRcdD8gZGVlcEVxdWFsKG9CaW5kaW5nSW5mby5maWx0ZXJzLCBsYXN0RmlsdGVyKSAmJiBvQmluZGluZ0luZm8ucGFyYW1ldGVycz8uJHNlYXJjaCA9PT0gbGFzdFNlYXJjaCAmJiAhYlBlbmRpbmdNYW51YWxVcGRhdGVcblx0XHRcdDogdHJ1ZTtcblx0fVxuXHRvSW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoc0xhc3RTZWFyY2gsIG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzPy4kc2VhcmNoKTtcblx0b0ludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KHNMYXN0RmlsdGVyLCBvQmluZGluZ0luZm8uZmlsdGVycyk7XG5cblx0aWYgKGJOZWVkTWFudWFsUmVmcmVzaCAmJiBvVGFibGUuZ2V0RmlsdGVyKCkpIHtcblx0XHRvSW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoc01hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCB0cnVlKTtcblx0XHRvUm93QmluZGluZ1xuXHRcdFx0LnJlcXVlc3RSZWZyZXNoKG9Sb3dCaW5kaW5nLmdldEdyb3VwSWQoKSlcblx0XHRcdC5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KHNNYW51YWxVcGRhdGVQcm9wZXJ0eUtleSwgZmFsc2UpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlZnJlc2hpbmcgYSBmaWx0ZXJCYXIgVkggdGFibGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9KTtcblx0fVxuXHRvVGFibGUuZmlyZUV2ZW50KFwiYmluZGluZ1VwZGF0ZWRcIik7XG5cdC8vbm8gbmVlZCB0byBjaGVjayBmb3Igc2VtYW50aWMgdGFyZ2V0cyBoZXJlIHNpbmNlIHdlIGFyZSBpbiBhIFZIIGFuZCBkb24ndCB3YW50IHRvIGFsbG93IGZ1cnRoZXIgbmF2aWdhdGlvblxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2ltcGxlIHByb3BlcnR5IGZvciBlYWNoIGlkZW50aWZpZWQgY29tcGxleCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBwcm9wZXJ0aWVzVG9CZUNyZWF0ZWQgSWRlbnRpZmllZCBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIGV4aXN0aW5nQ29sdW1ucyBUaGUgbGlzdCBvZiBjb2x1bW5zIGNyZWF0ZWQgZm9yIHByb3BlcnRpZXMgZGVmaW5lZCBvbiB0aGUgVmFsdWUgTGlzdC5cbiAqIEBwYXJhbSBzb3J0UmVzdHJpY3Rpb25zSW5mbyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgc29ydCByZXN0cmljdGlvbiBpbmZvcm1hdGlvblxuICogQHBhcmFtIGZpbHRlclJlc3RyaWN0aW9uc0luZm8gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbHRlciByZXN0cmljdGlvbiBpbmZvcm1hdGlvblxuICogQHBhcmFtIGNhc2VTZW5zaXRpdmVcbiAqIEByZXR1cm5zIFRoZSBhcnJheSBvZiBwcm9wZXJ0aWVzIGNyZWF0ZWQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjcmVhdGVSZWxhdGVkUHJvcGVydGllcyhcblx0cHJvcGVydGllc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4sXG5cdGV4aXN0aW5nQ29sdW1uczogUHJvcGVydHlJbmZvW10sXG5cdHNvcnRSZXN0cmljdGlvbnNJbmZvOiBTb3J0UmVzdHJpY3Rpb25zSW5mb1R5cGUsXG5cdGZpbHRlclJlc3RyaWN0aW9uc0luZm86IEZpbHRlclJlc3RyaWN0aW9uc0luZm9UeXBlLFxuXHRjYXNlU2Vuc2l0aXZlPzogYm9vbGVhblxuKTogUHJvcGVydHlJbmZvW10ge1xuXHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30sXG5cdFx0cmVsYXRlZENvbHVtbnM6IFByb3BlcnR5SW5mb1tdID0gW107XG5cdE9iamVjdC5rZXlzKHByb3BlcnRpZXNUb0JlQ3JlYXRlZCkuZm9yRWFjaCgocGF0aCkgPT4ge1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1RvQmVDcmVhdGVkW3BhdGhdLFxuXHRcdFx0cmVsYXRlZENvbHVtbiA9IGV4aXN0aW5nQ29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5wYXRoID09PSBwYXRoKTsgLy8gQ29tcGxleCBwcm9wZXJ0aWVzIGRvZXNuJ3QgaGF2ZSBwYXRoIHNvIG9ubHkgc2ltcGxlIGNvbHVtbiBhcmUgZm91bmRcblx0XHRpZiAoIXJlbGF0ZWRDb2x1bW4pIHtcblx0XHRcdGNvbnN0IG5ld05hbWUgPSBgUHJvcGVydHk6OiR7cGF0aH1gO1xuXHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZU1hcFtwYXRoXSA9IG5ld05hbWU7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKHByb3BlcnR5KTtcblx0XHRcdGNvbnN0IHZhbHVlSGVscENvbHVtblR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID8/IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIsXG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdCk7XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHBUYWJsZUNvbHVtbjogUHJvcGVydHlJbmZvID0ge1xuXHRcdFx0XHRrZXk6IG5ld05hbWUsXG5cdFx0XHRcdGxhYmVsOiBnZXRMYWJlbChwcm9wZXJ0eSksXG5cdFx0XHRcdHBhdGgsXG5cdFx0XHRcdHNvcnRhYmxlOiBpc1NvcnRhYmxlUHJvcGVydHkoc29ydFJlc3RyaWN0aW9uc0luZm8sIHByb3BlcnR5KSxcblx0XHRcdFx0ZmlsdGVyYWJsZTogaXNGaWx0ZXJhYmxlUHJvcGVydHkoZmlsdGVyUmVzdHJpY3Rpb25zSW5mbywgcHJvcGVydHkpLFxuXHRcdFx0XHRkYXRhVHlwZTogdmFsdWVIZWxwQ29sdW1uVHlwZUNvbmZpZy5jbGFzc05hbWUsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IGlzVHlwZUZpbHRlcmFibGUocHJvcGVydHkudHlwZSBhcyBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlKVxuXHRcdFx0XHRcdD8gcHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnNcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0Y29uc3RyYWludHM6IGlzVHlwZUZpbHRlcmFibGUocHJvcGVydHkudHlwZSBhcyBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlKVxuXHRcdFx0XHRcdD8gcHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmVcblx0XHRcdH07XG5cdFx0XHR2YWx1ZUhlbHBUYWJsZUNvbHVtbi5tYXhDb25kaXRpb25zID0gZ2V0UHJvcGVydHlNYXhDb25kaXRpb25zKGZpbHRlclJlc3RyaWN0aW9uc0luZm8sIHZhbHVlSGVscFRhYmxlQ29sdW1uKTtcblx0XHRcdHJlbGF0ZWRDb2x1bW5zLnB1c2godmFsdWVIZWxwVGFibGVDb2x1bW4pO1xuXHRcdH1cblx0fSk7XG5cdC8vIFRoZSBwcm9wZXJ0eSAna2V5JyBoYXMgYmVlbiBwcmVmaXhlZCB3aXRoICdQcm9wZXJ0eTo6JyBmb3IgdW5pcXVlbmVzcy5cblx0Ly8gVXBkYXRlIHRoZSBzYW1lIGluIG90aGVyIHByb3BlcnR5SW5mb3NbXSByZWZlcmVuY2VzIHdoaWNoIHBvaW50IHRvIHRoaXMgcHJvcGVydHkuXG5cdGV4aXN0aW5nQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRpZiAoY29sdW1uLnByb3BlcnR5SW5mb3MpIHtcblx0XHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zID0gY29sdW1uLnByb3BlcnR5SW5mb3M/Lm1hcCgoY29sdW1uTmFtZSkgPT4gcmVsYXRlZFByb3BlcnR5TmFtZU1hcFtjb2x1bW5OYW1lXSA/PyBjb2x1bW5OYW1lKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gcmVsYXRlZENvbHVtbnM7XG59XG5cbi8qKlxuICogSWRlbnRpZmllcyB0aGUgbWF4Q29uZGl0aW9ucyBmb3IgYSBnaXZlbiBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBmaWx0ZXJSZXN0cmljdGlvbnNJbmZvIFRoZSBmaWx0ZXIgcmVzdHJpY3Rpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVzdHJpY3Rpb24gYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5LlxuICogQHJldHVybnMgYC0xYCBvciBgMWAgaWYgdGhlIHByb3BlcnR5IGlzIGEgTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24uXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5TWF4Q29uZGl0aW9ucyhmaWx0ZXJSZXN0cmljdGlvbnNJbmZvOiBGaWx0ZXJSZXN0cmljdGlvbnNJbmZvVHlwZSwgcHJvcGVydHk6IFByb3BlcnR5SW5mbyB8IFByb3BlcnR5KTogbnVtYmVyIHtcblx0Y29uc3QgcHJvcGVydHlQYXRoID0gZ2V0UGF0aChwcm9wZXJ0eSk7XG5cdHJldHVybiBwcm9wZXJ0eVBhdGggJiZcblx0XHRmaWx0ZXJSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mbz8uaGFzT3duUHJvcGVydHkocHJvcGVydHlQYXRoKSAmJlxuXHRcdGlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24oZmlsdGVyUmVzdHJpY3Rpb25zSW5mby5wcm9wZXJ0eUluZm9bcHJvcGVydHlQYXRoXSBhcyB1bmtub3duIGFzIHN0cmluZylcblx0XHQ/IC0xXG5cdFx0OiAxO1xufVxuXG4vKipcbiAqIElkZW50aWZpZXMgdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgd2hpY2ggcmVmZXJlbmNlcyB0byB0aGUgdW5pdCwgdGltZXpvbmUsIHRleHRBcnJhbmdlbWVudCBvciBjdXJyZW5jeS5cbiAqIEBwYXJhbSBkYXRhTW9kZWxQcm9wZXJ0eVBhdGggVGhlIG1vZGVsIG9iamVjdCBwYXRoIG9mIHRoZSBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIFRoZSBhZGRpdGlvbmFsIHByb3BlcnR5LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZ2V0QWRkaXRpb25hbFByb3BlcnR5KGRhdGFNb2RlbFByb3BlcnR5UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHByb3BlcnR5ID0gZGF0YU1vZGVsUHJvcGVydHlQYXRoLnRhcmdldE9iamVjdDtcblx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5UGF0aCA9XG5cdFx0cHJvcGVydHkgJiZcblx0XHQoZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgocHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgocHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aChwcm9wZXJ0eSkgfHxcblx0XHRcdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aChwcm9wZXJ0eSkpO1xuXHRpZiAoIWFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eSA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5PihkYXRhTW9kZWxQcm9wZXJ0eVBhdGgsIGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgpO1xuXG5cdC8vQWRkaXRpb25hbCBQcm9wZXJ0eSBjb3VsZCByZWZlciB0byBhIG5hdmlnYXRpb24gcHJvcGVydHksIGtlZXAgdGhlIGtleSBhbmQgcGF0aCBhcyBuYXZpZ2F0aW9uIHByb3BlcnR5XG5cdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eSA9IGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eS50YXJnZXRPYmplY3Q7XG5cdGlmICghYWRkaXRpb25hbFByb3BlcnR5KSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBPRGF0YVRhYmxlRGVsZWdhdGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTJEQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQSxrQkFBa0IsR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVDLGFBQWEsQ0FBQzs7RUFFM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBSCxrQkFBa0IsQ0FBQ0ksZUFBZSxHQUFHLGdCQUFnQkMsS0FBWSxFQUF5QjtJQUN6RixNQUFNQyxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUNDLFNBQVMsQ0FBQ0YsS0FBSyxDQUFDO0lBQ3pDLE1BQU1HLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQ0Msb0JBQW9CLENBQUNKLEtBQUssRUFBRUMsS0FBSyxDQUFDO0lBQ2hFTixrQkFBa0IsQ0FBQ1UsNEJBQTRCLENBQUNMLEtBQUssQ0FBQztJQUN0REwsa0JBQWtCLENBQUNXLGlCQUFpQixDQUFDTixLQUFLLEVBQUVHLFVBQVUsQ0FBQztJQUN2REksa0JBQWtCLENBQUNDLG1CQUFtQixDQUFDUixLQUFLLEVBQUVHLFVBQVUsQ0FBQztJQUN4REgsS0FBSyxDQUFDUyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBYUMsV0FBVyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQztJQUM5RixPQUFPUCxVQUFVO0VBQ2xCLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBUixrQkFBa0IsQ0FBQ1csaUJBQWlCLEdBQUcsVUFBVU4sS0FBWSxFQUFFRyxVQUEwQixFQUFRO0lBQ2hHLE1BQU1RLGdCQUFnQixHQUFHWCxLQUFLLENBQUNZLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNyRCxNQUFNQyxpQkFBaUIsR0FBR0MsWUFBWSxDQUFDQyxlQUFlLENBQUNKLGdCQUFnQixDQUFnRDtJQUN2SCxJQUFJRSxpQkFBaUIsRUFBRUcsT0FBTyxFQUFFO01BQy9CSCxpQkFBaUIsQ0FBQ0csT0FBTyxDQUFDQyxPQUFPLENBQUVDLGFBQWEsSUFBSztRQUNwRCxNQUFNQyxRQUFRLEdBQUd4QixrQkFBa0IsQ0FBQ3lCLDZCQUE2QixDQUFDRixhQUFhLENBQUNHLElBQUksRUFBRWxCLFVBQVUsQ0FBQztRQUNqRyxJQUFJZ0IsUUFBUSxJQUFJQSxRQUFRLEtBQUtELGFBQWEsQ0FBQ0csSUFBSSxFQUFFO1VBQ2hESCxhQUFhLENBQUNHLElBQUksR0FBR0YsUUFBUTtRQUM5QjtNQUNELENBQUMsQ0FBQztNQUNGbkIsS0FBSyxDQUFDTSxpQkFBaUIsQ0FBQztRQUFFLEdBQUdPO01BQWtCLENBQUMsQ0FBQztJQUNsRDtFQUNELENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0FsQixrQkFBa0IsQ0FBQ3lCLDZCQUE2QixHQUFHLFVBQVVFLFlBQW9CLEVBQUVuQixVQUEwQixFQUFVO0lBQ3RILE1BQU1vQixZQUFZLEdBQUdwQixVQUFVLENBQUNxQixJQUFJLENBQUVDLE1BQU0sSUFBSztNQUNoRCxPQUFPLENBQUNBLE1BQU0sQ0FBQ0MsYUFBYSxJQUFJRCxNQUFNLENBQUNFLElBQUksS0FBS0wsWUFBWTtJQUM3RCxDQUFDLENBQUM7SUFDRixPQUFPQyxZQUFZLEVBQUVLLEdBQUcsSUFBSU4sWUFBWTtFQUN6QyxDQUFDO0VBRUQzQixrQkFBa0IsQ0FBQ1UsNEJBQTRCLEdBQUcsVUFBVUwsS0FBWSxFQUFRO0lBQy9FLElBQUk2QixNQUE0QixHQUFHN0IsS0FBSztJQUN4QyxPQUFPNkIsTUFBTSxJQUFJLENBQUNBLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDLDZCQUE2QixDQUFDLEVBQUU7TUFDNURELE1BQU0sR0FBSUEsTUFBTSxDQUFtQkUsU0FBUyxDQUFDLENBQUM7SUFDL0M7SUFFQSxNQUFNQyxhQUFhLEdBQUdoQyxLQUFLLENBQUNpQyxRQUFRLENBQUMsVUFBVSxDQUFjO0lBRTdELElBQUlKLE1BQU0sSUFBSUcsYUFBYSxFQUFFO01BQzVCLE1BQU1FLHNCQUFzQixHQUFHTCxNQUFNLENBQUNwQixpQkFBaUIsQ0FBQyxVQUFVLENBQUM7TUFDbkUsSUFBSTBCLDZCQUE2QjtNQUNqQyxJQUFJRCxzQkFBc0IsRUFBRTtRQUMzQkMsNkJBQTZCLEdBQUdELHNCQUFzQixDQUFDRSxPQUFPLENBQUMsQ0FBQyxHQUFHLGVBQWVQLE1BQU0sQ0FBQ1EsS0FBSyxDQUFDLENBQUMsU0FBUztNQUMxRyxDQUFDLE1BQU07UUFDTkYsNkJBQTZCLEdBQUcsbUJBQW1CbkMsS0FBSyxDQUFDcUMsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUNsRUwsYUFBYSxDQUFDdEIsV0FBVyxDQUFDLGlCQUFpQixFQUFFO1VBQUUsR0FBR3NCLGFBQWEsQ0FBQ00sV0FBVyxDQUFDLGlCQUFpQjtRQUFFLENBQUMsQ0FBQztNQUNsRztNQUNBLE1BQU1DLHlCQUF5QixHQUFHUCxhQUFhLENBQUNRLFdBQVcsQ0FBQ0wsNkJBQTZCLENBQUMsQ0FBQ00sZUFBZSxDQUFDLENBQUM7TUFDNUd6QyxLQUFLLENBQUMwQyxpQkFBaUIsQ0FBQ0gseUJBQXlCLEVBQUUsVUFBVSxDQUFDO0lBQy9EO0VBQ0QsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTSSx3QkFBd0JBLENBQUNDLHFCQUFvRCxFQUFzQjtJQUMzRyxNQUFNQywrQkFBK0IsR0FBR0MscUJBQXFCLENBQUNGLHFCQUFxQixDQUFDO0lBQ3BGLE1BQU1HLGlCQUFxQyxHQUFHLENBQUMsQ0FBQztJQUNoRCxJQUFJRiwrQkFBK0IsRUFBRUcsWUFBWSxFQUFFO01BQ2xELE1BQU1DLGtCQUFrQixHQUFHSiwrQkFBK0IsQ0FBQ0csWUFBWTtNQUN2RSxNQUFNRSxzQkFBc0IsR0FBR0MsbUJBQW1CLENBQUNOLCtCQUErQixFQUFFLElBQUksQ0FBQztNQUV6RixNQUFNTyxRQUFRLEdBQUdSLHFCQUFxQixDQUFDSSxZQUF3QjtNQUMvRCxNQUFNMUIsWUFBWSxHQUFHNkIsbUJBQW1CLENBQUNQLHFCQUFxQixFQUFFLElBQUksQ0FBQztNQUVyRSxNQUFNUyxjQUFjLEdBQUdELFFBQVEsQ0FBQ0UsV0FBVyxFQUFFQyxNQUFNLEVBQUVDLElBQUk7UUFDeERDLGVBQWUsR0FBR0osY0FBYyxFQUFFQyxXQUFXLEVBQUVJLEVBQUUsRUFBRUMsZUFBZSxFQUFFQyxRQUFRLENBQUMsQ0FBQztRQUM5RUMsV0FBVyxHQUFHUixjQUFjLElBQUlJLGVBQWUsSUFBSUssY0FBYyxDQUFDVixRQUFRLEVBQUVSLHFCQUFxQixDQUFDbUIsZ0JBQWdCLENBQUM7TUFFcEgsSUFBSUYsV0FBVyxLQUFLLGFBQWEsRUFBRTtRQUNsQ2QsaUJBQWlCLENBQUNHLHNCQUFzQixDQUFDLEdBQUdELGtCQUFrQjtNQUMvRCxDQUFDLE1BQU0sSUFBS1ksV0FBVyxJQUFJQSxXQUFXLEtBQUssT0FBTyxJQUFLLENBQUNSLGNBQWMsRUFBRTtRQUN2RU4saUJBQWlCLENBQUN6QixZQUFZLENBQUMsR0FBRzhCLFFBQVE7UUFDMUNMLGlCQUFpQixDQUFDRyxzQkFBc0IsQ0FBQyxHQUFHRCxrQkFBa0I7TUFDL0Q7SUFDRDtJQUNBLE9BQU9GLGlCQUFpQjtFQUN6QjtFQUVBcEQsa0JBQWtCLENBQUNTLG9CQUFvQixHQUFHLGdCQUFnQkosS0FBWSxFQUFFQyxLQUFpQixFQUEyQjtJQUNuSCxNQUFNK0QsWUFBWSxHQUFJaEUsS0FBSyxDQUFDaUUsV0FBVyxDQUFDLENBQUMsQ0FBMEJDLE9BQU87SUFDMUUsTUFBTS9ELFVBQTBCLEdBQUcsRUFBRTtJQUNyQyxNQUFNZ0UsYUFBYSxHQUFHLElBQUlILFlBQVksQ0FBQ0ksY0FBYyxFQUFFO0lBQ3ZELE1BQU1DLFNBQVMsR0FBR3BFLEtBQUssQ0FBQ3FFLFlBQVksQ0FBQyxDQUFDO0lBRXRDLE9BQU9ELFNBQVMsQ0FBQ0UsYUFBYSxDQUFDLEdBQUdKLGFBQWEsR0FBRyxDQUFDLENBQUNLLElBQUksQ0FBQyxVQUFVQyxvQkFBa0QsRUFBRTtNQUN0SCxNQUFNQyxvQkFBb0IsR0FBR0MsdUJBQXVCLENBQUNGLG9CQUFvQixDQUFDO01BQzFFLE1BQU1HLGtCQUFrQixHQUFHSCxvQkFBb0IsQ0FBQywrQ0FBK0MsQ0FBQztNQUNoRyxNQUFNSSxzQkFBc0IsR0FBR0MseUJBQXlCLENBQUNGLGtCQUFrQixDQUFDO01BQzVFLE1BQU1HLGVBQWUsR0FBR04sb0JBQW9CLENBQUMsNENBQTRDLENBQUM7TUFDMUYsTUFBTU8sYUFBYSxHQUFHQyxXQUFXLENBQUNDLHdCQUF3QixDQUFDYixTQUFTLEVBQUVVLGVBQWUsQ0FBQztNQUN0RixNQUFNSSxvQkFBb0IsR0FBRzVFLGtCQUFrQixDQUFDNkUsYUFBYSxDQUUxRHBGLEtBQUssRUFBRSxTQUFTLENBQUU7TUFDckIsTUFBTXFGLHFCQUErQyxHQUFHLENBQUMsQ0FBQztNQUMxRCxNQUFNQyxtQkFBbUIsR0FBR0MsMkJBQTJCLENBQUV2RixLQUFLLENBQUNpQyxRQUFRLENBQUMsQ0FBQyxDQUFnQnFDLFlBQVksQ0FBQyxDQUFDLENBQUNrQixVQUFVLENBQUNyQixhQUFhLENBQUMsQ0FBQztNQUNsSWdCLG9CQUFvQixDQUFDTSxVQUFVLENBQUN4RSxPQUFPLENBQUMsVUFBVXlFLFNBQXVFLEVBQUU7UUFDMUgsSUFBSUMsVUFBVSxHQUFHQyxnQkFBZ0IsQ0FBQ0YsU0FBUyxDQUFDRyxLQUFLLENBQUMsR0FDL0M3RixLQUFLLENBQUM4RixVQUFVLENBQUMsQ0FBQyxDQUFDQyxhQUFhLENBQUNMLFNBQVMsQ0FBQ0csS0FBSyxDQUFDLEdBQ2pERyxPQUFPLENBQUNELGFBQWEsQ0FBQyxnQ0FBZ0MsQ0FBQztRQUMxRCxNQUFNeEUsWUFBMEIsR0FBRztVQUNsQ0ssR0FBRyxFQUFFOEQsU0FBUyxDQUFDL0QsSUFBSztVQUNwQnNFLEtBQUssRUFBRVAsU0FBUyxDQUFDTztRQUNsQixDQUFDO1FBRUQsTUFBTXJELHFCQUFxQixHQUFHc0Qsb0JBQW9CLENBQVdaLG1CQUFtQixFQUFFSSxTQUFTLENBQUMvRCxJQUFJLENBQUM7UUFDakcsTUFBTXlCLFFBQVEsR0FBR1IscUJBQXFCLENBQUNJLFlBQXdCO1FBQy9ELElBQUlJLFFBQVEsRUFBRTtVQUNiLE1BQU0rQyxrQkFBa0IsR0FBR2hELG1CQUFtQixDQUFDUCxxQkFBcUIsRUFBRSxJQUFJLENBQUM7VUFDM0UsSUFBSWdELGdCQUFnQixDQUFDeEMsUUFBUSxDQUFDZ0QsSUFBMEMsQ0FBQyxFQUFFO1lBQzFFLE1BQU1DLGtCQUFrQixHQUFHTixhQUFhLENBQUMzQyxRQUFRLENBQUM7WUFDbER1QyxVQUFVLEdBQ1RLLE9BQU8sQ0FBQ0QsYUFBYSxDQUNwQk0sa0JBQWtCLENBQUNELElBQUksSUFBSSxnQ0FBZ0MsRUFDM0RDLGtCQUFrQixDQUFDQyxhQUFhLEVBQ2hDRCxrQkFBa0IsQ0FBQ0UsV0FDcEIsQ0FBQyxJQUFJWixVQUFVO1VBQ2pCO1VBQ0E7VUFDQSxNQUFNYSxxQkFBcUIsR0FBRzdELHdCQUF3QixDQUFDQyxxQkFBcUIsQ0FBQztVQUM3RSxNQUFNNkQsb0JBQThCLEdBQUc3RyxNQUFNLENBQUM4RyxJQUFJLENBQUNGLHFCQUFxQixDQUFDO1VBRXpFLElBQUlDLG9CQUFvQixDQUFDRSxNQUFNLEVBQUU7WUFDaENwRixZQUFZLENBQUNHLGFBQWEsR0FBRytFLG9CQUFvQjtZQUNqRDtZQUNBQSxvQkFBb0IsQ0FBQ3hGLE9BQU8sQ0FBRVUsSUFBSSxJQUFLO2NBQ3RDMEQscUJBQXFCLENBQUMxRCxJQUFJLENBQUMsR0FBRzZFLHFCQUFxQixDQUFDN0UsSUFBSSxDQUFDO1lBQzFELENBQUMsQ0FBQztZQUNGO1lBQ0E7WUFDQSxJQUFJLENBQUM4RSxvQkFBb0IsQ0FBQ2pGLElBQUksQ0FBRUcsSUFBSSxJQUFLNkUscUJBQXFCLENBQUM3RSxJQUFJLENBQUMsS0FBS3lCLFFBQVEsQ0FBQyxFQUFFO2NBQ25GaUMscUJBQXFCLENBQUNjLGtCQUFrQixDQUFDLEdBQUcvQyxRQUFRO1lBQ3JEO1VBQ0QsQ0FBQyxNQUFNO1lBQ043QixZQUFZLENBQUNJLElBQUksR0FBRytELFNBQVMsQ0FBQy9ELElBQUk7WUFDbENKLFlBQVksQ0FBQ3FGLFFBQVEsR0FBR2pCLFVBQVUsQ0FBQ2tCLFNBQVM7WUFDNUN0RixZQUFZLENBQUNnRixXQUFXLEdBQUdaLFVBQVUsQ0FBQ21CLFlBQVksQ0FBQ0MsWUFBWTtZQUMvRHhGLFlBQVksQ0FBQytFLGFBQWEsR0FBR1gsVUFBVSxDQUFDbUIsWUFBWSxDQUFDRSxjQUFjO1lBQ25FekYsWUFBWSxDQUFDMEYsUUFBUSxHQUFHQyxrQkFBa0IsQ0FBQ3hDLG9CQUFvQixFQUFFZ0IsU0FBUyxDQUFDO1lBQzNFbkUsWUFBWSxDQUFDNEYsVUFBVSxHQUFHQyxvQkFBb0IsQ0FBQ3ZDLHNCQUFzQixFQUFFYSxTQUFTLENBQUM7WUFDakZuRSxZQUFZLENBQUM4RixhQUFhLEdBQUdDLHdCQUF3QixDQUFDekMsc0JBQXNCLEVBQUVhLFNBQVMsQ0FBQztZQUN4Rm5FLFlBQVksQ0FBQ3lELGFBQWEsR0FBR0EsYUFBYTtVQUMzQztRQUNELENBQUMsTUFBTTtVQUNOekQsWUFBWSxDQUFDSSxJQUFJLEdBQUcrRCxTQUFTLENBQUMvRCxJQUFJO1VBQ2xDSixZQUFZLENBQUN5RCxhQUFhLEdBQUdBLGFBQWE7VUFDMUN6RCxZQUFZLENBQUNxRixRQUFRLEdBQUdqQixVQUFVLENBQUNrQixTQUFTO1FBQzdDO1FBQ0ExRyxVQUFVLENBQUNvSCxJQUFJLENBQUNoRyxZQUFZLENBQUM7TUFDOUIsQ0FBQyxDQUFDO01BQ0YsTUFBTWlHLGNBQWMsR0FBR0MsdUJBQXVCLENBQzdDcEMscUJBQXFCLEVBQ3JCbEYsVUFBVSxFQUNWdUUsb0JBQW9CLEVBQ3BCRyxzQkFBc0IsRUFDdEJHLGFBQ0QsQ0FBQztNQUNELE9BQU83RSxVQUFVLENBQUN1SCxNQUFNLENBQUNGLGNBQWMsQ0FBQztJQUN6QyxDQUFDLENBQUM7RUFDSCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQTdILGtCQUFrQixDQUFDZ0ksaUJBQWlCLEdBQUcsVUFBVUMsUUFBZSxFQUFFQyxXQUE0QyxFQUFRO0lBQ3JIL0gsYUFBYSxDQUFDNkgsaUJBQWlCLENBQUNHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQ0YsUUFBUSxFQUFFQyxXQUFXLENBQUMsQ0FBQztJQUVwRSxNQUFNN0QsWUFBWSxHQUFJNEQsUUFBUSxDQUFDM0QsV0FBVyxDQUFDLENBQUMsQ0FBc0JDLE9BQU87SUFFekUsSUFBSUYsWUFBWSxFQUFFO01BQ2pCNkQsV0FBVyxDQUFDbEcsSUFBSSxHQUFHa0csV0FBVyxFQUFFbEcsSUFBSSxJQUFJcUMsWUFBWSxDQUFDK0QsY0FBYyxJQUFJLElBQUkvRCxZQUFZLENBQUNJLGNBQWMsRUFBRTtJQUN6RztJQUVBeUQsV0FBVyxDQUFDRyxVQUFVLEdBQUdILFdBQVcsQ0FBQ0csVUFBVSxJQUFJLENBQUMsQ0FBQztJQUVyRCxNQUFNQyxTQUFTLEdBQUdDLE9BQU8sQ0FBQ0MsY0FBYyxDQUFDUCxRQUFRLENBQUNRLFNBQVMsQ0FBQyxDQUFDLENBQWM7TUFDMUVDLGVBQWUsR0FBR1QsUUFBUSxDQUFDVSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2hELElBQUlDLFVBQThDO0lBQ2xELElBQUlDLGVBQWUsRUFBRUMsZUFBMkI7SUFDaEQsTUFBTUMsT0FBTyxHQUFHLEVBQUU7SUFDbEIsTUFBTUMsZUFBZSxHQUFHcEksa0JBQWtCLENBQUNxSSxtQkFBbUIsQ0FBQ2hCLFFBQVEsQ0FBOEI7O0lBRXJHO0lBQ0EsSUFBSVMsZUFBZSxFQUFFO01BQ3BCRSxVQUFVLEdBQUdYLFFBQVEsQ0FBQ2lCLGFBQWEsQ0FBQyxDQUFDO01BQ3JDTCxlQUFlLEdBQUdNLFVBQVUsQ0FBQ0MsYUFBYSxDQUFDbkIsUUFBUSxFQUFFVyxVQUFVLEVBQUVJLGVBQWUsRUFBRSxFQUFFLENBQWU7TUFDbkcsSUFBSUgsZUFBZSxDQUFDRSxPQUFPLEVBQUU7UUFDNUJBLE9BQU8sQ0FBQ25CLElBQUksQ0FBQ2lCLGVBQWUsQ0FBQ0UsT0FBTyxDQUFDO01BQ3RDO0lBQ0Q7SUFDQSxNQUFNTSxXQUFXLEdBQUcsQ0FBQyxDQUFDaEYsWUFBWSxFQUFFaUYsa0JBQWtCO0lBQ3RELElBQUlELFdBQVcsRUFBRTtNQUNoQm5CLFdBQVcsQ0FBQ0csVUFBVSxDQUFDa0IsYUFBYSxHQUFHO1FBQ3RDRCxrQkFBa0IsRUFBRWpGLFlBQVksQ0FBQ2lGLGtCQUFrQjtRQUNuREUsUUFBUSxFQUFFbkYsWUFBWSxDQUFDb0Y7TUFDeEIsQ0FBQztJQUNGO0lBQ0EsSUFBSW5CLFNBQVMsRUFBRTtNQUNkTSxVQUFVLEdBQUdOLFNBQVMsQ0FBQ1ksYUFBYSxDQUFDLENBQUM7TUFDdEMsSUFBSU4sVUFBVSxFQUFFO1FBQ2YsTUFBTWMsY0FBYyxHQUFHQyxZQUFZLENBQUNDLGlCQUFpQixDQUFDdEIsU0FBUyxDQUFDO1FBQ2hFO1FBQ0F0SSxrQkFBa0IsQ0FBQzZKLG1CQUFtQixDQUFDYixlQUFlLEVBQUVmLFFBQVEsRUFBRVcsVUFBVSxFQUFFdkUsWUFBWSxDQUFDO1FBQzNGeUUsZUFBZSxHQUFHSyxVQUFVLENBQUNDLGFBQWEsQ0FBQ2QsU0FBUyxFQUFFTSxVQUFVLEVBQUVJLGVBQWUsRUFBRVUsY0FBYyxDQUFDO1FBRWxHLElBQUlaLGVBQWUsQ0FBQ0MsT0FBTyxFQUFFO1VBQzVCQSxPQUFPLENBQUNuQixJQUFJLENBQUNrQixlQUFlLENBQUNDLE9BQU8sQ0FBQztRQUN0QztRQUVBLE1BQU1lLGFBQWEsR0FBR0gsWUFBWSxDQUFDSSxpQkFBaUIsQ0FBQ3pCLFNBQVMsRUFBRU0sVUFBVSxDQUFDO1FBQzNFLElBQUlrQixhQUFhLEVBQUU7VUFDbEI1QixXQUFXLENBQUNsRyxJQUFJLEdBQUc4SCxhQUFhO1FBQ2pDO01BQ0Q7TUFDQSxJQUFJLENBQUNULFdBQVcsRUFBRTtRQUNqQjtRQUNBbkIsV0FBVyxDQUFDRyxVQUFVLENBQUMyQixPQUFPLEdBQUdDLFdBQVcsQ0FBQ0MsbUJBQW1CLENBQUM1QixTQUFTLENBQUM2QixTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUlDLFNBQVM7TUFDckcsQ0FBQyxNQUFNLElBQUk5QixTQUFTLENBQUM2QixTQUFTLENBQUMsQ0FBQyxFQUFFO1FBQ2pDLElBQUksQ0FBQ2pDLFdBQVcsQ0FBQ0csVUFBVSxDQUFDa0IsYUFBYSxFQUFFO1VBQzFDckIsV0FBVyxDQUFDRyxVQUFVLENBQUNrQixhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQzFDO1FBQ0FyQixXQUFXLENBQUNHLFVBQVUsQ0FBQ2tCLGFBQWEsQ0FBQ2MsTUFBTSxHQUFHSixXQUFXLENBQUNDLG1CQUFtQixDQUFDNUIsU0FBUyxDQUFDNkIsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNwR2pDLFdBQVcsQ0FBQ0csVUFBVSxDQUFDa0IsYUFBYSxDQUFDQyxRQUFRLEdBQUdjLE1BQU0sQ0FBQ0MsZ0JBQWdCO01BQ3hFO0lBQ0Q7SUFDQTtJQUNBO0lBQ0E7SUFDQXJDLFdBQVcsQ0FBQ0csVUFBVSxDQUFDbUMsZUFBZSxHQUFHLEtBQUs7SUFFOUMsSUFBSSxDQUFDQyxvQkFBb0IsQ0FBQ3ZDLFdBQVcsRUFBR0QsUUFBUSxDQUFDM0QsV0FBVyxDQUFDLENBQUMsQ0FBc0JDLE9BQU8sQ0FBQztJQUM1RjtJQUNBMkQsV0FBVyxDQUFDRyxVQUFVLENBQUNxQyxPQUFPLEdBQUcxQixlQUFlLEVBQUUyQixNQUFNLENBQUMsVUFBVUMsS0FBYSxFQUFFbkgsUUFBc0IsRUFBRTtNQUN6RztNQUNBO01BQ0EsSUFBSUEsUUFBUSxDQUFDekIsSUFBSSxJQUFJLENBQUN5QixRQUFRLENBQUN6QixJQUFJLENBQUM2SSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDbERELEtBQUssR0FBR0EsS0FBSyxHQUFHLEdBQUdBLEtBQUssSUFBSW5ILFFBQVEsQ0FBQ3pCLElBQUksRUFBRSxHQUFHeUIsUUFBUSxDQUFDekIsSUFBSTtNQUM1RDtNQUNBLE9BQU80SSxLQUFLO0lBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQzs7SUFFTjtJQUNBMUMsV0FBVyxDQUFDRyxVQUFVLENBQUN5QyxNQUFNLEdBQUcsSUFBSTs7SUFFcEM7SUFDQSxJQUFJNUMsV0FBVyxDQUFDbEcsSUFBSSxJQUFJc0QsV0FBVyxDQUFDeUYsZ0JBQWdCLENBQUM5QyxRQUFRLENBQUMzRixRQUFRLENBQUMsQ0FBQyxFQUFFcUMsWUFBWSxDQUFDLENBQUMsRUFBb0J1RCxXQUFXLENBQUNsRyxJQUFJLENBQUMsRUFBRTtNQUM5SCtHLE9BQU8sQ0FBQ25CLElBQUksQ0FBQyxJQUFJb0QsTUFBTSxDQUFDLGdCQUFnQixFQUFFQyxjQUFjLENBQUNDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRTtJQUNBaEQsV0FBVyxDQUFDYSxPQUFPLEdBQUcsSUFBSWlDLE1BQU0sQ0FBQ2pDLE9BQU8sRUFBYyxJQUFJLENBQUM7RUFDNUQsQ0FBQztFQUVEL0ksa0JBQWtCLENBQUNtRyxVQUFVLEdBQUcsWUFBb0I7SUFDbkQsT0FBT0UsT0FBTztFQUNmLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBckcsa0JBQWtCLENBQUNPLFNBQVMsR0FBRyxnQkFBZ0JGLEtBQVksRUFBa0I7SUFDNUUsTUFBTWdFLFlBQVksR0FBSWhFLEtBQUssQ0FBQ2lFLFdBQVcsQ0FBQyxDQUFDLENBQW9DQyxPQUFPO0lBQ3BGLElBQUlqRSxLQUFZLEdBQUdELEtBQUssQ0FBQ2lDLFFBQVEsQ0FBQytCLFlBQVksQ0FBQy9ELEtBQUssQ0FBRTtJQUN0RCxJQUFJLENBQUNBLEtBQUssRUFBRTtNQUNYLE1BQU0sSUFBSTZLLE9BQU8sQ0FBRUMsT0FBTyxJQUFLO1FBQzlCL0ssS0FBSyxDQUFDZ0wsZUFBZSxDQUFDLG9CQUFvQixFQUFFRCxPQUFPLENBQUM7TUFDckQsQ0FBQyxDQUFDO01BQ0Y5SyxLQUFLLEdBQUdELEtBQUssQ0FBQ2lDLFFBQVEsQ0FBQytCLFlBQVksQ0FBQy9ELEtBQUssQ0FBRTtJQUM1QztJQUNBLE9BQU9BLEtBQUs7RUFDYixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0FOLGtCQUFrQixDQUFDeUssb0JBQW9CLEdBQUcsVUFBVXZDLFdBQTRDLEVBQUUzRCxPQUFnQixFQUFRO0lBQ3pILElBQ0MyRCxXQUFXLENBQUNHLFVBQVUsSUFDdEJILFdBQVcsQ0FBQ0csVUFBVSxDQUFDMkIsT0FBTyxJQUFJSSxTQUFTLElBQzNDbEMsV0FBVyxDQUFDRyxVQUFVLENBQUNrQixhQUFhLEVBQUVjLE1BQU0sSUFBSUQsU0FBUyxJQUN6RGxDLFdBQVcsQ0FBQ29ELE1BQU0sSUFDbEJwRCxXQUFXLENBQUNvRCxNQUFNLENBQUN0RSxNQUFNLElBQUksQ0FBQyxFQUM3QjtNQUNELE1BQU11RSx1QkFBdUIsR0FBR2hILE9BQU8sR0FBR0EsT0FBTyxDQUFDZ0gsdUJBQXVCLEdBQUduQixTQUFTO01BQ3JGLElBQUltQix1QkFBdUIsRUFBRTtRQUM1QnJELFdBQVcsQ0FBQ29ELE1BQU0sQ0FBQzFELElBQUksQ0FBQyxJQUFJNEQsTUFBTSxDQUFDRCx1QkFBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQztNQUNwRTtJQUNEO0VBQ0QsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBdkwsa0JBQWtCLENBQUM2SixtQkFBbUIsR0FBRyxVQUN4QzRCLGdCQUFnQyxFQUNoQ0MsU0FBZ0IsRUFDaEJDLFdBQThDLEVBQzlDQyxhQUFzQixFQUNmO0lBQ1AsTUFBTUMsYUFBYSxHQUFHNUwsTUFBTSxDQUFDOEcsSUFBSSxDQUFDNEUsV0FBVyxDQUFDO01BQzdDRyxVQUFVLEdBQUlKLFNBQVMsQ0FBQ3BKLFFBQVEsQ0FBQyxDQUFDLENBQWdCcUMsWUFBWSxDQUFDLENBQUU7SUFDbEVrSCxhQUFhLENBQUN2SyxPQUFPLENBQUMsVUFBVXlLLFlBQW9CLEVBQUU7TUFDckQ7TUFDQSxNQUFNQyxnQkFBZ0IsR0FBR0YsVUFBVSxDQUFDRyxTQUFTLENBQUMsSUFBSUwsYUFBYSxDQUFDbkgsY0FBYyxJQUFJc0gsWUFBWSxFQUFFLENBQUMsRUFBRTdGLEtBQUssSUFBSSxZQUFZO01BQ3hILE1BQU1GLFVBQVUsR0FBRzBGLFNBQVMsQ0FBQ3ZGLFVBQVUsQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQzRGLGdCQUFnQixDQUFDO01BQ3pFUCxnQkFBZ0IsQ0FBQ25LLE9BQU8sQ0FBQyxDQUFDNEssYUFBYSxFQUFFQyxLQUFLLEtBQUs7UUFDbEQsSUFBSUQsYUFBYSxDQUFDbEssSUFBSSxLQUFLK0osWUFBWSxFQUFFO1VBQ3ZDTixnQkFBZ0IsQ0FBQ1UsS0FBSyxDQUFDLENBQTJDbkcsVUFBVSxHQUFHQSxVQUFVO1FBQzNGO01BQ0QsQ0FBQyxDQUFDO01BQ0YsSUFDQ3lGLGdCQUFnQixDQUFDVyxTQUFTLENBQUMsVUFBVUYsYUFBMkIsRUFBRTtRQUNqRSxPQUFPQSxhQUFhLENBQUNsSyxJQUFJLEtBQUsrSixZQUFZO01BQzNDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUNSO1FBQ0QsTUFBTU0sVUFBd0IsR0FBRztVQUNoQ3BLLEdBQUcsRUFBRThKLFlBQVk7VUFDakJ6RixLQUFLLEVBQUV5RixZQUFZO1VBQ25CL0osSUFBSSxFQUFFK0osWUFBWTtVQUNsQjlFLFFBQVEsRUFBRWpCLFVBQVUsQ0FBQ21CLFlBQVksQ0FBQ21GLFFBQVE7VUFDMUMzRixhQUFhLEVBQUVYLFVBQVUsQ0FBQ21CLFlBQVksRUFBRUUsY0FBYztVQUN0RFQsV0FBVyxFQUFFWixVQUFVLENBQUNtQixZQUFZLEVBQUVDO1FBQ3ZDLENBQUM7UUFDRHFFLGdCQUFnQixDQUFDN0QsSUFBSSxDQUFDeUUsVUFBVSxDQUFDO01BQ2xDO0lBQ0QsQ0FBQyxDQUFDO0VBQ0gsQ0FBQztFQUVEck0sa0JBQWtCLENBQUN1TSxhQUFhLEdBQUcsVUFDbENDLE1BQWEsRUFDYkMsWUFJQyxFQUNEQyxRQUEwQixFQUNuQjtJQUNQLElBQUlDLGtCQUFrQixHQUFHLEtBQUs7SUFDOUIsTUFBTUMsdUJBQXVCLEdBQUdKLE1BQU0sQ0FBQzFMLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztJQUNwRSxNQUFNK0wsd0JBQXdCLEdBQUcsNEJBQTRCO0lBQzdELE1BQU1DLFdBQVcsR0FBRyxZQUFZO0lBQ2hDLE1BQU1DLFdBQVcsR0FBRyxZQUFZO0lBQ2hDLE1BQU1DLG9CQUFvQixHQUFHSix1QkFBdUIsRUFBRWpLLFdBQVcsQ0FBQ2tLLHdCQUF3QixDQUFDO0lBQzNGLE1BQU1JLFVBQVUsR0FBR0wsdUJBQXVCLEVBQUVqSyxXQUFXLENBQUNtSyxXQUFXLENBQUM7SUFDcEUsTUFBTUksVUFBVSxHQUFHTix1QkFBdUIsRUFBRWpLLFdBQVcsQ0FBQ29LLFdBQVcsQ0FBQztJQUNwRSxJQUFJSSxXQUFXLEdBQUdYLE1BQU0sQ0FBQ1ksYUFBYSxDQUFDLENBQUM7O0lBRXhDO0lBQ0FqTixhQUFhLENBQUNvTSxhQUFhLENBQUNwRSxLQUFLLENBQUNuSSxrQkFBa0IsRUFBRSxDQUFDd00sTUFBTSxFQUFFQyxZQUFZLEVBQUVDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZGO0lBQ0EsSUFBSSxDQUFDUyxXQUFXLEVBQUU7TUFDakJBLFdBQVcsR0FBR1gsTUFBTSxDQUFDWSxhQUFhLENBQUMsQ0FBQztJQUNyQztJQUNBLElBQUlELFdBQVcsRUFBRTtNQUNoQjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7TUFDRVIsa0JBQWtCLEdBQUdDLHVCQUF1QixHQUN6Q1MsU0FBUyxDQUFDWixZQUFZLENBQUMxRCxPQUFPLEVBQUVtRSxVQUFVLENBQUMsSUFBSVQsWUFBWSxDQUFDcEUsVUFBVSxFQUFFMkIsT0FBTyxLQUFLaUQsVUFBVSxJQUFJLENBQUNELG9CQUFvQixHQUN2SCxJQUFJO0lBQ1I7SUFDQUosdUJBQXVCLEVBQUU3TCxXQUFXLENBQUMrTCxXQUFXLEVBQUVMLFlBQVksQ0FBQ3BFLFVBQVUsRUFBRTJCLE9BQU8sQ0FBQztJQUNuRjRDLHVCQUF1QixFQUFFN0wsV0FBVyxDQUFDZ00sV0FBVyxFQUFFTixZQUFZLENBQUMxRCxPQUFPLENBQUM7SUFFdkUsSUFBSTRELGtCQUFrQixJQUFJSCxNQUFNLENBQUMvRCxTQUFTLENBQUMsQ0FBQyxFQUFFO01BQzdDbUUsdUJBQXVCLEVBQUU3TCxXQUFXLENBQUM4TCx3QkFBd0IsRUFBRSxJQUFJLENBQUM7TUFDcEVNLFdBQVcsQ0FDVEcsY0FBYyxDQUFDSCxXQUFXLENBQUNJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FDeENDLE9BQU8sQ0FBQyxZQUFZO1FBQ3BCWix1QkFBdUIsRUFBRTdMLFdBQVcsQ0FBQzhMLHdCQUF3QixFQUFFLEtBQUssQ0FBQztNQUN0RSxDQUFDLENBQUMsQ0FDRFksS0FBSyxDQUFDLFVBQVVDLE1BQWUsRUFBRTtRQUNqQ0MsR0FBRyxDQUFDQyxLQUFLLENBQUMsNkNBQTZDLEVBQUVGLE1BQWdCLENBQUM7TUFDM0UsQ0FBQyxDQUFDO0lBQ0o7SUFDQWxCLE1BQU0sQ0FBQ3FCLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQztJQUNsQztFQUNELENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTL0YsdUJBQXVCQSxDQUMvQnBDLHFCQUErQyxFQUMvQ29JLGVBQStCLEVBQy9CL0ksb0JBQThDLEVBQzlDRyxzQkFBa0QsRUFDbERHLGFBQXVCLEVBQ047SUFDakIsTUFBTTBJLHNCQUE4QyxHQUFHLENBQUMsQ0FBQztNQUN4RGxHLGNBQThCLEdBQUcsRUFBRTtJQUNwQzVILE1BQU0sQ0FBQzhHLElBQUksQ0FBQ3JCLHFCQUFxQixDQUFDLENBQUNwRSxPQUFPLENBQUVVLElBQUksSUFBSztNQUNwRCxNQUFNeUIsUUFBUSxHQUFHaUMscUJBQXFCLENBQUMxRCxJQUFJLENBQUM7UUFDM0NnTSxhQUFhLEdBQUdGLGVBQWUsQ0FBQ2pNLElBQUksQ0FBRUMsTUFBTSxJQUFLQSxNQUFNLENBQUNFLElBQUksS0FBS0EsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUN6RSxJQUFJLENBQUNnTSxhQUFhLEVBQUU7UUFDbkIsTUFBTUMsT0FBTyxHQUFHLGFBQWFqTSxJQUFJLEVBQUU7UUFDbkMrTCxzQkFBc0IsQ0FBQy9MLElBQUksQ0FBQyxHQUFHaU0sT0FBTztRQUN0QyxNQUFNdkgsa0JBQWtCLEdBQUdOLGFBQWEsQ0FBQzNDLFFBQVEsQ0FBQztRQUNsRCxNQUFNeUsseUJBQXlCLEdBQUc3SCxPQUFPLENBQUNELGFBQWEsQ0FDdERNLGtCQUFrQixDQUFDRCxJQUFJLElBQUksZ0NBQWdDLEVBQzNEQyxrQkFBa0IsQ0FBQ0MsYUFBYSxFQUNoQ0Qsa0JBQWtCLENBQUNFLFdBQ3BCLENBQUM7UUFDRCxNQUFNdUgsb0JBQWtDLEdBQUc7VUFDMUNsTSxHQUFHLEVBQUVnTSxPQUFPO1VBQ1ozSCxLQUFLLEVBQUU4SCxRQUFRLENBQUMzSyxRQUFRLENBQUM7VUFDekJ6QixJQUFJO1VBQ0pzRixRQUFRLEVBQUVDLGtCQUFrQixDQUFDeEMsb0JBQW9CLEVBQUV0QixRQUFRLENBQUM7VUFDNUQrRCxVQUFVLEVBQUVDLG9CQUFvQixDQUFDdkMsc0JBQXNCLEVBQUV6QixRQUFRLENBQUM7VUFDbEV3RCxRQUFRLEVBQUVpSCx5QkFBeUIsQ0FBQ2hILFNBQVM7VUFDN0NQLGFBQWEsRUFBRVYsZ0JBQWdCLENBQUN4QyxRQUFRLENBQUNnRCxJQUEwQyxDQUFDLEdBQ2pGQyxrQkFBa0IsQ0FBQ0MsYUFBYSxHQUNoQ3lELFNBQVM7VUFDWnhELFdBQVcsRUFBRVgsZ0JBQWdCLENBQUN4QyxRQUFRLENBQUNnRCxJQUEwQyxDQUFDLEdBQy9FQyxrQkFBa0IsQ0FBQ0UsV0FBVyxHQUM5QndELFNBQVM7VUFDWi9FO1FBQ0QsQ0FBQztRQUNEOEksb0JBQW9CLENBQUN6RyxhQUFhLEdBQUdDLHdCQUF3QixDQUFDekMsc0JBQXNCLEVBQUVpSixvQkFBb0IsQ0FBQztRQUMzR3RHLGNBQWMsQ0FBQ0QsSUFBSSxDQUFDdUcsb0JBQW9CLENBQUM7TUFDMUM7SUFDRCxDQUFDLENBQUM7SUFDRjtJQUNBO0lBQ0FMLGVBQWUsQ0FBQ3hNLE9BQU8sQ0FBRVEsTUFBTSxJQUFLO01BQ25DLElBQUlBLE1BQU0sQ0FBQ0MsYUFBYSxFQUFFO1FBQ3pCRCxNQUFNLENBQUNDLGFBQWEsR0FBR0QsTUFBTSxDQUFDQyxhQUFhLEVBQUVzTSxHQUFHLENBQUVDLFVBQVUsSUFBS1Asc0JBQXNCLENBQUNPLFVBQVUsQ0FBQyxJQUFJQSxVQUFVLENBQUM7TUFDbkg7SUFDRCxDQUFDLENBQUM7SUFDRixPQUFPekcsY0FBYztFQUN0Qjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7RUFFQSxTQUFTRix3QkFBd0JBLENBQUN6QyxzQkFBa0QsRUFBRXpCLFFBQWlDLEVBQVU7SUFDaEksTUFBTTlCLFlBQVksR0FBR2MsT0FBTyxDQUFDZ0IsUUFBUSxDQUFDO0lBQ3RDLE9BQU85QixZQUFZLElBQ2xCdUQsc0JBQXNCLENBQUN0RCxZQUFZLEVBQUUyTSxjQUFjLENBQUM1TSxZQUFZLENBQUMsSUFDakU2TSw0QkFBNEIsQ0FBQ3RKLHNCQUFzQixDQUFDdEQsWUFBWSxDQUFDRCxZQUFZLENBQXNCLENBQUMsR0FDbEcsQ0FBQyxDQUFDLEdBQ0YsQ0FBQztFQUNMOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVN3QixxQkFBcUJBLENBQUNGLHFCQUFvRCxFQUE2QztJQUMvSCxNQUFNUSxRQUFRLEdBQUdSLHFCQUFxQixDQUFDSSxZQUFZO0lBQ25ELE1BQU1FLHNCQUFzQixHQUMzQkUsUUFBUSxLQUNQZ0wsNkJBQTZCLENBQUNoTCxRQUFRLENBQUMsSUFDdkNpTCxpQ0FBaUMsQ0FBQ2pMLFFBQVEsQ0FBQyxJQUMzQ2tMLDZCQUE2QixDQUFDbEwsUUFBUSxDQUFDLElBQ3ZDbUwsaUNBQWlDLENBQUNuTCxRQUFRLENBQUMsQ0FBQztJQUM5QyxJQUFJLENBQUNGLHNCQUFzQixFQUFFO01BQzVCLE9BQU82RyxTQUFTO0lBQ2pCO0lBQ0EsTUFBTXlFLDJCQUEyQixHQUFHdEksb0JBQW9CLENBQVd0RCxxQkFBcUIsRUFBRU0sc0JBQXNCLENBQUM7O0lBRWpIO0lBQ0EsTUFBTUQsa0JBQWtCLEdBQUd1TCwyQkFBMkIsQ0FBQ3hMLFlBQVk7SUFDbkUsSUFBSSxDQUFDQyxrQkFBa0IsRUFBRTtNQUN4QixPQUFPOEcsU0FBUztJQUNqQjtJQUNBLE9BQU95RSwyQkFBMkI7RUFDbkM7RUFBQyxPQUVjN08sa0JBQWtCO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
} from "sap/fe/core/templating/PropertyHelper";
|
|
20
20
|
import type { DefaultTypeForEdmType } from "sap/fe/core/type/EDM";
|
|
21
21
|
import { isTypeFilterable } from "sap/fe/core/type/EDM";
|
|
22
|
-
import type {
|
|
22
|
+
import type { FilterInfo, SerializedCollectionBindingInfo } from "sap/fe/macros/CollectionBindingInfo";
|
|
23
23
|
import CommonHelper from "sap/fe/macros/CommonHelper";
|
|
24
24
|
import MacrosDelegateUtil from "sap/fe/macros/DelegateUtil";
|
|
25
25
|
import type { FilterConditions } from "sap/fe/macros/filterBar/FilterHelper";
|
|
@@ -149,7 +149,7 @@ function collectRelatedProperties(dataModelPropertyPath: DataModelObjectPath<Pro
|
|
|
149
149
|
|
|
150
150
|
const textAnnotation = property.annotations?.Common?.Text,
|
|
151
151
|
textArrangement = textAnnotation?.annotations?.UI?.TextArrangement?.toString(),
|
|
152
|
-
displayMode = textAnnotation && textArrangement && getDisplayMode(property);
|
|
152
|
+
displayMode = textAnnotation && textArrangement && getDisplayMode(property, dataModelPropertyPath.targetEntityType);
|
|
153
153
|
|
|
154
154
|
if (displayMode === "Description") {
|
|
155
155
|
relatedProperties[additionalPropertyPath] = additionalProperty;
|
|
@@ -218,8 +218,8 @@ ODataTableDelegate._createPropertyInfos = async function (table: Table, model: O
|
|
|
218
218
|
} else {
|
|
219
219
|
propertyInfo.path = columnDef.path;
|
|
220
220
|
propertyInfo.dataType = typeConfig.className;
|
|
221
|
-
propertyInfo.constraints =
|
|
222
|
-
propertyInfo.formatOptions =
|
|
221
|
+
propertyInfo.constraints = typeConfig.typeInstance.oConstraints;
|
|
222
|
+
propertyInfo.formatOptions = typeConfig.typeInstance.oFormatOptions;
|
|
223
223
|
propertyInfo.sortable = isSortableProperty(sortRestrictionsInfo, columnDef);
|
|
224
224
|
propertyInfo.filterable = isFilterableProperty(filterRestrictionsInfo, columnDef);
|
|
225
225
|
propertyInfo.maxConditions = getPropertyMaxConditions(filterRestrictionsInfo, columnDef);
|
|
@@ -248,7 +248,7 @@ ODataTableDelegate._createPropertyInfos = async function (table: Table, model: O
|
|
|
248
248
|
* @param mdcTable The MDCTable instance
|
|
249
249
|
* @param bindingInfo The bindingInfo of the table
|
|
250
250
|
*/
|
|
251
|
-
ODataTableDelegate.updateBindingInfo = function (mdcTable: Table, bindingInfo:
|
|
251
|
+
ODataTableDelegate.updateBindingInfo = function (mdcTable: Table, bindingInfo: SerializedCollectionBindingInfo): void {
|
|
252
252
|
TableDelegate.updateBindingInfo.apply(this, [mdcTable, bindingInfo]);
|
|
253
253
|
|
|
254
254
|
const metadataInfo = (mdcTable.getDelegate() as MdcTableDelegate).payload;
|
|
@@ -363,7 +363,7 @@ ODataTableDelegate._getModel = async function (table: Table): Promise<Model> {
|
|
|
363
363
|
* @param bindingInfo The bindingInfo of the table
|
|
364
364
|
* @param payload The payload of the TableDelegate
|
|
365
365
|
*/
|
|
366
|
-
ODataTableDelegate._applyDefaultSorting = function (bindingInfo:
|
|
366
|
+
ODataTableDelegate._applyDefaultSorting = function (bindingInfo: SerializedCollectionBindingInfo, payload: Payload): void {
|
|
367
367
|
if (
|
|
368
368
|
bindingInfo.parameters &&
|
|
369
369
|
bindingInfo.parameters.$search == undefined &&
|
|
@@ -7,6 +7,9 @@
|
|
|
7
7
|
xmlns:mdc="sap.ui.mdc"
|
|
8
8
|
xmlns:plugins="sap.m.plugins"
|
|
9
9
|
xmlns:macrodata="http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1"
|
|
10
|
+
core:require="{
|
|
11
|
+
TableFormatter: 'sap/fe/macros/formatters/TableFormatter'
|
|
12
|
+
}"
|
|
10
13
|
template:require="{
|
|
11
14
|
COMMON: 'sap/fe/macros/CommonHelper',
|
|
12
15
|
MODEL: 'sap/ui/model/odata/v4/AnnotationHelper',
|
|
@@ -40,8 +43,8 @@
|
|
|
40
43
|
test="{parts:[{path:'valueList>'}, {path:'parameter>'}, {path:'source>'}],formatter:'VLH.getColumnVisibility'}"
|
|
41
44
|
>
|
|
42
45
|
<mdc:table.Column
|
|
43
|
-
width="{= '{parts: [{
|
|
44
|
-
minWidth="{= '{parts: [{
|
|
46
|
+
width="{= '{parts: [{path: \'internal>tablePropertiesAvailable\', targetType: \'any\'},{value: \'' + ${parameter>ValueListProperty}+ '\'} , {value: false}], formatter: \'TableFormatter.getColumnWidthForValueHelpTable.bind($control)\'}' }"
|
|
47
|
+
minWidth="{= '{parts: [{path: \'internal>tablePropertiesAvailable\', targetType: \'any\'},{value: \'' + ${parameter>ValueListProperty}+ '\'} , {value: true}], formatter: \'TableFormatter.getColumnWidthForValueHelpTable.bind($control)\'}' }"
|
|
45
48
|
header="{= ${property>@com.sap.vocabularies.Common.v1.Label} || ${property>@sapui.name@@MODEL.value}}"
|
|
46
49
|
hAlign="{= ValueHelpTemplating.getColumnHAlign(${property>@@UI.getDataModelObjectPath}) }"
|
|
47
50
|
propertyKey="{= ValueHelpTemplating.getColumnDataProperty(${parameter>ValueListProperty},${property>@@Property.getPropertyObjectPath})}"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/f/library", "sap/fe/controls/library", "sap/fe/core/AppComponent", "sap/fe/core/library", "sap/fe/macros/coreUI/factory", "sap/fe/macros/filter/FilterOperatorUtils", "sap/fe/macros/filter/type/MultiValue", "sap/fe/macros/filter/type/Range", "sap/fe/macros/formatters/TableFormatter", "sap/fe/macros/macroLibrary", "sap/ui/base/DataType", "sap/ui/core/CustomData", "sap/ui/core/Fragment", "sap/ui/core/Lib", "sap/ui/core/XMLTemplateProcessor", "sap/ui/core/library", "sap/ui/core/util/XMLPreprocessor", "sap/ui/mdc/field/ConditionsType", "sap/ui/mdc/library", "sap/ui/unified/library"], function (Log, _library, _library2, AppComponent, _library3, _factory, FilterOperatorUtils, _MultiValue, _Range, _TableFormatter, _macroLibrary, DataType, CustomData, Fragment, Library, _XMLTemplateProcessor, _library4, XMLPreprocessor, _ConditionsType, _library5, _library6) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/f/library", "sap/fe/controls/library", "sap/fe/core/AppComponent", "sap/fe/core/library", "sap/fe/macros/coreUI/factory", "sap/fe/macros/filter/FilterOperatorUtils", "sap/fe/macros/filter/type/MultiValue", "sap/fe/macros/filter/type/Range", "sap/fe/macros/formatters/TableFormatter", "sap/fe/macros/formatters/VisualFilterFormatter", "sap/fe/macros/internal/valuehelp/AdditionalValueFormatter", "sap/fe/macros/macroLibrary", "sap/ui/base/DataType", "sap/ui/core/CustomData", "sap/ui/core/Fragment", "sap/ui/core/Lib", "sap/ui/core/XMLTemplateProcessor", "sap/ui/core/library", "sap/ui/core/util/XMLPreprocessor", "sap/ui/mdc/field/ConditionsType", "sap/ui/mdc/library", "sap/ui/unified/library"], function (Log, _library, _library2, AppComponent, _library3, _factory, FilterOperatorUtils, _MultiValue, _Range, _TableFormatter, _VisualFilterFormatter, _AdditionalValueFormatter, _macroLibrary, DataType, CustomData, Fragment, Library, _XMLTemplateProcessor, _library4, XMLPreprocessor, _ConditionsType, _library5, _library6) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -24,7 +24,7 @@ sap.ui.define(["sap/base/Log", "sap/f/library", "sap/fe/controls/library", "sap/
|
|
|
24
24
|
controls: [],
|
|
25
25
|
elements: [],
|
|
26
26
|
// eslint-disable-next-line no-template-curly-in-string
|
|
27
|
-
version: "1.
|
|
27
|
+
version: "1.142.0",
|
|
28
28
|
noLibraryCSS: true,
|
|
29
29
|
extensions: {
|
|
30
30
|
flChangeHandlers: {
|
|
@@ -150,4 +150,4 @@ sap.ui.define(["sap/base/Log", "sap/f/library", "sap/fe/controls/library", "sap/
|
|
|
150
150
|
XMLPreprocessor.plugIn(rewriteNodes("sap.fe.macros", "macros:formatOptions", "sap.fe.macros.field", "macroField:FieldFormatOptions"), "sap.m", "formatOptions");
|
|
151
151
|
return thisLib;
|
|
152
152
|
}, false);
|
|
153
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYWNyb3NOYW1lc3BhY2UiLCJfZXhwb3J0cyIsInRoaXNMaWIiLCJMaWJyYXJ5IiwiaW5pdCIsIm5hbWUiLCJhcGlWZXJzaW9uIiwiZGVwZW5kZW5jaWVzIiwidHlwZXMiLCJpbnRlcmZhY2VzIiwiY29udHJvbHMiLCJlbGVtZW50cyIsInZlcnNpb24iLCJub0xpYnJhcnlDU1MiLCJleHRlbnNpb25zIiwiZmxDaGFuZ2VIYW5kbGVycyIsIk5hdmlnYXRpb25UeXBlIiwiRGF0YVR5cGUiLCJyZWdpc3RlckVudW0iLCJGcmFnbWVudCIsInJlZ2lzdGVyVHlwZSIsImxvYWQiLCJnZXRUeXBlIiwibVNldHRpbmdzIiwiY3VycmVudENvbnRyb2xsZXIiLCJjb250YWluaW5nVmlldyIsImdldENvbnRyb2xsZXIiLCJ0YXJnZXRDb250cm9sbGVyRXh0ZW5zaW9uIiwiaXNBIiwiZ2V0RXh0ZW5zaW9uQVBJIiwiaWQiLCJvQ29udHJvbGxlciIsImNoaWxkQ3VzdG9tRGF0YSIsInVuZGVmaW5lZCIsImNvbnRleHRQYXRoIiwiX2ZuU2V0dGluZ3NQcmVwcm9jZXNzb3IiLCJjb250cm9sU2V0dGluZ3MiLCJnZXRNZXRhZGF0YSIsImhhc1Byb3BlcnR5IiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJyZXN1bHQiLCJhcHBseSIsImN1c3RvbURhdGFLZXkiLCJhZGRDdXN0b21EYXRhIiwiQ3VzdG9tRGF0YSIsImtleSIsInZhbHVlIiwiX2xlbjIiLCJfa2V5MiIsInRoZW4iLCJBcHBDb21wb25lbnQiLCJyZWdpc3Rlckluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc0ZvclN0YXJ0VXAiLCJGaWx0ZXJPcGVyYXRvclV0aWxzIiwicHJvY2Vzc0N1c3RvbUZpbHRlck9wZXJhdG9ycyIsImNhdGNoIiwiZXJyb3IiLCJMb2ciLCJyZXdyaXRlTm9kZXMiLCJwYXJlbnROYW1lc3BhY2UiLCJwYXJlbnROYW1lIiwiY2hpbGROYW1lc3BhY2UiLCJjaGlsZE5hbWUiLCJvTm9kZSIsIl9vVmlzaXRvciIsImhhc0NoaWxkTm9kZXMiLCJhdHRyaWJ1dGVzIiwidmlzaXRDaGlsZE5vZGVzIiwibmV3Tm9kZSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudE5TIiwibmV3UGFyZW50IiwiYXR0cmlidXRlTmFtZXMiLCJnZXRBdHRyaWJ1dGVOYW1lcyIsImF0dHJpYnV0ZU5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsInJlcGxhY2VXaXRoIiwiWE1MUHJlcHJvY2Vzc29yIiwicGx1Z0luIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJsaWJyYXJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IFwic2FwL2YvbGlicmFyeVwiO1xuaW1wb3J0IFwic2FwL2ZlL2NvbnRyb2xzL2xpYnJhcnlcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvY29yZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBJVmlzaXRvckNhbGxiYWNrIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgXCJzYXAvZmUvbWFjcm9zL2NvcmVVSS9mYWN0b3J5XCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3JVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyT3BlcmF0b3JVdGlsc1wiO1xuaW1wb3J0IFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvdHlwZS9NdWx0aVZhbHVlXCI7XG5pbXBvcnQgXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci90eXBlL1JhbmdlXCI7XG5pbXBvcnQgXCJzYXAvZmUvbWFjcm9zL2Zvcm1hdHRlcnMvVGFibGVGb3JtYXR0ZXJcIjtcbmltcG9ydCBcInNhcC9mZS9tYWNyb3MvbWFjcm9MaWJyYXJ5XCI7XG5pbXBvcnQgRGF0YVR5cGUgZnJvbSBcInNhcC91aS9iYXNlL0RhdGFUeXBlXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ3VzdG9tRGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IFwic2FwL3VpL2NvcmUvWE1MVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFwic2FwL3VpL21kYy9maWVsZC9Db25kaXRpb25zVHlwZVwiO1xuaW1wb3J0IFwic2FwL3VpL21kYy9saWJyYXJ5XCI7XG5pbXBvcnQgXCJzYXAvdWkvdW5pZmllZC9saWJyYXJ5XCI7XG5cbi8qKlxuICogTGlicmFyeSBjb250YWluaW5nIHRoZSBidWlsZGluZyBibG9ja3MgZm9yIFNBUCBGaW9yaSBlbGVtZW50cy5cbiAqIEBuYW1lc3BhY2VcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hY3Jvc05hbWVzcGFjZSA9IFwic2FwLmZlLm1hY3Jvc1wiO1xuXG4vLyBsaWJyYXJ5IGRlcGVuZGVuY2llc1xuY29uc3QgdGhpc0xpYiA9IExpYnJhcnkuaW5pdCh7XG5cdG5hbWU6IFwic2FwLmZlLm1hY3Jvc1wiLFxuXHRhcGlWZXJzaW9uOiAyLFxuXHRkZXBlbmRlbmNpZXM6IFtcInNhcC51aS5jb3JlXCIsIFwic2FwLnVpLm1kY1wiLCBcInNhcC51aS51bmlmaWVkXCIsIFwic2FwLmZlLmNvcmVcIiwgXCJzYXAuZmUubmF2aWdhdGlvblwiLCBcInNhcC5mZS5jb250cm9sc1wiLCBcInNhcC5tXCIsIFwic2FwLmZcIl0sXG5cdHR5cGVzOiBbXCJzYXAuZmUubWFjcm9zLk5hdmlnYXRpb25UeXBlXCJdLFxuXHRpbnRlcmZhY2VzOiBbXSxcblx0Y29udHJvbHM6IFtdLFxuXHRlbGVtZW50czogW10sXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmdcblx0dmVyc2lvbjogXCIke3ZlcnNpb259XCIsXG5cdG5vTGlicmFyeUNTUzogdHJ1ZSxcblx0ZXh0ZW5zaW9uczoge1xuXHRcdGZsQ2hhbmdlSGFuZGxlcnM6IHtcblx0XHRcdFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWx0ZXJCYXJcIjogXCJzYXAvdWkvbWRjL2ZsZXhpYmlsaXR5L0ZpbHRlckJhclwiLFxuXHRcdFx0XCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLlNlY3Rpb25cIjogXCJzYXAvdXhhcC9mbGV4aWJpbGl0eS9PYmplY3RQYWdlU2VjdGlvblwiLFxuXHRcdFx0XCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLnNlY3Rpb24uU3ViU2VjdGlvblwiOiBcInNhcC91eGFwL2ZsZXhpYmlsaXR5L09iamVjdFBhZ2VTdWJTZWN0aW9uXCJcblx0XHR9XG5cdH1cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn0pIGFzIGFueTtcblxuZXhwb3J0IGVudW0gTmF2aWdhdGlvblR5cGUge1xuXHQvKipcblx0ICogRm9yIEV4dGVybmFsIE5hdmlnYXRpb25cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0RXh0ZXJuYWwgPSBcIkV4dGVybmFsXCIsXG5cblx0LyoqXG5cdCAqIEZvciBJbi1QYWdlIE5hdmlnYXRpb25cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0SW5QYWdlID0gXCJJblBhZ2VcIixcblxuXHQvKipcblx0ICogRm9yIE5vIE5hdmlnYXRpb25cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Tm9uZSA9IFwiTm9uZVwiXG59XG5cbnRoaXNMaWIuTmF2aWdhdGlvblR5cGUgPSBOYXZpZ2F0aW9uVHlwZTtcbkRhdGFUeXBlLnJlZ2lzdGVyRW51bShcInNhcC5mZS5tYWNyb3MuTmF2aWdhdGlvblR5cGVcIiwgdGhpc0xpYi5OYXZpZ2F0aW9uVHlwZSk7XG5GcmFnbWVudC5yZWdpc3RlclR5cGUoXCJDVVNUT01cIiwge1xuXHRsb2FkOiAoRnJhZ21lbnQgYXMgeyBnZXRUeXBlPzogRnVuY3Rpb24gfSkuZ2V0VHlwZT8uKFwiWE1MXCIpLmxvYWQsXG5cdGluaXQ6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRtU2V0dGluZ3M6IHsgY29udGFpbmluZ1ZpZXc6IFZpZXc7IGlkOiBzdHJpbmc7IGNoaWxkQ3VzdG9tRGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZDsgY29udGV4dFBhdGg/OiBzdHJpbmcgfSxcblx0XHQuLi5hcmdzOiB1bmtub3duW11cblx0KSB7XG5cdFx0Y29uc3QgY3VycmVudENvbnRyb2xsZXIgPSBtU2V0dGluZ3MuY29udGFpbmluZ1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyO1xuXHRcdGxldCB0YXJnZXRDb250cm9sbGVyRXh0ZW5zaW9uOiBQYWdlQ29udHJvbGxlciB8IEV4dGVuc2lvbkFQSSA9IGN1cnJlbnRDb250cm9sbGVyO1xuXHRcdGlmIChjdXJyZW50Q29udHJvbGxlciAmJiAhY3VycmVudENvbnRyb2xsZXIuaXNBPEV4dGVuc2lvbkFQST4oXCJzYXAuZmUuY29yZS5FeHRlbnNpb25BUElcIikpIHtcblx0XHRcdHRhcmdldENvbnRyb2xsZXJFeHRlbnNpb24gPSBjdXJyZW50Q29udHJvbGxlci5nZXRFeHRlbnNpb25BUEkobVNldHRpbmdzLmlkKTtcblx0XHR9XG5cdFx0bVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3ID0ge1xuXHRcdFx0b0NvbnRyb2xsZXI6IHRhcmdldENvbnRyb2xsZXJFeHRlbnNpb25cblx0XHR9IGFzIHVua25vd24gYXMgVmlldztcblx0XHRjb25zdCBjaGlsZEN1c3RvbURhdGEgPSBtU2V0dGluZ3MuY2hpbGRDdXN0b21EYXRhID8/IHVuZGVmaW5lZDtcblx0XHRjb25zdCBjb250ZXh0UGF0aCA9IG1TZXR0aW5ncy5jb250ZXh0UGF0aDtcblx0XHRkZWxldGUgbVNldHRpbmdzLmNoaWxkQ3VzdG9tRGF0YTtcblx0XHRkZWxldGUgbVNldHRpbmdzLmNvbnRleHRQYXRoO1xuXHRcdCh0aGlzIGFzIHsgX2ZuU2V0dGluZ3NQcmVwcm9jZXNzb3I/OiBGdW5jdGlvbiB9KS5fZm5TZXR0aW5nc1ByZXByb2Nlc3NvciA9IGZ1bmN0aW9uIChcblx0XHRcdHRoaXM6IENvbnRyb2wsXG5cdFx0XHRjb250cm9sU2V0dGluZ3M6IHtcblx0XHRcdFx0Y29udGV4dFBhdGg6IHVua25vd247XG5cdFx0XHR9XG5cdFx0KTogdW5rbm93biB7XG5cdFx0XHRpZiAodGhpcy5nZXRNZXRhZGF0YSgpLmhhc1Byb3BlcnR5KFwiY29udGV4dFBhdGhcIikpIHtcblx0XHRcdFx0Y29udHJvbFNldHRpbmdzLmNvbnRleHRQYXRoID8/PSBjb250ZXh0UGF0aDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGNvbnRyb2xTZXR0aW5ncztcblx0XHR9O1xuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IChGcmFnbWVudCBhcyB1bmtub3duIGFzIHsgZ2V0VHlwZTogRnVuY3Rpb24gfSkuZ2V0VHlwZShcIlhNTFwiKS5pbml0LmFwcGx5KHRoaXMsIFttU2V0dGluZ3MsIGFyZ3NdKTtcblx0XHRpZiAoY2hpbGRDdXN0b21EYXRhICYmIHJlc3VsdD8uaXNBKFwic2FwLnVpLmNvcmUuQ29udHJvbFwiKSkge1xuXHRcdFx0Zm9yIChjb25zdCBjdXN0b21EYXRhS2V5IGluIGNoaWxkQ3VzdG9tRGF0YSkge1xuXHRcdFx0XHQvLyBVSTUgYWRkcyAnYmluZGluZ1N0cmluZycgd2hlbiBpdHMgYW4gYWRhcHRhdGlvbiBwcm9qZWN0IChTTk9XOiBESU5DMDE0MzUxNSksIHdoaWNoIHJlc3VsdHMgaW4gZXJyb3JzIGxhdGVyXG5cdFx0XHRcdGlmIChjdXN0b21EYXRhS2V5ID09PSBcImJpbmRpbmdTdHJpbmdcIikge1xuXHRcdFx0XHRcdGRlbGV0ZSBjaGlsZEN1c3RvbURhdGFbY3VzdG9tRGF0YUtleV07XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0KHJlc3VsdCBhcyBDb250cm9sKS5hZGRDdXN0b21EYXRhKG5ldyBDdXN0b21EYXRhKHsga2V5OiBjdXN0b21EYXRhS2V5LCB2YWx1ZTogY2hpbGRDdXN0b21EYXRhW2N1c3RvbURhdGFLZXldIH0pKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59KTtcblxuRnJhZ21lbnQucmVnaXN0ZXJUeXBlKFwiU0NPUEVERkVGUkFHTUVOVFwiLCB7XG5cdGxvYWQ6IChGcmFnbWVudCBhcyB7IGdldFR5cGU/OiBGdW5jdGlvbiB9KS5nZXRUeXBlPy4oXCJYTUxcIikubG9hZCxcblx0aW5pdDogZnVuY3Rpb24gKFxuXHRcdG1TZXR0aW5nczogeyBjb250YWluaW5nVmlldzogVmlldzsgaWQ6IHN0cmluZzsgY2hpbGRDdXN0b21EYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkOyBjb250ZXh0UGF0aD86IHN0cmluZyB9LFxuXHRcdC4uLmFyZ3M6IHVua25vd25bXVxuXHQpIHtcblx0XHRjb25zdCBjb250ZXh0UGF0aCA9IG1TZXR0aW5ncy5jb250ZXh0UGF0aDtcblx0XHRkZWxldGUgbVNldHRpbmdzLmNvbnRleHRQYXRoO1xuXHRcdCh0aGlzIGFzIHsgX2ZuU2V0dGluZ3NQcmVwcm9jZXNzb3I/OiBGdW5jdGlvbiB9KS5fZm5TZXR0aW5nc1ByZXByb2Nlc3NvciA9IGZ1bmN0aW9uIChcblx0XHRcdHRoaXM6IENvbnRyb2wsXG5cdFx0XHRjb250cm9sU2V0dGluZ3M6IHtcblx0XHRcdFx0Y29udGV4dFBhdGg6IHVua25vd247XG5cdFx0XHR9XG5cdFx0KTogdW5rbm93biB7XG5cdFx0XHRpZiAodGhpcy5nZXRNZXRhZGF0YSgpLmhhc1Byb3BlcnR5KFwiY29udGV4dFBhdGhcIikpIHtcblx0XHRcdFx0Y29udHJvbFNldHRpbmdzLmNvbnRleHRQYXRoID8/PSBjb250ZXh0UGF0aDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGNvbnRyb2xTZXR0aW5ncztcblx0XHR9O1xuXHRcdHJldHVybiAoRnJhZ21lbnQgYXMgdW5rbm93biBhcyB7IGdldFR5cGU6IEZ1bmN0aW9uIH0pLmdldFR5cGUoXCJYTUxcIikuaW5pdC5hcHBseSh0aGlzLCBbbVNldHRpbmdzLCBhcmdzXSk7XG5cdH1cbn0pO1xuXG5MaWJyYXJ5LmxvYWQoeyBuYW1lOiBcInNhcC5mZS5tYWNyb3NcIiB9KVxuXHQudGhlbigoKSA9PiB7XG5cdFx0QXBwQ29tcG9uZW50LnJlZ2lzdGVySW5zdGFuY2VEZXBlbmRlbnRQcm9jZXNzRm9yU3RhcnRVcChGaWx0ZXJPcGVyYXRvclV0aWxzLnByb2Nlc3NDdXN0b21GaWx0ZXJPcGVyYXRvcnMpO1xuXHRcdHJldHVybjtcblx0fSlcblx0LmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuXHRcdExvZy5lcnJvcihgRXJyb3IgbG9hZGluZyAnc2FwLmZlLm1hY3Jvc2AsIGVycm9yIGFzIEVycm9yIHwgc3RyaW5nKTtcblx0fSk7XG5cbmNvbnN0IHJld3JpdGVOb2RlcyA9IGZ1bmN0aW9uIChwYXJlbnROYW1lc3BhY2U6IHN0cmluZywgcGFyZW50TmFtZTogc3RyaW5nLCBjaGlsZE5hbWVzcGFjZTogc3RyaW5nLCBjaGlsZE5hbWU6IHN0cmluZyk6IEZ1bmN0aW9uIHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXF1aXJlLWF3YWl0XG5cdHJldHVybiBhc3luYyAob05vZGU6IEVsZW1lbnQsIF9vVmlzaXRvcjogSVZpc2l0b3JDYWxsYmFjayk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdGlmIChvTm9kZS5oYXNDaGlsZE5vZGVzKCkgJiYgb05vZGUuYXR0cmlidXRlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdGF3YWl0IF9vVmlzaXRvci52aXNpdENoaWxkTm9kZXMob05vZGUpO1xuXHRcdFx0cmV0dXJuOyAvLyBJbiBjYXNlIGEgbm9kZSBoYXMgY2hpbGRyZW4gYW5kIG5vIGF0dHJpYnV0ZSBpdCdzIGFscmVhZHkgZm9ybWF0dGVkIHByb3Blcmx5XG5cdFx0fVxuXHRcdGNvbnN0IG5ld05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoY2hpbGROYW1lc3BhY2UsIGNoaWxkTmFtZSk7XG5cdFx0Y29uc3QgbmV3UGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHBhcmVudE5hbWVzcGFjZSwgcGFyZW50TmFtZSk7XG5cdFx0Y29uc3QgYXR0cmlidXRlTmFtZXMgPSBvTm9kZS5nZXRBdHRyaWJ1dGVOYW1lcygpO1xuXHRcdGlmIChhdHRyaWJ1dGVOYW1lcy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBPbmx5IGNvbnNpZGVyIGNhc2Ugd2hlcmUgd2UgaGF2ZSBhdHRyaWJ1dGVzLCBtZWFuaW5nIHRoZSBvbGQgc3ludGF4XG5cdFx0XHRmb3IgKGNvbnN0IGF0dHJpYnV0ZU5hbWUgb2YgYXR0cmlidXRlTmFtZXMpIHtcblx0XHRcdFx0bmV3Tm9kZS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgb05vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpISk7XG5cdFx0XHR9XG5cdFx0XHRuZXdQYXJlbnQuYXBwZW5kQ2hpbGQobmV3Tm9kZSk7XG5cdFx0fVxuXHRcdGF3YWl0IF9vVmlzaXRvci52aXNpdENoaWxkTm9kZXMobmV3UGFyZW50KTtcblx0XHRvTm9kZS5yZXBsYWNlV2l0aChuZXdQYXJlbnQpO1xuXHR9O1xufTtcblxuLy8gUmV3cml0ZSB0aGUgb2xkIHNoYXJlT3B0aW9ucyB0byB0aGUgbmV3IG9uZVxuWE1MUHJlcHJvY2Vzc29yLnBsdWdJbihcblx0cmV3cml0ZU5vZGVzKFwic2FwLmZlLm1hY3Jvc1wiLCBcIm1hY3JvczpzaGFyZU9wdGlvbnNcIiwgXCJzYXAuZmUubWFjcm9zLnNoYXJlXCIsIFwibWFjcm9TaGFyZTpTaGFyZU9wdGlvbnNcIiksXG5cdFwic2FwLmZlLm1hY3Jvc1wiLFxuXHRcInNoYXJlT3B0aW9uc1wiXG4pO1xuXG5YTUxQcmVwcm9jZXNzb3IucGx1Z0luKFxuXHRyZXdyaXRlTm9kZXMoXCJzYXAuZmUubWFjcm9zXCIsIFwibWFjcm9zOmZvcm1hdE9wdGlvbnNcIiwgXCJzYXAuZmUubWFjcm9zLmZpZWxkXCIsIFwibWFjcm9GaWVsZDpGaWVsZEZvcm1hdE9wdGlvbnNcIiksXG5cdFwic2FwLmZlLm1hY3Jvc1wiLFxuXHRcImZvcm1hdE9wdGlvbnNcIlxuKTtcblxuWE1MUHJlcHJvY2Vzc29yLnBsdWdJbihcblx0cmV3cml0ZU5vZGVzKFwic2FwLmZlLm1hY3Jvc1wiLCBcIm1hY3Jvczpmb3JtYXRPcHRpb25zXCIsIFwic2FwLmZlLm1hY3Jvcy5maWVsZFwiLCBcIm1hY3JvRmllbGQ6RmllbGRGb3JtYXRPcHRpb25zXCIpLFxuXHRcInNhcC5tXCIsXG5cdFwiZm9ybWF0T3B0aW9uc1wiXG4pO1xuXG5leHBvcnQgZGVmYXVsdCB0aGlzTGliO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztFQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sTUFBTUEsZUFBZSxHQUFHLGVBQWU7O0VBRTlDO0VBQUFDLFFBQUEsQ0FBQUQsZUFBQSxHQUFBQSxlQUFBO0VBQ0EsTUFBTUUsT0FBTyxHQUFH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
|
|
153
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYWNyb3NOYW1lc3BhY2UiLCJfZXhwb3J0cyIsInRoaXNMaWIiLCJMaWJyYXJ5IiwiaW5pdCIsIm5hbWUiLCJhcGlWZXJzaW9uIiwiZGVwZW5kZW5jaWVzIiwidHlwZXMiLCJpbnRlcmZhY2VzIiwiY29udHJvbHMiLCJlbGVtZW50cyIsInZlcnNpb24iLCJub0xpYnJhcnlDU1MiLCJleHRlbnNpb25zIiwiZmxDaGFuZ2VIYW5kbGVycyIsIk5hdmlnYXRpb25UeXBlIiwiRGF0YVR5cGUiLCJyZWdpc3RlckVudW0iLCJGcmFnbWVudCIsInJlZ2lzdGVyVHlwZSIsImxvYWQiLCJnZXRUeXBlIiwibVNldHRpbmdzIiwiY3VycmVudENvbnRyb2xsZXIiLCJjb250YWluaW5nVmlldyIsImdldENvbnRyb2xsZXIiLCJ0YXJnZXRDb250cm9sbGVyRXh0ZW5zaW9uIiwiaXNBIiwiZ2V0RXh0ZW5zaW9uQVBJIiwiaWQiLCJvQ29udHJvbGxlciIsImNoaWxkQ3VzdG9tRGF0YSIsInVuZGVmaW5lZCIsImNvbnRleHRQYXRoIiwiX2ZuU2V0dGluZ3NQcmVwcm9jZXNzb3IiLCJjb250cm9sU2V0dGluZ3MiLCJnZXRNZXRhZGF0YSIsImhhc1Byb3BlcnR5IiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJyZXN1bHQiLCJhcHBseSIsImN1c3RvbURhdGFLZXkiLCJhZGRDdXN0b21EYXRhIiwiQ3VzdG9tRGF0YSIsImtleSIsInZhbHVlIiwiX2xlbjIiLCJfa2V5MiIsInRoZW4iLCJBcHBDb21wb25lbnQiLCJyZWdpc3Rlckluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc0ZvclN0YXJ0VXAiLCJGaWx0ZXJPcGVyYXRvclV0aWxzIiwicHJvY2Vzc0N1c3RvbUZpbHRlck9wZXJhdG9ycyIsImNhdGNoIiwiZXJyb3IiLCJMb2ciLCJyZXdyaXRlTm9kZXMiLCJwYXJlbnROYW1lc3BhY2UiLCJwYXJlbnROYW1lIiwiY2hpbGROYW1lc3BhY2UiLCJjaGlsZE5hbWUiLCJvTm9kZSIsIl9vVmlzaXRvciIsImhhc0NoaWxkTm9kZXMiLCJhdHRyaWJ1dGVzIiwidmlzaXRDaGlsZE5vZGVzIiwibmV3Tm9kZSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudE5TIiwibmV3UGFyZW50IiwiYXR0cmlidXRlTmFtZXMiLCJnZXRBdHRyaWJ1dGVOYW1lcyIsImF0dHJpYnV0ZU5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsInJlcGxhY2VXaXRoIiwiWE1MUHJlcHJvY2Vzc29yIiwicGx1Z0luIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJsaWJyYXJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IFwic2FwL2YvbGlicmFyeVwiO1xuaW1wb3J0IFwic2FwL2ZlL2NvbnRyb2xzL2xpYnJhcnlcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvY29yZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBJVmlzaXRvckNhbGxiYWNrIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgXCJzYXAvZmUvbWFjcm9zL2NvcmVVSS9mYWN0b3J5XCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3JVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyT3BlcmF0b3JVdGlsc1wiO1xuaW1wb3J0IFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvdHlwZS9NdWx0aVZhbHVlXCI7XG5pbXBvcnQgXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci90eXBlL1JhbmdlXCI7XG5pbXBvcnQgXCJzYXAvZmUvbWFjcm9zL2Zvcm1hdHRlcnMvVGFibGVGb3JtYXR0ZXJcIjtcbmltcG9ydCBcInNhcC9mZS9tYWNyb3MvZm9ybWF0dGVycy9WaXN1YWxGaWx0ZXJGb3JtYXR0ZXJcIjtcbmltcG9ydCBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL0FkZGl0aW9uYWxWYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IFwic2FwL2ZlL21hY3Jvcy9tYWNyb0xpYnJhcnlcIjtcbmltcG9ydCBEYXRhVHlwZSBmcm9tIFwic2FwL3VpL2Jhc2UvRGF0YVR5cGVcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgXCJzYXAvdWkvbWRjL2ZpZWxkL0NvbmRpdGlvbnNUeXBlXCI7XG5pbXBvcnQgXCJzYXAvdWkvbWRjL2xpYnJhcnlcIjtcbmltcG9ydCBcInNhcC91aS91bmlmaWVkL2xpYnJhcnlcIjtcblxuLyoqXG4gKiBMaWJyYXJ5IGNvbnRhaW5pbmcgdGhlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgU0FQIEZpb3JpIGVsZW1lbnRzLlxuICogQG5hbWVzcGFjZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbWFjcm9zTmFtZXNwYWNlID0gXCJzYXAuZmUubWFjcm9zXCI7XG5cbi8vIGxpYnJhcnkgZGVwZW5kZW5jaWVzXG5jb25zdCB0aGlzTGliID0gTGlicmFyeS5pbml0KHtcblx0bmFtZTogXCJzYXAuZmUubWFjcm9zXCIsXG5cdGFwaVZlcnNpb246IDIsXG5cdGRlcGVuZGVuY2llczogW1wic2FwLnVpLmNvcmVcIiwgXCJzYXAudWkubWRjXCIsIFwic2FwLnVpLnVuaWZpZWRcIiwgXCJzYXAuZmUuY29yZVwiLCBcInNhcC5mZS5uYXZpZ2F0aW9uXCIsIFwic2FwLmZlLmNvbnRyb2xzXCIsIFwic2FwLm1cIiwgXCJzYXAuZlwiXSxcblx0dHlwZXM6IFtcInNhcC5mZS5tYWNyb3MuTmF2aWdhdGlvblR5cGVcIl0sXG5cdGludGVyZmFjZXM6IFtdLFxuXHRjb250cm9sczogW10sXG5cdGVsZW1lbnRzOiBbXSxcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZ1xuXHR2ZXJzaW9uOiBcIiR7dmVyc2lvbn1cIixcblx0bm9MaWJyYXJ5Q1NTOiB0cnVlLFxuXHRleHRlbnNpb25zOiB7XG5cdFx0ZmxDaGFuZ2VIYW5kbGVyczoge1xuXHRcdFx0XCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkZpbHRlckJhclwiOiBcInNhcC91aS9tZGMvZmxleGliaWxpdHkvRmlsdGVyQmFyXCIsXG5cdFx0XHRcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuU2VjdGlvblwiOiBcInNhcC91eGFwL2ZsZXhpYmlsaXR5L09iamVjdFBhZ2VTZWN0aW9uXCIsXG5cdFx0XHRcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuc2VjdGlvbi5TdWJTZWN0aW9uXCI6IFwic2FwL3V4YXAvZmxleGliaWxpdHkvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIlxuXHRcdH1cblx0fVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSkgYXMgYW55O1xuXG5leHBvcnQgZW51bSBOYXZpZ2F0aW9uVHlwZSB7XG5cdC8qKlxuXHQgKiBGb3IgRXh0ZXJuYWwgTmF2aWdhdGlvblxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRFeHRlcm5hbCA9IFwiRXh0ZXJuYWxcIixcblxuXHQvKipcblx0ICogRm9yIEluLVBhZ2UgTmF2aWdhdGlvblxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRJblBhZ2UgPSBcIkluUGFnZVwiLFxuXG5cdC8qKlxuXHQgKiBGb3IgTm8gTmF2aWdhdGlvblxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHROb25lID0gXCJOb25lXCJcbn1cblxudGhpc0xpYi5OYXZpZ2F0aW9uVHlwZSA9IE5hdmlnYXRpb25UeXBlO1xuRGF0YVR5cGUucmVnaXN0ZXJFbnVtKFwic2FwLmZlLm1hY3Jvcy5OYXZpZ2F0aW9uVHlwZVwiLCB0aGlzTGliLk5hdmlnYXRpb25UeXBlKTtcbkZyYWdtZW50LnJlZ2lzdGVyVHlwZShcIkNVU1RPTVwiLCB7XG5cdGxvYWQ6IChGcmFnbWVudCBhcyB7IGdldFR5cGU/OiBGdW5jdGlvbiB9KS5nZXRUeXBlPy4oXCJYTUxcIikubG9hZCxcblx0aW5pdDogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG1TZXR0aW5nczogeyBjb250YWluaW5nVmlldzogVmlldzsgaWQ6IHN0cmluZzsgY2hpbGRDdXN0b21EYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkOyBjb250ZXh0UGF0aD86IHN0cmluZyB9LFxuXHRcdC4uLmFyZ3M6IHVua25vd25bXVxuXHQpIHtcblx0XHRjb25zdCBjdXJyZW50Q29udHJvbGxlciA9IG1TZXR0aW5ncy5jb250YWluaW5nVmlldy5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXI7XG5cdFx0bGV0IHRhcmdldENvbnRyb2xsZXJFeHRlbnNpb246IFBhZ2VDb250cm9sbGVyIHwgRXh0ZW5zaW9uQVBJID0gY3VycmVudENvbnRyb2xsZXI7XG5cdFx0aWYgKGN1cnJlbnRDb250cm9sbGVyICYmICFjdXJyZW50Q29udHJvbGxlci5pc0E8RXh0ZW5zaW9uQVBJPihcInNhcC5mZS5jb3JlLkV4dGVuc2lvbkFQSVwiKSkge1xuXHRcdFx0dGFyZ2V0Q29udHJvbGxlckV4dGVuc2lvbiA9IGN1cnJlbnRDb250cm9sbGVyLmdldEV4dGVuc2lvbkFQSShtU2V0dGluZ3MuaWQpO1xuXHRcdH1cblx0XHRtU2V0dGluZ3MuY29udGFpbmluZ1ZpZXcgPSB7XG5cdFx0XHRvQ29udHJvbGxlcjogdGFyZ2V0Q29udHJvbGxlckV4dGVuc2lvblxuXHRcdH0gYXMgdW5rbm93biBhcyBWaWV3O1xuXHRcdGNvbnN0IGNoaWxkQ3VzdG9tRGF0YSA9IG1TZXR0aW5ncy5jaGlsZEN1c3RvbURhdGEgPz8gdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGNvbnRleHRQYXRoID0gbVNldHRpbmdzLmNvbnRleHRQYXRoO1xuXHRcdGRlbGV0ZSBtU2V0dGluZ3MuY2hpbGRDdXN0b21EYXRhO1xuXHRcdGRlbGV0ZSBtU2V0dGluZ3MuY29udGV4dFBhdGg7XG5cdFx0KHRoaXMgYXMgeyBfZm5TZXR0aW5nc1ByZXByb2Nlc3Nvcj86IEZ1bmN0aW9uIH0pLl9mblNldHRpbmdzUHJlcHJvY2Vzc29yID0gZnVuY3Rpb24gKFxuXHRcdFx0dGhpczogQ29udHJvbCxcblx0XHRcdGNvbnRyb2xTZXR0aW5nczoge1xuXHRcdFx0XHRjb250ZXh0UGF0aDogdW5rbm93bjtcblx0XHRcdH1cblx0XHQpOiB1bmtub3duIHtcblx0XHRcdGlmICh0aGlzLmdldE1ldGFkYXRhKCkuaGFzUHJvcGVydHkoXCJjb250ZXh0UGF0aFwiKSkge1xuXHRcdFx0XHRjb250cm9sU2V0dGluZ3MuY29udGV4dFBhdGggPz89IGNvbnRleHRQYXRoO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gY29udHJvbFNldHRpbmdzO1xuXHRcdH07XG5cdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgKEZyYWdtZW50IGFzIHVua25vd24gYXMgeyBnZXRUeXBlOiBGdW5jdGlvbiB9KS5nZXRUeXBlKFwiWE1MXCIpLmluaXQuYXBwbHkodGhpcywgW21TZXR0aW5ncywgYXJnc10pO1xuXHRcdGlmIChjaGlsZEN1c3RvbURhdGEgJiYgcmVzdWx0Py5pc0EoXCJzYXAudWkuY29yZS5Db250cm9sXCIpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGN1c3RvbURhdGFLZXkgaW4gY2hpbGRDdXN0b21EYXRhKSB7XG5cdFx0XHRcdC8vIFVJNSBhZGRzICdiaW5kaW5nU3RyaW5nJyB3aGVuIGl0cyBhbiBhZGFwdGF0aW9uIHByb2plY3QgKFNOT1c6IERJTkMwMTQzNTE1KSwgd2hpY2ggcmVzdWx0cyBpbiBlcnJvcnMgbGF0ZXJcblx0XHRcdFx0aWYgKGN1c3RvbURhdGFLZXkgPT09IFwiYmluZGluZ1N0cmluZ1wiKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIGNoaWxkQ3VzdG9tRGF0YVtjdXN0b21EYXRhS2V5XTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHQocmVzdWx0IGFzIENvbnRyb2wpLmFkZEN1c3RvbURhdGEobmV3IEN1c3RvbURhdGEoeyBrZXk6IGN1c3RvbURhdGFLZXksIHZhbHVlOiBjaGlsZEN1c3RvbURhdGFbY3VzdG9tRGF0YUtleV0gfSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn0pO1xuXG5GcmFnbWVudC5yZWdpc3RlclR5cGUoXCJTQ09QRURGRUZSQUdNRU5UXCIsIHtcblx0bG9hZDogKEZyYWdtZW50IGFzIHsgZ2V0VHlwZT86IEZ1bmN0aW9uIH0pLmdldFR5cGU/LihcIlhNTFwiKS5sb2FkLFxuXHRpbml0OiBmdW5jdGlvbiAoXG5cdFx0bVNldHRpbmdzOiB7IGNvbnRhaW5pbmdWaWV3OiBWaWV3OyBpZDogc3RyaW5nOyBjaGlsZEN1c3RvbURhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQ7IGNvbnRleHRQYXRoPzogc3RyaW5nIH0sXG5cdFx0Li4uYXJnczogdW5rbm93bltdXG5cdCkge1xuXHRcdGNvbnN0IGNvbnRleHRQYXRoID0gbVNldHRpbmdzLmNvbnRleHRQYXRoO1xuXHRcdGRlbGV0ZSBtU2V0dGluZ3MuY29udGV4dFBhdGg7XG5cdFx0KHRoaXMgYXMgeyBfZm5TZXR0aW5nc1ByZXByb2Nlc3Nvcj86IEZ1bmN0aW9uIH0pLl9mblNldHRpbmdzUHJlcHJvY2Vzc29yID0gZnVuY3Rpb24gKFxuXHRcdFx0dGhpczogQ29udHJvbCxcblx0XHRcdGNvbnRyb2xTZXR0aW5nczoge1xuXHRcdFx0XHRjb250ZXh0UGF0aDogdW5rbm93bjtcblx0XHRcdH1cblx0XHQpOiB1bmtub3duIHtcblx0XHRcdGlmICh0aGlzLmdldE1ldGFkYXRhKCkuaGFzUHJvcGVydHkoXCJjb250ZXh0UGF0aFwiKSkge1xuXHRcdFx0XHRjb250cm9sU2V0dGluZ3MuY29udGV4dFBhdGggPz89IGNvbnRleHRQYXRoO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gY29udHJvbFNldHRpbmdzO1xuXHRcdH07XG5cdFx0cmV0dXJuIChGcmFnbWVudCBhcyB1bmtub3duIGFzIHsgZ2V0VHlwZTogRnVuY3Rpb24gfSkuZ2V0VHlwZShcIlhNTFwiKS5pbml0LmFwcGx5KHRoaXMsIFttU2V0dGluZ3MsIGFyZ3NdKTtcblx0fVxufSk7XG5cbkxpYnJhcnkubG9hZCh7IG5hbWU6IFwic2FwLmZlLm1hY3Jvc1wiIH0pXG5cdC50aGVuKCgpID0+IHtcblx0XHRBcHBDb21wb25lbnQucmVnaXN0ZXJJbnN0YW5jZURlcGVuZGVudFByb2Nlc3NGb3JTdGFydFVwKEZpbHRlck9wZXJhdG9yVXRpbHMucHJvY2Vzc0N1c3RvbUZpbHRlck9wZXJhdG9ycyk7XG5cdFx0cmV0dXJuO1xuXHR9KVxuXHQuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0TG9nLmVycm9yKGBFcnJvciBsb2FkaW5nICdzYXAuZmUubWFjcm9zYCwgZXJyb3IgYXMgRXJyb3IgfCBzdHJpbmcpO1xuXHR9KTtcblxuY29uc3QgcmV3cml0ZU5vZGVzID0gZnVuY3Rpb24gKHBhcmVudE5hbWVzcGFjZTogc3RyaW5nLCBwYXJlbnROYW1lOiBzdHJpbmcsIGNoaWxkTmFtZXNwYWNlOiBzdHJpbmcsIGNoaWxkTmFtZTogc3RyaW5nKTogRnVuY3Rpb24ge1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcblx0cmV0dXJuIGFzeW5jIChvTm9kZTogRWxlbWVudCwgX29WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0aWYgKG9Ob2RlLmhhc0NoaWxkTm9kZXMoKSAmJiBvTm9kZS5hdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0YXdhaXQgX29WaXNpdG9yLnZpc2l0Q2hpbGROb2RlcyhvTm9kZSk7XG5cdFx0XHRyZXR1cm47IC8vIEluIGNhc2UgYSBub2RlIGhhcyBjaGlsZHJlbiBhbmQgbm8gYXR0cmlidXRlIGl0J3MgYWxyZWFkeSBmb3JtYXR0ZWQgcHJvcGVybHlcblx0XHR9XG5cdFx0Y29uc3QgbmV3Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhjaGlsZE5hbWVzcGFjZSwgY2hpbGROYW1lKTtcblx0XHRjb25zdCBuZXdQYXJlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMocGFyZW50TmFtZXNwYWNlLCBwYXJlbnROYW1lKTtcblx0XHRjb25zdCBhdHRyaWJ1dGVOYW1lcyA9IG9Ob2RlLmdldEF0dHJpYnV0ZU5hbWVzKCk7XG5cdFx0aWYgKGF0dHJpYnV0ZU5hbWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIE9ubHkgY29uc2lkZXIgY2FzZSB3aGVyZSB3ZSBoYXZlIGF0dHJpYnV0ZXMsIG1lYW5pbmcgdGhlIG9sZCBzeW50YXhcblx0XHRcdGZvciAoY29uc3QgYXR0cmlidXRlTmFtZSBvZiBhdHRyaWJ1dGVOYW1lcykge1xuXHRcdFx0XHRuZXdOb2RlLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCBvTm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkhKTtcblx0XHRcdH1cblx0XHRcdG5ld1BhcmVudC5hcHBlbmRDaGlsZChuZXdOb2RlKTtcblx0XHR9XG5cdFx0YXdhaXQgX29WaXNpdG9yLnZpc2l0Q2hpbGROb2RlcyhuZXdQYXJlbnQpO1xuXHRcdG9Ob2RlLnJlcGxhY2VXaXRoKG5ld1BhcmVudCk7XG5cdH07XG59O1xuXG4vLyBSZXdyaXRlIHRoZSBvbGQgc2hhcmVPcHRpb25zIHRvIHRoZSBuZXcgb25lXG5YTUxQcmVwcm9jZXNzb3IucGx1Z0luKFxuXHRyZXdyaXRlTm9kZXMoXCJzYXAuZmUubWFjcm9zXCIsIFwibWFjcm9zOnNoYXJlT3B0aW9uc1wiLCBcInNhcC5mZS5tYWNyb3Muc2hhcmVcIiwgXCJtYWNyb1NoYXJlOlNoYXJlT3B0aW9uc1wiKSxcblx0XCJzYXAuZmUubWFjcm9zXCIsXG5cdFwic2hhcmVPcHRpb25zXCJcbik7XG5cblhNTFByZXByb2Nlc3Nvci5wbHVnSW4oXG5cdHJld3JpdGVOb2RlcyhcInNhcC5mZS5tYWNyb3NcIiwgXCJtYWNyb3M6Zm9ybWF0T3B0aW9uc1wiLCBcInNhcC5mZS5tYWNyb3MuZmllbGRcIiwgXCJtYWNyb0ZpZWxkOkZpZWxkRm9ybWF0T3B0aW9uc1wiKSxcblx0XCJzYXAuZmUubWFjcm9zXCIsXG5cdFwiZm9ybWF0T3B0aW9uc1wiXG4pO1xuXG5YTUxQcmVwcm9jZXNzb3IucGx1Z0luKFxuXHRyZXdyaXRlTm9kZXMoXCJzYXAuZmUubWFjcm9zXCIsIFwibWFjcm9zOmZvcm1hdE9wdGlvbnNcIiwgXCJzYXAuZmUubWFjcm9zLmZpZWxkXCIsIFwibWFjcm9GaWVsZDpGaWVsZEZvcm1hdE9wdGlvbnNcIiksXG5cdFwic2FwLm1cIixcblx0XCJmb3JtYXRPcHRpb25zXCJcbik7XG5cbmV4cG9ydCBkZWZhdWx0IHRoaXNMaWI7XG4iXSwi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
|
|
@@ -11,6 +11,8 @@ import FilterOperatorUtils from "sap/fe/macros/filter/FilterOperatorUtils";
|
|
|
11
11
|
import "sap/fe/macros/filter/type/MultiValue";
|
|
12
12
|
import "sap/fe/macros/filter/type/Range";
|
|
13
13
|
import "sap/fe/macros/formatters/TableFormatter";
|
|
14
|
+
import "sap/fe/macros/formatters/VisualFilterFormatter";
|
|
15
|
+
import "sap/fe/macros/internal/valuehelp/AdditionalValueFormatter";
|
|
14
16
|
import "sap/fe/macros/macroLibrary";
|
|
15
17
|
import DataType from "sap/ui/base/DataType";
|
|
16
18
|
import type Control from "sap/ui/core/Control";
|