@sapui5/sap.fe.core 1.96.6 → 1.96.7

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.core",
3
- "version": "1.96.6",
3
+ "version": "1.96.7",
4
4
  "description": "SAPUI5 Library sap.fe.core",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "SAP SE (https://www.sap.com)",
@@ -6,7 +6,7 @@
6
6
  <copyright>SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.96.6</version>
9
+ <version>1.96.7</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.core</documentation>
12
12
 
@@ -106,7 +106,7 @@ sap.ui.define(
106
106
  interfaces: [],
107
107
  controls: [],
108
108
  elements: [],
109
- version: "1.96.6",
109
+ version: "1.96.7",
110
110
  noLibraryCSS: true,
111
111
  extensions: {
112
112
  //Configuration used for rule loading of Support Assistant
@@ -19,7 +19,7 @@ sap.ui.define(
19
19
  "sap/fe/core/actions/messageHandling",
20
20
  "sap/fe/core/controllerextensions/Placeholder"
21
21
  ],
22
- function(
22
+ function (
23
23
  Service,
24
24
  ServiceFactory,
25
25
  Component,
@@ -50,7 +50,7 @@ sap.ui.define(
50
50
  /**
51
51
  * Initialize the routing service.
52
52
  */
53
- init: function() {
53
+ init: function () {
54
54
  var that = this;
55
55
  var oContext = this.getContext();
56
56
  if (oContext.scopeType === "component") {
@@ -71,11 +71,11 @@ sap.ui.define(
71
71
 
72
72
  this.initPromise = Promise.resolve(that);
73
73
  },
74
- beforeExit: function() {
74
+ beforeExit: function () {
75
75
  this.oRouter.detachRouteMatched(this._fnOnRouteMatched);
76
76
  this.eventProvider.fireEvent("routeMatched", {});
77
77
  },
78
- exit: function() {
78
+ exit: function () {
79
79
  this.eventProvider.destroy();
80
80
  },
81
81
 
@@ -86,13 +86,13 @@ sap.ui.define(
86
86
  * @param {object} oRootViewConfig The root view configuration from the manifest
87
87
  * @private
88
88
  */
89
- _parseRoutingConfiguration: function(oRoutingConfig, oRootViewConfig) {
89
+ _parseRoutingConfiguration: function (oRoutingConfig, oRootViewConfig) {
90
90
  var that = this,
91
91
  isFCL = oRootViewConfig && oRootViewConfig.viewName === "sap.fe.templates.RootContainer.view.Fcl";
92
92
 
93
93
  // Information of targets
94
94
  this._mTargets = {};
95
- Object.keys(oRoutingConfig.targets).forEach(function(sTargetName) {
95
+ Object.keys(oRoutingConfig.targets).forEach(function (sTargetName) {
96
96
  that._mTargets[sTargetName] = Object.assign({ targetName: sTargetName }, oRoutingConfig.targets[sTargetName]);
97
97
 
98
98
  // View level for FCL cases is calculated from the target pattern
@@ -151,7 +151,7 @@ sap.ui.define(
151
151
  that._mTargets[aRouteTargets[0]].FCLLevel = 3;
152
152
  } else {
153
153
  // Other FCL cases
154
- aRouteTargets.forEach(function(sTargetName) {
154
+ aRouteTargets.forEach(function (sTargetName) {
155
155
  switch (that._mTargets[sTargetName].controlAggregation) {
156
156
  case "beginColumnPages":
157
157
  that._mTargets[sTargetName].FCLLevel = 0;
@@ -169,7 +169,7 @@ sap.ui.define(
169
169
  }
170
170
 
171
171
  // Propagate viewLevel, contextPattern, FCLLevel and controlAggregation to parent targets
172
- Object.keys(that._mTargets).forEach(function(sTargetName) {
172
+ Object.keys(that._mTargets).forEach(function (sTargetName) {
173
173
  while (that._mTargets[sTargetName].parent) {
174
174
  var sParentTargetName = that._mTargets[sTargetName].parent;
175
175
  that._mTargets[sParentTargetName].viewLevel =
@@ -223,13 +223,13 @@ sap.ui.define(
223
223
 
224
224
  // We need to establish the correct path to the different pages, including the navigation properties
225
225
  Object.keys(that._mTargets)
226
- .map(function(sTargetKey) {
226
+ .map(function (sTargetKey) {
227
227
  return that._mTargets[sTargetKey];
228
228
  })
229
- .sort(function(a, b) {
229
+ .sort(function (a, b) {
230
230
  return a.viewLevel < b.viewLevel ? -1 : 1;
231
231
  })
232
- .forEach(function(target) {
232
+ .forEach(function (target) {
233
233
  // After sorting the targets per level we can then go through their navigation object and update the paths accordingly.
234
234
  if (target.options) {
235
235
  var settings = target.options.settings;
@@ -241,11 +241,11 @@ sap.ui.define(
241
241
  settings.fullContextPath = sContextPath + "/";
242
242
  }
243
243
  }
244
- Object.keys(settings.navigation || {}).forEach(function(sNavName) {
244
+ Object.keys(settings.navigation || {}).forEach(function (sNavName) {
245
245
  // Check if it's a navigation property
246
246
  var targetRoute = that._mRoutes[settings.navigation[sNavName].detail.route];
247
247
  if (targetRoute && targetRoute.targets) {
248
- targetRoute.targets.forEach(function(sTargetName) {
248
+ targetRoute.targets.forEach(function (sTargetName) {
249
249
  if (
250
250
  that._mTargets[sTargetName].options &&
251
251
  that._mTargets[sTargetName].options.settings &&
@@ -273,7 +273,7 @@ sap.ui.define(
273
273
  * @param {number} viewLevel The current level of view
274
274
  * @returns {number} The level
275
275
  */
276
- _getViewLevelFromPattern: function(sPattern, viewLevel) {
276
+ _getViewLevelFromPattern: function (sPattern, viewLevel) {
277
277
  sPattern = sPattern.replace(":?query:", "");
278
278
  var regex = new RegExp("/[^/]*$");
279
279
  if (sPattern && sPattern[0] !== "/" && sPattern[0] !== "?") {
@@ -291,15 +291,15 @@ sap.ui.define(
291
291
  }
292
292
  },
293
293
 
294
- _getRouteInformation: function(sRouteName) {
294
+ _getRouteInformation: function (sRouteName) {
295
295
  return this._mRoutes[sRouteName];
296
296
  },
297
297
 
298
- _getTargetInformation: function(sTargetName) {
298
+ _getTargetInformation: function (sTargetName) {
299
299
  return this._mTargets[sTargetName];
300
300
  },
301
301
 
302
- _getComponentId: function(sOwnerId, sComponentId) {
302
+ _getComponentId: function (sOwnerId, sComponentId) {
303
303
  if (sComponentId.indexOf(sOwnerId + "---") === 0) {
304
304
  return sComponentId.substr(sOwnerId.length + 3);
305
305
  }
@@ -312,11 +312,11 @@ sap.ui.define(
312
312
  * @param {object} oComponentInstance Instance of the component
313
313
  * @returns {object} The configuration for the target
314
314
  */
315
- getTargetInformationFor: function(oComponentInstance) {
315
+ getTargetInformationFor: function (oComponentInstance) {
316
316
  var sTargetComponentId = this._getComponentId(oComponentInstance._sOwnerId, oComponentInstance.getId());
317
317
  var that = this;
318
318
  var sCorrectTargetName = null;
319
- Object.keys(this._mTargets).forEach(function(sTargetName) {
319
+ Object.keys(this._mTargets).forEach(function (sTargetName) {
320
320
  if (
321
321
  that._mTargets[sTargetName].id === sTargetComponentId ||
322
322
  that._mTargets[sTargetName].viewId === sTargetComponentId
@@ -327,17 +327,17 @@ sap.ui.define(
327
327
  return this._getTargetInformation(sCorrectTargetName);
328
328
  },
329
329
 
330
- getLastSemanticMapping: function() {
330
+ getLastSemanticMapping: function () {
331
331
  return this.oLastSemanticMapping;
332
332
  },
333
333
 
334
- setLastSemanticMapping: function(oMapping) {
334
+ setLastSemanticMapping: function (oMapping) {
335
335
  this.oLastSemanticMapping = oMapping;
336
336
  },
337
337
 
338
- navigateTo: function(oContext, sRouteName, mParameterMapping, bPreserveHistory) {
338
+ navigateTo: function (oContext, sRouteName, mParameterMapping, bPreserveHistory) {
339
339
  var sTargetURLPromise, bIsStickyMode;
340
- if (oContext.getModel() && oContext.getModel().getMetaModel) {
340
+ if (oContext.getModel() && oContext.getModel().getMetaModel && oContext.getModel().getMetaModel()) {
341
341
  bIsStickyMode = ModelHelper.isStickySessionSupported(oContext.getModel().getMetaModel());
342
342
  }
343
343
  if (!mParameterMapping) {
@@ -345,13 +345,13 @@ sap.ui.define(
345
345
  sTargetURLPromise = Promise.resolve(SemanticKeyHelper.getSemanticPath(oContext));
346
346
  } else {
347
347
  sTargetURLPromise = this.prepareParameters(mParameterMapping, sRouteName, oContext).then(
348
- function(mParameters) {
348
+ function (mParameters) {
349
349
  return this.oRouter.getURL(sRouteName, mParameters);
350
350
  }.bind(this)
351
351
  );
352
352
  }
353
353
  return sTargetURLPromise.then(
354
- function(sTargetURL) {
354
+ function (sTargetURL) {
355
355
  this.oRouterProxy.navToHash(sTargetURL, bPreserveHistory, null, null, !bIsStickyMode);
356
356
  }.bind(this)
357
357
  );
@@ -365,18 +365,18 @@ sap.ui.define(
365
365
  * @param {object} oContext The instance of the binding context
366
366
  * @returns {Promise} A promise which resolves to the routing target parameters
367
367
  */
368
- prepareParameters: function(mParameters, sTargetRoute, oContext) {
368
+ prepareParameters: function (mParameters, sTargetRoute, oContext) {
369
369
  var oParametersPromise;
370
370
  try {
371
371
  var sContextPath = oContext.getPath();
372
372
  var aContextPathParts = sContextPath.split("/");
373
373
  var aAllResolvedParameterPromises = Object.keys(mParameters).map(
374
- function(sParameterKey) {
374
+ function (sParameterKey) {
375
375
  var sParameterMappingExpression = mParameters[sParameterKey];
376
376
  // We assume the defined parameters will be compatible with a binding expression
377
377
  var oParsedExpression = BindingParser.complexParser(sParameterMappingExpression);
378
378
  var aParts = oParsedExpression.parts || [oParsedExpression];
379
- var aResolvedParameterPromises = aParts.map(function(oPathPart) {
379
+ var aResolvedParameterPromises = aParts.map(function (oPathPart) {
380
380
  var aRelativeParts = oPathPart.path.split("../");
381
381
  // We go up the current context path as many times as necessary
382
382
  var aLocalParts = aContextPathParts.slice(0, aContextPathParts.length - aRelativeParts.length + 1);
@@ -385,7 +385,7 @@ sap.ui.define(
385
385
  });
386
386
 
387
387
  return Promise.all(aResolvedParameterPromises).then(
388
- function(aResolvedParameters) {
388
+ function (aResolvedParameters) {
389
389
  var value = oParsedExpression.formatter
390
390
  ? oParsedExpression.formatter.apply(this, aResolvedParameters)
391
391
  : aResolvedParameters.join("");
@@ -395,9 +395,9 @@ sap.ui.define(
395
395
  }.bind(this)
396
396
  );
397
397
 
398
- oParametersPromise = Promise.all(aAllResolvedParameterPromises).then(function(aAllResolvedParameters) {
398
+ oParametersPromise = Promise.all(aAllResolvedParameterPromises).then(function (aAllResolvedParameters) {
399
399
  var oParameters = {};
400
- aAllResolvedParameters.forEach(function(oResolvedParameter) {
400
+ aAllResolvedParameters.forEach(function (oResolvedParameter) {
401
401
  oParameters[oResolvedParameter.key] = oResolvedParameter.value;
402
402
  });
403
403
  return oParameters;
@@ -409,7 +409,7 @@ sap.ui.define(
409
409
  return oParametersPromise;
410
410
  },
411
411
 
412
- _fireRouteMatchEvents: function(mParameters) {
412
+ _fireRouteMatchEvents: function (mParameters) {
413
413
  this.eventProvider.fireEvent("routeMatched", mParameters);
414
414
  this.eventProvider.fireEvent("afterRouteMatched", mParameters);
415
415
 
@@ -438,7 +438,7 @@ sap.ui.define(
438
438
  * @ui5-restricted
439
439
  * @final
440
440
  */
441
- navigateToContext: function(oContext, mParameters, oViewData, oCurrentTargetInfo) {
441
+ navigateToContext: function (oContext, mParameters, oViewData, oCurrentTargetInfo) {
442
442
  var sTargetRoute, oRouteParametersPromise, bIsStickyMode;
443
443
 
444
444
  if (oContext.getModel() && oContext.getModel().getMetaModel) {
@@ -530,7 +530,7 @@ sap.ui.define(
530
530
 
531
531
  if (sTargetRoute && oRouteParametersPromise) {
532
532
  return oRouteParametersPromise.then(
533
- function(oRouteParameters) {
533
+ function (oRouteParameters) {
534
534
  oRouteParameters.bIsStickyMode = bIsStickyMode;
535
535
  this.oRouter.navTo(sTargetRoute, oRouteParameters);
536
536
  return Promise.resolve();
@@ -552,7 +552,7 @@ sap.ui.define(
552
552
  * @param {sap.ui.model.odata.v4.Context} oContext The context
553
553
  * @returns {boolean} `true` or `false` if the current state is impacted or not
554
554
  */
555
- isCurrentStateImpactedBy: function(oContext) {
555
+ isCurrentStateImpactedBy: function (oContext) {
556
556
  var sPath = oContext.getPath();
557
557
 
558
558
  // First, check with the technical path. We have to try it, because for level > 1, we
@@ -576,7 +576,7 @@ sap.ui.define(
576
576
  }
577
577
  },
578
578
 
579
- _findPathToNavigate: function(sPath) {
579
+ _findPathToNavigate: function (sPath) {
580
580
  var regex = new RegExp("/[^/]*$");
581
581
  sPath = sPath.replace(regex, "");
582
582
  if (this.oRouter.match(sPath) || sPath === "") {
@@ -586,7 +586,7 @@ sap.ui.define(
586
586
  }
587
587
  },
588
588
 
589
- _checkContextForSemanticPath: function(oContext) {
589
+ _checkContextForSemanticPath: function (oContext) {
590
590
  var sPath = oContext.getPath();
591
591
 
592
592
  // First, check if this is a level-1 object (path = /aaa(bbb))
@@ -605,7 +605,7 @@ sap.ui.define(
605
605
  return ModelHelper.isDraftSupported(oMetaModel, sPath);
606
606
  },
607
607
 
608
- _getPathFromContext: function(oContext, mParameters) {
608
+ _getPathFromContext: function (oContext, mParameters) {
609
609
  var sPath;
610
610
 
611
611
  if (oContext.isA("sap.ui.model.odata.v4.ODataListBinding") && oContext.isRelative()) {
@@ -647,7 +647,7 @@ sap.ui.define(
647
647
  return sPath;
648
648
  },
649
649
 
650
- _calculateLayout: function(sPath, mParameters) {
650
+ _calculateLayout: function (sPath, mParameters) {
651
651
  var FCLLevel = mParameters.FCLLevel;
652
652
  if (mParameters.updateFCLLevel) {
653
653
  FCLLevel += mParameters.updateFCLLevel;
@@ -665,7 +665,7 @@ sap.ui.define(
665
665
  *
666
666
  * @param {object} oEvent The event
667
667
  */
668
- _beforeRouteMatched: function(oEvent) {
668
+ _beforeRouteMatched: function (oEvent) {
669
669
  var bPlaceholderEnabled = new Placeholder().isPlaceholderEnabled();
670
670
  if (!bPlaceholderEnabled) {
671
671
  var oRootView = this.oAppComponent.getRootControl();
@@ -679,7 +679,7 @@ sap.ui.define(
679
679
  *
680
680
  * @param {object} oEvent The event
681
681
  */
682
- _onRouteMatched: function(oEvent) {
682
+ _onRouteMatched: function (oEvent) {
683
683
  var oAppStateHandler = this.oAppComponent.getAppStateHandler(),
684
684
  oRootView = this.oAppComponent.getRootControl(),
685
685
  that = this;
@@ -713,10 +713,10 @@ sap.ui.define(
713
713
  if (!history.state || history.state.feLevel === undefined) {
714
714
  this.oRouterProxy
715
715
  .restoreHistory()
716
- .then(function() {
716
+ .then(function () {
717
717
  that.oRouterProxy.resolveRouteMatch();
718
718
  })
719
- .catch(function(oError) {
719
+ .catch(function (oError) {
720
720
  Log.error("Error while restoring history", oError);
721
721
  });
722
722
  } else {
@@ -724,44 +724,44 @@ sap.ui.define(
724
724
  }
725
725
  },
726
726
 
727
- attachRouteMatched: function(oData, fnFunction, oListener) {
727
+ attachRouteMatched: function (oData, fnFunction, oListener) {
728
728
  this.eventProvider.attachEvent("routeMatched", oData, fnFunction, oListener);
729
729
  },
730
- detachRouteMatched: function(fnFunction, oListener) {
730
+ detachRouteMatched: function (fnFunction, oListener) {
731
731
  this.eventProvider.detachEvent("routeMatched", fnFunction, oListener);
732
732
  },
733
- attachAfterRouteMatched: function(oData, fnFunction, oListener) {
733
+ attachAfterRouteMatched: function (oData, fnFunction, oListener) {
734
734
  this.eventProvider.attachEvent("afterRouteMatched", oData, fnFunction, oListener);
735
735
  },
736
- detachAfterRouteMatched: function(fnFunction, oListener) {
736
+ detachAfterRouteMatched: function (fnFunction, oListener) {
737
737
  this.eventProvider.detachEvent("afterRouteMatched", fnFunction, oListener);
738
738
  },
739
739
 
740
- getRouteFromHash: function(oRouter, oAppComponent) {
740
+ getRouteFromHash: function (oRouter, oAppComponent) {
741
741
  var sHash = oRouter.getHashChanger().hash;
742
742
  var oRouteInfo = oRouter.getRouteInfoByHash(sHash);
743
743
  return oAppComponent
744
744
  .getMetadata()
745
745
  .getManifestEntry("/sap.ui5/routing/routes")
746
- .filter(function(oRoute) {
746
+ .filter(function (oRoute) {
747
747
  return oRoute.name === oRouteInfo.name;
748
748
  })[0];
749
749
  },
750
- getTargetsFromRoute: function(oRoute, oAppComponent) {
750
+ getTargetsFromRoute: function (oRoute, oAppComponent) {
751
751
  var oTarget = oRoute.target;
752
752
  var that = this;
753
753
  if (typeof oTarget === "string") {
754
754
  return [this._mTargets[oTarget]];
755
755
  } else {
756
756
  var aTarget = [];
757
- oTarget.forEach(function(sTarget) {
757
+ oTarget.forEach(function (sTarget) {
758
758
  aTarget.push(that._mTargets[sTarget]);
759
759
  });
760
760
  return aTarget;
761
761
  }
762
762
  },
763
763
 
764
- initializeRouting: function() {
764
+ initializeRouting: function () {
765
765
  var that = this;
766
766
 
767
767
  // Attach router handlers
@@ -776,14 +776,10 @@ sap.ui.define(
776
776
  EditState.resetEditState();
777
777
  this.bExitOnNavigateBackToRoot = !this.oRouter.match("");
778
778
 
779
- var bIsIappState =
780
- that.oRouter
781
- .getHashChanger()
782
- .getHash()
783
- .indexOf("sap-iapp-state") !== -1;
779
+ var bIsIappState = that.oRouter.getHashChanger().getHash().indexOf("sap-iapp-state") !== -1;
784
780
  var initPromise = that.oAppComponent
785
781
  .getStartupParameters()
786
- .then(function(oStartupParameters) {
782
+ .then(function (oStartupParameters) {
787
783
  var bHasStartUpParameters = oStartupParameters !== undefined && Object.keys(oStartupParameters).length !== 0;
788
784
  // Manage startup parameters (in case of no iapp-state)
789
785
  if (!bIsIappState && bHasStartUpParameters) {
@@ -800,14 +796,14 @@ sap.ui.define(
800
796
  }
801
797
  }
802
798
  })
803
- .catch(function(oError) {
799
+ .catch(function (oError) {
804
800
  Log.error("Error during routing initialization", oError);
805
801
  });
806
802
 
807
803
  return initPromise;
808
804
  },
809
805
 
810
- getDefaultCreateHash: function(oStartupParameters) {
806
+ getDefaultCreateHash: function (oStartupParameters) {
811
807
  var sContextPath = this.getContextPath(),
812
808
  sDefaultCreateHash =
813
809
  oStartupParameters && oStartupParameters.preferredMode ? oStartupParameters.preferredMode[0] : "create",
@@ -825,11 +821,11 @@ sap.ui.define(
825
821
  }
826
822
  },
827
823
 
828
- _managePreferredModeCreateStartup: function(oStartupParameters) {
824
+ _managePreferredModeCreateStartup: function (oStartupParameters) {
829
825
  var that = this;
830
826
  return this.oMetaModel
831
827
  .requestObject(this.getContextPath() + "@")
832
- .then(function(oEntitySetAnnotations) {
828
+ .then(function (oEntitySetAnnotations) {
833
829
  var sMetaPath,
834
830
  bCreatable = true;
835
831
  if (
@@ -864,16 +860,16 @@ sap.ui.define(
864
860
  that.bExitOnNavigateBackToRoot = true;
865
861
  }
866
862
  })
867
- .catch(function() {
863
+ .catch(function () {
868
864
  Log.error("Cannot fetch the Annotations");
869
865
  });
870
866
  },
871
867
 
872
- _requestObjectsFromParameters: function(oStartUpParameters, aExternallyNavigablePages) {
868
+ _requestObjectsFromParameters: function (oStartUpParameters, aExternallyNavigablePages) {
873
869
  var that = this;
874
870
 
875
871
  // Load the respective objects for all object pages found in aExternallyNavigablePages
876
- var aContextPromises = aExternallyNavigablePages.map(function(oPage) {
872
+ var aContextPromises = aExternallyNavigablePages.map(function (oPage) {
877
873
  var oCompleteFilter, oListBind;
878
874
  if (oPage.isSemanticKeyNavigation) {
879
875
  oCompleteFilter = that._createFilter(oPage.draft, oPage.semanticKeys, oStartUpParameters);
@@ -883,7 +879,7 @@ sap.ui.define(
883
879
  // only request a minimum of fields to boost backend performance since this is only used to check if an object exists
884
880
  oListBind = that.oModel.bindList(oPage.contextPath, undefined, undefined, oCompleteFilter, {
885
881
  "$select": oPage.isSemanticKeyNavigation
886
- ? oPage.semanticKeys.map(function(key) {
882
+ ? oPage.semanticKeys.map(function (key) {
887
883
  return key.$PropertyPath;
888
884
  })
889
885
  : oPage.technicalKeys
@@ -894,14 +890,14 @@ sap.ui.define(
894
890
  return Promise.all(aContextPromises);
895
891
  },
896
892
 
897
- _manageDeeplinkStartup: function(oStartUpParameters) {
893
+ _manageDeeplinkStartup: function (oStartUpParameters) {
898
894
  var that = this,
899
895
  aExternallyNavigablePages;
900
896
 
901
897
  // Need to preload the entity set informations in the metamodel
902
898
  return this.oMetaModel
903
899
  .requestObject("/$EntityContainer/")
904
- .then(function() {
900
+ .then(function () {
905
901
  // Check if semantic keys are present in url parameters for every object page at each level
906
902
  var oLevelOfObjectPages = that._getNavigablePages(that.oAppComponent.getManifest()["sap.ui5"].routing);
907
903
 
@@ -909,11 +905,11 @@ sap.ui.define(
909
905
 
910
906
  return that._requestObjectsFromParameters(oStartUpParameters, aExternallyNavigablePages);
911
907
  })
912
- .then(function(aValues) {
908
+ .then(function (aValues) {
913
909
  if (aValues.length) {
914
910
  // Make sure we only get 1 context per promise, and flatten the array
915
911
  var aContexts = [];
916
- aValues.forEach(function(aFoundContexts) {
912
+ aValues.forEach(function (aFoundContexts) {
917
913
  if (aFoundContexts.length === 1) {
918
914
  aContexts.push(aFoundContexts[0]);
919
915
  }
@@ -929,12 +925,12 @@ sap.ui.define(
929
925
  }
930
926
  }
931
927
  })
932
- .catch(function(error) {
928
+ .catch(function (error) {
933
929
  Log.info("Could not find results for list bind: " + error);
934
930
  });
935
931
  },
936
932
 
937
- _getNavigablePages: function(oRouting) {
933
+ _getNavigablePages: function (oRouting) {
938
934
  var aRoutes = oRouting.routes,
939
935
  oTargets = oRouting.targets,
940
936
  mPageMap = {};
@@ -983,7 +979,7 @@ sap.ui.define(
983
979
  * @param {object} oStartupParameters The startup parameters of the application
984
980
  * @returns {Array} Array of all pages that can be reached with the provided parameters
985
981
  */
986
- _findTargetPagesFromStartupParams: function(mPagesByLevel, oStartupParameters) {
982
+ _findTargetPagesFromStartupParams: function (mPagesByLevel, oStartupParameters) {
987
983
  var iLevel = 0,
988
984
  aReachablePages = [],
989
985
  bFound = true;
@@ -1045,7 +1041,7 @@ sap.ui.define(
1045
1041
  * @param {object} oStartUpParameters URL parameters
1046
1042
  * @returns {object} Filters for the entity set
1047
1043
  */
1048
- _createFilter: function(oDraftDetail, aKeys, oStartUpParameters) {
1044
+ _createFilter: function (oDraftDetail, aKeys, oStartUpParameters) {
1049
1045
  var aFilters = [],
1050
1046
  bFilteringCaseSensitive = ModelHelper.isFilteringCaseSensitive(this.oMetaModel);
1051
1047
 
@@ -1090,7 +1086,7 @@ sap.ui.define(
1090
1086
  * @param {object} oParameters URL parameters
1091
1087
  * @returns {boolean} True if Semantic Keys are available in URL
1092
1088
  */
1093
- _checkForKeys: function(aKeys, oParameters) {
1089
+ _checkForKeys: function (aKeys, oParameters) {
1094
1090
  if (aKeys && aKeys.length) {
1095
1091
  for (var j = 0; j < aKeys.length; j++) {
1096
1092
  var sPropertyPath = aKeys[j].$PropertyPath;
@@ -1108,7 +1104,7 @@ sap.ui.define(
1108
1104
  return false;
1109
1105
  },
1110
1106
 
1111
- _buildStartupHash: function(aReachablePages, aContexts) {
1107
+ _buildStartupHash: function (aReachablePages, aContexts) {
1112
1108
  var sHash;
1113
1109
 
1114
1110
  if (aContexts.length === 1) {
@@ -1130,7 +1126,7 @@ sap.ui.define(
1130
1126
  var aParts = aReachablePages[aReachablePages.length - 1].pattern.split("/");
1131
1127
 
1132
1128
  sHash = aParts
1133
- .map(function(sPart, iIndex) {
1129
+ .map(function (sPart, iIndex) {
1134
1130
  var sKey = sPart.split("(")[0];
1135
1131
  var sValue = aContexts[iIndex].getPath().split("(")[1];
1136
1132
  return sKey + "(" + sValue; // sValue contains the closing ')'
@@ -1141,7 +1137,7 @@ sap.ui.define(
1141
1137
  return sHash;
1142
1138
  },
1143
1139
 
1144
- getOutbounds: function() {
1140
+ getOutbounds: function () {
1145
1141
  return this.outbounds;
1146
1142
  },
1147
1143
 
@@ -1152,13 +1148,13 @@ sap.ui.define(
1152
1148
  *
1153
1149
  * @ui5-restricted
1154
1150
  */
1155
- getContextPath: function() {
1151
+ getContextPath: function () {
1156
1152
  return this.sContextPath;
1157
1153
  }
1158
1154
  });
1159
1155
 
1160
1156
  return ServiceFactory.extend("sap.fe.core.services.RoutingServiceFactory", {
1161
- createInstance: function(oServiceContext) {
1157
+ createInstance: function (oServiceContext) {
1162
1158
  var oRoutingService = new RoutingService(oServiceContext);
1163
1159
  return oRoutingService.initPromise;
1164
1160
  }
@@ -177,7 +177,7 @@ sap.ui.define(["sap/ui/mdc/condition/Condition", "sap/ui/mdc/enum/ConditionValid
177
177
  _exports.getOperator = getOperator;
178
178
 
179
179
  function getFiltersConditionsFromSelectionVariant(entityTypeProperties, selectionVariant, getCustomConditions) {
180
- var ofilterConditions = {};
180
+ var oFilterConditions = {};
181
181
 
182
182
  if (selectionVariant) {
183
183
  var aSelectOptions = selectionVariant.SelectOptions;
@@ -196,11 +196,11 @@ sap.ui.define(["sap/ui/mdc/condition/Condition", "sap/ui/mdc/enum/ConditionValid
196
196
  Ranges === null || Ranges === void 0 ? void 0 : Ranges.forEach(function (Range) {
197
197
  var oCondition = getCustomConditions ? getCustomConditions(Range, oValidProperty, sPropertyName) : getConditions(Range, oValidProperty);
198
198
  aConditions.push(oCondition);
199
-
200
- if (aConditions.length) {
201
- ofilterConditions[sPropertyName] = (ofilterConditions[sPropertyName] || []).concat(aConditions);
202
- }
203
199
  });
200
+
201
+ if (aConditions.length) {
202
+ oFilterConditions[sPropertyName] = (oFilterConditions[sPropertyName] || []).concat(aConditions);
203
+ }
204
204
  })();
205
205
  }
206
206
  }
@@ -220,11 +220,11 @@ sap.ui.define(["sap/ui/mdc/condition/Condition", "sap/ui/mdc/enum/ConditionValid
220
220
  validated: ConditionValidated.Validated,
221
221
  isParameter: true
222
222
  };
223
- ofilterConditions[sPropertyPath] = [oCondition];
223
+ oFilterConditions[sPropertyPath] = [oCondition];
224
224
  });
225
225
  }
226
226
 
227
- return ofilterConditions;
227
+ return oFilterConditions;
228
228
  }
229
229
 
230
230
  _exports.getFiltersConditionsFromSelectionVariant = getFiltersConditionsFromSelectionVariant;
@@ -328,4 +328,4 @@ sap.ui.define(["sap/ui/mdc/condition/Condition", "sap/ui/mdc/enum/ConditionValid
328
328
  getFilterConditions.requiresIContext = true;
329
329
  return _exports;
330
330
  }, false);
331
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpbHRlckhlbHBlci50cyJdLCJuYW1lcyI6WyJhVmFsaWRUeXBlcyIsIm9FeGNsdWRlTWFwIiwiZ2V0VHlwZUNvbXBsaWFudFZhbHVlIiwic1ZhbHVlIiwic1R5cGUiLCJvVmFsdWUiLCJpbmRleE9mIiwidW5kZWZpbmVkIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwicGFyc2VJbnQiLCJtYXRjaCIsImxlbmd0aCIsInNwbGl0IiwicmVzb2x2ZUNvbmRpdGlvblZhbHVlcyIsInNPcHRpb24iLCJvVjEiLCJvVjIiLCJzU2lnbiIsIm9WYWx1ZTIiLCJzSW50ZXJuYWxPcGVyYXRpb24iLCJvQ29uZGl0aW9uIiwidmFsdWVzIiwiaXNFbXB0eSIsIm5JbmRleE9mIiwibkxhc3RJbmRleCIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwib3BlcmF0b3IiLCJwdXNoIiwiZ2V0T3BlcmF0b3IiLCJzT3BlcmF0b3IiLCJnZXRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50IiwiZW50aXR5VHlwZVByb3BlcnRpZXMiLCJzZWxlY3Rpb25WYXJpYW50IiwiZ2V0Q3VzdG9tQ29uZGl0aW9ucyIsIm9maWx0ZXJDb25kaXRpb25zIiwiYVNlbGVjdE9wdGlvbnMiLCJTZWxlY3RPcHRpb25zIiwiYVBhcmFtZXRlcnMiLCJQYXJhbWV0ZXJzIiwiYVZhbGlkUHJvcGVydGllcyIsImZvckVhY2giLCJzZWxlY3RPcHRpb24iLCJwcm9wZXJ0eU5hbWUiLCJQcm9wZXJ0eU5hbWUiLCJzUHJvcGVydHlOYW1lIiwidmFsdWUiLCIkUHJvcGVydHlQYXRoIiwiUmFuZ2VzIiwia2V5Iiwib1ZhbGlkUHJvcGVydHkiLCJhQ29uZGl0aW9ucyIsIlJhbmdlIiwiZ2V0Q29uZGl0aW9ucyIsImNvbmNhdCIsInBhcmFtZXRlciIsInNQcm9wZXJ0eVBhdGgiLCJ2YWx1ZTEiLCJQcm9wZXJ0eVZhbHVlIiwidmFsdWUyIiwicGF0aCIsImlzUGFyYW1ldGVyIiwidmFsaWRhdGVkIiwiQ29uZGl0aW9uVmFsaWRhdGVkIiwiVmFsaWRhdGVkIiwic2lnbiIsIlNpZ24iLCJPcHRpb24iLCJvVmFsdWUxIiwiTG93IiwiJFR5cGUiLCJIaWdoIiwib0NvbmRpdGlvblZhbHVlcyIsImNyZWF0ZUNvbmRpdGlvbiIsImdldERlZmF1bHRWYWx1ZUZpbHRlcnMiLCJvQ29udGV4dCIsInByb3BlcnRpZXMiLCJmaWx0ZXJDb25kaXRpb25zIiwiZW50aXR5U2V0UGF0aCIsImdldEludGVyZmFjZSIsImdldFBhdGgiLCJvTWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJkZWZhdWx0RmlsdGVyVmFsdWUiLCJnZXRPYmplY3QiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlRmlsdGVycyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZ2V0RWRpdFN0YXR1c0ZpbHRlciIsImdldEZpbHRlckNvbmRpdGlvbnMiLCJlZGl0U3RhdGVGaWx0ZXIiLCJlbnRpdHlUeXBlQW5ub3RhdGlvbnMiLCJkZWZhdWx0RmlsdGVycyIsImRlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzIiwiT2JqZWN0Iiwia2V5cyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXF1aXJlc0lDb250ZXh0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FBU0EsTUFBTUEsV0FBVyxHQUFHLENBQ25CLGFBRG1CLEVBRW5CLFVBRm1CLEVBR25CLFVBSG1CLEVBSW5CLGNBSm1CLEVBS25CLG9CQUxtQixFQU1uQixhQU5tQixFQU9uQixZQVBtQixFQVFuQixXQVJtQixFQVNuQixVQVRtQixFQVVuQixXQVZtQixFQVduQixXQVhtQixFQVluQixXQVptQixFQWFuQixXQWJtQixFQWNuQixZQWRtQixFQWVuQixZQWZtQixFQWdCbkIsVUFoQm1CLEVBaUJuQixlQWpCbUIsQ0FBcEI7QUFvQkEsTUFBTUMsV0FBZ0MsR0FBRztBQUN4QyxnQkFBWSxhQUQ0QjtBQUV4QyxrQkFBYyxlQUYwQjtBQUd4QyxnQkFBWSxhQUg0QjtBQUl4QyxhQUFTLFVBSitCO0FB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R0FBdUMsSUFBdkMiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdE9wdGlvblR5cGUsIFNlbGVjdGlvblZhcmlhbnRUeXBlVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvVUlcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbmRpdGlvbiB9IGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCB7IENvbmRpdGlvblZhbGlkYXRlZCB9IGZyb20gXCJzYXAvdWkvbWRjL2VudW1cIjtcblxuZXhwb3J0IHR5cGUgRmlsdGVyQ29uZGl0aW9ucyA9IHtcblx0b3BlcmF0b3I6IHN0cmluZztcblx0dmFsdWVzOiBBcnJheTxzdHJpbmc+O1xuXHRpc0VtcHR5PzogYm9vbGVhbiB8IG51bGw7XG5cdHZhbGlkYXRlZD86IHN0cmluZztcbn07XG5cbmNvbnN0IGFWYWxpZFR5cGVzID0gW1xuXHRcIkVkbS5Cb29sZWFuXCIsXG5cdFwiRWRtLkJ5dGVcIixcblx0XCJFZG0uRGF0ZVwiLFxuXHRcIkVkbS5EYXRlVGltZVwiLFxuXHRcIkVkbS5EYXRlVGltZU9mZnNldFwiLFxuXHRcIkVkbS5EZWNpbWFsXCIsXG5cdFwiRWRtLkRvdWJsZVwiLFxuXHRcIkVkbS5GbG9hdFwiLFxuXHRcIkVkbS5HdWlkXCIsXG5cdFwiRWRtLkludDE2XCIsXG5cdFwiRWRtLkludDMyXCIsXG5cdFwiRWRtLkludDY0XCIsXG5cdFwiRWRtLlNCeXRlXCIsXG5cdFwiRWRtLlNpbmdsZVwiLFxuXHRcIkVkbS5TdHJpbmdcIixcblx0XCJFZG0uVGltZVwiLFxuXHRcIkVkbS5UaW1lT2ZEYXlcIlxuXTtcblxuY29uc3Qgb0V4Y2x1ZGVNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG5cdFwiQ29udGFpbnNcIjogXCJOb3RDb250YWluc1wiLFxuXHRcIlN0YXJ0c1dpdGhcIjogXCJOb3RTdGFydHNXaXRoXCIsXG5cdFwiRW5kc1dpdGhcIjogXCJOb3RFbmRzV2l0aFwiLFxuXHRcIkVtcHR5XCI6IFwiTm90RW1wdHlcIixcblx0XCJOb3RFbXB0eVwiOiBcIkVtcHR5XCIsXG5cdFwiTEVcIjogXCJOT1RMRVwiLFxuXHRcIkdFXCI6IFwiTk9UR0VcIixcblx0XCJMVFwiOiBcIk5PVExUXCIsXG5cdFwiR1RcIjogXCJOT1RHVFwiLFxuXHRcIkJUXCI6IFwiTk9UQlRcIixcblx0XCJORVwiOiBcIkVRXCIsXG5cdFwiRVFcIjogXCJORVwiXG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBnZXQgdGhlIGNvbXBsaWFudCB2YWx1ZSB0eXBlIGJhc2VkIG9uIHRoZSBkYXRhIHR5cGUuXG4gKlxuICogQHBhcmFtICBzVmFsdWUgUmF3IHZhbHVlXG4gKiBAcGFyYW0gIHNUeXBlIFRoZSBwcm9wZXJ0eSB0eXBlXG4gKiBAcmV0dXJucyBWYWx1ZSB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb25kaXRpb24uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wbGlhbnRWYWx1ZShzVmFsdWU6IGFueSwgc1R5cGU6IHN0cmluZykge1xuXHRsZXQgb1ZhbHVlO1xuXHRpZiAoYVZhbGlkVHlwZXMuaW5kZXhPZihzVHlwZSkgPiAtMSkge1xuXHRcdG9WYWx1ZSA9IHNWYWx1ZTtcblx0XHRpZiAoc1R5cGUgPT09IFwiRWRtLkJvb2xlYW5cIikge1xuXHRcdFx0b1ZhbHVlID0gc1ZhbHVlID09PSBcInRydWVcIiB8fCAoc1ZhbHVlID09PSBcImZhbHNlXCIgPyBmYWxzZSA6IHVuZGVmaW5lZCk7XG5cdFx0fSBlbHNlIGlmIChzVHlwZSA9PT0gXCJFZG0uRG91YmxlXCIgfHwgc1R5cGUgPT09IFwiRWRtLlNpbmdsZVwiKSB7XG5cdFx0XHRvVmFsdWUgPSBpc05hTihzVmFsdWUpID8gdW5kZWZpbmVkIDogcGFyc2VGbG9hdChzVmFsdWUpO1xuXHRcdH0gZWxzZSBpZiAoc1R5cGUgPT09IFwiRWRtLkJ5dGVcIiB8fCBzVHlwZSA9PT0gXCJFZG0uSW50MTZcIiB8fCBzVHlwZSA9PT0gXCJFZG0uSW50MzJcIiB8fCBzVHlwZSA9PT0gXCJFZG0uU0J5dGVcIikge1xuXHRcdFx0b1ZhbHVlID0gaXNOYU4oc1ZhbHVlKSA/IHVuZGVmaW5lZCA6IHBhcnNlSW50KHNWYWx1ZSwgMTApO1xuXHRcdH0gZWxzZSBpZiAoc1R5cGUgPT09IFwiRWRtLkRhdGVcIikge1xuXHRcdFx0b1ZhbHVlID0gc1ZhbHVlLm1hdGNoKC9eKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pLylcblx0XHRcdFx0PyBzVmFsdWUubWF0Y2goL14oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSkvKVswXVxuXHRcdFx0XHQ6IHNWYWx1ZS5tYXRjaCgvXihcXGR7OH0pLykgJiYgc1ZhbHVlLm1hdGNoKC9eKFxcZHs4fSkvKVswXTtcblx0XHR9IGVsc2UgaWYgKHNUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0XHRpZiAoc1ZhbHVlLm1hdGNoKC9eKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pVChcXGR7MSwyfSk6KFxcZHsxLDJ9KTooXFxkezEsMn0pXFwrKFxcZHsxLDR9KS8pKSB7XG5cdFx0XHRcdG9WYWx1ZSA9IHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KVQoXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KVxcKyhcXGR7MSw0fSkvKVswXTtcblx0XHRcdH0gZWxzZSBpZiAoc1ZhbHVlLm1hdGNoKC9eKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pVChcXGR7MSwyfSk6KFxcZHsxLDJ9KTooXFxkezEsMn0pLykpIHtcblx0XHRcdFx0b1ZhbHVlID0gc1ZhbHVlLm1hdGNoKC9eKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pVChcXGR7MSwyfSk6KFxcZHsxLDJ9KTooXFxkezEsMn0pLylbMF0gKyBcIiswMDAwXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KS8pKSB7XG5cdFx0XHRcdG9WYWx1ZSA9IHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KS8pWzBdICsgXCJUMDA6MDA6MDArMDAwMFwiO1xuXHRcdFx0fSBlbHNlIGlmIChzVmFsdWUuaW5kZXhPZihcIlpcIikgPT09IHNWYWx1ZS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdG9WYWx1ZSA9IHNWYWx1ZS5zcGxpdChcIlpcIilbMF0gKyBcIiswMTAwXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChzVHlwZSA9PT0gXCJFZG0uVGltZU9mRGF5XCIpIHtcblx0XHRcdG9WYWx1ZSA9IHNWYWx1ZS5tYXRjaCgvKFxcZHsxLDJ9KTooXFxkezEsMn0pOihcXGR7MSwyfSkvKSA/IHNWYWx1ZS5tYXRjaCgvKFxcZHsxLDJ9KTooXFxkezEsMn0pOihcXGR7MSwyfSkvKVswXSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9WYWx1ZTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gY3JlYXRlIGEgY29uZGl0aW9uLlxuICogQHBhcmFtICBzT3B0aW9uIE9wZXJhdG9yIHRvIGJlIHVzZWQuXG4gKiBAcGFyYW0gIG9WMSBMb3dlciB2YWx1ZVxuICogQHBhcmFtICBvVjIgSGlnaGVyIHZhbHVlXG4gKiBAcGFyYW0gc1NpZ25cbiAqIEByZXR1cm5zIENvbmRpdGlvbiB0byBiZSBjcmVhdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQ29uZGl0aW9uVmFsdWVzKHNPcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCwgb1YxOiBhbnksIG9WMjogYW55LCBzU2lnbjogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG5cdGxldCBvVmFsdWUgPSBvVjEsXG5cdFx0b1ZhbHVlMixcblx0XHRzSW50ZXJuYWxPcGVyYXRpb246IGFueTtcblx0Y29uc3Qgb0NvbmRpdGlvbjogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiA9IHt9O1xuXHRvQ29uZGl0aW9uLnZhbHVlcyA9IFtdO1xuXHRvQ29uZGl0aW9uLmlzRW1wdHkgPSBudWxsIGFzIGFueTtcblx0aWYgKG9WMSA9PT0gdW5kZWZpbmVkIHx8IG9WMSA9PT0gbnVsbCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHN3aXRjaCAoc09wdGlvbikge1xuXHRcdGNhc2UgXCJDUFwiOlxuXHRcdFx0c0ludGVybmFsT3BlcmF0aW9uID0gXCJDb250YWluc1wiO1xuXHRcdFx0aWYgKG9WYWx1ZSkge1xuXHRcdFx0XHRjb25zdCBuSW5kZXhPZiA9IG9WYWx1ZS5pbmRleE9mKFwiKlwiKTtcblx0XHRcdFx0Y29uc3Qgbkxhc3RJbmRleCA9IG9WYWx1ZS5sYXN0SW5kZXhPZihcIipcIik7XG5cblx0XHRcdFx0Ly8gb25seSB3aGVuIHRoZXJlIGFyZSAnKicgYXQgYWxsXG5cdFx0XHRcdGlmIChuSW5kZXhPZiA+IC0xKSB7XG5cdFx0XHRcdFx0aWYgKG5JbmRleE9mID09PSAwICYmIG5MYXN0SW5kZXggIT09IG9WYWx1ZS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBcIkVuZHNXaXRoXCI7XG5cdFx0XHRcdFx0XHRvVmFsdWUgPSBvVmFsdWUuc3Vic3RyaW5nKDEsIG9WYWx1ZS5sZW5ndGgpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAobkluZGV4T2YgIT09IDAgJiYgbkxhc3RJbmRleCA9PT0gb1ZhbHVlLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IFwiU3RhcnRzV2l0aFwiO1xuXHRcdFx0XHRcdFx0b1ZhbHVlID0gb1ZhbHVlLnN1YnN0cmluZygwLCBvVmFsdWUubGVuZ3RoIC0gMSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9WYWx1ZSA9IG9WYWx1ZS5zdWJzdHJpbmcoMSwgb1ZhbHVlLmxlbmd0aCAtIDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvKiBUT0RPIEFkZCBkaWFnb25vc3RpY3MgTG9nLndhcm5pbmcoXCJDb250YWlucyBPcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAnKicuXCIpICovXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRVFcIjpcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IG9WMSA9PT0gXCJcIiA/IFwiRW1wdHlcIiA6IHNPcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiTkVcIjpcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IG9WMSA9PT0gXCJcIiA/IFwiTm90RW1wdHlcIiA6IHNPcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQlRcIjpcblx0XHRcdGlmIChvVjIgPT09IHVuZGVmaW5lZCB8fCBvVjIgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0b1ZhbHVlMiA9IG9WMjtcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IHNPcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiTEVcIjpcblx0XHRjYXNlIFwiR0VcIjpcblx0XHRjYXNlIFwiR1RcIjpcblx0XHRjYXNlIFwiTFRcIjpcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IHNPcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0LyogVE9ETyBBZGQgZGlhZ29ub3N0aWNzIExvZy53YXJuaW5nKFwiU2VsZWN0aW9uIE9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIDogJ1wiICsgc09wdGlvbiArIFwiJ1wiKTsgKi9cblx0XHRcdHJldHVybjtcblx0fVxuXHRpZiAoc1NpZ24gPT09IFwiRVwiKSB7XG5cdFx0c0ludGVybmFsT3BlcmF0aW9uID0gb0V4Y2x1ZGVNYXBbc0ludGVybmFsT3BlcmF0aW9uXTtcblx0fVxuXHRvQ29uZGl0aW9uLm9wZXJhdG9yID0gc0ludGVybmFsT3BlcmF0aW9uO1xuXHRpZiAoc0ludGVybmFsT3BlcmF0aW9uICE9PSBcIkVtcHR5XCIpIHtcblx0XHRvQ29uZGl0aW9uLnZhbHVlcy5wdXNoKG9WYWx1ZSk7XG5cdFx0aWYgKG9WYWx1ZTIpIHtcblx0XHRcdG9Db25kaXRpb24udmFsdWVzLnB1c2gob1ZhbHVlMik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvQ29uZGl0aW9uO1xufVxuXG4vKiBNZXRob2QgdG8gZ2V0IHRoZSBvcGVyYXRvciBmcm9tIHRoZSBTZWxlY3Rpb24gT3B0aW9uICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3BlcmF0b3Ioc09wZXJhdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gc09wZXJhdG9yLmluZGV4T2YoXCIvXCIpID4gMCA/IHNPcGVyYXRvci5zcGxpdChcIi9cIilbMV0gOiBzT3BlcmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50KFxuXHRlbnRpdHlUeXBlUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgb2JqZWN0Pixcblx0c2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0Z2V0Q3VzdG9tQ29uZGl0aW9ucz86IEZ1bmN0aW9uXG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+IHtcblx0Y29uc3Qgb2ZpbHRlckNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4gPSB7fTtcblx0aWYgKHNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRjb25zdCBhU2VsZWN0T3B0aW9ucyA9IHNlbGVjdGlvblZhcmlhbnQuU2VsZWN0T3B0aW9ucztcblx0XHRjb25zdCBhUGFyYW1ldGVycyA9IHNlbGVjdGlvblZhcmlhbnQuUGFyYW1ldGVycztcblx0XHRjb25zdCBhVmFsaWRQcm9wZXJ0aWVzID0gZW50aXR5VHlwZVByb3BlcnRpZXM7XG5cdFx0YVNlbGVjdE9wdGlvbnM/LmZvckVhY2goKHNlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uVHlwZSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lOiBhbnkgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZTogc3RyaW5nID0gcHJvcGVydHlOYW1lLnZhbHVlIHx8IHByb3BlcnR5TmFtZS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0Y29uc3QgUmFuZ2VzOiBhbnkgPSBzZWxlY3RPcHRpb24uUmFuZ2VzO1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gYVZhbGlkUHJvcGVydGllcykge1xuXHRcdFx0XHRpZiAoc1Byb3BlcnR5TmFtZSA9PT0ga2V5KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1ZhbGlkUHJvcGVydHkgPSBhVmFsaWRQcm9wZXJ0aWVzW2tleV0gYXMgYW55O1xuXHRcdFx0XHRcdGNvbnN0IGFDb25kaXRpb25zOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRcdFJhbmdlcz8uZm9yRWFjaCgoUmFuZ2U6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0NvbmRpdGlvbiA9IGdldEN1c3RvbUNvbmRpdGlvbnNcblx0XHRcdFx0XHRcdFx0PyBnZXRDdXN0b21Db25kaXRpb25zKFJhbmdlLCBvVmFsaWRQcm9wZXJ0eSwgc1Byb3BlcnR5TmFtZSlcblx0XHRcdFx0XHRcdFx0OiBnZXRDb25kaXRpb25zKFJhbmdlLCBvVmFsaWRQcm9wZXJ0eSk7XG5cdFx0XHRcdFx0XHRhQ29uZGl0aW9ucy5wdXNoKG9Db25kaXRpb24pO1xuXHRcdFx0XHRcdFx0aWYgKGFDb25kaXRpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRvZmlsdGVyQ29uZGl0aW9uc1tzUHJvcGVydHlOYW1lXSA9IChvZmlsdGVyQ29uZGl0aW9uc1tzUHJvcGVydHlOYW1lXSB8fCBbXSkuY29uY2F0KGFDb25kaXRpb25zKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGFQYXJhbWV0ZXJzPy5mb3JFYWNoKChwYXJhbWV0ZXI6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IHBhcmFtZXRlci5Qcm9wZXJ0eU5hbWUudmFsdWUgfHwgcGFyYW1ldGVyLlByb3BlcnR5TmFtZS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0Y29uc3Qgb0NvbmRpdGlvbjogYW55ID0gZ2V0Q3VzdG9tQ29uZGl0aW9uc1xuXHRcdFx0XHQ/IHsgb3BlcmF0b3I6IFwiRVFcIiwgdmFsdWUxOiBwYXJhbWV0ZXIuUHJvcGVydHlWYWx1ZSwgdmFsdWUyOiBudWxsLCBwYXRoOiBzUHJvcGVydHlQYXRoLCBpc1BhcmFtZXRlcjogdHJ1ZSB9XG5cdFx0XHRcdDoge1xuXHRcdFx0XHRcdFx0b3BlcmF0b3I6IFwiRVFcIixcblx0XHRcdFx0XHRcdHZhbHVlczogW3BhcmFtZXRlci5Qcm9wZXJ0eVZhbHVlXSxcblx0XHRcdFx0XHRcdGlzRW1wdHk6IG51bGwsXG5cdFx0XHRcdFx0XHR2YWxpZGF0ZWQ6IENvbmRpdGlvblZhbGlkYXRlZC5WYWxpZGF0ZWQsXG5cdFx0XHRcdFx0XHRpc1BhcmFtZXRlcjogdHJ1ZVxuXHRcdFx0XHQgIH07XG5cdFx0XHRvZmlsdGVyQ29uZGl0aW9uc1tzUHJvcGVydHlQYXRoXSA9IFtvQ29uZGl0aW9uXTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gb2ZpbHRlckNvbmRpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25kaXRpb25zKFJhbmdlOiBhbnksIG9WYWxpZFByb3BlcnR5OiBhbnkpIHtcblx0bGV0IG9Db25kaXRpb247XG5cdGNvbnN0IHNpZ246IHN0cmluZyB8IHVuZGVmaW5lZCA9IFJhbmdlLlNpZ247XG5cdGNvbnN0IHNPcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCA9IFJhbmdlLk9wdGlvbiA/IGdldE9wZXJhdG9yKFJhbmdlLk9wdGlvbikgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9WYWx1ZTE6IGFueSA9IGdldFR5cGVDb21wbGlhbnRWYWx1ZShSYW5nZS5Mb3csIG9WYWxpZFByb3BlcnR5LiRUeXBlKTtcblx0Y29uc3Qgb1ZhbHVlMjogYW55ID0gUmFuZ2UuSGlnaCA/IGdldFR5cGVDb21wbGlhbnRWYWx1ZShSYW5nZS5IaWdoLCBvVmFsaWRQcm9wZXJ0eS4kVHlwZSkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9Db25kaXRpb25WYWx1ZXMgPSByZXNvbHZlQ29uZGl0aW9uVmFsdWVzKHNPcHRpb24sIG9WYWx1ZTEsIG9WYWx1ZTIsIHNpZ24pIGFzIGFueTtcblx0aWYgKG9Db25kaXRpb25WYWx1ZXMpIHtcblx0XHRvQ29uZGl0aW9uID0gY3JlYXRlQ29uZGl0aW9uKG9Db25kaXRpb25WYWx1ZXMub3BlcmF0b3IsIG9Db25kaXRpb25WYWx1ZXMudmFsdWVzLCBudWxsLCBudWxsLCBDb25kaXRpb25WYWxpZGF0ZWQuVmFsaWRhdGVkKTtcblx0fVxuXHRyZXR1cm4gb0NvbmRpdGlvbjtcbn1cblxuY29uc3QgZ2V0RGVmYXVsdFZhbHVlRmlsdGVycyA9IGZ1bmN0aW9uKG9Db250ZXh0OiBhbnksIHByb3BlcnRpZXM6IGFueSk6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4ge1xuXHRjb25zdCBmaWx0ZXJDb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+ID0ge307XG5cdGNvbnN0IGVudGl0eVNldFBhdGggPSBvQ29udGV4dC5nZXRJbnRlcmZhY2UoMSkuZ2V0UGF0aCgpLFxuXHRcdG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRJbnRlcmZhY2UoMSkuZ2V0TW9kZWwoKTtcblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0RmlsdGVyVmFsdWUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdFx0ZW50aXR5U2V0UGF0aCArIFwiL1wiICsga2V5ICsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckRlZmF1bHRWYWx1ZVwiXG5cdFx0XHQpO1xuXHRcdFx0aWYgKGRlZmF1bHRGaWx0ZXJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IFByb3BlcnR5TmFtZSA9IGtleTtcblx0XHRcdFx0ZmlsdGVyQ29uZGl0aW9uc1tQcm9wZXJ0eU5hbWVdID0gW1xuXHRcdFx0XHRcdGNyZWF0ZUNvbmRpdGlvbihcIkVRXCIsIFtkZWZhdWx0RmlsdGVyVmFsdWVdLCBudWxsLCBudWxsLCBDb25kaXRpb25WYWxpZGF0ZWQuVmFsaWRhdGVkKSBhcyBGaWx0ZXJDb25kaXRpb25zXG5cdFx0XHRcdF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmaWx0ZXJDb25kaXRpb25zO1xufTtcblxuY29uc3QgZ2V0RGVmYXVsdFNlbWFudGljRGF0ZUZpbHRlcnMgPSBmdW5jdGlvbihcblx0b0NvbnRleHQ6IGFueSxcblx0cHJvcGVydGllczogYW55LFxuXHRkZWZhdWx0U2VtYW50aWNEYXRlczogYW55XG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+IHtcblx0Y29uc3QgZmlsdGVyQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiA9IHt9O1xuXHRpZiAocHJvcGVydGllcykge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIHByb3BlcnRpZXMpIHtcblx0XHRcdC8vIGN1cnJlbnRseSBkZWZhdWx0U2VtYW50aWNEYXRlcyBjYW4gc3VwcG9ydCBvbmx5IG9uZSBlbnRyeSwgd2UgcGljayB0aGUgZmlyc3Qgb25lIGRpcmVjdGx5IHVzaW5nIDAgaW5kZXhcblx0XHRcdGlmIChkZWZhdWx0U2VtYW50aWNEYXRlc1trZXldICYmIGRlZmF1bHRTZW1hbnRpY0RhdGVzW2tleV1bMF0pIHtcblx0XHRcdFx0ZmlsdGVyQ29uZGl0aW9uc1trZXldID0gW2NyZWF0ZUNvbmRpdGlvbihkZWZhdWx0U2VtYW50aWNEYXRlc1trZXldWzBdLm9wZXJhdG9yLCBbXSwgbnVsbCwgbnVsbCwgbnVsbCkgYXMgRmlsdGVyQ29uZGl0aW9uc107XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmaWx0ZXJDb25kaXRpb25zO1xufTtcblxuZnVuY3Rpb24gZ2V0RWRpdFN0YXR1c0ZpbHRlcigpOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+IHtcblx0Y29uc3Qgb2ZpbHRlckNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4gPSB7fTtcblx0b2ZpbHRlckNvbmRpdGlvbnNbXCIkZWRpdFN0YXRlXCJdID0gW1xuXHRcdGNyZWF0ZUNvbmRpdGlvbihcIkRSQUZUX0VESVRfU1RBVEVcIiwgW1wiQUxMXCJdLCBudWxsLCBudWxsLCBDb25kaXRpb25WYWxpZGF0ZWQuVmFsaWRhdGVkKSBhcyBGaWx0ZXJDb25kaXRpb25zXG5cdF07XG5cdHJldHVybiBvZmlsdGVyQ29uZGl0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlckNvbmRpdGlvbnMob0NvbnRleHQ6IGFueSwgZmlsdGVyQ29uZGl0aW9uczogYW55KTogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiB7XG5cdGxldCBlZGl0U3RhdGVGaWx0ZXI7XG5cdGNvbnN0IGVudGl0eVNldFBhdGggPSBvQ29udGV4dC5nZXRJbnRlcmZhY2UoMSkuZ2V0UGF0aCgpLFxuXHRcdG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRJbnRlcmZhY2UoMSkuZ2V0TW9kZWwoKSxcblx0XHRlbnRpdHlUeXBlQW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChlbnRpdHlTZXRQYXRoICsgXCJAXCIpLFxuXHRcdGVudGl0eVR5cGVQcm9wZXJ0aWVzID0gb01ldGFNb2RlbC5nZXRPYmplY3QoZW50aXR5U2V0UGF0aCArIFwiL1wiKTtcblx0aWYgKFxuXHRcdGVudGl0eVR5cGVBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCJdIHx8XG5cdFx0ZW50aXR5VHlwZUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVcIl1cblx0KSB7XG5cdFx0ZWRpdFN0YXRlRmlsdGVyID0gZ2V0RWRpdFN0YXR1c0ZpbHRlcigpO1xuXHR9XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBmaWx0ZXJDb25kaXRpb25zPy5zZWxlY3Rpb25WYXJpYW50O1xuXHRjb25zdCBkZWZhdWx0U2VtYW50aWNEYXRlcyA9IGZpbHRlckNvbmRpdGlvbnM/LmRlZmF1bHRTZW1hbnRpY0RhdGVzIHx8IHt9O1xuXHRjb25zdCBkZWZhdWx0RmlsdGVycyA9IGdldERlZmF1bHRWYWx1ZUZpbHRlcnMob0NvbnRleHQsIGVudGl0eVR5cGVQcm9wZXJ0aWVzKTtcblx0Y29uc3QgZGVmYXVsdFNlbWFudGljRGF0ZUZpbHRlcnMgPSBnZXREZWZhdWx0U2VtYW50aWNEYXRlRmlsdGVycyhvQ29udGV4dCwgZW50aXR5VHlwZVByb3BlcnRpZXMsIGRlZmF1bHRTZW1hbnRpY0RhdGVzKTtcblx0aWYgKHNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRmaWx0ZXJDb25kaXRpb25zID0gZ2V0RmlsdGVyc0NvbmRpdGlvbnNGcm9tU2VsZWN0aW9uVmFyaWFudChlbnRpdHlUeXBlUHJvcGVydGllcywgc2VsZWN0aW9uVmFyaWFudCk7XG5cdH0gZWxzZSBpZiAoZGVmYXVsdEZpbHRlcnMpIHtcblx0XHRmaWx0ZXJDb25kaXRpb25zID0gZGVmYXVsdEZpbHRlcnM7XG5cdH1cblx0aWYgKGRlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzKSB7XG5cdFx0Ly8gb25seSBmb3Igc2VtYW50aWMgZGF0ZTpcblx0XHQvLyAxLiB2YWx1ZSBmcm9tIG1hbmlmZXN0IGdldCBtZXJnZWQgd2l0aCBTVlxuXHRcdC8vIDIuIG1hbmlmZXN0IHZhbHVlIGlzIGdpdmVuIHByZWZlcmVuY2Ugd2hlbiB0aGVyZSBpcyBzYW1lIHNlbWFudGljIGRhdGUgcHJvcGVydHkgaW4gU1YgYW5kIG1hbmlmZXN0XG5cdFx0ZmlsdGVyQ29uZGl0aW9ucyA9IHsgLi4uZmlsdGVyQ29uZGl0aW9ucywgLi4uZGVmYXVsdFNlbWFudGljRGF0ZUZpbHRlcnMgfTtcblx0fVxuXHRpZiAoZWRpdFN0YXRlRmlsdGVyKSB7XG5cdFx0ZmlsdGVyQ29uZGl0aW9ucyA9IHsgLi4uZmlsdGVyQ29uZGl0aW9ucywgLi4uZWRpdFN0YXRlRmlsdGVyIH07XG5cdH1cblx0cmV0dXJuIChPYmplY3Qua2V5cyhmaWx0ZXJDb25kaXRpb25zKS5sZW5ndGggPiAwID8gSlNPTi5zdHJpbmdpZnkoZmlsdGVyQ29uZGl0aW9ucykgOiB1bmRlZmluZWQpIGFzIGFueTtcbn1cblxuZ2V0RmlsdGVyQ29uZGl0aW9ucy5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcbiJdfQ==
331
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpbHRlckhlbHBlci50cyJdLCJuYW1lcyI6WyJhVmFsaWRUeXBlcyIsIm9FeGNsdWRlTWFwIiwiZ2V0VHlwZUNvbXBsaWFudFZhbHVlIiwic1ZhbHVlIiwic1R5cGUiLCJvVmFsdWUiLCJpbmRleE9mIiwidW5kZWZpbmVkIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwicGFyc2VJbnQiLCJtYXRjaCIsImxlbmd0aCIsInNwbGl0IiwicmVzb2x2ZUNvbmRpdGlvblZhbHVlcyIsInNPcHRpb24iLCJvVjEiLCJvVjIiLCJzU2lnbiIsIm9WYWx1ZTIiLCJzSW50ZXJuYWxPcGVyYXRpb24iLCJvQ29uZGl0aW9uIiwidmFsdWVzIiwiaXNFbXB0eSIsIm5JbmRleE9mIiwibkxhc3RJbmRleCIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwib3BlcmF0b3IiLCJwdXNoIiwiZ2V0T3BlcmF0b3IiLCJzT3BlcmF0b3IiLCJnZXRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50IiwiZW50aXR5VHlwZVByb3BlcnRpZXMiLCJzZWxlY3Rpb25WYXJpYW50IiwiZ2V0Q3VzdG9tQ29uZGl0aW9ucyIsIm9GaWx0ZXJDb25kaXRpb25zIiwiYVNlbGVjdE9wdGlvbnMiLCJTZWxlY3RPcHRpb25zIiwiYVBhcmFtZXRlcnMiLCJQYXJhbWV0ZXJzIiwiYVZhbGlkUHJvcGVydGllcyIsImZvckVhY2giLCJzZWxlY3RPcHRpb24iLCJwcm9wZXJ0eU5hbWUiLCJQcm9wZXJ0eU5hbWUiLCJzUHJvcGVydHlOYW1lIiwidmFsdWUiLCIkUHJvcGVydHlQYXRoIiwiUmFuZ2VzIiwia2V5Iiwib1ZhbGlkUHJvcGVydHkiLCJhQ29uZGl0aW9ucyIsIlJhbmdlIiwiZ2V0Q29uZGl0aW9ucyIsImNvbmNhdCIsInBhcmFtZXRlciIsInNQcm9wZXJ0eVBhdGgiLCJ2YWx1ZTEiLCJQcm9wZXJ0eVZhbHVlIiwidmFsdWUyIiwicGF0aCIsImlzUGFyYW1ldGVyIiwidmFsaWRhdGVkIiwiQ29uZGl0aW9uVmFsaWRhdGVkIiwiVmFsaWRhdGVkIiwic2lnbiIsIlNpZ24iLCJPcHRpb24iLCJvVmFsdWUxIiwiTG93IiwiJFR5cGUiLCJIaWdoIiwib0NvbmRpdGlvblZhbHVlcyIsImNyZWF0ZUNvbmRpdGlvbiIsImdldERlZmF1bHRWYWx1ZUZpbHRlcnMiLCJvQ29udGV4dCIsInByb3BlcnRpZXMiLCJmaWx0ZXJDb25kaXRpb25zIiwiZW50aXR5U2V0UGF0aCIsImdldEludGVyZmFjZSIsImdldFBhdGgiLCJvTWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJkZWZhdWx0RmlsdGVyVmFsdWUiLCJnZXRPYmplY3QiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlRmlsdGVycyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZ2V0RWRpdFN0YXR1c0ZpbHRlciIsIm9maWx0ZXJDb25kaXRpb25zIiwiZ2V0RmlsdGVyQ29uZGl0aW9ucyIsImVkaXRTdGF0ZUZpbHRlciIsImVudGl0eVR5cGVBbm5vdGF0aW9ucyIsImRlZmF1bHRGaWx0ZXJzIiwiZGVmYXVsdFNlbWFudGljRGF0ZUZpbHRlcnMiLCJPYmplY3QiLCJrZXlzIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlcXVpcmVzSUNvbnRleHQiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUFTQSxNQUFNQSxXQUFXLEdBQUcsQ0FDbkIsYUFEbUIsRUFFbkIsVUFGbUIsRUFHbkIsVUFIbUIsRUFJbkIsY0FKbUIsRUFLbkIsb0JBTG1CLEVBTW5CLGFBTm1CLEVBT25CLFlBUG1CLEVBUW5CLFdBUm1CLEVBU25CLFVBVG1CLEVBVW5CLFdBVm1CLEVBV25CLFdBWG1CLEVBWW5CLFdBWm1CLEVBYW5CLFdBYm1CLEVBY25CLFlBZG1CLEVBZW5CLFlBZm1CLEVBZ0JuQixVQWhCbUIsRUFpQm5CLGVBakJtQixDQUFwQjtBQW9CQSxNQUFNQyxXQUFnQyxHQUFHO0FBQ3hDLGdCQUFZLGFBRDRCO0FBRXhDLGtCQUFjLGVBRjBCO0FBR3hDLGdCQUFZLGFBSDRC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QkFBbUIsQ0FBQ1MsZ0JBQXBCLEdBQXVDLElBQXZDIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3RPcHRpb25UeXBlLCBTZWxlY3Rpb25WYXJpYW50VHlwZVR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL1VJXCI7XG5pbXBvcnQgeyBjcmVhdGVDb25kaXRpb24gfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgeyBDb25kaXRpb25WYWxpZGF0ZWQgfSBmcm9tIFwic2FwL3VpL21kYy9lbnVtXCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlckNvbmRpdGlvbnMgPSB7XG5cdG9wZXJhdG9yOiBzdHJpbmc7XG5cdHZhbHVlczogQXJyYXk8c3RyaW5nPjtcblx0aXNFbXB0eT86IGJvb2xlYW4gfCBudWxsO1xuXHR2YWxpZGF0ZWQ/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBhVmFsaWRUeXBlcyA9IFtcblx0XCJFZG0uQm9vbGVhblwiLFxuXHRcIkVkbS5CeXRlXCIsXG5cdFwiRWRtLkRhdGVcIixcblx0XCJFZG0uRGF0ZVRpbWVcIixcblx0XCJFZG0uRGF0ZVRpbWVPZmZzZXRcIixcblx0XCJFZG0uRGVjaW1hbFwiLFxuXHRcIkVkbS5Eb3VibGVcIixcblx0XCJFZG0uRmxvYXRcIixcblx0XCJFZG0uR3VpZFwiLFxuXHRcIkVkbS5JbnQxNlwiLFxuXHRcIkVkbS5JbnQzMlwiLFxuXHRcIkVkbS5JbnQ2NFwiLFxuXHRcIkVkbS5TQnl0ZVwiLFxuXHRcIkVkbS5TaW5nbGVcIixcblx0XCJFZG0uU3RyaW5nXCIsXG5cdFwiRWRtLlRpbWVcIixcblx0XCJFZG0uVGltZU9mRGF5XCJcbl07XG5cbmNvbnN0IG9FeGNsdWRlTWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuXHRcIkNvbnRhaW5zXCI6IFwiTm90Q29udGFpbnNcIixcblx0XCJTdGFydHNXaXRoXCI6IFwiTm90U3RhcnRzV2l0aFwiLFxuXHRcIkVuZHNXaXRoXCI6IFwiTm90RW5kc1dpdGhcIixcblx0XCJFbXB0eVwiOiBcIk5vdEVtcHR5XCIsXG5cdFwiTm90RW1wdHlcIjogXCJFbXB0eVwiLFxuXHRcIkxFXCI6IFwiTk9UTEVcIixcblx0XCJHRVwiOiBcIk5PVEdFXCIsXG5cdFwiTFRcIjogXCJOT1RMVFwiLFxuXHRcIkdUXCI6IFwiTk9UR1RcIixcblx0XCJCVFwiOiBcIk5PVEJUXCIsXG5cdFwiTkVcIjogXCJFUVwiLFxuXHRcIkVRXCI6IFwiTkVcIlxufTtcblxuLyoqXG4gKiBNZXRob2QgdG8gZ2V0IHRoZSBjb21wbGlhbnQgdmFsdWUgdHlwZSBiYXNlZCBvbiB0aGUgZGF0YSB0eXBlLlxuICpcbiAqIEBwYXJhbSAgc1ZhbHVlIFJhdyB2YWx1ZVxuICogQHBhcmFtICBzVHlwZSBUaGUgcHJvcGVydHkgdHlwZVxuICogQHJldHVybnMgVmFsdWUgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29uZGl0aW9uLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29tcGxpYW50VmFsdWUoc1ZhbHVlOiBhbnksIHNUeXBlOiBzdHJpbmcpIHtcblx0bGV0IG9WYWx1ZTtcblx0aWYgKGFWYWxpZFR5cGVzLmluZGV4T2Yoc1R5cGUpID4gLTEpIHtcblx0XHRvVmFsdWUgPSBzVmFsdWU7XG5cdFx0aWYgKHNUeXBlID09PSBcIkVkbS5Cb29sZWFuXCIpIHtcblx0XHRcdG9WYWx1ZSA9IHNWYWx1ZSA9PT0gXCJ0cnVlXCIgfHwgKHNWYWx1ZSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOiB1bmRlZmluZWQpO1xuXHRcdH0gZWxzZSBpZiAoc1R5cGUgPT09IFwiRWRtLkRvdWJsZVwiIHx8IHNUeXBlID09PSBcIkVkbS5TaW5nbGVcIikge1xuXHRcdFx0b1ZhbHVlID0gaXNOYU4oc1ZhbHVlKSA/IHVuZGVmaW5lZCA6IHBhcnNlRmxvYXQoc1ZhbHVlKTtcblx0XHR9IGVsc2UgaWYgKHNUeXBlID09PSBcIkVkbS5CeXRlXCIgfHwgc1R5cGUgPT09IFwiRWRtLkludDE2XCIgfHwgc1R5cGUgPT09IFwiRWRtLkludDMyXCIgfHwgc1R5cGUgPT09IFwiRWRtLlNCeXRlXCIpIHtcblx0XHRcdG9WYWx1ZSA9IGlzTmFOKHNWYWx1ZSkgPyB1bmRlZmluZWQgOiBwYXJzZUludChzVmFsdWUsIDEwKTtcblx0XHR9IGVsc2UgaWYgKHNUeXBlID09PSBcIkVkbS5EYXRlXCIpIHtcblx0XHRcdG9WYWx1ZSA9IHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KS8pXG5cdFx0XHRcdD8gc1ZhbHVlLm1hdGNoKC9eKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pLylbMF1cblx0XHRcdFx0OiBzVmFsdWUubWF0Y2goL14oXFxkezh9KS8pICYmIHNWYWx1ZS5tYXRjaCgvXihcXGR7OH0pLylbMF07XG5cdFx0fSBlbHNlIGlmIChzVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIikge1xuXHRcdFx0aWYgKHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KVQoXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KVxcKyhcXGR7MSw0fSkvKSkge1xuXHRcdFx0XHRvVmFsdWUgPSBzVmFsdWUubWF0Y2goL14oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSlUKFxcZHsxLDJ9KTooXFxkezEsMn0pOihcXGR7MSwyfSlcXCsoXFxkezEsNH0pLylbMF07XG5cdFx0XHR9IGVsc2UgaWYgKHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KVQoXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KS8pKSB7XG5cdFx0XHRcdG9WYWx1ZSA9IHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KVQoXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KS8pWzBdICsgXCIrMDAwMFwiO1xuXHRcdFx0fSBlbHNlIGlmIChzVmFsdWUubWF0Y2goL14oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSkvKSkge1xuXHRcdFx0XHRvVmFsdWUgPSBzVmFsdWUubWF0Y2goL14oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSkvKVswXSArIFwiVDAwOjAwOjAwKzAwMDBcIjtcblx0XHRcdH0gZWxzZSBpZiAoc1ZhbHVlLmluZGV4T2YoXCJaXCIpID09PSBzVmFsdWUubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRvVmFsdWUgPSBzVmFsdWUuc3BsaXQoXCJaXCIpWzBdICsgXCIrMDEwMFwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b1ZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoc1R5cGUgPT09IFwiRWRtLlRpbWVPZkRheVwiKSB7XG5cdFx0XHRvVmFsdWUgPSBzVmFsdWUubWF0Y2goLyhcXGR7MSwyfSk6KFxcZHsxLDJ9KTooXFxkezEsMn0pLykgPyBzVmFsdWUubWF0Y2goLyhcXGR7MSwyfSk6KFxcZHsxLDJ9KTooXFxkezEsMn0pLylbMF0gOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvVmFsdWU7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGNyZWF0ZSBhIGNvbmRpdGlvbi5cbiAqIEBwYXJhbSAgc09wdGlvbiBPcGVyYXRvciB0byBiZSB1c2VkLlxuICogQHBhcmFtICBvVjEgTG93ZXIgdmFsdWVcbiAqIEBwYXJhbSAgb1YyIEhpZ2hlciB2YWx1ZVxuICogQHBhcmFtIHNTaWduXG4gKiBAcmV0dXJucyBDb25kaXRpb24gdG8gYmUgY3JlYXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNvbmRpdGlvblZhbHVlcyhzT3B0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsIG9WMTogYW55LCBvVjI6IGFueSwgc1NpZ246IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRsZXQgb1ZhbHVlID0gb1YxLFxuXHRcdG9WYWx1ZTIsXG5cdFx0c0ludGVybmFsT3BlcmF0aW9uOiBhbnk7XG5cdGNvbnN0IG9Db25kaXRpb246IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4gPSB7fTtcblx0b0NvbmRpdGlvbi52YWx1ZXMgPSBbXTtcblx0b0NvbmRpdGlvbi5pc0VtcHR5ID0gbnVsbCBhcyBhbnk7XG5cdGlmIChvVjEgPT09IHVuZGVmaW5lZCB8fCBvVjEgPT09IG51bGwpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRzd2l0Y2ggKHNPcHRpb24pIHtcblx0XHRjYXNlIFwiQ1BcIjpcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IFwiQ29udGFpbnNcIjtcblx0XHRcdGlmIChvVmFsdWUpIHtcblx0XHRcdFx0Y29uc3QgbkluZGV4T2YgPSBvVmFsdWUuaW5kZXhPZihcIipcIik7XG5cdFx0XHRcdGNvbnN0IG5MYXN0SW5kZXggPSBvVmFsdWUubGFzdEluZGV4T2YoXCIqXCIpO1xuXG5cdFx0XHRcdC8vIG9ubHkgd2hlbiB0aGVyZSBhcmUgJyonIGF0IGFsbFxuXHRcdFx0XHRpZiAobkluZGV4T2YgPiAtMSkge1xuXHRcdFx0XHRcdGlmIChuSW5kZXhPZiA9PT0gMCAmJiBuTGFzdEluZGV4ICE9PSBvVmFsdWUubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdFx0c0ludGVybmFsT3BlcmF0aW9uID0gXCJFbmRzV2l0aFwiO1xuXHRcdFx0XHRcdFx0b1ZhbHVlID0gb1ZhbHVlLnN1YnN0cmluZygxLCBvVmFsdWUubGVuZ3RoKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKG5JbmRleE9mICE9PSAwICYmIG5MYXN0SW5kZXggPT09IG9WYWx1ZS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBcIlN0YXJ0c1dpdGhcIjtcblx0XHRcdFx0XHRcdG9WYWx1ZSA9IG9WYWx1ZS5zdWJzdHJpbmcoMCwgb1ZhbHVlLmxlbmd0aCAtIDEpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvVmFsdWUgPSBvVmFsdWUuc3Vic3RyaW5nKDEsIG9WYWx1ZS5sZW5ndGggLSAxKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0LyogVE9ETyBBZGQgZGlhZ29ub3N0aWNzIExvZy53YXJuaW5nKFwiQ29udGFpbnMgT3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgJyonLlwiKSAqL1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkVRXCI6XG5cdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBvVjEgPT09IFwiXCIgPyBcIkVtcHR5XCIgOiBzT3B0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIk5FXCI6XG5cdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBvVjEgPT09IFwiXCIgPyBcIk5vdEVtcHR5XCIgOiBzT3B0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkJUXCI6XG5cdFx0XHRpZiAob1YyID09PSB1bmRlZmluZWQgfHwgb1YyID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdG9WYWx1ZTIgPSBvVjI7XG5cdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBzT3B0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkxFXCI6XG5cdFx0Y2FzZSBcIkdFXCI6XG5cdFx0Y2FzZSBcIkdUXCI6XG5cdFx0Y2FzZSBcIkxUXCI6XG5cdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBzT3B0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdC8qIFRPRE8gQWRkIGRpYWdvbm9zdGljcyBMb2cud2FybmluZyhcIlNlbGVjdGlvbiBPcHRpb24gaXMgbm90IHN1cHBvcnRlZCA6ICdcIiArIHNPcHRpb24gKyBcIidcIik7ICovXG5cdFx0XHRyZXR1cm47XG5cdH1cblx0aWYgKHNTaWduID09PSBcIkVcIikge1xuXHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IG9FeGNsdWRlTWFwW3NJbnRlcm5hbE9wZXJhdGlvbl07XG5cdH1cblx0b0NvbmRpdGlvbi5vcGVyYXRvciA9IHNJbnRlcm5hbE9wZXJhdGlvbjtcblx0aWYgKHNJbnRlcm5hbE9wZXJhdGlvbiAhPT0gXCJFbXB0eVwiKSB7XG5cdFx0b0NvbmRpdGlvbi52YWx1ZXMucHVzaChvVmFsdWUpO1xuXHRcdGlmIChvVmFsdWUyKSB7XG5cdFx0XHRvQ29uZGl0aW9uLnZhbHVlcy5wdXNoKG9WYWx1ZTIpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb0NvbmRpdGlvbjtcbn1cblxuLyogTWV0aG9kIHRvIGdldCB0aGUgb3BlcmF0b3IgZnJvbSB0aGUgU2VsZWN0aW9uIE9wdGlvbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9wZXJhdG9yKHNPcGVyYXRvcjogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIHNPcGVyYXRvci5pbmRleE9mKFwiL1wiKSA+IDAgPyBzT3BlcmF0b3Iuc3BsaXQoXCIvXCIpWzFdIDogc09wZXJhdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyc0NvbmRpdGlvbnNGcm9tU2VsZWN0aW9uVmFyaWFudChcblx0ZW50aXR5VHlwZVByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4sXG5cdHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdGdldEN1c3RvbUNvbmRpdGlvbnM/OiBGdW5jdGlvblxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiB7XG5cdGNvbnN0IG9GaWx0ZXJDb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+ID0ge307XG5cdGlmIChzZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0Y29uc3QgYVNlbGVjdE9wdGlvbnMgPSBzZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnM7XG5cdFx0Y29uc3QgYVBhcmFtZXRlcnMgPSBzZWxlY3Rpb25WYXJpYW50LlBhcmFtZXRlcnM7XG5cdFx0Y29uc3QgYVZhbGlkUHJvcGVydGllcyA9IGVudGl0eVR5cGVQcm9wZXJ0aWVzO1xuXHRcdGFTZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZTogYW55ID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZTtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eU5hbWU6IHN0cmluZyA9IHByb3BlcnR5TmFtZS52YWx1ZSB8fCBwcm9wZXJ0eU5hbWUuJFByb3BlcnR5UGF0aDtcblx0XHRcdGNvbnN0IFJhbmdlczogYW55ID0gc2VsZWN0T3B0aW9uLlJhbmdlcztcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGFWYWxpZFByb3BlcnRpZXMpIHtcblx0XHRcdFx0aWYgKHNQcm9wZXJ0eU5hbWUgPT09IGtleSkge1xuXHRcdFx0XHRcdGNvbnN0IG9WYWxpZFByb3BlcnR5ID0gYVZhbGlkUHJvcGVydGllc1trZXldIGFzIGFueTtcblx0XHRcdFx0XHRjb25zdCBhQ29uZGl0aW9uczogYW55W10gPSBbXTtcblx0XHRcdFx0XHRSYW5nZXM/LmZvckVhY2goKFJhbmdlOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IG9Db25kaXRpb24gPSBnZXRDdXN0b21Db25kaXRpb25zXG5cdFx0XHRcdFx0XHRcdD8gZ2V0Q3VzdG9tQ29uZGl0aW9ucyhSYW5nZSwgb1ZhbGlkUHJvcGVydHksIHNQcm9wZXJ0eU5hbWUpXG5cdFx0XHRcdFx0XHRcdDogZ2V0Q29uZGl0aW9ucyhSYW5nZSwgb1ZhbGlkUHJvcGVydHkpO1xuXHRcdFx0XHRcdFx0YUNvbmRpdGlvbnMucHVzaChvQ29uZGl0aW9uKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRpZiAoYUNvbmRpdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRvRmlsdGVyQ29uZGl0aW9uc1tzUHJvcGVydHlOYW1lXSA9IChvRmlsdGVyQ29uZGl0aW9uc1tzUHJvcGVydHlOYW1lXSB8fCBbXSkuY29uY2F0KGFDb25kaXRpb25zKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRhUGFyYW1ldGVycz8uZm9yRWFjaCgocGFyYW1ldGVyOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGggPSBwYXJhbWV0ZXIuUHJvcGVydHlOYW1lLnZhbHVlIHx8IHBhcmFtZXRlci5Qcm9wZXJ0eU5hbWUuJFByb3BlcnR5UGF0aDtcblx0XHRcdGNvbnN0IG9Db25kaXRpb246IGFueSA9IGdldEN1c3RvbUNvbmRpdGlvbnNcblx0XHRcdFx0PyB7IG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMTogcGFyYW1ldGVyLlByb3BlcnR5VmFsdWUsIHZhbHVlMjogbnVsbCwgcGF0aDogc1Byb3BlcnR5UGF0aCwgaXNQYXJhbWV0ZXI6IHRydWUgfVxuXHRcdFx0XHQ6IHtcblx0XHRcdFx0XHRcdG9wZXJhdG9yOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHR2YWx1ZXM6IFtwYXJhbWV0ZXIuUHJvcGVydHlWYWx1ZV0sXG5cdFx0XHRcdFx0XHRpc0VtcHR5OiBudWxsLFxuXHRcdFx0XHRcdFx0dmFsaWRhdGVkOiBDb25kaXRpb25WYWxpZGF0ZWQuVmFsaWRhdGVkLFxuXHRcdFx0XHRcdFx0aXNQYXJhbWV0ZXI6IHRydWVcblx0XHRcdFx0ICB9O1xuXHRcdFx0b0ZpbHRlckNvbmRpdGlvbnNbc1Byb3BlcnR5UGF0aF0gPSBbb0NvbmRpdGlvbl07XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG9GaWx0ZXJDb25kaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZGl0aW9ucyhSYW5nZTogYW55LCBvVmFsaWRQcm9wZXJ0eTogYW55KSB7XG5cdGxldCBvQ29uZGl0aW9uO1xuXHRjb25zdCBzaWduOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBSYW5nZS5TaWduO1xuXHRjb25zdCBzT3B0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBSYW5nZS5PcHRpb24gPyBnZXRPcGVyYXRvcihSYW5nZS5PcHRpb24pIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvVmFsdWUxOiBhbnkgPSBnZXRUeXBlQ29tcGxpYW50VmFsdWUoUmFuZ2UuTG93LCBvVmFsaWRQcm9wZXJ0eS4kVHlwZSk7XG5cdGNvbnN0IG9WYWx1ZTI6IGFueSA9IFJhbmdlLkhpZ2ggPyBnZXRUeXBlQ29tcGxpYW50VmFsdWUoUmFuZ2UuSGlnaCwgb1ZhbGlkUHJvcGVydHkuJFR5cGUpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvQ29uZGl0aW9uVmFsdWVzID0gcmVzb2x2ZUNvbmRpdGlvblZhbHVlcyhzT3B0aW9uLCBvVmFsdWUxLCBvVmFsdWUyLCBzaWduKSBhcyBhbnk7XG5cdGlmIChvQ29uZGl0aW9uVmFsdWVzKSB7XG5cdFx0b0NvbmRpdGlvbiA9IGNyZWF0ZUNvbmRpdGlvbihvQ29uZGl0aW9uVmFsdWVzLm9wZXJhdG9yLCBvQ29uZGl0aW9uVmFsdWVzLnZhbHVlcywgbnVsbCwgbnVsbCwgQ29uZGl0aW9uVmFsaWRhdGVkLlZhbGlkYXRlZCk7XG5cdH1cblx0cmV0dXJuIG9Db25kaXRpb247XG59XG5cbmNvbnN0IGdldERlZmF1bHRWYWx1ZUZpbHRlcnMgPSBmdW5jdGlvbihvQ29udGV4dDogYW55LCBwcm9wZXJ0aWVzOiBhbnkpOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+IHtcblx0Y29uc3QgZmlsdGVyQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiA9IHt9O1xuXHRjb25zdCBlbnRpdHlTZXRQYXRoID0gb0NvbnRleHQuZ2V0SW50ZXJmYWNlKDEpLmdldFBhdGgoKSxcblx0XHRvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0SW50ZXJmYWNlKDEpLmdldE1vZGVsKCk7XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gcHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgZGVmYXVsdEZpbHRlclZhbHVlID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdGVudGl0eVNldFBhdGggKyBcIi9cIiArIGtleSArIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWx0ZXJEZWZhdWx0VmFsdWVcIlxuXHRcdFx0KTtcblx0XHRcdGlmIChkZWZhdWx0RmlsdGVyVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBQcm9wZXJ0eU5hbWUgPSBrZXk7XG5cdFx0XHRcdGZpbHRlckNvbmRpdGlvbnNbUHJvcGVydHlOYW1lXSA9IFtcblx0XHRcdFx0XHRjcmVhdGVDb25kaXRpb24oXCJFUVwiLCBbZGVmYXVsdEZpbHRlclZhbHVlXSwgbnVsbCwgbnVsbCwgQ29uZGl0aW9uVmFsaWRhdGVkLlZhbGlkYXRlZCkgYXMgRmlsdGVyQ29uZGl0aW9uc1xuXHRcdFx0XHRdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmlsdGVyQ29uZGl0aW9ucztcbn07XG5cbmNvbnN0IGdldERlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzID0gZnVuY3Rpb24oXG5cdG9Db250ZXh0OiBhbnksXG5cdHByb3BlcnRpZXM6IGFueSxcblx0ZGVmYXVsdFNlbWFudGljRGF0ZXM6IGFueVxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiB7XG5cdGNvbnN0IGZpbHRlckNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4gPSB7fTtcblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHQvLyBjdXJyZW50bHkgZGVmYXVsdFNlbWFudGljRGF0ZXMgY2FuIHN1cHBvcnQgb25seSBvbmUgZW50cnksIHdlIHBpY2sgdGhlIGZpcnN0IG9uZSBkaXJlY3RseSB1c2luZyAwIGluZGV4XG5cdFx0XHRpZiAoZGVmYXVsdFNlbWFudGljRGF0ZXNba2V5XSAmJiBkZWZhdWx0U2VtYW50aWNEYXRlc1trZXldWzBdKSB7XG5cdFx0XHRcdGZpbHRlckNvbmRpdGlvbnNba2V5XSA9IFtjcmVhdGVDb25kaXRpb24oZGVmYXVsdFNlbWFudGljRGF0ZXNba2V5XVswXS5vcGVyYXRvciwgW10sIG51bGwsIG51bGwsIG51bGwpIGFzIEZpbHRlckNvbmRpdGlvbnNdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmlsdGVyQ29uZGl0aW9ucztcbn07XG5cbmZ1bmN0aW9uIGdldEVkaXRTdGF0dXNGaWx0ZXIoKTogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiB7XG5cdGNvbnN0IG9maWx0ZXJDb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+ID0ge307XG5cdG9maWx0ZXJDb25kaXRpb25zW1wiJGVkaXRTdGF0ZVwiXSA9IFtcblx0XHRjcmVhdGVDb25kaXRpb24oXCJEUkFGVF9FRElUX1NUQVRFXCIsIFtcIkFMTFwiXSwgbnVsbCwgbnVsbCwgQ29uZGl0aW9uVmFsaWRhdGVkLlZhbGlkYXRlZCkgYXMgRmlsdGVyQ29uZGl0aW9uc1xuXHRdO1xuXHRyZXR1cm4gb2ZpbHRlckNvbmRpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJDb25kaXRpb25zKG9Db250ZXh0OiBhbnksIGZpbHRlckNvbmRpdGlvbnM6IGFueSk6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4ge1xuXHRsZXQgZWRpdFN0YXRlRmlsdGVyO1xuXHRjb25zdCBlbnRpdHlTZXRQYXRoID0gb0NvbnRleHQuZ2V0SW50ZXJmYWNlKDEpLmdldFBhdGgoKSxcblx0XHRvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0SW50ZXJmYWNlKDEpLmdldE1vZGVsKCksXG5cdFx0ZW50aXR5VHlwZUFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoZW50aXR5U2V0UGF0aCArIFwiQFwiKSxcblx0XHRlbnRpdHlUeXBlUHJvcGVydGllcyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGVudGl0eVNldFBhdGggKyBcIi9cIik7XG5cdGlmIChcblx0XHRlbnRpdHlUeXBlQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiXSB8fFxuXHRcdGVudGl0eVR5cGVBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlXCJdXG5cdCkge1xuXHRcdGVkaXRTdGF0ZUZpbHRlciA9IGdldEVkaXRTdGF0dXNGaWx0ZXIoKTtcblx0fVxuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50ID0gZmlsdGVyQ29uZGl0aW9ucz8uc2VsZWN0aW9uVmFyaWFudDtcblx0Y29uc3QgZGVmYXVsdFNlbWFudGljRGF0ZXMgPSBmaWx0ZXJDb25kaXRpb25zPy5kZWZhdWx0U2VtYW50aWNEYXRlcyB8fCB7fTtcblx0Y29uc3QgZGVmYXVsdEZpbHRlcnMgPSBnZXREZWZhdWx0VmFsdWVGaWx0ZXJzKG9Db250ZXh0LCBlbnRpdHlUeXBlUHJvcGVydGllcyk7XG5cdGNvbnN0IGRlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzID0gZ2V0RGVmYXVsdFNlbWFudGljRGF0ZUZpbHRlcnMob0NvbnRleHQsIGVudGl0eVR5cGVQcm9wZXJ0aWVzLCBkZWZhdWx0U2VtYW50aWNEYXRlcyk7XG5cdGlmIChzZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0ZmlsdGVyQ29uZGl0aW9ucyA9IGdldEZpbHRlcnNDb25kaXRpb25zRnJvbVNlbGVjdGlvblZhcmlhbnQoZW50aXR5VHlwZVByb3BlcnRpZXMsIHNlbGVjdGlvblZhcmlhbnQpO1xuXHR9IGVsc2UgaWYgKGRlZmF1bHRGaWx0ZXJzKSB7XG5cdFx0ZmlsdGVyQ29uZGl0aW9ucyA9IGRlZmF1bHRGaWx0ZXJzO1xuXHR9XG5cdGlmIChkZWZhdWx0U2VtYW50aWNEYXRlRmlsdGVycykge1xuXHRcdC8vIG9ubHkgZm9yIHNlbWFudGljIGRhdGU6XG5cdFx0Ly8gMS4gdmFsdWUgZnJvbSBtYW5pZmVzdCBnZXQgbWVyZ2VkIHdpdGggU1Zcblx0XHQvLyAyLiBtYW5pZmVzdCB2YWx1ZSBpcyBnaXZlbiBwcmVmZXJlbmNlIHdoZW4gdGhlcmUgaXMgc2FtZSBzZW1hbnRpYyBkYXRlIHByb3BlcnR5IGluIFNWIGFuZCBtYW5pZmVzdFxuXHRcdGZpbHRlckNvbmRpdGlvbnMgPSB7IC4uLmZpbHRlckNvbmRpdGlvbnMsIC4uLmRlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzIH07XG5cdH1cblx0aWYgKGVkaXRTdGF0ZUZpbHRlcikge1xuXHRcdGZpbHRlckNvbmRpdGlvbnMgPSB7IC4uLmZpbHRlckNvbmRpdGlvbnMsIC4uLmVkaXRTdGF0ZUZpbHRlciB9O1xuXHR9XG5cdHJldHVybiAoT2JqZWN0LmtleXMoZmlsdGVyQ29uZGl0aW9ucykubGVuZ3RoID4gMCA/IEpTT04uc3RyaW5naWZ5KGZpbHRlckNvbmRpdGlvbnMpIDogdW5kZWZpbmVkKSBhcyBhbnk7XG59XG5cbmdldEZpbHRlckNvbmRpdGlvbnMucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG4iXX0=
@@ -174,7 +174,7 @@ export function getFiltersConditionsFromSelectionVariant(
174
174
  selectionVariant: SelectionVariantTypeTypes,
175
175
  getCustomConditions?: Function
176
176
  ): Record<string, FilterConditions[]> {
177
- const ofilterConditions: Record<string, FilterConditions[]> = {};
177
+ const oFilterConditions: Record<string, FilterConditions[]> = {};
178
178
  if (selectionVariant) {
179
179
  const aSelectOptions = selectionVariant.SelectOptions;
180
180
  const aParameters = selectionVariant.Parameters;
@@ -192,10 +192,10 @@ export function getFiltersConditionsFromSelectionVariant(
192
192
  ? getCustomConditions(Range, oValidProperty, sPropertyName)
193
193
  : getConditions(Range, oValidProperty);
194
194
  aConditions.push(oCondition);
195
- if (aConditions.length) {
196
- ofilterConditions[sPropertyName] = (ofilterConditions[sPropertyName] || []).concat(aConditions);
197
- }
198
195
  });
196
+ if (aConditions.length) {
197
+ oFilterConditions[sPropertyName] = (oFilterConditions[sPropertyName] || []).concat(aConditions);
198
+ }
199
199
  }
200
200
  }
201
201
  });
@@ -210,10 +210,10 @@ export function getFiltersConditionsFromSelectionVariant(
210
210
  validated: ConditionValidated.Validated,
211
211
  isParameter: true
212
212
  };
213
- ofilterConditions[sPropertyPath] = [oCondition];
213
+ oFilterConditions[sPropertyPath] = [oCondition];
214
214
  });
215
215
  }
216
- return ofilterConditions;
216
+ return oFilterConditions;
217
217
  }
218
218
 
219
219
  export function getConditions(Range: any, oValidProperty: any) {