@sapui5/sap.fe.macros 1.138.0 → 1.140.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 +269 -0
- package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
- package/src/sap/fe/macros/CommonHelper.js +2 -2
- package/src/sap/fe/macros/CommonHelper.ts +1 -1
- package/src/sap/fe/macros/Field.js +85 -58
- package/src/sap/fe/macros/Field.ts +104 -60
- package/src/sap/fe/macros/FooterContent.js +44 -11
- package/src/sap/fe/macros/FooterContent.tsx +48 -9
- package/src/sap/fe/macros/FormElement.js +2 -2
- package/src/sap/fe/macros/FormElement.ts +1 -2
- package/src/sap/fe/macros/MessageButton.js +1 -2
- package/src/sap/fe/macros/MessageButton.tsx +0 -1
- package/src/sap/fe/macros/MultiValueField.js +17 -6
- package/src/sap/fe/macros/MultiValueField.tsx +7 -4
- package/src/sap/fe/macros/RichTextEditor.js +30 -5
- package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
- package/src/sap/fe/macros/Share.js +85 -40
- package/src/sap/fe/macros/Share.tsx +42 -1
- package/src/sap/fe/macros/Status.js +226 -0
- package/src/sap/fe/macros/Status.tsx +192 -0
- package/src/sap/fe/macros/ValueHelp.js +4 -29
- package/src/sap/fe/macros/ValueHelp.tsx +2 -43
- package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
- package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
- package/src/sap/fe/macros/ai/EasyFilterBar.js +123 -114
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +140 -124
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
- package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
- package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
- package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
- package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
- package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
- package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
- package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
- package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
- package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
- package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
- package/src/sap/fe/macros/controls/FilterBar.js +49 -2
- package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
- package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
- package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
- package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
- package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
- package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
- package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
- package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
- package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
- package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
- package/src/sap/fe/macros/designtime/Designtime.helper.js +39 -2
- package/src/sap/fe/macros/designtime/Designtime.helper.ts +39 -0
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
- package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
- package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
- package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
- package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
- package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
- package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
- package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
- package/src/sap/fe/macros/form/Form.js +1 -4
- package/src/sap/fe/macros/form/Form.tsx +0 -3
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
- package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
- package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
- package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
- package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
- package/src/sap/fe/macros/form/FormDelegate.js +20 -1
- package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
- package/src/sap/fe/macros/form/FormHelper.js +1 -2
- package/src/sap/fe/macros/form/FormHelper.ts +0 -1
- package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
- package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
- package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
- package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
- package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
- package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
- package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
- package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
- package/src/sap/fe/macros/internal/DataPoint.js +2 -1
- package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
- package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
- package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
- package/src/sap/fe/macros/internal/FilterField.block.js +10 -2
- package/src/sap/fe/macros/internal/FilterField.block.ts +11 -1
- package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +51 -13
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +53 -6
- package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +11 -0
- package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
- package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +2 -1
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +16 -5
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +21 -9
- package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
- package/src/sap/fe/macros/messagebundle.properties +42 -32
- package/src/sap/fe/macros/messagebundle_ar.properties +12 -4
- package/src/sap/fe/macros/messagebundle_bg.properties +11 -3
- package/src/sap/fe/macros/messagebundle_ca.properties +15 -7
- package/src/sap/fe/macros/messagebundle_cnr.properties +12 -4
- package/src/sap/fe/macros/messagebundle_cs.properties +10 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +12 -4
- package/src/sap/fe/macros/messagebundle_da.properties +11 -3
- package/src/sap/fe/macros/messagebundle_de.properties +18 -10
- package/src/sap/fe/macros/messagebundle_el.properties +13 -5
- package/src/sap/fe/macros/messagebundle_en.properties +16 -8
- package/src/sap/fe/macros/messagebundle_en_GB.properties +16 -8
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +16 -8
- package/src/sap/fe/macros/messagebundle_es.properties +13 -5
- package/src/sap/fe/macros/messagebundle_es_MX.properties +14 -6
- package/src/sap/fe/macros/messagebundle_et.properties +13 -5
- package/src/sap/fe/macros/messagebundle_fi.properties +14 -6
- package/src/sap/fe/macros/messagebundle_fr.properties +14 -6
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +15 -7
- package/src/sap/fe/macros/messagebundle_hi.properties +11 -3
- package/src/sap/fe/macros/messagebundle_hr.properties +11 -3
- package/src/sap/fe/macros/messagebundle_hu.properties +10 -2
- package/src/sap/fe/macros/messagebundle_id.properties +18 -10
- package/src/sap/fe/macros/messagebundle_it.properties +10 -2
- package/src/sap/fe/macros/messagebundle_iw.properties +10 -2
- package/src/sap/fe/macros/messagebundle_ja.properties +13 -5
- package/src/sap/fe/macros/messagebundle_kk.properties +15 -7
- package/src/sap/fe/macros/messagebundle_ko.properties +10 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +11 -3
- package/src/sap/fe/macros/messagebundle_lv.properties +12 -4
- package/src/sap/fe/macros/messagebundle_mk.properties +12 -4
- package/src/sap/fe/macros/messagebundle_ms.properties +14 -6
- package/src/sap/fe/macros/messagebundle_nl.properties +13 -5
- package/src/sap/fe/macros/messagebundle_no.properties +12 -4
- package/src/sap/fe/macros/messagebundle_pl.properties +12 -4
- package/src/sap/fe/macros/messagebundle_pt.properties +13 -5
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -4
- package/src/sap/fe/macros/messagebundle_ro.properties +12 -4
- package/src/sap/fe/macros/messagebundle_ru.properties +13 -5
- package/src/sap/fe/macros/messagebundle_sh.properties +12 -4
- package/src/sap/fe/macros/messagebundle_sk.properties +11 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +12 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +12 -4
- package/src/sap/fe/macros/messagebundle_sv.properties +11 -3
- package/src/sap/fe/macros/messagebundle_th.properties +11 -3
- package/src/sap/fe/macros/messagebundle_tr.properties +10 -2
- package/src/sap/fe/macros/messagebundle_uk.properties +17 -9
- package/src/sap/fe/macros/messagebundle_vi.properties +12 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +11 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -4
- package/src/sap/fe/macros/messages/MessageButton.js +55 -36
- package/src/sap/fe/macros/messages/MessageButton.ts +64 -39
- package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
- package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
- package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
- package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
- package/src/sap/fe/macros/share/ShareAPI.js +4 -29
- package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
- package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
- package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
- package/src/sap/fe/macros/table/Action.js +24 -2
- package/src/sap/fe/macros/table/Action.ts +13 -0
- package/src/sap/fe/macros/table/ActionGroup.js +24 -2
- package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
- package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
- package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
- package/src/sap/fe/macros/table/ActionOverride.js +24 -2
- package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
- package/src/sap/fe/macros/table/Column.js +3 -3
- package/src/sap/fe/macros/table/Column.ts +2 -2
- package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +36 -7
- package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
- package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
- package/src/sap/fe/macros/table/Table.block.js +137 -108
- package/src/sap/fe/macros/table/Table.block.tsx +29 -2
- package/src/sap/fe/macros/table/TableAPI.js +143 -133
- package/src/sap/fe/macros/table/TableAPI.ts +5 -1
- package/src/sap/fe/macros/table/TableDefinition.js +4 -2
- package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
- package/src/sap/fe/macros/table/TableHelper.js +1 -2
- package/src/sap/fe/macros/table/TableHelper.ts +0 -1
- package/src/sap/fe/macros/table/TableRuntime.js +26 -7
- package/src/sap/fe/macros/table/TableRuntime.ts +33 -5
- package/src/sap/fe/macros/table/Utils.js +6 -2
- package/src/sap/fe/macros/table/Utils.ts +5 -1
- package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
- package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -20
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -24
- package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
- package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
- package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
- package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
- package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
- package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +8 -1
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +10 -0
- package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
- package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +20 -6
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +36 -14
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -7
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +16 -5
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +18 -4
|
@@ -511,7 +511,13 @@ sap.ui.define(["sap/fe/base/HookSupport", "sap/fe/controls/inlineEdit/InlineEdit
|
|
|
511
511
|
/**
|
|
512
512
|
* Triggers the inline edit discard.
|
|
513
513
|
*/;
|
|
514
|
-
_proto.triggerInlineEditDiscard = function triggerInlineEditDiscard() {
|
|
514
|
+
_proto.triggerInlineEditDiscard = async function triggerInlineEditDiscard() {
|
|
515
|
+
if (this.hasPendingUserInput()) {
|
|
516
|
+
// If there is pending user input we delay the save to allow inner changes from the mdc conditions to be propagated to the model
|
|
517
|
+
await new Promise(resolve => {
|
|
518
|
+
setTimeout(resolve, 200);
|
|
519
|
+
});
|
|
520
|
+
}
|
|
515
521
|
this.getPageController()?.inlineEditFlow.inlineEditDiscard();
|
|
516
522
|
}
|
|
517
523
|
|
|
@@ -519,7 +525,13 @@ sap.ui.define(["sap/fe/base/HookSupport", "sap/fe/controls/inlineEdit/InlineEdit
|
|
|
519
525
|
* Triggers the inline edit save.
|
|
520
526
|
* @returns The inlineEditFlow save promise.
|
|
521
527
|
*/;
|
|
522
|
-
_proto.triggerInlineEditSave = function triggerInlineEditSave() {
|
|
528
|
+
_proto.triggerInlineEditSave = async function triggerInlineEditSave() {
|
|
529
|
+
if (this.hasPendingUserInput()) {
|
|
530
|
+
// If there is pending user input we delay the save to allow inner changes from the mdc conditions to be propagated to the model
|
|
531
|
+
await new Promise(resolve => {
|
|
532
|
+
setTimeout(resolve, 200);
|
|
533
|
+
});
|
|
534
|
+
}
|
|
523
535
|
return this.getPageController()?.inlineEditFlow.inlineEditSave();
|
|
524
536
|
}
|
|
525
537
|
|
|
@@ -608,4 +620,4 @@ sap.ui.define(["sap/fe/base/HookSupport", "sap/fe/controls/inlineEdit/InlineEdit
|
|
|
608
620
|
_exports = InlineEdit;
|
|
609
621
|
return _exports;
|
|
610
622
|
}, false);
|
|
611
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZEdyb3VwSWRBY3Rpb24iLCJJbmxpbmVFZGl0IiwiX2RlYyIsImNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIiwiX2NsYXNzIiwiaW5saW5lRWRpdFN0YXRlIiwiX2lzSW5saW5lRWRpdFNvdXJjZSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsImJhc2VDbGFzcyIsImJhc2VCZWZvcmVSZW5kZXJpbmciLCJvbkJlZm9yZVJlbmRlcmluZyIsImJhc2VNZXRhZGF0YUF2YWlsYWJsZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJiYXNlRGVzdHJveSIsImRlc3Ryb3kiLCJjYWxsIiwiaW5saW5lRWRpdEVuYWJsZWQiLCJhZGRBcmlhQXR0cmlidXRlcyIsInByb3BlcnR5SW5saW5lRWRpdEVuYWJsZWQiLCJnZXRQYWdlQ29udHJvbGxlciIsImlubGluZUVkaXRGbG93IiwiaXNQcm9wZXJ0eUNvbnNpZGVyZWRGb3JJbmxpbmVFZGl0IiwiZ2V0SW5saW5lRWRpdFByb3BlcnR5TmFtZSIsInVuYmluZFByb3BlcnR5IiwiaGFzSW5saW5lRWRpdCIsInVuZGVmaW5lZCIsIl9pbmxpbmVFZGl0SW5kaWNhdG9yIiwiSW5saW5lRWRpdEluZGljYXRvciIsInZpc2libGUiLCJwcmVzc0VkaXQiLCJ0cmlnZ2VySW5saW5lRWRpdCIsImJpbmQiLCJfaW5saW5lRWRpdEZpZWxkR3JvdXBJZCIsImF0dGFjaEV2ZW50IiwiZXZlbnQiLCJjbG9zZUlubGluZUVkaXRQb3B1cE1vdXNlRXZlbnQiLCJnZXRQYXJhbWV0ZXIiLCJlZGl0QnV0dG9uIiwiYXR0YWNoQnJvd3NlckV2ZW50IiwiZ2V0RG9tUmVmIiwiY29udGFpbnMiLCJyZWxhdGVkVGFyZ2V0IiwiY2xvc2VJbmxpbmVFZGl0UG9wdXBOb0VkaXRNb2RlIiwicHJlc3NUYWJLZXkiLCJwcmVzc1NoaWZ0QW5kVGFiS2V5IiwiZ2V0Q29udGVudCIsImdldENvbnRlbnRFZGl0IiwiX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cCIsIlBvcHVwIiwiaW5saW5lRWRpdFNhdmVGdW5jdGlvbiIsInRyaWdnZXJJbmxpbmVFZGl0U2F2ZSIsImlubGluZUVkaXREaXNjYXJkRnVuY3Rpb24iLCJ0cmlnZ2VySW5saW5lRWRpdERpc2NhcmQiLCJhZGREZXBlbmRlbnQiLCJDb21tYW5kRXhlY3V0aW9uIiwiZXhlY3V0ZSIsImVuYWJsZWQiLCJjb21tYW5kIiwic2V0Rm9sbG93T2YiLCJwb3B1cEJlaGF2aW91ciIsIm9wZW5JbmxpbmVFZGl0UG9wdXAiLCJmb2N1c0V2ZW50IiwiY29udGVudERpc3BsYXkiLCJrZXlkb3duRXZlbnQiLCJfZXZlbnQiLCJmaWVsZEdyb3VwSWRzIiwiZm9yRWFjaCIsImZpZWxkR3JvdXBJZCIsImRlbGF5ZWRDYWxsVG9TYXZlIiwiaXNPcGVuIiwib3BlbklubGluZUVkaXRQb3B1cEZvckZvY3VzIiwic2V0SW5saW5lRWRpdEZvY3VzIiwib25EZXN0cm95IiwicmVtb3ZlQWxsRWRpdEJ1dHRvbkFyaWFEZXNjcmliZWRCeSIsImdldExhYmVsQ29udHJvbHMiLCJsYWJlbENvbnRyb2wiLCJhZGRFZGl0QnV0dG9uQXJpYURlc2NyaWJlZEJ5IiwiZ2V0SWRGb3JMYWJlbCIsImdldERvbVJlZk9mRmllbGQiLCJmaWVsZFdyYXBwZXIiLCJjb250ZW50RWRpdCIsImxlbmd0aCIsImlzQSIsImZpbGVVcGxvYWRlciIsImN1cnJlbnRGaWVsZCIsIm92ZXJsYXBwaW5nRWxlbWVudCIsImdldE92ZXJsYXBwaW5nRWxlbWVudCIsImNsb3NlIiwicG9wdXBJbnRlcnZhbCIsInNldEludGVydmFsIiwicG9wdXBJbnRlcnZhbGxIYW5kbGVyIiwic2V0UG9zaXRpb24iLCJEb2NrIiwiRW5kVG9wIiwiRW5kQm90dG9tIiwiX3NvdXJjZSIsImRvY3VtZW50IiwiZWxlbWVudEZyb21Qb2ludCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIngiLCJ3aWR0aCIsInkiLCJoZWlnaHQiLCJvdmVybGFwcGVkRWxlbWVudCIsIm9wZW4iLCJjbGVhckludGVydmFsIiwiZm9jdXNIYW5kbGluZ0lubGluZUVkaXQiLCJwb3RlbnRpYWxGb2N1c091dCIsImZvY3VzRm9yd2FyZCIsImZvY3VzZWRFbGVtZW50IiwiZmluZFRhYmJhYmxlIiwic2tpcENoaWxkIiwiZm9yd2FyZCIsImVsZW1lbnQiLCJmb2N1cyIsImZvY3VzTWVhc3VyZUZpZWxkIiwicm9vdEZpZWxkIiwibWVhc3VyZUZpZWxkIiwiZm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZCIsImZvY3VzYWJsZUVsZW1lbnQiLCJhY3RpdmVFbGVtZW50IiwiZ2V0U2F2ZUJ1dHRvbiIsImlubGluZUVkaXRLZXlkb3duIiwiZGlzcGxheWVkRmllbGQiLCJrZXkiLCJwcmV2ZW50RGVmYXVsdCIsInNoaWZ0S2V5IiwicHJlc3NUYWJLZXlPbkZpZWxkIiwicHJlc3NTaGlmdFRhYktleU9uRmllbGQiLCJnZXRFbGVtZW50QnlJZCIsImdldEVkaXRCdXR0b24iLCJnZXRJZCIsImdldERpc2NhcmRCdXR0b24iLCJjaGVja0Zvck1lYXN1cmVGaWVsZCIsImNoZWNrRm9yU2VtYW50aWNPYmplY3QiLCJ0b2dnbGVJbmxpbmVFZGl0RmllbGRHcm91cElkIiwiYWN0aW9uIiwic2hvdWxkQWRkIiwiQWRkIiwiU2V0IiwiZ2V0RmllbGRHcm91cElkcyIsImFkZCIsImRlbGV0ZSIsInNldEZpZWxkR3JvdXBJZHMiLCJBcnJheSIsImZyb20iLCJjaGlsZHJlbkNvbnRyb2xzIiwiY29udGVudCIsImZpbmRBZ2dyZWdhdGVkT2JqZWN0cyIsIm1hbmFnZWRPYmplY3QiLCJjb250cm9sIiwiY2hpbGRGaWVsZEdyb3VwSWRzIiwiZWRpdE1vZGUiLCJyZWFkT25seSIsImN1cnJlbnRUYXJnZXQiLCJzZXRXaWR0aCIsInRhcmdldHByb3BlcnR5IiwiZ2V0SW5saW5lRWRpdFByb3BlcnR5IiwiYW5ub3RhdGlvbnMiLCJNZWFzdXJlcyIsIkNvbW1vbiIsIlNlbWFudGljT2JqZWN0IiwiZ2V0RWRpdE1vZGUiLCJjbG9zZUlubGluZUVkaXRQb3B1cEVkaXRNb2RlIiwic2V0RWRpdE1vZGUiLCJmb2N1c0hhbmRsaW5nIiwiYmluZGluZ0NvbnRleHRQYXRoIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRDYW5vbmljYWxQYXRoIiwicHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUiLCJzdGFydElubGluZUVkaXQiLCJpbmxpbmVFZGl0RGlzY2FyZCIsImlubGluZUVkaXRTYXZlIiwiaW5saW5lRWRpdFN0YXJ0IiwiaW5saW5lRWRpdENvbnRyb2xzIiwicHJvcGVydGllc0ZvcklubGluZUVkaXQiLCJiaW5kaW5nQ29udGV4dFBhdGhGb3JJbmxpbmVFZGl0IiwiaW5jbHVkZXMiLCJ1aU1vZGVsIiwiZ2V0TW9kZWwiLCJwYXRoIiwic2V0UHJvcGVydHkiLCJpc0VkaXRhYmxlIiwiYmluZEVsZW1lbnQiLCJtb2RlbCIsInNldFRpbWVvdXQiLCJpbnZhbGlkYXRlIiwicHVzaCIsInJlc2V0SW5kaWNhdG9yUG9wdXAiLCJpbmxpbmVFZGl0RW5kIiwicmVmcmVzaERlc2NyaXB0aW9uIiwicmVmcmVzaERlc2NyaXB0aW9uSWZOZWVkZWQiLCJSZW1vdmUiLCJ1bmJpbmRFbGVtZW50IiwiZGVzY3JpcHRpb25QYXRoIiwiZ2V0QmluZGluZyIsImdldFBhdGgiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJJbmxpbmVFZGl0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlciB9IGZyb20gXCJzYXAvZmUvYmFzZS9Ib29rU3VwcG9ydFwiO1xuaW1wb3J0IElubGluZUVkaXRJbmRpY2F0b3IgZnJvbSBcInNhcC9mZS9jb250cm9scy9pbmxpbmVFZGl0L0lubGluZUVkaXRJbmRpY2F0b3JcIjtcbmltcG9ydCBDb21tYW5kRXhlY3V0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgRmllbGRXcmFwcGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpZWxkV3JhcHBlclwiO1xuaW1wb3J0IHR5cGUgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgUG9wdXAgZnJvbSBcInNhcC91aS9jb3JlL1BvcHVwXCI7XG5pbXBvcnQgZmluZFRhYmJhYmxlIGZyb20gXCJzYXAvdWkvZG9tL2ZpbmRUYWJiYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1kY0ZpZWxkIH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgRmlsZVdyYXBwZXIgZnJvbSBcIi4uL2NvbnRyb2xzL0ZpbGVXcmFwcGVyXCI7XG5cbmVudW0gRmllbGRHcm91cElkQWN0aW9uIHtcblx0QWRkID0gXCJBZGRcIixcblx0UmVtb3ZlID0gXCJSZW1vdmVcIlxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmxpbmVFZGl0IHtcblx0cHJpdmF0ZSBpbmxpbmVFZGl0U3RhdGU6IFwiRWRpdGFibGVcIiB8IFwiRGlzcGxheVwiIHwgXCJDbG9zZWRcIiB8IFwiVkhcIiA9IFwiQ2xvc2VkXCI7XG5cblx0cHJpdmF0ZSBfaW5saW5lRWRpdEluZGljYXRvcjogRW5oYW5jZVdpdGhVSTU8SW5saW5lRWRpdEluZGljYXRvcj4gfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBfaW5saW5lRWRpdEluZGljYXRvclBvcHVwOiBQb3B1cCB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIF9zb3VyY2U6IEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBfaXNJbmxpbmVFZGl0U291cmNlID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIE1peGluIHRvIGVuYWJsZSBpbmxpbmUgZWRpdCBvbiBhIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBiYXNlQ2xhc3MgVGhlIGNsYXNzLlxuXHQgKi9cblx0c2V0dXBNaXhpbihiYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Y29uc3QgYmFzZUJlZm9yZVJlbmRlcmluZyA9IGJhc2VDbGFzcy5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmc7XG5cdFx0Y29uc3QgYmFzZU1ldGFkYXRhQXZhaWxhYmxlID0gYmFzZUNsYXNzLnByb3RvdHlwZS5vbk1ldGFkYXRhQXZhaWxhYmxlO1xuXHRcdGNvbnN0IGJhc2VEZXN0cm95ID0gYmFzZUNsYXNzLnByb3RvdHlwZS5kZXN0cm95O1xuXG5cdFx0YmFzZUNsYXNzLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZyA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdGJhc2VCZWZvcmVSZW5kZXJpbmc/LmNhbGwodGhpcyk7XG5cdFx0XHRpZiAodGhpcy5pbmxpbmVFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHR0aGlzLmFkZEFyaWFBdHRyaWJ1dGVzKCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGJhc2VDbGFzcy5wcm90b3R5cGUub25NZXRhZGF0YUF2YWlsYWJsZSA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdGJhc2VNZXRhZGF0YUF2YWlsYWJsZT8uY2FsbCh0aGlzKTtcblx0XHRcdGlmICh0aGlzLmlubGluZUVkaXRFbmFibGVkKSB7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5SW5saW5lRWRpdEVuYWJsZWQgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmlzUHJvcGVydHlDb25zaWRlcmVkRm9ySW5saW5lRWRpdChcblx0XHRcdFx0XHR0aGlzLmdldElubGluZUVkaXRQcm9wZXJ0eU5hbWUoKSA/PyBcIlwiXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmICghcHJvcGVydHlJbmxpbmVFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHRcdC8vbGV0J3MgbWFrZSBzdXJlIHdlIGRvbid0IGtlZXAgYSBiaW5kaW5nIHVubmVjZXNzYXJpbHlcblx0XHRcdFx0XHR0aGlzLnVuYmluZFByb3BlcnR5KFwiaGFzSW5saW5lRWRpdFwiKTtcblx0XHRcdFx0XHR0aGlzLmhhc0lubGluZUVkaXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IgPSBuZXcgSW5saW5lRWRpdEluZGljYXRvcih7XG5cdFx0XHRcdFx0dmlzaWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRwcmVzc0VkaXQ6IHRoaXMudHJpZ2dlcklubGluZUVkaXQuYmluZCh0aGlzKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEZpZWxkR3JvdXBJZCA9IFwiSW5saW5lRWRpdFwiO1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLmF0dGFjaEV2ZW50KFwibW91c2VvdXRcIiwgKGV2ZW50OiBVSTVFdmVudDx7IHJlbGF0ZWRUYXJnZXQ6IEVsZW1lbnQgfT4pID0+IHtcblx0XHRcdFx0XHR0aGlzLmNsb3NlSW5saW5lRWRpdFBvcHVwTW91c2VFdmVudChldmVudC5nZXRQYXJhbWV0ZXIoXCJyZWxhdGVkVGFyZ2V0XCIpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuZWRpdEJ1dHRvbi5hdHRhY2hCcm93c2VyRXZlbnQoXCJibHVyXCIsIChldmVudDogRm9jdXNFdmVudCkgPT4ge1xuXHRcdFx0XHRcdC8vIGlmIGZvY3VzIGlzIHN0aWxsIG9uIGlubGluZSBlZGl0YWJsZSBmaWVsZCB0aGUgcG9wdXAgc2hvdWxkIG5vdCBiZSBjbG9zZWRcblx0XHRcdFx0XHRpZiAoIXRoaXMuZ2V0RG9tUmVmKCk/LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsb3NlSW5saW5lRWRpdFBvcHVwTm9FZGl0TW9kZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuYXR0YWNoRXZlbnQoXCJwcmVzc1RhYlwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wcmVzc1RhYktleSgpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLmF0dGFjaEV2ZW50KFwicHJlc3NTaGlmdFRhYlwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wcmVzc1NoaWZ0QW5kVGFiS2V5KHRoaXMuZ2V0Q29udGVudCgpLmdldENvbnRlbnRFZGl0KClbMF0pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXAgPSBuZXcgUG9wdXAodGhpcy5faW5saW5lRWRpdEluZGljYXRvciwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdGNvbnN0IGlubGluZUVkaXRTYXZlRnVuY3Rpb24gPSB0aGlzLnRyaWdnZXJJbmxpbmVFZGl0U2F2ZS5iaW5kKHRoaXMpO1xuXHRcdFx0XHRjb25zdCBpbmxpbmVFZGl0RGlzY2FyZEZ1bmN0aW9uID0gdGhpcy50cmlnZ2VySW5saW5lRWRpdERpc2NhcmQuYmluZCh0aGlzKTtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvci5hZGREZXBlbmRlbnQoXG5cdFx0XHRcdFx0bmV3IENvbW1hbmRFeGVjdXRpb24oe1xuXHRcdFx0XHRcdFx0ZXhlY3V0ZTogaW5saW5lRWRpdFNhdmVGdW5jdGlvbixcblx0XHRcdFx0XHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0Y29tbWFuZDogXCJTYXZlXCJcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLmFkZERlcGVuZGVudChcblx0XHRcdFx0XHRuZXcgQ29tbWFuZEV4ZWN1dGlvbih7XG5cdFx0XHRcdFx0XHRleGVjdXRlOiBpbmxpbmVFZGl0RGlzY2FyZEZ1bmN0aW9uLFxuXHRcdFx0XHRcdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdHZpc2libGU6IHRydWUsXG5cdFx0XHRcdFx0XHRjb21tYW5kOiBcIkNhbmNlbFwiXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdFx0Ly8gZnVuY3Rpb24gdG8gY2hlY2sgZm9sbG93aW5nIGJlaGF2aW91ciBvZiBwb3B1cFxuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXAuc2V0Rm9sbG93T2YoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucG9wdXBCZWhhdmlvdXIoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuYXR0YWNoQnJvd3NlckV2ZW50KFwiZGJsY2xpY2tcIiwgdGhpcy50cmlnZ2VySW5saW5lRWRpdC5iaW5kKHRoaXMpKTtcblx0XHRcdFx0dGhpcy5hdHRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZW92ZXJcIiwgdGhpcy5vcGVuSW5saW5lRWRpdFBvcHVwLmJpbmQodGhpcykpO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcIm1vdXNlb3V0XCIsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuY2xvc2VJbmxpbmVFZGl0UG9wdXBNb3VzZUV2ZW50KGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgRWxlbWVudCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcImZvY3VzXCIsIChldmVudDogRm9jdXNFdmVudCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZm9jdXNFdmVudChldmVudCwgdGhpcy5nZXRDb250ZW50KCkuY29udGVudERpc3BsYXk/LmdldERvbVJlZigpKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5hdHRhY2hCcm93c2VyRXZlbnQoXCJrZXlkb3duXCIsIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMua2V5ZG93bkV2ZW50KGV2ZW50LCB0aGlzLmdldENvbnRlbnQoKS5jb250ZW50RGlzcGxheT8uZ2V0RG9tUmVmKCkpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLmF0dGFjaEV2ZW50KFwidmFsaWRhdGVGaWVsZEdyb3VwXCIsIChfZXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpID0+IHtcblx0XHRcdFx0XHRjb25zdCBmaWVsZEdyb3VwSWRzID0gX2V2ZW50LmdldFBhcmFtZXRlcihcImZpZWxkR3JvdXBJZHNcIik7XG5cdFx0XHRcdFx0ZmllbGRHcm91cElkcz8uZm9yRWFjaCgoZmllbGRHcm91cElkKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoZmllbGRHcm91cElkID09PSBcIklubGluZUVkaXRcIikge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmRlbGF5ZWRDYWxsVG9TYXZlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcImZvY3VzaW5cIiwgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0Ly8gb25seSBnb2VzIGludG8gY29uZGl0aW9uIGZvciBjdXJyZW50bHkgZWRpdGFibGUgZmllbGRzLCBlLmcuIGNvbm5lY3RlZCBmaWVsZHNcblx0XHRcdFx0XHRpZiAodGhpcy5pbmxpbmVFZGl0U3RhdGUgPT09IFwiRWRpdGFibGVcIiAmJiAhdGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwLmlzT3BlbigpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9wZW5JbmxpbmVFZGl0UG9wdXBGb3JGb2N1cyhldmVudCk7XG5cdFx0XHRcdFx0XHR0aGlzLnNldElubGluZUVkaXRGb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGJhc2VDbGFzcy5wcm90b3R5cGUub25EZXN0cm95ID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZGVzdHJveSgpO1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5kZXN0cm95KCk7XG5cdFx0XHRiYXNlRGVzdHJveT8uY2FsbCh0aGlzKTtcblx0XHR9O1xuXHR9XG5cblx0Lypcblx0ICogQWRkcyBhcmlhIGF0dHJpYnV0ZXMgdG8gdGhlIGlubGluZSBlZGl0IGluZGljYXRvci5cblx0ICogQHBhcmFtIHRoaXMgVGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzLlxuXHQgKi9cblx0YWRkQXJpYUF0dHJpYnV0ZXModGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yKSB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLnJlbW92ZUFsbEVkaXRCdXR0b25BcmlhRGVzY3JpYmVkQnkoKTtcblx0XHRcdC8vIGFkZCB0aGUgbGFiZWwgY29udHJvbHMgb2YgdGhlIGZpZWxkXG5cdFx0XHR0aGlzLmdldExhYmVsQ29udHJvbHMoKS5mb3JFYWNoKChsYWJlbENvbnRyb2w6IExhYmVsKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmFkZEVkaXRCdXR0b25BcmlhRGVzY3JpYmVkQnkobGFiZWxDb250cm9sKTtcblx0XHRcdH0pO1xuXHRcdFx0Ly8gYWRkIHRoZSBmaWVsZCBpdHNlbGZcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuYWRkRWRpdEJ1dHRvbkFyaWFEZXNjcmliZWRCeSh0aGlzLmdldElkRm9yTGFiZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgRE9NIHJlZmVyZW5jZSBvZiB0aGUgZmllbGQgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmxpbmUgZWRpdC5cblx0ICogQHJldHVybnMgVGhlIERPTSByZWZlcmVuY2Ugb2YgdGhlIGZpZWxkIG9yIG51bGwgaWYgbm90IGZvdW5kLlxuXHQgKi9cblx0Z2V0RG9tUmVmT2ZGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogRWxlbWVudCB8IG51bGwge1xuXHRcdGNvbnN0IGZpZWxkV3JhcHBlciA9IHRoaXMuZ2V0Q29udGVudCgpIGFzIEZpZWxkV3JhcHBlcjtcblx0XHRpZiAoZmllbGRXcmFwcGVyPy5jb250ZW50RWRpdD8ubGVuZ3RoID4gMCAmJiBmaWVsZFdyYXBwZXI/LmNvbnRlbnRFZGl0WzBdPy5nZXREb21SZWYoKSkge1xuXHRcdFx0cmV0dXJuIGZpZWxkV3JhcHBlci5jb250ZW50RWRpdFswXS5nZXREb21SZWYoKTtcblx0XHR9IGVsc2UgaWYgKGZpZWxkV3JhcHBlcj8uY29udGVudERpc3BsYXkgJiYgZmllbGRXcmFwcGVyLmNvbnRlbnREaXNwbGF5LmdldERvbVJlZigpKSB7XG5cdFx0XHRyZXR1cm4gZmllbGRXcmFwcGVyLmNvbnRlbnREaXNwbGF5LmdldERvbVJlZigpO1xuXHRcdH0gZWxzZSBpZiAoZmllbGRXcmFwcGVyPy5pc0EoXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkZpbGVXcmFwcGVyXCIpKSB7XG5cdFx0XHRyZXR1cm4gKGZpZWxkV3JhcHBlciBhcyBGaWxlV3JhcHBlcikuZmlsZVVwbG9hZGVyLmdldERvbVJlZigpO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSBiZWhhdmlvciBvZiB0aGUgaW5saW5lIGVkaXQgcG9wdXAgcmVsYXRpdmUgdG8gaXRzIGFzc29jaWF0ZWQgZmllbGQuXG5cdCAqL1xuXHRwb3B1cEJlaGF2aW91cih0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0Y29uc3QgY3VycmVudEZpZWxkID0gdGhpcy5nZXREb21SZWZPZkZpZWxkKCk7XG5cdFx0aWYgKGN1cnJlbnRGaWVsZCkge1xuXHRcdFx0Ly8gY2hlY2sgaWYgZWxlbWVudCBpcyBvYnNjdXJlZCBieSBvdGhlciBzZWN0aW9uL2VsZW1lbnRcblx0XHRcdGNvbnN0IG92ZXJsYXBwaW5nRWxlbWVudCA9IHRoaXMuZ2V0T3ZlcmxhcHBpbmdFbGVtZW50KGN1cnJlbnRGaWVsZCk7XG5cdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBpcyBvYnNjdXJlZCBieSBhbm90aGVyIGVsZW1lbnQvc2VjdGlvbiwgY2xvc2UgaXQgYW5kIHNldCB1cCBhbiBpbnRlcnZhbCB0byBjaGVjayBldmVyeSAyMDAgbXMgaWYgaXQgcmVtYWlucyBvYnNjdXJlZFxuXHRcdFx0aWYgKG92ZXJsYXBwaW5nRWxlbWVudCAhPT0gY3VycmVudEZpZWxkICYmICFjdXJyZW50RmllbGQuY29udGFpbnMob3ZlcmxhcHBpbmdFbGVtZW50KSkge1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/LmNsb3NlKCk7XG5cdFx0XHRcdC8vIG9ubHkgaWYgaXQgaXMgZWRpdGFibGUsIHdlIHNldCB1cCB0aGUgaW50ZXJ2YWwsIG90aGVyd2lzZSB3ZSBjbG9zZSB0aGUgcG9wdXAgaWYgaXQgaXMgb2JzY3VyZWQgYnkgYW5vdGhlciBlbGVtZW50XG5cdFx0XHRcdGlmICh0aGlzLmlubGluZUVkaXRTdGF0ZSA9PT0gXCJFZGl0YWJsZVwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgcG9wdXBJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucG9wdXBJbnRlcnZhbGxIYW5kbGVyKGN1cnJlbnRGaWVsZCwgcG9wdXBJbnRlcnZhbCk7XG5cdFx0XHRcdFx0fSwgMjAwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBpcyBub3QgYmxvY2tlZCBieSBhbm90aGVyIHNlY3Rpb24vZWxlbWVudCwgdXBkYXRlIGl0cyBwb3NpdGlvbiB0byBhbGlnbiB3aXRoIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBJbmxpbmUgRWRpdFxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5zZXRQb3NpdGlvbihQb3B1cC5Eb2NrLkVuZFRvcCwgUG9wdXAuRG9jay5FbmRCb3R0b20sIHRoaXMuX3NvdXJjZSwgXCIwIC00XCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZWxlbWVudCBsb2NhdGVkIGF0IHRoZSBsb3dlc3QgdmVydGljYWwgcG9pbnQgb2YgdGhlIGN1cnJlbnRGaWVsZC5cblx0ICogSWYgdGhlIGN1cnJlbnRGaWVsZCBpcyBvdmVybGFwcGVkLCBpdCByZXR1cm5zIHRoZSBvdmVybGFwcGluZyBlbGVtZW50IGluc3RlYWQuXG5cdCAqIEBwYXJhbSBjdXJyZW50RmllbGQgVGhlIGZpZWxkIHdoZXJlIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBpcyBvcGVuZWQuXG5cdCAqIEByZXR1cm5zIFRoZSBlbGVtZW50IGRldGVybWluZWQgdG8gYmUgYXQgdGhlIGxvd2VzdCB2ZXJ0aWNhbCBwb2ludCBvZiB0aGUgY3VycmVudCBmaWVsZC5cblx0ICovXG5cdGdldE92ZXJsYXBwaW5nRWxlbWVudChjdXJyZW50RmllbGQ6IEVsZW1lbnQpOiBFbGVtZW50IHwgbnVsbCB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoXG5cdFx0XHRjdXJyZW50RmllbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueCArIGN1cnJlbnRGaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAvIDIsXG5cdFx0XHQvLyBXZSB0YWtlIGEgcG9pbnQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgZmllbGQgYW5kIDIvMyBvZiB0aGUgaGVpZ2h0IHRvIHJldHJpZXZlIHRoZSBvdmVybGFwcGluZ0VsZW1lbnRcblx0XHRcdGN1cnJlbnRGaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS55ICsgMC42NiAqIGN1cnJlbnRGaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHRcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEludGVydmFsIGhhbmRsZXIgZm9yIG1hbmFnaW5nIHRoZSBpbnRlcnZhbCB3aGVuIHRoZSBwb3B1cCBpcyBvdmVybGFwcGVkIGJ5IGFuIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBjdXJyZW50RmllbGQgVGhlIGZpZWxkIHdoZXJlIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBpcyBvcGVuZWQuXG5cdCAqIEBwYXJhbSBwb3B1cEludGVydmFsIFRoZSBpbnRlcnZhbCBjb25zdGFudC5cblx0ICovXG5cdHBvcHVwSW50ZXJ2YWxsSGFuZGxlcih0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBjdXJyZW50RmllbGQ6IEVsZW1lbnQsIHBvcHVwSW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgaWYgZWxlbWVudCBpcyBzdGlsbCBvYnNjdXJlZCBieSBvdGhlciBzZWN0aW9uL2VsZW1lbnRcblx0XHRjb25zdCBvdmVybGFwcGVkRWxlbWVudCA9IHRoaXMuZ2V0T3ZlcmxhcHBpbmdFbGVtZW50KGN1cnJlbnRGaWVsZCk7XG5cdFx0aWYgKG92ZXJsYXBwZWRFbGVtZW50ID09PSBjdXJyZW50RmllbGQgfHwgY3VycmVudEZpZWxkLmNvbnRhaW5zKG92ZXJsYXBwZWRFbGVtZW50KSkge1xuXHRcdFx0Ly8gSWYgZWxlbWVudCBpcyB2aXNpYmxlIGFnYWluLCBvcGVuIFBvcHVwXG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/Lm9wZW4oMCwgUG9wdXAuRG9jay5FbmRUb3AsIFBvcHVwLkRvY2suRW5kQm90dG9tLCB0aGlzKTtcblx0XHRcdGNsZWFySW50ZXJ2YWwocG9wdXBJbnRlcnZhbCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZvY3VzIGhhbmRsZXIgZm9yIGlubGluZSBlZGl0LlxuXHQgKiBAcGFyYW0gcG90ZW50aWFsRm9jdXNPdXQgUG90ZW50aWFsIGZvY3VzIG91dC4gQXBwbGllcyBmb3IgU2hpZnQgKyBUYWIgb24gZmllbGQgYW5kIFRhYiBvbiBkaXNjYXJkIGJ1dHRvbi5cblx0ICogQHBhcmFtIGZvY3VzRm9yd2FyZCBJZiBmb2N1cyBzaG91bGQgYmUgc2V0IGZvcndhcmQgb3IgYmFja3dhcmQuXG5cdCAqL1xuXHRmb2N1c0hhbmRsaW5nSW5saW5lRWRpdCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBwb3RlbnRpYWxGb2N1c091dDogYm9vbGVhbiwgZm9jdXNGb3J3YXJkPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGZvY3VzZWRFbGVtZW50ID0gZmluZFRhYmJhYmxlKHRoaXMuZ2V0RG9tUmVmKCksIHtcblx0XHRcdHNraXBDaGlsZDogdHJ1ZSxcblx0XHRcdGZvcndhcmQ6IGZvY3VzRm9yd2FyZFxuXHRcdH0pO1xuXHRcdGZvY3VzZWRFbGVtZW50Py5lbGVtZW50LmZvY3VzKCk7XG5cdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5jbG9zZSgpO1xuXHRcdGlmIChwb3RlbnRpYWxGb2N1c091dCkge1xuXHRcdFx0Ly8gb25seSBjbG9zZXMgdGhlIGlubGluZSBlZGl0IGNvbXBsZXRlbHkgaWYgdGhlIGZvY3VzIGlzIG5vdCBvbiB0aGUgc2FtZSBpbmxpbmUgZWRpdCBhbnltb3JlXG5cdFx0XHQvLyBjb25uZWN0ZWQgZmllbGRzIHdvbid0IGJlIGNsb3NlZCBpZiBzd2l0Y2hpbmcgZm9jdXMgYmV0d2VlbiB0aGVtXG5cdFx0XHRpZiAodGhpcy5faXNJbmxpbmVFZGl0U291cmNlKSB7XG5cdFx0XHRcdHRoaXMudHJpZ2dlcklubGluZUVkaXRTYXZlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGZvY3VzIG9uIHRoZSBtZWFzdXJlIGZpZWxkIG9mIGEgZmllbGQuXG5cdCAqL1xuXHRmb2N1c01lYXN1cmVGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0Y29uc3Qgcm9vdEZpZWxkID0gZmluZFRhYmJhYmxlKHRoaXMuZ2V0RG9tUmVmKCksIHtcblx0XHRcdHNraXBDaGlsZDogZmFsc2UsXG5cdFx0XHRmb3J3YXJkOiB0cnVlXG5cdFx0fSk7XG5cdFx0Y29uc3QgbWVhc3VyZUZpZWxkID0gZmluZFRhYmJhYmxlKHJvb3RGaWVsZC5lbGVtZW50LCB7XG5cdFx0XHRza2lwQ2hpbGQ6IHRydWUsXG5cdFx0XHRmb3J3YXJkOiB0cnVlXG5cdFx0fSk7XG5cdFx0bWVhc3VyZUZpZWxkPy5lbGVtZW50Py5mb2N1cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEltcGxlbWVudCBmb2N1cyBoYW5kbGluZyBmb3IgZmllbGRzIHdpdGggbWVhc3VyZSBmaWVsZHMgd2hlbiBuYXZpZ2F0aW5nIHZpYSB0YWIgb3Igc2hpZnQtdGFiIHdpdGhpbiBhbiBpbmxpbmUgZWRpdGFibGUgZmllbGQuXG5cdCAqIEBwYXJhbSBmb2N1c0ZvcndhcmQgSWYgZm9jdXMgc2hvdWxkIGJlIHNldCBmb3J3YXJkIG9yIGJhY2t3YXJkLlxuXHQgKi9cblx0Zm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBmb2N1c0ZvcndhcmQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBmb2N1c2FibGVFbGVtZW50ID0gZmluZFRhYmJhYmxlKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsIHtcblx0XHRcdHNraXBDaGlsZDogdHJ1ZSxcblx0XHRcdGZvcndhcmQ6IGZvY3VzRm9yd2FyZFxuXHRcdH0pO1xuXHRcdC8vIENoZWNrIGlmIHRoZSBuZXh0L3ByZXZpb3VzIGZvY3VzYWJsZSBlbGVtZW50IGlzIHdpdGhpbiB0aGUgaW5saW5lIGVkaXQgcG9wdXBcblx0XHRpZiAodGhpcy5nZXREb21SZWYoKT8uY29udGFpbnMoZm9jdXNhYmxlRWxlbWVudC5lbGVtZW50KSkge1xuXHRcdFx0Ly8gSWYgaXQgaXMsIGZvY3VzIG9uIHRoZSBuZXh0L3ByZXZpb3VzIGZvY3VzYWJsZSBlbGVtZW50XG5cdFx0XHRmb2N1c2FibGVFbGVtZW50LmVsZW1lbnQ/LmZvY3VzKCk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgbmV4dCBlbGVtZW50IGlzIG91dHNpZGUgb2YgY3VycmVudCBpbmxpbmUgZWRpdGFibGUgZmllbGQgYW5kIGZvY3VzIGlzIHNldCBmb3J3YXJkLCBmb2N1cyBvbiB0aGUgc2F2ZSBidXR0b25cblx0XHRlbHNlIGlmIChmb2N1c0ZvcndhcmQpIHtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldFNhdmVCdXR0b24oKS5mb2N1cygpO1xuXHRcdH1cblx0XHQvLyBJZiBmb2N1cyBpcyBzZXQgYmFja3dhcmQsIGZvY3VzIG9uIHRoZSBwcmV2aW91cyBmb2N1c2FibGUgZWxlbWVudFxuXHRcdGVsc2Uge1xuXHRcdFx0Zm9jdXNhYmxlRWxlbWVudC5lbGVtZW50Py5mb2N1cygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBQcm9jZXNzZXMga2V5ZG93biBldmVudHMgZm9yIHRoZSBpbmxpbmUgZWRpdCBjb21wb25lbnQsIGhhbmRsaW5nIHZhcmlvdXMgc2NlbmFyaW9zLCBsaWtlIFRhYiBvciBFc2NhcGUuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUga2V5ZG93biBldmVudCB0cmlnZ2VyZWQgd2l0aGluIHRoZSBpbmxpbmUgZWRpdC5cblx0ICogQHBhcmFtIGRpc3BsYXllZEZpZWxkIERvbVJlZiBvZiBjb250ZW50RGlzcGxheSBvZiB0aGUgZmllbGQuXG5cdCAqL1xuXHRpbmxpbmVFZGl0S2V5ZG93bih0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogS2V5Ym9hcmRFdmVudCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMudHJpZ2dlcklubGluZUVkaXREaXNjYXJkKCk7XG5cdFx0fSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiVGFiXCIgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy5wcmVzc1RhYktleU9uRmllbGQoZGlzcGxheWVkRmllbGQsIGV2ZW50KTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJUYWJcIiAmJiBldmVudC5zaGlmdEtleSkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMucHJlc3NTaGlmdFRhYktleU9uRmllbGQoZGlzcGxheWVkRmllbGQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBUYWIga2V5IHByZXNzIGV2ZW50IHdoZW4gZm9jdXMgaXMgb24gdGhlIGVkaXQsIHNhdmUsIG9yIGRpc2NhcmQgYnV0dG9ucy5cblx0ICovXG5cdHByZXNzVGFiS2V5KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5faW5saW5lRWRpdEluZGljYXRvcikge1xuXHRcdFx0c3dpdGNoIChkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG5cdFx0XHRcdGNhc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RWRpdEJ1dHRvbigpLmdldElkKCkpOlxuXHRcdFx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0lubGluZUVkaXQoZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldFNhdmVCdXR0b24oKS5nZXRJZCgpKTpcblx0XHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXREaXNjYXJkQnV0dG9uKCkuZm9jdXMoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXREaXNjYXJkQnV0dG9uKCkuZ2V0SWQoKSk6XG5cdFx0XHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nSW5saW5lRWRpdCh0cnVlLCB0cnVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgVGFiIGtleSBwcmVzcyBldmVudCB3aGVuIGZvY3VzIGlzIG9uIHRoZSBlZGl0LCBzYXZlLCBvciBkaXNjYXJkIGJ1dHRvbnMuXG5cdCAqIEBwYXJhbSByb290RmllbGQgVGhlIGVsZW1lbnQgd2l0aCBpbmxpbmUgZWRpdGluZyBlbmFibGVkLlxuXHQgKi9cblx0cHJlc3NTaGlmdEFuZFRhYktleSh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCByb290RmllbGQ6IFVJNUVsZW1lbnQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5faW5saW5lRWRpdEluZGljYXRvcikge1xuXHRcdFx0c3dpdGNoIChkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG5cdFx0XHRcdGNhc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RWRpdEJ1dHRvbigpLmdldElkKCkpOlxuXHRcdFx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0lubGluZUVkaXQoZmFsc2UsIGZhbHNlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRTYXZlQnV0dG9uKCkuZ2V0SWQoKSk6XG5cdFx0XHRcdFx0aWYgKHRoaXMuY2hlY2tGb3JNZWFzdXJlRmllbGQoKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5mb2N1c01lYXN1cmVGaWVsZCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyb290RmllbGQuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RGlzY2FyZEJ1dHRvbigpLmdldElkKCkpOlxuXHRcdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldFNhdmVCdXR0b24oKS5mb2N1cygpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGb2N1cyBoYW5kbGVyIGZvciB0aGUgVGFiIGtleSBvbiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRGaWVsZCBEb21SZWYgb2YgY29udGVudERpc3BsYXkgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcGFyYW0gZXZlbnQgQ3VycmVudCBrZXlib2FyZCBldmVudC5cblx0ICovXG5cdHByZXNzVGFiS2V5T25GaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBkaXNwbGF5ZWRGaWVsZDogSFRNTEVsZW1lbnQsIGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgdGhhdCB0aGUgZm9jdXMgb2YgdGhlIGZpZWxkIGlzIG9uIHRoZSBjb250ZW50RGlzcGxheVxuXHRcdGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkaXNwbGF5ZWRGaWVsZCkge1xuXHRcdFx0dGhpcy5vcGVuSW5saW5lRWRpdFBvcHVwKGV2ZW50KTtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldEVkaXRCdXR0b24oKS5mb2N1cygpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuY2hlY2tGb3JNZWFzdXJlRmllbGQoKSkge1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0U2F2ZUJ1dHRvbigpLmZvY3VzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZCh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRm9jdXMgaGFuZGxlciBmb3IgdGhlIFRhYiArIFNoaWZ0IGtleSBvbiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRGaWVsZCBEb21SZWYgb2YgY29udGVudERpc3BsYXkgb2YgdGhlIGZpZWxkLlxuXHQgKi9cblx0cHJlc3NTaGlmdFRhYktleU9uRmllbGQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgdGhhdCB0aGUgZm9jdXMgb2YgdGhlIGZpZWxkIGlzIG9uIHRoZSBjb250ZW50RGlzcGxheVxuXHRcdGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkaXNwbGF5ZWRGaWVsZCkge1xuXHRcdFx0Ly8gZm9jdXMgdG8gdGhlIHByZXZpb3VzIGludGVyYWN0aXZlIGVsZW1lbnRcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0lubGluZUVkaXQodHJ1ZSwgZmFsc2UpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuY2hlY2tGb3JNZWFzdXJlRmllbGQoKSkge1xuXHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nSW5saW5lRWRpdCh0cnVlLCBmYWxzZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZChmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIGZvY3VzIGV2ZW50IGZvciB0aGUgaW5saW5lIGVkaXQgZmllbGQuXG5cdCAqIEBwYXJhbSBldmVudCBGb2N1cyBldmVudCBmb3IgdGhlIGZpZWxkXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRGaWVsZCBEb21SZWYgb2YgY29udGVudERpc3BsYXkgb2YgdGhlIGZpZWxkLlxuXHQgKi9cblx0Zm9jdXNFdmVudCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogRm9jdXNFdmVudCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaGFzSW5saW5lRWRpdCkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGlmICh0aGlzLmNoZWNrRm9yU2VtYW50aWNPYmplY3QoKSkge1xuXHRcdFx0XHQvLyBpZiB0aGUgZmllbGQgaGFzIGEgU2VtYW50aWMgT2JqZWN0LCB3ZSBkb24ndCB3YW50IHRvIGZvY3VzIG9uIHRoZSBlZGl0IGJ1dHRvbiBvZiB0aGUgZmllbGRcblx0XHRcdFx0Ly8gYnV0IG9udG8gdGhlIGNvbnRlbnREaXNwbGF5XG5cdFx0XHRcdGRpc3BsYXllZEZpZWxkLmZvY3VzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLm9wZW5JbmxpbmVFZGl0UG9wdXAoZXZlbnQpO1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRFZGl0QnV0dG9uKCkuZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUga2V5ZG93biBldmVudCBmb3IgdGhlIGlubGluZSBlZGl0IGZpZWxkLlxuXHQgKiBAcGFyYW0gZXZlbnQgS2V5Ym9hcmQgZXZlbnQgZm9yIHRoZSBmaWVsZFxuXHQgKiBAcGFyYW0gZGlzcGxheWVkRmllbGQgRG9tUmVmIG9mIGNvbnRlbnREaXNwbGF5IG9mIHRoZSBmaWVsZC5cblx0ICovXG5cdGtleWRvd25FdmVudCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogS2V5Ym9hcmRFdmVudCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuaW5saW5lRWRpdFN0YXRlID09PSBcIkVkaXRhYmxlXCIgfHwgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGRpc3BsYXllZEZpZWxkICYmIHRoaXMuY2hlY2tGb3JTZW1hbnRpY09iamVjdCgpKSkgJiZcblx0XHRcdHRoaXMuaGFzSW5saW5lRWRpdFxuXHRcdCkge1xuXHRcdFx0dGhpcy5pbmxpbmVFZGl0S2V5ZG93bihldmVudCwgZGlzcGxheWVkRmllbGQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBmaWVsZCBncm91cCBpZHMgb2YgdGhlIGNvbnRyb2wgdG8gaW5jbHVkZSBvciByZW1vdmUgdGhlIGlubGluZSBlZGl0IGZpZWxkIGdyb3VwIGlkLlxuXHQgKiBAcGFyYW0gYWN0aW9uIEFkZCBvciBSZW1vdmUgdGhlIGlkXG5cdCAqL1xuXHR0b2dnbGVJbmxpbmVFZGl0RmllbGRHcm91cElkKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQsIGFjdGlvbjogRmllbGRHcm91cElkQWN0aW9uKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2hvdWxkQWRkID0gYWN0aW9uID09PSBGaWVsZEdyb3VwSWRBY3Rpb24uQWRkO1xuXHRcdGNvbnN0IGZpZWxkR3JvdXBJZHMgPSBuZXcgU2V0KHRoaXMuZ2V0RmllbGRHcm91cElkcygpKTtcblxuXHRcdGlmIChzaG91bGRBZGQpIHtcblx0XHRcdGZpZWxkR3JvdXBJZHMuYWRkKFwiSW5saW5lRWRpdFwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmllbGRHcm91cElkcy5kZWxldGUoXCJJbmxpbmVFZGl0XCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0RmllbGRHcm91cElkcyhBcnJheS5mcm9tKGZpZWxkR3JvdXBJZHMpKTtcblxuXHRcdGNvbnN0IGNoaWxkcmVuQ29udHJvbHMgPVxuXHRcdFx0KHRoaXMuY29udGVudD8uZmluZEFnZ3JlZ2F0ZWRPYmplY3RzKHRydWUsIChtYW5hZ2VkT2JqZWN0OiBNYW5hZ2VkT2JqZWN0KSA9PlxuXHRcdFx0XHRtYW5hZ2VkT2JqZWN0LmlzQTxDb250cm9sPihcInNhcC51aS5jb3JlLkNvbnRyb2xcIilcblx0XHRcdCkgYXMgQ29udHJvbFtdIHwgdW5kZWZpbmVkKSA/PyBbXTtcblxuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiBjaGlsZHJlbkNvbnRyb2xzKSB7XG5cdFx0XHRjb25zdCBjaGlsZEZpZWxkR3JvdXBJZHMgPSBuZXcgU2V0KGNvbnRyb2wuZ2V0RmllbGRHcm91cElkcygpKTtcblxuXHRcdFx0aWYgKHNob3VsZEFkZCkge1xuXHRcdFx0XHRjaGlsZEZpZWxkR3JvdXBJZHMuYWRkKFwiSW5saW5lRWRpdFwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNoaWxkRmllbGRHcm91cElkcy5kZWxldGUoXCJJbmxpbmVFZGl0XCIpO1xuXHRcdFx0fVxuXHRcdFx0Y29udHJvbC5zZXRGaWVsZEdyb3VwSWRzKEFycmF5LmZyb20oY2hpbGRGaWVsZEdyb3VwSWRzKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE9wZW5zIHRoZSBpbmxpbmUgZWRpdCBwb3B1cC5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudC5cblx0ICovXG5cdG9wZW5JbmxpbmVFZGl0UG9wdXAodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaGFzSW5saW5lRWRpdCAmJiB0aGlzLmlubGluZUVkaXRTdGF0ZSAhPT0gXCJFZGl0YWJsZVwiICYmIHRoaXMuZWRpdE1vZGUgPT09IFwiRGlzcGxheVwiICYmICF0aGlzLnJlYWRPbmx5KSB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/Lm9wZW4oMCwgUG9wdXAuRG9jay5FbmRUb3AsIFBvcHVwLkRvY2suRW5kQm90dG9tLCBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEVsZW1lbnQpO1xuXHRcdFx0dGhpcy5fc291cmNlID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBFbGVtZW50O1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uc2V0V2lkdGgoKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgRWxlbWVudCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBmb3IgbW91c2UgZXZlbnRzLlxuXHQgKiBAcGFyYW0gcmVsYXRlZFRhcmdldCBUaGUgcmVsYXRlZCB0YXJnZXQuXG5cdCAqL1xuXHRjbG9zZUlubGluZUVkaXRQb3B1cE1vdXNlRXZlbnQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgcmVsYXRlZFRhcmdldDogRWxlbWVudCk6IHZvaWQge1xuXHRcdGlmIChcblx0XHRcdHJlbGF0ZWRUYXJnZXQgJiZcblx0XHRcdCF0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXREb21SZWYoKT8uY29udGFpbnMocmVsYXRlZFRhcmdldCkgJiZcblx0XHRcdCF0aGlzLmdldERvbVJlZigpPy5jb250YWlucyhyZWxhdGVkVGFyZ2V0KVxuXHRcdCkge1xuXHRcdFx0dGhpcy5jbG9zZUlubGluZUVkaXRQb3B1cE5vRWRpdE1vZGUoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBmaWVsZCBoYXMgYSBtZWFzdXJlIGZpZWxkLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBmaWVsZCBoYXMgYSBtZWFzdXJlIGZpZWxkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRjaGVja0Zvck1lYXN1cmVGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdGFyZ2V0cHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkID0gdGhpcy5nZXRJbmxpbmVFZGl0UHJvcGVydHkoKTtcblx0XHRyZXR1cm4gISF0YXJnZXRwcm9wZXJ0eT8uYW5ub3RhdGlvbnMuTWVhc3VyZXM7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBmaWVsZCBoYXMgYSBTZW1hbnRpYyBPYmplY3QgaWYgY2xpY2tpbmcgb24gaXQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGZpZWxkIGhhcyBhIFNlbWFudGljT2JqZWN0LCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRjaGVja0ZvclNlbWFudGljT2JqZWN0KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiBib29sZWFuIHtcblx0XHRjb25zdCB0YXJnZXRwcm9wZXJ0eTogUHJvcGVydHkgfCB1bmRlZmluZWQgPSB0aGlzLmdldElubGluZUVkaXRQcm9wZXJ0eSgpO1xuXHRcdHJldHVybiAhIXRhcmdldHByb3BlcnR5Py5hbm5vdGF0aW9ucy5Db21tb24/LlNlbWFudGljT2JqZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgaW5saW5lIGVkaXQgcG9wdXAgZm9yIGZpZWxkcyB0aGF0IGFyZSBub3QgaW4gZWRpdCBtb2RlLlxuXHQgKi9cblx0Y2xvc2VJbmxpbmVFZGl0UG9wdXBOb0VkaXRNb2RlKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldEVkaXRNb2RlKCkpIHtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cD8uY2xvc2UoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBmb3IgZmllbGRzIGluIGVkaXQgbW9kZS5cblx0ICovXG5cdGNsb3NlSW5saW5lRWRpdFBvcHVwRWRpdE1vZGUodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRFZGl0TW9kZSgpKSB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/LmNsb3NlKCk7XG5cdFx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGlubGluZSBlZGl0IHBvcHVwIGZvciBmb2N1cyBoYW5kbGluZy5cblx0ICogQHBhcmFtIGV2ZW50IEZvY3VzaW4gZXZlbnQgZm9yIHRoZSBmaWVsZC5cblx0ICovXG5cdG9wZW5JbmxpbmVFZGl0UG9wdXBGb3JGb2N1cyh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogRXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5zZXRFZGl0TW9kZSh0cnVlKTtcblx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/Lm9wZW4oXG5cdFx0XHQwLFxuXHRcdFx0UG9wdXAuRG9jay5FbmRUb3AsXG5cdFx0XHRQb3B1cC5Eb2NrLkVuZEJvdHRvbSxcblx0XHRcdChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEVsZW1lbnQpIHx8IHRoaXMuX3NvdXJjZSxcblx0XHRcdFwiMCAtNFwiXG5cdFx0KTtcblx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZvY3VzIGhhbmRsaW5nIGZvciBjb25uZWN0ZWQgZmllbGRzLlxuXHQgKi9cblx0c2V0SW5saW5lRWRpdEZvY3VzKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmZvY3VzSGFuZGxpbmcodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIGlubGluZSBlZGl0IGFuZCBjYWxscyB0aGUgdG9nZ2xlQ29udHJvbExvY2FsRWRpdCBtZXRob2QgdG8gc2V0IHRoZSBjb250cm9sIHRvIGVkaXQgbW9kZS5cblx0ICovXG5cdHRyaWdnZXJJbmxpbmVFZGl0KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuaW5saW5lRWRpdEVuYWJsZWQgfHwgdGhpcy5lZGl0TW9kZSAhPT0gXCJEaXNwbGF5XCIgfHwgdGhpcy5yZWFkT25seSB8fCAhdGhpcy5oYXNJbmxpbmVFZGl0KSB7XG5cdFx0XHQvLyBpZiB0aGUgZmllbGQgaXMgYWxyZWFkeSBpbiBlZGl0IG1vZGUgZG8gbm90aGluZ1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSB0cnVlO1xuXHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LnNldEVkaXRNb2RlKHRydWUpO1xuXHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cD8uc2V0UG9zaXRpb24oUG9wdXAuRG9jay5FbmRUb3AsIFBvcHVwLkRvY2suRW5kQm90dG9tLCB0aGlzLl9zb3VyY2UsIFwiMCAtNFwiKTtcblxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0UGF0aCA9ICh0aGlzLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCB8IHVuZGVmaW5lZCk/LmdldENhbm9uaWNhbFBhdGgoKSA/PyBcIlwiO1xuXHRcdGNvbnN0IHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lID0gdGhpcy5nZXRJbmxpbmVFZGl0UHJvcGVydHlOYW1lKCk7XG5cdFx0aWYgKHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lKSB7XG5cdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LnN0YXJ0SW5saW5lRWRpdChwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZSwgYmluZGluZ0NvbnRleHRQYXRoLCB0aGlzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIGlubGluZSBlZGl0IGRpc2NhcmQuXG5cdCAqL1xuXHR0cmlnZ2VySW5saW5lRWRpdERpc2NhcmQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uaW5saW5lRWRpdEZsb3cuaW5saW5lRWRpdERpc2NhcmQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VycyB0aGUgaW5saW5lIGVkaXQgc2F2ZS5cblx0ICogQHJldHVybnMgVGhlIGlubGluZUVkaXRGbG93IHNhdmUgcHJvbWlzZS5cblx0ICovXG5cdHRyaWdnZXJJbmxpbmVFZGl0U2F2ZSh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uaW5saW5lRWRpdEZsb3cuaW5saW5lRWRpdFNhdmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIb29rIHRvIHJlYWN0IHRvIGFuIGlubGluZSBlZGl0IHN0YXJ0IG5vdGlmaWNhdGlvbiBmb3JtIHRoZSBpbmxpbmVFZGl0Rmxvdy5cblx0ICogQHBhcmFtIGlubGluZUVkaXRDb250cm9scyBUaGUgZmllbGRzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBpbmxpbmUgZWRpdCBtb2RlLlxuXHQgKiBAcGFyYW0gcHJvcGVydGllc0ZvcklubGluZUVkaXRcblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0UGF0aEZvcklubGluZUVkaXRcblx0ICovXG5cdEBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlcihcImlubGluZUVkaXRGbG93XCIsIFwiaW5saW5lRWRpdFN0YXJ0XCIpXG5cdGlubGluZUVkaXRTdGFydChcblx0XHR0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LFxuXHRcdGlubGluZUVkaXRDb250cm9sczogQ29udHJvbFtdLFxuXHRcdHByb3BlcnRpZXNGb3JJbmxpbmVFZGl0OiBzdHJpbmdbXSxcblx0XHRiaW5kaW5nQ29udGV4dFBhdGhGb3JJbmxpbmVFZGl0OiBzdHJpbmdcblx0KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaGFzSW5saW5lRWRpdCkge1xuXHRcdFx0Y29uc3QgYmluZGluZ0NvbnRleHRQYXRoID0gKHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0IHwgdW5kZWZpbmVkKT8uZ2V0Q2Fub25pY2FsUGF0aCgpID8/IFwiXCI7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZSA9IHRoaXMuZ2V0SW5saW5lRWRpdFByb3BlcnR5TmFtZSgpID8/IFwiXCI7XG5cdFx0XHRpZiAoIXByb3BlcnRpZXNGb3JJbmxpbmVFZGl0LmluY2x1ZGVzKHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lKSB8fCBiaW5kaW5nQ29udGV4dFBhdGhGb3JJbmxpbmVFZGl0ICE9PSBiaW5kaW5nQ29udGV4dFBhdGgpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy50b2dnbGVJbmxpbmVFZGl0RmllbGRHcm91cElkKEZpZWxkR3JvdXBJZEFjdGlvbi5BZGQpO1xuXHRcdFx0Y29uc3QgdWlNb2RlbCA9IHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRjb25zdCBwYXRoID0gYC8ke3RoaXMuZ2V0SWQoKX1gO1xuXHRcdFx0dWlNb2RlbC5zZXRQcm9wZXJ0eShwYXRoLCB7IGlzRWRpdGFibGU6IHRydWUgfSk7XG5cdFx0XHR0aGlzLmJpbmRFbGVtZW50KHsgcGF0aCwgbW9kZWw6IFwidWlcIiB9KTtcblx0XHRcdC8vSW4gY2FzZSBvZiBjb25uZWN0ZWQgZmllbGRzLCB3ZSBzZXQgdGhlIGZvY3VzIG9uIHRoZSBlbGVtZW50IHRoYXQgd2FzIGNsaWNrZWRcblx0XHRcdGlmICh0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UpIHtcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0KHRoaXMuZ2V0Q29udGVudCgpIGFzIEVuaGFuY2VXaXRoVUk1PEZpZWxkV3JhcHBlcj4pPy5nZXRDb250ZW50RWRpdCgpWzBdPy5mb2N1cygpO1xuXHRcdFx0XHRcdHRoaXMuaW52YWxpZGF0ZSgpO1xuXHRcdFx0XHR9LCAyMDApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnRpZXNGb3JJbmxpbmVFZGl0LmluY2x1ZGVzKHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lKSkge1xuXHRcdFx0XHR0aGlzLmlubGluZUVkaXRTdGF0ZSA9IFwiRWRpdGFibGVcIjtcblx0XHRcdH1cblx0XHRcdGlmICghaW5saW5lRWRpdENvbnRyb2xzLmluY2x1ZGVzKHRoaXMpKSB7XG5cdFx0XHRcdGlubGluZUVkaXRDb250cm9scy5wdXNoKHRoaXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldCB0aGUgaW5kaWNhdG9yIHBvcHVwLlxuXHQgKi9cblx0cmVzZXRJbmRpY2F0b3JQb3B1cCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5jbG9zZSgpO1xuXHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LnNldEVkaXRNb2RlKGZhbHNlKTtcblx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgdGhlIGlubGluZSBlZGl0IHBvcHVwIGFmdGVyIHNhdmUgb3IgZGlzY2FyZC5cblx0ICogQHBhcmFtIHJlZnJlc2hEZXNjcmlwdGlvbiBJZiB0aGUgZGVzY3JpcHRpb24gc2hvdWxkIGJlIHJlZnJlc2hlZC5cblx0ICovXG5cdGlubGluZUVkaXRFbmQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgcmVmcmVzaERlc2NyaXB0aW9uPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGlmICh0aGlzLmlubGluZUVkaXRTdGF0ZSA9PT0gXCJFZGl0YWJsZVwiKSB7XG5cdFx0XHRpZiAocmVmcmVzaERlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdHRoaXMucmVmcmVzaERlc2NyaXB0aW9uSWZOZWVkZWQoKTtcblx0XHRcdH1cblx0XHRcdHRoaXMudG9nZ2xlSW5saW5lRWRpdEZpZWxkR3JvdXBJZChGaWVsZEdyb3VwSWRBY3Rpb24uUmVtb3ZlKTtcblx0XHRcdHRoaXMudW5iaW5kRWxlbWVudChcInVpXCIpO1xuXHRcdFx0dGhpcy5pbmxpbmVFZGl0U3RhdGUgPSBcIkNsb3NlZFwiO1xuXHRcdFx0dGhpcy5yZXNldEluZGljYXRvclBvcHVwKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBmb3JjZSB0aGUgbW9kZWwgcmVmcmVzaCBmb3IgdGhlIGRlc2NyaXB0aW9uIGlmIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgdmlhICBhIGJpbmRpbmcgd2l0aCBhICQkbm9QYXRjaCBwYXJhbWV0ZXIuXG5cdCAqL1xuXHRyZWZyZXNoRGVzY3JpcHRpb25JZk5lZWRlZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0Ly8gd2hlbiB0aGUgZmllbGQgdXNlcyBhIG1kYyBmaWVsZCB0aGUgZGVzY3JpcHRpb24gaXMgdXBkYXRlZCB2aWEgdGhlIGFkZGl0aW9uYWxWYWx1ZSBiaW5kaW5nXG5cdFx0Ly8gdGhhdCBoYXMgYSBub1BhdGNoIHBhcmFtZXRlciBzbyBpdCBkb2Vzbid0IGdldCByZXZlcnRlZCBieWEgcmVzZXRDaGFuZ2VzXG5cdFx0aWYgKHRoaXMuaXNBPEZpZWxkPihcInNhcC5mZS5tYWNyb3MuRmllbGRcIikpIHtcblx0XHRcdGNvbnN0IGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQ/LmlzQTxFbmhhbmNlV2l0aFVJNTxGaWVsZFdyYXBwZXI+PihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmllbGRXcmFwcGVyXCIpXG5cdFx0XHRcdD8gdGhpcy5jb250ZW50LmdldENvbnRlbnRFZGl0KClbMF1cblx0XHRcdFx0OiBudWxsO1xuXHRcdFx0aWYgKGNvbnRlbnQgJiYgY29udGVudC5pc0E8TWRjRmllbGQ+KFwic2FwLnVpLm1kYy5GaWVsZFwiKSkge1xuXHRcdFx0XHRjb25zdCBkZXNjcmlwdGlvblBhdGggPSBjb250ZW50LmdldEJpbmRpbmcoXCJhZGRpdGlvbmFsVmFsdWVcIik/LmdldFBhdGgoKTtcblx0XHRcdFx0aWYgKGRlc2NyaXB0aW9uUGF0aCkge1xuXHRcdFx0XHRcdCh0aGlzLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk/LnJlcXVlc3RTaWRlRWZmZWN0cyhbZGVzY3JpcHRpb25QYXRoXSwgXCIkYXV0b1wiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztNQW9CS0Esa0JBQWtCLDBCQUFsQkEsa0JBQWtCO0lBQWxCQSxrQkFBa0I7SUFBbEJBLGtCQUFrQjtJQUFBLE9BQWxCQSxrQkFBa0I7RUFBQSxFQUFsQkEsa0JBQWtCO0VBQUEsSUFLRkMsVUFBVSxJQUFBQyxJQUFBLEdBNGlCN0JDLDBCQUEwQixDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDLEVBQUFDLE1BQUE7SUFBQSxTQUFBSCxXQUFBO01BQUEsS0EzaUJ4REksZUFBZSxHQUE2QyxRQUFRO01BQUEsS0FRcEVDLG1CQUFtQixHQUFHLEtBQUs7SUFBQTtJQUFBQyxRQUFBLEdBQUFOLFVBQUE7SUFBQSxJQUFBTyxNQUFBLEdBQUFQLFVBQUEsQ0FBQVEsU0FBQTtJQUVuQztBQUNEO0FBQ0E7QUFDQTtJQUhDRCxNQUFBLENBSUFFLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFDQyxTQUFtQixFQUFRO01BQ3JDLE1BQU1DLG1CQUFtQixHQUFHRCxTQUFTLENBQUNGLFNBQVMsQ0FBQ0ksaUJBQWlCO01BQ2pFLE1BQU1DLHFCQUFxQixHQUFHSCxTQUFTLENBQUNGLFNBQVMsQ0FBQ00sbUJBQW1CO01BQ3JFLE1BQU1DLFdBQVcsR0FBR0wsU0FBUyxDQUFDRixTQUFTLENBQUNRLE9BQU87TUFFL0NOLFNBQVMsQ0FBQ0YsU0FBUyxDQUFDSSxpQkFBaUIsR0FBRyxZQUFrQjtRQUN6REQsbUJBQW1CLEVBQUVNLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUNDLGlCQUFpQixFQUFFO1VBQzNCLElBQUksQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztRQUN6QjtNQUNELENBQUM7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
|
|
623
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZEdyb3VwSWRBY3Rpb24iLCJJbmxpbmVFZGl0IiwiX2RlYyIsImNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIiwiX2NsYXNzIiwiaW5saW5lRWRpdFN0YXRlIiwiX2lzSW5saW5lRWRpdFNvdXJjZSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsImJhc2VDbGFzcyIsImJhc2VCZWZvcmVSZW5kZXJpbmciLCJvbkJlZm9yZVJlbmRlcmluZyIsImJhc2VNZXRhZGF0YUF2YWlsYWJsZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJiYXNlRGVzdHJveSIsImRlc3Ryb3kiLCJjYWxsIiwiaW5saW5lRWRpdEVuYWJsZWQiLCJhZGRBcmlhQXR0cmlidXRlcyIsInByb3BlcnR5SW5saW5lRWRpdEVuYWJsZWQiLCJnZXRQYWdlQ29udHJvbGxlciIsImlubGluZUVkaXRGbG93IiwiaXNQcm9wZXJ0eUNvbnNpZGVyZWRGb3JJbmxpbmVFZGl0IiwiZ2V0SW5saW5lRWRpdFByb3BlcnR5TmFtZSIsInVuYmluZFByb3BlcnR5IiwiaGFzSW5saW5lRWRpdCIsInVuZGVmaW5lZCIsIl9pbmxpbmVFZGl0SW5kaWNhdG9yIiwiSW5saW5lRWRpdEluZGljYXRvciIsInZpc2libGUiLCJwcmVzc0VkaXQiLCJ0cmlnZ2VySW5saW5lRWRpdCIsImJpbmQiLCJfaW5saW5lRWRpdEZpZWxkR3JvdXBJZCIsImF0dGFjaEV2ZW50IiwiZXZlbnQiLCJjbG9zZUlubGluZUVkaXRQb3B1cE1vdXNlRXZlbnQiLCJnZXRQYXJhbWV0ZXIiLCJlZGl0QnV0dG9uIiwiYXR0YWNoQnJvd3NlckV2ZW50IiwiZ2V0RG9tUmVmIiwiY29udGFpbnMiLCJyZWxhdGVkVGFyZ2V0IiwiY2xvc2VJbmxpbmVFZGl0UG9wdXBOb0VkaXRNb2RlIiwicHJlc3NUYWJLZXkiLCJwcmVzc1NoaWZ0QW5kVGFiS2V5IiwiZ2V0Q29udGVudCIsImdldENvbnRlbnRFZGl0IiwiX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cCIsIlBvcHVwIiwiaW5saW5lRWRpdFNhdmVGdW5jdGlvbiIsInRyaWdnZXJJbmxpbmVFZGl0U2F2ZSIsImlubGluZUVkaXREaXNjYXJkRnVuY3Rpb24iLCJ0cmlnZ2VySW5saW5lRWRpdERpc2NhcmQiLCJhZGREZXBlbmRlbnQiLCJDb21tYW5kRXhlY3V0aW9uIiwiZXhlY3V0ZSIsImVuYWJsZWQiLCJjb21tYW5kIiwic2V0Rm9sbG93T2YiLCJwb3B1cEJlaGF2aW91ciIsIm9wZW5JbmxpbmVFZGl0UG9wdXAiLCJmb2N1c0V2ZW50IiwiY29udGVudERpc3BsYXkiLCJrZXlkb3duRXZlbnQiLCJfZXZlbnQiLCJmaWVsZEdyb3VwSWRzIiwiZm9yRWFjaCIsImZpZWxkR3JvdXBJZCIsImRlbGF5ZWRDYWxsVG9TYXZlIiwiaXNPcGVuIiwib3BlbklubGluZUVkaXRQb3B1cEZvckZvY3VzIiwic2V0SW5saW5lRWRpdEZvY3VzIiwib25EZXN0cm95IiwicmVtb3ZlQWxsRWRpdEJ1dHRvbkFyaWFEZXNjcmliZWRCeSIsImdldExhYmVsQ29udHJvbHMiLCJsYWJlbENvbnRyb2wiLCJhZGRFZGl0QnV0dG9uQXJpYURlc2NyaWJlZEJ5IiwiZ2V0SWRGb3JMYWJlbCIsImdldERvbVJlZk9mRmllbGQiLCJmaWVsZFdyYXBwZXIiLCJjb250ZW50RWRpdCIsImxlbmd0aCIsImlzQSIsImZpbGVVcGxvYWRlciIsImN1cnJlbnRGaWVsZCIsIm92ZXJsYXBwaW5nRWxlbWVudCIsImdldE92ZXJsYXBwaW5nRWxlbWVudCIsImNsb3NlIiwicG9wdXBJbnRlcnZhbCIsInNldEludGVydmFsIiwicG9wdXBJbnRlcnZhbGxIYW5kbGVyIiwic2V0UG9zaXRpb24iLCJEb2NrIiwiRW5kVG9wIiwiRW5kQm90dG9tIiwiX3NvdXJjZSIsImRvY3VtZW50IiwiZWxlbWVudEZyb21Qb2ludCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIngiLCJ3aWR0aCIsInkiLCJoZWlnaHQiLCJvdmVybGFwcGVkRWxlbWVudCIsIm9wZW4iLCJjbGVhckludGVydmFsIiwiZm9jdXNIYW5kbGluZ0lubGluZUVkaXQiLCJwb3RlbnRpYWxGb2N1c091dCIsImZvY3VzRm9yd2FyZCIsImZvY3VzZWRFbGVtZW50IiwiZmluZFRhYmJhYmxlIiwic2tpcENoaWxkIiwiZm9yd2FyZCIsImVsZW1lbnQiLCJmb2N1cyIsImZvY3VzTWVhc3VyZUZpZWxkIiwicm9vdEZpZWxkIiwibWVhc3VyZUZpZWxkIiwiZm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZCIsImZvY3VzYWJsZUVsZW1lbnQiLCJhY3RpdmVFbGVtZW50IiwiZ2V0U2F2ZUJ1dHRvbiIsImlubGluZUVkaXRLZXlkb3duIiwiZGlzcGxheWVkRmllbGQiLCJrZXkiLCJwcmV2ZW50RGVmYXVsdCIsInNoaWZ0S2V5IiwicHJlc3NUYWJLZXlPbkZpZWxkIiwicHJlc3NTaGlmdFRhYktleU9uRmllbGQiLCJnZXRFbGVtZW50QnlJZCIsImdldEVkaXRCdXR0b24iLCJnZXRJZCIsImdldERpc2NhcmRCdXR0b24iLCJjaGVja0Zvck1lYXN1cmVGaWVsZCIsImNoZWNrRm9yU2VtYW50aWNPYmplY3QiLCJ0b2dnbGVJbmxpbmVFZGl0RmllbGRHcm91cElkIiwiYWN0aW9uIiwic2hvdWxkQWRkIiwiQWRkIiwiU2V0IiwiZ2V0RmllbGRHcm91cElkcyIsImFkZCIsImRlbGV0ZSIsInNldEZpZWxkR3JvdXBJZHMiLCJBcnJheSIsImZyb20iLCJjaGlsZHJlbkNvbnRyb2xzIiwiY29udGVudCIsImZpbmRBZ2dyZWdhdGVkT2JqZWN0cyIsIm1hbmFnZWRPYmplY3QiLCJjb250cm9sIiwiY2hpbGRGaWVsZEdyb3VwSWRzIiwiZWRpdE1vZGUiLCJyZWFkT25seSIsImN1cnJlbnRUYXJnZXQiLCJzZXRXaWR0aCIsInRhcmdldHByb3BlcnR5IiwiZ2V0SW5saW5lRWRpdFByb3BlcnR5IiwiYW5ub3RhdGlvbnMiLCJNZWFzdXJlcyIsIkNvbW1vbiIsIlNlbWFudGljT2JqZWN0IiwiZ2V0RWRpdE1vZGUiLCJjbG9zZUlubGluZUVkaXRQb3B1cEVkaXRNb2RlIiwic2V0RWRpdE1vZGUiLCJmb2N1c0hhbmRsaW5nIiwiYmluZGluZ0NvbnRleHRQYXRoIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRDYW5vbmljYWxQYXRoIiwicHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUiLCJzdGFydElubGluZUVkaXQiLCJoYXNQZW5kaW5nVXNlcklucHV0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwiaW5saW5lRWRpdERpc2NhcmQiLCJpbmxpbmVFZGl0U2F2ZSIsImlubGluZUVkaXRTdGFydCIsImlubGluZUVkaXRDb250cm9scyIsInByb3BlcnRpZXNGb3JJbmxpbmVFZGl0IiwiYmluZGluZ0NvbnRleHRQYXRoRm9ySW5saW5lRWRpdCIsImluY2x1ZGVzIiwidWlNb2RlbCIsImdldE1vZGVsIiwicGF0aCIsInNldFByb3BlcnR5IiwiaXNFZGl0YWJsZSIsImJpbmRFbGVtZW50IiwibW9kZWwiLCJpbnZhbGlkYXRlIiwicHVzaCIsInJlc2V0SW5kaWNhdG9yUG9wdXAiLCJpbmxpbmVFZGl0RW5kIiwicmVmcmVzaERlc2NyaXB0aW9uIiwicmVmcmVzaERlc2NyaXB0aW9uSWZOZWVkZWQiLCJSZW1vdmUiLCJ1bmJpbmRFbGVtZW50IiwiZGVzY3JpcHRpb25QYXRoIiwiZ2V0QmluZGluZyIsImdldFBhdGgiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJJbmxpbmVFZGl0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlciB9IGZyb20gXCJzYXAvZmUvYmFzZS9Ib29rU3VwcG9ydFwiO1xuaW1wb3J0IElubGluZUVkaXRJbmRpY2F0b3IgZnJvbSBcInNhcC9mZS9jb250cm9scy9pbmxpbmVFZGl0L0lubGluZUVkaXRJbmRpY2F0b3JcIjtcbmltcG9ydCBDb21tYW5kRXhlY3V0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgRmllbGRXcmFwcGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpZWxkV3JhcHBlclwiO1xuaW1wb3J0IHR5cGUgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgUG9wdXAgZnJvbSBcInNhcC91aS9jb3JlL1BvcHVwXCI7XG5pbXBvcnQgZmluZFRhYmJhYmxlIGZyb20gXCJzYXAvdWkvZG9tL2ZpbmRUYWJiYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1kY0ZpZWxkIH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgRmlsZVdyYXBwZXIgZnJvbSBcIi4uL2NvbnRyb2xzL0ZpbGVXcmFwcGVyXCI7XG5cbmVudW0gRmllbGRHcm91cElkQWN0aW9uIHtcblx0QWRkID0gXCJBZGRcIixcblx0UmVtb3ZlID0gXCJSZW1vdmVcIlxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmxpbmVFZGl0IHtcblx0cHJpdmF0ZSBpbmxpbmVFZGl0U3RhdGU6IFwiRWRpdGFibGVcIiB8IFwiRGlzcGxheVwiIHwgXCJDbG9zZWRcIiB8IFwiVkhcIiA9IFwiQ2xvc2VkXCI7XG5cblx0cHJpdmF0ZSBfaW5saW5lRWRpdEluZGljYXRvcjogRW5oYW5jZVdpdGhVSTU8SW5saW5lRWRpdEluZGljYXRvcj4gfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBfaW5saW5lRWRpdEluZGljYXRvclBvcHVwOiBQb3B1cCB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIF9zb3VyY2U6IEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBfaXNJbmxpbmVFZGl0U291cmNlID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIE1peGluIHRvIGVuYWJsZSBpbmxpbmUgZWRpdCBvbiBhIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBiYXNlQ2xhc3MgVGhlIGNsYXNzLlxuXHQgKi9cblx0c2V0dXBNaXhpbihiYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Y29uc3QgYmFzZUJlZm9yZVJlbmRlcmluZyA9IGJhc2VDbGFzcy5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmc7XG5cdFx0Y29uc3QgYmFzZU1ldGFkYXRhQXZhaWxhYmxlID0gYmFzZUNsYXNzLnByb3RvdHlwZS5vbk1ldGFkYXRhQXZhaWxhYmxlO1xuXHRcdGNvbnN0IGJhc2VEZXN0cm95ID0gYmFzZUNsYXNzLnByb3RvdHlwZS5kZXN0cm95O1xuXG5cdFx0YmFzZUNsYXNzLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZyA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdGJhc2VCZWZvcmVSZW5kZXJpbmc/LmNhbGwodGhpcyk7XG5cdFx0XHRpZiAodGhpcy5pbmxpbmVFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHR0aGlzLmFkZEFyaWFBdHRyaWJ1dGVzKCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGJhc2VDbGFzcy5wcm90b3R5cGUub25NZXRhZGF0YUF2YWlsYWJsZSA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdGJhc2VNZXRhZGF0YUF2YWlsYWJsZT8uY2FsbCh0aGlzKTtcblx0XHRcdGlmICh0aGlzLmlubGluZUVkaXRFbmFibGVkKSB7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5SW5saW5lRWRpdEVuYWJsZWQgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmlzUHJvcGVydHlDb25zaWRlcmVkRm9ySW5saW5lRWRpdChcblx0XHRcdFx0XHR0aGlzLmdldElubGluZUVkaXRQcm9wZXJ0eU5hbWUoKSA/PyBcIlwiXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmICghcHJvcGVydHlJbmxpbmVFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHRcdC8vbGV0J3MgbWFrZSBzdXJlIHdlIGRvbid0IGtlZXAgYSBiaW5kaW5nIHVubmVjZXNzYXJpbHlcblx0XHRcdFx0XHR0aGlzLnVuYmluZFByb3BlcnR5KFwiaGFzSW5saW5lRWRpdFwiKTtcblx0XHRcdFx0XHR0aGlzLmhhc0lubGluZUVkaXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IgPSBuZXcgSW5saW5lRWRpdEluZGljYXRvcih7XG5cdFx0XHRcdFx0dmlzaWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRwcmVzc0VkaXQ6IHRoaXMudHJpZ2dlcklubGluZUVkaXQuYmluZCh0aGlzKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEZpZWxkR3JvdXBJZCA9IFwiSW5saW5lRWRpdFwiO1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLmF0dGFjaEV2ZW50KFwibW91c2VvdXRcIiwgKGV2ZW50OiBVSTVFdmVudDx7IHJlbGF0ZWRUYXJnZXQ6IEVsZW1lbnQgfT4pID0+IHtcblx0XHRcdFx0XHR0aGlzLmNsb3NlSW5saW5lRWRpdFBvcHVwTW91c2VFdmVudChldmVudC5nZXRQYXJhbWV0ZXIoXCJyZWxhdGVkVGFyZ2V0XCIpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuZWRpdEJ1dHRvbi5hdHRhY2hCcm93c2VyRXZlbnQoXCJibHVyXCIsIChldmVudDogRm9jdXNFdmVudCkgPT4ge1xuXHRcdFx0XHRcdC8vIGlmIGZvY3VzIGlzIHN0aWxsIG9uIGlubGluZSBlZGl0YWJsZSBmaWVsZCB0aGUgcG9wdXAgc2hvdWxkIG5vdCBiZSBjbG9zZWRcblx0XHRcdFx0XHRpZiAoIXRoaXMuZ2V0RG9tUmVmKCk/LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsb3NlSW5saW5lRWRpdFBvcHVwTm9FZGl0TW9kZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuYXR0YWNoRXZlbnQoXCJwcmVzc1RhYlwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wcmVzc1RhYktleSgpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLmF0dGFjaEV2ZW50KFwicHJlc3NTaGlmdFRhYlwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wcmVzc1NoaWZ0QW5kVGFiS2V5KHRoaXMuZ2V0Q29udGVudCgpLmdldENvbnRlbnRFZGl0KClbMF0pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXAgPSBuZXcgUG9wdXAodGhpcy5faW5saW5lRWRpdEluZGljYXRvciwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdGNvbnN0IGlubGluZUVkaXRTYXZlRnVuY3Rpb24gPSB0aGlzLnRyaWdnZXJJbmxpbmVFZGl0U2F2ZS5iaW5kKHRoaXMpO1xuXHRcdFx0XHRjb25zdCBpbmxpbmVFZGl0RGlzY2FyZEZ1bmN0aW9uID0gdGhpcy50cmlnZ2VySW5saW5lRWRpdERpc2NhcmQuYmluZCh0aGlzKTtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvci5hZGREZXBlbmRlbnQoXG5cdFx0XHRcdFx0bmV3IENvbW1hbmRFeGVjdXRpb24oe1xuXHRcdFx0XHRcdFx0ZXhlY3V0ZTogaW5saW5lRWRpdFNhdmVGdW5jdGlvbixcblx0XHRcdFx0XHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0Y29tbWFuZDogXCJTYXZlXCJcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLmFkZERlcGVuZGVudChcblx0XHRcdFx0XHRuZXcgQ29tbWFuZEV4ZWN1dGlvbih7XG5cdFx0XHRcdFx0XHRleGVjdXRlOiBpbmxpbmVFZGl0RGlzY2FyZEZ1bmN0aW9uLFxuXHRcdFx0XHRcdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdHZpc2libGU6IHRydWUsXG5cdFx0XHRcdFx0XHRjb21tYW5kOiBcIkNhbmNlbFwiXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdFx0Ly8gZnVuY3Rpb24gdG8gY2hlY2sgZm9sbG93aW5nIGJlaGF2aW91ciBvZiBwb3B1cFxuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXAuc2V0Rm9sbG93T2YoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucG9wdXBCZWhhdmlvdXIoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuYXR0YWNoQnJvd3NlckV2ZW50KFwiZGJsY2xpY2tcIiwgdGhpcy50cmlnZ2VySW5saW5lRWRpdC5iaW5kKHRoaXMpKTtcblx0XHRcdFx0dGhpcy5hdHRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZW92ZXJcIiwgdGhpcy5vcGVuSW5saW5lRWRpdFBvcHVwLmJpbmQodGhpcykpO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcIm1vdXNlb3V0XCIsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuY2xvc2VJbmxpbmVFZGl0UG9wdXBNb3VzZUV2ZW50KGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgRWxlbWVudCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcImZvY3VzXCIsIChldmVudDogRm9jdXNFdmVudCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZm9jdXNFdmVudChldmVudCwgdGhpcy5nZXRDb250ZW50KCkuY29udGVudERpc3BsYXk/LmdldERvbVJlZigpKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5hdHRhY2hCcm93c2VyRXZlbnQoXCJrZXlkb3duXCIsIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMua2V5ZG93bkV2ZW50KGV2ZW50LCB0aGlzLmdldENvbnRlbnQoKS5jb250ZW50RGlzcGxheT8uZ2V0RG9tUmVmKCkpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLmF0dGFjaEV2ZW50KFwidmFsaWRhdGVGaWVsZEdyb3VwXCIsIChfZXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpID0+IHtcblx0XHRcdFx0XHRjb25zdCBmaWVsZEdyb3VwSWRzID0gX2V2ZW50LmdldFBhcmFtZXRlcihcImZpZWxkR3JvdXBJZHNcIik7XG5cdFx0XHRcdFx0ZmllbGRHcm91cElkcz8uZm9yRWFjaCgoZmllbGRHcm91cElkKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoZmllbGRHcm91cElkID09PSBcIklubGluZUVkaXRcIikge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmRlbGF5ZWRDYWxsVG9TYXZlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmF0dGFjaEJyb3dzZXJFdmVudChcImZvY3VzaW5cIiwgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0Ly8gb25seSBnb2VzIGludG8gY29uZGl0aW9uIGZvciBjdXJyZW50bHkgZWRpdGFibGUgZmllbGRzLCBlLmcuIGNvbm5lY3RlZCBmaWVsZHNcblx0XHRcdFx0XHRpZiAodGhpcy5pbmxpbmVFZGl0U3RhdGUgPT09IFwiRWRpdGFibGVcIiAmJiAhdGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwLmlzT3BlbigpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9wZW5JbmxpbmVFZGl0UG9wdXBGb3JGb2N1cyhldmVudCk7XG5cdFx0XHRcdFx0XHR0aGlzLnNldElubGluZUVkaXRGb2N1cygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGJhc2VDbGFzcy5wcm90b3R5cGUub25EZXN0cm95ID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZGVzdHJveSgpO1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5kZXN0cm95KCk7XG5cdFx0XHRiYXNlRGVzdHJveT8uY2FsbCh0aGlzKTtcblx0XHR9O1xuXHR9XG5cblx0Lypcblx0ICogQWRkcyBhcmlhIGF0dHJpYnV0ZXMgdG8gdGhlIGlubGluZSBlZGl0IGluZGljYXRvci5cblx0ICogQHBhcmFtIHRoaXMgVGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzLlxuXHQgKi9cblx0YWRkQXJpYUF0dHJpYnV0ZXModGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yKSB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yLnJlbW92ZUFsbEVkaXRCdXR0b25BcmlhRGVzY3JpYmVkQnkoKTtcblx0XHRcdC8vIGFkZCB0aGUgbGFiZWwgY29udHJvbHMgb2YgdGhlIGZpZWxkXG5cdFx0XHR0aGlzLmdldExhYmVsQ29udHJvbHMoKS5mb3JFYWNoKChsYWJlbENvbnRyb2w6IExhYmVsKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmFkZEVkaXRCdXR0b25BcmlhRGVzY3JpYmVkQnkobGFiZWxDb250cm9sKTtcblx0XHRcdH0pO1xuXHRcdFx0Ly8gYWRkIHRoZSBmaWVsZCBpdHNlbGZcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3IuYWRkRWRpdEJ1dHRvbkFyaWFEZXNjcmliZWRCeSh0aGlzLmdldElkRm9yTGFiZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgRE9NIHJlZmVyZW5jZSBvZiB0aGUgZmllbGQgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmxpbmUgZWRpdC5cblx0ICogQHJldHVybnMgVGhlIERPTSByZWZlcmVuY2Ugb2YgdGhlIGZpZWxkIG9yIG51bGwgaWYgbm90IGZvdW5kLlxuXHQgKi9cblx0Z2V0RG9tUmVmT2ZGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogRWxlbWVudCB8IG51bGwge1xuXHRcdGNvbnN0IGZpZWxkV3JhcHBlciA9IHRoaXMuZ2V0Q29udGVudCgpIGFzIEZpZWxkV3JhcHBlcjtcblx0XHRpZiAoZmllbGRXcmFwcGVyPy5jb250ZW50RWRpdD8ubGVuZ3RoID4gMCAmJiBmaWVsZFdyYXBwZXI/LmNvbnRlbnRFZGl0WzBdPy5nZXREb21SZWYoKSkge1xuXHRcdFx0cmV0dXJuIGZpZWxkV3JhcHBlci5jb250ZW50RWRpdFswXS5nZXREb21SZWYoKTtcblx0XHR9IGVsc2UgaWYgKGZpZWxkV3JhcHBlcj8uY29udGVudERpc3BsYXkgJiYgZmllbGRXcmFwcGVyLmNvbnRlbnREaXNwbGF5LmdldERvbVJlZigpKSB7XG5cdFx0XHRyZXR1cm4gZmllbGRXcmFwcGVyLmNvbnRlbnREaXNwbGF5LmdldERvbVJlZigpO1xuXHRcdH0gZWxzZSBpZiAoZmllbGRXcmFwcGVyPy5pc0EoXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkZpbGVXcmFwcGVyXCIpKSB7XG5cdFx0XHRyZXR1cm4gKGZpZWxkV3JhcHBlciBhcyBGaWxlV3JhcHBlcikuZmlsZVVwbG9hZGVyLmdldERvbVJlZigpO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSBiZWhhdmlvciBvZiB0aGUgaW5saW5lIGVkaXQgcG9wdXAgcmVsYXRpdmUgdG8gaXRzIGFzc29jaWF0ZWQgZmllbGQuXG5cdCAqL1xuXHRwb3B1cEJlaGF2aW91cih0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0Y29uc3QgY3VycmVudEZpZWxkID0gdGhpcy5nZXREb21SZWZPZkZpZWxkKCk7XG5cdFx0aWYgKGN1cnJlbnRGaWVsZCkge1xuXHRcdFx0Ly8gY2hlY2sgaWYgZWxlbWVudCBpcyBvYnNjdXJlZCBieSBvdGhlciBzZWN0aW9uL2VsZW1lbnRcblx0XHRcdGNvbnN0IG92ZXJsYXBwaW5nRWxlbWVudCA9IHRoaXMuZ2V0T3ZlcmxhcHBpbmdFbGVtZW50KGN1cnJlbnRGaWVsZCk7XG5cdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBpcyBvYnNjdXJlZCBieSBhbm90aGVyIGVsZW1lbnQvc2VjdGlvbiwgY2xvc2UgaXQgYW5kIHNldCB1cCBhbiBpbnRlcnZhbCB0byBjaGVjayBldmVyeSAyMDAgbXMgaWYgaXQgcmVtYWlucyBvYnNjdXJlZFxuXHRcdFx0aWYgKG92ZXJsYXBwaW5nRWxlbWVudCAhPT0gY3VycmVudEZpZWxkICYmICFjdXJyZW50RmllbGQuY29udGFpbnMob3ZlcmxhcHBpbmdFbGVtZW50KSkge1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/LmNsb3NlKCk7XG5cdFx0XHRcdC8vIG9ubHkgaWYgaXQgaXMgZWRpdGFibGUsIHdlIHNldCB1cCB0aGUgaW50ZXJ2YWwsIG90aGVyd2lzZSB3ZSBjbG9zZSB0aGUgcG9wdXAgaWYgaXQgaXMgb2JzY3VyZWQgYnkgYW5vdGhlciBlbGVtZW50XG5cdFx0XHRcdGlmICh0aGlzLmlubGluZUVkaXRTdGF0ZSA9PT0gXCJFZGl0YWJsZVwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgcG9wdXBJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucG9wdXBJbnRlcnZhbGxIYW5kbGVyKGN1cnJlbnRGaWVsZCwgcG9wdXBJbnRlcnZhbCk7XG5cdFx0XHRcdFx0fSwgMjAwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBpcyBub3QgYmxvY2tlZCBieSBhbm90aGVyIHNlY3Rpb24vZWxlbWVudCwgdXBkYXRlIGl0cyBwb3NpdGlvbiB0byBhbGlnbiB3aXRoIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBJbmxpbmUgRWRpdFxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5zZXRQb3NpdGlvbihQb3B1cC5Eb2NrLkVuZFRvcCwgUG9wdXAuRG9jay5FbmRCb3R0b20sIHRoaXMuX3NvdXJjZSwgXCIwIC00XCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZWxlbWVudCBsb2NhdGVkIGF0IHRoZSBsb3dlc3QgdmVydGljYWwgcG9pbnQgb2YgdGhlIGN1cnJlbnRGaWVsZC5cblx0ICogSWYgdGhlIGN1cnJlbnRGaWVsZCBpcyBvdmVybGFwcGVkLCBpdCByZXR1cm5zIHRoZSBvdmVybGFwcGluZyBlbGVtZW50IGluc3RlYWQuXG5cdCAqIEBwYXJhbSBjdXJyZW50RmllbGQgVGhlIGZpZWxkIHdoZXJlIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBpcyBvcGVuZWQuXG5cdCAqIEByZXR1cm5zIFRoZSBlbGVtZW50IGRldGVybWluZWQgdG8gYmUgYXQgdGhlIGxvd2VzdCB2ZXJ0aWNhbCBwb2ludCBvZiB0aGUgY3VycmVudCBmaWVsZC5cblx0ICovXG5cdGdldE92ZXJsYXBwaW5nRWxlbWVudChjdXJyZW50RmllbGQ6IEVsZW1lbnQpOiBFbGVtZW50IHwgbnVsbCB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoXG5cdFx0XHRjdXJyZW50RmllbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueCArIGN1cnJlbnRGaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAvIDIsXG5cdFx0XHQvLyBXZSB0YWtlIGEgcG9pbnQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgZmllbGQgYW5kIDIvMyBvZiB0aGUgaGVpZ2h0IHRvIHJldHJpZXZlIHRoZSBvdmVybGFwcGluZ0VsZW1lbnRcblx0XHRcdGN1cnJlbnRGaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS55ICsgMC42NiAqIGN1cnJlbnRGaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHRcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEludGVydmFsIGhhbmRsZXIgZm9yIG1hbmFnaW5nIHRoZSBpbnRlcnZhbCB3aGVuIHRoZSBwb3B1cCBpcyBvdmVybGFwcGVkIGJ5IGFuIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBjdXJyZW50RmllbGQgVGhlIGZpZWxkIHdoZXJlIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBpcyBvcGVuZWQuXG5cdCAqIEBwYXJhbSBwb3B1cEludGVydmFsIFRoZSBpbnRlcnZhbCBjb25zdGFudC5cblx0ICovXG5cdHBvcHVwSW50ZXJ2YWxsSGFuZGxlcih0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBjdXJyZW50RmllbGQ6IEVsZW1lbnQsIHBvcHVwSW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgaWYgZWxlbWVudCBpcyBzdGlsbCBvYnNjdXJlZCBieSBvdGhlciBzZWN0aW9uL2VsZW1lbnRcblx0XHRjb25zdCBvdmVybGFwcGVkRWxlbWVudCA9IHRoaXMuZ2V0T3ZlcmxhcHBpbmdFbGVtZW50KGN1cnJlbnRGaWVsZCk7XG5cdFx0aWYgKG92ZXJsYXBwZWRFbGVtZW50ID09PSBjdXJyZW50RmllbGQgfHwgY3VycmVudEZpZWxkLmNvbnRhaW5zKG92ZXJsYXBwZWRFbGVtZW50KSkge1xuXHRcdFx0Ly8gSWYgZWxlbWVudCBpcyB2aXNpYmxlIGFnYWluLCBvcGVuIFBvcHVwXG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/Lm9wZW4oMCwgUG9wdXAuRG9jay5FbmRUb3AsIFBvcHVwLkRvY2suRW5kQm90dG9tLCB0aGlzKTtcblx0XHRcdGNsZWFySW50ZXJ2YWwocG9wdXBJbnRlcnZhbCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZvY3VzIGhhbmRsZXIgZm9yIGlubGluZSBlZGl0LlxuXHQgKiBAcGFyYW0gcG90ZW50aWFsRm9jdXNPdXQgUG90ZW50aWFsIGZvY3VzIG91dC4gQXBwbGllcyBmb3IgU2hpZnQgKyBUYWIgb24gZmllbGQgYW5kIFRhYiBvbiBkaXNjYXJkIGJ1dHRvbi5cblx0ICogQHBhcmFtIGZvY3VzRm9yd2FyZCBJZiBmb2N1cyBzaG91bGQgYmUgc2V0IGZvcndhcmQgb3IgYmFja3dhcmQuXG5cdCAqL1xuXHRmb2N1c0hhbmRsaW5nSW5saW5lRWRpdCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBwb3RlbnRpYWxGb2N1c091dDogYm9vbGVhbiwgZm9jdXNGb3J3YXJkPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGZvY3VzZWRFbGVtZW50ID0gZmluZFRhYmJhYmxlKHRoaXMuZ2V0RG9tUmVmKCksIHtcblx0XHRcdHNraXBDaGlsZDogdHJ1ZSxcblx0XHRcdGZvcndhcmQ6IGZvY3VzRm9yd2FyZFxuXHRcdH0pO1xuXHRcdGZvY3VzZWRFbGVtZW50Py5lbGVtZW50LmZvY3VzKCk7XG5cdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvclBvcHVwPy5jbG9zZSgpO1xuXHRcdGlmIChwb3RlbnRpYWxGb2N1c091dCkge1xuXHRcdFx0Ly8gb25seSBjbG9zZXMgdGhlIGlubGluZSBlZGl0IGNvbXBsZXRlbHkgaWYgdGhlIGZvY3VzIGlzIG5vdCBvbiB0aGUgc2FtZSBpbmxpbmUgZWRpdCBhbnltb3JlXG5cdFx0XHQvLyBjb25uZWN0ZWQgZmllbGRzIHdvbid0IGJlIGNsb3NlZCBpZiBzd2l0Y2hpbmcgZm9jdXMgYmV0d2VlbiB0aGVtXG5cdFx0XHRpZiAodGhpcy5faXNJbmxpbmVFZGl0U291cmNlKSB7XG5cdFx0XHRcdHRoaXMudHJpZ2dlcklubGluZUVkaXRTYXZlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGZvY3VzIG9uIHRoZSBtZWFzdXJlIGZpZWxkIG9mIGEgZmllbGQuXG5cdCAqL1xuXHRmb2N1c01lYXN1cmVGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogdm9pZCB7XG5cdFx0Y29uc3Qgcm9vdEZpZWxkID0gZmluZFRhYmJhYmxlKHRoaXMuZ2V0RG9tUmVmKCksIHtcblx0XHRcdHNraXBDaGlsZDogZmFsc2UsXG5cdFx0XHRmb3J3YXJkOiB0cnVlXG5cdFx0fSk7XG5cdFx0Y29uc3QgbWVhc3VyZUZpZWxkID0gZmluZFRhYmJhYmxlKHJvb3RGaWVsZC5lbGVtZW50LCB7XG5cdFx0XHRza2lwQ2hpbGQ6IHRydWUsXG5cdFx0XHRmb3J3YXJkOiB0cnVlXG5cdFx0fSk7XG5cdFx0bWVhc3VyZUZpZWxkPy5lbGVtZW50Py5mb2N1cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEltcGxlbWVudCBmb2N1cyBoYW5kbGluZyBmb3IgZmllbGRzIHdpdGggbWVhc3VyZSBmaWVsZHMgd2hlbiBuYXZpZ2F0aW5nIHZpYSB0YWIgb3Igc2hpZnQtdGFiIHdpdGhpbiBhbiBpbmxpbmUgZWRpdGFibGUgZmllbGQuXG5cdCAqIEBwYXJhbSBmb2N1c0ZvcndhcmQgSWYgZm9jdXMgc2hvdWxkIGJlIHNldCBmb3J3YXJkIG9yIGJhY2t3YXJkLlxuXHQgKi9cblx0Zm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBmb2N1c0ZvcndhcmQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBmb2N1c2FibGVFbGVtZW50ID0gZmluZFRhYmJhYmxlKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsIHtcblx0XHRcdHNraXBDaGlsZDogdHJ1ZSxcblx0XHRcdGZvcndhcmQ6IGZvY3VzRm9yd2FyZFxuXHRcdH0pO1xuXHRcdC8vIENoZWNrIGlmIHRoZSBuZXh0L3ByZXZpb3VzIGZvY3VzYWJsZSBlbGVtZW50IGlzIHdpdGhpbiB0aGUgaW5saW5lIGVkaXQgcG9wdXBcblx0XHRpZiAodGhpcy5nZXREb21SZWYoKT8uY29udGFpbnMoZm9jdXNhYmxlRWxlbWVudC5lbGVtZW50KSkge1xuXHRcdFx0Ly8gSWYgaXQgaXMsIGZvY3VzIG9uIHRoZSBuZXh0L3ByZXZpb3VzIGZvY3VzYWJsZSBlbGVtZW50XG5cdFx0XHRmb2N1c2FibGVFbGVtZW50LmVsZW1lbnQ/LmZvY3VzKCk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgbmV4dCBlbGVtZW50IGlzIG91dHNpZGUgb2YgY3VycmVudCBpbmxpbmUgZWRpdGFibGUgZmllbGQgYW5kIGZvY3VzIGlzIHNldCBmb3J3YXJkLCBmb2N1cyBvbiB0aGUgc2F2ZSBidXR0b25cblx0XHRlbHNlIGlmIChmb2N1c0ZvcndhcmQpIHtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldFNhdmVCdXR0b24oKS5mb2N1cygpO1xuXHRcdH1cblx0XHQvLyBJZiBmb2N1cyBpcyBzZXQgYmFja3dhcmQsIGZvY3VzIG9uIHRoZSBwcmV2aW91cyBmb2N1c2FibGUgZWxlbWVudFxuXHRcdGVsc2Uge1xuXHRcdFx0Zm9jdXNhYmxlRWxlbWVudC5lbGVtZW50Py5mb2N1cygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBQcm9jZXNzZXMga2V5ZG93biBldmVudHMgZm9yIHRoZSBpbmxpbmUgZWRpdCBjb21wb25lbnQsIGhhbmRsaW5nIHZhcmlvdXMgc2NlbmFyaW9zLCBsaWtlIFRhYiBvciBFc2NhcGUuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUga2V5ZG93biBldmVudCB0cmlnZ2VyZWQgd2l0aGluIHRoZSBpbmxpbmUgZWRpdC5cblx0ICogQHBhcmFtIGRpc3BsYXllZEZpZWxkIERvbVJlZiBvZiBjb250ZW50RGlzcGxheSBvZiB0aGUgZmllbGQuXG5cdCAqL1xuXHRpbmxpbmVFZGl0S2V5ZG93bih0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogS2V5Ym9hcmRFdmVudCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMudHJpZ2dlcklubGluZUVkaXREaXNjYXJkKCk7XG5cdFx0fSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiVGFiXCIgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy5wcmVzc1RhYktleU9uRmllbGQoZGlzcGxheWVkRmllbGQsIGV2ZW50KTtcblx0XHR9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJUYWJcIiAmJiBldmVudC5zaGlmdEtleSkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMucHJlc3NTaGlmdFRhYktleU9uRmllbGQoZGlzcGxheWVkRmllbGQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBUYWIga2V5IHByZXNzIGV2ZW50IHdoZW4gZm9jdXMgaXMgb24gdGhlIGVkaXQsIHNhdmUsIG9yIGRpc2NhcmQgYnV0dG9ucy5cblx0ICovXG5cdHByZXNzVGFiS2V5KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5faW5saW5lRWRpdEluZGljYXRvcikge1xuXHRcdFx0c3dpdGNoIChkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG5cdFx0XHRcdGNhc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RWRpdEJ1dHRvbigpLmdldElkKCkpOlxuXHRcdFx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0lubGluZUVkaXQoZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldFNhdmVCdXR0b24oKS5nZXRJZCgpKTpcblx0XHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXREaXNjYXJkQnV0dG9uKCkuZm9jdXMoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXREaXNjYXJkQnV0dG9uKCkuZ2V0SWQoKSk6XG5cdFx0XHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nSW5saW5lRWRpdCh0cnVlLCB0cnVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgVGFiIGtleSBwcmVzcyBldmVudCB3aGVuIGZvY3VzIGlzIG9uIHRoZSBlZGl0LCBzYXZlLCBvciBkaXNjYXJkIGJ1dHRvbnMuXG5cdCAqIEBwYXJhbSByb290RmllbGQgVGhlIGVsZW1lbnQgd2l0aCBpbmxpbmUgZWRpdGluZyBlbmFibGVkLlxuXHQgKi9cblx0cHJlc3NTaGlmdEFuZFRhYktleSh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCByb290RmllbGQ6IFVJNUVsZW1lbnQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5faW5saW5lRWRpdEluZGljYXRvcikge1xuXHRcdFx0c3dpdGNoIChkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG5cdFx0XHRcdGNhc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RWRpdEJ1dHRvbigpLmdldElkKCkpOlxuXHRcdFx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0lubGluZUVkaXQoZmFsc2UsIGZhbHNlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRTYXZlQnV0dG9uKCkuZ2V0SWQoKSk6XG5cdFx0XHRcdFx0aWYgKHRoaXMuY2hlY2tGb3JNZWFzdXJlRmllbGQoKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5mb2N1c01lYXN1cmVGaWVsZCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyb290RmllbGQuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0RGlzY2FyZEJ1dHRvbigpLmdldElkKCkpOlxuXHRcdFx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldFNhdmVCdXR0b24oKS5mb2N1cygpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGb2N1cyBoYW5kbGVyIGZvciB0aGUgVGFiIGtleSBvbiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRGaWVsZCBEb21SZWYgb2YgY29udGVudERpc3BsYXkgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcGFyYW0gZXZlbnQgQ3VycmVudCBrZXlib2FyZCBldmVudC5cblx0ICovXG5cdHByZXNzVGFiS2V5T25GaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBkaXNwbGF5ZWRGaWVsZDogSFRNTEVsZW1lbnQsIGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgdGhhdCB0aGUgZm9jdXMgb2YgdGhlIGZpZWxkIGlzIG9uIHRoZSBjb250ZW50RGlzcGxheVxuXHRcdGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkaXNwbGF5ZWRGaWVsZCkge1xuXHRcdFx0dGhpcy5vcGVuSW5saW5lRWRpdFBvcHVwKGV2ZW50KTtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldEVkaXRCdXR0b24oKS5mb2N1cygpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuY2hlY2tGb3JNZWFzdXJlRmllbGQoKSkge1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uZ2V0U2F2ZUJ1dHRvbigpLmZvY3VzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZCh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRm9jdXMgaGFuZGxlciBmb3IgdGhlIFRhYiArIFNoaWZ0IGtleSBvbiB0aGUgZmllbGQuXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRGaWVsZCBEb21SZWYgb2YgY29udGVudERpc3BsYXkgb2YgdGhlIGZpZWxkLlxuXHQgKi9cblx0cHJlc3NTaGlmdFRhYktleU9uRmllbGQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgdGhhdCB0aGUgZm9jdXMgb2YgdGhlIGZpZWxkIGlzIG9uIHRoZSBjb250ZW50RGlzcGxheVxuXHRcdGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkaXNwbGF5ZWRGaWVsZCkge1xuXHRcdFx0Ly8gZm9jdXMgdG8gdGhlIHByZXZpb3VzIGludGVyYWN0aXZlIGVsZW1lbnRcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ0lubGluZUVkaXQodHJ1ZSwgZmFsc2UpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuY2hlY2tGb3JNZWFzdXJlRmllbGQoKSkge1xuXHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nSW5saW5lRWRpdCh0cnVlLCBmYWxzZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZ01lYXN1cmVGaWVsZChmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIGZvY3VzIGV2ZW50IGZvciB0aGUgaW5saW5lIGVkaXQgZmllbGQuXG5cdCAqIEBwYXJhbSBldmVudCBGb2N1cyBldmVudCBmb3IgdGhlIGZpZWxkXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRGaWVsZCBEb21SZWYgb2YgY29udGVudERpc3BsYXkgb2YgdGhlIGZpZWxkLlxuXHQgKi9cblx0Zm9jdXNFdmVudCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogRm9jdXNFdmVudCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaGFzSW5saW5lRWRpdCkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGlmICh0aGlzLmNoZWNrRm9yU2VtYW50aWNPYmplY3QoKSkge1xuXHRcdFx0XHQvLyBpZiB0aGUgZmllbGQgaGFzIGEgU2VtYW50aWMgT2JqZWN0LCB3ZSBkb24ndCB3YW50IHRvIGZvY3VzIG9uIHRoZSBlZGl0IGJ1dHRvbiBvZiB0aGUgZmllbGRcblx0XHRcdFx0Ly8gYnV0IG9udG8gdGhlIGNvbnRlbnREaXNwbGF5XG5cdFx0XHRcdGRpc3BsYXllZEZpZWxkLmZvY3VzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLm9wZW5JbmxpbmVFZGl0UG9wdXAoZXZlbnQpO1xuXHRcdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRFZGl0QnV0dG9uKCkuZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUga2V5ZG93biBldmVudCBmb3IgdGhlIGlubGluZSBlZGl0IGZpZWxkLlxuXHQgKiBAcGFyYW0gZXZlbnQgS2V5Ym9hcmQgZXZlbnQgZm9yIHRoZSBmaWVsZFxuXHQgKiBAcGFyYW0gZGlzcGxheWVkRmllbGQgRG9tUmVmIG9mIGNvbnRlbnREaXNwbGF5IG9mIHRoZSBmaWVsZC5cblx0ICovXG5cdGtleWRvd25FdmVudCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogS2V5Ym9hcmRFdmVudCwgZGlzcGxheWVkRmllbGQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuaW5saW5lRWRpdFN0YXRlID09PSBcIkVkaXRhYmxlXCIgfHwgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGRpc3BsYXllZEZpZWxkICYmIHRoaXMuY2hlY2tGb3JTZW1hbnRpY09iamVjdCgpKSkgJiZcblx0XHRcdHRoaXMuaGFzSW5saW5lRWRpdFxuXHRcdCkge1xuXHRcdFx0dGhpcy5pbmxpbmVFZGl0S2V5ZG93bihldmVudCwgZGlzcGxheWVkRmllbGQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBmaWVsZCBncm91cCBpZHMgb2YgdGhlIGNvbnRyb2wgdG8gaW5jbHVkZSBvciByZW1vdmUgdGhlIGlubGluZSBlZGl0IGZpZWxkIGdyb3VwIGlkLlxuXHQgKiBAcGFyYW0gYWN0aW9uIEFkZCBvciBSZW1vdmUgdGhlIGlkXG5cdCAqL1xuXHR0b2dnbGVJbmxpbmVFZGl0RmllbGRHcm91cElkKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQsIGFjdGlvbjogRmllbGRHcm91cElkQWN0aW9uKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2hvdWxkQWRkID0gYWN0aW9uID09PSBGaWVsZEdyb3VwSWRBY3Rpb24uQWRkO1xuXHRcdGNvbnN0IGZpZWxkR3JvdXBJZHMgPSBuZXcgU2V0KHRoaXMuZ2V0RmllbGRHcm91cElkcygpKTtcblxuXHRcdGlmIChzaG91bGRBZGQpIHtcblx0XHRcdGZpZWxkR3JvdXBJZHMuYWRkKFwiSW5saW5lRWRpdFwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmllbGRHcm91cElkcy5kZWxldGUoXCJJbmxpbmVFZGl0XCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0RmllbGRHcm91cElkcyhBcnJheS5mcm9tKGZpZWxkR3JvdXBJZHMpKTtcblxuXHRcdGNvbnN0IGNoaWxkcmVuQ29udHJvbHMgPVxuXHRcdFx0KHRoaXMuY29udGVudD8uZmluZEFnZ3JlZ2F0ZWRPYmplY3RzKHRydWUsIChtYW5hZ2VkT2JqZWN0OiBNYW5hZ2VkT2JqZWN0KSA9PlxuXHRcdFx0XHRtYW5hZ2VkT2JqZWN0LmlzQTxDb250cm9sPihcInNhcC51aS5jb3JlLkNvbnRyb2xcIilcblx0XHRcdCkgYXMgQ29udHJvbFtdIHwgdW5kZWZpbmVkKSA/PyBbXTtcblxuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiBjaGlsZHJlbkNvbnRyb2xzKSB7XG5cdFx0XHRjb25zdCBjaGlsZEZpZWxkR3JvdXBJZHMgPSBuZXcgU2V0KGNvbnRyb2wuZ2V0RmllbGRHcm91cElkcygpKTtcblxuXHRcdFx0aWYgKHNob3VsZEFkZCkge1xuXHRcdFx0XHRjaGlsZEZpZWxkR3JvdXBJZHMuYWRkKFwiSW5saW5lRWRpdFwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNoaWxkRmllbGRHcm91cElkcy5kZWxldGUoXCJJbmxpbmVFZGl0XCIpO1xuXHRcdFx0fVxuXHRcdFx0Y29udHJvbC5zZXRGaWVsZEdyb3VwSWRzKEFycmF5LmZyb20oY2hpbGRGaWVsZEdyb3VwSWRzKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE9wZW5zIHRoZSBpbmxpbmUgZWRpdCBwb3B1cC5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudC5cblx0ICovXG5cdG9wZW5JbmxpbmVFZGl0UG9wdXAodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaGFzSW5saW5lRWRpdCAmJiB0aGlzLmlubGluZUVkaXRTdGF0ZSAhPT0gXCJFZGl0YWJsZVwiICYmIHRoaXMuZWRpdE1vZGUgPT09IFwiRGlzcGxheVwiICYmICF0aGlzLnJlYWRPbmx5KSB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/Lm9wZW4oMCwgUG9wdXAuRG9jay5FbmRUb3AsIFBvcHVwLkRvY2suRW5kQm90dG9tLCBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEVsZW1lbnQpO1xuXHRcdFx0dGhpcy5fc291cmNlID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBFbGVtZW50O1xuXHRcdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uc2V0V2lkdGgoKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgRWxlbWVudCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBmb3IgbW91c2UgZXZlbnRzLlxuXHQgKiBAcGFyYW0gcmVsYXRlZFRhcmdldCBUaGUgcmVsYXRlZCB0YXJnZXQuXG5cdCAqL1xuXHRjbG9zZUlubGluZUVkaXRQb3B1cE1vdXNlRXZlbnQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCwgcmVsYXRlZFRhcmdldDogRWxlbWVudCk6IHZvaWQge1xuXHRcdGlmIChcblx0XHRcdHJlbGF0ZWRUYXJnZXQgJiZcblx0XHRcdCF0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXREb21SZWYoKT8uY29udGFpbnMocmVsYXRlZFRhcmdldCkgJiZcblx0XHRcdCF0aGlzLmdldERvbVJlZigpPy5jb250YWlucyhyZWxhdGVkVGFyZ2V0KVxuXHRcdCkge1xuXHRcdFx0dGhpcy5jbG9zZUlubGluZUVkaXRQb3B1cE5vRWRpdE1vZGUoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBmaWVsZCBoYXMgYSBtZWFzdXJlIGZpZWxkLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBmaWVsZCBoYXMgYSBtZWFzdXJlIGZpZWxkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRjaGVja0Zvck1lYXN1cmVGaWVsZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdGFyZ2V0cHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkID0gdGhpcy5nZXRJbmxpbmVFZGl0UHJvcGVydHkoKTtcblx0XHRyZXR1cm4gISF0YXJnZXRwcm9wZXJ0eT8uYW5ub3RhdGlvbnMuTWVhc3VyZXM7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBmaWVsZCBoYXMgYSBTZW1hbnRpYyBPYmplY3QgaWYgY2xpY2tpbmcgb24gaXQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGZpZWxkIGhhcyBhIFNlbWFudGljT2JqZWN0LCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRjaGVja0ZvclNlbWFudGljT2JqZWN0KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiBib29sZWFuIHtcblx0XHRjb25zdCB0YXJnZXRwcm9wZXJ0eTogUHJvcGVydHkgfCB1bmRlZmluZWQgPSB0aGlzLmdldElubGluZUVkaXRQcm9wZXJ0eSgpO1xuXHRcdHJldHVybiAhIXRhcmdldHByb3BlcnR5Py5hbm5vdGF0aW9ucy5Db21tb24/LlNlbWFudGljT2JqZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgaW5saW5lIGVkaXQgcG9wdXAgZm9yIGZpZWxkcyB0aGF0IGFyZSBub3QgaW4gZWRpdCBtb2RlLlxuXHQgKi9cblx0Y2xvc2VJbmxpbmVFZGl0UG9wdXBOb0VkaXRNb2RlKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LmdldEVkaXRNb2RlKCkpIHtcblx0XHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cD8uY2xvc2UoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBpbmxpbmUgZWRpdCBwb3B1cCBmb3IgZmllbGRzIGluIGVkaXQgbW9kZS5cblx0ICovXG5cdGNsb3NlSW5saW5lRWRpdFBvcHVwRWRpdE1vZGUodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5nZXRFZGl0TW9kZSgpKSB7XG5cdFx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/LmNsb3NlKCk7XG5cdFx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGlubGluZSBlZGl0IHBvcHVwIGZvciBmb2N1cyBoYW5kbGluZy5cblx0ICogQHBhcmFtIGV2ZW50IEZvY3VzaW4gZXZlbnQgZm9yIHRoZSBmaWVsZC5cblx0ICovXG5cdG9wZW5JbmxpbmVFZGl0UG9wdXBGb3JGb2N1cyh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCBldmVudDogRXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yPy5zZXRFZGl0TW9kZSh0cnVlKTtcblx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/Lm9wZW4oXG5cdFx0XHQwLFxuXHRcdFx0UG9wdXAuRG9jay5FbmRUb3AsXG5cdFx0XHRQb3B1cC5Eb2NrLkVuZEJvdHRvbSxcblx0XHRcdChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEVsZW1lbnQpIHx8IHRoaXMuX3NvdXJjZSxcblx0XHRcdFwiMCAtNFwiXG5cdFx0KTtcblx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZvY3VzIGhhbmRsaW5nIGZvciBjb25uZWN0ZWQgZmllbGRzLlxuXHQgKi9cblx0c2V0SW5saW5lRWRpdEZvY3VzKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmZvY3VzSGFuZGxpbmcodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIGlubGluZSBlZGl0IGFuZCBjYWxscyB0aGUgdG9nZ2xlQ29udHJvbExvY2FsRWRpdCBtZXRob2QgdG8gc2V0IHRoZSBjb250cm9sIHRvIGVkaXQgbW9kZS5cblx0ICovXG5cdHRyaWdnZXJJbmxpbmVFZGl0KHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuaW5saW5lRWRpdEVuYWJsZWQgfHwgdGhpcy5lZGl0TW9kZSAhPT0gXCJEaXNwbGF5XCIgfHwgdGhpcy5yZWFkT25seSB8fCAhdGhpcy5oYXNJbmxpbmVFZGl0KSB7XG5cdFx0XHQvLyBpZiB0aGUgZmllbGQgaXMgYWxyZWFkeSBpbiBlZGl0IG1vZGUgZG8gbm90aGluZ1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLl9pc0lubGluZUVkaXRTb3VyY2UgPSB0cnVlO1xuXHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3I/LnNldEVkaXRNb2RlKHRydWUpO1xuXHRcdHRoaXMuX2lubGluZUVkaXRJbmRpY2F0b3JQb3B1cD8uc2V0UG9zaXRpb24oUG9wdXAuRG9jay5FbmRUb3AsIFBvcHVwLkRvY2suRW5kQm90dG9tLCB0aGlzLl9zb3VyY2UsIFwiMCAtNFwiKTtcblxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0UGF0aCA9ICh0aGlzLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCB8IHVuZGVmaW5lZCk/LmdldENhbm9uaWNhbFBhdGgoKSA/PyBcIlwiO1xuXHRcdGNvbnN0IHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lID0gdGhpcy5nZXRJbmxpbmVFZGl0UHJvcGVydHlOYW1lKCk7XG5cdFx0aWYgKHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lKSB7XG5cdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LnN0YXJ0SW5saW5lRWRpdChwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZSwgYmluZGluZ0NvbnRleHRQYXRoLCB0aGlzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIGlubGluZSBlZGl0IGRpc2NhcmQuXG5cdCAqL1xuXHRhc3luYyB0cmlnZ2VySW5saW5lRWRpdERpc2NhcmQodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmhhc1BlbmRpbmdVc2VySW5wdXQoKSkge1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgcGVuZGluZyB1c2VyIGlucHV0IHdlIGRlbGF5IHRoZSBzYXZlIHRvIGFsbG93IGlubmVyIGNoYW5nZXMgZnJvbSB0aGUgbWRjIGNvbmRpdGlvbnMgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgbW9kZWxcblx0XHRcdGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdHNldFRpbWVvdXQocmVzb2x2ZSwgMjAwKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmlubGluZUVkaXRGbG93LmlubGluZUVkaXREaXNjYXJkKCk7XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIGlubGluZSBlZGl0IHNhdmUuXG5cdCAqIEByZXR1cm5zIFRoZSBpbmxpbmVFZGl0RmxvdyBzYXZlIHByb21pc2UuXG5cdCAqL1xuXHRhc3luYyB0cmlnZ2VySW5saW5lRWRpdFNhdmUodGhpczogRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCk6IFByb21pc2U8dm9pZCB8IHVuZGVmaW5lZD4ge1xuXHRcdGlmICh0aGlzLmhhc1BlbmRpbmdVc2VySW5wdXQoKSkge1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgcGVuZGluZyB1c2VyIGlucHV0IHdlIGRlbGF5IHRoZSBzYXZlIHRvIGFsbG93IGlubmVyIGNoYW5nZXMgZnJvbSB0aGUgbWRjIGNvbmRpdGlvbnMgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgbW9kZWxcblx0XHRcdGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdHNldFRpbWVvdXQocmVzb2x2ZSwgMjAwKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpPy5pbmxpbmVFZGl0Rmxvdy5pbmxpbmVFZGl0U2F2ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhvb2sgdG8gcmVhY3QgdG8gYW4gaW5saW5lIGVkaXQgc3RhcnQgbm90aWZpY2F0aW9uIGZvcm0gdGhlIGlubGluZUVkaXRGbG93LlxuXHQgKiBAcGFyYW0gaW5saW5lRWRpdENvbnRyb2xzIFRoZSBmaWVsZHMgdGhhdCBhcmUgY3VycmVudGx5IGluIGlubGluZSBlZGl0IG1vZGUuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzRm9ySW5saW5lRWRpdFxuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHRQYXRoRm9ySW5saW5lRWRpdFxuXHQgKi9cblx0QGNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyKFwiaW5saW5lRWRpdEZsb3dcIiwgXCJpbmxpbmVFZGl0U3RhcnRcIilcblx0aW5saW5lRWRpdFN0YXJ0KFxuXHRcdHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQsXG5cdFx0aW5saW5lRWRpdENvbnRyb2xzOiBDb250cm9sW10sXG5cdFx0cHJvcGVydGllc0ZvcklubGluZUVkaXQ6IHN0cmluZ1tdLFxuXHRcdGJpbmRpbmdDb250ZXh0UGF0aEZvcklubGluZUVkaXQ6IHN0cmluZ1xuXHQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5oYXNJbmxpbmVFZGl0KSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dFBhdGggPSAodGhpcy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQgfCB1bmRlZmluZWQpPy5nZXRDYW5vbmljYWxQYXRoKCkgPz8gXCJcIjtcblx0XHRcdGNvbnN0IHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lID0gdGhpcy5nZXRJbmxpbmVFZGl0UHJvcGVydHlOYW1lKCkgPz8gXCJcIjtcblx0XHRcdGlmICghcHJvcGVydGllc0ZvcklubGluZUVkaXQuaW5jbHVkZXMocHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUpIHx8IGJpbmRpbmdDb250ZXh0UGF0aEZvcklubGluZUVkaXQgIT09IGJpbmRpbmdDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnRvZ2dsZUlubGluZUVkaXRGaWVsZEdyb3VwSWQoRmllbGRHcm91cElkQWN0aW9uLkFkZCk7XG5cdFx0XHRjb25zdCB1aU1vZGVsID0gdGhpcy5nZXRNb2RlbChcInVpXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdGNvbnN0IHBhdGggPSBgLyR7dGhpcy5nZXRJZCgpfWA7XG5cdFx0XHR1aU1vZGVsLnNldFByb3BlcnR5KHBhdGgsIHsgaXNFZGl0YWJsZTogdHJ1ZSB9KTtcblx0XHRcdHRoaXMuYmluZEVsZW1lbnQoeyBwYXRoLCBtb2RlbDogXCJ1aVwiIH0pO1xuXHRcdFx0Ly9JbiBjYXNlIG9mIGNvbm5lY3RlZCBmaWVsZHMsIHdlIHNldCB0aGUgZm9jdXMgb24gdGhlIGVsZW1lbnQgdGhhdCB3YXMgY2xpY2tlZFxuXHRcdFx0aWYgKHRoaXMuX2lzSW5saW5lRWRpdFNvdXJjZSkge1xuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHQodGhpcy5nZXRDb250ZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGRXcmFwcGVyPik/LmdldENvbnRlbnRFZGl0KClbMF0/LmZvY3VzKCk7XG5cdFx0XHRcdFx0dGhpcy5pbnZhbGlkYXRlKCk7XG5cdFx0XHRcdH0sIDIwMCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJvcGVydGllc0ZvcklubGluZUVkaXQuaW5jbHVkZXMocHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUpKSB7XG5cdFx0XHRcdHRoaXMuaW5saW5lRWRpdFN0YXRlID0gXCJFZGl0YWJsZVwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFpbmxpbmVFZGl0Q29udHJvbHMuaW5jbHVkZXModGhpcykpIHtcblx0XHRcdFx0aW5saW5lRWRpdENvbnRyb2xzLnB1c2godGhpcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0IHRoZSBpbmRpY2F0b3IgcG9wdXAuXG5cdCAqL1xuXHRyZXNldEluZGljYXRvclBvcHVwKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHR0aGlzLl9pbmxpbmVFZGl0SW5kaWNhdG9yUG9wdXA/LmNsb3NlKCk7XG5cdFx0dGhpcy5faW5saW5lRWRpdEluZGljYXRvcj8uc2V0RWRpdE1vZGUoZmFsc2UpO1xuXHRcdHRoaXMuX2lzSW5saW5lRWRpdFNvdXJjZSA9IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgaW5saW5lIGVkaXQgcG9wdXAgYWZ0ZXIgc2F2ZSBvciBkaXNjYXJkLlxuXHQgKiBAcGFyYW0gcmVmcmVzaERlc2NyaXB0aW9uIElmIHRoZSBkZXNjcmlwdGlvbiBzaG91bGQgYmUgcmVmcmVzaGVkLlxuXHQgKi9cblx0aW5saW5lRWRpdEVuZCh0aGlzOiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0LCByZWZyZXNoRGVzY3JpcHRpb24/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaW5saW5lRWRpdFN0YXRlID09PSBcIkVkaXRhYmxlXCIpIHtcblx0XHRcdGlmIChyZWZyZXNoRGVzY3JpcHRpb24pIHtcblx0XHRcdFx0dGhpcy5yZWZyZXNoRGVzY3JpcHRpb25JZk5lZWRlZCgpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy50b2dnbGVJbmxpbmVFZGl0RmllbGRHcm91cElkKEZpZWxkR3JvdXBJZEFjdGlvbi5SZW1vdmUpO1xuXHRcdFx0dGhpcy51bmJpbmRFbGVtZW50KFwidWlcIik7XG5cdFx0XHR0aGlzLmlubGluZUVkaXRTdGF0ZSA9IFwiQ2xvc2VkXCI7XG5cdFx0XHR0aGlzLnJlc2V0SW5kaWNhdG9yUG9wdXAoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGZvcmNlIHRoZSBtb2RlbCByZWZyZXNoIGZvciB0aGUgZGVzY3JpcHRpb24gaWYgaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCB2aWEgIGEgYmluZGluZyB3aXRoIGEgJCRub1BhdGNoIHBhcmFtZXRlci5cblx0ICovXG5cdHJlZnJlc2hEZXNjcmlwdGlvbklmTmVlZGVkKHRoaXM6IEVuaGFuY2VXaXRoVUk1PEZpZWxkPiAmIElubGluZUVkaXQpOiB2b2lkIHtcblx0XHQvLyB3aGVuIHRoZSBmaWVsZCB1c2VzIGEgbWRjIGZpZWxkIHRoZSBkZXNjcmlwdGlvbiBpcyB1cGRhdGVkIHZpYSB0aGUgYWRkaXRpb25hbFZhbHVlIGJpbmRpbmdcblx0XHQvLyB0aGF0IGhhcyBhIG5vUGF0Y2ggcGFyYW1ldGVyIHNvIGl0IGRvZXNuJ3QgZ2V0IHJldmVydGVkIGJ5YSByZXNldENoYW5nZXNcblx0XHRpZiAodGhpcy5pc0E8RmllbGQ+KFwic2FwLmZlLm1hY3Jvcy5GaWVsZFwiKSkge1xuXHRcdFx0Y29uc3QgY29udGVudCA9IHRoaXMuY29udGVudD8uaXNBPEVuaGFuY2VXaXRoVUk1PEZpZWxkV3JhcHBlcj4+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWVsZFdyYXBwZXJcIilcblx0XHRcdFx0PyB0aGlzLmNvbnRlbnQuZ2V0Q29udGVudEVkaXQoKVswXVxuXHRcdFx0XHQ6IG51bGw7XG5cdFx0XHRpZiAoY29udGVudCAmJiBjb250ZW50LmlzQTxNZGNGaWVsZD4oXCJzYXAudWkubWRjLkZpZWxkXCIpKSB7XG5cdFx0XHRcdGNvbnN0IGRlc2NyaXB0aW9uUGF0aCA9IGNvbnRlbnQuZ2V0QmluZGluZyhcImFkZGl0aW9uYWxWYWx1ZVwiKT8uZ2V0UGF0aCgpO1xuXHRcdFx0XHRpZiAoZGVzY3JpcHRpb25QYXRoKSB7XG5cdFx0XHRcdFx0KHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KT8ucmVxdWVzdFNpZGVFZmZlY3RzKFtkZXNjcmlwdGlvblBhdGhdLCBcIiRhdXRvXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O01Bb0JLQSxrQkFBa0IsMEJBQWxCQSxrQkFBa0I7SUFBbEJBLGtCQUFrQjtJQUFsQkEsa0JBQWtCO0lBQUEsT0FBbEJBLGtCQUFrQjtFQUFBLEVBQWxCQSxrQkFBa0I7RUFBQSxJQUtGQyxVQUFVLElB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
|
|
@@ -561,7 +561,13 @@ export default class InlineEdit {
|
|
|
561
561
|
/**
|
|
562
562
|
* Triggers the inline edit discard.
|
|
563
563
|
*/
|
|
564
|
-
triggerInlineEditDiscard(this: EnhanceWithUI5<Field> & InlineEdit): void {
|
|
564
|
+
async triggerInlineEditDiscard(this: EnhanceWithUI5<Field> & InlineEdit): Promise<void> {
|
|
565
|
+
if (this.hasPendingUserInput()) {
|
|
566
|
+
// If there is pending user input we delay the save to allow inner changes from the mdc conditions to be propagated to the model
|
|
567
|
+
await new Promise<void>((resolve) => {
|
|
568
|
+
setTimeout(resolve, 200);
|
|
569
|
+
});
|
|
570
|
+
}
|
|
565
571
|
this.getPageController()?.inlineEditFlow.inlineEditDiscard();
|
|
566
572
|
}
|
|
567
573
|
|
|
@@ -569,7 +575,13 @@ export default class InlineEdit {
|
|
|
569
575
|
* Triggers the inline edit save.
|
|
570
576
|
* @returns The inlineEditFlow save promise.
|
|
571
577
|
*/
|
|
572
|
-
triggerInlineEditSave(this: EnhanceWithUI5<Field> & InlineEdit): Promise<void
|
|
578
|
+
async triggerInlineEditSave(this: EnhanceWithUI5<Field> & InlineEdit): Promise<void | undefined> {
|
|
579
|
+
if (this.hasPendingUserInput()) {
|
|
580
|
+
// If there is pending user input we delay the save to allow inner changes from the mdc conditions to be propagated to the model
|
|
581
|
+
await new Promise<void>((resolve) => {
|
|
582
|
+
setTimeout(resolve, 200);
|
|
583
|
+
});
|
|
584
|
+
}
|
|
573
585
|
return this.getPageController()?.inlineEditFlow.inlineEditSave();
|
|
574
586
|
}
|
|
575
587
|
|
|
@@ -19,7 +19,6 @@ sap.ui.define(["sap/fe/core/buildingBlocks/templating/BuildingBlockSupport", "sa
|
|
|
19
19
|
/**
|
|
20
20
|
* Content of an action command
|
|
21
21
|
* @private
|
|
22
|
-
* @experimental
|
|
23
22
|
*/
|
|
24
23
|
let ActionCommandBlock = (_dec = defineBuildingBlock({
|
|
25
24
|
name: "ActionCommand",
|
|
@@ -130,4 +129,4 @@ sap.ui.define(["sap/fe/core/buildingBlocks/templating/BuildingBlockSupport", "sa
|
|
|
130
129
|
_exports = ActionCommandBlock;
|
|
131
130
|
return _exports;
|
|
132
131
|
}, false);
|
|
133
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
132
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25Db21tYW5kQmxvY2siLCJfZGVjIiwiZGVmaW5lQnVpbGRpbmdCbG9jayIsIm5hbWUiLCJuYW1lc3BhY2UiLCJfZGVjMiIsImJsb2NrQXR0cmlidXRlIiwidHlwZSIsInJlcXVpcmVkIiwiX2RlYzMiLCJfZGVjNCIsIl9kZWM1IiwiX2RlYzYiLCJfZGVjNyIsIl9kZWM4IiwiX2RlYzkiLCJibG9ja0V2ZW50IiwiX2RlYzEwIiwiX2RlYzExIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CdWlsZGluZ0Jsb2NrVGVtcGxhdCIsInByb3BzIiwiX2NvbnRyb2xDb25maWd1cmF0aW9uIiwiX3Zpc2l0b3JTZXR0aW5ncyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZGVzY3JpcHRvcjgiLCJfZGVzY3JpcHRvcjkiLCJfZGVzY3JpcHRvcjEwIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldFRlbXBsYXRlIiwiZ2V0Q29tbWFuZEV4ZWN1dGlvbkZvckFjdGlvbiIsImNvbW1hbmQiLCJhY3Rpb24iLCJ2aXNpYmxlIiwib25FeGVjdXRlQWN0aW9uIiwib25FeGVjdXRlSUJOIiwib25FeGVjdXRlTWFuaWZlc3QiLCJpc0FjdGlvbkVuYWJsZWQiLCJpc0lCTkVuYWJsZWQiLCJpc0VuYWJsZWQiLCJCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkFjdGlvbkNvbW1hbmQuYmxvY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBibG9ja0F0dHJpYnV0ZSwgYmxvY2tFdmVudCwgZGVmaW5lQnVpbGRpbmdCbG9jayB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBnZXRDb21tYW5kRXhlY3V0aW9uRm9yQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvQWN0aW9uQ29tbWFuZFwiO1xuaW1wb3J0IHsgdHlwZSBDb21tYW5kRXhlY3V0aW9uJEV4ZWN1dGVFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db21tYW5kRXhlY3V0aW9uXCI7XG5cbi8qKlxuICogQ29udGVudCBvZiBhbiBhY3Rpb24gY29tbWFuZFxuICogQHByaXZhdGVcbiAqL1xuQGRlZmluZUJ1aWxkaW5nQmxvY2soe1xuXHRuYW1lOiBcIkFjdGlvbkNvbW1hbmRcIixcblx0bmFtZXNwYWNlOiBcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWxcIlxufSlcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFjdGlvbkNvbW1hbmRCbG9jayBleHRlbmRzIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSB7XG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic3RyaW5nXCIsIHJlcXVpcmVkOiB0cnVlIH0pXG5cdHB1YmxpYyBpZCE6IHN0cmluZztcblxuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcIm9iamVjdFwiLCByZXF1aXJlZDogdHJ1ZSB9KVxuXHRwdWJsaWMgYWN0aW9uITogQmFzZUFjdGlvbjtcblxuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRwdWJsaWMgaXNBY3Rpb25FbmFibGVkPzogYm9vbGVhbjtcblxuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRwdWJsaWMgaXNJQk5FbmFibGVkPzogYm9vbGVhbjtcblxuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRwdWJsaWMgaXNFbmFibGVkPzogYm9vbGVhbjtcblxuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRwdWJsaWMgdmlzaWJsZT86IGJvb2xlYW47XG5cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRwdWJsaWMgY29tbWFuZD86IHN0cmluZztcblxuXHRAYmxvY2tFdmVudCgpXG5cdG9uRXhlY3V0ZUFjdGlvbj86IHN0cmluZztcblxuXHRAYmxvY2tFdmVudCgpXG5cdG9uRXhlY3V0ZUlCTj86IHN0cmluZztcblxuXHRAYmxvY2tFdmVudCgpXG5cdG9uRXhlY3V0ZU1hbmlmZXN0Pzogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wZXJ0aWVzT2Y8QWN0aW9uQ29tbWFuZEJsb2NrPiwgX2NvbnRyb2xDb25maWd1cmF0aW9uPzogdW5rbm93biwgX3Zpc2l0b3JTZXR0aW5ncz86IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MpIHtcblx0XHRzdXBlcihwcm9wcywgX2NvbnRyb2xDb25maWd1cmF0aW9uLCBfdmlzaXRvclNldHRpbmdzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYnVpbGRpbmcgYmxvY2sgdGVtcGxhdGUgZnVuY3Rpb24uXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmdcblx0ICovXG5cdGdldFRlbXBsYXRlKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGdldENvbW1hbmRFeGVjdXRpb25Gb3JBY3Rpb24odGhpcy5jb21tYW5kLCB0aGlzLmFjdGlvbiwge1xuXHRcdFx0dmlzaWJsZTogdGhpcy52aXNpYmxlLFxuXHRcdFx0b25FeGVjdXRlQWN0aW9uOiB0aGlzLm9uRXhlY3V0ZUFjdGlvbiBhcyB1bmtub3duIGFzIChldmVudDogQ29tbWFuZEV4ZWN1dGlvbiRFeGVjdXRlRXZlbnQpID0+IHZvaWQsXG5cdFx0XHRvbkV4ZWN1dGVJQk46IHRoaXMub25FeGVjdXRlSUJOIGFzIHVua25vd24gYXMgKGV2ZW50OiBDb21tYW5kRXhlY3V0aW9uJEV4ZWN1dGVFdmVudCkgPT4gdm9pZCxcblx0XHRcdG9uRXhlY3V0ZU1hbmlmZXN0OiB0aGlzLm9uRXhlY3V0ZU1hbmlmZXN0IGFzIHVua25vd24gYXMgKGV2ZW50OiBDb21tYW5kRXhlY3V0aW9uJEV4ZWN1dGVFdmVudCkgPT4gdm9pZCxcblx0XHRcdGlzQWN0aW9uRW5hYmxlZDogdGhpcy5pc0FjdGlvbkVuYWJsZWQsXG5cdFx0XHRpc0lCTkVuYWJsZWQ6IHRoaXMuaXNJQk5FbmFibGVkLFxuXHRcdFx0aXNFbmFibGVkOiB0aGlzLmlzRW5hYmxlZFxuXHRcdH0pIGFzIHVua25vd24gYXMgc3RyaW5nO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQVFBO0FBQ0E7QUFDQTtBQUNBO0VBSEEsSUFRcUJBLGtCQUFrQixJQUFBQyxJQUFBLEdBSnRDQyxtQkFBbUIsQ0FBQztJQUNwQkMsSUFBSSxFQUFFLGVBQWU7SUFDckJDLFNBQVMsRUFBRTtFQUNaLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRUFDLGNBQWMsQ0FB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QUFrRCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTdCLFlBQUEsR0FBQXlCLHlCQUFBLENBQUFsQyxPQUFBLENBQUFxQixTQUFBLGFBQUFoQyxLQUFBO0lBQUE4QyxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTVCLFlBQUEsR0FBQXdCLHlCQUFBLENBQUFsQyxPQUFBLENBQUFxQixTQUFBLHNCQUFBL0IsS0FBQTtJQUFBNkMsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUEzQixZQUFBLEdBQUF1Qix5QkFBQSxDQUFBbEMsT0FBQSxDQUFBcUIsU0FBQSxtQkFBQTlCLEtBQUE7SUFBQTRDLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBMUIsWUFBQSxHQUFBc0IseUJBQUEsQ0FBQWxDLE9BQUEsQ0FBQXFCLFNBQUEsZ0JBQUE3QixLQUFBO0lBQUEyQyxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXpCLFlBQUEsR0FBQXFCLHlCQUFBLENBQUFsQyxPQUFBLENBQUFxQixTQUFBLGNBQUE1QixLQUFBO0lBQUEwQyxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXhCLFlBQUEsR0FBQW9CLHlCQUFBLENBQUFsQyxPQUFBLENBQUFxQixTQUFBLGNBQUEzQixLQUFBO0lBQUF5QyxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXZCLFlBQUEsR0FBQW1CLHlCQUFBLENBQUFsQyxPQUFBLENBQUFxQixTQUFBLHNCQUFBMUIsS0FBQTtJQUFBd0MsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUF0QixZQUFBLEdBQUFrQix5QkFBQSxDQUFBbEMsT0FBQSxDQUFBcUIsU0FBQSxtQkFBQXhCLE1BQUE7SUFBQXNDLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBckIsYUFBQSxHQUFBaUIseUJBQUEsQ0FBQWxDLE9BQUEsQ0FBQXFCLFNBQUEsd0JBQUF2QixNQUFBO0lBQUFxQyxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXRDLE9BQUEsTUFBQUQsTUFBQTtFQUFBbUIsUUFBQSxHQUFBdEMsa0JBQUE7RUFBQSxPQUFBc0MsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
|