@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
|
@@ -61,7 +61,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
61
61
|
oDataFieldWidth = TableSizeHelper.getWidthForDataFieldForAnnotation(oData, false, propertyInfos, convertedMetaData, showDataFieldsLabel);
|
|
62
62
|
break;
|
|
63
63
|
case "com.sap.vocabularies.UI.v1.DataField":
|
|
64
|
-
oDataFieldWidth = TableSizeHelper.getWidthForDataField(oData, showDataFieldsLabel, propertyInfos, convertedMetaData, false);
|
|
64
|
+
oDataFieldWidth = TableSizeHelper.getWidthForDataField(oData, showDataFieldsLabel, propertyInfos, convertedMetaData, false, involvedDataModelObjects);
|
|
65
65
|
break;
|
|
66
66
|
case "com.sap.vocabularies.UI.v1.DataFieldForAction":
|
|
67
67
|
oDataFieldWidth = {
|
|
@@ -156,6 +156,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
156
156
|
// Add the $editState property
|
|
157
157
|
properties.push({
|
|
158
158
|
key: "$editState",
|
|
159
|
+
name: "$editState",
|
|
159
160
|
path: "$editState",
|
|
160
161
|
groupLabel: "",
|
|
161
162
|
group: "",
|
|
@@ -839,6 +840,19 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
839
840
|
const tableAPI = table.getParent();
|
|
840
841
|
const bIsSuspended = tableAPI?.getProperty("bindingSuspended");
|
|
841
842
|
if (!bIsSuspended) {
|
|
843
|
+
// if the rowBindingInfo has a $$getKeepAliveContext parameter we need to check it is the only Table with such a
|
|
844
|
+
// parameter for the collectionMetaPath
|
|
845
|
+
if (bindingInfo.parameters?.$$getKeepAliveContext === true) {
|
|
846
|
+
const collectionPath = DelegateUtil.getCustomData(table, "targetCollectionPath") ?? "";
|
|
847
|
+
const internalModel = table.getModel("internal");
|
|
848
|
+
const keptAliveLists = internalModel?.getObject("/keptAliveLists") ?? {};
|
|
849
|
+
if (!keptAliveLists[collectionPath]) {
|
|
850
|
+
keptAliveLists[collectionPath] = table.getId();
|
|
851
|
+
internalModel?.setProperty("/keptAliveLists", keptAliveLists);
|
|
852
|
+
} else if (keptAliveLists[collectionPath] !== table.getId()) {
|
|
853
|
+
delete bindingInfo.parameters.$$getKeepAliveContext;
|
|
854
|
+
}
|
|
855
|
+
}
|
|
842
856
|
let needManualRefresh = false;
|
|
843
857
|
const view = CommonUtils.getTargetView(table);
|
|
844
858
|
const internalBindingContext = table.getBindingContext("internal");
|
|
@@ -929,20 +943,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
929
943
|
rowBindingInfo.parameters ??= {};
|
|
930
944
|
rowBindingInfo.parameters.$$updateGroupId = CommonUtils.INLINEEDIT_UPDATEGROUPID;
|
|
931
945
|
}
|
|
932
|
-
|
|
933
|
-
// if the rowBindingInfo has a $$getKeepAliveContext parameter we need to check it is the only Table with such a
|
|
934
|
-
// parameter for the collectionMetaPath
|
|
935
|
-
if (rowBindingInfo.parameters?.$$getKeepAliveContext === true) {
|
|
936
|
-
const collectionPath = DelegateUtil.getCustomData(oTable, "targetCollectionPath") ?? "";
|
|
937
|
-
const internalModel = oTable.getModel("internal");
|
|
938
|
-
const keptAliveLists = internalModel?.getObject("/keptAliveLists") ?? {};
|
|
939
|
-
if (!keptAliveLists[collectionPath]) {
|
|
940
|
-
keptAliveLists[collectionPath] = oTable.getId();
|
|
941
|
-
internalModel?.setProperty("/keptAliveLists", keptAliveLists);
|
|
942
|
-
} else if (keptAliveLists[collectionPath] !== oTable.getId()) {
|
|
943
|
-
delete rowBindingInfo.parameters.$$getKeepAliveContext;
|
|
944
|
-
}
|
|
945
|
-
}
|
|
946
946
|
return rowBindingInfo;
|
|
947
947
|
},
|
|
948
948
|
_internalUpdateBindingInfo: function (oTable, oBindingInfo) {
|
|
@@ -978,9 +978,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
978
978
|
if (oDataStateIndicator && oDataStateIndicator.isFiltering()) {
|
|
979
979
|
// Include filters on messageStrip
|
|
980
980
|
if (oBindingInfo.filters.length > 0) {
|
|
981
|
-
const bindingInfoFilters = oBindingInfo.filters.filter(filter => filter !== Filter.NONE);
|
|
982
981
|
oFilter = new Filter({
|
|
983
|
-
filters:
|
|
982
|
+
filters: oBindingInfo.filters.concat(oFilterInfo.filters),
|
|
984
983
|
and: true
|
|
985
984
|
});
|
|
986
985
|
this.updateBindingInfoWithSearchQuery(oBindingInfo, oFilterInfo, oFilter);
|
|
@@ -1193,7 +1192,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
1193
1192
|
const oMetaModel = this._getMetaModel(mPropertyBag),
|
|
1194
1193
|
oModifier = mPropertyBag.modifier,
|
|
1195
1194
|
sTableId = oModifier.getId(table),
|
|
1196
|
-
aColumns = table.isA ? this.getColumnsFor(table) : null
|
|
1195
|
+
aColumns = table.isA ? this.getColumnsFor(table) : null,
|
|
1196
|
+
tableAPI = table.getParent();
|
|
1197
1197
|
if (!aColumns) {
|
|
1198
1198
|
// We return null here because everything should apply at runtime
|
|
1199
1199
|
return Promise.resolve(null);
|
|
@@ -1233,7 +1233,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
1233
1233
|
if (!oMetaModel) {
|
|
1234
1234
|
return Promise.resolve(null);
|
|
1235
1235
|
}
|
|
1236
|
-
|
|
1236
|
+
let propertyInfos = tableAPI.getEnhancedFetchedPropertyInfos();
|
|
1237
|
+
if (!propertyInfos.length) {
|
|
1238
|
+
// If the propertyInfos are not fetched yet, we need to fetch them
|
|
1239
|
+
// This is the case when the table is not created yet
|
|
1240
|
+
await this.fetchProperties(table);
|
|
1241
|
+
propertyInfos = tableAPI.getEnhancedFetchedPropertyInfos();
|
|
1242
|
+
}
|
|
1243
|
+
const propertyInfo = propertyInfos.find(function (propInfo) {
|
|
1237
1244
|
return propInfo.name === propertyInfoName;
|
|
1238
1245
|
});
|
|
1239
1246
|
const oPropertyContext = oMetaModel.createBindingContext(propertyInfo.annotationPath);
|
|
@@ -1371,4 +1378,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
|
|
|
1371
1378
|
}
|
|
1372
1379
|
});
|
|
1373
1380
|
}, false);
|
|
1374
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IiLCJTRUFSQ0hfSEFTX0JFRU5fRklSRUQiLCJDT0xVTU5fSEFTX0JFRU5fQURERUQiLCJQUkVWSU9VU19TT1JURVJTIiwiT2JqZWN0IiwiYXNzaWduIiwiVGFibGVEZWxlZ2F0ZUJhc2UiLCJhcGlWZXJzaW9uIiwiX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckZpZWxkR3JvdXAiLCJ0YWJsZSIsInByb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mb3MiLCJrZXkiLCJpbmRleE9mIiwiY29sdW1uIiwiZ2V0Q29sdW1ucyIsImZpbmQiLCJjb2wiLCJnZXRQcm9wZXJ0eUtleSIsInNob3dEYXRhRmllbGRzTGFiZWwiLCJkYXRhIiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0Q29udGV4dCIsImFubm90YXRpb25QYXRoIiwiY29udmVydGVkTWV0YURhdGEiLCJjb252ZXJ0ZWRUeXBlcyIsIm9EYXRhRmllbGQiLCJ0YXJnZXRPYmplY3QiLCJvRmllbGRHcm91cCIsIlRhcmdldCIsIiR0YXJnZXQiLCJhRmllbGRXaWR0aCIsIkRhdGEiLCJmb3JFYWNoIiwib0RhdGEiLCJvRGF0YUZpZWxkV2lkdGgiLCIkVHlwZSIsIlRhYmxlU2l6ZUhlbHBlciIsImdldFdpZHRoRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImdldFdpZHRoRm9yRGF0YUZpZWxkIiwibGFiZWxXaWR0aCIsInByb3BlcnR5V2lkdGgiLCJTaXplSGVscGVyIiwiZ2V0QnV0dG9uV2lkdGgiLCJMYWJlbCIsInRvU3RyaW5nIiwicHVzaCIsIm5XaWRlc3QiLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsIk1hdGgiLCJtYXgiLCJ2aXN1YWxTZXR0aW5ncyIsImRlZXBFeHRlbmQiLCJ3aWR0aENhbGN1bGF0aW9uIiwidmVydGljYWxBcnJhbmdlbWVudCIsIm1pbldpZHRoIiwiY2VpbCIsIl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAiLCJwcm9wZXJ0eSIsInRhYmxlQVBJIiwiZ2V0UGFyZW50IiwibWV0YU1vZGVsIiwiZGF0YUZpZWxkIiwiZ2V0T2JqZWN0IiwiZ2FwIiwiZ2V0UHJvcGVydHkiLCJfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCIsInVuaXQiLCJ1bml0VGV4dCIsInRpbWV6b25lVGV4dCIsIm9UYWJsZUFQSSIsInRleHQiLCJnZXRSZWFkT25seSIsIl9jb21wdXRlTGFiZWwiLCJsYWJlbE1hcCIsImxhYmVsIiwicHJvcGVydGllc1dpdGhTYW1lTGFiZWwiLCJpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSIsInNvbWUiLCJwcm9wIiwicGF0aCIsIm1vZGUiLCJsZW5ndGgiLCJpbmNsdWRlcyIsImFkZGl0aW9uYWxMYWJlbHMiLCJmaWx0ZXJhYmxlIiwiam9pbiIsIl91cGRhdGVQcm9wZXJ0eUluZm8iLCJwcm9wZXJ0aWVzIiwicDEzbk1vZGUiLCJnZXRQMTNuTW9kZSIsInNvcnRhYmxlIiwiZ3JvdXBhYmxlIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiZ3JvdXBMYWJlbCIsImdyb3VwIiwiZGF0YVR5cGUiLCJ2aXNpYmxlIiwiZ2V0Q29sdW1uc0ZvciIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbHVtbnMiLCJmZXRjaEV4cG9ydENhcGFiaWxpdGllcyIsIm9UYWJsZSIsIm9DYXBhYmlsaXRpZXMiLCJYTFNYIiwib01vZGVsIiwiRGVsZWdhdGVVdGlsIiwiZmV0Y2hNb2RlbCIsInRoZW4iLCJtb2RlbCIsImFTdXBwb3J0ZWRGb3JtYXRzIiwiYUxvd2VyRm9ybWF0cyIsIm1hcCIsImVsZW1lbnQiLCJ0b0xvd2VyQ2FzZSIsIm9Bbm5vdGF0aW9uIiwiY2F0Y2giLCJlcnIiLCJMb2ciLCJlcnJvciIsIl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJjb2x1bW5JbmZvIiwiY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzRmlsdGVyYWJsZSIsImlzUGF0aEZpbHRlcmFibGUiLCJyZWxhdGl2ZVBhdGgiLCJpc1BhcnRPZkxpbmVJdGVtIiwiaXNQYXJ0T2ZDdXN0b21Db2x1bW4iLCJpc0NvbnN0YW50IiwiX2ZldGNoUHJvcGVydHlJbmZvIiwiYXBwQ29tcG9uZW50Iiwic0Fic29sdXRlTmF2aWdhdGlvblBhdGgiLCJvTmF2aWdhdGlvbkNvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImlzQ29tcGxleFR5cGUiLCJ0eXBlQ29uZmlnIiwiY2xhc3NOYW1lIiwiYkZpbHRlcmFibGUiLCJDb21tb25IZWxwZXIiLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsImJJc0FuYWx5dGljYWxUYWJsZSIsImdldEN1c3RvbURhdGEiLCJnZXRMb2NhbGl6ZWRUZXh0IiwidG9vbHRpcCIsIl9nZXRUeXBlQ29uZmlnIiwibmFtZSIsImZvcm1hdE9wdGlvbnMiLCJiYXNlVHlwZSIsInN0eWxlIiwiY29uc3RyYWludHMiLCJhdmFpbGFiaWxpdHkiLCJleHBvcnRTZXR0aW5ncyIsIl9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5ncyIsInR5cGUiLCJDb2x1bW5UeXBlIiwiQW5ub3RhdGlvbiIsInRlbXBsYXRlIiwiY2xpcGJvYXJkU2V0dGluZ3MiLCJrZXlzIiwiZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJfdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMiLCJpc0tleSIsImlzR3JvdXBhYmxlIiwidGV4dEFycmFuZ2VtZW50IiwiX3NldFRleHRBcnJhbmdlbWVudEluZm8iLCJleHRlbnNpb24iLCJ0ZWNobmljYWxseUdyb3VwYWJsZSIsImNhc2VTZW5zaXRpdmUiLCJhZGRpdGlvbmFsTGFiZWwiLCJleHBvcnRGb3JtYXQiLCJfZ2V0RXhwb3J0Rm9ybWF0IiwiZm9ybWF0IiwiVHlwZU1hcCIsImdldFR5cGVDb25maWciLCJpc1R5cGVGaWx0ZXJhYmxlIiwiZGVzY3JpcHRpb25Db2x1bW4iLCJvQ29sIiwidGV4dFByb3BlcnR5IiwidmFsdWVQcm9wZXJ0eSIsImRlc2NyaXB0aW9uUHJvcGVydHkiLCJhZ2dyZWdhdGFibGUiLCJfZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbyIsIl9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbyIsImhlYWRlciIsInN0YXJ0c1dpdGgiLCJNb2RlbEhlbHBlciIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJfYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yIiwib0NvbHVtbkluZm8iLCJoYXNEcmFmdEluZGljYXRvciIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsIl91cGRhdGVEcmFmdEluZGljYXRvck1vZGVsIiwiX29UYWJsZSIsIl9vQ29sdW1uSW5mbyIsImFWaXNpYmxlQ29sdW1ucyIsIm9JbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzSW50ZXJuYWxQYXRoIiwiZ2V0UGF0aCIsImluZGV4Iiwic2V0UHJvcGVydHkiLCJfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5IiwiZW50aXR5VHlwZVBhdGgiLCJiaW5kaW5nUGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJmZXRjaGVkUHJvcGVydGllcyIsIm5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiQ29tbW9uVXRpbHMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsIlByb21pc2UiLCJyZXNvbHZlIiwibWF4Q29uZGl0aW9ucyIsImlzTXVsdGlWYWx1ZSIsIkVycm9yIiwic2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyIsImdldFByb3BlcnR5SW5mb3MiLCJfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJnZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwic3ViRmV0Y2hlZFByb3BlcnRpZXMiLCJzZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwic2V0Tm9EYXRhSW5mb3JtYXRpb24iLCJpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbiIsIm5vRGF0YUFnZ3JlZ2F0aW9uIiwiZ2V0Tm9EYXRhIiwiaXNBIiwiY3VycmVudElsbHVzdHJhdGVkTWVzc2FnZSIsInNldFRpdGxlIiwidGl0bGUiLCJzZXREZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwic2V0SWxsdXN0cmF0aW9uVHlwZSIsImlsbHVzdHJhdGlvblR5cGUiLCJzZXRJbGx1c3RyYXRpb25TaXplIiwiaWxsdXN0cmF0aW9uU2l6ZSIsImlsbHVzdHJhdGVkTWVzc2FnZSIsIklsbHVzdHJhdGVkTWVzc2FnZSIsInNldE5vRGF0YSIsInNldFRhYmxlTm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlIiwiYmluZGluZ0luZm8iLCJ0YWJsZUZpbHRlckluZm8iLCJUYWJsZVV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwic3VmZml4UmVzb3VyY2VLZXkiLCJzdWJzdHJpbmciLCJpbGx1c3RyYXRlZEluZm9ybWF0aW9uIiwiZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMiLCJnZXRRdWlja0ZpbHRlciIsImdldFRleHQiLCJJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIiwiTm9TZWFyY2hSZXN1bHRzIiwiZmlsdGVyQXNzb2NpYXRpb24iLCJnZXRGaWx0ZXIiLCJoYXNGaWx0ZXJPclNlYXJjaCIsInNlYXJjaCIsImZpbHRlcnMiLCJ0ZXN0IiwiTm9EYXRhIiwiZ2V0VGFyZ2V0VmlldyIsImdldFZpZXdEYXRhIiwibGl2ZU1vZGUiLCJnZXROb0RhdGFNZXNzYWdlTW9kZSIsImN1cnJlbnROb0RhdGEiLCJoYW5kbGVUYWJsZURhdGFSZWNlaXZlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9CaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsImJEYXRhUmVjZWl2ZWRBdHRhY2hlZCIsImF0dGFjaERhdGFSZWNlaXZlZCIsInNldFRpbWVvdXQiLCJhU2VsZWN0ZWRDb250ZXh0cyIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiSlNPTiIsInBhcnNlIiwidGFibGVEZWZpbml0aW9uIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJEZWxldGVIZWxwZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsInNldFVwRW1wdHlSb3dzIiwiX3VwZGF0ZUF2YWlsYWJsZUNhcmRzIiwic2V0T3B0aW1pc3RpY0JhdGNoUHJvbWlzZUZvck1vZGVsIiwiY29udHJvbGxlciIsImdldEFwcENvbXBvbmVudCIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlIiwiUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsIiwiZW5hYmxlT3B0aW1pc3RpY0JhdGNoTW9kZSIsImZpbHRlcnNQcm9wZXJ0aWVzQXNQb3RlbnRpYWxseVNlbnNpdGl2ZURhdGFPckRhdGVUeXBlIiwiaXNGaWx0ZXJFbGlnaWJsZUZvck9wdGltaXN0aWNCYXRjaCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UiLCJkYXRhTW9kZWwiLCJpc09wdGltaXN0aWNCYXRjaEhhc1RvQmVFbmFibGVkIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlciIsImlzT3B0aW1pc3RpY0JhdGNoRGlzYWJsZWQiLCJvcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIiLCJwcm9taXNlIiwicmViaW5kIiwib0JpbmRpbmdJbmZvIiwiYklzU3VzcGVuZGVkIiwiVGFibGVSdW50aW1lIiwiY2xlYXJTZWxlY3Rpb24iLCJhcHBseSIsIm9uVGFibGVCb3VuZCIsIndoZW5Cb3VuZCIsIm9FcnJvciIsImZldGNoUHJvcGVydGllcyIsInByZUluaXQiLCJmYXN0Q3JlYXRpb25Sb3ciLCJnZXRDcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwidXBkYXRlQmluZGluZ0luZm8iLCJpbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIiwiQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIiwiX2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTSIsIl9pbnRlcm5hbFVwZGF0ZUJpbmRpbmdJbmZvIiwiX2hhbmRsZVJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzIiwiX2hhbmRsZUZpbHRlcnNGb3JFeHRlcm5hbElEIiwiZmlyZUV2ZW50IiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvIiwiYXR0YWNoZWRFdmVudHMiLCJnZXRBdHRhY2hlZEV2ZW50cyIsImNvbnRleHQiLCJUYWJsZUhlbHBlciIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsInNldEF0dGFjaEV2ZW50cyIsImUiLCJzb3J0ZXJzIiwic29ydGVyIiwibmV3U29ydGVyc1RvQmVBcHBsaWVkIiwidGFibGVQcm9wZXJ0aWVzIiwidGFibGVQcm9wZXJ0eSIsInVuaXRQcm9wZXJ0eSIsInVuaXRTb3J0ZXJBdmFpbGFibGUiLCJzb3J0IiwiU29ydGVyIiwiZ2V0RmlsdGVycyIsInVwZGF0ZUZpbHRlcnNGb3JFeHRlcm5hbElEIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJyZWNvbW1lbmRhdGlvbnMiLCJpc1JlY29tbWVuZGF0aW9uRW5hYmxlZCIsInRhYmxlRGVmIiwicmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0UmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHMiLCJhbm5vdGF0aW9uIiwiZW50aXR5VHlwZU5hbWUiLCJwYXJhbWV0ZXJzIiwiJHNlbGVjdCIsImdldFZpZXciLCJjb252ZXJ0ZXJUeXBlIiwiY2FyZHMiLCJjb2xsZWN0QXZhaWxhYmxlQ2FyZHMiLCJjb2xsYWJvcmF0aW9uTWFuYWdlciIsIkNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiY2FyZE9iamVjdCIsInVwZGF0ZUNhcmRzIiwicGFyZW50QXBwSWQiLCJnZXRJZCIsImdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNoYXJlQXZhaWxhYmxlQ2FyZHMiLCJnZXRJblJlc3VsdFByb3BlcnR5S2V5cyIsImNvbnRyb2wiLCJhbmFseXRpY2FsQ29uZmlndXJhdGlvbiIsImFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwiLCJhbGxLa2V5c1JlcXVlc3RlZCIsImNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZCIsIm92ZXJyaWRlUm93UHJlc3MiLCJyZXF1ZXN0QXRMZWFzdCIsImZpbHRlciIsImZpZWxkTmFtZSIsIm9yaWdpbiIsImdldENvbnRlbnQiLCJhbGxDb2x1bW5zIiwia2V5UHJvcGVydHlOYW1lcyIsImMiLCJkaXNwbGF5ZWRDb2x1bW5zIiwicmVmZXJlbmNlZFByb3BlcnR5UGF0aHMiLCJTZXQiLCJwcm9jZXNzQ29sdW1uIiwiYWRkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJhZGRpdGlvbmFsQ29sdW1uTmFtZSIsImFkZGl0aW9uYWxDb2x1bW4iLCJyZWxhdGVkQ29sdW1uTmFtZSIsInJlbGF0ZWRDb2x1bW4iLCJldmVyeSIsInByb3BOYW1lIiwiaGFzIiwiZ2V0U2VhcmNoUXVlcnkiLCJiaW5kaW5nIiwiYWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGlvbiIsImdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzIiwiJHNlYXJjaCIsInVwZGF0ZUJpbmRpbmciLCJuZWVkTWFudWFsUmVmcmVzaCIsInZpZXciLCJtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSIsInBlbmRpbmdNYW51YWxVcGRhdGUiLCJuZXdTb3J0ZXJzIiwic3RyaW5naWZ5Iiwidmlld0RhdGEiLCJvbGRGaWx0ZXJzIiwicHJldmlvdXNTb3J0ZXJzIiwiZmlsdGVyTm90Q2hhbmdlZCIsImRlZXBFcXVhbCIsIkxSTXVsdGlWaWV3RW5hYmxlZCIsInZpZXdzIiwiZW5hYmxlQW5hbHl0aWNzIiwic2V0QWdncmVnYXRlQ29uZGl0aW9ucyIsInNldEdyb3VwQ29uZGl0aW9ucyIsInNldFRhYmxlQmluZGluZ0luZm8iLCJzZXREb3dubG9hZFVybCIsInJlcXVlc3RSZWZyZXNoIiwiZ2V0R3JvdXBJZCIsImZpbmFsbHkiLCJzdG9yZWRFdmVudHMiLCJfcmVmIiwiZXZlbnRJZCIsImNhbGxiYWNrIiwibGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsIl9jb21wdXRlUm93QmluZGluZ0luZm9Gcm9tVGVtcGxhdGUiLCJyb3dCaW5kaW5nSW5mbyIsImdldFRhYmxlVGVtcGxhdGVCaW5kaW5nSW5mbyIsImJpbmRpbmdDb250ZXh0IiwidGFibGVDYW5CZUluSW5saW5lRWRpdCIsImdldEJpbmRpbmciLCJnZXRVcGRhdGVHcm91cElkIiwiSU5MSU5FRURJVF9VUERBVEVHUk9VUElEIiwiJCR1cGRhdGVHcm91cElkIiwiJCRnZXRLZWVwQWxpdmVDb250ZXh0IiwiY29sbGVjdGlvblBhdGgiLCJpbnRlcm5hbE1vZGVsIiwia2VwdEFsaXZlTGlzdHMiLCJzdXNwZW5kZWQiLCJvRmlsdGVyIiwib0ZpbHRlckluZm8iLCJGaWx0ZXIiLCJhbmQiLCJvRGF0YVN0YXRlSW5kaWNhdG9yIiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaXNGaWx0ZXJpbmciLCJiaW5kaW5nSW5mb0ZpbHRlcnMiLCJOT05FIiwidXBkYXRlQmluZGluZ0luZm9XaXRoU2VhcmNoUXVlcnkiLCJhZGRGaWx0ZXJPbkFjdGl2ZUVudGl0aWVzIiwiZmlsdGVySW5mbyIsIm5vcm1hbGl6ZVNlYXJjaFRlcm0iLCJwYXlsb2FkIiwiZ2V0UGF5bG9hZCIsImZpbHRlck9uQWN0aXZlRW50aXRpZXMiLCJmaWx0ZXJPbkFjdGl2ZSIsIm9wZXJhdG9yIiwidmFsdWUxIiwiX3RlbXBsYXRlU2xvdENvbHVtbkZyYWdtZW50IiwibW9kaWZpZXIiLCJ0YWJsZUlkIiwic2xvdENvbHVtbnNYTUwiLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJqc3giLCJyZW5kZXJBc1hNTCIsImdldFNsb3RDb2x1bW4iLCJzbG90WE1MIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJvVGVtcGxhdGUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsIm5vZGVOYW1lIiwicmVwbGFjZVdpdGgiLCJyZW1vdmUiLCJyZXN1bHRYTUwiLCJYTUxQcmVwcm9jZXNzb3IiLCJwcm9jZXNzIiwibW9kZWxzIiwiZ2V0Q29udHJvbGxlciIsImdldE93bmVyQ29tcG9uZW50IiwiZ2V0UHJlcHJvY2Vzc29yQ29udGV4dCIsInRhcmdldHMiLCJGcmFnbWVudCIsImxvYWQiLCJkZWZpbml0aW9uIiwiRXhjZWxGb3JtYXQiLCJnZXRFeGNlbERhdGVmcm9tSlNEYXRlIiwiZ2V0RXhjZWxEYXRlVGltZWZyb21KU0RhdGVUaW1lIiwiZ2V0RXhjZWxUaW1lZnJvbUpTVGltZSIsIl9nZXRWSFJlbGV2YW50RmllbGRzIiwic01ldGFkYXRhUGF0aCIsInNCaW5kaW5nUGF0aCIsImFGaWVsZHMiLCJvRGF0YUZpZWxkRGF0YSIsIiRraW5kIiwib1ZhbHVlIiwiaUluZGV4IiwiZ2V0TmF2aWdhdGlvblBhdGgiLCJfc2V0RHJhZnRJbmRpY2F0b3JPblZpc2libGVDb2x1bW4iLCJhQ29sdW1ucyIsImFDb2x1bW5zV2l0aERyYWZ0SW5kaWNhdG9yIiwib0NvbHVtbiIsInNBZGRWaXNpYmxlQ29sdW1uTmFtZSIsInNWaXNpYmxlQ29sdW1uTmFtZSIsImJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQiLCJzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvciIsImkiLCJqIiwicmVtb3ZlSXRlbSIsIm9Qcm9wZXJ0eUluZm9OYW1lIiwibVByb3BlcnR5QmFnIiwiZG9SZW1vdmVJdGVtIiwib01vZGlmaWVyIiwic0RhdGFQcm9wZXJ0eSIsImluc2VydEFnZ3JlZ2F0aW9uIiwiX3NldERyYWZ0SW5kaWNhdG9yU3RhdHVzIiwiX2dldE1ldGFNb2RlbCIsIl9nZXRHcm91cElkIiwic1JldHJpZXZlZEdyb3VwSWQiLCJfaW5zZXJ0QWdncmVnYXRpb24iLCJvVmFsdWVIZWxwIiwiYWRkSXRlbSIsInByb3BlcnR5SW5mb05hbWUiLCJzVGFibGVJZCIsIndhcm5pbmciLCJzUGF0aCIsImdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXIiLCJvVGFibGVDb250ZXh0IiwiZ2V0Q3VycmVudFBhZ2VWaWV3IiwiZ2V0Q29tcHV0ZWRDb2x1bW4iLCJnZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zIiwicHJvcEluZm8iLCJvUHJvcGVydHlDb250ZXh0IiwiZm5UZW1wbGF0ZUZyYWdtZW50Iiwib0luUHJvcGVydHlJbmZvIiwib1ZpZXciLCJiRGlzcGxheU1vZGUiLCJzVGFibGVUeXBlQ3VzdG9tRGF0YSIsInNDcmVhdGlvbk1vZGVDdXN0b21EYXRhIiwiYWxsIiwiYUN1c3RvbURhdGEiLCJvVGhpcyIsIkpTT05Nb2RlbCIsImVuYWJsZUF1dG9Db2x1bW5XaWR0aCIsInJlYWRPbmx5IiwidGFibGVUeXBlIiwiaWQiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiY29sbGVjdGlvbiIsImNyZWF0aW9uTW9kZSIsIndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwiYmluZGluZ0NvbnRleHRzIiwiZW50aXR5U2V0IiwidGhpcyIsInRhYmxlQ29sbGVjdGlvbiIsImhhbmRsZXJQcm92aWRlciIsIlRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIiLCJjb2xsZWN0aW9uRW50aXR5IiwiY29tcHV0ZWRDb2x1bW5YTUwiLCJnZXRDb2x1bW5UZW1wbGF0ZSIsInRlbXBsYXRlQ29udHJvbEZyYWdtZW50IiwiZGVzdHJveSIsImdldEZpbHRlckRlbGVnYXRlIiwiRmlsdGVyQmFyRGVsZWdhdGUiLCJvUGFyZW50Q29udHJvbCIsInNQcm9wZXJ0eUluZm9OYW1lIiwicmVwbGFjZSIsImdldFR5cGVNYXAiLCJmb3JtYXRHcm91cEhlYWRlciIsIm9iaiIsImRhdGFCYXNlVHlwZSIsImV4dGVybmFsRm9ybWF0IiwiVmFsdWVGb3JtYXR0ZXIiLCJmb3JtYXRXaXRoQnJhY2tldHMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlRGVsZWdhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBEYXRhRmllbGRGb3JBbm5vdGF0aW9uLCBGaWVsZEdyb3VwVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCBkZWVwRXh0ZW5kIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFeHRlbmRcIjtcbmltcG9ydCB7IGlzQ29uc3RhbnQgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQganN4IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgQmFzZVRyZWVNb2RpZmllciB9IGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IFdyYXBwZWRDYXJkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUZhY3RvcnlcIjtcblxuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25NYW5hZ2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jYXJkcy9Db2xsYWJvcmF0aW9uTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdENvbHVtbkV4cG9ydFNldHRpbmdzLFxuXHRDb21wdXRlZFRhYmxlQ29sdW1uLFxuXHRDdXN0b21CYXNlZFRhYmxlQ29sdW1uLFxuXHRUYWJsZUNvbHVtblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUVsZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IFZhbHVlRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgRGVsZXRlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0RlbGV0ZUhlbHBlclwiO1xuaW1wb3J0IEV4Y2VsRm9ybWF0IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0V4Y2VsRm9ybWF0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFByb21pc2VLZWVwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUHJvbWlzZUtlZXBlclwiO1xuaW1wb3J0IHsgZ2V0TG9jYWxpemVkVGV4dCwgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBTaXplSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NpemVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGlzUGF0aEZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc1R5cGVGaWx0ZXJhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvRURNXCI7XG5pbXBvcnQgdHlwZSB7IENvbGxlY3Rpb25CaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbGxlY3Rpb25CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IENvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db2xsZWN0aW9uQmluZGluZ0luZm9cIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IEZpbHRlckJhckRlbGVnYXRlIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJCYXJEZWxlZ2F0ZVwiO1xuaW1wb3J0IHsgZ2V0Q29sdW1uVGVtcGxhdGUsIGdldENvbXB1dGVkQ29sdW1uLCBnZXRTbG90Q29sdW1uIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvTWRjVGFibGVUZW1wbGF0ZVwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZWRGRVByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVIZWxwZXJcIjtcbmltcG9ydCBUYWJsZVJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVSdW50aW1lXCI7XG5pbXBvcnQgVGFibGVTaXplSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlU2l6ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbEJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0Q29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0xpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIH0gZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIHsgSnNDb250cm9sVHJlZU1vZGlmaWVyIH0gZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgTURDVGFibGUsIE1EQ1RhYmxlUHJvcGVydHlJbmZvIGFzIFByb3BlcnR5SW5mbywgZGVmYXVsdCBhcyBUYWJsZSwgVmlzdWFsU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgVHlwZUNvbmZpZyBmcm9tIFwic2FwL3VpL21kYy9UeXBlQ29uZmlnXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCBUYWJsZURlbGVnYXRlQmFzZSBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UYWJsZURlbGVnYXRlXCI7XG5pbXBvcnQgVHlwZU1hcCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UeXBlTWFwXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCwgZGVmYXVsdCBhcyB2NENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIgZnJvbSBcIi4uL1RhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcIjtcblxuY29uc3QgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SID0gXCIvc2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclwiO1xuY29uc3QgU0VBUkNIX0hBU19CRUVOX0ZJUkVEID0gXCJzZWFyY2hGaXJlZFwiO1xuY29uc3QgQ09MVU1OX0hBU19CRUVOX0FEREVEID0gXCJjb2x1bW5BZGRlZFwiO1xuY29uc3QgUFJFVklPVVNfU09SVEVSUyA9IFwicHJldmlvdXNTb3J0ZXJzXCI7XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIGZvciBzYXAudWkubWRjLlRhYmxlLlxuICogPGgzPjxiPk5vdGU6PC9iPjwvaDM+XG4gKiBUaGUgY2xhc3MgaXMgZXhwZXJpbWVudGFsIGFuZCB0aGUgQVBJIGFuZCB0aGUgYmVoYXZpb3IgYXJlIG5vdCBmaW5hbGl6ZWQuIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIGZvciBwcm9kdWN0aXZlIHVzYWdlLlxuICogQGF1dGhvciBTQVAgU0VcbiAqIEBwcml2YXRlXG4gKiBAZXhwZXJpbWVudGFsXG4gKiBAc2luY2UgMS42OS4wXG4gKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZURlbGVnYXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IE9iamVjdC5hc3NpZ24oe30sIFRhYmxlRGVsZWdhdGVCYXNlLCB7XG5cdGFwaVZlcnNpb246IDIsXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHdpZHRoIG9mIGEgRmllbGRHcm91cCBjb2x1bW4uXG5cdCAqIFRoZSB3aWR0aCBvZiB0aGUgRmllbGRHcm91cCBpcyB0aGUgd2lkdGggb2YgdGhlIHdpZGVzdCBwcm9wZXJ0eSBjb250YWluZWQgaW4gdGhlIEZpZWxkR3JvdXAgKGluY2x1ZGluZyB0aGUgbGFiZWwgaWYgc2hvd0RhdGFGaWVsZHNMYWJlbCBpcyB0cnVlKVxuXHQgKiBUaGUgcmVzdWx0IG9mIHRoaXMgY2FsY3VsYXRpb24gaXMgc3RvcmVkIGluIHRoZSB2aXN1YWxTZXR0aW5ncy53aWR0aENhbGN1bGF0aW9uLm1pbldpZHRoIHByb3BlcnR5LCB3aGljaCBpcyB1c2VkIGJ5IHRoZSBNREN0YWJsZS5cblx0ICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIHRoZSBNREN0YWJsZVxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvIEN1cnJlbnQgcHJvcGVydHlJbmZvXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm9zIEFycmF5IG9mIHByb3BlcnRpZXNcblx0ICogQHByaXZhdGVcblx0ICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuVGFibGVEZWxlZ2F0ZVxuXHQgKi9cblx0X2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckZpZWxkR3JvdXA6IGZ1bmN0aW9uIChcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0cHJvcGVydHlJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvLFxuXHRcdHByb3BlcnR5SW5mb3M6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXVxuXHQpIHtcblx0XHRpZiAocHJvcGVydHlJbmZvLmtleS5pbmRleE9mKFwiRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjo6RmllbGRHcm91cDo6XCIpID09PSAwKSB7XG5cdFx0XHRjb25zdCBjb2x1bW4gPSB0YWJsZS5nZXRDb2x1bW5zKCkuZmluZCgoY29sKSA9PiB7XG5cdFx0XHRcdHJldHVybiBjb2wuZ2V0UHJvcGVydHlLZXkoKSA9PT0gcHJvcGVydHlJbmZvLmtleTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3Qgc2hvd0RhdGFGaWVsZHNMYWJlbCA9IGNvbHVtbiA/IGNvbHVtbi5kYXRhKFwic2hvd0RhdGFGaWVsZHNMYWJlbFwiKSA9PT0gXCJ0cnVlXCIgOiBmYWxzZTtcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvTWV0YU1vZGVsLmdldENvbnRleHQocHJvcGVydHlJbmZvLmFubm90YXRpb25QYXRoKSk7XG5cdFx0XHRjb25zdCBjb252ZXJ0ZWRNZXRhRGF0YSA9IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cy5jb252ZXJ0ZWRUeXBlcztcblx0XHRcdGNvbnN0IG9EYXRhRmllbGQgPSBpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZEZvckFubm90YXRpb247XG5cdFx0XHRjb25zdCBvRmllbGRHcm91cCA9IG9EYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQgYXMgRmllbGRHcm91cFR5cGU7XG5cdFx0XHRjb25zdCBhRmllbGRXaWR0aDogbnVtYmVyW10gPSBbXTtcblx0XHRcdG9GaWVsZEdyb3VwLkRhdGEuZm9yRWFjaChmdW5jdGlvbiAob0RhdGE6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpIHtcblx0XHRcdFx0bGV0IG9EYXRhRmllbGRXaWR0aDogeyBsYWJlbFdpZHRoOiBudW1iZXI7IHByb3BlcnR5V2lkdGg6IG51bWJlciB9O1xuXHRcdFx0XHRzd2l0Y2ggKG9EYXRhLiRUeXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IFRhYmxlU2l6ZUhlbHBlci5nZXRXaWR0aEZvckRhdGFGaWVsZEZvckFubm90YXRpb24oXG5cdFx0XHRcdFx0XHRcdG9EYXRhLFxuXHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvcyxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVkTWV0YURhdGEsXG5cdFx0XHRcdFx0XHRcdHNob3dEYXRhRmllbGRzTGFiZWxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCI6XG5cdFx0XHRcdFx0XHRvRGF0YUZpZWxkV2lkdGggPSBUYWJsZVNpemVIZWxwZXIuZ2V0V2lkdGhGb3JEYXRhRmllbGQoXG5cdFx0XHRcdFx0XHRcdG9EYXRhLFxuXHRcdFx0XHRcdFx0XHRzaG93RGF0YUZpZWxkc0xhYmVsLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm9zLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWRNZXRhRGF0YSxcblx0XHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRcdFx0XHRvRGF0YUZpZWxkV2lkdGggPSB7XG5cdFx0XHRcdFx0XHRcdGxhYmVsV2lkdGg6IDAsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5V2lkdGg6IFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgob0RhdGEuTGFiZWw/LnRvU3RyaW5nKCkpXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0RhdGFGaWVsZFdpZHRoISkge1xuXHRcdFx0XHRcdGFGaWVsZFdpZHRoLnB1c2gob0RhdGFGaWVsZFdpZHRoLmxhYmVsV2lkdGggKyBvRGF0YUZpZWxkV2lkdGgucHJvcGVydHlXaWR0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgbldpZGVzdCA9IGFGaWVsZFdpZHRoLnJlZHVjZShmdW5jdGlvbiAoYWNjOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcblx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KGFjYywgdmFsdWUpO1xuXHRcdFx0fSwgMCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBvYmplY3QsIHtcblx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdHZlcnRpY2FsQXJyYW5nZW1lbnQ6IHRydWUsXG5cdFx0XHRcdFx0bWluV2lkdGg6IE1hdGguY2VpbChuV2lkZXN0KVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0X2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFZhbHVlSGVscDogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgcHJvcGVydHk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICghcHJvcGVydHkucHJvcGVydHlJbmZvcykge1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRpZiAocHJvcGVydHkuYW5ub3RhdGlvblBhdGggJiYgbWV0YU1vZGVsKSB7XG5cdFx0XHRcdGNvbnN0IGRhdGFGaWVsZCA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7cHJvcGVydHkuYW5ub3RhdGlvblBhdGh9QGApO1xuXHRcdFx0XHRpZiAoZGF0YUZpZWxkICYmIGRhdGFGaWVsZFtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0XCJdKSB7XG5cdFx0XHRcdFx0cHJvcGVydHkudmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5LnZpc3VhbFNldHRpbmdzIHx8IHt9LCB7XG5cdFx0XHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0XHRcdGdhcDogdGFibGVBUEkuZ2V0UHJvcGVydHkoXCJyZWFkT25seVwiKSA/IDAgOiA0XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0X2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFVuaXQ6IGZ1bmN0aW9uIChcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0cHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8sXG5cdFx0dW5pdD86IHN0cmluZyxcblx0XHR1bml0VGV4dD86IHN0cmluZyxcblx0XHR0aW1lem9uZVRleHQ/OiBzdHJpbmdcblx0KSB7XG5cdFx0Y29uc3Qgb1RhYmxlQVBJOiBFbmhhbmNlV2l0aFVJNTxUYWJsZUFQST4gfCBudWxsID0gdGFibGUgPyAodGFibGUuZ2V0UGFyZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8VGFibGVBUEk+KSA6IG51bGw7XG5cdFx0Ly8gdXBkYXRlIGdhcCBmb3IgcHJvcGVydGllcyB3aXRoIHN0cmluZyB1bml0XG5cdFx0Y29uc3QgdGV4dCA9IHVuaXRUZXh0IHx8IHRpbWV6b25lVGV4dDtcblx0XHRpZiAodGV4dCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzID0gZGVlcEV4dGVuZChwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgYXMgVmlzdWFsU2V0dGluZ3MsIHtcblx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdGdhcDogTWF0aC5jZWlsKFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgodGV4dCkpXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAodW5pdCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzID0gZGVlcEV4dGVuZChwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgYXMgVmlzdWFsU2V0dGluZ3MsIHtcblx0XHRcdFx0d2lkdGhDYWxjdWxhdGlvbjoge1xuXHRcdFx0XHRcdC8vIEZvciBwcm9wZXJ0aWVzIHdpdGggdW5pdCwgYSBnYXAgbmVlZHMgdG8gYmUgYWRkZWQgdG8gcHJvcGVybHkgcmVuZGVyIHRoZSBjb2x1bW4gd2lkdGggb24gZWRpdCBtb2RlXG5cdFx0XHRcdFx0Z2FwOiBvVGFibGVBUEkgJiYgb1RhYmxlQVBJLmdldFJlYWRPbmx5KCkgPyAwIDogNlxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0X2NvbXB1dGVMYWJlbDogZnVuY3Rpb24gKHByb3BlcnR5OiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvLCBsYWJlbE1hcDogeyBbbGFiZWw6IHN0cmluZ106IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSB9KSB7XG5cdFx0aWYgKHByb3BlcnR5LmxhYmVsKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0aWVzV2l0aFNhbWVMYWJlbCA9IGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXTtcblx0XHRcdC8vIFRoaXMgY29tcHV0YXRpb24gaXMgb25seSBmb3IgZHVwbGljYXRlIGxhYmVscyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMuXG5cdFx0XHQvLyBFeGNsdWRlIHRleHQgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIHJlZmVyZW5jZWQgYXMgdGV4dCBvbiBhIHByb3BlcnR5IGFubm90YXRlZCB3aXRoIHRleHQgYXJyYW5nZW1lbnQgc2V0IGFzIFRleHRPbmx5LlxuXHRcdFx0Ly8gRXhjbHVkZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgY3JlYXRlZCBvbmx5IGZvciBmaWx0ZXJpbmcgcHVycG9zZXMgd2l0aCBhIHRleHQgYXJyYW5nZW1lbnQgc2V0IHRvIFRleHRPbmx5LlxuXHRcdFx0Y29uc3QgaXNQcm9wZXJ0eVVzZWRBc1RleHRPbmx5UHJvcGVydHkgPSBwcm9wZXJ0aWVzV2l0aFNhbWVMYWJlbD8uc29tZShcblx0XHRcdFx0KHByb3ApID0+IHByb3AudGV4dCA9PT0gcHJvcGVydHkucGF0aCAmJiBwcm9wPy5tb2RlID09PSBcIkRlc2NyaXB0aW9uXCJcblx0XHRcdCk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsPy5sZW5ndGggPiAxICYmXG5cdFx0XHRcdHByb3BlcnR5LnBhdGg/LmluY2x1ZGVzKFwiL1wiKSAmJlxuXHRcdFx0XHRwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzICYmXG5cdFx0XHRcdCFpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSAmJlxuXHRcdFx0XHQhKHByb3BlcnR5Py5tb2RlID09PSBcIkRlc2NyaXB0aW9uXCIgJiYgcHJvcGVydHkuZmlsdGVyYWJsZSlcblx0XHRcdCkge1xuXHRcdFx0XHRwcm9wZXJ0eS5sYWJlbCA9IHByb3BlcnR5LmxhYmVsICsgXCIgKFwiICsgcHJvcGVydHkuYWRkaXRpb25hbExhYmVscy5qb2luKFwiIC8gXCIpICsgXCIpXCI7XG5cdFx0XHR9XG5cdFx0XHRkZWxldGUgcHJvcGVydHkuYWRkaXRpb25hbExhYmVscztcblx0XHR9XG5cdH0sXG5cdC8vVXBkYXRlIFZpc3VhbFNldHRpbmcgZm9yIGNvbHVtbldpZHRoIGNhbGN1bGF0aW9uIGFuZCBsYWJlbHMgb24gbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdF91cGRhdGVQcm9wZXJ0eUluZm86IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIHByb3BlcnRpZXM6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSkge1xuXHRcdGNvbnN0IGxhYmVsTWFwOiB7IFtsYWJlbDogc3RyaW5nXTogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdIH0gPSB7fTtcblx0XHQvLyBDaGVjayBhdmFpbGFibGUgcDEzbiBtb2Rlc1xuXHRcdGNvbnN0IHAxM25Nb2RlID0gdGFibGUuZ2V0UDEzbk1vZGUoKTtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG5cdFx0XHRpZiAoIXByb3BlcnR5LnByb3BlcnR5SW5mb3MgJiYgcHJvcGVydHkubGFiZWwpIHtcblx0XHRcdFx0Ly8gT25seSBmb3Igbm9uLWNvbXBsZXggcHJvcGVydGllc1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0KHAxM25Nb2RlPy5pbmNsdWRlcyhcIlNvcnRcIikgJiYgcHJvcGVydHkuc29ydGFibGUpIHx8XG5cdFx0XHRcdFx0KHAxM25Nb2RlPy5pbmNsdWRlcyhcIkZpbHRlclwiKSAmJiBwcm9wZXJ0eS5maWx0ZXJhYmxlKSB8fFxuXHRcdFx0XHRcdChwMTNuTW9kZT8uaW5jbHVkZXMoXCJHcm91cFwiKSAmJiBwcm9wZXJ0eS5ncm91cGFibGUpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXSA9XG5cdFx0XHRcdFx0XHRsYWJlbE1hcFtwcm9wZXJ0eS5sYWJlbF0gIT09IHVuZGVmaW5lZCA/IGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXS5jb25jYXQoW3Byb3BlcnR5XSkgOiBbcHJvcGVydHldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0dGhpcy5fY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yRmllbGRHcm91cCh0YWJsZSwgcHJvcGVydHksIHByb3BlcnRpZXMpO1xuXHRcdFx0dGhpcy5fY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVmFsdWVIZWxwKHRhYmxlLCBwcm9wZXJ0eSk7XG5cdFx0XHR0aGlzLl9jb21wdXRlTGFiZWwocHJvcGVydHksIGxhYmVsTWFwKTtcblx0XHR9KTtcblx0XHQvLyBBZGQgdGhlICRlZGl0U3RhdGUgcHJvcGVydHlcblx0XHRwcm9wZXJ0aWVzLnB1c2goe1xuXHRcdFx0a2V5OiBcIiRlZGl0U3RhdGVcIixcblx0XHRcdHBhdGg6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdFx0Z3JvdXBMYWJlbDogXCJcIixcblx0XHRcdGdyb3VwOiBcIlwiLFxuXHRcdFx0bGFiZWw6IFwiXCIsXG5cdFx0XHRkYXRhVHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIixcblx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0Z3JvdXBhYmxlOiBmYWxzZSxcblx0XHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRcdGZpbHRlcmFibGU6IGZhbHNlXG5cdFx0fSBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvKTtcblx0XHRyZXR1cm4gcHJvcGVydGllcztcblx0fSxcblxuXHRnZXRDb2x1bW5zRm9yOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogVGFibGVDb2x1bW5bXSB7XG5cdFx0cmV0dXJuICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29sdW1ucztcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZXhwb3J0IGNhcGFiaWxpdGllcyBmb3IgdGhlIGdpdmVuIHNhcC51aS5tZGMuVGFibGUgaW5zdGFuY2UuXG5cdCAqIEBwYXJhbSBvVGFibGUgSW5zdGFuY2Ugb2YgdGhlIHRhYmxlXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVwcmVzZW50aW5nIHRoZSBleHBvcnQgY2FwYWJpbGl0aWVzIG9mIHRoZSB0YWJsZSBpbnN0YW5jZVxuXHQgKi9cblx0ZmV0Y2hFeHBvcnRDYXBhYmlsaXRpZXM6IGFzeW5jIGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKTogUHJvbWlzZTx7IFhMU1g/OiB1bmtub3duOyBQREY/OiB1bmtub3duIH0+IHtcblx0XHRjb25zdCBvQ2FwYWJpbGl0aWVzOiB7IFhMU1g/OiB1bmtub3duOyBQREY/OiB1bmtub3duIH0gPSB7IFhMU1g6IHt9IH07XG5cdFx0bGV0IG9Nb2RlbCE6IE9EYXRhTW9kZWw7XG5cdFx0cmV0dXJuIERlbGVnYXRlVXRpbC5mZXRjaE1vZGVsKG9UYWJsZSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChtb2RlbDogTW9kZWwpIHtcblx0XHRcdFx0b01vZGVsID0gbW9kZWwgYXMgT0RhdGFNb2RlbDtcblx0XHRcdFx0cmV0dXJuIG9Nb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRPYmplY3QoXCIvJEVudGl0eUNvbnRhaW5lckBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlN1cHBvcnRlZEZvcm1hdHNcIik7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKGFTdXBwb3J0ZWRGb3JtYXRzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBhTG93ZXJGb3JtYXRzID0gKGFTdXBwb3J0ZWRGb3JtYXRzIHx8IFtdKS5tYXAoKGVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudC50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGFMb3dlckZvcm1hdHMuaW5jbHVkZXMoXCJhcHBsaWNhdGlvbi9wZGZcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gb01vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlBERi52MS5GZWF0dXJlc1wiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChvQW5ub3RhdGlvbjogdW5rbm93bikge1xuXHRcdFx0XHRpZiAob0Fubm90YXRpb24pIHtcblx0XHRcdFx0XHRvQ2FwYWJpbGl0aWVzW1wiUERGXCJdID0gT2JqZWN0LmFzc2lnbih7fSwgb0Fubm90YXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEFuIGVycm9yIG9jY3VycyB3aGlsZSBjb21wdXRpbmcgZXhwb3J0IGNhcGFiaWxpdGllczogJHtlcnJ9YCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gb0NhcGFiaWxpdGllcztcblx0XHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBGaWx0ZXJpbmcgb24gbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBMaW5lSXRlbSBhbm5vdGF0aW9uIG5vciBvZiB0aGUgY3VzdG9tIGNvbHVtbnMgaXMgZm9yYmlkZGVuLlxuXHQgKiBAcGFyYW0gY29sdW1uSW5mb1xuXHQgKiBAcGFyYW0gY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aFxuXHQgKiBAcmV0dXJucyBCb29sZWFuIHRydWUgaWYgZmlsdGVyaW5nIGlzIGFsbG93ZWQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0X2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eTogZnVuY3Rpb24gKFxuXHRcdGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHRjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGlzRmlsdGVyYWJsZSA9IGlzUGF0aEZpbHRlcmFibGUoY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdCFjb2x1bW5JbmZvLnJlbGF0aXZlUGF0aC5pbmNsdWRlcyhcIi9cIikgfHxcblx0XHRcdCgoY29sdW1uSW5mby5pc1BhcnRPZkxpbmVJdGVtID09PSB0cnVlIHx8IGNvbHVtbkluZm8uaXNQYXJ0T2ZDdXN0b21Db2x1bW4gPT09IHRydWUpICYmXG5cdFx0XHRcdCEoaXNDb25zdGFudChpc0ZpbHRlcmFibGUpICYmIGlzRmlsdGVyYWJsZS52YWx1ZSA9PT0gZmFsc2UpKVxuXHRcdCk7XG5cdH0sXG5cblx0X2ZldGNoUHJvcGVydHlJbmZvOiBmdW5jdGlvbiAoXG5cdFx0bWV0YU1vZGVsOiBNZXRhTW9kZWwsXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuXHQpOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvIHtcblx0XHRjb25zdCBzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCA9IGNvbHVtbkluZm8uYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRvRGF0YUZpZWxkID0gbWV0YU1vZGVsLmdldE9iamVjdChzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCksXG5cdFx0XHRvTmF2aWdhdGlvbkNvbnRleHQgPSBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0Fic29sdXRlTmF2aWdhdGlvblBhdGgpIGFzIENvbnRleHQsXG5cdFx0XHRpc0NvbXBsZXhUeXBlID0gY29sdW1uSW5mby50eXBlQ29uZmlnPy5jbGFzc05hbWUgJiYgY29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZT8uaW5kZXhPZihcIkVkbS5cIikgIT09IDAsXG5cdFx0XHRiRmlsdGVyYWJsZSA9IENvbW1vbkhlbHBlci5pc1Byb3BlcnR5RmlsdGVyYWJsZShvTmF2aWdhdGlvbkNvbnRleHQsIG9EYXRhRmllbGQpLFxuXHRcdFx0YklzQW5hbHl0aWNhbFRhYmxlID0gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEodGFibGUsIFwiZW5hYmxlQW5hbHl0aWNzXCIpID09PSBcInRydWVcIixcblx0XHRcdGxhYmVsID0gZ2V0TG9jYWxpemVkVGV4dChjb2x1bW5JbmZvLmxhYmVsID8/IFwiXCIsIGFwcENvbXBvbmVudCA/PyB0YWJsZSksXG5cdFx0XHR0b29sdGlwID0gZ2V0TG9jYWxpemVkVGV4dChjb2x1bW5JbmZvLnRvb2x0aXAgPz8gXCJcIiwgYXBwQ29tcG9uZW50ID8/IHRhYmxlKSxcblx0XHRcdHR5cGVDb25maWcgPSB0aGlzLl9nZXRUeXBlQ29uZmlnKGNvbHVtbkluZm8sIGlzQ29tcGxleFR5cGUpLFxuXHRcdFx0cHJvcGVydHlJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvID0ge1xuXHRcdFx0XHRuYW1lOiBjb2x1bW5JbmZvLm5hbWUsXG5cdFx0XHRcdGtleTogY29sdW1uSW5mby5uYW1lLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogc0Fic29sdXRlTmF2aWdhdGlvblBhdGgsXG5cdFx0XHRcdGdyb3VwTGFiZWw6IGNvbHVtbkluZm8uZ3JvdXBMYWJlbCxcblx0XHRcdFx0Z3JvdXA6IGNvbHVtbkluZm8uZ3JvdXAsXG5cdFx0XHRcdGxhYmVsOiBsYWJlbCxcblx0XHRcdFx0dG9vbHRpcDogdG9vbHRpcCxcblx0XHRcdFx0ZGF0YVR5cGU6IHR5cGVDb25maWcuY2xhc3NOYW1lLFxuXHRcdFx0XHR0eXBlQ29uZmlnOiB0eXBlQ29uZmlnLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOlxuXHRcdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZz8uYmFzZVR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCJcblx0XHRcdFx0XHRcdD8geyBzdHlsZTogXCJtZWRpdW0vc2hvcnRcIiB9IC8qIFRoaXMgY29uZGl0aW9uIGRvZXNuJ3QgaGF2ZSBhbnkgaW1wYWN0LCB0byBiZSByZXZpZXdlZCAqL1xuXHRcdFx0XHRcdFx0OiBjb2x1bW5JbmZvLnR5cGVDb25maWc/LmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdGNvbnN0cmFpbnRzOiBjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNvbnN0cmFpbnRzLFxuXHRcdFx0XHR2aXNpYmxlOiBjb2x1bW5JbmZvLmF2YWlsYWJpbGl0eSAhPT0gXCJIaWRkZW5cIiAmJiAhaXNDb21wbGV4VHlwZSxcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3M6IHRoaXMuX3NldFByb3BlcnR5SW5mb0V4cG9ydFNldHRpbmdzKGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MsIGNvbHVtbkluZm8pLFxuXHRcdFx0XHR1bml0OiBjb2x1bW5JbmZvLnVuaXQsXG5cdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0cmVsYXRpdmVQYXRoOiBjb2x1bW5JbmZvLnJlbGF0aXZlUGF0aFxuXHRcdFx0fTtcblx0XHRpZiAocHJvcGVydHlJbmZvLmV4cG9ydFNldHRpbmdzPy50ZW1wbGF0ZSkge1xuXHRcdFx0cHJvcGVydHlJbmZvLmNsaXBib2FyZFNldHRpbmdzID0geyB0ZW1wbGF0ZTogcHJvcGVydHlJbmZvLmV4cG9ydFNldHRpbmdzLnRlbXBsYXRlIH07XG5cdFx0XHQvLyBpZiBJIHNldCB0aGlzIGNsaXBCb2FyZFNldHRpbmdzIHRoZSBjb3B5IHByb3ZpZGVyIGV4dHJhY3QgdGhlIGRhdGEgYWNjb3JkaW5nIHRvIHRoZSB0ZW1wbGF0ZSBpbiB0aGUgaHRtbCBwcm9wZXJ0eSBhbmQgaXQgaXMgcHJvcGVybHkgY29waWVkIGluIGV4Y2VsXG5cdFx0XHQvLyBidXQgd2hlbiB3ZSBjb3B5IGVsc2V3aGVyZSB3ZSBvbmx5IGdldCB0aGUgcmF3IGRhdGEgYW5kIG5vdCB0aGUgdGVtcGxhdGVkIGRhdGFcblx0XHR9XG5cblx0XHQvLyBTZXQgdmlzdWFsU2V0dGluZ3Mgb25seSBpZiBpdCBleGlzdHNcblx0XHRpZiAoY29sdW1uSW5mby52aXN1YWxTZXR0aW5ncyAmJiBPYmplY3Qua2V5cyhjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW5JbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUgPSBjb2x1bW5JbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlO1xuXHRcdH1cblxuXHRcdC8vIE1EQyBleHBlY3RzICAncHJvcGVydHlJbmZvcycgb25seSBmb3IgY29tcGxleCBwcm9wZXJ0aWVzLlxuXHRcdC8vIEFuIGVtcHR5IGFycmF5IHRocm93cyB2YWxpZGF0aW9uIGVycm9yIGFuZCB1bmRlZmluZWQgdmFsdWUgaXMgdW5oYW5kbGVkLlxuXHRcdGlmIChjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3M/Lmxlbmd0aCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MgPSBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3M7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBzdXBwb3J0ZWQgb25seSBieSBzaW1wbGUgUHJvcGVydHlJbmZvcy5cblxuXHRcdFx0Ly9nZXQgdGhlIERhdGFNb2RlbE9iamVjdFBhdGggZm9yIHRoZSBjb2x1bW5cblx0XHRcdGNvbnN0IGNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoXG5cdFx0XHRcdG1ldGFNb2RlbC5nZXRDb250ZXh0KGNvbHVtbkluZm8uYW5ub3RhdGlvblBhdGgpLFxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0Q29udGV4dChEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YSh0YWJsZSwgXCJtZXRhUGF0aFwiKSEpXG5cdFx0XHQpO1xuXHRcdFx0cHJvcGVydHlJbmZvLnBhdGggPSBjb2x1bW5JbmZvLnJlbGF0aXZlUGF0aDtcblx0XHRcdC8vIFRPRE8gd2l0aCB0aGUgbmV3IGNvbXBsZXggcHJvcGVydHkgaW5mbywgYSBsb3Qgb2YgXCJEZXNjcmlwdGlvblwiIGZpZWxkcyBhcmUgYWRkZWQgYXMgZmlsdGVyL3NvcnQgZmllbGRzXG5cdFx0XHRwcm9wZXJ0eUluZm8uc29ydGFibGUgPSBjb2x1bW5JbmZvLnNvcnRhYmxlO1xuXHRcdFx0aWYgKGJJc0FuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVBbmFseXRpY2FsUHJvcGVydHlJbmZvQXR0cmlidXRlcyhwcm9wZXJ0eUluZm8sIGNvbHVtbkluZm8pO1xuXHRcdFx0fVxuXHRcdFx0cHJvcGVydHlJbmZvLmZpbHRlcmFibGUgPVxuXHRcdFx0XHRjb2x1bW5JbmZvLmZpbHRlcmFibGUgIT09IGZhbHNlICYmXG5cdFx0XHRcdCEhYkZpbHRlcmFibGUgJiZcblx0XHRcdFx0dGhpcy5faXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5KGNvbHVtbkluZm8sIGNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdFx0cHJvcGVydHlJbmZvLmlzS2V5ID0gY29sdW1uSW5mby5pc0tleTtcblx0XHRcdHByb3BlcnR5SW5mby5ncm91cGFibGUgPSBjb2x1bW5JbmZvLmlzR3JvdXBhYmxlO1xuXHRcdFx0aWYgKGNvbHVtbkluZm8udGV4dEFycmFuZ2VtZW50KSB7XG5cdFx0XHRcdHRoaXMuX3NldFRleHRBcnJhbmdlbWVudEluZm8ocHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvLCB0YWJsZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJvcGVydHlJbmZvLmlzS2V5KSB7XG5cdFx0XHRcdHByb3BlcnR5SW5mby5leHRlbnNpb24gPSB7XG5cdFx0XHRcdFx0Ly8gTURDIG5lZWRzIHRvIGZpeCB0aGlzLCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIGEgbm9uIEFuYWx5dGljYWwgVGFibGVcblx0XHRcdFx0XHR0ZWNobmljYWxseUdyb3VwYWJsZTogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0cHJvcGVydHlJbmZvLmNhc2VTZW5zaXRpdmUgPSBjb2x1bW5JbmZvLmNhc2VTZW5zaXRpdmU7XG5cdFx0XHRpZiAoY29sdW1uSW5mby5hZGRpdGlvbmFsTGFiZWxzKSB7XG5cdFx0XHRcdHByb3BlcnR5SW5mby5hZGRpdGlvbmFsTGFiZWxzID0gY29sdW1uSW5mby5hZGRpdGlvbmFsTGFiZWxzLm1hcCgoYWRkaXRpb25hbExhYmVsOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gZ2V0TG9jYWxpemVkVGV4dChhZGRpdGlvbmFsTGFiZWwsIGFwcENvbXBvbmVudCB8fCB0YWJsZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvclByb3BlcnR5V2l0aFVuaXQodGFibGUsIHByb3BlcnR5SW5mbywgY29sdW1uSW5mby51bml0LCBjb2x1bW5JbmZvLnVuaXRUZXh0LCBjb2x1bW5JbmZvLnRpbWV6b25lVGV4dCk7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlJbmZvO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBFeHRlbmQgdGhlIGV4cG9ydCBzZXR0aW5ncyBiYXNlZCBvbiB0aGUgY29sdW1uIGluZm8uXG5cdCAqIEBwYXJhbSBleHBvcnRTZXR0aW5ncyBUaGUgZXhwb3J0IHNldHRpbmdzIHRvIGJlIGV4dGVuZGVkXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjb2x1bW5JbmZvIG9iamVjdFxuXHQgKiBAcmV0dXJucyBUaGUgZXh0ZW5kZWQgZXhwb3J0IHNldHRpbmdzXG5cdCAqL1xuXHRfc2V0UHJvcGVydHlJbmZvRXhwb3J0U2V0dGluZ3M6IGZ1bmN0aW9uIChcblx0XHRleHBvcnRTZXR0aW5nczogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCB1bmRlZmluZWQgfCBudWxsLFxuXHRcdGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtblxuXHQpOiBDb2x1bW5FeHBvcnRTZXR0aW5ncyB8IHVuZGVmaW5lZCB8IG51bGwge1xuXHRcdGNvbnN0IGV4cG9ydEZvcm1hdCA9IHRoaXMuX2dldEV4cG9ydEZvcm1hdChjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSk7XG5cdFx0aWYgKGV4cG9ydEZvcm1hdCAmJiBleHBvcnRTZXR0aW5ncykge1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MuZm9ybWF0ID0gZXhwb3J0Rm9ybWF0O1xuXHRcdH1cblx0XHRyZXR1cm4gZXhwb3J0U2V0dGluZ3M7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHR5cGUgY29uZmlnIGZvciB0aGUgZ2l2ZW4gY29sdW1uIGluZm8uXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjb2x1bW5JbmZvIG9iamVjdC5cblx0ICogQHBhcmFtIGlzQ29tcGxleFR5cGUgSW5kaWNhdGVzIGlmIHRoZSBkYXRhVHlwZSBpcyBjb21wbGV4LlxuXHQgKiBAcmV0dXJucyBUaGUgTURDIHR5cGUgY29uZmlnLlxuXHQgKi9cblx0X2dldFR5cGVDb25maWcoY29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLCBpc0NvbXBsZXhUeXBlPzogYm9vbGVhbik6IFR5cGVDb25maWcge1xuXHRcdGxldCB0eXBlQ29uZmlnID0gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIpOyAvLyBNREMgZXhwZWN0cyBhbHdheXMgYSBkYXRhVHlwZVxuXHRcdGlmIChjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSAmJiBpc1R5cGVGaWx0ZXJhYmxlKGNvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWUpKSB7XG5cdFx0XHR0eXBlQ29uZmlnID0gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKFxuXHRcdFx0XHRjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lLFxuXHRcdFx0XHRjb2x1bW5JbmZvLnR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0Y29sdW1uSW5mby50eXBlQ29uZmlnLmNvbnN0cmFpbnRzXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoY29sdW1uSW5mby50eXBlQ29uZmlnPy5jbGFzc05hbWUgJiYgIWlzQ29tcGxleFR5cGUpIHtcblx0XHRcdHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoY29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0eXBlQ29uZmlnO1xuXHR9LFxuXHQvKipcblx0ICogU2V0IHRoZSB0ZXh0IGFycmFuZ2VtZW50IGluZm8gZm9yIHRoZSBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIHByb3BlcnR5SW5mbyBUaGUgY3VycmVudCBwcm9wZXJ0eUluZm8gb2JqZWN0LlxuXHQgKiBAcGFyYW0gY29sdW1uSW5mbyBUaGUgY29sdW1uSW5mbyBvYmplY3QuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgbWRjIHRhYmxlIGNvbnRyb2wuXG5cdCAqL1xuXHRfc2V0VGV4dEFycmFuZ2VtZW50SW5mbzogZnVuY3Rpb24gKHByb3BlcnR5SW5mbzogRW5oYW5jZWRGRVByb3BlcnR5SW5mbywgY29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHRjb25zdCBkZXNjcmlwdGlvbkNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uc0Zvcih0YWJsZSkuZmluZChmdW5jdGlvbiAob0NvbCkge1xuXHRcdFx0cmV0dXJuIG9Db2wubmFtZSA9PT0gY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQ/LnRleHRQcm9wZXJ0eTtcblx0XHR9KTtcblx0XHRpZiAoZGVzY3JpcHRpb25Db2x1bW4pIHtcblx0XHRcdHByb3BlcnR5SW5mby5tb2RlID0gY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQhLm1vZGU7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA9IGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoO1xuXHRcdFx0cHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHkgPSAoZGVzY3JpcHRpb25Db2x1bW4gYXMgRW5oYW5jZWRGRVByb3BlcnR5SW5mbykucmVsYXRpdmVQYXRoO1xuXHRcdH1cblx0XHRwcm9wZXJ0eUluZm8udGV4dCA9IGNvbHVtbkluZm8udGV4dEFycmFuZ2VtZW50Py50ZXh0UHJvcGVydHk7XG5cdH0sXG5cblx0X3VwZGF0ZUFuYWx5dGljYWxQcm9wZXJ0eUluZm9BdHRyaWJ1dGVzKHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pIHtcblx0XHRpZiAoY29sdW1uSW5mby5hZ2dyZWdhdGFibGUpIHtcblx0XHRcdHByb3BlcnR5SW5mby5hZ2dyZWdhdGFibGUgPSBjb2x1bW5JbmZvLmFnZ3JlZ2F0YWJsZTtcblx0XHR9XG5cdFx0aWYgKGNvbHVtbkluZm8uZXh0ZW5zaW9uKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZXh0ZW5zaW9uID0gY29sdW1uSW5mby5leHRlbnNpb247XG5cdFx0fVxuXHR9LFxuXG5cdF9mZXRjaENvbXB1dGVkUHJvcGVydHlJbmZvOiBmdW5jdGlvbiAoY29sdW1uSW5mbzogQ29tcHV0ZWRUYWJsZUNvbHVtbiwgdGFibGU6IFRhYmxlKSB7XG5cdFx0Y29uc3QgbGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8ubGFiZWwsIHRhYmxlKTsgLy8gVG9kbzogVG8gYmUgcmVtb3ZlZCBvbmNlIE1EQyBwcm92aWRlcyB0cmFuc2xhdGlvbiBzdXBwb3J0XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRrZXk6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdGxhYmVsOiBsYWJlbC50b1N0cmluZygpLFxuXHRcdFx0ZGF0YVR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIsXG5cdFx0XHR2aXNpYmxlOiBjb2x1bW5JbmZvLmF2YWlsYWJpbGl0eSAhPT0gXCJIaWRkZW5cIixcblx0XHRcdGZpbHRlcmFibGU6IGZhbHNlLFxuXHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0Z3JvdXBhYmxlOiBmYWxzZSxcblx0XHRcdGV4cG9ydFNldHRpbmdzOiBjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLFxuXHRcdFx0Y2xpcGJvYXJkU2V0dGluZ3M6IGNvbHVtbkluZm8uY2xpcGJvYXJkU2V0dGluZ3MgYXMgUHJvcGVydHlJbmZvW1wiY2xpcGJvYXJkU2V0dGluZ3NcIl1cblx0XHR9O1xuXHRcdGlmIChjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MgIT09IHVuZGVmaW5lZCAmJiBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MubGVuZ3RoID4gMCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MgPSBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3M7XG5cdFx0fVxuXHRcdHJldHVybiBwcm9wZXJ0eUluZm87XG5cdH0sXG5cblx0X2ZldGNoQ3VzdG9tUHJvcGVydHlJbmZvOiBmdW5jdGlvbiAoY29sdW1uSW5mbzogQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiwgdGFibGU6IFRhYmxlLCBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkge1xuXHRcdGxldCBsYWJlbDtcblx0XHRpZiAoY29sdW1uSW5mby5oZWFkZXIpIHtcblx0XHRcdGlmIChjb2x1bW5JbmZvLmhlYWRlci5zdGFydHNXaXRoKFwie21ldGFNb2RlbD5cIikpIHtcblx0XHRcdFx0bGFiZWwgPSBNb2RlbEhlbHBlci5mZXRjaFRleHRGcm9tTWV0YU1vZGVsKGNvbHVtbkluZm8uaGVhZGVyLCB1bmRlZmluZWQsICh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxhYmVsID0gZ2V0TG9jYWxpemVkVGV4dChjb2x1bW5JbmZvLmhlYWRlciwgYXBwQ29tcG9uZW50KTsgLy8gVG9kbzogVG8gYmUgcmVtb3ZlZCBvbmNlIE1EQyBwcm92aWRlcyB0cmFuc2xhdGlvbiBzdXBwb3J0XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvID0ge1xuXHRcdFx0a2V5OiBjb2x1bW5JbmZvLm5hbWUsXG5cdFx0XHRncm91cExhYmVsOiB1bmRlZmluZWQsXG5cdFx0XHRncm91cDogdW5kZWZpbmVkLFxuXHRcdFx0bGFiZWw6IGxhYmVsID8/IFwiXCIsXG5cdFx0XHRkYXRhVHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIixcblx0XHRcdHZpc2libGU6IGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHR2aXN1YWxTZXR0aW5nczogY29sdW1uSW5mby52aXN1YWxTZXR0aW5ncyBhcyBQcm9wZXJ0eUluZm9bXCJ2aXN1YWxTZXR0aW5nc1wiXVxuXHRcdH07XG5cblx0XHQvLyBNREMgZXhwZWN0cyAncHJvcGVydHlJbmZvcycgb25seSBmb3IgY29tcGxleCBwcm9wZXJ0aWVzLlxuXHRcdC8vIEFuIGVtcHR5IGFycmF5IHRocm93cyB2YWxpZGF0aW9uIGVycm9yIGFuZCB1bmRlZmluZWQgdmFsdWUgaXMgdW5oYW5kbGVkLlxuXHRcdGlmIChjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MgJiYgY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zLmxlbmd0aCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MgPSBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3M7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBzdXBwb3J0ZWQgb25seSBieSBzaW1wbGUgUHJvcGVydHlJbmZvcy5cblx0XHRcdHByb3BlcnR5SW5mby5wYXRoID0gY29sdW1uSW5mby5uYW1lO1xuXHRcdFx0cHJvcGVydHlJbmZvLnNvcnRhYmxlID0gZmFsc2U7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZmlsdGVyYWJsZSA9IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gcHJvcGVydHlJbmZvO1xuXHR9LFxuXHRfYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yOiBmdW5jdGlvbiAob0NvbHVtbkluZm86IFRhYmxlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhKFxuXHRcdFx0KG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMgJiYgb0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucy5oYXNEcmFmdEluZGljYXRvcikgfHxcblx0XHRcdChvQ29sdW1uSW5mby5mb3JtYXRPcHRpb25zICYmIG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMuZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoKVxuXHRcdCk7XG5cdH0sXG5cdF91cGRhdGVEcmFmdEluZGljYXRvck1vZGVsOiBmdW5jdGlvbiAoX29UYWJsZTogVGFibGUsIF9vQ29sdW1uSW5mbzogVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0XHRjb25zdCBhVmlzaWJsZUNvbHVtbnMgPSBfb1RhYmxlLmdldENvbHVtbnMoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IF9vVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRjb25zdCBzSW50ZXJuYWxQYXRoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQgJiYgb0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGlmIChhVmlzaWJsZUNvbHVtbnMgJiYgb0ludGVybmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGZvciAoY29uc3QgaW5kZXggaW4gYVZpc2libGVDb2x1bW5zKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0aGlzLl9iQ29sdW1uSGFzUHJvcGVydHlXaXRoRHJhZnRJbmRpY2F0b3IoX29Db2x1bW5JbmZvKSAmJlxuXHRcdFx0XHRcdF9vQ29sdW1uSW5mby5uYW1lID09PSBhVmlzaWJsZUNvbHVtbnNbaW5kZXhdLmdldFByb3BlcnR5S2V5KClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0aWYgKG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LmdldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IsIF9vQ29sdW1uSW5mby5uYW1lKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0X2ZldGNoUHJvcGVydGllc0ZvckVudGl0eTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRlbnRpdHlUeXBlUGF0aDogc3RyaW5nLFxuXHRcdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnRcblx0KTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRcdC8vIHdoZW4gZmV0Y2hpbmcgcHJvcGVydGllcywgdGhpcyBiaW5kaW5nIGNvbnRleHQgaXMgbmVlZGVkIC0gc28gbGV0cyBjcmVhdGUgaXQgb25seSBvbmNlIGFuZCB1c2UgaWYgZm9yIGFsbCBwcm9wZXJ0aWVzL2RhdGEtZmllbGRzL2xpbmUtaXRlbXNcblx0XHRjb25zdCBiaW5kaW5nUGF0aCA9IE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoZW50aXR5VHlwZVBhdGgpO1xuXHRcdGxldCBmZXRjaGVkUHJvcGVydGllczogUHJvcGVydHlJbmZvW10gPSBbXTtcblx0XHRjb25zdCBub25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IENvbW1vblV0aWxzLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aChiaW5kaW5nUGF0aCwgbWV0YU1vZGVsKS5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcztcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuZ2V0Q29sdW1uc0Zvcih0YWJsZSkpXG5cdFx0XHQudGhlbigoY29sdW1uczogVGFibGVDb2x1bW5bXSkgPT4ge1xuXHRcdFx0XHQvLyBEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSBkb2VzIG5vdCB3b3JrIHZpYSAnZW50aXR5U2V0LyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL0RyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhJ1xuXHRcdFx0XHRpZiAoY29sdW1ucykge1xuXHRcdFx0XHRcdGxldCBwcm9wZXJ0eUluZm87XG5cdFx0XHRcdFx0Y29sdW1ucy5mb3JFYWNoKChjb2x1bW5JbmZvKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVEcmFmdEluZGljYXRvck1vZGVsKHRhYmxlLCBjb2x1bW5JbmZvKTtcblx0XHRcdFx0XHRcdHN3aXRjaCAoY29sdW1uSW5mby50eXBlKSB7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJBbm5vdGF0aW9uXCI6XG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID0gdGhpcy5fZmV0Y2hQcm9wZXJ0eUluZm8obWV0YU1vZGVsLCBjb2x1bW5JbmZvIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbiwgdGFibGUsIGFwcENvbXBvbmVudCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5SW5mbyAmJiAhbm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuaW5jbHVkZXMoKHByb3BlcnR5SW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pLm5hbWUpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8ubWF4Q29uZGl0aW9ucyA9IERlbGVnYXRlVXRpbC5pc011bHRpVmFsdWUocHJvcGVydHlJbmZvIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikgPyAtMSA6IDE7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiQ29tcHV0ZWRcIjpcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8gPSB0aGlzLl9mZXRjaENvbXB1dGVkUHJvcGVydHlJbmZvKGNvbHVtbkluZm8gYXMgQ29tcHV0ZWRUYWJsZUNvbHVtbiwgdGFibGUpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiU2xvdFwiOlxuXHRcdFx0XHRcdFx0XHRjYXNlIFwiRGVmYXVsdFwiOlxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbyA9IHRoaXMuX2ZldGNoQ3VzdG9tUHJvcGVydHlJbmZvKGNvbHVtbkluZm8gYXMgQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiwgdGFibGUsIGFwcENvbXBvbmVudCk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bmhhbmRsZWQgc3dpdGNoIGNhc2UgJHtjb2x1bW5JbmZvLnR5cGV9YCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRmZXRjaGVkUHJvcGVydGllcy5wdXNoKHByb3BlcnR5SW5mbyBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRmZXRjaGVkUHJvcGVydGllcyA9IHRoaXMuX3VwZGF0ZVByb3BlcnR5SW5mbyh0YWJsZSwgZmV0Y2hlZFByb3BlcnRpZXMgYXMgRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdKTtcblx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0dGFibGVBUEkuc2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyhmZXRjaGVkUHJvcGVydGllcyBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10pO1xuXHRcdFx0XHRmZXRjaGVkUHJvcGVydGllcyA9IHRhYmxlQVBJLmdldFByb3BlcnR5SW5mb3MoKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIHVwZGF0aW5nIGZldGNoZWQgcHJvcGVydGllczogJHtlcnIgYXMgc3RyaW5nfWApO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIGZldGNoZWRQcm9wZXJ0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0X2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGVudGl0eVR5cGVQYXRoOiBzdHJpbmcsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuXHQpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCBmZXRjaGVkUHJvcGVydGllcyA9IHRhYmxlQVBJLmdldENhY2hlZFByb3BlcnR5SW5mb3MoKTtcblx0XHRpZiAoZmV0Y2hlZFByb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZldGNoZWRQcm9wZXJ0aWVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2ZldGNoUHJvcGVydGllc0ZvckVudGl0eSh0YWJsZSwgZW50aXR5VHlwZVBhdGgsIG1ldGFNb2RlbCwgYXBwQ29tcG9uZW50KS50aGVuKGZ1bmN0aW9uIChcblx0XHRcdHN1YkZldGNoZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXVxuXHRcdCkge1xuXHRcdFx0dGFibGVBUEkuc2V0Q2FjaGVkUHJvcGVydHlJbmZvcyhzdWJGZXRjaGVkUHJvcGVydGllcyk7XG5cdFx0XHRyZXR1cm4gc3ViRmV0Y2hlZFByb3BlcnRpZXM7XG5cdFx0fSk7XG5cdH0sXG5cdHNldE5vRGF0YUluZm9ybWF0aW9uOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbjogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzKTogdm9pZCB7XG5cdFx0Y29uc3Qgbm9EYXRhQWdncmVnYXRpb24gPSB0YWJsZS5nZXROb0RhdGEoKTtcblx0XHRpZiAodHlwZW9mIG5vRGF0YUFnZ3JlZ2F0aW9uICE9IFwic3RyaW5nXCIgJiYgKG5vRGF0YUFnZ3JlZ2F0aW9uIGFzIENvbnRyb2wpPy5pc0EoXCJzYXAubS5JbGx1c3RyYXRlZE1lc3NhZ2VcIikpIHtcblx0XHRcdGNvbnN0IGN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2UgPSBub0RhdGFBZ2dyZWdhdGlvbiBhcyBJbGx1c3RyYXRlZE1lc3NhZ2U7XG5cdFx0XHQvLyBXZSBvdmVycmlkZSB0aGUgY3VycmVudCB2YWx1ZXMgb2YgdGhlIElsbHVzdHJhdGVkTWVzc2FnZVxuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXRUaXRsZShpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbi50aXRsZSk7XG5cdFx0XHRjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlLnNldERlc2NyaXB0aW9uKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLmRlc2NyaXB0aW9uKTtcblx0XHRcdGN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2Uuc2V0SWxsdXN0cmF0aW9uVHlwZShpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbi5pbGx1c3RyYXRpb25UeXBlKTtcblx0XHRcdGN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2Uuc2V0SWxsdXN0cmF0aW9uU2l6ZShpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbi5pbGx1c3RyYXRpb25TaXplKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgaWxsdXN0cmF0ZWRNZXNzYWdlID0gbmV3IElsbHVzdHJhdGVkTWVzc2FnZSh7XG5cdFx0XHRcdC4uLmlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uXG5cdFx0XHR9KTtcblx0XHRcdHRhYmxlLnNldE5vRGF0YShpbGx1c3RyYXRlZE1lc3NhZ2UpO1xuXHRcdH1cblx0fSxcblxuXHRzZXRUYWJsZU5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZTogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IHRhYmxlRmlsdGVySW5mbyA9IFRhYmxlVXRpbHMuZ2V0QWxsRmlsdGVySW5mbyh0YWJsZSk7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwodGFibGUpO1xuXHRcdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYmluZGluZ0luZm8ucGF0aD8uc3RhcnRzV2l0aChcIi9cIikgPyBiaW5kaW5nSW5mby5wYXRoLnN1YnN0cmluZygxKSA6IGJpbmRpbmdJbmZvLnBhdGg7XG5cdFx0bGV0IGlsbHVzdHJhdGVkSW5mb3JtYXRpb246ICRJbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5ncztcblxuXHRcdGNvbnN0IGdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzID0gZnVuY3Rpb24gKCk6ICRJbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5ncyB7XG5cdFx0XHRpZiAodGFibGUuZGF0YShcImhpZGRlbkZpbHRlcnNcIikgfHwgdGFibGUuZ2V0UXVpY2tGaWx0ZXIoKSkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9TRUFSQ0hSRVNVTFRTXCIpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRfTVVMVElfVklFV1wiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vU2VhcmNoUmVzdWx0c1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiksXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRfV0lUSF9GSUxURVJcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9TZWFyY2hSZXN1bHRzXG5cdFx0XHR9O1xuXHRcdH07XG5cblx0XHRjb25zdCBmaWx0ZXJBc3NvY2lhdGlvbiA9IHRhYmxlLmdldEZpbHRlcigpO1xuXHRcdGNvbnN0IGhhc0ZpbHRlck9yU2VhcmNoID0gdGFibGVGaWx0ZXJJbmZvLnNlYXJjaCB8fCB0YWJsZUZpbHRlckluZm8uZmlsdGVycz8ubGVuZ3RoO1xuXHRcdGlmIChmaWx0ZXJBc3NvY2lhdGlvbiAmJiAhL0Jhc2ljU2VhcmNoJC8udGVzdChmaWx0ZXJBc3NvY2lhdGlvbikpIHtcblx0XHRcdC8vIGNoZWNrIGlmIGEgRmlsdGVyQmFyIGlzIGFzc29jaWF0ZWQgdG8gdGhlIFRhYmxlIChiYXNpYyBzZWFyY2ggb24gdG9vbEJhciBpcyBleGNsdWRlZClcblx0XHRcdGlmIChoYXNGaWx0ZXJPclNlYXJjaCkge1xuXHRcdFx0XHQvLyBjaGVjayBpZiB0YWJsZSBoYXMgYW55IEZpbHRlcmJhciBmaWx0ZXJzIG9yIHBlcnNvbmFsaXphdGlvbiBmaWx0ZXJzXG5cdFx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IHtcblx0XHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiKSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9TZWFyY2hSZXN1bHRzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChoYXNGaWx0ZXJPclNlYXJjaCkge1xuXHRcdFx0Ly9jaGVjayBpZiB0YWJsZSBoYXMgYW55IHBlcnNvbmFsaXphdGlvbiBmaWx0ZXJzXG5cdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0gZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IHtcblx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT0RBVEFcIiksXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1RBQkxFX0FORF9DSEFSVF9OT19GSUxURVJTX05PX0RBVEFfVEVYVFwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0RhdGFcblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmIChDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlKS5nZXRWaWV3RGF0YSgpLmxpdmVNb2RlKSB7XG5cdFx0XHRpZiAoaGFzRmlsdGVyT3JTZWFyY2gpIHtcblx0XHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IGdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0ge1xuXHRcdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9TRUFSQ0hSRVNVTFRTXCIpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1RBQkxFX0FORF9DSEFSVF9OT19GSUxURVJTX05PX0RBVEFfVEVYVFwiKSxcblx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vU2VhcmNoUmVzdWx0c1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUgPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldE5vRGF0YU1lc3NhZ2VNb2RlKCk7XG5cblx0XHRpZiAoaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbi5pbGx1c3RyYXRpb25TaXplID09PSBcInRleHRcIikge1xuXHRcdFx0Y29uc3QgY3VycmVudE5vRGF0YSA9IHRhYmxlLmdldE5vRGF0YSgpO1xuXHRcdFx0aWYgKHR5cGVvZiBjdXJyZW50Tm9EYXRhID09PSBcInN0cmluZ1wiICYmIGN1cnJlbnROb0RhdGEgPT09IGlsbHVzdHJhdGVkSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pIHtcblx0XHRcdFx0Ly8gV2UgZG9uJ3QgY2hhbmdlIHRoZSBub0RhdGEgYWdncmVnYXRpb24gdW5uZWNlc3NhcnkuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRhYmxlLnNldE5vRGF0YShpbGx1c3RyYXRlZEluZm9ybWF0aW9uLmRlc2NyaXB0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROb0RhdGFJbmZvcm1hdGlvbih0YWJsZSwgaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbik7XG5cdFx0fVxuXHR9LFxuXG5cdGhhbmRsZVRhYmxlRGF0YVJlY2VpdmVkOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgb0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCk6IHZvaWQge1xuXHRcdGNvbnN0IG9CaW5kaW5nID0gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCksXG5cdFx0XHRiRGF0YVJlY2VpdmVkQXR0YWNoZWQgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQgJiYgb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkQXR0YWNoZWRcIik7XG5cblx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0ICYmICFiRGF0YVJlY2VpdmVkQXR0YWNoZWQpIHtcblx0XHRcdG9CaW5kaW5nLmF0dGFjaERhdGFSZWNlaXZlZCgoKSA9PiB7XG5cdFx0XHRcdC8vIGFzIHRoZSBkYXRhUmVjZWl2ZWQgZXZlbnQgaXMgZmlyZWQgbXVsdGlwbGUgdGltZXMsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGV2ZW50IGlzIG9ubHkgaGFuZGxlZCBvbmNlXG5cdFx0XHRcdGlmICghb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkVGltZW91dFNldFwiKSkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZFRpbWVvdXRTZXRcIiwgdHJ1ZSk7XG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRUaW1lb3V0U2V0XCIsIGZhbHNlKTtcblx0XHRcdFx0XHRcdC8vIFJlZnJlc2ggdGhlIHNlbGVjdGVkIGNvbnRleHRzIHRvIHRyaWdnZXIgcmUtY2FsY3VsYXRpb24gb2YgZW5hYmxlZCBzdGF0ZSBvZiBhY3Rpb25zLlxuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiLCBbXSk7XG5cdFx0XHRcdFx0XHRjb25zdCBhU2VsZWN0ZWRDb250ZXh0cyA9IG9UYWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCkgYXMgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiwgYVNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIGFTZWxlY3RlZENvbnRleHRzLmxlbmd0aCk7XG5cdFx0XHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0XHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApO1xuXHRcdFx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgYVNlbGVjdGVkQ29udGV4dHMsIFwidGFibGVcIik7XG5cdFx0XHRcdFx0XHQvLyBSZWZyZXNoIGVuYWJsZW1lbnQgb2YgZGVsZXRlIGJ1dHRvblxuXHRcdFx0XHRcdFx0RGVsZXRlSGVscGVyLnVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgYVNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1RhYmxlQVBJID0gb1RhYmxlID8gb1RhYmxlLmdldFBhcmVudCgpIDogbnVsbDtcblx0XHRcdFx0XHRcdGlmIChvVGFibGVBUEkpIHtcblx0XHRcdFx0XHRcdFx0KG9UYWJsZUFQSSBhcyBUYWJsZUFQSSkuc2V0VXBFbXB0eVJvd3Mob1RhYmxlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUF2YWlsYWJsZUNhcmRzKG9UYWJsZSk7XG5cdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkQXR0YWNoZWRcIiwgdHJ1ZSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIG9wdGltaXN0aWMgYmF0Y2ggcHJvbWlzZSBmb3IgdGhlIGVuYWJsZXIgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIFRoZSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSB0YWJsZUFQSSBUaGUgVGFibGVBUElcblx0ICovXG5cdHNldE9wdGltaXN0aWNCYXRjaFByb21pc2VGb3JNb2RlbDogZnVuY3Rpb24gKGNvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLCB0YWJsZUFQSTogVGFibGVBUEkpOiB2b2lkIHtcblx0XHRjb25zdCBtb2RlbCA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoKTtcblx0XHRpZiAobW9kZWwpIHtcblx0XHRcdHRhYmxlQVBJLnNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlKG5ldyBQcm9taXNlS2VlcGVyPGJvb2xlYW4+KCkpO1xuXHRcdFx0dGhpcy5zZXRPcHRpbWlzdGljQmF0Y2hGb3JNb2RlbChjb250cm9sbGVyLCBtb2RlbCwgdGFibGVBUEkpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogRW5hYmxlIHRoZSBvcHRpbWlzdGljIGJhdGNoIG1vZGUgaWYgYXZhaWxhYmxlLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlclxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICovXG5cdGVuYWJsZU9wdGltaXN0aWNCYXRjaE1vZGU6IGZ1bmN0aW9uIChjb250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgdGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyc1Byb3BlcnRpZXNBc1BvdGVudGlhbGx5U2Vuc2l0aXZlRGF0YU9yRGF0ZVR5cGUgPVxuXHRcdFx0dGFibGUgJiYgVGFibGVVdGlscy5pc0ZpbHRlckVsaWdpYmxlRm9yT3B0aW1pc3RpY0JhdGNoKHRhYmxlLCBjb250cm9sbGVyLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgRmlsdGVyQmFyKTtcblx0XHQodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlKCk/LnJlc29sdmUoIWZpbHRlcnNQcm9wZXJ0aWVzQXNQb3RlbnRpYWxseVNlbnNpdGl2ZURhdGFPckRhdGVUeXBlKTtcblx0fSxcblxuXHQvKipcblx0ICogU2V0dGVyIGZvciB0aGUgb3B0aW1pc3RpYyBiYXRjaCBlbmFibGVyIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlclxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsIFRoZSBPRGF0YSBNb2RlbFxuXHQgKiBAcGFyYW0gdGFibGVBUEkgVGhlIFRhYmxlQVBJXG5cdCAqIEBzZWUge3NhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsI3NldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJ9IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLlxuXHQgKi9cblx0c2V0T3B0aW1pc3RpY0JhdGNoRm9yTW9kZWw6IGZ1bmN0aW9uIChjb250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgZGF0YU1vZGVsOiBPRGF0YU1vZGVsLCB0YWJsZUFQSTogVGFibGVBUEkpOiB2b2lkIHtcblx0XHRjb25zdCBpc09wdGltaXN0aWNCYXRjaEhhc1RvQmVFbmFibGVkID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCkuaXNGbHBPcHRpbWlzdGljQmF0Y2hQbHVnaW5Mb2FkZWQoKTtcblx0XHRpZiAoZGF0YU1vZGVsLmdldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIoKSA9PT0gbnVsbCAmJiAhdGFibGVBUEkuaXNPcHRpbWlzdGljQmF0Y2hEaXNhYmxlZCgpICYmIGlzT3B0aW1pc3RpY0JhdGNoSGFzVG9CZUVuYWJsZWQpIHtcblx0XHRcdGNvbnN0IG9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlS2VlcGVyID0gdGFibGVBUEkuZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UoKTtcblx0XHRcdGRhdGFNb2RlbC5zZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyKGZ1bmN0aW9uICgpOiBQcm9taXNlPGJvb2xlYW4+IHwgdW5kZWZpbmVkIHtcblx0XHRcdFx0cmV0dXJuIG9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlS2VlcGVyPy5wcm9taXNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXG5cdHJlYmluZDogYXN5bmMgZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIG9CaW5kaW5nSW5mbzogQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvVGFibGVBUEkgPSBvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3QgYklzU3VzcGVuZGVkID0gb1RhYmxlQVBJPy5nZXRQcm9wZXJ0eShcImJpbmRpbmdTdXNwZW5kZWRcIik7XG5cdFx0b1RhYmxlQVBJPy5zZXRQcm9wZXJ0eShcIm91dERhdGVkQmluZGluZ1wiLCBiSXNTdXNwZW5kZWQpO1xuXHRcdGlmICghYklzU3VzcGVuZGVkKSB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUuY2xlYXJTZWxlY3Rpb24ob1RhYmxlKTtcblx0XHRcdFRhYmxlRGVsZWdhdGVCYXNlLnJlYmluZC5hcHBseSh0aGlzLCBbb1RhYmxlLCBvQmluZGluZ0luZm9dKTtcblx0XHRcdFRhYmxlVXRpbHMub25UYWJsZUJvdW5kKG9UYWJsZSk7XG5cdFx0XHRyZXR1cm4gVGFibGVVdGlscy53aGVuQm91bmQob1RhYmxlKVxuXHRcdFx0XHQudGhlbigodGFibGU6IFRhYmxlKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5oYW5kbGVUYWJsZURhdGFSZWNlaXZlZCh0YWJsZSwgdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0YWJsZSB0byBiZSBib3VuZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fSxcblxuXHQvKipcblx0ICogRmV0Y2hlcyB0aGUgcmVsZXZhbnQgbWV0YWRhdGEgZm9yIHRoZSB0YWJsZSBhbmQgcmV0dXJucyBwcm9wZXJ0eSBpbmZvIGFycmF5LlxuXHQgKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHByb3BlcnR5IGluZm9cblx0ICovXG5cdGZldGNoUHJvcGVydGllczogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+IHtcblx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmZldGNoTW9kZWwodGFibGUpXG5cdFx0XHQudGhlbihhc3luYyAobW9kZWwpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiA9PiB7XG5cdFx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0YWJsZSk7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9nZXRDYWNoZWRPckZldGNoUHJvcGVydGllc0ZvckVudGl0eShcblx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KHRhYmxlLCBcImVudGl0eVR5cGVcIikgPz8gXCJcIixcblx0XHRcdFx0XHRtb2RlbC5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigocHJvcGVydGllcykgPT4ge1xuXHRcdFx0XHQodGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0KT8uc2V0UHJvcGVydHkoXCJ0YWJsZVByb3BlcnRpZXNBdmFpbGFibGVcIiwgdHJ1ZSk7XG5cdFx0XHRcdHJldHVybiBwcm9wZXJ0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0cHJlSW5pdDogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiAoVGFibGVEZWxlZ2F0ZUJhc2UucHJlSW5pdCBhcyAodGFibGU6IFRhYmxlKSA9PiBQcm9taXNlPHZvaWQ+KS5hcHBseSh0aGlzLCBbdGFibGVdKS50aGVuKCgpID0+IHtcblx0XHRcdC8qKlxuXHRcdFx0ICogU2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3cgdG8gYXZvaWQgaW5oZXJpdGluZ1xuXHRcdFx0ICogdGhlIHdyb25nIGNvbnRleHQgYW5kIHJlcXVlc3RpbmcgdGhlIHRhYmxlIGNvbHVtbnMgb24gdGhlIHBhcmVudCBlbnRpdHlcblx0XHRcdCAqIFNldCB0aGUgY29ycmVjdCBiaW5kaW5nIGNvbnRleHQgaW4gT2JqZWN0UGFnZUNvbnRyb2xsZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KClcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3QgZmFzdENyZWF0aW9uUm93ID0gdGFibGUuZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGlmIChmYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0ZmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG51bGwgYXMgdW5rbm93biBhcyBDb250ZXh0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9KTtcblx0fSxcblx0dXBkYXRlQmluZGluZ0luZm86IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSSA9IG5ldyBDb2xsZWN0aW9uQmluZGluZ0luZm9BUEkoYmluZGluZ0luZm8pO1xuXHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFwiaXNJbnNpZ2h0c0VuYWJsZWRcIiwgdHJ1ZSk7XG5cdFx0VGFibGVEZWxlZ2F0ZUJhc2UudXBkYXRlQmluZGluZ0luZm8uYXBwbHkodGhpcywgW3RhYmxlLCBiaW5kaW5nSW5mb10pO1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLl9oYW5kbGVTb3J0ZXJzT25DdXJyZW5jaWVzT3JVb00odGFibGUsIGJpbmRpbmdJbmZvKTtcblx0XHRcdHRoaXMuX2ludGVybmFsVXBkYXRlQmluZGluZ0luZm8odGFibGUsIGJpbmRpbmdJbmZvKTtcblx0XHRcdHRoaXMuc2V0VGFibGVOb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2UodGFibGUsIGJpbmRpbmdJbmZvKTtcblx0XHRcdHRoaXMuX2hhbmRsZVJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cdFx0XHR0aGlzLl9oYW5kbGVGaWx0ZXJzRm9yRXh0ZXJuYWxJRCh0YWJsZSwgYmluZGluZ0luZm8pO1xuXG5cdFx0XHR0YWJsZS5nZXRQYXJlbnQoKT8uZmlyZUV2ZW50KFwiYmVmb3JlUmViaW5kVGFibGVcIiwgeyBjb2xsZWN0aW9uQmluZGluZ0luZm86IGNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSSB9KTtcblx0XHRcdGNvbnN0IGF0dGFjaGVkRXZlbnRzID0gY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJLmdldEF0dGFjaGVkRXZlbnRzKCk7XG5cdFx0XHQvKipcblx0XHRcdCAqIFdlIGhhdmUgdG8gc2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3cgdG8gYXZvaWQgaXQgaW5oZXJpdGluZ1xuXHRcdFx0ICogdGhlIHdyb25nIGNvbnRleHQgYW5kIHJlcXVlc3RpbmcgdGhlIHRhYmxlIGNvbHVtbnMgZm9yIHRoZSBwYXJlbnQgZW50aXR5XG5cdFx0XHQgKiBUaGUgY29ycmVjdCBiaW5kaW5nIGNvbnRleHQgaXMgc2V0IGluIE9iamVjdFBhZ2VDb250cm9sbGVyLmVuYWJsZUZhc3RDcmVhdGlvblJvdygpXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGNvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5cdFx0XHRpZiAodGFibGUuZ2V0Q3JlYXRpb25Sb3coKT8uZ2V0QmluZGluZ0NvbnRleHQoKSA9PT0gbnVsbCAmJiBiaW5kaW5nSW5mby5wYXRoICYmIGNvbnRleHQpIHtcblx0XHRcdFx0VGFibGVIZWxwZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KFxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXHRcdFx0XHRcdHRhYmxlLmdldENyZWF0aW9uUm93KCksXG5cdFx0XHRcdFx0YmluZGluZ0luZm8ucGF0aCxcblx0XHRcdFx0XHRjb250ZXh0IGFzIHY0Q29udGV4dCxcblx0XHRcdFx0XHR0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwsXG5cdFx0XHRcdFx0UHJvbWlzZS5yZXNvbHZlKClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdHRhYmxlQVBJLnNldEF0dGFjaEV2ZW50cyhhdHRhY2hlZEV2ZW50cyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgdXBkYXRpbmcgdGhlIGJpbmRpbmcgaW5mb1wiLCBlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9LFxuXG5cdF9oYW5kbGVTb3J0ZXJzT25DdXJyZW5jaWVzT3JVb006IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBzb3J0ZXJzOiBTb3J0ZXJbXSB8IHVuZGVmaW5lZCA9IGJpbmRpbmdJbmZvLnNvcnRlcjtcblx0XHRjb25zdCBuZXdTb3J0ZXJzVG9CZUFwcGxpZWQ6IFNvcnRlcltdID0gW107XG5cdFx0aWYgKHNvcnRlcnM/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdGNvbnN0IHRhYmxlUHJvcGVydGllcyA9IHRhYmxlQVBJLmdldENhY2hlZFByb3BlcnR5SW5mb3MoKTtcblx0XHRcdGZvciAoY29uc3Qgc29ydGVyIG9mIHNvcnRlcnMpIHtcblx0XHRcdFx0Y29uc3QgdGFibGVQcm9wZXJ0eSA9IHRhYmxlUHJvcGVydGllcz8uZmluZCgocHJvcGVydHkpID0+IHByb3BlcnR5LnBhdGggPT09IHNvcnRlci5nZXRQYXRoKCkpO1xuXHRcdFx0XHRpZiAodGFibGVQcm9wZXJ0eT8udW5pdCkge1xuXHRcdFx0XHRcdGNvbnN0IHVuaXRQcm9wZXJ0eSA9IHRhYmxlUHJvcGVydGllcz8uZmluZCgocHJvcGVydHkpID0+IHByb3BlcnR5LmtleSA9PT0gdGFibGVQcm9wZXJ0eT8udW5pdCk7XG5cdFx0XHRcdFx0Y29uc3QgdW5pdFNvcnRlckF2YWlsYWJsZSA9IHVuaXRQcm9wZXJ0eT8ucGF0aCAmJiBzb3J0ZXJzLnNvbWUoKHNvcnQpID0+IHNvcnQuZ2V0UGF0aCgpID09PSB1bml0UHJvcGVydHkucGF0aCk7XG5cdFx0XHRcdFx0aWYgKCF1bml0U29ydGVyQXZhaWxhYmxlICYmIHVuaXRQcm9wZXJ0eT8uc29ydGFibGUgIT09IGZhbHNlICYmIHVuaXRQcm9wZXJ0eT8ucGF0aCkge1xuXHRcdFx0XHRcdFx0bmV3U29ydGVyc1RvQmVBcHBsaWVkLnB1c2gobmV3IFNvcnRlcih1bml0UHJvcGVydHkucGF0aCwgZmFsc2UpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0bmV3U29ydGVyc1RvQmVBcHBsaWVkLnB1c2goc29ydGVyKTtcblx0XHRcdH1cblx0XHRcdGJpbmRpbmdJbmZvLnNvcnRlciA9IG5ld1NvcnRlcnNUb0JlQXBwbGllZDtcblx0XHR9XG5cdH0sXG5cblx0X2hhbmRsZUZpbHRlcnNGb3JFeHRlcm5hbElEOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCk/LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGVudGl0eVR5cGVQYXRoID0gYmluZGluZ0luZm8ucGF0aCArIFwiL1wiO1xuXHRcdGNvbnN0IGZpbHRlcnMgPSBiaW5kaW5nSW5mby5maWx0ZXJzPy5nZXRGaWx0ZXJzKCk7XG5cdFx0aWYgKGZpbHRlcnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0VGFibGVVdGlscy51cGRhdGVGaWx0ZXJzRm9yRXh0ZXJuYWxJRChtZXRhTW9kZWwsIGZpbHRlcnMgYXMgdW5rbm93biBhcyBDb25kaXRpb25PYmplY3RbXSwgZW50aXR5VHlwZVBhdGgpO1xuXHRcdH1cblx0fSxcblxuXHRfaGFuZGxlUmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHM6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIG9CaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGFibGVBUEk/LmdldFBhZ2VDb250cm9sbGVyKCk7XG5cdFx0aWYgKGNvbnRyb2xsZXI/LnJlY29tbWVuZGF0aW9ucy5pc1JlY29tbWVuZGF0aW9uRW5hYmxlZCgpKSB7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0Y29uc3QgdGFibGVEZWYgPSB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcyA9IGFwcENvbXBvbmVudFxuXHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0LmdldFJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzKHRhYmxlRGVmLmFubm90YXRpb24uZW50aXR5VHlwZU5hbWUpO1xuXHRcdFx0aWYgKHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcyAmJiByZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMubGVuZ3RoID4gMCAmJiBvQmluZGluZ0luZm8ucGFyYW1ldGVycykge1xuXHRcdFx0XHRvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VsZWN0ID0gb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnM/LiRzZWxlY3Q/LmNvbmNhdChcIixcIiwgcmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzLmpvaW4oKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBVcGRhdGUgdGhlIGNhcmRzIHdoZW4gdGhlIGJpbmRpbmcgaXMgcmVmcmVzaGVkLlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIG1kYyB0YWJsZSBjb250cm9sLlxuXHQgKi9cblx0X3VwZGF0ZUF2YWlsYWJsZUNhcmRzOiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRpZiAodGFibGVBUEkuZ2V0UGFnZUNvbnRyb2xsZXIoKS5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKT8uY29udmVydGVyVHlwZSA9PT0gXCJMaXN0UmVwb3J0XCIpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRhYmxlQVBJPy5nZXRQYWdlQ29udHJvbGxlcigpPy5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRcdGNvbnN0IGNhcmRzOiBXcmFwcGVkQ2FyZFtdID0gW107XG5cdFx0XHRhd2FpdCB0YWJsZUFQSS5jb2xsZWN0QXZhaWxhYmxlQ2FyZHMoY2FyZHMpO1xuXHRcdFx0Y29uc3QgY29sbGFib3JhdGlvbk1hbmFnZXIgPSBuZXcgQ29sbGFib3JhdGlvbk1hbmFnZXIoKTtcblx0XHRcdGNvbnN0IGNhcmRPYmplY3QgPSBjb2xsYWJvcmF0aW9uTWFuYWdlci51cGRhdGVDYXJkcyhjYXJkcyk7XG5cdFx0XHRjb25zdCBwYXJlbnRBcHBJZCA9IGFwcENvbXBvbmVudC5nZXRJZCgpO1xuXHRcdFx0YXBwQ29tcG9uZW50LmdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpLmFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlcihjYXJkT2JqZWN0LCBwYXJlbnRBcHBJZCk7XG5cdFx0XHRhcHBDb21wb25lbnQuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCkuc2hhcmVBdmFpbGFibGVDYXJkcygpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVGhlIGhvb2sgaW1wbGVtZW50ZWQgYnkgTURDIHRoYXQgd2UgY2FuIG92ZXJyaWRlLlxuXHQgKiBUaGlzIGFsbG93cyB1cyB0byBkZWZpbmUgcHJvcGVydGllcyB0byBiZSByZXF1ZXN0ZWQgaW4gdGhlIE1EQyB0YWJsZSAoTWFpbiBjYXNlIGlzIGZvciB0aGUgYW5hbHl0aWNhbCB0YWJsZSkuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgbWRjIHRhYmxlIGNvbnRyb2wuXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWUgdG8gYmUgcmVxdWVzdGVkLlxuXHQgKi9cblx0Z2V0SW5SZXN1bHRQcm9wZXJ0eUtleXM6IGZ1bmN0aW9uICh0YWJsZTogTURDVGFibGUpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRpZiAodGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwpIHtcblx0XHRcdGNvbnN0IGFsbEtrZXlzUmVxdWVzdGVkID0gdGhpcy5jaGVja0FsbEtleXNBcmVSZXF1ZXN0ZWQodGFibGVBUEkpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHQvLyBpZiBhIHJvd3ByZXNzIGlzIG92ZXJyaWRkZW4sIHdlICBzaG91bGQgZW5hYmxlIHRoZSBuYXZpZ2F0aW9uIGF0IHRoZSBub2RlIGxldmVsXG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShcImlzTm9kZUxldmVsTmF2aWdhYmxlXCIsIHRhYmxlQVBJLm92ZXJyaWRlUm93UHJlc3MgPyB0cnVlIDogYWxsS2tleXNSZXF1ZXN0ZWQpO1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0T2JqZWN0LmtleXModGFibGVBUEkudGFibGVEZWZpbml0aW9uLnJlcXVlc3RBdExlYXN0KVxuXHRcdFx0XHRcdC8vIGZvciBhbmFseXRpYyB0YWJsZXMgd2l0aCBhZ2dyZWdhdGlvbk9uTGVhZkxldmVsIHdlIHNob3VsZCBub3QgcmVxdWVzdCB0aGUgc2VtYW50aWNLZXkgZXhwZWN0ZWQgd2hlbiBhbGwga2V5cyBhcmUgcmVxdWVzdGVkIC0+ICBpdCB3aWxsIHBlcm1pdHMgdG8gbmF2aWdhdGUgZnJvbSBhIG5vZGUgbGV2ZWwgd2hlbiBzZW1hbnRpY0tleSBhcmUgZW5hYmxlZFxuXHRcdFx0XHRcdC8vIHJlc3RyaWN0aW9uIGFyZSBhbHNvIGV4Y2x1ZGVkIGFzIHdlIGNhbm5vdCBkZXN0aW5ndWlzaCBiZXR3ZWVuIGEgbm9kZSBhbmQgYSBhZ2dyZWdhdGlvbiBsZXZlbFxuXG5cdFx0XHRcdFx0LmZpbHRlcigoZmllbGROYW1lOiBzdHJpbmcpID0+XG5cdFx0XHRcdFx0XHQhYWxsS2tleXNSZXF1ZXN0ZWRcblx0XHRcdFx0XHRcdFx0PyB0YWJsZUFQSS50YWJsZURlZmluaXRpb24ucmVxdWVzdEF0TGVhc3RbZmllbGROYW1lXS5zb21lKFxuXHRcdFx0XHRcdFx0XHRcdFx0KG9yaWdpbikgPT4gb3JpZ2luICE9PSBcInJlc3RyaWN0aW9uXCIgJiYgb3JpZ2luICE9PSBcInNlbWFudGljS2V5XCJcblx0XHRcdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0XHRcdDogdHJ1ZVxuXHRcdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBPYmplY3Qua2V5cyh0YWJsZUFQSS50YWJsZURlZmluaXRpb24ucmVxdWVzdEF0TGVhc3QgPz8ge30pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBhbGwga2V5cygpIGV4Y2VwdGVkIElzQWN0aXZlRW50aXR5KSBhcmUgcmVxdWVzdGVkIGluIHRoZSB0YWJsZS5cblx0ICogQHBhcmFtIHRhYmxlQVBJIFRoZSB0YWJsZSBBUElcblx0ICogQHJldHVybnMgIFRydWUgaWYgYWxsIGtleXMgYXJlIHJlcXVlc3RlZCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRjaGVja0FsbEtleXNBcmVSZXF1ZXN0ZWQ6IGZ1bmN0aW9uICh0YWJsZUFQSTogVGFibGVBUEkpOiBib29sZWFuIHtcblx0XHRjb25zdCB0YWJsZSA9IHRhYmxlQVBJLmdldENvbnRlbnQoKTtcblx0XHRjb25zdCBhbGxDb2x1bW5zID0gdGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29sdW1ucyBhcyAoVGFibGVDb2x1bW4gJiB7IGlzS2V5OiBib29sZWFuOyByZWxhdGl2ZVBhdGg6IHN0cmluZyB9KVtdO1xuXHRcdGNvbnN0IGtleVByb3BlcnR5TmFtZXMgPSBhbGxDb2x1bW5zXG5cdFx0XHQuZmlsdGVyKChjKSA9PiBjLmlzS2V5ICYmIGMucmVsYXRpdmVQYXRoICYmIGMucmVsYXRpdmVQYXRoICE9PSBcIklzQWN0aXZlRW50aXR5XCIpXG5cdFx0XHQubWFwKChjKSA9PiBjLnJlbGF0aXZlUGF0aCk7XG5cblx0XHRjb25zdCBkaXNwbGF5ZWRDb2x1bW5zID0gdGFibGVcblx0XHRcdC5nZXRDb2x1bW5zKClcblx0XHRcdC5tYXAoKGNvbHVtbikgPT4gdGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29sdW1ucy5maW5kKChjKSA9PiBjLm5hbWUgPT09IGNvbHVtbi5nZXRQcm9wZXJ0eUtleSgpKSk7XG5cblx0XHQvLyBTdG9yZSBhbGwgcHJvcGVydGllcyByZWZlcmVuY2VkIGJ5IGRpc3BsYXllZCBjb2x1bW5zIGluIGEgU2V0XG5cdFx0Y29uc3QgcmVmZXJlbmNlZFByb3BlcnR5UGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0XHRmdW5jdGlvbiBwcm9jZXNzQ29sdW1uKGNvbDogQW5ub3RhdGlvblRhYmxlQ29sdW1uKTogdm9pZCB7XG5cdFx0XHQvLyBBZGQgdGhlIHByb3BlcnR5IG5hbWUgZnJvbSBjb2x1bW4gaXRzZWxmIGlmIGl0J3Mgbm90IGEgY29tcGxleCBwcm9wZXJ0eUluZm9cblx0XHRcdGlmIChjb2wucmVsYXRpdmVQYXRoICYmIGNvbC5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmVmZXJlbmNlZFByb3BlcnR5UGF0aHMuYWRkKGNvbC5yZWxhdGl2ZVBhdGgpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdGhlIGFkZGl0aW9uYWwgcHJvcGVydGllcyByZWZlcmVuY2VkIGJ5IHRoZSBjb2x1bW5cblx0XHRcdGNvbC5leHRlbnNpb24/LmFkZGl0aW9uYWxQcm9wZXJ0aWVzPy5mb3JFYWNoKChhZGRpdGlvbmFsQ29sdW1uTmFtZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBhZGRpdGlvbmFsQ29sdW1uID0gYWxsQ29sdW1ucy5maW5kKChjKSA9PiBjLm5hbWUgPT09IGFkZGl0aW9uYWxDb2x1bW5OYW1lKTtcblx0XHRcdFx0aWYgKGFkZGl0aW9uYWxDb2x1bW4/LnJlbGF0aXZlUGF0aCkge1xuXHRcdFx0XHRcdHJlZmVyZW5jZWRQcm9wZXJ0eVBhdGhzLmFkZChhZGRpdGlvbmFsQ29sdW1uLnJlbGF0aXZlUGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRkaXNwbGF5ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdFx0aWYgKCFjb2x1bW4pIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gUHJvY2VzcyB0aGUgY29sdW1uIGl0c2VsZlxuXHRcdFx0cHJvY2Vzc0NvbHVtbihjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKTtcblxuXHRcdFx0Ly8gUHJvY2VzcyB0aGUgY29sdW1ucyByZWZlcmVuY2VkIGJ5IHRoZSBjb2x1bW5cblx0XHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5mb3JFYWNoKChyZWxhdGVkQ29sdW1uTmFtZSkgPT4ge1xuXHRcdFx0XHRjb25zdCByZWxhdGVkQ29sdW1uID0gYWxsQ29sdW1ucy5maW5kKChjKSA9PiBjLm5hbWUgPT09IHJlbGF0ZWRDb2x1bW5OYW1lKTtcblx0XHRcdFx0aWYgKHJlbGF0ZWRDb2x1bW4pIHtcblx0XHRcdFx0XHRwcm9jZXNzQ29sdW1uKHJlbGF0ZWRDb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4ga2V5UHJvcGVydHlOYW1lcy5ldmVyeSgocHJvcE5hbWUpID0+IHByb3BOYW1lICYmIHJlZmVyZW5jZWRQcm9wZXJ0eVBhdGhzLmhhcyhwcm9wTmFtZSkpO1xuXHR9LFxuXHQvKipcblx0ICogR2V0cyB0aGUgc2VhcmNoIHF1ZXJ5IGZvciBhbmFseXRpY2FsIGFuZCBub24gYW5hbHl0aWNhbCBvZGF0YUxpc3RCaW5kaW5nLlxuXHQgKiBAcGFyYW0gYmluZGluZyBUaGUgb0RhdGFMaXN0QmluZGluZyBpbnN0YW5jZS5cblx0ICogQHJldHVybnMgVGhlIHNlYXJjaCBxdWVyeSBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1bmRlZmluZWQuXG5cdCAqL1xuXHRnZXRTZWFyY2hRdWVyeTogZnVuY3Rpb24gKGJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uID0gYmluZGluZy5nZXRBZ2dyZWdhdGlvbj8uKCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uPy5zZWFyY2ggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gRm9yIGFuYWx5dGljYWwgdGFibGVzLCB0aGUgc2VhcmNoIHF1ZXJ5IGlzIHN0b3JlZCBpbiB0aGUgYWdncmVnYXRpb25cblx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbi5zZWFyY2ggYXMgc3RyaW5nO1xuXHRcdH1cblx0XHQvLyBJZiBub3QgZm91bmQgaW4gYWdncmVnYXRpb24sIGNoZWNrIHRoZSBxdWVyeSBvcHRpb25zXG5cdFx0cmV0dXJuIGJpbmRpbmcuZ2V0UXVlcnlPcHRpb25zRnJvbVBhcmFtZXRlcnMoKS4kc2VhcmNoO1xuXHR9LFxuXHR1cGRhdGVCaW5kaW5nOiBmdW5jdGlvbiAodGFibGU6IE1EQ1RhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvLCBiaW5kaW5nPzogT0RhdGFMaXN0QmluZGluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3QgYklzU3VzcGVuZGVkID0gdGFibGVBUEk/LmdldFByb3BlcnR5KFwiYmluZGluZ1N1c3BlbmRlZFwiKTtcblx0XHRpZiAoIWJJc1N1c3BlbmRlZCkge1xuXHRcdFx0bGV0IG5lZWRNYW51YWxSZWZyZXNoID0gZmFsc2U7XG5cdFx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSk7XG5cdFx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5ID0gXCJwZW5kaW5nTWFudWFsQmluZGluZ1VwZGF0ZVwiO1xuXHRcdFx0Y29uc3QgcGVuZGluZ01hbnVhbFVwZGF0ZSA9IGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5KSBhcyBib29sZWFuO1xuXHRcdFx0Y29uc3QgbmV3U29ydGVycyA9IEpTT04uc3RyaW5naWZ5KGJpbmRpbmdJbmZvLnNvcnRlciA/PyBbXSk7XG5cblx0XHRcdGlmIChiaW5kaW5nKSB7XG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiBNYW51YWwgcmVmcmVzaCBpZiBmaWx0ZXJzIGFyZSBub3QgY2hhbmdlZCBieSBiaW5kaW5nLnJlZnJlc2goKSBzaW5jZSB1cGRhdGluZyB0aGUgYmluZGluZ0luZm9cblx0XHRcdFx0ICogaXMgbm90IGVub3VnaCB0byB0cmlnZ2VyIGEgYmF0Y2ggcmVxdWVzdC5cblx0XHRcdFx0ICogUmVtb3ZpbmcgY29sdW1ucyBjcmVhdGVzIG9uZSBiYXRjaCByZXF1ZXN0IHRoYXQgd2FzIG5vdCBleGVjdXRlZCBiZWZvcmVcblx0XHRcdFx0ICovXG5cdFx0XHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldz8uZ2V0Vmlld0RhdGEoKSBhcyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncztcblx0XHRcdFx0Y29uc3Qgb2xkRmlsdGVycyA9IGJpbmRpbmcuZ2V0RmlsdGVycyhcIkFwcGxpY2F0aW9uXCIpO1xuXHRcdFx0XHRjb25zdCBwcmV2aW91c1NvcnRlcnMgPSBpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShQUkVWSU9VU19TT1JURVJTKSA/PyBcIltdXCI7XG5cblx0XHRcdFx0Y29uc3QgZmlsdGVyTm90Q2hhbmdlZCA9XG5cdFx0XHRcdFx0KChiaW5kaW5nSW5mby5maWx0ZXJzID09PSBudWxsICYmIG9sZEZpbHRlcnMubGVuZ3RoID09PSAwKSB8fCAvLyBvbiBhbmFseXRpY2FsIHRhYmxlcywgdGhlIGZpbHRlcnMgYXJlIHNldCB0byBudWxsIHdoZW4gbm8gZmlsdGVyc1xuXHRcdFx0XHRcdFx0ZGVlcEVxdWFsKGJpbmRpbmdJbmZvLmZpbHRlcnMsIG9sZEZpbHRlcnNbMF0pKSAmJlxuXHRcdFx0XHRcdG5ld1NvcnRlcnMgPT09IHByZXZpb3VzU29ydGVycyAmJlxuXHRcdFx0XHRcdGJpbmRpbmdJbmZvLnBhdGggPT09IGJpbmRpbmcuZ2V0UGF0aCgpICYmIC8vIFRoZSBwYXRoIGNhbiBiZSBjaGFuZ2VkIGluIGNhc2Ugb2YgYSBwYXJhbWV0cml6ZWQgZW50aXR5XG5cdFx0XHRcdFx0dGhpcy5nZXRTZWFyY2hRdWVyeShiaW5kaW5nKSA9PT0gYmluZGluZ0luZm8/LnBhcmFtZXRlcnM/LiRzZWFyY2g7XG5cdFx0XHRcdGNvbnN0IExSTXVsdGlWaWV3RW5hYmxlZCA9ICEhdmlld0RhdGEudmlld3M7XG5cblx0XHRcdFx0bmVlZE1hbnVhbFJlZnJlc2ggPVxuXHRcdFx0XHRcdGZpbHRlck5vdENoYW5nZWQgJiZcblx0XHRcdFx0XHQoaW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoU0VBUkNIX0hBU19CRUVOX0ZJUkVEKSB8fCAvLyBjaGVjayBpZiB0aGUgc2VhcmNoIGhhcyBiZWVuIHRyaWdnZXJlZFxuXHRcdFx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoQ09MVU1OX0hBU19CRUVOX0FEREVEKSB8fCAvLyBjaGVjayBpZiBhIGNvbHVtbiBoYXMgYmVlbiBhZGRlZFxuXHRcdFx0XHRcdFx0TFJNdWx0aVZpZXdFbmFibGVkKSAmJiAvLyBpZiB0aGUgbXVsdGkgdmlldyBpcyBlbmFibGVkIHRoZSByZXF1ZXN0IHNob3VsZCBiZSByZWZyZXNoZWQgYXMgd2UgZG9uJ3Qga25vd24gaWYgdGhlIGNvbnRlbnQgb2YgdGhlIHRhYmxlIGlzIG91dGRhdGVkIGR1ZSB0byBhbiBhY3Rpb24gb24gYW5vdGhlciB0YWJsZVxuXHRcdFx0XHRcdCFwZW5kaW5nTWFudWFsVXBkYXRlO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQ2xlYW51cCBncm91cENvbmRpdGlvbnMgYW5kIGFnZ3JlZ2F0ZUNvbmRpdGlvbnMgaWYgdGhleSBkb24ndCBtYWtlIHNlbnNlXG5cdFx0XHRpZiAodGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuZW5hYmxlQW5hbHl0aWNzICE9PSB0cnVlKSB7XG5cdFx0XHRcdC8vIEFnZ3JlZ2F0ZSBjb25kaXRpb25zIG5ldmVyIG1ha2Ugc2Vuc2Ugb3V0c2lkZSBvZiBhbiBhbmFseXRpY2FsIHRhYmxlXG5cdFx0XHRcdHRhYmxlLnNldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoKTtcblxuXHRcdFx0XHQvLyBHcm91cCBjb25kaXRpb25zIGRvbid0IG1ha2Ugc2Vuc2UgaW4gYSBUcmVlIG9yIEdyaWQgdGFibGVcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJHcmlkVGFibGVcIiB8fFxuXHRcdFx0XHRcdHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0YWJsZS5zZXRHcm91cENvbmRpdGlvbnMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0VGFibGVEZWxlZ2F0ZUJhc2UudXBkYXRlQmluZGluZy5hcHBseSh0aGlzLCBbdGFibGUsIGJpbmRpbmdJbmZvLCBiaW5kaW5nXSk7XG5cdFx0XHQvLyB3ZSBzdG9yZSB0aGUgdGFibGUgYmluZGluZyBpbmZvIHRoYXQgd2FzIHVzZWQgdG8gYmluZCB0aGUgdGFibGUgaW4gdGhlIHRhYmxlIEFQSVxuXHRcdFx0Ly8gdGhpcyBuZWVkcyB0byBiZSBkb25lIGFmdGVyIHRoZSBjYWxsIHRvIFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmcgb3RoZXIgd2lzZSB3ZSBkb24ndCBnZXQgdGhlIGFnZ3JlZ2F0ZSBwYXJhbWV0ZXJzXG5cdFx0XHQvLyBvdGhlcndpc2UgdGhlcmUgaXMgbm8gd2F5IHRvIHJldHJpZXZlIHNvcnRlcnMgYWRkZWQgaW4gdGhlIG9uQmVmb3JlUmViaW5kVGFibGUgZXZlbnRcblx0XHRcdHRhYmxlQVBJLnNldFRhYmxlQmluZGluZ0luZm8oYmluZGluZ0luZm8pO1xuXHRcdFx0Ly8gd2UgbWFrZSB0aGUgY2FsbCB0byB1cGRhdGUgdGhlIGRvd25sb2FkIHVybCBidXQgZG8gbm90IGF3YWl0IGl0XG5cdFx0XHR0YWJsZUFQSS5zZXREb3dubG9hZFVybCgpO1xuXG5cdFx0XHR0YWJsZS5maXJlRXZlbnQoXCJiaW5kaW5nVXBkYXRlZFwiKTtcblx0XHRcdGlmIChuZWVkTWFudWFsUmVmcmVzaCAmJiB0YWJsZS5nZXRGaWx0ZXIoKSAmJiBiaW5kaW5nKSB7XG5cdFx0XHRcdGJpbmRpbmdcblx0XHRcdFx0XHQucmVxdWVzdFJlZnJlc2goYmluZGluZy5nZXRHcm91cElkKCkpXG5cdFx0XHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkobWFudWFsVXBkYXRlUHJvcGVydHlLZXksIGZhbHNlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZWZyZXNoaW5nIHRoZSB0YWJsZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkobWFudWFsVXBkYXRlUHJvcGVydHlLZXksIHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoU0VBUkNIX0hBU19CRUVOX0ZJUkVELCBmYWxzZSk7XG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShDT0xVTU5fSEFTX0JFRU5fQURERUQsIGZhbHNlKTtcblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFBSRVZJT1VTX1NPUlRFUlMsIG5ld1NvcnRlcnMpO1xuXG5cdFx0XHQvL2ZvciBUcmVldGFibGUsIGl0J3MgbmVjZXNzYXJ5IHRvIGNsZWFyIHRoZSBwYXN0YWJsZUNvbnRleHRzIHNpbmNlIHRoZSBiaW5kaW5nIGRlc3Ryb3lzIHByZXZpb3VzIGNvbnRleHRzLlxuXHRcdFx0aWYgKHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShcInBhc3RhYmxlQ29udGV4dHNcIiwgW10pO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBhdHRhY2hlZEV2ZW50cyA9IHRhYmxlQVBJLnN0b3JlZEV2ZW50cyA/PyBbXTtcblx0XHRcdGF0dGFjaGVkRXZlbnRzLmZvckVhY2goKHsgZXZlbnRJZCwgY2FsbGJhY2ssIGxpc3RlbmVyLCBkYXRhIH0pID0+IHtcblx0XHRcdFx0dGFibGUuZ2V0Um93QmluZGluZygpPy5hdHRhY2hFdmVudChldmVudElkLCBkYXRhLCBjYWxsYmFjaywgbGlzdGVuZXIpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRhYmxlQVBJPy5zZXRQcm9wZXJ0eShcIm91dERhdGVkQmluZGluZ1wiLCBiSXNTdXNwZW5kZWQpO1xuXHR9LFxuXG5cdF9jb21wdXRlUm93QmluZGluZ0luZm9Gcm9tVGVtcGxhdGU6IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKTogQ29sbGVjdGlvbkJpbmRpbmdJbmZvIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCByb3dCaW5kaW5nSW5mbyA9IHRhYmxlQVBJLmdldFRhYmxlVGVtcGxhdGVCaW5kaW5nSW5mbygpO1xuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0bGV0IHRhYmxlQ2FuQmVJbklubGluZUVkaXQgPSBmYWxzZTtcblx0XHRpZiAoXG5cdFx0XHRiaW5kaW5nQ29udGV4dCA9PT0gdW5kZWZpbmVkICYmXG5cdFx0XHRvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJ1aVwiKT8uZ2V0UHJvcGVydHkoXCJpc0VkaXRhYmxlXCIpID09PSBmYWxzZSAmJlxuXHRcdFx0b1RhYmxlLmdldE1vZGVsKFwidmlld0RhdGFcIik/LmdldFByb3BlcnR5KFwiL2lzSW5saW5lRWRpdEVuYWJsZWRcIilcblx0XHQpIHtcblx0XHRcdHRhYmxlQ2FuQmVJbklubGluZUVkaXQgPSB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHQoYmluZGluZ0NvbnRleHQgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpPy5nZXRCaW5kaW5nKCkuZ2V0VXBkYXRlR3JvdXBJZCgpID09IENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRFxuXHRcdCkge1xuXHRcdFx0dGFibGVDYW5CZUluSW5saW5lRWRpdCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHRhYmxlQ2FuQmVJbklubGluZUVkaXQpIHtcblx0XHRcdHJvd0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMgPz89IHt9O1xuXHRcdFx0cm93QmluZGluZ0luZm8ucGFyYW1ldGVycy4kJHVwZGF0ZUdyb3VwSWQgPSBDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQ7XG5cdFx0fVxuXG5cdFx0Ly8gaWYgdGhlIHJvd0JpbmRpbmdJbmZvIGhhcyBhICQkZ2V0S2VlcEFsaXZlQ29udGV4dCBwYXJhbWV0ZXIgd2UgbmVlZCB0byBjaGVjayBpdCBpcyB0aGUgb25seSBUYWJsZSB3aXRoIHN1Y2ggYVxuXHRcdC8vIHBhcmFtZXRlciBmb3IgdGhlIGNvbGxlY3Rpb25NZXRhUGF0aFxuXHRcdGlmIChyb3dCaW5kaW5nSW5mby5wYXJhbWV0ZXJzPy4kJGdldEtlZXBBbGl2ZUNvbnRleHQgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25QYXRoID0gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGE8c3RyaW5nPihvVGFibGUsIFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIikgPz8gXCJcIjtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSBvVGFibGUuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRjb25zdCBrZXB0QWxpdmVMaXN0cyA9IGludGVybmFsTW9kZWw/LmdldE9iamVjdChcIi9rZXB0QWxpdmVMaXN0c1wiKSA/PyB7fTtcblx0XHRcdGlmICgha2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdKSB7XG5cdFx0XHRcdGtlcHRBbGl2ZUxpc3RzW2NvbGxlY3Rpb25QYXRoXSA9IG9UYWJsZS5nZXRJZCgpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsPy5zZXRQcm9wZXJ0eShcIi9rZXB0QWxpdmVMaXN0c1wiLCBrZXB0QWxpdmVMaXN0cyk7XG5cdFx0XHR9IGVsc2UgaWYgKGtlcHRBbGl2ZUxpc3RzW2NvbGxlY3Rpb25QYXRoXSAhPT0gb1RhYmxlLmdldElkKCkpIHtcblx0XHRcdFx0ZGVsZXRlIHJvd0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRnZXRLZWVwQWxpdmVDb250ZXh0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByb3dCaW5kaW5nSW5mbztcblx0fSxcblx0X2ludGVybmFsVXBkYXRlQmluZGluZ0luZm86IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBvQmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdE9iamVjdC5hc3NpZ24ob0JpbmRpbmdJbmZvLCB0aGlzLl9jb21wdXRlUm93QmluZGluZ0luZm9Gcm9tVGVtcGxhdGUob1RhYmxlKSk7XG5cdFx0LyoqXG5cdFx0ICogQmluZGluZyBpbmZvIG1pZ2h0IGJlIHN1c3BlbmRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlIGZpcnN0IGJpbmRSb3dzIGlzIGNhbGxlZDpcblx0XHQgKiBUbyBhdm9pZCBkdXBsaWNhdGUgcmVxdWVzdHMgYnV0IHN0aWxsIGhhdmUgYSBiaW5kaW5nIHRvIGNyZWF0ZSBuZXcgZW50cmllcy5cdFx0XHRcdCAqXG5cdFx0ICogQWZ0ZXIgdGhlIGluaXRpYWwgYmluZGluZyBzdGVwLCBmb2xsb3cgdXAgYmluZGluZ3Mgc2hvdWxkIG5vIGxvbmdlciBiZSBzdXNwZW5kZWQuXG5cdFx0ICovXG5cdFx0aWYgKG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5zdXNwZW5kZWQgPSBmYWxzZTtcblx0XHR9XG5cdFx0Ly8gVGhlIHByZXZpb3VzbHkgYWRkZWQgaGFuZGxlciBmb3IgdGhlIGV2ZW50ICdkYXRhUmVjZWl2ZWQnIGlzIG5vdCBhbnltb3JlIHRoZXJlXG5cdFx0Ly8gc2luY2UgdGhlIGJpbmRpbmdJbmZvIGlzIHJlY3JlYXRlZCBmcm9tIHNjcmF0Y2ggc28gd2UgbmVlZCB0byBzZXQgdGhlIGZsYWcgdG8gZmFsc2UgaW4gb3JkZXJcblx0XHQvLyB0byBhZ2FpbiBhZGQgdGhlIGhhbmRsZXIgb24gdGhpcyBldmVudCBpZiBuZWVkZWRcblx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiLCBmYWxzZSk7XG5cdFx0fVxuXG5cdFx0bGV0IG9GaWx0ZXI7XG5cdFx0Y29uc3Qgb0ZpbHRlckluZm8gPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8ob1RhYmxlKTtcblx0XHQvLyBQcmVwYXJlIGJpbmRpbmcgaW5mbyB3aXRoIGZpbHRlci9zZWFyY2ggcGFyYW1ldGVyc1xuXHRcdGlmIChvRmlsdGVySW5mby5maWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdG9GaWx0ZXIgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogb0ZpbHRlckluZm8uZmlsdGVycywgYW5kOiB0cnVlIH0pO1xuXHRcdH1cblx0XHRpZiAob0ZpbHRlckluZm8uYmluZGluZ1BhdGgpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5wYXRoID0gb0ZpbHRlckluZm8uYmluZGluZ1BhdGg7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0RhdGFTdGF0ZUluZGljYXRvciA9IG9UYWJsZS5nZXREYXRhU3RhdGVJbmRpY2F0b3IoKTtcblx0XHRpZiAob0RhdGFTdGF0ZUluZGljYXRvciAmJiBvRGF0YVN0YXRlSW5kaWNhdG9yLmlzRmlsdGVyaW5nKCkpIHtcblx0XHRcdC8vIEluY2x1ZGUgZmlsdGVycyBvbiBtZXNzYWdlU3RyaXBcblx0XHRcdGlmICgob0JpbmRpbmdJbmZvLmZpbHRlcnMgYXMgdW5rbm93biBhcyBGaWx0ZXJbXSkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nSW5mb0ZpbHRlcnMgPSAob0JpbmRpbmdJbmZvLmZpbHRlcnMgYXMgdW5rbm93biBhcyBGaWx0ZXJbXSkuZmlsdGVyKChmaWx0ZXIpID0+IGZpbHRlciAhPT0gRmlsdGVyLk5PTkUpO1xuXHRcdFx0XHRvRmlsdGVyID0gbmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0ZmlsdGVyczogYmluZGluZ0luZm9GaWx0ZXJzLmNvbmNhdChvRmlsdGVySW5mby5maWx0ZXJzKSxcblx0XHRcdFx0XHRhbmQ6IHRydWVcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMudXBkYXRlQmluZGluZ0luZm9XaXRoU2VhcmNoUXVlcnkob0JpbmRpbmdJbmZvLCBvRmlsdGVySW5mbywgb0ZpbHRlcik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudXBkYXRlQmluZGluZ0luZm9XaXRoU2VhcmNoUXVlcnkob0JpbmRpbmdJbmZvLCBvRmlsdGVySW5mbywgb0ZpbHRlcik7XG5cdFx0fVxuXG5cdFx0dGhpcy5hZGRGaWx0ZXJPbkFjdGl2ZUVudGl0aWVzKG9UYWJsZSwgb0JpbmRpbmdJbmZvKTtcblx0fSxcblxuXHR1cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeTogZnVuY3Rpb24gKGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8sIGZpbHRlckluZm86IEludGVybmFsQmluZGluZ0luZm8sIGZpbHRlcj86IEZpbHRlcikge1xuXHRcdGJpbmRpbmdJbmZvLmZpbHRlcnMgPSBmaWx0ZXI7XG5cdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycyA/Pz0ge307XG5cdFx0aWYgKGZpbHRlckluZm8uc2VhcmNoKSB7XG5cdFx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2ggPSBDb21tb25VdGlscy5ub3JtYWxpemVTZWFyY2hUZXJtKGZpbHRlckluZm8uc2VhcmNoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIElmIHNwZWNpZmllZCBpbiB0aGUgcGF5bG9hZCwgYWRkcyBhIGZpbHRlciB0byBkaXNwbGF5IG9ubHkgYWN0aXZlIGVudGl0aWVzLlxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIGJpbmRpbmdJbmZvXG5cdCAqL1xuXHRhZGRGaWx0ZXJPbkFjdGl2ZUVudGl0aWVzOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3QgcGF5bG9hZCA9IHRhYmxlLmdldFBheWxvYWQoKSBhcyB7IGZpbHRlck9uQWN0aXZlRW50aXRpZXM/OiBib29sZWFuIH07XG5cblx0XHRpZiAocGF5bG9hZD8uZmlsdGVyT25BY3RpdmVFbnRpdGllcyA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgZmlsdGVyT25BY3RpdmUgPSBuZXcgRmlsdGVyKHsgcGF0aDogXCJJc0FjdGl2ZUVudGl0eVwiLCBvcGVyYXRvcjogXCJFUVwiLCB2YWx1ZTE6IHRydWUgfSk7XG5cdFx0XHRpZiAoYmluZGluZ0luZm8uZmlsdGVycykge1xuXHRcdFx0XHRiaW5kaW5nSW5mby5maWx0ZXJzID0gbmV3IEZpbHRlcih7IGZpbHRlcnM6IFtmaWx0ZXJPbkFjdGl2ZSwgYmluZGluZ0luZm8uZmlsdGVyc10sIGFuZDogdHJ1ZSB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJpbmRpbmdJbmZvLmZpbHRlcnMgPSBmaWx0ZXJPbkFjdGl2ZTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSB0ZW1wbGF0ZSBmcm9tIHRoZSBmcmFnbWVudCBvZiBhIHNsb3QgY29sdW1uLlxuXHQgKiBAcGFyYW0gY29sdW1uSW5mbyBUaGUgY3VzdG9tIHRhYmxlIGNvbHVtblxuXHQgKiBAcGFyYW0gdmlldyBUaGUgY3VycmVudCB2aWV3XG5cdCAqIEBwYXJhbSBtb2RpZmllciBUaGUgY29udHJvbCB0cmVlIG1vZGlmaWVyXG5cdCAqIEBwYXJhbSB0YWJsZUlkIFRoZSBpZCBvZiB0aGUgdW5kZXJseWluZyB0YWJsZVxuXHQgKiBAcmV0dXJucyBUaGUgbG9hZGVkIGZyYWdtZW50XG5cdCAqL1xuXHRfdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQ6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRjb2x1bW5JbmZvOiBDdXN0b21FbGVtZW50PEN1c3RvbUJhc2VkVGFibGVDb2x1bW4+LFxuXHRcdHZpZXc6IFZpZXcsXG5cdFx0bW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIgfCBKc0NvbnRyb2xUcmVlTW9kaWZpZXIsXG5cdFx0dGFibGVJZDogc3RyaW5nXG5cdCk6IFByb21pc2U8bnVsbCB8IENvbnRyb2wgfCBDb250cm9sW10gfCBFbGVtZW50PiB7XG5cdFx0Y29uc3Qgc2xvdENvbHVtbnNYTUwgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKFxuXHRcdFx0anN4LnJlbmRlckFzWE1MKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldFNsb3RDb2x1bW4odGFibGVJZCwgY29sdW1uSW5mbywgZmFsc2UpIGFzIHVua25vd24gYXMgc3RyaW5nO1xuXHRcdFx0fSksXG5cdFx0XHRcInRleHQveG1sXCJcblx0XHQpO1xuXHRcdGlmICghc2xvdENvbHVtbnNYTUwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGNvbnN0IHNsb3RYTUwgPSBzbG90Q29sdW1uc1hNTC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNsb3RcIilbMF07XG5cblx0XHRpZiAoY29sdW1uSW5mby50ZW1wbGF0ZSkge1xuXHRcdFx0aWYgKHNsb3RYTUwpIHtcblx0XHRcdFx0Y29uc3Qgb1RlbXBsYXRlID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhjb2x1bW5JbmZvLnRlbXBsYXRlIGFzIHN0cmluZywgXCJ0ZXh0L3htbFwiKTtcblx0XHRcdFx0aWYgKG9UZW1wbGF0ZS5maXJzdEVsZW1lbnRDaGlsZCAmJiBvVGVtcGxhdGUuZmlyc3RFbGVtZW50Q2hpbGQubm9kZU5hbWUgIT09IFwiaHRtbFwiKSB7XG5cdFx0XHRcdFx0c2xvdFhNTC5yZXBsYWNlV2l0aChvVGVtcGxhdGUuZmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNsb3RYTUwucmVtb3ZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLmVycm9yKGBQbGVhc2UgcHJvdmlkZSBjb250ZW50IGluc2lkZSB0aGlzIEJ1aWxkaW5nIEJsb2NrIENvbHVtbjogJHtjb2x1bW5JbmZvLmhlYWRlcn1gKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGNvbnN0IHJlc3VsdFhNTCA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKFxuXHRcdFx0c2xvdENvbHVtbnNYTUwuZmlyc3RFbGVtZW50Q2hpbGQsXG5cdFx0XHR7IG1vZGVsczoge30gfSxcblx0XHRcdCh2aWV3LmdldENvbnRyb2xsZXIoKS5nZXRPd25lckNvbXBvbmVudCgpIGFzIEVuaGFuY2VXaXRoVUk1PFRlbXBsYXRlQ29tcG9uZW50PikuZ2V0UHJlcHJvY2Vzc29yQ29udGV4dCgpXG5cdFx0KTtcblx0XHRpZiAobW9kaWZpZXI/LnRhcmdldHMgIT09IFwianNDb250cm9sVHJlZVwiKSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0WE1MLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdH1cblx0XHRyZXR1cm4gRnJhZ21lbnQubG9hZCh7XG5cdFx0XHR0eXBlOiBcIlhNTFwiLFxuXHRcdFx0ZGVmaW5pdGlvbjogcmVzdWx0WE1MLFxuXHRcdFx0Y29udHJvbGxlcjogdmlldy5nZXRDb250cm9sbGVyKClcblx0XHR9KSBhcyBQcm9taXNlPENvbnRyb2wgfCBDb250cm9sW10+O1xuXHR9LFxuXG5cdF9nZXRFeHBvcnRGb3JtYXQ6IGZ1bmN0aW9uIChkYXRhVHlwZT86IHN0cmluZykge1xuXHRcdHN3aXRjaCAoZGF0YVR5cGUpIHtcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVwiOlxuXHRcdFx0XHRyZXR1cm4gRXhjZWxGb3JtYXQuZ2V0RXhjZWxEYXRlZnJvbUpTRGF0ZSgpO1xuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlVGltZU9mZnNldFwiOlxuXHRcdFx0XHRyZXR1cm4gRXhjZWxGb3JtYXQuZ2V0RXhjZWxEYXRlVGltZWZyb21KU0RhdGVUaW1lKCk7XG5cdFx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0XHRyZXR1cm4gRXhjZWxGb3JtYXQuZ2V0RXhjZWxUaW1lZnJvbUpTVGltZSgpO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0sXG5cblx0X2dldFZIUmVsZXZhbnRGaWVsZHM6IGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc01ldGFkYXRhUGF0aDogc3RyaW5nLCBzQmluZGluZ1BhdGg/OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG5cdFx0bGV0IGFGaWVsZHM6IHN0cmluZ1tdID0gW10sXG5cdFx0XHRvRGF0YUZpZWxkRGF0YSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNNZXRhZGF0YVBhdGgpO1xuXG5cdFx0aWYgKG9EYXRhRmllbGREYXRhLiRraW5kICYmIG9EYXRhRmllbGREYXRhLiRraW5kID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdG9EYXRhRmllbGREYXRhID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdGApO1xuXHRcdFx0c01ldGFkYXRhUGF0aCA9IGAke3NNZXRhZGF0YVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRgO1xuXHRcdH1cblx0XHRzd2l0Y2ggKG9EYXRhRmllbGREYXRhLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRpZiAob01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH0vVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aGApLmluY2x1ZGVzKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmllbGRHcm91cFwiKSkge1xuXHRcdFx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YWApLmZvckVhY2goKG9WYWx1ZTogdW5rbm93biwgaUluZGV4OiBudW1iZXIpID0+IHtcblx0XHRcdFx0XHRcdGFGaWVsZHMgPSBhRmllbGRzLmNvbmNhdChcblx0XHRcdFx0XHRcdFx0dGhpcy5fZ2V0VkhSZWxldmFudEZpZWxkcyhvTWV0YU1vZGVsLCBgJHtzTWV0YWRhdGFQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGEvJHtpSW5kZXh9YClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aFVybFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoQWN0aW9uXCI6XG5cdFx0XHRcdGFGaWVsZHMucHVzaChvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofS9WYWx1ZS8kUGF0aGApKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Ly8gcHJvcGVydHlcblx0XHRcdFx0Ly8gdGVtcG9yYXJ5IHdvcmthcm91bmQgdG8gbWFrZSBzdXJlIFZIIHJlbGV2YW50IGZpZWxkIHBhdGggZG8gbm90IGNvbnRhaW4gdGhlIGJpbmRpbmdwYXRoXG5cdFx0XHRcdGlmIChzQmluZGluZ1BhdGggJiYgc01ldGFkYXRhUGF0aC5pbmRleE9mKHNCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdFx0XHRhRmllbGRzLnB1c2goc01ldGFkYXRhUGF0aC5zdWJzdHJpbmcoc0JpbmRpbmdQYXRoLmxlbmd0aCArIDEpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRhRmllbGRzLnB1c2goQ29tbW9uSGVscGVyLmdldE5hdmlnYXRpb25QYXRoKHNNZXRhZGF0YVBhdGgsIHRydWUpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBhRmllbGRzO1xuXHR9LFxuXHRfc2V0RHJhZnRJbmRpY2F0b3JPblZpc2libGVDb2x1bW46IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBhQ29sdW1uczogVGFibGVDb2x1bW5bXSwgb0NvbHVtbkluZm8/OiBUYWJsZUNvbHVtbikge1xuXHRcdGNvbnN0IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0aWYgKCFvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzSW50ZXJuYWxQYXRoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IGFDb2x1bW5zV2l0aERyYWZ0SW5kaWNhdG9yID0gYUNvbHVtbnMuZmlsdGVyKChvQ29sdW1uOiBUYWJsZUNvbHVtbikgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2JDb2x1bW5IYXNQcm9wZXJ0eVdpdGhEcmFmdEluZGljYXRvcihvQ29sdW1uKTtcblx0XHR9KTtcblx0XHRjb25zdCBhVmlzaWJsZUNvbHVtbnMgPSBvVGFibGUuZ2V0Q29sdW1ucygpO1xuXHRcdGxldCBzQWRkVmlzaWJsZUNvbHVtbk5hbWUsIHNWaXNpYmxlQ29sdW1uTmFtZSwgYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCwgc0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3I7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFWaXNpYmxlQ29sdW1ucykge1xuXHRcdFx0c1Zpc2libGVDb2x1bW5OYW1lID0gYVZpc2libGVDb2x1bW5zW2ldLmdldFByb3BlcnR5S2V5KCk7XG5cdFx0XHRmb3IgKGNvbnN0IGogaW4gYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IpIHtcblx0XHRcdFx0c0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3IgPSBhQ29sdW1uc1dpdGhEcmFmdEluZGljYXRvcltqXS5uYW1lO1xuXHRcdFx0XHRpZiAoc1Zpc2libGVDb2x1bW5OYW1lID09PSBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRcdGJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvQ29sdW1uSW5mbyAmJiBvQ29sdW1uSW5mby5uYW1lID09PSBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRcdHNBZGRWaXNpYmxlQ29sdW1uTmFtZSA9IG9Db2x1bW5JbmZvLm5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0KSB7XG5cdFx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IsIHNWaXNpYmxlQ29sdW1uTmFtZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIWJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQgJiYgc0FkZFZpc2libGVDb2x1bW5OYW1lKSB7XG5cdFx0XHRvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShzSW50ZXJuYWxQYXRoICsgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SLCBzQWRkVmlzaWJsZUNvbHVtbk5hbWUpO1xuXHRcdH1cblx0fSxcblx0cmVtb3ZlSXRlbTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9UYWJsZTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdFx0b1Byb3BlcnR5SW5mb05hbWU6IFVJNUVsZW1lbnQgfCBFbGVtZW50LFxuXHRcdG1Qcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfVxuXHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRsZXQgZG9SZW1vdmVJdGVtID0gdHJ1ZTtcblx0XHRpZiAoIW9Qcm9wZXJ0eUluZm9OYW1lKSB7XG5cdFx0XHQvLyAxLiBBcHBsaWNhdGlvbiByZW1vdmVkIHRoZSBwcm9wZXJ0eSBmcm9tIHRoZWlyIGRhdGEgbW9kZWxcblx0XHRcdC8vIDIuIGFkZEl0ZW0gZmFpbGVkIGJlZm9yZSByZXZlcnREYXRhIGNyZWF0ZWRcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9SZW1vdmVJdGVtKTtcblx0XHR9XG5cdFx0Y29uc3Qgb01vZGlmaWVyID0gbVByb3BlcnR5QmFnLm1vZGlmaWVyO1xuXHRcdGNvbnN0IHNEYXRhUHJvcGVydHkgPSBhd2FpdCBvTW9kaWZpZXIuZ2V0UHJvcGVydHk8c3RyaW5nPihvUHJvcGVydHlJbmZvTmFtZSwgXCJkYXRhUHJvcGVydHlcIik7XG5cdFx0aWYgKHNEYXRhUHJvcGVydHkgJiYgc0RhdGFQcm9wZXJ0eS5pbmNsdWRlcyAmJiBzRGF0YVByb3BlcnR5LmluY2x1ZGVzKFwiSW5saW5lWE1MXCIpKSB7XG5cdFx0XHRvTW9kaWZpZXIuaW5zZXJ0QWdncmVnYXRpb24ob1RhYmxlLCBcImRlcGVuZGVudHNcIiwgb1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdFx0ZG9SZW1vdmVJdGVtID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICgob1RhYmxlIGFzIFVJNUVsZW1lbnQpLmlzQSAmJiBvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yU3RhdHVzKG9Nb2RpZmllciwgb1RhYmxlLCB0aGlzLmdldENvbHVtbnNGb3Iob1RhYmxlIGFzIFRhYmxlKSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9SZW1vdmVJdGVtKTtcblx0fSxcblx0X2dldE1ldGFNb2RlbDogZnVuY3Rpb24gKG1Qcm9wZXJ0eUJhZzogeyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9KSB7XG5cdFx0cmV0dXJuIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHR9LFxuXHRfc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXM6IGZ1bmN0aW9uIChcblx0XHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIsXG5cdFx0b1RhYmxlOiBVSTVFbGVtZW50IHwgRWxlbWVudCxcblx0XHRhQ29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0XHRvQ29sdW1uSW5mbz86IFRhYmxlQ29sdW1uXG5cdCkge1xuXHRcdGlmIChvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yT25WaXNpYmxlQ29sdW1uKG9UYWJsZSBhcyBUYWJsZSwgYUNvbHVtbnMsIG9Db2x1bW5JbmZvKTtcblx0XHR9XG5cdH0sXG5cdF9nZXRHcm91cElkOiBmdW5jdGlvbiAoc1JldHJpZXZlZEdyb3VwSWQ6IHN0cmluZykge1xuXHRcdHJldHVybiBzUmV0cmlldmVkR3JvdXBJZCB8fCB1bmRlZmluZWQ7XG5cdH0sXG5cdF9pbnNlcnRBZ2dyZWdhdGlvbjogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9WYWx1ZUhlbHA6IEVsZW1lbnQgfCBVSTVFbGVtZW50IHwgRWxlbWVudFtdIHwgVUk1RWxlbWVudFtdLFxuXHRcdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcixcblx0XHRvVGFibGU6IEVsZW1lbnQgfCBVSTVFbGVtZW50XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmIChvVmFsdWVIZWxwKSB7XG5cdFx0XHRyZXR1cm4gb01vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKG9UYWJsZSwgXCJkZXBlbmRlbnRzXCIsIG9WYWx1ZUhlbHAsIDApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH0sXG5cblx0LyoqXG5cdCAqIEludm9rZWQgd2hlbiBhIGNvbHVtbiBpcyBhZGRlZCB1c2luZyB0aGUgdGFibGUgcGVyc29uYWxpemF0aW9uIGRpYWxvZy5cblx0ICogQHBhcmFtIG9UYWJsZSBJbnN0YW5jZSBvZiB0YWJsZSBjb250cm9sXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlJbmZvTmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBmb3Igd2hpY2ggdGhlIGNvbHVtbiBpcyBhZGRlZFxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnIEluc3RhbmNlIG9mIHByb3BlcnR5IGJhZyBmcm9tIHRoZSBmbGV4aWJpbGl0eSBBUElcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5tb2RpZmllciBJbnN0YW5jZSBvZiB0aGUgY29udHJvbCB0cmVlIG1vZGlmaWVyXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50IEluc3RhbmNlIG9mIHRoZSBhcHAgY29tcG9uZW50XG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcudmlldyBJbnN0YW5jZSBvZiB0aGUgdmlld1xuXHQgKiBAcmV0dXJucyBPbmNlIHJlc29sdmVkLCBhIHRhYmxlIGNvbHVtbiBkZWZpbml0aW9uIGlzIHJldHVybmVkXG5cdCAqL1xuXHRhZGRJdGVtOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IEVsZW1lbnQgfCBVSTVFbGVtZW50LFxuXHRcdHByb3BlcnR5SW5mb05hbWU6IHN0cmluZyxcblx0XHRtUHJvcGVydHlCYWc6IHsgbW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXI7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50OyB2aWV3PzogRkVWaWV3IH1cblx0KSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IHRoaXMuX2dldE1ldGFNb2RlbChtUHJvcGVydHlCYWcpLFxuXHRcdFx0b01vZGlmaWVyID0gbVByb3BlcnR5QmFnLm1vZGlmaWVyLFxuXHRcdFx0c1RhYmxlSWQgPSBvTW9kaWZpZXIuZ2V0SWQodGFibGUpLFxuXHRcdFx0YUNvbHVtbnMgPSAodGFibGUgYXMgVUk1RWxlbWVudCkuaXNBID8gdGhpcy5nZXRDb2x1bW5zRm9yKHRhYmxlIGFzIFRhYmxlKSA6IG51bGw7XG5cdFx0aWYgKCFhQ29sdW1ucykge1xuXHRcdFx0Ly8gV2UgcmV0dXJuIG51bGwgaGVyZSBiZWNhdXNlIGV2ZXJ5dGhpbmcgc2hvdWxkIGFwcGx5IGF0IHJ1bnRpbWVcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29sdW1uSW5mbyA9IGFDb2x1bW5zLmZpbmQoZnVuY3Rpb24gKG9Db2x1bW4pIHtcblx0XHRcdHJldHVybiBvQ29sdW1uLm5hbWUgPT09IHByb3BlcnR5SW5mb05hbWU7XG5cdFx0fSk7XG5cdFx0aWYgKCFjb2x1bW5JbmZvKSB7XG5cdFx0XHRMb2cuZXJyb3IoYCR7cHJvcGVydHlJbmZvTmFtZX0gbm90IGZvdW5kIHdoaWxlIGFkZGluZyBjb2x1bW5gKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGlmIChjb2x1bW5JbmZvLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0TG9nLndhcm5pbmcoYENvbHVtbiBmb3IgJHtwcm9wZXJ0eUluZm9OYW1lfSBub3QgYWRkZWQgYmVjYXVzZSBpdCdzIGhpZGRlbmApO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9ICh0YWJsZSBhcyBUYWJsZSkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShDT0xVTU5fSEFTX0JFRU5fQURERUQsIHRydWUpO1xuXHRcdHRoaXMuX3NldERyYWZ0SW5kaWNhdG9yU3RhdHVzKG9Nb2RpZmllciwgdGFibGUsIGFDb2x1bW5zLCBjb2x1bW5JbmZvKTtcblx0XHRjb25zdCBzUGF0aCA9IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4odGFibGUsIFwibWV0YVBhdGhcIiwgb01vZGlmaWVyKTtcblx0XHRjb25zdCBvVGFibGVDb250ZXh0OiBDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzUGF0aCEpITtcblx0XHQvLyBJZiB2aWV3IGlzIG5vdCBwcm92aWRlZCB0cnkgdG8gZ2V0IGl0IGJ5IGFjY2Vzc2luZyB0byB0aGUgcGFyZW50YWwgaGllcmFyY2h5XG5cdFx0Ly8gSWYgaXQgZG9lc24ndCB3b3JrICh0YWJsZSBpbnRvIGFuIHVuYXR0YWNoZWQgT1Agc2VjdGlvbikgZ2V0IHRoZSB2aWV3IHZpYSB0aGUgQXBwQ29tcG9uZW50XG5cdFx0Y29uc3QgdmlldyA9XG5cdFx0XHRtUHJvcGVydHlCYWcudmlldyB8fFxuXHRcdFx0Q29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSBhcyBVSTVFbGVtZW50KSB8fFxuXHRcdFx0KG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgPyBDb21tb25VdGlscy5nZXRDdXJyZW50UGFnZVZpZXcobVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCkgOiB1bmRlZmluZWQpO1xuXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZSA9PT0gXCJEZWZhdWx0XCIpIHtcblx0XHRcdExvZy5lcnJvcihcIkN1c3RvbSBjb2x1bW5zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGFyZSBub3Qgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYSB0YWJsZSBidWlsZGluZyBibG9jay5cIik7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IFwiU2xvdFwiKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQoY29sdW1uSW5mbyBhcyBDdXN0b21FbGVtZW50PEN1c3RvbUJhc2VkVGFibGVDb2x1bW4+LCB2aWV3LCBvTW9kaWZpZXIsIHNUYWJsZUlkKTtcblx0XHR9XG5cblx0XHRpZiAoY29sdW1uSW5mby50eXBlID09PSBcIkNvbXB1dGVkXCIpIHtcblx0XHRcdGNvbnN0IGVuYWJsZUFuYWx5dGljcyA9ICgodGFibGUgYXMgTURDVGFibGUpLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5lbmFibGVBbmFseXRpY3M7XG5cdFx0XHRyZXR1cm4gZ2V0Q29tcHV0ZWRDb2x1bW4oc1RhYmxlSWQsIGNvbHVtbkluZm8gYXMgQ29tcHV0ZWRUYWJsZUNvbHVtbiwgb1RhYmxlQ29udGV4dCwgZW5hYmxlQW5hbHl0aWNzKTtcblx0XHR9XG5cblx0XHQvLyBmYWxsLWJhY2tcblx0XHRpZiAoIW9NZXRhTW9kZWwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvID0gKCh0YWJsZSBhcyBNRENUYWJsZSkuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MoKS5maW5kKGZ1bmN0aW9uIChcblx0XHRcdHByb3BJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gcHJvcEluZm8ubmFtZSA9PT0gcHJvcGVydHlJbmZvTmFtZTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IG9Qcm9wZXJ0eUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHByb3BlcnR5SW5mbyEuYW5ub3RhdGlvblBhdGgpITtcblxuXHRcdGNvbnN0IGZuVGVtcGxhdGVGcmFnbWVudCA9IGFzeW5jIChcblx0XHRcdG9JblByb3BlcnR5SW5mbzogdW5rbm93bixcblx0XHRcdG9WaWV3OiBGRVZpZXdcblx0XHQpOiBQcm9taXNlPFVJNUVsZW1lbnQgfCBFbGVtZW50IHwgVUk1RWxlbWVudFtdIHwgRWxlbWVudFtdPiA9PiB7XG5cdFx0XHRsZXQgYkRpc3BsYXlNb2RlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IHNUYWJsZVR5cGVDdXN0b21EYXRhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRsZXQgc0NyZWF0aW9uTW9kZUN1c3RvbURhdGE6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nIHwgYm9vbGVhbj4odGFibGUsIFwiZGlzcGxheU1vZGVQcm9wZXJ0eUJpbmRpbmdcIiwgb01vZGlmaWVyKSxcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJ0YWJsZVR5cGVcIiwgb01vZGlmaWVyKSxcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJjcmVhdGlvbk1vZGVcIiwgb01vZGlmaWVyKVxuXHRcdFx0XSkudGhlbihhc3luYyAoYUN1c3RvbURhdGE6IChzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKVtdKSA9PiB7XG5cdFx0XHRcdGJEaXNwbGF5TW9kZSA9IGFDdXN0b21EYXRhWzBdIGFzIGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdHNUYWJsZVR5cGVDdXN0b21EYXRhID0gYUN1c3RvbURhdGFbMV0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YSA9IGFDdXN0b21EYXRhWzJdIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gUmVhZCBPbmx5IGFuZCBDb2x1bW4gRWRpdCBNb2RlIGNhbiBib3RoIGhhdmUgdGhyZWUgc3RhdGVcblx0XHRcdFx0Ly8gVW5kZWZpbmVkIG1lYW5zIHRoYXQgdGhlIGZyYW1ld29yayBkZWNpZGVzIHdoYXQgdG8gZG9cblx0XHRcdFx0Ly8gVHJ1ZSAvIERpc3BsYXkgbWVhbnMgYWx3YXlzIHJlYWQgb25seVxuXHRcdFx0XHQvLyBGYWxzZSAvIEVkaXRhYmxlIG1lYW5zIGVkaXRhYmxlIGJ1dCB3aGlsZSBzdGlsbCByZXNwZWN0aW5nIHRoZSBsb3cgbGV2ZWwgcHJpbmNpcGxlIChpbW11dGFibGUgcHJvcGVydHkgd2lsbCBub3QgYmUgZWRpdGFibGUpXG5cdFx0XHRcdGlmIChiRGlzcGxheU1vZGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgYkRpc3BsYXlNb2RlICE9PSBcImJvb2xlYW5cIikge1xuXHRcdFx0XHRcdGJEaXNwbGF5TW9kZSA9IGJEaXNwbGF5TW9kZSA9PT0gXCJ0cnVlXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9ICh0YWJsZSBhcyBUYWJsZSkuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0XHRcdGNvbnN0IG9UaGlzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRcdFx0XHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuZW5hYmxlQXV0b0NvbHVtbldpZHRoLFxuXHRcdFx0XHRcdFx0cmVhZE9ubHk6IGJEaXNwbGF5TW9kZSxcblx0XHRcdFx0XHRcdHRhYmxlVHlwZTogc1RhYmxlVHlwZUN1c3RvbURhdGEsXG5cdFx0XHRcdFx0XHRpZDogc1RhYmxlSWQsXG5cdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBwcm9wZXJ0eUluZm9OYW1lLFxuXHRcdFx0XHRcdFx0Y29sdW1uSW5mbzogY29sdW1uSW5mbyxcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGghKSxcblx0XHRcdFx0XHRcdGNyZWF0aW9uTW9kZTogeyBuYW1lOiBzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YSB9LFxuXHRcdFx0XHRcdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXJcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBvVGFibGVDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBvVGFibGVDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRkYXRhRmllbGQ6IG9Qcm9wZXJ0eUNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHRoaXM6IG9UaGlzLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9jb2x1bW5JbmZvXCIpXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdHRoaXM6IG9UaGlzLFxuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW46IG9UaGlzXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCB0YWJsZUNvbGxlY3Rpb24gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5Pihcblx0XHRcdFx0XHRvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb24pIVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBoYW5kbGVyUHJvdmlkZXIgPSBuZXcgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcihcblx0XHRcdFx0XHR0YWJsZUFQSSxcblx0XHRcdFx0XHR7IGNvbGxlY3Rpb25FbnRpdHk6IHRhYmxlQ29sbGVjdGlvbi50YXJnZXRPYmplY3QhLCBtZXRhTW9kZWw6IG9NZXRhTW9kZWwgfSxcblx0XHRcdFx0XHR0YWJsZUFQSVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBjb21wdXRlZENvbHVtblhNTCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoXG5cdFx0XHRcdFx0anN4LnJlbmRlckFzWE1MKCgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiAoZ2V0Q29sdW1uVGVtcGxhdGUoXG5cdFx0XHRcdFx0XHRcdHNUYWJsZUlkLFxuXHRcdFx0XHRcdFx0XHR0YWJsZUFQSSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uSW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0XHRcdFx0XHRcdG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGghKSEsXG5cdFx0XHRcdFx0XHRcdGhhbmRsZXJQcm92aWRlclxuXHRcdFx0XHRcdFx0KSA/PyBcIlwiKSBhcyB1bmtub3duIGFzIHN0cmluZztcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcInRleHQveG1sXCJcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIERlbGVnYXRlVXRpbC50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChcblx0XHRcdFx0XHRjb21wdXRlZENvbHVtblhNTC5maXJzdEVsZW1lbnRDaGlsZCxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MsXG5cdFx0XHRcdFx0eyB2aWV3OiBvVmlldyB9LFxuXHRcdFx0XHRcdG9Nb2RpZmllclxuXHRcdFx0XHQpLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdG9UaGlzLmRlc3Ryb3koKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIGZuVGVtcGxhdGVGcmFnbWVudChwcm9wZXJ0eUluZm8sIHZpZXcpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBQcm92aWRlIHRoZSBUYWJsZSdzIGZpbHRlciBkZWxlZ2F0ZSB0byBwcm92aWRlIGJhc2ljIGZpbHRlciBmdW5jdGlvbmFsaXR5IHN1Y2ggYXMgYWRkaW5nIEZpbHRlckZpZWxkcy5cblx0ICogQHJldHVybnMgT2JqZWN0IGZvciB0aGUgVGFibGVzIGZpbHRlciBwZXJzb25hbGl6YXRpb24uXG5cdCAqL1xuXHRnZXRGaWx0ZXJEZWxlZ2F0ZTogZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e1xuXHRcdFx0XHRhcGlWZXJzaW9uOiAyXG5cdFx0XHR9LFxuXHRcdFx0RmlsdGVyQmFyRGVsZWdhdGUsXG5cdFx0XHR7XG5cdFx0XHRcdGFkZEl0ZW06IGFzeW5jIGZ1bmN0aW9uIChvUGFyZW50Q29udHJvbDogQ29udHJvbCwgc1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZykge1xuXHRcdFx0XHRcdGlmIChzUHJvcGVydHlJbmZvTmFtZS5pbmRleE9mKFwiUHJvcGVydHk6OlwiKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0Ly8gQ29ycmVjdCB0aGUgbmFtZSBvZiBjb21wbGV4IHByb3BlcnR5IGluZm8gcmVmZXJlbmNlcy5cblx0XHRcdFx0XHRcdHNQcm9wZXJ0eUluZm9OYW1lID0gc1Byb3BlcnR5SW5mb05hbWUucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBGaWx0ZXJCYXJEZWxlZ2F0ZS5hZGRJdGVtKG9QYXJlbnRDb250cm9sIGFzIEZpbHRlckJhciwgc1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgVHlwZU1hcCBhdHRhY2hlZCB0byB0aGlzIGRlbGVnYXRlLlxuXHQgKiBAcmV0dXJucyBBbnkgaW5zdGFuY2Ugb2YgVHlwZU1hcFxuXHQgKi9cblx0Z2V0VHlwZU1hcDogZnVuY3Rpb24gKC8qb1BheWxvYWQ6IG9iamVjdCovKSB7XG5cdFx0cmV0dXJuIFR5cGVNYXA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZvcm1hdCB0aGUgdGl0bGUgb2YgdGhlIGdyb3VwIGhlYWRlciAuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0YWJsZSBjb250cm9sXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICogQHBhcmFtIHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIEZvcm1hdHRlZCB0aXRsZSBvZiB0aGUgZ3JvdXAgaGVhZGVyLlxuXHQgKi9cblx0Zm9ybWF0R3JvdXBIZWFkZXIodGFibGU6IE1EQ1RhYmxlLCBjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgcHJvcGVydHk6IHN0cmluZykge1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb3MgPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MoKTtcblx0XHRjb25zdCBwcm9wZXJ0eUluZm8gPSBwcm9wZXJ0eUluZm9zPy5maW5kKChvYmopID0+IHtcblx0XHRcdHJldHVybiBvYmoubmFtZSA9PT0gcHJvcGVydHk7XG5cdFx0fSk7XG5cdFx0LypGb3IgYSBEYXRlLCBEYXRlVGltZSwgQm9vbGVhbiBvciBEZWNpbWFsIHByb3BlcnR5LCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgaW4gZXh0ZXJuYWwgZm9ybWF0IHVzaW5nIGEgVUk1IHR5cGUgZm9yIHRoZVxuXHQgICAgICAgIGdpdmVuIHByb3BlcnR5IHBhdGggdGhhdCBmb3JtYXRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5J3MgRURNIHR5cGUgYW5kIGNvbnN0cmFpbnRzKi9cblx0XHRjb25zdCBkYXRhQmFzZVR5cGUgPSBUeXBlTWFwLmdldFR5cGVDb25maWcocHJvcGVydHlJbmZvPy5kYXRhVHlwZSkuYmFzZVR5cGU7XG5cdFx0Y29uc3QgZXh0ZXJuYWxGb3JtYXQgPVxuXHRcdFx0ZGF0YUJhc2VUeXBlID09PSBcIkRhdGVUaW1lXCIgfHwgZGF0YUJhc2VUeXBlID09PSBcIkRhdGVcIiB8fCBkYXRhQmFzZVR5cGUgPT09IFwiQm9vbGVhblwiIHx8IGRhdGFCYXNlVHlwZSA9PT0gXCJOdW1lcmljXCI7XG5cdFx0bGV0IHZhbHVlO1xuXHRcdGlmICghY29udGV4dCkge1xuXHRcdFx0dmFsdWUgPSBnZXRSZXNvdXJjZU1vZGVsKENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVfVkFMVUVcIik7XG5cdFx0XHRyZXR1cm4gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fVEFCTEVfR1JPVVBfSEVBREVSX1RJVExFXCIsIFtwcm9wZXJ0eUluZm8/LmxhYmVsLCB2YWx1ZV0pO1xuXHRcdH1cblx0XHRpZiAocHJvcGVydHlJbmZvPy5tb2RlKSB7XG5cdFx0XHRzd2l0Y2ggKHByb3BlcnR5SW5mby5tb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHZhbHVlID0gcHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBWYWx1ZUZvcm1hdHRlci5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBWYWx1ZUZvcm1hdHRlci5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YWx1ZSA9IHByb3BlcnR5SW5mbz8ucGF0aCA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnBhdGgsIGV4dGVybmFsRm9ybWF0KSA6IG51bGw7XG5cdFx0fVxuXHRcdGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0dmFsdWUgPSBnZXRSZXNvdXJjZU1vZGVsKENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVfVkFMVUVcIik7XG5cdFx0fVxuXHRcdHJldHVybiBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVcIiwgW3Byb3BlcnR5SW5mbz8ubGFiZWwsIHZhbHVlXSk7XG5cdH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztFQWlGQSxNQUFNQSw4QkFBOEIsR0FBRywrQkFBK0I7RUFDdEUsTUFBTUMscUJBQXFCLEdBQUcsYUFBYTtFQUMzQyxNQUFNQyxxQkFBcUIsR0FBRyxhQUFhO0VBQzNDLE1BQU1DLGdCQUFnQixHQUFHLGlCQUFpQjs7RUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFUQSxPQVVlQyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRUMsaUJBQWlC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
|
|
1381
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IiLCJTRUFSQ0hfSEFTX0JFRU5fRklSRUQiLCJDT0xVTU5fSEFTX0JFRU5fQURERUQiLCJQUkVWSU9VU19TT1JURVJTIiwiT2JqZWN0IiwiYXNzaWduIiwiVGFibGVEZWxlZ2F0ZUJhc2UiLCJhcGlWZXJzaW9uIiwiX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckZpZWxkR3JvdXAiLCJ0YWJsZSIsInByb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mb3MiLCJrZXkiLCJpbmRleE9mIiwiY29sdW1uIiwiZ2V0Q29sdW1ucyIsImZpbmQiLCJjb2wiLCJnZXRQcm9wZXJ0eUtleSIsInNob3dEYXRhRmllbGRzTGFiZWwiLCJkYXRhIiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0Q29udGV4dCIsImFubm90YXRpb25QYXRoIiwiY29udmVydGVkTWV0YURhdGEiLCJjb252ZXJ0ZWRUeXBlcyIsIm9EYXRhRmllbGQiLCJ0YXJnZXRPYmplY3QiLCJvRmllbGRHcm91cCIsIlRhcmdldCIsIiR0YXJnZXQiLCJhRmllbGRXaWR0aCIsIkRhdGEiLCJmb3JFYWNoIiwib0RhdGEiLCJvRGF0YUZpZWxkV2lkdGgiLCIkVHlwZSIsIlRhYmxlU2l6ZUhlbHBlciIsImdldFdpZHRoRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImdldFdpZHRoRm9yRGF0YUZpZWxkIiwibGFiZWxXaWR0aCIsInByb3BlcnR5V2lkdGgiLCJTaXplSGVscGVyIiwiZ2V0QnV0dG9uV2lkdGgiLCJMYWJlbCIsInRvU3RyaW5nIiwicHVzaCIsIm5XaWRlc3QiLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsIk1hdGgiLCJtYXgiLCJ2aXN1YWxTZXR0aW5ncyIsImRlZXBFeHRlbmQiLCJ3aWR0aENhbGN1bGF0aW9uIiwidmVydGljYWxBcnJhbmdlbWVudCIsIm1pbldpZHRoIiwiY2VpbCIsIl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAiLCJwcm9wZXJ0eSIsInRhYmxlQVBJIiwiZ2V0UGFyZW50IiwibWV0YU1vZGVsIiwiZGF0YUZpZWxkIiwiZ2V0T2JqZWN0IiwiZ2FwIiwiZ2V0UHJvcGVydHkiLCJfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCIsInVuaXQiLCJ1bml0VGV4dCIsInRpbWV6b25lVGV4dCIsIm9UYWJsZUFQSSIsInRleHQiLCJnZXRSZWFkT25seSIsIl9jb21wdXRlTGFiZWwiLCJsYWJlbE1hcCIsImxhYmVsIiwicHJvcGVydGllc1dpdGhTYW1lTGFiZWwiLCJpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSIsInNvbWUiLCJwcm9wIiwicGF0aCIsIm1vZGUiLCJsZW5ndGgiLCJpbmNsdWRlcyIsImFkZGl0aW9uYWxMYWJlbHMiLCJmaWx0ZXJhYmxlIiwiam9pbiIsIl91cGRhdGVQcm9wZXJ0eUluZm8iLCJwcm9wZXJ0aWVzIiwicDEzbk1vZGUiLCJnZXRQMTNuTW9kZSIsInNvcnRhYmxlIiwiZ3JvdXBhYmxlIiwidW5kZWZpbmVkIiwiY29uY2F0IiwibmFtZSIsImdyb3VwTGFiZWwiLCJncm91cCIsImRhdGFUeXBlIiwidmlzaWJsZSIsImdldENvbHVtbnNGb3IiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb2x1bW5zIiwiZmV0Y2hFeHBvcnRDYXBhYmlsaXRpZXMiLCJvVGFibGUiLCJvQ2FwYWJpbGl0aWVzIiwiWExTWCIsIm9Nb2RlbCIsIkRlbGVnYXRlVXRpbCIsImZldGNoTW9kZWwiLCJ0aGVuIiwibW9kZWwiLCJhU3VwcG9ydGVkRm9ybWF0cyIsImFMb3dlckZvcm1hdHMiLCJtYXAiLCJlbGVtZW50IiwidG9Mb3dlckNhc2UiLCJvQW5ub3RhdGlvbiIsImNhdGNoIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5IiwiY29sdW1uSW5mbyIsImNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGgiLCJpc0ZpbHRlcmFibGUiLCJpc1BhdGhGaWx0ZXJhYmxlIiwicmVsYXRpdmVQYXRoIiwiaXNQYXJ0T2ZMaW5lSXRlbSIsImlzUGFydE9mQ3VzdG9tQ29sdW1uIiwiaXNDb25zdGFudCIsIl9mZXRjaFByb3BlcnR5SW5mbyIsImFwcENvbXBvbmVudCIsInNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoIiwib05hdmlnYXRpb25Db250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJpc0NvbXBsZXhUeXBlIiwidHlwZUNvbmZpZyIsImNsYXNzTmFtZSIsImJGaWx0ZXJhYmxlIiwiQ29tbW9uSGVscGVyIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJiSXNBbmFseXRpY2FsVGFibGUiLCJnZXRDdXN0b21EYXRhIiwiZ2V0TG9jYWxpemVkVGV4dCIsInRvb2x0aXAiLCJfZ2V0VHlwZUNvbmZpZyIsImZvcm1hdE9wdGlvbnMiLCJiYXNlVHlwZSIsInN0eWxlIiwiY29uc3RyYWludHMiLCJhdmFpbGFiaWxpdHkiLCJleHBvcnRTZXR0aW5ncyIsIl9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5ncyIsInR5cGUiLCJDb2x1bW5UeXBlIiwiQW5ub3RhdGlvbiIsInRlbXBsYXRlIiwiY2xpcGJvYXJkU2V0dGluZ3MiLCJrZXlzIiwiZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJfdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMiLCJpc0tleSIsImlzR3JvdXBhYmxlIiwidGV4dEFycmFuZ2VtZW50IiwiX3NldFRleHRBcnJhbmdlbWVudEluZm8iLCJleHRlbnNpb24iLCJ0ZWNobmljYWxseUdyb3VwYWJsZSIsImNhc2VTZW5zaXRpdmUiLCJhZGRpdGlvbmFsTGFiZWwiLCJleHBvcnRGb3JtYXQiLCJfZ2V0RXhwb3J0Rm9ybWF0IiwiZm9ybWF0IiwiVHlwZU1hcCIsImdldFR5cGVDb25maWciLCJpc1R5cGVGaWx0ZXJhYmxlIiwiZGVzY3JpcHRpb25Db2x1bW4iLCJvQ29sIiwidGV4dFByb3BlcnR5IiwidmFsdWVQcm9wZXJ0eSIsImRlc2NyaXB0aW9uUHJvcGVydHkiLCJhZ2dyZWdhdGFibGUiLCJfZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbyIsIl9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbyIsImhlYWRlciIsInN0YXJ0c1dpdGgiLCJNb2RlbEhlbHBlciIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJfYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yIiwib0NvbHVtbkluZm8iLCJoYXNEcmFmdEluZGljYXRvciIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsIl91cGRhdGVEcmFmdEluZGljYXRvck1vZGVsIiwiX29UYWJsZSIsIl9vQ29sdW1uSW5mbyIsImFWaXNpYmxlQ29sdW1ucyIsIm9JbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzSW50ZXJuYWxQYXRoIiwiZ2V0UGF0aCIsImluZGV4Iiwic2V0UHJvcGVydHkiLCJfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5IiwiZW50aXR5VHlwZVBhdGgiLCJiaW5kaW5nUGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJmZXRjaGVkUHJvcGVydGllcyIsIm5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiQ29tbW9uVXRpbHMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsIlByb21pc2UiLCJyZXNvbHZlIiwibWF4Q29uZGl0aW9ucyIsImlzTXVsdGlWYWx1ZSIsIkVycm9yIiwic2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyIsImdldFByb3BlcnR5SW5mb3MiLCJfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJnZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwic3ViRmV0Y2hlZFByb3BlcnRpZXMiLCJzZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwic2V0Tm9EYXRhSW5mb3JtYXRpb24iLCJpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbiIsIm5vRGF0YUFnZ3JlZ2F0aW9uIiwiZ2V0Tm9EYXRhIiwiaXNBIiwiY3VycmVudElsbHVzdHJhdGVkTWVzc2FnZSIsInNldFRpdGxlIiwidGl0bGUiLCJzZXREZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwic2V0SWxsdXN0cmF0aW9uVHlwZSIsImlsbHVzdHJhdGlvblR5cGUiLCJzZXRJbGx1c3RyYXRpb25TaXplIiwiaWxsdXN0cmF0aW9uU2l6ZSIsImlsbHVzdHJhdGVkTWVzc2FnZSIsIklsbHVzdHJhdGVkTWVzc2FnZSIsInNldE5vRGF0YSIsInNldFRhYmxlTm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlIiwiYmluZGluZ0luZm8iLCJ0YWJsZUZpbHRlckluZm8iLCJUYWJsZVV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwic3VmZml4UmVzb3VyY2VLZXkiLCJzdWJzdHJpbmciLCJpbGx1c3RyYXRlZEluZm9ybWF0aW9uIiwiZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMiLCJnZXRRdWlja0ZpbHRlciIsImdldFRleHQiLCJJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIiwiTm9TZWFyY2hSZXN1bHRzIiwiZmlsdGVyQXNzb2NpYXRpb24iLCJnZXRGaWx0ZXIiLCJoYXNGaWx0ZXJPclNlYXJjaCIsInNlYXJjaCIsImZpbHRlcnMiLCJ0ZXN0IiwiTm9EYXRhIiwiZ2V0VGFyZ2V0VmlldyIsImdldFZpZXdEYXRhIiwibGl2ZU1vZGUiLCJnZXROb0RhdGFNZXNzYWdlTW9kZSIsImN1cnJlbnROb0RhdGEiLCJoYW5kbGVUYWJsZURhdGFSZWNlaXZlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9CaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsImJEYXRhUmVjZWl2ZWRBdHRhY2hlZCIsImF0dGFjaERhdGFSZWNlaXZlZCIsInNldFRpbWVvdXQiLCJhU2VsZWN0ZWRDb250ZXh0cyIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiSlNPTiIsInBhcnNlIiwidGFibGVEZWZpbml0aW9uIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJEZWxldGVIZWxwZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsInNldFVwRW1wdHlSb3dzIiwiX3VwZGF0ZUF2YWlsYWJsZUNhcmRzIiwic2V0T3B0aW1pc3RpY0JhdGNoUHJvbWlzZUZvck1vZGVsIiwiY29udHJvbGxlciIsImdldEFwcENvbXBvbmVudCIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlIiwiUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsIiwiZW5hYmxlT3B0aW1pc3RpY0JhdGNoTW9kZSIsImZpbHRlcnNQcm9wZXJ0aWVzQXNQb3RlbnRpYWxseVNlbnNpdGl2ZURhdGFPckRhdGVUeXBlIiwiaXNGaWx0ZXJFbGlnaWJsZUZvck9wdGltaXN0aWNCYXRjaCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UiLCJkYXRhTW9kZWwiLCJpc09wdGltaXN0aWNCYXRjaEhhc1RvQmVFbmFibGVkIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlciIsImlzT3B0aW1pc3RpY0JhdGNoRGlzYWJsZWQiLCJvcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIiLCJwcm9taXNlIiwicmViaW5kIiwib0JpbmRpbmdJbmZvIiwiYklzU3VzcGVuZGVkIiwiVGFibGVSdW50aW1lIiwiY2xlYXJTZWxlY3Rpb24iLCJhcHBseSIsIm9uVGFibGVCb3VuZCIsIndoZW5Cb3VuZCIsIm9FcnJvciIsImZldGNoUHJvcGVydGllcyIsInByZUluaXQiLCJmYXN0Q3JlYXRpb25Sb3ciLCJnZXRDcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwidXBkYXRlQmluZGluZ0luZm8iLCJpbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIiwiQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIiwiX2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTSIsIl9pbnRlcm5hbFVwZGF0ZUJpbmRpbmdJbmZvIiwiX2hhbmRsZVJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzIiwiX2hhbmRsZUZpbHRlcnNGb3JFeHRlcm5hbElEIiwiZmlyZUV2ZW50IiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvIiwiYXR0YWNoZWRFdmVudHMiLCJnZXRBdHRhY2hlZEV2ZW50cyIsImNvbnRleHQiLCJUYWJsZUhlbHBlciIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsInNldEF0dGFjaEV2ZW50cyIsImUiLCJzb3J0ZXJzIiwic29ydGVyIiwibmV3U29ydGVyc1RvQmVBcHBsaWVkIiwidGFibGVQcm9wZXJ0aWVzIiwidGFibGVQcm9wZXJ0eSIsInVuaXRQcm9wZXJ0eSIsInVuaXRTb3J0ZXJBdmFpbGFibGUiLCJzb3J0IiwiU29ydGVyIiwiZ2V0RmlsdGVycyIsInVwZGF0ZUZpbHRlcnNGb3JFeHRlcm5hbElEIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJyZWNvbW1lbmRhdGlvbnMiLCJpc1JlY29tbWVuZGF0aW9uRW5hYmxlZCIsInRhYmxlRGVmIiwicmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0UmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHMiLCJhbm5vdGF0aW9uIiwiZW50aXR5VHlwZU5hbWUiLCJwYXJhbWV0ZXJzIiwiJHNlbGVjdCIsImdldFZpZXciLCJjb252ZXJ0ZXJUeXBlIiwiY2FyZHMiLCJjb2xsZWN0QXZhaWxhYmxlQ2FyZHMiLCJjb2xsYWJvcmF0aW9uTWFuYWdlciIsIkNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiY2FyZE9iamVjdCIsInVwZGF0ZUNhcmRzIiwicGFyZW50QXBwSWQiLCJnZXRJZCIsImdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNoYXJlQXZhaWxhYmxlQ2FyZHMiLCJnZXRJblJlc3VsdFByb3BlcnR5S2V5cyIsImNvbnRyb2wiLCJhbmFseXRpY2FsQ29uZmlndXJhdGlvbiIsImFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwiLCJhbGxLa2V5c1JlcXVlc3RlZCIsImNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZCIsIm92ZXJyaWRlUm93UHJlc3MiLCJyZXF1ZXN0QXRMZWFzdCIsImZpbHRlciIsImZpZWxkTmFtZSIsIm9yaWdpbiIsImdldENvbnRlbnQiLCJhbGxDb2x1bW5zIiwia2V5UHJvcGVydHlOYW1lcyIsImMiLCJkaXNwbGF5ZWRDb2x1bW5zIiwicmVmZXJlbmNlZFByb3BlcnR5UGF0aHMiLCJTZXQiLCJwcm9jZXNzQ29sdW1uIiwiYWRkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJhZGRpdGlvbmFsQ29sdW1uTmFtZSIsImFkZGl0aW9uYWxDb2x1bW4iLCJyZWxhdGVkQ29sdW1uTmFtZSIsInJlbGF0ZWRDb2x1bW4iLCJldmVyeSIsInByb3BOYW1lIiwiaGFzIiwiZ2V0U2VhcmNoUXVlcnkiLCJiaW5kaW5nIiwiYWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGlvbiIsImdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzIiwiJHNlYXJjaCIsInVwZGF0ZUJpbmRpbmciLCIkJGdldEtlZXBBbGl2ZUNvbnRleHQiLCJjb2xsZWN0aW9uUGF0aCIsImludGVybmFsTW9kZWwiLCJrZXB0QWxpdmVMaXN0cyIsIm5lZWRNYW51YWxSZWZyZXNoIiwidmlldyIsIm1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5IiwicGVuZGluZ01hbnVhbFVwZGF0ZSIsIm5ld1NvcnRlcnMiLCJzdHJpbmdpZnkiLCJ2aWV3RGF0YSIsIm9sZEZpbHRlcnMiLCJwcmV2aW91c1NvcnRlcnMiLCJmaWx0ZXJOb3RDaGFuZ2VkIiwiZGVlcEVxdWFsIiwiTFJNdWx0aVZpZXdFbmFibGVkIiwidmlld3MiLCJlbmFibGVBbmFseXRpY3MiLCJzZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwic2V0R3JvdXBDb25kaXRpb25zIiwic2V0VGFibGVCaW5kaW5nSW5mbyIsInNldERvd25sb2FkVXJsIiwicmVxdWVzdFJlZnJlc2giLCJnZXRHcm91cElkIiwiZmluYWxseSIsInN0b3JlZEV2ZW50cyIsIl9yZWYiLCJldmVudElkIiwiY2FsbGJhY2siLCJsaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiX2NvbXB1dGVSb3dCaW5kaW5nSW5mb0Zyb21UZW1wbGF0ZSIsInJvd0JpbmRpbmdJbmZvIiwiZ2V0VGFibGVUZW1wbGF0ZUJpbmRpbmdJbmZvIiwiYmluZGluZ0NvbnRleHQiLCJ0YWJsZUNhbkJlSW5JbmxpbmVFZGl0IiwiZ2V0QmluZGluZyIsImdldFVwZGF0ZUdyb3VwSWQiLCJJTkxJTkVFRElUX1VQREFURUdST1VQSUQiLCIkJHVwZGF0ZUdyb3VwSWQiLCJzdXNwZW5kZWQiLCJvRmlsdGVyIiwib0ZpbHRlckluZm8iLCJGaWx0ZXIiLCJhbmQiLCJvRGF0YVN0YXRlSW5kaWNhdG9yIiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaXNGaWx0ZXJpbmciLCJ1cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeSIsImFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXMiLCJmaWx0ZXJJbmZvIiwibm9ybWFsaXplU2VhcmNoVGVybSIsInBheWxvYWQiLCJnZXRQYXlsb2FkIiwiZmlsdGVyT25BY3RpdmVFbnRpdGllcyIsImZpbHRlck9uQWN0aXZlIiwib3BlcmF0b3IiLCJ2YWx1ZTEiLCJfdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQiLCJtb2RpZmllciIsInRhYmxlSWQiLCJzbG90Q29sdW1uc1hNTCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImpzeCIsInJlbmRlckFzWE1MIiwiZ2V0U2xvdENvbHVtbiIsInNsb3RYTUwiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIm9UZW1wbGF0ZSIsImZpcnN0RWxlbWVudENoaWxkIiwibm9kZU5hbWUiLCJyZXBsYWNlV2l0aCIsInJlbW92ZSIsInJlc3VsdFhNTCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJtb2RlbHMiLCJnZXRDb250cm9sbGVyIiwiZ2V0T3duZXJDb21wb25lbnQiLCJnZXRQcmVwcm9jZXNzb3JDb250ZXh0IiwidGFyZ2V0cyIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJFeGNlbEZvcm1hdCIsImdldEV4Y2VsRGF0ZWZyb21KU0RhdGUiLCJnZXRFeGNlbERhdGVUaW1lZnJvbUpTRGF0ZVRpbWUiLCJnZXRFeGNlbFRpbWVmcm9tSlNUaW1lIiwiX2dldFZIUmVsZXZhbnRGaWVsZHMiLCJzTWV0YWRhdGFQYXRoIiwic0JpbmRpbmdQYXRoIiwiYUZpZWxkcyIsIm9EYXRhRmllbGREYXRhIiwiJGtpbmQiLCJvVmFsdWUiLCJpSW5kZXgiLCJnZXROYXZpZ2F0aW9uUGF0aCIsIl9zZXREcmFmdEluZGljYXRvck9uVmlzaWJsZUNvbHVtbiIsImFDb2x1bW5zIiwiYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IiLCJvQ29sdW1uIiwic0FkZFZpc2libGVDb2x1bW5OYW1lIiwic1Zpc2libGVDb2x1bW5OYW1lIiwiYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCIsInNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yIiwiaSIsImoiLCJyZW1vdmVJdGVtIiwib1Byb3BlcnR5SW5mb05hbWUiLCJtUHJvcGVydHlCYWciLCJkb1JlbW92ZUl0ZW0iLCJvTW9kaWZpZXIiLCJzRGF0YVByb3BlcnR5IiwiaW5zZXJ0QWdncmVnYXRpb24iLCJfc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMiLCJfZ2V0TWV0YU1vZGVsIiwiX2dldEdyb3VwSWQiLCJzUmV0cmlldmVkR3JvdXBJZCIsIl9pbnNlcnRBZ2dyZWdhdGlvbiIsIm9WYWx1ZUhlbHAiLCJhZGRJdGVtIiwicHJvcGVydHlJbmZvTmFtZSIsInNUYWJsZUlkIiwid2FybmluZyIsInNQYXRoIiwiZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllciIsIm9UYWJsZUNvbnRleHQiLCJnZXRDdXJyZW50UGFnZVZpZXciLCJnZXRDb21wdXRlZENvbHVtbiIsImdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MiLCJwcm9wSW5mbyIsIm9Qcm9wZXJ0eUNvbnRleHQiLCJmblRlbXBsYXRlRnJhZ21lbnQiLCJvSW5Qcm9wZXJ0eUluZm8iLCJvVmlldyIsImJEaXNwbGF5TW9kZSIsInNUYWJsZVR5cGVDdXN0b21EYXRhIiwic0NyZWF0aW9uTW9kZUN1c3RvbURhdGEiLCJhbGwiLCJhQ3VzdG9tRGF0YSIsIm9UaGlzIiwiSlNPTk1vZGVsIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwicmVhZE9ubHkiLCJ0YWJsZVR5cGUiLCJpZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJjb2xsZWN0aW9uIiwiY3JlYXRpb25Nb2RlIiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJ0aGlzIiwidGFibGVDb2xsZWN0aW9uIiwiaGFuZGxlclByb3ZpZGVyIiwiVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciIsImNvbGxlY3Rpb25FbnRpdHkiLCJjb21wdXRlZENvbHVtblhNTCIsImdldENvbHVtblRlbXBsYXRlIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJkZXN0cm95IiwiZ2V0RmlsdGVyRGVsZWdhdGUiLCJGaWx0ZXJCYXJEZWxlZ2F0ZSIsIm9QYXJlbnRDb250cm9sIiwic1Byb3BlcnR5SW5mb05hbWUiLCJyZXBsYWNlIiwiZ2V0VHlwZU1hcCIsImZvcm1hdEdyb3VwSGVhZGVyIiwib2JqIiwiZGF0YUJhc2VUeXBlIiwiZXh0ZXJuYWxGb3JtYXQiLCJWYWx1ZUZvcm1hdHRlciIsImZvcm1hdFdpdGhCcmFja2V0cyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVEZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFQb2ludFR5cGUsXG5cdEZpZWxkR3JvdXBUeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCBkZWVwRXh0ZW5kIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFeHRlbmRcIjtcbmltcG9ydCB7IGlzQ29uc3RhbnQgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQganN4IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgQmFzZVRyZWVNb2RpZmllciB9IGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IFdyYXBwZWRDYXJkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUZhY3RvcnlcIjtcblxuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBDb2xsYWJvcmF0aW9uTWFuYWdlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY2FyZHMvQ29sbGFib3JhdGlvbk1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0QW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRDb2x1bW5FeHBvcnRTZXR0aW5ncyxcblx0Q29tcHV0ZWRUYWJsZUNvbHVtbixcblx0Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbixcblx0VGFibGVDb2x1bW5cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21FbGVtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCBWYWx1ZUZvcm1hdHRlciBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IERlbGV0ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9EZWxldGVIZWxwZXJcIjtcbmltcG9ydCBFeGNlbEZvcm1hdCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FeGNlbEZvcm1hdEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBQcm9taXNlS2VlcGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Byb21pc2VLZWVwZXJcIjtcbmltcG9ydCB7IGdldExvY2FsaXplZFRleHQsIGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgU2l6ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TaXplSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc1BhdGhGaWx0ZXJhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaXNUeXBlRmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db2xsZWN0aW9uQmluZGluZ0luZm9cIjtcbmltcG9ydCBDb2xsZWN0aW9uQmluZGluZ0luZm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29sbGVjdGlvbkJpbmRpbmdJbmZvXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCBGaWx0ZXJCYXJEZWxlZ2F0ZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyQmFyRGVsZWdhdGVcIjtcbmltcG9ydCB7IGdldENvbHVtblRlbXBsYXRlLCBnZXRDb21wdXRlZENvbHVtbiwgZ2V0U2xvdENvbHVtbiB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL01kY1RhYmxlVGVtcGxhdGVcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlSGVscGVyXCI7XG5pbXBvcnQgVGFibGVSdW50aW1lIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlUnVudGltZVwiO1xuaW1wb3J0IFRhYmxlU2l6ZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVNpemVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxCaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgVGFibGVVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IHR5cGUgTGlzdFJlcG9ydENvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9MaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7ICRJbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5ncyB9IGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2UgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgdHlwZSB7IEpzQ29udHJvbFRyZWVNb2RpZmllciB9IGZyb20gXCJzYXAvdWkvY29yZS91dGlsL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9tZGMvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1EQ1RhYmxlLCBNRENUYWJsZVByb3BlcnR5SW5mbyBhcyBQcm9wZXJ0eUluZm8sIGRlZmF1bHQgYXMgVGFibGUsIFZpc3VhbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIFR5cGVDb25maWcgZnJvbSBcInNhcC91aS9tZGMvVHlwZUNvbmZpZ1wiO1xuaW1wb3J0IHR5cGUgeyBDb25kaXRpb25PYmplY3QgfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgVGFibGVEZWxlZ2F0ZUJhc2UgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvVGFibGVEZWxlZ2F0ZVwiO1xuaW1wb3J0IFR5cGVNYXAgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvVHlwZU1hcFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCB0eXBlIE1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQsIGRlZmF1bHQgYXMgdjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyIGZyb20gXCIuLi9UYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXCI7XG5cbmNvbnN0IFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiA9IFwiL3NlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3JcIjtcbmNvbnN0IFNFQVJDSF9IQVNfQkVFTl9GSVJFRCA9IFwic2VhcmNoRmlyZWRcIjtcbmNvbnN0IENPTFVNTl9IQVNfQkVFTl9BRERFRCA9IFwiY29sdW1uQWRkZWRcIjtcbmNvbnN0IFBSRVZJT1VTX1NPUlRFUlMgPSBcInByZXZpb3VzU29ydGVyc1wiO1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3Igc2FwLnVpLm1kYy5UYWJsZS5cbiAqIDxoMz48Yj5Ob3RlOjwvYj48L2gzPlxuICogVGhlIGNsYXNzIGlzIGV4cGVyaW1lbnRhbCBhbmQgdGhlIEFQSSBhbmQgdGhlIGJlaGF2aW9yIGFyZSBub3QgZmluYWxpemVkLiBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCBmb3IgcHJvZHVjdGl2ZSB1c2FnZS5cbiAqIEBhdXRob3IgU0FQIFNFXG4gKiBAcHJpdmF0ZVxuICogQGV4cGVyaW1lbnRhbFxuICogQHNpbmNlIDEuNjkuMFxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuVGFibGVEZWxlZ2F0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBPYmplY3QuYXNzaWduKHt9LCBUYWJsZURlbGVnYXRlQmFzZSwge1xuXHRhcGlWZXJzaW9uOiAyLFxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSB3aWR0aCBvZiBhIEZpZWxkR3JvdXAgY29sdW1uLlxuXHQgKiBUaGUgd2lkdGggb2YgdGhlIEZpZWxkR3JvdXAgaXMgdGhlIHdpZHRoIG9mIHRoZSB3aWRlc3QgcHJvcGVydHkgY29udGFpbmVkIGluIHRoZSBGaWVsZEdyb3VwIChpbmNsdWRpbmcgdGhlIGxhYmVsIGlmIHNob3dEYXRhRmllbGRzTGFiZWwgaXMgdHJ1ZSlcblx0ICogVGhlIHJlc3VsdCBvZiB0aGlzIGNhbGN1bGF0aW9uIGlzIHN0b3JlZCBpbiB0aGUgdmlzdWFsU2V0dGluZ3Mud2lkdGhDYWxjdWxhdGlvbi5taW5XaWR0aCBwcm9wZXJ0eSwgd2hpY2ggaXMgdXNlZCBieSB0aGUgTURDdGFibGUuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0aGUgTURDdGFibGVcblx0ICogQHBhcmFtIHByb3BlcnR5SW5mbyBDdXJyZW50IHByb3BlcnR5SW5mb1xuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvcyBBcnJheSBvZiBwcm9wZXJ0aWVzXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLlRhYmxlRGVsZWdhdGVcblx0ICovXG5cdF9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwOiBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdHByb3BlcnR5SW5mbzogRW5oYW5jZWRGRVByb3BlcnR5SW5mbyxcblx0XHRwcm9wZXJ0eUluZm9zOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW11cblx0KSB7XG5cdFx0aWYgKHByb3BlcnR5SW5mby5rZXkuaW5kZXhPZihcIkRhdGFGaWVsZEZvckFubm90YXRpb246OkZpZWxkR3JvdXA6OlwiKSA9PT0gMCkge1xuXHRcdFx0Y29uc3QgY29sdW1uID0gdGFibGUuZ2V0Q29sdW1ucygpLmZpbmQoKGNvbCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29sLmdldFByb3BlcnR5S2V5KCkgPT09IHByb3BlcnR5SW5mby5rZXk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IHNob3dEYXRhRmllbGRzTGFiZWwgPSBjb2x1bW4gPyBjb2x1bW4uZGF0YShcInNob3dEYXRhRmllbGRzTGFiZWxcIikgPT09IFwidHJ1ZVwiIDogZmFsc2U7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob01ldGFNb2RlbC5nZXRDb250ZXh0KHByb3BlcnR5SW5mby5hbm5vdGF0aW9uUGF0aCkpO1xuXHRcdFx0Y29uc3QgY29udmVydGVkTWV0YURhdGEgPSBpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMuY29udmVydGVkVHlwZXM7XG5cdFx0XHRjb25zdCBvRGF0YUZpZWxkID0gaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uO1xuXHRcdFx0Y29uc3Qgb0ZpZWxkR3JvdXAgPSBvRGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0IGFzIEZpZWxkR3JvdXBUeXBlO1xuXHRcdFx0Y29uc3QgYUZpZWxkV2lkdGg6IG51bWJlcltdID0gW107XG5cdFx0XHRvRmllbGRHcm91cC5EYXRhLmZvckVhY2goZnVuY3Rpb24gKG9EYXRhOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdFx0XHRcdGxldCBvRGF0YUZpZWxkV2lkdGg6IHsgbGFiZWxXaWR0aDogbnVtYmVyOyBwcm9wZXJ0eVdpZHRoOiBudW1iZXIgfTtcblx0XHRcdFx0c3dpdGNoIChvRGF0YS4kVHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCI6XG5cdFx0XHRcdFx0XHRvRGF0YUZpZWxkV2lkdGggPSBUYWJsZVNpemVIZWxwZXIuZ2V0V2lkdGhGb3JEYXRhRmllbGRGb3JBbm5vdGF0aW9uKFxuXHRcdFx0XHRcdFx0XHRvRGF0YSxcblx0XHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mb3MsXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlZE1ldGFEYXRhLFxuXHRcdFx0XHRcdFx0XHRzaG93RGF0YUZpZWxkc0xhYmVsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0XHRcdFx0b0RhdGFGaWVsZFdpZHRoID0gVGFibGVTaXplSGVscGVyLmdldFdpZHRoRm9yRGF0YUZpZWxkKFxuXHRcdFx0XHRcdFx0XHRvRGF0YSxcblx0XHRcdFx0XHRcdFx0c2hvd0RhdGFGaWVsZHNMYWJlbCxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvcyxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVkTWV0YURhdGEsXG5cdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlPlxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IHtcblx0XHRcdFx0XHRcdFx0bGFiZWxXaWR0aDogMCxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlXaWR0aDogU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aChvRGF0YS5MYWJlbD8udG9TdHJpbmcoKSlcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRGF0YUZpZWxkV2lkdGghKSB7XG5cdFx0XHRcdFx0YUZpZWxkV2lkdGgucHVzaChvRGF0YUZpZWxkV2lkdGgubGFiZWxXaWR0aCArIG9EYXRhRmllbGRXaWR0aC5wcm9wZXJ0eVdpZHRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBuV2lkZXN0ID0gYUZpZWxkV2lkdGgucmVkdWNlKGZ1bmN0aW9uIChhY2M6IG51bWJlciwgdmFsdWU6IG51bWJlcikge1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoYWNjLCB2YWx1ZSk7XG5cdFx0XHR9LCAwKTtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzIGFzIG9iamVjdCwge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0dmVydGljYWxBcnJhbmdlbWVudDogdHJ1ZSxcblx0XHRcdFx0XHRtaW5XaWR0aDogTWF0aC5jZWlsKG5XaWRlc3QpXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVmFsdWVIZWxwOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBwcm9wZXJ0eTogRW5oYW5jZWRGRVByb3BlcnR5SW5mbykge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0aWYgKCFwcm9wZXJ0eS5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aCAmJiBtZXRhTW9kZWwpIHtcblx0XHRcdFx0Y29uc3QgZGF0YUZpZWxkID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aH1AYCk7XG5cdFx0XHRcdGlmIChkYXRhRmllbGQgJiYgZGF0YUZpZWxkW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIl0pIHtcblx0XHRcdFx0XHRwcm9wZXJ0eS52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHkudmlzdWFsU2V0dGluZ3MgfHwge30sIHtcblx0XHRcdFx0XHRcdHdpZHRoQ2FsY3VsYXRpb246IHtcblx0XHRcdFx0XHRcdFx0Z2FwOiB0YWJsZUFQSS5nZXRQcm9wZXJ0eShcInJlYWRPbmx5XCIpID8gMCA6IDRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyxcblx0XHR1bml0Pzogc3RyaW5nLFxuXHRcdHVuaXRUZXh0Pzogc3RyaW5nLFxuXHRcdHRpbWV6b25lVGV4dD86IHN0cmluZ1xuXHQpIHtcblx0XHRjb25zdCBvVGFibGVBUEk6IEVuaGFuY2VXaXRoVUk1PFRhYmxlQVBJPiB8IG51bGwgPSB0YWJsZSA/ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBFbmhhbmNlV2l0aFVJNTxUYWJsZUFQST4pIDogbnVsbDtcblx0XHQvLyB1cGRhdGUgZ2FwIGZvciBwcm9wZXJ0aWVzIHdpdGggc3RyaW5nIHVuaXRcblx0XHRjb25zdCB0ZXh0ID0gdW5pdFRleHQgfHwgdGltZXpvbmVUZXh0O1xuXHRcdGlmICh0ZXh0KSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBWaXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Z2FwOiBNYXRoLmNlaWwoU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aCh0ZXh0KSlcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmICh1bml0KSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBWaXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Ly8gRm9yIHByb3BlcnRpZXMgd2l0aCB1bml0LCBhIGdhcCBuZWVkcyB0byBiZSBhZGRlZCB0byBwcm9wZXJseSByZW5kZXIgdGhlIGNvbHVtbiB3aWR0aCBvbiBlZGl0IG1vZGVcblx0XHRcdFx0XHRnYXA6IG9UYWJsZUFQSSAmJiBvVGFibGVBUEkuZ2V0UmVhZE9ubHkoKSA/IDAgOiA2XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZUxhYmVsOiBmdW5jdGlvbiAocHJvcGVydHk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sIGxhYmVsTWFwOiB7IFtsYWJlbDogc3RyaW5nXTogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdIH0pIHtcblx0XHRpZiAocHJvcGVydHkubGFiZWwpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsID0gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdO1xuXHRcdFx0Ly8gVGhpcyBjb21wdXRhdGlvbiBpcyBvbmx5IGZvciBkdXBsaWNhdGUgbGFiZWxzIG9uIG5hdmlnYXRpb24gcHJvcGVydGllcy5cblx0XHRcdC8vIEV4Y2x1ZGUgdGV4dCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBhcyB0ZXh0IG9uIGEgcHJvcGVydHkgYW5ub3RhdGVkIHdpdGggdGV4dCBhcnJhbmdlbWVudCBzZXQgYXMgVGV4dE9ubHkuXG5cdFx0XHQvLyBFeGNsdWRlIG5hdmlnYXRpb24gcHJvcGVydGllcyBjcmVhdGVkIG9ubHkgZm9yIGZpbHRlcmluZyBwdXJwb3NlcyB3aXRoIGEgdGV4dCBhcnJhbmdlbWVudCBzZXQgdG8gVGV4dE9ubHkuXG5cdFx0XHRjb25zdCBpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSA9IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsPy5zb21lKFxuXHRcdFx0XHQocHJvcCkgPT4gcHJvcC50ZXh0ID09PSBwcm9wZXJ0eS5wYXRoICYmIHByb3A/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIlxuXHRcdFx0KTtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvcGVydGllc1dpdGhTYW1lTGFiZWw/Lmxlbmd0aCA+IDEgJiZcblx0XHRcdFx0cHJvcGVydHkucGF0aD8uaW5jbHVkZXMoXCIvXCIpICYmXG5cdFx0XHRcdHByb3BlcnR5LmFkZGl0aW9uYWxMYWJlbHMgJiZcblx0XHRcdFx0IWlzUHJvcGVydHlVc2VkQXNUZXh0T25seVByb3BlcnR5ICYmXG5cdFx0XHRcdCEocHJvcGVydHk/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIiAmJiBwcm9wZXJ0eS5maWx0ZXJhYmxlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHByb3BlcnR5LmxhYmVsID0gcHJvcGVydHkubGFiZWwgKyBcIiAoXCIgKyBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzLmpvaW4oXCIgLyBcIikgKyBcIilcIjtcblx0XHRcdH1cblx0XHRcdGRlbGV0ZSBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzO1xuXHRcdH1cblx0fSxcblx0Ly9VcGRhdGUgVmlzdWFsU2V0dGluZyBmb3IgY29sdW1uV2lkdGggY2FsY3VsYXRpb24gYW5kIGxhYmVscyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0X3VwZGF0ZVByb3BlcnR5SW5mbzogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgcHJvcGVydGllczogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdKSB7XG5cdFx0Y29uc3QgbGFiZWxNYXA6IHsgW2xhYmVsOiBzdHJpbmddOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10gfSA9IHt9O1xuXHRcdC8vIENoZWNrIGF2YWlsYWJsZSBwMTNuIG1vZGVzXG5cdFx0Y29uc3QgcDEzbk1vZGUgPSB0YWJsZS5nZXRQMTNuTW9kZSgpO1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcblx0XHRcdGlmICghcHJvcGVydHkucHJvcGVydHlJbmZvcyAmJiBwcm9wZXJ0eS5sYWJlbCkge1xuXHRcdFx0XHQvLyBPbmx5IGZvciBub24tY29tcGxleCBwcm9wZXJ0aWVzXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiU29ydFwiKSAmJiBwcm9wZXJ0eS5zb3J0YWJsZSkgfHxcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiRmlsdGVyXCIpICYmIHByb3BlcnR5LmZpbHRlcmFibGUpIHx8XG5cdFx0XHRcdFx0KHAxM25Nb2RlPy5pbmNsdWRlcyhcIkdyb3VwXCIpICYmIHByb3BlcnR5Lmdyb3VwYWJsZSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0bGFiZWxNYXBbcHJvcGVydHkubGFiZWxdID1cblx0XHRcdFx0XHRcdGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXSAhPT0gdW5kZWZpbmVkID8gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdLmNvbmNhdChbcHJvcGVydHldKSA6IFtwcm9wZXJ0eV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwKHRhYmxlLCBwcm9wZXJ0eSwgcHJvcGVydGllcyk7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAodGFibGUsIHByb3BlcnR5KTtcblx0XHRcdHRoaXMuX2NvbXB1dGVMYWJlbChwcm9wZXJ0eSwgbGFiZWxNYXApO1xuXHRcdH0pO1xuXHRcdC8vIEFkZCB0aGUgJGVkaXRTdGF0ZSBwcm9wZXJ0eVxuXHRcdHByb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRrZXk6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdFx0bmFtZTogXCIkZWRpdFN0YXRlXCIsXG5cdFx0XHRwYXRoOiBcIiRlZGl0U3RhdGVcIixcblx0XHRcdGdyb3VwTGFiZWw6IFwiXCIsXG5cdFx0XHRncm91cDogXCJcIixcblx0XHRcdGxhYmVsOiBcIlwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIsXG5cdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdGdyb3VwYWJsZTogZmFsc2UsXG5cdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRmaWx0ZXJhYmxlOiBmYWxzZVxuXHRcdH0gYXMgRW5oYW5jZWRGRVByb3BlcnR5SW5mbyk7XG5cdFx0cmV0dXJuIHByb3BlcnRpZXM7XG5cdH0sXG5cblx0Z2V0Q29sdW1uc0ZvcjogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFRhYmxlQ29sdW1uW10ge1xuXHRcdHJldHVybiAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbHVtbnM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGV4cG9ydCBjYXBhYmlsaXRpZXMgZm9yIHRoZSBnaXZlbiBzYXAudWkubWRjLlRhYmxlIGluc3RhbmNlLlxuXHQgKiBAcGFyYW0gb1RhYmxlIEluc3RhbmNlIG9mIHRoZSB0YWJsZVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlcHJlc2VudGluZyB0aGUgZXhwb3J0IGNhcGFiaWxpdGllcyBvZiB0aGUgdGFibGUgaW5zdGFuY2Vcblx0ICovXG5cdGZldGNoRXhwb3J0Q2FwYWJpbGl0aWVzOiBhc3luYyBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSk6IFByb21pc2U8eyBYTFNYPzogdW5rbm93bjsgUERGPzogdW5rbm93biB9PiB7XG5cdFx0Y29uc3Qgb0NhcGFiaWxpdGllczogeyBYTFNYPzogdW5rbm93bjsgUERGPzogdW5rbm93biB9ID0geyBYTFNYOiB7fSB9O1xuXHRcdGxldCBvTW9kZWwhOiBPRGF0YU1vZGVsO1xuXHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwuZmV0Y2hNb2RlbChvVGFibGUpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAobW9kZWw6IE1vZGVsKSB7XG5cdFx0XHRcdG9Nb2RlbCA9IG1vZGVsIGFzIE9EYXRhTW9kZWw7XG5cdFx0XHRcdHJldHVybiBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KFwiLyRFbnRpdHlDb250YWluZXJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TdXBwb3J0ZWRGb3JtYXRzXCIpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChhU3VwcG9ydGVkRm9ybWF0czogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc3QgYUxvd2VyRm9ybWF0cyA9IChhU3VwcG9ydGVkRm9ybWF0cyB8fCBbXSkubWFwKChlbGVtZW50KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnQudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChhTG93ZXJGb3JtYXRzLmluY2x1ZGVzKFwiYXBwbGljYXRpb24vcGRmXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Nb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRPYmplY3QoXCIvJEVudGl0eUNvbnRhaW5lckBjb20uc2FwLnZvY2FidWxhcmllcy5QREYudjEuRmVhdHVyZXNcIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAob0Fubm90YXRpb246IHVua25vd24pIHtcblx0XHRcdFx0aWYgKG9Bbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0b0NhcGFiaWxpdGllc1tcIlBERlwiXSA9IE9iamVjdC5hc3NpZ24oe30sIG9Bbm5vdGF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgY29tcHV0aW5nIGV4cG9ydCBjYXBhYmlsaXRpZXM6ICR7ZXJyfWApO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIG9DYXBhYmlsaXRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblxuXHQvKipcblx0ICogRmlsdGVyaW5nIG9uIG5hdmlnYXRpb24gcHJvcGVydGllcyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgTGluZUl0ZW0gYW5ub3RhdGlvbiBub3Igb2YgdGhlIGN1c3RvbSBjb2x1bW5zIGlzIGZvcmJpZGRlbi5cblx0ICogQHBhcmFtIGNvbHVtbkluZm9cblx0ICogQHBhcmFtIGNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGhcblx0ICogQHJldHVybnMgQm9vbGVhbiB0cnVlIGlmIGZpbHRlcmluZyBpcyBhbGxvd2VkLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdF9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHk6IGZ1bmN0aW9uIChcblx0XHRjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0Y29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuXHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBpc0ZpbHRlcmFibGUgPSBpc1BhdGhGaWx0ZXJhYmxlKGNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdHJldHVybiAoXG5cdFx0XHQhY29sdW1uSW5mby5yZWxhdGl2ZVBhdGguaW5jbHVkZXMoXCIvXCIpIHx8XG5cdFx0XHQoKGNvbHVtbkluZm8uaXNQYXJ0T2ZMaW5lSXRlbSA9PT0gdHJ1ZSB8fCBjb2x1bW5JbmZvLmlzUGFydE9mQ3VzdG9tQ29sdW1uID09PSB0cnVlKSAmJlxuXHRcdFx0XHQhKGlzQ29uc3RhbnQoaXNGaWx0ZXJhYmxlKSAmJiBpc0ZpbHRlcmFibGUudmFsdWUgPT09IGZhbHNlKSlcblx0XHQpO1xuXHR9LFxuXG5cdF9mZXRjaFByb3BlcnR5SW5mbzogZnVuY3Rpb24gKFxuXHRcdG1ldGFNb2RlbDogTWV0YU1vZGVsLFxuXHRcdGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnRcblx0KTogRW5oYW5jZWRGRVByb3BlcnR5SW5mbyB7XG5cdFx0Y29uc3Qgc0Fic29sdXRlTmF2aWdhdGlvblBhdGggPSBjb2x1bW5JbmZvLmFubm90YXRpb25QYXRoLFxuXHRcdFx0b0RhdGFGaWVsZCA9IG1ldGFNb2RlbC5nZXRPYmplY3Qoc0Fic29sdXRlTmF2aWdhdGlvblBhdGgpLFxuXHRcdFx0b05hdmlnYXRpb25Db250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoKSBhcyBDb250ZXh0LFxuXHRcdFx0aXNDb21wbGV4VHlwZSA9IGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lICYmIGNvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWU/LmluZGV4T2YoXCJFZG0uXCIpICE9PSAwLFxuXHRcdFx0YkZpbHRlcmFibGUgPSBDb21tb25IZWxwZXIuaXNQcm9wZXJ0eUZpbHRlcmFibGUob05hdmlnYXRpb25Db250ZXh0LCBvRGF0YUZpZWxkKSxcblx0XHRcdGJJc0FuYWx5dGljYWxUYWJsZSA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKHRhYmxlLCBcImVuYWJsZUFuYWx5dGljc1wiKSA9PT0gXCJ0cnVlXCIsXG5cdFx0XHRsYWJlbCA9IGdldExvY2FsaXplZFRleHQoY29sdW1uSW5mby5sYWJlbCA/PyBcIlwiLCBhcHBDb21wb25lbnQgPz8gdGFibGUpLFxuXHRcdFx0dG9vbHRpcCA9IGdldExvY2FsaXplZFRleHQoY29sdW1uSW5mby50b29sdGlwID8/IFwiXCIsIGFwcENvbXBvbmVudCA/PyB0YWJsZSksXG5cdFx0XHR0eXBlQ29uZmlnID0gdGhpcy5fZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvLCBpc0NvbXBsZXhUeXBlKSxcblx0XHRcdHByb3BlcnR5SW5mbzogRW5oYW5jZWRGRVByb3BlcnR5SW5mbyA9IHtcblx0XHRcdFx0bmFtZTogY29sdW1uSW5mby5uYW1lLFxuXHRcdFx0XHRrZXk6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoLFxuXHRcdFx0XHRncm91cExhYmVsOiBjb2x1bW5JbmZvLmdyb3VwTGFiZWwsXG5cdFx0XHRcdGdyb3VwOiBjb2x1bW5JbmZvLmdyb3VwLFxuXHRcdFx0XHRsYWJlbDogbGFiZWwsXG5cdFx0XHRcdHRvb2x0aXA6IHRvb2x0aXAsXG5cdFx0XHRcdGRhdGFUeXBlOiB0eXBlQ29uZmlnLmNsYXNzTmFtZSxcblx0XHRcdFx0dHlwZUNvbmZpZzogdHlwZUNvbmZpZyxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczpcblx0XHRcdFx0XHRjb2x1bW5JbmZvLnR5cGVDb25maWc/LmJhc2VUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiXG5cdFx0XHRcdFx0XHQ/IHsgc3R5bGU6IFwibWVkaXVtL3Nob3J0XCIgfSAvKiBUaGlzIGNvbmRpdGlvbiBkb2Vzbid0IGhhdmUgYW55IGltcGFjdCwgdG8gYmUgcmV2aWV3ZWQgKi9cblx0XHRcdFx0XHRcdDogY29sdW1uSW5mby50eXBlQ29uZmlnPy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRjb25zdHJhaW50czogY29sdW1uSW5mby50eXBlQ29uZmlnPy5jb25zdHJhaW50cyxcblx0XHRcdFx0dmlzaWJsZTogY29sdW1uSW5mby5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIgJiYgIWlzQ29tcGxleFR5cGUsXG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzOiB0aGlzLl9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5ncyhjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLCBjb2x1bW5JbmZvKSxcblx0XHRcdFx0dW5pdDogY29sdW1uSW5mby51bml0LFxuXHRcdFx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdHJlbGF0aXZlUGF0aDogY29sdW1uSW5mby5yZWxhdGl2ZVBhdGhcblx0XHRcdH07XG5cdFx0aWYgKHByb3BlcnR5SW5mby5leHBvcnRTZXR0aW5ncz8udGVtcGxhdGUpIHtcblx0XHRcdHByb3BlcnR5SW5mby5jbGlwYm9hcmRTZXR0aW5ncyA9IHsgdGVtcGxhdGU6IHByb3BlcnR5SW5mby5leHBvcnRTZXR0aW5ncy50ZW1wbGF0ZSB9O1xuXHRcdFx0Ly8gaWYgSSBzZXQgdGhpcyBjbGlwQm9hcmRTZXR0aW5ncyB0aGUgY29weSBwcm92aWRlciBleHRyYWN0IHRoZSBkYXRhIGFjY29yZGluZyB0byB0aGUgdGVtcGxhdGUgaW4gdGhlIGh0bWwgcHJvcGVydHkgYW5kIGl0IGlzIHByb3Blcmx5IGNvcGllZCBpbiBleGNlbFxuXHRcdFx0Ly8gYnV0IHdoZW4gd2UgY29weSBlbHNld2hlcmUgd2Ugb25seSBnZXQgdGhlIHJhdyBkYXRhIGFuZCBub3QgdGhlIHRlbXBsYXRlZCBkYXRhXG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHZpc3VhbFNldHRpbmdzIG9ubHkgaWYgaXQgZXhpc3RzXG5cdFx0aWYgKGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3MgJiYgT2JqZWN0LmtleXMoY29sdW1uSW5mby52aXN1YWxTZXR0aW5ncykubGVuZ3RoID4gMCkge1xuXHRcdFx0cHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzID0gY29sdW1uSW5mby52aXN1YWxTZXR0aW5ncztcblx0XHR9XG5cblx0XHRpZiAoY29sdW1uSW5mby5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSkge1xuXHRcdFx0cHJvcGVydHlJbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlID0gY29sdW1uSW5mby5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZTtcblx0XHR9XG5cblx0XHQvLyBNREMgZXhwZWN0cyAgJ3Byb3BlcnR5SW5mb3MnIG9ubHkgZm9yIGNvbXBsZXggcHJvcGVydGllcy5cblx0XHQvLyBBbiBlbXB0eSBhcnJheSB0aHJvd3MgdmFsaWRhdGlvbiBlcnJvciBhbmQgdW5kZWZpbmVkIHZhbHVlIGlzIHVuaGFuZGxlZC5cblx0XHRpZiAoY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zPy5sZW5ndGgpIHtcblx0XHRcdHByb3BlcnR5SW5mby5wcm9wZXJ0eUluZm9zID0gY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBBZGQgcHJvcGVydGllcyB3aGljaCBhcmUgc3VwcG9ydGVkIG9ubHkgYnkgc2ltcGxlIFByb3BlcnR5SW5mb3MuXG5cblx0XHRcdC8vZ2V0IHRoZSBEYXRhTW9kZWxPYmplY3RQYXRoIGZvciB0aGUgY29sdW1uXG5cdFx0XHRjb25zdCBjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0Q29udGV4dChjb2x1bW5JbmZvLmFubm90YXRpb25QYXRoKSxcblx0XHRcdFx0bWV0YU1vZGVsLmdldENvbnRleHQoRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEodGFibGUsIFwibWV0YVBhdGhcIikhKVxuXHRcdFx0KTtcblx0XHRcdHByb3BlcnR5SW5mby5wYXRoID0gY29sdW1uSW5mby5yZWxhdGl2ZVBhdGg7XG5cdFx0XHQvLyBUT0RPIHdpdGggdGhlIG5ldyBjb21wbGV4IHByb3BlcnR5IGluZm8sIGEgbG90IG9mIFwiRGVzY3JpcHRpb25cIiBmaWVsZHMgYXJlIGFkZGVkIGFzIGZpbHRlci9zb3J0IGZpZWxkc1xuXHRcdFx0cHJvcGVydHlJbmZvLnNvcnRhYmxlID0gY29sdW1uSW5mby5zb3J0YWJsZTtcblx0XHRcdGlmIChiSXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdFx0dGhpcy5fdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMocHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvKTtcblx0XHRcdH1cblx0XHRcdHByb3BlcnR5SW5mby5maWx0ZXJhYmxlID1cblx0XHRcdFx0Y29sdW1uSW5mby5maWx0ZXJhYmxlICE9PSBmYWxzZSAmJlxuXHRcdFx0XHQhIWJGaWx0ZXJhYmxlICYmXG5cdFx0XHRcdHRoaXMuX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eShjb2x1bW5JbmZvLCBjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRcdHByb3BlcnR5SW5mby5pc0tleSA9IGNvbHVtbkluZm8uaXNLZXk7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZ3JvdXBhYmxlID0gY29sdW1uSW5mby5pc0dyb3VwYWJsZTtcblx0XHRcdGlmIChjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudCkge1xuXHRcdFx0XHR0aGlzLl9zZXRUZXh0QXJyYW5nZW1lbnRJbmZvKHByb3BlcnR5SW5mbywgY29sdW1uSW5mbywgdGFibGUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5SW5mby5pc0tleSkge1xuXHRcdFx0XHRwcm9wZXJ0eUluZm8uZXh0ZW5zaW9uID0ge1xuXHRcdFx0XHRcdC8vIE1EQyBuZWVkcyB0byBmaXggdGhpcywgaXQgZG9lc24ndCBtYWtlIHNlbnNlIGZvciBhIG5vbiBBbmFseXRpY2FsIFRhYmxlXG5cdFx0XHRcdFx0dGVjaG5pY2FsbHlHcm91cGFibGU6IHRydWVcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHByb3BlcnR5SW5mby5jYXNlU2Vuc2l0aXZlID0gY29sdW1uSW5mby5jYXNlU2Vuc2l0aXZlO1xuXHRcdFx0aWYgKGNvbHVtbkluZm8uYWRkaXRpb25hbExhYmVscykge1xuXHRcdFx0XHRwcm9wZXJ0eUluZm8uYWRkaXRpb25hbExhYmVscyA9IGNvbHVtbkluZm8uYWRkaXRpb25hbExhYmVscy5tYXAoKGFkZGl0aW9uYWxMYWJlbDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGdldExvY2FsaXplZFRleHQoYWRkaXRpb25hbExhYmVsLCBhcHBDb21wb25lbnQgfHwgdGFibGUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhVbml0KHRhYmxlLCBwcm9wZXJ0eUluZm8sIGNvbHVtbkluZm8udW5pdCwgY29sdW1uSW5mby51bml0VGV4dCwgY29sdW1uSW5mby50aW1lem9uZVRleHQpO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5SW5mbztcblx0fSxcblxuXHQvKipcblx0ICogRXh0ZW5kIHRoZSBleHBvcnQgc2V0dGluZ3MgYmFzZWQgb24gdGhlIGNvbHVtbiBpbmZvLlxuXHQgKiBAcGFyYW0gZXhwb3J0U2V0dGluZ3MgVGhlIGV4cG9ydCBzZXR0aW5ncyB0byBiZSBleHRlbmRlZFxuXHQgKiBAcGFyYW0gY29sdW1uSW5mbyBUaGUgY29sdW1uSW5mbyBvYmplY3Rcblx0ICogQHJldHVybnMgVGhlIGV4dGVuZGVkIGV4cG9ydCBzZXR0aW5nc1xuXHQgKi9cblx0X3NldFByb3BlcnR5SW5mb0V4cG9ydFNldHRpbmdzOiBmdW5jdGlvbiAoXG5cdFx0ZXhwb3J0U2V0dGluZ3M6IENvbHVtbkV4cG9ydFNldHRpbmdzIHwgdW5kZWZpbmVkIHwgbnVsbCxcblx0XHRjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5cblx0KTogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCB1bmRlZmluZWQgfCBudWxsIHtcblx0XHRjb25zdCBleHBvcnRGb3JtYXQgPSB0aGlzLl9nZXRFeHBvcnRGb3JtYXQoY29sdW1uSW5mby50eXBlQ29uZmlnPy5jbGFzc05hbWUpO1xuXHRcdGlmIChleHBvcnRGb3JtYXQgJiYgZXhwb3J0U2V0dGluZ3MpIHtcblx0XHRcdGV4cG9ydFNldHRpbmdzLmZvcm1hdCA9IGV4cG9ydEZvcm1hdDtcblx0XHR9XG5cdFx0cmV0dXJuIGV4cG9ydFNldHRpbmdzO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB0eXBlIGNvbmZpZyBmb3IgdGhlIGdpdmVuIGNvbHVtbiBpbmZvLlxuXHQgKiBAcGFyYW0gY29sdW1uSW5mbyBUaGUgY29sdW1uSW5mbyBvYmplY3QuXG5cdCAqIEBwYXJhbSBpc0NvbXBsZXhUeXBlIEluZGljYXRlcyBpZiB0aGUgZGF0YVR5cGUgaXMgY29tcGxleC5cblx0ICogQHJldHVybnMgVGhlIE1EQyB0eXBlIGNvbmZpZy5cblx0ICovXG5cdF9nZXRUeXBlQ29uZmlnKGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtbiwgaXNDb21wbGV4VHlwZT86IGJvb2xlYW4pOiBUeXBlQ29uZmlnIHtcblx0XHRsZXQgdHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiKTsgLy8gTURDIGV4cGVjdHMgYWx3YXlzIGEgZGF0YVR5cGVcblx0XHRpZiAoY29sdW1uSW5mby50eXBlQ29uZmlnPy5jbGFzc05hbWUgJiYgaXNUeXBlRmlsdGVyYWJsZShjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lKSkge1xuXHRcdFx0dHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcblx0XHRcdFx0Y29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZSxcblx0XHRcdFx0Y29sdW1uSW5mby50eXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5jb25zdHJhaW50c1xuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lICYmICFpc0NvbXBsZXhUeXBlKSB7XG5cdFx0XHR0eXBlQ29uZmlnID0gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKGNvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHlwZUNvbmZpZztcblx0fSxcblx0LyoqXG5cdCAqIFNldCB0aGUgdGV4dCBhcnJhbmdlbWVudCBpbmZvIGZvciB0aGUgY29sdW1uIGluZm8uXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm8gVGhlIGN1cnJlbnQgcHJvcGVydHlJbmZvIG9iamVjdC5cblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbkluZm8gb2JqZWN0LlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIG1kYyB0YWJsZSBjb250cm9sLlxuXHQgKi9cblx0X3NldFRleHRBcnJhbmdlbWVudEluZm86IGZ1bmN0aW9uIChwcm9wZXJ0eUluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sIGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtbiwgdGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdFx0Y29uc3QgZGVzY3JpcHRpb25Db2x1bW4gPSB0aGlzLmdldENvbHVtbnNGb3IodGFibGUpLmZpbmQoZnVuY3Rpb24gKG9Db2wpIHtcblx0XHRcdHJldHVybiBvQ29sLm5hbWUgPT09IGNvbHVtbkluZm8udGV4dEFycmFuZ2VtZW50Py50ZXh0UHJvcGVydHk7XG5cdFx0fSk7XG5cdFx0aWYgKGRlc2NyaXB0aW9uQ29sdW1uKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ubW9kZSA9IGNvbHVtbkluZm8udGV4dEFycmFuZ2VtZW50IS5tb2RlO1xuXHRcdFx0cHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHkgPSBjb2x1bW5JbmZvLnJlbGF0aXZlUGF0aDtcblx0XHRcdHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5ID0gKGRlc2NyaXB0aW9uQ29sdW1uIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pLnJlbGF0aXZlUGF0aDtcblx0XHR9XG5cdFx0cHJvcGVydHlJbmZvLnRleHQgPSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudD8udGV4dFByb3BlcnR5O1xuXHR9LFxuXG5cdF91cGRhdGVBbmFseXRpY2FsUHJvcGVydHlJbmZvQXR0cmlidXRlcyhwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbywgY29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uKSB7XG5cdFx0aWYgKGNvbHVtbkluZm8uYWdncmVnYXRhYmxlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8uYWdncmVnYXRhYmxlID0gY29sdW1uSW5mby5hZ2dyZWdhdGFibGU7XG5cdFx0fVxuXHRcdGlmIChjb2x1bW5JbmZvLmV4dGVuc2lvbikge1xuXHRcdFx0cHJvcGVydHlJbmZvLmV4dGVuc2lvbiA9IGNvbHVtbkluZm8uZXh0ZW5zaW9uO1xuXHRcdH1cblx0fSxcblxuXHRfZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbzogZnVuY3Rpb24gKGNvbHVtbkluZm86IENvbXB1dGVkVGFibGVDb2x1bW4sIHRhYmxlOiBUYWJsZSkge1xuXHRcdGNvbnN0IGxhYmVsID0gZ2V0TG9jYWxpemVkVGV4dChjb2x1bW5JbmZvLmxhYmVsLCB0YWJsZSk7IC8vIFRvZG86IFRvIGJlIHJlbW92ZWQgb25jZSBNREMgcHJvdmlkZXMgdHJhbnNsYXRpb24gc3VwcG9ydFxuXHRcdGNvbnN0IHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvID0ge1xuXHRcdFx0a2V5OiBjb2x1bW5JbmZvLm5hbWUsXG5cdFx0XHRsYWJlbDogbGFiZWwudG9TdHJpbmcoKSxcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogY29sdW1uSW5mby5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIsXG5cdFx0XHRmaWx0ZXJhYmxlOiBmYWxzZSxcblx0XHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRcdGdyb3VwYWJsZTogZmFsc2UsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyxcblx0XHRcdGNsaXBib2FyZFNldHRpbmdzOiBjb2x1bW5JbmZvLmNsaXBib2FyZFNldHRpbmdzIGFzIFByb3BlcnR5SW5mb1tcImNsaXBib2FyZFNldHRpbmdzXCJdXG5cdFx0fTtcblx0XHRpZiAoY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zICE9PSB1bmRlZmluZWQgJiYgY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zLmxlbmd0aCA+IDApIHtcblx0XHRcdHByb3BlcnR5SW5mby5wcm9wZXJ0eUluZm9zID0gY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zO1xuXHRcdH1cblx0XHRyZXR1cm4gcHJvcGVydHlJbmZvO1xuXHR9LFxuXG5cdF9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbzogZnVuY3Rpb24gKGNvbHVtbkluZm86IEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sIHRhYmxlOiBUYWJsZSwgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpIHtcblx0XHRsZXQgbGFiZWw7XG5cdFx0aWYgKGNvbHVtbkluZm8uaGVhZGVyKSB7XG5cdFx0XHRpZiAoY29sdW1uSW5mby5oZWFkZXIuc3RhcnRzV2l0aChcInttZXRhTW9kZWw+XCIpKSB7XG5cdFx0XHRcdGxhYmVsID0gTW9kZWxIZWxwZXIuZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbChjb2x1bW5JbmZvLmhlYWRlciwgdW5kZWZpbmVkLCAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRsYWJlbCA9IGdldExvY2FsaXplZFRleHQoY29sdW1uSW5mby5oZWFkZXIsIGFwcENvbXBvbmVudCk7IC8vIFRvZG86IFRvIGJlIHJlbW92ZWQgb25jZSBNREMgcHJvdmlkZXMgdHJhbnNsYXRpb24gc3VwcG9ydFxuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyA9IHtcblx0XHRcdGtleTogY29sdW1uSW5mby5uYW1lLFxuXHRcdFx0Z3JvdXBMYWJlbDogdW5kZWZpbmVkLFxuXHRcdFx0Z3JvdXA6IHVuZGVmaW5lZCxcblx0XHRcdGxhYmVsOiBsYWJlbCA/PyBcIlwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIsXG5cdFx0XHR2aXNpYmxlOiBjb2x1bW5JbmZvLmF2YWlsYWJpbGl0eSAhPT0gXCJIaWRkZW5cIixcblx0XHRcdGV4cG9ydFNldHRpbmdzOiBjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLFxuXHRcdFx0dmlzdWFsU2V0dGluZ3M6IGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3MgYXMgUHJvcGVydHlJbmZvW1widmlzdWFsU2V0dGluZ3NcIl1cblx0XHR9O1xuXG5cdFx0Ly8gTURDIGV4cGVjdHMgJ3Byb3BlcnR5SW5mb3MnIG9ubHkgZm9yIGNvbXBsZXggcHJvcGVydGllcy5cblx0XHQvLyBBbiBlbXB0eSBhcnJheSB0aHJvd3MgdmFsaWRhdGlvbiBlcnJvciBhbmQgdW5kZWZpbmVkIHZhbHVlIGlzIHVuaGFuZGxlZC5cblx0XHRpZiAoY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zICYmIGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcy5sZW5ndGgpIHtcblx0XHRcdHByb3BlcnR5SW5mby5wcm9wZXJ0eUluZm9zID0gY29sdW1uSW5mby5wcm9wZXJ0eUluZm9zO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBBZGQgcHJvcGVydGllcyB3aGljaCBhcmUgc3VwcG9ydGVkIG9ubHkgYnkgc2ltcGxlIFByb3BlcnR5SW5mb3MuXG5cdFx0XHRwcm9wZXJ0eUluZm8ucGF0aCA9IGNvbHVtbkluZm8ubmFtZTtcblx0XHRcdHByb3BlcnR5SW5mby5zb3J0YWJsZSA9IGZhbHNlO1xuXHRcdFx0cHJvcGVydHlJbmZvLmZpbHRlcmFibGUgPSBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHByb3BlcnR5SW5mbztcblx0fSxcblx0X2JDb2x1bW5IYXNQcm9wZXJ0eVdpdGhEcmFmdEluZGljYXRvcjogZnVuY3Rpb24gKG9Db2x1bW5JbmZvOiBUYWJsZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIShcblx0XHRcdChvQ29sdW1uSW5mby5mb3JtYXRPcHRpb25zICYmIG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMuaGFzRHJhZnRJbmRpY2F0b3IpIHx8XG5cdFx0XHQob0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucyAmJiBvQ29sdW1uSW5mby5mb3JtYXRPcHRpb25zLmZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aClcblx0XHQpO1xuXHR9LFxuXHRfdXBkYXRlRHJhZnRJbmRpY2F0b3JNb2RlbDogZnVuY3Rpb24gKF9vVGFibGU6IFRhYmxlLCBfb0NvbHVtbkluZm86IFRhYmxlQ29sdW1uKTogdm9pZCB7XG5cdFx0Y29uc3QgYVZpc2libGVDb2x1bW5zID0gX29UYWJsZS5nZXRDb2x1bW5zKCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsQmluZGluZ0NvbnRleHQgPSBfb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0Y29uc3Qgc0ludGVybmFsUGF0aCA9IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0ICYmIG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKTtcblx0XHRpZiAoYVZpc2libGVDb2x1bW5zICYmIG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRmb3IgKGNvbnN0IGluZGV4IGluIGFWaXNpYmxlQ29sdW1ucykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0dGhpcy5fYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yKF9vQ29sdW1uSW5mbykgJiZcblx0XHRcdFx0XHRfb0NvbHVtbkluZm8ubmFtZSA9PT0gYVZpc2libGVDb2x1bW5zW2luZGV4XS5nZXRQcm9wZXJ0eUtleSgpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGlmIChvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5nZXRQcm9wZXJ0eShzSW50ZXJuYWxQYXRoICsgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShzSW50ZXJuYWxQYXRoICsgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SLCBfb0NvbHVtbkluZm8ubmFtZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdF9mZXRjaFByb3BlcnRpZXNGb3JFbnRpdHk6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0ZW50aXR5VHlwZVBhdGg6IHN0cmluZyxcblx0XHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+IHtcblx0XHQvLyB3aGVuIGZldGNoaW5nIHByb3BlcnRpZXMsIHRoaXMgYmluZGluZyBjb250ZXh0IGlzIG5lZWRlZCAtIHNvIGxldHMgY3JlYXRlIGl0IG9ubHkgb25jZSBhbmQgdXNlIGlmIGZvciBhbGwgcHJvcGVydGllcy9kYXRhLWZpZWxkcy9saW5lLWl0ZW1zXG5cdFx0Y29uc3QgYmluZGluZ1BhdGggPSBNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKGVudGl0eVR5cGVQYXRoKTtcblx0XHRsZXQgZmV0Y2hlZFByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdID0gW107XG5cdFx0Y29uc3Qgbm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgoYmluZGluZ1BhdGgsIG1ldGFNb2RlbCkuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXM7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmdldENvbHVtbnNGb3IodGFibGUpKVxuXHRcdFx0LnRoZW4oKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pID0+IHtcblx0XHRcdFx0Ly8gRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEgZG9lcyBub3Qgd29yayB2aWEgJ2VudGl0eVNldC8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9EcmFmdEFkbWluaXN0cmF0aXZlRGF0YSdcblx0XHRcdFx0aWYgKGNvbHVtbnMpIHtcblx0XHRcdFx0XHRsZXQgcHJvcGVydHlJbmZvO1xuXHRcdFx0XHRcdGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uSW5mbykgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlRHJhZnRJbmRpY2F0b3JNb2RlbCh0YWJsZSwgY29sdW1uSW5mbyk7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKGNvbHVtbkluZm8udHlwZSkge1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbyA9IHRoaXMuX2ZldGNoUHJvcGVydHlJbmZvKG1ldGFNb2RlbCwgY29sdW1uSW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIHRhYmxlLCBhcHBDb21wb25lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eUluZm8gJiYgIW5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmluY2x1ZGVzKChwcm9wZXJ0eUluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKS5uYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvLm1heENvbmRpdGlvbnMgPSBEZWxlZ2F0ZVV0aWwuaXNNdWx0aVZhbHVlKHByb3BlcnR5SW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pID8gLTEgOiAxO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIkNvbXB1dGVkXCI6XG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID0gdGhpcy5fZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbyhjb2x1bW5JbmZvIGFzIENvbXB1dGVkVGFibGVDb2x1bW4sIHRhYmxlKTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIlNsb3RcIjpcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIkRlZmF1bHRcIjpcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8gPSB0aGlzLl9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbyhjb2x1bW5JbmZvIGFzIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sIHRhYmxlLCBhcHBDb21wb25lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5oYW5kbGVkIHN3aXRjaCBjYXNlICR7Y29sdW1uSW5mby50eXBlfWApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZmV0Y2hlZFByb3BlcnRpZXMucHVzaChwcm9wZXJ0eUluZm8gYXMgRW5oYW5jZWRGRVByb3BlcnR5SW5mbyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0ZmV0Y2hlZFByb3BlcnRpZXMgPSB0aGlzLl91cGRhdGVQcm9wZXJ0eUluZm8odGFibGUsIGZldGNoZWRQcm9wZXJ0aWVzIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSk7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0XHRcdHRhYmxlQVBJLnNldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MoZmV0Y2hlZFByb3BlcnRpZXMgYXMgRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdKTtcblx0XHRcdFx0ZmV0Y2hlZFByb3BlcnRpZXMgPSB0YWJsZUFQSS5nZXRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEFuIGVycm9yIG9jY3VycyB3aGlsZSB1cGRhdGluZyBmZXRjaGVkIHByb3BlcnRpZXM6ICR7ZXJyIGFzIHN0cmluZ31gKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBmZXRjaGVkUHJvcGVydGllcztcblx0XHRcdH0pO1xuXHR9LFxuXG5cdF9nZXRDYWNoZWRPckZldGNoUHJvcGVydGllc0ZvckVudGl0eTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRlbnRpdHlUeXBlUGF0aDogc3RyaW5nLFxuXHRcdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnRcblx0KTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3QgZmV0Y2hlZFByb3BlcnRpZXMgPSB0YWJsZUFQSS5nZXRDYWNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0aWYgKGZldGNoZWRQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShmZXRjaGVkUHJvcGVydGllcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9mZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkodGFibGUsIGVudGl0eVR5cGVQYXRoLCBtZXRhTW9kZWwsIGFwcENvbXBvbmVudCkudGhlbihmdW5jdGlvbiAoXG5cdFx0XHRzdWJGZXRjaGVkUHJvcGVydGllczogUHJvcGVydHlJbmZvW11cblx0XHQpIHtcblx0XHRcdHRhYmxlQVBJLnNldENhY2hlZFByb3BlcnR5SW5mb3Moc3ViRmV0Y2hlZFByb3BlcnRpZXMpO1xuXHRcdFx0cmV0dXJuIHN1YkZldGNoZWRQcm9wZXJ0aWVzO1xuXHRcdH0pO1xuXHR9LFxuXHRzZXROb0RhdGFJbmZvcm1hdGlvbjogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb246ICRJbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5ncyk6IHZvaWQge1xuXHRcdGNvbnN0IG5vRGF0YUFnZ3JlZ2F0aW9uID0gdGFibGUuZ2V0Tm9EYXRhKCk7XG5cdFx0aWYgKHR5cGVvZiBub0RhdGFBZ2dyZWdhdGlvbiAhPSBcInN0cmluZ1wiICYmIChub0RhdGFBZ2dyZWdhdGlvbiBhcyBDb250cm9sKT8uaXNBKFwic2FwLm0uSWxsdXN0cmF0ZWRNZXNzYWdlXCIpKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlID0gbm9EYXRhQWdncmVnYXRpb24gYXMgSWxsdXN0cmF0ZWRNZXNzYWdlO1xuXHRcdFx0Ly8gV2Ugb3ZlcnJpZGUgdGhlIGN1cnJlbnQgdmFsdWVzIG9mIHRoZSBJbGx1c3RyYXRlZE1lc3NhZ2Vcblx0XHRcdGN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2Uuc2V0VGl0bGUoaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24udGl0bGUpO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXREZXNjcmlwdGlvbihpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbik7XG5cdFx0XHRjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlLnNldElsbHVzdHJhdGlvblR5cGUoaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24uaWxsdXN0cmF0aW9uVHlwZSk7XG5cdFx0XHRjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlLnNldElsbHVzdHJhdGlvblNpemUoaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24uaWxsdXN0cmF0aW9uU2l6ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGlsbHVzdHJhdGVkTWVzc2FnZSA9IG5ldyBJbGx1c3RyYXRlZE1lc3NhZ2Uoe1xuXHRcdFx0XHQuLi5pbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvblxuXHRcdFx0fSk7XG5cdFx0XHR0YWJsZS5zZXROb0RhdGEoaWxsdXN0cmF0ZWRNZXNzYWdlKTtcblx0XHR9XG5cdH0sXG5cblx0c2V0VGFibGVOb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2U6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCB0YWJsZUZpbHRlckluZm8gPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8odGFibGUpO1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKTtcblx0XHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJpbmRpbmdJbmZvLnBhdGg/LnN0YXJ0c1dpdGgoXCIvXCIpID8gYmluZGluZ0luZm8ucGF0aC5zdWJzdHJpbmcoMSkgOiBiaW5kaW5nSW5mby5wYXRoO1xuXHRcdGxldCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3M7XG5cblx0XHRjb25zdCBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycyA9IGZ1bmN0aW9uICgpOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3Mge1xuXHRcdFx0aWYgKHRhYmxlLmRhdGEoXCJoaWRkZW5GaWx0ZXJzXCIpIHx8IHRhYmxlLmdldFF1aWNrRmlsdGVyKCkpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiKSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUX01VTFRJX1ZJRVdcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob1NlYXJjaFJlc3VsdHNcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9TRUFSQ0hSRVNVTFRTXCIpLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUX1dJVEhfRklMVEVSXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vU2VhcmNoUmVzdWx0c1xuXHRcdFx0fTtcblx0XHR9O1xuXG5cdFx0Y29uc3QgZmlsdGVyQXNzb2NpYXRpb24gPSB0YWJsZS5nZXRGaWx0ZXIoKTtcblx0XHRjb25zdCBoYXNGaWx0ZXJPclNlYXJjaCA9IHRhYmxlRmlsdGVySW5mby5zZWFyY2ggfHwgdGFibGVGaWx0ZXJJbmZvLmZpbHRlcnM/Lmxlbmd0aDtcblx0XHRpZiAoZmlsdGVyQXNzb2NpYXRpb24gJiYgIS9CYXNpY1NlYXJjaCQvLnRlc3QoZmlsdGVyQXNzb2NpYXRpb24pKSB7XG5cdFx0XHQvLyBjaGVjayBpZiBhIEZpbHRlckJhciBpcyBhc3NvY2lhdGVkIHRvIHRoZSBUYWJsZSAoYmFzaWMgc2VhcmNoIG9uIHRvb2xCYXIgaXMgZXhjbHVkZWQpXG5cdFx0XHRpZiAoaGFzRmlsdGVyT3JTZWFyY2gpIHtcblx0XHRcdFx0Ly8gY2hlY2sgaWYgdGFibGUgaGFzIGFueSBGaWx0ZXJiYXIgZmlsdGVycyBvciBwZXJzb25hbGl6YXRpb24gZmlsdGVyc1xuXHRcdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0gZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSB7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVFwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vU2VhcmNoUmVzdWx0c1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaGFzRmlsdGVyT3JTZWFyY2gpIHtcblx0XHRcdC8vY2hlY2sgaWYgdGFibGUgaGFzIGFueSBwZXJzb25hbGl6YXRpb24gZmlsdGVyc1xuXHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IGdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSB7XG5cdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9EQVRBXCIpLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fRklMVEVSU19OT19EQVRBX1RFWFRcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9EYXRhXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAoQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSkuZ2V0Vmlld0RhdGEoKS5saXZlTW9kZSkge1xuXHRcdFx0aWYgKGhhc0ZpbHRlck9yU2VhcmNoKSB7XG5cdFx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IHtcblx0XHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiKSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fRklMVEVSU19OT19EQVRBX1RFWFRcIiksXG5cdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob1NlYXJjaFJlc3VsdHNcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbi5pbGx1c3RyYXRpb25TaXplID0gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXROb0RhdGFNZXNzYWdlTW9kZSgpO1xuXG5cdFx0aWYgKGlsbHVzdHJhdGVkSW5mb3JtYXRpb24uaWxsdXN0cmF0aW9uU2l6ZSA9PT0gXCJ0ZXh0XCIpIHtcblx0XHRcdGNvbnN0IGN1cnJlbnROb0RhdGEgPSB0YWJsZS5nZXROb0RhdGEoKTtcblx0XHRcdGlmICh0eXBlb2YgY3VycmVudE5vRGF0YSA9PT0gXCJzdHJpbmdcIiAmJiBjdXJyZW50Tm9EYXRhID09PSBpbGx1c3RyYXRlZEluZm9ybWF0aW9uLmRlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdC8vIFdlIGRvbid0IGNoYW5nZSB0aGUgbm9EYXRhIGFnZ3JlZ2F0aW9uIHVubmVjZXNzYXJ5LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0YWJsZS5zZXROb0RhdGEoaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0Tm9EYXRhSW5mb3JtYXRpb24odGFibGUsIGlsbHVzdHJhdGVkSW5mb3JtYXRpb24pO1xuXHRcdH1cblx0fSxcblxuXHRoYW5kbGVUYWJsZURhdGFSZWNlaXZlZDogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQpOiB2b2lkIHtcblx0XHRjb25zdCBvQmluZGluZyA9IG9UYWJsZSAmJiBvVGFibGUuZ2V0Um93QmluZGluZygpLFxuXHRcdFx0YkRhdGFSZWNlaXZlZEF0dGFjaGVkID0gb0ludGVybmFsTW9kZWxDb250ZXh0ICYmIG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZEF0dGFjaGVkXCIpO1xuXG5cdFx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCAmJiAhYkRhdGFSZWNlaXZlZEF0dGFjaGVkKSB7XG5cdFx0XHRvQmluZGluZy5hdHRhY2hEYXRhUmVjZWl2ZWQoKCkgPT4ge1xuXHRcdFx0XHQvLyBhcyB0aGUgZGF0YVJlY2VpdmVkIGV2ZW50IGlzIGZpcmVkIG11bHRpcGxlIHRpbWVzLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBldmVudCBpcyBvbmx5IGhhbmRsZWQgb25jZVxuXHRcdFx0XHRpZiAoIW9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZFRpbWVvdXRTZXRcIikpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRUaW1lb3V0U2V0XCIsIHRydWUpO1xuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkVGltZW91dFNldFwiLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHQvLyBSZWZyZXNoIHRoZSBzZWxlY3RlZCBjb250ZXh0cyB0byB0cmlnZ2VyIHJlLWNhbGN1bGF0aW9uIG9mIGVuYWJsZWQgc3RhdGUgb2YgYWN0aW9ucy5cblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiwgW10pO1xuXHRcdFx0XHRcdFx0Y29uc3QgYVNlbGVjdGVkQ29udGV4dHMgPSBvVGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpIGFzIE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIGFTZWxlY3RlZENvbnRleHRzKTtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBhU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGgpO1xuXHRcdFx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSBvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0XHRcdFx0XHRjb25zdCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gSlNPTi5wYXJzZSh0YWJsZUFQSS50YWJsZURlZmluaXRpb24ub3BlcmF0aW9uQXZhaWxhYmxlTWFwKTtcblx0XHRcdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAsIGFTZWxlY3RlZENvbnRleHRzLCBcInRhYmxlXCIpO1xuXHRcdFx0XHRcdFx0Ly8gUmVmcmVzaCBlbmFibGVtZW50IG9mIGRlbGV0ZSBidXR0b25cblx0XHRcdFx0XHRcdERlbGV0ZUhlbHBlci51cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyhvSW50ZXJuYWxNb2RlbENvbnRleHQsIGFTZWxlY3RlZENvbnRleHRzKTtcblx0XHRcdFx0XHRcdGNvbnN0IG9UYWJsZUFQSSA9IG9UYWJsZSA/IG9UYWJsZS5nZXRQYXJlbnQoKSA6IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAob1RhYmxlQVBJKSB7XG5cdFx0XHRcdFx0XHRcdChvVGFibGVBUEkgYXMgVGFibGVBUEkpLnNldFVwRW1wdHlSb3dzKG9UYWJsZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVBdmFpbGFibGVDYXJkcyhvVGFibGUpO1xuXHRcdFx0XHRcdH0sIDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZEF0dGFjaGVkXCIsIHRydWUpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2V0IHRoZSBvcHRpbWlzdGljIGJhdGNoIHByb21pc2UgZm9yIHRoZSBlbmFibGVyIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBUaGUgY29udHJvbGxlclxuXHQgKiBAcGFyYW0gdGFibGVBUEkgVGhlIFRhYmxlQVBJXG5cdCAqL1xuXHRzZXRPcHRpbWlzdGljQmF0Y2hQcm9taXNlRm9yTW9kZWw6IGZ1bmN0aW9uIChjb250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgdGFibGVBUEk6IFRhYmxlQVBJKTogdm9pZCB7XG5cdFx0Y29uc3QgbW9kZWwgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKCk7XG5cdFx0aWYgKG1vZGVsKSB7XG5cdFx0XHR0YWJsZUFQSS5zZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZShuZXcgUHJvbWlzZUtlZXBlcjxib29sZWFuPigpKTtcblx0XHRcdHRoaXMuc2V0T3B0aW1pc3RpY0JhdGNoRm9yTW9kZWwoY29udHJvbGxlciwgbW9kZWwsIHRhYmxlQVBJKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEVuYWJsZSB0aGUgb3B0aW1pc3RpYyBiYXRjaCBtb2RlIGlmIGF2YWlsYWJsZS5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqL1xuXHRlbmFibGVPcHRpbWlzdGljQmF0Y2hNb2RlOiBmdW5jdGlvbiAoY29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsIHRhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlcnNQcm9wZXJ0aWVzQXNQb3RlbnRpYWxseVNlbnNpdGl2ZURhdGFPckRhdGVUeXBlID1cblx0XHRcdHRhYmxlICYmIFRhYmxlVXRpbHMuaXNGaWx0ZXJFbGlnaWJsZUZvck9wdGltaXN0aWNCYXRjaCh0YWJsZSwgY29udHJvbGxlci5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIGFzIEZpbHRlckJhcik7XG5cdFx0KHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZSgpPy5yZXNvbHZlKCFmaWx0ZXJzUHJvcGVydGllc0FzUG90ZW50aWFsbHlTZW5zaXRpdmVEYXRhT3JEYXRlVHlwZSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNldHRlciBmb3IgdGhlIG9wdGltaXN0aWMgYmF0Y2ggZW5hYmxlciBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIGRhdGFNb2RlbCBUaGUgT0RhdGEgTW9kZWxcblx0ICogQHBhcmFtIHRhYmxlQVBJIFRoZSBUYWJsZUFQSVxuXHQgKiBAc2VlIHtzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbCNzZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyfSBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cblx0ICovXG5cdHNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsOiBmdW5jdGlvbiAoY29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsIGRhdGFNb2RlbDogT0RhdGFNb2RlbCwgdGFibGVBUEk6IFRhYmxlQVBJKTogdm9pZCB7XG5cdFx0Y29uc3QgaXNPcHRpbWlzdGljQmF0Y2hIYXNUb0JlRW5hYmxlZCA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpLmlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkKCk7XG5cdFx0aWYgKGRhdGFNb2RlbC5nZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyKCkgPT09IG51bGwgJiYgIXRhYmxlQVBJLmlzT3B0aW1pc3RpY0JhdGNoRGlzYWJsZWQoKSAmJiBpc09wdGltaXN0aWNCYXRjaEhhc1RvQmVFbmFibGVkKSB7XG5cdFx0XHRjb25zdCBvcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZUtlZXBlciA9IHRhYmxlQVBJLmdldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlKCk7XG5cdFx0XHRkYXRhTW9kZWwuc2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcihmdW5jdGlvbiAoKTogUHJvbWlzZTxib29sZWFuPiB8IHVuZGVmaW5lZCB7XG5cdFx0XHRcdHJldHVybiBvcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZUtlZXBlcj8ucHJvbWlzZTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRyZWJpbmQ6IGFzeW5jIGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBvQmluZGluZ0luZm86IEJhc2VBZ2dyZWdhdGlvbkJpbmRpbmdJbmZvKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgb1RhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGJJc1N1c3BlbmRlZCA9IG9UYWJsZUFQST8uZ2V0UHJvcGVydHkoXCJiaW5kaW5nU3VzcGVuZGVkXCIpO1xuXHRcdG9UYWJsZUFQST8uc2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIiwgYklzU3VzcGVuZGVkKTtcblx0XHRpZiAoIWJJc1N1c3BlbmRlZCkge1xuXHRcdFx0VGFibGVSdW50aW1lLmNsZWFyU2VsZWN0aW9uKG9UYWJsZSk7XG5cdFx0XHRUYWJsZURlbGVnYXRlQmFzZS5yZWJpbmQuYXBwbHkodGhpcywgW29UYWJsZSwgb0JpbmRpbmdJbmZvXSk7XG5cdFx0XHRUYWJsZVV0aWxzLm9uVGFibGVCb3VuZChvVGFibGUpO1xuXHRcdFx0cmV0dXJuIFRhYmxlVXRpbHMud2hlbkJvdW5kKG9UYWJsZSlcblx0XHRcdFx0LnRoZW4oKHRhYmxlOiBUYWJsZSk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHRoaXMuaGFuZGxlVGFibGVEYXRhUmVjZWl2ZWQodGFibGUsIHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgdGFibGUgdG8gYmUgYm91bmRcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZldGNoZXMgdGhlIHJlbGV2YW50IG1ldGFkYXRhIGZvciB0aGUgdGFibGUgYW5kIHJldHVybnMgcHJvcGVydHkgaW5mbyBhcnJheS5cblx0ICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIHRoZSBNREN0YWJsZVxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBwcm9wZXJ0eSBpbmZvXG5cdCAqL1xuXHRmZXRjaFByb3BlcnRpZXM6IGFzeW5jIGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiB7XG5cdFx0cmV0dXJuIERlbGVnYXRlVXRpbC5mZXRjaE1vZGVsKHRhYmxlKVxuXHRcdFx0LnRoZW4oYXN5bmMgKG1vZGVsKTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4gPT4ge1xuXHRcdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGFibGUpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkoXG5cdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGE8c3RyaW5nPih0YWJsZSwgXCJlbnRpdHlUeXBlXCIpID8/IFwiXCIsXG5cdFx0XHRcdFx0bW9kZWwuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRcdFx0YXBwQ29tcG9uZW50XG5cdFx0XHRcdCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKHByb3BlcnRpZXMpID0+IHtcblx0XHRcdFx0KHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgQ29udGV4dCk/LnNldFByb3BlcnR5KFwidGFibGVQcm9wZXJ0aWVzQXZhaWxhYmxlXCIsIHRydWUpO1xuXHRcdFx0XHRyZXR1cm4gcHJvcGVydGllcztcblx0XHRcdH0pO1xuXHR9LFxuXG5cdHByZUluaXQ6IGFzeW5jIGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gKFRhYmxlRGVsZWdhdGVCYXNlLnByZUluaXQgYXMgKHRhYmxlOiBUYWJsZSkgPT4gUHJvbWlzZTx2b2lkPikuYXBwbHkodGhpcywgW3RhYmxlXSkudGhlbigoKSA9PiB7XG5cdFx0XHQvKipcblx0XHRcdCAqIFNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93IHRvIGF2b2lkIGluaGVyaXRpbmdcblx0XHRcdCAqIHRoZSB3cm9uZyBjb250ZXh0IGFuZCByZXF1ZXN0aW5nIHRoZSB0YWJsZSBjb2x1bW5zIG9uIHRoZSBwYXJlbnQgZW50aXR5XG5cdFx0XHQgKiBTZXQgdGhlIGNvcnJlY3QgYmluZGluZyBjb250ZXh0IGluIE9iamVjdFBhZ2VDb250cm9sbGVyLmVuYWJsZUZhc3RDcmVhdGlvblJvdygpXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGZhc3RDcmVhdGlvblJvdyA9IHRhYmxlLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRpZiAoZmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdGZhc3RDcmVhdGlvblJvdy5zZXRCaW5kaW5nQ29udGV4dChudWxsIGFzIHVua25vd24gYXMgQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fSk7XG5cdH0sXG5cdHVwZGF0ZUJpbmRpbmdJbmZvOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCBjb2xsZWN0aW9uQmluZGluZ0luZm9BUEkgPSBuZXcgQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJKGJpbmRpbmdJbmZvKTtcblx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShcImlzSW5zaWdodHNFbmFibGVkXCIsIHRydWUpO1xuXHRcdFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmdJbmZvLmFwcGx5KHRoaXMsIFt0YWJsZSwgYmluZGluZ0luZm9dKTtcblx0XHR0cnkge1xuXHRcdFx0dGhpcy5faGFuZGxlU29ydGVyc09uQ3VycmVuY2llc09yVW9NKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cdFx0XHR0aGlzLl9pbnRlcm5hbFVwZGF0ZUJpbmRpbmdJbmZvKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cdFx0XHR0aGlzLnNldFRhYmxlTm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cdFx0XHR0aGlzLl9oYW5kbGVSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkcyh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5faGFuZGxlRmlsdGVyc0ZvckV4dGVybmFsSUQodGFibGUsIGJpbmRpbmdJbmZvKTtcblxuXHRcdFx0dGFibGUuZ2V0UGFyZW50KCk/LmZpcmVFdmVudChcImJlZm9yZVJlYmluZFRhYmxlXCIsIHsgY29sbGVjdGlvbkJpbmRpbmdJbmZvOiBjb2xsZWN0aW9uQmluZGluZ0luZm9BUEkgfSk7XG5cdFx0XHRjb25zdCBhdHRhY2hlZEV2ZW50cyA9IGNvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSS5nZXRBdHRhY2hlZEV2ZW50cygpO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBXZSBoYXZlIHRvIHNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93IHRvIGF2b2lkIGl0IGluaGVyaXRpbmdcblx0XHRcdCAqIHRoZSB3cm9uZyBjb250ZXh0IGFuZCByZXF1ZXN0aW5nIHRoZSB0YWJsZSBjb2x1bW5zIGZvciB0aGUgcGFyZW50IGVudGl0eVxuXHRcdFx0ICogVGhlIGNvcnJlY3QgYmluZGluZyBjb250ZXh0IGlzIHNldCBpbiBPYmplY3RQYWdlQ29udHJvbGxlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coKVxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBjb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXHRcdFx0aWYgKHRhYmxlLmdldENyZWF0aW9uUm93KCk/LmdldEJpbmRpbmdDb250ZXh0KCkgPT09IG51bGwgJiYgYmluZGluZ0luZm8ucGF0aCAmJiBjb250ZXh0KSB7XG5cdFx0XHRcdFRhYmxlSGVscGVyLmVuYWJsZUZhc3RDcmVhdGlvblJvdyhcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cblx0XHRcdFx0XHR0YWJsZS5nZXRDcmVhdGlvblJvdygpLFxuXHRcdFx0XHRcdGJpbmRpbmdJbmZvLnBhdGgsXG5cdFx0XHRcdFx0Y29udGV4dCBhcyB2NENvbnRleHQsXG5cdFx0XHRcdFx0dGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsLFxuXHRcdFx0XHRcdFByb21pc2UucmVzb2x2ZSgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHR0YWJsZUFQSS5zZXRBdHRhY2hFdmVudHMoYXR0YWNoZWRFdmVudHMpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHVwZGF0aW5nIHRoZSBiaW5kaW5nIGluZm9cIiwgZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fSxcblxuXHRfaGFuZGxlU29ydGVyc09uQ3VycmVuY2llc09yVW9NOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3Qgc29ydGVyczogU29ydGVyW10gfCB1bmRlZmluZWQgPSBiaW5kaW5nSW5mby5zb3J0ZXI7XG5cdFx0Y29uc3QgbmV3U29ydGVyc1RvQmVBcHBsaWVkOiBTb3J0ZXJbXSA9IFtdO1xuXHRcdGlmIChzb3J0ZXJzPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0XHRjb25zdCB0YWJsZVByb3BlcnRpZXMgPSB0YWJsZUFQSS5nZXRDYWNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0XHRmb3IgKGNvbnN0IHNvcnRlciBvZiBzb3J0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IHRhYmxlUHJvcGVydHkgPSB0YWJsZVByb3BlcnRpZXM/LmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5wYXRoID09PSBzb3J0ZXIuZ2V0UGF0aCgpKTtcblx0XHRcdFx0aWYgKHRhYmxlUHJvcGVydHk/LnVuaXQpIHtcblx0XHRcdFx0XHRjb25zdCB1bml0UHJvcGVydHkgPSB0YWJsZVByb3BlcnRpZXM/LmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5rZXkgPT09IHRhYmxlUHJvcGVydHk/LnVuaXQpO1xuXHRcdFx0XHRcdGNvbnN0IHVuaXRTb3J0ZXJBdmFpbGFibGUgPSB1bml0UHJvcGVydHk/LnBhdGggJiYgc29ydGVycy5zb21lKChzb3J0KSA9PiBzb3J0LmdldFBhdGgoKSA9PT0gdW5pdFByb3BlcnR5LnBhdGgpO1xuXHRcdFx0XHRcdGlmICghdW5pdFNvcnRlckF2YWlsYWJsZSAmJiB1bml0UHJvcGVydHk/LnNvcnRhYmxlICE9PSBmYWxzZSAmJiB1bml0UHJvcGVydHk/LnBhdGgpIHtcblx0XHRcdFx0XHRcdG5ld1NvcnRlcnNUb0JlQXBwbGllZC5wdXNoKG5ldyBTb3J0ZXIodW5pdFByb3BlcnR5LnBhdGgsIGZhbHNlKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdG5ld1NvcnRlcnNUb0JlQXBwbGllZC5wdXNoKHNvcnRlcik7XG5cdFx0XHR9XG5cdFx0XHRiaW5kaW5nSW5mby5zb3J0ZXIgPSBuZXdTb3J0ZXJzVG9CZUFwcGxpZWQ7XG5cdFx0fVxuXHR9LFxuXG5cdF9oYW5kbGVGaWx0ZXJzRm9yRXh0ZXJuYWxJRDogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9ICh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpPy5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBlbnRpdHlUeXBlUGF0aCA9IGJpbmRpbmdJbmZvLnBhdGggKyBcIi9cIjtcblx0XHRjb25zdCBmaWx0ZXJzID0gYmluZGluZ0luZm8uZmlsdGVycz8uZ2V0RmlsdGVycygpO1xuXHRcdGlmIChmaWx0ZXJzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFRhYmxlVXRpbHMudXBkYXRlRmlsdGVyc0ZvckV4dGVybmFsSUQobWV0YU1vZGVsLCBmaWx0ZXJzIGFzIHVua25vd24gYXMgQ29uZGl0aW9uT2JqZWN0W10sIGVudGl0eVR5cGVQYXRoKTtcblx0XHR9XG5cdH0sXG5cblx0X2hhbmRsZVJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBvQmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRhYmxlQVBJPy5nZXRQYWdlQ29udHJvbGxlcigpO1xuXHRcdGlmIChjb250cm9sbGVyPy5yZWNvbW1lbmRhdGlvbnMuaXNSZWNvbW1lbmRhdGlvbkVuYWJsZWQoKSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRcdGNvbnN0IHRhYmxlRGVmID0gdGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCk7XG5cdFx0XHRjb25zdCByZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMgPSBhcHBDb21wb25lbnRcblx0XHRcdFx0LmdldFNpZGVFZmZlY3RzU2VydmljZSgpXG5cdFx0XHRcdC5nZXRSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkcyh0YWJsZURlZi5hbm5vdGF0aW9uLmVudGl0eVR5cGVOYW1lKTtcblx0XHRcdGlmIChyZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMgJiYgcmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzLmxlbmd0aCA+IDAgJiYgb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0b0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlbGVjdCA9IG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzPy4kc2VsZWN0Py5jb25jYXQoXCIsXCIsIHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcy5qb2luKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVXBkYXRlIHRoZSBjYXJkcyB3aGVuIHRoZSBiaW5kaW5nIGlzIHJlZnJlc2hlZC5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICovXG5cdF91cGRhdGVBdmFpbGFibGVDYXJkczogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0aWYgKHRhYmxlQVBJLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpLmdldFZpZXdEYXRhKCk/LmNvbnZlcnRlclR5cGUgPT09IFwiTGlzdFJlcG9ydFwiKSB7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0YWJsZUFQST8uZ2V0UGFnZUNvbnRyb2xsZXIoKT8uZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0XHRjb25zdCBjYXJkczogV3JhcHBlZENhcmRbXSA9IFtdO1xuXHRcdFx0YXdhaXQgdGFibGVBUEkuY29sbGVjdEF2YWlsYWJsZUNhcmRzKGNhcmRzKTtcblx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpb25NYW5hZ2VyID0gbmV3IENvbGxhYm9yYXRpb25NYW5hZ2VyKCk7XG5cdFx0XHRjb25zdCBjYXJkT2JqZWN0ID0gY29sbGFib3JhdGlvbk1hbmFnZXIudXBkYXRlQ2FyZHMoY2FyZHMpO1xuXHRcdFx0Y29uc3QgcGFyZW50QXBwSWQgPSBhcHBDb21wb25lbnQuZ2V0SWQoKTtcblx0XHRcdGFwcENvbXBvbmVudC5nZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UoKS5hZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIoY2FyZE9iamVjdCwgcGFyZW50QXBwSWQpO1xuXHRcdFx0YXBwQ29tcG9uZW50LmdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpLnNoYXJlQXZhaWxhYmxlQ2FyZHMoKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoZSBob29rIGltcGxlbWVudGVkIGJ5IE1EQyB0aGF0IHdlIGNhbiBvdmVycmlkZS5cblx0ICogVGhpcyBhbGxvd3MgdXMgdG8gZGVmaW5lIHByb3BlcnRpZXMgdG8gYmUgcmVxdWVzdGVkIGluIHRoZSBNREMgdGFibGUgKE1haW4gY2FzZSBpcyBmb3IgdGhlIGFuYWx5dGljYWwgdGFibGUpLlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIG1kYyB0YWJsZSBjb250cm9sLlxuXHQgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lIHRvIGJlIHJlcXVlc3RlZC5cblx0ICovXG5cdGdldEluUmVzdWx0UHJvcGVydHlLZXlzOiBmdW5jdGlvbiAodGFibGU6IE1EQ1RhYmxlKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0aWYgKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsKSB7XG5cdFx0XHRjb25zdCBhbGxLa2V5c1JlcXVlc3RlZCA9IHRoaXMuY2hlY2tBbGxLZXlzQXJlUmVxdWVzdGVkKHRhYmxlQVBJKTtcblx0XHRcdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0Ly8gaWYgYSByb3dwcmVzcyBpcyBvdmVycmlkZGVuLCB3ZSAgc2hvdWxkIGVuYWJsZSB0aGUgbmF2aWdhdGlvbiBhdCB0aGUgbm9kZSBsZXZlbFxuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoXCJpc05vZGVMZXZlbE5hdmlnYWJsZVwiLCB0YWJsZUFQSS5vdmVycmlkZVJvd1ByZXNzID8gdHJ1ZSA6IGFsbEtrZXlzUmVxdWVzdGVkKTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdE9iamVjdC5rZXlzKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5yZXF1ZXN0QXRMZWFzdClcblx0XHRcdFx0XHQvLyBmb3IgYW5hbHl0aWMgdGFibGVzIHdpdGggYWdncmVnYXRpb25PbkxlYWZMZXZlbCB3ZSBzaG91bGQgbm90IHJlcXVlc3QgdGhlIHNlbWFudGljS2V5IGV4cGVjdGVkIHdoZW4gYWxsIGtleXMgYXJlIHJlcXVlc3RlZCAtPiAgaXQgd2lsbCBwZXJtaXRzIHRvIG5hdmlnYXRlIGZyb20gYSBub2RlIGxldmVsIHdoZW4gc2VtYW50aWNLZXkgYXJlIGVuYWJsZWRcblx0XHRcdFx0XHQvLyByZXN0cmljdGlvbiBhcmUgYWxzbyBleGNsdWRlZCBhcyB3ZSBjYW5ub3QgZGVzdGluZ3Vpc2ggYmV0d2VlbiBhIG5vZGUgYW5kIGEgYWdncmVnYXRpb24gbGV2ZWxcblxuXHRcdFx0XHRcdC5maWx0ZXIoKGZpZWxkTmFtZTogc3RyaW5nKSA9PlxuXHRcdFx0XHRcdFx0IWFsbEtrZXlzUmVxdWVzdGVkXG5cdFx0XHRcdFx0XHRcdD8gdGFibGVBUEkudGFibGVEZWZpbml0aW9uLnJlcXVlc3RBdExlYXN0W2ZpZWxkTmFtZV0uc29tZShcblx0XHRcdFx0XHRcdFx0XHRcdChvcmlnaW4pID0+IG9yaWdpbiAhPT0gXCJyZXN0cmljdGlvblwiICYmIG9yaWdpbiAhPT0gXCJzZW1hbnRpY0tleVwiXG5cdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHQ6IHRydWVcblx0XHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gT2JqZWN0LmtleXModGFibGVBUEkudGFibGVEZWZpbml0aW9uLnJlcXVlc3RBdExlYXN0ID8/IHt9KTtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYWxsIGtleXMoKSBleGNlcHRlZCBJc0FjdGl2ZUVudGl0eSkgYXJlIHJlcXVlc3RlZCBpbiB0aGUgdGFibGUuXG5cdCAqIEBwYXJhbSB0YWJsZUFQSSBUaGUgdGFibGUgQVBJXG5cdCAqIEByZXR1cm5zICBUcnVlIGlmIGFsbCBrZXlzIGFyZSByZXF1ZXN0ZWQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0Y2hlY2tBbGxLZXlzQXJlUmVxdWVzdGVkOiBmdW5jdGlvbiAodGFibGVBUEk6IFRhYmxlQVBJKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdGFibGUgPSB0YWJsZUFQSS5nZXRDb250ZW50KCk7XG5cdFx0Y29uc3QgYWxsQ29sdW1ucyA9IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbHVtbnMgYXMgKFRhYmxlQ29sdW1uICYgeyBpc0tleTogYm9vbGVhbjsgcmVsYXRpdmVQYXRoOiBzdHJpbmcgfSlbXTtcblx0XHRjb25zdCBrZXlQcm9wZXJ0eU5hbWVzID0gYWxsQ29sdW1uc1xuXHRcdFx0LmZpbHRlcigoYykgPT4gYy5pc0tleSAmJiBjLnJlbGF0aXZlUGF0aCAmJiBjLnJlbGF0aXZlUGF0aCAhPT0gXCJJc0FjdGl2ZUVudGl0eVwiKVxuXHRcdFx0Lm1hcCgoYykgPT4gYy5yZWxhdGl2ZVBhdGgpO1xuXG5cdFx0Y29uc3QgZGlzcGxheWVkQ29sdW1ucyA9IHRhYmxlXG5cdFx0XHQuZ2V0Q29sdW1ucygpXG5cdFx0XHQubWFwKChjb2x1bW4pID0+IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbHVtbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSBjb2x1bW4uZ2V0UHJvcGVydHlLZXkoKSkpO1xuXG5cdFx0Ly8gU3RvcmUgYWxsIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBieSBkaXNwbGF5ZWQgY29sdW1ucyBpbiBhIFNldFxuXHRcdGNvbnN0IHJlZmVyZW5jZWRQcm9wZXJ0eVBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdFx0ZnVuY3Rpb24gcHJvY2Vzc0NvbHVtbihjb2w6IEFubm90YXRpb25UYWJsZUNvbHVtbik6IHZvaWQge1xuXHRcdFx0Ly8gQWRkIHRoZSBwcm9wZXJ0eSBuYW1lIGZyb20gY29sdW1uIGl0c2VsZiBpZiBpdCdzIG5vdCBhIGNvbXBsZXggcHJvcGVydHlJbmZvXG5cdFx0XHRpZiAoY29sLnJlbGF0aXZlUGF0aCAmJiBjb2wucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJlZmVyZW5jZWRQcm9wZXJ0eVBhdGhzLmFkZChjb2wucmVsYXRpdmVQYXRoKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRoZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBieSB0aGUgY29sdW1uXG5cdFx0XHRjb2wuZXh0ZW5zaW9uPy5hZGRpdGlvbmFsUHJvcGVydGllcz8uZm9yRWFjaCgoYWRkaXRpb25hbENvbHVtbk5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgYWRkaXRpb25hbENvbHVtbiA9IGFsbENvbHVtbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSBhZGRpdGlvbmFsQ29sdW1uTmFtZSk7XG5cdFx0XHRcdGlmIChhZGRpdGlvbmFsQ29sdW1uPy5yZWxhdGl2ZVBhdGgpIHtcblx0XHRcdFx0XHRyZWZlcmVuY2VkUHJvcGVydHlQYXRocy5hZGQoYWRkaXRpb25hbENvbHVtbi5yZWxhdGl2ZVBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0ZGlzcGxheWVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRcdGlmICghY29sdW1uKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIFByb2Nlc3MgdGhlIGNvbHVtbiBpdHNlbGZcblx0XHRcdHByb2Nlc3NDb2x1bW4oY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbik7XG5cblx0XHRcdC8vIFByb2Nlc3MgdGhlIGNvbHVtbnMgcmVmZXJlbmNlZCBieSB0aGUgY29sdW1uXG5cdFx0XHRjb2x1bW4ucHJvcGVydHlJbmZvcz8uZm9yRWFjaCgocmVsYXRlZENvbHVtbk5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVsYXRlZENvbHVtbiA9IGFsbENvbHVtbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSByZWxhdGVkQ29sdW1uTmFtZSk7XG5cdFx0XHRcdGlmIChyZWxhdGVkQ29sdW1uKSB7XG5cdFx0XHRcdFx0cHJvY2Vzc0NvbHVtbihyZWxhdGVkQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGtleVByb3BlcnR5TmFtZXMuZXZlcnkoKHByb3BOYW1lKSA9PiBwcm9wTmFtZSAmJiByZWZlcmVuY2VkUHJvcGVydHlQYXRocy5oYXMocHJvcE5hbWUpKTtcblx0fSxcblx0LyoqXG5cdCAqIEdldHMgdGhlIHNlYXJjaCBxdWVyeSBmb3IgYW5hbHl0aWNhbCBhbmQgbm9uIGFuYWx5dGljYWwgb2RhdGFMaXN0QmluZGluZy5cblx0ICogQHBhcmFtIGJpbmRpbmcgVGhlIG9EYXRhTGlzdEJpbmRpbmcgaW5zdGFuY2UuXG5cdCAqIEByZXR1cm5zIFRoZSBzZWFyY2ggcXVlcnkgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdW5kZWZpbmVkLlxuXHQgKi9cblx0Z2V0U2VhcmNoUXVlcnk6IGZ1bmN0aW9uIChiaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbiA9IGJpbmRpbmcuZ2V0QWdncmVnYXRpb24/LigpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuXHRcdGlmIChhZ2dyZWdhdGlvbj8uc2VhcmNoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIEZvciBhbmFseXRpY2FsIHRhYmxlcywgdGhlIHNlYXJjaCBxdWVyeSBpcyBzdG9yZWQgaW4gdGhlIGFnZ3JlZ2F0aW9uXG5cdFx0XHRyZXR1cm4gYWdncmVnYXRpb24uc2VhcmNoIGFzIHN0cmluZztcblx0XHR9XG5cdFx0Ly8gSWYgbm90IGZvdW5kIGluIGFnZ3JlZ2F0aW9uLCBjaGVjayB0aGUgcXVlcnkgb3B0aW9uc1xuXHRcdHJldHVybiBiaW5kaW5nLmdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzKCkuJHNlYXJjaDtcblx0fSxcblx0dXBkYXRlQmluZGluZzogZnVuY3Rpb24gKHRhYmxlOiBNRENUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbywgYmluZGluZz86IE9EYXRhTGlzdEJpbmRpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGJJc1N1c3BlbmRlZCA9IHRhYmxlQVBJPy5nZXRQcm9wZXJ0eShcImJpbmRpbmdTdXNwZW5kZWRcIik7XG5cdFx0aWYgKCFiSXNTdXNwZW5kZWQpIHtcblx0XHRcdC8vIGlmIHRoZSByb3dCaW5kaW5nSW5mbyBoYXMgYSAkJGdldEtlZXBBbGl2ZUNvbnRleHQgcGFyYW1ldGVyIHdlIG5lZWQgdG8gY2hlY2sgaXQgaXMgdGhlIG9ubHkgVGFibGUgd2l0aCBzdWNoIGFcblx0XHRcdC8vIHBhcmFtZXRlciBmb3IgdGhlIGNvbGxlY3Rpb25NZXRhUGF0aFxuXHRcdFx0aWYgKGJpbmRpbmdJbmZvLnBhcmFtZXRlcnM/LiQkZ2V0S2VlcEFsaXZlQ29udGV4dCA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHN0cmluZz4odGFibGUsIFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIikgPz8gXCJcIjtcblx0XHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHRhYmxlLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdFx0XHRjb25zdCBrZXB0QWxpdmVMaXN0cyA9IGludGVybmFsTW9kZWw/LmdldE9iamVjdChcIi9rZXB0QWxpdmVMaXN0c1wiKSA/PyB7fTtcblx0XHRcdFx0aWYgKCFrZXB0QWxpdmVMaXN0c1tjb2xsZWN0aW9uUGF0aF0pIHtcblx0XHRcdFx0XHRrZXB0QWxpdmVMaXN0c1tjb2xsZWN0aW9uUGF0aF0gPSB0YWJsZS5nZXRJZCgpO1xuXHRcdFx0XHRcdGludGVybmFsTW9kZWw/LnNldFByb3BlcnR5KFwiL2tlcHRBbGl2ZUxpc3RzXCIsIGtlcHRBbGl2ZUxpc3RzKTtcblx0XHRcdFx0fSBlbHNlIGlmIChrZXB0QWxpdmVMaXN0c1tjb2xsZWN0aW9uUGF0aF0gIT09IHRhYmxlLmdldElkKCkpIHtcblx0XHRcdFx0XHRkZWxldGUgYmluZGluZ0luZm8ucGFyYW1ldGVycy4kJGdldEtlZXBBbGl2ZUNvbnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bGV0IG5lZWRNYW51YWxSZWZyZXNoID0gZmFsc2U7XG5cdFx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSk7XG5cdFx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5ID0gXCJwZW5kaW5nTWFudWFsQmluZGluZ1VwZGF0ZVwiO1xuXHRcdFx0Y29uc3QgcGVuZGluZ01hbnVhbFVwZGF0ZSA9IGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5KSBhcyBib29sZWFuO1xuXHRcdFx0Y29uc3QgbmV3U29ydGVycyA9IEpTT04uc3RyaW5naWZ5KGJpbmRpbmdJbmZvLnNvcnRlciA/PyBbXSk7XG5cblx0XHRcdGlmIChiaW5kaW5nKSB7XG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiBNYW51YWwgcmVmcmVzaCBpZiBmaWx0ZXJzIGFyZSBub3QgY2hhbmdlZCBieSBiaW5kaW5nLnJlZnJlc2goKSBzaW5jZSB1cGRhdGluZyB0aGUgYmluZGluZ0luZm9cblx0XHRcdFx0ICogaXMgbm90IGVub3VnaCB0byB0cmlnZ2VyIGEgYmF0Y2ggcmVxdWVzdC5cblx0XHRcdFx0ICogUmVtb3ZpbmcgY29sdW1ucyBjcmVhdGVzIG9uZSBiYXRjaCByZXF1ZXN0IHRoYXQgd2FzIG5vdCBleGVjdXRlZCBiZWZvcmVcblx0XHRcdFx0ICovXG5cdFx0XHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldz8uZ2V0Vmlld0RhdGEoKSBhcyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncztcblx0XHRcdFx0Y29uc3Qgb2xkRmlsdGVycyA9IGJpbmRpbmcuZ2V0RmlsdGVycyhcIkFwcGxpY2F0aW9uXCIpO1xuXHRcdFx0XHRjb25zdCBwcmV2aW91c1NvcnRlcnMgPSBpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShQUkVWSU9VU19TT1JURVJTKSA/PyBcIltdXCI7XG5cblx0XHRcdFx0Y29uc3QgZmlsdGVyTm90Q2hhbmdlZCA9XG5cdFx0XHRcdFx0KChiaW5kaW5nSW5mby5maWx0ZXJzID09PSBudWxsICYmIG9sZEZpbHRlcnMubGVuZ3RoID09PSAwKSB8fCAvLyBvbiBhbmFseXRpY2FsIHRhYmxlcywgdGhlIGZpbHRlcnMgYXJlIHNldCB0byBudWxsIHdoZW4gbm8gZmlsdGVyc1xuXHRcdFx0XHRcdFx0ZGVlcEVxdWFsKGJpbmRpbmdJbmZvLmZpbHRlcnMsIG9sZEZpbHRlcnNbMF0pKSAmJlxuXHRcdFx0XHRcdG5ld1NvcnRlcnMgPT09IHByZXZpb3VzU29ydGVycyAmJlxuXHRcdFx0XHRcdGJpbmRpbmdJbmZvLnBhdGggPT09IGJpbmRpbmcuZ2V0UGF0aCgpICYmIC8vIFRoZSBwYXRoIGNhbiBiZSBjaGFuZ2VkIGluIGNhc2Ugb2YgYSBwYXJhbWV0cml6ZWQgZW50aXR5XG5cdFx0XHRcdFx0dGhpcy5nZXRTZWFyY2hRdWVyeShiaW5kaW5nKSA9PT0gYmluZGluZ0luZm8/LnBhcmFtZXRlcnM/LiRzZWFyY2g7XG5cdFx0XHRcdGNvbnN0IExSTXVsdGlWaWV3RW5hYmxlZCA9ICEhdmlld0RhdGEudmlld3M7XG5cblx0XHRcdFx0bmVlZE1hbnVhbFJlZnJlc2ggPVxuXHRcdFx0XHRcdGZpbHRlck5vdENoYW5nZWQgJiZcblx0XHRcdFx0XHQoaW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoU0VBUkNIX0hBU19CRUVOX0ZJUkVEKSB8fCAvLyBjaGVjayBpZiB0aGUgc2VhcmNoIGhhcyBiZWVuIHRyaWdnZXJlZFxuXHRcdFx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoQ09MVU1OX0hBU19CRUVOX0FEREVEKSB8fCAvLyBjaGVjayBpZiBhIGNvbHVtbiBoYXMgYmVlbiBhZGRlZFxuXHRcdFx0XHRcdFx0TFJNdWx0aVZpZXdFbmFibGVkKSAmJiAvLyBpZiB0aGUgbXVsdGkgdmlldyBpcyBlbmFibGVkIHRoZSByZXF1ZXN0IHNob3VsZCBiZSByZWZyZXNoZWQgYXMgd2UgZG9uJ3Qga25vd24gaWYgdGhlIGNvbnRlbnQgb2YgdGhlIHRhYmxlIGlzIG91dGRhdGVkIGR1ZSB0byBhbiBhY3Rpb24gb24gYW5vdGhlciB0YWJsZVxuXHRcdFx0XHRcdCFwZW5kaW5nTWFudWFsVXBkYXRlO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQ2xlYW51cCBncm91cENvbmRpdGlvbnMgYW5kIGFnZ3JlZ2F0ZUNvbmRpdGlvbnMgaWYgdGhleSBkb24ndCBtYWtlIHNlbnNlXG5cdFx0XHRpZiAodGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuZW5hYmxlQW5hbHl0aWNzICE9PSB0cnVlKSB7XG5cdFx0XHRcdC8vIEFnZ3JlZ2F0ZSBjb25kaXRpb25zIG5ldmVyIG1ha2Ugc2Vuc2Ugb3V0c2lkZSBvZiBhbiBhbmFseXRpY2FsIHRhYmxlXG5cdFx0XHRcdHRhYmxlLnNldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoKTtcblxuXHRcdFx0XHQvLyBHcm91cCBjb25kaXRpb25zIGRvbid0IG1ha2Ugc2Vuc2UgaW4gYSBUcmVlIG9yIEdyaWQgdGFibGVcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJHcmlkVGFibGVcIiB8fFxuXHRcdFx0XHRcdHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0YWJsZS5zZXRHcm91cENvbmRpdGlvbnMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0VGFibGVEZWxlZ2F0ZUJhc2UudXBkYXRlQmluZGluZy5hcHBseSh0aGlzLCBbdGFibGUsIGJpbmRpbmdJbmZvLCBiaW5kaW5nXSk7XG5cdFx0XHQvLyB3ZSBzdG9yZSB0aGUgdGFibGUgYmluZGluZyBpbmZvIHRoYXQgd2FzIHVzZWQgdG8gYmluZCB0aGUgdGFibGUgaW4gdGhlIHRhYmxlIEFQSVxuXHRcdFx0Ly8gdGhpcyBuZWVkcyB0byBiZSBkb25lIGFmdGVyIHRoZSBjYWxsIHRvIFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmcgb3RoZXIgd2lzZSB3ZSBkb24ndCBnZXQgdGhlIGFnZ3JlZ2F0ZSBwYXJhbWV0ZXJzXG5cdFx0XHQvLyBvdGhlcndpc2UgdGhlcmUgaXMgbm8gd2F5IHRvIHJldHJpZXZlIHNvcnRlcnMgYWRkZWQgaW4gdGhlIG9uQmVmb3JlUmViaW5kVGFibGUgZXZlbnRcblx0XHRcdHRhYmxlQVBJLnNldFRhYmxlQmluZGluZ0luZm8oYmluZGluZ0luZm8pO1xuXHRcdFx0Ly8gd2UgbWFrZSB0aGUgY2FsbCB0byB1cGRhdGUgdGhlIGRvd25sb2FkIHVybCBidXQgZG8gbm90IGF3YWl0IGl0XG5cdFx0XHR0YWJsZUFQSS5zZXREb3dubG9hZFVybCgpO1xuXG5cdFx0XHR0YWJsZS5maXJlRXZlbnQoXCJiaW5kaW5nVXBkYXRlZFwiKTtcblx0XHRcdGlmIChuZWVkTWFudWFsUmVmcmVzaCAmJiB0YWJsZS5nZXRGaWx0ZXIoKSAmJiBiaW5kaW5nKSB7XG5cdFx0XHRcdGJpbmRpbmdcblx0XHRcdFx0XHQucmVxdWVzdFJlZnJlc2goYmluZGluZy5nZXRHcm91cElkKCkpXG5cdFx0XHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkobWFudWFsVXBkYXRlUHJvcGVydHlLZXksIGZhbHNlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZWZyZXNoaW5nIHRoZSB0YWJsZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkobWFudWFsVXBkYXRlUHJvcGVydHlLZXksIHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoU0VBUkNIX0hBU19CRUVOX0ZJUkVELCBmYWxzZSk7XG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShDT0xVTU5fSEFTX0JFRU5fQURERUQsIGZhbHNlKTtcblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFBSRVZJT1VTX1NPUlRFUlMsIG5ld1NvcnRlcnMpO1xuXG5cdFx0XHQvL2ZvciBUcmVldGFibGUsIGl0J3MgbmVjZXNzYXJ5IHRvIGNsZWFyIHRoZSBwYXN0YWJsZUNvbnRleHRzIHNpbmNlIHRoZSBiaW5kaW5nIGRlc3Ryb3lzIHByZXZpb3VzIGNvbnRleHRzLlxuXHRcdFx0aWYgKHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShcInBhc3RhYmxlQ29udGV4dHNcIiwgW10pO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBhdHRhY2hlZEV2ZW50cyA9IHRhYmxlQVBJLnN0b3JlZEV2ZW50cyA/PyBbXTtcblx0XHRcdGF0dGFjaGVkRXZlbnRzLmZvckVhY2goKHsgZXZlbnRJZCwgY2FsbGJhY2ssIGxpc3RlbmVyLCBkYXRhIH0pID0+IHtcblx0XHRcdFx0dGFibGUuZ2V0Um93QmluZGluZygpPy5hdHRhY2hFdmVudChldmVudElkLCBkYXRhLCBjYWxsYmFjaywgbGlzdGVuZXIpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRhYmxlQVBJPy5zZXRQcm9wZXJ0eShcIm91dERhdGVkQmluZGluZ1wiLCBiSXNTdXNwZW5kZWQpO1xuXHR9LFxuXG5cdF9jb21wdXRlUm93QmluZGluZ0luZm9Gcm9tVGVtcGxhdGU6IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKTogQ29sbGVjdGlvbkJpbmRpbmdJbmZvIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCByb3dCaW5kaW5nSW5mbyA9IHRhYmxlQVBJLmdldFRhYmxlVGVtcGxhdGVCaW5kaW5nSW5mbygpO1xuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0bGV0IHRhYmxlQ2FuQmVJbklubGluZUVkaXQgPSBmYWxzZTtcblx0XHRpZiAoXG5cdFx0XHRiaW5kaW5nQ29udGV4dCA9PT0gdW5kZWZpbmVkICYmXG5cdFx0XHRvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJ1aVwiKT8uZ2V0UHJvcGVydHkoXCJpc0VkaXRhYmxlXCIpID09PSBmYWxzZSAmJlxuXHRcdFx0b1RhYmxlLmdldE1vZGVsKFwidmlld0RhdGFcIik/LmdldFByb3BlcnR5KFwiL2lzSW5saW5lRWRpdEVuYWJsZWRcIilcblx0XHQpIHtcblx0XHRcdHRhYmxlQ2FuQmVJbklubGluZUVkaXQgPSB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHQoYmluZGluZ0NvbnRleHQgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpPy5nZXRCaW5kaW5nKCkuZ2V0VXBkYXRlR3JvdXBJZCgpID09IENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRFxuXHRcdCkge1xuXHRcdFx0dGFibGVDYW5CZUluSW5saW5lRWRpdCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHRhYmxlQ2FuQmVJbklubGluZUVkaXQpIHtcblx0XHRcdHJvd0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMgPz89IHt9O1xuXHRcdFx0cm93QmluZGluZ0luZm8ucGFyYW1ldGVycy4kJHVwZGF0ZUdyb3VwSWQgPSBDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJvd0JpbmRpbmdJbmZvO1xuXHR9LFxuXHRfaW50ZXJuYWxVcGRhdGVCaW5kaW5nSW5mbzogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIG9CaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0T2JqZWN0LmFzc2lnbihvQmluZGluZ0luZm8sIHRoaXMuX2NvbXB1dGVSb3dCaW5kaW5nSW5mb0Zyb21UZW1wbGF0ZShvVGFibGUpKTtcblx0XHQvKipcblx0XHQgKiBCaW5kaW5nIGluZm8gbWlnaHQgYmUgc3VzcGVuZGVkIGF0IHRoZSBiZWdpbm5pbmcgd2hlbiB0aGUgZmlyc3QgYmluZFJvd3MgaXMgY2FsbGVkOlxuXHRcdCAqIFRvIGF2b2lkIGR1cGxpY2F0ZSByZXF1ZXN0cyBidXQgc3RpbGwgaGF2ZSBhIGJpbmRpbmcgdG8gY3JlYXRlIG5ldyBlbnRyaWVzLlx0XHRcdFx0ICpcblx0XHQgKiBBZnRlciB0aGUgaW5pdGlhbCBiaW5kaW5nIHN0ZXAsIGZvbGxvdyB1cCBiaW5kaW5ncyBzaG91bGQgbm8gbG9uZ2VyIGJlIHN1c3BlbmRlZC5cblx0XHQgKi9cblx0XHRpZiAob1RhYmxlLmdldFJvd0JpbmRpbmcoKSkge1xuXHRcdFx0b0JpbmRpbmdJbmZvLnN1c3BlbmRlZCA9IGZhbHNlO1xuXHRcdH1cblx0XHQvLyBUaGUgcHJldmlvdXNseSBhZGRlZCBoYW5kbGVyIGZvciB0aGUgZXZlbnQgJ2RhdGFSZWNlaXZlZCcgaXMgbm90IGFueW1vcmUgdGhlcmVcblx0XHQvLyBzaW5jZSB0aGUgYmluZGluZ0luZm8gaXMgcmVjcmVhdGVkIGZyb20gc2NyYXRjaCBzbyB3ZSBuZWVkIHRvIHNldCB0aGUgZmxhZyB0byBmYWxzZSBpbiBvcmRlclxuXHRcdC8vIHRvIGFnYWluIGFkZCB0aGUgaGFuZGxlciBvbiB0aGlzIGV2ZW50IGlmIG5lZWRlZFxuXHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZEF0dGFjaGVkXCIsIGZhbHNlKTtcblx0XHR9XG5cblx0XHRsZXQgb0ZpbHRlcjtcblx0XHRjb25zdCBvRmlsdGVySW5mbyA9IFRhYmxlVXRpbHMuZ2V0QWxsRmlsdGVySW5mbyhvVGFibGUpO1xuXHRcdC8vIFByZXBhcmUgYmluZGluZyBpbmZvIHdpdGggZmlsdGVyL3NlYXJjaCBwYXJhbWV0ZXJzXG5cdFx0aWYgKG9GaWx0ZXJJbmZvLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0b0ZpbHRlciA9IG5ldyBGaWx0ZXIoeyBmaWx0ZXJzOiBvRmlsdGVySW5mby5maWx0ZXJzLCBhbmQ6IHRydWUgfSk7XG5cdFx0fVxuXHRcdGlmIChvRmlsdGVySW5mby5iaW5kaW5nUGF0aCkge1xuXHRcdFx0b0JpbmRpbmdJbmZvLnBhdGggPSBvRmlsdGVySW5mby5iaW5kaW5nUGF0aDtcblx0XHR9XG5cblx0XHRjb25zdCBvRGF0YVN0YXRlSW5kaWNhdG9yID0gb1RhYmxlLmdldERhdGFTdGF0ZUluZGljYXRvcigpO1xuXHRcdGlmIChvRGF0YVN0YXRlSW5kaWNhdG9yICYmIG9EYXRhU3RhdGVJbmRpY2F0b3IuaXNGaWx0ZXJpbmcoKSkge1xuXHRcdFx0Ly8gSW5jbHVkZSBmaWx0ZXJzIG9uIG1lc3NhZ2VTdHJpcFxuXHRcdFx0aWYgKChvQmluZGluZ0luZm8uZmlsdGVycyBhcyB1bmtub3duIGFzIEZpbHRlcltdKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG9GaWx0ZXIgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogKG9CaW5kaW5nSW5mby5maWx0ZXJzIGFzIHVua25vd24gYXMgRmlsdGVyW10pLmNvbmNhdChvRmlsdGVySW5mby5maWx0ZXJzKSwgYW5kOiB0cnVlIH0pO1xuXHRcdFx0XHR0aGlzLnVwZGF0ZUJpbmRpbmdJbmZvV2l0aFNlYXJjaFF1ZXJ5KG9CaW5kaW5nSW5mbywgb0ZpbHRlckluZm8sIG9GaWx0ZXIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVwZGF0ZUJpbmRpbmdJbmZvV2l0aFNlYXJjaFF1ZXJ5KG9CaW5kaW5nSW5mbywgb0ZpbHRlckluZm8sIG9GaWx0ZXIpO1xuXHRcdH1cblxuXHRcdHRoaXMuYWRkRmlsdGVyT25BY3RpdmVFbnRpdGllcyhvVGFibGUsIG9CaW5kaW5nSW5mbyk7XG5cdH0sXG5cblx0dXBkYXRlQmluZGluZ0luZm9XaXRoU2VhcmNoUXVlcnk6IGZ1bmN0aW9uIChiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvLCBmaWx0ZXJJbmZvOiBJbnRlcm5hbEJpbmRpbmdJbmZvLCBmaWx0ZXI/OiBGaWx0ZXIpIHtcblx0XHRiaW5kaW5nSW5mby5maWx0ZXJzID0gZmlsdGVyO1xuXHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMgPz89IHt9O1xuXHRcdGlmIChmaWx0ZXJJbmZvLnNlYXJjaCkge1xuXHRcdFx0YmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoID0gQ29tbW9uVXRpbHMubm9ybWFsaXplU2VhcmNoVGVybShmaWx0ZXJJbmZvLnNlYXJjaCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBJZiBzcGVjaWZpZWQgaW4gdGhlIHBheWxvYWQsIGFkZHMgYSBmaWx0ZXIgdG8gZGlzcGxheSBvbmx5IGFjdGl2ZSBlbnRpdGllcy5cblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqIEBwYXJhbSBiaW5kaW5nSW5mb1xuXHQgKi9cblx0YWRkRmlsdGVyT25BY3RpdmVFbnRpdGllczogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IHBheWxvYWQgPSB0YWJsZS5nZXRQYXlsb2FkKCkgYXMgeyBmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzPzogYm9vbGVhbiB9O1xuXG5cdFx0aWYgKHBheWxvYWQ/LmZpbHRlck9uQWN0aXZlRW50aXRpZXMgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGZpbHRlck9uQWN0aXZlID0gbmV3IEZpbHRlcih7IHBhdGg6IFwiSXNBY3RpdmVFbnRpdHlcIiwgb3BlcmF0b3I6IFwiRVFcIiwgdmFsdWUxOiB0cnVlIH0pO1xuXHRcdFx0aWYgKGJpbmRpbmdJbmZvLmZpbHRlcnMpIHtcblx0XHRcdFx0YmluZGluZ0luZm8uZmlsdGVycyA9IG5ldyBGaWx0ZXIoeyBmaWx0ZXJzOiBbZmlsdGVyT25BY3RpdmUsIGJpbmRpbmdJbmZvLmZpbHRlcnNdLCBhbmQ6IHRydWUgfSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRiaW5kaW5nSW5mby5maWx0ZXJzID0gZmlsdGVyT25BY3RpdmU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgdGVtcGxhdGUgZnJvbSB0aGUgZnJhZ21lbnQgb2YgYSBzbG90IGNvbHVtbi5cblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGN1c3RvbSB0YWJsZSBjb2x1bW5cblx0ICogQHBhcmFtIHZpZXcgVGhlIGN1cnJlbnQgdmlld1xuXHQgKiBAcGFyYW0gbW9kaWZpZXIgVGhlIGNvbnRyb2wgdHJlZSBtb2RpZmllclxuXHQgKiBAcGFyYW0gdGFibGVJZCBUaGUgaWQgb2YgdGhlIHVuZGVybHlpbmcgdGFibGVcblx0ICogQHJldHVybnMgVGhlIGxvYWRlZCBmcmFnbWVudFxuXHQgKi9cblx0X3RlbXBsYXRlU2xvdENvbHVtbkZyYWdtZW50OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0Y29sdW1uSW5mbzogQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPixcblx0XHR2aWV3OiBWaWV3LFxuXHRcdG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyIHwgSnNDb250cm9sVHJlZU1vZGlmaWVyLFxuXHRcdHRhYmxlSWQ6IHN0cmluZ1xuXHQpOiBQcm9taXNlPG51bGwgfCBDb250cm9sIHwgQ29udHJvbFtdIHwgRWxlbWVudD4ge1xuXHRcdGNvbnN0IHNsb3RDb2x1bW5zWE1MID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhcblx0XHRcdGpzeC5yZW5kZXJBc1hNTCgoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBnZXRTbG90Q29sdW1uKHRhYmxlSWQsIGNvbHVtbkluZm8sIGZhbHNlKSBhcyB1bmtub3duIGFzIHN0cmluZztcblx0XHRcdH0pLFxuXHRcdFx0XCJ0ZXh0L3htbFwiXG5cdFx0KTtcblx0XHRpZiAoIXNsb3RDb2x1bW5zWE1MKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRjb25zdCBzbG90WE1MID0gc2xvdENvbHVtbnNYTUwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzbG90XCIpWzBdO1xuXG5cdFx0aWYgKGNvbHVtbkluZm8udGVtcGxhdGUpIHtcblx0XHRcdGlmIChzbG90WE1MKSB7XG5cdFx0XHRcdGNvbnN0IG9UZW1wbGF0ZSA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoY29sdW1uSW5mby50ZW1wbGF0ZSBhcyBzdHJpbmcsIFwidGV4dC94bWxcIik7XG5cdFx0XHRcdGlmIChvVGVtcGxhdGUuZmlyc3RFbGVtZW50Q2hpbGQgJiYgb1RlbXBsYXRlLmZpcnN0RWxlbWVudENoaWxkLm5vZGVOYW1lICE9PSBcImh0bWxcIikge1xuXHRcdFx0XHRcdHNsb3RYTUwucmVwbGFjZVdpdGgob1RlbXBsYXRlLmZpcnN0RWxlbWVudENoaWxkKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzbG90WE1MLnJlbW92ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy5lcnJvcihgUGxlYXNlIHByb3ZpZGUgY29udGVudCBpbnNpZGUgdGhpcyBCdWlsZGluZyBCbG9jayBDb2x1bW46ICR7Y29sdW1uSW5mby5oZWFkZXJ9YCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRjb25zdCByZXN1bHRYTUwgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyhcblx0XHRcdHNsb3RDb2x1bW5zWE1MLmZpcnN0RWxlbWVudENoaWxkLFxuXHRcdFx0eyBtb2RlbHM6IHt9IH0sXG5cdFx0XHQodmlldy5nZXRDb250cm9sbGVyKCkuZ2V0T3duZXJDb21wb25lbnQoKSBhcyBFbmhhbmNlV2l0aFVJNTxUZW1wbGF0ZUNvbXBvbmVudD4pLmdldFByZXByb2Nlc3NvckNvbnRleHQoKVxuXHRcdCk7XG5cdFx0aWYgKG1vZGlmaWVyPy50YXJnZXRzICE9PSBcImpzQ29udHJvbFRyZWVcIikge1xuXHRcdFx0cmV0dXJuIHJlc3VsdFhNTC5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHR9XG5cdFx0cmV0dXJuIEZyYWdtZW50LmxvYWQoe1xuXHRcdFx0dHlwZTogXCJYTUxcIixcblx0XHRcdGRlZmluaXRpb246IHJlc3VsdFhNTCxcblx0XHRcdGNvbnRyb2xsZXI6IHZpZXcuZ2V0Q29udHJvbGxlcigpXG5cdFx0fSkgYXMgUHJvbWlzZTxDb250cm9sIHwgQ29udHJvbFtdPjtcblx0fSxcblxuXHRfZ2V0RXhwb3J0Rm9ybWF0OiBmdW5jdGlvbiAoZGF0YVR5cGU/OiBzdHJpbmcpIHtcblx0XHRzd2l0Y2ggKGRhdGFUeXBlKSB7XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdFx0cmV0dXJuIEV4Y2VsRm9ybWF0LmdldEV4Y2VsRGF0ZWZyb21KU0RhdGUoKTtcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjpcblx0XHRcdFx0cmV0dXJuIEV4Y2VsRm9ybWF0LmdldEV4Y2VsRGF0ZVRpbWVmcm9tSlNEYXRlVGltZSgpO1xuXHRcdFx0Y2FzZSBcIkVkbS5UaW1lT2ZEYXlcIjpcblx0XHRcdFx0cmV0dXJuIEV4Y2VsRm9ybWF0LmdldEV4Y2VsVGltZWZyb21KU1RpbWUoKTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9LFxuXG5cdF9nZXRWSFJlbGV2YW50RmllbGRzOiBmdW5jdGlvbiAob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHNNZXRhZGF0YVBhdGg6IHN0cmluZywgc0JpbmRpbmdQYXRoPzogc3RyaW5nKTogc3RyaW5nW10ge1xuXHRcdGxldCBhRmllbGRzOiBzdHJpbmdbXSA9IFtdLFxuXHRcdFx0b0RhdGFGaWVsZERhdGEgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzTWV0YWRhdGFQYXRoKTtcblxuXHRcdGlmIChvRGF0YUZpZWxkRGF0YS4ka2luZCAmJiBvRGF0YUZpZWxkRGF0YS4ka2luZCA9PT0gXCJQcm9wZXJ0eVwiKSB7XG5cdFx0XHRvRGF0YUZpZWxkRGF0YSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRgKTtcblx0XHRcdHNNZXRhZGF0YVBhdGggPSBgJHtzTWV0YWRhdGFQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGREZWZhdWx0YDtcblx0XHR9XG5cdFx0c3dpdGNoIChvRGF0YUZpZWxkRGF0YS4kVHlwZSkge1xuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIjpcblx0XHRcdFx0aWYgKG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGhgKS5pbmNsdWRlcyhcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXBcIikpIHtcblx0XHRcdFx0XHRvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGFgKS5mb3JFYWNoKChvVmFsdWU6IHVua25vd24sIGlJbmRleDogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdFx0XHRhRmllbGRzID0gYUZpZWxkcy5jb25jYXQoXG5cdFx0XHRcdFx0XHRcdHRoaXMuX2dldFZIUmVsZXZhbnRGaWVsZHMob01ldGFNb2RlbCwgYCR7c01ldGFkYXRhUGF0aH0vVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhLyR7aUluZGV4fWApXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhVcmxcIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEFjdGlvblwiOlxuXHRcdFx0XHRhRmllbGRzLnB1c2gob01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH0vVmFsdWUvJFBhdGhgKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiOlxuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdC8vIHByb3BlcnR5XG5cdFx0XHRcdC8vIHRlbXBvcmFyeSB3b3JrYXJvdW5kIHRvIG1ha2Ugc3VyZSBWSCByZWxldmFudCBmaWVsZCBwYXRoIGRvIG5vdCBjb250YWluIHRoZSBiaW5kaW5ncGF0aFxuXHRcdFx0XHRpZiAoc0JpbmRpbmdQYXRoICYmIHNNZXRhZGF0YVBhdGguaW5kZXhPZihzQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHRcdFx0YUZpZWxkcy5wdXNoKHNNZXRhZGF0YVBhdGguc3Vic3RyaW5nKHNCaW5kaW5nUGF0aC5sZW5ndGggKyAxKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0YUZpZWxkcy5wdXNoKENvbW1vbkhlbHBlci5nZXROYXZpZ2F0aW9uUGF0aChzTWV0YWRhdGFQYXRoLCB0cnVlKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gYUZpZWxkcztcblx0fSxcblx0X3NldERyYWZ0SW5kaWNhdG9yT25WaXNpYmxlQ29sdW1uOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgYUNvbHVtbnM6IFRhYmxlQ29sdW1uW10sIG9Db2x1bW5JbmZvPzogVGFibGVDb2x1bW4pIHtcblx0XHRjb25zdCBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGlmICghb0ludGVybmFsQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgc0ludGVybmFsUGF0aCA9IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBhQ29sdW1uc1dpdGhEcmFmdEluZGljYXRvciA9IGFDb2x1bW5zLmZpbHRlcigob0NvbHVtbjogVGFibGVDb2x1bW4pID0+IHtcblx0XHRcdHJldHVybiB0aGlzLl9iQ29sdW1uSGFzUHJvcGVydHlXaXRoRHJhZnRJbmRpY2F0b3Iob0NvbHVtbik7XG5cdFx0fSk7XG5cdFx0Y29uc3QgYVZpc2libGVDb2x1bW5zID0gb1RhYmxlLmdldENvbHVtbnMoKTtcblx0XHRsZXQgc0FkZFZpc2libGVDb2x1bW5OYW1lLCBzVmlzaWJsZUNvbHVtbk5hbWUsIGJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQsIHNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yO1xuXHRcdGZvciAoY29uc3QgaSBpbiBhVmlzaWJsZUNvbHVtbnMpIHtcblx0XHRcdHNWaXNpYmxlQ29sdW1uTmFtZSA9IGFWaXNpYmxlQ29sdW1uc1tpXS5nZXRQcm9wZXJ0eUtleSgpO1xuXHRcdFx0Zm9yIChjb25zdCBqIGluIGFDb2x1bW5zV2l0aERyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0XHRcdHNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yID0gYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3Jbal0ubmFtZTtcblx0XHRcdFx0aWYgKHNWaXNpYmxlQ29sdW1uTmFtZSA9PT0gc0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3IpIHtcblx0XHRcdFx0XHRiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0ID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0NvbHVtbkluZm8gJiYgb0NvbHVtbkluZm8ubmFtZSA9PT0gc0NvbHVtbk5hbWVXaXRoRHJhZnRJbmRpY2F0b3IpIHtcblx0XHRcdFx0XHRzQWRkVmlzaWJsZUNvbHVtbk5hbWUgPSBvQ29sdW1uSW5mby5uYW1lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCkge1xuXHRcdFx0XHRvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5zZXRQcm9wZXJ0eShzSW50ZXJuYWxQYXRoICsgU0VNQU5USUNLRVlfSEFTX0RSQUZUSU5ESUNBVE9SLCBzVmlzaWJsZUNvbHVtbk5hbWUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCFiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0ICYmIHNBZGRWaXNpYmxlQ29sdW1uTmFtZSkge1xuXHRcdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiwgc0FkZFZpc2libGVDb2x1bW5OYW1lKTtcblx0XHR9XG5cdH0sXG5cdHJlbW92ZUl0ZW06IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRvVGFibGU6IFVJNUVsZW1lbnQgfCBFbGVtZW50LFxuXHRcdG9Qcm9wZXJ0eUluZm9OYW1lOiBVSTVFbGVtZW50IHwgRWxlbWVudCxcblx0XHRtUHJvcGVydHlCYWc6IHsgbW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXI7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50IH1cblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0bGV0IGRvUmVtb3ZlSXRlbSA9IHRydWU7XG5cdFx0aWYgKCFvUHJvcGVydHlJbmZvTmFtZSkge1xuXHRcdFx0Ly8gMS4gQXBwbGljYXRpb24gcmVtb3ZlZCB0aGUgcHJvcGVydHkgZnJvbSB0aGVpciBkYXRhIG1vZGVsXG5cdFx0XHQvLyAyLiBhZGRJdGVtIGZhaWxlZCBiZWZvcmUgcmV2ZXJ0RGF0YSBjcmVhdGVkXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRvUmVtb3ZlSXRlbSk7XG5cdFx0fVxuXHRcdGNvbnN0IG9Nb2RpZmllciA9IG1Qcm9wZXJ0eUJhZy5tb2RpZmllcjtcblx0XHRjb25zdCBzRGF0YVByb3BlcnR5ID0gYXdhaXQgb01vZGlmaWVyLmdldFByb3BlcnR5PHN0cmluZz4ob1Byb3BlcnR5SW5mb05hbWUsIFwiZGF0YVByb3BlcnR5XCIpO1xuXHRcdGlmIChzRGF0YVByb3BlcnR5ICYmIHNEYXRhUHJvcGVydHkuaW5jbHVkZXMgJiYgc0RhdGFQcm9wZXJ0eS5pbmNsdWRlcyhcIklubGluZVhNTFwiKSkge1xuXHRcdFx0b01vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKG9UYWJsZSwgXCJkZXBlbmRlbnRzXCIsIG9Qcm9wZXJ0eUluZm9OYW1lKTtcblx0XHRcdGRvUmVtb3ZlSXRlbSA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoKG9UYWJsZSBhcyBVSTVFbGVtZW50KS5pc0EgJiYgb01vZGlmaWVyLnRhcmdldHMgPT09IFwianNDb250cm9sVHJlZVwiKSB7XG5cdFx0XHR0aGlzLl9zZXREcmFmdEluZGljYXRvclN0YXR1cyhvTW9kaWZpZXIsIG9UYWJsZSwgdGhpcy5nZXRDb2x1bW5zRm9yKG9UYWJsZSBhcyBUYWJsZSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRvUmVtb3ZlSXRlbSk7XG5cdH0sXG5cdF9nZXRNZXRhTW9kZWw6IGZ1bmN0aW9uIChtUHJvcGVydHlCYWc6IHsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfSkge1xuXHRcdHJldHVybiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50ICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0fSxcblx0X3NldERyYWZ0SW5kaWNhdG9yU3RhdHVzOiBmdW5jdGlvbiAoXG5cdFx0b01vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyLFxuXHRcdG9UYWJsZTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdFx0YUNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdFx0b0NvbHVtbkluZm8/OiBUYWJsZUNvbHVtblxuXHQpIHtcblx0XHRpZiAob01vZGlmaWVyLnRhcmdldHMgPT09IFwianNDb250cm9sVHJlZVwiKSB7XG5cdFx0XHR0aGlzLl9zZXREcmFmdEluZGljYXRvck9uVmlzaWJsZUNvbHVtbihvVGFibGUgYXMgVGFibGUsIGFDb2x1bW5zLCBvQ29sdW1uSW5mbyk7XG5cdFx0fVxuXHR9LFxuXHRfZ2V0R3JvdXBJZDogZnVuY3Rpb24gKHNSZXRyaWV2ZWRHcm91cElkOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gc1JldHJpZXZlZEdyb3VwSWQgfHwgdW5kZWZpbmVkO1xuXHR9LFxuXHRfaW5zZXJ0QWdncmVnYXRpb246IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRvVmFsdWVIZWxwOiBFbGVtZW50IHwgVUk1RWxlbWVudCB8IEVsZW1lbnRbXSB8IFVJNUVsZW1lbnRbXSxcblx0XHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIsXG5cdFx0b1RhYmxlOiBFbGVtZW50IHwgVUk1RWxlbWVudFxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAob1ZhbHVlSGVscCkge1xuXHRcdFx0cmV0dXJuIG9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvVGFibGUsIFwiZGVwZW5kZW50c1wiLCBvVmFsdWVIZWxwLCAwKTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBJbnZva2VkIHdoZW4gYSBjb2x1bW4gaXMgYWRkZWQgdXNpbmcgdGhlIHRhYmxlIHBlcnNvbmFsaXphdGlvbiBkaWFsb2cuXG5cdCAqIEBwYXJhbSBvVGFibGUgSW5zdGFuY2Ugb2YgdGFibGUgY29udHJvbFxuXHQgKiBAcGFyYW0gc1Byb3BlcnR5SW5mb05hbWUgTmFtZSBvZiB0aGUgcHJvcGVydHkgZm9yIHdoaWNoIHRoZSBjb2x1bW4gaXMgYWRkZWRcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZyBJbnN0YW5jZSBvZiBwcm9wZXJ0eSBiYWcgZnJvbSB0aGUgZmxleGliaWxpdHkgQVBJXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcubW9kaWZpZXIgSW5zdGFuY2Ugb2YgdGhlIGNvbnRyb2wgdHJlZSBtb2RpZmllclxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCBJbnN0YW5jZSBvZiB0aGUgYXBwIGNvbXBvbmVudFxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLnZpZXcgSW5zdGFuY2Ugb2YgdGhlIHZpZXdcblx0ICogQHJldHVybnMgT25jZSByZXNvbHZlZCwgYSB0YWJsZSBjb2x1bW4gZGVmaW5pdGlvbiBpcyByZXR1cm5lZFxuXHQgKi9cblx0YWRkSXRlbTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBFbGVtZW50IHwgVUk1RWxlbWVudCxcblx0XHRwcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsXG5cdFx0bVByb3BlcnR5QmFnOiB7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyOyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDsgdmlldz86IEZFVmlldyB9XG5cdCkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSB0aGlzLl9nZXRNZXRhTW9kZWwobVByb3BlcnR5QmFnKSxcblx0XHRcdG9Nb2RpZmllciA9IG1Qcm9wZXJ0eUJhZy5tb2RpZmllcixcblx0XHRcdHNUYWJsZUlkID0gb01vZGlmaWVyLmdldElkKHRhYmxlKSxcblx0XHRcdGFDb2x1bW5zID0gKHRhYmxlIGFzIFVJNUVsZW1lbnQpLmlzQSA/IHRoaXMuZ2V0Q29sdW1uc0Zvcih0YWJsZSBhcyBUYWJsZSkgOiBudWxsLFxuXHRcdFx0dGFibGVBUEkgPSAodGFibGUgYXMgVGFibGUpLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICghYUNvbHVtbnMpIHtcblx0XHRcdC8vIFdlIHJldHVybiBudWxsIGhlcmUgYmVjYXVzZSBldmVyeXRoaW5nIHNob3VsZCBhcHBseSBhdCBydW50aW1lXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbHVtbkluZm8gPSBhQ29sdW1ucy5maW5kKGZ1bmN0aW9uIChvQ29sdW1uKSB7XG5cdFx0XHRyZXR1cm4gb0NvbHVtbi5uYW1lID09PSBwcm9wZXJ0eUluZm9OYW1lO1xuXHRcdH0pO1xuXHRcdGlmICghY29sdW1uSW5mbykge1xuXHRcdFx0TG9nLmVycm9yKGAke3Byb3BlcnR5SW5mb05hbWV9IG5vdCBmb3VuZCB3aGlsZSBhZGRpbmcgY29sdW1uYCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRpZiAoY29sdW1uSW5mby5hdmFpbGFiaWxpdHkgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdExvZy53YXJuaW5nKGBDb2x1bW4gZm9yICR7cHJvcGVydHlJbmZvTmFtZX0gbm90IGFkZGVkIGJlY2F1c2UgaXQncyBoaWRkZW5gKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSAodGFibGUgYXMgVGFibGUpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoQ09MVU1OX0hBU19CRUVOX0FEREVELCB0cnVlKTtcblx0XHR0aGlzLl9zZXREcmFmdEluZGljYXRvclN0YXR1cyhvTW9kaWZpZXIsIHRhYmxlLCBhQ29sdW1ucywgY29sdW1uSW5mbyk7XG5cdFx0Y29uc3Qgc1BhdGggPSBhd2FpdCBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KHRhYmxlLCBcIm1ldGFQYXRoXCIsIG9Nb2RpZmllcik7XG5cdFx0Y29uc3Qgb1RhYmxlQ29udGV4dDogQ29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGghKSE7XG5cdFx0Ly8gSWYgdmlldyBpcyBub3QgcHJvdmlkZWQgdHJ5IHRvIGdldCBpdCBieSBhY2Nlc3NpbmcgdG8gdGhlIHBhcmVudGFsIGhpZXJhcmNoeVxuXHRcdC8vIElmIGl0IGRvZXNuJ3Qgd29yayAodGFibGUgaW50byBhbiB1bmF0dGFjaGVkIE9QIHNlY3Rpb24pIGdldCB0aGUgdmlldyB2aWEgdGhlIEFwcENvbXBvbmVudFxuXHRcdGNvbnN0IHZpZXcgPVxuXHRcdFx0bVByb3BlcnR5QmFnLnZpZXcgfHxcblx0XHRcdENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUgYXMgVUk1RWxlbWVudCkgfHxcblx0XHRcdChtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50ID8gQ29tbW9uVXRpbHMuZ2V0Q3VycmVudFBhZ2VWaWV3KG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQpIDogdW5kZWZpbmVkKTtcblxuXHRcdGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IFwiRGVmYXVsdFwiKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQ3VzdG9tIGNvbHVtbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgYXJlIG5vdCBzdXBwb3J0ZWQgd2hlbiB1c2luZyBhIHRhYmxlIGJ1aWxkaW5nIGJsb2NrLlwiKTtcblx0XHR9XG5cblx0XHRpZiAoY29sdW1uSW5mby50eXBlID09PSBcIlNsb3RcIikge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3RlbXBsYXRlU2xvdENvbHVtbkZyYWdtZW50KGNvbHVtbkluZm8gYXMgQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPiwgdmlldywgb01vZGlmaWVyLCBzVGFibGVJZCk7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZSA9PT0gXCJDb21wdXRlZFwiKSB7XG5cdFx0XHRjb25zdCBlbmFibGVBbmFseXRpY3MgPSAoKHRhYmxlIGFzIE1EQ1RhYmxlKS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuZW5hYmxlQW5hbHl0aWNzO1xuXHRcdFx0cmV0dXJuIGdldENvbXB1dGVkQ29sdW1uKHNUYWJsZUlkLCBjb2x1bW5JbmZvIGFzIENvbXB1dGVkVGFibGVDb2x1bW4sIG9UYWJsZUNvbnRleHQsIGVuYWJsZUFuYWx5dGljcyk7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbC1iYWNrXG5cdFx0aWYgKCFvTWV0YU1vZGVsKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblxuXHRcdGxldCBwcm9wZXJ0eUluZm9zID0gdGFibGVBUEkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdGlmICghcHJvcGVydHlJbmZvcy5sZW5ndGgpIHtcblx0XHRcdC8vIElmIHRoZSBwcm9wZXJ0eUluZm9zIGFyZSBub3QgZmV0Y2hlZCB5ZXQsIHdlIG5lZWQgdG8gZmV0Y2ggdGhlbVxuXHRcdFx0Ly8gVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSB0YWJsZSBpcyBub3QgY3JlYXRlZCB5ZXRcblx0XHRcdGF3YWl0IHRoaXMuZmV0Y2hQcm9wZXJ0aWVzKHRhYmxlIGFzIE1EQ1RhYmxlKTtcblx0XHRcdHByb3BlcnR5SW5mb3MgPSB0YWJsZUFQSS5nZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zKCk7XG5cdFx0fVxuXHRcdGNvbnN0IHByb3BlcnR5SW5mbyA9IHByb3BlcnR5SW5mb3MuZmluZChmdW5jdGlvbiAocHJvcEluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRcdHJldHVybiBwcm9wSW5mby5uYW1lID09PSBwcm9wZXJ0eUluZm9OYW1lO1xuXHRcdH0pO1xuXG5cdFx0Y29uc3Qgb1Byb3BlcnR5Q29udGV4dDogQ29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQocHJvcGVydHlJbmZvIS5hbm5vdGF0aW9uUGF0aCkhO1xuXG5cdFx0Y29uc3QgZm5UZW1wbGF0ZUZyYWdtZW50ID0gYXN5bmMgKFxuXHRcdFx0b0luUHJvcGVydHlJbmZvOiB1bmtub3duLFxuXHRcdFx0b1ZpZXc6IEZFVmlld1xuXHRcdCk6IFByb21pc2U8VUk1RWxlbWVudCB8IEVsZW1lbnQgfCBVSTVFbGVtZW50W10gfCBFbGVtZW50W10+ID0+IHtcblx0XHRcdGxldCBiRGlzcGxheU1vZGU6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0XHRsZXQgc1RhYmxlVHlwZUN1c3RvbURhdGE6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdGxldCBzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoW1xuXHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmcgfCBib29sZWFuPih0YWJsZSwgXCJkaXNwbGF5TW9kZVByb3BlcnR5QmluZGluZ1wiLCBvTW9kaWZpZXIpLFxuXHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KHRhYmxlLCBcInRhYmxlVHlwZVwiLCBvTW9kaWZpZXIpLFxuXHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KHRhYmxlLCBcImNyZWF0aW9uTW9kZVwiLCBvTW9kaWZpZXIpXG5cdFx0XHRdKS50aGVuKGFzeW5jIChhQ3VzdG9tRGF0YTogKHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpW10pID0+IHtcblx0XHRcdFx0YkRpc3BsYXlNb2RlID0gYUN1c3RvbURhdGFbMF0gYXMgYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0c1RhYmxlVHlwZUN1c3RvbURhdGEgPSBhQ3VzdG9tRGF0YVsxXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdHNDcmVhdGlvbk1vZGVDdXN0b21EYXRhID0gYUN1c3RvbURhdGFbMl0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHQvLyBSZWFkIE9ubHkgYW5kIENvbHVtbiBFZGl0IE1vZGUgY2FuIGJvdGggaGF2ZSB0aHJlZSBzdGF0ZVxuXHRcdFx0XHQvLyBVbmRlZmluZWQgbWVhbnMgdGhhdCB0aGUgZnJhbWV3b3JrIGRlY2lkZXMgd2hhdCB0byBkb1xuXHRcdFx0XHQvLyBUcnVlIC8gRGlzcGxheSBtZWFucyBhbHdheXMgcmVhZCBvbmx5XG5cdFx0XHRcdC8vIEZhbHNlIC8gRWRpdGFibGUgbWVhbnMgZWRpdGFibGUgYnV0IHdoaWxlIHN0aWxsIHJlc3BlY3RpbmcgdGhlIGxvdyBsZXZlbCBwcmluY2lwbGUgKGltbXV0YWJsZSBwcm9wZXJ0eSB3aWxsIG5vdCBiZSBlZGl0YWJsZSlcblx0XHRcdFx0aWYgKGJEaXNwbGF5TW9kZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBiRGlzcGxheU1vZGUgIT09IFwiYm9vbGVhblwiKSB7XG5cdFx0XHRcdFx0YkRpc3BsYXlNb2RlID0gYkRpc3BsYXlNb2RlID09PSBcInRydWVcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gKHRhYmxlIGFzIFRhYmxlKS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0Y29uc3Qgb1RoaXMgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdFx0XHRcdGVuYWJsZUF1dG9Db2x1bW5XaWR0aDogdGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5lbmFibGVBdXRvQ29sdW1uV2lkdGgsXG5cdFx0XHRcdFx0XHRyZWFkT25seTogYkRpc3BsYXlNb2RlLFxuXHRcdFx0XHRcdFx0dGFibGVUeXBlOiBzVGFibGVUeXBlQ3VzdG9tRGF0YSxcblx0XHRcdFx0XHRcdGlkOiBzVGFibGVJZCxcblx0XHRcdFx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHByb3BlcnR5SW5mb05hbWUsXG5cdFx0XHRcdFx0XHRjb2x1bW5JbmZvOiBjb2x1bW5JbmZvLFxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzUGF0aCEpLFxuXHRcdFx0XHRcdFx0Y3JlYXRpb25Nb2RlOiB7IG5hbWU6IHNDcmVhdGlvbk1vZGVDdXN0b21EYXRhIH0sXG5cdFx0XHRcdFx0XHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjogdGFibGVBUEkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlclxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IG9UYWJsZUNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IG9UYWJsZUNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZDogb1Byb3BlcnR5Q29udGV4dCxcblx0XHRcdFx0XHRcdFx0dGhpczogb1RoaXMuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW46IG9UaGlzLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL2NvbHVtbkluZm9cIilcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdFx0dGhpczogb1RoaXMsXG5cdFx0XHRcdFx0XHRcdGVudGl0eVNldDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGNvbHVtbjogb1RoaXNcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhcHBDb21wb25lbnQ6IG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnRcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNvbnN0IHRhYmxlQ29sbGVjdGlvbiA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHk+KFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQodGFibGVBUEkudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY29sbGVjdGlvbikhXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGhhbmRsZXJQcm92aWRlciA9IG5ldyBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKFxuXHRcdFx0XHRcdHRhYmxlQVBJLFxuXHRcdFx0XHRcdHsgY29sbGVjdGlvbkVudGl0eTogdGFibGVDb2xsZWN0aW9uLnRhcmdldE9iamVjdCEsIG1ldGFNb2RlbDogb01ldGFNb2RlbCB9LFxuXHRcdFx0XHRcdHRhYmxlQVBJXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGNvbXB1dGVkQ29sdW1uWE1MID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhcblx0XHRcdFx0XHRqc3gucmVuZGVyQXNYTUwoKCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChnZXRDb2x1bW5UZW1wbGF0ZShcblx0XHRcdFx0XHRcdFx0c1RhYmxlSWQsXG5cdFx0XHRcdFx0XHRcdHRhYmxlQVBJLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW5JbmZvIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHRcdFx0XHRcdFx0b01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzUGF0aCEpISxcblx0XHRcdFx0XHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdFx0XHQpID8/IFwiXCIpIGFzIHVua25vd24gYXMgc3RyaW5nO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFwidGV4dC94bWxcIlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFxuXHRcdFx0XHRcdGNvbXB1dGVkQ29sdW1uWE1MLmZpcnN0RWxlbWVudENoaWxkLFxuXHRcdFx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRcdFx0XHR7IHZpZXc6IG9WaWV3IH0sXG5cdFx0XHRcdFx0b01vZGlmaWVyXG5cdFx0XHRcdCkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b1RoaXMuZGVzdHJveSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gZm5UZW1wbGF0ZUZyYWdtZW50KHByb3BlcnR5SW5mbywgdmlldyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFByb3ZpZGUgdGhlIFRhYmxlJ3MgZmlsdGVyIGRlbGVnYXRlIHRvIHByb3ZpZGUgYmFzaWMgZmlsdGVyIGZ1bmN0aW9uYWxpdHkgc3VjaCBhcyBhZGRpbmcgRmlsdGVyRmllbGRzLlxuXHQgKiBAcmV0dXJucyBPYmplY3QgZm9yIHRoZSBUYWJsZXMgZmlsdGVyIHBlcnNvbmFsaXphdGlvbi5cblx0ICovXG5cdGdldEZpbHRlckRlbGVnYXRlOiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7XG5cdFx0XHRcdGFwaVZlcnNpb246IDJcblx0XHRcdH0sXG5cdFx0XHRGaWx0ZXJCYXJEZWxlZ2F0ZSxcblx0XHRcdHtcblx0XHRcdFx0YWRkSXRlbTogYXN5bmMgZnVuY3Rpb24gKG9QYXJlbnRDb250cm9sOiBDb250cm9sLCBzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0aWYgKHNQcm9wZXJ0eUluZm9OYW1lLmluZGV4T2YoXCJQcm9wZXJ0eTo6XCIpID09PSAwKSB7XG5cdFx0XHRcdFx0XHQvLyBDb3JyZWN0IHRoZSBuYW1lIG9mIGNvbXBsZXggcHJvcGVydHkgaW5mbyByZWZlcmVuY2VzLlxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5SW5mb05hbWUgPSBzUHJvcGVydHlJbmZvTmFtZS5yZXBsYWNlKFwiUHJvcGVydHk6OlwiLCBcIlwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIEZpbHRlckJhckRlbGVnYXRlLmFkZEl0ZW0ob1BhcmVudENvbnRyb2wgYXMgRmlsdGVyQmFyLCBzUHJvcGVydHlJbmZvTmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBUeXBlTWFwIGF0dGFjaGVkIHRvIHRoaXMgZGVsZWdhdGUuXG5cdCAqIEByZXR1cm5zIEFueSBpbnN0YW5jZSBvZiBUeXBlTWFwXG5cdCAqL1xuXHRnZXRUeXBlTWFwOiBmdW5jdGlvbiAoLypvUGF5bG9hZDogb2JqZWN0Ki8pIHtcblx0XHRyZXR1cm4gVHlwZU1hcDtcblx0fSxcblxuXHQvKipcblx0ICogRm9ybWF0IHRoZSB0aXRsZSBvZiB0aGUgZ3JvdXAgaGVhZGVyIC5cblx0ICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dFxuXHQgKiBAcGFyYW0gcHJvcGVydHkgTmFtZSBvZiB0aGUgcHJvcGVydHlcblx0ICogQHJldHVybnMgRm9ybWF0dGVkIHRpdGxlIG9mIHRoZSBncm91cCBoZWFkZXIuXG5cdCAqL1xuXHRmb3JtYXRHcm91cEhlYWRlcih0YWJsZTogTURDVGFibGUsIGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBwcm9wZXJ0eTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvcyA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mbyA9IHByb3BlcnR5SW5mb3M/LmZpbmQoKG9iaikgPT4ge1xuXHRcdFx0cmV0dXJuIG9iai5uYW1lID09PSBwcm9wZXJ0eTtcblx0XHR9KTtcblx0XHQvKkZvciBhIERhdGUsIERhdGVUaW1lLCBCb29sZWFuIG9yIERlY2ltYWwgcHJvcGVydHksIHRoZSB2YWx1ZSBpcyByZXR1cm5lZCBpbiBleHRlcm5hbCBmb3JtYXQgdXNpbmcgYSBVSTUgdHlwZSBmb3IgdGhlXG5cdCAgICAgICAgZ2l2ZW4gcHJvcGVydHkgcGF0aCB0aGF0IGZvcm1hdHMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkncyBFRE0gdHlwZSBhbmQgY29uc3RyYWludHMqL1xuXHRcdGNvbnN0IGRhdGFCYXNlVHlwZSA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eUluZm8/LmRhdGFUeXBlKS5iYXNlVHlwZTtcblx0XHRjb25zdCBleHRlcm5hbEZvcm1hdCA9XG5cdFx0XHRkYXRhQmFzZVR5cGUgPT09IFwiRGF0ZVRpbWVcIiB8fCBkYXRhQmFzZVR5cGUgPT09IFwiRGF0ZVwiIHx8IGRhdGFCYXNlVHlwZSA9PT0gXCJCb29sZWFuXCIgfHwgZGF0YUJhc2VUeXBlID09PSBcIk51bWVyaWNcIjtcblx0XHRsZXQgdmFsdWU7XG5cdFx0aWYgKCFjb250ZXh0KSB7XG5cdFx0XHR2YWx1ZSA9IGdldFJlc291cmNlTW9kZWwoQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSkpLmdldFRleHQoXCJNX1RBQkxFX0dST1VQX0hFQURFUl9USVRMRV9WQUxVRVwiKTtcblx0XHRcdHJldHVybiBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVcIiwgW3Byb3BlcnR5SW5mbz8ubGFiZWwsIHZhbHVlXSk7XG5cdFx0fVxuXHRcdGlmIChwcm9wZXJ0eUluZm8/Lm1vZGUpIHtcblx0XHRcdHN3aXRjaCAocHJvcGVydHlJbmZvLm1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGw7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdFx0XHR2YWx1ZSA9IFZhbHVlRm9ybWF0dGVyLmZvcm1hdFdpdGhCcmFja2V0cyhcblx0XHRcdFx0XHRcdHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5ID8gY29udGV4dC5nZXRQcm9wZXJ0eShwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSwgZXh0ZXJuYWxGb3JtYXQpIDogbnVsbCxcblx0XHRcdFx0XHRcdHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5ID8gY29udGV4dC5nZXRQcm9wZXJ0eShwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSwgZXh0ZXJuYWxGb3JtYXQpIDogbnVsbFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHR2YWx1ZSA9IFZhbHVlRm9ybWF0dGVyLmZvcm1hdFdpdGhCcmFja2V0cyhcblx0XHRcdFx0XHRcdHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5ID8gY29udGV4dC5nZXRQcm9wZXJ0eShwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSwgZXh0ZXJuYWxGb3JtYXQpIDogbnVsbCxcblx0XHRcdFx0XHRcdHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5ID8gY29udGV4dC5nZXRQcm9wZXJ0eShwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSwgZXh0ZXJuYWxGb3JtYXQpIDogbnVsbFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhbHVlID0gcHJvcGVydHlJbmZvPy5wYXRoID8gY29udGV4dC5nZXRQcm9wZXJ0eShwcm9wZXJ0eUluZm8ucGF0aCwgZXh0ZXJuYWxGb3JtYXQpIDogbnVsbDtcblx0XHR9XG5cdFx0aWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSBcIlwiKSB7XG5cdFx0XHR2YWx1ZSA9IGdldFJlc291cmNlTW9kZWwoQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZSkpLmdldFRleHQoXCJNX1RBQkxFX0dST1VQX0hFQURFUl9USVRMRV9WQUxVRVwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIGdldFJlc291cmNlTW9kZWwodGFibGUpLmdldFRleHQoXCJNX1RBQkxFX0dST1VQX0hFQURFUl9USVRMRVwiLCBbcHJvcGVydHlJbmZvPy5sYWJlbCwgdmFsdWVdKTtcblx0fVxufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBc0ZBLE1BQU1BLDhCQUE4QixHQUFHLCtCQUErQjtFQUN0RSxNQUFNQyxxQkFBcUIsR0FBRyxhQUFhO0VBQzNDLE1BQU1DLHFCQUFxQixHQUFHLGFBQWE7RUFDM0MsTUFBTUMsZ0JBQWdCLEdBQUcsaUJBQWlCOztFQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVRBLE9BVWVDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFQyxpQkFBaUIsRUFBRTtJQUNuREMsVUFBVSxFQUFFLENBQUM7SUFDYjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyxtQ0FBbUMsRUFBRSxTQUFBQSxDQUNwQ0MsS0FBWSxFQUNaQyxZQUFvQyxFQUNwQ0MsYUFBdUMsRUFDdEM7TUFDRCxJQUFJRCxZQUFZLENBQUNFLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQzNFLE1BQU1DLE1BQU0sR0FBR0wsS0FBSyxDQUFDTSxVQUFVLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUVDLEdBQUcsSUFBSztVQUMvQyxPQUFPQSxHQUFHLENBQUNDLGNBQWMsQ0FBQyxDQUFDLEtBQUtSLFlBQVksQ0FBQ0UsR0FBRztRQUNqRCxDQUFDLENBQUM7UUFDRixNQUFNTyxtQkFBbUIsR0FBR0wsTUFBTSxHQUFHQSxNQUFNLENBQUNNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLE1BQU0sR0FBRyxLQUFLO1FBQzFGLE1BQU1DLFVBQVUsR0FBSVosS0FBSyxDQUFDYSxRQUFRLENBQUMsQ0FBQyxDQUFnQkMsWUFB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
|