@sapui5/sap.fe.macros 1.140.0 → 1.141.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/macros/.library +1 -1
- package/src/sap/fe/macros/Chart.js +53 -2
- package/src/sap/fe/macros/Chart.tsx +55 -0
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +230 -0
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +218 -0
- package/src/sap/fe/macros/CommonHelper.js +59 -15
- package/src/sap/fe/macros/CommonHelper.ts +65 -14
- package/src/sap/fe/macros/ConditionalSwitch.js +174 -0
- package/src/sap/fe/macros/ConditionalSwitch.tsx +141 -0
- package/src/sap/fe/macros/ConditionalSwitchProperty.js +78 -0
- package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +62 -0
- package/src/sap/fe/macros/Field.js +14 -10
- package/src/sap/fe/macros/Field.ts +15 -12
- package/src/sap/fe/macros/MacroAPI.js +9 -4
- package/src/sap/fe/macros/MacroAPI.ts +9 -4
- package/src/sap/fe/macros/MultiValueField.js +10 -5
- package/src/sap/fe/macros/MultiValueField.tsx +7 -1
- package/src/sap/fe/macros/Page.js +5 -7
- package/src/sap/fe/macros/Page.tsx +4 -6
- package/src/sap/fe/macros/Paginator.js +9 -4
- package/src/sap/fe/macros/Paginator.tsx +12 -3
- package/src/sap/fe/macros/RichTextEditor.js +3 -2
- package/src/sap/fe/macros/RichTextEditor.tsx +2 -1
- package/src/sap/fe/macros/Status.js +38 -13
- package/src/sap/fe/macros/Status.tsx +26 -6
- package/src/sap/fe/macros/ai/EasyFillDialog.js +11 -17
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +11 -16
- package/src/sap/fe/macros/ai/EasyFilterBar.js +195 -55
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +234 -57
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +76 -33
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +89 -40
- package/src/sap/fe/macros/chart/Chart.js +2 -2
- package/src/sap/fe/macros/chart/Chart.tsx +1 -1
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +4 -2
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +4 -1
- package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +9 -2
- package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +8 -0
- 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/BuildingBlockWithTemplating.js +2 -2
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +1 -1
- package/src/sap/fe/macros/controls/FilterBar.js +14 -5
- package/src/sap/fe/macros/controls/FilterBar.ts +3 -0
- package/src/sap/fe/macros/controls/RadioButtons.js +61 -38
- package/src/sap/fe/macros/controls/RadioButtons.tsx +39 -18
- package/src/sap/fe/macros/controls/Section.js +4 -3
- package/src/sap/fe/macros/controls/Section.ts +3 -2
- package/src/sap/fe/macros/controls/section/SubSection.js +63 -8
- package/src/sap/fe/macros/controls/section/SubSection.ts +67 -1
- package/src/sap/fe/macros/field/Field.js +2 -2
- package/src/sap/fe/macros/field/Field.tsx +1 -1
- package/src/sap/fe/macros/field/FieldFormatOptions.js +25 -2
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +13 -0
- package/src/sap/fe/macros/field/FieldHelper.js +2 -2
- package/src/sap/fe/macros/field/FieldHelper.ts +1 -4
- package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
- package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
- package/src/sap/fe/macros/filter/FilterUtils.js +232 -2
- package/src/sap/fe/macros/filter/FilterUtils.ts +290 -4
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +4 -2
- package/src/sap/fe/macros/filterBar/FilterBar.js +2 -2
- package/src/sap/fe/macros/filterBar/FilterBar.tsx +1 -1
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +63 -27
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +49 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +7 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +6 -1
- package/src/sap/fe/macros/form/Form.block.js +7 -8
- package/src/sap/fe/macros/form/Form.block.ts +4 -6
- package/src/sap/fe/macros/form/FormContainer.block.js +555 -4
- package/src/sap/fe/macros/form/FormContainer.block.ts +665 -6
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
- package/src/sap/fe/macros/form/FormDelegate.js +6 -9
- package/src/sap/fe/macros/form/FormDelegate.ts +5 -8
- package/src/sap/fe/macros/internal/DataPoint.js +3 -2
- package/src/sap/fe/macros/internal/DataPoint.tsx +10 -1
- package/src/sap/fe/macros/internal/FilterField.block.js +16 -8
- package/src/sap/fe/macros/internal/FilterField.block.ts +11 -7
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +7 -1
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +8 -0
- package/src/sap/fe/macros/internal/field/EditStyle.js +21 -4
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +18 -4
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +3 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +4 -1
- package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/helpers/ActionHelper.js +36 -5
- package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +34 -4
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.js +2 -1
- package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.ts +1 -0
- package/src/sap/fe/macros/messagebundle.properties +20 -2
- package/src/sap/fe/macros/messagebundle_ar.properties +1 -1
- package/src/sap/fe/macros/messagebundle_bg.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ca.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cnr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cs.properties +1 -1
- package/src/sap/fe/macros/messagebundle_cy.properties +1 -1
- package/src/sap/fe/macros/messagebundle_da.properties +1 -1
- package/src/sap/fe/macros/messagebundle_de.properties +4 -4
- package/src/sap/fe/macros/messagebundle_el.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en_GB.properties +1 -1
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_es.properties +2 -2
- package/src/sap/fe/macros/messagebundle_es_MX.properties +1 -1
- package/src/sap/fe/macros/messagebundle_et.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hi.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_hu.properties +1 -1
- package/src/sap/fe/macros/messagebundle_id.properties +5 -5
- package/src/sap/fe/macros/messagebundle_it.properties +1 -1
- package/src/sap/fe/macros/messagebundle_iw.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ja.properties +5 -5
- package/src/sap/fe/macros/messagebundle_kk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ko.properties +2 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +2 -2
- package/src/sap/fe/macros/messagebundle_lv.properties +1 -1
- package/src/sap/fe/macros/messagebundle_mk.properties +2 -2
- package/src/sap/fe/macros/messagebundle_ms.properties +1 -1
- package/src/sap/fe/macros/messagebundle_nl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_no.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pt.properties +1 -1
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ro.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ru.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sh.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_sv.properties +1 -1
- package/src/sap/fe/macros/messagebundle_th.properties +1 -1
- package/src/sap/fe/macros/messagebundle_tr.properties +1 -1
- package/src/sap/fe/macros/messagebundle_uk.properties +1 -1
- package/src/sap/fe/macros/messagebundle_vi.properties +2 -2
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +1 -1
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +1 -1
- package/src/sap/fe/macros/messages/MessageButton.js +1 -1
- package/src/sap/fe/macros/messages/MessageButton.ts +2 -2
- package/src/sap/fe/macros/messages/MessagePopover.js +3 -1
- package/src/sap/fe/macros/messages/MessagePopover.ts +2 -0
- package/src/sap/fe/macros/microchart/MicroChart.js +2 -2
- package/src/sap/fe/macros/microchart/MicroChart.tsx +1 -1
- package/src/sap/fe/macros/microchart/MicroChartHelper.js +2 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -1
- package/src/sap/fe/macros/table/ActionsTemplating.js +4 -8
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +5 -8
- package/src/sap/fe/macros/table/BasicSearch.js +1 -1
- package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
- package/src/sap/fe/macros/table/Column.js +14 -2
- package/src/sap/fe/macros/table/Column.ts +7 -0
- package/src/sap/fe/macros/table/ColumnExportSettings.js +83 -15
- package/src/sap/fe/macros/table/ColumnExportSettings.ts +44 -0
- package/src/sap/fe/macros/table/ColumnOverride.js +14 -2
- package/src/sap/fe/macros/table/ColumnOverride.ts +7 -0
- package/src/sap/fe/macros/table/MdcTableTemplate.js +5 -5
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +15 -9
- package/src/sap/fe/macros/table/QuickFilterSelector.js +12 -3
- package/src/sap/fe/macros/table/QuickFilterSelector.tsx +15 -2
- package/src/sap/fe/macros/table/Table.block.js +188 -147
- package/src/sap/fe/macros/table/Table.block.tsx +41 -11
- package/src/sap/fe/macros/table/Table.js +16 -10
- package/src/sap/fe/macros/table/Table.tsx +16 -10
- package/src/sap/fe/macros/table/TableAPI.js +224 -184
- package/src/sap/fe/macros/table/TableAPI.ts +63 -19
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -6
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +5 -4
- package/src/sap/fe/macros/table/TableHelper.js +2 -2
- package/src/sap/fe/macros/table/TableHelper.ts +1 -1
- package/src/sap/fe/macros/table/TreeTable.js +16 -10
- package/src/sap/fe/macros/table/TreeTable.tsx +16 -10
- package/src/sap/fe/macros/table/Utils.js +3 -2
- package/src/sap/fe/macros/table/Utils.ts +7 -2
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -33
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -32
- 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 +14 -12
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +11 -10
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +34 -4
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +45 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +55 -12
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +71 -9
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +53 -2
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +55 -0
- package/src/sap/fe/macros/table/mixin/TableExport.js +22 -3
- package/src/sap/fe/macros/table/mixin/TableExport.ts +25 -4
- package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
- package/src/sap/fe/macros/table/mixin/TableSharing.ts +4 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +31 -13
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -3
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -1
|
@@ -56,7 +56,7 @@ import type { $IllustratedMessageSettings } from "sap/m/IllustratedMessage";
|
|
|
56
56
|
import IllustratedMessage from "sap/m/IllustratedMessage";
|
|
57
57
|
import IllustratedMessageType from "sap/m/IllustratedMessageType";
|
|
58
58
|
import type { BaseAggregationBindingInfo } from "sap/ui/base/ManagedObject";
|
|
59
|
-
import
|
|
59
|
+
import UI5Element from "sap/ui/core/Element";
|
|
60
60
|
import Fragment from "sap/ui/core/Fragment";
|
|
61
61
|
import type View from "sap/ui/core/mvc/View";
|
|
62
62
|
import XMLPreprocessor from "sap/ui/core/util/XMLPreprocessor";
|
|
@@ -77,6 +77,7 @@ import type { default as ODataV4Context, default as v4Context } from "sap/ui/mod
|
|
|
77
77
|
import type ODataListBinding from "sap/ui/model/odata/v4/ODataListBinding";
|
|
78
78
|
import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
|
|
79
79
|
import type ODataModel from "sap/ui/model/odata/v4/ODataModel";
|
|
80
|
+
import type QuickFilterSelector from "../QuickFilterSelector";
|
|
80
81
|
import TableEventHandlerProvider from "../TableEventHandlerProvider";
|
|
81
82
|
|
|
82
83
|
const SEMANTICKEY_HAS_DRAFTINDICATOR = "/semanticKeyHasDraftIndicator";
|
|
@@ -167,7 +168,7 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
167
168
|
},
|
|
168
169
|
|
|
169
170
|
_computeVisualSettingsForPropertyWithValueHelp: function (table: Table, property: EnhancedFEPropertyInfo) {
|
|
170
|
-
const tableAPI =
|
|
171
|
+
const tableAPI = this._getTableAPI(table);
|
|
171
172
|
if (!property.propertyInfos) {
|
|
172
173
|
const metaModel = (table.getModel() as ODataModel).getMetaModel();
|
|
173
174
|
if (property.annotationPath && metaModel) {
|
|
@@ -190,7 +191,7 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
190
191
|
unitText?: string,
|
|
191
192
|
timezoneText?: string
|
|
192
193
|
) {
|
|
193
|
-
const oTableAPI: EnhanceWithUI5<TableAPI> | null = table ? (
|
|
194
|
+
const oTableAPI: EnhanceWithUI5<TableAPI> | null = table ? (this._getTableAPI(table) as EnhanceWithUI5<TableAPI>) : null;
|
|
194
195
|
// update gap for properties with string unit
|
|
195
196
|
const text = unitText || timezoneText;
|
|
196
197
|
if (text) {
|
|
@@ -270,8 +271,17 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
270
271
|
return properties;
|
|
271
272
|
},
|
|
272
273
|
|
|
274
|
+
_getTableAPI(table: Table): TableAPI {
|
|
275
|
+
let tableAPI: TableAPI | undefined = table.getParent() as TableAPI;
|
|
276
|
+
if (!tableAPI) {
|
|
277
|
+
tableAPI = UI5Element.getElementById(table.getId() + "::Table") as TableAPI;
|
|
278
|
+
}
|
|
279
|
+
return tableAPI;
|
|
280
|
+
},
|
|
281
|
+
|
|
273
282
|
getColumnsFor: function (table: Table): TableColumn[] {
|
|
274
|
-
|
|
283
|
+
const tableAPI = this._getTableAPI(table);
|
|
284
|
+
return tableAPI.getTableDefinition().columns;
|
|
275
285
|
},
|
|
276
286
|
|
|
277
287
|
/**
|
|
@@ -604,7 +614,7 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
604
614
|
})
|
|
605
615
|
.then(() => {
|
|
606
616
|
fetchedProperties = this._updatePropertyInfo(table, fetchedProperties as EnhancedFEPropertyInfo[]);
|
|
607
|
-
const tableAPI =
|
|
617
|
+
const tableAPI = this._getTableAPI(table);
|
|
608
618
|
tableAPI.setEnhancedFetchedPropertyInfos(fetchedProperties as EnhancedFEPropertyInfo[]);
|
|
609
619
|
fetchedProperties = tableAPI.getPropertyInfos();
|
|
610
620
|
return;
|
|
@@ -623,7 +633,7 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
623
633
|
metaModel: ODataMetaModel,
|
|
624
634
|
appComponent: AppComponent
|
|
625
635
|
): Promise<PropertyInfo[]> {
|
|
626
|
-
const tableAPI =
|
|
636
|
+
const tableAPI = this._getTableAPI(table);
|
|
627
637
|
const fetchedProperties = tableAPI.getCachedPropertyInfos();
|
|
628
638
|
if (fetchedProperties.length) {
|
|
629
639
|
return Promise.resolve(fetchedProperties);
|
|
@@ -708,7 +718,8 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
708
718
|
};
|
|
709
719
|
}
|
|
710
720
|
}
|
|
711
|
-
|
|
721
|
+
const tableAPI = this._getTableAPI(table);
|
|
722
|
+
illustratedInformation.illustrationSize = tableAPI.getNoDataMessageMode();
|
|
712
723
|
|
|
713
724
|
if (illustratedInformation.illustrationSize === "text") {
|
|
714
725
|
const currentNoData = table.getNoData();
|
|
@@ -722,30 +733,54 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
722
733
|
}
|
|
723
734
|
},
|
|
724
735
|
|
|
736
|
+
/**
|
|
737
|
+
* Handles the dataRequested event for the table binding to set up table defaults.
|
|
738
|
+
* @param oTable The MDC table instance
|
|
739
|
+
* @param oInternalModelContext The internal model context for the table
|
|
740
|
+
*/
|
|
741
|
+
handleTableDataRequested: function (oTable: Table, oInternalModelContext: InternalModelContext): void {
|
|
742
|
+
const oBinding = oTable && oTable.getRowBinding(),
|
|
743
|
+
bDataRequestedAttached = oInternalModelContext && oInternalModelContext.getProperty("dataRequestedAttached");
|
|
744
|
+
if (oInternalModelContext && !bDataRequestedAttached) {
|
|
745
|
+
oBinding.attachDataRequested(() => {
|
|
746
|
+
if (!oInternalModelContext.getProperty("dataRequestedTimeoutSet")) {
|
|
747
|
+
oInternalModelContext.setProperty("dataRequestedTimeoutSet", true);
|
|
748
|
+
setTimeout(() => {
|
|
749
|
+
oInternalModelContext.setProperty("dataRequestedTimeoutSet", false);
|
|
750
|
+
const oTableAPI = oTable ? (oTable.getParent() as TableAPI) : null;
|
|
751
|
+
if (oTableAPI) {
|
|
752
|
+
oTableAPI.tableDefaultsPromise = (oTableAPI.getTableDefaults(oTable) ?? Promise.resolve({})) as Promise<object>;
|
|
753
|
+
}
|
|
754
|
+
}, 0);
|
|
755
|
+
}
|
|
756
|
+
});
|
|
757
|
+
oInternalModelContext.setProperty("dataRequestedAttached", true);
|
|
758
|
+
}
|
|
759
|
+
},
|
|
760
|
+
|
|
725
761
|
handleTableDataReceived: function (oTable: Table, oInternalModelContext: InternalModelContext): void {
|
|
726
762
|
const oBinding = oTable && oTable.getRowBinding(),
|
|
727
763
|
bDataReceivedAttached = oInternalModelContext && oInternalModelContext.getProperty("dataReceivedAttached");
|
|
728
|
-
|
|
729
764
|
if (oInternalModelContext && !bDataReceivedAttached) {
|
|
730
765
|
oBinding.attachDataReceived(() => {
|
|
731
766
|
// as the dataReceived event is fired multiple times, we need to ensure that the event is only handled once
|
|
732
767
|
if (!oInternalModelContext.getProperty("dataReceivedTimeoutSet")) {
|
|
733
768
|
oInternalModelContext.setProperty("dataReceivedTimeoutSet", true);
|
|
734
|
-
setTimeout(() => {
|
|
769
|
+
setTimeout(async () => {
|
|
735
770
|
oInternalModelContext.setProperty("dataReceivedTimeoutSet", false);
|
|
736
771
|
// Refresh the selected contexts to trigger re-calculation of enabled state of actions.
|
|
737
772
|
oInternalModelContext.setProperty("selectedContexts", []);
|
|
738
773
|
const aSelectedContexts = oTable.getSelectedContexts() as ODataV4Context[];
|
|
739
774
|
oInternalModelContext.setProperty("selectedContexts", aSelectedContexts);
|
|
740
775
|
oInternalModelContext.setProperty("numberOfSelectedContexts", aSelectedContexts.length);
|
|
741
|
-
const tableAPI =
|
|
776
|
+
const tableAPI = this._getTableAPI(oTable);
|
|
742
777
|
const oActionOperationAvailableMap = JSON.parse(tableAPI.tableDefinition.operationAvailableMap);
|
|
743
778
|
ActionRuntime.setActionEnablement(oInternalModelContext, oActionOperationAvailableMap, aSelectedContexts, "table");
|
|
744
779
|
// Refresh enablement of delete button
|
|
745
780
|
DeleteHelper.updateDeleteInfoForSelectedContexts(oInternalModelContext, aSelectedContexts);
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
781
|
+
if (tableAPI) {
|
|
782
|
+
const tableDefaultData = await tableAPI.tableDefaultsPromise?.catch(() => undefined);
|
|
783
|
+
await tableAPI.setUpEmptyRows(oTable, false, tableDefaultData);
|
|
749
784
|
}
|
|
750
785
|
this._updateAvailableCards(oTable);
|
|
751
786
|
}, 0);
|
|
@@ -776,7 +811,8 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
776
811
|
enableOptimisticBatchMode: function (controller: ListReportController, table: Table): void {
|
|
777
812
|
const filtersPropertiesAsPotentiallySensitiveDataOrDateType =
|
|
778
813
|
table && TableUtils.isFilterEligibleForOptimisticBatch(table, controller._getFilterBarControl() as FilterBar);
|
|
779
|
-
|
|
814
|
+
const tableAPI = this._getTableAPI(table);
|
|
815
|
+
tableAPI.getOptimisticBatchEnablerPromise()?.resolve(!filtersPropertiesAsPotentiallySensitiveDataOrDateType);
|
|
780
816
|
},
|
|
781
817
|
|
|
782
818
|
/**
|
|
@@ -797,15 +833,17 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
797
833
|
},
|
|
798
834
|
|
|
799
835
|
rebind: async function (oTable: Table, oBindingInfo: BaseAggregationBindingInfo): Promise<void> {
|
|
800
|
-
const
|
|
801
|
-
|
|
802
|
-
|
|
836
|
+
const tableAPI = this._getTableAPI(oTable);
|
|
837
|
+
|
|
838
|
+
const bIsSuspended = tableAPI?.getProperty("bindingSuspended");
|
|
839
|
+
tableAPI?.setProperty("outDatedBinding", bIsSuspended);
|
|
803
840
|
if (!bIsSuspended) {
|
|
804
841
|
TableRuntime.clearSelection(oTable);
|
|
805
842
|
TableDelegateBase.rebind.apply(this, [oTable, oBindingInfo]);
|
|
806
843
|
TableUtils.onTableBound(oTable);
|
|
807
844
|
return TableUtils.whenBound(oTable)
|
|
808
845
|
.then((table: Table): void => {
|
|
846
|
+
this.handleTableDataRequested(table, table.getBindingContext("internal") as InternalModelContext);
|
|
809
847
|
this.handleTableDataReceived(table, table.getBindingContext("internal") as InternalModelContext);
|
|
810
848
|
return;
|
|
811
849
|
})
|
|
@@ -854,7 +892,8 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
854
892
|
},
|
|
855
893
|
updateBindingInfo: function (table: Table, bindingInfo: CollectionBindingInfo) {
|
|
856
894
|
const internalBindingContext = table.getBindingContext("internal") as InternalModelContext | undefined;
|
|
857
|
-
const tableAPI =
|
|
895
|
+
const tableAPI = this._getTableAPI(table);
|
|
896
|
+
const quickFilter = table.getQuickFilter() as QuickFilterSelector | undefined;
|
|
858
897
|
const collectionBindingInfoAPI = new CollectionBindingInfoAPI(bindingInfo);
|
|
859
898
|
internalBindingContext?.setProperty("isInsightsEnabled", true);
|
|
860
899
|
TableDelegateBase.updateBindingInfo.apply(this, [table, bindingInfo]);
|
|
@@ -865,7 +904,10 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
865
904
|
this._handleRecommendationOutputFields(table, bindingInfo);
|
|
866
905
|
this._handleFiltersForExternalID(table, bindingInfo);
|
|
867
906
|
|
|
868
|
-
|
|
907
|
+
tableAPI?.fireEvent("beforeRebindTable", {
|
|
908
|
+
collectionBindingInfo: collectionBindingInfoAPI,
|
|
909
|
+
quickFilterKey: quickFilter?.getSelectedKey()
|
|
910
|
+
});
|
|
869
911
|
const attachedEvents = collectionBindingInfoAPI.getAttachedEvents();
|
|
870
912
|
/**
|
|
871
913
|
* We have to set the binding context to null for every fast creation row to avoid it inheriting
|
|
@@ -894,7 +936,7 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
894
936
|
const sorters: Sorter[] | undefined = bindingInfo.sorter;
|
|
895
937
|
const newSortersToBeApplied: Sorter[] = [];
|
|
896
938
|
if (sorters?.length) {
|
|
897
|
-
const tableAPI =
|
|
939
|
+
const tableAPI = this._getTableAPI(table);
|
|
898
940
|
const tableProperties = tableAPI.getCachedPropertyInfos();
|
|
899
941
|
for (const sorter of sorters) {
|
|
900
942
|
const tableProperty = tableProperties?.find((property) => property.path === sorter.getPath());
|
|
@@ -921,7 +963,7 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
921
963
|
},
|
|
922
964
|
|
|
923
965
|
_handleRecommendationOutputFields: function (table: Table, oBindingInfo: CollectionBindingInfo) {
|
|
924
|
-
const tableAPI =
|
|
966
|
+
const tableAPI = this._getTableAPI(table);
|
|
925
967
|
const controller = tableAPI?.getPageController();
|
|
926
968
|
if (controller?.recommendations.isRecommendationEnabled()) {
|
|
927
969
|
const appComponent = controller.getAppComponent();
|
|
@@ -940,7 +982,7 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
940
982
|
* @param table The mdc table control.
|
|
941
983
|
*/
|
|
942
984
|
_updateAvailableCards: async function (table: Table): Promise<void> {
|
|
943
|
-
const tableAPI =
|
|
985
|
+
const tableAPI = this._getTableAPI(table);
|
|
944
986
|
if (tableAPI.getPageController().getView().getViewData()?.converterType === "ListReport") {
|
|
945
987
|
const appComponent = tableAPI?.getPageController()?.getAppComponent();
|
|
946
988
|
const cards: WrappedCard[] = [];
|
|
@@ -948,7 +990,9 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
948
990
|
const collaborationManager = new CollaborationManager();
|
|
949
991
|
const cardObject = collaborationManager.updateCards(cards);
|
|
950
992
|
const parentAppId = appComponent.getId();
|
|
951
|
-
appComponent
|
|
993
|
+
appComponent
|
|
994
|
+
.getCollaborationManagerService()
|
|
995
|
+
.addCardsToCollaborationManager(cardObject, parentAppId, tableAPI.getPageController().getView().getId());
|
|
952
996
|
appComponent.getCollaborationManagerService().shareAvailableCards();
|
|
953
997
|
}
|
|
954
998
|
},
|
|
@@ -960,7 +1004,7 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
960
1004
|
* @returns An array of property name to be requested.
|
|
961
1005
|
*/
|
|
962
1006
|
getInResultPropertyKeys: function (table: MDCTable): string[] {
|
|
963
|
-
const tableAPI =
|
|
1007
|
+
const tableAPI = this._getTableAPI(table);
|
|
964
1008
|
if (tableAPI.tableDefinition.control.analyticalConfiguration?.aggregationOnLeafLevel) {
|
|
965
1009
|
const allKkeysRequested = this.checkAllKeysAreRequested(tableAPI);
|
|
966
1010
|
const internalBindingContext = table.getBindingContext("internal");
|
|
@@ -1048,7 +1092,7 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
1048
1092
|
return binding.getQueryOptionsFromParameters().$search;
|
|
1049
1093
|
},
|
|
1050
1094
|
updateBinding: function (table: MDCTable, bindingInfo: CollectionBindingInfo, binding?: ODataListBinding): void {
|
|
1051
|
-
const tableAPI =
|
|
1095
|
+
const tableAPI = this._getTableAPI(table);
|
|
1052
1096
|
const bIsSuspended = tableAPI?.getProperty("bindingSuspended");
|
|
1053
1097
|
if (!bIsSuspended) {
|
|
1054
1098
|
// if the rowBindingInfo has a $$getKeepAliveContext parameter we need to check it is the only Table with such a
|
|
@@ -1148,7 +1192,7 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
1148
1192
|
},
|
|
1149
1193
|
|
|
1150
1194
|
_computeRowBindingInfoFromTemplate: function (oTable: Table): CollectionBindingInfo {
|
|
1151
|
-
const tableAPI =
|
|
1195
|
+
const tableAPI = this._getTableAPI(oTable);
|
|
1152
1196
|
const rowBindingInfo = tableAPI.getTableTemplateBindingInfo();
|
|
1153
1197
|
const bindingContext = oTable.getBindingContext();
|
|
1154
1198
|
let tableCanBeInInlineEdit = false;
|
|
@@ -1429,8 +1473,8 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
1429
1473
|
|
|
1430
1474
|
/**
|
|
1431
1475
|
* Invoked when a column is added using the table personalization dialog.
|
|
1432
|
-
* @param
|
|
1433
|
-
* @param
|
|
1476
|
+
* @param table Instance of table control
|
|
1477
|
+
* @param propertyInfoName Name of the property for which the column is added
|
|
1434
1478
|
* @param mPropertyBag Instance of property bag from the flexibility API
|
|
1435
1479
|
* @param mPropertyBag.modifier Instance of the control tree modifier
|
|
1436
1480
|
* @param mPropertyBag.appComponent Instance of the app component
|
|
@@ -1446,7 +1490,7 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
1446
1490
|
oModifier = mPropertyBag.modifier,
|
|
1447
1491
|
sTableId = oModifier.getId(table),
|
|
1448
1492
|
aColumns = (table as UI5Element).isA ? this.getColumnsFor(table as Table) : null,
|
|
1449
|
-
tableAPI = (table as Table)
|
|
1493
|
+
tableAPI = this._getTableAPI(table as Table);
|
|
1450
1494
|
if (!aColumns) {
|
|
1451
1495
|
// We return null here because everything should apply at runtime
|
|
1452
1496
|
return Promise.resolve(null);
|
|
@@ -1485,7 +1529,7 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
1485
1529
|
}
|
|
1486
1530
|
|
|
1487
1531
|
if (columnInfo.type === "Computed") {
|
|
1488
|
-
const enableAnalytics = (
|
|
1532
|
+
const enableAnalytics = this._getTableAPI(table as Table).getTableDefinition().enableAnalytics;
|
|
1489
1533
|
return getComputedColumn(sTableId, columnInfo as ComputedTableColumn, oTableContext, enableAnalytics);
|
|
1490
1534
|
}
|
|
1491
1535
|
|
|
@@ -1531,7 +1575,6 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
1531
1575
|
bDisplayMode = bDisplayMode === "true";
|
|
1532
1576
|
}
|
|
1533
1577
|
|
|
1534
|
-
const tableAPI = (table as Table).getParent() as TableAPI;
|
|
1535
1578
|
const oThis = new JSONModel({
|
|
1536
1579
|
enableAutoColumnWidth: tableAPI.getTableDefinition().control.enableAutoColumnWidth,
|
|
1537
1580
|
readOnly: bDisplayMode,
|
|
@@ -1634,7 +1677,7 @@ export default Object.assign({}, TableDelegateBase, {
|
|
|
1634
1677
|
* @returns Formatted title of the group header.
|
|
1635
1678
|
*/
|
|
1636
1679
|
formatGroupHeader(table: MDCTable, context: ODataV4Context, property: string) {
|
|
1637
|
-
const propertyInfos = (table
|
|
1680
|
+
const propertyInfos = this._getTableAPI(table).getEnhancedFetchedPropertyInfos();
|
|
1638
1681
|
const propertyInfo = propertyInfos?.find((obj) => {
|
|
1639
1682
|
return obj.name === property;
|
|
1640
1683
|
});
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/messageHandler/messageHandling", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/helpers/PromiseKeeper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/library", "sap/m/Button", "sap/m/Dialog", "sap/m/Label", "sap/m/MessageBox", "sap/m/MessageStrip", "sap/m/MessageToast", "sap/ui/core/Fragment", "sap/ui/core/Lib", "sap/ui/core/util/XMLPreprocessor", "sap/ui/layout/form/Form", "sap/ui/layout/form/FormContainer", "sap/ui/layout/form/FormElement", "sap/ui/layout/form/ResponsiveGridLayout", "sap/ui/model/json/JSONModel", "./MassEditField", "./MassEditSideEffects", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/Fragment", "sap/fe/base/jsx-runtime/jsxs"], function (Log, CommonUtils, messageHandling, ManifestSettings, PromiseKeeper, ID, FELibrary, Button, Dialog, Label, MessageBox, MessageStrip, MessageToast, Fragment, Library, XMLPreprocessor, Form, FormContainer, FormElement, ResponsiveGridLayout, JSONModel, MassEditField, MassEditSideEffects, _jsx, _Fragment, _jsxs) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/messageHandler/messageHandling", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/helpers/PromiseKeeper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/library", "sap/m/Button", "sap/m/Dialog", "sap/m/Label", "sap/m/MessageBox", "sap/m/MessageStrip", "sap/m/MessageToast", "sap/ui/core/Fragment", "sap/ui/core/Lib", "sap/ui/core/util/XMLPreprocessor", "sap/ui/layout/form/Form", "sap/ui/layout/form/FormContainer", "sap/ui/layout/form/FormElement", "sap/ui/layout/form/ResponsiveGridLayout", "sap/ui/model/json/JSONModel", "./MassEditField", "./MassEditSideEffects", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/Fragment", "sap/fe/base/jsx-runtime/jsxs"], function (Log, CommonUtils, messageHandling, ManifestSettings, PromiseKeeper, ResourceModelHelper, ID, FELibrary, Button, Dialog, Label, MessageBox, MessageStrip, MessageToast, Fragment, Library, XMLPreprocessor, Form, FormContainer, FormElement, ResponsiveGridLayout, JSONModel, MassEditField, MassEditSideEffects, _jsx, _Fragment, _jsxs) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -26,7 +26,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
26
26
|
this.view = CommonUtils.getTargetView(this.table);
|
|
27
27
|
this.transientListBinding = this.generateListBinding();
|
|
28
28
|
this.bindingContext = this.transientListBinding.create({}, true);
|
|
29
|
-
this.
|
|
29
|
+
this.resourceModel = ResourceModelHelper.getResourceModel(this.table);
|
|
30
30
|
this.contextsOnError = [];
|
|
31
31
|
this.fieldControls = [];
|
|
32
32
|
}
|
|
@@ -55,7 +55,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
55
55
|
_proto.create = async function create() {
|
|
56
56
|
if (!this.dialog) {
|
|
57
57
|
const coreResourceBundle = Library.getResourceBundleFor("sap.fe.core");
|
|
58
|
-
const applyButtonText = this.view.getViewData().converterType === "ListReport" ? this.
|
|
58
|
+
const applyButtonText = this.view.getViewData().converterType === "ListReport" ? this.resourceModel.getText("C_MASS_EDIT_SAVE_BUTTON_TEXT") : coreResourceBundle.getText("C_COMMON_DIALOG_OK");
|
|
59
59
|
const dialogContent = await this.createContent();
|
|
60
60
|
const dialog = _jsx(Dialog, {
|
|
61
61
|
"dt:designtime": "sap/fe/macros/table/massEdit/designtime/MassEdit.designtime",
|
|
@@ -63,7 +63,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
63
63
|
contentWidth: "27rem",
|
|
64
64
|
class: "sapUiContentPadding",
|
|
65
65
|
horizontalScrolling: "false",
|
|
66
|
-
title: this.
|
|
66
|
+
title: this.resourceModel.getText("C_MASS_EDIT_DIALOG_TITLE", [this.contexts.length.toString()]),
|
|
67
67
|
content: dialogContent,
|
|
68
68
|
escapeHandler: this.onClose.bind(this),
|
|
69
69
|
beforeOpen: this.beforeOpen.bind(this),
|
|
@@ -144,12 +144,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
144
144
|
//There is at least one new value set
|
|
145
145
|
controller.editFlow.setDraftStatus(DraftStatus.Saved);
|
|
146
146
|
if (this.view.getViewData().converterType === "ListReport") {
|
|
147
|
-
MessageToast.show(this.
|
|
147
|
+
MessageToast.show(this.resourceModel.getText("C_MASS_EDIT_SUCCESS_TOAST"));
|
|
148
148
|
} else {
|
|
149
|
-
MessageToast.show(this.
|
|
149
|
+
MessageToast.show(this.resourceModel.getText("C_OBJECT_PAGE_MASS_EDIT_SUCCESS_TOAST"));
|
|
150
150
|
}
|
|
151
151
|
} else {
|
|
152
|
-
MessageToast.show(this.
|
|
152
|
+
MessageToast.show(this.resourceModel.getText("C_MASS_EDIT_NO_CHANGE"));
|
|
153
153
|
}
|
|
154
154
|
} else if (this.contextsOnError.length < this.contexts.length) {
|
|
155
155
|
controller.editFlow.setDraftStatus(DraftStatus.Saved);
|
|
@@ -165,7 +165,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
165
165
|
});
|
|
166
166
|
if (!!this.contextsOnError.length && this.contextsOnError.length < this.contexts.length) {
|
|
167
167
|
const confirmButtonTxt = coreResourceBundle.getText("C_COMMON_DIALOG_OK");
|
|
168
|
-
MessageBox.success(this.
|
|
168
|
+
MessageBox.success(this.resourceModel.getText("C_MASS_EDIT_CHANGES_WITH_ERROR", [this.contexts.length - this.contextsOnError.length, this.contexts.length]), {
|
|
169
169
|
actions: [confirmButtonTxt],
|
|
170
170
|
emphasizedAction: confirmButtonTxt
|
|
171
171
|
});
|
|
@@ -332,7 +332,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
332
332
|
_proto.getAdaptationMessage = function getAdaptationMessage() {
|
|
333
333
|
if (this.isAdaptation) {
|
|
334
334
|
return _jsx(MessageStrip, {
|
|
335
|
-
text: this.
|
|
335
|
+
text: this.resourceModel.getText("C_MASS_EDIT_ADAPTATION_MODE")
|
|
336
336
|
});
|
|
337
337
|
}
|
|
338
338
|
return undefined;
|
|
@@ -413,4 +413,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
413
413
|
_exports = MassEditDialog;
|
|
414
414
|
return _exports;
|
|
415
415
|
}, false);
|
|
416
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYXNzRWRpdERpYWxvZyIsInByb3BzIiwicmVxdWlyZWREYXRhUHJvbWlzZSIsIlByb21pc2VLZWVwZXIiLCJ1cGRhdGVkUHJvcGVydGllcyIsIlNldCIsImRpYWxvZyIsInVuZGVmaW5lZCIsInRhYmxlIiwiY29udGV4dHMiLCJpc0FkYXB0YXRpb24iLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImlzQWRhcHRhdGlvbk1vZGUiLCJmaWVsZFByb3BlcnRpZXMiLCJ2aWV3IiwiZ2V0VGFyZ2V0VmlldyIsInRyYW5zaWVudExpc3RCaW5kaW5nIiwiZ2VuZXJhdGVMaXN0QmluZGluZyIsImJpbmRpbmdDb250ZXh0IiwiY3JlYXRlIiwicmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJjb250ZXh0c09uRXJyb3IiLCJmaWVsZENvbnRyb2xzIiwiX2V4cG9ydHMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJsaXN0QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJnZXRNb2RlbCIsImJpbmRMaXN0IiwiZ2V0UGF0aCIsImdldENvbnRleHQiLCIkJHVwZGF0ZUdyb3VwSWQiLCJyZWZyZXNoSW50ZXJuYWwiLCJjb3JlUmVzb3VyY2VCdW5kbGUiLCJhcHBseUJ1dHRvblRleHQiLCJnZXRWaWV3RGF0YSIsImNvbnZlcnRlclR5cGUiLCJnZXRUZXh0IiwiZGlhbG9nQ29udGVudCIsImNyZWF0ZUNvbnRlbnQiLCJfanN4IiwiRGlhbG9nIiwiaWQiLCJJRCIsImdlbmVyYXRlIiwiZ2V0SWQiLCJjb250ZW50V2lkdGgiLCJjbGFzcyIsImhvcml6b250YWxTY3JvbGxpbmciLCJ0aXRsZSIsImxlbmd0aCIsInRvU3RyaW5nIiwiY29udGVudCIsImVzY2FwZUhhbmRsZXIiLCJvbkNsb3NlIiwiYmluZCIsImJlZm9yZU9wZW4iLCJiZWdpbkJ1dHRvbiIsIkJ1dHRvbiIsInRleHQiLCJ0eXBlIiwicHJlc3MiLCJvbkFwcGx5IiwiZW5kQnV0dG9uIiwic2V0TW9kZWwiLCJKU09OTW9kZWwiLCJpc0VkaXRhYmxlIiwiYmluZEVsZW1lbnQiLCJwYXRoIiwibW9kZWwiLCJldmVudCIsImdldFNvdXJjZSIsInNldEJpbmRpbmdDb250ZXh0IiwiYWRkRGVwZW5kZW50IiwiZGVzdHJveSIsImNsb3NlIiwiZ2V0UmVxdWlyZWREYXRhUHJvbWlzZSIsIm1hbmFnZU1lc3NhZ2UiLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsIkRyYWZ0U3RhdHVzIiwiRkVMaWJyYXJ5IiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNldFByb3BlcnR5IiwibWVzc2FnZUhhbmRsZXIiLCJzaG93TWVzc2FnZXMiLCJvbkJlZm9yZVNob3dNZXNzYWdlIiwibWVzc2FnZXMiLCJzaG93TWVzc2FnZVBhcmFtZXRlcnMiLCJmbkdldE1lc3NhZ2VTdWJ0aXRsZSIsIm1lc3NhZ2VIYW5kbGluZyIsInNldE1lc3NhZ2VTdWJ0aXRsZSIsInNpemUiLCJlZGl0RmxvdyIsInNldERyYWZ0U3RhdHVzIiwiU2F2ZWQiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiQ2xlYXIiLCJnZXRJc0VkaXRhYmxlIiwic29tZSIsIm1lc3NhZ2UiLCJnZXRUYXJnZXRzIiwic2hvd01lc3NhZ2VCb3giLCJzaG93TWVzc2FnZURpYWxvZyIsImNvbmZpcm1CdXR0b25UeHQiLCJNZXNzYWdlQm94Iiwic3VjY2VzcyIsImFjdGlvbnMiLCJlbXBoYXNpemVkQWN0aW9uIiwic2F2ZUNoYW5nZXMiLCJmaWVsZFZhbHVlc0luZm8iLCJtYW5pZmVzdFNldHRpbmdzIiwiZ2V0UGFyZW50IiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsIm1hc3NFZGl0IiwiaXNJc29sYXRlZCIsIm9wZXJhdGlvbkdyb3VwaW5nTW9kZSIsIk9wZXJhdGlvbkdyb3VwaW5nTW9kZSIsIklzb2xhdGVkIiwiaXNvbGF0ZWRHcm91cElkIiwibWFzc0VkaXRTaWRlRWZmZWN0cyIsIk1hc3NFZGl0U2lkZUVmZmVjdHMiLCJmaWVsZFByb21pc2VzIiwic2V0Q29udGludWVPbkVycm9yIiwiZm9yRWFjaCIsInNlbGVjdGVkQ29udGV4dCIsImltbWVkaWF0ZVNpZGVFZmZlY3RzIiwicmVmcmVzaERlc2NyaXB0aW9ucyIsInZhbHVlcyIsImZpZWxkQ29udHJvbFJlZmVyZW5jZSIsInZhbHVlSGFzQ2hhbmdlZCIsImlzUmVhZE9ubHlPbkNvbnRleHQiLCJncm91cElkIiwicHJvcGVydHlQYXRoIiwiZ2V0UHJvcGVydHkiLCJwdXNoIiwidGhlbiIsImFkZCIsImNhdGNoIiwiZXJyb3IiLCJMb2ciLCJtYXAiLCJpbW1lZGlhdGVTaWRlRWZmZWN0IiwiZXhlY3V0ZUltbWVkaWF0ZVNpZGVFZmZlY3RzIiwicmVmcmVzaERlc2NyaXB0aW9uIiwic3VibWl0QmF0Y2giLCJQcm9taXNlIiwiYWxsU2V0dGxlZCIsImV4ZWN1dGVEZWZlcnJlZFNpZGVFZmZlY3RzIiwiQXJyYXkiLCJmcm9tIiwiZ2V0RmllbGRWYWx1ZXNJbmZvcyIsInJlc3VsdCIsImZpZWxkQ29udHJvbCIsImZpZWxkVmFsdWVzIiwiZ2V0RmllbGRWYWx1ZXMiLCJhcHBseUNoYW5nZXMiLCJwcm9taXNlIiwiZmllbGRzVmFsdWVzSW5mbyIsImN1c3RvbVNhdmUiLCJjdXN0b21NYXNzRWRpdFNhdmUiLCJhQ29udGV4dHMiLCJvVXBkYXRlRGF0YSIsImlzRmllbGRWYWxpZCIsInJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwicmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImlzQ3VzdG9tU2F2ZSIsImN1c3RvbUZvcm1Db250YWluZXIiLCJjcmVhdGVDdXN0b21Db250YWluZXIiLCJfanN4cyIsIl9GcmFnbWVudCIsImNoaWxkcmVuIiwiZ2V0QWRhcHRhdGlvbk1lc3NhZ2UiLCJGb3JtIiwibGF5b3V0IiwiUmVzcG9uc2l2ZUdyaWRMYXlvdXQiLCJsYWJlbFNwYW5NIiwibGFiZWxTcGFuTCIsImxhYmVsU3BhblhMIiwiZm9ybUNvbnRhaW5lcnMiLCJGb3JtQ29udGFpbmVyIiwiZm9ybUVsZW1lbnRzIiwiY3JlYXRlRm9ybUVsZW1lbnRzIiwiTWVzc2FnZVN0cmlwIiwiY3VzdG9tRnJhZ21lbnQiLCJmcm9tSW5saW5lIiwicmVzdWx0WE1MIiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImZpcnN0RWxlbWVudENoaWxkIiwibW9kZWxzIiwiZ2V0T3duZXJDb21wb25lbnQiLCJnZXRQcmVwcm9jZXNzb3JDb250ZXh0IiwiRnJhZ21lbnQiLCJsb2FkIiwiZGVmaW5pdGlvbiIsImNsb25lIiwiZ2V0RXh0ZW5zaW9uQVBJIiwibG9hZEZyYWdtZW50IiwibmFtZSIsImNvbnRleHRQYXRoIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YVBhdGgiLCJnZXRSZXNvbHZlZFBhdGgiLCJjcmVhdGVGb3JtRWxlbWVudCIsImZpZWxkSW5mbyIsIkZvcm1FbGVtZW50IiwidmlzaWJsZSIsImxhYmVsIiwiTGFiZWwiLCJwcm9wZXJ0eUluZm8iLCJrZXkiLCJmaWVsZHMiLCJjcmVhdGVGaWVsZHMiLCJtZXRhTW9kZWwiLCJjb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJtYXNzRWRpdEZpZWxkIiwiTWFzc0VkaXRGaWVsZCIsImdldENvbnRyb2xzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNYXNzRWRpdERpYWxvZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcmltaXRpdmVUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgeyBPcGVyYXRpb25Hcm91cGluZ01vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgUHJvbWlzZUtlZXBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Qcm9taXNlS2VlcGVyXCI7XG5pbXBvcnQgKiBhcyBJRCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBTaWRlRWZmZWN0c0VudGl0eVR5cGUsIFNpZGVFZmZlY3RzVGFyZ2V0LCBTaWRlRWZmZWN0c1R5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL20vTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IEZvcm0gZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9Gb3JtXCI7XG5pbXBvcnQgRm9ybUNvbnRhaW5lciBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0Zvcm1Db250YWluZXJcIjtcbmltcG9ydCBGb3JtRWxlbWVudCBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0Zvcm1FbGVtZW50XCI7XG5pbXBvcnQgUmVzcG9uc2l2ZUdyaWRMYXlvdXQgZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9SZXNwb25zaXZlR3JpZExheW91dFwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgTWFzc0VkaXRGaWVsZCBmcm9tIFwiLi9NYXNzRWRpdEZpZWxkXCI7XG5pbXBvcnQgTWFzc0VkaXRTaWRlRWZmZWN0cyBmcm9tIFwiLi9NYXNzRWRpdFNpZGVFZmZlY3RzXCI7XG5pbXBvcnQgdHlwZSB7IE1hc3NGaWVsZFByb3BlcnRpZXMgfSBmcm9tIFwiLi9saWJyYXJ5XCI7XG5cbnR5cGUgTWFzc0VkaXRTaWRlRWZmZWN0c1Byb3BlcnRpZXMgPSB7XG5cdHNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGU7XG5cdHRhYmxlUmVmcmVzaDoge1xuXHRcdGlzUmVxdWVzdGVkOiBib29sZWFuO1xuXHRcdHRhcmdldEVudGl0eT86IFNpZGVFZmZlY3RzRW50aXR5VHlwZTtcblx0fTtcblx0aW1tZWRpYXRlOiB7IHRhcmdldHM6IFNpZGVFZmZlY3RzVGFyZ2V0W107IHRyaWdnZXJBY3Rpb246IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuXHRkZWZlcnJlZDogeyB0YXJnZXRzOiBTaWRlRWZmZWN0c1RhcmdldFtdOyB0cmlnZ2VyQWN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcbn07XG5cbnR5cGUgRmllbGRWYWx1ZXNJbmZvID0ge1xuXHR2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+O1xuXHRmaWVsZENvbnRyb2xSZWZlcmVuY2U6IHsgY29udHJvbDogTWFzc0VkaXRGaWVsZDsgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPiB9W107XG59O1xuXG5leHBvcnQgdHlwZSBNYXNzRWRpdFNpZGVFZmZlY3RzRXhlY3V0aW9uUHJvcGVydGllcyA9IE1hc3NFZGl0U2lkZUVmZmVjdHNQcm9wZXJ0aWVzICYgeyBvblJvd0NvbnRleHQ6IGJvb2xlYW4gfTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFzc0VkaXREaWFsb2cge1xuXHRwcml2YXRlIHJlYWRvbmx5IHJlcXVpcmVkRGF0YVByb21pc2UgPSBuZXcgUHJvbWlzZUtlZXBlcjx2b2lkPigpO1xuXG5cdHByaXZhdGUgZGlhbG9nOiBEaWFsb2cgfCB1bmRlZmluZWQ7XG5cblx0cHVibGljIHJlYWRvbmx5IHRhYmxlOiBUYWJsZTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgZmllbGRQcm9wZXJ0aWVzOiBNYXNzRmllbGRQcm9wZXJ0aWVzW107XG5cblx0cHJpdmF0ZSByZWFkb25seSB2aWV3OiBGRVZpZXc7XG5cblx0cHVibGljIHJlYWRvbmx5IGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgY29udGV4dHNPbkVycm9yOiBPRGF0YVY0Q29udGV4dFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgdXBkYXRlZFByb3BlcnRpZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlO1xuXG5cdHB1YmxpYyByZWFkb25seSBiaW5kaW5nQ29udGV4dDogT0RhdGFWNENvbnRleHQ7XG5cblx0cHVibGljIHJlYWRvbmx5IHRyYW5zaWVudExpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgZmllbGRDb250cm9sczogTWFzc0VkaXRGaWVsZFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgaXNBZGFwdGF0aW9uOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RvciBvZiB0aGUgTWFzc0VkaXQgZGlhbG9nLlxuXHQgKiBAcGFyYW0gcHJvcHMgQ29udGFpbnMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzXG5cdCAqIEBwYXJhbSBwcm9wcy50YWJsZSBUaGUgdGFibGUgd2hlcmUgdGhlIGNoYW5nZXMgbmVlZCB0byBiZSBhcHBsaWVkXG5cdCAqIEBwYXJhbSBwcm9wcy5jb250ZXh0cyBUaGUgcm93IGNvbnRleHRzIHdoZXJlIHRoZSBjaGFuZ2VzIG5lZWQgdG8gYmUgYXBwbGllZFxuXHQgKiBAcGFyYW0gcHJvcHMuZmllbGRQcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIG90IHRoZSBmaWVsZHNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHByb3BzOiB7IHRhYmxlOiBUYWJsZTsgY29udGV4dHM6IE9EYXRhVjRDb250ZXh0W107IGZpZWxkUHJvcGVydGllczogTWFzc0ZpZWxkUHJvcGVydGllc1tdIH0pIHtcblx0XHR0aGlzLmRpYWxvZyA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLnRhYmxlID0gcHJvcHMudGFibGU7XG5cdFx0dGhpcy5jb250ZXh0cyA9IHByb3BzLmNvbnRleHRzO1xuXHRcdHRoaXMuaXNBZGFwdGF0aW9uID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMudGFibGUpLmlzQWRhcHRhdGlvbk1vZGUoKTtcblx0XHR0aGlzLmZpZWxkUHJvcGVydGllcyA9IHByb3BzLmZpZWxkUHJvcGVydGllcztcblx0XHR0aGlzLnZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRoaXMudGFibGUpO1xuXHRcdHRoaXMudHJhbnNpZW50TGlzdEJpbmRpbmcgPSB0aGlzLmdlbmVyYXRlTGlzdEJpbmRpbmcoKTtcblx0XHR0aGlzLmJpbmRpbmdDb250ZXh0ID0gdGhpcy50cmFuc2llbnRMaXN0QmluZGluZy5jcmVhdGUoe30sIHRydWUpO1xuXG5cdFx0dGhpcy5yZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdHRoaXMuY29udGV4dHNPbkVycm9yID0gW107XG5cdFx0dGhpcy5maWVsZENvbnRyb2xzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgY29udGV4dCBmb3IgdGhlIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIGNvbnRleHQuXG5cdCAqL1xuXHRwcml2YXRlIGdlbmVyYXRlTGlzdEJpbmRpbmcoKTogT0RhdGFMaXN0QmluZGluZyB7XG5cdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSB0aGlzLnRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRjb25zdCB0cmFuc2llbnRMaXN0QmluZGluZyA9ICh0aGlzLnRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuYmluZExpc3QoXG5cdFx0XHRsaXN0QmluZGluZy5nZXRQYXRoKCksXG5cdFx0XHRsaXN0QmluZGluZy5nZXRDb250ZXh0KCksXG5cdFx0XHRbXSxcblx0XHRcdFtdLFxuXHRcdFx0e1xuXHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwic3VibWl0TGF0ZXJcIlxuXHRcdFx0fVxuXHRcdCk7XG5cdFx0dHJhbnNpZW50TGlzdEJpbmRpbmcucmVmcmVzaEludGVybmFsID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0LyogKi9cblx0XHR9O1xuXHRcdHJldHVybiB0cmFuc2llbnRMaXN0QmluZGluZztcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFRoZSBpbnN0YW5jZSBvZiBkaWFsb2cuXG5cdCAqL1xuXHRhc3luYyBjcmVhdGUoKTogUHJvbWlzZTxEaWFsb2c+IHtcblx0XHRpZiAoIXRoaXMuZGlhbG9nKSB7XG5cdFx0XHRjb25zdCBjb3JlUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdFx0XHRjb25zdCBhcHBseUJ1dHRvblRleHQgPVxuXHRcdFx0XHR0aGlzLnZpZXcuZ2V0Vmlld0RhdGEoKS5jb252ZXJ0ZXJUeXBlID09PSBcIkxpc3RSZXBvcnRcIlxuXHRcdFx0XHRcdD8gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfU0FWRV9CVVRUT05fVEVYVFwiKVxuXHRcdFx0XHRcdDogY29yZVJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfT0tcIik7XG5cdFx0XHRjb25zdCBkaWFsb2dDb250ZW50ID0gYXdhaXQgdGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdFx0XHRjb25zdCBkaWFsb2cgPSAoXG5cdFx0XHRcdDxEaWFsb2dcblx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPVwic2FwL2ZlL21hY3Jvcy90YWJsZS9tYXNzRWRpdC9kZXNpZ250aW1lL01hc3NFZGl0LmRlc2lnbnRpbWVcIlxuXHRcdFx0XHRcdGlkPXtJRC5nZW5lcmF0ZShbdGhpcy50YWJsZS5nZXRJZCgpLCBcIk1FRF9cIiwgXCJEaWFsb2dcIl0pfVxuXHRcdFx0XHRcdGNvbnRlbnRXaWR0aD1cIjI3cmVtXCJcblx0XHRcdFx0XHRjbGFzcz1cInNhcFVpQ29udGVudFBhZGRpbmdcIlxuXHRcdFx0XHRcdGhvcml6b250YWxTY3JvbGxpbmc9XCJmYWxzZVwiXG5cdFx0XHRcdFx0dGl0bGU9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0RJQUxPR19USVRMRVwiLCBbdGhpcy5jb250ZXh0cy5sZW5ndGgudG9TdHJpbmcoKV0pfVxuXHRcdFx0XHRcdGNvbnRlbnQ9e2RpYWxvZ0NvbnRlbnR9XG5cdFx0XHRcdFx0ZXNjYXBlSGFuZGxlcj17dGhpcy5vbkNsb3NlLmJpbmQodGhpcyl9XG5cdFx0XHRcdFx0YmVmb3JlT3Blbj17dGhpcy5iZWZvcmVPcGVuLmJpbmQodGhpcyl9XG5cdFx0XHRcdFx0YmVnaW5CdXR0b249ezxCdXR0b24gdGV4dD17YXBwbHlCdXR0b25UZXh0fSB0eXBlPVwiRW1waGFzaXplZFwiIHByZXNzPXt0aGlzLm9uQXBwbHkuYmluZCh0aGlzKX0gLz59XG5cdFx0XHRcdFx0ZW5kQnV0dG9uPXs8QnV0dG9uIHRleHQ9e2NvcmVSZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fT0JKRUNUX1BBR0VfQ0FOQ0VMXCIpfSBwcmVzcz17dGhpcy5vbkNsb3NlLmJpbmQodGhpcyl9IC8+fVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHRcdHRoaXMuZGlhbG9nID0gZGlhbG9nO1xuXHRcdFx0Ly8gV2UgZG9uJ3Qgd2FudCB0byBpbmhlcml0IGZyb20gdGhlIFBhZ2VDb21wb25lbnQgZm9yIHRoZSB1aSBtb2RlbCAtPiBpbnRvIHRoaXMgZGlhbG9nLCBmaWVsZHMgYXJlIGVkaXRhYmxlXG5cdFx0XHRkaWFsb2cuc2V0TW9kZWwobmV3IEpTT05Nb2RlbCh7IGlzRWRpdGFibGU6IHRydWUgfSksIFwidWlcIik7XG5cdFx0XHRkaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdFx0bW9kZWw6IFwidWlcIlxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gZGlhbG9nO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5kaWFsb2c7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbGFzdCBjb25maWd1cmF0aW9uIGJlZm9yZSBvcGVuaW5nIHRoZSBkaWFsb2c6XG5cdCAqICAtIHNldCB0aGUgcnVudGltZSBtb2RlbFxuXHQgKiAgLSBzZXQgdGhlIE9kYXRhTW9kZWxcblx0ICogIC0gYWRkIHRoZSBkaWFsb2cgYXMgZGVwZW5kZW50IG9mIHRoZSB0YWJsZS5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSB1aTUgZXZlbnRcblx0ICovXG5cdHByaXZhdGUgYmVmb3JlT3BlbihldmVudDogVUk1RXZlbnQ8e30sIERpYWxvZz4pOiB2b2lkIHtcblx0XHRjb25zdCBkaWFsb2cgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRkaWFsb2cuc2V0TW9kZWwodGhpcy50YWJsZS5nZXRNb2RlbCgpKTtcblx0XHRkaWFsb2cuc2V0QmluZGluZ0NvbnRleHQodGhpcy5iaW5kaW5nQ29udGV4dCk7XG5cdFx0dGhpcy50YWJsZS5hZGREZXBlbmRlbnQoZGlhbG9nKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgYW5kIGRlc3Ryb3lzIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRwcml2YXRlIG9uQ2xvc2UoKTogdm9pZCB7XG5cdFx0dGhpcy50cmFuc2llbnRMaXN0QmluZGluZy5kZXN0cm95KCk7XG5cdFx0aWYgKHRoaXMuZGlhbG9nKSB7XG5cdFx0XHR0aGlzLmRpYWxvZy5jbG9zZSgpO1xuXHRcdFx0dGhpcy5kaWFsb2cuZGVzdHJveSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9taXNlIG9mIHRoZSByZXF1aXJlZCBkYXRhLlxuXHQgKiBUaGlzIHByb21pc2UgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgcmVxdWlyZWQgZGF0YSBpcyBsb2FkZWQuXG5cdCAqIFRoaXMgZGF0YSBhcmUgdXNlZCBvbiB0aGUgc2F2ZSB3b3JrZmxvdyB0byBkZXRlcm1pbmUgaWYgdGhlIG5ldyBkYXRhIGhhcyB0byBiZSBzYXZlZCBvciBub3QuXG5cdCAqIFRoZSBzYXZlIHdvcmtmbG93IGlzIGV4ZWN1dGVkIG9ubHkgaWYgdGhpcyBwcm9taXNlIGlzIHJlc29sdmVkLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgcmVxdWlyZWQgZGF0YS5cblx0ICovXG5cdGdldFJlcXVpcmVkRGF0YVByb21pc2UoKTogUHJvbWlzZUtlZXBlcjx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMucmVxdWlyZWREYXRhUHJvbWlzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBtZXNzYWdlcyBhY2NvcmRpbmcgdG8gdGhlIGNvbnRleHRzIG9uIGVycm9yLlxuXHQgKi9cblx0YXN5bmMgbWFuYWdlTWVzc2FnZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjb3JlUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMudmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0Y29uc3QgRHJhZnRTdGF0dXMgPSBGRUxpYnJhcnkuRHJhZnRTdGF0dXM7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJnZXRCb3VuZE1lc3NhZ2VzRm9yTWFzc0VkaXRcIiwgdHJ1ZSk7XG5cdFx0YXdhaXQgY29udHJvbGxlci5tZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoe1xuXHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogKFxuXHRcdFx0XHRtZXNzYWdlczogTWVzc2FnZVtdLFxuXHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnM6IHtcblx0XHRcdFx0XHRmbkdldE1lc3NhZ2VTdWJ0aXRsZT86IEZ1bmN0aW9uO1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlQm94PzogYm9vbGVhbjtcblx0XHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZz86IGJvb2xlYW47XG5cdFx0XHRcdFx0ZmlsdGVyZWRNZXNzYWdlcz86IE1lc3NhZ2VbXTtcblx0XHRcdFx0XHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0XHR9XG5cdFx0XHQpID0+IHtcblx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZuR2V0TWVzc2FnZVN1YnRpdGxlID0gbWVzc2FnZUhhbmRsaW5nLnNldE1lc3NhZ2VTdWJ0aXRsZS5iaW5kKHt9LCB0aGlzLnRhYmxlLCB0aGlzLmNvbnRleHRzKTtcblxuXHRcdFx0XHRpZiAoIXRoaXMuY29udGV4dHNPbkVycm9yLmxlbmd0aCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLnVwZGF0ZWRQcm9wZXJ0aWVzLnNpemUgPiAwKSB7XG5cdFx0XHRcdFx0XHQvL1RoZXJlIGlzIGF0IGxlYXN0IG9uZSBuZXcgdmFsdWUgc2V0XG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLmVkaXRGbG93LnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLlNhdmVkKTtcblx0XHRcdFx0XHRcdGlmICh0aGlzLnZpZXcuZ2V0Vmlld0RhdGEoKS5jb252ZXJ0ZXJUeXBlID09PSBcIkxpc3RSZXBvcnRcIikge1xuXHRcdFx0XHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyh0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9TVUNDRVNTX1RPQVNUXCIpKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfT0JKRUNUX1BBR0VfTUFTU19FRElUX1NVQ0NFU1NfVE9BU1RcIikpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyh0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9OT19DSEFOR0VcIikpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmNvbnRleHRzT25FcnJvci5sZW5ndGggPCB0aGlzLmNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGNvbnRyb2xsZXIuZWRpdEZsb3cuc2V0RHJhZnRTdGF0dXMoRHJhZnRTdGF0dXMuU2F2ZWQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGV4dHNPbkVycm9yLmxlbmd0aCA9PT0gdGhpcy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRjb250cm9sbGVyLmVkaXRGbG93LnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLkNsZWFyKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKGNvbnRyb2xsZXIpICYmICFtZXNzYWdlcy5zb21lKChtZXNzYWdlKSA9PiAhbWVzc2FnZS5nZXRUYXJnZXRzKCkpKSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dNZXNzYWdlQm94ID0gZmFsc2U7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNob3dNZXNzYWdlUGFyYW1ldGVycztcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGlmICghIXRoaXMuY29udGV4dHNPbkVycm9yLmxlbmd0aCAmJiB0aGlzLmNvbnRleHRzT25FcnJvci5sZW5ndGggPCB0aGlzLmNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgY29uZmlybUJ1dHRvblR4dCA9IGNvcmVSZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX09LXCIpO1xuXHRcdFx0TWVzc2FnZUJveC5zdWNjZXNzKFxuXHRcdFx0XHR0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DSEFOR0VTX1dJVEhfRVJST1JcIiwgW1xuXHRcdFx0XHRcdHRoaXMuY29udGV4dHMubGVuZ3RoIC0gdGhpcy5jb250ZXh0c09uRXJyb3IubGVuZ3RoLFxuXHRcdFx0XHRcdHRoaXMuY29udGV4dHMubGVuZ3RoXG5cdFx0XHRcdF0pLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0YWN0aW9uczogW2NvbmZpcm1CdXR0b25UeHRdLFxuXHRcdFx0XHRcdGVtcGhhc2l6ZWRBY3Rpb246IGNvbmZpcm1CdXR0b25UeHRcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiZ2V0Qm91bmRNZXNzYWdlc0Zvck1hc3NFZGl0XCIsIGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyB0aGUgcmVsZXZhbnQgY29udGV4dHMgYW5kIHJlZnJlc2hlcyB0aGUgYXNzb2NpYXRlZCBwcm9wZXJ0aWVzLlxuXHQgKiBAcGFyYW0gZmllbGRWYWx1ZXNJbmZvIFRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgdmFsdWVzIGZvciBhbGwgbWFzcyBlZGl0IGZpZWxkcy5cblx0ICogQHJldHVybnMgQSBQcm9taXNlLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBzYXZlQ2hhbmdlcyhmaWVsZFZhbHVlc0luZm86IEZpZWxkVmFsdWVzSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG1hbmlmZXN0U2V0dGluZ3MgPSAodGhpcy50YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5tYXNzRWRpdDtcblx0XHRjb25zdCBpc0lzb2xhdGVkID0gbWFuaWZlc3RTZXR0aW5ncy5vcGVyYXRpb25Hcm91cGluZ01vZGUgPT09IE9wZXJhdGlvbkdyb3VwaW5nTW9kZS5Jc29sYXRlZDtcblx0XHRjb25zdCBpc29sYXRlZEdyb3VwSWQgPSBcIiRhdXRvLklzb2xhdGVkXCI7XG5cdFx0Y29uc3QgbWFzc0VkaXRTaWRlRWZmZWN0cyA9IG5ldyBNYXNzRWRpdFNpZGVFZmZlY3RzKHRoaXMpOyAvLyBVc2UgdGhlIGZpcnN0IGxpbmUgYXMgcmVmZXJlbmNlIGNvbnRleHQgdG8gY2FsY3VsYXRlIHRoZSBtYXAgb2Ygc2lkZSBlZmZlY3RzXG5cdFx0Y29uc3QgZmllbGRQcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG5cdFx0Y29uc3QgbW9kZWwgPSB0aGlzLnRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbDtcblxuXHRcdGlmIChpc0lzb2xhdGVkKSB7XG5cdFx0XHRtb2RlbC5zZXRDb250aW51ZU9uRXJyb3IoaXNvbGF0ZWRHcm91cElkKTtcblx0XHR9XG5cdFx0dGhpcy5jb250ZXh0cy5mb3JFYWNoKChzZWxlY3RlZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0KSA9PiB7XG5cdFx0XHRjb25zdCBpbW1lZGlhdGVTaWRlRWZmZWN0czogeyBwcm9wZXJ0eVBhdGg6IHN0cmluZzsgZ3JvdXBJZDogc3RyaW5nIH1bXSA9IFtdO1xuXHRcdFx0Y29uc3QgcmVmcmVzaERlc2NyaXB0aW9uczogeyBjb250cm9sOiBNYXNzRWRpdEZpZWxkOyBncm91cElkOiBzdHJpbmcgfVtdID0gW107XG5cdFx0XHRmb3IgKGNvbnN0IHsgY29udHJvbCwgdmFsdWVzIH0gb2YgZmllbGRWYWx1ZXNJbmZvLmZpZWxkQ29udHJvbFJlZmVyZW5jZSkge1xuXHRcdFx0XHRsZXQgdmFsdWVIYXNDaGFuZ2VkID0gZmFsc2U7XG5cdFx0XHRcdGlmICghY29udHJvbC5pc1JlYWRPbmx5T25Db250ZXh0KHNlbGVjdGVkQ29udGV4dCkpIHtcblx0XHRcdFx0XHRjb25zdCBncm91cElkID0gaXNJc29sYXRlZCA/IGlzb2xhdGVkR3JvdXBJZCA6IFwiJGF1dG9cIjtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHByb3BlcnR5UGF0aCBpbiB2YWx1ZXMpIHtcblx0XHRcdFx0XHRcdGlmIChzZWxlY3RlZENvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlQYXRoKSAhPT0gdmFsdWVzW3Byb3BlcnR5UGF0aF0pIHtcblx0XHRcdFx0XHRcdFx0dmFsdWVIYXNDaGFuZ2VkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0ZmllbGRQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0LnNldFByb3BlcnR5KHByb3BlcnR5UGF0aCwgdmFsdWVzW3Byb3BlcnR5UGF0aF0sIGdyb3VwSWQpXG5cdFx0XHRcdFx0XHRcdFx0XHQudGhlbigoKSA9PiB0aGlzLnVwZGF0ZWRQcm9wZXJ0aWVzLmFkZChwcm9wZXJ0eVBhdGgpKVxuXHRcdFx0XHRcdFx0XHRcdFx0LmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmNvbnRleHRzT25FcnJvci5wdXNoKHNlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIk1hc3MgRWRpdDogU29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gdXBkYXRpbmcgZW50cmllcy5cIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGltbWVkaWF0ZVNpZGVFZmZlY3RzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRcdFx0XHRncm91cElkXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodmFsdWVIYXNDaGFuZ2VkKSB7XG5cdFx0XHRcdFx0XHRyZWZyZXNoRGVzY3JpcHRpb25zLnB1c2goeyBjb250cm9sLCBncm91cElkIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZmllbGRQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHQuLi5pbW1lZGlhdGVTaWRlRWZmZWN0cy5tYXAoYXN5bmMgKGltbWVkaWF0ZVNpZGVFZmZlY3QpID0+XG5cdFx0XHRcdFx0bWFzc0VkaXRTaWRlRWZmZWN0cy5leGVjdXRlSW1tZWRpYXRlU2lkZUVmZmVjdHMoXG5cdFx0XHRcdFx0XHRzZWxlY3RlZENvbnRleHQsXG5cdFx0XHRcdFx0XHRpbW1lZGlhdGVTaWRlRWZmZWN0LnByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRcdGltbWVkaWF0ZVNpZGVFZmZlY3QuZ3JvdXBJZFxuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdGZpZWxkUHJvbWlzZXMucHVzaChcblx0XHRcdFx0Li4ucmVmcmVzaERlc2NyaXB0aW9ucy5tYXAoYXN5bmMgKHJlZnJlc2hEZXNjcmlwdGlvbikgPT5cblx0XHRcdFx0XHRtYXNzRWRpdFNpZGVFZmZlY3RzLnJlZnJlc2hEZXNjcmlwdGlvbihyZWZyZXNoRGVzY3JpcHRpb24uY29udHJvbCwgc2VsZWN0ZWRDb250ZXh0LCByZWZyZXNoRGVzY3JpcHRpb24uZ3JvdXBJZClcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdGlmIChpc0lzb2xhdGVkKSB7XG5cdFx0XHRcdC8vQ3JlYXRlIGEgbmV3IENoYW5nZVNldCBmb3IgdGhlIG5leHQgcmVxdWVzdHNcblx0XHRcdFx0bW9kZWwuc3VibWl0QmF0Y2goaXNvbGF0ZWRHcm91cElkKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChmaWVsZFByb21pc2VzKTtcblx0XHRpZiAodGhpcy51cGRhdGVkUHJvcGVydGllcy5zaXplKSB7XG5cdFx0XHRtYXNzRWRpdFNpZGVFZmZlY3RzLmV4ZWN1dGVEZWZlcnJlZFNpZGVFZmZlY3RzKG5ldyBTZXQoW1wiZ2VuZXJpY0ZpZWxkXCIsIC4uLkFycmF5LmZyb20odGhpcy51cGRhdGVkUHJvcGVydGllcyldKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSB2YWx1ZXMgZm9yIGFsbCBtYXNzIGVkaXQgZmllbGRzLlxuXHQgKiBAcmV0dXJucyBUaGUgaW5mb3JtYXRpb24uXG5cdCAqL1xuXHRwcml2YXRlIGdldEZpZWxkVmFsdWVzSW5mb3MoKTogRmllbGRWYWx1ZXNJbmZvIHtcblx0XHRjb25zdCByZXN1bHQgPSB7XG5cdFx0XHR2YWx1ZXM6IHt9LFxuXHRcdFx0ZmllbGRDb250cm9sUmVmZXJlbmNlOiBbXVxuXHRcdH0gYXMgRmllbGRWYWx1ZXNJbmZvO1xuXHRcdGZvciAoY29uc3QgZmllbGRDb250cm9sIG9mIHRoaXMuZmllbGRDb250cm9scykge1xuXHRcdFx0Y29uc3QgZmllbGRWYWx1ZXMgPSBmaWVsZENvbnRyb2wuZ2V0RmllbGRWYWx1ZXMoKTtcblx0XHRcdHJlc3VsdC52YWx1ZXMgPSB7IC4uLnJlc3VsdC52YWx1ZXMsIC4uLmZpZWxkVmFsdWVzIH07XG5cdFx0XHRyZXN1bHQuZmllbGRDb250cm9sUmVmZXJlbmNlLnB1c2goeyBjb250cm9sOiBmaWVsZENvbnRyb2wsIHZhbHVlczogZmllbGRWYWx1ZXMgfSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgdGFibGUgZmllbGRzIGFjY29yZGluZyB0byB0aGUgZGlhbG9nIGVudHJpZXMuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgY3VzdG9tIHNhdmUgaXMgZXhlY3V0ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuXHQgKi9cblx0YXN5bmMgYXBwbHlDaGFuZ2VzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGF3YWl0IHRoaXMucmVxdWlyZWREYXRhUHJvbWlzZS5wcm9taXNlOyAvLyBXZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSByZXF1aXJlZCBkYXRhIHRvIGJlIGxvYWRlZCBiZWZvcmUgc2F2aW5nLlxuXHRcdC8vV2Ugd2FudCB0byBza2lwIHRoZSBwYXRjaCBoYW5kbGVyKHNwZWNpZmljIHdvcmtmbG93IGRvbmUgaW50byB0aGUgRWRpdEZsb3cpIHNpbmNlIHRoZSBwYXRjaCBpcyBtYW5hZ2VkIGhlcmVcblx0XHR0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uc2V0UHJvcGVydHkoXCJza2lwUGF0Y2hIYW5kbGVyc1wiLCB0cnVlKTtcblxuXHRcdGNvbnN0IGZpZWxkc1ZhbHVlc0luZm8gPSB0aGlzLmdldEZpZWxkVmFsdWVzSW5mb3MoKTtcblx0XHRsZXQgY3VzdG9tU2F2ZSA9IGZhbHNlO1xuXHRcdHRyeSB7XG5cdFx0XHRjdXN0b21TYXZlID0gYXdhaXQgdGhpcy52aWV3XG5cdFx0XHRcdC5nZXRDb250cm9sbGVyKClcblx0XHRcdFx0LmVkaXRGbG93LmN1c3RvbU1hc3NFZGl0U2F2ZSh7IGFDb250ZXh0czogdGhpcy5jb250ZXh0cywgb1VwZGF0ZURhdGE6IGZpZWxkc1ZhbHVlc0luZm8udmFsdWVzIH0pO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJNYXNzIEVkaXQ6IFNvbWV0aGluZyB3ZW50IHdyb25nIGluIHVwZGF0aW5nIGVudHJpZXMuXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHRcdGlmICghY3VzdG9tU2F2ZSkge1xuXHRcdFx0YXdhaXQgdGhpcy5zYXZlQ2hhbmdlcyhmaWVsZHNWYWx1ZXNJbmZvKTtcblx0XHR9XG5cdFx0dGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LnNldFByb3BlcnR5KFwic2tpcFBhdGNoSGFuZGxlcnNcIiwgZmFsc2UpO1xuXHRcdHJldHVybiBjdXN0b21TYXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIHByZXNzIG9uIHRoZSBBcHBseSBCdXR0b24uXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgb25BcHBseSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGhpcy5maWVsZENvbnRyb2xzLnNvbWUoKGZpZWxkQ29udHJvbCkgPT4gIWZpZWxkQ29udHJvbC5pc0ZpZWxkVmFsaWQoKSkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCF0aGlzLmlzQWRhcHRhdGlvbikge1xuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0Y29uc3QgaXNDdXN0b21TYXZlID0gYXdhaXQgdGhpcy5hcHBseUNoYW5nZXMoKTtcblx0XHRcdGlmICghaXNDdXN0b21TYXZlKSB7XG5cdFx0XHRcdHRoaXMubWFuYWdlTWVzc2FnZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLm9uQ2xvc2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBkaWFsb2cgY29udGVudC5cblx0ICogQHJldHVybnMgUHJvbWlzZSByZXR1cm5pbmcgaW5zdGFuY2Ugb2YgZnJhZ21lbnQuXG5cdCAqL1xuXG5cdHByaXZhdGUgYXN5bmMgY3JlYXRlQ29udGVudCgpOiBQcm9taXNlPEZvcm0+IHtcblx0XHRjb25zdCBjdXN0b21Gb3JtQ29udGFpbmVyID0gYXdhaXQgdGhpcy5jcmVhdGVDdXN0b21Db250YWluZXIoKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e3RoaXMuZ2V0QWRhcHRhdGlvbk1lc3NhZ2UoKX1cblx0XHRcdFx0PEZvcm0+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGxheW91dDogPFJlc3BvbnNpdmVHcmlkTGF5b3V0IGxhYmVsU3Bhbk09XCIxMlwiIGxhYmVsU3Bhbkw9XCIxMlwiIGxhYmVsU3BhblhMPVwiMTJcIiAvPixcblx0XHRcdFx0XHRcdGZvcm1Db250YWluZXJzOiAoXG5cdFx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdFx0e2N1c3RvbUZvcm1Db250YWluZXJ9XG5cdFx0XHRcdFx0XHRcdFx0PEZvcm1Db250YWluZXI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtRWxlbWVudHM6IHRoaXMuY3JlYXRlRm9ybUVsZW1lbnRzKClcblx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0PC9Gb3JtQ29udGFpbmVyPlxuXHRcdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0Zvcm0+XG5cdFx0XHQ8Lz5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGFkYXB0YXRpb24gbWVzc2FnZS5cblx0ICogQHJldHVybnMgVGhlIG1lc3NhZ2Ugc3RyaXAgaWYgdGhlIGRpYWxvZyBpcyBkaXNwbGF5ZWQgaW4gYWRhcHRhdGlvbiBtb2RlLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRBZGFwdGF0aW9uTWVzc2FnZSgpOiBNZXNzYWdlU3RyaXAgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLmlzQWRhcHRhdGlvbikge1xuXHRcdFx0cmV0dXJuIDxNZXNzYWdlU3RyaXAgdGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQURBUFRBVElPTl9NT0RFXCIpfSAvPjtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBjdXN0b20gZm9ybSBjb250YWluZXIgYWNjb3JkaW5nIHRvIHRoZSBtYW5pZmVzdCBzZXR0aW5ncy5cblx0ICogQHJldHVybnMgVGhlIGN1c3RvbSBmb3JtIGNvbnRhaW5lci5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgY3JlYXRlQ3VzdG9tQ29udGFpbmVyKCk6IFByb21pc2U8Rm9ybUNvbnRhaW5lciB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IG1hbmlmZXN0U2V0dGluZ3MgPSAodGhpcy50YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5tYXNzRWRpdDtcblx0XHRpZiAobWFuaWZlc3RTZXR0aW5ncy5jdXN0b21GcmFnbWVudCkge1xuXHRcdFx0aWYgKG1hbmlmZXN0U2V0dGluZ3MuZnJvbUlubGluZSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHQvLyBJbmxpbmUgY29uZmlndXJhdGlvbiBmcm9tIGEgVjIgYmxvY2s6IHRoZSBmcmFnbWVudCBpcyBhIHN0cmluZ1xuXHRcdFx0XHRpZiAodHlwZW9mIG1hbmlmZXN0U2V0dGluZ3MuY3VzdG9tRnJhZ21lbnQgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRjb25zdCByZXN1bHRYTUwgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyhcblx0XHRcdFx0XHRcdG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcobWFuaWZlc3RTZXR0aW5ncy5jdXN0b21GcmFnbWVudCwgXCJ0ZXh0L3htbFwiKS5maXJzdEVsZW1lbnRDaGlsZCxcblx0XHRcdFx0XHRcdHsgbW9kZWxzOiB7fSB9LFxuXHRcdFx0XHRcdFx0KHRoaXMudmlldy5nZXRDb250cm9sbGVyKCkuZ2V0T3duZXJDb21wb25lbnQoKSBhcyBFbmhhbmNlV2l0aFVJNTxUZW1wbGF0ZUNvbXBvbmVudD4pLmdldFByZXByb2Nlc3NvckNvbnRleHQoKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIChhd2FpdCBGcmFnbWVudC5sb2FkKHtcblx0XHRcdFx0XHRcdHR5cGU6IFwiWE1MXCIsXG5cdFx0XHRcdFx0XHRkZWZpbml0aW9uOiByZXN1bHRYTUwsXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyOiB0aGlzLnZpZXcuZ2V0Q29udHJvbGxlcigpXG5cdFx0XHRcdFx0fSkpIGFzIHVua25vd24gYXMgRm9ybUNvbnRhaW5lcjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBJbmxpbmUgY29uZmlndXJhdGlvbiBmcm9tIGEgVjQgYmxvY2s6IHRoZSBmcmFnbWVudCBpcyBhbHJlYWR5IGEgRm9ybUNvbnRhaW5lclxuXHRcdFx0XHRcdHJldHVybiBtYW5pZmVzdFNldHRpbmdzLmN1c3RvbUZyYWdtZW50LmNsb25lKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiAoYXdhaXQgdGhpcy52aWV3XG5cdFx0XHRcdC5nZXRDb250cm9sbGVyKClcblx0XHRcdFx0LmdldEV4dGVuc2lvbkFQSSgpXG5cdFx0XHRcdC5sb2FkRnJhZ21lbnQoe1xuXHRcdFx0XHRcdGlkOiBcImN1c3RvbU1hc3NFZGl0XCIsXG5cdFx0XHRcdFx0bmFtZTogbWFuaWZlc3RTZXR0aW5ncy5jdXN0b21GcmFnbWVudCBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg6IHRoaXMudHJhbnNpZW50TGlzdEJpbmRpbmdcblx0XHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0XHRcdC5nZXRNZXRhUGF0aCh0aGlzLnRyYW5zaWVudExpc3RCaW5kaW5nLmdldFJlc29sdmVkUGF0aCgpKVxuXHRcdFx0XHR9KSkgYXMgRm9ybUNvbnRhaW5lcjtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBmb3JtIGVsZW1lbnRzIG9mIHRoZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFRoZSBmb3JtIGVsZW1lbnRzLlxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVGb3JtRWxlbWVudHMoKTogRm9ybUVsZW1lbnRbXSB7XG5cdFx0cmV0dXJuIHRoaXMuZmllbGRQcm9wZXJ0aWVzLm1hcCh0aGlzLmNyZWF0ZUZvcm1FbGVtZW50LmJpbmQodGhpcykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGZvcm0gZWxlbWVudHMgb2YgYSBGaWVsZC5cblx0ICogQHBhcmFtIGZpZWxkSW5mbyBUaGUgZmllbGQgcHJvcGVydGllc1xuXHQgKiBAcmV0dXJucyBUaGUgZm9ybSBlbGVtZW50LlxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVGb3JtRWxlbWVudChmaWVsZEluZm86IE1hc3NGaWVsZFByb3BlcnRpZXMpOiBGb3JtRWxlbWVudCB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGb3JtRWxlbWVudCB2aXNpYmxlPXtmaWVsZEluZm8udmlzaWJsZX0+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGFiZWw6IDxMYWJlbCB0ZXh0PXtmaWVsZEluZm8ubGFiZWx9IGlkPXtJRC5nZW5lcmF0ZShbXCJNRURfXCIsIGZpZWxkSW5mby5wcm9wZXJ0eUluZm8ua2V5LCBcIkxhYmVsXCJdKX0gLz4sXG5cdFx0XHRcdFx0ZmllbGRzOiB0aGlzLmNyZWF0ZUZpZWxkcyhmaWVsZEluZm8pXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0Zvcm1FbGVtZW50PlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgZmllbGRzIG9mIHRoZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBmaWVsZEluZm8gVGhlIGZpZWxkIHByb3BlcnRpZXNcblx0ICogQHJldHVybnMgVGhlIGZpZWxkcy5cblx0ICovXG5cdHByaXZhdGUgY3JlYXRlRmllbGRzKGZpZWxkSW5mbzogTWFzc0ZpZWxkUHJvcGVydGllcyk6IENvbnRyb2xbXSB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gKHRoaXMudGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBjb250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1ldGFNb2RlbC5nZXRNZXRhUGF0aCh0aGlzLmJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSkpIGFzIENvbnRleHQ7XG5cdFx0Y29uc3QgbWFzc0VkaXRGaWVsZCA9IG5ldyBNYXNzRWRpdEZpZWxkKGZpZWxkSW5mbywgY29udGV4dCk7XG5cdFx0dGhpcy5maWVsZENvbnRyb2xzLnB1c2gobWFzc0VkaXRGaWVsZCk7XG5cdFx0cmV0dXJuIG1hc3NFZGl0RmllbGQuZ2V0Q29udHJvbHMoKTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7TUF5RHFCQSxjQUFjO0lBMkJsQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDLFNBQUFBLGVBQVlDLEtBQTJGLEVBQUU7TUFBQSxLQWpDeEZDLG1CQUFtQixHQUFHLElBQUlDLGFBQWEsQ0FBTyxDQUFDO01BQUEsS0FjL0NDLGlCQUFpQixHQUFnQixJQUFJQyxHQUFHLENBQUMsQ0FBQztNQW9CMUQsSUFBSSxDQUFDQyxNQUFNLEdBQUdDLFNBQVM7TUFDdkIsSUFBSSxDQUFDQyxLQUFLLEdBQUdQLEtBQUssQ0FBQ08sS0FBSztNQUN4QixJQUFJLENBQUNDLFFBQVEsR0FBR1IsS0FBSyxDQUFDUSxRQUFRO01BQzlCLElBQUksQ0FBQ0MsWUFBWSxHQUFHQyxXQUFXLENBQUNDLGVBQWUsQ0FBQyxJQUFJLENBQUNKLEtBQUssQ0FBQyxDQUFDSyxnQkFBZ0IsQ0FBQyxDQUFDO01BQzlFLElBQUksQ0FBQ0MsZUFBZSxHQUFHYixLQUFLLENBQUNhLGVBQWU7TUFDNUMsSUFBSSxDQUFDQyxJQUFJLEdBQUdK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
|
|
416
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYXNzRWRpdERpYWxvZyIsInByb3BzIiwicmVxdWlyZWREYXRhUHJvbWlzZSIsIlByb21pc2VLZWVwZXIiLCJ1cGRhdGVkUHJvcGVydGllcyIsIlNldCIsImRpYWxvZyIsInVuZGVmaW5lZCIsInRhYmxlIiwiY29udGV4dHMiLCJpc0FkYXB0YXRpb24iLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImlzQWRhcHRhdGlvbk1vZGUiLCJmaWVsZFByb3BlcnRpZXMiLCJ2aWV3IiwiZ2V0VGFyZ2V0VmlldyIsInRyYW5zaWVudExpc3RCaW5kaW5nIiwiZ2VuZXJhdGVMaXN0QmluZGluZyIsImJpbmRpbmdDb250ZXh0IiwiY3JlYXRlIiwicmVzb3VyY2VNb2RlbCIsIlJlc291cmNlTW9kZWxIZWxwZXIiLCJnZXRSZXNvdXJjZU1vZGVsIiwiY29udGV4dHNPbkVycm9yIiwiZmllbGRDb250cm9scyIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwibGlzdEJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwiZ2V0TW9kZWwiLCJiaW5kTGlzdCIsImdldFBhdGgiLCJnZXRDb250ZXh0IiwiJCR1cGRhdGVHcm91cElkIiwicmVmcmVzaEludGVybmFsIiwiY29yZVJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiYXBwbHlCdXR0b25UZXh0IiwiZ2V0Vmlld0RhdGEiLCJjb252ZXJ0ZXJUeXBlIiwiZ2V0VGV4dCIsImRpYWxvZ0NvbnRlbnQiLCJjcmVhdGVDb250ZW50IiwiX2pzeCIsIkRpYWxvZyIsImlkIiwiSUQiLCJnZW5lcmF0ZSIsImdldElkIiwiY29udGVudFdpZHRoIiwiY2xhc3MiLCJob3Jpem9udGFsU2Nyb2xsaW5nIiwidGl0bGUiLCJsZW5ndGgiLCJ0b1N0cmluZyIsImNvbnRlbnQiLCJlc2NhcGVIYW5kbGVyIiwib25DbG9zZSIsImJpbmQiLCJiZWZvcmVPcGVuIiwiYmVnaW5CdXR0b24iLCJCdXR0b24iLCJ0ZXh0IiwidHlwZSIsInByZXNzIiwib25BcHBseSIsImVuZEJ1dHRvbiIsInNldE1vZGVsIiwiSlNPTk1vZGVsIiwiaXNFZGl0YWJsZSIsImJpbmRFbGVtZW50IiwicGF0aCIsIm1vZGVsIiwiZXZlbnQiLCJnZXRTb3VyY2UiLCJzZXRCaW5kaW5nQ29udGV4dCIsImFkZERlcGVuZGVudCIsImRlc3Ryb3kiLCJjbG9zZSIsImdldFJlcXVpcmVkRGF0YVByb21pc2UiLCJtYW5hZ2VNZXNzYWdlIiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJEcmFmdFN0YXR1cyIsIkZFTGlicmFyeSIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzZXRQcm9wZXJ0eSIsIm1lc3NhZ2VIYW5kbGVyIiwic2hvd01lc3NhZ2VzIiwib25CZWZvcmVTaG93TWVzc2FnZSIsIm1lc3NhZ2VzIiwic2hvd01lc3NhZ2VQYXJhbWV0ZXJzIiwiZm5HZXRNZXNzYWdlU3VidGl0bGUiLCJtZXNzYWdlSGFuZGxpbmciLCJzZXRNZXNzYWdlU3VidGl0bGUiLCJzaXplIiwiZWRpdEZsb3ciLCJzZXREcmFmdFN0YXR1cyIsIlNhdmVkIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsIkNsZWFyIiwiZ2V0SXNFZGl0YWJsZSIsInNvbWUiLCJtZXNzYWdlIiwiZ2V0VGFyZ2V0cyIsInNob3dNZXNzYWdlQm94Iiwic2hvd01lc3NhZ2VEaWFsb2ciLCJjb25maXJtQnV0dG9uVHh0IiwiTWVzc2FnZUJveCIsInN1Y2Nlc3MiLCJhY3Rpb25zIiwiZW1waGFzaXplZEFjdGlvbiIsInNhdmVDaGFuZ2VzIiwiZmllbGRWYWx1ZXNJbmZvIiwibWFuaWZlc3RTZXR0aW5ncyIsImdldFBhcmVudCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbnRyb2wiLCJtYXNzRWRpdCIsImlzSXNvbGF0ZWQiLCJvcGVyYXRpb25Hcm91cGluZ01vZGUiLCJPcGVyYXRpb25Hcm91cGluZ01vZGUiLCJJc29sYXRlZCIsImlzb2xhdGVkR3JvdXBJZCIsIm1hc3NFZGl0U2lkZUVmZmVjdHMiLCJNYXNzRWRpdFNpZGVFZmZlY3RzIiwiZmllbGRQcm9taXNlcyIsInNldENvbnRpbnVlT25FcnJvciIsImZvckVhY2giLCJzZWxlY3RlZENvbnRleHQiLCJpbW1lZGlhdGVTaWRlRWZmZWN0cyIsInJlZnJlc2hEZXNjcmlwdGlvbnMiLCJ2YWx1ZXMiLCJmaWVsZENvbnRyb2xSZWZlcmVuY2UiLCJ2YWx1ZUhhc0NoYW5nZWQiLCJpc1JlYWRPbmx5T25Db250ZXh0IiwiZ3JvdXBJZCIsInByb3BlcnR5UGF0aCIsImdldFByb3BlcnR5IiwicHVzaCIsInRoZW4iLCJhZGQiLCJjYXRjaCIsImVycm9yIiwiTG9nIiwibWFwIiwiaW1tZWRpYXRlU2lkZUVmZmVjdCIsImV4ZWN1dGVJbW1lZGlhdGVTaWRlRWZmZWN0cyIsInJlZnJlc2hEZXNjcmlwdGlvbiIsInN1Ym1pdEJhdGNoIiwiUHJvbWlzZSIsImFsbFNldHRsZWQiLCJleGVjdXRlRGVmZXJyZWRTaWRlRWZmZWN0cyIsIkFycmF5IiwiZnJvbSIsImdldEZpZWxkVmFsdWVzSW5mb3MiLCJyZXN1bHQiLCJmaWVsZENvbnRyb2wiLCJmaWVsZFZhbHVlcyIsImdldEZpZWxkVmFsdWVzIiwiYXBwbHlDaGFuZ2VzIiwicHJvbWlzZSIsImZpZWxkc1ZhbHVlc0luZm8iLCJjdXN0b21TYXZlIiwiY3VzdG9tTWFzc0VkaXRTYXZlIiwiYUNvbnRleHRzIiwib1VwZGF0ZURhdGEiLCJpc0ZpZWxkVmFsaWQiLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJpc0N1c3RvbVNhdmUiLCJjdXN0b21Gb3JtQ29udGFpbmVyIiwiY3JlYXRlQ3VzdG9tQ29udGFpbmVyIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJjaGlsZHJlbiIsImdldEFkYXB0YXRpb25NZXNzYWdlIiwiRm9ybSIsImxheW91dCIsIlJlc3BvbnNpdmVHcmlkTGF5b3V0IiwibGFiZWxTcGFuTSIsImxhYmVsU3BhbkwiLCJsYWJlbFNwYW5YTCIsImZvcm1Db250YWluZXJzIiwiRm9ybUNvbnRhaW5lciIsImZvcm1FbGVtZW50cyIsImNyZWF0ZUZvcm1FbGVtZW50cyIsIk1lc3NhZ2VTdHJpcCIsImN1c3RvbUZyYWdtZW50IiwiZnJvbUlubGluZSIsInJlc3VsdFhNTCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJmaXJzdEVsZW1lbnRDaGlsZCIsIm1vZGVscyIsImdldE93bmVyQ29tcG9uZW50IiwiZ2V0UHJlcHJvY2Vzc29yQ29udGV4dCIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJjbG9uZSIsImdldEV4dGVuc2lvbkFQSSIsImxvYWRGcmFnbWVudCIsIm5hbWUiLCJjb250ZXh0UGF0aCIsImdldE1ldGFNb2RlbCIsImdldE1ldGFQYXRoIiwiZ2V0UmVzb2x2ZWRQYXRoIiwiY3JlYXRlRm9ybUVsZW1lbnQiLCJmaWVsZEluZm8iLCJGb3JtRWxlbWVudCIsInZpc2libGUiLCJsYWJlbCIsIkxhYmVsIiwicHJvcGVydHlJbmZvIiwia2V5IiwiZmllbGRzIiwiY3JlYXRlRmllbGRzIiwibWV0YU1vZGVsIiwiY29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwibWFzc0VkaXRGaWVsZCIsIk1hc3NFZGl0RmllbGQiLCJnZXRDb250cm9scyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTWFzc0VkaXREaWFsb2cudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJpbWl0aXZlVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBtZXNzYWdlSGFuZGxpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IHsgT3BlcmF0aW9uR3JvdXBpbmdNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IFByb21pc2VLZWVwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUHJvbWlzZUtlZXBlclwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0ICogYXMgSUQgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIHsgU2lkZUVmZmVjdHNFbnRpdHlUeXBlLCBTaWRlRWZmZWN0c1RhcmdldCwgU2lkZUVmZmVjdHNUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBGb3JtIGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybVwiO1xuaW1wb3J0IEZvcm1Db250YWluZXIgZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9Gb3JtQ29udGFpbmVyXCI7XG5pbXBvcnQgRm9ybUVsZW1lbnQgZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9Gb3JtRWxlbWVudFwiO1xuaW1wb3J0IFJlc3BvbnNpdmVHcmlkTGF5b3V0IGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vUmVzcG9uc2l2ZUdyaWRMYXlvdXRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IE1hc3NFZGl0RmllbGQgZnJvbSBcIi4vTWFzc0VkaXRGaWVsZFwiO1xuaW1wb3J0IE1hc3NFZGl0U2lkZUVmZmVjdHMgZnJvbSBcIi4vTWFzc0VkaXRTaWRlRWZmZWN0c1wiO1xuaW1wb3J0IHR5cGUgeyBNYXNzRmllbGRQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vbGlicmFyeVwiO1xuXG50eXBlIE1hc3NFZGl0U2lkZUVmZmVjdHNQcm9wZXJ0aWVzID0ge1xuXHRzaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUeXBlO1xuXHR0YWJsZVJlZnJlc2g6IHtcblx0XHRpc1JlcXVlc3RlZDogYm9vbGVhbjtcblx0XHR0YXJnZXRFbnRpdHk/OiBTaWRlRWZmZWN0c0VudGl0eVR5cGU7XG5cdH07XG5cdGltbWVkaWF0ZTogeyB0YXJnZXRzOiBTaWRlRWZmZWN0c1RhcmdldFtdOyB0cmlnZ2VyQWN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcblx0ZGVmZXJyZWQ6IHsgdGFyZ2V0czogU2lkZUVmZmVjdHNUYXJnZXRbXTsgdHJpZ2dlckFjdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG59O1xuXG50eXBlIEZpZWxkVmFsdWVzSW5mbyA9IHtcblx0dmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPjtcblx0ZmllbGRDb250cm9sUmVmZXJlbmNlOiB7IGNvbnRyb2w6IE1hc3NFZGl0RmllbGQ7IHZhbHVlczogUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT4gfVtdO1xufTtcblxuZXhwb3J0IHR5cGUgTWFzc0VkaXRTaWRlRWZmZWN0c0V4ZWN1dGlvblByb3BlcnRpZXMgPSBNYXNzRWRpdFNpZGVFZmZlY3RzUHJvcGVydGllcyAmIHsgb25Sb3dDb250ZXh0OiBib29sZWFuIH07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hc3NFZGl0RGlhbG9nIHtcblx0cHJpdmF0ZSByZWFkb25seSByZXF1aXJlZERhdGFQcm9taXNlID0gbmV3IFByb21pc2VLZWVwZXI8dm9pZD4oKTtcblxuXHRwcml2YXRlIGRpYWxvZzogRGlhbG9nIHwgdW5kZWZpbmVkO1xuXG5cdHB1YmxpYyByZWFkb25seSB0YWJsZTogVGFibGU7XG5cblx0cHVibGljIHJlYWRvbmx5IGZpZWxkUHJvcGVydGllczogTWFzc0ZpZWxkUHJvcGVydGllc1tdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgdmlldzogRkVWaWV3O1xuXG5cdHB1YmxpYyByZWFkb25seSBjb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGNvbnRleHRzT25FcnJvcjogT0RhdGFWNENvbnRleHRbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IHVwZGF0ZWRQcm9wZXJ0aWVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWw7XG5cblx0cHVibGljIHJlYWRvbmx5IGJpbmRpbmdDb250ZXh0OiBPRGF0YVY0Q29udGV4dDtcblxuXHRwdWJsaWMgcmVhZG9ubHkgdHJhbnNpZW50TGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmc7XG5cblx0cHJpdmF0ZSByZWFkb25seSBmaWVsZENvbnRyb2xzOiBNYXNzRWRpdEZpZWxkW107XG5cblx0cHJpdmF0ZSByZWFkb25seSBpc0FkYXB0YXRpb246IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdG9yIG9mIHRoZSBNYXNzRWRpdCBkaWFsb2cuXG5cdCAqIEBwYXJhbSBwcm9wcyBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXNcblx0ICogQHBhcmFtIHByb3BzLnRhYmxlIFRoZSB0YWJsZSB3aGVyZSB0aGUgY2hhbmdlcyBuZWVkIHRvIGJlIGFwcGxpZWRcblx0ICogQHBhcmFtIHByb3BzLmNvbnRleHRzIFRoZSByb3cgY29udGV4dHMgd2hlcmUgdGhlIGNoYW5nZXMgbmVlZCB0byBiZSBhcHBsaWVkXG5cdCAqIEBwYXJhbSBwcm9wcy5maWVsZFByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgb3QgdGhlIGZpZWxkc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocHJvcHM6IHsgdGFibGU6IFRhYmxlOyBjb250ZXh0czogT0RhdGFWNENvbnRleHRbXTsgZmllbGRQcm9wZXJ0aWVzOiBNYXNzRmllbGRQcm9wZXJ0aWVzW10gfSkge1xuXHRcdHRoaXMuZGlhbG9nID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMudGFibGUgPSBwcm9wcy50YWJsZTtcblx0XHR0aGlzLmNvbnRleHRzID0gcHJvcHMuY29udGV4dHM7XG5cdFx0dGhpcy5pc0FkYXB0YXRpb24gPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy50YWJsZSkuaXNBZGFwdGF0aW9uTW9kZSgpO1xuXHRcdHRoaXMuZmllbGRQcm9wZXJ0aWVzID0gcHJvcHMuZmllbGRQcm9wZXJ0aWVzO1xuXHRcdHRoaXMudmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGhpcy50YWJsZSk7XG5cdFx0dGhpcy50cmFuc2llbnRMaXN0QmluZGluZyA9IHRoaXMuZ2VuZXJhdGVMaXN0QmluZGluZygpO1xuXHRcdHRoaXMuYmluZGluZ0NvbnRleHQgPSB0aGlzLnRyYW5zaWVudExpc3RCaW5kaW5nLmNyZWF0ZSh7fSwgdHJ1ZSk7XG5cblx0XHR0aGlzLnJlc291cmNlTW9kZWwgPSBSZXNvdXJjZU1vZGVsSGVscGVyLmdldFJlc291cmNlTW9kZWwodGhpcy50YWJsZSk7XG5cdFx0dGhpcy5jb250ZXh0c09uRXJyb3IgPSBbXTtcblx0XHR0aGlzLmZpZWxkQ29udHJvbHMgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBjb250ZXh0IGZvciB0aGUgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgY29udGV4dC5cblx0ICovXG5cdHByaXZhdGUgZ2VuZXJhdGVMaXN0QmluZGluZygpOiBPRGF0YUxpc3RCaW5kaW5nIHtcblx0XHRjb25zdCBsaXN0QmluZGluZyA9IHRoaXMudGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdGNvbnN0IHRyYW5zaWVudExpc3RCaW5kaW5nID0gKHRoaXMudGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5iaW5kTGlzdChcblx0XHRcdGxpc3RCaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdGxpc3RCaW5kaW5nLmdldENvbnRleHQoKSxcblx0XHRcdFtdLFxuXHRcdFx0W10sXG5cdFx0XHR7XG5cdFx0XHRcdCQkdXBkYXRlR3JvdXBJZDogXCJzdWJtaXRMYXRlclwiXG5cdFx0XHR9XG5cdFx0KTtcblx0XHR0cmFuc2llbnRMaXN0QmluZGluZy5yZWZyZXNoSW50ZXJuYWwgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHQvKiAqL1xuXHRcdH07XG5cdFx0cmV0dXJuIHRyYW5zaWVudExpc3RCaW5kaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIGluc3RhbmNlIG9mIGRpYWxvZy5cblx0ICovXG5cdGFzeW5jIGNyZWF0ZSgpOiBQcm9taXNlPERpYWxvZz4ge1xuXHRcdGlmICghdGhpcy5kaWFsb2cpIHtcblx0XHRcdGNvbnN0IGNvcmVSZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSBhcyBSZXNvdXJjZUJ1bmRsZTtcblx0XHRcdGNvbnN0IGFwcGx5QnV0dG9uVGV4dCA9XG5cdFx0XHRcdHRoaXMudmlldy5nZXRWaWV3RGF0YSgpLmNvbnZlcnRlclR5cGUgPT09IFwiTGlzdFJlcG9ydFwiXG5cdFx0XHRcdFx0PyB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfTUFTU19FRElUX1NBVkVfQlVUVE9OX1RFWFRcIilcblx0XHRcdFx0XHQ6IGNvcmVSZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX09LXCIpO1xuXHRcdFx0Y29uc3QgZGlhbG9nQ29udGVudCA9IGF3YWl0IHRoaXMuY3JlYXRlQ29udGVudCgpO1xuXHRcdFx0Y29uc3QgZGlhbG9nID0gKFxuXHRcdFx0XHQ8RGlhbG9nXG5cdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cInNhcC9mZS9tYWNyb3MvdGFibGUvbWFzc0VkaXQvZGVzaWdudGltZS9NYXNzRWRpdC5kZXNpZ250aW1lXCJcblx0XHRcdFx0XHRpZD17SUQuZ2VuZXJhdGUoW3RoaXMudGFibGUuZ2V0SWQoKSwgXCJNRURfXCIsIFwiRGlhbG9nXCJdKX1cblx0XHRcdFx0XHRjb250ZW50V2lkdGg9XCIyN3JlbVwiXG5cdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaUNvbnRlbnRQYWRkaW5nXCJcblx0XHRcdFx0XHRob3Jpem9udGFsU2Nyb2xsaW5nPVwiZmFsc2VcIlxuXHRcdFx0XHRcdHRpdGxlPXt0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfTUFTU19FRElUX0RJQUxPR19USVRMRVwiLCBbdGhpcy5jb250ZXh0cy5sZW5ndGgudG9TdHJpbmcoKV0pfVxuXHRcdFx0XHRcdGNvbnRlbnQ9e2RpYWxvZ0NvbnRlbnR9XG5cdFx0XHRcdFx0ZXNjYXBlSGFuZGxlcj17dGhpcy5vbkNsb3NlLmJpbmQodGhpcyl9XG5cdFx0XHRcdFx0YmVmb3JlT3Blbj17dGhpcy5iZWZvcmVPcGVuLmJpbmQodGhpcyl9XG5cdFx0XHRcdFx0YmVnaW5CdXR0b249ezxCdXR0b24gdGV4dD17YXBwbHlCdXR0b25UZXh0fSB0eXBlPVwiRW1waGFzaXplZFwiIHByZXNzPXt0aGlzLm9uQXBwbHkuYmluZCh0aGlzKX0gLz59XG5cdFx0XHRcdFx0ZW5kQnV0dG9uPXs8QnV0dG9uIHRleHQ9e2NvcmVSZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fT0JKRUNUX1BBR0VfQ0FOQ0VMXCIpfSBwcmVzcz17dGhpcy5vbkNsb3NlLmJpbmQodGhpcyl9IC8+fVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHRcdHRoaXMuZGlhbG9nID0gZGlhbG9nO1xuXHRcdFx0Ly8gV2UgZG9uJ3Qgd2FudCB0byBpbmhlcml0IGZyb20gdGhlIFBhZ2VDb21wb25lbnQgZm9yIHRoZSB1aSBtb2RlbCAtPiBpbnRvIHRoaXMgZGlhbG9nLCBmaWVsZHMgYXJlIGVkaXRhYmxlXG5cdFx0XHRkaWFsb2cuc2V0TW9kZWwobmV3IEpTT05Nb2RlbCh7IGlzRWRpdGFibGU6IHRydWUgfSksIFwidWlcIik7XG5cdFx0XHRkaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdFx0bW9kZWw6IFwidWlcIlxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gZGlhbG9nO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5kaWFsb2c7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbGFzdCBjb25maWd1cmF0aW9uIGJlZm9yZSBvcGVuaW5nIHRoZSBkaWFsb2c6XG5cdCAqICAtIHNldCB0aGUgcnVudGltZSBtb2RlbFxuXHQgKiAgLSBzZXQgdGhlIE9kYXRhTW9kZWxcblx0ICogIC0gYWRkIHRoZSBkaWFsb2cgYXMgZGVwZW5kZW50IG9mIHRoZSB0YWJsZS5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSB1aTUgZXZlbnRcblx0ICovXG5cdHByaXZhdGUgYmVmb3JlT3BlbihldmVudDogVUk1RXZlbnQ8e30sIERpYWxvZz4pOiB2b2lkIHtcblx0XHRjb25zdCBkaWFsb2cgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRkaWFsb2cuc2V0TW9kZWwodGhpcy50YWJsZS5nZXRNb2RlbCgpKTtcblx0XHRkaWFsb2cuc2V0QmluZGluZ0NvbnRleHQodGhpcy5iaW5kaW5nQ29udGV4dCk7XG5cdFx0dGhpcy50YWJsZS5hZGREZXBlbmRlbnQoZGlhbG9nKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgYW5kIGRlc3Ryb3lzIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRwcml2YXRlIG9uQ2xvc2UoKTogdm9pZCB7XG5cdFx0dGhpcy50cmFuc2llbnRMaXN0QmluZGluZy5kZXN0cm95KCk7XG5cdFx0aWYgKHRoaXMuZGlhbG9nKSB7XG5cdFx0XHR0aGlzLmRpYWxvZy5jbG9zZSgpO1xuXHRcdFx0dGhpcy5kaWFsb2cuZGVzdHJveSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9taXNlIG9mIHRoZSByZXF1aXJlZCBkYXRhLlxuXHQgKiBUaGlzIHByb21pc2UgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgcmVxdWlyZWQgZGF0YSBpcyBsb2FkZWQuXG5cdCAqIFRoaXMgZGF0YSBhcmUgdXNlZCBvbiB0aGUgc2F2ZSB3b3JrZmxvdyB0byBkZXRlcm1pbmUgaWYgdGhlIG5ldyBkYXRhIGhhcyB0byBiZSBzYXZlZCBvciBub3QuXG5cdCAqIFRoZSBzYXZlIHdvcmtmbG93IGlzIGV4ZWN1dGVkIG9ubHkgaWYgdGhpcyBwcm9taXNlIGlzIHJlc29sdmVkLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgcmVxdWlyZWQgZGF0YS5cblx0ICovXG5cdGdldFJlcXVpcmVkRGF0YVByb21pc2UoKTogUHJvbWlzZUtlZXBlcjx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMucmVxdWlyZWREYXRhUHJvbWlzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBtZXNzYWdlcyBhY2NvcmRpbmcgdG8gdGhlIGNvbnRleHRzIG9uIGVycm9yLlxuXHQgKi9cblx0YXN5bmMgbWFuYWdlTWVzc2FnZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjb3JlUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMudmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0Y29uc3QgRHJhZnRTdGF0dXMgPSBGRUxpYnJhcnkuRHJhZnRTdGF0dXM7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJnZXRCb3VuZE1lc3NhZ2VzRm9yTWFzc0VkaXRcIiwgdHJ1ZSk7XG5cdFx0YXdhaXQgY29udHJvbGxlci5tZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoe1xuXHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogKFxuXHRcdFx0XHRtZXNzYWdlczogTWVzc2FnZVtdLFxuXHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnM6IHtcblx0XHRcdFx0XHRmbkdldE1lc3NhZ2VTdWJ0aXRsZT86IEZ1bmN0aW9uO1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlQm94PzogYm9vbGVhbjtcblx0XHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZz86IGJvb2xlYW47XG5cdFx0XHRcdFx0ZmlsdGVyZWRNZXNzYWdlcz86IE1lc3NhZ2VbXTtcblx0XHRcdFx0XHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0XHR9XG5cdFx0XHQpID0+IHtcblx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZuR2V0TWVzc2FnZVN1YnRpdGxlID0gbWVzc2FnZUhhbmRsaW5nLnNldE1lc3NhZ2VTdWJ0aXRsZS5iaW5kKHt9LCB0aGlzLnRhYmxlLCB0aGlzLmNvbnRleHRzKTtcblxuXHRcdFx0XHRpZiAoIXRoaXMuY29udGV4dHNPbkVycm9yLmxlbmd0aCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLnVwZGF0ZWRQcm9wZXJ0aWVzLnNpemUgPiAwKSB7XG5cdFx0XHRcdFx0XHQvL1RoZXJlIGlzIGF0IGxlYXN0IG9uZSBuZXcgdmFsdWUgc2V0XG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLmVkaXRGbG93LnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLlNhdmVkKTtcblx0XHRcdFx0XHRcdGlmICh0aGlzLnZpZXcuZ2V0Vmlld0RhdGEoKS5jb252ZXJ0ZXJUeXBlID09PSBcIkxpc3RSZXBvcnRcIikge1xuXHRcdFx0XHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyh0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfTUFTU19FRElUX1NVQ0NFU1NfVE9BU1RcIikpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX09CSkVDVF9QQUdFX01BU1NfRURJVF9TVUNDRVNTX1RPQVNUXCIpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX01BU1NfRURJVF9OT19DSEFOR0VcIikpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmNvbnRleHRzT25FcnJvci5sZW5ndGggPCB0aGlzLmNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGNvbnRyb2xsZXIuZWRpdEZsb3cuc2V0RHJhZnRTdGF0dXMoRHJhZnRTdGF0dXMuU2F2ZWQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGV4dHNPbkVycm9yLmxlbmd0aCA9PT0gdGhpcy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRjb250cm9sbGVyLmVkaXRGbG93LnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLkNsZWFyKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKGNvbnRyb2xsZXIpICYmICFtZXNzYWdlcy5zb21lKChtZXNzYWdlKSA9PiAhbWVzc2FnZS5nZXRUYXJnZXRzKCkpKSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dNZXNzYWdlQm94ID0gZmFsc2U7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNob3dNZXNzYWdlUGFyYW1ldGVycztcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGlmICghIXRoaXMuY29udGV4dHNPbkVycm9yLmxlbmd0aCAmJiB0aGlzLmNvbnRleHRzT25FcnJvci5sZW5ndGggPCB0aGlzLmNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgY29uZmlybUJ1dHRvblR4dCA9IGNvcmVSZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX09LXCIpO1xuXHRcdFx0TWVzc2FnZUJveC5zdWNjZXNzKFxuXHRcdFx0XHR0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NIQU5HRVNfV0lUSF9FUlJPUlwiLCBbXG5cdFx0XHRcdFx0dGhpcy5jb250ZXh0cy5sZW5ndGggLSB0aGlzLmNvbnRleHRzT25FcnJvci5sZW5ndGgsXG5cdFx0XHRcdFx0dGhpcy5jb250ZXh0cy5sZW5ndGhcblx0XHRcdFx0XSksXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRhY3Rpb25zOiBbY29uZmlybUJ1dHRvblR4dF0sXG5cdFx0XHRcdFx0ZW1waGFzaXplZEFjdGlvbjogY29uZmlybUJ1dHRvblR4dFxuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJnZXRCb3VuZE1lc3NhZ2VzRm9yTWFzc0VkaXRcIiwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIHRoZSByZWxldmFudCBjb250ZXh0cyBhbmQgcmVmcmVzaGVzIHRoZSBhc3NvY2lhdGVkIHByb3BlcnRpZXMuXG5cdCAqIEBwYXJhbSBmaWVsZFZhbHVlc0luZm8gVGhlIGluZm9ybWF0aW9uIG9mIHRoZSB2YWx1ZXMgZm9yIGFsbCBtYXNzIGVkaXQgZmllbGRzLlxuXHQgKiBAcmV0dXJucyBBIFByb21pc2UuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHNhdmVDaGFuZ2VzKGZpZWxkVmFsdWVzSW5mbzogRmllbGRWYWx1ZXNJbmZvKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgbWFuaWZlc3RTZXR0aW5ncyA9ICh0aGlzLnRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLm1hc3NFZGl0O1xuXHRcdGNvbnN0IGlzSXNvbGF0ZWQgPSBtYW5pZmVzdFNldHRpbmdzLm9wZXJhdGlvbkdyb3VwaW5nTW9kZSA9PT0gT3BlcmF0aW9uR3JvdXBpbmdNb2RlLklzb2xhdGVkO1xuXHRcdGNvbnN0IGlzb2xhdGVkR3JvdXBJZCA9IFwiJGF1dG8uSXNvbGF0ZWRcIjtcblx0XHRjb25zdCBtYXNzRWRpdFNpZGVFZmZlY3RzID0gbmV3IE1hc3NFZGl0U2lkZUVmZmVjdHModGhpcyk7IC8vIFVzZSB0aGUgZmlyc3QgbGluZSBhcyByZWZlcmVuY2UgY29udGV4dCB0byBjYWxjdWxhdGUgdGhlIG1hcCBvZiBzaWRlIGVmZmVjdHNcblx0XHRjb25zdCBmaWVsZFByb21pc2VzOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcblx0XHRjb25zdCBtb2RlbCA9IHRoaXMudGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsO1xuXG5cdFx0aWYgKGlzSXNvbGF0ZWQpIHtcblx0XHRcdG1vZGVsLnNldENvbnRpbnVlT25FcnJvcihpc29sYXRlZEdyb3VwSWQpO1xuXHRcdH1cblx0XHR0aGlzLmNvbnRleHRzLmZvckVhY2goKHNlbGVjdGVkQ29udGV4dDogT0RhdGFWNENvbnRleHQpID0+IHtcblx0XHRcdGNvbnN0IGltbWVkaWF0ZVNpZGVFZmZlY3RzOiB7IHByb3BlcnR5UGF0aDogc3RyaW5nOyBncm91cElkOiBzdHJpbmcgfVtdID0gW107XG5cdFx0XHRjb25zdCByZWZyZXNoRGVzY3JpcHRpb25zOiB7IGNvbnRyb2w6IE1hc3NFZGl0RmllbGQ7IGdyb3VwSWQ6IHN0cmluZyB9W10gPSBbXTtcblx0XHRcdGZvciAoY29uc3QgeyBjb250cm9sLCB2YWx1ZXMgfSBvZiBmaWVsZFZhbHVlc0luZm8uZmllbGRDb250cm9sUmVmZXJlbmNlKSB7XG5cdFx0XHRcdGxldCB2YWx1ZUhhc0NoYW5nZWQgPSBmYWxzZTtcblx0XHRcdFx0aWYgKCFjb250cm9sLmlzUmVhZE9ubHlPbkNvbnRleHQoc2VsZWN0ZWRDb250ZXh0KSkge1xuXHRcdFx0XHRcdGNvbnN0IGdyb3VwSWQgPSBpc0lzb2xhdGVkID8gaXNvbGF0ZWRHcm91cElkIDogXCIkYXV0b1wiO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgcHJvcGVydHlQYXRoIGluIHZhbHVlcykge1xuXHRcdFx0XHRcdFx0aWYgKHNlbGVjdGVkQ29udGV4dC5nZXRQcm9wZXJ0eShwcm9wZXJ0eVBhdGgpICE9PSB2YWx1ZXNbcHJvcGVydHlQYXRoXSkge1xuXHRcdFx0XHRcdFx0XHR2YWx1ZUhhc0NoYW5nZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRmaWVsZFByb21pc2VzLnB1c2goXG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHQuc2V0UHJvcGVydHkocHJvcGVydHlQYXRoLCB2YWx1ZXNbcHJvcGVydHlQYXRoXSwgZ3JvdXBJZClcblx0XHRcdFx0XHRcdFx0XHRcdC50aGVuKCgpID0+IHRoaXMudXBkYXRlZFByb3BlcnRpZXMuYWRkKHByb3BlcnR5UGF0aCkpXG5cdFx0XHRcdFx0XHRcdFx0XHQuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuY29udGV4dHNPbkVycm9yLnB1c2goc2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiTWFzcyBFZGl0OiBTb21ldGhpbmcgd2VudCB3cm9uZyBpbiB1cGRhdGluZyBlbnRyaWVzLlwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0aW1tZWRpYXRlU2lkZUVmZmVjdHMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0XHRcdGdyb3VwSWRcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICh2YWx1ZUhhc0NoYW5nZWQpIHtcblx0XHRcdFx0XHRcdHJlZnJlc2hEZXNjcmlwdGlvbnMucHVzaCh7IGNvbnRyb2wsIGdyb3VwSWQgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmaWVsZFByb21pc2VzLnB1c2goXG5cdFx0XHRcdC4uLmltbWVkaWF0ZVNpZGVFZmZlY3RzLm1hcChhc3luYyAoaW1tZWRpYXRlU2lkZUVmZmVjdCkgPT5cblx0XHRcdFx0XHRtYXNzRWRpdFNpZGVFZmZlY3RzLmV4ZWN1dGVJbW1lZGlhdGVTaWRlRWZmZWN0cyhcblx0XHRcdFx0XHRcdHNlbGVjdGVkQ29udGV4dCxcblx0XHRcdFx0XHRcdGltbWVkaWF0ZVNpZGVFZmZlY3QucHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0aW1tZWRpYXRlU2lkZUVmZmVjdC5ncm91cElkXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdFx0ZmllbGRQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHQuLi5yZWZyZXNoRGVzY3JpcHRpb25zLm1hcChhc3luYyAocmVmcmVzaERlc2NyaXB0aW9uKSA9PlxuXHRcdFx0XHRcdG1hc3NFZGl0U2lkZUVmZmVjdHMucmVmcmVzaERlc2NyaXB0aW9uKHJlZnJlc2hEZXNjcmlwdGlvbi5jb250cm9sLCBzZWxlY3RlZENvbnRleHQsIHJlZnJlc2hEZXNjcmlwdGlvbi5ncm91cElkKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdFx0aWYgKGlzSXNvbGF0ZWQpIHtcblx0XHRcdFx0Ly9DcmVhdGUgYSBuZXcgQ2hhbmdlU2V0IGZvciB0aGUgbmV4dCByZXF1ZXN0c1xuXHRcdFx0XHRtb2RlbC5zdWJtaXRCYXRjaChpc29sYXRlZEdyb3VwSWQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGZpZWxkUHJvbWlzZXMpO1xuXHRcdGlmICh0aGlzLnVwZGF0ZWRQcm9wZXJ0aWVzLnNpemUpIHtcblx0XHRcdG1hc3NFZGl0U2lkZUVmZmVjdHMuZXhlY3V0ZURlZmVycmVkU2lkZUVmZmVjdHMobmV3IFNldChbXCJnZW5lcmljRmllbGRcIiwgLi4uQXJyYXkuZnJvbSh0aGlzLnVwZGF0ZWRQcm9wZXJ0aWVzKV0pKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIHZhbHVlcyBmb3IgYWxsIG1hc3MgZWRpdCBmaWVsZHMuXG5cdCAqIEByZXR1cm5zIFRoZSBpbmZvcm1hdGlvbi5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGRWYWx1ZXNJbmZvcygpOiBGaWVsZFZhbHVlc0luZm8ge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHtcblx0XHRcdHZhbHVlczoge30sXG5cdFx0XHRmaWVsZENvbnRyb2xSZWZlcmVuY2U6IFtdXG5cdFx0fSBhcyBGaWVsZFZhbHVlc0luZm87XG5cdFx0Zm9yIChjb25zdCBmaWVsZENvbnRyb2wgb2YgdGhpcy5maWVsZENvbnRyb2xzKSB7XG5cdFx0XHRjb25zdCBmaWVsZFZhbHVlcyA9IGZpZWxkQ29udHJvbC5nZXRGaWVsZFZhbHVlcygpO1xuXHRcdFx0cmVzdWx0LnZhbHVlcyA9IHsgLi4ucmVzdWx0LnZhbHVlcywgLi4uZmllbGRWYWx1ZXMgfTtcblx0XHRcdHJlc3VsdC5maWVsZENvbnRyb2xSZWZlcmVuY2UucHVzaCh7IGNvbnRyb2w6IGZpZWxkQ29udHJvbCwgdmFsdWVzOiBmaWVsZFZhbHVlcyB9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSB0YWJsZSBmaWVsZHMgYWNjb3JkaW5nIHRvIHRoZSBkaWFsb2cgZW50cmllcy5cblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBjdXN0b20gc2F2ZSBpcyBleGVjdXRlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG5cdCAqL1xuXHRhc3luYyBhcHBseUNoYW5nZXMoKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0YXdhaXQgdGhpcy5yZXF1aXJlZERhdGFQcm9taXNlLnByb21pc2U7IC8vIFdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIHJlcXVpcmVkIGRhdGEgdG8gYmUgbG9hZGVkIGJlZm9yZSBzYXZpbmcuXG5cdFx0Ly9XZSB3YW50IHRvIHNraXAgdGhlIHBhdGNoIGhhbmRsZXIoc3BlY2lmaWMgd29ya2Zsb3cgZG9uZSBpbnRvIHRoZSBFZGl0Rmxvdykgc2luY2UgdGhlIHBhdGNoIGlzIG1hbmFnZWQgaGVyZVxuXHRcdHRoaXMudmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5zZXRQcm9wZXJ0eShcInNraXBQYXRjaEhhbmRsZXJzXCIsIHRydWUpO1xuXG5cdFx0Y29uc3QgZmllbGRzVmFsdWVzSW5mbyA9IHRoaXMuZ2V0RmllbGRWYWx1ZXNJbmZvcygpO1xuXHRcdGxldCBjdXN0b21TYXZlID0gZmFsc2U7XG5cdFx0dHJ5IHtcblx0XHRcdGN1c3RvbVNhdmUgPSBhd2FpdCB0aGlzLnZpZXdcblx0XHRcdFx0LmdldENvbnRyb2xsZXIoKVxuXHRcdFx0XHQuZWRpdEZsb3cuY3VzdG9tTWFzc0VkaXRTYXZlKHsgYUNvbnRleHRzOiB0aGlzLmNvbnRleHRzLCBvVXBkYXRlRGF0YTogZmllbGRzVmFsdWVzSW5mby52YWx1ZXMgfSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIk1hc3MgRWRpdDogU29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gdXBkYXRpbmcgZW50cmllcy5cIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9XG5cdFx0aWYgKCFjdXN0b21TYXZlKSB7XG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVDaGFuZ2VzKGZpZWxkc1ZhbHVlc0luZm8pO1xuXHRcdH1cblx0XHR0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uc2V0UHJvcGVydHkoXCJza2lwUGF0Y2hIYW5kbGVyc1wiLCBmYWxzZSk7XG5cdFx0cmV0dXJuIGN1c3RvbVNhdmU7XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgcHJlc3Mgb24gdGhlIEFwcGx5IEJ1dHRvbi5cblx0ICogQHJldHVybnMgQSBwcm9taXNlLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBvbkFwcGx5KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmZpZWxkQ29udHJvbHMuc29tZSgoZmllbGRDb250cm9sKSA9PiAhZmllbGRDb250cm9sLmlzRmllbGRWYWxpZCgpKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoIXRoaXMuaXNBZGFwdGF0aW9uKSB7XG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRjb25zdCBpc0N1c3RvbVNhdmUgPSBhd2FpdCB0aGlzLmFwcGx5Q2hhbmdlcygpO1xuXHRcdFx0aWYgKCFpc0N1c3RvbVNhdmUpIHtcblx0XHRcdFx0dGhpcy5tYW5hZ2VNZXNzYWdlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMub25DbG9zZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGRpYWxvZyBjb250ZW50LlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJldHVybmluZyBpbnN0YW5jZSBvZiBmcmFnbWVudC5cblx0ICovXG5cblx0cHJpdmF0ZSBhc3luYyBjcmVhdGVDb250ZW50KCk6IFByb21pc2U8Rm9ybT4ge1xuXHRcdGNvbnN0IGN1c3RvbUZvcm1Db250YWluZXIgPSBhd2FpdCB0aGlzLmNyZWF0ZUN1c3RvbUNvbnRhaW5lcigpO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8PlxuXHRcdFx0XHR7dGhpcy5nZXRBZGFwdGF0aW9uTWVzc2FnZSgpfVxuXHRcdFx0XHQ8Rm9ybT5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0bGF5b3V0OiA8UmVzcG9uc2l2ZUdyaWRMYXlvdXQgbGFiZWxTcGFuTT1cIjEyXCIgbGFiZWxTcGFuTD1cIjEyXCIgbGFiZWxTcGFuWEw9XCIxMlwiIC8+LFxuXHRcdFx0XHRcdFx0Zm9ybUNvbnRhaW5lcnM6IChcblx0XHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0XHR7Y3VzdG9tRm9ybUNvbnRhaW5lcn1cblx0XHRcdFx0XHRcdFx0XHQ8Rm9ybUNvbnRhaW5lcj5cblx0XHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm1FbGVtZW50czogdGhpcy5jcmVhdGVGb3JtRWxlbWVudHMoKVxuXHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHQ8L0Zvcm1Db250YWluZXI+XG5cdFx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvRm9ybT5cblx0XHRcdDwvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYWRhcHRhdGlvbiBtZXNzYWdlLlxuXHQgKiBAcmV0dXJucyBUaGUgbWVzc2FnZSBzdHJpcCBpZiB0aGUgZGlhbG9nIGlzIGRpc3BsYXllZCBpbiBhZGFwdGF0aW9uIG1vZGUuXG5cdCAqL1xuXHRwcml2YXRlIGdldEFkYXB0YXRpb25NZXNzYWdlKCk6IE1lc3NhZ2VTdHJpcCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuaXNBZGFwdGF0aW9uKSB7XG5cdFx0XHRyZXR1cm4gPE1lc3NhZ2VTdHJpcCB0ZXh0PXt0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfTUFTU19FRElUX0FEQVBUQVRJT05fTU9ERVwiKX0gLz47XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgY3VzdG9tIGZvcm0gY29udGFpbmVyIGFjY29yZGluZyB0byB0aGUgbWFuaWZlc3Qgc2V0dGluZ3MuXG5cdCAqIEByZXR1cm5zIFRoZSBjdXN0b20gZm9ybSBjb250YWluZXIuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZUN1c3RvbUNvbnRhaW5lcigpOiBQcm9taXNlPEZvcm1Db250YWluZXIgfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBtYW5pZmVzdFNldHRpbmdzID0gKHRoaXMudGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wubWFzc0VkaXQ7XG5cdFx0aWYgKG1hbmlmZXN0U2V0dGluZ3MuY3VzdG9tRnJhZ21lbnQpIHtcblx0XHRcdGlmIChtYW5pZmVzdFNldHRpbmdzLmZyb21JbmxpbmUgPT09IHRydWUpIHtcblx0XHRcdFx0Ly8gSW5saW5lIGNvbmZpZ3VyYXRpb24gZnJvbSBhIFYyIGJsb2NrOiB0aGUgZnJhZ21lbnQgaXMgYSBzdHJpbmdcblx0XHRcdFx0aWYgKHR5cGVvZiBtYW5pZmVzdFNldHRpbmdzLmN1c3RvbUZyYWdtZW50ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0WE1MID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRcdFx0XHRuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKG1hbmlmZXN0U2V0dGluZ3MuY3VzdG9tRnJhZ21lbnQsIFwidGV4dC94bWxcIikuZmlyc3RFbGVtZW50Q2hpbGQsXG5cdFx0XHRcdFx0XHR7IG1vZGVsczoge30gfSxcblx0XHRcdFx0XHRcdCh0aGlzLnZpZXcuZ2V0Q29udHJvbGxlcigpLmdldE93bmVyQ29tcG9uZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8VGVtcGxhdGVDb21wb25lbnQ+KS5nZXRQcmVwcm9jZXNzb3JDb250ZXh0KClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiAoYXdhaXQgRnJhZ21lbnQubG9hZCh7XG5cdFx0XHRcdFx0XHR0eXBlOiBcIlhNTFwiLFxuXHRcdFx0XHRcdFx0ZGVmaW5pdGlvbjogcmVzdWx0WE1MLFxuXHRcdFx0XHRcdFx0Y29udHJvbGxlcjogdGhpcy52aWV3LmdldENvbnRyb2xsZXIoKVxuXHRcdFx0XHRcdH0pKSBhcyB1bmtub3duIGFzIEZvcm1Db250YWluZXI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gSW5saW5lIGNvbmZpZ3VyYXRpb24gZnJvbSBhIFY0IGJsb2NrOiB0aGUgZnJhZ21lbnQgaXMgYWxyZWFkeSBhIEZvcm1Db250YWluZXJcblx0XHRcdFx0XHRyZXR1cm4gbWFuaWZlc3RTZXR0aW5ncy5jdXN0b21GcmFnbWVudC5jbG9uZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gKGF3YWl0IHRoaXMudmlld1xuXHRcdFx0XHQuZ2V0Q29udHJvbGxlcigpXG5cdFx0XHRcdC5nZXRFeHRlbnNpb25BUEkoKVxuXHRcdFx0XHQubG9hZEZyYWdtZW50KHtcblx0XHRcdFx0XHRpZDogXCJjdXN0b21NYXNzRWRpdFwiLFxuXHRcdFx0XHRcdG5hbWU6IG1hbmlmZXN0U2V0dGluZ3MuY3VzdG9tRnJhZ21lbnQgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdGNvbnRleHRQYXRoOiB0aGlzLnRyYW5zaWVudExpc3RCaW5kaW5nXG5cdFx0XHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdFx0LmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdFx0XHQuZ2V0TWV0YVBhdGgodGhpcy50cmFuc2llbnRMaXN0QmluZGluZy5nZXRSZXNvbHZlZFBhdGgoKSlcblx0XHRcdFx0fSkpIGFzIEZvcm1Db250YWluZXI7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgZm9ybSBlbGVtZW50cyBvZiB0aGUgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybSBlbGVtZW50cy5cblx0ICovXG5cdHByaXZhdGUgY3JlYXRlRm9ybUVsZW1lbnRzKCk6IEZvcm1FbGVtZW50W10ge1xuXHRcdHJldHVybiB0aGlzLmZpZWxkUHJvcGVydGllcy5tYXAodGhpcy5jcmVhdGVGb3JtRWxlbWVudC5iaW5kKHRoaXMpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBmb3JtIGVsZW1lbnRzIG9mIGEgRmllbGQuXG5cdCAqIEBwYXJhbSBmaWVsZEluZm8gVGhlIGZpZWxkIHByb3BlcnRpZXNcblx0ICogQHJldHVybnMgVGhlIGZvcm0gZWxlbWVudC5cblx0ICovXG5cdHByaXZhdGUgY3JlYXRlRm9ybUVsZW1lbnQoZmllbGRJbmZvOiBNYXNzRmllbGRQcm9wZXJ0aWVzKTogRm9ybUVsZW1lbnQge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8Rm9ybUVsZW1lbnQgdmlzaWJsZT17ZmllbGRJbmZvLnZpc2libGV9PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxhYmVsOiA8TGFiZWwgdGV4dD17ZmllbGRJbmZvLmxhYmVsfSBpZD17SUQuZ2VuZXJhdGUoW1wiTUVEX1wiLCBmaWVsZEluZm8ucHJvcGVydHlJbmZvLmtleSwgXCJMYWJlbFwiXSl9IC8+LFxuXHRcdFx0XHRcdGZpZWxkczogdGhpcy5jcmVhdGVGaWVsZHMoZmllbGRJbmZvKVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9Gb3JtRWxlbWVudD5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGZpZWxkcyBvZiB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gZmllbGRJbmZvIFRoZSBmaWVsZCBwcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIFRoZSBmaWVsZHMuXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZUZpZWxkcyhmaWVsZEluZm86IE1hc3NGaWVsZFByb3BlcnRpZXMpOiBDb250cm9sW10ge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9ICh0aGlzLnRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgY29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtZXRhTW9kZWwuZ2V0TWV0YVBhdGgodGhpcy5iaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpKSBhcyBDb250ZXh0O1xuXHRcdGNvbnN0IG1hc3NFZGl0RmllbGQgPSBuZXcgTWFzc0VkaXRGaWVsZChmaWVsZEluZm8sIGNvbnRleHQpO1xuXHRcdHRoaXMuZmllbGRDb250cm9scy5wdXNoKG1hc3NFZGl0RmllbGQpO1xuXHRcdHJldHVybiBtYXNzRWRpdEZpZWxkLmdldENvbnRyb2xzKCk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O01BMkRxQkEsY0FBYztJQTJCbEM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQyxTQUFBQSxlQUFZQyxLQUEyRixFQUFFO01BQUEsS0FqQ3hGQyxtQkFBbUIsR0FBRyxJQUFJQyxhQUFhLENBQU8sQ0FBQztNQUFBLEtBYy9DQyxpQkFBaUIsR0FBZ0IsSUFBSUMsR0FBRyxDQUFDLENBQUM7TUFvQjFELElBQUksQ0FBQ0MsTUFBTSxHQUFHQyxTQUFTO01BQ3ZCLElBQUksQ0FBQ0MsS0FBSyxHQUFHUCxLQUFLLENBQUNPLEtBQUs7TUFDeEIsSUFBSSxDQUFDQyxRQUFRLEdBQUdSLEtBQUssQ0FBQ1EsUUFBUTtNQUM5QixJQUFJ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
|