@sapui5/sap.fe.core 1.103.0 → 1.104.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +12 -5
- package/src/sap/fe/core/AppComponent.ts +9 -3
- package/src/sap/fe/core/AppStateHandler.js +74 -62
- package/src/sap/fe/core/AppStateHandler.ts +24 -29
- package/src/sap/fe/core/CommonUtils.js +10 -34
- package/src/sap/fe/core/CommonUtils.ts +10 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +181 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +582 -207
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +237 -88
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +4 -4
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +4 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +257 -219
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +103 -108
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +80 -54
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +40 -44
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +28 -26
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +35 -30
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +89 -47
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +85 -48
- package/src/sap/fe/core/controllerextensions/MassEdit.js +2 -2
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +2 -2
- package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -1
- package/src/sap/fe/core/controllerextensions/Share.js +153 -122
- package/src/sap/fe/core/controllerextensions/Share.ts +93 -95
- package/src/sap/fe/core/controllerextensions/ViewState.js +139 -73
- package/src/sap/fe/core/controllerextensions/ViewState.ts +78 -90
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +6 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +5 -3
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +18 -13
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +17 -15
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +88 -17
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +105 -31
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +5 -4
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +28 -32
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +10 -17
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -6
- package/src/sap/fe/core/controls/FileWrapper.js +6 -1
- package/src/sap/fe/core/controls/FileWrapper.ts +4 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -3
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +2 -2
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +2 -2
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +1 -1
- package/src/sap/fe/core/converters/ConverterContext.js +1 -1
- package/src/sap/fe/core/converters/ConverterContext.ts +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +3 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js +15 -4
- package/src/sap/fe/core/converters/MetaModelConverter.ts +10 -3
- package/src/sap/fe/core/converters/annotations/DataField.js +5 -2
- package/src/sap/fe/core/converters/annotations/DataField.ts +5 -1
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +4 -8
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +4 -2
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +25 -30
- package/src/sap/fe/core/converters/controls/Common/Form.js +3 -2
- package/src/sap/fe/core/converters/controls/Common/Form.ts +9 -14
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +16 -15
- package/src/sap/fe/core/converters/controls/Common/Table.js +8 -15
- package/src/sap/fe/core/converters/controls/Common/Table.ts +14 -30
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +3 -4
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +5 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +4 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +3 -3
- package/src/sap/fe/core/converters/helpers/ID.js +3 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +27 -15
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +42 -27
- package/src/sap/fe/core/formatters/StandardFormatter.js +13 -6
- package/src/sap/fe/core/formatters/StandardFormatter.ts +20 -14
- package/src/sap/fe/core/helpers/BindingToolkit.js +36 -13
- package/src/sap/fe/core/helpers/BindingToolkit.ts +37 -11
- package/src/sap/fe/core/helpers/ClassSupport.js +30 -2
- package/src/sap/fe/core/helpers/ClassSupport.ts +23 -0
- package/src/sap/fe/core/helpers/MassEditHelper.js +94 -89
- package/src/sap/fe/core/helpers/MassEditHelper.ts +128 -157
- package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
- package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
- package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
- package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
- package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
- package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +4 -37
- package/src/sap/fe/core/messagebundle_ar.properties +20 -40
- package/src/sap/fe/core/messagebundle_bg.properties +20 -40
- package/src/sap/fe/core/messagebundle_ca.properties +20 -40
- package/src/sap/fe/core/messagebundle_cs.properties +20 -40
- package/src/sap/fe/core/messagebundle_cy.properties +20 -40
- package/src/sap/fe/core/messagebundle_da.properties +20 -40
- package/src/sap/fe/core/messagebundle_de.properties +20 -40
- package/src/sap/fe/core/messagebundle_el.properties +20 -40
- package/src/sap/fe/core/messagebundle_en.properties +19 -39
- package/src/sap/fe/core/messagebundle_en_GB.properties +19 -39
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +21 -39
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +19 -39
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +22 -18
- package/src/sap/fe/core/messagebundle_es.properties +22 -42
- package/src/sap/fe/core/messagebundle_es_MX.properties +20 -40
- package/src/sap/fe/core/messagebundle_et.properties +20 -40
- package/src/sap/fe/core/messagebundle_fi.properties +20 -40
- package/src/sap/fe/core/messagebundle_fr.properties +21 -41
- package/src/sap/fe/core/messagebundle_fr_CA.properties +20 -40
- package/src/sap/fe/core/messagebundle_hi.properties +20 -40
- package/src/sap/fe/core/messagebundle_hr.properties +20 -40
- package/src/sap/fe/core/messagebundle_hu.properties +20 -40
- package/src/sap/fe/core/messagebundle_id.properties +20 -40
- package/src/sap/fe/core/messagebundle_it.properties +20 -40
- package/src/sap/fe/core/messagebundle_iw.properties +20 -40
- package/src/sap/fe/core/messagebundle_ja.properties +20 -40
- package/src/sap/fe/core/messagebundle_kk.properties +20 -40
- package/src/sap/fe/core/messagebundle_ko.properties +25 -45
- package/src/sap/fe/core/messagebundle_lt.properties +20 -40
- package/src/sap/fe/core/messagebundle_lv.properties +20 -40
- package/src/sap/fe/core/messagebundle_ms.properties +20 -40
- package/src/sap/fe/core/messagebundle_nl.properties +22 -42
- package/src/sap/fe/core/messagebundle_no.properties +20 -40
- package/src/sap/fe/core/messagebundle_pl.properties +21 -41
- package/src/sap/fe/core/messagebundle_pt.properties +21 -41
- package/src/sap/fe/core/messagebundle_pt_PT.properties +20 -40
- package/src/sap/fe/core/messagebundle_ro.properties +20 -40
- package/src/sap/fe/core/messagebundle_ru.properties +20 -40
- package/src/sap/fe/core/messagebundle_sh.properties +20 -40
- package/src/sap/fe/core/messagebundle_sk.properties +20 -40
- package/src/sap/fe/core/messagebundle_sl.properties +20 -40
- package/src/sap/fe/core/messagebundle_sv.properties +20 -40
- package/src/sap/fe/core/messagebundle_th.properties +20 -40
- package/src/sap/fe/core/messagebundle_tr.properties +20 -40
- package/src/sap/fe/core/messagebundle_uk.properties +20 -40
- package/src/sap/fe/core/messagebundle_vi.properties +20 -40
- package/src/sap/fe/core/messagebundle_zh_CN.properties +20 -40
- package/src/sap/fe/core/messagebundle_zh_TW.properties +20 -40
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +96 -68
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +58 -59
- package/src/sap/fe/core/services/NavigationServiceFactory.js +10 -7
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -7
- package/src/sap/fe/core/services/ShellServicesFactory.js +21 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +19 -0
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +211 -190
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +114 -120
- package/src/sap/fe/core/templating/FilterHelper.js +7 -7
- package/src/sap/fe/core/templating/FilterHelper.ts +5 -5
- package/src/sap/fe/core/templating/UIFormatters.js +5 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +7 -5
|
@@ -7,6 +7,20 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/Templ
|
|
|
7
7
|
|
|
8
8
|
var resolveDynamicExpression = DynamicAnnotationPathHelper.resolveDynamicExpression;
|
|
9
9
|
|
|
10
|
+
function _catch(body, recover) {
|
|
11
|
+
try {
|
|
12
|
+
var result = body();
|
|
13
|
+
} catch (e) {
|
|
14
|
+
return recover(e);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
if (result && result.then) {
|
|
18
|
+
return result.then(void 0, recover);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
|
|
10
24
|
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
|
|
11
25
|
|
|
12
26
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
@@ -157,216 +171,223 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/Templ
|
|
|
157
171
|
};
|
|
158
172
|
|
|
159
173
|
_proto.createView = function createView(oResourceModel, sStableId, sCacheKey, sPageModelCacheKey, oPageModelCache, TemplateConverter, MetaModelConverter) {
|
|
160
|
-
|
|
174
|
+
try {
|
|
175
|
+
var _this3 = this;
|
|
176
|
+
|
|
177
|
+
_this3.resourceModel = oResourceModel;
|
|
178
|
+
_this3.stableId = sStableId;
|
|
179
|
+
_this3.TemplateConverter = TemplateConverter;
|
|
180
|
+
_this3.MetaModelConverter = MetaModelConverter;
|
|
181
|
+
|
|
182
|
+
var oContext = _this3.getContext();
|
|
183
|
+
|
|
184
|
+
var mServiceSettings = oContext.settings;
|
|
185
|
+
var sConverterType = mServiceSettings.converterType;
|
|
186
|
+
var oComponent = oContext.scopeObject;
|
|
187
|
+
var oAppComponent = Component.getOwnerComponentFor(oComponent);
|
|
188
|
+
var sFullContextPath = oAppComponent.getRoutingService().getTargetInformationFor(oComponent).options.settings.fullContextPath;
|
|
189
|
+
var oMetaModel = oAppComponent.getMetaModel();
|
|
190
|
+
var oManifestContent = oAppComponent.getManifest();
|
|
191
|
+
var oDeviceModel = new JSONModel(Device).setDefaultBindingMode("OneWay");
|
|
192
|
+
var oManifestModel = new JSONModel(oManifestContent);
|
|
193
|
+
var bError = false;
|
|
194
|
+
|
|
195
|
+
function getViewSettings() {
|
|
196
|
+
var aSplitPath = sFullContextPath.split("/");
|
|
197
|
+
var sEntitySetPath = aSplitPath.reduce(function (sPathSoFar, sNextPathPart) {
|
|
198
|
+
if (sNextPathPart === "") {
|
|
199
|
+
return sPathSoFar;
|
|
200
|
+
}
|
|
161
201
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
var oContext = this.getContext();
|
|
167
|
-
var mServiceSettings = oContext.settings;
|
|
168
|
-
var sConverterType = mServiceSettings.converterType;
|
|
169
|
-
var oComponent = oContext.scopeObject;
|
|
170
|
-
var oAppComponent = Component.getOwnerComponentFor(oComponent);
|
|
171
|
-
var sFullContextPath = oAppComponent.getRoutingService().getTargetInformationFor(oComponent).options.settings.fullContextPath;
|
|
172
|
-
var oMetaModel = oAppComponent.getMetaModel();
|
|
173
|
-
var oManifestContent = oAppComponent.getManifest();
|
|
174
|
-
var oDeviceModel = new JSONModel(Device).setDefaultBindingMode("OneWay");
|
|
175
|
-
var oManifestModel = new JSONModel(oManifestContent);
|
|
176
|
-
var bError = false;
|
|
177
|
-
var oPageModel, oViewDataModel, oViewSettings, mViewData;
|
|
178
|
-
|
|
179
|
-
function getViewSettings() {
|
|
180
|
-
var aSplitPath = sFullContextPath.split("/");
|
|
181
|
-
var sEntitySetPath = aSplitPath.reduce(function (sPathSoFar, sNextPathPart) {
|
|
182
|
-
if (sNextPathPart === "") {
|
|
183
|
-
return sPathSoFar;
|
|
184
|
-
}
|
|
202
|
+
if (sPathSoFar === "") {
|
|
203
|
+
sPathSoFar = "/".concat(sNextPathPart);
|
|
204
|
+
} else {
|
|
205
|
+
var oTarget = oMetaModel.getObject("".concat(sPathSoFar, "/$NavigationPropertyBinding/").concat(sNextPathPart));
|
|
185
206
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
var oTarget = oMetaModel.getObject("".concat(sPathSoFar, "/$NavigationPropertyBinding/").concat(sNextPathPart));
|
|
207
|
+
if (oTarget && Object.keys(oTarget).length > 0) {
|
|
208
|
+
sPathSoFar += "/$NavigationPropertyBinding";
|
|
209
|
+
}
|
|
190
210
|
|
|
191
|
-
|
|
192
|
-
sPathSoFar += "/$NavigationPropertyBinding";
|
|
211
|
+
sPathSoFar += "/".concat(sNextPathPart);
|
|
193
212
|
}
|
|
194
213
|
|
|
195
|
-
sPathSoFar
|
|
196
|
-
}
|
|
214
|
+
return sPathSoFar;
|
|
215
|
+
}, "");
|
|
216
|
+
return {
|
|
217
|
+
type: "XML",
|
|
218
|
+
preprocessors: {
|
|
219
|
+
xml: {
|
|
220
|
+
bindingContexts: {
|
|
221
|
+
entitySet: sEntitySetPath ? oMetaModel.createBindingContext(sEntitySetPath) : null,
|
|
222
|
+
fullContextPath: sFullContextPath ? oMetaModel.createBindingContext(sFullContextPath) : null,
|
|
223
|
+
contextPath: sFullContextPath ? oMetaModel.createBindingContext(sFullContextPath) : null,
|
|
224
|
+
converterContext: oPageModel.createBindingContext("/", undefined, {
|
|
225
|
+
noResolve: true
|
|
226
|
+
}),
|
|
227
|
+
viewData: mViewData ? oViewDataModel.createBindingContext("/") : null
|
|
228
|
+
},
|
|
229
|
+
models: {
|
|
230
|
+
entitySet: oMetaModel,
|
|
231
|
+
fullContextPath: oMetaModel,
|
|
232
|
+
contextPath: oMetaModel,
|
|
233
|
+
"sap.fe.i18n": oResourceModel,
|
|
234
|
+
metaModel: oMetaModel,
|
|
235
|
+
"device": oDeviceModel,
|
|
236
|
+
manifest: oManifestModel,
|
|
237
|
+
converterContext: oPageModel,
|
|
238
|
+
viewData: oViewDataModel
|
|
239
|
+
},
|
|
240
|
+
appComponent: oAppComponent
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
id: sStableId,
|
|
244
|
+
viewName: mServiceSettings.viewName || oComponent.getViewName(),
|
|
245
|
+
viewData: mViewData,
|
|
246
|
+
cache: {
|
|
247
|
+
keys: [sCacheKey]
|
|
248
|
+
},
|
|
249
|
+
models: {
|
|
250
|
+
"sap.fe.i18n": oResourceModel
|
|
251
|
+
},
|
|
252
|
+
height: "100%"
|
|
253
|
+
};
|
|
254
|
+
}
|
|
197
255
|
|
|
198
|
-
|
|
199
|
-
}, "");
|
|
200
|
-
return {
|
|
201
|
-
type: "XML",
|
|
202
|
-
preprocessors: {
|
|
203
|
-
xml: {
|
|
204
|
-
bindingContexts: {
|
|
205
|
-
entitySet: sEntitySetPath ? oMetaModel.createBindingContext(sEntitySetPath) : null,
|
|
206
|
-
fullContextPath: sFullContextPath ? oMetaModel.createBindingContext(sFullContextPath) : null,
|
|
207
|
-
contextPath: sFullContextPath ? oMetaModel.createBindingContext(sFullContextPath) : null,
|
|
208
|
-
converterContext: oPageModel.createBindingContext("/", undefined, {
|
|
209
|
-
noResolve: true
|
|
210
|
-
}),
|
|
211
|
-
viewData: mViewData ? oViewDataModel.createBindingContext("/") : null
|
|
212
|
-
},
|
|
213
|
-
models: {
|
|
214
|
-
entitySet: oMetaModel,
|
|
215
|
-
fullContextPath: oMetaModel,
|
|
216
|
-
contextPath: oMetaModel,
|
|
217
|
-
"sap.fe.i18n": oResourceModel,
|
|
218
|
-
metaModel: oMetaModel,
|
|
219
|
-
"device": oDeviceModel,
|
|
220
|
-
manifest: oManifestModel,
|
|
221
|
-
converterContext: oPageModel,
|
|
222
|
-
viewData: oViewDataModel
|
|
223
|
-
},
|
|
224
|
-
appComponent: oAppComponent
|
|
225
|
-
}
|
|
226
|
-
},
|
|
227
|
-
id: sStableId,
|
|
228
|
-
viewName: mServiceSettings.viewName || oComponent.getViewName(),
|
|
229
|
-
viewData: mViewData,
|
|
230
|
-
cache: {
|
|
231
|
-
keys: [sCacheKey]
|
|
232
|
-
},
|
|
233
|
-
models: {
|
|
234
|
-
"sap.fe.i18n": oResourceModel
|
|
235
|
-
},
|
|
236
|
-
height: "100%"
|
|
237
|
-
};
|
|
238
|
-
}
|
|
256
|
+
var oPageModel, oViewDataModel, oViewSettings, mViewData;
|
|
239
257
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
258
|
+
var createErrorPage = function (reason) {
|
|
259
|
+
// just replace the view name and add an additional model containing the reason, but
|
|
260
|
+
// keep the other settings
|
|
261
|
+
Log.error(reason.message, reason);
|
|
262
|
+
oViewSettings.viewName = mServiceSettings.errorViewName || "sap.fe.core.services.view.TemplatingErrorPage";
|
|
263
|
+
oViewSettings.preprocessors.xml.models["error"] = new JSONModel(reason);
|
|
264
|
+
return oComponent.runAsOwner(function () {
|
|
265
|
+
return View.create(oViewSettings).then(function (oView) {
|
|
266
|
+
_this3.oView = oView;
|
|
249
267
|
|
|
250
|
-
|
|
268
|
+
_this3.oView.setModel(new ManagedObjectModel(_this3.oView), "$view");
|
|
251
269
|
|
|
252
|
-
|
|
253
|
-
|
|
270
|
+
oComponent.setAggregation("rootControl", _this3.oView);
|
|
271
|
+
return sCacheKey;
|
|
272
|
+
});
|
|
254
273
|
});
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
return Promise.resolve(_catch(function () {
|
|
277
|
+
return Promise.resolve(oAppComponent.getService("routingService")).then(function (oRoutingService) {
|
|
278
|
+
// Retrieve the viewLevel for the component
|
|
279
|
+
var oTargetInfo = oRoutingService.getTargetInformationFor(oComponent);
|
|
280
|
+
var mOutbounds = oManifestContent["sap.app"] && oManifestContent["sap.app"].crossNavigation && oManifestContent["sap.app"].crossNavigation.outbounds;
|
|
281
|
+
var mNavigation = oComponent.getNavigation() || {};
|
|
282
|
+
Object.keys(mNavigation).forEach(function (navigationObjectKey) {
|
|
283
|
+
var navigationObject = mNavigation[navigationObjectKey];
|
|
284
|
+
var outboundConfig;
|
|
285
|
+
|
|
286
|
+
if (navigationObject.detail && navigationObject.detail.outbound && mOutbounds[navigationObject.detail.outbound]) {
|
|
287
|
+
outboundConfig = mOutbounds[navigationObject.detail.outbound];
|
|
288
|
+
navigationObject.detail.outboundDetail = {
|
|
289
|
+
semanticObject: outboundConfig.semanticObject,
|
|
290
|
+
action: outboundConfig.action,
|
|
291
|
+
parameters: outboundConfig.parameters
|
|
292
|
+
};
|
|
293
|
+
}
|
|
275
294
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
295
|
+
if (navigationObject.create && navigationObject.create.outbound && mOutbounds[navigationObject.create.outbound]) {
|
|
296
|
+
outboundConfig = mOutbounds[navigationObject.create.outbound];
|
|
297
|
+
navigationObject.create.outboundDetail = {
|
|
298
|
+
semanticObject: outboundConfig.semanticObject,
|
|
299
|
+
action: outboundConfig.action,
|
|
300
|
+
parameters: outboundConfig.parameters
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
mViewData = {
|
|
305
|
+
navigation: mNavigation,
|
|
306
|
+
viewLevel: oTargetInfo.viewLevel,
|
|
307
|
+
stableId: sStableId,
|
|
308
|
+
contentDensities: oManifestContent["sap.ui5"].contentDensities,
|
|
309
|
+
resourceBundle: oResourceModel.__bundle,
|
|
310
|
+
fullContextPath: sFullContextPath,
|
|
311
|
+
isDesktop: Device.system.desktop,
|
|
312
|
+
isPhone: Device.system.phone
|
|
282
313
|
};
|
|
283
|
-
}
|
|
284
|
-
});
|
|
285
|
-
mViewData = {
|
|
286
|
-
navigation: mNavigation,
|
|
287
|
-
viewLevel: oTargetInfo.viewLevel,
|
|
288
|
-
stableId: sStableId,
|
|
289
|
-
contentDensities: oManifestContent["sap.ui5"].contentDensities,
|
|
290
|
-
resourceBundle: oResourceModel.__bundle,
|
|
291
|
-
fullContextPath: sFullContextPath,
|
|
292
|
-
isDesktop: Device.system.desktop,
|
|
293
|
-
isPhone: Device.system.phone
|
|
294
|
-
};
|
|
295
314
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
315
|
+
if (oComponent.getViewData) {
|
|
316
|
+
Object.assign(mViewData, oComponent.getViewData());
|
|
317
|
+
}
|
|
299
318
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
319
|
+
var oShellServices = oAppComponent.getShellServices();
|
|
320
|
+
mViewData.converterType = sConverterType;
|
|
321
|
+
mViewData.shellContentDensity = oShellServices.getContentDensity();
|
|
322
|
+
mViewData.useNewLazyLoading = UriParameters.fromQuery(window.location.search).get("sap-fe-xx-lazyloadingtest") === "true";
|
|
323
|
+
mViewData.retrieveTextFromValueList = oManifestContent["sap.fe"] && oManifestContent["sap.fe"].form ? oManifestContent["sap.fe"].form.retrieveTextFromValueList : undefined;
|
|
324
|
+
oViewDataModel = new JSONModel(mViewData);
|
|
325
|
+
|
|
326
|
+
if (mViewData && mViewData.controlConfiguration) {
|
|
327
|
+
Object.keys(mViewData.controlConfiguration).forEach(function (sAnnotationPath) {
|
|
328
|
+
if (sAnnotationPath.indexOf("[") !== -1) {
|
|
329
|
+
var sTargetAnnotationPath = resolveDynamicExpression(sAnnotationPath, oMetaModel);
|
|
330
|
+
mViewData.controlConfiguration[sTargetAnnotationPath] = mViewData.controlConfiguration[sAnnotationPath];
|
|
331
|
+
}
|
|
332
|
+
});
|
|
314
333
|
}
|
|
315
|
-
});
|
|
316
|
-
}
|
|
317
334
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
335
|
+
MetaModelConverter.convertTypes(oMetaModel, oAppComponent.getEnvironmentCapabilities().getCapabilities());
|
|
336
|
+
oPageModel = new TemplateModel(function () {
|
|
337
|
+
try {
|
|
338
|
+
if (oPageModelCache) {
|
|
339
|
+
return oPageModelCache;
|
|
340
|
+
} else {
|
|
341
|
+
var oDiagnostics = oAppComponent.getDiagnostics();
|
|
342
|
+
var iIssueCount = oDiagnostics.getIssues().length;
|
|
343
|
+
var oConverterPageModel = TemplateConverter.convertPage(sConverterType, oMetaModel, mViewData, oDiagnostics, sFullContextPath, oAppComponent.getEnvironmentCapabilities().getCapabilities());
|
|
344
|
+
var aIssues = oDiagnostics.getIssues();
|
|
345
|
+
var aAddedIssues = aIssues.slice(iIssueCount);
|
|
346
|
+
|
|
347
|
+
if (aAddedIssues.length > 0) {
|
|
348
|
+
Log.warning("Some issues have been detected in your project, please check the UI5 support assistant rule for sap.fe.core");
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
return oConverterPageModel;
|
|
352
|
+
}
|
|
353
|
+
} catch (error) {
|
|
354
|
+
Log.error(error, error);
|
|
355
|
+
return {};
|
|
332
356
|
}
|
|
357
|
+
}, oMetaModel);
|
|
333
358
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
} catch (error) {
|
|
337
|
-
Log.error(error, error);
|
|
338
|
-
return {};
|
|
339
|
-
}
|
|
340
|
-
}, oMetaModel);
|
|
359
|
+
if (!bError) {
|
|
360
|
+
oViewSettings = getViewSettings(); // Setting the pageModel on the component for potential reuse
|
|
341
361
|
|
|
342
|
-
|
|
343
|
-
|
|
362
|
+
oComponent.setModel(oPageModel, "_pageModel");
|
|
363
|
+
return oComponent.runAsOwner(function () {
|
|
364
|
+
return View.create(oViewSettings).catch(createErrorPage).then(function (oView) {
|
|
365
|
+
_this3.oView = oView;
|
|
344
366
|
|
|
345
|
-
|
|
346
|
-
return oComponent.runAsOwner(function () {
|
|
347
|
-
return View.create(oViewSettings).catch(createErrorPage).then(function (oView) {
|
|
348
|
-
_this2.oView = oView;
|
|
349
|
-
|
|
350
|
-
_this2.oView.setModel(new ManagedObjectModel(_this2.oView), "$view");
|
|
367
|
+
_this3.oView.setModel(new ManagedObjectModel(_this3.oView), "$view");
|
|
351
368
|
|
|
352
|
-
|
|
369
|
+
_this3.oView.setModel(oViewDataModel, "viewData");
|
|
353
370
|
|
|
354
|
-
|
|
371
|
+
oComponent.setAggregation("rootControl", _this3.oView); // Fire and forget in the cache
|
|
355
372
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
373
|
+
if (!oPageModelCache) {
|
|
374
|
+
_this3._setCachedModel(sPageModelCacheKey, oPageModel.getData());
|
|
375
|
+
}
|
|
359
376
|
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
377
|
+
return sCacheKey;
|
|
378
|
+
}).catch(function (e) {
|
|
379
|
+
return Log.error(e.message, e);
|
|
380
|
+
});
|
|
381
|
+
});
|
|
382
|
+
}
|
|
364
383
|
});
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
})
|
|
384
|
+
}, function (error) {
|
|
385
|
+
Log.error(error.message, error);
|
|
386
|
+
throw new Error("Error while creating view : ".concat(error));
|
|
387
|
+
}));
|
|
388
|
+
} catch (e) {
|
|
389
|
+
return Promise.reject(e);
|
|
390
|
+
}
|
|
370
391
|
};
|
|
371
392
|
|
|
372
393
|
_proto.getView = function getView() {
|
|
@@ -397,15 +418,15 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/Templ
|
|
|
397
418
|
_inheritsLoose(TemplatedViewServiceFactory, _ServiceFactory);
|
|
398
419
|
|
|
399
420
|
function TemplatedViewServiceFactory() {
|
|
400
|
-
var
|
|
421
|
+
var _this4;
|
|
401
422
|
|
|
402
423
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
403
424
|
args[_key] = arguments[_key];
|
|
404
425
|
}
|
|
405
426
|
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
return
|
|
427
|
+
_this4 = _ServiceFactory.call.apply(_ServiceFactory, [this].concat(args)) || this;
|
|
428
|
+
_this4._oInstanceRegistry = {};
|
|
429
|
+
return _this4;
|
|
409
430
|
}
|
|
410
431
|
|
|
411
432
|
var _proto2 = TemplatedViewServiceFactory.prototype;
|
|
@@ -434,4 +455,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/Templ
|
|
|
434
455
|
|
|
435
456
|
return TemplatedViewServiceFactory;
|
|
436
457
|
}, false);
|
|
437
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeS50cyJdLCJuYW1lcyI6WyJUZW1wbGF0ZWRWaWV3U2VydmljZSIsImluaXQiLCJhU2VydmljZURlcGVuZGVuY2llcyIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsIm9Db21wb25lbnQiLCJzY29wZU9iamVjdCIsIm9BcHBDb21wb25lbnQiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJzU3RhYmxlSWQiLCJnZXRNZXRhZGF0YSIsImdldENvbXBvbmVudE5hbWUiLCJnZXRMb2NhbElkIiwiZ2V0SWQiLCJhRW5oYW5jZUkxOG4iLCJnZXRFbmhhbmNlSTE4biIsInNBcHBOYW1lc3BhY2UiLCJvRmFjdG9yeSIsImZhY3RvcnkiLCJpIiwibGVuZ3RoIiwib1Jlc291cmNlTW9kZWwiLCJnZXRNb2RlbCIsImlzQSIsInJlcGxhY2UiLCJzQ2FjaGVJZGVudGlmaWVyIiwiZ2V0TmFtZSIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldENvbmZpZ3VyYXRpb24iLCJnZXRMYW5ndWFnZVRhZyIsInB1c2giLCJTZXJ2aWNlRmFjdG9yeVJlZ2lzdHJ5IiwiZ2V0IiwiY3JlYXRlSW5zdGFuY2UiLCJzY29wZVR5cGUiLCJzZXR0aW5ncyIsImJ1bmRsZXMiLCJlbmhhbmNlSTE4biIsIm1vZGVsTmFtZSIsInRoZW4iLCJvUmVzb3VyY2VNb2RlbFNlcnZpY2UiLCJnZXRSZXNvdXJjZU1vZGVsIiwibWV0YU1vZGVsIiwiYXBwQ29tcG9uZW50IiwiY29tcG9uZW50Iiwib0NhY2hlSGFuZGxlclNlcnZpY2UiLCJ2YWxpZGF0ZUNhY2hlS2V5IiwiVmVyc2lvbkluZm8iLCJsb2FkIiwib0luZm8iLCJzVGltZXN0YW1wIiwibGlicmFyaWVzIiwiYnVpbGRpbmZvIiwiYnVpbGR0aW1lIiwiZm9yRWFjaCIsIm9MaWJyYXJ5IiwiYnVpbGRUaW1lc3RhbXAiLCJjYXRjaCIsInNQYWdlTW9kZWxDYWNoZUtleSIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsImFsbCIsImFEZXBlbmRlbmNpZXNSZXN1bHQiLCJzQ2FjaGVLZXkiLCJzVmVyc2lvbkluZm8iLCJvU2hlbGxTZXJ2aWNlcyIsImdldFNoZWxsU2VydmljZXMiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlcyIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImluaXRpYWxpemVTaWRlRWZmZWN0cyIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiaW5zdGFuY2VUeXBlIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiX2dldENhY2hlZE1vZGVsIiwib1BhZ2VNb2RlbENhY2hlIiwicmVzb2x2ZSIsInJlcXVpcmUiLCJUZW1wbGF0ZUNvbnZlcnRlciIsIk1ldGFNb2RlbENvbnZlcnRlciIsImNyZWF0ZVZpZXciLCJnZXRJbnN0YW5jZSIsImludmFsaWRhdGVJZk5lZWRlZCIsIkNvcmUiLCJnZXRWaWV3Q2FjaGUiLCJDYWNoZU1hbmFnZXIiLCJfc2V0Q2FjaGVkTW9kZWwiLCJvQ2FjaGVNb2RlbCIsInNldCIsInJlZnJlc2hWaWV3Iiwib1Jvb3RWaWV3IiwiZ2V0Um9vdENvbnRyb2wiLCJkZXN0cm95Iiwib1ZpZXciLCJyZXNvdXJjZU1vZGVsIiwic3RhYmxlSWQiLCJvQ29udGFpbmVyIiwiaW52YWxpZGF0ZSIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwibVNlcnZpY2VTZXR0aW5ncyIsInNDb252ZXJ0ZXJUeXBlIiwiY29udmVydGVyVHlwZSIsInNGdWxsQ29udGV4dFBhdGgiLCJnZXRSb3V0aW5nU2VydmljZSIsImdldFRhcmdldEluZm9ybWF0aW9uRm9yIiwib3B0aW9ucyIsImZ1bGxDb250ZXh0UGF0aCIsIm9NYW5pZmVzdENvbnRlbnQiLCJnZXRNYW5pZmVzdCIsIm9EZXZpY2VNb2RlbCIsIkpTT05Nb2RlbCIsIkRldmljZSIsInNldERlZmF1bHRCaW5kaW5nTW9kZSIsIm9NYW5pZmVzdE1vZGVsIiwiYkVycm9yIiwib1BhZ2VNb2RlbCIsIm9WaWV3RGF0YU1vZGVsIiwib1ZpZXdTZXR0aW5ncyIsIm1WaWV3RGF0YSIsImdldFZpZXdTZXR0aW5ncyIsImFTcGxpdFBhdGgiLCJzcGxpdCIsInNFbnRpdHlTZXRQYXRoIiwicmVkdWNlIiwic1BhdGhTb0ZhciIsInNOZXh0UGF0aFBhcnQiLCJvVGFyZ2V0IiwiZ2V0T2JqZWN0IiwiT2JqZWN0Iiwia2V5cyIsInR5cGUiLCJwcmVwcm9jZXNzb3JzIiwieG1sIiwiYmluZGluZ0NvbnRleHRzIiwiZW50aXR5U2V0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJjb250ZXh0UGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJub1Jlc29sdmUiLCJ2aWV3RGF0YSIsIm1vZGVscyIsIm1hbmlmZXN0IiwiaWQiLCJ2aWV3TmFtZSIsImdldFZpZXdOYW1lIiwiY2FjaGUiLCJoZWlnaHQiLCJjcmVhdGVFcnJvclBhZ2UiLCJyZWFzb24iLCJtZXNzYWdlIiwiZXJyb3JWaWV3TmFtZSIsInJ1bkFzT3duZXIiLCJWaWV3IiwiY3JlYXRlIiwic2V0TW9kZWwiLCJNYW5hZ2VkT2JqZWN0TW9kZWwiLCJzZXRBZ2dyZWdhdGlvbiIsImdldFNlcnZpY2UiLCJvUm91dGluZ1NlcnZpY2UiLCJvVGFyZ2V0SW5mbyIsIm1PdXRib3VuZHMiLCJjcm9zc05hdmlnYXRpb24iLCJvdXRib3VuZHMiLCJtTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb24iLCJuYXZpZ2F0aW9uT2JqZWN0S2V5IiwibmF2aWdhdGlvbk9iamVjdCIsIm91dGJvdW5kQ29uZmlnIiwiZGV0YWlsIiwib3V0Ym91bmQiLCJvdXRib3VuZERldGFpbCIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwicGFyYW1ldGVycyIsIm5hdmlnYXRpb24iLCJ2aWV3TGV2ZWwiLCJjb250ZW50RGVuc2l0aWVzIiwicmVzb3VyY2VCdW5kbGUiLCJfX2J1bmRsZSIsImlzRGVza3RvcCIsInN5c3RlbSIsImRlc2t0b3AiLCJpc1Bob25lIiwicGhvbmUiLCJnZXRWaWV3RGF0YSIsImFzc2lnbiIsInNoZWxsQ29udGVudERlbnNpdHkiLCJnZXRDb250ZW50RGVuc2l0eSIsInVzZU5ld0xhenlMb2FkaW5nIiwiVXJpUGFyYW1ldGVycyIsImZyb21RdWVyeSIsIndpbmRvdyIsImxvY2F0aW9uIiwic2VhcmNoIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsImZvcm0iLCJfdXNlTmV3VmFsdWVIZWxwIiwiYXBwIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJzQW5ub3RhdGlvblBhdGgiLCJpbmRleE9mIiwic1RhcmdldEFubm90YXRpb25QYXRoIiwicmVzb2x2ZUR5bmFtaWNFeHByZXNzaW9uIiwiY29udmVydFR5cGVzIiwiVGVtcGxhdGVNb2RlbCIsIm9EaWFnbm9zdGljcyIsImdldERpYWdub3N0aWNzIiwiaUlzc3VlQ291bnQiLCJnZXRJc3N1ZXMiLCJvQ29udmVydGVyUGFnZU1vZGVsIiwiY29udmVydFBhZ2UiLCJhSXNzdWVzIiwiYUFkZGVkSXNzdWVzIiwic2xpY2UiLCJ3YXJuaW5nIiwiZ2V0RGF0YSIsImUiLCJFcnJvciIsImdldFZpZXciLCJnZXRJbnRlcmZhY2UiLCJleGl0IiwicmVtb3ZlR2xvYmFsSW5zdGFuY2UiLCJTZXJ2aWNlIiwiVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5IiwiX29JbnN0YW5jZVJlZ2lzdHJ5Iiwib1NlcnZpY2VDb250ZXh0IiwiaUNyZWF0aW5nVmlld3MiLCJvVGVtcGxhdGVkVmlld1NlcnZpY2UiLCJnZXROdW1iZXJPZlZpZXdzSW5DcmVhdGlvblN0YXRlIiwiU2VydmljZUZhY3RvcnkiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7TUFzQk1BLG9COzs7Ozs7Ozs7V0FVTEMsSSxHQUFBLGdCQUFPO0FBQUE7O0FBQ04sVUFBTUMsb0JBQW9CLEdBQUcsRUFBN0I7QUFDQSxVQUFNQyxRQUFRLEdBQUcsS0FBS0MsVUFBTCxFQUFqQjtBQUNBLFVBQU1DLFVBQVUsR0FBR0YsUUFB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VCxhQUFPLEtBQUsvSCxLQUFaO0FBQ0EsSzs7V0FDRGdJLFksR0FBQSx3QkFBb0I7QUFDbkIsYUFBTyxJQUFQO0FBQ0EsSzs7V0FDREMsSSxHQUFBLGdCQUFPO0FBQ047QUFDQSxVQUFJLEtBQUt2TCxxQkFBVCxFQUFnQztBQUMvQixhQUFLQSxxQkFBTCxDQUEyQnFELE9BQTNCO0FBQ0E7O0FBQ0QsVUFBSSxLQUFLaEQsb0JBQVQsRUFBK0I7QUFDOUIsYUFBS0Esb0JBQUwsQ0FBMEJnRCxPQUExQjtBQUNBOztBQUNELFdBQUs5RSxRQUFMLENBQWNpTixvQkFBZDtBQUNBLEs7OztJQXJaaUNDLE87O01BdVo3QkMsMkI7Ozs7Ozs7Ozs7O2FBQ0xDLGtCLEdBQTJELEU7Ozs7OztZQUUzRGxNLGMsR0FBQSx3QkFBZW1NLGVBQWYsRUFBOEU7QUFDN0VGLE1BQUFBLDJCQUEyQixDQUFDRyxjQUE1QjtBQUVBLFVBQU1DLHFCQUFxQixHQUFHLElBQUkzTyxvQkFBSixDQUF5QndJLE1BQU0sQ0FBQ3lELE1BQVAsQ0FBYztBQUFFNUssUUFBQUEsT0FBTyxFQUFFO0FBQVgsT0FBZCxFQUFpQ29OLGVBQWpDLENBQXpCLENBQTlCO0FBQ0EsYUFBT0UscUJBQXFCLENBQUMzSyxXQUF0QixDQUFrQ3BCLElBQWxDLENBQXVDLFlBQVk7QUFDekQyTCxRQUFBQSwyQkFBMkIsQ0FBQ0csY0FBNUI7QUFDQSxlQUFPQyxxQkFBUDtBQUNBLE9BSE0sQ0FBUDtBQUlBLEs7O1lBQ0ROLG9CLEdBQUEsZ0NBQXVCO0FBQ3RCLFdBQUtHLGtCQUFMLEdBQTBCLEVBQTFCO0FBQ0EsSzs7Z0NBQ01JLCtCLEdBQVAsMkNBQXlDO0FBQ3hDLGFBQU9MLDJCQUEyQixDQUFDRyxjQUFuQztBQUNBLEs7OztJQWpCd0NHLGM7O1NBb0IzQk4sMkIiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IFVyaVBhcmFtZXRlcnMgZnJvbSBcInNhcC9iYXNlL3V0aWwvVXJpUGFyYW1ldGVyc1wiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgQ2FjaGVIYW5kbGVyU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9DYWNoZUhhbmRsZXJTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFRlbXBsYXRlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlTW9kZWxcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IENhY2hlTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvY2FjaGUvQ2FjaGVNYW5hZ2VyXCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlSZWdpc3RyeVwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3RNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2Jhc2UvTWFuYWdlZE9iamVjdE1vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBWZXJzaW9uSW5mbyBmcm9tIFwic2FwL3VpL1ZlcnNpb25JbmZvXCI7XG5pbXBvcnQgdHlwZSB7IENvcmVFeCwgU2VydmljZUNvbnRleHQgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgeyByZXNvbHZlRHluYW1pY0V4cHJlc3Npb24gfSBmcm9tIFwiLi4vaGVscGVycy9EeW5hbWljQW5ub3RhdGlvblBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VNb2RlbFNlcnZpY2UgfSBmcm9tIFwiLi9SZXNvdXJjZU1vZGVsU2VydmljZUZhY3RvcnlcIjtcblxudHlwZSBUZW1wbGF0ZWRWaWV3U2VydmljZVNldHRpbmdzID0ge307XG5cbmNsYXNzIFRlbXBsYXRlZFZpZXdTZXJ2aWNlIGV4dGVuZHMgU2VydmljZTxUZW1wbGF0ZWRWaWV3U2VydmljZVNldHRpbmdzPiB7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxhbnk+O1xuXHRvVmlldyE6IFZpZXc7XG5cdG9SZXNvdXJjZU1vZGVsU2VydmljZSE6IFJlc291cmNlTW9kZWxTZXJ2aWNlO1xuXHRvQ2FjaGVIYW5kbGVyU2VydmljZSE6IENhY2hlSGFuZGxlclNlcnZpY2U7XG5cdG9GYWN0b3J5ITogVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5O1xuXHRyZXNvdXJjZU1vZGVsITogdHlwZW9mIFJlc291cmNlTW9kZWw7XG5cdHN0YWJsZUlkITogc3RyaW5nO1xuXHRUZW1wbGF0ZUNvbnZlcnRlcjogYW55O1xuXHRNZXRhTW9kZWxDb252ZXJ0ZXI6IGFueTtcblx0aW5pdCgpIHtcblx0XHRjb25zdCBhU2VydmljZURlcGVuZGVuY2llcyA9IFtdO1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250ZXh0LnNjb3BlT2JqZWN0O1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbXBvbmVudCkgYXMgQXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHNTdGFibGVJZCA9IGAke29BcHBDb21wb25lbnQuZ2V0TWV0YWRhdGEoKS5nZXRDb21wb25lbnROYW1lKCl9Ojoke29BcHBDb21wb25lbnQuZ2V0TG9jYWxJZChvQ29tcG9uZW50LmdldElkKCkpfWA7XG5cdFx0Y29uc3QgYUVuaGFuY2VJMThuID0gb0NvbXBvbmVudC5nZXRFbmhhbmNlSTE4bigpIHx8IFtdO1xuXHRcdGxldCBzQXBwTmFtZXNwYWNlO1xuXHRcdHRoaXMub0ZhY3RvcnkgPSBvQ29udGV4dC5mYWN0b3J5O1xuXHRcdGlmIChhRW5oYW5jZUkxOG4pIHtcblx0XHRcdHNBcHBOYW1lc3BhY2UgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFkYXRhKCkuZ2V0Q29tcG9uZW50TmFtZSgpO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhRW5oYW5jZUkxOG4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Ly8gSW4gb3JkZXIgdG8gc3VwcG9ydCB0ZXh0LXZlcnRpY2FsaXphdGlvbiBhcHBsaWNhdGlvbnMgY2FuIGFsc28gcGFzc3MgYSByZXNvdXJjZSBtb2RlbCBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHQvLyBVSTUgdGFrZXMgY2FyZSBvZiB0ZXh0LXZlcnRpY2FsaXphdGlvbiBmb3IgcmVzb3VyY2UgbW9kZWxzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG5cdFx0XHRcdC8vIEhlbmNlIGNoZWNrIGlmIHRoZSBnaXZlbiBrZXkgaXMgYSByZXNvdXJjZSBtb2RlbCBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHQvLyBpZiBzbyB0aGlzIG1vZGVsIHNob3VsZCBiZSB1c2VkIHRvIGVuaGFuY2UgdGhlIHNhcC5mZSByZXNvdXJjZSBtb2RlbCBzbyBwYXNzIGl0IGFzIGl0IGlzXG5cdFx0XHRcdGNvbnN0IG9SZXNvdXJjZU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNb2RlbChhRW5oYW5jZUkxOG5baV0pO1xuXHRcdFx0XHRpZiAob1Jlc291cmNlTW9kZWwgJiYgb1Jlc291cmNlTW9kZWwuaXNBKFwic2FwLnVpLm1vZGVsLnJlc291cmNlLlJlc291cmNlTW9kZWxcIikpIHtcblx0XHRcdFx0XHRhRW5oYW5jZUkxOG5baV0gPSBvUmVzb3VyY2VNb2RlbDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhRW5oYW5jZUkxOG5baV0gPSBgJHtzQXBwTmFtZXNwYWNlfS4ke2FFbmhhbmNlSTE4bltpXS5yZXBsYWNlKFwiLnByb3BlcnRpZXNcIiwgXCJcIil9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IHNDYWNoZUlkZW50aWZpZXIgPSBgJHtvQXBwQ29tcG9uZW50LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfV8ke3NTdGFibGVJZH1fJHtzYXAudWlcblx0XHRcdC5nZXRDb3JlKClcblx0XHRcdC5nZXRDb25maWd1cmF0aW9uKClcblx0XHRcdC5nZXRMYW5ndWFnZVRhZygpfWA7XG5cdFx0YVNlcnZpY2VEZXBlbmRlbmNpZXMucHVzaChcblx0XHRcdFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkuZ2V0KFwic2FwLmZlLmNvcmUuc2VydmljZXMuUmVzb3VyY2VNb2RlbFNlcnZpY2VcIilcblx0XHRcdFx0LmNyZWF0ZUluc3RhbmNlKHtcblx0XHRcdFx0XHRzY29wZVR5cGU6IFwiY29tcG9uZW50XCIsXG5cdFx0XHRcdFx0c2NvcGVPYmplY3Q6IG9Db21wb25lbnQsXG5cdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdGJ1bmRsZXM6IFtcInNhcC5mZS5jb3JlLm1lc3NhZ2VidW5kbGVcIiwgXCJzYXAuZmUubWFjcm9zLm1lc3NhZ2VidW5kbGVcIiwgXCJzYXAuZmUudGVtcGxhdGVzLm1lc3NhZ2VidW5kbGVcIl0sXG5cdFx0XHRcdFx0XHRlbmhhbmNlSTE4bjogYUVuaGFuY2VJMThuLFxuXHRcdFx0XHRcdFx0bW9kZWxOYW1lOiBcInNhcC5mZS5pMThuXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKChvUmVzb3VyY2VNb2RlbFNlcnZpY2U6IFJlc291cmNlTW9kZWxTZXJ2aWNlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vUmVzb3VyY2VNb2RlbFNlcnZpY2UgPSBvUmVzb3VyY2VNb2RlbFNlcnZpY2U7XG5cdFx0XHRcdFx0cmV0dXJuIG9SZXNvdXJjZU1vZGVsU2VydmljZS5nZXRSZXNvdXJjZU1vZGVsKCk7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGFTZXJ2aWNlRGVwZW5kZW5jaWVzLnB1c2goXG5cdFx0XHRTZXJ2aWNlRmFjdG9yeVJlZ2lzdHJ5LmdldChcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkNhY2hlSGFuZGxlclNlcnZpY2VcIilcblx0XHRcdFx0LmNyZWF0ZUluc3RhbmNlKHtcblx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0Y29tcG9uZW50OiBvQ29tcG9uZW50XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbigob0NhY2hlSGFuZGxlclNlcnZpY2U6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMub0NhY2hlSGFuZGxlclNlcnZpY2UgPSBvQ2FjaGVIYW5kbGVyU2VydmljZTtcblx0XHRcdFx0XHRyZXR1cm4gb0NhY2hlSGFuZGxlclNlcnZpY2UudmFsaWRhdGVDYWNoZUtleShzQ2FjaGVJZGVudGlmaWVyKTtcblx0XHRcdFx0fSlcblx0XHQpO1xuXHRcdGFTZXJ2aWNlRGVwZW5kZW5jaWVzLnB1c2goXG5cdFx0XHQoVmVyc2lvbkluZm8gYXMgYW55KVxuXHRcdFx0XHQubG9hZCgpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvSW5mbzogYW55KSB7XG5cdFx0XHRcdFx0bGV0IHNUaW1lc3RhbXAgPSBcIlwiO1xuXHRcdFx0XHRcdGlmICghb0luZm8ubGlicmFyaWVzKSB7XG5cdFx0XHRcdFx0XHRzVGltZXN0YW1wID0gKHNhcC51aSBhcyBhbnkpLmJ1aWxkaW5mby5idWlsZHRpbWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9JbmZvLmxpYnJhcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChvTGlicmFyeTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdHNUaW1lc3RhbXAgKz0gb0xpYnJhcnkuYnVpbGRUaW1lc3RhbXA7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHNUaW1lc3RhbXA7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFwiPE5PVkFMVUU+XCI7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGxldCBzUGFnZU1vZGVsQ2FjaGVLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gUHJvbWlzZS5hbGwoYVNlcnZpY2VEZXBlbmRlbmNpZXMpXG5cdFx0XHQudGhlbigoYURlcGVuZGVuY2llc1Jlc3VsdDogYW55W10pID0+IHtcblx0XHRcdFx0Y29uc3Qgc0NhY2hlS2V5ID0gYURlcGVuZGVuY2llc1Jlc3VsdFsxXTtcblx0XHRcdFx0Y29uc3Qgc1ZlcnNpb25JbmZvID0gYURlcGVuZGVuY2llc1Jlc3VsdFsyXTtcblx0XHRcdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRcdFx0Y29uc3Qgb1NpZGVFZmZlY3RzU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXG5cdFx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2VzLmluaXRpYWxpemVTaWRlRWZmZWN0cyhvQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkpO1xuXG5cdFx0XHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gY2FjaGUga2V5IHdlIGlnbm9yZSB0aGUgdmlldyBjYWNoZVxuXHRcdFx0XHRzUGFnZU1vZGVsQ2FjaGVLZXkgPSBzQ2FjaGVLZXlcblx0XHRcdFx0XHQ/IGAke3NDYWNoZUtleX0tJHtzVmVyc2lvbkluZm99LSR7c1N0YWJsZUlkfS0ke29TaGVsbFNlcnZpY2VzLmluc3RhbmNlVHlwZX0tcGFnZU1vZGVsYFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYURlcGVuZGVuY2llc1Jlc3VsdC5jb25jYXQoW3RoaXMuX2dldENhY2hlZE1vZGVsKHNQYWdlTW9kZWxDYWNoZUtleSldKSk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKGFEZXBlbmRlbmNpZXNSZXN1bHQ6IGFueVtdKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9SZXNvdXJjZU1vZGVsID0gYURlcGVuZGVuY2llc1Jlc3VsdFswXTtcblx0XHRcdFx0Y29uc3Qgc0NhY2hlS2V5ID0gYURlcGVuZGVuY2llc1Jlc3VsdFsxXTtcblx0XHRcdFx0Y29uc3Qgb1BhZ2VNb2RlbENhY2hlID0gYURlcGVuZGVuY2llc1Jlc3VsdFszXTtcblx0XHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoXG5cdFx0XHRcdFx0XHRbXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCIsIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIl0sXG5cdFx0XHRcdFx0XHQoVGVtcGxhdGVDb252ZXJ0ZXI6IGFueSwgTWV0YU1vZGVsQ29udmVydGVyOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNyZWF0ZVZpZXcoXG5cdFx0XHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRcdHNTdGFibGVJZCxcblx0XHRcdFx0XHRcdFx0XHRcdHNDYWNoZUtleSxcblx0XHRcdFx0XHRcdFx0XHRcdHNQYWdlTW9kZWxDYWNoZUtleSxcblx0XHRcdFx0XHRcdFx0XHRcdG9QYWdlTW9kZWxDYWNoZSxcblx0XHRcdFx0XHRcdFx0XHRcdFRlbXBsYXRlQ29udmVydGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0TWV0YU1vZGVsQ29udmVydGVyXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChzQ2FjaGVLZXk6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvQ2FjaGVIYW5kbGVyU2VydmljZSA9IFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkuZ2V0KFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ2FjaGVIYW5kbGVyU2VydmljZVwiKS5nZXRJbnN0YW5jZShvTWV0YU1vZGVsKTtcblx0XHRcdFx0b0NhY2hlSGFuZGxlclNlcnZpY2UuaW52YWxpZGF0ZUlmTmVlZGVkKHNDYWNoZUtleSwgc0NhY2hlSWRlbnRpZmllcik7XG5cdFx0XHR9KTtcblx0fVxuXHRfZ2V0Q2FjaGVkTW9kZWwoc0NhY2hlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0XHRpZiAoc0NhY2hlS2V5ICYmIChDb3JlIGFzIENvcmVFeCkuZ2V0Q29uZmlndXJhdGlvbigpLmdldFZpZXdDYWNoZSgpKSB7XG5cdFx0XHRyZXR1cm4gQ2FjaGVNYW5hZ2VyLmdldChzQ2FjaGVLZXkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdF9zZXRDYWNoZWRNb2RlbChzQ2FjaGVLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCwgb0NhY2hlTW9kZWw6IGFueSkge1xuXHRcdGlmIChzQ2FjaGVLZXkgJiYgKENvcmUgYXMgQ29yZUV4KS5nZXRDb25maWd1cmF0aW9uKCkuZ2V0Vmlld0NhY2hlKCkpIHtcblx0XHRcdENhY2hlTWFuYWdlci5zZXQoc0NhY2hlS2V5LCBvQ2FjaGVNb2RlbCk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0LyoqXG5cdCAqIFJlZnJlc2ggdGhlIGN1cnJlbnQgdmlldyB1c2luZyB0aGUgc2FtZSBjb25maWd1cmF0aW9uIGFzIGJlZm9yZS5cblx0ICogVGhpcyBpcyB1c2VmdWwgZm9yIG91ciBkZW1va2l0ICFcblx0ICpcblx0ICogQHBhcmFtIG9Db21wb25lbnRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGluZGljYXRpbmcgd2hlbiB0aGUgdmlldyBpcyByZWZyZXNoZWRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHJlZnJlc2hWaWV3KG9Db21wb25lbnQ6IGFueSkge1xuXHRcdGNvbnN0IG9Sb290VmlldyA9IG9Db21wb25lbnQuZ2V0Um9vdENvbnRyb2woKTtcblx0XHRpZiAob1Jvb3RWaWV3KSB7XG5cdFx0XHRvUm9vdFZpZXcuZGVzdHJveSgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vVmlldykge1xuXHRcdFx0dGhpcy5vVmlldy5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVZpZXcodGhpcy5yZXNvdXJjZU1vZGVsLCB0aGlzLnN0YWJsZUlkLCBcIlwiLCBcIlwiLCB1bmRlZmluZWQsIHRoaXMuVGVtcGxhdGVDb252ZXJ0ZXIsIHRoaXMuTWV0YU1vZGVsQ29udmVydGVyKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRvQ29tcG9uZW50Lm9Db250YWluZXIuaW52YWxpZGF0ZSgpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0b0NvbXBvbmVudC5vQ29udGFpbmVyLmludmFsaWRhdGUoKTtcblx0XHRcdFx0TG9nLmVycm9yKG9FcnJvcik7XG5cdFx0XHR9KTtcblx0fVxuXHRjcmVhdGVWaWV3KFxuXHRcdG9SZXNvdXJjZU1vZGVsOiBhbnksXG5cdFx0c1N0YWJsZUlkOiBhbnksXG5cdFx0c0NhY2hlS2V5OiBhbnksXG5cdFx0c1BhZ2VNb2RlbENhY2hlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0b1BhZ2VNb2RlbENhY2hlOiBhbnksXG5cdFx0VGVtcGxhdGVDb252ZXJ0ZXI6IGFueSxcblx0XHRNZXRhTW9kZWxDb252ZXJ0ZXI6IGFueVxuXHQpIHtcblx0XHR0aGlzLnJlc291cmNlTW9kZWwgPSBvUmVzb3VyY2VNb2RlbDtcblx0XHR0aGlzLnN0YWJsZUlkID0gc1N0YWJsZUlkO1xuXHRcdHRoaXMuVGVtcGxhdGVDb252ZXJ0ZXIgPSBUZW1wbGF0ZUNvbnZlcnRlcjtcblx0XHR0aGlzLk1ldGFNb2RlbENvbnZlcnRlciA9IE1ldGFNb2RlbENvbnZlcnRlcjtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGNvbnN0IG1TZXJ2aWNlU2V0dGluZ3MgPSBvQ29udGV4dC5zZXR0aW5ncztcblx0XHRjb25zdCBzQ29udmVydGVyVHlwZSA9IG1TZXJ2aWNlU2V0dGluZ3MuY29udmVydGVyVHlwZTtcblx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3Q7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db21wb25lbnQpIGFzIEFwcENvbXBvbmVudDtcblx0XHRjb25zdCBzRnVsbENvbnRleHRQYXRoID0gb0FwcENvbXBvbmVudC5nZXRSb3V0aW5nU2VydmljZSgpLmdldFRhcmdldEluZm9ybWF0aW9uRm9yKG9Db21wb25lbnQpLm9wdGlvbnMuc2V0dGluZ3MuZnVsbENvbnRleHRQYXRoO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG9NYW5pZmVzdENvbnRlbnQ6IGFueSA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3QoKTtcblx0XHRjb25zdCBvRGV2aWNlTW9kZWwgPSBuZXcgSlNPTk1vZGVsKERldmljZSkuc2V0RGVmYXVsdEJpbmRpbmdNb2RlKFwiT25lV2F5XCIpO1xuXHRcdGNvbnN0IG9NYW5pZmVzdE1vZGVsID0gbmV3IEpTT05Nb2RlbChvTWFuaWZlc3RDb250ZW50KTtcblx0XHRjb25zdCBiRXJyb3IgPSBmYWxzZTtcblx0XHRsZXQgb1BhZ2VNb2RlbDogVGVtcGxhdGVNb2RlbCwgb1ZpZXdEYXRhTW9kZWw6IE1vZGVsLCBvVmlld1NldHRpbmdzOiBhbnksIG1WaWV3RGF0YTogYW55O1xuXG5cdFx0ZnVuY3Rpb24gZ2V0Vmlld1NldHRpbmdzKCkge1xuXHRcdFx0Y29uc3QgYVNwbGl0UGF0aCA9IHNGdWxsQ29udGV4dFBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBhU3BsaXRQYXRoLnJlZHVjZShmdW5jdGlvbiAoc1BhdGhTb0ZhcjogYW55LCBzTmV4dFBhdGhQYXJ0OiBhbnkpIHtcblx0XHRcdFx0aWYgKHNOZXh0UGF0aFBhcnQgPT09IFwiXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gc1BhdGhTb0Zhcjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc1BhdGhTb0ZhciA9PT0gXCJcIikge1xuXHRcdFx0XHRcdHNQYXRoU29GYXIgPSBgLyR7c05leHRQYXRoUGFydH1gO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IG9UYXJnZXQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGF0aFNvRmFyfS8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy8ke3NOZXh0UGF0aFBhcnR9YCk7XG5cdFx0XHRcdFx0aWYgKG9UYXJnZXQgJiYgT2JqZWN0LmtleXMob1RhcmdldCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0c1BhdGhTb0ZhciArPSBcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzUGF0aFNvRmFyICs9IGAvJHtzTmV4dFBhdGhQYXJ0fWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNQYXRoU29GYXI7XG5cdFx0XHR9LCBcIlwiKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6IFwiWE1MXCIsXG5cdFx0XHRcdHByZXByb2Nlc3NvcnM6IHtcblx0XHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IHNFbnRpdHlTZXRQYXRoID8gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRW50aXR5U2V0UGF0aCkgOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRmdWxsQ29udGV4dFBhdGg6IHNGdWxsQ29udGV4dFBhdGggPyBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdWxsQ29udGV4dFBhdGgpIDogbnVsbCxcblx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IHNGdWxsQ29udGV4dFBhdGggPyBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdWxsQ29udGV4dFBhdGgpIDogbnVsbCxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogb1BhZ2VNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiwgdW5kZWZpbmVkLCB7IG5vUmVzb2x2ZTogdHJ1ZSB9KSxcblx0XHRcdFx0XHRcdFx0dmlld0RhdGE6IG1WaWV3RGF0YSA/IG9WaWV3RGF0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSA6IG51bGxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRmdWxsQ29udGV4dFBhdGg6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcInNhcC5mZS5pMThuXCI6IG9SZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdFwiZGV2aWNlXCI6IG9EZXZpY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0bWFuaWZlc3Q6IG9NYW5pZmVzdE1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBvUGFnZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHR2aWV3RGF0YTogb1ZpZXdEYXRhTW9kZWxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhcHBDb21wb25lbnQ6IG9BcHBDb21wb25lbnRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGlkOiBzU3RhYmxlSWQsXG5cdFx0XHRcdHZpZXdOYW1lOiBtU2VydmljZVNldHRpbmdzLnZpZXdOYW1lIHx8IG9Db21wb25lbnQuZ2V0Vmlld05hbWUoKSxcblx0XHRcdFx0dmlld0RhdGE6IG1WaWV3RGF0YSxcblx0XHRcdFx0Y2FjaGU6IHsga2V5czogW3NDYWNoZUtleV0gfSxcblx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XCJzYXAuZmUuaTE4blwiOiBvUmVzb3VyY2VNb2RlbFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRoZWlnaHQ6IFwiMTAwJVwiXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRjb25zdCBjcmVhdGVFcnJvclBhZ2UgPSAocmVhc29uOiBhbnkpID0+IHtcblx0XHRcdC8vIGp1c3QgcmVwbGFjZSB0aGUgdmlldyBuYW1lIGFuZCBhZGQgYW4gYWRkaXRpb25hbCBtb2RlbCBjb250YWluaW5nIHRoZSByZWFzb24sIGJ1dFxuXHRcdFx0Ly8ga2VlcCB0aGUgb3RoZXIgc2V0dGluZ3Ncblx0XHRcdExvZy5lcnJvcihyZWFzb24ubWVzc2FnZSwgcmVhc29uKTtcblx0XHRcdG9WaWV3U2V0dGluZ3Mudmlld05hbWUgPSBtU2VydmljZVNldHRpbmdzLmVycm9yVmlld05hbWUgfHwgXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy52aWV3LlRlbXBsYXRpbmdFcnJvclBhZ2VcIjtcblx0XHRcdG9WaWV3U2V0dGluZ3MucHJlcHJvY2Vzc29ycy54bWwubW9kZWxzW1wiZXJyb3JcIl0gPSBuZXcgSlNPTk1vZGVsKHJlYXNvbik7XG5cblx0XHRcdHJldHVybiBvQ29tcG9uZW50LnJ1bkFzT3duZXIoKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gVmlldy5jcmVhdGUob1ZpZXdTZXR0aW5ncykudGhlbigob1ZpZXc6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMub1ZpZXcgPSBvVmlldztcblx0XHRcdFx0XHR0aGlzLm9WaWV3LnNldE1vZGVsKG5ldyBNYW5hZ2VkT2JqZWN0TW9kZWwodGhpcy5vVmlldyksIFwiJHZpZXdcIik7XG5cdFx0XHRcdFx0b0NvbXBvbmVudC5zZXRBZ2dyZWdhdGlvbihcInJvb3RDb250cm9sXCIsIHRoaXMub1ZpZXcpO1xuXHRcdFx0XHRcdHJldHVybiBzQ2FjaGVLZXk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHRyZXR1cm4gb0FwcENvbXBvbmVudFxuXHRcdFx0LmdldFNlcnZpY2UoXCJyb3V0aW5nU2VydmljZVwiKVxuXHRcdFx0LnRoZW4oKG9Sb3V0aW5nU2VydmljZTogYW55KSA9PiB7XG5cdFx0XHRcdC8vIFJldHJpZXZlIHRoZSB2aWV3TGV2ZWwgZm9yIHRoZSBjb21wb25lbnRcblx0XHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvUm91dGluZ1NlcnZpY2UuZ2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3Iob0NvbXBvbmVudCk7XG5cdFx0XHRcdGNvbnN0IG1PdXRib3VuZHMgPVxuXHRcdFx0XHRcdG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuYXBwXCJdICYmXG5cdFx0XHRcdFx0b01hbmlmZXN0Q29udGVudFtcInNhcC5hcHBcIl0uY3Jvc3NOYXZpZ2F0aW9uICYmXG5cdFx0XHRcdFx0b01hbmlmZXN0Q29udGVudFtcInNhcC5hcHBcIl0uY3Jvc3NOYXZpZ2F0aW9uLm91dGJvdW5kcztcblx0XHRcdFx0Y29uc3QgbU5hdmlnYXRpb24gPSBvQ29tcG9uZW50LmdldE5hdmlnYXRpb24oKSB8fCB7fTtcblx0XHRcdFx0T2JqZWN0LmtleXMobU5hdmlnYXRpb24pLmZvckVhY2goZnVuY3Rpb24gKG5hdmlnYXRpb25PYmplY3RLZXk6IHN0cmluZykge1xuXHRcdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25PYmplY3QgPSBtTmF2aWdhdGlvbltuYXZpZ2F0aW9uT2JqZWN0S2V5XTtcblx0XHRcdFx0XHRsZXQgb3V0Ym91bmRDb25maWc7XG5cdFx0XHRcdFx0aWYgKG5hdmlnYXRpb25PYmplY3QuZGV0YWlsICYmIG5hdmlnYXRpb25PYmplY3QuZGV0YWlsLm91dGJvdW5kICYmIG1PdXRib3VuZHNbbmF2aWdhdGlvbk9iamVjdC5kZXRhaWwub3V0Ym91bmRdKSB7XG5cdFx0XHRcdFx0XHRvdXRib3VuZENvbmZpZyA9IG1PdXRib3VuZHNbbmF2aWdhdGlvbk9iamVjdC5kZXRhaWwub3V0Ym91bmRdO1xuXHRcdFx0XHRcdFx0bmF2aWdhdGlvbk9iamVjdC5kZXRhaWwub3V0Ym91bmREZXRhaWwgPSB7XG5cdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvdXRib3VuZENvbmZpZy5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0YWN0aW9uOiBvdXRib3VuZENvbmZpZy5hY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHBhcmFtZXRlcnM6IG91dGJvdW5kQ29uZmlnLnBhcmFtZXRlcnNcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChuYXZpZ2F0aW9uT2JqZWN0LmNyZWF0ZSAmJiBuYXZpZ2F0aW9uT2JqZWN0LmNyZWF0ZS5vdXRib3VuZCAmJiBtT3V0Ym91bmRzW25hdmlnYXRpb25PYmplY3QuY3JlYXRlLm91dGJvdW5kXSkge1xuXHRcdFx0XHRcdFx0b3V0Ym91bmRDb25maWcgPSBtT3V0Ym91bmRzW25hdmlnYXRpb25PYmplY3QuY3JlYXRlLm91dGJvdW5kXTtcblx0XHRcdFx0XHRcdG5hdmlnYXRpb25PYmplY3QuY3JlYXRlLm91dGJvdW5kRGV0YWlsID0ge1xuXHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb3V0Ym91bmRDb25maWcuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdGFjdGlvbjogb3V0Ym91bmRDb25maWcuYWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBvdXRib3VuZENvbmZpZy5wYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdG1WaWV3RGF0YSA9IHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uOiBtTmF2aWdhdGlvbixcblx0XHRcdFx0XHR2aWV3TGV2ZWw6IG9UYXJnZXRJbmZvLnZpZXdMZXZlbCxcblx0XHRcdFx0XHRzdGFibGVJZDogc1N0YWJsZUlkLFxuXHRcdFx0XHRcdGNvbnRlbnREZW5zaXRpZXM6IG9NYW5pZmVzdENvbnRlbnRbXCJzYXAudWk1XCJdLmNvbnRlbnREZW5zaXRpZXMsXG5cdFx0XHRcdFx0cmVzb3VyY2VCdW5kbGU6IG9SZXNvdXJjZU1vZGVsLl9fYnVuZGxlLFxuXHRcdFx0XHRcdGZ1bGxDb250ZXh0UGF0aDogc0Z1bGxDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRpc0Rlc2t0b3A6IChEZXZpY2UgYXMgYW55KS5zeXN0ZW0uZGVza3RvcCxcblx0XHRcdFx0XHRpc1Bob25lOiAoRGV2aWNlIGFzIGFueSkuc3lzdGVtLnBob25lXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0aWYgKG9Db21wb25lbnQuZ2V0Vmlld0RhdGEpIHtcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKG1WaWV3RGF0YSwgb0NvbXBvbmVudC5nZXRWaWV3RGF0YSgpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VzID0gb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0XHRcdG1WaWV3RGF0YS5jb252ZXJ0ZXJUeXBlID0gc0NvbnZlcnRlclR5cGU7XG5cdFx0XHRcdG1WaWV3RGF0YS5zaGVsbENvbnRlbnREZW5zaXR5ID0gb1NoZWxsU2VydmljZXMuZ2V0Q29udGVudERlbnNpdHkoKTtcblx0XHRcdFx0bVZpZXdEYXRhLnVzZU5ld0xhenlMb2FkaW5nID0gVXJpUGFyYW1ldGVycy5mcm9tUXVlcnkod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KFwic2FwLWZlLXh4LWxhenlsb2FkaW5ndGVzdFwiKSA9PT0gXCJ0cnVlXCI7XG5cdFx0XHRcdG1WaWV3RGF0YS5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0ID1cblx0XHRcdFx0XHRvTWFuaWZlc3RDb250ZW50W1wic2FwLmZlXCJdICYmIG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl0uZm9ybVxuXHRcdFx0XHRcdFx0PyBvTWFuaWZlc3RDb250ZW50W1wic2FwLmZlXCJdLmZvcm0ucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdFxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdC8vIFx0VGhlIG1hbmlmZXN0IHN3aXRjaCBmb3IgdGhlIHVzYWdlIG9mIHRoZSBuZXcgVmFsdWVIZWxwIHNob3VsZCBvbmx5IHVzZWQgaW50ZXJuYWxseVxuXHRcdFx0XHRtVmlld0RhdGEuX3VzZU5ld1ZhbHVlSGVscCA9XG5cdFx0XHRcdFx0b01hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXSAmJiBvTWFuaWZlc3RDb250ZW50W1wic2FwLmZlXCJdLmFwcFxuXHRcdFx0XHRcdFx0PyBvTWFuaWZlc3RDb250ZW50W1wic2FwLmZlXCJdLmFwcC5fdXNlTmV3VmFsdWVIZWxwXG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0b1ZpZXdEYXRhTW9kZWwgPSBuZXcgSlNPTk1vZGVsKG1WaWV3RGF0YSk7XG5cdFx0XHRcdGlmIChtVmlld0RhdGEgJiYgbVZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uKSB7XG5cdFx0XHRcdFx0T2JqZWN0LmtleXMobVZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uKS5mb3JFYWNoKGZ1bmN0aW9uIChzQW5ub3RhdGlvblBhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0aWYgKHNBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiW1wiKSAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc1RhcmdldEFubm90YXRpb25QYXRoID0gcmVzb2x2ZUR5bmFtaWNFeHByZXNzaW9uKHNBbm5vdGF0aW9uUGF0aCwgb01ldGFNb2RlbCk7XG5cdFx0XHRcdFx0XHRcdG1WaWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbltzVGFyZ2V0QW5ub3RhdGlvblBhdGhdID0gbVZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uW3NBbm5vdGF0aW9uUGF0aF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0TWV0YU1vZGVsQ29udmVydGVyLmNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsLCBvQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkpO1xuXHRcdFx0XHRvUGFnZU1vZGVsID0gbmV3IFRlbXBsYXRlTW9kZWwoKCkgPT4ge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRpZiAob1BhZ2VNb2RlbENhY2hlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBvUGFnZU1vZGVsQ2FjaGU7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvRGlhZ25vc3RpY3MgPSBvQXBwQ29tcG9uZW50LmdldERpYWdub3N0aWNzKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGlJc3N1ZUNvdW50ID0gb0RpYWdub3N0aWNzLmdldElzc3VlcygpLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0NvbnZlcnRlclBhZ2VNb2RlbCA9IFRlbXBsYXRlQ29udmVydGVyLmNvbnZlcnRQYWdlKFxuXHRcdFx0XHRcdFx0XHRcdHNDb252ZXJ0ZXJUeXBlLFxuXHRcdFx0XHRcdFx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdFx0bVZpZXdEYXRhLFxuXHRcdFx0XHRcdFx0XHRcdG9EaWFnbm9zdGljcyxcblx0XHRcdFx0XHRcdFx0XHRzRnVsbENvbnRleHRQYXRoLFxuXHRcdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKVxuXHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFJc3N1ZXMgPSBvRGlhZ25vc3RpY3MuZ2V0SXNzdWVzKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFBZGRlZElzc3VlcyA9IGFJc3N1ZXMuc2xpY2UoaUlzc3VlQ291bnQpO1xuXHRcdFx0XHRcdFx0XHRpZiAoYUFkZGVkSXNzdWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XHRcdFx0XHRcdFwiU29tZSBpc3N1ZXMgaGF2ZSBiZWVuIGRldGVjdGVkIGluIHlvdXIgcHJvamVjdCwgcGxlYXNlIGNoZWNrIHRoZSBVSTUgc3VwcG9ydCBhc3Npc3RhbnQgcnVsZSBmb3Igc2FwLmZlLmNvcmVcIlxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9Db252ZXJ0ZXJQYWdlTW9kZWw7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBhbnksIGVycm9yIGFzIGFueSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge307XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCBvTWV0YU1vZGVsKTtcblxuXHRcdFx0XHRpZiAoIWJFcnJvcikge1xuXHRcdFx0XHRcdG9WaWV3U2V0dGluZ3MgPSBnZXRWaWV3U2V0dGluZ3MoKTtcblx0XHRcdFx0XHQvLyBTZXR0aW5nIHRoZSBwYWdlTW9kZWwgb24gdGhlIGNvbXBvbmVudCBmb3IgcG90ZW50aWFsIHJldXNlXG5cdFx0XHRcdFx0b0NvbXBvbmVudC5zZXRNb2RlbChvUGFnZU1vZGVsLCBcIl9wYWdlTW9kZWxcIik7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db21wb25lbnQucnVuQXNPd25lcigoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gVmlldy5jcmVhdGUob1ZpZXdTZXR0aW5ncylcblx0XHRcdFx0XHRcdFx0LmNhdGNoKGNyZWF0ZUVycm9yUGFnZSlcblx0XHRcdFx0XHRcdFx0LnRoZW4oKG9WaWV3OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9WaWV3ID0gb1ZpZXc7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vVmlldy5zZXRNb2RlbChuZXcgTWFuYWdlZE9iamVjdE1vZGVsKHRoaXMub1ZpZXcpLCBcIiR2aWV3XCIpO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMub1ZpZXcuc2V0TW9kZWwob1ZpZXdEYXRhTW9kZWwsIFwidmlld0RhdGFcIik7XG5cdFx0XHRcdFx0XHRcdFx0b0NvbXBvbmVudC5zZXRBZ2dyZWdhdGlvbihcInJvb3RDb250cm9sXCIsIHRoaXMub1ZpZXcpO1xuXHRcdFx0XHRcdFx0XHRcdC8vIEZpcmUgYW5kIGZvcmdldCBpbiB0aGUgY2FjaGVcblx0XHRcdFx0XHRcdFx0XHRpZiAoIW9QYWdlTW9kZWxDYWNoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fc2V0Q2FjaGVkTW9kZWwoc1BhZ2VNb2RlbENhY2hlS2V5LCAob1BhZ2VNb2RlbCBhcyBhbnkpLmdldERhdGEoKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBzQ2FjaGVLZXk7XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4gTG9nLmVycm9yKGUubWVzc2FnZSwgZSkpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvci5tZXNzYWdlLCBlcnJvcik7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgdmlldyA6ICR7ZXJyb3J9YCk7XG5cdFx0XHR9KTtcblx0fVxuXHRnZXRWaWV3KCkge1xuXHRcdHJldHVybiB0aGlzLm9WaWV3O1xuXHR9XG5cdGdldEludGVyZmFjZSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGV4aXQoKSB7XG5cdFx0Ly8gRGVyZWdpc3RlciBnbG9iYWwgaW5zdGFuY2Vcblx0XHRpZiAodGhpcy5vUmVzb3VyY2VNb2RlbFNlcnZpY2UpIHtcblx0XHRcdHRoaXMub1Jlc291cmNlTW9kZWxTZXJ2aWNlLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMub0NhY2hlSGFuZGxlclNlcnZpY2UpIHtcblx0XHRcdHRoaXMub0NhY2hlSGFuZGxlclNlcnZpY2UuZGVzdHJveSgpO1xuXHRcdH1cblx0XHR0aGlzLm9GYWN0b3J5LnJlbW92ZUdsb2JhbEluc3RhbmNlKCk7XG5cdH1cbn1cbmNsYXNzIFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeSBleHRlbmRzIFNlcnZpY2VGYWN0b3J5PFRlbXBsYXRlZFZpZXdTZXJ2aWNlU2V0dGluZ3M+IHtcblx0X29JbnN0YW5jZVJlZ2lzdHJ5OiBSZWNvcmQ8c3RyaW5nLCBUZW1wbGF0ZWRWaWV3U2VydmljZT4gPSB7fTtcblx0c3RhdGljIGlDcmVhdGluZ1ZpZXdzOiAwO1xuXHRjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PFRlbXBsYXRlZFZpZXdTZXJ2aWNlU2V0dGluZ3M+KSB7XG5cdFx0VGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LmlDcmVhdGluZ1ZpZXdzKys7XG5cblx0XHRjb25zdCBvVGVtcGxhdGVkVmlld1NlcnZpY2UgPSBuZXcgVGVtcGxhdGVkVmlld1NlcnZpY2UoT2JqZWN0LmFzc2lnbih7IGZhY3Rvcnk6IHRoaXMgfSwgb1NlcnZpY2VDb250ZXh0KSk7XG5cdFx0cmV0dXJuIG9UZW1wbGF0ZWRWaWV3U2VydmljZS5pbml0UHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeS5pQ3JlYXRpbmdWaWV3cy0tO1xuXHRcdFx0cmV0dXJuIG9UZW1wbGF0ZWRWaWV3U2VydmljZTtcblx0XHR9KTtcblx0fVxuXHRyZW1vdmVHbG9iYWxJbnN0YW5jZSgpIHtcblx0XHR0aGlzLl9vSW5zdGFuY2VSZWdpc3RyeSA9IHt9O1xuXHR9XG5cdHN0YXRpYyBnZXROdW1iZXJPZlZpZXdzSW5DcmVhdGlvblN0YXRlKCkge1xuXHRcdHJldHVybiBUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkuaUNyZWF0aW5nVmlld3M7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5O1xuIl19
|
|
458
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeS50cyJdLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiVGVtcGxhdGVkVmlld1NlcnZpY2UiLCJpbml0IiwiYVNlcnZpY2VEZXBlbmRlbmNpZXMiLCJvQ29udGV4dCIsImdldENvbnRleHQiLCJvQ29tcG9uZW50Iiwic2NvcGVPYmplY3QiLCJvQXBwQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic1N0YWJsZUlkIiwiZ2V0TWV0YWRhdGEiLCJnZXRDb21wb25lbnROYW1lIiwiZ2V0TG9jYWxJZCIsImdldElkIiwiYUVuaGFuY2VJMThuIiwiZ2V0RW5oYW5jZUkxOG4iLCJzQXBwTmFtZXNwYWNlIiwib0ZhY3RvcnkiLCJmYWN0b3J5IiwiaSIsImxlbmd0aCIsIm9SZXNvdXJjZU1vZGVsIiwiZ2V0TW9kZWwiLCJpc0EiLCJyZXBsYWNlIiwic0NhY2hlSWRlbnRpZmllciIsImdldE5hbWUiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJnZXRDb25maWd1cmF0aW9uIiwiZ2V0TGFuZ3VhZ2VUYWciLCJwdXNoIiwiU2VydmljZUZhY3RvcnlSZWdpc3RyeSIsImdldCIsImNyZWF0ZUluc3RhbmNlIiwic2NvcGVUeXBlIiwic2V0dGluZ3MiLCJidW5kbGVzIiwiZW5oYW5jZUkxOG4iLCJtb2RlbE5hbWUiLCJvUmVzb3VyY2VNb2RlbFNlcnZpY2UiLCJnZXRSZXNvdXJjZU1vZGVsIiwibWV0YU1vZGVsIiwiYXBwQ29tcG9uZW50IiwiY29tcG9uZW50Iiwib0NhY2hlSGFuZGxlclNlcnZpY2UiLCJ2YWxpZGF0ZUNhY2hlS2V5IiwiVmVyc2lvbkluZm8iLCJsb2FkIiwib0luZm8iLCJzVGltZXN0YW1wIiwibGlicmFyaWVzIiwiYnVpbGRpbmZvIiwiYnVpbGR0aW1lIiwiZm9yRWFjaCIsIm9MaWJyYXJ5IiwiYnVpbGRUaW1lc3RhbXAiLCJjYXRjaCIsInNQYWdlTW9kZWxDYWNoZUtleSIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsImFsbCIsImFEZXBlbmRlbmNpZXNSZXN1bHQiLCJzQ2FjaGVLZXkiLCJzVmVyc2lvbkluZm8iLCJvU2hlbGxTZXJ2aWNlcyIsImdldFNoZWxsU2VydmljZXMiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlcyIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImluaXRpYWxpemVTaWRlRWZmZWN0cyIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiaW5zdGFuY2VUeXBlIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiX2dldENhY2hlZE1vZGVsIiwib1BhZ2VNb2RlbENhY2hlIiwicmVzb2x2ZSIsInJlcXVpcmUiLCJUZW1wbGF0ZUNvbnZlcnRlciIsIk1ldGFNb2RlbENvbnZlcnRlciIsImNyZWF0ZVZpZXciLCJnZXRJbnN0YW5jZSIsImludmFsaWRhdGVJZk5lZWRlZCIsIkNvcmUiLCJnZXRWaWV3Q2FjaGUiLCJDYWNoZU1hbmFnZXIiLCJfc2V0Q2FjaGVkTW9kZWwiLCJvQ2FjaGVNb2RlbCIsInNldCIsInJlZnJlc2hWaWV3Iiwib1Jvb3RWaWV3IiwiZ2V0Um9vdENvbnRyb2wiLCJkZXN0cm95Iiwib1ZpZXciLCJyZXNvdXJjZU1vZGVsIiwic3RhYmxlSWQiLCJvQ29udGFpbmVyIiwiaW52YWxpZGF0ZSIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwibVNlcnZpY2VTZXR0aW5ncyIsInNDb252ZXJ0ZXJUeXBlIiwiY29udmVydGVyVHlwZSIsInNGdWxsQ29udGV4dFBhdGgiLCJnZXRSb3V0aW5nU2VydmljZSIsImdldFRhcmdldEluZm9ybWF0aW9uRm9yIiwib3B0aW9ucyIsImZ1bGxDb250ZXh0UGF0aCIsIm9NYW5pZmVzdENvbnRlbnQiLCJnZXRNYW5pZmVzdCIsIm9EZXZpY2VNb2RlbCIsIkpTT05Nb2RlbCIsIkRldmljZSIsInNldERlZmF1bHRCaW5kaW5nTW9kZSIsIm9NYW5pZmVzdE1vZGVsIiwiYkVycm9yIiwiZ2V0Vmlld1NldHRpbmdzIiwiYVNwbGl0UGF0aCIsInNwbGl0Iiwic0VudGl0eVNldFBhdGgiLCJyZWR1Y2UiLCJzUGF0aFNvRmFyIiwic05leHRQYXRoUGFydCIsIm9UYXJnZXQiLCJnZXRPYmplY3QiLCJPYmplY3QiLCJrZXlzIiwidHlwZSIsInByZXByb2Nlc3NvcnMiLCJ4bWwiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImNvbnRleHRQYXRoIiwiY29udmVydGVyQ29udGV4dCIsIm9QYWdlTW9kZWwiLCJub1Jlc29sdmUiLCJ2aWV3RGF0YSIsIm1WaWV3RGF0YSIsIm9WaWV3RGF0YU1vZGVsIiwibW9kZWxzIiwibWFuaWZlc3QiLCJpZCIsInZpZXdOYW1lIiwiZ2V0Vmlld05hbWUiLCJjYWNoZSIsImhlaWdodCIsIm9WaWV3U2V0dGluZ3MiLCJjcmVhdGVFcnJvclBhZ2UiLCJyZWFzb24iLCJtZXNzYWdlIiwiZXJyb3JWaWV3TmFtZSIsInJ1bkFzT3duZXIiLCJWaWV3IiwiY3JlYXRlIiwic2V0TW9kZWwiLCJNYW5hZ2VkT2JqZWN0TW9kZWwiLCJzZXRBZ2dyZWdhdGlvbiIsImdldFNlcnZpY2UiLCJvUm91dGluZ1NlcnZpY2UiLCJvVGFyZ2V0SW5mbyIsIm1PdXRib3VuZHMiLCJjcm9zc05hdmlnYXRpb24iLCJvdXRib3VuZHMiLCJtTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb24iLCJuYXZpZ2F0aW9uT2JqZWN0S2V5IiwibmF2aWdhdGlvbk9iamVjdCIsIm91dGJvdW5kQ29uZmlnIiwiZGV0YWlsIiwib3V0Ym91bmQiLCJvdXRib3VuZERldGFpbCIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwicGFyYW1ldGVycyIsIm5hdmlnYXRpb24iLCJ2aWV3TGV2ZWwiLCJjb250ZW50RGVuc2l0aWVzIiwicmVzb3VyY2VCdW5kbGUiLCJfX2J1bmRsZSIsImlzRGVza3RvcCIsInN5c3RlbSIsImRlc2t0b3AiLCJpc1Bob25lIiwicGhvbmUiLCJnZXRWaWV3RGF0YSIsImFzc2lnbiIsInNoZWxsQ29udGVudERlbnNpdHkiLCJnZXRDb250ZW50RGVuc2l0eSIsInVzZU5ld0xhenlMb2FkaW5nIiwiVXJpUGFyYW1ldGVycyIsImZyb21RdWVyeSIsIndpbmRvdyIsImxvY2F0aW9uIiwic2VhcmNoIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsImZvcm0iLCJjb250cm9sQ29uZmlndXJhdGlvbiIsInNBbm5vdGF0aW9uUGF0aCIsImluZGV4T2YiLCJzVGFyZ2V0QW5ub3RhdGlvblBhdGgiLCJyZXNvbHZlRHluYW1pY0V4cHJlc3Npb24iLCJjb252ZXJ0VHlwZXMiLCJUZW1wbGF0ZU1vZGVsIiwib0RpYWdub3N0aWNzIiwiZ2V0RGlhZ25vc3RpY3MiLCJpSXNzdWVDb3VudCIsImdldElzc3VlcyIsIm9Db252ZXJ0ZXJQYWdlTW9kZWwiLCJjb252ZXJ0UGFnZSIsImFJc3N1ZXMiLCJhQWRkZWRJc3N1ZXMiLCJzbGljZSIsIndhcm5pbmciLCJnZXREYXRhIiwiRXJyb3IiLCJnZXRWaWV3IiwiZ2V0SW50ZXJmYWNlIiwiZXhpdCIsInJlbW92ZUdsb2JhbEluc3RhbmNlIiwiU2VydmljZSIsIlRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeSIsIl9vSW5zdGFuY2VSZWdpc3RyeSIsIm9TZXJ2aWNlQ29udGV4dCIsImlDcmVhdGluZ1ZpZXdzIiwib1RlbXBsYXRlZFZpZXdTZXJ2aWNlIiwiZ2V0TnVtYmVyT2ZWaWV3c0luQ3JlYXRpb25TdGF0ZSIsIlNlcnZpY2VGYWN0b3J5Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7QUFnakJPLGtCQUFnQkEsSUFBaEIsRUFBc0JDLE9BQXRCLEVBQStCO0FBQ3JDLFFBQUk7QUFDSCxVQUFJQyxNQUFNLEdBQUdGLElBQUksRUFBakI7QUFDQSxLQUZELENBRUUsT0FBTUcsQ0FBTixFQUFTO0FBQ1YsYUFBT0YsT0FBTyxDQUFDRSxD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cUI7QUE2TXRCLE87Ozs7O1dBQ0RxSCxPLEdBQUEsbUJBQVU7QUFDVCxhQUFPLEtBQUs1SCxLQUFaO0FBQ0EsSzs7V0FDRDZILFksR0FBQSx3QkFBb0I7QUFDbkIsYUFBTyxJQUFQO0FBQ0EsSzs7V0FDREMsSSxHQUFBLGdCQUFPO0FBQ047QUFDQSxVQUFJLEtBQUtwTCxxQkFBVCxFQUFnQztBQUMvQixhQUFLQSxxQkFBTCxDQUEyQnFELE9BQTNCO0FBQ0E7O0FBQ0QsVUFBSSxLQUFLaEQsb0JBQVQsRUFBK0I7QUFDOUIsYUFBS0Esb0JBQUwsQ0FBMEJnRCxPQUExQjtBQUNBOztBQUNELFdBQUs3RSxRQUFMLENBQWM2TSxvQkFBZDtBQUNBLEs7OztJQS9ZaUNDLE87O01BaVo3QkMsMkI7Ozs7Ozs7Ozs7O2FBQ0xDLGtCLEdBQTJELEU7Ozs7OztZQUUzRDlMLGMsR0FBQSx3QkFBZStMLGVBQWYsRUFBOEU7QUFDN0VGLE1BQUFBLDJCQUEyQixDQUFDRyxjQUE1QjtBQUVBLFVBQU1DLHFCQUFxQixHQUFHLElBQUl2TyxvQkFBSixDQUF5Qm1JLE1BQU0sQ0FBQzZELE1BQVAsQ0FBYztBQUFFM0ssUUFBQUEsT0FBTyxFQUFFO0FBQVgsT0FBZCxFQUFpQ2dOLGVBQWpDLENBQXpCLENBQTlCO0FBQ0EsYUFBT0UscUJBQXFCLENBQUN4SyxXQUF0QixDQUFrQ2hFLElBQWxDLENBQXVDLFlBQVk7QUFDekRvTyxRQUFBQSwyQkFBMkIsQ0FBQ0csY0FBNUI7QUFDQSxlQUFPQyxxQkFBUDtBQUNBLE9BSE0sQ0FBUDtBQUlBLEs7O1lBQ0ROLG9CLEdBQUEsZ0NBQXVCO0FBQ3RCLFdBQUtHLGtCQUFMLEdBQTBCLEVBQTFCO0FBQ0EsSzs7Z0NBQ01JLCtCLEdBQVAsMkNBQXlDO0FBQ3hDLGFBQU9MLDJCQUEyQixDQUFDRyxjQUFuQztBQUNBLEs7OztJQWpCd0NHLGM7O1NBb0IzQk4sMkIiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IFVyaVBhcmFtZXRlcnMgZnJvbSBcInNhcC9iYXNlL3V0aWwvVXJpUGFyYW1ldGVyc1wiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgQ2FjaGVIYW5kbGVyU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9DYWNoZUhhbmRsZXJTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFRlbXBsYXRlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlTW9kZWxcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IENhY2hlTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvY2FjaGUvQ2FjaGVNYW5hZ2VyXCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlSZWdpc3RyeVwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3RNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2Jhc2UvTWFuYWdlZE9iamVjdE1vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBWZXJzaW9uSW5mbyBmcm9tIFwic2FwL3VpL1ZlcnNpb25JbmZvXCI7XG5pbXBvcnQgdHlwZSB7IENvcmVFeCwgU2VydmljZUNvbnRleHQgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgeyByZXNvbHZlRHluYW1pY0V4cHJlc3Npb24gfSBmcm9tIFwiLi4vaGVscGVycy9EeW5hbWljQW5ub3RhdGlvblBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VNb2RlbFNlcnZpY2UgfSBmcm9tIFwiLi9SZXNvdXJjZU1vZGVsU2VydmljZUZhY3RvcnlcIjtcblxudHlwZSBUZW1wbGF0ZWRWaWV3U2VydmljZVNldHRpbmdzID0ge307XG5cbmNsYXNzIFRlbXBsYXRlZFZpZXdTZXJ2aWNlIGV4dGVuZHMgU2VydmljZTxUZW1wbGF0ZWRWaWV3U2VydmljZVNldHRpbmdzPiB7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxhbnk+O1xuXHRvVmlldyE6IFZpZXc7XG5cdG9SZXNvdXJjZU1vZGVsU2VydmljZSE6IFJlc291cmNlTW9kZWxTZXJ2aWNlO1xuXHRvQ2FjaGVIYW5kbGVyU2VydmljZSE6IENhY2hlSGFuZGxlclNlcnZpY2U7XG5cdG9GYWN0b3J5ITogVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5O1xuXHRyZXNvdXJjZU1vZGVsITogdHlwZW9mIFJlc291cmNlTW9kZWw7XG5cdHN0YWJsZUlkITogc3RyaW5nO1xuXHRUZW1wbGF0ZUNvbnZlcnRlcjogYW55O1xuXHRNZXRhTW9kZWxDb252ZXJ0ZXI6IGFueTtcblx0aW5pdCgpIHtcblx0XHRjb25zdCBhU2VydmljZURlcGVuZGVuY2llcyA9IFtdO1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250ZXh0LnNjb3BlT2JqZWN0O1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbXBvbmVudCkgYXMgQXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHNTdGFibGVJZCA9IGAke29BcHBDb21wb25lbnQuZ2V0TWV0YWRhdGEoKS5nZXRDb21wb25lbnROYW1lKCl9Ojoke29BcHBDb21wb25lbnQuZ2V0TG9jYWxJZChvQ29tcG9uZW50LmdldElkKCkpfWA7XG5cdFx0Y29uc3QgYUVuaGFuY2VJMThuID0gb0NvbXBvbmVudC5nZXRFbmhhbmNlSTE4bigpIHx8IFtdO1xuXHRcdGxldCBzQXBwTmFtZXNwYWNlO1xuXHRcdHRoaXMub0ZhY3RvcnkgPSBvQ29udGV4dC5mYWN0b3J5O1xuXHRcdGlmIChhRW5oYW5jZUkxOG4pIHtcblx0XHRcdHNBcHBOYW1lc3BhY2UgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFkYXRhKCkuZ2V0Q29tcG9uZW50TmFtZSgpO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhRW5oYW5jZUkxOG4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Ly8gSW4gb3JkZXIgdG8gc3VwcG9ydCB0ZXh0LXZlcnRpY2FsaXphdGlvbiBhcHBsaWNhdGlvbnMgY2FuIGFsc28gcGFzc3MgYSByZXNvdXJjZSBtb2RlbCBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHQvLyBVSTUgdGFrZXMgY2FyZSBvZiB0ZXh0LXZlcnRpY2FsaXphdGlvbiBmb3IgcmVzb3VyY2UgbW9kZWxzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG5cdFx0XHRcdC8vIEhlbmNlIGNoZWNrIGlmIHRoZSBnaXZlbiBrZXkgaXMgYSByZXNvdXJjZSBtb2RlbCBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHQvLyBpZiBzbyB0aGlzIG1vZGVsIHNob3VsZCBiZSB1c2VkIHRvIGVuaGFuY2UgdGhlIHNhcC5mZSByZXNvdXJjZSBtb2RlbCBzbyBwYXNzIGl0IGFzIGl0IGlzXG5cdFx0XHRcdGNvbnN0IG9SZXNvdXJjZU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNb2RlbChhRW5oYW5jZUkxOG5baV0pO1xuXHRcdFx0XHRpZiAob1Jlc291cmNlTW9kZWwgJiYgb1Jlc291cmNlTW9kZWwuaXNBKFwic2FwLnVpLm1vZGVsLnJlc291cmNlLlJlc291cmNlTW9kZWxcIikpIHtcblx0XHRcdFx0XHRhRW5oYW5jZUkxOG5baV0gPSBvUmVzb3VyY2VNb2RlbDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhRW5oYW5jZUkxOG5baV0gPSBgJHtzQXBwTmFtZXNwYWNlfS4ke2FFbmhhbmNlSTE4bltpXS5yZXBsYWNlKFwiLnByb3BlcnRpZXNcIiwgXCJcIil9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IHNDYWNoZUlkZW50aWZpZXIgPSBgJHtvQXBwQ29tcG9uZW50LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfV8ke3NTdGFibGVJZH1fJHtzYXAudWlcblx0XHRcdC5nZXRDb3JlKClcblx0XHRcdC5nZXRDb25maWd1cmF0aW9uKClcblx0XHRcdC5nZXRMYW5ndWFnZVRhZygpfWA7XG5cdFx0YVNlcnZpY2VEZXBlbmRlbmNpZXMucHVzaChcblx0XHRcdFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkuZ2V0KFwic2FwLmZlLmNvcmUuc2VydmljZXMuUmVzb3VyY2VNb2RlbFNlcnZpY2VcIilcblx0XHRcdFx0LmNyZWF0ZUluc3RhbmNlKHtcblx0XHRcdFx0XHRzY29wZVR5cGU6IFwiY29tcG9uZW50XCIsXG5cdFx0XHRcdFx0c2NvcGVPYmplY3Q6IG9Db21wb25lbnQsXG5cdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdGJ1bmRsZXM6IFtcInNhcC5mZS5jb3JlLm1lc3NhZ2VidW5kbGVcIiwgXCJzYXAuZmUubWFjcm9zLm1lc3NhZ2VidW5kbGVcIiwgXCJzYXAuZmUudGVtcGxhdGVzLm1lc3NhZ2VidW5kbGVcIl0sXG5cdFx0XHRcdFx0XHRlbmhhbmNlSTE4bjogYUVuaGFuY2VJMThuLFxuXHRcdFx0XHRcdFx0bW9kZWxOYW1lOiBcInNhcC5mZS5pMThuXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKChvUmVzb3VyY2VNb2RlbFNlcnZpY2U6IFJlc291cmNlTW9kZWxTZXJ2aWNlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vUmVzb3VyY2VNb2RlbFNlcnZpY2UgPSBvUmVzb3VyY2VNb2RlbFNlcnZpY2U7XG5cdFx0XHRcdFx0cmV0dXJuIG9SZXNvdXJjZU1vZGVsU2VydmljZS5nZXRSZXNvdXJjZU1vZGVsKCk7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGFTZXJ2aWNlRGVwZW5kZW5jaWVzLnB1c2goXG5cdFx0XHRTZXJ2aWNlRmFjdG9yeVJlZ2lzdHJ5LmdldChcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkNhY2hlSGFuZGxlclNlcnZpY2VcIilcblx0XHRcdFx0LmNyZWF0ZUluc3RhbmNlKHtcblx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0Y29tcG9uZW50OiBvQ29tcG9uZW50XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbigob0NhY2hlSGFuZGxlclNlcnZpY2U6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMub0NhY2hlSGFuZGxlclNlcnZpY2UgPSBvQ2FjaGVIYW5kbGVyU2VydmljZTtcblx0XHRcdFx0XHRyZXR1cm4gb0NhY2hlSGFuZGxlclNlcnZpY2UudmFsaWRhdGVDYWNoZUtleShzQ2FjaGVJZGVudGlmaWVyKTtcblx0XHRcdFx0fSlcblx0XHQpO1xuXHRcdGFTZXJ2aWNlRGVwZW5kZW5jaWVzLnB1c2goXG5cdFx0XHQoVmVyc2lvbkluZm8gYXMgYW55KVxuXHRcdFx0XHQubG9hZCgpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvSW5mbzogYW55KSB7XG5cdFx0XHRcdFx0bGV0IHNUaW1lc3RhbXAgPSBcIlwiO1xuXHRcdFx0XHRcdGlmICghb0luZm8ubGlicmFyaWVzKSB7XG5cdFx0XHRcdFx0XHRzVGltZXN0YW1wID0gKHNhcC51aSBhcyBhbnkpLmJ1aWxkaW5mby5idWlsZHRpbWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9JbmZvLmxpYnJhcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChvTGlicmFyeTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdHNUaW1lc3RhbXAgKz0gb0xpYnJhcnkuYnVpbGRUaW1lc3RhbXA7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHNUaW1lc3RhbXA7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFwiPE5PVkFMVUU+XCI7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGxldCBzUGFnZU1vZGVsQ2FjaGVLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gUHJvbWlzZS5hbGwoYVNlcnZpY2VEZXBlbmRlbmNpZXMpXG5cdFx0XHQudGhlbigoYURlcGVuZGVuY2llc1Jlc3VsdDogYW55W10pID0+IHtcblx0XHRcdFx0Y29uc3Qgc0NhY2hlS2V5ID0gYURlcGVuZGVuY2llc1Jlc3VsdFsxXTtcblx0XHRcdFx0Y29uc3Qgc1ZlcnNpb25JbmZvID0gYURlcGVuZGVuY2llc1Jlc3VsdFsyXTtcblx0XHRcdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRcdFx0Y29uc3Qgb1NpZGVFZmZlY3RzU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXG5cdFx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2VzLmluaXRpYWxpemVTaWRlRWZmZWN0cyhvQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkpO1xuXG5cdFx0XHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gY2FjaGUga2V5IHdlIGlnbm9yZSB0aGUgdmlldyBjYWNoZVxuXHRcdFx0XHRzUGFnZU1vZGVsQ2FjaGVLZXkgPSBzQ2FjaGVLZXlcblx0XHRcdFx0XHQ/IGAke3NDYWNoZUtleX0tJHtzVmVyc2lvbkluZm99LSR7c1N0YWJsZUlkfS0ke29TaGVsbFNlcnZpY2VzLmluc3RhbmNlVHlwZX0tcGFnZU1vZGVsYFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYURlcGVuZGVuY2llc1Jlc3VsdC5jb25jYXQoW3RoaXMuX2dldENhY2hlZE1vZGVsKHNQYWdlTW9kZWxDYWNoZUtleSldKSk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKGFEZXBlbmRlbmNpZXNSZXN1bHQ6IGFueVtdKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9SZXNvdXJjZU1vZGVsID0gYURlcGVuZGVuY2llc1Jlc3VsdFswXTtcblx0XHRcdFx0Y29uc3Qgc0NhY2hlS2V5ID0gYURlcGVuZGVuY2llc1Jlc3VsdFsxXTtcblx0XHRcdFx0Y29uc3Qgb1BhZ2VNb2RlbENhY2hlID0gYURlcGVuZGVuY2llc1Jlc3VsdFszXTtcblx0XHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoXG5cdFx0XHRcdFx0XHRbXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCIsIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIl0sXG5cdFx0XHRcdFx0XHQoVGVtcGxhdGVDb252ZXJ0ZXI6IGFueSwgTWV0YU1vZGVsQ29udmVydGVyOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNyZWF0ZVZpZXcoXG5cdFx0XHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRcdHNTdGFibGVJZCxcblx0XHRcdFx0XHRcdFx0XHRcdHNDYWNoZUtleSxcblx0XHRcdFx0XHRcdFx0XHRcdHNQYWdlTW9kZWxDYWNoZUtleSxcblx0XHRcdFx0XHRcdFx0XHRcdG9QYWdlTW9kZWxDYWNoZSxcblx0XHRcdFx0XHRcdFx0XHRcdFRlbXBsYXRlQ29udmVydGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0TWV0YU1vZGVsQ29udmVydGVyXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChzQ2FjaGVLZXk6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvQ2FjaGVIYW5kbGVyU2VydmljZSA9IFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkuZ2V0KFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ2FjaGVIYW5kbGVyU2VydmljZVwiKS5nZXRJbnN0YW5jZShvTWV0YU1vZGVsKTtcblx0XHRcdFx0b0NhY2hlSGFuZGxlclNlcnZpY2UuaW52YWxpZGF0ZUlmTmVlZGVkKHNDYWNoZUtleSwgc0NhY2hlSWRlbnRpZmllcik7XG5cdFx0XHR9KTtcblx0fVxuXHRfZ2V0Q2FjaGVkTW9kZWwoc0NhY2hlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0XHRpZiAoc0NhY2hlS2V5ICYmIChDb3JlIGFzIENvcmVFeCkuZ2V0Q29uZmlndXJhdGlvbigpLmdldFZpZXdDYWNoZSgpKSB7XG5cdFx0XHRyZXR1cm4gQ2FjaGVNYW5hZ2VyLmdldChzQ2FjaGVLZXkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdF9zZXRDYWNoZWRNb2RlbChzQ2FjaGVLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCwgb0NhY2hlTW9kZWw6IGFueSkge1xuXHRcdGlmIChzQ2FjaGVLZXkgJiYgKENvcmUgYXMgQ29yZUV4KS5nZXRDb25maWd1cmF0aW9uKCkuZ2V0Vmlld0NhY2hlKCkpIHtcblx0XHRcdENhY2hlTWFuYWdlci5zZXQoc0NhY2hlS2V5LCBvQ2FjaGVNb2RlbCk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0LyoqXG5cdCAqIFJlZnJlc2ggdGhlIGN1cnJlbnQgdmlldyB1c2luZyB0aGUgc2FtZSBjb25maWd1cmF0aW9uIGFzIGJlZm9yZS5cblx0ICogVGhpcyBpcyB1c2VmdWwgZm9yIG91ciBkZW1va2l0ICFcblx0ICpcblx0ICogQHBhcmFtIG9Db21wb25lbnRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGluZGljYXRpbmcgd2hlbiB0aGUgdmlldyBpcyByZWZyZXNoZWRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHJlZnJlc2hWaWV3KG9Db21wb25lbnQ6IGFueSkge1xuXHRcdGNvbnN0IG9Sb290VmlldyA9IG9Db21wb25lbnQuZ2V0Um9vdENvbnRyb2woKTtcblx0XHRpZiAob1Jvb3RWaWV3KSB7XG5cdFx0XHRvUm9vdFZpZXcuZGVzdHJveSgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vVmlldykge1xuXHRcdFx0dGhpcy5vVmlldy5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmNyZWF0ZVZpZXcodGhpcy5yZXNvdXJjZU1vZGVsLCB0aGlzLnN0YWJsZUlkLCBcIlwiLCBcIlwiLCB1bmRlZmluZWQsIHRoaXMuVGVtcGxhdGVDb252ZXJ0ZXIsIHRoaXMuTWV0YU1vZGVsQ29udmVydGVyKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRvQ29tcG9uZW50Lm9Db250YWluZXIuaW52YWxpZGF0ZSgpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0b0NvbXBvbmVudC5vQ29udGFpbmVyLmludmFsaWRhdGUoKTtcblx0XHRcdFx0TG9nLmVycm9yKG9FcnJvcik7XG5cdFx0XHR9KTtcblx0fVxuXHRhc3luYyBjcmVhdGVWaWV3KFxuXHRcdG9SZXNvdXJjZU1vZGVsOiBhbnksXG5cdFx0c1N0YWJsZUlkOiBhbnksXG5cdFx0c0NhY2hlS2V5OiBhbnksXG5cdFx0c1BhZ2VNb2RlbENhY2hlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0b1BhZ2VNb2RlbENhY2hlOiBhbnksXG5cdFx0VGVtcGxhdGVDb252ZXJ0ZXI6IGFueSxcblx0XHRNZXRhTW9kZWxDb252ZXJ0ZXI6IGFueVxuXHQpOiBQcm9taXNlPGFueSB8IHZvaWQ+IHtcblx0XHR0aGlzLnJlc291cmNlTW9kZWwgPSBvUmVzb3VyY2VNb2RlbDtcblx0XHR0aGlzLnN0YWJsZUlkID0gc1N0YWJsZUlkO1xuXHRcdHRoaXMuVGVtcGxhdGVDb252ZXJ0ZXIgPSBUZW1wbGF0ZUNvbnZlcnRlcjtcblx0XHR0aGlzLk1ldGFNb2RlbENvbnZlcnRlciA9IE1ldGFNb2RlbENvbnZlcnRlcjtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGNvbnN0IG1TZXJ2aWNlU2V0dGluZ3MgPSBvQ29udGV4dC5zZXR0aW5ncztcblx0XHRjb25zdCBzQ29udmVydGVyVHlwZSA9IG1TZXJ2aWNlU2V0dGluZ3MuY29udmVydGVyVHlwZTtcblx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3Q7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db21wb25lbnQpIGFzIEFwcENvbXBvbmVudDtcblx0XHRjb25zdCBzRnVsbENvbnRleHRQYXRoID0gb0FwcENvbXBvbmVudC5nZXRSb3V0aW5nU2VydmljZSgpLmdldFRhcmdldEluZm9ybWF0aW9uRm9yKG9Db21wb25lbnQpLm9wdGlvbnMuc2V0dGluZ3MuZnVsbENvbnRleHRQYXRoO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG9NYW5pZmVzdENvbnRlbnQ6IGFueSA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3QoKTtcblx0XHRjb25zdCBvRGV2aWNlTW9kZWwgPSBuZXcgSlNPTk1vZGVsKERldmljZSkuc2V0RGVmYXVsdEJpbmRpbmdNb2RlKFwiT25lV2F5XCIpO1xuXHRcdGNvbnN0IG9NYW5pZmVzdE1vZGVsID0gbmV3IEpTT05Nb2RlbChvTWFuaWZlc3RDb250ZW50KTtcblx0XHRjb25zdCBiRXJyb3IgPSBmYWxzZTtcblx0XHRsZXQgb1BhZ2VNb2RlbDogVGVtcGxhdGVNb2RlbCwgb1ZpZXdEYXRhTW9kZWw6IE1vZGVsLCBvVmlld1NldHRpbmdzOiBhbnksIG1WaWV3RGF0YTogYW55O1xuXG5cdFx0ZnVuY3Rpb24gZ2V0Vmlld1NldHRpbmdzKCkge1xuXHRcdFx0Y29uc3QgYVNwbGl0UGF0aCA9IHNGdWxsQ29udGV4dFBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBhU3BsaXRQYXRoLnJlZHVjZShmdW5jdGlvbiAoc1BhdGhTb0ZhcjogYW55LCBzTmV4dFBhdGhQYXJ0OiBhbnkpIHtcblx0XHRcdFx0aWYgKHNOZXh0UGF0aFBhcnQgPT09IFwiXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gc1BhdGhTb0Zhcjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc1BhdGhTb0ZhciA9PT0gXCJcIikge1xuXHRcdFx0XHRcdHNQYXRoU29GYXIgPSBgLyR7c05leHRQYXRoUGFydH1gO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IG9UYXJnZXQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGF0aFNvRmFyfS8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy8ke3NOZXh0UGF0aFBhcnR9YCk7XG5cdFx0XHRcdFx0aWYgKG9UYXJnZXQgJiYgT2JqZWN0LmtleXMob1RhcmdldCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0c1BhdGhTb0ZhciArPSBcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzUGF0aFNvRmFyICs9IGAvJHtzTmV4dFBhdGhQYXJ0fWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNQYXRoU29GYXI7XG5cdFx0XHR9LCBcIlwiKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6IFwiWE1MXCIsXG5cdFx0XHRcdHByZXByb2Nlc3NvcnM6IHtcblx0XHRcdFx0XHR4bWw6IHtcblx0XHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IHNFbnRpdHlTZXRQYXRoID8gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRW50aXR5U2V0UGF0aCkgOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRmdWxsQ29udGV4dFBhdGg6IHNGdWxsQ29udGV4dFBhdGggPyBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdWxsQ29udGV4dFBhdGgpIDogbnVsbCxcblx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IHNGdWxsQ29udGV4dFBhdGggPyBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdWxsQ29udGV4dFBhdGgpIDogbnVsbCxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogb1BhZ2VNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiwgdW5kZWZpbmVkLCB7IG5vUmVzb2x2ZTogdHJ1ZSB9KSxcblx0XHRcdFx0XHRcdFx0dmlld0RhdGE6IG1WaWV3RGF0YSA/IG9WaWV3RGF0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSA6IG51bGxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRmdWxsQ29udGV4dFBhdGg6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcInNhcC5mZS5pMThuXCI6IG9SZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdFwiZGV2aWNlXCI6IG9EZXZpY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0bWFuaWZlc3Q6IG9NYW5pZmVzdE1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBvUGFnZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHR2aWV3RGF0YTogb1ZpZXdEYXRhTW9kZWxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhcHBDb21wb25lbnQ6IG9BcHBDb21wb25lbnRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGlkOiBzU3RhYmxlSWQsXG5cdFx0XHRcdHZpZXdOYW1lOiBtU2VydmljZVNldHRpbmdzLnZpZXdOYW1lIHx8IG9Db21wb25lbnQuZ2V0Vmlld05hbWUoKSxcblx0XHRcdFx0dmlld0RhdGE6IG1WaWV3RGF0YSxcblx0XHRcdFx0Y2FjaGU6IHsga2V5czogW3NDYWNoZUtleV0gfSxcblx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XCJzYXAuZmUuaTE4blwiOiBvUmVzb3VyY2VNb2RlbFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRoZWlnaHQ6IFwiMTAwJVwiXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRjb25zdCBjcmVhdGVFcnJvclBhZ2UgPSAocmVhc29uOiBhbnkpID0+IHtcblx0XHRcdC8vIGp1c3QgcmVwbGFjZSB0aGUgdmlldyBuYW1lIGFuZCBhZGQgYW4gYWRkaXRpb25hbCBtb2RlbCBjb250YWluaW5nIHRoZSByZWFzb24sIGJ1dFxuXHRcdFx0Ly8ga2VlcCB0aGUgb3RoZXIgc2V0dGluZ3Ncblx0XHRcdExvZy5lcnJvcihyZWFzb24ubWVzc2FnZSwgcmVhc29uKTtcblx0XHRcdG9WaWV3U2V0dGluZ3Mudmlld05hbWUgPSBtU2VydmljZVNldHRpbmdzLmVycm9yVmlld05hbWUgfHwgXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy52aWV3LlRlbXBsYXRpbmdFcnJvclBhZ2VcIjtcblx0XHRcdG9WaWV3U2V0dGluZ3MucHJlcHJvY2Vzc29ycy54bWwubW9kZWxzW1wiZXJyb3JcIl0gPSBuZXcgSlNPTk1vZGVsKHJlYXNvbik7XG5cblx0XHRcdHJldHVybiBvQ29tcG9uZW50LnJ1bkFzT3duZXIoKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gVmlldy5jcmVhdGUob1ZpZXdTZXR0aW5ncykudGhlbigob1ZpZXc6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMub1ZpZXcgPSBvVmlldztcblx0XHRcdFx0XHR0aGlzLm9WaWV3LnNldE1vZGVsKG5ldyBNYW5hZ2VkT2JqZWN0TW9kZWwodGhpcy5vVmlldyksIFwiJHZpZXdcIik7XG5cdFx0XHRcdFx0b0NvbXBvbmVudC5zZXRBZ2dyZWdhdGlvbihcInJvb3RDb250cm9sXCIsIHRoaXMub1ZpZXcpO1xuXHRcdFx0XHRcdHJldHVybiBzQ2FjaGVLZXk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBvUm91dGluZ1NlcnZpY2UgPSBhd2FpdCBvQXBwQ29tcG9uZW50LmdldFNlcnZpY2UoXCJyb3V0aW5nU2VydmljZVwiKTtcblx0XHRcdC8vIFJldHJpZXZlIHRoZSB2aWV3TGV2ZWwgZm9yIHRoZSBjb21wb25lbnRcblx0XHRcdGNvbnN0IG9UYXJnZXRJbmZvID0gb1JvdXRpbmdTZXJ2aWNlLmdldFRhcmdldEluZm9ybWF0aW9uRm9yKG9Db21wb25lbnQpO1xuXHRcdFx0Y29uc3QgbU91dGJvdW5kcyA9XG5cdFx0XHRcdG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuYXBwXCJdICYmXG5cdFx0XHRcdG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuYXBwXCJdLmNyb3NzTmF2aWdhdGlvbiAmJlxuXHRcdFx0XHRvTWFuaWZlc3RDb250ZW50W1wic2FwLmFwcFwiXS5jcm9zc05hdmlnYXRpb24ub3V0Ym91bmRzO1xuXHRcdFx0Y29uc3QgbU5hdmlnYXRpb24gPSBvQ29tcG9uZW50LmdldE5hdmlnYXRpb24oKSB8fCB7fTtcblx0XHRcdE9iamVjdC5rZXlzKG1OYXZpZ2F0aW9uKS5mb3JFYWNoKGZ1bmN0aW9uIChuYXZpZ2F0aW9uT2JqZWN0S2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvbk9iamVjdCA9IG1OYXZpZ2F0aW9uW25hdmlnYXRpb25PYmplY3RLZXldO1xuXHRcdFx0XHRsZXQgb3V0Ym91bmRDb25maWc7XG5cdFx0XHRcdGlmIChuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbCAmJiBuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbC5vdXRib3VuZCAmJiBtT3V0Ym91bmRzW25hdmlnYXRpb25PYmplY3QuZGV0YWlsLm91dGJvdW5kXSkge1xuXHRcdFx0XHRcdG91dGJvdW5kQ29uZmlnID0gbU91dGJvdW5kc1tuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbC5vdXRib3VuZF07XG5cdFx0XHRcdFx0bmF2aWdhdGlvbk9iamVjdC5kZXRhaWwub3V0Ym91bmREZXRhaWwgPSB7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb3V0Ym91bmRDb25maWcuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IG91dGJvdW5kQ29uZmlnLmFjdGlvbixcblx0XHRcdFx0XHRcdHBhcmFtZXRlcnM6IG91dGJvdW5kQ29uZmlnLnBhcmFtZXRlcnNcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChuYXZpZ2F0aW9uT2JqZWN0LmNyZWF0ZSAmJiBuYXZpZ2F0aW9uT2JqZWN0LmNyZWF0ZS5vdXRib3VuZCAmJiBtT3V0Ym91bmRzW25hdmlnYXRpb25PYmplY3QuY3JlYXRlLm91dGJvdW5kXSkge1xuXHRcdFx0XHRcdG91dGJvdW5kQ29uZmlnID0gbU91dGJvdW5kc1tuYXZpZ2F0aW9uT2JqZWN0LmNyZWF0ZS5vdXRib3VuZF07XG5cdFx0XHRcdFx0bmF2aWdhdGlvbk9iamVjdC5jcmVhdGUub3V0Ym91bmREZXRhaWwgPSB7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb3V0Ym91bmRDb25maWcuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IG91dGJvdW5kQ29uZmlnLmFjdGlvbixcblx0XHRcdFx0XHRcdHBhcmFtZXRlcnM6IG91dGJvdW5kQ29uZmlnLnBhcmFtZXRlcnNcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdG1WaWV3RGF0YSA9IHtcblx0XHRcdFx0bmF2aWdhdGlvbjogbU5hdmlnYXRpb24sXG5cdFx0XHRcdHZpZXdMZXZlbDogb1RhcmdldEluZm8udmlld0xldmVsLFxuXHRcdFx0XHRzdGFibGVJZDogc1N0YWJsZUlkLFxuXHRcdFx0XHRjb250ZW50RGVuc2l0aWVzOiBvTWFuaWZlc3RDb250ZW50W1wic2FwLnVpNVwiXS5jb250ZW50RGVuc2l0aWVzLFxuXHRcdFx0XHRyZXNvdXJjZUJ1bmRsZTogb1Jlc291cmNlTW9kZWwuX19idW5kbGUsXG5cdFx0XHRcdGZ1bGxDb250ZXh0UGF0aDogc0Z1bGxDb250ZXh0UGF0aCxcblx0XHRcdFx0aXNEZXNrdG9wOiAoRGV2aWNlIGFzIGFueSkuc3lzdGVtLmRlc2t0b3AsXG5cdFx0XHRcdGlzUGhvbmU6IChEZXZpY2UgYXMgYW55KS5zeXN0ZW0ucGhvbmVcblx0XHRcdH07XG5cblx0XHRcdGlmIChvQ29tcG9uZW50LmdldFZpZXdEYXRhKSB7XG5cdFx0XHRcdE9iamVjdC5hc3NpZ24obVZpZXdEYXRhLCBvQ29tcG9uZW50LmdldFZpZXdEYXRhKCkpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlcyA9IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdFx0bVZpZXdEYXRhLmNvbnZlcnRlclR5cGUgPSBzQ29udmVydGVyVHlwZTtcblx0XHRcdG1WaWV3RGF0YS5zaGVsbENvbnRlbnREZW5zaXR5ID0gb1NoZWxsU2VydmljZXMuZ2V0Q29udGVudERlbnNpdHkoKTtcblx0XHRcdG1WaWV3RGF0YS51c2VOZXdMYXp5TG9hZGluZyA9IFVyaVBhcmFtZXRlcnMuZnJvbVF1ZXJ5KHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldChcInNhcC1mZS14eC1sYXp5bG9hZGluZ3Rlc3RcIikgPT09IFwidHJ1ZVwiO1xuXHRcdFx0bVZpZXdEYXRhLnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgPVxuXHRcdFx0XHRvTWFuaWZlc3RDb250ZW50W1wic2FwLmZlXCJdICYmIG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl0uZm9ybVxuXHRcdFx0XHRcdD8gb01hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXS5mb3JtLnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Rcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdG9WaWV3RGF0YU1vZGVsID0gbmV3IEpTT05Nb2RlbChtVmlld0RhdGEpO1xuXHRcdFx0aWYgKG1WaWV3RGF0YSAmJiBtVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24pIHtcblx0XHRcdFx0T2JqZWN0LmtleXMobVZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uKS5mb3JFYWNoKGZ1bmN0aW9uIChzQW5ub3RhdGlvblBhdGg6IHN0cmluZykge1xuXHRcdFx0XHRcdGlmIChzQW5ub3RhdGlvblBhdGguaW5kZXhPZihcIltcIikgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzVGFyZ2V0QW5ub3RhdGlvblBhdGggPSByZXNvbHZlRHluYW1pY0V4cHJlc3Npb24oc0Fubm90YXRpb25QYXRoLCBvTWV0YU1vZGVsKTtcblx0XHRcdFx0XHRcdG1WaWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbltzVGFyZ2V0QW5ub3RhdGlvblBhdGhdID0gbVZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uW3NBbm5vdGF0aW9uUGF0aF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdE1ldGFNb2RlbENvbnZlcnRlci5jb252ZXJ0VHlwZXMob01ldGFNb2RlbCwgb0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpKTtcblx0XHRcdG9QYWdlTW9kZWwgPSBuZXcgVGVtcGxhdGVNb2RlbCgoKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0aWYgKG9QYWdlTW9kZWxDYWNoZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9QYWdlTW9kZWxDYWNoZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0RpYWdub3N0aWNzID0gb0FwcENvbXBvbmVudC5nZXREaWFnbm9zdGljcygpO1xuXHRcdFx0XHRcdFx0Y29uc3QgaUlzc3VlQ291bnQgPSBvRGlhZ25vc3RpY3MuZ2V0SXNzdWVzKCkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0NvbnZlcnRlclBhZ2VNb2RlbCA9IFRlbXBsYXRlQ29udmVydGVyLmNvbnZlcnRQYWdlKFxuXHRcdFx0XHRcdFx0XHRzQ29udmVydGVyVHlwZSxcblx0XHRcdFx0XHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0bVZpZXdEYXRhLFxuXHRcdFx0XHRcdFx0XHRvRGlhZ25vc3RpY3MsXG5cdFx0XHRcdFx0XHRcdHNGdWxsQ29udGV4dFBhdGgsXG5cdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgYUlzc3VlcyA9IG9EaWFnbm9zdGljcy5nZXRJc3N1ZXMoKTtcblx0XHRcdFx0XHRcdGNvbnN0IGFBZGRlZElzc3VlcyA9IGFJc3N1ZXMuc2xpY2UoaUlzc3VlQ291bnQpO1xuXHRcdFx0XHRcdFx0aWYgKGFBZGRlZElzc3Vlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XHRcdFx0XHRcdFwiU29tZSBpc3N1ZXMgaGF2ZSBiZWVuIGRldGVjdGVkIGluIHlvdXIgcHJvamVjdCwgcGxlYXNlIGNoZWNrIHRoZSBVSTUgc3VwcG9ydCBhc3Npc3RhbnQgcnVsZSBmb3Igc2FwLmZlLmNvcmVcIlxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIG9Db252ZXJ0ZXJQYWdlTW9kZWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBhbnksIGVycm9yIGFzIGFueSk7XG5cdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHR9XG5cdFx0XHR9LCBvTWV0YU1vZGVsKTtcblxuXHRcdFx0aWYgKCFiRXJyb3IpIHtcblx0XHRcdFx0b1ZpZXdTZXR0aW5ncyA9IGdldFZpZXdTZXR0aW5ncygpO1xuXHRcdFx0XHQvLyBTZXR0aW5nIHRoZSBwYWdlTW9kZWwgb24gdGhlIGNvbXBvbmVudCBmb3IgcG90ZW50aWFsIHJldXNlXG5cdFx0XHRcdG9Db21wb25lbnQuc2V0TW9kZWwob1BhZ2VNb2RlbCwgXCJfcGFnZU1vZGVsXCIpO1xuXHRcdFx0XHRyZXR1cm4gb0NvbXBvbmVudC5ydW5Bc093bmVyKCgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gVmlldy5jcmVhdGUob1ZpZXdTZXR0aW5ncylcblx0XHRcdFx0XHRcdC5jYXRjaChjcmVhdGVFcnJvclBhZ2UpXG5cdFx0XHRcdFx0XHQudGhlbigob1ZpZXc6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLm9WaWV3ID0gb1ZpZXc7XG5cdFx0XHRcdFx0XHRcdHRoaXMub1ZpZXcuc2V0TW9kZWwobmV3IE1hbmFnZWRPYmplY3RNb2RlbCh0aGlzLm9WaWV3KSwgXCIkdmlld1wiKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5vVmlldy5zZXRNb2RlbChvVmlld0RhdGFNb2RlbCwgXCJ2aWV3RGF0YVwiKTtcblx0XHRcdFx0XHRcdFx0b0NvbXBvbmVudC5zZXRBZ2dyZWdhdGlvbihcInJvb3RDb250cm9sXCIsIHRoaXMub1ZpZXcpO1xuXHRcdFx0XHRcdFx0XHQvLyBGaXJlIGFuZCBmb3JnZXQgaW4gdGhlIGNhY2hlXG5cdFx0XHRcdFx0XHRcdGlmICghb1BhZ2VNb2RlbENhY2hlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fc2V0Q2FjaGVkTW9kZWwoc1BhZ2VNb2RlbENhY2hlS2V5LCAob1BhZ2VNb2RlbCBhcyBhbnkpLmdldERhdGEoKSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNDYWNoZUtleTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IExvZy5lcnJvcihlLm1lc3NhZ2UsIGUpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLmVycm9yKGVycm9yLm1lc3NhZ2UsIGVycm9yKTtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgdmlldyA6ICR7ZXJyb3J9YCk7XG5cdFx0fVxuXHR9XG5cdGdldFZpZXcoKSB7XG5cdFx0cmV0dXJuIHRoaXMub1ZpZXc7XG5cdH1cblx0Z2V0SW50ZXJmYWNlKCk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0ZXhpdCgpIHtcblx0XHQvLyBEZXJlZ2lzdGVyIGdsb2JhbCBpbnN0YW5jZVxuXHRcdGlmICh0aGlzLm9SZXNvdXJjZU1vZGVsU2VydmljZSkge1xuXHRcdFx0dGhpcy5vUmVzb3VyY2VNb2RlbFNlcnZpY2UuZGVzdHJveSgpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5vQ2FjaGVIYW5kbGVyU2VydmljZSkge1xuXHRcdFx0dGhpcy5vQ2FjaGVIYW5kbGVyU2VydmljZS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdHRoaXMub0ZhY3RvcnkucmVtb3ZlR2xvYmFsSW5zdGFuY2UoKTtcblx0fVxufVxuY2xhc3MgVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8VGVtcGxhdGVkVmlld1NlcnZpY2VTZXR0aW5ncz4ge1xuXHRfb0luc3RhbmNlUmVnaXN0cnk6IFJlY29yZDxzdHJpbmcsIFRlbXBsYXRlZFZpZXdTZXJ2aWNlPiA9IHt9O1xuXHRzdGF0aWMgaUNyZWF0aW5nVmlld3M6IDA7XG5cdGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8VGVtcGxhdGVkVmlld1NlcnZpY2VTZXR0aW5ncz4pIHtcblx0XHRUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkuaUNyZWF0aW5nVmlld3MrKztcblxuXHRcdGNvbnN0IG9UZW1wbGF0ZWRWaWV3U2VydmljZSA9IG5ldyBUZW1wbGF0ZWRWaWV3U2VydmljZShPYmplY3QuYXNzaWduKHsgZmFjdG9yeTogdGhpcyB9LCBvU2VydmljZUNvbnRleHQpKTtcblx0XHRyZXR1cm4gb1RlbXBsYXRlZFZpZXdTZXJ2aWNlLmluaXRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0VGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LmlDcmVhdGluZ1ZpZXdzLS07XG5cdFx0XHRyZXR1cm4gb1RlbXBsYXRlZFZpZXdTZXJ2aWNlO1xuXHRcdH0pO1xuXHR9XG5cdHJlbW92ZUdsb2JhbEluc3RhbmNlKCkge1xuXHRcdHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5ID0ge307XG5cdH1cblx0c3RhdGljIGdldE51bWJlck9mVmlld3NJbkNyZWF0aW9uU3RhdGUoKSB7XG5cdFx0cmV0dXJuIFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeS5pQ3JlYXRpbmdWaWV3cztcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3Rvcnk7XG4iXX0=
|