@sapui5/sap.fe.macros 1.139.0 → 1.140.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Field.js +65 -55
  4. package/src/sap/fe/macros/Field.ts +83 -57
  5. package/src/sap/fe/macros/FooterContent.js +5 -2
  6. package/src/sap/fe/macros/FooterContent.tsx +4 -1
  7. package/src/sap/fe/macros/MessageButton.js +1 -2
  8. package/src/sap/fe/macros/MessageButton.tsx +0 -1
  9. package/src/sap/fe/macros/MultiValueField.js +1 -3
  10. package/src/sap/fe/macros/MultiValueField.tsx +0 -2
  11. package/src/sap/fe/macros/Share.js +14 -2
  12. package/src/sap/fe/macros/Share.tsx +13 -0
  13. package/src/sap/fe/macros/Status.js +226 -0
  14. package/src/sap/fe/macros/Status.tsx +192 -0
  15. package/src/sap/fe/macros/ValueHelp.js +4 -28
  16. package/src/sap/fe/macros/ValueHelp.tsx +2 -42
  17. package/src/sap/fe/macros/ai/EasyFilterBar.js +105 -96
  18. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +122 -103
  19. package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
  20. package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
  21. package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
  22. package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
  23. package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
  24. package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
  25. package/src/sap/fe/macros/chart/MdcChartTemplate.js +2 -4
  26. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +1 -4
  27. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
  28. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
  29. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
  30. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
  31. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
  32. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
  33. package/src/sap/fe/macros/designtime/Designtime.helper.js +28 -1
  34. package/src/sap/fe/macros/designtime/Designtime.helper.ts +27 -0
  35. package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
  36. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
  37. package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
  38. package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
  39. package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
  40. package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
  41. package/src/sap/fe/macros/form/Form.js +1 -4
  42. package/src/sap/fe/macros/form/Form.tsx +0 -3
  43. package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
  44. package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
  45. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  46. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  47. package/src/sap/fe/macros/form/FormHelper.js +1 -2
  48. package/src/sap/fe/macros/form/FormHelper.ts +0 -1
  49. package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
  50. package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
  51. package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
  52. package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
  53. package/src/sap/fe/macros/internal/FilterField.block.js +7 -1
  54. package/src/sap/fe/macros/internal/FilterField.block.ts +8 -0
  55. package/src/sap/fe/macros/internal/field/DisplayStyle.js +3 -3
  56. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +2 -2
  57. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +1 -1
  58. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +1 -0
  59. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
  60. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
  61. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
  62. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
  63. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -1
  64. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +10 -3
  65. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +13 -2
  66. package/src/sap/fe/macros/library.js +1 -1
  67. package/src/sap/fe/macros/messagebundle.properties +5 -3
  68. package/src/sap/fe/macros/messagebundle_ar.properties +7 -1
  69. package/src/sap/fe/macros/messagebundle_bg.properties +7 -1
  70. package/src/sap/fe/macros/messagebundle_ca.properties +10 -4
  71. package/src/sap/fe/macros/messagebundle_cnr.properties +7 -1
  72. package/src/sap/fe/macros/messagebundle_cs.properties +6 -0
  73. package/src/sap/fe/macros/messagebundle_cy.properties +8 -2
  74. package/src/sap/fe/macros/messagebundle_da.properties +7 -1
  75. package/src/sap/fe/macros/messagebundle_de.properties +13 -7
  76. package/src/sap/fe/macros/messagebundle_el.properties +6 -0
  77. package/src/sap/fe/macros/messagebundle_en.properties +10 -4
  78. package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -2
  79. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +10 -4
  80. package/src/sap/fe/macros/messagebundle_es.properties +8 -2
  81. package/src/sap/fe/macros/messagebundle_es_MX.properties +10 -4
  82. package/src/sap/fe/macros/messagebundle_et.properties +8 -2
  83. package/src/sap/fe/macros/messagebundle_fi.properties +6 -0
  84. package/src/sap/fe/macros/messagebundle_fr.properties +8 -2
  85. package/src/sap/fe/macros/messagebundle_fr_CA.properties +7 -1
  86. package/src/sap/fe/macros/messagebundle_hi.properties +7 -1
  87. package/src/sap/fe/macros/messagebundle_hr.properties +7 -1
  88. package/src/sap/fe/macros/messagebundle_hu.properties +6 -0
  89. package/src/sap/fe/macros/messagebundle_id.properties +10 -4
  90. package/src/sap/fe/macros/messagebundle_it.properties +6 -0
  91. package/src/sap/fe/macros/messagebundle_iw.properties +7 -1
  92. package/src/sap/fe/macros/messagebundle_ja.properties +8 -2
  93. package/src/sap/fe/macros/messagebundle_kk.properties +10 -4
  94. package/src/sap/fe/macros/messagebundle_ko.properties +6 -0
  95. package/src/sap/fe/macros/messagebundle_lt.properties +7 -1
  96. package/src/sap/fe/macros/messagebundle_lv.properties +7 -1
  97. package/src/sap/fe/macros/messagebundle_mk.properties +7 -1
  98. package/src/sap/fe/macros/messagebundle_ms.properties +6 -0
  99. package/src/sap/fe/macros/messagebundle_nl.properties +6 -0
  100. package/src/sap/fe/macros/messagebundle_no.properties +6 -0
  101. package/src/sap/fe/macros/messagebundle_pl.properties +7 -1
  102. package/src/sap/fe/macros/messagebundle_pt.properties +6 -0
  103. package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -0
  104. package/src/sap/fe/macros/messagebundle_ro.properties +7 -1
  105. package/src/sap/fe/macros/messagebundle_ru.properties +9 -3
  106. package/src/sap/fe/macros/messagebundle_sh.properties +7 -1
  107. package/src/sap/fe/macros/messagebundle_sk.properties +6 -0
  108. package/src/sap/fe/macros/messagebundle_sl.properties +6 -0
  109. package/src/sap/fe/macros/messagebundle_sr.properties +7 -1
  110. package/src/sap/fe/macros/messagebundle_sv.properties +6 -0
  111. package/src/sap/fe/macros/messagebundle_th.properties +7 -1
  112. package/src/sap/fe/macros/messagebundle_tr.properties +6 -0
  113. package/src/sap/fe/macros/messagebundle_uk.properties +9 -3
  114. package/src/sap/fe/macros/messagebundle_vi.properties +8 -2
  115. package/src/sap/fe/macros/messagebundle_zh_CN.properties +6 -0
  116. package/src/sap/fe/macros/messagebundle_zh_TW.properties +7 -1
  117. package/src/sap/fe/macros/messages/MessageButton.js +39 -18
  118. package/src/sap/fe/macros/messages/MessageButton.ts +40 -17
  119. package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
  120. package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
  121. package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
  122. package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
  123. package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
  124. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
  125. package/src/sap/fe/macros/share/ShareAPI.js +4 -29
  126. package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
  127. package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
  128. package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
  129. package/src/sap/fe/macros/table/MdcTableTemplate.js +3 -1
  130. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +6 -2
  131. package/src/sap/fe/macros/table/TableHelper.js +1 -2
  132. package/src/sap/fe/macros/table/TableHelper.ts +0 -1
  133. package/src/sap/fe/macros/table/TableRuntime.js +24 -5
  134. package/src/sap/fe/macros/table/TableRuntime.ts +31 -3
  135. package/src/sap/fe/macros/table/Utils.js +6 -2
  136. package/src/sap/fe/macros/table/Utils.ts +5 -1
  137. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
  138. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
  139. package/src/sap/fe/macros/table/delegates/TableDelegate.js +1 -2
  140. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +0 -1
  141. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
  142. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
  143. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +5 -1
  144. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +7 -0
  145. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  146. package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
  147. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +10 -1
  148. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +17 -0
  149. package/src/sap/fe/macros/visualfilters/VisualFilter.js +1 -2
  150. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +0 -1
  151. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +2 -3
  152. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +1 -2
@@ -6,14 +6,11 @@ import { isEntitySet } from "sap/fe/core/helpers/TypeGuards";
6
6
  import FieldHelper from "sap/fe/macros/field/FieldHelper";
7
7
  import { getValueHelpTemplate } from "sap/fe/macros/internal/valuehelp/ValueHelpTemplating";
8
8
 
9
- import Log from "sap/base/Log";
10
9
  import type PageController from "sap/fe/core/PageController";
11
10
  import type Control from "sap/ui/core/Control";
12
11
  import UI5Element from "sap/ui/core/Element";
13
12
  import type MDCValueHelp from "sap/ui/mdc/ValueHelp";
14
13
  import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
15
- import type { ValueHelpPayload } from "./internal/valuehelp/ValueListHelper";
16
- import ValueListHelper from "./internal/valuehelp/ValueListHelper";
17
14
 
18
15
  /**
19
16
  * Building block for creating a ValueHelp based on the provided OData V4 metadata.
@@ -125,49 +122,12 @@ export default class ValueHelp extends BuildingBlock<MDCValueHelp | Control> {
125
122
 
126
123
  onMetadataAvailable(): void {
127
124
  if (!this.content) {
128
- this._getOwner()?.runAsOwner(async () => {
129
- try {
130
- this.content = this.createContent();
131
- const content = this.content as MDCValueHelp;
132
- const vhPayload = content?.getPayload?.() as ValueHelpPayload;
133
- const metaModel = this._getOwner()?.getMetaModel();
134
-
135
- if (vhPayload && metaModel) {
136
- const metaContextPath = this.getMetaPathObject(this.metaPath, this.contextPath);
137
- const propertyPath = metaContextPath?.getPath() as string;
138
- await this._resolveValueHelpDescriptionPath(vhPayload, metaModel, propertyPath, content);
139
- }
140
- } catch (err) {
141
- const errorMessage = err instanceof Error ? err : new Error(String(err));
142
- Log.warning("Failed to create content or resolve description path", errorMessage, "sap.fe.macros.ValueHelp");
143
- }
125
+ this._getOwner()?.runAsOwner(() => {
126
+ this.content = this.createContent();
144
127
  });
145
128
  }
146
129
  }
147
130
 
148
- private async _resolveValueHelpDescriptionPath(
149
- payload: ValueHelpPayload,
150
- metaModel: ODataMetaModel,
151
- propertyPath: string,
152
- content?: Control | MDCValueHelp
153
- ): Promise<void> {
154
- const valueListInfos = await ValueListHelper.getValueListInfo(undefined, propertyPath, payload, metaModel);
155
-
156
- let qualifierForTypeahead = typeof content?.data === "function" ? content.data("valuelistForValidation") || "" : "";
157
-
158
- if (qualifierForTypeahead === " ") {
159
- qualifierForTypeahead = "";
160
- }
161
-
162
- const valueListInfo = qualifierForTypeahead
163
- ? valueListInfos.find((sub) => sub.valueHelpQualifier === qualifierForTypeahead) || valueListInfos[0]
164
- : valueListInfos[0];
165
-
166
- if (valueListInfo) {
167
- ValueListHelper._addDescriptionInfosToPayload(payload, valueListInfo, metaModel);
168
- }
169
- }
170
-
171
131
  createContent(): Control | MDCValueHelp | undefined {
172
132
  const metaContextPath = this.getMetaPathObject(this.metaPath, this.contextPath);
173
133
  const metaModel = this._getOwner()?.getMetaModel(this.metaModel);
@@ -25,7 +25,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
25
25
  function _initializerWarningHelper(r, e) { throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform."); }
26
26
  /**
27
27
  * Delivery for beta release for the easy filter feature.
28
- * @experimental
29
28
  */
