@sapui5/sap.fe.macros 1.138.0 → 1.139.1
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/Chart.js +1 -1
- package/src/sap/fe/macros/Chart.tsx +1 -1
- 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 +21 -4
- package/src/sap/fe/macros/Field.ts +21 -3
- package/src/sap/fe/macros/FooterContent.js +40 -10
- package/src/sap/fe/macros/FooterContent.tsx +44 -8
- package/src/sap/fe/macros/FormElement.js +2 -2
- package/src/sap/fe/macros/FormElement.ts +1 -2
- package/src/sap/fe/macros/MultiValueField.js +17 -4
- package/src/sap/fe/macros/MultiValueField.tsx +7 -2
- package/src/sap/fe/macros/RichTextEditor.js +30 -6
- package/src/sap/fe/macros/RichTextEditor.tsx +34 -7
- package/src/sap/fe/macros/Share.js +73 -40
- package/src/sap/fe/macros/Share.tsx +29 -1
- 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 +30 -30
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +40 -43
- 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/chart/ChartDelegate.js +4 -4
- package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
- 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/BuildingBlockObjectProperty.js +5 -1
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -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 +86 -3
- package/src/sap/fe/macros/controls/FilterBar.ts +97 -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/Section.js +3 -2
- package/src/sap/fe/macros/controls/Section.ts +2 -1
- 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/designtime/Designtime.helper.js +12 -2
- package/src/sap/fe/macros/designtime/Designtime.helper.ts +12 -0
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +16 -5
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +6 -1
- 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 +38 -8
- package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
- package/src/sap/fe/macros/filter/FilterUtils.js +7 -1
- package/src/sap/fe/macros/filter/FilterUtils.ts +7 -0
- 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.block.js +6 -2
- package/src/sap/fe/macros/form/Form.block.ts +4 -1
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
- 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/formatters/TableFormatter.js +10 -1
- package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
- 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/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 +4 -2
- package/src/sap/fe/macros/internal/FilterField.block.ts +3 -1
- package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +52 -12
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +54 -5
- 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 +10 -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/TableDelegate.js +4 -4
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +11 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +12 -7
- 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 +11 -6
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +12 -7
- package/src/sap/fe/macros/messagebundle.properties +37 -29
- package/src/sap/fe/macros/messagebundle_ar.properties +5 -3
- package/src/sap/fe/macros/messagebundle_bg.properties +6 -4
- package/src/sap/fe/macros/messagebundle_ca.properties +8 -6
- package/src/sap/fe/macros/messagebundle_cnr.properties +5 -3
- package/src/sap/fe/macros/messagebundle_cs.properties +4 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +7 -5
- package/src/sap/fe/macros/messagebundle_da.properties +6 -4
- package/src/sap/fe/macros/messagebundle_de.properties +11 -9
- package/src/sap/fe/macros/messagebundle_el.properties +7 -5
- package/src/sap/fe/macros/messagebundle_en.properties +8 -6
- package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -6
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +8 -6
- package/src/sap/fe/macros/messagebundle_es.properties +6 -4
- package/src/sap/fe/macros/messagebundle_es_MX.properties +6 -4
- package/src/sap/fe/macros/messagebundle_et.properties +5 -3
- package/src/sap/fe/macros/messagebundle_fi.properties +8 -6
- package/src/sap/fe/macros/messagebundle_fr.properties +6 -4
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -6
- package/src/sap/fe/macros/messagebundle_hi.properties +6 -4
- package/src/sap/fe/macros/messagebundle_hr.properties +6 -4
- package/src/sap/fe/macros/messagebundle_hu.properties +4 -2
- package/src/sap/fe/macros/messagebundle_id.properties +8 -6
- package/src/sap/fe/macros/messagebundle_it.properties +4 -2
- package/src/sap/fe/macros/messagebundle_iw.properties +5 -3
- package/src/sap/fe/macros/messagebundle_ja.properties +5 -3
- package/src/sap/fe/macros/messagebundle_kk.properties +5 -3
- package/src/sap/fe/macros/messagebundle_ko.properties +4 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +6 -4
- package/src/sap/fe/macros/messagebundle_lv.properties +5 -3
- package/src/sap/fe/macros/messagebundle_mk.properties +5 -3
- package/src/sap/fe/macros/messagebundle_ms.properties +8 -6
- package/src/sap/fe/macros/messagebundle_nl.properties +7 -5
- package/src/sap/fe/macros/messagebundle_no.properties +6 -4
- package/src/sap/fe/macros/messagebundle_pl.properties +6 -4
- package/src/sap/fe/macros/messagebundle_pt.properties +7 -5
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -4
- package/src/sap/fe/macros/messagebundle_ro.properties +7 -5
- package/src/sap/fe/macros/messagebundle_ru.properties +4 -2
- package/src/sap/fe/macros/messagebundle_sh.properties +5 -3
- package/src/sap/fe/macros/messagebundle_sk.properties +5 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +6 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +5 -3
- package/src/sap/fe/macros/messagebundle_sv.properties +5 -3
- package/src/sap/fe/macros/messagebundle_th.properties +4 -2
- package/src/sap/fe/macros/messagebundle_tr.properties +4 -2
- package/src/sap/fe/macros/messagebundle_uk.properties +10 -8
- package/src/sap/fe/macros/messagebundle_vi.properties +6 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +5 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +5 -3
- package/src/sap/fe/macros/messages/MessageButton.js +17 -19
- package/src/sap/fe/macros/messages/MessageButton.ts +24 -22
- 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 +32 -6
- 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/Table.js +7 -1
- package/src/sap/fe/macros/table/Table.tsx +7 -1
- package/src/sap/fe/macros/table/TableAPI.js +150 -133
- package/src/sap/fe/macros/table/TableAPI.ts +20 -3
- 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/TableRuntime.js +3 -3
- package/src/sap/fe/macros/table/TableRuntime.ts +2 -2
- package/src/sap/fe/macros/table/TableSizeHelper.js +3 -3
- package/src/sap/fe/macros/table/TableSizeHelper.ts +5 -2
- package/src/sap/fe/macros/table/TreeTable.js +7 -1
- package/src/sap/fe/macros/table/TreeTable.tsx +7 -1
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +27 -20
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +35 -26
- 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/MassEditDialog.js +10 -10
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +8 -8
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +7 -6
- 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 +4 -1
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +3 -0
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +37 -8
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +47 -16
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -6
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -2
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +15 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +17 -2
|
@@ -739,7 +739,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
739
739
|
getOperatorsForProperty: function (sProperty, sEntitySetPath, oContext, sType, bUseSemanticDateRange, settings) {
|
|
740
740
|
const oFilterRestrictions = CommonUtils.getFilterRestrictionsByPath(sEntitySetPath, oContext);
|
|
741
741
|
const aEqualsOps = ["EQ"];
|
|
742
|
-
const aSingleRangeOps = ["EQ", "GE", "LE", "LT", "GT", "BT", "NOTLE", "NOTLT", "NOTGE", "NOTGT"];
|
|
742
|
+
const aSingleRangeOps = ["EQ", "GE", "LE", "LT", "GT", "BT", "NE", "NOTBT", "NOTLE", "NOTLT", "NOTGE", "NOTGT"];
|
|
743
743
|
const aSingleRangeDTBasicOps = ["EQ", "BT"];
|
|
744
744
|
const aMultiRangeOps = ["EQ", "GE", "LE", "LT", "GT", "BT", "NE", "NOTBT", "NOTLE", "NOTLT", "NOTGE", "NOTGT"];
|
|
745
745
|
const aSearchExpressionOps = ["Contains", "NotContains", "StartsWith", "NotStartsWith", "EndsWith", "NotEndsWith"];
|
|
@@ -831,4 +831,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
831
831
|
CommonHelper.getSortConditions.requiresIContext = true;
|
|
832
832
|
return CommonHelper;
|
|
833
833
|
}, false);
|
|
834
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2V0UmVzdHJpY3Rpb25zIiwiYURlZmF1bHRPcHMiLCJhRXhwcmVzc2lvbk9wcyIsImZpbHRlciIsInNFbGVtZW50IiwiaW5jbHVkZXMiLCJfZ2V0RGVmYXVsdE9wZXJhdG9ycyIsInNQcm9wZXJ0eVR5cGUiLCJvRGF0YUNsYXNzIiwiVHlwZU1hcCIsImdldERhdGFUeXBlQ2xhc3NOYW1lIiwib0Jhc2VUeXBlIiwiZ2V0QmFzZVR5cGUiLCJGaWx0ZXJPcGVyYXRvclV0aWwiLCJnZXRPcGVyYXRvcnNGb3JUeXBlIiwiVmFsdWVDb2xvciIsIm1MaWJyYXJ5IiwiQ29tbW9uSGVscGVyIiwiZ2V0UGF0aFRvS2V5Iiwib0N0eCIsImdldE9iamVjdCIsImdldFBhcmFtZXRlckVkaXRNb2RlIiwidGFyZ2V0Iiwib0ludGVyZmFjZSIsIm9Nb2RlbCIsImNvbnRleHQiLCJnZXRNb2RlbCIsInNQcm9wZXJ0eVBhdGgiLCJnZXRQYXRoIiwib0Fubm90YXRpb25zIiwiZmllbGRDb250cm9sIiwiaW1tdXRhYmxlIiwiY29tcHV0ZWQiLCJzRWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRWRpdGFibGUiLCJSZWFkT25seSIsIiRFbnVtTWVtYmVyIiwiRGlzYWJsZWQiLCIkUGF0aCIsImdldE1ldGFQYXRoIiwidW5kZWZpbmVkIiwiZ2V0TWV0YU1vZGVsSWQiLCJjb252ZXJ0VHlwZXMiLCJnZXRJZCIsImlzRGVza3RvcCIsIkRldmljZSIsInN5c3RlbSIsImRlc2t0b3AiLCJnZXRUYXJnZXRDb2xsZWN0aW9uUGF0aCIsIm5hdkNvbGxlY3Rpb24iLCJzUGF0aCIsIm1vZGVsIiwibWV0YU1vZGVsIiwiaXNBIiwiZ2V0TWV0YU1vZGVsIiwiYVBhcnRzIiwic3BsaXQiLCJzUGFydCIsImVudGl0eVNldCIsImxlbmd0aCIsIm5hdmlnYXRpb25Db2xsZWN0aW9uIiwic2xpY2UiLCJqb2luIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJvRGF0YUZpZWxkIiwic2tpcEhpZGRlbkZpbHRlcnMiLCJzUHJvcGVydHlMb2NhdGlvblBhdGgiLCJnZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aCIsInNQcm9wZXJ0eSIsInJlcGxhY2UiLCIkVHlwZSIsImlMZW5ndGgiLCJzQ29sbGVjdGlvblBhdGgiLCJsYXN0SW5kZXhPZiIsImluZGV4T2YiLCJnb3RvQWN0aW9uUGFyYW1ldGVyIiwib0NvbnRleHQiLCJzUHJvcGVydHlOYW1lIiwiQ29tbW9uVXRpbHMiLCJnZXRQYXJhbWV0ZXJQYXRoIiwiZ2V0RW50aXR5U2V0TmFtZSIsIm9NZXRhTW9kZWwiLCJzRW50aXR5VHlwZSIsIm9FbnRpdHlDb250YWluZXIiLCJrZXkiLCJnZXRBY3Rpb25QYXRoIiwib0FjdGlvbiIsImJSZXR1cm5Pbmx5UGF0aCIsInNBY3Rpb25OYW1lIiwiYkNoZWNrU3RhdGljVmFsdWUiLCJzQ29udGV4dFBhdGgiLCJzRW50aXR5VHlwZU5hbWUiLCJzRW50aXR5TmFtZSIsInNCaW5kaW5nUGFyYW1ldGVyIiwiZ2V0TmF2aWdhdGlvbkNvbnRleHQiLCJPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlciIsImdldE5hdmlnYXRpb25QYXRoIiwiYktlZXBQcm9wZXJ0eSIsImJTdGFydHNXaXRoRW50aXR5VHlwZSIsInN0YXJ0c1dpdGgiLCJwYXJ0Iiwic2hpZnQiLCJwb3AiLCJnZXRBY3Rpb25Db250ZXh0IiwiZ2V0UGF0aFRvQm91bmRBY3Rpb25PdmVybG9hZCIsImFkZFNpbmdsZVF1b3RlcyIsInNWYWx1ZSIsImJFc2NhcGUiLCJlc2NhcGVTaW5nbGVRdW90ZXMiLCJnZW5lcmF0ZUZ1bmN0aW9uIiwic0Z1bmNOYW1lIiwic1BhcmFtcyIsImkiLCJhcmd1bWVudHMiLCJzRnVuY3Rpb24iLCJnZXRIZWFkZXJEYXRhUG9pbnRMaW5rVmlzaWJpbGl0eSIsInBhdGgiLCJpc0NsaWNrYWJsZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiaWZFbHNlIiwiY29uc3RhbnQiLCJlcXVhbCIsInBhdGhJbk1vZGVsIiwibm90RXF1YWwiLCJvYmplY3RUb1N0cmluZyIsIm9QYXJhbXMiLCJpTnVtYmVyT2ZLZXlzIiwiT2JqZWN0Iiwia2V5cyIsInNLZXkiLCJyZW1vdmVFc2NhcGVDaGFyYWN0ZXJzIiwic0V4cHJlc3Npb24iLCJzdHJpbmdpZnlPYmplY3QiLCJzU3RyaW5naWZpZWQiLCJvT2JqZWN0IiwiSlNPTiIsInBhcnNlIiwiQXJyYXkiLCJpc0FycmF5Iiwib1VJNU9iamVjdCIsInVpNW9iamVjdCIsImFzc2lnbiIsInN0cmluZ2lmeSIsInNUeXBlIiwiTG9nIiwiZXJyb3IiLCJFcnJvciIsInN0cmluZ2lmeUN1c3RvbURhdGEiLCJ2RGF0YSIsIkNvbnRleHQiLCJwYXJzZUN1c3RvbURhdGEiLCJoYXNPd25Qcm9wZXJ0eSIsImdldENvbnRleHRQYXRoIiwib1ZhbHVlIiwiZ2V0U29ydENvbmRpdGlvbnMiLCJvUHJlc2VudGF0aW9uVmFyaWFudCIsInNQcmVzZW50YXRpb25WYXJpYW50UGF0aCIsIl9pc1ByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiU29ydE9yZGVyIiwiYVNvcnRDb25kaXRpb25zIiwic29ydGVycyIsInNFbnRpdHlQYXRoIiwiZm9yRWFjaCIsIm9Db25kaXRpb24iLCJvU29ydFByb3BlcnR5Iiwib1NvcnRlciIsIkR5bmFtaWNQcm9wZXJ0eSIsIiRBbm5vdGF0aW9uUGF0aCIsIk5hbWUiLCJQcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJuYW1lIiwiZGVzY2VuZGluZyIsIkRlc2NlbmRpbmciLCJwdXNoIiwiYW5ub3RhdGlvblBhdGgiLCJjcmVhdGVQcmVzZW50YXRpb25QYXRoQ29udGV4dCIsIm9QcmVzZW50YXRpb25Db250ZXh0IiwiYVBhdGhzIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJnZXRQcmVzc0hhbmRsZXJGb3JEYXRhRmllbGRGb3JJQk4iLCJzQ29udGV4dCIsImJOYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2ciLCJmb3JDb250ZXh0TWVudSIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm5hdmlnYXRpb25Db250ZXh0cyIsIlJlcXVpcmVzQ29udGV4dCIsIklubGluZSIsImFwcGxpY2FibGVQcm9wZXJ0eSIsIm5vdEFwcGxpY2FibGVQcm9wZXJ0eSIsImFwcGxpY2FibGVDb250ZXh0cyIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwibm90QXBwbGljYWJsZUNvbnRleHRzIiwibGFiZWwiLCJMYWJlbCIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJnZXRFbnRpdHlTZXQiLCJNb2RlbEhlbHBlciIsImdldEVudGl0eVNldFBhdGgiLCJnZXRDcml0aWNhbGl0eUNhbGN1bGF0aW9uQmluZGluZyIsInNJbXByb3ZlbWVudERpcmVjdGlvbiIsInNEZXZpYXRpb25Mb3ciLCJzVG9sZXJhbmNlTG93Iiwic0FjY2VwdGFuY2VMb3ciLCJzQWNjZXB0YW5jZUhpZ2giLCJzVG9sZXJhbmNlSGlnaCIsInNEZXZpYXRpb25IaWdoIiwic0NyaXRpY2FsaXR5RXhwcmVzc2lvbiIsIk5ldXRyYWwiLCJJbmZpbml0eSIsIkdvb2QiLCJDcml0aWNhbCIsIndhcm5pbmciLCJnZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgiLCJpTWVhc3VyZSIsIm9DaGFydEFubm90YXRpb25zIiwiaXNNaWNyb0NoYXJ0IiwiYU1lYXN1cmVzIiwic01lYXN1cmVQcm9wZXJ0eVBhdGgiLCJNZWFzdXJlcyIsInZhbHVlIiwiRHluYW1pY01lYXN1cmVzIiwiYk1lYXN1cmVBdHRyaWJ1dGVFeGlzdHMiLCJhTWVhc3VyZUF0dHJpYnV0ZXMiLCJNZWFzdXJlQXR0cmlidXRlcyIsImlNZWFzdXJlQXR0cmlidXRlIiwiZm5DaGVja01lYXN1cmUiLCJzTWVhc3VyZVBhdGgiLCJvTWVhc3VyZUF0dHJpYnV0ZSIsImluZGV4IiwiTWVhc3VyZSIsIkR5bmFtaWNNZWFzdXJlIiwic29tZSIsImJpbmQiLCJnZXRNZWFzdXJlQXR0cmlidXRlIiwic0NoYXJ0QW5ub3RhdGlvblBhdGgiLCJyZXF1ZXN0T2JqZWN0IiwidGhlbiIsInNNZWFzdXJlQXR0cmlidXRlUGF0aCIsIkRhdGFQb2ludCIsImdldE1lYXN1cmVBdHRyaWJ1dGVGb3JNZWFzdXJlIiwic3Vic3RyaW5nIiwiaXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50Iiwib1RhcmdldENvbGxlY3Rpb25Db250YWluc1RhcmdldCIsIm9UYWJsZU1ldGFkYXRhIiwicGFyZW50RW50aXR5U2V0Iiwic1BhcmVudEVudGl0eVNldFBhdGgiLCJvRHJhZnRSb290Iiwib0RyYWZ0Tm9kZSIsImdldERhdGFGcm9tVGVtcGxhdGUiLCJkYXRhRWxlbWVudCIsInNwbGl0UGF0aCIsImRhdGFLZXkiLCJjb25uZWN0ZWREYXRhUGF0aCIsImNvbm5lY3RlZE9iamVjdCIsInRlbXBsYXRlIiwiVGVtcGxhdGUiLCJzcGxpdFRlbXAiLCJ0ZW1wQXJyYXkiLCJ0cmltIiwiRGF0YSIsIm5vdExhc3RJbmRleCIsImVsZW1lbnQiLCJpc0xhc3RJbmRleCIsInRlbXBsYXRlSW5mbyIsImxhc3RJbmRleCIsImdldERlbGltaXRlciIsInNldE1ldGFNb2RlbCIsImdldFBhcmFtZXRlcnMiLCJvUGFyYW1ldGVySW5mbyIsImdldFBhcmFtZXRlckluZm8iLCJwYXJhbWV0ZXJQcm9wZXJ0aWVzIiwiYnVpbGRBY3Rpb25XcmFwcGVyIiwib1RoaXMiLCJhUGFyYW1zIiwicmVmIiwiaGFuZGxlck1vZHVsZSIsImhhbmRsZXJNZXRob2QiLCJpZCIsImludGVybmFsTW9kZWxQYXRoIiwib0FkZGl0aW9uYWxQYXJhbXMiLCJjb250ZXh0cyIsImZuIiwiZ2V0SGlkZGVuUGF0aEV4cHJlc3Npb24iLCJkYXRhRmllbGRBbm5vdGF0aW9ucyIsImhpZGRlbiIsImdldE9wZXJhdG9yc0ZvclByb3BlcnR5Iiwic0VudGl0eVNldFBhdGgiLCJiVXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJzZXR0aW5ncyIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJhRXF1YWxzT3BzIiwiYVNpbmdsZVJhbmdlT3BzIiwiYVNpbmdsZVJhbmdlRFRCYXNpY09wcyIsImFNdWx0aVJhbmdlT3BzIiwiYVNlYXJjaEV4cHJlc3Npb25PcHMiLCJhQmFzaWNTZW1hbnRpY0RhdGVPcHMiLCJTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJnZXRCYXNpY1NlbWFudGljRGF0ZU9wZXJhdGlvbnMiLCJiU2VtYW50aWNEYXRlUmFuZ2UiLCJhU2VtYW50aWNEYXRlT3BzIiwib1NldHRpbmdzIiwiY3VzdG9tRGF0YSIsIm9wZXJhdG9yQ29uZmlndXJhdGlvbiIsImdldEZpbHRlck9wZXJhdGlvbnMiLCJEZWZhdWx0U2VtYW50aWNEYXRlT3BlcmF0b3JzIiwiZ2V0U2VtYW50aWNEYXRlT3BlcmF0aW9ucyIsImFEZWZhdWx0T3BlcmF0b3JzIiwic3VwcG9ydGVkT3BlcmF0b3JzIiwiZXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJFeHRlbmRlZFNlbWFudGljRGF0ZU9wZXJhdG9ycyIsInJlc3RyaWN0aW9ucyIsIkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyIsInNBbGxvd2VkRXhwcmVzc2lvbiIsImdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24iLCJzaW5nbGVWYWx1ZURhdGVPcHMiLCJnZXRTaW5nbGVWYWx1ZURhdGVPcGVyYXRpb25zIiwiYVNpbmdsZVZhbHVlT3BzIiwibXVsdGlWYWx1ZU9wZXJhdG9ycyIsInNPcGVyYXRvcnMiLCJjb25jYXQiLCJnZXRPcGVyYXRvcnNGb3JEYXRlUHJvcGVydHkiLCJwcm9wZXJ0eVR5cGUiLCJnZXRBSUljb24iLCJhaUljb24iLCJyZXF1aXJlc0lDb250ZXh0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDb21tb25IZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuXHRDaGFydCxcblx0Q2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZSxcblx0RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0UHJlc2VudGF0aW9uVmFyaWFudFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGNvbnN0YW50LCBlcXVhbCwgZm4sIGlmRWxzZSwgbm90RXF1YWwsIHBhdGhJbk1vZGVsLCByZWYgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5cbmltcG9ydCB0eXBlIHsgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBhaUljb24sIHR5cGUgQ3VzdG9tQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5RmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgKiBhcyBEZWZhdWx0U2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9EZWZhdWx0U2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgRXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0V4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgU2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9TZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcbmltcG9ydCBtTGlicmFyeSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yVXRpbCBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vRmlsdGVyT3BlcmF0b3JVdGlsXCI7XG5pbXBvcnQgRmllbGRFZGl0TW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9GaWVsZEVkaXRNb2RlXCI7XG5pbXBvcnQgVHlwZU1hcCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UeXBlTWFwXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0Fubm90YXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbnR5cGUgTWV0YU1vZGVsTWVhc3VyZSA9IHtcblx0JFByb3BlcnR5UGF0aDogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wczogc3RyaW5nW10sIGFFeHByZXNzaW9uT3BzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcblx0Ly8gRnJvbSB0aGUgZGVmYXVsdCBzZXQgb2YgT3BlcmF0b3JzIGZvciB0aGUgQmFzZSBUeXBlLCBzZWxlY3QgdGhvc2UgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgQWxsb3dlZCBWYWx1ZS5cblx0Ly8gSW4gY2FzZSB0aGF0IG5vIG9wZXJhdG9ycyBhcmUgZm91bmQsIHJldHVybiB1bmRlZmluZWQgc28gdGhhdCB0aGUgZGVmYXVsdCBzZXQgaXMgdXNlZC5cblx0cmV0dXJuIGFEZWZhdWx0T3BzLmZpbHRlcihmdW5jdGlvbiAoc0VsZW1lbnQpIHtcblx0XHRyZXR1cm4gYUV4cHJlc3Npb25PcHMuaW5jbHVkZXMoc0VsZW1lbnQpO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gX2dldERlZmF1bHRPcGVyYXRvcnMoc1Byb3BlcnR5VHlwZT86IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0Ly8gbWRjIGRlZmluZXMgdGhlIGZ1bGwgc2V0IG9mIG9wZXJhdGlvbnMgdGhhdCBhcmUgbWVhbmluZ2Z1bCBmb3IgZWFjaCBFZG0gVHlwZVxuXHQvLyBUT0RPIFJlcGxhY2Ugd2l0aCBtb2RlbCAvIGludGVybmFsIHdheSBvZiByZXRyaWV2aW5nIHRoZSBhY3R1YWwgbW9kZWwgdHlwZSB1c2VkIGZvciB0aGUgcHJvcGVydHlcblx0Y29uc3Qgb0RhdGFDbGFzcyA9IFR5cGVNYXAuZ2V0RGF0YVR5cGVDbGFzc05hbWUoc1Byb3BlcnR5VHlwZSk7XG5cdC8vIFRPRE8gbmVlZCB0byBwYXNzIHByb3BlciBmb3JtYXRPcHRpb25zLCBjb25zdHJhaW50cyBoZXJlXG5cdGNvbnN0IG9CYXNlVHlwZSA9IFR5cGVNYXAuZ2V0QmFzZVR5cGUob0RhdGFDbGFzcywge30sIHt9KTtcblx0cmV0dXJuIEZpbHRlck9wZXJhdG9yVXRpbC5nZXRPcGVyYXRvcnNGb3JUeXBlKG9CYXNlVHlwZSk7XG59XG5cbmNvbnN0IFZhbHVlQ29sb3IgPSBtTGlicmFyeS5WYWx1ZUNvbG9yO1xuY29uc3QgQ29tbW9uSGVscGVyID0ge1xuXHRnZXRQYXRoVG9LZXk6IGZ1bmN0aW9uIChvQ3R4OiBDb250ZXh0KTogb2JqZWN0IHtcblx0XHRyZXR1cm4gb0N0eC5nZXRPYmplY3QoKTtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lIGlmIGZpZWxkIGlzIGVkaXRhYmxlLlxuXHQgKiBAcGFyYW0gdGFyZ2V0IFRhcmdldCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZSBJbnRlcmZhY2UgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQSBCaW5kaW5nIEV4cHJlc3Npb24gdG8gZGV0ZXJtaW5lIGlmIGEgZmllbGQgc2hvdWxkIGJlIGVkaXRhYmxlIG9yIG5vdC5cblx0ICovXG5cdGdldFBhcmFtZXRlckVkaXRNb2RlOiBmdW5jdGlvbiAodGFyZ2V0OiBvYmplY3QsIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb01vZGVsID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRzUHJvcGVydHlQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdG9Bbm5vdGF0aW9ucyA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c1Byb3BlcnR5UGF0aH1AYCksXG5cdFx0XHRmaWVsZENvbnRyb2wgPSBvQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFwiXSxcblx0XHRcdGltbXV0YWJsZSA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0sXG5cdFx0XHRjb21wdXRlZCA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiXTtcblxuXHRcdGxldCBzRWRpdE1vZGU6IEZpZWxkRWRpdE1vZGUgfCBzdHJpbmcgPSBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlO1xuXG5cdFx0aWYgKGltbXV0YWJsZSB8fCBjb21wdXRlZCkge1xuXHRcdFx0c0VkaXRNb2RlID0gRmllbGRFZGl0TW9kZS5SZWFkT25seTtcblx0XHR9IGVsc2UgaWYgKGZpZWxkQ29udHJvbCkge1xuXHRcdFx0aWYgKGZpZWxkQ29udHJvbC4kRW51bU1lbWJlcikge1xuXHRcdFx0XHRpZiAoZmllbGRDb250cm9sLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xUeXBlL1JlYWRPbmx5XCIpIHtcblx0XHRcdFx0XHRzRWRpdE1vZGUgPSBGaWVsZEVkaXRNb2RlLlJlYWRPbmx5O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRmaWVsZENvbnRyb2wuJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFR5cGUvSW5hcHBsaWNhYmxlXCIgfHxcblx0XHRcdFx0XHRmaWVsZENvbnRyb2wuJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFR5cGUvSGlkZGVuXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0c0VkaXRNb2RlID0gRmllbGRFZGl0TW9kZS5EaXNhYmxlZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGZpZWxkQ29udHJvbC4kUGF0aCkge1xuXHRcdFx0XHRzRWRpdE1vZGUgPVxuXHRcdFx0XHRcdFwiez0gJXtcIiArXG5cdFx0XHRcdFx0ZmllbGRDb250cm9sLiRQYXRoICtcblx0XHRcdFx0XHRcIn0gPCAzID8gKCV7XCIgK1xuXHRcdFx0XHRcdGZpZWxkQ29udHJvbC4kUGF0aCArXG5cdFx0XHRcdFx0XCJ9ID09PSAwID8gJ1wiICtcblx0XHRcdFx0XHRGaWVsZEVkaXRNb2RlLkRpc2FibGVkICtcblx0XHRcdFx0XHRcIicgOiAnXCIgK1xuXHRcdFx0XHRcdEZpZWxkRWRpdE1vZGUuUmVhZE9ubHkgK1xuXHRcdFx0XHRcdFwiJykgOiAnXCIgK1xuXHRcdFx0XHRcdEZpZWxkRWRpdE1vZGUuRWRpdGFibGUgK1xuXHRcdFx0XHRcdFwiJ31cIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc0VkaXRNb2RlO1xuXHR9LFxuXHQvKipcblx0ICogR2V0IHRoZSBjb21wbGV0ZSBtZXRhcGF0aCB0byB0aGUgdGFyZ2V0LlxuXHQgKiBAcGFyYW0gdGFyZ2V0XG5cdCAqIEBwYXJhbSBvSW50ZXJmYWNlXG5cdCAqIEByZXR1cm5zIFRoZSBtZXRhcGF0aFxuXHQgKi9cblx0Z2V0TWV0YVBhdGg6IGZ1bmN0aW9uICh0YXJnZXQ6IHVua25vd24sIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIChvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dCAmJiBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpKSB8fCB1bmRlZmluZWQ7XG5cdH0sXG5cdGdldE1ldGFNb2RlbElkOiBmdW5jdGlvbiAodGFyZ2V0OiBDb250ZXh0LCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBzdHJpbmcge1xuXHRcdGNvbnZlcnRUeXBlcyhvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKSk7XG5cdFx0cmV0dXJuIG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpLmdldElkKCk7XG5cdH0sXG5cdGlzRGVza3RvcDogZnVuY3Rpb24gKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBEZXZpY2Uuc3lzdGVtLmRlc2t0b3AgPT09IHRydWU7XG5cdH0sXG5cdGdldFRhcmdldENvbGxlY3Rpb25QYXRoOiBmdW5jdGlvbiAoY29udGV4dDogQ29udGV4dCwgbmF2Q29sbGVjdGlvbj86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0bGV0IHNQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKFxuXHRcdFx0KGNvbnRleHQuZ2V0T2JqZWN0KFwiJGtpbmRcIikgYXMgdW5rbm93biBhcyBzdHJpbmcpID09PSBcIkVudGl0eVNldFwiIHx8XG5cdFx0XHQoY29udGV4dC5nZXRPYmplY3QoXCIkQ29udGFpbnNUYXJnZXRcIikgYXMgdW5rbm93biBhcyBib29sZWFuKSA9PT0gdHJ1ZVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHNQYXRoO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwgfCBPRGF0YU1ldGFNb2RlbDtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5pc0E8T0RhdGFNZXRhTW9kZWw+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTWV0YU1vZGVsXCIpID8gbW9kZWwgOiBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRzUGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aCk7XG5cblx0XHQvL1N1cHBvcnRpbmcgc1BhdGggb2YgYW55IGZvcm1hdCwgZWl0aGVyICcvPGVudGl0eVNldD4vPG5hdmlnYXRpb25Db2xsZWN0aW9uPicgPE9SPiAnLzxlbnRpdHlTZXQ+LyRUeXBlLzxuYXZpZ2F0aW9uQ29sbGVjdGlvbj4nXG5cdFx0Y29uc3QgYVBhcnRzID0gc1BhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihmdW5jdGlvbiAoc1BhcnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuICEhc1BhcnQgJiYgc1BhcnQgIT0gXCIkVHlwZVwiO1xuXHRcdH0pOyAvL2ZpbHRlciBvdXQgZW1wdHkgc3RyaW5ncyBhbmQgcGFydHMgcmVmZXJyaW5nIHRvICckVHlwZSdcblx0XHRjb25zdCBlbnRpdHlTZXQgPSBgLyR7YVBhcnRzWzBdfWA7XG5cdFx0aWYgKGFQYXJ0cy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHJldHVybiBlbnRpdHlTZXQ7XG5cdFx0fVxuXHRcdGNvbnN0IG5hdmlnYXRpb25Db2xsZWN0aW9uID0gbmF2Q29sbGVjdGlvbiA9PT0gdW5kZWZpbmVkID8gYVBhcnRzLnNsaWNlKDEpLmpvaW4oXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIpIDogbmF2Q29sbGVjdGlvbjtcblx0XHRyZXR1cm4gYCR7ZW50aXR5U2V0fS8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy8ke25hdmlnYXRpb25Db2xsZWN0aW9ufWA7IC8vIHVzZWQgaW4gZ290b1RhcmdldEVudGl0eVNldCBtZXRob2QgaW4gdGhlIHNhbWUgZmlsZVxuXHR9LFxuXG5cdGlzUHJvcGVydHlGaWx0ZXJhYmxlOiBmdW5jdGlvbiAoXG5cdFx0Y29udGV4dDogQ29udGV4dCxcblx0XHRvRGF0YUZpZWxkPzogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRUeXBlcz4sXG5cdFx0c2tpcEhpZGRlbkZpbHRlcnM/OiBib29sZWFuXG5cdCk6IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3Qgb01vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0c1Byb3BlcnR5UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0Ly8gTG9hY2F0aW9uUGF0aCB3b3VsZCBiZSB0aGUgcHJlZml4IG9mIHNQcm9wZXJ0eVBhdGgsIGV4YW1wbGU6IHNQcm9wZXJ0eVBhdGggPSAnL0N1c3RvbWVyL1NldC9OYW1lJyAtPiBzUHJvcGVydHlMb2NhdGlvblBhdGggPSAnL0N1c3RvbWVyL1NldCdcblx0XHRcdHNQcm9wZXJ0eUxvY2F0aW9uUGF0aCA9IENvbW1vbkhlbHBlci5nZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aChvTW9kZWwsIHNQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0c1Byb3BlcnR5ID0gc1Byb3BlcnR5UGF0aC5yZXBsYWNlKGAke3NQcm9wZXJ0eUxvY2F0aW9uUGF0aH0vYCwgXCJcIik7XG5cblx0XHRpZiAoXG5cdFx0XHRvRGF0YUZpZWxkICYmXG5cdFx0XHQob0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIiB8fFxuXHRcdFx0XHRvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBpc1Byb3BlcnR5RmlsdGVyYWJsZShvTW9kZWwsIHNQcm9wZXJ0eUxvY2F0aW9uUGF0aCwgc1Byb3BlcnR5LCBza2lwSGlkZGVuRmlsdGVycyk7XG5cdH0sXG5cblx0Z2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGg6IGZ1bmN0aW9uIChvTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzUHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGxldCBpTGVuZ3RoO1xuXHRcdGxldCBzQ29sbGVjdGlvblBhdGggPSBzUHJvcGVydHlQYXRoLnNsaWNlKDAsIHNQcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcblx0XHRpZiAob01vZGVsLmdldE9iamVjdChgJHtzQ29sbGVjdGlvblBhdGh9LyRraW5kYCkgPT09IFwiRW50aXR5Q29udGFpbmVyXCIpIHtcblx0XHRcdGlMZW5ndGggPSBzQ29sbGVjdGlvblBhdGgubGVuZ3RoICsgMTtcblx0XHRcdHNDb2xsZWN0aW9uUGF0aCA9IHNQcm9wZXJ0eVBhdGguc2xpY2UoaUxlbmd0aCwgc1Byb3BlcnR5UGF0aC5pbmRleE9mKFwiL1wiLCBpTGVuZ3RoKSk7XG5cdFx0fVxuXHRcdHJldHVybiBzQ29sbGVjdGlvblBhdGg7XG5cdH0sXG5cdGdvdG9BY3Rpb25QYXJhbWV0ZXI6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRzUHJvcGVydHlOYW1lID0gb0NvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXRofS8kTmFtZWApO1xuXG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLmdldFBhcmFtZXRlclBhdGgoc1BhdGgsIHNQcm9wZXJ0eU5hbWUpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZW50aXR5IHNldCBuYW1lIGZyb20gdGhlIGVudGl0eSB0eXBlIG5hbWUuXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsIE9EYXRhIHY0IG1ldGFtb2RlbCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gc0VudGl0eVR5cGUgRW50aXR5VHlwZSBvZiB0aGUgYWN0aW9tXG5cdCAqIEByZXR1cm5zIFRoZSBFbnRpdHlTZXQgb2YgdGhlIGJvdW5kIGFjdGlvblxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0RW50aXR5U2V0TmFtZTogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5VHlwZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvRW50aXR5Q29udGFpbmVyID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHRcdGZvciAoY29uc3Qga2V5IGluIG9FbnRpdHlDb250YWluZXIpIHtcblx0XHRcdGlmICh0eXBlb2Ygb0VudGl0eUNvbnRhaW5lcltrZXldID09PSBcIm9iamVjdFwiICYmIG9FbnRpdHlDb250YWluZXJba2V5XS4kVHlwZSA9PT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdFx0cmV0dXJuIGtleTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIG1ldGFtb2RlbCBwYXRoIGNvcnJlY3RseSBmb3IgYm91bmQgYWN0aW9ucyBpZiB1c2VkIHdpdGggYlJldHVybk9ubHlQYXRoIGFzIHRydWUsXG5cdCAqIGVsc2UgcmV0dXJucyBhbiBvYmplY3Qgd2hpY2ggaGFzIDMgcHJvcGVydGllcyByZWxhdGVkIHRvIHRoZSBhY3Rpb24uIFRoZXkgYXJlIHRoZSBlbnRpdHkgc2V0IG5hbWUsXG5cdCAqIHRoZSAkUGF0aCB2YWx1ZSBvZiB0aGUgT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb24gYW5kIHRoZSBiaW5kaW5nIHBhcmFtZXRlciBuYW1lLiBJZlxuXHQgKiBiQ2hlY2tTdGF0aWNWYWx1ZSBpcyB0cnVlLCByZXR1cm5zIHRoZSBzdGF0aWMgdmFsdWUgb2YgT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb24sIGlmIHByZXNlbnQuXG5cdCAqIGUuZy4gZm9yIGJvdW5kIGFjdGlvbiBzb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvblxuXHQgKiBvZiBlbnRpdHkgc2V0IFNvbWVFbnRpdHlTZXQsIHRoZSBzdHJpbmcgXCIvU29tZUVudGl0eVNldC9zb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvblwiIGlzIHJldHVybmVkLlxuXHQgKiBAcGFyYW0gb0FjdGlvbiBUaGUgY29udGV4dCBvYmplY3Qgb2YgdGhlIGFjdGlvblxuXHQgKiBAcGFyYW0gYlJldHVybk9ubHlQYXRoIElmIGZhbHNlLCBhZGRpdGlvbmFsIGluZm8gaXMgcmV0dXJuZWQgYWxvbmcgd2l0aCBtZXRhbW9kZWwgcGF0aCB0byB0aGUgYm91bmQgYWN0aW9uXG5cdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYm91bmQgYWN0aW9uIG9mIHRoZSBmb3JtIHNvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uXG5cdCAqIEBwYXJhbSBiQ2hlY2tTdGF0aWNWYWx1ZSBJZiB0cnVlLCB0aGUgc3RhdGljIHZhbHVlIG9mIE9wZXJhdGlvbkF2YWlsYWJsZSBpcyByZXR1cm5lZCwgaWYgcHJlc2VudFxuXHQgKiBAcmV0dXJucyBUaGUgc3RyaW5nIG9yIG9iamVjdCBhcyBzcGVjaWZpZWQgYnkgYlJldHVybk9ubHlQYXRoXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXRBY3Rpb25QYXRoOiBmdW5jdGlvbiAoXG5cdFx0b0FjdGlvbjogQ29udGV4dCxcblx0XHRiUmV0dXJuT25seVBhdGg6IGJvb2xlYW4sXG5cdFx0c0FjdGlvbk5hbWU/OiBzdHJpbmcsXG5cdFx0YkNoZWNrU3RhdGljVmFsdWU/OiBib29sZWFuXG5cdCk6XG5cdFx0fCBzdHJpbmdcblx0XHR8IHtcblx0XHRcdFx0c0NvbnRleHRQYXRoOiBzdHJpbmc7XG5cdFx0XHRcdHNQcm9wZXJ0eTogc3RyaW5nO1xuXHRcdFx0XHRzQmluZGluZ1BhcmFtZXRlcjogc3RyaW5nO1xuXHRcdCAgfSB7XG5cdFx0bGV0IHNDb250ZXh0UGF0aCA9IG9BY3Rpb24uZ2V0UGF0aCgpLnNwbGl0KFwiL0BcIilbMF07XG5cblx0XHRzQWN0aW9uTmFtZSA9ICFzQWN0aW9uTmFtZSA/IG9BY3Rpb24uZ2V0T2JqZWN0KG9BY3Rpb24uZ2V0UGF0aCgpKSA6IHNBY3Rpb25OYW1lO1xuXG5cdFx0aWYgKHNBY3Rpb25OYW1lICYmIHNBY3Rpb25OYW1lLmluY2x1ZGVzKFwiKFwiKSkge1xuXHRcdFx0Ly8gYWN0aW9uIGJvdW5kIHRvIGFub3RoZXIgZW50aXR5IHR5cGVcblx0XHRcdHNBY3Rpb25OYW1lID0gc0FjdGlvbk5hbWUuc3BsaXQoXCIoXCIpWzBdO1xuXHRcdH0gZWxzZSBpZiAob0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKSkge1xuXHRcdFx0Ly8gVE9ETzogdGhpcyBsb2dpYyBzb3VuZHMgd3JvbmcsIHRvIGJlIGNvcnJlY3RlZFxuXHRcdFx0Y29uc3Qgc0VudGl0eVR5cGVOYW1lID0gb0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKS4kVHlwZTtcblx0XHRcdGNvbnN0IHNFbnRpdHlOYW1lID0gdGhpcy5nZXRFbnRpdHlTZXROYW1lKG9BY3Rpb24uZ2V0TW9kZWwoKSwgc0VudGl0eVR5cGVOYW1lKTtcblx0XHRcdGlmIChzRW50aXR5TmFtZSkge1xuXHRcdFx0XHRzQ29udGV4dFBhdGggPSBgLyR7c0VudGl0eU5hbWV9YDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHNDb250ZXh0UGF0aDtcblx0XHR9XG5cblx0XHRpZiAoYkNoZWNrU3RhdGljVmFsdWUpIHtcblx0XHRcdHJldHVybiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9QE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZWApO1xuXHRcdH1cblx0XHRpZiAoYlJldHVybk9ubHlQYXRoKSB7XG5cdFx0XHRyZXR1cm4gYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNDb250ZXh0UGF0aDogc0NvbnRleHRQYXRoLFxuXHRcdFx0XHRzUHJvcGVydHk6IG9BY3Rpb24uZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlLyRQYXRoYCksXG5cdFx0XHRcdHNCaW5kaW5nUGFyYW1ldGVyOiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9L0AkdWk1Lm92ZXJsb2FkLzAvJFBhcmFtZXRlci8wLyROYW1lYClcblx0XHRcdH07XG5cdFx0fVxuXHR9LFxuXG5cdGdldE5hdmlnYXRpb25Db250ZXh0OiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiBPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlci5nZXROYXZpZ2F0aW9uUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBwYXRoIHdpdGhvdXQgdGhlIGVudGl0eSB0eXBlIChwb3RlbnRpYWxseSBmaXJzdCkgYW5kIHByb3BlcnR5IChsYXN0KSBwYXJ0IChvcHRpb25hbCkuXG5cdCAqIFRoZSByZXN1bHQgY2FuIGJlIGFuIGVtcHR5IHN0cmluZyBpZiBpdCBpcyBhIHNpbXBsZSBkaXJlY3QgcHJvcGVydHkuXG5cdCAqXG5cdCAqIElmIGFuZCBvbmx5IGlmIHRoZSBnaXZlbiBwcm9wZXJ0eSBwYXRoIHN0YXJ0cyB3aXRoIGEgc2xhc2ggKC8pLCBpdCBpcyBjb25zaWRlcmVkIHRoYXQgdGhlIGVudGl0eSB0eXBlXG5cdCAqIGlzIHBhcnQgb2YgdGhlIHBhdGggYW5kIHdpbGwgYmUgc3RyaXBwZWQgYXdheS5cblx0ICogQHBhcmFtIHNQcm9wZXJ0eVBhdGhcblx0ICogQHBhcmFtIGJLZWVwUHJvcGVydHlcblx0ICogQHJldHVybnMgVGhlIG5hdmlnYXRpb24gcGF0aFxuXHQgKi9cblx0Z2V0TmF2aWdhdGlvblBhdGg6IGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBzdHJpbmcsIGJLZWVwUHJvcGVydHk/OiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRjb25zdCBiU3RhcnRzV2l0aEVudGl0eVR5cGUgPSBzUHJvcGVydHlQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpO1xuXHRcdGNvbnN0IGFQYXJ0cyA9IHNQcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihmdW5jdGlvbiAocGFydDogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gISFwYXJ0O1xuXHRcdH0pO1xuXHRcdGlmIChiU3RhcnRzV2l0aEVudGl0eVR5cGUpIHtcblx0XHRcdGFQYXJ0cy5zaGlmdCgpO1xuXHRcdH1cblx0XHRpZiAoIWJLZWVwUHJvcGVydHkpIHtcblx0XHRcdGFQYXJ0cy5wb3AoKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFQYXJ0cy5qb2luKFwiL1wiKTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29ycmVjdCBtZXRhbW9kZWwgcGF0aCBmb3IgYm91bmQgYWN0aW9ucy5cblx0ICpcblx0ICogU2luY2UgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGlycmVzcGVjdGl2ZSBvZiB0aGUgYWN0aW9uIHR5cGUsIHRoaXMgd2lsbCBiZSBhcHBsaWVkIHRvIHVuYm91bmQgYWN0aW9ucy5cblx0ICogSW4gc3VjaCBhIGNhc2UsIGlmIGFuIGluY29ycmVjdCBwYXRoIGlzIHJldHVybmVkLCBpdCBpcyBpZ25vcmVkIGR1cmluZyB0ZW1wbGF0aW5nLlxuXHQgKlxuXHQgKiBFeGFtcGxlOiBmb3IgdGhlIGJvdW5kIGFjdGlvbiBzb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvbiBvZiBlbnRpdHkgc2V0IFNvbWVFbnRpdHlTZXQsXG5cdCAqIHRoZSBzdHJpbmcgXCIvU29tZUVudGl0eVNldC9zb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvblwiIGlzIHJldHVybmVkLlxuXHQgKiBAcGFyYW0gb0FjdGlvbiBDb250ZXh0IG9iamVjdCBmb3IgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBDb3JyZWN0IG1ldGFtb2RlbCBwYXRoIGZvciBib3VuZCBhbmQgaW5jb3JyZWN0IHBhdGggZm9yIHVuYm91bmQgYWN0aW9uc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0QWN0aW9uQ29udGV4dDogZnVuY3Rpb24gKG9BY3Rpb246IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiBDb21tb25IZWxwZXIuZ2V0QWN0aW9uUGF0aChvQWN0aW9uLCB0cnVlKSBhcyBzdHJpbmc7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBtZXRhbW9kZWwgcGF0aCBjb3JyZWN0bHkgZm9yIG92ZXJsb2FkZWQgYm91bmQgYWN0aW9ucy4gRm9yIHVuYm91bmQgYWN0aW9ucyxcblx0ICogdGhlIGluY29ycmVjdCBwYXRoIGlzIHJldHVybmVkLCBidXQgaWdub3JlZCBkdXJpbmcgdGVtcGxhdGluZy5cblx0ICogZS5nLiBmb3IgYm91bmQgYWN0aW9uIHNvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uIG9mIGVudGl0eSBzZXQgU29tZUVudGl0eVNldCxcblx0ICogdGhlIHN0cmluZyBcIi9Tb21lRW50aXR5U2V0L3NvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uL0AkdWk1Lm92ZXJsb2FkLzBcIiBpcyByZXR1cm5lZC5cblx0ICogQHBhcmFtIG9BY3Rpb24gVGhlIGNvbnRleHQgb2JqZWN0IGZvciB0aGUgYWN0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSBjb3JyZWN0IG1ldGFtb2RlbCBwYXRoIGZvciBib3VuZCBhY3Rpb24gb3ZlcmxvYWQgYW5kIGluY29ycmVjdCBwYXRoIGZvciB1bmJvdW5kIGFjdGlvbnNcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQ6IGZ1bmN0aW9uIChvQWN0aW9uOiBDb250ZXh0KTogc3RyaW5nIHtcblx0XHRjb25zdCBzUGF0aCA9IENvbW1vbkhlbHBlci5nZXRBY3Rpb25QYXRoKG9BY3Rpb24sIHRydWUpO1xuXHRcdHJldHVybiBgJHtzUGF0aH0vQCR1aTUub3ZlcmxvYWQvMGA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHN0cmluZyB3aXRoIHNpbmdsZSBxdW90ZXMuXG5cdCAqIEBwYXJhbSBzVmFsdWUgU29tZSBzdHJpbmcgdGhhdCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgaW50byBzaW5nbGUgcXVvdGVzXG5cdCAqIEBwYXJhbSBbYkVzY2FwZV0gU2hvdWxkIHRoZSBzdHJpbmcgYmUgZXNjYXBlZCBiZWZvcmVoYW5kXG5cdCAqIEByZXR1cm5zIC0gU3RyaW5nIHdpdGggc2luZ2xlIHF1b3Rlc1xuXHQgKi9cblx0YWRkU2luZ2xlUXVvdGVzOiBmdW5jdGlvbiAoc1ZhbHVlOiBzdHJpbmcsIGJFc2NhcGU/OiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRpZiAoYkVzY2FwZSAmJiBzVmFsdWUpIHtcblx0XHRcdHNWYWx1ZSA9IHRoaXMuZXNjYXBlU2luZ2xlUXVvdGVzKHNWYWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBgJyR7c1ZhbHVlfSdgO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBzdHJpbmcgd2l0aCBlc2NhcGVkIHNpbmdsZSBxdW90ZXMuXG5cdCAqIEBwYXJhbSBzVmFsdWUgU29tZSBzdHJpbmcgdGhhdCBuZWVkcyBlc2NhcGluZyBvZiBzaW5nbGUgcXVvdGVzXG5cdCAqIEByZXR1cm5zIC0gU3RyaW5nIHdpdGggZXNjYXBlZCBzaW5nbGUgcXVvdGVzXG5cdCAqL1xuXHRlc2NhcGVTaW5nbGVRdW90ZXM6IGZ1bmN0aW9uIChzVmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHNWYWx1ZS5yZXBsYWNlKC9bJ10vZywgXCJcXFxcJ1wiKTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZnVuY3Rpb24gc3RyaW5nXG5cdCAqIFRoZSBmaXJzdCBhcmd1bWVudCBvZiBnZW5lcmF0ZUZ1bmN0aW9uIGlzIG5hbWUgb2YgdGhlIGdlbmVyYXRlZCBmdW5jdGlvbiBzdHJpbmcuXG5cdCAqIFJlbWFpbmluZyBhcmd1bWVudHMgb2YgZ2VuZXJhdGVGdW5jdGlvbiBhcmUgYXJndW1lbnRzIG9mIHRoZSBuZXdseSBnZW5lcmF0ZWQgZnVuY3Rpb24gc3RyaW5nLlxuXHQgKiBAcGFyYW0gc0Z1bmNOYW1lIFNvbWUgc3RyaW5nIGZvciB0aGUgZnVuY3Rpb24gbmFtZVxuXHQgKiBAcGFyYW0gYXJncyBUaGUgcmVtYWluaW5nIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyAtIEZ1bmN0aW9uIHN0cmluZyBkZXBlbmRzIG9uIGFyZ3VtZW50cyBwYXNzZWRcblx0ICovXG5cdGdlbmVyYXRlRnVuY3Rpb246IGZ1bmN0aW9uIChzRnVuY05hbWU6IHN0cmluZywgLi4uYXJnczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRcdGxldCBzUGFyYW1zID0gXCJcIjtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdHNQYXJhbXMgKz0gYXJnc1tpXTtcblx0XHRcdGlmIChpIDwgYXJncy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdHNQYXJhbXMgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBzRnVuY3Rpb24gPSBgJHtzRnVuY05hbWV9KClgO1xuXHRcdGlmIChzUGFyYW1zKSB7XG5cdFx0XHRzRnVuY3Rpb24gPSBgJHtzRnVuY05hbWV9KCR7c1BhcmFtc30pYDtcblx0XHR9XG5cdFx0cmV0dXJuIHNGdW5jdGlvbjtcblx0fSxcblx0Lypcblx0ICogUmV0dXJucyB0aGUgdmlzaWJpbGl0eSBleHByZXNzaW9uIGZvciBkYXRhcG9pbnQgdGl0bGUvbGlua1xuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IFtwYXRoXSBhbm5vdGF0aW9uIHBhdGggb2YgZGF0YSBwb2ludCBvciBNaWNyb2NoYXJ0XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzQ2xpY2thYmxlXSB0cnVlIGlmIGxpbmsgaXMgdmlzaWJsZVxuXHQgKiBAcmV0dXJucyB7Q29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb259IHZpc2liaWxpdHlFeHAgVXNlZCB0byBnZXQgdGhlIHZpc2liaWxpdHkgYmluZGluZyBmb3IgRGF0YVBvaW50cyB0aXRsZSBpbiB0aGUgSGVhZGVyLlxuXHQgKlxuXHQgKi9cblxuXHRnZXRIZWFkZXJEYXRhUG9pbnRMaW5rVmlzaWJpbGl0eTogZnVuY3Rpb24gKHBhdGg6IHN0cmluZywgaXNDbGlja2FibGU6IGJvb2xlYW4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRjb25zdGFudChpc0NsaWNrYWJsZSksXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKGBpc0hlYWRlckRQTGlua1Zpc2libGUvJHtwYXRofWAsIFwiaW50ZXJuYWxcIiksIHRydWUpLFxuXHRcdFx0XHRub3RFcXVhbChwYXRoSW5Nb2RlbChgaXNIZWFkZXJEUExpbmtWaXNpYmxlLyR7cGF0aH1gLCBcImludGVybmFsXCIpLCB0cnVlKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIG9iamVjdCB0byBzdHJpbmcoZGlmZmVyZW50IGZyb20gSlNPTi5zdHJpbmdpZnkgb3IudG9TdHJpbmcpLlxuXHQgKiBAcGFyYW0gb1BhcmFtcyBTb21lIG9iamVjdFxuXHQgKiBAcmV0dXJucyAtIE9iamVjdCBzdHJpbmdcblx0ICovXG5cdG9iamVjdFRvU3RyaW5nOiBmdW5jdGlvbiAob1BhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcge1xuXHRcdGxldCBpTnVtYmVyT2ZLZXlzID0gT2JqZWN0LmtleXMob1BhcmFtcykubGVuZ3RoLFxuXHRcdFx0c1BhcmFtcyA9IFwiXCI7XG5cblx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb1BhcmFtcykge1xuXHRcdFx0bGV0IHNWYWx1ZSA9IG9QYXJhbXNbc0tleV07XG5cdFx0XHRpZiAoc1ZhbHVlICYmIHR5cGVvZiBzVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0c1ZhbHVlID0gdGhpcy5vYmplY3RUb1N0cmluZyhzVmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuXHRcdFx0fVxuXHRcdFx0c1BhcmFtcyArPSBgJHtzS2V5fTogJHtzVmFsdWV9YDtcblx0XHRcdGlmIChpTnVtYmVyT2ZLZXlzID4gMSkge1xuXHRcdFx0XHQtLWlOdW1iZXJPZktleXM7XG5cdFx0XHRcdHNQYXJhbXMgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBgeyAke3NQYXJhbXN9fWA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgZXNjYXBlIGNoYXJhY3RlcnMgKFxcKSBmcm9tIGFuIGV4cHJlc3Npb24uXG5cdCAqIEBwYXJhbSBzRXhwcmVzc2lvbiBBbiBleHByZXNzaW9uIHdpdGggZXNjYXBlIGNoYXJhY3RlcnNcblx0ICogQHJldHVybnMgRXhwcmVzc2lvbiBzdHJpbmcgd2l0aG91dCBlc2NhcGUgY2hhcmFjdGVycyBvciB1bmRlZmluZWRcblx0ICovXG5cdHJlbW92ZUVzY2FwZUNoYXJhY3RlcnM6IGZ1bmN0aW9uIChzRXhwcmVzc2lvbj86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHNFeHByZXNzaW9uID8gc0V4cHJlc3Npb24ucmVwbGFjZSgvXFxcXD9cXFxcKFt7fV0pL2csIFwiJDFcIikgOiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ha2VzIHVwZGF0ZXMgdG8gYSBzdHJpbmdpZmllZCBvYmplY3Qgc28gdGhhdCBpdCB3b3JrcyBwcm9wZXJseSBpbiBhIHRlbXBsYXRlIGJ5IGFkZGluZyB1aTVPYmplY3Q6dHJ1ZS5cblx0ICogQHBhcmFtIHNTdHJpbmdpZmllZFxuXHQgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdFxuXHQgKi9cblx0c3RyaW5naWZ5T2JqZWN0OiBmdW5jdGlvbiAoc1N0cmluZ2lmaWVkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmICghc1N0cmluZ2lmaWVkIHx8IHNTdHJpbmdpZmllZCA9PT0gXCJ7fVwiKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvT2JqZWN0ID0gSlNPTi5wYXJzZShzU3RyaW5naWZpZWQpO1xuXHRcdFx0aWYgKHR5cGVvZiBvT2JqZWN0ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KG9PYmplY3QpKSB7XG5cdFx0XHRcdGNvbnN0IG9VSTVPYmplY3QgPSB7XG5cdFx0XHRcdFx0dWk1b2JqZWN0OiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHRcdE9iamVjdC5hc3NpZ24ob1VJNU9iamVjdCwgb09iamVjdCk7XG5cdFx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShvVUk1T2JqZWN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHNUeXBlID0gQXJyYXkuaXNBcnJheShvT2JqZWN0KSA/IFwiQXJyYXlcIiA6IHR5cGVvZiBvT2JqZWN0O1xuXHRcdFx0XHRMb2cuZXJyb3IoYFVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUgaW4gc3RyaW5naWZ5T2JqZWN0ICgke3NUeXBlfSkgLSBvbmx5IHdvcmtzIHdpdGggb2JqZWN0YCk7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInN0cmluZ2lmeU9iamVjdCBvbmx5IHdvcmtzIHdpdGggb2JqZWN0cyFcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRhdGEsIHRha2luZyBjYXJlIHRoYXQgaXQgaXMgbm90IHRyZWF0ZWQgYXMgYSBiaW5kaW5nIGV4cHJlc3Npb24uXG5cdCAqIEBwYXJhbSB2RGF0YSBUaGUgZGF0YSB0byBzdHJpbmdpZnlcblx0ICogQHJldHVybnMgVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0YS5cblx0ICovXG5cdHN0cmluZ2lmeUN1c3RvbURhdGE6IGZ1bmN0aW9uICh2RGF0YTogb2JqZWN0IHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0XHRjb25zdCBvT2JqZWN0OiB7IHVpNW9iamVjdDogdHJ1ZTsgY3VzdG9tRGF0YT86IHVua25vd24gfSA9IHtcblx0XHRcdHVpNW9iamVjdDogdHJ1ZVxuXHRcdH07XG5cdFx0b09iamVjdFtcImN1c3RvbURhdGFcIl0gPSB2RGF0YSBpbnN0YW5jZW9mIENvbnRleHQgPyB2RGF0YS5nZXRPYmplY3QoKSA6IHZEYXRhO1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShvT2JqZWN0KTtcblx0fSxcblxuXHQvKipcblx0ICogUGFyc2VzIHRoZSBnaXZlbiBkYXRhLCBwb3RlbnRpYWxseSB1bndyYXBzIHRoZSBkYXRhLlxuXHQgKiBAcGFyYW0gdkRhdGEgVGhlIGRhdGEgdG8gcGFyc2Vcblx0ICogQHBhcmFtIHZEYXRhLnVpNW9iamVjdFxuXHQgKiBAcGFyYW0gdkRhdGEuY3VzdG9tRGF0YVxuXHQgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBkYXRhIHBhcnNpbmdcblx0ICovXG5cdHBhcnNlQ3VzdG9tRGF0YTogZnVuY3Rpb24gKHZEYXRhPzogc3RyaW5nIHwgeyB1aTVvYmplY3Q6IHRydWU7IGN1c3RvbURhdGE/OiB1bmtub3duIH0pOiB1bmtub3duIHtcblx0XHR2RGF0YSA9IHR5cGVvZiB2RGF0YSA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UodkRhdGEpIDogdkRhdGE7XG5cdFx0aWYgKHZEYXRhICYmIHZEYXRhLmhhc093blByb3BlcnR5KFwiY3VzdG9tRGF0YVwiKSkge1xuXHRcdFx0cmV0dXJuICh2RGF0YSBhcyB7IHVpNW9iamVjdDogdHJ1ZTsgY3VzdG9tRGF0YT86IHVua25vd24gfSlbXCJjdXN0b21EYXRhXCJdO1xuXHRcdH1cblx0XHRyZXR1cm4gdkRhdGE7XG5cdH0sXG5cdGdldENvbnRleHRQYXRoOiBmdW5jdGlvbiAob1ZhbHVlOiB1bmtub3duLCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHNQYXRoID0gb0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQgJiYgb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRyZXR1cm4gc1BhdGhbc1BhdGgubGVuZ3RoIC0gMV0gPT09IFwiL1wiID8gc1BhdGguc2xpY2UoMCwgLTEpIDogc1BhdGg7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgc3RyaW5naWZpZWQgSlNPTiBvYmplY3QgY29udGFpbmluZyAgUHJlc2VudGF0aW9uIFZhcmlhbnQgc29ydCBjb25kaXRpb25zLlxuXHQgKiBAcGFyYW0gb0NvbnRleHRcblx0ICogQHBhcmFtIG9Db250ZXh0LmdldFBhdGhcblx0ICogQHBhcmFtIG9Db250ZXh0LmdldE1vZGVsXG5cdCAqIEBwYXJhbSBvUHJlc2VudGF0aW9uVmFyaWFudCBQcmVzZW50YXRpb24gdmFyaWFudCBBbm5vdGF0aW9uXG5cdCAqIEBwYXJhbSBzUHJlc2VudGF0aW9uVmFyaWFudFBhdGhcblx0ICogQHJldHVybnMgU3RyaW5naWZpZWQgSlNPTiBvYmplY3Rcblx0ICovXG5cdGdldFNvcnRDb25kaXRpb25zOiBmdW5jdGlvbiAoXG5cdFx0b0NvbnRleHQ6IHsgZ2V0UGF0aChudW06IG51bWJlcik6IHN0cmluZzsgZ2V0TW9kZWwobnVtOiBudW1iZXIpOiBPRGF0YU1ldGFNb2RlbCB9LFxuXHRcdG9QcmVzZW50YXRpb25WYXJpYW50OiBNZXRhTW9kZWxUeXBlPFByZXNlbnRhdGlvblZhcmlhbnQ+LFxuXHRcdHNQcmVzZW50YXRpb25WYXJpYW50UGF0aDogc3RyaW5nXG5cdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKFxuXHRcdFx0b1ByZXNlbnRhdGlvblZhcmlhbnQgJiZcblx0XHRcdENvbW1vbkhlbHBlci5faXNQcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbihzUHJlc2VudGF0aW9uVmFyaWFudFBhdGgpICYmXG5cdFx0XHRvUHJlc2VudGF0aW9uVmFyaWFudC5Tb3J0T3JkZXJcblx0XHQpIHtcblx0XHRcdGNvbnN0IGFTb3J0Q29uZGl0aW9uczogeyBzb3J0ZXJzOiB7IG5hbWU/OiBzdHJpbmc7IGRlc2NlbmRpbmc/OiBib29sZWFuIH1bXSB9ID0ge1xuXHRcdFx0XHRzb3J0ZXJzOiBbXVxuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3Qgc0VudGl0eVBhdGggPSBvQ29udGV4dC5nZXRQYXRoKDApLnNwbGl0KFwiQFwiKVswXTtcblx0XHRcdG9QcmVzZW50YXRpb25WYXJpYW50LlNvcnRPcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChvQ29uZGl0aW9uID0ge30pIHtcblx0XHRcdFx0bGV0IG9Tb3J0UHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Y29uc3Qgb1NvcnRlcjogeyBuYW1lPzogc3RyaW5nOyBkZXNjZW5kaW5nPzogYm9vbGVhbiB9ID0ge307XG5cdFx0XHRcdGlmIChvQ29uZGl0aW9uLkR5bmFtaWNQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdG9Tb3J0UHJvcGVydHkgPSBvQ29udGV4dC5nZXRNb2RlbCgwKS5nZXRPYmplY3Qoc0VudGl0eVBhdGggKyBvQ29uZGl0aW9uLkR5bmFtaWNQcm9wZXJ0eS4kQW5ub3RhdGlvblBhdGgpPy5OYW1lO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9Db25kaXRpb24uUHJvcGVydHkpIHtcblx0XHRcdFx0XHRvU29ydFByb3BlcnR5ID0gb0NvbmRpdGlvbi5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvU29ydFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0b1NvcnRlci5uYW1lID0gb1NvcnRQcm9wZXJ0eTtcblx0XHRcdFx0XHRvU29ydGVyLmRlc2NlbmRpbmcgPSAhIW9Db25kaXRpb24uRGVzY2VuZGluZztcblx0XHRcdFx0XHRhU29ydENvbmRpdGlvbnMuc29ydGVycy5wdXNoKG9Tb3J0ZXIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSBkZWZpbmUgdGhlIHJpZ2h0IHBhdGggdG8gdGhlIHNvcnQgcHJvcGVydHlcIik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KGFTb3J0Q29uZGl0aW9ucyk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cdF9pc1ByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBmdW5jdGlvbiAoYW5ub3RhdGlvblBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHRhbm5vdGF0aW9uUGF0aC5pbmNsdWRlcyhgQCR7VUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudH1gKSB8fFxuXHRcdFx0YW5ub3RhdGlvblBhdGguaW5jbHVkZXMoYEAke1VJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnR9YClcblx0XHQpO1xuXHR9LFxuXHRjcmVhdGVQcmVzZW50YXRpb25QYXRoQ29udGV4dDogZnVuY3Rpb24gKG9QcmVzZW50YXRpb25Db250ZXh0OiBDb250ZXh0KTogQ29udGV4dCB7XG5cdFx0Y29uc3QgYVBhdGhzID0gb1ByZXNlbnRhdGlvbkNvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiQFwiKSB8fCBbXTtcblx0XHRjb25zdCBvTW9kZWwgPSBvUHJlc2VudGF0aW9uQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGlmIChhUGF0aHMubGVuZ3RoICYmIGFQYXRoc1thUGF0aHMubGVuZ3RoIC0gMV0uaW5jbHVkZXMoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XCIpKSB7XG5cdFx0XHRjb25zdCBzUGF0aCA9IG9QcmVzZW50YXRpb25Db250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi9QcmVzZW50YXRpb25WYXJpYW50XCIpWzBdO1xuXHRcdFx0cmV0dXJuIG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzUGF0aH1Ac2FwdWkubmFtZWApO1xuXHRcdH1cblx0XHRyZXR1cm4gb01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke29QcmVzZW50YXRpb25Db250ZXh0LmdldFBhdGgoKX1Ac2FwdWkubmFtZWApO1xuXHR9LFxuXHRnZXRQcmVzc0hhbmRsZXJGb3JEYXRhRmllbGRGb3JJQk46IGZ1bmN0aW9uIChcblx0XHRvRGF0YUZpZWxkOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0c0NvbnRleHQ/OiBzdHJpbmcsXG5cdFx0Yk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZz86IGJvb2xlYW4sXG5cdFx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuXHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmICghb0RhdGFGaWVsZCkgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRjb25zdCBtTmF2aWdhdGlvblBhcmFtZXRlcnM6IHtcblx0XHRcdG5hdmlnYXRpb25Db250ZXh0cz86IHN0cmluZztcblx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0YXBwbGljYWJsZUNvbnRleHRzPzogc3RyaW5nO1xuXHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogc3RyaW5nO1xuXHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nPzogc3RyaW5nO1xuXHRcdH0gPSB7XG5cdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IHNDb250ZXh0ID8gc0NvbnRleHQgOiBcIiR7JHNvdXJjZT4vfS5nZXRCaW5kaW5nQ29udGV4dCgpXCJcblx0XHR9O1xuXHRcdGlmIChvRGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCAmJiAhb0RhdGFGaWVsZC5JbmxpbmUgJiYgYk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZykge1xuXHRcdFx0Y29uc3QgYXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhQXBwbGljYWJsZVwiIDogXCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51XCI7XG5cdFx0XHRjb25zdCBub3RBcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFOb3RBcHBsaWNhYmxlXCIgOiBcImFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIjtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5hcHBsaWNhYmxlQ29udGV4dHMgPSBgXFwke2ludGVybmFsPmlibi8ke29EYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7b0RhdGFGaWVsZC5BY3Rpb259LyR7YXBwbGljYWJsZVByb3BlcnR5fS99YDtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5ub3RBcHBsaWNhYmxlQ29udGV4dHMgPSBgXFwke2ludGVybmFsPmlibi8ke29EYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7b0RhdGFGaWVsZC5BY3Rpb259LyR7bm90QXBwbGljYWJsZVByb3BlcnR5fS99YDtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5sYWJlbCA9IHRoaXMuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQuTGFiZWwgYXMgc3RyaW5nLCB0cnVlKTtcblx0XHR9XG5cdFx0aWYgKG9EYXRhRmllbGQuTWFwcGluZykge1xuXHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IHRoaXMuYWRkU2luZ2xlUXVvdGVzKEpTT04uc3RyaW5naWZ5KG9EYXRhRmllbGQuTWFwcGluZykpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5nZW5lcmF0ZUZ1bmN0aW9uKFxuXHRcdFx0Yk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyA/IFwiLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nXCIgOiBcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlXCIsXG5cdFx0XHR0aGlzLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkLlNlbWFudGljT2JqZWN0IGFzIHVua25vd24gYXMgc3RyaW5nKSxcblx0XHRcdHRoaXMuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQuQWN0aW9uIGFzIHVua25vd24gYXMgc3RyaW5nKSxcblx0XHRcdHRoaXMub2JqZWN0VG9TdHJpbmcobU5hdmlnYXRpb25QYXJhbWV0ZXJzKSxcblx0XHRcdFwiJHskc291cmNlPi99XCJcblx0XHQpO1xuXHR9LFxuXHRnZXRFbnRpdHlTZXQ6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0cmV0dXJuIE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoc1BhdGgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZG8gdGhlIGNhbGN1bGF0aW9uIG9mIGNyaXRpY2FsaXR5IGluIGNhc2UgQ3JpdGljYWxpdHlDYWxjdWxhdGlvbiBwcmVzZW50IGluIHRoZSBhbm5vdGF0aW9uXG5cdCAqXG5cdCAqIFRoZSBjYWxjdWxhdGlvbiBpcyBkb25lIGJ5IGNvbXBhcmluZyBhIHZhbHVlIHRvIHRoZSB0aHJlc2hvbGQgdmFsdWVzIHJlbGV2YW50IGZvciB0aGUgc3BlY2lmaWVkIGltcHJvdmVtZW50IGRpcmVjdGlvbi5cblx0ICogRm9yIGltcHJvdmVtZW50IGRpcmVjdGlvbiBUYXJnZXQsIHRoZSBjcml0aWNhbGl0eSBpcyBjYWxjdWxhdGVkIHVzaW5nIGJvdGggbG93IGFuZCBoaWdoIHRocmVzaG9sZCB2YWx1ZXMuIEl0IHdpbGwgYmVcblx0ICpcblx0ICogLSBQb3NpdGl2ZSBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIE9SIGdyZWF0ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlTG93VmFsdWUgYW5kIGxvd2VyIHRoYW4gVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSBPUiBncmVhdGVyIHRoYW4gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBOZWdhdGl2ZSBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUxvd1ZhbHVlIG9yIGdyZWF0ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKlxuXHQgKiBGb3IgaW1wcm92ZW1lbnQgZGlyZWN0aW9uIE1pbmltaXplLCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgaGlnaCB0aHJlc2hvbGQgdmFsdWVzLiBJdCBpc1xuXHQgKiAtIFBvc2l0aXZlIGlmIHRoZSB2YWx1ZSBpcyBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gTmVnYXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKlxuXHQgKiBGb3IgaW1wcm92ZW1lbnQgZGlyZWN0aW9uIE1heGltaXplLCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgbG93IHRocmVzaG9sZCB2YWx1ZXMuIEl0IGlzXG5cdCAqXG5cdCAqIC0gUG9zaXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGxlc3MgdGhhbiBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFRvbGVyYW5jZVJhbmdlTG93VmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZVxuXHQgKiAtIE5lZ2F0aXZlIGlmIHRoZSB2YWx1ZSBpcyBsb3dlciB0aGFuIERldmlhdGlvblJhbmdlTG93VmFsdWVcblx0ICpcblx0ICogVGhyZXNob2xkcyBhcmUgb3B0aW9uYWwuIEZvciB1bmFzc2lnbmVkIHZhbHVlcywgZGVmYXVsdHMgYXJlIGRldGVybWluZWQgaW4gdGhpcyBvcmRlcjpcblx0ICpcblx0ICogLSBGb3IgRGV2aWF0aW9uUmFuZ2UsIGFuIG9taXR0ZWQgTG93VmFsdWUgdHJhbnNsYXRlcyBpbnRvIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBudW1iZXIgKC1JTkYpLCBhbiBvbWl0dGVkIEhpZ2hWYWx1ZSB0cmFuc2xhdGVzIGludG8gdGhlIGxhcmdlc3QgcG9zc2libGUgbnVtYmVyICgrSU5GKVxuXHQgKiAtIEZvciBUb2xlcmFuY2VSYW5nZSwgYW4gb21pdHRlZCBMb3dWYWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gRm9yIEFjY2VwdGFuY2VSYW5nZSwgYW4gb21pdHRlZCBMb3dWYWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlLlxuXHQgKiBAcGFyYW0gc0ltcHJvdmVtZW50RGlyZWN0aW9uIEltcHJvdmVtZW50RGlyZWN0aW9uIHRvIGJlIHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBjcml0aWNhbGl0eSBiaW5kaW5nXG5cdCAqIEBwYXJhbSBzVmFsdWUgVmFsdWUgZnJvbSBEYXRhcG9pbnQgdG8gYmUgbWVhc3VyZWRcblx0ICogQHBhcmFtIHNEZXZpYXRpb25Mb3cgRXhwcmVzc2lvbkJpbmRpbmcgZm9yIExvd2VyIERldmlhdGlvbiBsZXZlbFxuXHQgKiBAcGFyYW0gc1RvbGVyYW5jZUxvdyBFeHByZXNzaW9uQmluZGluZyBmb3IgTG93ZXIgVG9sZXJhbmNlIGxldmVsXG5cdCAqIEBwYXJhbSBzQWNjZXB0YW5jZUxvdyBFeHByZXNzaW9uQmluZGluZyBmb3IgTG93ZXIgQWNjZXB0YW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc0FjY2VwdGFuY2VIaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgQWNjZXB0YW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc1RvbGVyYW5jZUhpZ2ggRXhwcmVzc2lvbkJpbmRpbmcgZm9yIEhpZ2hlciBUb2xlcmFuY2UgbGV2ZWxcblx0ICogQHBhcmFtIHNEZXZpYXRpb25IaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgRGV2aWF0aW9uIGxldmVsXG5cdCAqIEByZXR1cm5zIFJldHVybnMgY3JpdGljYWxpdHkgY2FsY3VsYXRpb24gYXMgZXhwcmVzc2lvbiBiaW5kaW5nXG5cdCAqL1xuXHRnZXRDcml0aWNhbGl0eUNhbGN1bGF0aW9uQmluZGluZzogZnVuY3Rpb24gKFxuXHRcdHNJbXByb3ZlbWVudERpcmVjdGlvbjogc3RyaW5nLFxuXHRcdHNWYWx1ZTogc3RyaW5nLFxuXHRcdHNEZXZpYXRpb25Mb3c6IHN0cmluZyB8IG51bWJlcixcblx0XHRzVG9sZXJhbmNlTG93OiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c0FjY2VwdGFuY2VMb3c6IHN0cmluZyB8IG51bWJlcixcblx0XHRzQWNjZXB0YW5jZUhpZ2g6IHN0cmluZyB8IG51bWJlcixcblx0XHRzVG9sZXJhbmNlSGlnaDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdHNEZXZpYXRpb25IaWdoOiBzdHJpbmcgfCBudW1iZXJcblx0KTogc3RyaW5nIHtcblx0XHRsZXQgc0NyaXRpY2FsaXR5RXhwcmVzc2lvbjogdHlwZW9mIFZhbHVlQ29sb3IgfCBzdHJpbmcgPSBWYWx1ZUNvbG9yLk5ldXRyYWw7IC8vIERlZmF1bHQgQ3JpdGljYWxpdHkgU3RhdGVcblxuXHRcdHNWYWx1ZSA9IGAlJHtzVmFsdWV9YDtcblxuXHRcdC8vIFNldHRpbmcgVW5hc3NpZ25lZCBWYWx1ZXNcblx0XHRzRGV2aWF0aW9uTG93ID0gc0RldmlhdGlvbkxvdyB8fCAtSW5maW5pdHk7XG5cdFx0c1RvbGVyYW5jZUxvdyA9IHNUb2xlcmFuY2VMb3cgfHwgc0RldmlhdGlvbkxvdztcblx0XHRzQWNjZXB0YW5jZUxvdyA9IHNBY2NlcHRhbmNlTG93IHx8IHNUb2xlcmFuY2VMb3c7XG5cdFx0c0RldmlhdGlvbkhpZ2ggPSBzRGV2aWF0aW9uSGlnaCB8fCBJbmZpbml0eTtcblx0XHRzVG9sZXJhbmNlSGlnaCA9IHNUb2xlcmFuY2VIaWdoIHx8IHNEZXZpYXRpb25IaWdoO1xuXHRcdHNBY2NlcHRhbmNlSGlnaCA9IHNBY2NlcHRhbmNlSGlnaCB8fCBzVG9sZXJhbmNlSGlnaDtcblxuXHRcdC8vIERlYWxpbmcgd2l0aCBEZWNpbWFsIGFuZCBQYXRoIGJhc2VkIGJpbmdkaW5nc1xuXHRcdHNEZXZpYXRpb25Mb3cgPSBzRGV2aWF0aW9uTG93ICYmICgrc0RldmlhdGlvbkxvdyA/ICtzRGV2aWF0aW9uTG93IDogYCUke3NEZXZpYXRpb25Mb3d9YCk7XG5cdFx0c1RvbGVyYW5jZUxvdyA9IHNUb2xlcmFuY2VMb3cgJiYgKCtzVG9sZXJhbmNlTG93ID8gK3NUb2xlcmFuY2VMb3cgOiBgJSR7c1RvbGVyYW5jZUxvd31gKTtcblx0XHRzQWNjZXB0YW5jZUxvdyA9IHNBY2NlcHRhbmNlTG93ICYmICgrc0FjY2VwdGFuY2VMb3cgPyArc0FjY2VwdGFuY2VMb3cgOiBgJSR7c0FjY2VwdGFuY2VMb3d9YCk7XG5cdFx0c0FjY2VwdGFuY2VIaWdoID0gc0FjY2VwdGFuY2VIaWdoICYmICgrc0FjY2VwdGFuY2VIaWdoID8gK3NBY2NlcHRhbmNlSGlnaCA6IGAlJHtzQWNjZXB0YW5jZUhpZ2h9YCk7XG5cdFx0c1RvbGVyYW5jZUhpZ2ggPSBzVG9sZXJhbmNlSGlnaCAmJiAoK3NUb2xlcmFuY2VIaWdoID8gK3NUb2xlcmFuY2VIaWdoIDogYCUke3NUb2xlcmFuY2VIaWdofWApO1xuXHRcdHNEZXZpYXRpb25IaWdoID0gc0RldmlhdGlvbkhpZ2ggJiYgKCtzRGV2aWF0aW9uSGlnaCA/ICtzRGV2aWF0aW9uSGlnaCA6IGAlJHtzRGV2aWF0aW9uSGlnaH1gKTtcblxuXHRcdC8vIENyZWF0aW5nIHJ1bnRpbWUgZXhwcmVzc2lvbiBiaW5kaW5nIGZyb20gY3JpdGljYWxpdHkgY2FsY3VsYXRpb24gZm9yIENyaXRpY2FsaXR5IFN0YXRlXG5cdFx0aWYgKHNJbXByb3ZlbWVudERpcmVjdGlvbi5pbmNsdWRlcyhcIk1pbmltaXplXCIpKSB7XG5cdFx0XHRzQ3JpdGljYWxpdHlFeHByZXNzaW9uID1cblx0XHRcdFx0XCJ7PSBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VIaWdoICtcblx0XHRcdFx0XCIgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkdvb2QgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuTmV1dHJhbCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0XCIoXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uSGlnaCArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uSGlnaCArXG5cdFx0XHRcdFwiKSA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuQ3JpdGljYWwgK1xuXHRcdFx0XHRcIicgOiAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkVycm9yICtcblx0XHRcdFx0XCInIH1cIjtcblx0XHR9IGVsc2UgaWYgKHNJbXByb3ZlbWVudERpcmVjdGlvbi5pbmNsdWRlcyhcIk1heGltaXplXCIpKSB7XG5cdFx0XHRzQ3JpdGljYWxpdHlFeHByZXNzaW9uID1cblx0XHRcdFx0XCJ7PSBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VMb3cgK1xuXHRcdFx0XHRcIiA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuR29vZCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlTG93ICtcblx0XHRcdFx0XCIgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLk5ldXRyYWwgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkxvdyArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5Dcml0aWNhbCArXG5cdFx0XHRcdFwiJyA6ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuRXJyb3IgK1xuXHRcdFx0XHRcIicgfVwiO1xuXHRcdH0gZWxzZSBpZiAoc0ltcHJvdmVtZW50RGlyZWN0aW9uLmluY2x1ZGVzKFwiVGFyZ2V0XCIpKSB7XG5cdFx0XHRzQ3JpdGljYWxpdHlFeHByZXNzaW9uID1cblx0XHRcdFx0XCJ7PSAoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlSGlnaCArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUxvdyArXG5cdFx0XHRcdFwiKSA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuR29vZCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0XCIoKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlTG93ICtcblx0XHRcdFx0XCIgJiYgXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VMb3cgK1xuXHRcdFx0XHRcIikgfHwgKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPiBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlSGlnaCArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlSGlnaCArXG5cdFx0XHRcdFwiKSkgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLk5ldXRyYWwgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKChcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25Mb3cgK1xuXHRcdFx0XHRcIiAmJiAoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+PSBcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25Mb3cgK1xuXHRcdFx0XHRcIikgJiYgKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPCBcIiArXG5cdFx0XHRcdHNUb2xlcmFuY2VMb3cgK1xuXHRcdFx0XHRcIikpIHx8ICgoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUhpZ2ggK1xuXHRcdFx0XHRcIikgJiYgXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uSGlnaCArXG5cdFx0XHRcdFwiICYmIChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkhpZ2ggK1xuXHRcdFx0XHRcIikpKSA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuQ3JpdGljYWwgK1xuXHRcdFx0XHRcIicgOiAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkVycm9yICtcblx0XHRcdFx0XCInIH1cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJDYXNlIG5vdCBzdXBwb3J0ZWQsIHJldHVybmluZyB0aGUgZGVmYXVsdCBWYWx1ZSBOZXV0cmFsXCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBzQ3JpdGljYWxpdHlFeHByZXNzaW9uO1xuXHR9LFxuXHQvKipcblx0ICogVG8gZmV0Y2ggbWVhc3VyZSBhdHRyaWJ1dGUgaW5kZXguXG5cdCAqIEBwYXJhbSBpTWVhc3VyZSBDaGFydCBBbm5vdGF0aW9uc1xuXHQgKiBAcGFyYW0gb0NoYXJ0QW5ub3RhdGlvbnMgQ2hhcnQgQW5ub3RhdGlvbnNcblx0ICogQHJldHVybnMgTWVhc3VyZUF0dHJpYnV0ZSBpbmRleC5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldE1lYXN1cmVBdHRyaWJ1dGVJbmRleDogZnVuY3Rpb24gKGlNZWFzdXJlOiBudW1iZXIsIG9DaGFydEFubm90YXRpb25zOiBNZXRhTW9kZWxUeXBlPENoYXJ0PiB8IENoYXJ0LCBpc01pY3JvQ2hhcnQ/OiBib29sZWFuKTogbnVtYmVyIHtcblx0XHRsZXQgYU1lYXN1cmVzLCBzTWVhc3VyZVByb3BlcnR5UGF0aDtcblx0XHRpZiAob0NoYXJ0QW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5sZW5ndGggJiYgb0NoYXJ0QW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhTWVhc3VyZXMgPSBvQ2hhcnRBbm5vdGF0aW9ucy5NZWFzdXJlcztcblx0XHRcdHNNZWFzdXJlUHJvcGVydHlQYXRoID0gaXNNaWNyb0NoYXJ0XG5cdFx0XHRcdD8gKGFNZWFzdXJlc1tpTWVhc3VyZV0gYXMgUHJvcGVydHlQYXRoKS52YWx1ZVxuXHRcdFx0XHQ6IChhTWVhc3VyZXNbaU1lYXN1cmVdIGFzIE1ldGFNb2RlbE1lYXN1cmUpLiRQcm9wZXJ0eVBhdGg7XG5cdFx0fSBlbHNlIGlmIChvQ2hhcnRBbm5vdGF0aW9ucz8uRHluYW1pY01lYXN1cmVzPy5sZW5ndGggJiYgb0NoYXJ0QW5ub3RhdGlvbnM/LkR5bmFtaWNNZWFzdXJlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0YU1lYXN1cmVzID0gKG9DaGFydEFubm90YXRpb25zIGFzIE1ldGFNb2RlbFR5cGU8Q2hhcnQ+KS5EeW5hbWljTWVhc3VyZXM7XG5cdFx0XHRzTWVhc3VyZVByb3BlcnR5UGF0aCA9IGFNZWFzdXJlcz8uW2lNZWFzdXJlXS4kQW5ub3RhdGlvblBhdGg7XG5cdFx0fVxuXHRcdGxldCBiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cztcblx0XHRjb25zdCBhTWVhc3VyZUF0dHJpYnV0ZXMgPSBvQ2hhcnRBbm5vdGF0aW9ucy5NZWFzdXJlQXR0cmlidXRlcztcblx0XHRsZXQgaU1lYXN1cmVBdHRyaWJ1dGUgPSAtMTtcblx0XHRjb25zdCBmbkNoZWNrTWVhc3VyZSA9IGZ1bmN0aW9uIChcblx0XHRcdHNNZWFzdXJlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdFx0b01lYXN1cmVBdHRyaWJ1dGU6IE1ldGFNb2RlbFR5cGU8Q2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZT4gfCBDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlLFxuXHRcdFx0aW5kZXg6IG51bWJlclxuXHRcdCk6IGJvb2xlYW4ge1xuXHRcdFx0aWYgKG9NZWFzdXJlQXR0cmlidXRlKSB7XG5cdFx0XHRcdGNvbnN0IHBhdGggPSBpc01pY3JvQ2hhcnRcblx0XHRcdFx0XHQ/IChvTWVhc3VyZUF0dHJpYnV0ZSBhcyBDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlKS5NZWFzdXJlPy52YWx1ZVxuXHRcdFx0XHRcdDogKG9NZWFzdXJlQXR0cmlidXRlIGFzIE1ldGFNb2RlbFR5cGU8Q2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZT4pLk1lYXN1cmU/LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGlmIChvTWVhc3VyZUF0dHJpYnV0ZS5NZWFzdXJlICYmIHBhdGggPT09IHNNZWFzdXJlUGF0aCkge1xuXHRcdFx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID0gaW5kZXg7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0b01lYXN1cmVBdHRyaWJ1dGUuRHluYW1pY01lYXN1cmUgJiZcblx0XHRcdFx0XHQob01lYXN1cmVBdHRyaWJ1dGUgYXMgTWV0YU1vZGVsVHlwZTxDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlPik/LkR5bmFtaWNNZWFzdXJlPy4kQW5ub3RhdGlvblBhdGggPT09IHNNZWFzdXJlUGF0aFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IGluZGV4O1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0XHRpZiAoYU1lYXN1cmVBdHRyaWJ1dGVzKSB7XG5cdFx0XHRiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cyA9IGFNZWFzdXJlQXR0cmlidXRlcy5zb21lKGZuQ2hlY2tNZWFzdXJlLmJpbmQobnVsbCwgc01lYXN1cmVQcm9wZXJ0eVBhdGgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGJNZWFzdXJlQXR0cmlidXRlRXhpc3RzICYmIGlNZWFzdXJlQXR0cmlidXRlID4gLTEgPyBpTWVhc3VyZUF0dHJpYnV0ZSA6IC0xO1xuXHR9LFxuXG5cdGdldE1lYXN1cmVBdHRyaWJ1dGU6IGFzeW5jIGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzQ2hhcnRBbm5vdGF0aW9uUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRyZXR1cm4gb01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KHNDaGFydEFubm90YXRpb25QYXRoKS50aGVuKGZ1bmN0aW9uIChvQ2hhcnRBbm5vdGF0aW9uczogTWV0YU1vZGVsVHlwZTxDaGFydD4pIHtcblx0XHRcdGNvbnN0IGFNZWFzdXJlQXR0cmlidXRlcyA9IG9DaGFydEFubm90YXRpb25zLk1lYXN1cmVBdHRyaWJ1dGVzLFxuXHRcdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IENvbW1vbkhlbHBlci5nZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgoMCwgb0NoYXJ0QW5ub3RhdGlvbnMpO1xuXHRcdFx0Y29uc3Qgc01lYXN1cmVBdHRyaWJ1dGVQYXRoID1cblx0XHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXM/LltpTWVhc3VyZUF0dHJpYnV0ZV0gJiYgYU1lYXN1cmVBdHRyaWJ1dGVzW2lNZWFzdXJlQXR0cmlidXRlXS5EYXRhUG9pbnRcblx0XHRcdFx0XHQ/IGAke3NDaGFydEFubm90YXRpb25QYXRofS9NZWFzdXJlQXR0cmlidXRlcy8ke2lNZWFzdXJlQXR0cmlidXRlfS9gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoc01lYXN1cmVBdHRyaWJ1dGVQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJEYXRhUG9pbnQgbWlzc2luZyBmb3IgdGhlIG1lYXN1cmVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc01lYXN1cmVBdHRyaWJ1dGVQYXRoID8gYCR7c01lYXN1cmVBdHRyaWJ1dGVQYXRofURhdGFQb2ludC8kQW5ub3RhdGlvblBhdGgvYCA6IHNNZWFzdXJlQXR0cmlidXRlUGF0aDtcblx0XHR9KTtcblx0fSxcblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbWVhc3VyZUF0dHJpYnV0ZSBmb3IgdGhlIG1lYXN1cmUuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IHRvIHRoZSBtZWFzdXJlIGFubm90YXRpb25cblx0ICogQHJldHVybnMgUGF0aCB0byB0aGUgbWVhc3VyZUF0dHJpYnV0ZSBvZiB0aGUgbWVhc3VyZVxuXHQgKi9cblx0Z2V0TWVhc3VyZUF0dHJpYnV0ZUZvck1lYXN1cmU6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzTWVhc3VyZVBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRzQ2hhcnRBbm5vdGF0aW9uUGF0aCA9IHNNZWFzdXJlUGF0aC5zdWJzdHJpbmcoMCwgc01lYXN1cmVQYXRoLmxhc3RJbmRleE9mKFwiTWVhc3VyZVwiKSksXG5cdFx0XHRpTWVhc3VyZSA9IHNNZWFzdXJlUGF0aC5yZXBsYWNlKC8uKlxcLy8sIFwiXCIpO1xuXG5cdFx0Y29uc3Qgb0NoYXJ0QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzQ2hhcnRBbm5vdGF0aW9uUGF0aCk7XG5cdFx0Y29uc3QgYU1lYXN1cmVBdHRyaWJ1dGVzID0gb0NoYXJ0QW5ub3RhdGlvbnMuTWVhc3VyZUF0dHJpYnV0ZXMsXG5cdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IENvbW1vbkhlbHBlci5nZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgoaU1lYXN1cmUgYXMgdW5rbm93biBhcyBudW1iZXIsIG9DaGFydEFubm90YXRpb25zKTtcblx0XHRjb25zdCBzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPVxuXHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXNbaU1lYXN1cmVBdHRyaWJ1dGVdICYmIGFNZWFzdXJlQXR0cmlidXRlc1tpTWVhc3VyZUF0dHJpYnV0ZV0uRGF0YVBvaW50XG5cdFx0XHRcdD8gYCR7c0NoYXJ0QW5ub3RhdGlvblBhdGh9TWVhc3VyZUF0dHJpYnV0ZXMvJHtpTWVhc3VyZUF0dHJpYnV0ZX0vYFxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAoc01lYXN1cmVBdHRyaWJ1dGVQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdExvZy53YXJuaW5nKFwiRGF0YVBvaW50IG1pc3NpbmcgZm9yIHRoZSBtZWFzdXJlXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gc01lYXN1cmVBdHRyaWJ1dGVQYXRoID8gYCR7c01lYXN1cmVBdHRyaWJ1dGVQYXRofURhdGFQb2ludC8kQW5ub3RhdGlvblBhdGgvYCA6IHNNZWFzdXJlQXR0cmlidXRlUGF0aDtcblx0fSxcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbnRhaW5lZCBuYXZpZ2F0aW9uIHByb3BlcnR5IGhhcyBhIGRyYWZ0IHJvb3Qvbm9kZSBwYXJlbnQgZW50aXR5U2V0LlxuXHQgKiBAcGFyYW0gb1RhcmdldENvbGxlY3Rpb25Db250YWluc1RhcmdldCBUYXJnZXQgY29sbGVjdGlvbiBoYXMgQ29udGFpbnNUYXJnZXQgcHJvcGVydHlcblx0ICogQHBhcmFtIG9UYWJsZU1ldGFkYXRhIFRhYmxlIG1ldGFkYXRhIGZvciB3aGljaCBkcmFmdCBzdXBwb3J0IHNoYWxsIGJlIGNoZWNrZWRcblx0ICogQHBhcmFtIG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldFxuXHQgKiBAcGFyYW0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0Lm9Nb2RlbFxuXHQgKiBAcGFyYW0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0LnNQYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBkcmFmdFxuXHQgKi9cblx0aXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50OiBmdW5jdGlvbiAoXG5cdFx0b1RhcmdldENvbGxlY3Rpb25Db250YWluc1RhcmdldDogb2JqZWN0LFxuXHRcdG9UYWJsZU1ldGFkYXRhOiB7XG5cdFx0XHRwYXJlbnRFbnRpdHlTZXQ/OiB7XG5cdFx0XHRcdG9Nb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cdFx0XHRcdHNQYXRoPzogc3RyaW5nO1xuXHRcdFx0fTtcblx0XHR9XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGlmIChvVGFyZ2V0Q29sbGVjdGlvbkNvbnRhaW5zVGFyZ2V0KSB7XG5cdFx0XHRpZiAob1RhYmxlTWV0YWRhdGEgJiYgb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0ICYmIG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5zUGF0aCkge1xuXHRcdFx0XHRjb25zdCBzUGFyZW50RW50aXR5U2V0UGF0aCA9IG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5zUGF0aDtcblx0XHRcdFx0Y29uc3Qgb0RyYWZ0Um9vdCA9IG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5vTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdGAke3NQYXJlbnRFbnRpdHlTZXRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290YFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBvRHJhZnROb2RlID0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0Lm9Nb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdFx0YCR7c1BhcmVudEVudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVgXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChvRHJhZnRSb290IHx8IG9EcmFmdE5vZGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBFbnN1cmVzIHRoZSBkYXRhIGlzIHByb2Nlc3NlZCBhcyBkZWZpbmVkIGluIHRoZSB0ZW1wbGF0ZS5cblx0ICogU2luY2UgdGhlIHByb3BlcnR5IERhdGEgaXMgb2YgdGhlIHR5cGUgJ29iamVjdCcsIGl0IG1heSBub3QgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZGF0YUVsZW1lbnQgVGhlIGRhdGEgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLlxuXHQgKiBAcmV0dXJucyBUaGUgY29ycmVjdCBwYXRoIGFjY29yZGluZyB0byB0aGUgdGVtcGxhdGUuXG5cdCAqL1xuXHRnZXREYXRhRnJvbVRlbXBsYXRlOiBmdW5jdGlvbiAoZGF0YUVsZW1lbnQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHNwbGl0UGF0aCA9IGRhdGFFbGVtZW50LmdldFBhdGgoKS5zcGxpdChcIi9cIik7XG5cdFx0Y29uc3QgZGF0YUtleSA9IHNwbGl0UGF0aFtzcGxpdFBhdGgubGVuZ3RoIC0gMV07XG5cdFx0Y29uc3QgY29ubmVjdGVkRGF0YVBhdGggPSBgLyR7c3BsaXRQYXRoLnNsaWNlKDEsIC0yKS5qb2luKFwiL1wiKX0vQGA7XG5cdFx0Y29uc3QgY29ubmVjdGVkT2JqZWN0ID0gZGF0YUVsZW1lbnQuZ2V0T2JqZWN0KGNvbm5lY3RlZERhdGFQYXRoKTtcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IGNvbm5lY3RlZE9iamVjdC5UZW1wbGF0ZTtcblx0XHRjb25zdCBzcGxpdFRlbXAgPSB0ZW1wbGF0ZS5zcGxpdChcIn1cIik7XG5cdFx0Y29uc3QgdGVtcEFycmF5ID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdFRlbXAubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBzcGxpdFRlbXBbaV0uc3BsaXQoXCJ7XCIpWzFdLnRyaW0oKTtcblx0XHRcdHRlbXBBcnJheS5wdXNoKGtleSk7XG5cdFx0fVxuXHRcdE9iamVjdC5rZXlzKGNvbm5lY3RlZE9iamVjdC5EYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdGlmIChzS2V5LnN0YXJ0c1dpdGgoXCIkXCIpKSB7XG5cdFx0XHRcdGRlbGV0ZSBjb25uZWN0ZWRPYmplY3QuRGF0YVtzS2V5XTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRjb25zdCBpbmRleCA9IE9iamVjdC5rZXlzKGNvbm5lY3RlZE9iamVjdC5EYXRhKS5pbmRleE9mKGRhdGFLZXkpO1xuXHRcdHJldHVybiBgLyR7c3BsaXRQYXRoLnNsaWNlKDEsIC0yKS5qb2luKFwiL1wiKX0vRGF0YS8ke3RlbXBBcnJheVtpbmRleF19YDtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBlbmQgb2YgdGhlIHRlbXBsYXRlIGhhcyBiZWVuIHJlYWNoZWQuXG5cdCAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvZiB0aGUgY29ubmVjdGVkIGZpZWxkcy5cblx0ICogQHBhcmFtIHRhcmdldC5UZW1wbGF0ZVxuXHQgKiBAcGFyYW0gdGFyZ2V0LkRhdGFcblx0ICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLlxuXHQgKiBAcmV0dXJucyBUcnVlIG9yIEZhbHNlIChkZXBlbmRpbmcgb24gdGhlIHRlbXBsYXRlIGluZGV4KS5cblx0ICovXG5cdG5vdExhc3RJbmRleDogZnVuY3Rpb24gKHRhcmdldDogeyBUZW1wbGF0ZTogc3RyaW5nOyBEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9LCBlbGVtZW50OiBvYmplY3QpOiBib29sZWFuIHtcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IHRhcmdldC5UZW1wbGF0ZTtcblx0XHRjb25zdCBzcGxpdFRlbXAgPSB0ZW1wbGF0ZS5zcGxpdChcIn1cIik7XG5cdFx0Y29uc3QgdGVtcEFycmF5OiBzdHJpbmdbXSA9IFtdO1xuXHRcdGxldCBpc0xhc3RJbmRleCA9IGZhbHNlO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc3BsaXRUZW1wLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0Y29uc3QgZGF0YUtleSA9IHNwbGl0VGVtcFtpXS5zcGxpdChcIntcIilbMV0udHJpbSgpO1xuXHRcdFx0dGVtcEFycmF5LnB1c2goZGF0YUtleSk7XG5cdFx0fVxuXG5cdFx0dGVtcEFycmF5LmZvckVhY2goZnVuY3Rpb24gKHRlbXBsYXRlSW5mbzogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCBsYXN0SW5kZXggPSB0ZW1wQXJyYXkubGVuZ3RoIC0gMTtcblx0XHRcdGlmICh0YXJnZXQuRGF0YVt0ZW1wbGF0ZUluZm9dID09PSBlbGVtZW50ICYmIHRlbXBBcnJheS5pbmRleE9mKHRlbXBsYXRlSW5mbykgPCBsYXN0SW5kZXgpIHtcblx0XHRcdFx0aXNMYXN0SW5kZXggPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBpc0xhc3RJbmRleDtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUgZGVsaW1pdGVyIGZyb20gdGhlIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gdGVtcGxhdGUgVGhlIHRlbXBsYXRlIHN0cmluZy5cblx0ICogQHJldHVybnMgVGhlIGRlbGltaXRlciBpbiB0aGUgdGVtcGxhdGUgc3RyaW5nLlxuXHQgKi9cblx0Z2V0RGVsaW1pdGVyOiBmdW5jdGlvbiAodGVtcGxhdGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRlbXBsYXRlLnNwbGl0KFwifVwiKVsxXS5zcGxpdChcIntcIilbMF0udHJpbSgpO1xuXHR9LFxuXG5cdG9NZXRhTW9kZWw6IHVuZGVmaW5lZCBhcyBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZCxcblx0c2V0TWV0YU1vZGVsOiBmdW5jdGlvbiAob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiB2b2lkIHtcblx0XHR0aGlzLm9NZXRhTW9kZWwgPSBvTWV0YU1vZGVsO1xuXHR9LFxuXG5cdGdldE1ldGFNb2RlbDogZnVuY3Rpb24gKCk6IE9EYXRhTWV0YU1vZGVsIHtcblx0XHRyZXR1cm4gdGhpcy5vTWV0YU1vZGVsITtcblx0fSxcblxuXHRnZXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAoc1BhdGg6IHN0cmluZywgbWV0YU1vZGVsPzogT0RhdGFNZXRhTW9kZWwpOiBzdHJpbmdbXSB7XG5cdFx0aWYgKG1ldGFNb2RlbCkge1xuXHRcdFx0Y29uc3Qgb1BhcmFtZXRlckluZm8gPSBDb21tb25VdGlscy5nZXRQYXJhbWV0ZXJJbmZvKG1ldGFNb2RlbCwgc1BhdGgpO1xuXHRcdFx0aWYgKG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMpIHtcblx0XHRcdFx0cmV0dXJuIE9iamVjdC5rZXlzKG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH0sXG5cblx0LyoqXG5cdCAqIEJ1aWxkIGFuIGV4cHJlc3Npb24gY2FsbGluZyBhbiBhY3Rpb24gaGFuZGxlciB2aWEgdGhlIEZQTSBoZWxwZXIncyBhY3Rpb25XcmFwcGVyIGZ1bmN0aW9uXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSAnRlBNLmFjdGlvbldyYXBwZXIoKScgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGF0IHJ1bnRpbWUuXG5cdCAqIEBwYXJhbSBvQWN0aW9uIEFjdGlvbiBtZXRhZGF0YVxuXHQgKiBAcGFyYW0gb0FjdGlvbi5oYW5kbGVyTW9kdWxlIE1vZHVsZSBjb250YWluaW5nIHRoZSBhY3Rpb24gaGFuZGxlciBtZXRob2Rcblx0ICogQHBhcmFtIG9BY3Rpb24uaGFuZGxlck1ldGhvZCBBY3Rpb24gaGFuZGxlciBtZXRob2QgbmFtZVxuXHQgKiBAcGFyYW0gW29UaGlzXSBgdGhpc2AgKGlmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhIG1hY3JvKVxuXHQgKiBAcGFyYW0gb1RoaXMuaWQgVGhlIHRhYmxlJ3MgSURcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuXHQgKiBAcmV0dXJucyBUaGUgYWN0aW9uIHdyYXBwZXIgYmluZGluZ1x0ZXhwcmVzc2lvblxuXHQgKi9cblx0YnVpbGRBY3Rpb25XcmFwcGVyOiBmdW5jdGlvbiAoXG5cdFx0b0FjdGlvbjogQ3VzdG9tQWN0aW9uLFxuXHRcdG9UaGlzOiB7IGlkPzogc3RyaW5nIH0gfCB1bmRlZmluZWQsXG5cdFx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuXHQpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3QgYVBhcmFtczogdW5rbm93bltdID0gW3JlZihcIiRldmVudFwiKSwgb0FjdGlvbi5oYW5kbGVyTW9kdWxlLCBvQWN0aW9uLmhhbmRsZXJNZXRob2RdO1xuXG5cdFx0aWYgKG9UaGlzICYmIG9UaGlzLmlkKSB7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsUGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiJHtpbnRlcm5hbD5zZWxlY3RlZENvbnRleHRzfVwiIDogXCIke2ludGVybmFsPmNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHN9XCI7XG5cdFx0XHRjb25zdCBvQWRkaXRpb25hbFBhcmFtcyA9IHsgY29udGV4dHM6IHJlZihpbnRlcm5hbE1vZGVsUGF0aCkgfTtcblx0XHRcdGFQYXJhbXMucHVzaChvQWRkaXRpb25hbFBhcmFtcyk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihmbihcIkZQTS5hY3Rpb25XcmFwcGVyXCIsIGFQYXJhbXMpKTtcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHZhbHVlIHdoZXRoZXIgb3Igbm90IHRoZSBlbGVtZW50IHNob3VsZCBiZSB2aXNpYmxlIGRlcGVuZGluZyBvbiB0aGUgSGlkZGVuIGFubm90YXRpb24uXG5cdCAqIEl0IGlzIGludmVydGVkIGFzIHRoZSBVSSBlbGVtZW50cyBoYXZlIGEgdmlzaWJsZSBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGEgaGlkZGVuIG9uZS5cblx0ICogQHBhcmFtIGRhdGFGaWVsZEFubm90YXRpb25zIFRoZSBkYXRhRmllbGQgb2JqZWN0XG5cdCAqIEByZXR1cm5zIEEgcGF0aCBvciBhIEJvb2xlYW5cblx0ICovXG5cdGdldEhpZGRlblBhdGhFeHByZXNzaW9uOiBmdW5jdGlvbiAoZGF0YUZpZWxkQW5ub3RhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHsgJFBhdGg/OiBzdHJpbmcgfT4pOiBzdHJpbmcgfCBib29sZWFuIHtcblx0XHRpZiAoZGF0YUZpZWxkQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBoaWRkZW4gPSBkYXRhRmllbGRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl07XG5cdFx0XHRyZXR1cm4gdHlwZW9mIGhpZGRlbiA9PT0gXCJvYmplY3RcIiA/IFwiez0gISR7XCIgKyBoaWRkZW4uJFBhdGggKyBcIn0gfVwiIDogIWhpZGRlbjtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBmZXRjaCB0aGUgY29ycmVjdCBvcGVyYXRvcnMgYmFzZWQgb24gdGhlIGZpbHRlciByZXN0cmljdGlvbnMgdGhhdCBjYW4gYmUgYW5ub3RhdGVkIG9uIGFuIGVudGl0eSBzZXQgb3IgYSBuYXZpZ2F0aW9uIHByb3BlcnR5LlxuXHQgKiBXZSByZXR1cm4gdGhlIGNvcnJlY3Qgb3BlcmF0b3JzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgcmVzdHJpY3Rpb24gYW5kIGFsc28gY2hlY2sgZm9yIHRoZSBvcGVyYXRvcnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgdG8gaW5jbHVkZSBvciBleGNsdWRlIHRoZW0uXG5cdCAqIEBwYXJhbSBzUHJvcGVydHkgU3RyaW5nIG5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBzRW50aXR5U2V0UGF0aCBTdHJpbmcgcGF0aCB0byB0aGUgZW50aXR5IHNldFxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCB1c2VkIGR1cmluZyB0ZW1wbGF0aW5nXG5cdCAqIEBwYXJhbSBzVHlwZSBTdHJpbmcgZGF0YSB0eXBlIG9kIHRoZSBwcm9wZXJ0eSwgZm9yIGV4YW1wbGUgZWRtLkRhdGVcblx0ICogQHBhcmFtIGJVc2VTZW1hbnRpY0RhdGVSYW5nZSBCb29sZWFuIHBhc3NlZCBmcm9tIHRoZSBtYW5pZmVzdCBmb3Igc2VtYW50aWMgZGF0ZSByYW5nZVxuXHQgKiBAcGFyYW0gc2V0dGluZ3MgU3RyaW5naWZpZWQgb2JqZWN0IG9mIHRoZSBwcm9wZXJ0eSBzZXR0aW5ncyBvciBwcm9wZXJ0eSBzZXR0aW5ncyBhcyBhIHdob2xlXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIG9wZXJhdG9ycyBmb3IgZmlsdGVyaW5nXG5cdCAqL1xuXHRnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eTogZnVuY3Rpb24gKFxuXHRcdHNQcm9wZXJ0eTogc3RyaW5nLFxuXHRcdHNFbnRpdHlTZXRQYXRoOiBzdHJpbmcsXG5cdFx0b0NvbnRleHQ6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdHNUeXBlPzogc3RyaW5nLFxuXHRcdGJVc2VTZW1hbnRpY0RhdGVSYW5nZT86IGJvb2xlYW4gfCBzdHJpbmcsXG5cdFx0c2V0dGluZ3M/OiBGaWx0ZXJTZXR0aW5ncyB8IHN0cmluZ1xuXHQpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IENvbW1vblV0aWxzLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aChzRW50aXR5U2V0UGF0aCwgb0NvbnRleHQpO1xuXHRcdGNvbnN0IGFFcXVhbHNPcHMgPSBbXCJFUVwiXTtcblx0XHRjb25zdCBhU2luZ2xlUmFuZ2VPcHMgPSBbXCJFUVwiLCBcIkdFXCIsIFwiTEVcIiwgXCJMVFwiLCBcIkdUXCIsIFwiQlRcIiwgXCJOT1RMRVwiLCBcIk5PVExUXCIsIFwiTk9UR0VcIiwgXCJOT1RHVFwiXTtcblx0XHRjb25zdCBhU2luZ2xlUmFuZ2VEVEJhc2ljT3BzID0gW1wiRVFcIiwgXCJCVFwiXTtcblx0XHRjb25zdCBhTXVsdGlSYW5nZU9wcyA9IFtcIkVRXCIsIFwiR0VcIiwgXCJMRVwiLCBcIkxUXCIsIFwiR1RcIiwgXCJCVFwiLCBcIk5FXCIsIFwiTk9UQlRcIiwgXCJOT1RMRVwiLCBcIk5PVExUXCIsIFwiTk9UR0VcIiwgXCJOT1RHVFwiXTtcblx0XHRjb25zdCBhU2VhcmNoRXhwcmVzc2lvbk9wcyA9IFtcIkNvbnRhaW5zXCIsIFwiTm90Q29udGFpbnNcIiwgXCJTdGFydHNXaXRoXCIsIFwiTm90U3RhcnRzV2l0aFwiLCBcIkVuZHNXaXRoXCIsIFwiTm90RW5kc1dpdGhcIl07XG5cdFx0Y29uc3QgYUJhc2ljU2VtYW50aWNEYXRlT3BzID0gU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldEJhc2ljU2VtYW50aWNEYXRlT3BlcmF0aW9ucygpO1xuXHRcdGNvbnN0IGJTZW1hbnRpY0RhdGVSYW5nZSA9IGJVc2VTZW1hbnRpY0RhdGVSYW5nZSA9PT0gXCJ0cnVlXCIgfHwgYlVzZVNlbWFudGljRGF0ZVJhbmdlID09PSB0cnVlO1xuXHRcdGxldCBhU2VtYW50aWNEYXRlT3BzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IG9TZXR0aW5ncyA9IHNldHRpbmdzICYmIHR5cGVvZiBzZXR0aW5ncyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uoc2V0dGluZ3MpLmN1c3RvbURhdGEgOiBzZXR0aW5ncztcblxuXHRcdGlmICgob0NvbnRleHQuZ2V0T2JqZWN0KGAke3NFbnRpdHlTZXRQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRgKSBhcyB1bmtub3duKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIGFFcXVhbHNPcHM7XG5cdFx0fVxuXG5cdFx0aWYgKG9TZXR0aW5ncyAmJiBvU2V0dGluZ3Mub3BlcmF0b3JDb25maWd1cmF0aW9uICYmIG9TZXR0aW5ncy5vcGVyYXRvckNvbmZpZ3VyYXRpb24ubGVuZ3RoID4gMCkge1xuXHRcdFx0YVNlbWFudGljRGF0ZU9wcyA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRGaWx0ZXJPcGVyYXRpb25zKG9TZXR0aW5ncy5vcGVyYXRvckNvbmZpZ3VyYXRpb24sIHNUeXBlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YVNlbWFudGljRGF0ZU9wcyA9IERlZmF1bHRTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2VtYW50aWNEYXRlT3BlcmF0aW9ucyhzVHlwZSk7XG5cdFx0fVxuXHRcdC8vIEdldCB0aGUgZGVmYXVsdCBPcGVyYXRvcnMgZm9yIHRoaXMgUHJvcGVydHkgVHlwZVxuXHRcdGNvbnN0IGFEZWZhdWx0T3BlcmF0b3JzID0gX2dldERlZmF1bHRPcGVyYXRvcnMoc1R5cGUpO1xuXHRcdGxldCBzdXBwb3J0ZWRPcGVyYXRvcnMgPSBhRGVmYXVsdE9wZXJhdG9ycztcblx0XHRpZiAoYlNlbWFudGljRGF0ZVJhbmdlKSB7XG5cdFx0XHRjb25zdCBleHRlbmRlZFNlbWFudGljRGF0ZU9wZXJhdG9ycyA9IEV4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldFNlbWFudGljRGF0ZU9wZXJhdGlvbnMoKTtcblx0XHRcdHN1cHBvcnRlZE9wZXJhdG9ycyA9IFsuLi5hQmFzaWNTZW1hbnRpY0RhdGVPcHMsIC4uLmFEZWZhdWx0T3BlcmF0b3JzLCAuLi5leHRlbmRlZFNlbWFudGljRGF0ZU9wZXJhdG9yc107XG5cdFx0fVxuXG5cdFx0bGV0IHJlc3RyaWN0aW9uczogc3RyaW5nW10gPSBbXTtcblxuXHRcdC8vIElzIHRoZXJlIGEgRmlsdGVyIFJlc3RyaWN0aW9uIGRlZmluZWQgZm9yIHRoaXMgcHJvcGVydHk/XG5cdFx0aWYgKFxuXHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9ucyAmJlxuXHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgJiZcblx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zW3NQcm9wZXJ0eV1cblx0XHQpIHtcblx0XHRcdC8vIEV4dGVuZGluZyB0aGUgZGVmYXVsdCBvcGVyYXRvcnMgbGlzdCB3aXRoIFNlbWFudGljIERhdGUgb3B0aW9ucyBEQVRFUkFOR0UsIERBVEUsIEZST00gYW5kIFRPXG5cdFx0XHRjb25zdCBzQWxsb3dlZEV4cHJlc3Npb24gPSBDb21tb25VdGlscy5nZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uKG9GaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zW3NQcm9wZXJ0eV0pO1xuXHRcdFx0Ly8gSW4gY2FzZSBtb3JlIHRoYW4gb25lIEFsbG93ZWQgRXhwcmVzc2lvbnMgaGFzIGJlZW4gZGVmaW5lZCBmb3IgYSBwcm9wZXJ0eVxuXHRcdFx0Ly8gY2hvb3NlIHRoZSBtb3N0IHJlc3RyaWN0aXZlIEFsbG93ZWQgRXhwcmVzc2lvblxuXG5cdFx0XHQvLyBNdWx0aVZhbHVlIGhhcyBzYW1lIE9wZXJhdG9yIGFzIFNpbmdsZVZhbHVlLCBidXQgdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgKG1heENvbmRpdGlvbnMpXG5cdFx0XHRzd2l0Y2ggKHNBbGxvd2VkRXhwcmVzc2lvbikge1xuXHRcdFx0XHRjYXNlIFwiU2luZ2xlVmFsdWVcIjpcblx0XHRcdFx0XHRjb25zdCBzaW5nbGVWYWx1ZURhdGVPcHMgPSBEZWZhdWx0U2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldFNpbmdsZVZhbHVlRGF0ZU9wZXJhdGlvbnMoKTtcblx0XHRcdFx0XHRjb25zdCBhU2luZ2xlVmFsdWVPcHMgPSBzVHlwZSA9PT0gXCJFZG0uRGF0ZVwiICYmIGJTZW1hbnRpY0RhdGVSYW5nZSA/IHNpbmdsZVZhbHVlRGF0ZU9wcyA6IGFFcXVhbHNPcHM7XG5cdFx0XHRcdFx0cmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhzdXBwb3J0ZWRPcGVyYXRvcnMsIGFTaW5nbGVWYWx1ZU9wcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJNdWx0aVZhbHVlXCI6XG5cdFx0XHRcdFx0Y29uc3QgbXVsdGlWYWx1ZU9wZXJhdG9ycyA9IFsuLi5hRXF1YWxzT3BzLCBcIkVtcHR5XCIsIFwiTm90RW1wdHlcIl07XG5cdFx0XHRcdFx0cmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhzdXBwb3J0ZWRPcGVyYXRvcnMsIG11bHRpVmFsdWVPcGVyYXRvcnMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiU2luZ2xlUmFuZ2VcIjpcblx0XHRcdFx0XHRsZXQgYUV4cHJlc3Npb25PcHM6IHN0cmluZ1tdO1xuXHRcdFx0XHRcdGlmIChiU2VtYW50aWNEYXRlUmFuZ2UpIHtcblx0XHRcdFx0XHRcdGlmIChzVHlwZSA9PT0gXCJFZG0uRGF0ZVwiKSB7XG5cdFx0XHRcdFx0XHRcdGFFeHByZXNzaW9uT3BzID0gYVNlbWFudGljRGF0ZU9wcztcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoc1R5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRcdFx0XHRcdFx0YUV4cHJlc3Npb25PcHMgPSBhU2VtYW50aWNEYXRlT3BzO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YUV4cHJlc3Npb25PcHMgPSBhU2luZ2xlUmFuZ2VPcHM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIikge1xuXHRcdFx0XHRcdFx0YUV4cHJlc3Npb25PcHMgPSBhU2luZ2xlUmFuZ2VEVEJhc2ljT3BzO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IGFTaW5nbGVSYW5nZU9wcztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3Qgc09wZXJhdG9ycyA9IF9nZXRSZXN0cmljdGlvbnMoc3VwcG9ydGVkT3BlcmF0b3JzLCBhRXhwcmVzc2lvbk9wcyk7XG5cdFx0XHRcdFx0cmVzdHJpY3Rpb25zID0gc09wZXJhdG9ycztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIk11bHRpUmFuZ2VcIjpcblx0XHRcdFx0XHRyZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKHN1cHBvcnRlZE9wZXJhdG9ycywgYU11bHRpUmFuZ2VPcHMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiU2VhcmNoRXhwcmVzc2lvblwiOlxuXHRcdFx0XHRcdHJlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoc3VwcG9ydGVkT3BlcmF0b3JzLCBhU2VhcmNoRXhwcmVzc2lvbk9wcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXCI6XG5cdFx0XHRcdFx0cmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhzdXBwb3J0ZWRPcGVyYXRvcnMsIGFTZWFyY2hFeHByZXNzaW9uT3BzLmNvbmNhdChhTXVsdGlSYW5nZU9wcykpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Ly8gSW4gY2FzZSBBbGxvd2VkRXhwcmVzc2lvbnMgaXMgbm90IHJlY29nbmlzZWQsIHVuZGVmaW5lZCBpbiByZXR1cm4gcmVzdWx0cyBpbiB0aGUgZGVmYXVsdCBzZXQgb2Zcblx0XHRcdC8vIG9wZXJhdG9ycyBmb3IgdGhlIHR5cGUuXG5cdFx0fVxuXHRcdHJldHVybiByZXN0cmljdGlvbnM7XG5cdH0sXG5cdGdldE9wZXJhdG9yc0ZvckRhdGVQcm9wZXJ0eTogZnVuY3Rpb24gKHByb3BlcnR5VHlwZTogc3RyaW5nKTogc3RyaW5nW10ge1xuXHRcdC8vIEluIGNhc2UgQWxsb3dlZEV4cHJlc3Npb25zIGlzIG5vdCBwcm92aWRlZCBmb3IgdHlwZSBFZG0uRGF0ZSB0aGVuIGFsbCB0aGUgZGVmYXVsdFxuXHRcdC8vIG9wZXJhdG9ycyBmb3IgdGhlIHR5cGUgc2hvdWxkIGJlIHJldHVybmVkIGV4Y2x1ZGluZyBzZW1hbnRpYyBvcGVyYXRvcnMgZnJvbSB0aGUgbGlzdC5cblx0XHRjb25zdCBhRGVmYXVsdE9wZXJhdG9ycyA9IF9nZXREZWZhdWx0T3BlcmF0b3JzKHByb3BlcnR5VHlwZSk7XG5cdFx0Y29uc3QgYU11bHRpUmFuZ2VPcHMgPSBbXCJFUVwiLCBcIkdFXCIsIFwiTEVcIiwgXCJMVFwiLCBcIkdUXCIsIFwiQlRcIiwgXCJORVwiLCBcIk5PVEJUXCIsIFwiTk9UTEVcIiwgXCJOT1RMVFwiLCBcIk5PVEdFXCIsIFwiTk9UR1RcIl07XG5cdFx0cmV0dXJuIF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFNdWx0aVJhbmdlT3BzKTtcblx0fSxcblx0Z2V0QUlJY29uOiBmdW5jdGlvbiAoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gYWlJY29uO1xuXHR9XG59O1xuKENvbW1vbkhlbHBlci5nZXRTb3J0Q29uZGl0aW9ucyBhcyB7IHJlcXVpcmVzSUNvbnRleHQ/OiBib29sZWFuIH0pLnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG5leHBvcnQgZGVmYXVsdCBDb21tb25IZWxwZXI7XG4iXSwibWFwcGluZ3Mi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
|
|
834
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2V0UmVzdHJpY3Rpb25zIiwiYURlZmF1bHRPcHMiLCJhRXhwcmVzc2lvbk9wcyIsImZpbHRlciIsInNFbGVtZW50IiwiaW5jbHVkZXMiLCJfZ2V0RGVmYXVsdE9wZXJhdG9ycyIsInNQcm9wZXJ0eVR5cGUiLCJvRGF0YUNsYXNzIiwiVHlwZU1hcCIsImdldERhdGFUeXBlQ2xhc3NOYW1lIiwib0Jhc2VUeXBlIiwiZ2V0QmFzZVR5cGUiLCJGaWx0ZXJPcGVyYXRvclV0aWwiLCJnZXRPcGVyYXRvcnNGb3JUeXBlIiwiVmFsdWVDb2xvciIsIm1MaWJyYXJ5IiwiQ29tbW9uSGVscGVyIiwiZ2V0UGF0aFRvS2V5Iiwib0N0eCIsImdldE9iamVjdCIsImdldFBhcmFtZXRlckVkaXRNb2RlIiwidGFyZ2V0Iiwib0ludGVyZmFjZSIsIm9Nb2RlbCIsImNvbnRleHQiLCJnZXRNb2RlbCIsInNQcm9wZXJ0eVBhdGgiLCJnZXRQYXRoIiwib0Fubm90YXRpb25zIiwiZmllbGRDb250cm9sIiwiaW1tdXRhYmxlIiwiY29tcHV0ZWQiLCJzRWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRWRpdGFibGUiLCJSZWFkT25seSIsIiRFbnVtTWVtYmVyIiwiRGlzYWJsZWQiLCIkUGF0aCIsImdldE1ldGFQYXRoIiwidW5kZWZpbmVkIiwiZ2V0TWV0YU1vZGVsSWQiLCJjb252ZXJ0VHlwZXMiLCJnZXRJZCIsImlzRGVza3RvcCIsIkRldmljZSIsInN5c3RlbSIsImRlc2t0b3AiLCJnZXRUYXJnZXRDb2xsZWN0aW9uUGF0aCIsIm5hdkNvbGxlY3Rpb24iLCJzUGF0aCIsIm1vZGVsIiwibWV0YU1vZGVsIiwiaXNBIiwiZ2V0TWV0YU1vZGVsIiwiYVBhcnRzIiwic3BsaXQiLCJzUGFydCIsImVudGl0eVNldCIsImxlbmd0aCIsIm5hdmlnYXRpb25Db2xsZWN0aW9uIiwic2xpY2UiLCJqb2luIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJvRGF0YUZpZWxkIiwic2tpcEhpZGRlbkZpbHRlcnMiLCJzUHJvcGVydHlMb2NhdGlvblBhdGgiLCJnZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aCIsInNQcm9wZXJ0eSIsInJlcGxhY2UiLCIkVHlwZSIsImlMZW5ndGgiLCJzQ29sbGVjdGlvblBhdGgiLCJsYXN0SW5kZXhPZiIsImluZGV4T2YiLCJnb3RvQWN0aW9uUGFyYW1ldGVyIiwib0NvbnRleHQiLCJzUHJvcGVydHlOYW1lIiwiQ29tbW9uVXRpbHMiLCJnZXRQYXJhbWV0ZXJQYXRoIiwiZ2V0RW50aXR5U2V0TmFtZSIsIm9NZXRhTW9kZWwiLCJzRW50aXR5VHlwZSIsIm9FbnRpdHlDb250YWluZXIiLCJrZXkiLCJnZXRBY3Rpb25QYXRoIiwib0FjdGlvbiIsImJSZXR1cm5Pbmx5UGF0aCIsInNBY3Rpb25OYW1lIiwiYkNoZWNrU3RhdGljVmFsdWUiLCJzQ29udGV4dFBhdGgiLCJzRW50aXR5VHlwZU5hbWUiLCJzRW50aXR5TmFtZSIsInNCaW5kaW5nUGFyYW1ldGVyIiwiZ2V0TmF2aWdhdGlvbkNvbnRleHQiLCJPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlciIsImdldE5hdmlnYXRpb25QYXRoIiwiYktlZXBQcm9wZXJ0eSIsImJTdGFydHNXaXRoRW50aXR5VHlwZSIsInN0YXJ0c1dpdGgiLCJwYXJ0Iiwic2hpZnQiLCJwb3AiLCJnZXRBY3Rpb25Db250ZXh0IiwiZ2V0UGF0aFRvQm91bmRBY3Rpb25PdmVybG9hZCIsImFkZFNpbmdsZVF1b3RlcyIsInNWYWx1ZSIsImJFc2NhcGUiLCJlc2NhcGVTaW5nbGVRdW90ZXMiLCJnZW5lcmF0ZUZ1bmN0aW9uIiwic0Z1bmNOYW1lIiwic1BhcmFtcyIsImkiLCJhcmd1bWVudHMiLCJzRnVuY3Rpb24iLCJnZXRIZWFkZXJEYXRhUG9pbnRMaW5rVmlzaWJpbGl0eSIsInBhdGgiLCJpc0NsaWNrYWJsZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiaWZFbHNlIiwiY29uc3RhbnQiLCJlcXVhbCIsInBhdGhJbk1vZGVsIiwibm90RXF1YWwiLCJvYmplY3RUb1N0cmluZyIsIm9QYXJhbXMiLCJpTnVtYmVyT2ZLZXlzIiwiT2JqZWN0Iiwia2V5cyIsInNLZXkiLCJyZW1vdmVFc2NhcGVDaGFyYWN0ZXJzIiwic0V4cHJlc3Npb24iLCJzdHJpbmdpZnlPYmplY3QiLCJzU3RyaW5naWZpZWQiLCJvT2JqZWN0IiwiSlNPTiIsInBhcnNlIiwiQXJyYXkiLCJpc0FycmF5Iiwib1VJNU9iamVjdCIsInVpNW9iamVjdCIsImFzc2lnbiIsInN0cmluZ2lmeSIsInNUeXBlIiwiTG9nIiwiZXJyb3IiLCJFcnJvciIsInN0cmluZ2lmeUN1c3RvbURhdGEiLCJ2RGF0YSIsIkNvbnRleHQiLCJwYXJzZUN1c3RvbURhdGEiLCJoYXNPd25Qcm9wZXJ0eSIsImdldENvbnRleHRQYXRoIiwib1ZhbHVlIiwiZ2V0U29ydENvbmRpdGlvbnMiLCJvUHJlc2VudGF0aW9uVmFyaWFudCIsInNQcmVzZW50YXRpb25WYXJpYW50UGF0aCIsIl9pc1ByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiU29ydE9yZGVyIiwiYVNvcnRDb25kaXRpb25zIiwic29ydGVycyIsInNFbnRpdHlQYXRoIiwiZm9yRWFjaCIsIm9Db25kaXRpb24iLCJvU29ydFByb3BlcnR5Iiwib1NvcnRlciIsIkR5bmFtaWNQcm9wZXJ0eSIsIiRBbm5vdGF0aW9uUGF0aCIsIk5hbWUiLCJQcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJuYW1lIiwiZGVzY2VuZGluZyIsIkRlc2NlbmRpbmciLCJwdXNoIiwiYW5ub3RhdGlvblBhdGgiLCJjcmVhdGVQcmVzZW50YXRpb25QYXRoQ29udGV4dCIsIm9QcmVzZW50YXRpb25Db250ZXh0IiwiYVBhdGhzIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJnZXRQcmVzc0hhbmRsZXJGb3JEYXRhRmllbGRGb3JJQk4iLCJzQ29udGV4dCIsImJOYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2ciLCJmb3JDb250ZXh0TWVudSIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm5hdmlnYXRpb25Db250ZXh0cyIsIlJlcXVpcmVzQ29udGV4dCIsIklubGluZSIsImFwcGxpY2FibGVQcm9wZXJ0eSIsIm5vdEFwcGxpY2FibGVQcm9wZXJ0eSIsImFwcGxpY2FibGVDb250ZXh0cyIsIlNlbWFudGljT2JqZWN0IiwiQWN0aW9uIiwibm90QXBwbGljYWJsZUNvbnRleHRzIiwibGFiZWwiLCJMYWJlbCIsIk1hcHBpbmciLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJnZXRFbnRpdHlTZXQiLCJNb2RlbEhlbHBlciIsImdldEVudGl0eVNldFBhdGgiLCJnZXRDcml0aWNhbGl0eUNhbGN1bGF0aW9uQmluZGluZyIsInNJbXByb3ZlbWVudERpcmVjdGlvbiIsInNEZXZpYXRpb25Mb3ciLCJzVG9sZXJhbmNlTG93Iiwic0FjY2VwdGFuY2VMb3ciLCJzQWNjZXB0YW5jZUhpZ2giLCJzVG9sZXJhbmNlSGlnaCIsInNEZXZpYXRpb25IaWdoIiwic0NyaXRpY2FsaXR5RXhwcmVzc2lvbiIsIk5ldXRyYWwiLCJJbmZpbml0eSIsIkdvb2QiLCJDcml0aWNhbCIsIndhcm5pbmciLCJnZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgiLCJpTWVhc3VyZSIsIm9DaGFydEFubm90YXRpb25zIiwiaXNNaWNyb0NoYXJ0IiwiYU1lYXN1cmVzIiwic01lYXN1cmVQcm9wZXJ0eVBhdGgiLCJNZWFzdXJlcyIsInZhbHVlIiwiRHluYW1pY01lYXN1cmVzIiwiYk1lYXN1cmVBdHRyaWJ1dGVFeGlzdHMiLCJhTWVhc3VyZUF0dHJpYnV0ZXMiLCJNZWFzdXJlQXR0cmlidXRlcyIsImlNZWFzdXJlQXR0cmlidXRlIiwiZm5DaGVja01lYXN1cmUiLCJzTWVhc3VyZVBhdGgiLCJvTWVhc3VyZUF0dHJpYnV0ZSIsImluZGV4IiwiTWVhc3VyZSIsIkR5bmFtaWNNZWFzdXJlIiwic29tZSIsImJpbmQiLCJnZXRNZWFzdXJlQXR0cmlidXRlIiwic0NoYXJ0QW5ub3RhdGlvblBhdGgiLCJyZXF1ZXN0T2JqZWN0IiwidGhlbiIsInNNZWFzdXJlQXR0cmlidXRlUGF0aCIsIkRhdGFQb2ludCIsImdldE1lYXN1cmVBdHRyaWJ1dGVGb3JNZWFzdXJlIiwic3Vic3RyaW5nIiwiaXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50Iiwib1RhcmdldENvbGxlY3Rpb25Db250YWluc1RhcmdldCIsIm9UYWJsZU1ldGFkYXRhIiwicGFyZW50RW50aXR5U2V0Iiwic1BhcmVudEVudGl0eVNldFBhdGgiLCJvRHJhZnRSb290Iiwib0RyYWZ0Tm9kZSIsImdldERhdGFGcm9tVGVtcGxhdGUiLCJkYXRhRWxlbWVudCIsInNwbGl0UGF0aCIsImRhdGFLZXkiLCJjb25uZWN0ZWREYXRhUGF0aCIsImNvbm5lY3RlZE9iamVjdCIsInRlbXBsYXRlIiwiVGVtcGxhdGUiLCJzcGxpdFRlbXAiLCJ0ZW1wQXJyYXkiLCJ0cmltIiwiRGF0YSIsIm5vdExhc3RJbmRleCIsImVsZW1lbnQiLCJpc0xhc3RJbmRleCIsInRlbXBsYXRlSW5mbyIsImxhc3RJbmRleCIsImdldERlbGltaXRlciIsInNldE1ldGFNb2RlbCIsImdldFBhcmFtZXRlcnMiLCJvUGFyYW1ldGVySW5mbyIsImdldFBhcmFtZXRlckluZm8iLCJwYXJhbWV0ZXJQcm9wZXJ0aWVzIiwiYnVpbGRBY3Rpb25XcmFwcGVyIiwib1RoaXMiLCJhUGFyYW1zIiwicmVmIiwiaGFuZGxlck1vZHVsZSIsImhhbmRsZXJNZXRob2QiLCJpZCIsImludGVybmFsTW9kZWxQYXRoIiwib0FkZGl0aW9uYWxQYXJhbXMiLCJjb250ZXh0cyIsImZuIiwiZ2V0SGlkZGVuUGF0aEV4cHJlc3Npb24iLCJkYXRhRmllbGRBbm5vdGF0aW9ucyIsImhpZGRlbiIsImdldE9wZXJhdG9yc0ZvclByb3BlcnR5Iiwic0VudGl0eVNldFBhdGgiLCJiVXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJzZXR0aW5ncyIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJhRXF1YWxzT3BzIiwiYVNpbmdsZVJhbmdlT3BzIiwiYVNpbmdsZVJhbmdlRFRCYXNpY09wcyIsImFNdWx0aVJhbmdlT3BzIiwiYVNlYXJjaEV4cHJlc3Npb25PcHMiLCJhQmFzaWNTZW1hbnRpY0RhdGVPcHMiLCJTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJnZXRCYXNpY1NlbWFudGljRGF0ZU9wZXJhdGlvbnMiLCJiU2VtYW50aWNEYXRlUmFuZ2UiLCJhU2VtYW50aWNEYXRlT3BzIiwib1NldHRpbmdzIiwiY3VzdG9tRGF0YSIsIm9wZXJhdG9yQ29uZmlndXJhdGlvbiIsImdldEZpbHRlck9wZXJhdGlvbnMiLCJEZWZhdWx0U2VtYW50aWNEYXRlT3BlcmF0b3JzIiwiZ2V0U2VtYW50aWNEYXRlT3BlcmF0aW9ucyIsImFEZWZhdWx0T3BlcmF0b3JzIiwic3VwcG9ydGVkT3BlcmF0b3JzIiwiZXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJFeHRlbmRlZFNlbWFudGljRGF0ZU9wZXJhdG9ycyIsInJlc3RyaWN0aW9ucyIsIkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyIsInNBbGxvd2VkRXhwcmVzc2lvbiIsImdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24iLCJzaW5nbGVWYWx1ZURhdGVPcHMiLCJnZXRTaW5nbGVWYWx1ZURhdGVPcGVyYXRpb25zIiwiYVNpbmdsZVZhbHVlT3BzIiwibXVsdGlWYWx1ZU9wZXJhdG9ycyIsInNPcGVyYXRvcnMiLCJjb25jYXQiLCJnZXRPcGVyYXRvcnNGb3JEYXRlUHJvcGVydHkiLCJwcm9wZXJ0eVR5cGUiLCJnZXRBSUljb24iLCJhaUljb24iLCJyZXF1aXJlc0lDb250ZXh0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDb21tb25IZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuXHRDaGFydCxcblx0Q2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZSxcblx0RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0UHJlc2VudGF0aW9uVmFyaWFudFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGNvbnN0YW50LCBlcXVhbCwgZm4sIGlmRWxzZSwgbm90RXF1YWwsIHBhdGhJbk1vZGVsLCByZWYgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5cbmltcG9ydCB0eXBlIHsgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBhaUljb24sIHR5cGUgQ3VzdG9tQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5RmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgKiBhcyBEZWZhdWx0U2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9EZWZhdWx0U2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgRXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0V4dGVuZGVkU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgU2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9TZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcbmltcG9ydCBtTGlicmFyeSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yVXRpbCBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vRmlsdGVyT3BlcmF0b3JVdGlsXCI7XG5pbXBvcnQgRmllbGRFZGl0TW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9GaWVsZEVkaXRNb2RlXCI7XG5pbXBvcnQgVHlwZU1hcCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UeXBlTWFwXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0Fubm90YXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbnR5cGUgTWV0YU1vZGVsTWVhc3VyZSA9IHtcblx0JFByb3BlcnR5UGF0aDogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wczogc3RyaW5nW10sIGFFeHByZXNzaW9uT3BzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcblx0Ly8gRnJvbSB0aGUgZGVmYXVsdCBzZXQgb2YgT3BlcmF0b3JzIGZvciB0aGUgQmFzZSBUeXBlLCBzZWxlY3QgdGhvc2UgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgQWxsb3dlZCBWYWx1ZS5cblx0Ly8gSW4gY2FzZSB0aGF0IG5vIG9wZXJhdG9ycyBhcmUgZm91bmQsIHJldHVybiB1bmRlZmluZWQgc28gdGhhdCB0aGUgZGVmYXVsdCBzZXQgaXMgdXNlZC5cblx0cmV0dXJuIGFEZWZhdWx0T3BzLmZpbHRlcihmdW5jdGlvbiAoc0VsZW1lbnQpIHtcblx0XHRyZXR1cm4gYUV4cHJlc3Npb25PcHMuaW5jbHVkZXMoc0VsZW1lbnQpO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gX2dldERlZmF1bHRPcGVyYXRvcnMoc1Byb3BlcnR5VHlwZT86IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0Ly8gbWRjIGRlZmluZXMgdGhlIGZ1bGwgc2V0IG9mIG9wZXJhdGlvbnMgdGhhdCBhcmUgbWVhbmluZ2Z1bCBmb3IgZWFjaCBFZG0gVHlwZVxuXHQvLyBUT0RPIFJlcGxhY2Ugd2l0aCBtb2RlbCAvIGludGVybmFsIHdheSBvZiByZXRyaWV2aW5nIHRoZSBhY3R1YWwgbW9kZWwgdHlwZSB1c2VkIGZvciB0aGUgcHJvcGVydHlcblx0Y29uc3Qgb0RhdGFDbGFzcyA9IFR5cGVNYXAuZ2V0RGF0YVR5cGVDbGFzc05hbWUoc1Byb3BlcnR5VHlwZSk7XG5cdC8vIFRPRE8gbmVlZCB0byBwYXNzIHByb3BlciBmb3JtYXRPcHRpb25zLCBjb25zdHJhaW50cyBoZXJlXG5cdGNvbnN0IG9CYXNlVHlwZSA9IFR5cGVNYXAuZ2V0QmFzZVR5cGUob0RhdGFDbGFzcywge30sIHt9KTtcblx0cmV0dXJuIEZpbHRlck9wZXJhdG9yVXRpbC5nZXRPcGVyYXRvcnNGb3JUeXBlKG9CYXNlVHlwZSk7XG59XG5cbmNvbnN0IFZhbHVlQ29sb3IgPSBtTGlicmFyeS5WYWx1ZUNvbG9yO1xuY29uc3QgQ29tbW9uSGVscGVyID0ge1xuXHRnZXRQYXRoVG9LZXk6IGZ1bmN0aW9uIChvQ3R4OiBDb250ZXh0KTogb2JqZWN0IHtcblx0XHRyZXR1cm4gb0N0eC5nZXRPYmplY3QoKTtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lIGlmIGZpZWxkIGlzIGVkaXRhYmxlLlxuXHQgKiBAcGFyYW0gdGFyZ2V0IFRhcmdldCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZSBJbnRlcmZhY2UgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQSBCaW5kaW5nIEV4cHJlc3Npb24gdG8gZGV0ZXJtaW5lIGlmIGEgZmllbGQgc2hvdWxkIGJlIGVkaXRhYmxlIG9yIG5vdC5cblx0ICovXG5cdGdldFBhcmFtZXRlckVkaXRNb2RlOiBmdW5jdGlvbiAodGFyZ2V0OiBvYmplY3QsIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb01vZGVsID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRzUHJvcGVydHlQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdG9Bbm5vdGF0aW9ucyA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c1Byb3BlcnR5UGF0aH1AYCksXG5cdFx0XHRmaWVsZENvbnRyb2wgPSBvQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFwiXSxcblx0XHRcdGltbXV0YWJsZSA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0sXG5cdFx0XHRjb21wdXRlZCA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiXTtcblxuXHRcdGxldCBzRWRpdE1vZGU6IEZpZWxkRWRpdE1vZGUgfCBzdHJpbmcgPSBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlO1xuXG5cdFx0aWYgKGltbXV0YWJsZSB8fCBjb21wdXRlZCkge1xuXHRcdFx0c0VkaXRNb2RlID0gRmllbGRFZGl0TW9kZS5SZWFkT25seTtcblx0XHR9IGVsc2UgaWYgKGZpZWxkQ29udHJvbCkge1xuXHRcdFx0aWYgKGZpZWxkQ29udHJvbC4kRW51bU1lbWJlcikge1xuXHRcdFx0XHRpZiAoZmllbGRDb250cm9sLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xUeXBlL1JlYWRPbmx5XCIpIHtcblx0XHRcdFx0XHRzRWRpdE1vZGUgPSBGaWVsZEVkaXRNb2RlLlJlYWRPbmx5O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRmaWVsZENvbnRyb2wuJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFR5cGUvSW5hcHBsaWNhYmxlXCIgfHxcblx0XHRcdFx0XHRmaWVsZENvbnRyb2wuJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFR5cGUvSGlkZGVuXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0c0VkaXRNb2RlID0gRmllbGRFZGl0TW9kZS5EaXNhYmxlZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGZpZWxkQ29udHJvbC4kUGF0aCkge1xuXHRcdFx0XHRzRWRpdE1vZGUgPVxuXHRcdFx0XHRcdFwiez0gJXtcIiArXG5cdFx0XHRcdFx0ZmllbGRDb250cm9sLiRQYXRoICtcblx0XHRcdFx0XHRcIn0gPCAzID8gKCV7XCIgK1xuXHRcdFx0XHRcdGZpZWxkQ29udHJvbC4kUGF0aCArXG5cdFx0XHRcdFx0XCJ9ID09PSAwID8gJ1wiICtcblx0XHRcdFx0XHRGaWVsZEVkaXRNb2RlLkRpc2FibGVkICtcblx0XHRcdFx0XHRcIicgOiAnXCIgK1xuXHRcdFx0XHRcdEZpZWxkRWRpdE1vZGUuUmVhZE9ubHkgK1xuXHRcdFx0XHRcdFwiJykgOiAnXCIgK1xuXHRcdFx0XHRcdEZpZWxkRWRpdE1vZGUuRWRpdGFibGUgK1xuXHRcdFx0XHRcdFwiJ31cIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc0VkaXRNb2RlO1xuXHR9LFxuXHQvKipcblx0ICogR2V0IHRoZSBjb21wbGV0ZSBtZXRhcGF0aCB0byB0aGUgdGFyZ2V0LlxuXHQgKiBAcGFyYW0gdGFyZ2V0XG5cdCAqIEBwYXJhbSBvSW50ZXJmYWNlXG5cdCAqIEByZXR1cm5zIFRoZSBtZXRhcGF0aFxuXHQgKi9cblx0Z2V0TWV0YVBhdGg6IGZ1bmN0aW9uICh0YXJnZXQ6IHVua25vd24sIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIChvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dCAmJiBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpKSB8fCB1bmRlZmluZWQ7XG5cdH0sXG5cdGdldE1ldGFNb2RlbElkOiBmdW5jdGlvbiAodGFyZ2V0OiBDb250ZXh0LCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBzdHJpbmcge1xuXHRcdGNvbnZlcnRUeXBlcyhvSW50ZXJmYWNlLmNvbnRleHQuZ2V0TW9kZWwoKSk7XG5cdFx0cmV0dXJuIG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpLmdldElkKCk7XG5cdH0sXG5cdGlzRGVza3RvcDogZnVuY3Rpb24gKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBEZXZpY2Uuc3lzdGVtLmRlc2t0b3AgPT09IHRydWU7XG5cdH0sXG5cdGdldFRhcmdldENvbGxlY3Rpb25QYXRoOiBmdW5jdGlvbiAoY29udGV4dDogQ29udGV4dCwgbmF2Q29sbGVjdGlvbj86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0bGV0IHNQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKFxuXHRcdFx0KGNvbnRleHQuZ2V0T2JqZWN0KFwiJGtpbmRcIikgYXMgdW5rbm93biBhcyBzdHJpbmcpID09PSBcIkVudGl0eVNldFwiIHx8XG5cdFx0XHQoY29udGV4dC5nZXRPYmplY3QoXCIkQ29udGFpbnNUYXJnZXRcIikgYXMgdW5rbm93biBhcyBib29sZWFuKSA9PT0gdHJ1ZVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHNQYXRoO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwgfCBPRGF0YU1ldGFNb2RlbDtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5pc0E8T0RhdGFNZXRhTW9kZWw+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTWV0YU1vZGVsXCIpID8gbW9kZWwgOiBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRzUGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aCk7XG5cblx0XHQvL1N1cHBvcnRpbmcgc1BhdGggb2YgYW55IGZvcm1hdCwgZWl0aGVyICcvPGVudGl0eVNldD4vPG5hdmlnYXRpb25Db2xsZWN0aW9uPicgPE9SPiAnLzxlbnRpdHlTZXQ+LyRUeXBlLzxuYXZpZ2F0aW9uQ29sbGVjdGlvbj4nXG5cdFx0Y29uc3QgYVBhcnRzID0gc1BhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihmdW5jdGlvbiAoc1BhcnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuICEhc1BhcnQgJiYgc1BhcnQgIT0gXCIkVHlwZVwiO1xuXHRcdH0pOyAvL2ZpbHRlciBvdXQgZW1wdHkgc3RyaW5ncyBhbmQgcGFydHMgcmVmZXJyaW5nIHRvICckVHlwZSdcblx0XHRjb25zdCBlbnRpdHlTZXQgPSBgLyR7YVBhcnRzWzBdfWA7XG5cdFx0aWYgKGFQYXJ0cy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHJldHVybiBlbnRpdHlTZXQ7XG5cdFx0fVxuXHRcdGNvbnN0IG5hdmlnYXRpb25Db2xsZWN0aW9uID0gbmF2Q29sbGVjdGlvbiA9PT0gdW5kZWZpbmVkID8gYVBhcnRzLnNsaWNlKDEpLmpvaW4oXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIpIDogbmF2Q29sbGVjdGlvbjtcblx0XHRyZXR1cm4gYCR7ZW50aXR5U2V0fS8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy8ke25hdmlnYXRpb25Db2xsZWN0aW9ufWA7IC8vIHVzZWQgaW4gZ290b1RhcmdldEVudGl0eVNldCBtZXRob2QgaW4gdGhlIHNhbWUgZmlsZVxuXHR9LFxuXG5cdGlzUHJvcGVydHlGaWx0ZXJhYmxlOiBmdW5jdGlvbiAoXG5cdFx0Y29udGV4dDogQ29udGV4dCxcblx0XHRvRGF0YUZpZWxkPzogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRUeXBlcz4sXG5cdFx0c2tpcEhpZGRlbkZpbHRlcnM/OiBib29sZWFuXG5cdCk6IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3Qgb01vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0c1Byb3BlcnR5UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0Ly8gTG9hY2F0aW9uUGF0aCB3b3VsZCBiZSB0aGUgcHJlZml4IG9mIHNQcm9wZXJ0eVBhdGgsIGV4YW1wbGU6IHNQcm9wZXJ0eVBhdGggPSAnL0N1c3RvbWVyL1NldC9OYW1lJyAtPiBzUHJvcGVydHlMb2NhdGlvblBhdGggPSAnL0N1c3RvbWVyL1NldCdcblx0XHRcdHNQcm9wZXJ0eUxvY2F0aW9uUGF0aCA9IENvbW1vbkhlbHBlci5nZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aChvTW9kZWwsIHNQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0c1Byb3BlcnR5ID0gc1Byb3BlcnR5UGF0aC5yZXBsYWNlKGAke3NQcm9wZXJ0eUxvY2F0aW9uUGF0aH0vYCwgXCJcIik7XG5cblx0XHRpZiAoXG5cdFx0XHRvRGF0YUZpZWxkICYmXG5cdFx0XHQob0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIiB8fFxuXHRcdFx0XHRvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBpc1Byb3BlcnR5RmlsdGVyYWJsZShvTW9kZWwsIHNQcm9wZXJ0eUxvY2F0aW9uUGF0aCwgc1Byb3BlcnR5LCBza2lwSGlkZGVuRmlsdGVycyk7XG5cdH0sXG5cblx0Z2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGg6IGZ1bmN0aW9uIChvTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzUHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGxldCBpTGVuZ3RoO1xuXHRcdGxldCBzQ29sbGVjdGlvblBhdGggPSBzUHJvcGVydHlQYXRoLnNsaWNlKDAsIHNQcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcblx0XHRpZiAob01vZGVsLmdldE9iamVjdChgJHtzQ29sbGVjdGlvblBhdGh9LyRraW5kYCkgPT09IFwiRW50aXR5Q29udGFpbmVyXCIpIHtcblx0XHRcdGlMZW5ndGggPSBzQ29sbGVjdGlvblBhdGgubGVuZ3RoICsgMTtcblx0XHRcdHNDb2xsZWN0aW9uUGF0aCA9IHNQcm9wZXJ0eVBhdGguc2xpY2UoaUxlbmd0aCwgc1Byb3BlcnR5UGF0aC5pbmRleE9mKFwiL1wiLCBpTGVuZ3RoKSk7XG5cdFx0fVxuXHRcdHJldHVybiBzQ29sbGVjdGlvblBhdGg7XG5cdH0sXG5cdGdvdG9BY3Rpb25QYXJhbWV0ZXI6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRzUHJvcGVydHlOYW1lID0gb0NvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXRofS8kTmFtZWApO1xuXG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLmdldFBhcmFtZXRlclBhdGgoc1BhdGgsIHNQcm9wZXJ0eU5hbWUpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZW50aXR5IHNldCBuYW1lIGZyb20gdGhlIGVudGl0eSB0eXBlIG5hbWUuXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsIE9EYXRhIHY0IG1ldGFtb2RlbCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gc0VudGl0eVR5cGUgRW50aXR5VHlwZSBvZiB0aGUgYWN0aW9tXG5cdCAqIEByZXR1cm5zIFRoZSBFbnRpdHlTZXQgb2YgdGhlIGJvdW5kIGFjdGlvblxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0RW50aXR5U2V0TmFtZTogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5VHlwZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvRW50aXR5Q29udGFpbmVyID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHRcdGZvciAoY29uc3Qga2V5IGluIG9FbnRpdHlDb250YWluZXIpIHtcblx0XHRcdGlmICh0eXBlb2Ygb0VudGl0eUNvbnRhaW5lcltrZXldID09PSBcIm9iamVjdFwiICYmIG9FbnRpdHlDb250YWluZXJba2V5XS4kVHlwZSA9PT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdFx0cmV0dXJuIGtleTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIG1ldGFtb2RlbCBwYXRoIGNvcnJlY3RseSBmb3IgYm91bmQgYWN0aW9ucyBpZiB1c2VkIHdpdGggYlJldHVybk9ubHlQYXRoIGFzIHRydWUsXG5cdCAqIGVsc2UgcmV0dXJucyBhbiBvYmplY3Qgd2hpY2ggaGFzIDMgcHJvcGVydGllcyByZWxhdGVkIHRvIHRoZSBhY3Rpb24uIFRoZXkgYXJlIHRoZSBlbnRpdHkgc2V0IG5hbWUsXG5cdCAqIHRoZSAkUGF0aCB2YWx1ZSBvZiB0aGUgT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb24gYW5kIHRoZSBiaW5kaW5nIHBhcmFtZXRlciBuYW1lLiBJZlxuXHQgKiBiQ2hlY2tTdGF0aWNWYWx1ZSBpcyB0cnVlLCByZXR1cm5zIHRoZSBzdGF0aWMgdmFsdWUgb2YgT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb24sIGlmIHByZXNlbnQuXG5cdCAqIGUuZy4gZm9yIGJvdW5kIGFjdGlvbiBzb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvblxuXHQgKiBvZiBlbnRpdHkgc2V0IFNvbWVFbnRpdHlTZXQsIHRoZSBzdHJpbmcgXCIvU29tZUVudGl0eVNldC9zb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvblwiIGlzIHJldHVybmVkLlxuXHQgKiBAcGFyYW0gb0FjdGlvbiBUaGUgY29udGV4dCBvYmplY3Qgb2YgdGhlIGFjdGlvblxuXHQgKiBAcGFyYW0gYlJldHVybk9ubHlQYXRoIElmIGZhbHNlLCBhZGRpdGlvbmFsIGluZm8gaXMgcmV0dXJuZWQgYWxvbmcgd2l0aCBtZXRhbW9kZWwgcGF0aCB0byB0aGUgYm91bmQgYWN0aW9uXG5cdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYm91bmQgYWN0aW9uIG9mIHRoZSBmb3JtIHNvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uXG5cdCAqIEBwYXJhbSBiQ2hlY2tTdGF0aWNWYWx1ZSBJZiB0cnVlLCB0aGUgc3RhdGljIHZhbHVlIG9mIE9wZXJhdGlvbkF2YWlsYWJsZSBpcyByZXR1cm5lZCwgaWYgcHJlc2VudFxuXHQgKiBAcmV0dXJucyBUaGUgc3RyaW5nIG9yIG9iamVjdCBhcyBzcGVjaWZpZWQgYnkgYlJldHVybk9ubHlQYXRoXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXRBY3Rpb25QYXRoOiBmdW5jdGlvbiAoXG5cdFx0b0FjdGlvbjogQ29udGV4dCxcblx0XHRiUmV0dXJuT25seVBhdGg6IGJvb2xlYW4sXG5cdFx0c0FjdGlvbk5hbWU/OiBzdHJpbmcsXG5cdFx0YkNoZWNrU3RhdGljVmFsdWU/OiBib29sZWFuXG5cdCk6XG5cdFx0fCBzdHJpbmdcblx0XHR8IHtcblx0XHRcdFx0c0NvbnRleHRQYXRoOiBzdHJpbmc7XG5cdFx0XHRcdHNQcm9wZXJ0eTogc3RyaW5nO1xuXHRcdFx0XHRzQmluZGluZ1BhcmFtZXRlcjogc3RyaW5nO1xuXHRcdCAgfSB7XG5cdFx0bGV0IHNDb250ZXh0UGF0aCA9IG9BY3Rpb24uZ2V0UGF0aCgpLnNwbGl0KFwiL0BcIilbMF07XG5cblx0XHRzQWN0aW9uTmFtZSA9ICFzQWN0aW9uTmFtZSA/IG9BY3Rpb24uZ2V0T2JqZWN0KG9BY3Rpb24uZ2V0UGF0aCgpKSA6IHNBY3Rpb25OYW1lO1xuXG5cdFx0aWYgKHNBY3Rpb25OYW1lICYmIHNBY3Rpb25OYW1lLmluY2x1ZGVzKFwiKFwiKSkge1xuXHRcdFx0Ly8gYWN0aW9uIGJvdW5kIHRvIGFub3RoZXIgZW50aXR5IHR5cGVcblx0XHRcdHNBY3Rpb25OYW1lID0gc0FjdGlvbk5hbWUuc3BsaXQoXCIoXCIpWzBdO1xuXHRcdH0gZWxzZSBpZiAob0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKSkge1xuXHRcdFx0Ly8gVE9ETzogdGhpcyBsb2dpYyBzb3VuZHMgd3JvbmcsIHRvIGJlIGNvcnJlY3RlZFxuXHRcdFx0Y29uc3Qgc0VudGl0eVR5cGVOYW1lID0gb0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKS4kVHlwZTtcblx0XHRcdGNvbnN0IHNFbnRpdHlOYW1lID0gdGhpcy5nZXRFbnRpdHlTZXROYW1lKG9BY3Rpb24uZ2V0TW9kZWwoKSwgc0VudGl0eVR5cGVOYW1lKTtcblx0XHRcdGlmIChzRW50aXR5TmFtZSkge1xuXHRcdFx0XHRzQ29udGV4dFBhdGggPSBgLyR7c0VudGl0eU5hbWV9YDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHNDb250ZXh0UGF0aDtcblx0XHR9XG5cblx0XHRpZiAoYkNoZWNrU3RhdGljVmFsdWUpIHtcblx0XHRcdHJldHVybiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9QE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZWApO1xuXHRcdH1cblx0XHRpZiAoYlJldHVybk9ubHlQYXRoKSB7XG5cdFx0XHRyZXR1cm4gYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNDb250ZXh0UGF0aDogc0NvbnRleHRQYXRoLFxuXHRcdFx0XHRzUHJvcGVydHk6IG9BY3Rpb24uZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlLyRQYXRoYCksXG5cdFx0XHRcdHNCaW5kaW5nUGFyYW1ldGVyOiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9L0AkdWk1Lm92ZXJsb2FkLzAvJFBhcmFtZXRlci8wLyROYW1lYClcblx0XHRcdH07XG5cdFx0fVxuXHR9LFxuXG5cdGdldE5hdmlnYXRpb25Db250ZXh0OiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiBPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlci5nZXROYXZpZ2F0aW9uUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBwYXRoIHdpdGhvdXQgdGhlIGVudGl0eSB0eXBlIChwb3RlbnRpYWxseSBmaXJzdCkgYW5kIHByb3BlcnR5IChsYXN0KSBwYXJ0IChvcHRpb25hbCkuXG5cdCAqIFRoZSByZXN1bHQgY2FuIGJlIGFuIGVtcHR5IHN0cmluZyBpZiBpdCBpcyBhIHNpbXBsZSBkaXJlY3QgcHJvcGVydHkuXG5cdCAqXG5cdCAqIElmIGFuZCBvbmx5IGlmIHRoZSBnaXZlbiBwcm9wZXJ0eSBwYXRoIHN0YXJ0cyB3aXRoIGEgc2xhc2ggKC8pLCBpdCBpcyBjb25zaWRlcmVkIHRoYXQgdGhlIGVudGl0eSB0eXBlXG5cdCAqIGlzIHBhcnQgb2YgdGhlIHBhdGggYW5kIHdpbGwgYmUgc3RyaXBwZWQgYXdheS5cblx0ICogQHBhcmFtIHNQcm9wZXJ0eVBhdGhcblx0ICogQHBhcmFtIGJLZWVwUHJvcGVydHlcblx0ICogQHJldHVybnMgVGhlIG5hdmlnYXRpb24gcGF0aFxuXHQgKi9cblx0Z2V0TmF2aWdhdGlvblBhdGg6IGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBzdHJpbmcsIGJLZWVwUHJvcGVydHk/OiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRjb25zdCBiU3RhcnRzV2l0aEVudGl0eVR5cGUgPSBzUHJvcGVydHlQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpO1xuXHRcdGNvbnN0IGFQYXJ0cyA9IHNQcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihmdW5jdGlvbiAocGFydDogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gISFwYXJ0O1xuXHRcdH0pO1xuXHRcdGlmIChiU3RhcnRzV2l0aEVudGl0eVR5cGUpIHtcblx0XHRcdGFQYXJ0cy5zaGlmdCgpO1xuXHRcdH1cblx0XHRpZiAoIWJLZWVwUHJvcGVydHkpIHtcblx0XHRcdGFQYXJ0cy5wb3AoKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFQYXJ0cy5qb2luKFwiL1wiKTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29ycmVjdCBtZXRhbW9kZWwgcGF0aCBmb3IgYm91bmQgYWN0aW9ucy5cblx0ICpcblx0ICogU2luY2UgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGlycmVzcGVjdGl2ZSBvZiB0aGUgYWN0aW9uIHR5cGUsIHRoaXMgd2lsbCBiZSBhcHBsaWVkIHRvIHVuYm91bmQgYWN0aW9ucy5cblx0ICogSW4gc3VjaCBhIGNhc2UsIGlmIGFuIGluY29ycmVjdCBwYXRoIGlzIHJldHVybmVkLCBpdCBpcyBpZ25vcmVkIGR1cmluZyB0ZW1wbGF0aW5nLlxuXHQgKlxuXHQgKiBFeGFtcGxlOiBmb3IgdGhlIGJvdW5kIGFjdGlvbiBzb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvbiBvZiBlbnRpdHkgc2V0IFNvbWVFbnRpdHlTZXQsXG5cdCAqIHRoZSBzdHJpbmcgXCIvU29tZUVudGl0eVNldC9zb21lTmFtZVNwYWNlLlNvbWVCb3VuZEFjdGlvblwiIGlzIHJldHVybmVkLlxuXHQgKiBAcGFyYW0gb0FjdGlvbiBDb250ZXh0IG9iamVjdCBmb3IgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBDb3JyZWN0IG1ldGFtb2RlbCBwYXRoIGZvciBib3VuZCBhbmQgaW5jb3JyZWN0IHBhdGggZm9yIHVuYm91bmQgYWN0aW9uc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0QWN0aW9uQ29udGV4dDogZnVuY3Rpb24gKG9BY3Rpb246IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiBDb21tb25IZWxwZXIuZ2V0QWN0aW9uUGF0aChvQWN0aW9uLCB0cnVlKSBhcyBzdHJpbmc7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBtZXRhbW9kZWwgcGF0aCBjb3JyZWN0bHkgZm9yIG92ZXJsb2FkZWQgYm91bmQgYWN0aW9ucy4gRm9yIHVuYm91bmQgYWN0aW9ucyxcblx0ICogdGhlIGluY29ycmVjdCBwYXRoIGlzIHJldHVybmVkLCBidXQgaWdub3JlZCBkdXJpbmcgdGVtcGxhdGluZy5cblx0ICogZS5nLiBmb3IgYm91bmQgYWN0aW9uIHNvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uIG9mIGVudGl0eSBzZXQgU29tZUVudGl0eVNldCxcblx0ICogdGhlIHN0cmluZyBcIi9Tb21lRW50aXR5U2V0L3NvbWVOYW1lU3BhY2UuU29tZUJvdW5kQWN0aW9uL0AkdWk1Lm92ZXJsb2FkLzBcIiBpcyByZXR1cm5lZC5cblx0ICogQHBhcmFtIG9BY3Rpb24gVGhlIGNvbnRleHQgb2JqZWN0IGZvciB0aGUgYWN0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSBjb3JyZWN0IG1ldGFtb2RlbCBwYXRoIGZvciBib3VuZCBhY3Rpb24gb3ZlcmxvYWQgYW5kIGluY29ycmVjdCBwYXRoIGZvciB1bmJvdW5kIGFjdGlvbnNcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldFBhdGhUb0JvdW5kQWN0aW9uT3ZlcmxvYWQ6IGZ1bmN0aW9uIChvQWN0aW9uOiBDb250ZXh0KTogc3RyaW5nIHtcblx0XHRjb25zdCBzUGF0aCA9IENvbW1vbkhlbHBlci5nZXRBY3Rpb25QYXRoKG9BY3Rpb24sIHRydWUpO1xuXHRcdHJldHVybiBgJHtzUGF0aH0vQCR1aTUub3ZlcmxvYWQvMGA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHN0cmluZyB3aXRoIHNpbmdsZSBxdW90ZXMuXG5cdCAqIEBwYXJhbSBzVmFsdWUgU29tZSBzdHJpbmcgdGhhdCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgaW50byBzaW5nbGUgcXVvdGVzXG5cdCAqIEBwYXJhbSBbYkVzY2FwZV0gU2hvdWxkIHRoZSBzdHJpbmcgYmUgZXNjYXBlZCBiZWZvcmVoYW5kXG5cdCAqIEByZXR1cm5zIC0gU3RyaW5nIHdpdGggc2luZ2xlIHF1b3Rlc1xuXHQgKi9cblx0YWRkU2luZ2xlUXVvdGVzOiBmdW5jdGlvbiAoc1ZhbHVlOiBzdHJpbmcsIGJFc2NhcGU/OiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRpZiAoYkVzY2FwZSAmJiBzVmFsdWUpIHtcblx0XHRcdHNWYWx1ZSA9IHRoaXMuZXNjYXBlU2luZ2xlUXVvdGVzKHNWYWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBgJyR7c1ZhbHVlfSdgO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBzdHJpbmcgd2l0aCBlc2NhcGVkIHNpbmdsZSBxdW90ZXMuXG5cdCAqIEBwYXJhbSBzVmFsdWUgU29tZSBzdHJpbmcgdGhhdCBuZWVkcyBlc2NhcGluZyBvZiBzaW5nbGUgcXVvdGVzXG5cdCAqIEByZXR1cm5zIC0gU3RyaW5nIHdpdGggZXNjYXBlZCBzaW5nbGUgcXVvdGVzXG5cdCAqL1xuXHRlc2NhcGVTaW5nbGVRdW90ZXM6IGZ1bmN0aW9uIChzVmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHNWYWx1ZS5yZXBsYWNlKC9bJ10vZywgXCJcXFxcJ1wiKTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZnVuY3Rpb24gc3RyaW5nXG5cdCAqIFRoZSBmaXJzdCBhcmd1bWVudCBvZiBnZW5lcmF0ZUZ1bmN0aW9uIGlzIG5hbWUgb2YgdGhlIGdlbmVyYXRlZCBmdW5jdGlvbiBzdHJpbmcuXG5cdCAqIFJlbWFpbmluZyBhcmd1bWVudHMgb2YgZ2VuZXJhdGVGdW5jdGlvbiBhcmUgYXJndW1lbnRzIG9mIHRoZSBuZXdseSBnZW5lcmF0ZWQgZnVuY3Rpb24gc3RyaW5nLlxuXHQgKiBAcGFyYW0gc0Z1bmNOYW1lIFNvbWUgc3RyaW5nIGZvciB0aGUgZnVuY3Rpb24gbmFtZVxuXHQgKiBAcGFyYW0gYXJncyBUaGUgcmVtYWluaW5nIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyAtIEZ1bmN0aW9uIHN0cmluZyBkZXBlbmRzIG9uIGFyZ3VtZW50cyBwYXNzZWRcblx0ICovXG5cdGdlbmVyYXRlRnVuY3Rpb246IGZ1bmN0aW9uIChzRnVuY05hbWU6IHN0cmluZywgLi4uYXJnczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRcdGxldCBzUGFyYW1zID0gXCJcIjtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdHNQYXJhbXMgKz0gYXJnc1tpXTtcblx0XHRcdGlmIChpIDwgYXJncy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdHNQYXJhbXMgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBzRnVuY3Rpb24gPSBgJHtzRnVuY05hbWV9KClgO1xuXHRcdGlmIChzUGFyYW1zKSB7XG5cdFx0XHRzRnVuY3Rpb24gPSBgJHtzRnVuY05hbWV9KCR7c1BhcmFtc30pYDtcblx0XHR9XG5cdFx0cmV0dXJuIHNGdW5jdGlvbjtcblx0fSxcblx0Lypcblx0ICogUmV0dXJucyB0aGUgdmlzaWJpbGl0eSBleHByZXNzaW9uIGZvciBkYXRhcG9pbnQgdGl0bGUvbGlua1xuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IFtwYXRoXSBhbm5vdGF0aW9uIHBhdGggb2YgZGF0YSBwb2ludCBvciBNaWNyb2NoYXJ0XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzQ2xpY2thYmxlXSB0cnVlIGlmIGxpbmsgaXMgdmlzaWJsZVxuXHQgKiBAcmV0dXJucyB7Q29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb259IHZpc2liaWxpdHlFeHAgVXNlZCB0byBnZXQgdGhlIHZpc2liaWxpdHkgYmluZGluZyBmb3IgRGF0YVBvaW50cyB0aXRsZSBpbiB0aGUgSGVhZGVyLlxuXHQgKlxuXHQgKi9cblxuXHRnZXRIZWFkZXJEYXRhUG9pbnRMaW5rVmlzaWJpbGl0eTogZnVuY3Rpb24gKHBhdGg6IHN0cmluZywgaXNDbGlja2FibGU6IGJvb2xlYW4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRjb25zdGFudChpc0NsaWNrYWJsZSksXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKGBpc0hlYWRlckRQTGlua1Zpc2libGUvJHtwYXRofWAsIFwiaW50ZXJuYWxcIiksIHRydWUpLFxuXHRcdFx0XHRub3RFcXVhbChwYXRoSW5Nb2RlbChgaXNIZWFkZXJEUExpbmtWaXNpYmxlLyR7cGF0aH1gLCBcImludGVybmFsXCIpLCB0cnVlKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIG9iamVjdCB0byBzdHJpbmcoZGlmZmVyZW50IGZyb20gSlNPTi5zdHJpbmdpZnkgb3IudG9TdHJpbmcpLlxuXHQgKiBAcGFyYW0gb1BhcmFtcyBTb21lIG9iamVjdFxuXHQgKiBAcmV0dXJucyAtIE9iamVjdCBzdHJpbmdcblx0ICovXG5cdG9iamVjdFRvU3RyaW5nOiBmdW5jdGlvbiAob1BhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcge1xuXHRcdGxldCBpTnVtYmVyT2ZLZXlzID0gT2JqZWN0LmtleXMob1BhcmFtcykubGVuZ3RoLFxuXHRcdFx0c1BhcmFtcyA9IFwiXCI7XG5cblx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb1BhcmFtcykge1xuXHRcdFx0bGV0IHNWYWx1ZSA9IG9QYXJhbXNbc0tleV07XG5cdFx0XHRpZiAoc1ZhbHVlICYmIHR5cGVvZiBzVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0c1ZhbHVlID0gdGhpcy5vYmplY3RUb1N0cmluZyhzVmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuXHRcdFx0fVxuXHRcdFx0c1BhcmFtcyArPSBgJHtzS2V5fTogJHtzVmFsdWV9YDtcblx0XHRcdGlmIChpTnVtYmVyT2ZLZXlzID4gMSkge1xuXHRcdFx0XHQtLWlOdW1iZXJPZktleXM7XG5cdFx0XHRcdHNQYXJhbXMgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBgeyAke3NQYXJhbXN9fWA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgZXNjYXBlIGNoYXJhY3RlcnMgKFxcKSBmcm9tIGFuIGV4cHJlc3Npb24uXG5cdCAqIEBwYXJhbSBzRXhwcmVzc2lvbiBBbiBleHByZXNzaW9uIHdpdGggZXNjYXBlIGNoYXJhY3RlcnNcblx0ICogQHJldHVybnMgRXhwcmVzc2lvbiBzdHJpbmcgd2l0aG91dCBlc2NhcGUgY2hhcmFjdGVycyBvciB1bmRlZmluZWRcblx0ICovXG5cdHJlbW92ZUVzY2FwZUNoYXJhY3RlcnM6IGZ1bmN0aW9uIChzRXhwcmVzc2lvbj86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHNFeHByZXNzaW9uID8gc0V4cHJlc3Npb24ucmVwbGFjZSgvXFxcXD9cXFxcKFt7fV0pL2csIFwiJDFcIikgOiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ha2VzIHVwZGF0ZXMgdG8gYSBzdHJpbmdpZmllZCBvYmplY3Qgc28gdGhhdCBpdCB3b3JrcyBwcm9wZXJseSBpbiBhIHRlbXBsYXRlIGJ5IGFkZGluZyB1aTVPYmplY3Q6dHJ1ZS5cblx0ICogQHBhcmFtIHNTdHJpbmdpZmllZFxuXHQgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdFxuXHQgKi9cblx0c3RyaW5naWZ5T2JqZWN0OiBmdW5jdGlvbiAoc1N0cmluZ2lmaWVkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmICghc1N0cmluZ2lmaWVkIHx8IHNTdHJpbmdpZmllZCA9PT0gXCJ7fVwiKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvT2JqZWN0ID0gSlNPTi5wYXJzZShzU3RyaW5naWZpZWQpO1xuXHRcdFx0aWYgKHR5cGVvZiBvT2JqZWN0ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KG9PYmplY3QpKSB7XG5cdFx0XHRcdGNvbnN0IG9VSTVPYmplY3QgPSB7XG5cdFx0XHRcdFx0dWk1b2JqZWN0OiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHRcdE9iamVjdC5hc3NpZ24ob1VJNU9iamVjdCwgb09iamVjdCk7XG5cdFx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShvVUk1T2JqZWN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHNUeXBlID0gQXJyYXkuaXNBcnJheShvT2JqZWN0KSA/IFwiQXJyYXlcIiA6IHR5cGVvZiBvT2JqZWN0O1xuXHRcdFx0XHRMb2cuZXJyb3IoYFVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUgaW4gc3RyaW5naWZ5T2JqZWN0ICgke3NUeXBlfSkgLSBvbmx5IHdvcmtzIHdpdGggb2JqZWN0YCk7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInN0cmluZ2lmeU9iamVjdCBvbmx5IHdvcmtzIHdpdGggb2JqZWN0cyFcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRhdGEsIHRha2luZyBjYXJlIHRoYXQgaXQgaXMgbm90IHRyZWF0ZWQgYXMgYSBiaW5kaW5nIGV4cHJlc3Npb24uXG5cdCAqIEBwYXJhbSB2RGF0YSBUaGUgZGF0YSB0byBzdHJpbmdpZnlcblx0ICogQHJldHVybnMgVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0YS5cblx0ICovXG5cdHN0cmluZ2lmeUN1c3RvbURhdGE6IGZ1bmN0aW9uICh2RGF0YTogb2JqZWN0IHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0XHRjb25zdCBvT2JqZWN0OiB7IHVpNW9iamVjdDogdHJ1ZTsgY3VzdG9tRGF0YT86IHVua25vd24gfSA9IHtcblx0XHRcdHVpNW9iamVjdDogdHJ1ZVxuXHRcdH07XG5cdFx0b09iamVjdFtcImN1c3RvbURhdGFcIl0gPSB2RGF0YSBpbnN0YW5jZW9mIENvbnRleHQgPyB2RGF0YS5nZXRPYmplY3QoKSA6IHZEYXRhO1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShvT2JqZWN0KTtcblx0fSxcblxuXHQvKipcblx0ICogUGFyc2VzIHRoZSBnaXZlbiBkYXRhLCBwb3RlbnRpYWxseSB1bndyYXBzIHRoZSBkYXRhLlxuXHQgKiBAcGFyYW0gdkRhdGEgVGhlIGRhdGEgdG8gcGFyc2Vcblx0ICogQHBhcmFtIHZEYXRhLnVpNW9iamVjdFxuXHQgKiBAcGFyYW0gdkRhdGEuY3VzdG9tRGF0YVxuXHQgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBkYXRhIHBhcnNpbmdcblx0ICovXG5cdHBhcnNlQ3VzdG9tRGF0YTogZnVuY3Rpb24gKHZEYXRhPzogc3RyaW5nIHwgeyB1aTVvYmplY3Q6IHRydWU7IGN1c3RvbURhdGE/OiB1bmtub3duIH0pOiB1bmtub3duIHtcblx0XHR2RGF0YSA9IHR5cGVvZiB2RGF0YSA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UodkRhdGEpIDogdkRhdGE7XG5cdFx0aWYgKHZEYXRhICYmIHZEYXRhLmhhc093blByb3BlcnR5KFwiY3VzdG9tRGF0YVwiKSkge1xuXHRcdFx0cmV0dXJuICh2RGF0YSBhcyB7IHVpNW9iamVjdDogdHJ1ZTsgY3VzdG9tRGF0YT86IHVua25vd24gfSlbXCJjdXN0b21EYXRhXCJdO1xuXHRcdH1cblx0XHRyZXR1cm4gdkRhdGE7XG5cdH0sXG5cdGdldENvbnRleHRQYXRoOiBmdW5jdGlvbiAob1ZhbHVlOiB1bmtub3duLCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHNQYXRoID0gb0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQgJiYgb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRyZXR1cm4gc1BhdGhbc1BhdGgubGVuZ3RoIC0gMV0gPT09IFwiL1wiID8gc1BhdGguc2xpY2UoMCwgLTEpIDogc1BhdGg7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgc3RyaW5naWZpZWQgSlNPTiBvYmplY3QgY29udGFpbmluZyAgUHJlc2VudGF0aW9uIFZhcmlhbnQgc29ydCBjb25kaXRpb25zLlxuXHQgKiBAcGFyYW0gb0NvbnRleHRcblx0ICogQHBhcmFtIG9Db250ZXh0LmdldFBhdGhcblx0ICogQHBhcmFtIG9Db250ZXh0LmdldE1vZGVsXG5cdCAqIEBwYXJhbSBvUHJlc2VudGF0aW9uVmFyaWFudCBQcmVzZW50YXRpb24gdmFyaWFudCBBbm5vdGF0aW9uXG5cdCAqIEBwYXJhbSBzUHJlc2VudGF0aW9uVmFyaWFudFBhdGhcblx0ICogQHJldHVybnMgU3RyaW5naWZpZWQgSlNPTiBvYmplY3Rcblx0ICovXG5cdGdldFNvcnRDb25kaXRpb25zOiBmdW5jdGlvbiAoXG5cdFx0b0NvbnRleHQ6IHsgZ2V0UGF0aChudW06IG51bWJlcik6IHN0cmluZzsgZ2V0TW9kZWwobnVtOiBudW1iZXIpOiBPRGF0YU1ldGFNb2RlbCB9LFxuXHRcdG9QcmVzZW50YXRpb25WYXJpYW50OiBNZXRhTW9kZWxUeXBlPFByZXNlbnRhdGlvblZhcmlhbnQ+LFxuXHRcdHNQcmVzZW50YXRpb25WYXJpYW50UGF0aDogc3RyaW5nXG5cdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKFxuXHRcdFx0b1ByZXNlbnRhdGlvblZhcmlhbnQgJiZcblx0XHRcdENvbW1vbkhlbHBlci5faXNQcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbihzUHJlc2VudGF0aW9uVmFyaWFudFBhdGgpICYmXG5cdFx0XHRvUHJlc2VudGF0aW9uVmFyaWFudC5Tb3J0T3JkZXJcblx0XHQpIHtcblx0XHRcdGNvbnN0IGFTb3J0Q29uZGl0aW9uczogeyBzb3J0ZXJzOiB7IG5hbWU/OiBzdHJpbmc7IGRlc2NlbmRpbmc/OiBib29sZWFuIH1bXSB9ID0ge1xuXHRcdFx0XHRzb3J0ZXJzOiBbXVxuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3Qgc0VudGl0eVBhdGggPSBvQ29udGV4dC5nZXRQYXRoKDApLnNwbGl0KFwiQFwiKVswXTtcblx0XHRcdG9QcmVzZW50YXRpb25WYXJpYW50LlNvcnRPcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChvQ29uZGl0aW9uID0ge30pIHtcblx0XHRcdFx0bGV0IG9Tb3J0UHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Y29uc3Qgb1NvcnRlcjogeyBuYW1lPzogc3RyaW5nOyBkZXNjZW5kaW5nPzogYm9vbGVhbiB9ID0ge307XG5cdFx0XHRcdGlmIChvQ29uZGl0aW9uLkR5bmFtaWNQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdG9Tb3J0UHJvcGVydHkgPSBvQ29udGV4dC5nZXRNb2RlbCgwKS5nZXRPYmplY3Qoc0VudGl0eVBhdGggKyBvQ29uZGl0aW9uLkR5bmFtaWNQcm9wZXJ0eS4kQW5ub3RhdGlvblBhdGgpPy5OYW1lO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9Db25kaXRpb24uUHJvcGVydHkpIHtcblx0XHRcdFx0XHRvU29ydFByb3BlcnR5ID0gb0NvbmRpdGlvbi5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvU29ydFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0b1NvcnRlci5uYW1lID0gb1NvcnRQcm9wZXJ0eTtcblx0XHRcdFx0XHRvU29ydGVyLmRlc2NlbmRpbmcgPSAhIW9Db25kaXRpb24uRGVzY2VuZGluZztcblx0XHRcdFx0XHRhU29ydENvbmRpdGlvbnMuc29ydGVycy5wdXNoKG9Tb3J0ZXIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSBkZWZpbmUgdGhlIHJpZ2h0IHBhdGggdG8gdGhlIHNvcnQgcHJvcGVydHlcIik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KGFTb3J0Q29uZGl0aW9ucyk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cdF9pc1ByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBmdW5jdGlvbiAoYW5ub3RhdGlvblBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHRhbm5vdGF0aW9uUGF0aC5pbmNsdWRlcyhgQCR7VUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudH1gKSB8fFxuXHRcdFx0YW5ub3RhdGlvblBhdGguaW5jbHVkZXMoYEAke1VJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnR9YClcblx0XHQpO1xuXHR9LFxuXHRjcmVhdGVQcmVzZW50YXRpb25QYXRoQ29udGV4dDogZnVuY3Rpb24gKG9QcmVzZW50YXRpb25Db250ZXh0OiBDb250ZXh0KTogQ29udGV4dCB7XG5cdFx0Y29uc3QgYVBhdGhzID0gb1ByZXNlbnRhdGlvbkNvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiQFwiKSB8fCBbXTtcblx0XHRjb25zdCBvTW9kZWwgPSBvUHJlc2VudGF0aW9uQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGlmIChhUGF0aHMubGVuZ3RoICYmIGFQYXRoc1thUGF0aHMubGVuZ3RoIC0gMV0uaW5jbHVkZXMoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XCIpKSB7XG5cdFx0XHRjb25zdCBzUGF0aCA9IG9QcmVzZW50YXRpb25Db250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi9QcmVzZW50YXRpb25WYXJpYW50XCIpWzBdO1xuXHRcdFx0cmV0dXJuIG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzUGF0aH1Ac2FwdWkubmFtZWApO1xuXHRcdH1cblx0XHRyZXR1cm4gb01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke29QcmVzZW50YXRpb25Db250ZXh0LmdldFBhdGgoKX1Ac2FwdWkubmFtZWApO1xuXHR9LFxuXHRnZXRQcmVzc0hhbmRsZXJGb3JEYXRhRmllbGRGb3JJQk46IGZ1bmN0aW9uIChcblx0XHRvRGF0YUZpZWxkOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0c0NvbnRleHQ/OiBzdHJpbmcsXG5cdFx0Yk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZz86IGJvb2xlYW4sXG5cdFx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuXHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmICghb0RhdGFGaWVsZCkgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRjb25zdCBtTmF2aWdhdGlvblBhcmFtZXRlcnM6IHtcblx0XHRcdG5hdmlnYXRpb25Db250ZXh0cz86IHN0cmluZztcblx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0YXBwbGljYWJsZUNvbnRleHRzPzogc3RyaW5nO1xuXHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogc3RyaW5nO1xuXHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nPzogc3RyaW5nO1xuXHRcdH0gPSB7XG5cdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IHNDb250ZXh0ID8gc0NvbnRleHQgOiBcIiR7JHNvdXJjZT4vfS5nZXRCaW5kaW5nQ29udGV4dCgpXCJcblx0XHR9O1xuXHRcdGlmIChvRGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCAmJiAhb0RhdGFGaWVsZC5JbmxpbmUgJiYgYk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZykge1xuXHRcdFx0Y29uc3QgYXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhQXBwbGljYWJsZVwiIDogXCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51XCI7XG5cdFx0XHRjb25zdCBub3RBcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFOb3RBcHBsaWNhYmxlXCIgOiBcImFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIjtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5hcHBsaWNhYmxlQ29udGV4dHMgPSBgXFwke2ludGVybmFsPmlibi8ke29EYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7b0RhdGFGaWVsZC5BY3Rpb259LyR7YXBwbGljYWJsZVByb3BlcnR5fS99YDtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5ub3RBcHBsaWNhYmxlQ29udGV4dHMgPSBgXFwke2ludGVybmFsPmlibi8ke29EYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7b0RhdGFGaWVsZC5BY3Rpb259LyR7bm90QXBwbGljYWJsZVByb3BlcnR5fS99YDtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5sYWJlbCA9IHRoaXMuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQuTGFiZWwgYXMgc3RyaW5nLCB0cnVlKTtcblx0XHR9XG5cdFx0aWYgKG9EYXRhRmllbGQuTWFwcGluZykge1xuXHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IHRoaXMuYWRkU2luZ2xlUXVvdGVzKEpTT04uc3RyaW5naWZ5KG9EYXRhRmllbGQuTWFwcGluZykpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5nZW5lcmF0ZUZ1bmN0aW9uKFxuXHRcdFx0Yk5hdmlnYXRlV2l0aENvbmZpcm1hdGlvbkRpYWxvZyA/IFwiLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nXCIgOiBcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlXCIsXG5cdFx0XHR0aGlzLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkLlNlbWFudGljT2JqZWN0IGFzIHVua25vd24gYXMgc3RyaW5nKSxcblx0XHRcdHRoaXMuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQuQWN0aW9uIGFzIHVua25vd24gYXMgc3RyaW5nKSxcblx0XHRcdHRoaXMub2JqZWN0VG9TdHJpbmcobU5hdmlnYXRpb25QYXJhbWV0ZXJzKSxcblx0XHRcdFwiJHskc291cmNlPi99XCJcblx0XHQpO1xuXHR9LFxuXHRnZXRFbnRpdHlTZXQ6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0cmV0dXJuIE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoc1BhdGgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZG8gdGhlIGNhbGN1bGF0aW9uIG9mIGNyaXRpY2FsaXR5IGluIGNhc2UgQ3JpdGljYWxpdHlDYWxjdWxhdGlvbiBwcmVzZW50IGluIHRoZSBhbm5vdGF0aW9uXG5cdCAqXG5cdCAqIFRoZSBjYWxjdWxhdGlvbiBpcyBkb25lIGJ5IGNvbXBhcmluZyBhIHZhbHVlIHRvIHRoZSB0aHJlc2hvbGQgdmFsdWVzIHJlbGV2YW50IGZvciB0aGUgc3BlY2lmaWVkIGltcHJvdmVtZW50IGRpcmVjdGlvbi5cblx0ICogRm9yIGltcHJvdmVtZW50IGRpcmVjdGlvbiBUYXJnZXQsIHRoZSBjcml0aWNhbGl0eSBpcyBjYWxjdWxhdGVkIHVzaW5nIGJvdGggbG93IGFuZCBoaWdoIHRocmVzaG9sZCB2YWx1ZXMuIEl0IHdpbGwgYmVcblx0ICpcblx0ICogLSBQb3NpdGl2ZSBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBsb3dlciB0aGFuIEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlIE9SIGdyZWF0ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlTG93VmFsdWUgYW5kIGxvd2VyIHRoYW4gVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSBPUiBncmVhdGVyIHRoYW4gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBOZWdhdGl2ZSBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUxvd1ZhbHVlIG9yIGdyZWF0ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKlxuXHQgKiBGb3IgaW1wcm92ZW1lbnQgZGlyZWN0aW9uIE1pbmltaXplLCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgaGlnaCB0aHJlc2hvbGQgdmFsdWVzLiBJdCBpc1xuXHQgKiAtIFBvc2l0aXZlIGlmIHRoZSB2YWx1ZSBpcyBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIEFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUgYW5kIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlIGFuZCBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gTmVnYXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZVxuXHQgKlxuXHQgKiBGb3IgaW1wcm92ZW1lbnQgZGlyZWN0aW9uIE1heGltaXplLCB0aGUgY3JpdGljYWxpdHkgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgbG93IHRocmVzaG9sZCB2YWx1ZXMuIEl0IGlzXG5cdCAqXG5cdCAqIC0gUG9zaXRpdmUgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZVxuXHQgKiAtIE5ldXRyYWwgaWYgdGhlIHZhbHVlIGlzIGxlc3MgdGhhbiBBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSBhbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFRvbGVyYW5jZVJhbmdlTG93VmFsdWVcblx0ICogLSBDcml0aWNhbCBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlIGFuZCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZVxuXHQgKiAtIE5lZ2F0aXZlIGlmIHRoZSB2YWx1ZSBpcyBsb3dlciB0aGFuIERldmlhdGlvblJhbmdlTG93VmFsdWVcblx0ICpcblx0ICogVGhyZXNob2xkcyBhcmUgb3B0aW9uYWwuIEZvciB1bmFzc2lnbmVkIHZhbHVlcywgZGVmYXVsdHMgYXJlIGRldGVybWluZWQgaW4gdGhpcyBvcmRlcjpcblx0ICpcblx0ICogLSBGb3IgRGV2aWF0aW9uUmFuZ2UsIGFuIG9taXR0ZWQgTG93VmFsdWUgdHJhbnNsYXRlcyBpbnRvIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBudW1iZXIgKC1JTkYpLCBhbiBvbWl0dGVkIEhpZ2hWYWx1ZSB0cmFuc2xhdGVzIGludG8gdGhlIGxhcmdlc3QgcG9zc2libGUgbnVtYmVyICgrSU5GKVxuXHQgKiAtIEZvciBUb2xlcmFuY2VSYW5nZSwgYW4gb21pdHRlZCBMb3dWYWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIERldmlhdGlvblJhbmdlSGlnaFZhbHVlXG5cdCAqIC0gRm9yIEFjY2VwdGFuY2VSYW5nZSwgYW4gb21pdHRlZCBMb3dWYWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSwgYW4gb21pdHRlZCBIaWdoVmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlLlxuXHQgKiBAcGFyYW0gc0ltcHJvdmVtZW50RGlyZWN0aW9uIEltcHJvdmVtZW50RGlyZWN0aW9uIHRvIGJlIHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBjcml0aWNhbGl0eSBiaW5kaW5nXG5cdCAqIEBwYXJhbSBzVmFsdWUgVmFsdWUgZnJvbSBEYXRhcG9pbnQgdG8gYmUgbWVhc3VyZWRcblx0ICogQHBhcmFtIHNEZXZpYXRpb25Mb3cgRXhwcmVzc2lvbkJpbmRpbmcgZm9yIExvd2VyIERldmlhdGlvbiBsZXZlbFxuXHQgKiBAcGFyYW0gc1RvbGVyYW5jZUxvdyBFeHByZXNzaW9uQmluZGluZyBmb3IgTG93ZXIgVG9sZXJhbmNlIGxldmVsXG5cdCAqIEBwYXJhbSBzQWNjZXB0YW5jZUxvdyBFeHByZXNzaW9uQmluZGluZyBmb3IgTG93ZXIgQWNjZXB0YW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc0FjY2VwdGFuY2VIaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgQWNjZXB0YW5jZSBsZXZlbFxuXHQgKiBAcGFyYW0gc1RvbGVyYW5jZUhpZ2ggRXhwcmVzc2lvbkJpbmRpbmcgZm9yIEhpZ2hlciBUb2xlcmFuY2UgbGV2ZWxcblx0ICogQHBhcmFtIHNEZXZpYXRpb25IaWdoIEV4cHJlc3Npb25CaW5kaW5nIGZvciBIaWdoZXIgRGV2aWF0aW9uIGxldmVsXG5cdCAqIEByZXR1cm5zIFJldHVybnMgY3JpdGljYWxpdHkgY2FsY3VsYXRpb24gYXMgZXhwcmVzc2lvbiBiaW5kaW5nXG5cdCAqL1xuXHRnZXRDcml0aWNhbGl0eUNhbGN1bGF0aW9uQmluZGluZzogZnVuY3Rpb24gKFxuXHRcdHNJbXByb3ZlbWVudERpcmVjdGlvbjogc3RyaW5nLFxuXHRcdHNWYWx1ZTogc3RyaW5nLFxuXHRcdHNEZXZpYXRpb25Mb3c6IHN0cmluZyB8IG51bWJlcixcblx0XHRzVG9sZXJhbmNlTG93OiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0c0FjY2VwdGFuY2VMb3c6IHN0cmluZyB8IG51bWJlcixcblx0XHRzQWNjZXB0YW5jZUhpZ2g6IHN0cmluZyB8IG51bWJlcixcblx0XHRzVG9sZXJhbmNlSGlnaDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdHNEZXZpYXRpb25IaWdoOiBzdHJpbmcgfCBudW1iZXJcblx0KTogc3RyaW5nIHtcblx0XHRsZXQgc0NyaXRpY2FsaXR5RXhwcmVzc2lvbjogdHlwZW9mIFZhbHVlQ29sb3IgfCBzdHJpbmcgPSBWYWx1ZUNvbG9yLk5ldXRyYWw7IC8vIERlZmF1bHQgQ3JpdGljYWxpdHkgU3RhdGVcblxuXHRcdHNWYWx1ZSA9IGAlJHtzVmFsdWV9YDtcblxuXHRcdC8vIFNldHRpbmcgVW5hc3NpZ25lZCBWYWx1ZXNcblx0XHRzRGV2aWF0aW9uTG93ID0gc0RldmlhdGlvbkxvdyB8fCAtSW5maW5pdHk7XG5cdFx0c1RvbGVyYW5jZUxvdyA9IHNUb2xlcmFuY2VMb3cgfHwgc0RldmlhdGlvbkxvdztcblx0XHRzQWNjZXB0YW5jZUxvdyA9IHNBY2NlcHRhbmNlTG93IHx8IHNUb2xlcmFuY2VMb3c7XG5cdFx0c0RldmlhdGlvbkhpZ2ggPSBzRGV2aWF0aW9uSGlnaCB8fCBJbmZpbml0eTtcblx0XHRzVG9sZXJhbmNlSGlnaCA9IHNUb2xlcmFuY2VIaWdoIHx8IHNEZXZpYXRpb25IaWdoO1xuXHRcdHNBY2NlcHRhbmNlSGlnaCA9IHNBY2NlcHRhbmNlSGlnaCB8fCBzVG9sZXJhbmNlSGlnaDtcblxuXHRcdC8vIERlYWxpbmcgd2l0aCBEZWNpbWFsIGFuZCBQYXRoIGJhc2VkIGJpbmdkaW5nc1xuXHRcdHNEZXZpYXRpb25Mb3cgPSBzRGV2aWF0aW9uTG93ICYmICgrc0RldmlhdGlvbkxvdyA/ICtzRGV2aWF0aW9uTG93IDogYCUke3NEZXZpYXRpb25Mb3d9YCk7XG5cdFx0c1RvbGVyYW5jZUxvdyA9IHNUb2xlcmFuY2VMb3cgJiYgKCtzVG9sZXJhbmNlTG93ID8gK3NUb2xlcmFuY2VMb3cgOiBgJSR7c1RvbGVyYW5jZUxvd31gKTtcblx0XHRzQWNjZXB0YW5jZUxvdyA9IHNBY2NlcHRhbmNlTG93ICYmICgrc0FjY2VwdGFuY2VMb3cgPyArc0FjY2VwdGFuY2VMb3cgOiBgJSR7c0FjY2VwdGFuY2VMb3d9YCk7XG5cdFx0c0FjY2VwdGFuY2VIaWdoID0gc0FjY2VwdGFuY2VIaWdoICYmICgrc0FjY2VwdGFuY2VIaWdoID8gK3NBY2NlcHRhbmNlSGlnaCA6IGAlJHtzQWNjZXB0YW5jZUhpZ2h9YCk7XG5cdFx0c1RvbGVyYW5jZUhpZ2ggPSBzVG9sZXJhbmNlSGlnaCAmJiAoK3NUb2xlcmFuY2VIaWdoID8gK3NUb2xlcmFuY2VIaWdoIDogYCUke3NUb2xlcmFuY2VIaWdofWApO1xuXHRcdHNEZXZpYXRpb25IaWdoID0gc0RldmlhdGlvbkhpZ2ggJiYgKCtzRGV2aWF0aW9uSGlnaCA/ICtzRGV2aWF0aW9uSGlnaCA6IGAlJHtzRGV2aWF0aW9uSGlnaH1gKTtcblxuXHRcdC8vIENyZWF0aW5nIHJ1bnRpbWUgZXhwcmVzc2lvbiBiaW5kaW5nIGZyb20gY3JpdGljYWxpdHkgY2FsY3VsYXRpb24gZm9yIENyaXRpY2FsaXR5IFN0YXRlXG5cdFx0aWYgKHNJbXByb3ZlbWVudERpcmVjdGlvbi5pbmNsdWRlcyhcIk1pbmltaXplXCIpKSB7XG5cdFx0XHRzQ3JpdGljYWxpdHlFeHByZXNzaW9uID1cblx0XHRcdFx0XCJ7PSBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VIaWdoICtcblx0XHRcdFx0XCIgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkdvb2QgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUhpZ2ggK1xuXHRcdFx0XHRcIiA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuTmV1dHJhbCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0XCIoXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uSGlnaCArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uSGlnaCArXG5cdFx0XHRcdFwiKSA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuQ3JpdGljYWwgK1xuXHRcdFx0XHRcIicgOiAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkVycm9yICtcblx0XHRcdFx0XCInIH1cIjtcblx0XHR9IGVsc2UgaWYgKHNJbXByb3ZlbWVudERpcmVjdGlvbi5pbmNsdWRlcyhcIk1heGltaXplXCIpKSB7XG5cdFx0XHRzQ3JpdGljYWxpdHlFeHByZXNzaW9uID1cblx0XHRcdFx0XCJ7PSBcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiID49IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VMb3cgK1xuXHRcdFx0XHRcIiA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuR29vZCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlTG93ICtcblx0XHRcdFx0XCIgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLk5ldXRyYWwgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkxvdyArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uTG93ICtcblx0XHRcdFx0XCIpID8gJ1wiICtcblx0XHRcdFx0VmFsdWVDb2xvci5Dcml0aWNhbCArXG5cdFx0XHRcdFwiJyA6ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuRXJyb3IgK1xuXHRcdFx0XHRcIicgfVwiO1xuXHRcdH0gZWxzZSBpZiAoc0ltcHJvdmVtZW50RGlyZWN0aW9uLmluY2x1ZGVzKFwiVGFyZ2V0XCIpKSB7XG5cdFx0XHRzQ3JpdGljYWxpdHlFeHByZXNzaW9uID1cblx0XHRcdFx0XCJ7PSAoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8PSBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlSGlnaCArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzQWNjZXB0YW5jZUxvdyArXG5cdFx0XHRcdFwiKSA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuR29vZCArXG5cdFx0XHRcdFwiJyA6IFwiICtcblx0XHRcdFx0XCIoKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPj0gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlTG93ICtcblx0XHRcdFx0XCIgJiYgXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA8IFwiICtcblx0XHRcdFx0c0FjY2VwdGFuY2VMb3cgK1xuXHRcdFx0XHRcIikgfHwgKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPiBcIiArXG5cdFx0XHRcdHNBY2NlcHRhbmNlSGlnaCArXG5cdFx0XHRcdFwiICYmIFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPD0gXCIgK1xuXHRcdFx0XHRzVG9sZXJhbmNlSGlnaCArXG5cdFx0XHRcdFwiKSkgPyAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLk5ldXRyYWwgK1xuXHRcdFx0XHRcIicgOiBcIiArXG5cdFx0XHRcdFwiKChcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25Mb3cgK1xuXHRcdFx0XHRcIiAmJiAoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+PSBcIiArXG5cdFx0XHRcdHNEZXZpYXRpb25Mb3cgK1xuXHRcdFx0XHRcIikgJiYgKFwiICtcblx0XHRcdFx0c1ZhbHVlICtcblx0XHRcdFx0XCIgPCBcIiArXG5cdFx0XHRcdHNUb2xlcmFuY2VMb3cgK1xuXHRcdFx0XHRcIikpIHx8ICgoXCIgK1xuXHRcdFx0XHRzVmFsdWUgK1xuXHRcdFx0XHRcIiA+IFwiICtcblx0XHRcdFx0c1RvbGVyYW5jZUhpZ2ggK1xuXHRcdFx0XHRcIikgJiYgXCIgK1xuXHRcdFx0XHRzRGV2aWF0aW9uSGlnaCArXG5cdFx0XHRcdFwiICYmIChcIiArXG5cdFx0XHRcdHNWYWx1ZSArXG5cdFx0XHRcdFwiIDw9IFwiICtcblx0XHRcdFx0c0RldmlhdGlvbkhpZ2ggK1xuXHRcdFx0XHRcIikpKSA/ICdcIiArXG5cdFx0XHRcdFZhbHVlQ29sb3IuQ3JpdGljYWwgK1xuXHRcdFx0XHRcIicgOiAnXCIgK1xuXHRcdFx0XHRWYWx1ZUNvbG9yLkVycm9yICtcblx0XHRcdFx0XCInIH1cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJDYXNlIG5vdCBzdXBwb3J0ZWQsIHJldHVybmluZyB0aGUgZGVmYXVsdCBWYWx1ZSBOZXV0cmFsXCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBzQ3JpdGljYWxpdHlFeHByZXNzaW9uO1xuXHR9LFxuXHQvKipcblx0ICogVG8gZmV0Y2ggbWVhc3VyZSBhdHRyaWJ1dGUgaW5kZXguXG5cdCAqIEBwYXJhbSBpTWVhc3VyZSBDaGFydCBBbm5vdGF0aW9uc1xuXHQgKiBAcGFyYW0gb0NoYXJ0QW5ub3RhdGlvbnMgQ2hhcnQgQW5ub3RhdGlvbnNcblx0ICogQHJldHVybnMgTWVhc3VyZUF0dHJpYnV0ZSBpbmRleC5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldE1lYXN1cmVBdHRyaWJ1dGVJbmRleDogZnVuY3Rpb24gKGlNZWFzdXJlOiBudW1iZXIsIG9DaGFydEFubm90YXRpb25zOiBNZXRhTW9kZWxUeXBlPENoYXJ0PiB8IENoYXJ0LCBpc01pY3JvQ2hhcnQ/OiBib29sZWFuKTogbnVtYmVyIHtcblx0XHRsZXQgYU1lYXN1cmVzLCBzTWVhc3VyZVByb3BlcnR5UGF0aDtcblx0XHRpZiAob0NoYXJ0QW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5sZW5ndGggJiYgb0NoYXJ0QW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhTWVhc3VyZXMgPSBvQ2hhcnRBbm5vdGF0aW9ucy5NZWFzdXJlcztcblx0XHRcdHNNZWFzdXJlUHJvcGVydHlQYXRoID0gaXNNaWNyb0NoYXJ0XG5cdFx0XHRcdD8gKGFNZWFzdXJlc1tpTWVhc3VyZV0gYXMgUHJvcGVydHlQYXRoKS52YWx1ZVxuXHRcdFx0XHQ6IChhTWVhc3VyZXNbaU1lYXN1cmVdIGFzIE1ldGFNb2RlbE1lYXN1cmUpLiRQcm9wZXJ0eVBhdGg7XG5cdFx0fSBlbHNlIGlmIChvQ2hhcnRBbm5vdGF0aW9ucz8uRHluYW1pY01lYXN1cmVzPy5sZW5ndGggJiYgb0NoYXJ0QW5ub3RhdGlvbnM/LkR5bmFtaWNNZWFzdXJlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0YU1lYXN1cmVzID0gKG9DaGFydEFubm90YXRpb25zIGFzIE1ldGFNb2RlbFR5cGU8Q2hhcnQ+KS5EeW5hbWljTWVhc3VyZXM7XG5cdFx0XHRzTWVhc3VyZVByb3BlcnR5UGF0aCA9IGFNZWFzdXJlcz8uW2lNZWFzdXJlXS4kQW5ub3RhdGlvblBhdGg7XG5cdFx0fVxuXHRcdGxldCBiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cztcblx0XHRjb25zdCBhTWVhc3VyZUF0dHJpYnV0ZXMgPSBvQ2hhcnRBbm5vdGF0aW9ucy5NZWFzdXJlQXR0cmlidXRlcztcblx0XHRsZXQgaU1lYXN1cmVBdHRyaWJ1dGUgPSAtMTtcblx0XHRjb25zdCBmbkNoZWNrTWVhc3VyZSA9IGZ1bmN0aW9uIChcblx0XHRcdHNNZWFzdXJlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdFx0b01lYXN1cmVBdHRyaWJ1dGU6IE1ldGFNb2RlbFR5cGU8Q2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZT4gfCBDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlLFxuXHRcdFx0aW5kZXg6IG51bWJlclxuXHRcdCk6IGJvb2xlYW4ge1xuXHRcdFx0aWYgKG9NZWFzdXJlQXR0cmlidXRlKSB7XG5cdFx0XHRcdGNvbnN0IHBhdGggPSBpc01pY3JvQ2hhcnRcblx0XHRcdFx0XHQ/IChvTWVhc3VyZUF0dHJpYnV0ZSBhcyBDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlKS5NZWFzdXJlPy52YWx1ZVxuXHRcdFx0XHRcdDogKG9NZWFzdXJlQXR0cmlidXRlIGFzIE1ldGFNb2RlbFR5cGU8Q2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZT4pLk1lYXN1cmU/LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGlmIChvTWVhc3VyZUF0dHJpYnV0ZS5NZWFzdXJlICYmIHBhdGggPT09IHNNZWFzdXJlUGF0aCkge1xuXHRcdFx0XHRcdGlNZWFzdXJlQXR0cmlidXRlID0gaW5kZXg7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0b01lYXN1cmVBdHRyaWJ1dGUuRHluYW1pY01lYXN1cmUgJiZcblx0XHRcdFx0XHQob01lYXN1cmVBdHRyaWJ1dGUgYXMgTWV0YU1vZGVsVHlwZTxDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlPik/LkR5bmFtaWNNZWFzdXJlPy4kQW5ub3RhdGlvblBhdGggPT09IHNNZWFzdXJlUGF0aFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IGluZGV4O1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0XHRpZiAoYU1lYXN1cmVBdHRyaWJ1dGVzKSB7XG5cdFx0XHRiTWVhc3VyZUF0dHJpYnV0ZUV4aXN0cyA9IGFNZWFzdXJlQXR0cmlidXRlcy5zb21lKGZuQ2hlY2tNZWFzdXJlLmJpbmQobnVsbCwgc01lYXN1cmVQcm9wZXJ0eVBhdGgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGJNZWFzdXJlQXR0cmlidXRlRXhpc3RzICYmIGlNZWFzdXJlQXR0cmlidXRlID4gLTEgPyBpTWVhc3VyZUF0dHJpYnV0ZSA6IC0xO1xuXHR9LFxuXG5cdGdldE1lYXN1cmVBdHRyaWJ1dGU6IGFzeW5jIGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzQ2hhcnRBbm5vdGF0aW9uUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRyZXR1cm4gb01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KHNDaGFydEFubm90YXRpb25QYXRoKS50aGVuKGZ1bmN0aW9uIChvQ2hhcnRBbm5vdGF0aW9uczogTWV0YU1vZGVsVHlwZTxDaGFydD4pIHtcblx0XHRcdGNvbnN0IGFNZWFzdXJlQXR0cmlidXRlcyA9IG9DaGFydEFubm90YXRpb25zLk1lYXN1cmVBdHRyaWJ1dGVzLFxuXHRcdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IENvbW1vbkhlbHBlci5nZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgoMCwgb0NoYXJ0QW5ub3RhdGlvbnMpO1xuXHRcdFx0Y29uc3Qgc01lYXN1cmVBdHRyaWJ1dGVQYXRoID1cblx0XHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXM/LltpTWVhc3VyZUF0dHJpYnV0ZV0gJiYgYU1lYXN1cmVBdHRyaWJ1dGVzW2lNZWFzdXJlQXR0cmlidXRlXS5EYXRhUG9pbnRcblx0XHRcdFx0XHQ/IGAke3NDaGFydEFubm90YXRpb25QYXRofS9NZWFzdXJlQXR0cmlidXRlcy8ke2lNZWFzdXJlQXR0cmlidXRlfS9gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoc01lYXN1cmVBdHRyaWJ1dGVQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJEYXRhUG9pbnQgbWlzc2luZyBmb3IgdGhlIG1lYXN1cmVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc01lYXN1cmVBdHRyaWJ1dGVQYXRoID8gYCR7c01lYXN1cmVBdHRyaWJ1dGVQYXRofURhdGFQb2ludC8kQW5ub3RhdGlvblBhdGgvYCA6IHNNZWFzdXJlQXR0cmlidXRlUGF0aDtcblx0XHR9KTtcblx0fSxcblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbWVhc3VyZUF0dHJpYnV0ZSBmb3IgdGhlIG1lYXN1cmUuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IHRvIHRoZSBtZWFzdXJlIGFubm90YXRpb25cblx0ICogQHJldHVybnMgUGF0aCB0byB0aGUgbWVhc3VyZUF0dHJpYnV0ZSBvZiB0aGUgbWVhc3VyZVxuXHQgKi9cblx0Z2V0TWVhc3VyZUF0dHJpYnV0ZUZvck1lYXN1cmU6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzTWVhc3VyZVBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRzQ2hhcnRBbm5vdGF0aW9uUGF0aCA9IHNNZWFzdXJlUGF0aC5zdWJzdHJpbmcoMCwgc01lYXN1cmVQYXRoLmxhc3RJbmRleE9mKFwiTWVhc3VyZVwiKSksXG5cdFx0XHRpTWVhc3VyZSA9IHNNZWFzdXJlUGF0aC5yZXBsYWNlKC8uKlxcLy8sIFwiXCIpO1xuXG5cdFx0Y29uc3Qgb0NoYXJ0QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzQ2hhcnRBbm5vdGF0aW9uUGF0aCk7XG5cdFx0Y29uc3QgYU1lYXN1cmVBdHRyaWJ1dGVzID0gb0NoYXJ0QW5ub3RhdGlvbnMuTWVhc3VyZUF0dHJpYnV0ZXMsXG5cdFx0XHRpTWVhc3VyZUF0dHJpYnV0ZSA9IENvbW1vbkhlbHBlci5nZXRNZWFzdXJlQXR0cmlidXRlSW5kZXgoaU1lYXN1cmUgYXMgdW5rbm93biBhcyBudW1iZXIsIG9DaGFydEFubm90YXRpb25zKTtcblx0XHRjb25zdCBzTWVhc3VyZUF0dHJpYnV0ZVBhdGggPVxuXHRcdFx0aU1lYXN1cmVBdHRyaWJ1dGUgPiAtMSAmJiBhTWVhc3VyZUF0dHJpYnV0ZXNbaU1lYXN1cmVBdHRyaWJ1dGVdICYmIGFNZWFzdXJlQXR0cmlidXRlc1tpTWVhc3VyZUF0dHJpYnV0ZV0uRGF0YVBvaW50XG5cdFx0XHRcdD8gYCR7c0NoYXJ0QW5ub3RhdGlvblBhdGh9TWVhc3VyZUF0dHJpYnV0ZXMvJHtpTWVhc3VyZUF0dHJpYnV0ZX0vYFxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAoc01lYXN1cmVBdHRyaWJ1dGVQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdExvZy53YXJuaW5nKFwiRGF0YVBvaW50IG1pc3NpbmcgZm9yIHRoZSBtZWFzdXJlXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gc01lYXN1cmVBdHRyaWJ1dGVQYXRoID8gYCR7c01lYXN1cmVBdHRyaWJ1dGVQYXRofURhdGFQb2ludC8kQW5ub3RhdGlvblBhdGgvYCA6IHNNZWFzdXJlQXR0cmlidXRlUGF0aDtcblx0fSxcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbnRhaW5lZCBuYXZpZ2F0aW9uIHByb3BlcnR5IGhhcyBhIGRyYWZ0IHJvb3Qvbm9kZSBwYXJlbnQgZW50aXR5U2V0LlxuXHQgKiBAcGFyYW0gb1RhcmdldENvbGxlY3Rpb25Db250YWluc1RhcmdldCBUYXJnZXQgY29sbGVjdGlvbiBoYXMgQ29udGFpbnNUYXJnZXQgcHJvcGVydHlcblx0ICogQHBhcmFtIG9UYWJsZU1ldGFkYXRhIFRhYmxlIG1ldGFkYXRhIGZvciB3aGljaCBkcmFmdCBzdXBwb3J0IHNoYWxsIGJlIGNoZWNrZWRcblx0ICogQHBhcmFtIG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldFxuXHQgKiBAcGFyYW0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0Lm9Nb2RlbFxuXHQgKiBAcGFyYW0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0LnNQYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBkcmFmdFxuXHQgKi9cblx0aXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50OiBmdW5jdGlvbiAoXG5cdFx0b1RhcmdldENvbGxlY3Rpb25Db250YWluc1RhcmdldDogb2JqZWN0LFxuXHRcdG9UYWJsZU1ldGFkYXRhOiB7XG5cdFx0XHRwYXJlbnRFbnRpdHlTZXQ/OiB7XG5cdFx0XHRcdG9Nb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cdFx0XHRcdHNQYXRoPzogc3RyaW5nO1xuXHRcdFx0fTtcblx0XHR9XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGlmIChvVGFyZ2V0Q29sbGVjdGlvbkNvbnRhaW5zVGFyZ2V0KSB7XG5cdFx0XHRpZiAob1RhYmxlTWV0YWRhdGEgJiYgb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0ICYmIG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5zUGF0aCkge1xuXHRcdFx0XHRjb25zdCBzUGFyZW50RW50aXR5U2V0UGF0aCA9IG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5zUGF0aDtcblx0XHRcdFx0Y29uc3Qgb0RyYWZ0Um9vdCA9IG9UYWJsZU1ldGFkYXRhLnBhcmVudEVudGl0eVNldC5vTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdGAke3NQYXJlbnRFbnRpdHlTZXRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290YFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBvRHJhZnROb2RlID0gb1RhYmxlTWV0YWRhdGEucGFyZW50RW50aXR5U2V0Lm9Nb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdFx0YCR7c1BhcmVudEVudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVgXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChvRHJhZnRSb290IHx8IG9EcmFmdE5vZGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBFbnN1cmVzIHRoZSBkYXRhIGlzIHByb2Nlc3NlZCBhcyBkZWZpbmVkIGluIHRoZSB0ZW1wbGF0ZS5cblx0ICogU2luY2UgdGhlIHByb3BlcnR5IERhdGEgaXMgb2YgdGhlIHR5cGUgJ29iamVjdCcsIGl0IG1heSBub3QgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZGF0YUVsZW1lbnQgVGhlIGRhdGEgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLlxuXHQgKiBAcmV0dXJucyBUaGUgY29ycmVjdCBwYXRoIGFjY29yZGluZyB0byB0aGUgdGVtcGxhdGUuXG5cdCAqL1xuXHRnZXREYXRhRnJvbVRlbXBsYXRlOiBmdW5jdGlvbiAoZGF0YUVsZW1lbnQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHNwbGl0UGF0aCA9IGRhdGFFbGVtZW50LmdldFBhdGgoKS5zcGxpdChcIi9cIik7XG5cdFx0Y29uc3QgZGF0YUtleSA9IHNwbGl0UGF0aFtzcGxpdFBhdGgubGVuZ3RoIC0gMV07XG5cdFx0Y29uc3QgY29ubmVjdGVkRGF0YVBhdGggPSBgLyR7c3BsaXRQYXRoLnNsaWNlKDEsIC0yKS5qb2luKFwiL1wiKX0vQGA7XG5cdFx0Y29uc3QgY29ubmVjdGVkT2JqZWN0ID0gZGF0YUVsZW1lbnQuZ2V0T2JqZWN0KGNvbm5lY3RlZERhdGFQYXRoKTtcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IGNvbm5lY3RlZE9iamVjdC5UZW1wbGF0ZTtcblx0XHRjb25zdCBzcGxpdFRlbXAgPSB0ZW1wbGF0ZS5zcGxpdChcIn1cIik7XG5cdFx0Y29uc3QgdGVtcEFycmF5ID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdFRlbXAubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBzcGxpdFRlbXBbaV0uc3BsaXQoXCJ7XCIpWzFdLnRyaW0oKTtcblx0XHRcdHRlbXBBcnJheS5wdXNoKGtleSk7XG5cdFx0fVxuXHRcdE9iamVjdC5rZXlzKGNvbm5lY3RlZE9iamVjdC5EYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdGlmIChzS2V5LnN0YXJ0c1dpdGgoXCIkXCIpKSB7XG5cdFx0XHRcdGRlbGV0ZSBjb25uZWN0ZWRPYmplY3QuRGF0YVtzS2V5XTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRjb25zdCBpbmRleCA9IE9iamVjdC5rZXlzKGNvbm5lY3RlZE9iamVjdC5EYXRhKS5pbmRleE9mKGRhdGFLZXkpO1xuXHRcdHJldHVybiBgLyR7c3BsaXRQYXRoLnNsaWNlKDEsIC0yKS5qb2luKFwiL1wiKX0vRGF0YS8ke3RlbXBBcnJheVtpbmRleF19YDtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBlbmQgb2YgdGhlIHRlbXBsYXRlIGhhcyBiZWVuIHJlYWNoZWQuXG5cdCAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBvZiB0aGUgY29ubmVjdGVkIGZpZWxkcy5cblx0ICogQHBhcmFtIHRhcmdldC5UZW1wbGF0ZVxuXHQgKiBAcGFyYW0gdGFyZ2V0LkRhdGFcblx0ICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLlxuXHQgKiBAcmV0dXJucyBUcnVlIG9yIEZhbHNlIChkZXBlbmRpbmcgb24gdGhlIHRlbXBsYXRlIGluZGV4KS5cblx0ICovXG5cdG5vdExhc3RJbmRleDogZnVuY3Rpb24gKHRhcmdldDogeyBUZW1wbGF0ZTogc3RyaW5nOyBEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9LCBlbGVtZW50OiBvYmplY3QpOiBib29sZWFuIHtcblx0XHRjb25zdCB0ZW1wbGF0ZSA9IHRhcmdldC5UZW1wbGF0ZTtcblx0XHRjb25zdCBzcGxpdFRlbXAgPSB0ZW1wbGF0ZS5zcGxpdChcIn1cIik7XG5cdFx0Y29uc3QgdGVtcEFycmF5OiBzdHJpbmdbXSA9IFtdO1xuXHRcdGxldCBpc0xhc3RJbmRleCA9IGZhbHNlO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc3BsaXRUZW1wLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0Y29uc3QgZGF0YUtleSA9IHNwbGl0VGVtcFtpXS5zcGxpdChcIntcIilbMV0udHJpbSgpO1xuXHRcdFx0dGVtcEFycmF5LnB1c2goZGF0YUtleSk7XG5cdFx0fVxuXG5cdFx0dGVtcEFycmF5LmZvckVhY2goZnVuY3Rpb24gKHRlbXBsYXRlSW5mbzogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCBsYXN0SW5kZXggPSB0ZW1wQXJyYXkubGVuZ3RoIC0gMTtcblx0XHRcdGlmICh0YXJnZXQuRGF0YVt0ZW1wbGF0ZUluZm9dID09PSBlbGVtZW50ICYmIHRlbXBBcnJheS5pbmRleE9mKHRlbXBsYXRlSW5mbykgPCBsYXN0SW5kZXgpIHtcblx0XHRcdFx0aXNMYXN0SW5kZXggPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBpc0xhc3RJbmRleDtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUgZGVsaW1pdGVyIGZyb20gdGhlIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gdGVtcGxhdGUgVGhlIHRlbXBsYXRlIHN0cmluZy5cblx0ICogQHJldHVybnMgVGhlIGRlbGltaXRlciBpbiB0aGUgdGVtcGxhdGUgc3RyaW5nLlxuXHQgKi9cblx0Z2V0RGVsaW1pdGVyOiBmdW5jdGlvbiAodGVtcGxhdGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRlbXBsYXRlLnNwbGl0KFwifVwiKVsxXS5zcGxpdChcIntcIilbMF0udHJpbSgpO1xuXHR9LFxuXG5cdG9NZXRhTW9kZWw6IHVuZGVmaW5lZCBhcyBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZCxcblx0c2V0TWV0YU1vZGVsOiBmdW5jdGlvbiAob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiB2b2lkIHtcblx0XHR0aGlzLm9NZXRhTW9kZWwgPSBvTWV0YU1vZGVsO1xuXHR9LFxuXG5cdGdldE1ldGFNb2RlbDogZnVuY3Rpb24gKCk6IE9EYXRhTWV0YU1vZGVsIHtcblx0XHRyZXR1cm4gdGhpcy5vTWV0YU1vZGVsITtcblx0fSxcblxuXHRnZXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAoc1BhdGg6IHN0cmluZywgbWV0YU1vZGVsPzogT0RhdGFNZXRhTW9kZWwpOiBzdHJpbmdbXSB7XG5cdFx0aWYgKG1ldGFNb2RlbCkge1xuXHRcdFx0Y29uc3Qgb1BhcmFtZXRlckluZm8gPSBDb21tb25VdGlscy5nZXRQYXJhbWV0ZXJJbmZvKG1ldGFNb2RlbCwgc1BhdGgpO1xuXHRcdFx0aWYgKG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMpIHtcblx0XHRcdFx0cmV0dXJuIE9iamVjdC5rZXlzKG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH0sXG5cblx0LyoqXG5cdCAqIEJ1aWxkIGFuIGV4cHJlc3Npb24gY2FsbGluZyBhbiBhY3Rpb24gaGFuZGxlciB2aWEgdGhlIEZQTSBoZWxwZXIncyBhY3Rpb25XcmFwcGVyIGZ1bmN0aW9uXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSAnRlBNLmFjdGlvbldyYXBwZXIoKScgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGF0IHJ1bnRpbWUuXG5cdCAqIEBwYXJhbSBvQWN0aW9uIEFjdGlvbiBtZXRhZGF0YVxuXHQgKiBAcGFyYW0gb0FjdGlvbi5oYW5kbGVyTW9kdWxlIE1vZHVsZSBjb250YWluaW5nIHRoZSBhY3Rpb24gaGFuZGxlciBtZXRob2Rcblx0ICogQHBhcmFtIG9BY3Rpb24uaGFuZGxlck1ldGhvZCBBY3Rpb24gaGFuZGxlciBtZXRob2QgbmFtZVxuXHQgKiBAcGFyYW0gW29UaGlzXSBgdGhpc2AgKGlmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhIG1hY3JvKVxuXHQgKiBAcGFyYW0gb1RoaXMuaWQgVGhlIHRhYmxlJ3MgSURcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuXHQgKiBAcmV0dXJucyBUaGUgYWN0aW9uIHdyYXBwZXIgYmluZGluZ1x0ZXhwcmVzc2lvblxuXHQgKi9cblx0YnVpbGRBY3Rpb25XcmFwcGVyOiBmdW5jdGlvbiAoXG5cdFx0b0FjdGlvbjogQ3VzdG9tQWN0aW9uLFxuXHRcdG9UaGlzOiB7IGlkPzogc3RyaW5nIH0gfCB1bmRlZmluZWQsXG5cdFx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuXHQpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3QgYVBhcmFtczogdW5rbm93bltdID0gW3JlZihcIiRldmVudFwiKSwgb0FjdGlvbi5oYW5kbGVyTW9kdWxlLCBvQWN0aW9uLmhhbmRsZXJNZXRob2RdO1xuXG5cdFx0aWYgKG9UaGlzICYmIG9UaGlzLmlkKSB7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsUGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiJHtpbnRlcm5hbD5zZWxlY3RlZENvbnRleHRzfVwiIDogXCIke2ludGVybmFsPmNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHN9XCI7XG5cdFx0XHRjb25zdCBvQWRkaXRpb25hbFBhcmFtcyA9IHsgY29udGV4dHM6IHJlZihpbnRlcm5hbE1vZGVsUGF0aCkgfTtcblx0XHRcdGFQYXJhbXMucHVzaChvQWRkaXRpb25hbFBhcmFtcyk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihmbihcIkZQTS5hY3Rpb25XcmFwcGVyXCIsIGFQYXJhbXMpKTtcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHZhbHVlIHdoZXRoZXIgb3Igbm90IHRoZSBlbGVtZW50IHNob3VsZCBiZSB2aXNpYmxlIGRlcGVuZGluZyBvbiB0aGUgSGlkZGVuIGFubm90YXRpb24uXG5cdCAqIEl0IGlzIGludmVydGVkIGFzIHRoZSBVSSBlbGVtZW50cyBoYXZlIGEgdmlzaWJsZSBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGEgaGlkZGVuIG9uZS5cblx0ICogQHBhcmFtIGRhdGFGaWVsZEFubm90YXRpb25zIFRoZSBkYXRhRmllbGQgb2JqZWN0XG5cdCAqIEByZXR1cm5zIEEgcGF0aCBvciBhIEJvb2xlYW5cblx0ICovXG5cdGdldEhpZGRlblBhdGhFeHByZXNzaW9uOiBmdW5jdGlvbiAoZGF0YUZpZWxkQW5ub3RhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHsgJFBhdGg/OiBzdHJpbmcgfT4pOiBzdHJpbmcgfCBib29sZWFuIHtcblx0XHRpZiAoZGF0YUZpZWxkQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBoaWRkZW4gPSBkYXRhRmllbGRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl07XG5cdFx0XHRyZXR1cm4gdHlwZW9mIGhpZGRlbiA9PT0gXCJvYmplY3RcIiA/IFwiez0gISR7XCIgKyBoaWRkZW4uJFBhdGggKyBcIn0gfVwiIDogIWhpZGRlbjtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBmZXRjaCB0aGUgY29ycmVjdCBvcGVyYXRvcnMgYmFzZWQgb24gdGhlIGZpbHRlciByZXN0cmljdGlvbnMgdGhhdCBjYW4gYmUgYW5ub3RhdGVkIG9uIGFuIGVudGl0eSBzZXQgb3IgYSBuYXZpZ2F0aW9uIHByb3BlcnR5LlxuXHQgKiBXZSByZXR1cm4gdGhlIGNvcnJlY3Qgb3BlcmF0b3JzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgcmVzdHJpY3Rpb24gYW5kIGFsc28gY2hlY2sgZm9yIHRoZSBvcGVyYXRvcnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgdG8gaW5jbHVkZSBvciBleGNsdWRlIHRoZW0uXG5cdCAqIEBwYXJhbSBzUHJvcGVydHkgU3RyaW5nIG5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBzRW50aXR5U2V0UGF0aCBTdHJpbmcgcGF0aCB0byB0aGUgZW50aXR5IHNldFxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCB1c2VkIGR1cmluZyB0ZW1wbGF0aW5nXG5cdCAqIEBwYXJhbSBzVHlwZSBTdHJpbmcgZGF0YSB0eXBlIG9kIHRoZSBwcm9wZXJ0eSwgZm9yIGV4YW1wbGUgZWRtLkRhdGVcblx0ICogQHBhcmFtIGJVc2VTZW1hbnRpY0RhdGVSYW5nZSBCb29sZWFuIHBhc3NlZCBmcm9tIHRoZSBtYW5pZmVzdCBmb3Igc2VtYW50aWMgZGF0ZSByYW5nZVxuXHQgKiBAcGFyYW0gc2V0dGluZ3MgU3RyaW5naWZpZWQgb2JqZWN0IG9mIHRoZSBwcm9wZXJ0eSBzZXR0aW5ncyBvciBwcm9wZXJ0eSBzZXR0aW5ncyBhcyBhIHdob2xlXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIG9wZXJhdG9ycyBmb3IgZmlsdGVyaW5nXG5cdCAqL1xuXHRnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eTogZnVuY3Rpb24gKFxuXHRcdHNQcm9wZXJ0eTogc3RyaW5nLFxuXHRcdHNFbnRpdHlTZXRQYXRoOiBzdHJpbmcsXG5cdFx0b0NvbnRleHQ6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdHNUeXBlPzogc3RyaW5nLFxuXHRcdGJVc2VTZW1hbnRpY0RhdGVSYW5nZT86IGJvb2xlYW4gfCBzdHJpbmcsXG5cdFx0c2V0dGluZ3M/OiBGaWx0ZXJTZXR0aW5ncyB8IHN0cmluZ1xuXHQpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IENvbW1vblV0aWxzLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aChzRW50aXR5U2V0UGF0aCwgb0NvbnRleHQpO1xuXHRcdGNvbnN0IGFFcXVhbHNPcHMgPSBbXCJFUVwiXTtcblx0XHRjb25zdCBhU2luZ2xlUmFuZ2VPcHMgPSBbXCJFUVwiLCBcIkdFXCIsIFwiTEVcIiwgXCJMVFwiLCBcIkdUXCIsIFwiQlRcIiwgXCJORVwiLCBcIk5PVEJUXCIsIFwiTk9UTEVcIiwgXCJOT1RMVFwiLCBcIk5PVEdFXCIsIFwiTk9UR1RcIl07XG5cdFx0Y29uc3QgYVNpbmdsZVJhbmdlRFRCYXNpY09wcyA9IFtcIkVRXCIsIFwiQlRcIl07XG5cdFx0Y29uc3QgYU11bHRpUmFuZ2VPcHMgPSBbXCJFUVwiLCBcIkdFXCIsIFwiTEVcIiwgXCJMVFwiLCBcIkdUXCIsIFwiQlRcIiwgXCJORVwiLCBcIk5PVEJUXCIsIFwiTk9UTEVcIiwgXCJOT1RMVFwiLCBcIk5PVEdFXCIsIFwiTk9UR1RcIl07XG5cdFx0Y29uc3QgYVNlYXJjaEV4cHJlc3Npb25PcHMgPSBbXCJDb250YWluc1wiLCBcIk5vdENvbnRhaW5zXCIsIFwiU3RhcnRzV2l0aFwiLCBcIk5vdFN0YXJ0c1dpdGhcIiwgXCJFbmRzV2l0aFwiLCBcIk5vdEVuZHNXaXRoXCJdO1xuXHRcdGNvbnN0IGFCYXNpY1NlbWFudGljRGF0ZU9wcyA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRCYXNpY1NlbWFudGljRGF0ZU9wZXJhdGlvbnMoKTtcblx0XHRjb25zdCBiU2VtYW50aWNEYXRlUmFuZ2UgPSBiVXNlU2VtYW50aWNEYXRlUmFuZ2UgPT09IFwidHJ1ZVwiIHx8IGJVc2VTZW1hbnRpY0RhdGVSYW5nZSA9PT0gdHJ1ZTtcblx0XHRsZXQgYVNlbWFudGljRGF0ZU9wczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBvU2V0dGluZ3MgPSBzZXR0aW5ncyAmJiB0eXBlb2Ygc2V0dGluZ3MgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHNldHRpbmdzKS5jdXN0b21EYXRhIDogc2V0dGluZ3M7XG5cblx0XHRpZiAoKG9Db250ZXh0LmdldE9iamVjdChgJHtzRW50aXR5U2V0UGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCkgYXMgdW5rbm93bikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiBhRXF1YWxzT3BzO1xuXHRcdH1cblxuXHRcdGlmIChvU2V0dGluZ3MgJiYgb1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbiAmJiBvU2V0dGluZ3Mub3BlcmF0b3JDb25maWd1cmF0aW9uLmxlbmd0aCA+IDApIHtcblx0XHRcdGFTZW1hbnRpY0RhdGVPcHMgPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0RmlsdGVyT3BlcmF0aW9ucyhvU2V0dGluZ3Mub3BlcmF0b3JDb25maWd1cmF0aW9uLCBzVHlwZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFTZW1hbnRpY0RhdGVPcHMgPSBEZWZhdWx0U2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldFNlbWFudGljRGF0ZU9wZXJhdGlvbnMoc1R5cGUpO1xuXHRcdH1cblx0XHQvLyBHZXQgdGhlIGRlZmF1bHQgT3BlcmF0b3JzIGZvciB0aGlzIFByb3BlcnR5IFR5cGVcblx0XHRjb25zdCBhRGVmYXVsdE9wZXJhdG9ycyA9IF9nZXREZWZhdWx0T3BlcmF0b3JzKHNUeXBlKTtcblx0XHRsZXQgc3VwcG9ydGVkT3BlcmF0b3JzID0gYURlZmF1bHRPcGVyYXRvcnM7XG5cdFx0aWYgKGJTZW1hbnRpY0RhdGVSYW5nZSkge1xuXHRcdFx0Y29uc3QgZXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnMgPSBFeHRlbmRlZFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zKCk7XG5cdFx0XHRzdXBwb3J0ZWRPcGVyYXRvcnMgPSBbLi4uYUJhc2ljU2VtYW50aWNEYXRlT3BzLCAuLi5hRGVmYXVsdE9wZXJhdG9ycywgLi4uZXh0ZW5kZWRTZW1hbnRpY0RhdGVPcGVyYXRvcnNdO1xuXHRcdH1cblxuXHRcdGxldCByZXN0cmljdGlvbnM6IHN0cmluZ1tdID0gW107XG5cblx0XHQvLyBJcyB0aGVyZSBhIEZpbHRlciBSZXN0cmljdGlvbiBkZWZpbmVkIGZvciB0aGlzIHByb3BlcnR5P1xuXHRcdGlmIChcblx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMgJiZcblx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zICYmXG5cdFx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1tzUHJvcGVydHldXG5cdFx0KSB7XG5cdFx0XHQvLyBFeHRlbmRpbmcgdGhlIGRlZmF1bHQgb3BlcmF0b3JzIGxpc3Qgd2l0aCBTZW1hbnRpYyBEYXRlIG9wdGlvbnMgREFURVJBTkdFLCBEQVRFLCBGUk9NIGFuZCBUT1xuXHRcdFx0Y29uc3Qgc0FsbG93ZWRFeHByZXNzaW9uID0gQ29tbW9uVXRpbHMuZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbihvRmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1tzUHJvcGVydHldKTtcblx0XHRcdC8vIEluIGNhc2UgbW9yZSB0aGFuIG9uZSBBbGxvd2VkIEV4cHJlc3Npb25zIGhhcyBiZWVuIGRlZmluZWQgZm9yIGEgcHJvcGVydHlcblx0XHRcdC8vIGNob29zZSB0aGUgbW9zdCByZXN0cmljdGl2ZSBBbGxvd2VkIEV4cHJlc3Npb25cblxuXHRcdFx0Ly8gTXVsdGlWYWx1ZSBoYXMgc2FtZSBPcGVyYXRvciBhcyBTaW5nbGVWYWx1ZSwgYnV0IHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIChtYXhDb25kaXRpb25zKVxuXHRcdFx0c3dpdGNoIChzQWxsb3dlZEV4cHJlc3Npb24pIHtcblx0XHRcdFx0Y2FzZSBcIlNpbmdsZVZhbHVlXCI6XG5cdFx0XHRcdFx0Y29uc3Qgc2luZ2xlVmFsdWVEYXRlT3BzID0gRGVmYXVsdFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTaW5nbGVWYWx1ZURhdGVPcGVyYXRpb25zKCk7XG5cdFx0XHRcdFx0Y29uc3QgYVNpbmdsZVZhbHVlT3BzID0gc1R5cGUgPT09IFwiRWRtLkRhdGVcIiAmJiBiU2VtYW50aWNEYXRlUmFuZ2UgPyBzaW5nbGVWYWx1ZURhdGVPcHMgOiBhRXF1YWxzT3BzO1xuXHRcdFx0XHRcdHJlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoc3VwcG9ydGVkT3BlcmF0b3JzLCBhU2luZ2xlVmFsdWVPcHMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiTXVsdGlWYWx1ZVwiOlxuXHRcdFx0XHRcdGNvbnN0IG11bHRpVmFsdWVPcGVyYXRvcnMgPSBbLi4uYUVxdWFsc09wcywgXCJFbXB0eVwiLCBcIk5vdEVtcHR5XCJdO1xuXHRcdFx0XHRcdHJlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoc3VwcG9ydGVkT3BlcmF0b3JzLCBtdWx0aVZhbHVlT3BlcmF0b3JzKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIlNpbmdsZVJhbmdlXCI6XG5cdFx0XHRcdFx0bGV0IGFFeHByZXNzaW9uT3BzOiBzdHJpbmdbXTtcblx0XHRcdFx0XHRpZiAoYlNlbWFudGljRGF0ZVJhbmdlKSB7XG5cdFx0XHRcdFx0XHRpZiAoc1R5cGUgPT09IFwiRWRtLkRhdGVcIikge1xuXHRcdFx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IGFTZW1hbnRpY0RhdGVPcHM7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHNUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0XHRcdFx0XHRcdGFFeHByZXNzaW9uT3BzID0gYVNlbWFudGljRGF0ZU9wcztcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFFeHByZXNzaW9uT3BzID0gYVNpbmdsZVJhbmdlT3BzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc1R5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRcdFx0XHRcdGFFeHByZXNzaW9uT3BzID0gYVNpbmdsZVJhbmdlRFRCYXNpY09wcztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YUV4cHJlc3Npb25PcHMgPSBhU2luZ2xlUmFuZ2VPcHM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IHNPcGVyYXRvcnMgPSBfZ2V0UmVzdHJpY3Rpb25zKHN1cHBvcnRlZE9wZXJhdG9ycywgYUV4cHJlc3Npb25PcHMpO1xuXHRcdFx0XHRcdHJlc3RyaWN0aW9ucyA9IHNPcGVyYXRvcnM7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJNdWx0aVJhbmdlXCI6XG5cdFx0XHRcdFx0cmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhzdXBwb3J0ZWRPcGVyYXRvcnMsIGFNdWx0aVJhbmdlT3BzKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIlNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRcdFx0XHRyZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKHN1cHBvcnRlZE9wZXJhdG9ycywgYVNlYXJjaEV4cHJlc3Npb25PcHMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblwiOlxuXHRcdFx0XHRcdHJlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoc3VwcG9ydGVkT3BlcmF0b3JzLCBhU2VhcmNoRXhwcmVzc2lvbk9wcy5jb25jYXQoYU11bHRpUmFuZ2VPcHMpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdC8vIEluIGNhc2UgQWxsb3dlZEV4cHJlc3Npb25zIGlzIG5vdCByZWNvZ25pc2VkLCB1bmRlZmluZWQgaW4gcmV0dXJuIHJlc3VsdHMgaW4gdGhlIGRlZmF1bHQgc2V0IG9mXG5cdFx0XHQvLyBvcGVyYXRvcnMgZm9yIHRoZSB0eXBlLlxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdHJpY3Rpb25zO1xuXHR9LFxuXHRnZXRPcGVyYXRvcnNGb3JEYXRlUHJvcGVydHk6IGZ1bmN0aW9uIChwcm9wZXJ0eVR5cGU6IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0XHQvLyBJbiBjYXNlIEFsbG93ZWRFeHByZXNzaW9ucyBpcyBub3QgcHJvdmlkZWQgZm9yIHR5cGUgRWRtLkRhdGUgdGhlbiBhbGwgdGhlIGRlZmF1bHRcblx0XHQvLyBvcGVyYXRvcnMgZm9yIHRoZSB0eXBlIHNob3VsZCBiZSByZXR1cm5lZCBleGNsdWRpbmcgc2VtYW50aWMgb3BlcmF0b3JzIGZyb20gdGhlIGxpc3QuXG5cdFx0Y29uc3QgYURlZmF1bHRPcGVyYXRvcnMgPSBfZ2V0RGVmYXVsdE9wZXJhdG9ycyhwcm9wZXJ0eVR5cGUpO1xuXHRcdGNvbnN0IGFNdWx0aVJhbmdlT3BzID0gW1wiRVFcIiwgXCJHRVwiLCBcIkxFXCIsIFwiTFRcIiwgXCJHVFwiLCBcIkJUXCIsIFwiTkVcIiwgXCJOT1RCVFwiLCBcIk5PVExFXCIsIFwiTk9UTFRcIiwgXCJOT1RHRVwiLCBcIk5PVEdUXCJdO1xuXHRcdHJldHVybiBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BlcmF0b3JzLCBhTXVsdGlSYW5nZU9wcyk7XG5cdH0sXG5cdGdldEFJSWNvbjogZnVuY3Rpb24gKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGFpSWNvbjtcblx0fVxufTtcbihDb21tb25IZWxwZXIuZ2V0U29ydENvbmRpdGlvbnMgYXMgeyByZXF1aXJlc0lDb250ZXh0PzogYm9vbGVhbiB9KS5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tbW9uSGVs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OFMsZ0JBQWdCO2NBQ2xDLENBQUMsTUFBTTtnQkFDTjlTLGNBQWMsR0FBR3NTLGVBQWU7Y0FDakM7WUFDRCxDQUFDLE1BQU0sSUFBSXhKLEtBQUssS0FBSyxvQkFBb0IsRUFBRTtjQUMxQzlJLGNBQWMsR0FBR3VTLHNCQUFzQjtZQUN4QyxDQUFDLE1BQU07Y0FDTnZTLGNBQWMsR0FBR3NTLGVBQWU7WUFDakM7WUFDQSxNQUFNMkIsVUFBVSxHQUFHblUsZ0JBQWdCLENBQUN3VCxrQkFBa0IsRUFBRXRULGNBQWMsQ0FBQztZQUN2RXlULFlBQVksR0FBR1EsVUFBVTtZQUN6QjtVQUNELEtBQUssWUFBWTtZQUNoQlIsWUFBWSxHQUFHM1QsZ0JBQWdCLENBQUN3VCxrQkFBa0IsRUFBRWQsY0FBYyxDQUFDO1lBQ25FO1VBQ0QsS0FBSyxrQkFBa0I7WUFDdEJpQixZQUFZLEdBQUczVCxnQkFBZ0IsQ0FBQ3dULGtCQUFrQixFQUFFYixvQkFBb0IsQ0FBQztZQUN6RTtVQUNELEtBQUssOEJBQThCO1lBQ2xDZ0IsWUFBWSxHQUFHM1QsZ0JBQWdCLENBQUN3VCxrQkFBa0IsRUFBRWIsb0JBQW9CLENBQUN5QixNQUFNLENBQUMxQixjQUFjLENBQUMsQ0FBQztZQUNoRztVQUNEO1lBQ0M7UUFDRjtRQUNBO1FBQ0E7TUFDRDtNQUNBLE9BQU9pQixZQUFZO0lBQ3BCLENBQUM7SUFDRFUsMkJBQTJCLEVBQUUsU0FBQUEsQ0FBVUMsWUFBb0IsRUFBWTtNQUN0RTtNQUNBO01BQ0EsTUFBTWYsaUJBQWlCLEdBQUdqVCxvQkFBb0IsQ0FBQ2dVLFlBQVksQ0FBQztNQUM1RCxNQUFNNUIsY0FBYyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7TUFDOUcsT0FBTzFTLGdCQUFnQixDQUFDdVQsaUJBQWlCLEVBQUViLGNBQWMsQ0FBQztJQUMzRCxDQUFDO0lBQ0Q2QixTQUFTLEVBQUUsU0FBQUEsQ0FBQSxFQUFvQjtNQUM5QixPQUFPQyxNQUFNO0lBQ2Q7RUFDRCxDQUFDO0VBQ0F2VCxZQUFZLENBQUMwSSxpQkFBaUIsQ0FBb0M4SyxnQkFBZ0IsR0FBRyxJQUFJO0VBQUMsT0FFNUV4VCxZQUFZO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -1020,7 +1020,7 @@ const CommonHelper = {
|
|
|
1020
1020
|
): string[] {
|
|
1021
1021
|
const oFilterRestrictions = CommonUtils.getFilterRestrictionsByPath(sEntitySetPath, oContext);
|
|
1022
1022
|
const aEqualsOps = ["EQ"];
|
|
1023
|
-
const aSingleRangeOps = ["EQ", "GE", "LE", "LT", "GT", "BT", "NOTLE", "NOTLT", "NOTGE", "NOTGT"];
|
|
1023
|
+
const aSingleRangeOps = ["EQ", "GE", "LE", "LT", "GT", "BT", "NE", "NOTBT", "NOTLE", "NOTLT", "NOTGE", "NOTGT"];
|
|
1024
1024
|
const aSingleRangeDTBasicOps = ["EQ", "BT"];
|
|
1025
1025
|
const aMultiRangeOps = ["EQ", "GE", "LE", "LT", "GT", "BT", "NE", "NOTBT", "NOTLE", "NOTLT", "NOTGE", "NOTGT"];
|
|
1026
1026
|
const aSearchExpressionOps = ["Contains", "NotContains", "StartsWith", "NotStartsWith", "EndsWith", "NotEndsWith"];
|