30
29
  let EasyFilterBar = (_dec = defineUI5Class("sap.fe.macros.EasyFilterBar"), _dec2 = implementInterface("sap.fe.core.controllerextensions.viewState.IViewStateContributor"), _dec3 = association({
31
30
  type: "sap.fe.macros.filterBar.FilterBarAPI"
@@ -104,106 +103,103 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
104
103
  return this.getAppComponent()?.getManifestEntry("sap.app").id ?? "<unknownID>";
105
104
  };
106
105
  _proto.onMetadataAvailable = function onMetadataAvailable() {
107
- this._fetchedCodeList ??= {};
108
106
  this.filterBarMetadata = this.prepareFilterBarMetadata();
109
107
  this.recommendedQueries = this.getAppComponent()?.getManifestEntry("sap.fe")?.macros?.easyFilter?.recommendedQueries ?? [];
110
108
  this.content = this.createContent();
111
109
  this.content.filterBarMetadata = this.filterBarMetadata;
112
110
  };
111
+ _proto.getUnitForFilterField = function getUnitForFilterField(field, allFilterFields) {
112
+ const propertyObject = field.getTarget();
113
+ const unitAnnotation = propertyObject.annotations.Measures?.ISOCurrency ?? propertyObject.annotations.Measures?.Unit;
114
+ const unitProperty = isPathAnnotationExpression(unitAnnotation) ? unitAnnotation.$target : undefined;
115
+ return allFilterFields.find(f => f.getTarget() === unitProperty)?.annotationPath;
116
+ };
117
+ _proto.getDefaultValueForFilterField = function getDefaultValueForFilterField(field, startupParameters) {
118
+ let defaultValue;
119
+ if (startupParameters.hasOwnProperty(field.name)) {
120
+ defaultValue = [{
121
+ operator: FilterOperator.EQ,
122
+ selectedValues: startupParameters[field.name]
123
+ }];
124
+ } else if (field.isParameter && startupParameters.hasOwnProperty(field.name.substring(2))) {
125
+ defaultValue = [{
126
+ operator: FilterOperator.EQ,
127
+ selectedValues: startupParameters[field.name.substring(2)]
128
+ }];
129
+ }
130
+ return defaultValue;
131
+ };
132
+ _proto.getEditStateFilterMetadata = function getEditStateFilterMetadata(metaModel) {
133
+ // Assemble the code list for the editing status filter values:
134
+ const props = new JSONModel({
135
+ isDraftCollaborative: ModelHelper.isCollaborationDraftSupported(metaModel)
136
+ }).createBindingContext("/");
137
+ const editingStatusCodeList = DraftEditState.getEditStatesContext(props).getObject("/").map(state => ({
138
+ value: state.id,
139
+ description: state.display
140
+ }));
141
+ return {
142
+ name: "$editState",
143
+ label: this.getTranslatedText("FILTERBAR_EDITING_STATUS"),
144
+ dataType: "Edm.String",
145
+ filterable: true,
146
+ codeList: editingStatusCodeList,
147
+ type: "MenuWithSingleSelect"
148
+ };
149
+ };
150
+ _proto.getTokenType = function getTokenType(prop) {
151
+ if (hasValueHelpWithFixedValues(prop)) {
152
+ return "MenuWithCheckBox";
153
+ }
154
+ switch (prop.type) {
155
+ case "Edm.Date":
156
+ return "Calendar";
157
+ case "Edm.TimeOfDay":
158
+ return "Time";
159
+ default:
160
+ return "ValueHelp";
161
+ }
162
+ };
113
163
  _proto.prepareFilterBarMetadata = function prepareFilterBarMetadata() {
114
164
  const owner = this._getOwner();
115
165
  const definitionForPage = owner.preprocessorContext?.getDefinitionForPage();
116
- let filterBarDef;
117
- if (definitionForPage) {
118
- filterBarDef = definitionForPage.getFilterBarDefinition({});
119
- const metaModel = owner.preprocessorContext?.models.metaModel;
120
- const getType = (edmType, codeList) => {
121
- if (codeList) {
122
- return "MenuWithCheckBox";
123
- }
124
- switch (edmType) {
125
- case "Edm.Date":
126
- return "Calendar";
127
- case "Edm.TimeOfDay":
128
- return "Time";
129
- default:
130
- return "ValueHelp";
131
- }
166
+ if (!definitionForPage) {
167
+ return [];
168
+ }
169
+ const filterBarDef = definitionForPage.getFilterBarDefinition({});
170
+ const metaModel = owner.preprocessorContext?.models.metaModel;
171
+ const startupParameters = owner.getAppComponent().getComponentData()?.startupParameters ?? {};
172
+ const filterFields = filterBarDef.getFilterFields();
173
+ const nonHiddenFilterFields = filterFields.filter(field => {
174
+ return !field.getTarget()?.annotations?.UI?.HiddenFilter?.valueOf();
175
+ });
176
+ const result = nonHiddenFilterFields.map(field => {
177
+ const propertyObject = field.getTarget();
178
+ let codeList;
179
+ if (hasValueHelpWithFixedValues(propertyObject)) {
180
+ codeList = async () => this.getCodeListForProperty(field.annotationPath);
181
+ }
182
+ return {
183
+ name: field.annotationPath,
184
+ label: field.label,
185
+ dataType: propertyObject.type,
186
+ required: field.required ?? false,
187
+ defaultValue: this.getDefaultValueForFilterField(field, startupParameters),
188
+ filterable: true,
189
+ codeList: codeList,
190
+ type: this.getTokenType(propertyObject),
191
+ unit: this.getUnitForFilterField(field, filterFields),
192
+ maxLength: propertyObject.maxLength
132
193
  };
133
- const startupParameters = owner.getAppComponent().getComponentData()?.startupParameters ?? {};
134
- const filterFields = filterBarDef.getFilterFields();
135
- const nonHiddenFilterFields = filterFields.filter(field => {
136
- return !field.getTarget()?.annotations?.UI?.HiddenFilter?.valueOf();
137
- });
138
- const result = nonHiddenFilterFields.map(field => {
139
- const propertyObject = field.getTarget();
140
- let codeList;
141
- const hasCodeList = hasValueHelpWithFixedValues(propertyObject);
142
- if (hasCodeList) {
143
- codeList = this._fetchedCodeList[field.name];
144
- if (!codeList) {
145
- codeList = async () => this.getCodeListForProperty(field.name, field.annotationPath);
146
- }
147
- }
148
-
149
- // Check if the filter field's target property has a currency or a unit. If so, look for the corresponding filter field (the
150
- // annotation has to be a path for that) and set the 'unit' property.
151
- const unitAnnotation = propertyObject.annotations.Measures?.ISOCurrency ?? propertyObject.annotations.Measures?.Unit;
152
- const unitProperty = isPathAnnotationExpression(unitAnnotation) ? unitAnnotation.$target : undefined;
153
- const unit = unitProperty ? filterFields.find(f => f.getTarget() === unitProperty)?.name : undefined;
154
- let defaultValue;
155
- if (startupParameters.hasOwnProperty(field.name)) {
156
- defaultValue = [{
157
- operator: FilterOperator.EQ,
158
- selectedValues: startupParameters[field.name]
159
- }];
160
- } else if (field.isParameter && startupParameters.hasOwnProperty(field.name.substring(2))) {
161
- defaultValue = [{
162
- operator: FilterOperator.EQ,
163
- selectedValues: startupParameters[field.name.substring(2)]
164
- }];
165
- }
166
- return {
167
- name: field.annotationPath,
168
- filterFieldName: field.name,
169
- label: field.label,
170
- dataType: propertyObject.type,
171
- required: field.required ?? false,
172
- defaultValue: defaultValue,
173
- filterable: true,
174
- codeList: codeList,
175
- type: getType(propertyObject.type, codeList),
176
- unit: unit
177
- };
178
- });
179
-
180
- // [Editing Status]
194
+ });
181
195
 
182
- if (ModelHelper.isMetaPathDraftSupported(definitionForPage.getMetaPath())) {
183
- // Assemble the code list for the editing status filter values:
184
- const props = new JSONModel({
185
- isDraftCollaborative: ModelHelper.isCollaborationDraftSupported(metaModel)
186
- }).createBindingContext("/");
187
- const editingStatusCodeList = DraftEditState.getEditStatesContext(props).getObject("/").map(state => ({
188
- value: state.id,
189
- description: state.display
190
- }));
191
- result.push({
192
- name: "$editState",
193
- filterFieldName: "$editState",
194
- label: this.getTranslatedText("FILTERBAR_EDITING_STATUS"),
195
- dataType: "Edm.String",
196
- required: false,
197
- filterable: true,
198
- codeList: editingStatusCodeList,
199
- type: "MenuWithCheckBox"
200
- });
201
- }
202
- return result;
196
+ // [Editing Status]
197
+ if (ModelHelper.isMetaPathDraftSupported(definitionForPage.getMetaPath())) {
198
+ result.push(this.getEditStateFilterMetadata(metaModel));
203
199
  }
204
- return [];
200
+ return result;
205
201
  };
206
- _proto.getCodeListForProperty = async function getCodeListForProperty(key, propertyPath) {
202
+ _proto.getCodeListForProperty = async function getCodeListForProperty(propertyPath) {
207
203
  const defaultValueList = await this.getValueList(propertyPath);
208
204
  if (!defaultValueList) {
209
205
  return [];
@@ -214,14 +210,14 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
214
210
  });
215
211
  const data = await listBinding.requestContexts();
216
212
  const filterGroupValues = data.map(mapValueListToCodeList(defaultValueList));
217
- this._fetchedCodeList[key] = filterGroupValues;
218
- const codeListProperty = this.filterBarMetadata.find(field => field.name === key);
213
+ const codeListProperty = this.filterBarMetadata.find(field => field.name === propertyPath);
219
214
  if (codeListProperty) {
220
215
  codeListProperty.codeList = filterGroupValues;
221
216
  }
222
217
  return filterGroupValues;
223
218
  };
224
219
  _proto.resolveTokenValuesForField = async function resolveTokenValuesForField(fieldName, values) {
220
+ let filteredValues = values;
225
221
  const field = this.filterBarMetadata.find(_ref => {
226
222
  let {
227
223
  name
@@ -229,19 +225,32 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
229
225
  return name === fieldName;
230
226
  });
231
227
  if (field) {
228
+ const maxLength = field.maxLength;
229
+ if (maxLength !== undefined) {
230
+ filteredValues = values.map(token => {
231
+ const filtered = token.selectedValues.filter(val => typeof val !== "string" || val.length <= maxLength);
232
+ return filtered.length > 0 ? {
233
+ ...token,
234
+ selectedValues: filtered
235
+ } : undefined;
236
+ }).filter(Boolean);
237
+ if (filteredValues.length === 0) {
238
+ return [];
239
+ }
240
+ }
232
241
  const valueList = await this.getValueList(field.name);
233
242
  if (valueList && ValueListHelper.isValueListSearchable(field.name, valueList)) {
234
- const resolvedTokenValues = await Promise.all(values.map(async value => resolveTokenValue(valueList, value)));
243
+ const resolvedTokenValues = await Promise.all(filteredValues.map(async value => resolveTokenValue(valueList, value)));
235
244
  return resolvedTokenValues.flat();
236
245
  }
237
246
  }
238
247
 
239
248
  // return original values converted to the expected format
240
- return unresolvedResult(values);
249
+ return unresolvedResult(filteredValues);
241
250
  };
242
- _proto.getValueList = async function getValueList(fieldName) {
251
+ _proto.getValueList = async function getValueList(propertyPath) {
243
252
  const metaModel = this.getMetaModel();
244
- const valueLists = await ValueListHelper.getValueListInfo(undefined, fieldName, undefined, metaModel);
253
+ const valueLists = await ValueListHelper.getValueListInfo(undefined, propertyPath, undefined, metaModel);
245
254
  return valueLists[0];
246
255
  };
247
256
  _proto.onTokensChanged = async function onTokensChanged(e) {
@@ -425,4 +434,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
425
434
  _exports = EasyFilterBar;
426
435
  return _exports;
427
436
  }, false);
428
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVyQmFyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJfZGVjMyIsImFzc29jaWF0aW9uIiwidHlwZSIsIl9kZWM0IiwiX2RlYzUiLCJwcm9wZXJ0eSIsIl9kZWM2IiwiX2RlYzciLCJhZ2dyZWdhdGlvbiIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJwcmVwYXJlRmVhdHVyZSIsInRoZW4iLCJlYXN5RmlsdGVyUGF0aCIsImNvbnRlbnQiLCJzZXRFYXN5RmlsdGVyTGliIiwiY2F0Y2giLCJlcnJvciIsIkxvZyIsImRlYnVnIiwidW5kZWZpbmVkIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImFwcGx5TGVnYWN5U3RhdGUiLCJnZXRDb250cmlsU3RhdGUiLCJvTmF2UGFyYW1ldGVycyIsIl9zaG91bGRBcHBseURpZmZTdGF0ZSIsIl9za2lwTWVyZ2UiLCJzZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0T3B0aW9uc05hbWVzIiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJmaWx0ZXJCYXJNZXRhZGF0YSIsImZvckVhY2giLCJmaWVsZCIsImluY2x1ZGVzIiwibmFtZSIsImRlZmF1bHRWYWx1ZSIsImdldFNlbGVjdE9wdGlvbiIsInJlZHVjZSIsImFjYyIsIm9wdGlvbiIsIlNpZ24iLCJPcHRpb24iLCJGaWx0ZXJPcGVyYXRvciIsIkJUIiwiTkIiLCJIaWdoIiwicHVzaCIsIm9wZXJhdG9yIiwic2VsZWN0ZWRWYWx1ZXMiLCJMb3ciLCJORSIsInJlc2V0U3RhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFwcGx5U3RhdGUiLCJfc3RhdGUiLCJfb05hdlBhcmFtZXRlcnMiLCJyZXRyaWV2ZVN0YXRlIiwiZ2V0QXBwbGljYXRpb25JZCIsImdldE1hbmlmZXN0RW50cnkiLCJpZCIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJfZmV0Y2hlZENvZGVMaXN0IiwicHJlcGFyZUZpbHRlckJhck1ldGFkYXRhIiwicmVjb21tZW5kZWRRdWVyaWVzIiwibWFjcm9zIiwiZWFzeUZpbHRlciIsImNyZWF0ZUNvbnRlbnQiLCJvd25lciIsIl9nZXRPd25lciIsImRlZmluaXRpb25Gb3JQYWdlIiwicHJlcHJvY2Vzc29yQ29udGV4dCIsImdldERlZmluaXRpb25Gb3JQYWdlIiwiZmlsdGVyQmFyRGVmIiwiZ2V0RmlsdGVyQmFyRGVmaW5pdGlvbiIsIm1ldGFNb2RlbCIsIm1vZGVscyIsImdldFR5cGUiLCJlZG1UeXBlIiwiY29kZUxpc3QiLCJzdGFydHVwUGFyYW1ldGVycyIsImdldENvbXBvbmVudERhdGEiLCJmaWx0ZXJGaWVsZHMiLCJnZXRGaWx0ZXJGaWVsZHMiLCJub25IaWRkZW5GaWx0ZXJGaWVsZHMiLCJmaWx0ZXIiLCJnZXRUYXJnZXQiLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuRmlsdGVyIiwidmFsdWVPZiIsInJlc3VsdCIsIm1hcCIsInByb3BlcnR5T2JqZWN0IiwiaGFzQ29kZUxpc3QiLCJoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMiLCJnZXRDb2RlTGlzdEZvclByb3BlcnR5IiwiYW5ub3RhdGlvblBhdGgiLCJ1bml0QW5ub3RhdGlvbiIsIk1lYXN1cmVzIiwiSVNPQ3VycmVuY3kiLCJVbml0IiwidW5pdFByb3BlcnR5IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCIkdGFyZ2V0IiwidW5pdCIsImZpbmQiLCJmIiwiaGFzT3duUHJvcGVydHkiLCJFUSIsImlzUGFyYW1ldGVyIiwic3Vic3RyaW5nIiwiZmlsdGVyRmllbGROYW1lIiwibGFiZWwiLCJkYXRhVHlwZSIsInJlcXVpcmVkIiwiZmlsdGVyYWJsZSIsIk1vZGVsSGVscGVyIiwiaXNNZXRhUGF0aERyYWZ0U3VwcG9ydGVkIiwiZ2V0TWV0YVBhdGgiLCJwcm9wcyIsIkpTT05Nb2RlbCIsImlzRHJhZnRDb2xsYWJvcmF0aXZlIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImVkaXRpbmdTdGF0dXNDb2RlTGlzdCIsIkRyYWZ0RWRpdFN0YXRlIiwiZ2V0RWRpdFN0YXRlc0NvbnRleHQiLCJnZXRPYmplY3QiLCJzdGF0ZSIsInZhbHVlIiwiZGVzY3JpcHRpb24iLCJkaXNwbGF5IiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJrZXkiLCJwcm9wZXJ0eVBhdGgiLCJkZWZhdWx0VmFsdWVMaXN0IiwiZ2V0VmFsdWVMaXN0IiwidmFsdWVMaXN0SW5mbyIsImxpc3RCaW5kaW5nIiwiJG1vZGVsIiwiYmluZExpc3QiLCJDb2xsZWN0aW9uUGF0aCIsIiRzZWxlY3QiLCJnZW5lcmF0ZVNlbGVjdFBhcmFtZXRlciIsImRhdGEiLCJyZXF1ZXN0Q29udGV4dHMiLCJmaWx0ZXJHcm91cFZhbHVlcyIsIm1hcFZhbHVlTGlzdFRvQ29kZUxpc3QiLCJjb2RlTGlzdFByb3BlcnR5IiwicmVzb2x2ZVRva2VuVmFsdWVzRm9yRmllbGQiLCJmaWVsZE5hbWUiLCJ2YWx1ZXMiLCJfcmVmIiwidmFsdWVMaXN0IiwiVmFsdWVMaXN0SGVscGVyIiwiaXNWYWx1ZUxpc3RTZWFyY2hhYmxlIiwicmVzb2x2ZWRUb2tlblZhbHVlcyIsImFsbCIsInJlc29sdmVUb2tlblZhbHVlIiwiZmxhdCIsInVucmVzb2x2ZWRSZXN1bHQiLCJnZXRNZXRhTW9kZWwiLCJ2YWx1ZUxpc3RzIiwiZ2V0VmFsdWVMaXN0SW5mbyIsIm9uVG9rZW5zQ2hhbmdlZCIsImUiLCJmaWx0ZXJCYXIiLCJVSTVFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJmaWx0ZXJCYXJBUEkiLCJnZXRQYXJlbnQiLCJ0b2tlbnMiLCJnZXRQYXJhbWV0ZXIiLCJjbGVhckVkaXRGaWx0ZXIiLCJzb21lIiwidG9rZW5EZWZpbml0aW9uIiwiX2NsZWFyRmlsdGVyVmFsdWVzV2l0aE9wdGlvbnMiLCJmb3JtYXRlRGF0YVR5cGVzIiwidG9rZW4iLCJ0b2tlbktleVNwZWNpZmljYXRpb24iLCJrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzIiwiRmlsdGVyVXRpbHMiLCJhZGRGaWx0ZXJWYWx1ZXMiLCJ0cmlnZ2VyU2VhcmNoIiwiZGF0ZVR5cGUiLCJEYXRlMSIsImRhdGVUaW1lT2Zmc2V0VHlwZSIsIkRhdGVUaW1lT2Zmc2V0IiwiVjQiLCJ0aW1lT2ZEYXlUeXBlIiwiVGltZU9mRGF5Iiwia2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlIiwicmVxdWlyZWRDb252ZXJ0ZXIiLCJpZHgiLCJwYXJzZVZhbHVlIiwic2hvd1ZhbHVlSGVscEZvcktleSIsInNob3dGaWx0ZXJGaWVsZCIsIm9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZCIsIm9uQmVmb3JlUXVlcnlQcm9jZXNzaW5nIiwidWlNb2RlbCIsImdldE1vZGVsIiwiQnVzeUxvY2tlciIsImxvY2siLCJvbkFmdGVyUXVlcnlQcm9jZXNzaW5nIiwidW5sb2NrIiwib25DbGVhckZpbHRlcnMiLCJvblF1ZXJ5Q2hhbmdlZCIsImZpcmVGaWx0ZXJzQ2hhbmdlZCIsImNvbmRpdGlvbnNCYXNlZCIsImhhbmRsZVNob3dWYWx1ZUhlbHAiLCJldmVudCIsInJlamVjdCIsImNvbmRpdGlvbnMiLCJjb25kaXRpb24iLCJ2YWxpZGF0ZWQiLCJjb25kaXRpb25Ub1Jlc29sdmUiLCJ3YXJuaW5nIiwicmVzb2x2ZWRWYWx1ZXMiLCJFcnJvciIsIlN0cmluZyIsIl9qc3giLCJFYXN5RmlsdGVyQmFyQ29udGFpbmVyIiwiY29udGV4dFBhdGgiLCJnZXRPd25lckNvbnRleHRQYXRoIiwiYXBwSWQiLCJlYXN5RmlsdGVyTGliIiwic2hvd1ZhbHVlSGVscCIsImJpbmQiLCJkYXRhRmV0Y2hlciIsInJlY29tbWVuZGVkVmFsdWVzIiwicXVlcnlDaGFuZ2VkIiwidG9rZW5zQ2hhbmdlZCIsImJlZm9yZVF1ZXJ5UHJvY2Vzc2luZyIsImFmdGVyUXVlcnlQcm9jZXNzaW5nIiwiY2xlYXJGaWx0ZXJzIiwiQnVpbGRpbmdCbG9jayIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRWFzeUZpbHRlckJhci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGFzc29jaWF0aW9uLCBkZWZpbmVVSTVDbGFzcywgaW1wbGVtZW50SW50ZXJmYWNlLCBwcm9wZXJ0eSwgdHlwZSBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7XG5cdEVhc3lGaWx0ZXJCYXJDb250YWluZXIkU2hvd1ZhbHVlSGVscEV2ZW50LFxuXHRFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YSxcblx0VG9rZW5EZWZpbml0aW9uLFxuXHRUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbixcblx0VG9rZW5UeXBlLFxuXHRWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb250cm9scy9lYXN5RmlsdGVyL0Vhc3lGaWx0ZXJCYXJDb250YWluZXJcIjtcbmltcG9ydCBFYXN5RmlsdGVyQmFyQ29udGFpbmVyIGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9FYXN5RmlsdGVyQmFyQ29udGFpbmVyXCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFN0YXRlLCBOYXZpZ2F0aW9uUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHR5cGUgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy92aWV3U3RhdGUvSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckZpZWxkIH0gZnJvbSBcInNhcC9mZS9jb3JlL2RlZmluaXRpb24vRkVEZWZpbml0aW9uXCI7XG5pbXBvcnQgdHlwZSBNZXRhUGF0aCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhUGF0aFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZW5lcmF0ZVNlbGVjdFBhcmFtZXRlcixcblx0bWFwVmFsdWVMaXN0VG9Db2RlTGlzdCxcblx0cmVzb2x2ZVRva2VuVmFsdWUsXG5cdHVucmVzb2x2ZWRSZXN1bHRcbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvRWFzeUZpbHRlckRhdGFGZXRjaGVyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgRHJhZnRFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0RyYWZ0RWRpdFN0YXRlXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXJBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckFQSVwiO1xuaW1wb3J0IFZhbHVlTGlzdEhlbHBlciwgeyB0eXBlIFZhbHVlTGlzdEluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgeyBDb25kaXRpb25PYmplY3QgfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgRGF0ZTEgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS90eXBlL0RhdGVcIjtcbmltcG9ydCBEYXRlVGltZU9mZnNldCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvRGF0ZVRpbWVPZmZzZXRcIjtcbmltcG9ydCB0eXBlIE9EYXRhVHlwZSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvT0RhdGFUeXBlXCI7XG5pbXBvcnQgVGltZU9mRGF5IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdHlwZS9UaW1lT2ZEYXlcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQ29kZUxpc3QsIE1heUJlTGF6eSB9IGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcblxudHlwZSBFYXN5RmlsdGVyQmFyU3RhdGUgPSB7fTtcbnR5cGUgRmllbGRNZXRhZGF0YSA9IEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhICYgeyBmaWx0ZXJGaWVsZE5hbWU6IHN0cmluZyB9O1xuXG4vKipcbiAqIERlbGl2ZXJ5IGZvciBiZXRhIHJlbGVhc2UgZm9yIHRoZSBlYXN5IGZpbHRlciBmZWF0dXJlLlxuICogQGV4cGVyaW1lbnRhbFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLkVhc3lGaWx0ZXJCYXJcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVhc3lGaWx0ZXJCYXIgZXh0ZW5kcyBCdWlsZGluZ0Jsb2NrIGltcGxlbWVudHMgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yPEVhc3lGaWx0ZXJCYXJTdGF0ZT4ge1xuXHRAaW1wbGVtZW50SW50ZXJmYWNlKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMudmlld1N0YXRlLklWaWV3U3RhdGVDb250cmlidXRvclwiKVxuXHRfX2ltcGxlbWVudHNfX3NhcF9mZV9jb3JlX2NvbnRyb2xsZXJleHRlbnNpb25zX3ZpZXdTdGF0ZV9JVmlld1N0YXRlQ29udHJpYnV0b3IhOiBib29sZWFuO1xuXG5cdEBhc3NvY2lhdGlvbih7IHR5cGU6IFwic2FwLmZlLm1hY3Jvcy5maWx0ZXJCYXIuRmlsdGVyQmFyQVBJXCIgfSlcblx0ZmlsdGVyQmFyITogc3RyaW5nO1xuXG5cdEBhc3NvY2lhdGlvbih7IHR5cGU6IFwic2FwLmZlLm1hY3Jvcy5jb250ZW50U3dpdGNoZXIuQ29udGVudFN3aXRjaGVyXCIgfSlcblx0Y29udGVudFN3aXRjaGVyITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0Y29udGVudFN3aXRjaGVyS2V5Pzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUuY29udHJvbHMuZWFzeUZpbHRlci5FYXN5RmlsdGVyQmFyQ29udGFpbmVyXCIgfSlcblx0Y29udGVudD86IEVuaGFuY2VXaXRoVUk1PEVhc3lGaWx0ZXJCYXJDb250YWluZXI+O1xuXG5cdF9mZXRjaGVkQ29kZUxpc3QhOiBSZWNvcmQ8c3RyaW5nLCBDb2RlTGlzdCB8IHVuZGVmaW5lZD47XG5cblx0cHJpdmF0ZSBmaWx0ZXJCYXJNZXRhZGF0YSE6IEZpZWxkTWV0YWRhdGFbXTtcblxuXHRwcml2YXRlIGVhc3lGaWx0ZXJQYXRoPzogc3RyaW5nO1xuXG5cdHByaXZhdGUgcmVjb21tZW5kZWRRdWVyaWVzPzogc3RyaW5nW107XG5cblx0Y29uc3RydWN0b3IocHJvcGVydGllczogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxFYXN5RmlsdGVyQmFyPiwgb3RoZXJzPzogJENvbnRyb2xTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BlcnRpZXMsIG90aGVycyk7XG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKVxuXHRcdFx0Py5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpXG5cdFx0XHQucHJlcGFyZUZlYXR1cmUoXCJNYWdpY0ZpbHRlcmluZ1wiKVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmVhc3lGaWx0ZXJQYXRoID0gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcblx0XHRcdFx0dGhpcy5jb250ZW50Py5zZXRFYXN5RmlsdGVyTGliKHRoaXMuZWFzeUZpbHRlclBhdGgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRMb2cuZGVidWcoXCJFcnJvciB3aGlsZSBsb2FkaW5nIEVhc3lGaWx0ZXJcIiwgZXJyb3IpO1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRhc3luYyBhcHBseUxlZ2FjeVN0YXRlKFxuXHRcdGdldENvbnRyaWxTdGF0ZT86IChjb250cm9sOiBNYW5hZ2VkT2JqZWN0KSA9PiBDb250cm9sU3RhdGUsXG5cdFx0b05hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyLFxuXHRcdF9zaG91bGRBcHBseURpZmZTdGF0ZT86IGJvb2xlYW4sXG5cdFx0X3NraXBNZXJnZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKG9OYXZQYXJhbWV0ZXJzPy5zZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0XHRjb25zdCBzZWxlY3RPcHRpb25zTmFtZXMgPSBvTmF2UGFyYW1ldGVycy5zZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzKCk7XG5cdFx0XHR0aGlzLmZpbHRlckJhck1ldGFkYXRhLmZvckVhY2goKGZpZWxkKSA9PiB7XG5cdFx0XHRcdGlmIChzZWxlY3RPcHRpb25zTmFtZXMuaW5jbHVkZXMoZmllbGQubmFtZSkpIHtcblx0XHRcdFx0XHRmaWVsZC5kZWZhdWx0VmFsdWUgPSBvTmF2UGFyYW1ldGVycy5zZWxlY3Rpb25WYXJpYW50IS5nZXRTZWxlY3RPcHRpb24oZmllbGQubmFtZSk/LnJlZHVjZSgoYWNjLCBvcHRpb24pID0+IHtcblx0XHRcdFx0XHRcdGlmIChvcHRpb24uU2lnbiA9PT0gXCJJXCIpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbi5PcHRpb24gPT09IEZpbHRlck9wZXJhdG9yLkJUIHx8IG9wdGlvbi5PcHRpb24gPT09IEZpbHRlck9wZXJhdG9yLk5CKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbi5IaWdoICE9PSBudWxsICYmIG9wdGlvbi5IaWdoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGFjYy5wdXNoKHsgb3BlcmF0b3I6IG9wdGlvbi5PcHRpb24sIHNlbGVjdGVkVmFsdWVzOiBbb3B0aW9uLkxvdywgb3B0aW9uLkhpZ2hdIH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRhY2MucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRvcGVyYXRvcjogb3B0aW9uLk9wdGlvbiBhcyBFeGNsdWRlPEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CPixcblx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkVmFsdWVzOiBbb3B0aW9uLkxvd11cblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YWNjLnB1c2goeyBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuTkUsIHNlbGVjdGVkVmFsdWVzOiBbb3B0aW9uLkxvd10gfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gYWNjO1xuXHRcdFx0XHRcdH0sIFtdIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuY29udGVudD8ucmVzZXRTdGF0ZShmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fVxuXG5cdGFwcGx5U3RhdGUoX3N0YXRlOiBFYXN5RmlsdGVyQmFyU3RhdGUsIF9vTmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZCB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHJldHJpZXZlU3RhdGUoKTogRWFzeUZpbHRlckJhclN0YXRlIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0Z2V0QXBwbGljYXRpb25JZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKS5pZCA/PyBcIjx1bmtub3duSUQ+XCI7XG5cdH1cblxuXHRvbk1ldGFkYXRhQXZhaWxhYmxlKCk6IHZvaWQge1xuXHRcdHRoaXMuX2ZldGNoZWRDb2RlTGlzdCA/Pz0ge307XG5cdFx0dGhpcy5maWx0ZXJCYXJNZXRhZGF0YSA9IHRoaXMucHJlcGFyZUZpbHRlckJhck1ldGFkYXRhKCk7XG5cdFx0dGhpcy5yZWNvbW1lbmRlZFF1ZXJpZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmZlXCIpPy5tYWNyb3M/LmVhc3lGaWx0ZXI/LnJlY29tbWVuZGVkUXVlcmllcyA/PyBbXTtcblx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKSBhcyBFbmhhbmNlV2l0aFVJNTxFYXN5RmlsdGVyQmFyQ29udGFpbmVyPjtcblx0XHR0aGlzLmNvbnRlbnQuZmlsdGVyQmFyTWV0YWRhdGEgPSB0aGlzLmZpbHRlckJhck1ldGFkYXRhO1xuXHR9XG5cblx0cHJlcGFyZUZpbHRlckJhck1ldGFkYXRhKCk6IEZpZWxkTWV0YWRhdGFbXSB7XG5cdFx0Y29uc3Qgb3duZXIgPSB0aGlzLl9nZXRPd25lcigpITtcblx0XHRjb25zdCBkZWZpbml0aW9uRm9yUGFnZSA9IG93bmVyLnByZXByb2Nlc3NvckNvbnRleHQ/LmdldERlZmluaXRpb25Gb3JQYWdlKCk7XG5cdFx0bGV0IGZpbHRlckJhckRlZjtcblx0XHRpZiAoZGVmaW5pdGlvbkZvclBhZ2UpIHtcblx0XHRcdGZpbHRlckJhckRlZiA9IGRlZmluaXRpb25Gb3JQYWdlLmdldEZpbHRlckJhckRlZmluaXRpb24oe30pO1xuXG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBvd25lci5wcmVwcm9jZXNzb3JDb250ZXh0Py5tb2RlbHMubWV0YU1vZGVsIGFzIE9EYXRhTWV0YU1vZGVsO1xuXG5cdFx0XHRjb25zdCBnZXRUeXBlID0gKGVkbVR5cGU6IHN0cmluZywgY29kZUxpc3Q6IE1heUJlTGF6eTxDb2RlTGlzdD4gfCB1bmRlZmluZWQpOiBUb2tlblR5cGUgPT4ge1xuXHRcdFx0XHRpZiAoY29kZUxpc3QpIHtcblx0XHRcdFx0XHRyZXR1cm4gXCJNZW51V2l0aENoZWNrQm94XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3dpdGNoIChlZG1UeXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIkVkbS5EYXRlXCI6XG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJDYWxlbmRhclwiO1xuXHRcdFx0XHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJUaW1lXCI7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHJldHVybiBcIlZhbHVlSGVscFwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc3RhcnR1cFBhcmFtZXRlcnMgPSBvd25lci5nZXRBcHBDb21wb25lbnQoKS5nZXRDb21wb25lbnREYXRhKCk/LnN0YXJ0dXBQYXJhbWV0ZXJzID8/IHt9O1xuXG5cdFx0XHRjb25zdCBmaWx0ZXJGaWVsZHMgPSBmaWx0ZXJCYXJEZWYuZ2V0RmlsdGVyRmllbGRzKCk7XG5cdFx0XHRjb25zdCBub25IaWRkZW5GaWx0ZXJGaWVsZHMgPSBmaWx0ZXJGaWVsZHMuZmlsdGVyKChmaWVsZDogRmlsdGVyRmllbGQpID0+IHtcblx0XHRcdFx0cmV0dXJuICFmaWVsZC5nZXRUYXJnZXQoKT8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW5GaWx0ZXI/LnZhbHVlT2YoKTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gbm9uSGlkZGVuRmlsdGVyRmllbGRzLm1hcCgoZmllbGQ6IEZpbHRlckZpZWxkKTogRmllbGRNZXRhZGF0YSA9PiB7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5T2JqZWN0ID0gZmllbGQuZ2V0VGFyZ2V0KCk7XG5cdFx0XHRcdGxldCBjb2RlTGlzdDogTWF5QmVMYXp5PENvZGVMaXN0PiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Y29uc3QgaGFzQ29kZUxpc3QgPSBoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMocHJvcGVydHlPYmplY3QpO1xuXHRcdFx0XHRpZiAoaGFzQ29kZUxpc3QpIHtcblx0XHRcdFx0XHRjb2RlTGlzdCA9IHRoaXMuX2ZldGNoZWRDb2RlTGlzdFtmaWVsZC5uYW1lXTtcblx0XHRcdFx0XHRpZiAoIWNvZGVMaXN0KSB7XG5cdFx0XHRcdFx0XHRjb2RlTGlzdCA9IGFzeW5jICgpOiBQcm9taXNlPENvZGVMaXN0PiA9PiB0aGlzLmdldENvZGVMaXN0Rm9yUHJvcGVydHkoZmllbGQubmFtZSwgZmllbGQuYW5ub3RhdGlvblBhdGghKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiB0aGUgZmlsdGVyIGZpZWxkJ3MgdGFyZ2V0IHByb3BlcnR5IGhhcyBhIGN1cnJlbmN5IG9yIGEgdW5pdC4gSWYgc28sIGxvb2sgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZpbHRlciBmaWVsZCAodGhlXG5cdFx0XHRcdC8vIGFubm90YXRpb24gaGFzIHRvIGJlIGEgcGF0aCBmb3IgdGhhdCkgYW5kIHNldCB0aGUgJ3VuaXQnIHByb3BlcnR5LlxuXHRcdFx0XHRjb25zdCB1bml0QW5ub3RhdGlvbiA9IHByb3BlcnR5T2JqZWN0LmFubm90YXRpb25zLk1lYXN1cmVzPy5JU09DdXJyZW5jeSA/PyBwcm9wZXJ0eU9iamVjdC5hbm5vdGF0aW9ucy5NZWFzdXJlcz8uVW5pdDtcblx0XHRcdFx0Y29uc3QgdW5pdFByb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odW5pdEFubm90YXRpb24pID8gdW5pdEFubm90YXRpb24uJHRhcmdldCA6IHVuZGVmaW5lZDtcblx0XHRcdFx0Y29uc3QgdW5pdCA9IHVuaXRQcm9wZXJ0eSA/IGZpbHRlckZpZWxkcy5maW5kKChmKSA9PiBmLmdldFRhcmdldCgpID09PSB1bml0UHJvcGVydHkpPy5uYW1lIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRsZXQgZGVmYXVsdFZhbHVlOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAoc3RhcnR1cFBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoZmllbGQubmFtZSkpIHtcblx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgPSBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSxcblx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IHN0YXJ0dXBQYXJhbWV0ZXJzW2ZpZWxkLm5hbWVdIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW1wic2VsZWN0ZWRWYWx1ZXNcIl1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGZpZWxkLmlzUGFyYW1ldGVyICYmIHN0YXJ0dXBQYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KGZpZWxkLm5hbWUuc3Vic3RyaW5nKDIpKSkge1xuXHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSA9IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZFZhbHVlczogc3RhcnR1cFBhcmFtZXRlcnNbZmllbGQubmFtZS5zdWJzdHJpbmcoMildIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW1wic2VsZWN0ZWRWYWx1ZXNcIl1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0bmFtZTogZmllbGQuYW5ub3RhdGlvblBhdGghLFxuXHRcdFx0XHRcdGZpbHRlckZpZWxkTmFtZTogZmllbGQubmFtZSxcblx0XHRcdFx0XHRsYWJlbDogZmllbGQubGFiZWwsXG5cdFx0XHRcdFx0ZGF0YVR5cGU6IHByb3BlcnR5T2JqZWN0LnR5cGUsXG5cdFx0XHRcdFx0cmVxdWlyZWQ6IGZpZWxkLnJlcXVpcmVkID8/IGZhbHNlLFxuXHRcdFx0XHRcdGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuXHRcdFx0XHRcdGZpbHRlcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29kZUxpc3Q6IGNvZGVMaXN0LFxuXHRcdFx0XHRcdHR5cGU6IGdldFR5cGUocHJvcGVydHlPYmplY3QudHlwZSwgY29kZUxpc3QpIGFzIEV4Y2x1ZGU8VG9rZW5UeXBlLCBcIlZhbHVlSGVscFwiPixcblx0XHRcdFx0XHR1bml0OiB1bml0XG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gW0VkaXRpbmcgU3RhdHVzXVxuXG5cdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNNZXRhUGF0aERyYWZ0U3VwcG9ydGVkKGRlZmluaXRpb25Gb3JQYWdlLmdldE1ldGFQYXRoKCkgYXMgdW5rbm93biBhcyBNZXRhUGF0aDx1bmtub3duPikpIHtcblx0XHRcdFx0Ly8gQXNzZW1ibGUgdGhlIGNvZGUgbGlzdCBmb3IgdGhlIGVkaXRpbmcgc3RhdHVzIGZpbHRlciB2YWx1ZXM6XG5cdFx0XHRcdGNvbnN0IHByb3BzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRcdFx0aXNEcmFmdENvbGxhYm9yYXRpdmU6IE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkKG1ldGFNb2RlbClcblx0XHRcdFx0fSkuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXG5cdFx0XHRcdGNvbnN0IGVkaXRpbmdTdGF0dXNDb2RlTGlzdCA9IERyYWZ0RWRpdFN0YXRlLmdldEVkaXRTdGF0ZXNDb250ZXh0KHByb3BzKVxuXHRcdFx0XHRcdC5nZXRPYmplY3QoXCIvXCIpXG5cdFx0XHRcdFx0Lm1hcCgoc3RhdGU6IHsgaWQ6IHN0cmluZzsgZGlzcGxheTogc3RyaW5nIH0pID0+ICh7IHZhbHVlOiBzdGF0ZS5pZCwgZGVzY3JpcHRpb246IHN0YXRlLmRpc3BsYXkgfSkpO1xuXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHtcblx0XHRcdFx0XHRuYW1lOiBcIiRlZGl0U3RhdGVcIixcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZE5hbWU6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdFx0XHRcdGxhYmVsOiB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiRklMVEVSQkFSX0VESVRJTkdfU1RBVFVTXCIpLFxuXHRcdFx0XHRcdGRhdGFUeXBlOiBcIkVkbS5TdHJpbmdcIixcblx0XHRcdFx0XHRyZXF1aXJlZDogZmFsc2UsXG5cdFx0XHRcdFx0ZmlsdGVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb2RlTGlzdDogZWRpdGluZ1N0YXR1c0NvZGVMaXN0LFxuXHRcdFx0XHRcdHR5cGU6IFwiTWVudVdpdGhDaGVja0JveFwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0YXN5bmMgZ2V0Q29kZUxpc3RGb3JQcm9wZXJ0eShrZXk6IHN0cmluZywgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBQcm9taXNlPENvZGVMaXN0PiB7XG5cdFx0Y29uc3QgZGVmYXVsdFZhbHVlTGlzdCA9IGF3YWl0IHRoaXMuZ2V0VmFsdWVMaXN0KHByb3BlcnR5UGF0aCk7XG5cblx0XHRpZiAoIWRlZmF1bHRWYWx1ZUxpc3QpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRjb25zdCB2YWx1ZUxpc3RJbmZvID0gZGVmYXVsdFZhbHVlTGlzdC52YWx1ZUxpc3RJbmZvO1xuXG5cdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSB2YWx1ZUxpc3RJbmZvLiRtb2RlbC5iaW5kTGlzdChgLyR7dmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH1gLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7XG5cdFx0XHQkc2VsZWN0OiBnZW5lcmF0ZVNlbGVjdFBhcmFtZXRlcihkZWZhdWx0VmFsdWVMaXN0KVxuXHRcdH0pO1xuXHRcdGNvbnN0IGRhdGEgPSBhd2FpdCBsaXN0QmluZGluZy5yZXF1ZXN0Q29udGV4dHMoKTtcblxuXHRcdGNvbnN0IGZpbHRlckdyb3VwVmFsdWVzID0gZGF0YS5tYXAobWFwVmFsdWVMaXN0VG9Db2RlTGlzdChkZWZhdWx0VmFsdWVMaXN0KSk7XG5cdFx0dGhpcy5fZmV0Y2hlZENvZGVMaXN0W2tleV0gPSBmaWx0ZXJHcm91cFZhbHVlcztcblx0XHRjb25zdCBjb2RlTGlzdFByb3BlcnR5ID0gdGhpcy5maWx0ZXJCYXJNZXRhZGF0YS5maW5kKChmaWVsZCkgPT4gZmllbGQubmFtZSA9PT0ga2V5KTtcblx0XHRpZiAoY29kZUxpc3RQcm9wZXJ0eSkge1xuXHRcdFx0Y29kZUxpc3RQcm9wZXJ0eS5jb2RlTGlzdCA9IGZpbHRlckdyb3VwVmFsdWVzO1xuXHRcdH1cblx0XHRyZXR1cm4gZmlsdGVyR3JvdXBWYWx1ZXM7XG5cdH1cblxuXHRhc3luYyByZXNvbHZlVG9rZW5WYWx1ZXNGb3JGaWVsZChcblx0XHRmaWVsZE5hbWU6IHN0cmluZyxcblx0XHR2YWx1ZXM6IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW11cblx0KTogUHJvbWlzZTxWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXT4ge1xuXHRcdGNvbnN0IGZpZWxkID0gdGhpcy5maWx0ZXJCYXJNZXRhZGF0YS5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gZmllbGROYW1lKTtcblx0XHRpZiAoZmllbGQpIHtcblx0XHRcdGNvbnN0IHZhbHVlTGlzdCA9IGF3YWl0IHRoaXMuZ2V0VmFsdWVMaXN0KGZpZWxkLm5hbWUpO1xuXG5cdFx0XHRpZiAodmFsdWVMaXN0ICYmIFZhbHVlTGlzdEhlbHBlci5pc1ZhbHVlTGlzdFNlYXJjaGFibGUoZmllbGQubmFtZSwgdmFsdWVMaXN0KSkge1xuXHRcdFx0XHRjb25zdCByZXNvbHZlZFRva2VuVmFsdWVzID0gYXdhaXQgUHJvbWlzZS5hbGwodmFsdWVzLm1hcChhc3luYyAodmFsdWUpID0+IHJlc29sdmVUb2tlblZhbHVlKHZhbHVlTGlzdCwgdmFsdWUpKSk7XG5cdFx0XHRcdHJldHVybiByZXNvbHZlZFRva2VuVmFsdWVzLmZsYXQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyByZXR1cm4gb3JpZ2luYWwgdmFsdWVzIGNvbnZlcnRlZCB0byB0aGUgZXhwZWN0ZWQgZm9ybWF0XG5cdFx0cmV0dXJuIHVucmVzb2x2ZWRSZXN1bHQodmFsdWVzKTtcblx0fVxuXG5cdGFzeW5jIGdldFZhbHVlTGlzdChmaWVsZE5hbWU6IHN0cmluZyk6IFByb21pc2U8VmFsdWVMaXN0SW5mbyB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IHRoaXMuZ2V0TWV0YU1vZGVsKCkhO1xuXHRcdGNvbnN0IHZhbHVlTGlzdHMgPSBhd2FpdCBWYWx1ZUxpc3RIZWxwZXIuZ2V0VmFsdWVMaXN0SW5mbyh1bmRlZmluZWQsIGZpZWxkTmFtZSwgdW5kZWZpbmVkLCBtZXRhTW9kZWwpO1xuXHRcdHJldHVybiB2YWx1ZUxpc3RzWzBdO1xuXHR9XG5cblx0YXN5bmMgb25Ub2tlbnNDaGFuZ2VkKGU6IFVJNUV2ZW50PHsgdG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXSB9LCBFYXN5RmlsdGVyQmFyQ29udGFpbmVyPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5maWx0ZXJCYXIpIGFzIEZpbHRlckJhcjtcblx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSBmaWx0ZXJCYXIuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdGNvbnN0IHRva2VucyA9IGUuZ2V0UGFyYW1ldGVyKFwidG9rZW5zXCIpO1xuXHRcdGNvbnN0IGNsZWFyRWRpdEZpbHRlciA9IHRva2Vucy5zb21lKCh0b2tlbkRlZmluaXRpb24pID0+IHRva2VuRGVmaW5pdGlvbi5rZXkgPT09IFwiJGVkaXRTdGF0ZVwiKTtcblx0XHRhd2FpdCBmaWx0ZXJCYXJBUEkuX2NsZWFyRmlsdGVyVmFsdWVzV2l0aE9wdGlvbnMoZmlsdGVyQmFyLCB7IGNsZWFyRWRpdEZpbHRlciB9KTtcblx0XHR0aGlzLmZvcm1hdGVEYXRhVHlwZXModG9rZW5zKTtcblxuXHRcdGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG5cdFx0XHRpZiAodG9rZW4ua2V5ID09PSBcIiRlZGl0U3RhdGVcIikge1xuXHRcdFx0XHQvLyBjb252ZXJ0IHRoZSAkZWRpdFN0YXRlIGZpbHRlciBjb25kaXRpb25cblx0XHRcdFx0Zm9yIChjb25zdCB0b2tlbktleVNwZWNpZmljYXRpb24gb2YgdG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcykge1xuXHRcdFx0XHRcdGF3YWl0IEZpbHRlclV0aWxzLmFkZEZpbHRlclZhbHVlcyhcblx0XHRcdFx0XHRcdGZpbHRlckJhckFQSS5jb250ZW50LFxuXHRcdFx0XHRcdFx0dG9rZW4ua2V5LFxuXHRcdFx0XHRcdFx0XCJEUkFGVF9FRElUX1NUQVRFXCIsXG5cdFx0XHRcdFx0XHR0b2tlbktleVNwZWNpZmljYXRpb24uc2VsZWN0ZWRWYWx1ZXNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmaWVsZCA9IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEuZmluZCgoZikgPT4gZi5uYW1lID09PSB0b2tlbi5rZXkpITtcblx0XHRcdFx0Zm9yIChjb25zdCB0b2tlbktleVNwZWNpZmljYXRpb24gb2YgdG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcykge1xuXHRcdFx0XHRcdGNvbnN0IHsgb3BlcmF0b3IsIHNlbGVjdGVkVmFsdWVzIH0gPSB0b2tlbktleVNwZWNpZmljYXRpb247XG5cdFx0XHRcdFx0YXdhaXQgRmlsdGVyVXRpbHMuYWRkRmlsdGVyVmFsdWVzKGZpbHRlckJhckFQSS5jb250ZW50LCBmaWVsZC5uYW1lLCBvcGVyYXRvciwgc2VsZWN0ZWRWYWx1ZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGF3YWl0IGZpbHRlckJhckFQSS50cmlnZ2VyU2VhcmNoKCk7XG5cdH1cblxuXHQvL1dlIG5lZWQgdGhlIGJlbG93IGZ1bmN0aW9uIHNvIHRoYXQgdGhlIGRhdGUgb2JqZWN0cyBhbmQgZGF0ZVRpbWVPZmZzZXRzIHdvdWxkIGJlIGNvbnZlcnRlZCB0byBzdHJpbmcgdHlwZSBhcyB0aGUgZGF0ZSBvYmplY3QgaXMgbm90IGEgdmFsaWQgdHlwZSBpbiBWNCB3b3JsZFxuXHRmb3JtYXRlRGF0YVR5cGVzKHRva2VuczogVG9rZW5EZWZpbml0aW9uW10pOiB2b2lkIHtcblx0XHRjb25zdCBkYXRlVHlwZSA9IG5ldyBEYXRlMSgpLFxuXHRcdFx0ZGF0ZVRpbWVPZmZzZXRUeXBlID0gbmV3IERhdGVUaW1lT2Zmc2V0KHVuZGVmaW5lZCwgeyBWNDogdHJ1ZSB9KSxcblx0XHRcdHRpbWVPZkRheVR5cGUgPSBuZXcgVGltZU9mRGF5KCk7XG5cdFx0dG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRjb25zdCBlZG1UeXBlID0gdGhpcy5maWx0ZXJCYXJNZXRhZGF0YS5maW5kKChkYXRhKSA9PiBkYXRhLm5hbWUgPT09IHRva2VuLmtleSk/LmRhdGFUeXBlO1xuXHRcdFx0dG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcy5mb3JFYWNoKChrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWUpID0+IHtcblx0XHRcdFx0bGV0IHJlcXVpcmVkQ29udmVydGVyOiBPRGF0YVR5cGU7XG5cdFx0XHRcdHN3aXRjaCAoZWRtVHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgXCJFZG0uRGF0ZVwiOlxuXHRcdFx0XHRcdFx0cmVxdWlyZWRDb252ZXJ0ZXIgPSBkYXRlVHlwZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRcdFx0XHRyZXF1aXJlZENvbnZlcnRlciA9IHRpbWVPZkRheVR5cGU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6XG5cdFx0XHRcdFx0XHRyZXF1aXJlZENvbnZlcnRlciA9IGRhdGVUaW1lT2Zmc2V0VHlwZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlLnNlbGVjdGVkVmFsdWVzLmZvckVhY2goKHZhbHVlLCBpZHgpID0+IHtcblx0XHRcdFx0XHRrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWUuc2VsZWN0ZWRWYWx1ZXNbaWR4XSA9IHJlcXVpcmVkQ29udmVydGVyLnBhcnNlVmFsdWUodmFsdWUsIFwib2JqZWN0XCIpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgc2hvd1ZhbHVlSGVscEZvcktleShrZXk6IHN0cmluZyk6IFByb21pc2U8Q29uZGl0aW9uT2JqZWN0W10+IHtcblx0XHRjb25zdCBmaWVsZCA9IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEuZmluZCgoZikgPT4gZi5uYW1lID09PSBrZXkpITtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmlsdGVyQmFyKSBhcyBGaWx0ZXJCYXI7XG5cdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRhd2FpdCBmaWx0ZXJCYXJBUEkuc2hvd0ZpbHRlckZpZWxkKGZpZWxkLm5hbWUpO1xuXHRcdHJldHVybiBmaWx0ZXJCYXJBUEkub3BlblZhbHVlSGVscEZvckZpbHRlckZpZWxkKGZpZWxkLm5hbWUpO1xuXHR9XG5cblx0b25CZWZvcmVRdWVyeVByb2Nlc3NpbmcoKTogdm9pZCB7XG5cdFx0Y29uc3QgdWlNb2RlbCA9IHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWw7XG5cdFx0QnVzeUxvY2tlci5sb2NrKHVpTW9kZWwpO1xuXHR9XG5cblx0b25BZnRlclF1ZXJ5UHJvY2Vzc2luZygpOiB2b2lkIHtcblx0XHRjb25zdCB1aU1vZGVsID0gdGhpcy5nZXRNb2RlbChcInVpXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRCdXN5TG9ja2VyLnVubG9jayh1aU1vZGVsKTtcblx0fVxuXG5cdGFzeW5jIG9uQ2xlYXJGaWx0ZXJzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIEVtcHR5IGlucHV0OiBjbGVhciB0aGUgZmlsdGVycyBhbmQgcmVmcmVzaCB0aGUgbGlzdFxuXHRcdGNvbnN0IGZpbHRlckJhciA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5maWx0ZXJCYXIpIGFzIEZpbHRlckJhcjtcblx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSBmaWx0ZXJCYXIuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdGF3YWl0IGZpbHRlckJhckFQSS5fY2xlYXJGaWx0ZXJWYWx1ZXNXaXRoT3B0aW9ucyhmaWx0ZXJCYXIpO1xuXHRcdGF3YWl0IGZpbHRlckJhckFQSS50cmlnZ2VyU2VhcmNoKCk7XG5cdH1cblxuXHRvblF1ZXJ5Q2hhbmdlZCgpOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmlsdGVyQmFyKSBhcyBGaWx0ZXJCYXI7XG5cdFx0ZmlsdGVyQmFyLmZpcmVGaWx0ZXJzQ2hhbmdlZCh7IGNvbmRpdGlvbnNCYXNlZDogdHJ1ZSB9KTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgaGFuZGxlU2hvd1ZhbHVlSGVscChldmVudDogRWFzeUZpbHRlckJhckNvbnRhaW5lciRTaG93VmFsdWVIZWxwRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBrZXkgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJrZXlcIik7XG5cdFx0Y29uc3QgcmVzb2x2ZSA9IGV2ZW50LmdldFBhcmFtZXRlcihcInJlc29sdmVcIik7XG5cdFx0Y29uc3QgcmVqZWN0ID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwicmVqZWN0XCIpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGNvbmRpdGlvbnMgPSBhd2FpdCB0aGlzLnNob3dWYWx1ZUhlbHBGb3JLZXkoa2V5KTtcblxuXHRcdFx0Y29uc3Qgc2VsZWN0ZWRWYWx1ZXMgPSBjb25kaXRpb25zLm1hcChhc3luYyAoY29uZGl0aW9uKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9wZXJhdG9yID0gY29uZGl0aW9uLm9wZXJhdG9yIGFzIEZpbHRlck9wZXJhdG9yO1xuXG5cdFx0XHRcdGlmIChjb25kaXRpb24udmFsaWRhdGVkID09PSBcIk5vdFZhbGlkYXRlZFwiKSB7XG5cdFx0XHRcdFx0Ly8gbm90IHZhbGlkYXRlZDogdGhlIGNvbmRpdGlvbiBvbmx5IGhhcyB2YWx1ZXMgd2l0aG91dCBkZXNjcmlwdGlvbiAtIHRyeSB0byBnZXQgdGhlIGRlc2NyaXB0aW9uIHVzaW5nIHRoZSBkYXRhIGZldGNoZXIgbWVjaGFuaXNtLlxuXHRcdFx0XHRcdC8vIGBjb25kaXRpb24udmFsdWVzYCBpcyBhIHNpbmdsZSB2YWx1ZSBgW3ZhbHVlXWAgKG9yIGBbbG93ZXIgYm91bmQsIHVwcGVyIGJvdW5kXWAgZm9yIEJUL05CIG9wZXJhdG9ycykuXG5cdFx0XHRcdFx0Y29uc3QgY29uZGl0aW9uVG9SZXNvbHZlOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbiA9XG5cdFx0XHRcdFx0XHRvcGVyYXRvciA9PT0gRmlsdGVyT3BlcmF0b3IuQlQgfHwgb3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLk5CXG5cdFx0XHRcdFx0XHRcdD8geyBvcGVyYXRvciwgc2VsZWN0ZWRWYWx1ZXM6IFtjb25kaXRpb24udmFsdWVzWzBdLCBjb25kaXRpb24udmFsdWVzWzFdXSB9XG5cdFx0XHRcdFx0XHRcdDogeyBvcGVyYXRvciwgc2VsZWN0ZWRWYWx1ZXM6IFtjb25kaXRpb24udmFsdWVzWzBdXSB9O1xuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZVRva2VuVmFsdWVzRm9yRmllbGQoa2V5LCBbY29uZGl0aW9uVG9SZXNvbHZlXSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAob3BlcmF0b3IgIT09IEZpbHRlck9wZXJhdG9yLkJUICYmIG9wZXJhdG9yICE9PSBGaWx0ZXJPcGVyYXRvci5OQikge1xuXHRcdFx0XHRcdC8vIHZhbGlkYXRlZDogYm90aCB2YWx1ZSBhbmQgZGVzY3JpcHRpb24gYXJlIGF2YWlsYWJsZSAtIGRpcmVjdGx5IG1hcCB0aGVtIHRvIHRoZSByZXN1bHRcblx0XHRcdFx0XHQvLyBgY29uZGl0aW9uLnZhbHVlc2AgaXMgYSB0dXBsZSBvZiBgW3ZhbHVlLCBkZXNjcmlwdGlvbj9dYFxuXHRcdFx0XHRcdGNvbnN0IFt2YWx1ZSwgZGVzY3JpcHRpb25dID0gY29uZGl0aW9uLnZhbHVlcyBhcyBbc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiwgc3RyaW5nIHwgdW5kZWZpbmVkXTtcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFt7IG9wZXJhdG9yLCBzZWxlY3RlZFZhbHVlczogW3sgdmFsdWUsIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiA/PyB2YWx1ZSB9XSB9XSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gc2hvdWxkIG5vdCBvY2N1cjogQlQvTkIgYXJlIGV4cGVjdGVkIHRvIGJlIFwiTm90VmFsaWRhdGVkXCIgY29uZGl0aW9uc1xuXHRcdFx0XHRcdExvZy53YXJuaW5nKGBVbmV4cGVjdGVkIGNvbmRpdGlvbiBmb3IgZmllbGQgJHtrZXl9OiBvcGVyYXRvciAke29wZXJhdG9yfSB3aXRoIHZhbHVlcyAke2NvbmRpdGlvbi52YWx1ZXN9LmApO1xuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3QgcmVzb2x2ZWRWYWx1ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChzZWxlY3RlZFZhbHVlcyk7XG5cdFx0XHRyZXNvbHZlKHJlc29sdmVkVmFsdWVzLmZsYXQoKSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHJlamVjdChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSkpO1xuXHRcdH1cblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnQoKTogRWFzeUZpbHRlckJhckNvbnRhaW5lciB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxFYXN5RmlsdGVyQmFyQ29udGFpbmVyXG5cdFx0XHRcdGNvbnRleHRQYXRoPXt0aGlzLmdldE93bmVyQ29udGV4dFBhdGgoKX1cblx0XHRcdFx0YXBwSWQ9e3RoaXMuZ2V0QXBwbGljYXRpb25JZCgpfVxuXHRcdFx0XHRmaWx0ZXJCYXJNZXRhZGF0YT17dGhpcy5maWx0ZXJCYXJNZXRhZGF0YX1cblx0XHRcdFx0ZWFzeUZpbHRlckxpYj17dGhpcy5lYXN5RmlsdGVyUGF0aH1cblx0XHRcdFx0c2hvd1ZhbHVlSGVscD17dGhpcy5oYW5kbGVTaG93VmFsdWVIZWxwLmJpbmQodGhpcyl9XG5cdFx0XHRcdGRhdGFGZXRjaGVyPXt0aGlzLnJlc29sdmVUb2tlblZhbHVlc0ZvckZpZWxkLmJpbmQodGhpcyl9XG5cdFx0XHRcdHJlY29tbWVuZGVkVmFsdWVzPXt0aGlzLnJlY29tbWVuZGVkUXVlcmllc31cblx0XHRcdFx0cXVlcnlDaGFuZ2VkPXt0aGlzLm9uUXVlcnlDaGFuZ2VkLmJpbmQodGhpcyl9XG5cdFx0XHRcdHRva2Vuc0NoYW5nZWQ9e3RoaXMub25Ub2tlbnNDaGFuZ2VkLmJpbmQodGhpcyl9XG5cdFx0XHRcdGJlZm9yZVF1ZXJ5UHJvY2Vzc2luZz17dGhpcy5vbkJlZm9yZVF1ZXJ5UHJvY2Vzc2luZy5iaW5kKHRoaXMpfVxuXHRcdFx0XHRhZnRlclF1ZXJ5UHJvY2Vzc2luZz17dGhpcy5vbkFmdGVyUXVlcnlQcm9jZXNzaW5nLmJpbmQodGhpcyl9XG5cdFx0XHRcdGNsZWFyRmlsdGVycz17dGhpcy5vbkNsZWFyRmlsdGVycy5iaW5kKHRoaXMpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpREE7QUFDQTtBQUNBO0FBQ0E7RUFIQSxJQUtxQkEsYUFBYSxJQUFBQyxJQUFBLEdBRGpDQyxjQUFjLENBQUMsNkJBQTZCLENBQUMsRUFBQUMsS0FBQSxHQUU1Q0Msa0JBQWtCLENBQUMsa0VBQWtFLENBQUMsRUFBQUMsS0FBQSxHQUd0RkMsV0FBVyxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUF1QyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUc3REYsV0FBVyxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFnRCxDQUFDLENBQUMsRUFBQUUsS0FBQSxHQUd0RUMsUUFBUSxDQUFDO0lBQUVILElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBSSxLQUFBLEdBRzVCRCxRQUFRLENBQUM7SUFBRUgsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFLLEtBQUEsR0FHNUJDLFdBQVcsQ0FBQztJQUFFTixJQUFJLEVBQUU7RUFBb0QsQ0FBQyxDQUFDLEVBQUFOLElBQUEsQ0FBQWEsTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxjQUFBO0lBVzNFLFNBQUFoQixjQUFZaUIsVUFBMEQsRUFBRUMsTUFBeUIsRUFBRTtNQUFBLElBQUFDLEtBQUE7TUFDbEdBLEtBQUEsR0FBQUgsY0FBQSxDQUFBSSxJQUFBLE9B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
437
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVyQmFyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJfZGVjMyIsImFzc29jaWF0aW9uIiwidHlwZSIsIl9kZWM0IiwiX2RlYzUiLCJwcm9wZXJ0eSIsIl9kZWM2IiwiX2RlYzciLCJhZ2dyZWdhdGlvbiIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJwcmVwYXJlRmVhdHVyZSIsInRoZW4iLCJlYXN5RmlsdGVyUGF0aCIsImNvbnRlbnQiLCJzZXRFYXN5RmlsdGVyTGliIiwiY2F0Y2giLCJlcnJvciIsIkxvZyIsImRlYnVnIiwidW5kZWZpbmVkIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImFwcGx5TGVnYWN5U3RhdGUiLCJnZXRDb250cmlsU3RhdGUiLCJvTmF2UGFyYW1ldGVycyIsIl9zaG91bGRBcHBseURpZmZTdGF0ZSIsIl9za2lwTWVyZ2UiLCJzZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0T3B0aW9uc05hbWVzIiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJmaWx0ZXJCYXJNZXRhZGF0YSIsImZvckVhY2giLCJmaWVsZCIsImluY2x1ZGVzIiwibmFtZSIsImRlZmF1bHRWYWx1ZSIsImdldFNlbGVjdE9wdGlvbiIsInJlZHVjZSIsImFjYyIsIm9wdGlvbiIsIlNpZ24iLCJPcHRpb24iLCJGaWx0ZXJPcGVyYXRvciIsIkJUIiwiTkIiLCJIaWdoIiwicHVzaCIsIm9wZXJhdG9yIiwic2VsZWN0ZWRWYWx1ZXMiLCJMb3ciLCJORSIsInJlc2V0U3RhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFwcGx5U3RhdGUiLCJfc3RhdGUiLCJfb05hdlBhcmFtZXRlcnMiLCJyZXRyaWV2ZVN0YXRlIiwiZ2V0QXBwbGljYXRpb25JZCIsImdldE1hbmlmZXN0RW50cnkiLCJpZCIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJwcmVwYXJlRmlsdGVyQmFyTWV0YWRhdGEiLCJyZWNvbW1lbmRlZFF1ZXJpZXMiLCJtYWNyb3MiLCJlYXN5RmlsdGVyIiwiY3JlYXRlQ29udGVudCIsImdldFVuaXRGb3JGaWx0ZXJGaWVsZCIsImFsbEZpbHRlckZpZWxkcyIsInByb3BlcnR5T2JqZWN0IiwiZ2V0VGFyZ2V0IiwidW5pdEFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIk1lYXN1cmVzIiwiSVNPQ3VycmVuY3kiLCJVbml0IiwidW5pdFByb3BlcnR5IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCIkdGFyZ2V0IiwiZmluZCIsImYiLCJhbm5vdGF0aW9uUGF0aCIsImdldERlZmF1bHRWYWx1ZUZvckZpbHRlckZpZWxkIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJoYXNPd25Qcm9wZXJ0eSIsIkVRIiwiaXNQYXJhbWV0ZXIiLCJzdWJzdHJpbmciLCJnZXRFZGl0U3RhdGVGaWx0ZXJNZXRhZGF0YSIsIm1ldGFNb2RlbCIsInByb3BzIiwiSlNPTk1vZGVsIiwiaXNEcmFmdENvbGxhYm9yYXRpdmUiLCJNb2RlbEhlbHBlciIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJlZGl0aW5nU3RhdHVzQ29kZUxpc3QiLCJEcmFmdEVkaXRTdGF0ZSIsImdldEVkaXRTdGF0ZXNDb250ZXh0IiwiZ2V0T2JqZWN0IiwibWFwIiwic3RhdGUiLCJ2YWx1ZSIsImRlc2NyaXB0aW9uIiwiZGlzcGxheSIsImxhYmVsIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJkYXRhVHlwZSIsImZpbHRlcmFibGUiLCJjb2RlTGlzdCIsImdldFRva2VuVHlwZSIsInByb3AiLCJoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMiLCJvd25lciIsIl9nZXRPd25lciIsImRlZmluaXRpb25Gb3JQYWdlIiwicHJlcHJvY2Vzc29yQ29udGV4dCIsImdldERlZmluaXRpb25Gb3JQYWdlIiwiZmlsdGVyQmFyRGVmIiwiZ2V0RmlsdGVyQmFyRGVmaW5pdGlvbiIsIm1vZGVscyIsImdldENvbXBvbmVudERhdGEiLCJmaWx0ZXJGaWVsZHMiLCJnZXRGaWx0ZXJGaWVsZHMiLCJub25IaWRkZW5GaWx0ZXJGaWVsZHMiLCJmaWx0ZXIiLCJVSSIsIkhpZGRlbkZpbHRlciIsInZhbHVlT2YiLCJyZXN1bHQiLCJnZXRDb2RlTGlzdEZvclByb3BlcnR5IiwicmVxdWlyZWQiLCJ1bml0IiwibWF4TGVuZ3RoIiwiaXNNZXRhUGF0aERyYWZ0U3VwcG9ydGVkIiwiZ2V0TWV0YVBhdGgiLCJwcm9wZXJ0eVBhdGgiLCJkZWZhdWx0VmFsdWVMaXN0IiwiZ2V0VmFsdWVMaXN0IiwidmFsdWVMaXN0SW5mbyIsImxpc3RCaW5kaW5nIiwiJG1vZGVsIiwiYmluZExpc3QiLCJDb2xsZWN0aW9uUGF0aCIsIiRzZWxlY3QiLCJnZW5lcmF0ZVNlbGVjdFBhcmFtZXRlciIsImRhdGEiLCJyZXF1ZXN0Q29udGV4dHMiLCJmaWx0ZXJHcm91cFZhbHVlcyIsIm1hcFZhbHVlTGlzdFRvQ29kZUxpc3QiLCJjb2RlTGlzdFByb3BlcnR5IiwicmVzb2x2ZVRva2VuVmFsdWVzRm9yRmllbGQiLCJmaWVsZE5hbWUiLCJ2YWx1ZXMiLCJmaWx0ZXJlZFZhbHVlcyIsIl9yZWYiLCJ0b2tlbiIsImZpbHRlcmVkIiwidmFsIiwibGVuZ3RoIiwiQm9vbGVhbiIsInZhbHVlTGlzdCIsIlZhbHVlTGlzdEhlbHBlciIsImlzVmFsdWVMaXN0U2VhcmNoYWJsZSIsInJlc29sdmVkVG9rZW5WYWx1ZXMiLCJhbGwiLCJyZXNvbHZlVG9rZW5WYWx1ZSIsImZsYXQiLCJ1bnJlc29sdmVkUmVzdWx0IiwiZ2V0TWV0YU1vZGVsIiwidmFsdWVMaXN0cyIsImdldFZhbHVlTGlzdEluZm8iLCJvblRva2Vuc0NoYW5nZWQiLCJlIiwiZmlsdGVyQmFyIiwiVUk1RWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiZmlsdGVyQmFyQVBJIiwiZ2V0UGFyZW50IiwidG9rZW5zIiwiZ2V0UGFyYW1ldGVyIiwiY2xlYXJFZGl0RmlsdGVyIiwic29tZSIsInRva2VuRGVmaW5pdGlvbiIsImtleSIsIl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zIiwiZm9ybWF0ZURhdGFUeXBlcyIsInRva2VuS2V5U3BlY2lmaWNhdGlvbiIsImtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMiLCJGaWx0ZXJVdGlscyIsImFkZEZpbHRlclZhbHVlcyIsInRyaWdnZXJTZWFyY2giLCJkYXRlVHlwZSIsIkRhdGUxIiwiZGF0ZVRpbWVPZmZzZXRUeXBlIiwiRGF0ZVRpbWVPZmZzZXQiLCJWNCIsInRpbWVPZkRheVR5cGUiLCJUaW1lT2ZEYXkiLCJlZG1UeXBlIiwia2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlIiwicmVxdWlyZWRDb252ZXJ0ZXIiLCJpZHgiLCJwYXJzZVZhbHVlIiwic2hvd1ZhbHVlSGVscEZvcktleSIsInNob3dGaWx0ZXJGaWVsZCIsIm9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZCIsIm9uQmVmb3JlUXVlcnlQcm9jZXNzaW5nIiwidWlNb2RlbCIsImdldE1vZGVsIiwiQnVzeUxvY2tlciIsImxvY2siLCJvbkFmdGVyUXVlcnlQcm9jZXNzaW5nIiwidW5sb2NrIiwib25DbGVhckZpbHRlcnMiLCJvblF1ZXJ5Q2hhbmdlZCIsImZpcmVGaWx0ZXJzQ2hhbmdlZCIsImNvbmRpdGlvbnNCYXNlZCIsImhhbmRsZVNob3dWYWx1ZUhlbHAiLCJldmVudCIsInJlamVjdCIsImNvbmRpdGlvbnMiLCJjb25kaXRpb24iLCJ2YWxpZGF0ZWQiLCJjb25kaXRpb25Ub1Jlc29sdmUiLCJ3YXJuaW5nIiwicmVzb2x2ZWRWYWx1ZXMiLCJFcnJvciIsIlN0cmluZyIsIl9qc3giLCJFYXN5RmlsdGVyQmFyQ29udGFpbmVyIiwiY29udGV4dFBhdGgiLCJnZXRPd25lckNvbnRleHRQYXRoIiwiYXBwSWQiLCJlYXN5RmlsdGVyTGliIiwic2hvd1ZhbHVlSGVscCIsImJpbmQiLCJkYXRhRmV0Y2hlciIsInJlY29tbWVuZGVkVmFsdWVzIiwicXVlcnlDaGFuZ2VkIiwidG9rZW5zQ2hhbmdlZCIsImJlZm9yZVF1ZXJ5UHJvY2Vzc2luZyIsImFmdGVyUXVlcnlQcm9jZXNzaW5nIiwiY2xlYXJGaWx0ZXJzIiwiQnVpbGRpbmdCbG9jayIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRWFzeUZpbHRlckJhci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGFzc29jaWF0aW9uLCBkZWZpbmVVSTVDbGFzcywgaW1wbGVtZW50SW50ZXJmYWNlLCBwcm9wZXJ0eSwgdHlwZSBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7XG5cdEVhc3lGaWx0ZXJCYXJDb250YWluZXIkU2hvd1ZhbHVlSGVscEV2ZW50LFxuXHRFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YSxcblx0VG9rZW5EZWZpbml0aW9uLFxuXHRUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbixcblx0VG9rZW5UeXBlLFxuXHRWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb250cm9scy9lYXN5RmlsdGVyL0Vhc3lGaWx0ZXJCYXJDb250YWluZXJcIjtcbmltcG9ydCBFYXN5RmlsdGVyQmFyQ29udGFpbmVyIGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9FYXN5RmlsdGVyQmFyQ29udGFpbmVyXCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFN0YXRlLCBOYXZpZ2F0aW9uUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHR5cGUgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy92aWV3U3RhdGUvSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckZpZWxkIH0gZnJvbSBcInNhcC9mZS9jb3JlL2RlZmluaXRpb24vRkVEZWZpbml0aW9uXCI7XG5pbXBvcnQgdHlwZSBNZXRhUGF0aCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhUGF0aFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZW5lcmF0ZVNlbGVjdFBhcmFtZXRlcixcblx0bWFwVmFsdWVMaXN0VG9Db2RlTGlzdCxcblx0cmVzb2x2ZVRva2VuVmFsdWUsXG5cdHVucmVzb2x2ZWRSZXN1bHRcbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvRWFzeUZpbHRlckRhdGFGZXRjaGVyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgRHJhZnRFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0RyYWZ0RWRpdFN0YXRlXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXJBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckFQSVwiO1xuaW1wb3J0IFZhbHVlTGlzdEhlbHBlciwgeyB0eXBlIFZhbHVlTGlzdEluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgeyBDb25kaXRpb25PYmplY3QgfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgRGF0ZTEgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS90eXBlL0RhdGVcIjtcbmltcG9ydCBEYXRlVGltZU9mZnNldCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvRGF0ZVRpbWVPZmZzZXRcIjtcbmltcG9ydCB0eXBlIE9EYXRhVHlwZSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvT0RhdGFUeXBlXCI7XG5pbXBvcnQgVGltZU9mRGF5IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdHlwZS9UaW1lT2ZEYXlcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQ29kZUxpc3QgfSBmcm9tIFwidXgvZW5nL2Zpb3JpYWkvcmV1c2UvZWFzeWZpbHRlci9FYXN5RmlsdGVyXCI7XG5cbnR5cGUgRWFzeUZpbHRlckJhclN0YXRlID0ge307XG50eXBlIEZpZWxkTWV0YWRhdGEgPSBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YSAmIHsgbWF4TGVuZ3RoPzogbnVtYmVyIH07XG5cbi8qKlxuICogRGVsaXZlcnkgZm9yIGJldGEgcmVsZWFzZSBmb3IgdGhlIGVhc3kgZmlsdGVyIGZlYXR1cmUuXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuRWFzeUZpbHRlckJhclwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWFzeUZpbHRlckJhciBleHRlbmRzIEJ1aWxkaW5nQmxvY2sgaW1wbGVtZW50cyBJVmlld1N0YXRlQ29udHJpYnV0b3I8RWFzeUZpbHRlckJhclN0YXRlPiB7XG5cdEBpbXBsZW1lbnRJbnRlcmZhY2UoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy52aWV3U3RhdGUuSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yXCIpXG5cdF9faW1wbGVtZW50c19fc2FwX2ZlX2NvcmVfY29udHJvbGxlcmV4dGVuc2lvbnNfdmlld1N0YXRlX0lWaWV3U3RhdGVDb250cmlidXRvciE6IGJvb2xlYW47XG5cblx0QGFzc29jaWF0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJCYXJBUElcIiB9KVxuXHRmaWx0ZXJCYXIhOiBzdHJpbmc7XG5cblx0QGFzc29jaWF0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLmNvbnRlbnRTd2l0Y2hlci5Db250ZW50U3dpdGNoZXJcIiB9KVxuXHRjb250ZW50U3dpdGNoZXIhOiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRjb250ZW50U3dpdGNoZXJLZXk/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRjb250ZXh0UGF0aD86IHN0cmluZztcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5jb250cm9scy5lYXN5RmlsdGVyLkVhc3lGaWx0ZXJCYXJDb250YWluZXJcIiB9KVxuXHRjb250ZW50PzogRW5oYW5jZVdpdGhVSTU8RWFzeUZpbHRlckJhckNvbnRhaW5lcj47XG5cblx0cHJpdmF0ZSBmaWx0ZXJCYXJNZXRhZGF0YSE6IEZpZWxkTWV0YWRhdGFbXTtcblxuXHRwcml2YXRlIGVhc3lGaWx0ZXJQYXRoPzogc3RyaW5nO1xuXG5cdHByaXZhdGUgcmVjb21tZW5kZWRRdWVyaWVzPzogc3RyaW5nW107XG5cblx0Y29uc3RydWN0b3IocHJvcGVydGllczogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxFYXN5RmlsdGVyQmFyPiwgb3RoZXJzPzogJENvbnRyb2xTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BlcnRpZXMsIG90aGVycyk7XG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKVxuXHRcdFx0Py5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpXG5cdFx0XHQucHJlcGFyZUZlYXR1cmUoXCJNYWdpY0ZpbHRlcmluZ1wiKVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmVhc3lGaWx0ZXJQYXRoID0gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcblx0XHRcdFx0dGhpcy5jb250ZW50Py5zZXRFYXN5RmlsdGVyTGliKHRoaXMuZWFzeUZpbHRlclBhdGgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRMb2cuZGVidWcoXCJFcnJvciB3aGlsZSBsb2FkaW5nIEVhc3lGaWx0ZXJcIiwgZXJyb3IpO1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRhc3luYyBhcHBseUxlZ2FjeVN0YXRlKFxuXHRcdGdldENvbnRyaWxTdGF0ZT86IChjb250cm9sOiBNYW5hZ2VkT2JqZWN0KSA9PiBDb250cm9sU3RhdGUsXG5cdFx0b05hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyLFxuXHRcdF9zaG91bGRBcHBseURpZmZTdGF0ZT86IGJvb2xlYW4sXG5cdFx0X3NraXBNZXJnZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKG9OYXZQYXJhbWV0ZXJzPy5zZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0XHRjb25zdCBzZWxlY3RPcHRpb25zTmFtZXMgPSBvTmF2UGFyYW1ldGVycy5zZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzKCk7XG5cdFx0XHR0aGlzLmZpbHRlckJhck1ldGFkYXRhLmZvckVhY2goKGZpZWxkKSA9PiB7XG5cdFx0XHRcdGlmIChzZWxlY3RPcHRpb25zTmFtZXMuaW5jbHVkZXMoZmllbGQubmFtZSkpIHtcblx0XHRcdFx0XHRmaWVsZC5kZWZhdWx0VmFsdWUgPSBvTmF2UGFyYW1ldGVycy5zZWxlY3Rpb25WYXJpYW50IS5nZXRTZWxlY3RPcHRpb24oZmllbGQubmFtZSk/LnJlZHVjZSgoYWNjLCBvcHRpb24pID0+IHtcblx0XHRcdFx0XHRcdGlmIChvcHRpb24uU2lnbiA9PT0gXCJJXCIpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbi5PcHRpb24gPT09IEZpbHRlck9wZXJhdG9yLkJUIHx8IG9wdGlvbi5PcHRpb24gPT09IEZpbHRlck9wZXJhdG9yLk5CKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbi5IaWdoICE9PSBudWxsICYmIG9wdGlvbi5IaWdoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGFjYy5wdXNoKHsgb3BlcmF0b3I6IG9wdGlvbi5PcHRpb24sIHNlbGVjdGVkVmFsdWVzOiBbb3B0aW9uLkxvdywgb3B0aW9uLkhpZ2hdIH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRhY2MucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRvcGVyYXRvcjogb3B0aW9uLk9wdGlvbiBhcyBFeGNsdWRlPEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CPixcblx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkVmFsdWVzOiBbb3B0aW9uLkxvd11cblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YWNjLnB1c2goeyBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuTkUsIHNlbGVjdGVkVmFsdWVzOiBbb3B0aW9uLkxvd10gfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gYWNjO1xuXHRcdFx0XHRcdH0sIFtdIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuY29udGVudD8ucmVzZXRTdGF0ZShmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fVxuXG5cdGFwcGx5U3RhdGUoX3N0YXRlOiBFYXN5RmlsdGVyQmFyU3RhdGUsIF9vTmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZCB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHJldHJpZXZlU3RhdGUoKTogRWFzeUZpbHRlckJhclN0YXRlIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0Z2V0QXBwbGljYXRpb25JZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKS5pZCA/PyBcIjx1bmtub3duSUQ+XCI7XG5cdH1cblxuXHRvbk1ldGFkYXRhQXZhaWxhYmxlKCk6IHZvaWQge1xuXHRcdHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEgPSB0aGlzLnByZXBhcmVGaWx0ZXJCYXJNZXRhZGF0YSgpO1xuXHRcdHRoaXMucmVjb21tZW5kZWRRdWVyaWVzID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKT8uZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKT8ubWFjcm9zPy5lYXN5RmlsdGVyPy5yZWNvbW1lbmRlZFF1ZXJpZXMgPz8gW107XG5cdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8RWFzeUZpbHRlckJhckNvbnRhaW5lcj47XG5cdFx0dGhpcy5jb250ZW50LmZpbHRlckJhck1ldGFkYXRhID0gdGhpcy5maWx0ZXJCYXJNZXRhZGF0YTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0VW5pdEZvckZpbHRlckZpZWxkKGZpZWxkOiBGaWx0ZXJGaWVsZCwgYWxsRmlsdGVyRmllbGRzOiBGaWx0ZXJGaWVsZFtdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBwcm9wZXJ0eU9iamVjdCA9IGZpZWxkLmdldFRhcmdldCgpO1xuXHRcdGNvbnN0IHVuaXRBbm5vdGF0aW9uID0gcHJvcGVydHlPYmplY3QuYW5ub3RhdGlvbnMuTWVhc3VyZXM/LklTT0N1cnJlbmN5ID8/IHByb3BlcnR5T2JqZWN0LmFubm90YXRpb25zLk1lYXN1cmVzPy5Vbml0O1xuXHRcdGNvbnN0IHVuaXRQcm9wZXJ0eSA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHVuaXRBbm5vdGF0aW9uKSA/IHVuaXRBbm5vdGF0aW9uLiR0YXJnZXQgOiB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIGFsbEZpbHRlckZpZWxkcy5maW5kKChmKSA9PiBmLmdldFRhcmdldCgpID09PSB1bml0UHJvcGVydHkpPy5hbm5vdGF0aW9uUGF0aDtcblx0fVxuXG5cdHByaXZhdGUgZ2V0RGVmYXVsdFZhbHVlRm9yRmlsdGVyRmllbGQoXG5cdFx0ZmllbGQ6IEZpbHRlckZpZWxkLFxuXHRcdHN0YXJ0dXBQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXHQpOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgZGVmYXVsdFZhbHVlOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChzdGFydHVwUGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eShmaWVsZC5uYW1lKSkge1xuXHRcdFx0ZGVmYXVsdFZhbHVlID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHRcdHNlbGVjdGVkVmFsdWVzOiBzdGFydHVwUGFyYW1ldGVyc1tmaWVsZC5uYW1lXSBhcyBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltcInNlbGVjdGVkVmFsdWVzXCJdXG5cdFx0XHRcdH1cblx0XHRcdF07XG5cdFx0fSBlbHNlIGlmIChmaWVsZC5pc1BhcmFtZXRlciAmJiBzdGFydHVwUGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eShmaWVsZC5uYW1lLnN1YnN0cmluZygyKSkpIHtcblx0XHRcdGRlZmF1bHRWYWx1ZSA9IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSxcblx0XHRcdFx0XHRzZWxlY3RlZFZhbHVlczogc3RhcnR1cFBhcmFtZXRlcnNbZmllbGQubmFtZS5zdWJzdHJpbmcoMildIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW1wic2VsZWN0ZWRWYWx1ZXNcIl1cblx0XHRcdFx0fVxuXHRcdFx0XTtcblx0XHR9XG5cdFx0cmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0RWRpdFN0YXRlRmlsdGVyTWV0YWRhdGEobWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IEZpZWxkTWV0YWRhdGEge1xuXHRcdC8vIEFzc2VtYmxlIHRoZSBjb2RlIGxpc3QgZm9yIHRoZSBlZGl0aW5nIHN0YXR1cyBmaWx0ZXIgdmFsdWVzOlxuXHRcdGNvbnN0IHByb3BzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRpc0RyYWZ0Q29sbGFib3JhdGl2ZTogTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsKVxuXHRcdH0pLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblxuXHRcdGNvbnN0IGVkaXRpbmdTdGF0dXNDb2RlTGlzdCA9IERyYWZ0RWRpdFN0YXRlLmdldEVkaXRTdGF0ZXNDb250ZXh0KHByb3BzKVxuXHRcdFx0LmdldE9iamVjdChcIi9cIilcblx0XHRcdC5tYXAoKHN0YXRlOiB7IGlkOiBzdHJpbmc7IGRpc3BsYXk6IHN0cmluZyB9KSA9PiAoeyB2YWx1ZTogc3RhdGUuaWQsIGRlc2NyaXB0aW9uOiBzdGF0ZS5kaXNwbGF5IH0pKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRuYW1lOiBcIiRlZGl0U3RhdGVcIixcblx0XHRcdGxhYmVsOiB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiRklMVEVSQkFSX0VESVRJTkdfU1RBVFVTXCIpLFxuXHRcdFx0ZGF0YVR5cGU6IFwiRWRtLlN0cmluZ1wiLFxuXHRcdFx0ZmlsdGVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvZGVMaXN0OiBlZGl0aW5nU3RhdHVzQ29kZUxpc3QsXG5cdFx0XHR0eXBlOiBcIk1lbnVXaXRoU2luZ2xlU2VsZWN0XCJcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRUb2tlblR5cGUocHJvcDogUHJvcGVydHkpOiBUb2tlblR5cGUge1xuXHRcdGlmIChoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMocHJvcCkpIHtcblx0XHRcdHJldHVybiBcIk1lbnVXaXRoQ2hlY2tCb3hcIjtcblx0XHR9XG5cdFx0c3dpdGNoIChwcm9wLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVwiOlxuXHRcdFx0XHRyZXR1cm4gXCJDYWxlbmRhclwiO1xuXHRcdFx0Y2FzZSBcIkVkbS5UaW1lT2ZEYXlcIjpcblx0XHRcdFx0cmV0dXJuIFwiVGltZVwiO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIFwiVmFsdWVIZWxwXCI7XG5cdFx0fVxuXHR9XG5cblx0cHJlcGFyZUZpbHRlckJhck1ldGFkYXRhKCk6IEZpZWxkTWV0YWRhdGFbXSB7XG5cdFx0Y29uc3Qgb3duZXIgPSB0aGlzLl9nZXRPd25lcigpITtcblx0XHRjb25zdCBkZWZpbml0aW9uRm9yUGFnZSA9IG93bmVyLnByZXByb2Nlc3NvckNvbnRleHQ/LmdldERlZmluaXRpb25Gb3JQYWdlKCk7XG5cblx0XHRpZiAoIWRlZmluaXRpb25Gb3JQYWdlKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXG5cdFx0Y29uc3QgZmlsdGVyQmFyRGVmID0gZGVmaW5pdGlvbkZvclBhZ2UuZ2V0RmlsdGVyQmFyRGVmaW5pdGlvbih7fSk7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gb3duZXIucHJlcHJvY2Vzc29yQ29udGV4dD8ubW9kZWxzLm1ldGFNb2RlbCBhcyBPRGF0YU1ldGFNb2RlbDtcblxuXHRcdGNvbnN0IHN0YXJ0dXBQYXJhbWV0ZXJzID0gb3duZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Q29tcG9uZW50RGF0YSgpPy5zdGFydHVwUGFyYW1ldGVycyA/PyB7fTtcblxuXHRcdGNvbnN0IGZpbHRlckZpZWxkcyA9IGZpbHRlckJhckRlZi5nZXRGaWx0ZXJGaWVsZHMoKTtcblx0XHRjb25zdCBub25IaWRkZW5GaWx0ZXJGaWVsZHMgPSBmaWx0ZXJGaWVsZHMuZmlsdGVyKChmaWVsZDogRmlsdGVyRmllbGQpID0+IHtcblx0XHRcdHJldHVybiAhZmllbGQuZ2V0VGFyZ2V0KCk/LmFubm90YXRpb25zPy5VST8uSGlkZGVuRmlsdGVyPy52YWx1ZU9mKCk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCByZXN1bHQgPSBub25IaWRkZW5GaWx0ZXJGaWVsZHMubWFwKChmaWVsZDogRmlsdGVyRmllbGQpOiBGaWVsZE1ldGFkYXRhID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5T2JqZWN0ID0gZmllbGQuZ2V0VGFyZ2V0KCk7XG5cdFx0XHRsZXQgY29kZUxpc3Q6IENvZGVMaXN0IHwgKCgpID0+IFByb21pc2U8Q29kZUxpc3Q+KSB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMocHJvcGVydHlPYmplY3QpKSB7XG5cdFx0XHRcdGNvZGVMaXN0ID0gYXN5bmMgKCk6IFByb21pc2U8Q29kZUxpc3Q+ID0+IHRoaXMuZ2V0Q29kZUxpc3RGb3JQcm9wZXJ0eShmaWVsZC5hbm5vdGF0aW9uUGF0aCEpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRuYW1lOiBmaWVsZC5hbm5vdGF0aW9uUGF0aCEsXG5cdFx0XHRcdGxhYmVsOiBmaWVsZC5sYWJlbCxcblx0XHRcdFx0ZGF0YVR5cGU6IHByb3BlcnR5T2JqZWN0LnR5cGUsXG5cdFx0XHRcdHJlcXVpcmVkOiBmaWVsZC5yZXF1aXJlZCA/PyBmYWxzZSxcblx0XHRcdFx0ZGVmYXVsdFZhbHVlOiB0aGlzLmdldERlZmF1bHRWYWx1ZUZvckZpbHRlckZpZWxkKGZpZWxkLCBzdGFydHVwUGFyYW1ldGVycyksXG5cdFx0XHRcdGZpbHRlcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvZGVMaXN0OiBjb2RlTGlzdCxcblx0XHRcdFx0dHlwZTogdGhpcy5nZXRUb2tlblR5cGUocHJvcGVydHlPYmplY3QpIGFzIEV4Y2x1ZGU8VG9rZW5UeXBlLCBcIlZhbHVlSGVscFwiPixcblx0XHRcdFx0dW5pdDogdGhpcy5nZXRVbml0Rm9yRmlsdGVyRmllbGQoZmllbGQsIGZpbHRlckZpZWxkcyksXG5cdFx0XHRcdG1heExlbmd0aDogcHJvcGVydHlPYmplY3QubWF4TGVuZ3RoXG5cdFx0XHR9O1xuXHRcdH0pO1xuXG5cdFx0Ly8gW0VkaXRpbmcgU3RhdHVzXVxuXHRcdGlmIChNb2RlbEhlbHBlci5pc01ldGFQYXRoRHJhZnRTdXBwb3J0ZWQoZGVmaW5pdGlvbkZvclBhZ2UuZ2V0TWV0YVBhdGgoKSBhcyB1bmtub3duIGFzIE1ldGFQYXRoPHVua25vd24+KSkge1xuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5nZXRFZGl0U3RhdGVGaWx0ZXJNZXRhZGF0YShtZXRhTW9kZWwpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YXN5bmMgZ2V0Q29kZUxpc3RGb3JQcm9wZXJ0eShwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IFByb21pc2U8Q29kZUxpc3Q+IHtcblx0XHRjb25zdCBkZWZhdWx0VmFsdWVMaXN0ID0gYXdhaXQgdGhpcy5nZXRWYWx1ZUxpc3QocHJvcGVydHlQYXRoKTtcblxuXHRcdGlmICghZGVmYXVsdFZhbHVlTGlzdCkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZhbHVlTGlzdEluZm8gPSBkZWZhdWx0VmFsdWVMaXN0LnZhbHVlTGlzdEluZm87XG5cblx0XHRjb25zdCBsaXN0QmluZGluZyA9IHZhbHVlTGlzdEluZm8uJG1vZGVsLmJpbmRMaXN0KGAvJHt2YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofWAsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHtcblx0XHRcdCRzZWxlY3Q6IGdlbmVyYXRlU2VsZWN0UGFyYW1ldGVyKGRlZmF1bHRWYWx1ZUxpc3QpXG5cdFx0fSk7XG5cdFx0Y29uc3QgZGF0YSA9IGF3YWl0IGxpc3RCaW5kaW5nLnJlcXVlc3RDb250ZXh0cygpO1xuXG5cdFx0Y29uc3QgZmlsdGVyR3JvdXBWYWx1ZXMgPSBkYXRhLm1hcChtYXBWYWx1ZUxpc3RUb0NvZGVMaXN0KGRlZmF1bHRWYWx1ZUxpc3QpKTtcblx0XHRjb25zdCBjb2RlTGlzdFByb3BlcnR5ID0gdGhpcy5maWx0ZXJCYXJNZXRhZGF0YS5maW5kKChmaWVsZCkgPT4gZmllbGQubmFtZSA9PT0gcHJvcGVydHlQYXRoKTtcblx0XHRpZiAoY29kZUxpc3RQcm9wZXJ0eSkge1xuXHRcdFx0Y29kZUxpc3RQcm9wZXJ0eS5jb2RlTGlzdCA9IGZpbHRlckdyb3VwVmFsdWVzO1xuXHRcdH1cblx0XHRyZXR1cm4gZmlsdGVyR3JvdXBWYWx1ZXM7XG5cdH1cblxuXHRhc3luYyByZXNvbHZlVG9rZW5WYWx1ZXNGb3JGaWVsZChcblx0XHRmaWVsZE5hbWU6IHN0cmluZyxcblx0XHR2YWx1ZXM6IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW11cblx0KTogUHJvbWlzZTxWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXT4ge1xuXHRcdGxldCBmaWx0ZXJlZFZhbHVlcyA9IHZhbHVlcztcblx0XHRjb25zdCBmaWVsZCA9IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IGZpZWxkTmFtZSk7XG5cdFx0aWYgKGZpZWxkKSB7XG5cdFx0XHRjb25zdCBtYXhMZW5ndGggPSBmaWVsZC5tYXhMZW5ndGg7XG5cblx0XHRcdGlmIChtYXhMZW5ndGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRmaWx0ZXJlZFZhbHVlcyA9IHZhbHVlc1xuXHRcdFx0XHRcdC5tYXAoKHRva2VuKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBmaWx0ZXJlZCA9IHRva2VuLnNlbGVjdGVkVmFsdWVzLmZpbHRlcigodmFsKSA9PiB0eXBlb2YgdmFsICE9PSBcInN0cmluZ1wiIHx8IHZhbC5sZW5ndGggPD0gbWF4TGVuZ3RoKTtcblx0XHRcdFx0XHRcdHJldHVybiBmaWx0ZXJlZC5sZW5ndGggPiAwID8geyAuLi50b2tlbiwgc2VsZWN0ZWRWYWx1ZXM6IGZpbHRlcmVkIH0gOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuZmlsdGVyKEJvb2xlYW4pIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW107XG5cdFx0XHRcdGlmIChmaWx0ZXJlZFZhbHVlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IHZhbHVlTGlzdCA9IGF3YWl0IHRoaXMuZ2V0VmFsdWVMaXN0KGZpZWxkLm5hbWUpO1xuXG5cdFx0XHRpZiAodmFsdWVMaXN0ICYmIFZhbHVlTGlzdEhlbHBlci5pc1ZhbHVlTGlzdFNlYXJjaGFibGUoZmllbGQubmFtZSwgdmFsdWVMaXN0KSkge1xuXHRcdFx0XHRjb25zdCByZXNvbHZlZFRva2VuVmFsdWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoZmlsdGVyZWRWYWx1ZXMubWFwKGFzeW5jICh2YWx1ZSkgPT4gcmVzb2x2ZVRva2VuVmFsdWUodmFsdWVMaXN0LCB2YWx1ZSkpKTtcblx0XHRcdFx0cmV0dXJuIHJlc29sdmVkVG9rZW5WYWx1ZXMuZmxhdCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHJldHVybiBvcmlnaW5hbCB2YWx1ZXMgY29udmVydGVkIHRvIHRoZSBleHBlY3RlZCBmb3JtYXRcblx0XHRyZXR1cm4gdW5yZXNvbHZlZFJlc3VsdChmaWx0ZXJlZFZhbHVlcyk7XG5cdH1cblxuXHRhc3luYyBnZXRWYWx1ZUxpc3QocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFZhbHVlTGlzdEluZm8gfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSB0aGlzLmdldE1ldGFNb2RlbCgpITtcblx0XHRjb25zdCB2YWx1ZUxpc3RzID0gYXdhaXQgVmFsdWVMaXN0SGVscGVyLmdldFZhbHVlTGlzdEluZm8odW5kZWZpbmVkLCBwcm9wZXJ0eVBhdGgsIHVuZGVmaW5lZCwgbWV0YU1vZGVsKTtcblx0XHRyZXR1cm4gdmFsdWVMaXN0c1swXTtcblx0fVxuXG5cdGFzeW5jIG9uVG9rZW5zQ2hhbmdlZChlOiBVSTVFdmVudDx7IHRva2VuczogVG9rZW5EZWZpbml0aW9uW10gfSwgRWFzeUZpbHRlckJhckNvbnRhaW5lcj4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmlsdGVyQmFyKSBhcyBGaWx0ZXJCYXI7XG5cdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRjb25zdCB0b2tlbnMgPSBlLmdldFBhcmFtZXRlcihcInRva2Vuc1wiKTtcblx0XHRjb25zdCBjbGVhckVkaXRGaWx0ZXIgPSB0b2tlbnMuc29tZSgodG9rZW5EZWZpbml0aW9uKSA9PiB0b2tlbkRlZmluaXRpb24ua2V5ID09PSBcIiRlZGl0U3RhdGVcIik7XG5cdFx0YXdhaXQgZmlsdGVyQmFyQVBJLl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zKGZpbHRlckJhciwgeyBjbGVhckVkaXRGaWx0ZXIgfSk7XG5cdFx0dGhpcy5mb3JtYXRlRGF0YVR5cGVzKHRva2Vucyk7XG5cblx0XHRmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuXHRcdFx0aWYgKHRva2VuLmtleSA9PT0gXCIkZWRpdFN0YXRlXCIpIHtcblx0XHRcdFx0Ly8gY29udmVydCB0aGUgJGVkaXRTdGF0ZSBmaWx0ZXIgY29uZGl0aW9uXG5cdFx0XHRcdGZvciAoY29uc3QgdG9rZW5LZXlTcGVjaWZpY2F0aW9uIG9mIHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMpIHtcblx0XHRcdFx0XHRhd2FpdCBGaWx0ZXJVdGlscy5hZGRGaWx0ZXJWYWx1ZXMoXG5cdFx0XHRcdFx0XHRmaWx0ZXJCYXJBUEkuY29udGVudCxcblx0XHRcdFx0XHRcdHRva2VuLmtleSxcblx0XHRcdFx0XHRcdFwiRFJBRlRfRURJVF9TVEFURVwiLFxuXHRcdFx0XHRcdFx0dG9rZW5LZXlTcGVjaWZpY2F0aW9uLnNlbGVjdGVkVmFsdWVzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZmllbGQgPSB0aGlzLmZpbHRlckJhck1ldGFkYXRhLmZpbmQoKGYpID0+IGYubmFtZSA9PT0gdG9rZW4ua2V5KSE7XG5cdFx0XHRcdGZvciAoY29uc3QgdG9rZW5LZXlTcGVjaWZpY2F0aW9uIG9mIHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMpIHtcblx0XHRcdFx0XHRjb25zdCB7IG9wZXJhdG9yLCBzZWxlY3RlZFZhbHVlcyB9ID0gdG9rZW5LZXlTcGVjaWZpY2F0aW9uO1xuXHRcdFx0XHRcdGF3YWl0IEZpbHRlclV0aWxzLmFkZEZpbHRlclZhbHVlcyhmaWx0ZXJCYXJBUEkuY29udGVudCwgZmllbGQubmFtZSwgb3BlcmF0b3IsIHNlbGVjdGVkVmFsdWVzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRhd2FpdCBmaWx0ZXJCYXJBUEkudHJpZ2dlclNlYXJjaCgpO1xuXHR9XG5cblx0Ly9XZSBuZWVkIHRoZSBiZWxvdyBmdW5jdGlvbiBzbyB0aGF0IHRoZSBkYXRlIG9iamVjdHMgYW5kIGRhdGVUaW1lT2Zmc2V0cyB3b3VsZCBiZSBjb252ZXJ0ZWQgdG8gc3RyaW5nIHR5cGUgYXMgdGhlIGRhdGUgb2JqZWN0IGlzIG5vdCBhIHZhbGlkIHR5cGUgaW4gVjQgd29ybGRcblx0Zm9ybWF0ZURhdGFUeXBlcyh0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdKTogdm9pZCB7XG5cdFx0Y29uc3QgZGF0ZVR5cGUgPSBuZXcgRGF0ZTEoKSxcblx0XHRcdGRhdGVUaW1lT2Zmc2V0VHlwZSA9IG5ldyBEYXRlVGltZU9mZnNldCh1bmRlZmluZWQsIHsgVjQ6IHRydWUgfSksXG5cdFx0XHR0aW1lT2ZEYXlUeXBlID0gbmV3IFRpbWVPZkRheSgpO1xuXHRcdHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0Y29uc3QgZWRtVHlwZSA9IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEuZmluZCgoZGF0YSkgPT4gZGF0YS5uYW1lID09PSB0b2tlbi5rZXkpPy5kYXRhVHlwZTtcblx0XHRcdHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMuZm9yRWFjaCgoa2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlKSA9PiB7XG5cdFx0XHRcdGxldCByZXF1aXJlZENvbnZlcnRlcjogT0RhdGFUeXBlO1xuXHRcdFx0XHRzd2l0Y2ggKGVkbVR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdFx0XHRcdHJlcXVpcmVkQ29udmVydGVyID0gZGF0ZVR5cGU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0XHRcdFx0cmVxdWlyZWRDb252ZXJ0ZXIgPSB0aW1lT2ZEYXlUeXBlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIkVkbS5EYXRlVGltZU9mZnNldFwiOlxuXHRcdFx0XHRcdFx0cmVxdWlyZWRDb252ZXJ0ZXIgPSBkYXRlVGltZU9mZnNldFR5cGU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZS5zZWxlY3RlZFZhbHVlcy5mb3JFYWNoKCh2YWx1ZSwgaWR4KSA9PiB7XG5cdFx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlLnNlbGVjdGVkVmFsdWVzW2lkeF0gPSByZXF1aXJlZENvbnZlcnRlci5wYXJzZVZhbHVlKHZhbHVlLCBcIm9iamVjdFwiKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdGFzeW5jIHNob3dWYWx1ZUhlbHBGb3JLZXkoa2V5OiBzdHJpbmcpOiBQcm9taXNlPENvbmRpdGlvbk9iamVjdFtdPiB7XG5cdFx0Y29uc3QgZmllbGQgPSB0aGlzLmZpbHRlckJhck1ldGFkYXRhLmZpbmQoKGYpID0+IGYubmFtZSA9PT0ga2V5KSE7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmZpbHRlckJhcikgYXMgRmlsdGVyQmFyO1xuXHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhci5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0YXdhaXQgZmlsdGVyQmFyQVBJLnNob3dGaWx0ZXJGaWVsZChmaWVsZC5uYW1lKTtcblx0XHRyZXR1cm4gZmlsdGVyQmFyQVBJLm9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZChmaWVsZC5uYW1lKTtcblx0fVxuXG5cdG9uQmVmb3JlUXVlcnlQcm9jZXNzaW5nKCk6IHZvaWQge1xuXHRcdGNvbnN0IHVpTW9kZWwgPSB0aGlzLmdldE1vZGVsKFwidWlcIikgYXMgSlNPTk1vZGVsO1xuXHRcdEJ1c3lMb2NrZXIubG9jayh1aU1vZGVsKTtcblx0fVxuXG5cdG9uQWZ0ZXJRdWVyeVByb2Nlc3NpbmcoKTogdm9pZCB7XG5cdFx0Y29uc3QgdWlNb2RlbCA9IHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWw7XG5cdFx0QnVzeUxvY2tlci51bmxvY2sodWlNb2RlbCk7XG5cdH1cblxuXHRhc3luYyBvbkNsZWFyRmlsdGVycygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBFbXB0eSBpbnB1dDogY2xlYXIgdGhlIGZpbHRlcnMgYW5kIHJlZnJlc2ggdGhlIGxpc3Rcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmlsdGVyQmFyKSBhcyBGaWx0ZXJCYXI7XG5cdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRhd2FpdCBmaWx0ZXJCYXJBUEkuX2NsZWFyRmlsdGVyVmFsdWVzV2l0aE9wdGlvbnMoZmlsdGVyQmFyKTtcblx0XHRhd2FpdCBmaWx0ZXJCYXJBUEkudHJpZ2dlclNlYXJjaCgpO1xuXHR9XG5cblx0b25RdWVyeUNoYW5nZWQoKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmZpbHRlckJhcikgYXMgRmlsdGVyQmFyO1xuXHRcdGZpbHRlckJhci5maXJlRmlsdGVyc0NoYW5nZWQoeyBjb25kaXRpb25zQmFzZWQ6IHRydWUgfSk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGhhbmRsZVNob3dWYWx1ZUhlbHAoZXZlbnQ6IEVhc3lGaWx0ZXJCYXJDb250YWluZXIkU2hvd1ZhbHVlSGVscEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qga2V5ID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwia2V5XCIpO1xuXHRcdGNvbnN0IHJlc29sdmUgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJyZXNvbHZlXCIpO1xuXHRcdGNvbnN0IHJlamVjdCA9IGV2ZW50LmdldFBhcmFtZXRlcihcInJlamVjdFwiKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjb25kaXRpb25zID0gYXdhaXQgdGhpcy5zaG93VmFsdWVIZWxwRm9yS2V5KGtleSk7XG5cblx0XHRcdGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gY29uZGl0aW9ucy5tYXAoYXN5bmMgKGNvbmRpdGlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCBvcGVyYXRvciA9IGNvbmRpdGlvbi5vcGVyYXRvciBhcyBGaWx0ZXJPcGVyYXRvcjtcblxuXHRcdFx0XHRpZiAoY29uZGl0aW9uLnZhbGlkYXRlZCA9PT0gXCJOb3RWYWxpZGF0ZWRcIikge1xuXHRcdFx0XHRcdC8vIG5vdCB2YWxpZGF0ZWQ6IHRoZSBjb25kaXRpb24gb25seSBoYXMgdmFsdWVzIHdpdGhvdXQgZGVzY3JpcHRpb24gLSB0cnkgdG8gZ2V0IHRoZSBkZXNjcmlwdGlvbiB1c2luZyB0aGUgZGF0YSBmZXRjaGVyIG1lY2hhbmlzbS5cblx0XHRcdFx0XHQvLyBgY29uZGl0aW9uLnZhbHVlc2AgaXMgYSBzaW5nbGUgdmFsdWUgYFt2YWx1ZV1gIChvciBgW2xvd2VyIGJvdW5kLCB1cHBlciBib3VuZF1gIGZvciBCVC9OQiBvcGVyYXRvcnMpLlxuXHRcdFx0XHRcdGNvbnN0IGNvbmRpdGlvblRvUmVzb2x2ZTogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb24gPVxuXHRcdFx0XHRcdFx0b3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLkJUIHx8IG9wZXJhdG9yID09PSBGaWx0ZXJPcGVyYXRvci5OQlxuXHRcdFx0XHRcdFx0XHQ/IHsgb3BlcmF0b3IsIHNlbGVjdGVkVmFsdWVzOiBbY29uZGl0aW9uLnZhbHVlc1swXSwgY29uZGl0aW9uLnZhbHVlc1sxXV0gfVxuXHRcdFx0XHRcdFx0XHQ6IHsgb3BlcmF0b3IsIHNlbGVjdGVkVmFsdWVzOiBbY29uZGl0aW9uLnZhbHVlc1swXV0gfTtcblxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVUb2tlblZhbHVlc0ZvckZpZWxkKGtleSwgW2NvbmRpdGlvblRvUmVzb2x2ZV0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9wZXJhdG9yICE9PSBGaWx0ZXJPcGVyYXRvci5CVCAmJiBvcGVyYXRvciAhPT0gRmlsdGVyT3BlcmF0b3IuTkIpIHtcblx0XHRcdFx0XHQvLyB2YWxpZGF0ZWQ6IGJvdGggdmFsdWUgYW5kIGRlc2NyaXB0aW9uIGFyZSBhdmFpbGFibGUgLSBkaXJlY3RseSBtYXAgdGhlbSB0byB0aGUgcmVzdWx0XG5cdFx0XHRcdFx0Ly8gYGNvbmRpdGlvbi52YWx1ZXNgIGlzIGEgdHVwbGUgb2YgYFt2YWx1ZSwgZGVzY3JpcHRpb24/XWBcblx0XHRcdFx0XHRjb25zdCBbdmFsdWUsIGRlc2NyaXB0aW9uXSA9IGNvbmRpdGlvbi52YWx1ZXMgYXMgW3N0cmluZyB8IG51bWJlciB8IGJvb2xlYW4sIHN0cmluZyB8IHVuZGVmaW5lZF07XG5cdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbeyBvcGVyYXRvciwgc2VsZWN0ZWRWYWx1ZXM6IFt7IHZhbHVlLCBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gPz8gdmFsdWUgfV0gfV0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHNob3VsZCBub3Qgb2NjdXI6IEJUL05CIGFyZSBleHBlY3RlZCB0byBiZSBcIk5vdFZhbGlkYXRlZFwiIGNvbmRpdGlvbnNcblx0XHRcdFx0XHRMb2cud2FybmluZyhgVW5leHBlY3RlZCBjb25kaXRpb24gZm9yIGZpZWxkICR7a2V5fTogb3BlcmF0b3IgJHtvcGVyYXRvcn0gd2l0aCB2YWx1ZXMgJHtjb25kaXRpb24udmFsdWVzfS5gKTtcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IHJlc29sdmVkVmFsdWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoc2VsZWN0ZWRWYWx1ZXMpO1xuXHRcdFx0cmVzb2x2ZShyZXNvbHZlZFZhbHVlcy5mbGF0KCkpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRyZWplY3QoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpKTtcblx0XHR9XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KCk6IEVhc3lGaWx0ZXJCYXJDb250YWluZXIge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RWFzeUZpbHRlckJhckNvbnRhaW5lclxuXHRcdFx0XHRjb250ZXh0UGF0aD17dGhpcy5nZXRPd25lckNvbnRleHRQYXRoKCl9XG5cdFx0XHRcdGFwcElkPXt0aGlzLmdldEFwcGxpY2F0aW9uSWQoKX1cblx0XHRcdFx0ZmlsdGVyQmFyTWV0YWRhdGE9e3RoaXMuZmlsdGVyQmFyTWV0YWRhdGF9XG5cdFx0XHRcdGVhc3lGaWx0ZXJMaWI9e3RoaXMuZWFzeUZpbHRlclBhdGh9XG5cdFx0XHRcdHNob3dWYWx1ZUhlbHA9e3RoaXMuaGFuZGxlU2hvd1ZhbHVlSGVscC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRkYXRhRmV0Y2hlcj17dGhpcy5yZXNvbHZlVG9rZW5WYWx1ZXNGb3JGaWVsZC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRyZWNvbW1lbmRlZFZhbHVlcz17dGhpcy5yZWNvbW1lbmRlZFF1ZXJpZXN9XG5cdFx0XHRcdHF1ZXJ5Q2hhbmdlZD17dGhpcy5vblF1ZXJ5Q2hhbmdlZC5iaW5kKHRoaXMpfVxuXHRcdFx0XHR0b2tlbnNDaGFuZ2VkPXt0aGlzLm9uVG9rZW5zQ2hhbmdlZC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRiZWZvcmVRdWVyeVByb2Nlc3Npbmc9e3RoaXMub25CZWZvcmVRdWVyeVByb2Nlc3NpbmcuYmluZCh0aGlzKX1cblx0XHRcdFx0YWZ0ZXJRdWVyeVByb2Nlc3Npbmc9e3RoaXMub25BZnRlclF1ZXJ5UHJvY2Vzc2luZy5iaW5kKHRoaXMpfVxuXHRcdFx0XHRjbGVhckZpbHRlcnM9e3RoaXMub25DbGVhckZpbHRlcnMuYmluZCh0aGlzKX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBa0RBO0FBQ0E7QUFDQTtFQUZBLElBSXFCQSxhQUFhLElBQUFDLElBQUEsR0FEakNDLGNBQWMsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFBQyxLQUFBLEdBRTVDQyxrQkFBa0IsQ0FBQyxrRUFBa0UsQ0FBQyxFQUFBQyxLQUFBLEdBR3RGQyxXQUFXLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQXVDLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzdERixXQUFXLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQWdELENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBR3RFQyxRQUFRLENBQUM7SUFBRUgsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFJLEtBQUEsR0FHNUJELFFBQVEsQ0FBQztJQUFFSCxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQUssS0FBQSxHQUc1QkMsV0FBVyxDQUFDO0lBQUVOLElBQUksRUFBRTtFQUFvRCxDQUFDLENBQUMsRUFBQU4sSUFBQSxDQUFBYSxNQUFBLElBQUFDLE9BQUEsMEJBQUFDLGNBQUE7SUFTM0UsU0FBQWhCLGNBQVlpQixVQUEwRCxFQUFFQyxNQUF5QixFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUNsR0EsS0FBQSxHQUFBSCxjQUFBLENBQUFJLElBQUEsT0FBTUgsVUFBVSxFQUFFQyxNQUFNLENBQUM7TUFBQ0csMEJBQUEsQ0FBQUYsS0FBQSxvRkFBQUcsV0FBQSxFQUFBSCxLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEsZUFBQUksWUFBQSxFQUFBSixLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEscUJBQUFLLFlBQUEsRUFBQUwsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLHdCQUFBTSxZQUFBLEVBQUFOLEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSxpQkFBQU8sWUFBQSxFQUFBUCxLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEsYUFBQVEsWUFBQSxFQUFBUixLQUFBO01BQzFCQSxLQUFBLENBQUtTLGVBQWUsQ0FBQyxDQUFDLEVBQ25CQywwQkFBMEIsQ0FBQyxDQUFDLENBQzdCQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FDaENDLElBQUksQ0FBQyxNQUFNO1FBQ1haLEtBQUEsQ0FBS2EsY0FBYyxHQUFHLDRDQUE0QztRQUNsRWIsS0FBQSxDQUFLYyxPQUFPLEVBQUVDLGdCQUFnQixDQUFDZixLQUFBLENBQUthLGNBQWMsQ0FBQztRQUNuRDtNQUNELENBQUMsQ0FBQyxDQUNERyxLQUFLLENBQUVDLEtBQUssSUFBSztRQUNqQkMsR0FBRyxDQUFDQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUVGLEtBQUssQ0FBQztRQUNsRCxPQUFPRyxTQUFTO01BQ2pCLENBQUMsQ0FBQztNQUFDLE9BQUFwQixLQUFBO0lBQ0w7SUFBQ3FCLFFBQUEsR0FBQXhDLGFBQUE7SUFBQXlDLGNBQUEsQ0FBQXpDLGFBQUEsRUFBQWdCLGNBQUE7SUFBQSxJQUFBMEIsTUFBQSxHQUFBMUMsYUFBQSxDQUFBMkMsU0FBQTtJQUFBRCxNQUFBLENBRUtFLGdCQUFnQixHQUF0QixlQUFNQSxnQkFBZ0JBLENBQ3JCQyxlQUEwRCxFQUMxREMsY0FBb0MsRUFDcENDLHFCQUErQixFQUMvQkMsVUFBb0IsRUFDSjtNQUNoQixJQUFJRixjQUFjLEVBQUVHLGdCQUFnQixFQUFFO1FBQ3JDLE1BQU1DLGtCQUFrQixHQUFHSixjQUFjLENBQUNHLGdCQUFnQixDQUFDRSw2QkFBNkIsQ0FBQyxDQUFDO1FBQzFGLElBQUksQ0FBQ0MsaUJBQWlCLENBQUNDLE9BQU8sQ0FBRUMsS0FBSyxJQUFLO1VBQ3pDLElBQUlKLGtCQUFrQixDQUFDSyxRQUFRLENBQUNELEtBQUssQ0FBQ0UsSUFBSSxDQUFDLEVBQUU7WUFDNUNGLEtBQUssQ0FBQ0csWUFBWSxHQUFHWCxjQUFjLENBQUNHLGdCQUFnQixDQUFFUyxlQUFlLENBQUNKLEtBQUssQ0FBQ0UsSUFBSSxDQUFDLEVBQUVHLE1BQU0sQ0FBQyxDQUFDQyxHQUFHLEVBQUVDLE1BQU0sS0FBSztjQUMxRyxJQUFJQSxNQUFNLENBQUNDLElBQUksS0FBSyxHQUFHLEVBQUU7Z0JBQ3hCLElBQUlELE1BQU0sQ0FBQ0UsTUFBTSxLQUFLQyxjQUFjLENBQUNDLEVBQUUsSUFBSUosTUFBTSxDQUFDRSxNQUFNLEtBQUtDLGNBQWMsQ0FBQ0UsRUFBRSxFQUFFO2tCQUMvRSxJQUFJTCxNQUFNLENBQUNNLElBQUksS0FBSyxJQUFJLElBQUlOLE1BQU0sQ0FBQ00sSUFBSSxLQUFLNUIsU0FBUyxFQUFFO29CQUN0RHFCLEdBQUcsQ0FBQ1EsSUFBSSxDQUFDO3NCQUFFQyxRQUFRLEVBQUVSLE1BQU0sQ0FBQ0UsTUFBTTtzQkFBRU8sY0FBYyxFQUFFLENBQUNULE1BQU0sQ0FBQ1UsR0FBRyxFQUFFVixNQUFNLENBQUNNLElBQUk7b0JBQUUsQ0FBQyxDQUFDO2tCQUNqRjtnQkFDRCxDQUFDLE1BQU07a0JBQ05QLEdBQUcsQ0FBQ1EsSUFBSSxDQUFDO29CQUNSQyxRQUFRLEVBQUVSLE1BQU0sQ0FBQ0UsTUFBd0U7b0JBQ3pGTyxjQUFjLEVBQUUsQ0FBQ1QsTUFBTSxDQUFDVSxHQUFHO2tCQUM1QixDQUFDLENBQUM7Z0JBQ0g7Y0FDRCxDQUFDLE1BQU07Z0JBQ05YLEdBQUcsQ0FBQ1EsSUFBSSxDQUFDO2tCQUFFQyxRQUFRLEVBQUVMLGNBQWMsQ0FBQ1EsRUFBRTtrQkFBRUYsY0FBYyxFQUFFLENBQUNULE1BQU0sQ0FBQ1UsR0FBRztnQkFBRSxDQUFDLENBQUM7Y0FDeEU7Y0FDQSxPQUFPWCxHQUFHO1lBQ1gsQ0FBQyxFQUFFLEVBQXFDLENBQUM7VUFDMUM7UUFDRCxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMzQixPQUFPLEVBQUV3QyxVQUFVLENBQUMsS0FBSyxDQUFDO01BQ2hDO01BQ0EsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUNwQyxTQUFTLENBQUM7SUFDbEMsQ0FBQztJQUFBRyxNQUFBLENBRURrQyxVQUFVLEdBQVYsU0FBQUEsVUFBVUEsQ0FBQ0MsTUFBMEIsRUFBRUMsZUFBcUMsRUFBd0I7TUFDbkcsT0FBT3ZDLFNBQVM7SUFDakIsQ0FBQztJQUFBRyxNQUFBLENBRURxQyxhQUFhLEdBQWIsU0FBQUEsYUFBYUEsQ0FBQSxFQUE4QjtNQUMxQyxPQUFPLENBQUMsQ0FBQztJQUNWLENBQUM7SUFBQXJDLE1BQUEsQ0FFRHNDLGdCQUFnQixHQUFoQixTQUFBQSxnQkFBZ0JBLENBQUEsRUFBVztNQUMxQixPQUFPLElBQUksQ0FBQ3BELGVBQWUsQ0FBQyxDQUFDLEVBQUVxRCxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQ0MsRUFBRSxJQUFJLGFBQWE7SUFDL0UsQ0FBQztJQUFBeEMsTUFBQSxDQUVEeUMsbUJBQW1CLEdBQW5CLFNBQUFBLG1CQUFtQkEsQ0FBQSxFQUFTO01BQzNCLElBQUksQ0FBQy9CLGlCQUFpQixHQUFHLElBQUksQ0FBQ2dDLHdCQUF3QixDQUFDLENBQUM7TUFDeEQsSUFBSSxDQUFDQyxrQkFBa0IsR0FBRyxJQUFJLENBQUN6RCxlQUFlLENBQUMsQ0FBQyxFQUFFcUQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUVLLE1BQU0sRUFBRUMsVUFBVSxFQUFFRixrQkFBa0IsSUFBSSxFQUFFO01BQzFILElBQUksQ0FBQ3BELE9BQU8sR0FBRyxJQUFJLENBQUN1RCxhQUFhLENBQUMsQ0FBMkM7TUFDN0UsSUFBSSxDQUFDdkQsT0FBTyxDQUFDbUIsaUJBQWlCLEdBQUcsSUFBSSxDQUFDQSxpQkFBaUI7SUFDeEQsQ0FBQztJQUFBVixNQUFBLENBRU8rQyxxQkFBcUIsR0FBN0IsU0FBUUEscUJBQXFCQSxDQUFDbkMsS0FBa0IsRUFBRW9DLGVBQThCLEVBQXNCO01BQ3JHLE1BQU1DLGNBQWMsR0FBR3JDLEtBQUssQ0FBQ3NDLFNBQVMsQ0FBQyxDQUFDO01BQ3hDLE1BQU1DLGNBQWMsR0FBR0YsY0FBYyxDQUFDRyxXQUFXLENBQUNDLFFBQVEsRUFBRUMsV0FBVyxJQUFJTCxjQUFjLENBQUNHLFdBQVcsQ0FBQ0MsUUFBUSxFQUFFRSxJQUFJO01BQ3BILE1BQU1DLFlBQVksR0FBR0MsMEJBQTBCLENBQUNOLGNBQWMsQ0FBQyxHQUFHQSxjQUFjLENBQUNPLE9BQU8sR0FBRzdELFNBQVM7TUFDcEcsT0FBT21ELGVBQWUsQ0FBQ1csSUFBSSxDQUFFQyxDQUFDLElBQUtBLENBQUMsQ0FBQ1YsU0FBUyxDQUFDLENBQUMsS0FBS00sWUFBWSxDQUFDLEVBQUVLLGNBQWM7SUFDbkYsQ0FBQztJQUFBN0QsTUFBQSxDQUVPOEQsNkJBQTZCLEdBQXJDLFNBQVFBLDZCQUE2QkEsQ0FDcENsRCxLQUFrQixFQUNsQm1ELGlCQUEwQyxFQUNJO01BQzlDLElBQUloRCxZQUF5RDtNQUM3RCxJQUFJZ0QsaUJBQWlCLENBQUNDLGNBQWMsQ0FBQ3BELEtBQUssQ0FBQ0UsSUFBSSxDQUFDLEVBQUU7UUFDakRDLFlBQVksR0FBRyxDQUNkO1VBQ0NZLFFBQVEsRUFBRUwsY0FBYyxDQUFDMkMsRUFBRTtVQUMzQnJDLGNBQWMsRUFBRW1DLGlCQUFpQixDQUFDbkQsS0FBSyxDQUFDRSxJQUFJO1FBQzdDLENBQUMsQ0FDRDtNQUNGLENBQUMsTUFBTSxJQUFJRixLQUFLLENBQUNzRCxXQUFXLElBQUlILGlCQUFpQixDQUFDQyxjQUFjLENBQUNwRCxLQUFLLENBQUNFLElBQUksQ0FBQ3FELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzFGcEQsWUFBWSxHQUFHLENBQ2Q7VUFDQ1ksUUFBUSxFQUFFTCxjQUFjLENBQUMyQyxFQUFFO1VBQzNCckMsY0FBYyxFQUFFbUMsaUJBQWlCLENBQUNuRCxLQUFLLENBQUNFLElBQUksQ0FBQ3FELFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUNEO01BQ0Y7TUFDQSxPQUFPcEQsWUFBWTtJQUNwQixDQUFDO0lBQUFmLE1BQUEsQ0FFT29FLDBCQUEwQixHQUFsQyxTQUFRQSwwQkFBMEJBLENBQUNDLFNBQXlCLEVBQWlCO01BQzVFO01BQ0EsTUFBTUMsS0FBSyxHQUFHLElBQUlDLFNBQVMsQ0FBQztRQUMzQkMsb0JBQW9CLEVBQUVDLFdBQVcsQ0FBQ0MsNkJBQTZCLENBQUNMLFNBQVM7TUFDMUUsQ0FBQyxDQUFDLENBQUNNLG9CQUFvQixDQUFDLEdBQUcsQ0FBQztNQUU1QixNQUFNQyxxQkFBcUIsR0FBR0MsY0FBYyxDQUFDQyxvQkFBb0IsQ0FBQ1IsS0FBSyxDQUFDLENBQ3RFUyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQ2RDLEdBQUcsQ0FBRUMsS0FBc0MsS0FBTTtRQUFFQyxLQUFLLEVBQUVELEtBQUssQ0FBQ3pDLEVBQUU7UUFBRTJDLFdBQVcsRUFBRUYsS0FBSyxDQUFDRztNQUFRLENBQUMsQ0FBQyxDQUFDO01BRXBHLE9BQU87UUFDTnRFLElBQUksRUFBRSxZQUFZO1FBQ2xCdUUsS0FBSyxFQUFFLElBQUksQ0FBQ0MsaUJBQWlCLENBQUMsMEJBQTBCLENBQUM7UUFDekRDLFFBQVEsRUFBRSxZQUFZO1FBQ3RCQyxVQUFVLEVBQUUsSUFBSTtRQUNoQkMsUUFBUSxFQUFFYixxQkFBcUI7UUFDL0IvRyxJQUFJLEVBQUU7TUFDUCxDQUFDO0lBQ0YsQ0FBQztJQUFBbUMsTUFBQSxDQUVPMEYsWUFBWSxHQUFwQixTQUFRQSxZQUFZQSxDQUFDQyxJQUFjLEVBQWE7TUFDL0MsSUFBSUMsMkJBQTJCLENBQUNELElBQUksQ0FBQyxFQUFFO1FBQ3RDLE9BQU8sa0JBQWtCO01BQzFCO01BQ0EsUUFBUUEsSUFBSSxDQUFDOUgsSUFBSTtRQUNoQixLQUFLLFVBQVU7VUFDZCxPQUFPLFVBQVU7UUFDbEIsS0FBSyxlQUFlO1VBQ25CLE9BQU8sTUFBTTtRQUNkO1VBQ0MsT0FBTyxXQUFXO01BQ3BCO0lBQ0QsQ0FBQztJQUFBbUMsTUFBQSxDQUVEMEMsd0JBQXdCLEdBQXhCLFNBQUFBLHdCQUF3QkEsQ0FBQSxFQUFvQjtNQUMzQyxNQUFNbUQsS0FBSyxHQUFHLElBQUksQ0FBQ0MsU0FBUyxDQUFDLENBQUU7TUFDL0IsTUFBTUMsaUJBQWlCLEdBQUdGLEtBQUssQ0FBQ0csbUJBQW1CLEVBQUVDLG9CQUFvQixDQUFDLENBQUM7TUFFM0UsSUFBSSxDQUFDRixpQkFBaUIsRUFBRTtRQUN2QixPQUFPLEVBQUU7TUFDVjtNQUVBLE1BQU1HLFlBQVksR0FBR0gsaUJBQWlCLENBQUNJLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2pFLE1BQU05QixTQUFTLEdBQUd3QixLQUFLLENBQUNHLG1CQUFtQixFQUFFSSxNQUFNLENBQUMvQixTQUEyQjtNQUUvRSxNQUFNTixpQkFBaUIsR0FBRzhCLEtBQUssQ0FBQzNHLGVBQWUsQ0FBQyxDQUFDLENBQUNtSCxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUV0QyxpQkFBaUIsSUFBSSxDQUFDLENBQUM7TUFFN0YsTUFBTXVDLFlBQVksR0FBR0osWUFBWSxDQUFDSyxlQUFlLENBQUMsQ0FBQztNQUNuRCxNQUFNQyxxQkFBcUIsR0FBR0YsWUFBWSxDQUFDRyxNQUFNLENBQUU3RixLQUFrQixJQUFLO1FBQ3pFLE9BQU8sQ0FBQ0EsS0FBSyxDQUFDc0MsU0FBUyxDQUFDLENBQUMsRUFBRUUsV0FBVyxFQUFFc0QsRUFBRSxFQUFFQyxZQUFZLEVBQUVDLE9BQU8sQ0FBQyxDQUFDO01BQ3BFLENBQUMsQ0FBQztNQUVGLE1BQU1DLE1BQU0sR0FBR0wscUJBQXFCLENBQUN4QixHQUFHLENBQUVwRSxLQUFrQixJQUFvQjtRQUMvRSxNQUFNcUMsY0FBYyxHQUFHckMsS0FBSyxDQUFDc0MsU0FBUyxDQUFDLENBQUM7UUFDeEMsSUFBSXVDLFFBQTBEO1FBQzlELElBQUlHLDJCQUEyQixDQUFDM0MsY0FBYyxDQUFDLEVBQUU7VUFDaER3QyxRQUFRLEdBQUcsTUFBQUEsQ0FBQSxLQUErQixJQUFJLENBQUNxQixzQkFBc0IsQ0FBQ2xHLEtBQUssQ0FBQ2lELGNBQWUsQ0FBQztRQUM3RjtRQUVBLE9BQU87VUFDTi9DLElBQUksRUFBRUYsS0FBSyxDQUFDaUQsY0FBZTtVQUMzQndCLEtBQUssRUFBRXpFLEtBQUssQ0FBQ3lFLEtBQUs7VUFDbEJFLFFBQVEsRUFBRXRDLGNBQWMsQ0FBQ3BGLElBQUk7VUFDN0JrSixRQUFRLEVBQUVuRyxLQUFLLENBQUNtRyxRQUFRLElBQUksS0FBSztVQUNqQ2hHLFlBQVksRUFBRSxJQUFJLENBQUMrQyw2QkFBNkIsQ0FBQ2xELEtBQUssRUFBRW1ELGlCQUFpQixDQUFDO1VBQzFFeUIsVUFBVSxFQUFFLElBQUk7VUFDaEJDLFFBQVEsRUFBRUEsUUFBUTtVQUNsQjVILElBQUksRUFBRSxJQUFJLENBQUM2SCxZQUFZLENBQUN6QyxjQUFjLENBQW9DO1VBQzFFK0QsSUFBSSxFQUFFLElBQUksQ0FBQ2pFLHFCQUFxQixDQUFDbkMsS0FBSyxFQUFFMEYsWUFBWSxDQUFDO1VBQ3JEVyxTQUFTLEVBQUVoRSxjQUFjLENBQUNnRTtRQUMzQixDQUFDO01BQ0YsQ0FBQyxDQUFDOztNQUVGO01BQ0EsSUFBSXhDLFdBQVcsQ0FBQ3lDLHdCQUF3QixDQUFDbkIsaUJBQWlCLENBQUNvQixXQUFXLENBQUMsQ0FBaUMsQ0FBQyxFQUFFO1FBQzFHTixNQUFNLENBQUNuRixJQUFJLENBQUMsSUFBSSxDQUFDMEMsMEJBQTBCLENBQUNDLFNBQVMsQ0FBQyxDQUFDO01BQ3hEO01BRUEsT0FBT3dDLE1BQU07SUFDZCxDQUFDO0lBQUE3RyxNQUFBLENBRUs4RyxzQkFBc0IsR0FBNUIsZUFBTUEsc0JBQXNCQSxDQUFDTSxZQUFvQixFQUFxQjtNQUNyRSxNQUFNQyxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQ0MsWUFBWSxDQUFDRixZQUFZLENBQUM7TUFFOUQsSUFBSSxDQUFDQyxnQkFBZ0IsRUFBRTtRQUN0QixPQUFPLEVBQUU7TUFDVjtNQUVBLE1BQU1FLGFBQWEsR0FBR0YsZ0JBQWdCLENBQUNFLGFBQWE7TUFFcEQsTUFBTUMsV0FBVyxHQUFHRCxhQUFhLENBQUNFLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDLElBQUlILGFBQWEsQ0FBQ0ksY0FBYyxFQUFFLEVBQUU5SCxTQUFTLEVBQUVBLFNBQVMsRUFBRUEsU0FBUyxFQUFFO1FBQ3RIK0gsT0FBTyxFQUFFQyx1QkFBdUIsQ0FBQ1IsZ0JBQWdCO01BQ2xELENBQUMsQ0FBQztNQUNGLE1BQU1TLElBQUksR0FBRyxNQUFNTixXQUFXLENBQUNPLGVBQWUsQ0FBQyxDQUFDO01BRWhELE1BQU1DLGlCQUFpQixHQUFHRixJQUFJLENBQUM5QyxHQUFHLENBQUNpRCxzQkFBc0IsQ0FBQ1osZ0JBQWdCLENBQUMsQ0FBQztNQUM1RSxNQUFNYSxnQkFBZ0IsR0FBRyxJQUFJLENBQUN4SCxpQkFBaUIsQ0FBQ2lELElBQUksQ0FBRS9DLEtBQUssSUFBS0EsS0FBSyxDQUFDRSxJQUFJLEtBQUtzRyxZQUFZLENBQUM7TUFDNUYsSUFBSWMsZ0JBQWdCLEVBQUU7UUFDckJBLGdCQUFnQixDQUFDekMsUUFBUSxHQUFHdUMsaUJBQWlCO01BQzlDO01BQ0EsT0FBT0EsaUJBQWlCO0lBQ3pCLENBQUM7SUFBQWhJLE1BQUEsQ0FFS21JLDBCQUEwQixHQUFoQyxlQUFNQSwwQkFBMEJBLENBQy9CQyxTQUFpQixFQUNqQkMsTUFBdUMsRUFDUTtNQUMvQyxJQUFJQyxjQUFjLEdBQUdELE1BQU07TUFDM0IsTUFBTXpILEtBQUssR0FBRyxJQUFJLENBQUNGLGlCQUFpQixDQUFDaUQsSUFBSSxDQUFDNEUsSUFBQTtRQUFBLElBQUM7VUFBRXpIO1FBQUssQ0FBQyxHQUFBeUgsSUFBQTtRQUFBLE9BQUt6SCxJQUFJLEtBQUtzSCxTQUFTO01BQUEsRUFBQztNQUMzRSxJQUFJeEgsS0FBSyxFQUFFO1FBQ1YsTUFBTXFHLFNBQVMsR0FBR3JHLEtBQUssQ0FBQ3FHLFNBQVM7UUFFakMsSUFBSUEsU0FBUyxLQUFLcEgsU0FBUyxFQUFFO1VBQzVCeUksY0FBYyxHQUFHRCxNQUFNLENBQ3JCckQsR0FBRyxDQUFFd0QsS0FBSyxJQUFLO1lBQ2YsTUFBTUMsUUFBUSxHQUFHRCxLQUFLLENBQUM1RyxjQUFjLENBQUM2RSxNQUFNLENBQUVpQyxHQUFHLElBQUssT0FBT0EsR0FBRyxLQUFLLFFBQVEsSUFBSUEsR0FBRyxDQUFDQyxNQUFNLElBQUkxQixTQUFTLENBQUM7WUFDekcsT0FBT3dCLFFBQVEsQ0FBQ0UsTUFBTSxHQUFHLENBQUMsR0FBRztjQUFFLEdBQUdILEtBQUs7Y0FBRTVHLGNBQWMsRUFBRTZHO1lBQVMsQ0FBQyxHQUFHNUksU0FBUztVQUNoRixDQUFDLENBQUMsQ0FDRDRHLE1BQU0sQ0FBQ21DLE9BQU8sQ0FBb0M7VUFDcEQsSUFBSU4sY0FBYyxDQUFDSyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ2hDLE9BQU8sRUFBRTtVQUNWO1FBQ0Q7UUFDQSxNQUFNRSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUN2QixZQUFZLENBQUMxRyxLQUFLLENBQUNFLElBQUksQ0FBQztRQUVyRCxJQUFJK0gsU0FBUyxJQUFJQyxlQUFlLENBQUNDLHFCQUFxQixDQUFDbkksS0FBSyxDQUFDRSxJQUFJLEVBQUUrSCxTQUFTLENBQUMsRUFBRTtVQUM5RSxNQUFNRyxtQkFBbUIsR0FBRyxNQUFNaEgsT0FBTyxDQUFDaUgsR0FBRyxDQUFDWCxjQUFjLENBQUN0RCxHQUFHLENBQUMsTUFBT0UsS0FBSyxJQUFLZ0UsaUJBQWlCLENBQUNMLFNBQVMsRUFBRTNELEtBQUssQ0FBQyxDQUFDLENBQUM7VUFDdkgsT0FBTzhELG1CQUFtQixDQUFDRyxJQUFJLENBQUMsQ0FBQztRQUNsQztNQUNEOztNQUVBO01BQ0EsT0FBT0MsZ0JBQWdCLENBQUNkLGNBQWMsQ0FBQztJQUN4QyxDQUFDO0lBQUF0SSxNQUFBLENBRUtzSCxZQUFZLEdBQWxCLGVBQU1BLFlBQVlBLENBQUNGLFlBQW9CLEVBQXNDO01BQzVFLE1BQU0vQyxTQUFTLEdBQUcsSUFBSSxDQUFDZ0YsWUFBWSxDQUFDLENBQUU7TUFDdEMsTUFBTUMsVUFBVSxHQUFHLE1BQU1SLGVBQWUsQ0FBQ1MsZ0JBQWdCLENBQUMxSixTQUFTLEVBQUV1SCxZQUFZLEVBQUV2SCxTQUFTLEVBQUV3RSxTQUFTLENBQUM7TUFDeEcsT0FBT2lGLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUFBdEosTUFBQSxDQUVLd0osZUFBZSxHQUFyQixlQUFNQSxlQUFlQSxDQUFDQyxDQUFrRSxFQUFpQjtNQUN4RyxNQUFNQyxTQUFTLEdBQUdDLFVBQVUsQ0FBQ0MsY0FBYyxDQUFDLElBQUksQ0FBQ0YsU0FBUyxDQUFjO01BQ3hFLE1BQU1HLFlBQVksR0FBR0gsU0FBUyxDQUFDSSxTQUFTLENBQUMsQ0FBaUI7TUFDMUQsTUFBTUMsTUFBTSxHQUFHTixDQUFDLENBQUNPLFlBQVksQ0FBQyxRQUFRLENBQUM7TUFDdkMsTUFBTUMsZUFBZSxHQUFHRixNQUFNLENBQUNHLElBQUksQ0FBRUMsZUFBZSxJQUFLQSxlQUFlLENBQUNDLEdBQUcsS0FBSyxZQUFZLENBQUM7TUFDOUYsTUFBTVAsWUFBWSxDQUFDUSw2QkFBNkIsQ0FBQ1gsU0FBUyxFQUFFO1FBQUVPO01BQWdCLENBQUMsQ0FBQztNQUNoRixJQUFJLENBQUNLLGdCQUFnQixDQUFDUCxNQUFNLENBQUM7TUFFN0IsS0FBSyxNQUFNdkIsS0FBSyxJQUFJdUIsTUFBTSxFQUFFO1FBQzNCLElBQUl2QixLQUFLLENBQUM0QixHQUFHLEtBQUssWUFBWSxFQUFFO1VBQy9CO1VBQ0EsS0FBSyxNQUFNRyxxQkFBcUIsSUFBSS9CLEtBQUssQ0FBQ2dDLHlCQUF5QixFQUFFO1lBQ3BFLE1BQU1DLFdBQVcsQ0FBQ0MsZUFBZSxDQUNoQ2IsWUFBWSxDQUFDdEssT0FBTyxFQUNwQmlKLEtBQUssQ0FBQzRCLEdBQUcsRUFDVCxrQkFBa0IsRUFDbEJHLHFCQUFxQixDQUFDM0ksY0FDdkIsQ0FBQztVQUNGO1FBQ0QsQ0FBQyxNQUFNO1VBQ04sTUFBTWhCLEtBQUssR0FBRyxJQUFJLENBQUNGLGlCQUFpQixDQUFDaUQsSUFBSSxDQUFFQyxDQUFDLElBQUtBLENBQUMsQ0FBQzlDLElBQUksS0FBSzBILEtBQUssQ0FBQzRCLEdBQUcsQ0FBRTtVQUN2RSxLQUFLLE1BQU1HLHFCQUFxQixJQUFJL0IsS0FBSyxDQUFDZ0MseUJBQXlCLEVBQUU7WUFDcEUsTUFBTTtjQUFFN0ksUUFBUTtjQUFFQztZQUFlLENBQUMsR0FBRzJJLHFCQUFxQjtZQUMxRCxNQUFNRSxXQUFXLENBQUNDLGVBQWUsQ0FBQ2IsWUFBWSxDQUFDdEssT0FBTyxFQUFFcUIsS0FBSyxDQUFDRSxJQUFJLEVBQUVhLFFBQVEsRUFBRUMsY0FBYyxDQUFDO1VBQzlGO1FBQ0Q7TUFDRDtNQUNBLE1BQU1pSSxZQUFZLENBQUNjLGFBQWEsQ0FBQyxDQUFDO0lBQ25DOztJQUVBO0lBQUE7SUFBQTNLLE1BQUEsQ0FDQXNLLGdCQUFnQixHQUFoQixTQUFBQSxnQkFBZ0JBLENBQUNQLE1BQXlCLEVBQVE7TUFDakQsTUFBTWEsUUFBUSxHQUFHLElBQUlDLEtBQUssQ0FBQyxDQUFDO1FBQzNCQyxrQkFBa0IsR0FBRyxJQUFJQyxjQUFjLENBQUNsTCxTQUFTLEVBQUU7VUFBRW1MLEVBQUUsRUFBRTtRQUFLLENBQUMsQ0FBQztRQUNoRUMsYUFBYSxHQUFHLElBQUlDLFNBQVMsQ0FBQyxDQUFDO01BQ2hDbkIsTUFBTSxDQUFDcEosT0FBTyxDQUFFNkgsS0FBSyxJQUFLO1FBQ3pCLE1BQU0yQyxPQUFPLEdBQUcsSUFBSSxDQUFDekssaUJBQWlCLENBQUNpRCxJQUFJLENBQUVtRSxJQUFJLElBQUtBLElBQUksQ0FBQ2hILElBQUksS0FBSzBILEtBQUssQ0FBQzRCLEdBQUcsQ0FBQyxFQUFFN0UsUUFBUTtRQUN4RmlELEtBQUssQ0FBQ2dDLHlCQUF5QixDQUFDN0osT0FBTyxDQUFFeUssd0JBQXdCLElBQUs7VUFDckUsSUFBSUMsaUJBQTRCO1VBQ2hDLFFBQVFGLE9BQU87WUFDZCxLQUFLLFVBQVU7Y0FDZEUsaUJBQWlCLEdBQUdULFFBQVE7Y0FDNUI7WUFDRCxLQUFLLGVBQWU7Y0FDbkJTLGlCQUFpQixHQUFHSixhQUFhO2NBQ2pDO1lBQ0QsS0FBSyxvQkFBb0I7Y0FDeEJJLGlCQUFpQixHQUFHUCxrQkFBa0I7Y0FDdEM7WUFDRDtjQUNDO1VBQ0Y7VUFDQU0sd0JBQXdCLENBQUN4SixjQUFjLENBQUNqQixPQUFPLENBQUMsQ0FBQ3VFLEtBQUssRUFBRW9HLEdBQUcsS0FBSztZQUMvREYsd0JBQXdCLENBQUN4SixjQUFjLENBQUMwSixHQUFHLENBQUMsR0FBR0QsaUJBQWlCLENBQUNFLFVBQVUsQ0FBQ3JHLEtBQUssRUFBRSxRQUFRLENBQUM7VUFDN0YsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDO01BQ0gsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUFBbEYsTUFBQSxDQUVLd0wsbUJBQW1CLEdBQXpCLGVBQU1BLG1CQUFtQkEsQ0FBQ3BCLEdBQVcsRUFBOEI7TUFDbEUsTUFBTXhKLEtBQUssR0FBRyxJQUFJLENBQUNGLGlCQUFpQixDQUFDaUQsSUFBSSxDQUFFQyxDQUFDLElBQUtBLENBQUMsQ0FBQzlDLElBQUksS0FBS3NKLEdBQUcsQ0FBRTtNQUNqRSxNQUFNVixTQUFTLEdBQUdDLFVBQVUsQ0FBQ0MsY0FBYyxDQUFDLElBQUksQ0FBQ0YsU0FBUyxDQUFjO01BQ3hFLE1BQU1HLFlBQVksR0FBR0gsU0FBUyxDQUFDSSxTQUFTLENBQUMsQ0FBaUI7TUFDMUQsTUFBTUQsWUFBWSxDQUFDNEIsZUFBZSxDQUFDN0ssS0FBSyxDQUFDRSxJQUFJLENBQUM7TUFDOUMsT0FBTytJLFlBQVksQ0FBQzZCLDJCQUEyQixDQUFDOUssS0FBSyxDQUFDRSxJQUFJLENBQUM7SUFDNUQsQ0FBQztJQUFBZCxNQUFBLENBRUQyTCx1QkFBdUIsR0FBdkIsU0FBQUEsdUJBQXVCQSxDQUFBLEVBQVM7TUFDL0IsTUFBTUMsT0FBTyxHQUFHLElBQUksQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBYztNQUNoREMsVUFBVSxDQUFDQyxJQUFJLENBQUNILE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBQUE1TCxNQUFBLENBRURnTSxzQkFBc0IsR0FBdEIsU0FBQUEsc0JBQXNCQSxDQUFBLEVBQVM7TUFDOUIsTUFBTUosT0FBTyxHQUFHLElBQUksQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBYztNQUNoREMsVUFBVSxDQUFDRyxNQUFNLENBQUNMLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBQUE1TCxNQUFBLENBRUtrTSxjQUFjLEdBQXBCLGVBQU1BLGNBQWNBLENBQUEsRUFBa0I7TUFDckM7TUFDQSxNQUFNeEMsU0FBUyxHQUFHQyxVQUFVLENBQUNDLGNBQWMsQ0FBQyxJQUFJLENBQUNGLFNBQVMsQ0FBYztNQUN4RSxNQUFNRyxZQUFZLEdBQUdILFNBQVMsQ0FBQ0ksU0FBUyxDQUFDLENBQWlCO01BQzFELE1BQU1ELFlBQVksQ0FBQ1EsNkJBQTZCLENBQUNYLFNBQVMsQ0FBQztNQUMzRCxNQUFNRyxZQUFZLENBQUNjLGFBQWEsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFBQTNLLE1BQUEsQ0FFRG1NLGNBQWMsR0FBZCxTQUFBQSxjQUFjQSxDQUFBLEVBQVM7TUFDdEIsTUFBTXpDLFNBQVMsR0FBR0MsVUFBVSxDQUFDQyxjQUFjLENBQUMsSUFBSSxDQUFDRixTQUFTLENBQWM7TUFDeEVBLFNBQVMsQ0FBQzBDLGtCQUFrQixDQUFDO1FBQUVDLGVBQWUsRUFBRTtNQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBQUFyTSxNQUFBLENBRWFzTSxtQkFBbUIsR0FBakMsZUFBY0EsbUJBQW1CQSxDQUFDQyxLQUFnRCxFQUFpQjtNQUNsRyxNQUFNbkMsR0FBRyxHQUFHbUMsS0FBSyxDQUFDdkMsWUFBWSxDQUFDLEtBQUssQ0FBQztNQUNyQyxNQUFNL0gsT0FBTyxHQUFHc0ssS0FBSyxDQUFDdkMsWUFBWSxDQUFDLFNBQVMsQ0FBQztNQUM3QyxNQUFNd0MsTUFBTSxHQUFHRCxLQUFLLENBQUN2QyxZQUFZLENBQUMsUUFBUSxDQUFDO01BRTNDLElBQUk7UUFDSCxNQUFNeUMsVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDakIsbUJBQW1CLENBQUNwQixHQUFHLENBQUM7UUFFdEQsTUFBTXhJLGNBQWMsR0FBRzZLLFVBQVUsQ0FBQ3pILEdBQUcsQ0FBQyxNQUFPMEgsU0FBUyxJQUFLO1VBQzFELE1BQU0vSyxRQUFRLEdBQUcrSyxTQUFTLENBQUMvSyxRQUEwQjtVQUVyRCxJQUFJK0ssU0FBUyxDQUFDQyxTQUFTLEtBQUssY0FBYyxFQUFFO1lBQzNDO1lBQ0E7WUFDQSxNQUFNQyxrQkFBaUQsR0FDdERqTCxRQUFRLEtBQUtMLGNBQWMsQ0FBQ0MsRUFBRSxJQUFJSSxRQUFRLEtBQUtMLGNBQWMsQ0FBQ0UsRUFBRSxHQUM3RDtjQUFFRyxRQUFRO2NBQUVDLGNBQWMsRUFBRSxDQUFDOEssU0FBUyxDQUFDckUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFcUUsU0FBUyxDQUFDckUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUFFLENBQUMsR0FDeEU7Y0FBRTFHLFFBQVE7Y0FBRUMsY0FBYyxFQUFFLENBQUM4SyxTQUFTLENBQUNyRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQUUsQ0FBQztZQUV2RCxPQUFPLElBQUksQ0FBQ0YsMEJBQTBCLENBQUNpQyxHQUFHLEVBQUUsQ0FBQ3dDLGtCQUFrQixDQUFDLENBQUM7VUFDbEUsQ0FBQyxNQUFNLElBQUlqTCxRQUFRLEtBQUtMLGNBQWMsQ0FBQ0MsRUFBRSxJQUFJSSxRQUFRLEtBQUtMLGNBQWMsQ0FBQ0UsRUFBRSxFQUFFO1lBQzVFO1lBQ0E7WUFDQSxNQUFNLENBQUMwRCxLQUFLLEVBQUVDLFdBQVcsQ0FBQyxHQUFHdUgsU0FBUyxDQUFDckUsTUFBeUQ7WUFDaEcsT0FBT3JHLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUM7Y0FBRU4sUUFBUTtjQUFFQyxjQUFjLEVBQUUsQ0FBQztnQkFBRXNELEtBQUs7Z0JBQUVDLFdBQVcsRUFBRUEsV0FBVyxJQUFJRDtjQUFNLENBQUM7WUFBRSxDQUFDLENBQUMsQ0FBQztVQUN2RyxDQUFDLE1BQU07WUFDTjtZQUNBdkYsR0FBRyxDQUFDa04sT0FBTyxDQUFDLGtDQUFrQ3pDLEdBQUcsY0FBY3pJLFFBQVEsZ0JBQWdCK0ssU0FBUyxDQUFDckUsTUFBTSxHQUFHLENBQUM7WUFDM0csT0FBT3JHLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLEVBQUUsQ0FBQztVQUMzQjtRQUNELENBQUMsQ0FBQztRQUVGLE1BQU02SyxjQUFjLEdBQUcsTUFBTTlLLE9BQU8sQ0FBQ2lILEdBQUcsQ0FBQ3JILGNBQWMsQ0FBQztRQUN4REssT0FBTyxDQUFDNkssY0FBYyxDQUFDM0QsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUMvQixDQUFDLENBQUMsT0FBT3pKLEtBQUssRUFBRTtRQUNmOE0sTUFBTSxDQUFDOU0sS0FBSyxZQUFZcU4sS0FBSyxHQUFHck4sS0FBSyxHQUFHLElBQUlxTixLQUFLLENBQUNDLE1BQU0sQ0FBQ3ROLEtBQUssQ0FBQyxDQUFDLENBQUM7TUFDbEU7SUFDRCxDQUFDO0lBQUFNLE1BQUEsQ0FFRDhDLGFBQWEsR0FBYixTQUFBQSxhQUFhQSxDQUFBLEVBQTJCO01BQ3ZDLE9BQ0NtSyxJQUFBLENBQUNDLHNCQUFzQjtRQUN0QkMsV0FBVyxFQUFFLElBQUksQ0FBQ0MsbUJBQW1CLENBQUMsQ0FBRTtRQUN4Q0MsS0FBSyxFQUFFLElBQUksQ0FBQy9LLGdCQUFnQixDQUFDLENBQUU7UUFDL0I1QixpQkFBaUIsRUFBRSxJQUFJLENBQUNBLGlCQUFrQjtRQUMxQzRNLGFBQWEsRUFBRSxJQUFJLENBQUNoTyxjQUFlO1FBQ25DaU8sYUFBYSxFQUFFLElBQUksQ0FBQ2pCLG1CQUFtQixDQUFDa0IsSUFBSSxDQUFDLElBQUksQ0FBRTtRQUNuREMsV0FBVyxFQUFFLElBQUksQ0FBQ3RGLDBCQUEwQixDQUFDcUYsSUFBSSxDQUFDLElBQUksQ0FBRTtRQUN4REUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDL0ssa0JBQW1CO1FBQzNDZ0wsWUFBWSxFQUFFLElBQUksQ0FBQ3hCLGNBQWMsQ0FBQ3FCLElBQUksQ0FBQyxJQUFJLENBQUU7UUFDN0NJLGFBQWEsRUFBRSxJQUFJLENBQUNwRSxlQUFlLENBQUNnRSxJQUFJLENBQUMsSUFBSSxDQUFFO1FBQy9DSyxxQkFBcUIsRUFBRSxJQUFJLENBQUNsQyx1QkFBdUIsQ0FBQzZCLElBQUksQ0FBQyxJQUFJLENBQUU7UUFDL0RNLG9CQUFvQixFQUFFLElBQUksQ0FBQzlCLHNCQUFzQixDQUFDd0IsSUFBSSxDQUFDLElBQUksQ0FBRTtRQUM3RE8sWUFBWSxFQUFFLElBQUksQ0FBQzdCLGNBQWMsQ0FBQ3NCLElBQUksQ0FBQyxJQUFJO01BQUUsQ0FDN0MsQ0FBQztJQUVKLENBQUM7SUFBQSxPQUFBbFEsYUFBQTtFQUFBLEVBM1p5QzBRLGFBQWEsR0FBQXBQLFdBQUEsR0FBQXFQLHlCQUFBLENBQUE1UCxPQUFBLENBQUE0QixTQUFBLHFGQUFBeEMsS0FBQTtJQUFBeVEsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUF4UCxZQUFBLEdBQUFvUCx5QkFBQSxDQUFBNVAsT0FBQSxDQUFBNEIsU0FBQSxnQkFBQXRDLEtBQUE7SUFBQXVRLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBdlAsWUFBQSxHQUFBbVAseUJBQUEsQ0FBQTVQLE9BQUEsQ0FBQTRCLFNBQUEsc0JBQUFuQyxLQUFBO0lBQUFvUSxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXRQLFlBQUEsR0FBQWtQLHlCQUFBLENBQUE1UCxPQUFBLENBQUE0QixTQUFBLHlCQUFBbEMsS0FBQTtJQUFBbVEsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFyUCxZQUFBLEdBQUFpUCx5QkFBQSxDQUFBNVAsT0FBQSxDQUFBNEIsU0FBQSxrQkFBQWhDLEtBQUE7SUFBQWlRLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBcFAsWUFBQSxHQUFBZ1AseUJBQUEsQ0FBQTVQLE9BQUEsQ0FBQTRCLFNBQUEsY0FBQS9CLEtBQUE7SUFBQWdRLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBaFEsT0FBQSxNQUFBRCxNQUFBO0VBQUEwQixRQUFBLEdBQUF4QyxhQUFBO0VBQUEsT0FBQXdDLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==