@sapui5/sap.fe.macros 1.139.0 → 1.139.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/macros/.library +1 -1
- package/src/sap/fe/macros/Chart.js +1 -1
- package/src/sap/fe/macros/Chart.tsx +1 -1
- package/src/sap/fe/macros/RichTextEditor.js +1 -2
- package/src/sap/fe/macros/RichTextEditor.tsx +0 -1
- package/src/sap/fe/macros/ValueHelp.js +4 -28
- package/src/sap/fe/macros/ValueHelp.tsx +2 -42
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +2 -4
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +1 -4
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
- package/src/sap/fe/macros/controls/FilterBar.js +39 -3
- package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
- package/src/sap/fe/macros/controls/Section.js +3 -2
- package/src/sap/fe/macros/controls/Section.ts +2 -1
- package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +8 -8
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +7 -7
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +2 -2
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +1 -1
- package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
- package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
- package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
- package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
- package/src/sap/fe/macros/filter/FilterUtils.js +7 -1
- package/src/sap/fe/macros/filter/FilterUtils.ts +7 -0
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +13 -3
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
- package/src/sap/fe/macros/form/Form.block.js +6 -2
- package/src/sap/fe/macros/form/Form.block.ts +4 -1
- package/src/sap/fe/macros/form/FormDelegate.js +20 -1
- package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +4 -2
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +3 -1
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +5 -1
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +4 -0
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
- package/src/sap/fe/macros/table/MdcTableTemplate.js +3 -1
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +2 -1
- package/src/sap/fe/macros/table/Table.js +7 -1
- package/src/sap/fe/macros/table/Table.tsx +7 -1
- package/src/sap/fe/macros/table/TableAPI.js +8 -1
- package/src/sap/fe/macros/table/TableAPI.ts +15 -2
- package/src/sap/fe/macros/table/TableSizeHelper.js +3 -3
- package/src/sap/fe/macros/table/TableSizeHelper.ts +5 -2
- package/src/sap/fe/macros/table/TreeTable.js +7 -1
- package/src/sap/fe/macros/table/TreeTable.tsx +7 -1
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +3 -2
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +10 -3
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +8 -8
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +7 -6
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +28 -2
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
|
@@ -234,7 +234,7 @@ export default class ActionParameterDialog {
|
|
|
234
234
|
width="100%"
|
|
235
235
|
multipleLines={parameter.annotations.UI?.MultiLineText?.valueOf() === true}
|
|
236
236
|
required={compileExpression(isActionParameterRequiredExpression(parameter, this.action, convertTypes(this.metaModel)))}
|
|
237
|
-
valueHelp={hasValueHelp(parameter) ? generate([this.actionName, parameter.name]) : undefined}
|
|
237
|
+
valueHelp={hasValueHelp(parameter) ? generate([this.actionName, parameter.name, "FieldValueHelp"]) : undefined}
|
|
238
238
|
change={async (e): Promise<void> => this.handleFieldChange(e, parameter)}
|
|
239
239
|
visible={compileExpression(not(equal(getExpressionFromAnnotation(parameter.annotations?.UI?.Hidden), true)))}
|
|
240
240
|
ariaLabelledBy={[generate(["APD_", parameter.name, "Label"])]}
|
|
@@ -331,7 +331,7 @@ export default class ActionParameterDialog {
|
|
|
331
331
|
multipleLines={isMultiLineText(parameter)}
|
|
332
332
|
required={compileExpression(isActionParameterRequiredExpression(parameter, this.action, convertTypes(this.metaModel)))}
|
|
333
333
|
change={async (e): Promise<void> => this.handleFieldChange(e, parameter)}
|
|
334
|
-
valueHelp={hasValueHelp(parameter) ? generate([this.actionName, parameter.name]) : undefined}
|
|
334
|
+
valueHelp={hasValueHelp(parameter) ? generate([this.actionName, parameter.name, "FieldValueHelp"]) : undefined}
|
|
335
335
|
dependents={this.createParameterDialogValueHelp(parameter, parameterContext)}
|
|
336
336
|
visible={compileExpression(
|
|
337
337
|
ifElse(
|
|
@@ -357,7 +357,7 @@ export default class ActionParameterDialog {
|
|
|
357
357
|
}
|
|
358
358
|
return (
|
|
359
359
|
<ValueHelp
|
|
360
|
-
id={generate([this.actionName, parameter.name])}
|
|
360
|
+
id={generate([this.actionName, parameter.name, "FieldValueHelp"])}
|
|
361
361
|
delegate={{
|
|
362
362
|
name: "sap/fe/macros/valuehelp/ValueHelpDelegate",
|
|
363
363
|
payload: {
|
|
@@ -856,6 +856,10 @@ export default class ActionParameterDialog {
|
|
|
856
856
|
public closeDialog(): void {
|
|
857
857
|
if (this.dialog) {
|
|
858
858
|
this.parameters.events?.onParameterDialogClosed?.();
|
|
859
|
+
// when the dialog is cancelled, messages need to be removed in case the same action should be executed again
|
|
860
|
+
for (const i in this.actionParameterInfos) {
|
|
861
|
+
this.removeMessagesForParameter(this.actionParameterInfos[i].parameter);
|
|
862
|
+
}
|
|
859
863
|
this.dialog.close();
|
|
860
864
|
}
|
|
861
865
|
this.isDialogOpen = false;
|
|
@@ -1186,10 +1190,6 @@ export default class ActionParameterDialog {
|
|
|
1186
1190
|
* Manages the close of the dialog.
|
|
1187
1191
|
*/
|
|
1188
1192
|
private afterClose(): void {
|
|
1189
|
-
// when the dialog is cancelled, messages need to be removed in case the same action should be executed again
|
|
1190
|
-
for (const i in this.actionParameterInfos) {
|
|
1191
|
-
this.removeMessagesForParameter(this.actionParameterInfos[i].parameter);
|
|
1192
|
-
}
|
|
1193
1193
|
this.dialog?.destroy();
|
|
1194
1194
|
this.buttonLock = false; //needed here, not in the press events finally clause. In case the UI is sluggish, begin button could be pressed again.
|
|
1195
1195
|
}
|
|
@@ -297,7 +297,7 @@ sap.ui.define(["sap/base/strings/formatMessage", "sap/fe/base/BindingToolkit", "
|
|
|
297
297
|
const type = ifElse(not(Entity.IsActive), ObjectMarkerType.Draft, ifElse(Entity.HasDraft, ifElse(!!this.usedInAnalyticalTable, ObjectMarkerType.Locked, ifElse(pathInModel("DraftAdministrativeData/InProcessByUser"), ObjectMarkerType.Locked, ObjectMarkerType.Unsaved)), ObjectMarkerType.Flagged));
|
|
298
298
|
let visible;
|
|
299
299
|
if (this.usedInTable === true) {
|
|
300
|
-
visible = or(not(Entity.IsActive),
|
|
300
|
+
visible = or(not(Entity.IsActive), Entity.HasDraft);
|
|
301
301
|
} else {
|
|
302
302
|
// If Entity.HasDraft is empty, there is no context at all, so don't show the indicator
|
|
303
303
|
visible = and(not(isEmpty(Entity.HasDraft)), not(UI.IsEditable), Entity.HasDraft, not(pathInModel("DraftAdministrativeData/DraftIsCreatedByMe")));
|
|
@@ -368,4 +368,4 @@ sap.ui.define(["sap/base/strings/formatMessage", "sap/fe/base/BindingToolkit", "
|
|
|
368
368
|
_exports = DraftIndicator;
|
|
369
369
|
return _exports;
|
|
370
370
|
}, false);
|
|
371
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcmFmdEluZGljYXRvciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwicHJvcGVydHkiLCJ0eXBlIiwiX2RlYzMiLCJfZGVjNCIsInJlcXVpcmVkIiwiX2RlYzUiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJhbGxvd2VkVmFsdWVzIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CdWlsZGluZ0Jsb2NrIiwicHJvcGVydGllcyIsIm90aGVycyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0RHJhZnRJbmRpY2F0b3JUeXBlIiwiaW5kaWNhdG9yIiwiT2JqZWN0TWFya2VyVmlzaWJpbGl0eSIsIkljb25Pbmx5IiwiSWNvbkFuZFRleHQiLCJpbmNsdWRlcyIsInNldFByb3BlcnR5IiwiRXJyb3IiLCJhZGRBcmlhTGFiZWxsZWRCeUZvckRyYWZ0SW5kaWNhdG9yIiwiZWxlbWVudCIsImFyaWFMYWJlbGxlZEJ5cyIsImNvbnRlbnQiLCJnZXRBcmlhTGFiZWxsZWRCeSIsImFkZEFyaWFMYWJlbGxlZEJ5Iiwib25NZXRhZGF0YUF2YWlsYWJsZSIsImNyZWF0ZUNvbnRlbnQiLCJmb3JtYXREcmFmdE93bmVyVGV4dEluUG9wb3ZlciIsImhhc0RyYWZ0RW50aXR5IiwiZHJhZnRJblByb2Nlc3NCeVVzZXIiLCJkcmFmdExhc3RDaGFuZ2VkQnlVc2VyIiwiZHJhZnRJblByb2Nlc3NCeVVzZXJEZXNjIiwiZHJhZnRMYXN0Q2hhbmdlZEJ5VXNlckRlc2MiLCJtYWNyb1Jlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwidXNlckRlc2NyaXB0aW9uIiwiZ2V0VGV4dCIsImdldERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhUHJvcGVydGllcyIsIm1ldGFEYXRhIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImNvbnRleHRQYXRoIiwiZHJhZnRBZG1pbkVsZW1lbnQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJmaW5kIiwiYSIsIm5hbWUiLCJkcmFmdEFkbWluUHJvcGVydGllcyIsInRhcmdldFR5cGUiLCJlbnRpdHlQcm9wZXJ0aWVzIiwibWFwIiwib0RyYWZ0QWRtaW5Qcm9wZXJ0eSIsImdldFBvcG92ZXJUaXRsZUJpbmRpbmdFeHByZXNzaW9uIiwiaWZFbHNlIiwibm90IiwiRW50aXR5IiwiSXNBY3RpdmUiLCJpc0hpZGRlbkRyYWZ0RW5hYmxlZCIsInBhdGhJbk1vZGVsIiwiSGFzRHJhZnQiLCJpc0VtcHR5IiwiZHJhZnRJbmRpY2F0b3JUeXBlIiwiZ2V0RHJhZnRPd25lclRleHRCaW5kaW5nRXhwcmVzc2lvbiIsImRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhUHJvcGVydGllcyIsInBhcnRzIiwicGF0aCIsInB1c2giLCJmb3JtYXR0ZXIiLCJjcmVhdGVQb3BvdmVyIiwiY29udHJvbCIsImlzRHJhZnRXaXRoTm9DaGFuZ2VzQmluZGluZyIsImFuZCIsImRyYWZ0V2l0aE5vQ2hhbmdlc1RleHRCaW5kaW5nIiwiaXNEcmFmdFdpdGhDaGFuZ2VzQmluZGluZyIsImRyYWZ0V2l0aENoYW5nZXNUZXh0QmluZGluZyIsIm1vZGVsIiwiZm9ybWF0TWVzc2FnZSIsImlzQWN0aXZlSW5zdGFuY2VCaW5kaW5nIiwiYWN0aXZlSW5zdGFuY2VUZXh0QmluZGluZyIsInBvcG92ZXIiLCJfanN4IiwiUG9wb3ZlciIsInRpdGxlIiwic2hvd0hlYWRlciIsInZlcnRpY2FsU2Nyb2xsaW5nIiwiY2xhc3MiLCJwbGFjZW1lbnQiLCJlbmRCdXR0b24iLCJCdXR0b24iLCJpY29uIiwicHJlc3MiLCJkcmFmdFBvcG92ZXIiLCJjbG9zZSIsImNoaWxkcmVuIiwiX2pzeHMiLCJWQm94IiwidmlzaWJsZSIsIlRleHQiLCJ0ZXh0IiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3IiwiYWRkRGVwZW5kZW50Iiwib25PYmplY3RNYXJrZXJQcmVzc2VkIiwiZXZlbnQiLCJzb3VyY2UiLCJnZXRTb3VyY2UiLCJiaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic2V0QmluZGluZ0NvbnRleHQiLCJvcGVuQnkiLCJnZXRJY29uQW5kVGV4dEFkZGl0aW9uYWxJbmZvQmluZGluZ0V4cHJlc3Npb24iLCJvckJpbmRpbmdzIiwib3IiLCJnZXRJY29uQW5kVGV4dENvbnRlbnQiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsIm9iak1hcmtlclR5cGUiLCJPYmplY3RNYXJrZXJUeXBlIiwiVW5zYXZlZCIsIkRyYWZ0IiwiTG9ja2VkQnkiLCJVbnNhdmVkQnkiLCJGbGFnZ2VkIiwidmlzaWJpbGl0eSIsIlRleHRPbmx5IiwiT2JqZWN0TWFya2VyIiwiYmluZCIsImFkZGl0aW9uYWxJbmZvIiwiYXJpYUxhYmVsbGVkQnkiLCJyZWFjdGl2ZUFyZWFNb2RlIiwiZ2V0SWNvbk9ubHlDb250ZW50IiwidXNlZEluQW5hbHl0aWNhbFRhYmxlIiwiTG9ja2VkIiwidXNlZEluVGFibGUiLCJVSSIsIklzRWRpdGFibGUiLCJ1bmRlZmluZWQiLCJCdWlsZGluZ0Jsb2NrIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJEcmFmdEluZGljYXRvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IGZvcm1hdE1lc3NhZ2UgZnJvbSBcInNhcC9iYXNlL3N0cmluZ3MvZm9ybWF0TWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIFByaW1pdGl2ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFuZCwgaWZFbHNlLCBpc0VtcHR5LCBub3QsIG9yLCBwYXRoSW5Nb2RlbCB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgcHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IHR5cGUgeyBIaWRkZW5EcmFmdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEVudGl0eSwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIHsgT2JqZWN0TWFya2VyJFByZXNzRXZlbnQgfSBmcm9tIFwic2FwL20vT2JqZWN0TWFya2VyXCI7XG5pbXBvcnQgT2JqZWN0TWFya2VyIGZyb20gXCJzYXAvbS9PYmplY3RNYXJrZXJcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB7IE9iamVjdE1hcmtlclR5cGUsIE9iamVjdE1hcmtlclZpc2liaWxpdHkgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuXG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhIERyYWZ0SW5kaWNhdG9yIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBwcm92aWRlZCBieSBPRGF0YSBWNC5cbiAqXG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNyb3M6RHJhZnRJbmRpY2F0b3JcbiAqIGlkPVwiU29tZUlEXCJcbiAqIC8mZ3Q7XG4gKiA8L3ByZT5cbiAqIEBwcml2YXRlXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuZHJhZnRJbmRpY2F0b3IuRHJhZnRJbmRpY2F0b3JcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyYWZ0SW5kaWNhdG9yIGV4dGVuZHMgQnVpbGRpbmdCbG9jazxDb250cm9sPiB7XG5cdC8qKlxuXHQgKiBJRCBvZiB0aGUgRHJhZnRJbmRpY2F0b3Jcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRwdWJsaWMgaWQ/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdHB1YmxpYyBkcmFmdEluZGljYXRvclR5cGU/OiBPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25Pbmx5IHwgT2JqZWN0TWFya2VyVmlzaWJpbGl0eS5JY29uQW5kVGV4dCA9IE9iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbkFuZFRleHQ7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdHJlcXVpcmVkOiB0cnVlXG5cdH0pXG5cdGNvbnRleHRQYXRoITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRwdWJsaWMgY2xhc3MgPSBcIlwiO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0cHVibGljIHVzZWRJblRhYmxlPzogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdHB1YmxpYyB1c2VkSW5BbmFseXRpY2FsVGFibGU/OiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIsIGFsbG93ZWRWYWx1ZXM6IFtcIklubGluZVwiLCBcIk92ZXJsYXlcIl0gfSlcblx0cmVhY3RpdmVBcmVhTW9kZT86IFwiSW5saW5lXCIgfCBcIk92ZXJsYXlcIjtcblxuXHRkcmFmdFBvcG92ZXI/OiBQb3BvdmVyO1xuXG5cdHByaXZhdGUgaXNIaWRkZW5EcmFmdEVuYWJsZWQ/OiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6ICRDb250cm9sU2V0dGluZ3MgJiBQcm9wZXJ0aWVzT2Y8RHJhZnRJbmRpY2F0b3I+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcywgb3RoZXJzKTtcblx0fVxuXG5cdHNldERyYWZ0SW5kaWNhdG9yVHlwZShcblx0XHRpbmRpY2F0b3I6IE9iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbk9ubHkgfCBPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25BbmRUZXh0IHwgT2JqZWN0TWFya2VyVmlzaWJpbGl0eS5UZXh0T25seVxuXHQpOiB2b2lkIHtcblx0XHRpZiAoW09iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbk9ubHksIE9iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbkFuZFRleHRdLmluY2x1ZGVzKGluZGljYXRvcikpIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJkcmFmdEluZGljYXRvclR5cGVcIiwgaW5kaWNhdG9yKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBBbGxvd2VkIHZhbHVlICR7aW5kaWNhdG9yfSBkb2VzIG5vdCBtYXRjaGApO1xuXHRcdH1cblx0fVxuXG5cdGFkZEFyaWFMYWJlbGxlZEJ5Rm9yRHJhZnRJbmRpY2F0b3IoZWxlbWVudDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgYXJpYUxhYmVsbGVkQnlzID0gKHRoaXMuY29udGVudCBhcyB1bmtub3duIGFzIE9iamVjdE1hcmtlcik/LmdldEFyaWFMYWJlbGxlZEJ5KCkgPz8gW107XG5cdFx0aWYgKCFhcmlhTGFiZWxsZWRCeXMuaW5jbHVkZXMoZWxlbWVudCkpIHtcblx0XHRcdCh0aGlzLmNvbnRlbnQgYXMgdW5rbm93biBhcyBPYmplY3RNYXJrZXIpPy5hZGRBcmlhTGFiZWxsZWRCeShlbGVtZW50KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgdGhlIG9uTWV0YWRhdGFBdmFpbGFibGUgZXZlbnQuXG5cdCAqL1xuXHRvbk1ldGFkYXRhQXZhaWxhYmxlKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUnVudGltZSBmb3JtYXR0ZXIgZnVuY3Rpb24gdG8gZm9ybWF0IHRoZSBjb3JyZWN0IHRleHQgdGhhdCBkaXNwbGF5cyB0aGUgb3duZXIgb2YgYSBkcmFmdC5cblx0ICpcblx0ICogVGhpcyBpcyB1c2VkIGluIGNhc2UgdGhlIERyYWZ0SW5kaWNhdG9yIGlzIHNob3duIGZvciBhbiBhY3RpdmUgZW50aXR5IHRoYXQgaGFzIGEgZHJhZnQgb2YgYW5vdGhlciB1c2VyLlxuXHQgKiBAcGFyYW0gaGFzRHJhZnRFbnRpdHlcblx0ICogQHBhcmFtIGRyYWZ0SW5Qcm9jZXNzQnlVc2VyXG5cdCAqIEBwYXJhbSBkcmFmdExhc3RDaGFuZ2VkQnlVc2VyXG5cdCAqIEBwYXJhbSBkcmFmdEluUHJvY2Vzc0J5VXNlckRlc2Ncblx0ICogQHBhcmFtIGRyYWZ0TGFzdENoYW5nZWRCeVVzZXJEZXNjXG5cdCAqIEByZXR1cm5zIFRleHQgdG8gZGlzcGxheVxuXHQgKi9cblx0c3RhdGljIGZvcm1hdERyYWZ0T3duZXJUZXh0SW5Qb3BvdmVyKFxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW52YWxpZC12b2lkLXR5cGVcblx0XHR0aGlzOiB2b2lkLFxuXHRcdGhhc0RyYWZ0RW50aXR5OiBib29sZWFuLFxuXHRcdGRyYWZ0SW5Qcm9jZXNzQnlVc2VyOiBzdHJpbmcsXG5cdFx0ZHJhZnRMYXN0Q2hhbmdlZEJ5VXNlcjogc3RyaW5nLFxuXHRcdGRyYWZ0SW5Qcm9jZXNzQnlVc2VyRGVzYzogc3RyaW5nLFxuXHRcdGRyYWZ0TGFzdENoYW5nZWRCeVVzZXJEZXNjOiBzdHJpbmdcblx0KTogc3RyaW5nIHtcblx0XHRjb25zdCBtYWNyb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5tYWNyb3NcIik7XG5cdFx0aWYgKCFtYWNyb1Jlc291cmNlQnVuZGxlKSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdFx0aWYgKGhhc0RyYWZ0RW50aXR5KSB7XG5cdFx0XHRjb25zdCB1c2VyRGVzY3JpcHRpb24gPVxuXHRcdFx0XHRkcmFmdEluUHJvY2Vzc0J5VXNlckRlc2MgfHwgZHJhZnRJblByb2Nlc3NCeVVzZXIgfHwgZHJhZnRMYXN0Q2hhbmdlZEJ5VXNlckRlc2MgfHwgZHJhZnRMYXN0Q2hhbmdlZEJ5VXNlcjtcblxuXHRcdFx0aWYgKCF1c2VyRGVzY3JpcHRpb24pIHtcblx0XHRcdFx0cmV0dXJuIG1hY3JvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRklFTERfUlVOVElNRV9EUkFGVF9QT1BPVkVSX1VOU0FWRURfQ0hBTkdFU19CWV9VTktOT1dOXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGRyYWZ0SW5Qcm9jZXNzQnlVc2VyXG5cdFx0XHRcdFx0PyBtYWNyb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0ZJRUxEX1JVTlRJTUVfRFJBRlRfUE9QT1ZFUl9MT0NLRURfQllfS05PV05cIiwgW3VzZXJEZXNjcmlwdGlvbl0pXG5cdFx0XHRcdFx0OiBtYWNyb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0ZJRUxEX1JVTlRJTUVfRFJBRlRfUE9QT1ZFUl9VTlNBVkVEX0NIQU5HRVNfQllfS05PV05cIiwgW3VzZXJEZXNjcmlwdGlvbl0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gbWFjcm9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9GSUVMRF9SVU5USU1FX0RSQUZUX1BPUE9WRVJfTk9fREFUQV9URVhUXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKipcblx0ICogR2V0cyB0aGUgcHJvcGVydGllcyBvZiB0aGUgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEgZW50aXR5IGNvbm5lY3RlZCB0byB0aGUgZ2l2ZW4gZW50aXR5IHNldFxuXHQgKlxuXHQgKiBAcmV0dXJucyBMaXN0IG9mIHByb3BlcnR5IG5hbWVzXG5cdCAqL1xuXHRnZXREcmFmdEFkbWluaXN0cmF0aXZlRGF0YVByb3BlcnRpZXMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1ldGFEYXRhOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PiB8IHVuZGVmaW5lZCA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCh0aGlzLmNvbnRleHRQYXRoKTtcblx0XHRjb25zdCBkcmFmdEFkbWluRWxlbWVudCA9IG1ldGFEYXRhPy50YXJnZXRFbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmQoKGEpID0+IGEubmFtZSA9PT0gXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiKTtcblx0XHRjb25zdCBkcmFmdEFkbWluUHJvcGVydGllcyA9IGRyYWZ0QWRtaW5FbGVtZW50Py50YXJnZXRUeXBlLmVudGl0eVByb3BlcnRpZXM7XG5cdFx0cmV0dXJuIGRyYWZ0QWRtaW5Qcm9wZXJ0aWVzPy5tYXAoKG9EcmFmdEFkbWluUHJvcGVydHkpID0+IG9EcmFmdEFkbWluUHJvcGVydHkubmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29uc3RydWN0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdGV4dCBkaXNwbGF5ZWQgYXMgdGl0bGUgb2YgdGhlIHBvcHVwLlxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG5cdCAqL1xuXHRnZXRQb3BvdmVyVGl0bGVCaW5kaW5nRXhwcmVzc2lvbigpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4ge1xuXHRcdHJldHVybiBpZkVsc2UoXG5cdFx0XHRub3QoRW50aXR5LklzQWN0aXZlKSxcblx0XHRcdHRoaXMuaXNIaWRkZW5EcmFmdEVuYWJsZWRcblx0XHRcdFx0PyBwYXRoSW5Nb2RlbChcIk1fRFJBRlRfUE9QT1ZFUl9BRE1JTl9VTlNBVkVEX09CSkVDVFwiLCBcInNhcC5mZS5pMThuXCIpXG5cdFx0XHRcdDogcGF0aEluTW9kZWwoXCJNX0NPTU1PTl9EUkFGVF9PQkpFQ1RcIiwgXCJzYXAuZmUuaTE4blwiKSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0RW50aXR5Lkhhc0RyYWZ0LFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0bm90KGlzRW1wdHkocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9JblByb2Nlc3NCeVVzZXJcIikpKSxcblx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcIk1fQ09NTU9OX0RSQUZUX0xPQ0tFRF9PQkpFQ1RcIiwgXCJzYXAuZmUuaTE4blwiKSxcblx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcIk1fRFJBRlRfUE9QT1ZFUl9BRE1JTl9VTlNBVkVEX09CSkVDVFwiLCBcInNhcC5mZS5pMThuXCIpXG5cdFx0XHRcdCksXG5cdFx0XHRcdHRoaXMuZHJhZnRJbmRpY2F0b3JUeXBlID09PSBPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25BbmRUZXh0XG5cdFx0XHRcdFx0PyBcIiBcIlxuXHRcdFx0XHRcdDogcGF0aEluTW9kZWwoXCJDX0RSQUZUX1BPUE9WRVJfQURNSU5fREFUQV9EUkFGVElORk9fRkxBR0dFRF9PQkpFQ1RcIiwgXCJzYXAuZmUuaTE4blwiKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29uc3RydWN0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdGV4dCBkaXNwbGF5ZWQgdG8gaWRlbnRpZnkgdGhlIGRyYWZ0IG93bmVyIGluIHRoZSBwb3B1cC5cblx0ICogVGhpcyBiaW5kaW5nIGlzIGNvbmZpZ3VyZWQgdG8gY2FsbCBmb3JtYXREcmFmdE93bmVyVGV4dEluUG9wb3ZlciBhdCBydW50aW1lLlxuXHQgKlxuXHQgKiBXZSBjYW5ub3QgcmVmZXJlbmNlIGZvcm1hdERyYWZ0T3duZXJUZXh0SW5Qb3BvdmVyIGRpcmVjdGx5IGFzIHdlIG5lZWQgdG8gY29uZGl0aW9uYWxseSBwYXNzIHByb3BlcnRpZXMgdGhhdCBtaWdodCBleGlzdCBvciBub3QsXG5cdCAqIGFuZCByZWZlcnJpbmcgdG8gbm9uLWV4aXN0aW5nIHByb3BlcnRpZXMgZmFpbHMgdGhlIGJpbmRpbmcuXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25cblx0ICovXG5cdGdldERyYWZ0T3duZXJUZXh0QmluZGluZ0V4cHJlc3Npb24oKToge1xuXHRcdHBhcnRzOiB1bmtub3duW107XG5cdFx0Zm9ybWF0dGVyOiAoXG5cdFx0XHRoYXNEcmFmdEVudGl0eTogYm9vbGVhbixcblx0XHRcdGRyYWZ0SW5Qcm9jZXNzQnlVc2VyOiBzdHJpbmcsXG5cdFx0XHRkcmFmdExhc3RDaGFuZ2VkQnlVc2VyOiBzdHJpbmcsXG5cdFx0XHRkcmFmdEluUHJvY2Vzc0J5VXNlckRlc2M6IHN0cmluZyxcblx0XHRcdGRyYWZ0TGFzdENoYW5nZWRCeVVzZXJEZXNjOiBzdHJpbmdcblx0XHQpID0+IHN0cmluZztcblx0fSB7XG5cdFx0Y29uc3QgZHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFQcm9wZXJ0aWVzID0gdGhpcy5nZXREcmFmdEFkbWluaXN0cmF0aXZlRGF0YVByb3BlcnRpZXMoKTtcblxuXHRcdGNvbnN0IHBhcnRzID0gW1xuXHRcdFx0eyBwYXRoOiBcIkhhc0RyYWZ0RW50aXR5XCIsIHRhcmdldFR5cGU6IFwiYW55XCIgfSxcblx0XHRcdHsgcGF0aDogXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9JblByb2Nlc3NCeVVzZXJcIiB9LFxuXHRcdFx0eyBwYXRoOiBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VkQnlVc2VyXCIgfVxuXHRcdF07XG5cdFx0aWYgKGRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhUHJvcGVydGllcz8uaW5jbHVkZXMoXCJJblByb2Nlc3NCeVVzZXJEZXNjcmlwdGlvblwiKSkge1xuXHRcdFx0cGFydHMucHVzaCh7IHBhdGg6IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvSW5Qcm9jZXNzQnlVc2VyRGVzY3JpcHRpb25cIiB9KTtcblx0XHR9XG5cdFx0aWYgKGRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhUHJvcGVydGllcz8uaW5jbHVkZXMoXCJMYXN0Q2hhbmdlZEJ5VXNlckRlc2NyaXB0aW9uXCIpKSB7XG5cdFx0XHRwYXJ0cy5wdXNoKHsgcGF0aDogXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlZEJ5VXNlckRlc2NyaXB0aW9uXCIgfSk7XG5cdFx0fVxuXG5cdFx0Ly9wYXJ0cy5wdXNoKHtwYXRoOiBcInNhcC5mZS5pMThuPlwifSlcblxuXHRcdHJldHVybiB7IHBhcnRzLCBmb3JtYXR0ZXI6IERyYWZ0SW5kaWNhdG9yLmZvcm1hdERyYWZ0T3duZXJUZXh0SW5Qb3BvdmVyIH07XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIHBvcG92ZXIgY29udHJvbCB0byBkaXNwbGF5IGRyYWZ0IGluZm9ybWF0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbCBDb250cm9sIHRoYXQgdGhlIHBvcG92ZXIgaXMgdG8gYmUgY3JlYXRlZCBmb3Jcblx0ICogQHJldHVybnMgVGhlIGNyZWF0ZWQgcG9wb3ZlciBjb250cm9sXG5cdCAqL1xuXHRjcmVhdGVQb3BvdmVyKGNvbnRyb2w6IENvbnRyb2wpOiBQb3BvdmVyIHtcblx0XHRjb25zdCBpc0RyYWZ0V2l0aE5vQ2hhbmdlc0JpbmRpbmcgPSBhbmQobm90KEVudGl0eS5Jc0FjdGl2ZSksIGlzRW1wdHkocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIikpKTtcblx0XHRjb25zdCBkcmFmdFdpdGhOb0NoYW5nZXNUZXh0QmluZGluZyA9XG5cdFx0XHR0aGlzLmRyYWZ0SW5kaWNhdG9yVHlwZSA9PT0gT2JqZWN0TWFya2VyVmlzaWJpbGl0eS5JY29uQW5kVGV4dFxuXHRcdFx0XHQ/IHBhdGhJbk1vZGVsKFwiTV9EUkFGVF9QT1BPVkVSX0FETUlOX0dFTkVSSUNfTE9DS0VEX09CSkVDVF9QT1BPVkVSX1RFWFRcIiwgXCJzYXAuZmUuaTE4blwiKVxuXHRcdFx0XHQ6IHBhdGhJbk1vZGVsKFwiQ19EUkFGVF9QT1BPVkVSX0FETUlOX0RBVEFfRFJBRlRJTkZPX1BPUE9WRVJfTk9fREFUQV9URVhUXCIsIFwic2FwLmZlLmkxOG5cIik7XG5cblx0XHRjb25zdCBpc0RyYWZ0V2l0aENoYW5nZXNCaW5kaW5nID0gYW5kKFxuXHRcdFx0bm90KEVudGl0eS5Jc0FjdGl2ZSksXG5cdFx0XHRub3QoaXNFbXB0eShwYXRoSW5Nb2RlbChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VEYXRlVGltZVwiKSkpXG5cdFx0KTtcblx0XHRjb25zdCBkcmFmdFdpdGhDaGFuZ2VzVGV4dEJpbmRpbmcgPSB7XG5cdFx0XHRwYXJ0czogW1xuXHRcdFx0XHR7IHBhdGg6IFwiTV9EUkFGVF9QT1BPVkVSX0FETUlOX0xBU1RfQ0hBTkdFX1RFWFRcIiwgbW9kZWw6IFwic2FwLmZlLmkxOG5cIiB9LFxuXHRcdFx0XHR7IHBhdGg6IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZURhdGVUaW1lXCIgfVxuXHRcdFx0XSxcblx0XHRcdGZvcm1hdHRlcjogZm9ybWF0TWVzc2FnZVxuXHRcdH07XG5cblx0XHRjb25zdCBpc0FjdGl2ZUluc3RhbmNlQmluZGluZyA9IGFuZChFbnRpdHkuSXNBY3RpdmUsIG5vdChpc0VtcHR5KHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZURhdGVUaW1lXCIpKSkpO1xuXHRcdGNvbnN0IGFjdGl2ZUluc3RhbmNlVGV4dEJpbmRpbmcgPSB7IC4uLmRyYWZ0V2l0aENoYW5nZXNUZXh0QmluZGluZyB9O1xuXG5cdFx0Y29uc3QgcG9wb3ZlcjogUG9wb3ZlciA9IChcblx0XHRcdDxQb3BvdmVyXG5cdFx0XHRcdHRpdGxlPXt0aGlzLmdldFBvcG92ZXJUaXRsZUJpbmRpbmdFeHByZXNzaW9uKCl9XG5cdFx0XHRcdHNob3dIZWFkZXI9e3RydWV9XG5cdFx0XHRcdHZlcnRpY2FsU2Nyb2xsaW5nPXtmYWxzZX1cblx0XHRcdFx0Y2xhc3M9e1wic2FwVWlDb250ZW50UGFkZGluZ1wifVxuXHRcdFx0XHRwbGFjZW1lbnQ9e1wiQXV0b1wifVxuXHRcdFx0XHRlbmRCdXR0b249e1xuXHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL2RlY2xpbmVcIn1cblx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRyYWZ0UG9wb3Zlcj8uY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSBhcyBCdXR0b25cblx0XHRcdFx0fVxuXHRcdFx0PlxuXHRcdFx0XHQ8VkJveCBjbGFzcz17XCJzYXBVaUNvbnRlbnRQYWRkaW5nXCJ9PlxuXHRcdFx0XHRcdDxWQm94IHZpc2libGU9e2lzRHJhZnRXaXRoTm9DaGFuZ2VzQmluZGluZ30+XG5cdFx0XHRcdFx0XHQ8VGV4dCB0ZXh0PXtkcmFmdFdpdGhOb0NoYW5nZXNUZXh0QmluZGluZ30gLz5cblx0XHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHRcdFx0PFZCb3ggdmlzaWJsZT17aXNEcmFmdFdpdGhDaGFuZ2VzQmluZGluZ30+XG5cdFx0XHRcdFx0XHQ8VGV4dCB0ZXh0PXtkcmFmdFdpdGhDaGFuZ2VzVGV4dEJpbmRpbmd9IC8+XG5cdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHRcdDxWQm94IHZpc2libGU9e2lzQWN0aXZlSW5zdGFuY2VCaW5kaW5nfT5cblx0XHRcdFx0XHRcdDxUZXh0IHRleHQ9e3RoaXMuZ2V0RHJhZnRPd25lclRleHRCaW5kaW5nRXhwcmVzc2lvbigpfSAvPlxuXHRcdFx0XHRcdFx0PFRleHQgY2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpblRvcFwifSB0ZXh0PXthY3RpdmVJbnN0YW5jZVRleHRCaW5kaW5nfSAvPlxuXHRcdFx0XHRcdDwvVkJveD5cblx0XHRcdFx0PC9WQm94PlxuXHRcdFx0PC9Qb3BvdmVyPlxuXHRcdCkgYXMgUG9wb3ZlcjtcblxuXHRcdENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoY29udHJvbCkuYWRkRGVwZW5kZW50KHBvcG92ZXIpO1xuXHRcdHJldHVybiBwb3BvdmVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgcHJlc3Npbmcgb2YgdGhlIG9iamVjdCBtYXJrZXIgYnkgb3BlbmluZyBhIGNvcnJlc3BvbmRpbmcgcG9wb3Zlci5cblx0ICogQHBhcmFtIGV2ZW50IEV2ZW50IG9iamVjdCBwYXNzZWQgZnJvbSB0aGUgcHJlc3MgZXZlbnRcblx0ICovXG5cdG9uT2JqZWN0TWFya2VyUHJlc3NlZChldmVudDogT2JqZWN0TWFya2VyJFByZXNzRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBzb3VyY2UgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXG5cdFx0dGhpcy5kcmFmdFBvcG92ZXIgPz89IHRoaXMuY3JlYXRlUG9wb3Zlcihzb3VyY2UpO1xuXG5cdFx0dGhpcy5kcmFmdFBvcG92ZXIuc2V0QmluZGluZ0NvbnRleHQoYmluZGluZ0NvbnRleHQpO1xuXHRcdHRoaXMuZHJhZnRQb3BvdmVyLm9wZW5CeShzb3VyY2UsIGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBcImFkZGl0aW9uYWxJbmZvXCIgYXR0cmlidXRlIGluIHRoZSBcIkljb25BbmRUZXh0XCIgY2FzZS5cblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuXHQgKi9cblx0Z2V0SWNvbkFuZFRleHRBZGRpdGlvbmFsSW5mb0JpbmRpbmdFeHByZXNzaW9uKCk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0XHRjb25zdCBkcmFmdEFkbWluaXN0cmF0aXZlRGF0YVByb3BlcnRpZXMgPSB0aGlzLmdldERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhUHJvcGVydGllcygpO1xuXG5cdFx0Y29uc3Qgb3JCaW5kaW5ncyA9IFtdO1xuXHRcdGlmIChkcmFmdEFkbWluaXN0cmF0aXZlRGF0YVByb3BlcnRpZXM/LmluY2x1ZGVzKFwiSW5Qcm9jZXNzQnlVc2VyRGVzY3JpcHRpb25cIikpIHtcblx0XHRcdG9yQmluZGluZ3MucHVzaChwYXRoSW5Nb2RlbChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0luUHJvY2Vzc0J5VXNlckRlc2NyaXB0aW9uXCIpKTtcblx0XHR9XG5cdFx0b3JCaW5kaW5ncy5wdXNoKHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvSW5Qcm9jZXNzQnlVc2VyXCIpKTtcblx0XHRpZiAoZHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFQcm9wZXJ0aWVzPy5pbmNsdWRlcyhcIkxhc3RDaGFuZ2VkQnlVc2VyRGVzY3JpcHRpb25cIikpIHtcblx0XHRcdG9yQmluZGluZ3MucHVzaChwYXRoSW5Nb2RlbChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VkQnlVc2VyRGVzY3JpcHRpb25cIikpO1xuXHRcdH1cblx0XHRvckJpbmRpbmdzLnB1c2gocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlZEJ5VXNlclwiKSk7XG5cblx0XHRyZXR1cm4gaWZFbHNlPHN0cmluZz4oRW50aXR5Lkhhc0RyYWZ0LCBvciguLi5vckJpbmRpbmdzKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiwgXCJcIik7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGlzIGJ1aWxkaW5nIGJsb2NrIGZvciB0aGUgXCJJY29uQW5kVGV4dFwiIHR5cGUuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250cm9sIHRyZWVcblx0ICovXG5cdGdldEljb25BbmRUZXh0Q29udGVudCgpOiBPYmplY3RNYXJrZXIge1xuXHRcdHRoaXMuaXNIaWRkZW5EcmFmdEVuYWJsZWQgPSAodGhpcy5nZXRBcHBDb21wb25lbnQoKT8uZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdD8uZW5hYmxlZDtcblx0XHRjb25zdCBvYmpNYXJrZXJUeXBlID0gdGhpcy5pc0hpZGRlbkRyYWZ0RW5hYmxlZCA/IE9iamVjdE1hcmtlclR5cGUuVW5zYXZlZCA6IE9iamVjdE1hcmtlclR5cGUuRHJhZnQ7XG5cdFx0Y29uc3QgdHlwZSA9IGlmRWxzZShcblx0XHRcdG5vdChFbnRpdHkuSXNBY3RpdmUpLFxuXHRcdFx0b2JqTWFya2VyVHlwZSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0RW50aXR5Lkhhc0RyYWZ0LFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0cGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9JblByb2Nlc3NCeVVzZXJcIiksXG5cdFx0XHRcdFx0T2JqZWN0TWFya2VyVHlwZS5Mb2NrZWRCeSxcblx0XHRcdFx0XHRpZkVsc2UocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlZEJ5VXNlclwiKSwgT2JqZWN0TWFya2VyVHlwZS5VbnNhdmVkQnksIE9iamVjdE1hcmtlclR5cGUuVW5zYXZlZClcblx0XHRcdFx0KSxcblx0XHRcdFx0T2JqZWN0TWFya2VyVHlwZS5GbGFnZ2VkXG5cdFx0XHQpXG5cdFx0KTtcblxuXHRcdGNvbnN0IHZpc2liaWxpdHkgPSBpZkVsc2Uobm90KEVudGl0eS5IYXNEcmFmdCksIE9iamVjdE1hcmtlclZpc2liaWxpdHkuVGV4dE9ubHksIE9iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbkFuZFRleHQpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxPYmplY3RNYXJrZXJcblx0XHRcdFx0dHlwZT17dHlwZX1cblx0XHRcdFx0cHJlc3M9e3RoaXMub25PYmplY3RNYXJrZXJQcmVzc2VkLmJpbmQodGhpcyl9XG5cdFx0XHRcdHZpc2liaWxpdHk9e3Zpc2liaWxpdHl9XG5cdFx0XHRcdGFkZGl0aW9uYWxJbmZvPXt0aGlzLmdldEljb25BbmRUZXh0QWRkaXRpb25hbEluZm9CaW5kaW5nRXhwcmVzc2lvbigpfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17dGhpcy5hcmlhTGFiZWxsZWRCeSA/IHRoaXMuYXJpYUxhYmVsbGVkQnkgOiBbXX1cblx0XHRcdFx0Y2xhc3M9e3RoaXMuY2xhc3N9XG5cdFx0XHRcdHJlYWN0aXZlQXJlYU1vZGU9e3RoaXMucmVhY3RpdmVBcmVhTW9kZX1cblx0XHRcdC8+XG5cdFx0KSBhcyBPYmplY3RNYXJrZXI7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGlzIGJ1aWxkaW5nIGJsb2NrIGZvciB0aGUgXCJJY29uT25seVwiIHR5cGUuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250cm9sIHRyZWVcblx0ICovXG5cdGdldEljb25Pbmx5Q29udGVudCgpOiBPYmplY3RNYXJrZXIge1xuXHRcdGNvbnN0IHR5cGUgPSBpZkVsc2UoXG5cdFx0XHRub3QoRW50aXR5LklzQWN0aXZlKSxcblx0XHRcdE9iamVjdE1hcmtlclR5cGUuRHJhZnQsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdEVudGl0eS5IYXNEcmFmdCxcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdCEhdGhpcy51c2VkSW5BbmFseXRpY2FsVGFibGUsXG5cdFx0XHRcdFx0T2JqZWN0TWFya2VyVHlwZS5Mb2NrZWQsXG5cdFx0XHRcdFx0aWZFbHNlKHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvSW5Qcm9jZXNzQnlVc2VyXCIpLCBPYmplY3RNYXJrZXJUeXBlLkxvY2tlZCwgT2JqZWN0TWFya2VyVHlwZS5VbnNhdmVkKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRPYmplY3RNYXJrZXJUeXBlLkZsYWdnZWRcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0bGV0IHZpc2libGU7XG5cdFx0aWYgKHRoaXMudXNlZEluVGFibGUgPT09IHRydWUpIHtcblx0XHRcdHZpc2libGUgPSBvcihub3QoRW50aXR5LklzQWN0aXZlKSwgYW5kKEVudGl0eS5Jc0FjdGl2ZSwgRW50aXR5Lkhhc0RyYWZ0KSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIElmIEVudGl0eS5IYXNEcmFmdCBpcyBlbXB0eSwgdGhlcmUgaXMgbm8gY29udGV4dCBhdCBhbGwsIHNvIGRvbid0IHNob3cgdGhlIGluZGljYXRvclxuXHRcdFx0dmlzaWJsZSA9IGFuZChcblx0XHRcdFx0bm90KGlzRW1wdHkoRW50aXR5Lkhhc0RyYWZ0KSksXG5cdFx0XHRcdG5vdChVSS5Jc0VkaXRhYmxlKSxcblx0XHRcdFx0RW50aXR5Lkhhc0RyYWZ0LFxuXHRcdFx0XHRub3QocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdElzQ3JlYXRlZEJ5TWVcIikpXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8T2JqZWN0TWFya2VyXG5cdFx0XHRcdHR5cGU9e3R5cGV9XG5cdFx0XHRcdHByZXNzPXshdGhpcy51c2VkSW5BbmFseXRpY2FsVGFibGUgPyB0aGlzLm9uT2JqZWN0TWFya2VyUHJlc3NlZC5iaW5kKHRoaXMpIDogdW5kZWZpbmVkfVxuXHRcdFx0XHR2aXNpYmlsaXR5PXtPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25Pbmx5fVxuXHRcdFx0XHR2aXNpYmxlPXt2aXNpYmxlfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17dGhpcy5hcmlhTGFiZWxsZWRCeSA/IHRoaXMuYXJpYUxhYmVsbGVkQnkgOiBbXX1cblx0XHRcdFx0Y2xhc3M9e3RoaXMuY2xhc3N9XG5cdFx0XHRcdHJlYWN0aXZlQXJlYU1vZGU9e3RoaXMucmVhY3RpdmVBcmVhTW9kZX1cblx0XHRcdC8+XG5cdFx0KSBhcyBPYmplY3RNYXJrZXI7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGlzIGJ1aWxkaW5nIGJsb2NrLlxuXHQgKiBAcmV0dXJucyBUaGUgY29udHJvbCB0cmVlXG5cdCAqL1xuXHRjcmVhdGVDb250ZW50KCk6IE9iamVjdE1hcmtlciB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuZHJhZnRJbmRpY2F0b3JUeXBlID09PSBPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25BbmRUZXh0KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRJY29uQW5kVGV4dENvbnRlbnQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0SWNvbk9ubHlDb250ZW50KCk7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFWQSxJQVlxQkEsY0FBYyxJQUFBQyxJQUFBLEdBRGxDQyxjQUFjLENBQUMsNkNBQTZDLENBQUMsRUFBQUMsS0FBQSxHQUs1REMsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR0RGLFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUU7RUFDUCxDQUFDLENBQUMsRUFBQUUsS0FBQSxHQUdESCxRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFLFFBQVE7SUFDZEcsUUFBUSxFQUFFO0VBQ1gsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHREwsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBSyxLQUFBLEdBR0ROLFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUU7RUFDUCxDQUFDLENBQUMsRUFBQU0sS0FBQSxHQUdEUCxRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUFPLEtBQUEsR0FHRFIsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxRQUFRO0lBQUVRLGFBQWEsRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTO0VB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
|
|
371
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcmFmdEluZGljYXRvciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwicHJvcGVydHkiLCJ0eXBlIiwiX2RlYzMiLCJfZGVjNCIsInJlcXVpcmVkIiwiX2RlYzUiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJhbGxvd2VkVmFsdWVzIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CdWlsZGluZ0Jsb2NrIiwicHJvcGVydGllcyIsIm90aGVycyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0RHJhZnRJbmRpY2F0b3JUeXBlIiwiaW5kaWNhdG9yIiwiT2JqZWN0TWFya2VyVmlzaWJpbGl0eSIsIkljb25Pbmx5IiwiSWNvbkFuZFRleHQiLCJpbmNsdWRlcyIsInNldFByb3BlcnR5IiwiRXJyb3IiLCJhZGRBcmlhTGFiZWxsZWRCeUZvckRyYWZ0SW5kaWNhdG9yIiwiZWxlbWVudCIsImFyaWFMYWJlbGxlZEJ5cyIsImNvbnRlbnQiLCJnZXRBcmlhTGFiZWxsZWRCeSIsImFkZEFyaWFMYWJlbGxlZEJ5Iiwib25NZXRhZGF0YUF2YWlsYWJsZSIsImNyZWF0ZUNvbnRlbnQiLCJmb3JtYXREcmFmdE93bmVyVGV4dEluUG9wb3ZlciIsImhhc0RyYWZ0RW50aXR5IiwiZHJhZnRJblByb2Nlc3NCeVVzZXIiLCJkcmFmdExhc3RDaGFuZ2VkQnlVc2VyIiwiZHJhZnRJblByb2Nlc3NCeVVzZXJEZXNjIiwiZHJhZnRMYXN0Q2hhbmdlZEJ5VXNlckRlc2MiLCJtYWNyb1Jlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwidXNlckRlc2NyaXB0aW9uIiwiZ2V0VGV4dCIsImdldERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhUHJvcGVydGllcyIsIm1ldGFEYXRhIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImNvbnRleHRQYXRoIiwiZHJhZnRBZG1pbkVsZW1lbnQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJmaW5kIiwiYSIsIm5hbWUiLCJkcmFmdEFkbWluUHJvcGVydGllcyIsInRhcmdldFR5cGUiLCJlbnRpdHlQcm9wZXJ0aWVzIiwibWFwIiwib0RyYWZ0QWRtaW5Qcm9wZXJ0eSIsImdldFBvcG92ZXJUaXRsZUJpbmRpbmdFeHByZXNzaW9uIiwiaWZFbHNlIiwibm90IiwiRW50aXR5IiwiSXNBY3RpdmUiLCJpc0hpZGRlbkRyYWZ0RW5hYmxlZCIsInBhdGhJbk1vZGVsIiwiSGFzRHJhZnQiLCJpc0VtcHR5IiwiZHJhZnRJbmRpY2F0b3JUeXBlIiwiZ2V0RHJhZnRPd25lclRleHRCaW5kaW5nRXhwcmVzc2lvbiIsImRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhUHJvcGVydGllcyIsInBhcnRzIiwicGF0aCIsInB1c2giLCJmb3JtYXR0ZXIiLCJjcmVhdGVQb3BvdmVyIiwiY29udHJvbCIsImlzRHJhZnRXaXRoTm9DaGFuZ2VzQmluZGluZyIsImFuZCIsImRyYWZ0V2l0aE5vQ2hhbmdlc1RleHRCaW5kaW5nIiwiaXNEcmFmdFdpdGhDaGFuZ2VzQmluZGluZyIsImRyYWZ0V2l0aENoYW5nZXNUZXh0QmluZGluZyIsIm1vZGVsIiwiZm9ybWF0TWVzc2FnZSIsImlzQWN0aXZlSW5zdGFuY2VCaW5kaW5nIiwiYWN0aXZlSW5zdGFuY2VUZXh0QmluZGluZyIsInBvcG92ZXIiLCJfanN4IiwiUG9wb3ZlciIsInRpdGxlIiwic2hvd0hlYWRlciIsInZlcnRpY2FsU2Nyb2xsaW5nIiwiY2xhc3MiLCJwbGFjZW1lbnQiLCJlbmRCdXR0b24iLCJCdXR0b24iLCJpY29uIiwicHJlc3MiLCJkcmFmdFBvcG92ZXIiLCJjbG9zZSIsImNoaWxkcmVuIiwiX2pzeHMiLCJWQm94IiwidmlzaWJsZSIsIlRleHQiLCJ0ZXh0IiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3IiwiYWRkRGVwZW5kZW50Iiwib25PYmplY3RNYXJrZXJQcmVzc2VkIiwiZXZlbnQiLCJzb3VyY2UiLCJnZXRTb3VyY2UiLCJiaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic2V0QmluZGluZ0NvbnRleHQiLCJvcGVuQnkiLCJnZXRJY29uQW5kVGV4dEFkZGl0aW9uYWxJbmZvQmluZGluZ0V4cHJlc3Npb24iLCJvckJpbmRpbmdzIiwib3IiLCJnZXRJY29uQW5kVGV4dENvbnRlbnQiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsIm9iak1hcmtlclR5cGUiLCJPYmplY3RNYXJrZXJUeXBlIiwiVW5zYXZlZCIsIkRyYWZ0IiwiTG9ja2VkQnkiLCJVbnNhdmVkQnkiLCJGbGFnZ2VkIiwidmlzaWJpbGl0eSIsIlRleHRPbmx5IiwiT2JqZWN0TWFya2VyIiwiYmluZCIsImFkZGl0aW9uYWxJbmZvIiwiYXJpYUxhYmVsbGVkQnkiLCJyZWFjdGl2ZUFyZWFNb2RlIiwiZ2V0SWNvbk9ubHlDb250ZW50IiwidXNlZEluQW5hbHl0aWNhbFRhYmxlIiwiTG9ja2VkIiwidXNlZEluVGFibGUiLCJVSSIsIklzRWRpdGFibGUiLCJ1bmRlZmluZWQiLCJCdWlsZGluZ0Jsb2NrIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJEcmFmdEluZGljYXRvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IGZvcm1hdE1lc3NhZ2UgZnJvbSBcInNhcC9iYXNlL3N0cmluZ3MvZm9ybWF0TWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIFByaW1pdGl2ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFuZCwgaWZFbHNlLCBpc0VtcHR5LCBub3QsIG9yLCBwYXRoSW5Nb2RlbCB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgcHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IHR5cGUgeyBIaWRkZW5EcmFmdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEVudGl0eSwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIHsgT2JqZWN0TWFya2VyJFByZXNzRXZlbnQgfSBmcm9tIFwic2FwL20vT2JqZWN0TWFya2VyXCI7XG5pbXBvcnQgT2JqZWN0TWFya2VyIGZyb20gXCJzYXAvbS9PYmplY3RNYXJrZXJcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB7IE9iamVjdE1hcmtlclR5cGUsIE9iamVjdE1hcmtlclZpc2liaWxpdHkgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuXG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhIERyYWZ0SW5kaWNhdG9yIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBwcm92aWRlZCBieSBPRGF0YSBWNC5cbiAqXG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNyb3M6RHJhZnRJbmRpY2F0b3JcbiAqIGlkPVwiU29tZUlEXCJcbiAqIC8mZ3Q7XG4gKiA8L3ByZT5cbiAqIEBwcml2YXRlXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuZHJhZnRJbmRpY2F0b3IuRHJhZnRJbmRpY2F0b3JcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyYWZ0SW5kaWNhdG9yIGV4dGVuZHMgQnVpbGRpbmdCbG9jazxDb250cm9sPiB7XG5cdC8qKlxuXHQgKiBJRCBvZiB0aGUgRHJhZnRJbmRpY2F0b3Jcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRwdWJsaWMgaWQ/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdHB1YmxpYyBkcmFmdEluZGljYXRvclR5cGU/OiBPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25Pbmx5IHwgT2JqZWN0TWFya2VyVmlzaWJpbGl0eS5JY29uQW5kVGV4dCA9IE9iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbkFuZFRleHQ7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdHJlcXVpcmVkOiB0cnVlXG5cdH0pXG5cdGNvbnRleHRQYXRoITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRwdWJsaWMgY2xhc3MgPSBcIlwiO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0cHVibGljIHVzZWRJblRhYmxlPzogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdHB1YmxpYyB1c2VkSW5BbmFseXRpY2FsVGFibGU/OiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIsIGFsbG93ZWRWYWx1ZXM6IFtcIklubGluZVwiLCBcIk92ZXJsYXlcIl0gfSlcblx0cmVhY3RpdmVBcmVhTW9kZT86IFwiSW5saW5lXCIgfCBcIk92ZXJsYXlcIjtcblxuXHRkcmFmdFBvcG92ZXI/OiBQb3BvdmVyO1xuXG5cdHByaXZhdGUgaXNIaWRkZW5EcmFmdEVuYWJsZWQ/OiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6ICRDb250cm9sU2V0dGluZ3MgJiBQcm9wZXJ0aWVzT2Y8RHJhZnRJbmRpY2F0b3I+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcywgb3RoZXJzKTtcblx0fVxuXG5cdHNldERyYWZ0SW5kaWNhdG9yVHlwZShcblx0XHRpbmRpY2F0b3I6IE9iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbk9ubHkgfCBPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25BbmRUZXh0IHwgT2JqZWN0TWFya2VyVmlzaWJpbGl0eS5UZXh0T25seVxuXHQpOiB2b2lkIHtcblx0XHRpZiAoW09iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbk9ubHksIE9iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbkFuZFRleHRdLmluY2x1ZGVzKGluZGljYXRvcikpIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJkcmFmdEluZGljYXRvclR5cGVcIiwgaW5kaWNhdG9yKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBBbGxvd2VkIHZhbHVlICR7aW5kaWNhdG9yfSBkb2VzIG5vdCBtYXRjaGApO1xuXHRcdH1cblx0fVxuXG5cdGFkZEFyaWFMYWJlbGxlZEJ5Rm9yRHJhZnRJbmRpY2F0b3IoZWxlbWVudDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgYXJpYUxhYmVsbGVkQnlzID0gKHRoaXMuY29udGVudCBhcyB1bmtub3duIGFzIE9iamVjdE1hcmtlcik/LmdldEFyaWFMYWJlbGxlZEJ5KCkgPz8gW107XG5cdFx0aWYgKCFhcmlhTGFiZWxsZWRCeXMuaW5jbHVkZXMoZWxlbWVudCkpIHtcblx0XHRcdCh0aGlzLmNvbnRlbnQgYXMgdW5rbm93biBhcyBPYmplY3RNYXJrZXIpPy5hZGRBcmlhTGFiZWxsZWRCeShlbGVtZW50KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgdGhlIG9uTWV0YWRhdGFBdmFpbGFibGUgZXZlbnQuXG5cdCAqL1xuXHRvbk1ldGFkYXRhQXZhaWxhYmxlKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUnVudGltZSBmb3JtYXR0ZXIgZnVuY3Rpb24gdG8gZm9ybWF0IHRoZSBjb3JyZWN0IHRleHQgdGhhdCBkaXNwbGF5cyB0aGUgb3duZXIgb2YgYSBkcmFmdC5cblx0ICpcblx0ICogVGhpcyBpcyB1c2VkIGluIGNhc2UgdGhlIERyYWZ0SW5kaWNhdG9yIGlzIHNob3duIGZvciBhbiBhY3RpdmUgZW50aXR5IHRoYXQgaGFzIGEgZHJhZnQgb2YgYW5vdGhlciB1c2VyLlxuXHQgKiBAcGFyYW0gaGFzRHJhZnRFbnRpdHlcblx0ICogQHBhcmFtIGRyYWZ0SW5Qcm9jZXNzQnlVc2VyXG5cdCAqIEBwYXJhbSBkcmFmdExhc3RDaGFuZ2VkQnlVc2VyXG5cdCAqIEBwYXJhbSBkcmFmdEluUHJvY2Vzc0J5VXNlckRlc2Ncblx0ICogQHBhcmFtIGRyYWZ0TGFzdENoYW5nZWRCeVVzZXJEZXNjXG5cdCAqIEByZXR1cm5zIFRleHQgdG8gZGlzcGxheVxuXHQgKi9cblx0c3RhdGljIGZvcm1hdERyYWZ0T3duZXJUZXh0SW5Qb3BvdmVyKFxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW52YWxpZC12b2lkLXR5cGVcblx0XHR0aGlzOiB2b2lkLFxuXHRcdGhhc0RyYWZ0RW50aXR5OiBib29sZWFuLFxuXHRcdGRyYWZ0SW5Qcm9jZXNzQnlVc2VyOiBzdHJpbmcsXG5cdFx0ZHJhZnRMYXN0Q2hhbmdlZEJ5VXNlcjogc3RyaW5nLFxuXHRcdGRyYWZ0SW5Qcm9jZXNzQnlVc2VyRGVzYzogc3RyaW5nLFxuXHRcdGRyYWZ0TGFzdENoYW5nZWRCeVVzZXJEZXNjOiBzdHJpbmdcblx0KTogc3RyaW5nIHtcblx0XHRjb25zdCBtYWNyb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5tYWNyb3NcIik7XG5cdFx0aWYgKCFtYWNyb1Jlc291cmNlQnVuZGxlKSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdFx0aWYgKGhhc0RyYWZ0RW50aXR5KSB7XG5cdFx0XHRjb25zdCB1c2VyRGVzY3JpcHRpb24gPVxuXHRcdFx0XHRkcmFmdEluUHJvY2Vzc0J5VXNlckRlc2MgfHwgZHJhZnRJblByb2Nlc3NCeVVzZXIgfHwgZHJhZnRMYXN0Q2hhbmdlZEJ5VXNlckRlc2MgfHwgZHJhZnRMYXN0Q2hhbmdlZEJ5VXNlcjtcblxuXHRcdFx0aWYgKCF1c2VyRGVzY3JpcHRpb24pIHtcblx0XHRcdFx0cmV0dXJuIG1hY3JvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRklFTERfUlVOVElNRV9EUkFGVF9QT1BPVkVSX1VOU0FWRURfQ0hBTkdFU19CWV9VTktOT1dOXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGRyYWZ0SW5Qcm9jZXNzQnlVc2VyXG5cdFx0XHRcdFx0PyBtYWNyb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0ZJRUxEX1JVTlRJTUVfRFJBRlRfUE9QT1ZFUl9MT0NLRURfQllfS05PV05cIiwgW3VzZXJEZXNjcmlwdGlvbl0pXG5cdFx0XHRcdFx0OiBtYWNyb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0ZJRUxEX1JVTlRJTUVfRFJBRlRfUE9QT1ZFUl9VTlNBVkVEX0NIQU5HRVNfQllfS05PV05cIiwgW3VzZXJEZXNjcmlwdGlvbl0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gbWFjcm9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9GSUVMRF9SVU5USU1FX0RSQUZUX1BPUE9WRVJfTk9fREFUQV9URVhUXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKipcblx0ICogR2V0cyB0aGUgcHJvcGVydGllcyBvZiB0aGUgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEgZW50aXR5IGNvbm5lY3RlZCB0byB0aGUgZ2l2ZW4gZW50aXR5IHNldFxuXHQgKlxuXHQgKiBAcmV0dXJucyBMaXN0IG9mIHByb3BlcnR5IG5hbWVzXG5cdCAqL1xuXHRnZXREcmFmdEFkbWluaXN0cmF0aXZlRGF0YVByb3BlcnRpZXMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1ldGFEYXRhOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PiB8IHVuZGVmaW5lZCA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCh0aGlzLmNvbnRleHRQYXRoKTtcblx0XHRjb25zdCBkcmFmdEFkbWluRWxlbWVudCA9IG1ldGFEYXRhPy50YXJnZXRFbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmQoKGEpID0+IGEubmFtZSA9PT0gXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiKTtcblx0XHRjb25zdCBkcmFmdEFkbWluUHJvcGVydGllcyA9IGRyYWZ0QWRtaW5FbGVtZW50Py50YXJnZXRUeXBlLmVudGl0eVByb3BlcnRpZXM7XG5cdFx0cmV0dXJuIGRyYWZ0QWRtaW5Qcm9wZXJ0aWVzPy5tYXAoKG9EcmFmdEFkbWluUHJvcGVydHkpID0+IG9EcmFmdEFkbWluUHJvcGVydHkubmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29uc3RydWN0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdGV4dCBkaXNwbGF5ZWQgYXMgdGl0bGUgb2YgdGhlIHBvcHVwLlxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG5cdCAqL1xuXHRnZXRQb3BvdmVyVGl0bGVCaW5kaW5nRXhwcmVzc2lvbigpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4ge1xuXHRcdHJldHVybiBpZkVsc2UoXG5cdFx0XHRub3QoRW50aXR5LklzQWN0aXZlKSxcblx0XHRcdHRoaXMuaXNIaWRkZW5EcmFmdEVuYWJsZWRcblx0XHRcdFx0PyBwYXRoSW5Nb2RlbChcIk1fRFJBRlRfUE9QT1ZFUl9BRE1JTl9VTlNBVkVEX09CSkVDVFwiLCBcInNhcC5mZS5pMThuXCIpXG5cdFx0XHRcdDogcGF0aEluTW9kZWwoXCJNX0NPTU1PTl9EUkFGVF9PQkpFQ1RcIiwgXCJzYXAuZmUuaTE4blwiKSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0RW50aXR5Lkhhc0RyYWZ0LFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0bm90KGlzRW1wdHkocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9JblByb2Nlc3NCeVVzZXJcIikpKSxcblx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcIk1fQ09NTU9OX0RSQUZUX0xPQ0tFRF9PQkpFQ1RcIiwgXCJzYXAuZmUuaTE4blwiKSxcblx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcIk1fRFJBRlRfUE9QT1ZFUl9BRE1JTl9VTlNBVkVEX09CSkVDVFwiLCBcInNhcC5mZS5pMThuXCIpXG5cdFx0XHRcdCksXG5cdFx0XHRcdHRoaXMuZHJhZnRJbmRpY2F0b3JUeXBlID09PSBPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25BbmRUZXh0XG5cdFx0XHRcdFx0PyBcIiBcIlxuXHRcdFx0XHRcdDogcGF0aEluTW9kZWwoXCJDX0RSQUZUX1BPUE9WRVJfQURNSU5fREFUQV9EUkFGVElORk9fRkxBR0dFRF9PQkpFQ1RcIiwgXCJzYXAuZmUuaTE4blwiKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29uc3RydWN0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdGV4dCBkaXNwbGF5ZWQgdG8gaWRlbnRpZnkgdGhlIGRyYWZ0IG93bmVyIGluIHRoZSBwb3B1cC5cblx0ICogVGhpcyBiaW5kaW5nIGlzIGNvbmZpZ3VyZWQgdG8gY2FsbCBmb3JtYXREcmFmdE93bmVyVGV4dEluUG9wb3ZlciBhdCBydW50aW1lLlxuXHQgKlxuXHQgKiBXZSBjYW5ub3QgcmVmZXJlbmNlIGZvcm1hdERyYWZ0T3duZXJUZXh0SW5Qb3BvdmVyIGRpcmVjdGx5IGFzIHdlIG5lZWQgdG8gY29uZGl0aW9uYWxseSBwYXNzIHByb3BlcnRpZXMgdGhhdCBtaWdodCBleGlzdCBvciBub3QsXG5cdCAqIGFuZCByZWZlcnJpbmcgdG8gbm9uLWV4aXN0aW5nIHByb3BlcnRpZXMgZmFpbHMgdGhlIGJpbmRpbmcuXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25cblx0ICovXG5cdGdldERyYWZ0T3duZXJUZXh0QmluZGluZ0V4cHJlc3Npb24oKToge1xuXHRcdHBhcnRzOiB1bmtub3duW107XG5cdFx0Zm9ybWF0dGVyOiAoXG5cdFx0XHRoYXNEcmFmdEVudGl0eTogYm9vbGVhbixcblx0XHRcdGRyYWZ0SW5Qcm9jZXNzQnlVc2VyOiBzdHJpbmcsXG5cdFx0XHRkcmFmdExhc3RDaGFuZ2VkQnlVc2VyOiBzdHJpbmcsXG5cdFx0XHRkcmFmdEluUHJvY2Vzc0J5VXNlckRlc2M6IHN0cmluZyxcblx0XHRcdGRyYWZ0TGFzdENoYW5nZWRCeVVzZXJEZXNjOiBzdHJpbmdcblx0XHQpID0+IHN0cmluZztcblx0fSB7XG5cdFx0Y29uc3QgZHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFQcm9wZXJ0aWVzID0gdGhpcy5nZXREcmFmdEFkbWluaXN0cmF0aXZlRGF0YVByb3BlcnRpZXMoKTtcblxuXHRcdGNvbnN0IHBhcnRzID0gW1xuXHRcdFx0eyBwYXRoOiBcIkhhc0RyYWZ0RW50aXR5XCIsIHRhcmdldFR5cGU6IFwiYW55XCIgfSxcblx0XHRcdHsgcGF0aDogXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9JblByb2Nlc3NCeVVzZXJcIiB9LFxuXHRcdFx0eyBwYXRoOiBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VkQnlVc2VyXCIgfVxuXHRcdF07XG5cdFx0aWYgKGRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhUHJvcGVydGllcz8uaW5jbHVkZXMoXCJJblByb2Nlc3NCeVVzZXJEZXNjcmlwdGlvblwiKSkge1xuXHRcdFx0cGFydHMucHVzaCh7IHBhdGg6IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvSW5Qcm9jZXNzQnlVc2VyRGVzY3JpcHRpb25cIiB9KTtcblx0XHR9XG5cdFx0aWYgKGRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhUHJvcGVydGllcz8uaW5jbHVkZXMoXCJMYXN0Q2hhbmdlZEJ5VXNlckRlc2NyaXB0aW9uXCIpKSB7XG5cdFx0XHRwYXJ0cy5wdXNoKHsgcGF0aDogXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlZEJ5VXNlckRlc2NyaXB0aW9uXCIgfSk7XG5cdFx0fVxuXG5cdFx0Ly9wYXJ0cy5wdXNoKHtwYXRoOiBcInNhcC5mZS5pMThuPlwifSlcblxuXHRcdHJldHVybiB7IHBhcnRzLCBmb3JtYXR0ZXI6IERyYWZ0SW5kaWNhdG9yLmZvcm1hdERyYWZ0T3duZXJUZXh0SW5Qb3BvdmVyIH07XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIHBvcG92ZXIgY29udHJvbCB0byBkaXNwbGF5IGRyYWZ0IGluZm9ybWF0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbCBDb250cm9sIHRoYXQgdGhlIHBvcG92ZXIgaXMgdG8gYmUgY3JlYXRlZCBmb3Jcblx0ICogQHJldHVybnMgVGhlIGNyZWF0ZWQgcG9wb3ZlciBjb250cm9sXG5cdCAqL1xuXHRjcmVhdGVQb3BvdmVyKGNvbnRyb2w6IENvbnRyb2wpOiBQb3BvdmVyIHtcblx0XHRjb25zdCBpc0RyYWZ0V2l0aE5vQ2hhbmdlc0JpbmRpbmcgPSBhbmQobm90KEVudGl0eS5Jc0FjdGl2ZSksIGlzRW1wdHkocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIikpKTtcblx0XHRjb25zdCBkcmFmdFdpdGhOb0NoYW5nZXNUZXh0QmluZGluZyA9XG5cdFx0XHR0aGlzLmRyYWZ0SW5kaWNhdG9yVHlwZSA9PT0gT2JqZWN0TWFya2VyVmlzaWJpbGl0eS5JY29uQW5kVGV4dFxuXHRcdFx0XHQ/IHBhdGhJbk1vZGVsKFwiTV9EUkFGVF9QT1BPVkVSX0FETUlOX0dFTkVSSUNfTE9DS0VEX09CSkVDVF9QT1BPVkVSX1RFWFRcIiwgXCJzYXAuZmUuaTE4blwiKVxuXHRcdFx0XHQ6IHBhdGhJbk1vZGVsKFwiQ19EUkFGVF9QT1BPVkVSX0FETUlOX0RBVEFfRFJBRlRJTkZPX1BPUE9WRVJfTk9fREFUQV9URVhUXCIsIFwic2FwLmZlLmkxOG5cIik7XG5cblx0XHRjb25zdCBpc0RyYWZ0V2l0aENoYW5nZXNCaW5kaW5nID0gYW5kKFxuXHRcdFx0bm90KEVudGl0eS5Jc0FjdGl2ZSksXG5cdFx0XHRub3QoaXNFbXB0eShwYXRoSW5Nb2RlbChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VEYXRlVGltZVwiKSkpXG5cdFx0KTtcblx0XHRjb25zdCBkcmFmdFdpdGhDaGFuZ2VzVGV4dEJpbmRpbmcgPSB7XG5cdFx0XHRwYXJ0czogW1xuXHRcdFx0XHR7IHBhdGg6IFwiTV9EUkFGVF9QT1BPVkVSX0FETUlOX0xBU1RfQ0hBTkdFX1RFWFRcIiwgbW9kZWw6IFwic2FwLmZlLmkxOG5cIiB9LFxuXHRcdFx0XHR7IHBhdGg6IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZURhdGVUaW1lXCIgfVxuXHRcdFx0XSxcblx0XHRcdGZvcm1hdHRlcjogZm9ybWF0TWVzc2FnZVxuXHRcdH07XG5cblx0XHRjb25zdCBpc0FjdGl2ZUluc3RhbmNlQmluZGluZyA9IGFuZChFbnRpdHkuSXNBY3RpdmUsIG5vdChpc0VtcHR5KHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZURhdGVUaW1lXCIpKSkpO1xuXHRcdGNvbnN0IGFjdGl2ZUluc3RhbmNlVGV4dEJpbmRpbmcgPSB7IC4uLmRyYWZ0V2l0aENoYW5nZXNUZXh0QmluZGluZyB9O1xuXG5cdFx0Y29uc3QgcG9wb3ZlcjogUG9wb3ZlciA9IChcblx0XHRcdDxQb3BvdmVyXG5cdFx0XHRcdHRpdGxlPXt0aGlzLmdldFBvcG92ZXJUaXRsZUJpbmRpbmdFeHByZXNzaW9uKCl9XG5cdFx0XHRcdHNob3dIZWFkZXI9e3RydWV9XG5cdFx0XHRcdHZlcnRpY2FsU2Nyb2xsaW5nPXtmYWxzZX1cblx0XHRcdFx0Y2xhc3M9e1wic2FwVWlDb250ZW50UGFkZGluZ1wifVxuXHRcdFx0XHRwbGFjZW1lbnQ9e1wiQXV0b1wifVxuXHRcdFx0XHRlbmRCdXR0b249e1xuXHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL2RlY2xpbmVcIn1cblx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRyYWZ0UG9wb3Zlcj8uY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSBhcyBCdXR0b25cblx0XHRcdFx0fVxuXHRcdFx0PlxuXHRcdFx0XHQ8VkJveCBjbGFzcz17XCJzYXBVaUNvbnRlbnRQYWRkaW5nXCJ9PlxuXHRcdFx0XHRcdDxWQm94IHZpc2libGU9e2lzRHJhZnRXaXRoTm9DaGFuZ2VzQmluZGluZ30+XG5cdFx0XHRcdFx0XHQ8VGV4dCB0ZXh0PXtkcmFmdFdpdGhOb0NoYW5nZXNUZXh0QmluZGluZ30gLz5cblx0XHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHRcdFx0PFZCb3ggdmlzaWJsZT17aXNEcmFmdFdpdGhDaGFuZ2VzQmluZGluZ30+XG5cdFx0XHRcdFx0XHQ8VGV4dCB0ZXh0PXtkcmFmdFdpdGhDaGFuZ2VzVGV4dEJpbmRpbmd9IC8+XG5cdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHRcdDxWQm94IHZpc2libGU9e2lzQWN0aXZlSW5zdGFuY2VCaW5kaW5nfT5cblx0XHRcdFx0XHRcdDxUZXh0IHRleHQ9e3RoaXMuZ2V0RHJhZnRPd25lclRleHRCaW5kaW5nRXhwcmVzc2lvbigpfSAvPlxuXHRcdFx0XHRcdFx0PFRleHQgY2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpblRvcFwifSB0ZXh0PXthY3RpdmVJbnN0YW5jZVRleHRCaW5kaW5nfSAvPlxuXHRcdFx0XHRcdDwvVkJveD5cblx0XHRcdFx0PC9WQm94PlxuXHRcdFx0PC9Qb3BvdmVyPlxuXHRcdCkgYXMgUG9wb3ZlcjtcblxuXHRcdENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoY29udHJvbCkuYWRkRGVwZW5kZW50KHBvcG92ZXIpO1xuXHRcdHJldHVybiBwb3BvdmVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgcHJlc3Npbmcgb2YgdGhlIG9iamVjdCBtYXJrZXIgYnkgb3BlbmluZyBhIGNvcnJlc3BvbmRpbmcgcG9wb3Zlci5cblx0ICogQHBhcmFtIGV2ZW50IEV2ZW50IG9iamVjdCBwYXNzZWQgZnJvbSB0aGUgcHJlc3MgZXZlbnRcblx0ICovXG5cdG9uT2JqZWN0TWFya2VyUHJlc3NlZChldmVudDogT2JqZWN0TWFya2VyJFByZXNzRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBzb3VyY2UgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXG5cdFx0dGhpcy5kcmFmdFBvcG92ZXIgPz89IHRoaXMuY3JlYXRlUG9wb3Zlcihzb3VyY2UpO1xuXG5cdFx0dGhpcy5kcmFmdFBvcG92ZXIuc2V0QmluZGluZ0NvbnRleHQoYmluZGluZ0NvbnRleHQpO1xuXHRcdHRoaXMuZHJhZnRQb3BvdmVyLm9wZW5CeShzb3VyY2UsIGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3RzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBcImFkZGl0aW9uYWxJbmZvXCIgYXR0cmlidXRlIGluIHRoZSBcIkljb25BbmRUZXh0XCIgY2FzZS5cblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuXHQgKi9cblx0Z2V0SWNvbkFuZFRleHRBZGRpdGlvbmFsSW5mb0JpbmRpbmdFeHByZXNzaW9uKCk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0XHRjb25zdCBkcmFmdEFkbWluaXN0cmF0aXZlRGF0YVByb3BlcnRpZXMgPSB0aGlzLmdldERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhUHJvcGVydGllcygpO1xuXG5cdFx0Y29uc3Qgb3JCaW5kaW5ncyA9IFtdO1xuXHRcdGlmIChkcmFmdEFkbWluaXN0cmF0aXZlRGF0YVByb3BlcnRpZXM/LmluY2x1ZGVzKFwiSW5Qcm9jZXNzQnlVc2VyRGVzY3JpcHRpb25cIikpIHtcblx0XHRcdG9yQmluZGluZ3MucHVzaChwYXRoSW5Nb2RlbChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0luUHJvY2Vzc0J5VXNlckRlc2NyaXB0aW9uXCIpKTtcblx0XHR9XG5cdFx0b3JCaW5kaW5ncy5wdXNoKHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvSW5Qcm9jZXNzQnlVc2VyXCIpKTtcblx0XHRpZiAoZHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFQcm9wZXJ0aWVzPy5pbmNsdWRlcyhcIkxhc3RDaGFuZ2VkQnlVc2VyRGVzY3JpcHRpb25cIikpIHtcblx0XHRcdG9yQmluZGluZ3MucHVzaChwYXRoSW5Nb2RlbChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VkQnlVc2VyRGVzY3JpcHRpb25cIikpO1xuXHRcdH1cblx0XHRvckJpbmRpbmdzLnB1c2gocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlZEJ5VXNlclwiKSk7XG5cblx0XHRyZXR1cm4gaWZFbHNlPHN0cmluZz4oRW50aXR5Lkhhc0RyYWZ0LCBvciguLi5vckJpbmRpbmdzKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiwgXCJcIik7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGlzIGJ1aWxkaW5nIGJsb2NrIGZvciB0aGUgXCJJY29uQW5kVGV4dFwiIHR5cGUuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250cm9sIHRyZWVcblx0ICovXG5cdGdldEljb25BbmRUZXh0Q29udGVudCgpOiBPYmplY3RNYXJrZXIge1xuXHRcdHRoaXMuaXNIaWRkZW5EcmFmdEVuYWJsZWQgPSAodGhpcy5nZXRBcHBDb21wb25lbnQoKT8uZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdD8uZW5hYmxlZDtcblx0XHRjb25zdCBvYmpNYXJrZXJUeXBlID0gdGhpcy5pc0hpZGRlbkRyYWZ0RW5hYmxlZCA/IE9iamVjdE1hcmtlclR5cGUuVW5zYXZlZCA6IE9iamVjdE1hcmtlclR5cGUuRHJhZnQ7XG5cdFx0Y29uc3QgdHlwZSA9IGlmRWxzZShcblx0XHRcdG5vdChFbnRpdHkuSXNBY3RpdmUpLFxuXHRcdFx0b2JqTWFya2VyVHlwZSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0RW50aXR5Lkhhc0RyYWZ0LFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0cGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9JblByb2Nlc3NCeVVzZXJcIiksXG5cdFx0XHRcdFx0T2JqZWN0TWFya2VyVHlwZS5Mb2NrZWRCeSxcblx0XHRcdFx0XHRpZkVsc2UocGF0aEluTW9kZWwoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlZEJ5VXNlclwiKSwgT2JqZWN0TWFya2VyVHlwZS5VbnNhdmVkQnksIE9iamVjdE1hcmtlclR5cGUuVW5zYXZlZClcblx0XHRcdFx0KSxcblx0XHRcdFx0T2JqZWN0TWFya2VyVHlwZS5GbGFnZ2VkXG5cdFx0XHQpXG5cdFx0KTtcblxuXHRcdGNvbnN0IHZpc2liaWxpdHkgPSBpZkVsc2Uobm90KEVudGl0eS5IYXNEcmFmdCksIE9iamVjdE1hcmtlclZpc2liaWxpdHkuVGV4dE9ubHksIE9iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbkFuZFRleHQpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxPYmplY3RNYXJrZXJcblx0XHRcdFx0dHlwZT17dHlwZX1cblx0XHRcdFx0cHJlc3M9e3RoaXMub25PYmplY3RNYXJrZXJQcmVzc2VkLmJpbmQodGhpcyl9XG5cdFx0XHRcdHZpc2liaWxpdHk9e3Zpc2liaWxpdHl9XG5cdFx0XHRcdGFkZGl0aW9uYWxJbmZvPXt0aGlzLmdldEljb25BbmRUZXh0QWRkaXRpb25hbEluZm9CaW5kaW5nRXhwcmVzc2lvbigpfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17dGhpcy5hcmlhTGFiZWxsZWRCeSA/IHRoaXMuYXJpYUxhYmVsbGVkQnkgOiBbXX1cblx0XHRcdFx0Y2xhc3M9e3RoaXMuY2xhc3N9XG5cdFx0XHRcdHJlYWN0aXZlQXJlYU1vZGU9e3RoaXMucmVhY3RpdmVBcmVhTW9kZX1cblx0XHRcdC8+XG5cdFx0KSBhcyBPYmplY3RNYXJrZXI7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGlzIGJ1aWxkaW5nIGJsb2NrIGZvciB0aGUgXCJJY29uT25seVwiIHR5cGUuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250cm9sIHRyZWVcblx0ICovXG5cdGdldEljb25Pbmx5Q29udGVudCgpOiBPYmplY3RNYXJrZXIge1xuXHRcdGNvbnN0IHR5cGUgPSBpZkVsc2UoXG5cdFx0XHRub3QoRW50aXR5LklzQWN0aXZlKSxcblx0XHRcdE9iamVjdE1hcmtlclR5cGUuRHJhZnQsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdEVudGl0eS5IYXNEcmFmdCxcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdCEhdGhpcy51c2VkSW5BbmFseXRpY2FsVGFibGUsXG5cdFx0XHRcdFx0T2JqZWN0TWFya2VyVHlwZS5Mb2NrZWQsXG5cdFx0XHRcdFx0aWZFbHNlKHBhdGhJbk1vZGVsKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvSW5Qcm9jZXNzQnlVc2VyXCIpLCBPYmplY3RNYXJrZXJUeXBlLkxvY2tlZCwgT2JqZWN0TWFya2VyVHlwZS5VbnNhdmVkKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRPYmplY3RNYXJrZXJUeXBlLkZsYWdnZWRcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0bGV0IHZpc2libGU7XG5cdFx0aWYgKHRoaXMudXNlZEluVGFibGUgPT09IHRydWUpIHtcblx0XHRcdHZpc2libGUgPSBvcihub3QoRW50aXR5LklzQWN0aXZlKSwgRW50aXR5Lkhhc0RyYWZ0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSWYgRW50aXR5Lkhhc0RyYWZ0IGlzIGVtcHR5LCB0aGVyZSBpcyBubyBjb250ZXh0IGF0IGFsbCwgc28gZG9uJ3Qgc2hvdyB0aGUgaW5kaWNhdG9yXG5cdFx0XHR2aXNpYmxlID0gYW5kKFxuXHRcdFx0XHRub3QoaXNFbXB0eShFbnRpdHkuSGFzRHJhZnQpKSxcblx0XHRcdFx0bm90KFVJLklzRWRpdGFibGUpLFxuXHRcdFx0XHRFbnRpdHkuSGFzRHJhZnQsXG5cdFx0XHRcdG5vdChwYXRoSW5Nb2RlbChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0RyYWZ0SXNDcmVhdGVkQnlNZVwiKSlcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxPYmplY3RNYXJrZXJcblx0XHRcdFx0dHlwZT17dHlwZX1cblx0XHRcdFx0cHJlc3M9eyF0aGlzLnVzZWRJbkFuYWx5dGljYWxUYWJsZSA/IHRoaXMub25PYmplY3RNYXJrZXJQcmVzc2VkLmJpbmQodGhpcykgOiB1bmRlZmluZWR9XG5cdFx0XHRcdHZpc2liaWxpdHk9e09iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbk9ubHl9XG5cdFx0XHRcdHZpc2libGU9e3Zpc2libGV9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXt0aGlzLmFyaWFMYWJlbGxlZEJ5ID8gdGhpcy5hcmlhTGFiZWxsZWRCeSA6IFtdfVxuXHRcdFx0XHRjbGFzcz17dGhpcy5jbGFzc31cblx0XHRcdFx0cmVhY3RpdmVBcmVhTW9kZT17dGhpcy5yZWFjdGl2ZUFyZWFNb2RlfVxuXHRcdFx0Lz5cblx0XHQpIGFzIE9iamVjdE1hcmtlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoaXMgYnVpbGRpbmcgYmxvY2suXG5cdCAqIEByZXR1cm5zIFRoZSBjb250cm9sIHRyZWVcblx0ICovXG5cdGNyZWF0ZUNvbnRlbnQoKTogT2JqZWN0TWFya2VyIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAodGhpcy5kcmFmdEluZGljYXRvclR5cGUgPT09IE9iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbkFuZFRleHQpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldEljb25BbmRUZXh0Q29udGVudCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRJY29uT25seUNvbnRlbnQoKTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVZBLElBWXFCQSxjQUFjLElBQUFDLElBQUEsR0FEbENDLGNBQWMsQ0FBQyw2Q0FBNkMsQ0FBQyxFQUFBQyxLQUFBLEdBSzVEQyxRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHREYsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBR0RILFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUUsUUFBUTtJQUNkRyxRQUFRLEVBQUU7RUFDWCxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdETCxRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUFLLEtBQUEsR0FHRE4sUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBTSxLQUFBLEdBR0RQLFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUU7RUFDUCxDQUFDLENBQUMsRUFBQU8sS0FBQSxHQUdEUixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFFBQVE7SUFBRVEsYUFBYSxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVM7RUFBRSxDQUFDLENBQUMsRUFBQVosSUFB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
|
|
@@ -374,7 +374,7 @@ export default class DraftIndicator extends BuildingBlock<Control> {
|
|
|
374
374
|
|
|
375
375
|
let visible;
|
|
376
376
|
if (this.usedInTable === true) {
|
|
377
|
-
visible = or(not(Entity.IsActive),
|
|
377
|
+
visible = or(not(Entity.IsActive), Entity.HasDraft);
|
|
378
378
|
} else {
|
|
379
379
|
// If Entity.HasDraft is empty, there is no context at all, so don't show the indicator
|
|
380
380
|
visible = and(
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/ui/core/Component", "sap/ui/core/Element", "sap/ui/mdc/field/FieldBaseDelegate", "sap/ui/mdc/odata/v4/TypeMap", "sap/ui/mdc/p13n/StateUtil", "sap/ui/model/Filter", "../CommonHelper"], function (Log, CommonUtils, MetaModelConverter, Component, Element, FieldBaseDelegate, TypeMap, StateUtil, Filter, CommonHelper) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/ui/core/Component", "sap/ui/core/Element", "sap/ui/mdc/field/FieldBaseDelegate", "sap/ui/mdc/odata/v4/TypeMap", "sap/ui/mdc/p13n/StateUtil", "sap/ui/model/Filter", "../CommonHelper", "../valuehelp/ValueHelpDelegate"], function (Log, CommonUtils, MetaModelConverter, Component, Element, FieldBaseDelegate, TypeMap, StateUtil, Filter, CommonHelper, ValueHelpDelegate) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var getInvolvedDataModelObjects = MetaModelConverter.getInvolvedDataModelObjects;
|
|
@@ -198,17 +198,23 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
|
|
|
198
198
|
* @param config Configuration Object
|
|
199
199
|
* @returns Object containing description, key, and payload. If it is not available right now (must be requested), a <code>Promise</code> is returned
|
|
200
200
|
*/
|
|
201
|
-
getItemForValue: function (field, valueHelp, config) {
|
|
201
|
+
getItemForValue: async function (field, valueHelp, config) {
|
|
202
202
|
//BCP: 2270162887 . The MDC field should not try to get the item when the field is emptied
|
|
203
203
|
// JIRA: FIORITECHP1-25361 - Improve the type-ahead behavior for missinng text annotation or constraints violations of the existing text annotation
|
|
204
204
|
if (config.value === "") {
|
|
205
205
|
return;
|
|
206
206
|
}
|
|
207
207
|
if (config.checkDescription) {
|
|
208
|
-
const
|
|
209
|
-
const
|
|
210
|
-
const
|
|
211
|
-
const
|
|
208
|
+
const container = valueHelp.getTypeahead();
|
|
209
|
+
const payload = valueHelp.getPayload();
|
|
210
|
+
const selectedContent = container.getSelectedContent();
|
|
211
|
+
const contentId = selectedContent && selectedContent.getId();
|
|
212
|
+
// In cases where getItemForValue is called before showValueList, the description may not be available.
|
|
213
|
+
// Therefore, this retrieveContent method is used to update the description.
|
|
214
|
+
await ValueHelpDelegate.retrieveContent(valueHelp, container, contentId);
|
|
215
|
+
const maxLength = payload.maxLength;
|
|
216
|
+
const valueLength = config.value?.toString().length || 0;
|
|
217
|
+
const descriptionPath = payload.valueHelpDescriptionPath;
|
|
212
218
|
if (descriptionPath === "") {
|
|
213
219
|
// In case the property value help collection has no text annotation (descriptionPath is empty) the description check shouldn´t occur.
|
|
214
220
|
// In such a case the method getDescription will be called by MDC and within this method a SideEffect is requested to retrieve the text from the text property of the main entity
|
|
@@ -356,4 +362,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
|
|
|
356
362
|
}
|
|
357
363
|
});
|
|
358
364
|
}, false);
|
|
359
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJhc3NpZ24iLCJGaWVsZEJhc2VEZWxlZ2F0ZSIsImFwaVZlcnNpb24iLCJpbml0aWFsaXplVHlwZUZyb21CaW5kaW5nIiwiZmllbGQiLCJ0eXBlIiwidmFsdWUiLCJyZXN1bHQiLCJpc0EiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJmb3JtYXRWYWx1ZSIsImJUeXBlSW5pdGlhbGl6ZWQiLCJtQ3VzdG9tVW5pdHMiLCJpbml0aWFsaXplSW50ZXJuYWxVbml0VHlwZSIsInR5cGVJbml0aWFsaXphdGlvbiIsImVuaGFuY2VWYWx1ZUZvclVuaXQiLCJ2YWx1ZXMiLCJwdXNoIiwiZ2V0RGVmYXVsdFZhbHVlSGVscERlbGVnYXRlIiwiX2ZpZWxkIiwibmFtZSIsInBheWxvYWQiLCJnZXRUeXBlTWFwIiwiVHlwZU1hcCIsIl9nZXRWYWx1ZUxpc3RQYXJhbWV0ZXIiLCJ2YWx1ZUxpc3RJbmZvIiwicHJvcGVydHlOYW1lIiwiUGFyYW1ldGVycyIsImZpbHRlciIsImVudHJ5IiwiTG9jYWxEYXRhUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiX2dldEZpbHRlciIsInZhbHVlTGlzdCIsInZhbHVlSGVscFByb3BlcnR5Iiwia2V5VmFsdWUiLCJ2YWx1ZWhlbHBQYXlsb2FkIiwidmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCIsImJpbmRpbmdDb250ZXh0IiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImZpbHRlcnMiLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyIiwiJFR5cGUiLCJWYWx1ZUxpc3RQcm9wZXJ0eSIsImZpbHRlclZhbHVlIiwiaXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJhcGRGaWVsZFBhdGgiLCJhcGRGaWVsZCIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldFZhbHVlIiwic291cmNlUGF0aCIsImNvbmRpdGlvblBheWxvYWQiLCJnZXRPYmplY3QiLCJjb25kaXRpb24iLCJvcGVyYXRvciIsIkZpbHRlciIsInBhdGgiLCJ2YWx1ZTEiLCJjb25jYXQiLCJfZ2V0UmVtYWluaW5nS2V5VmFsdWVGaWx0ZXJzIiwiJG1vZGVsIiwidmFsdWVMaXN0TW9kZWwiLCJDb2xsZWN0aW9uUGF0aCIsImNvbGxlY3Rpb25QYXRoIiwibWV0YUNvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJnZXRNZXRhQ29udGV4dCIsImVudGl0eVR5cGUiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiYWxsTG9jYWxEYXRhUHJvcGVydGllcyIsInJlZHVjZSIsImFyciIsImFsbFJlbWFpbmluZ0tleXMiLCJrZXlzIiwiX3JlZiIsImtleU5hbWUiLCJpbmNsdWRlcyIsImhhc093blByb3BlcnR5Iiwia2V5Iiwia2V5Q29udGV4dCIsIkNvbW1vbkhlbHBlciIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwiZ2V0SXRlbUZvclZhbHVlIiwidmFsdWVIZWxwIiwiY29uZmlnIiwiY2hlY2tEZXNjcmlwdGlvbiIsImdldFBheWxvYWQiLCJkZXNjcmlwdGlvblBhdGgiLCJ2YWx1ZUhlbHBEZXNjcmlwdGlvblBhdGgiLCJtYXhMZW5ndGgiLCJ2YWx1ZUxlbmd0aCIsInRvU3RyaW5nIiwiX2dldEZpbHRlckJhciIsImZpbHRlckJhckFQSSIsImdldFBhcmVudCIsImdldENvbnRlbnQiLCJnZXREZXNjcmlwdGlvbiIsIl9jb25kaXRpb25JbiIsIl9jb25kaXRpb25PdXQiLCJfQ29uZGl0aW9uTW9kZWwiLCJfY29uZGl0aW9uTW9kZWxOYW1lIiwiY29udHJvbCIsIl90eXBlIiwiZW1wdHlBbGxvd2VkIiwiZ2V0RGlzcGxheSIsInJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QiLCJpc0ZpbHRlckZpZWxkIiwiZGF0YU1vZGVsIiwiZ2V0TW9kZWwiLCJvd25lciIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwibWV0YU1vZGVsIiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJ2YWx1ZUhlbHBRdWFsaWZpZXIiLCJwcm9wZXJ0eVBhdGgiLCJwcm9wZXJ0eURlc2NyaXB0aW9uUGF0aCIsInRleHRQcm9wZXJ0eSIsInJlcXVlc3RWYWx1ZUxpc3RJbmZvIiwiZmlsdGVyQmFyIiwiZmlsdGVyQ29uZGl0aW9ucyIsImZpbHRlclN0YXRlIiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwidmFsdWVIZWxwUGFyYW1ldGVycyIsIkVycm9yIiwidGV4dEFubm90YXRpb24iLCIkUGF0aCIsImxpc3RCaW5kaW5nIiwiYmluZExpc3QiLCIkc2VsZWN0IiwiY29udGV4dHMiLCJyZXF1ZXN0Q29udGV4dHMiLCJsYXN0SW5kZXgiLCJsYXN0SW5kZXhPZiIsInNpZGVFZmZlY3RQYXRoIiwic3Vic3RyaW5nIiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiTG9nIiwid2FybmluZyIsImV4dGVybmFsSWRQYXRoIiwiZXh0ZXJuYWxJZEZ1bGxQYXRoIiwicmVwbGFjZSIsImV4dGVybmFsSWROYW1lIiwiZXh0ZXJuYWxJZERlc2NyaXB0aW9uUGF0aCIsImVycm9yIiwic3RhdHVzIiwibWVzc2FnZSIsIlN0cmluZyIsIm1zZyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmllbGRCYXNlRGVsZWdhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlLCBWYWx1ZUhlbHBQYXlsb2FkIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1ZhbHVlTGlzdEhlbHBlclwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIFZhbHVlSGVscCBmcm9tIFwic2FwL3VpL21kYy9WYWx1ZUhlbHBcIjtcbmltcG9ydCB0eXBlIHsgSXRlbUZvclZhbHVlQ29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvdWkvbWRjL1ZhbHVlSGVscFwiO1xuaW1wb3J0IHsgdHlwZSBDb25kaXRpb25PYmplY3QgfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb25kaXRpb25Nb2RlbCBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uTW9kZWxcIjtcbmltcG9ydCB0eXBlIEZpZWxkQmFzZSBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9GaWVsZEJhc2VcIjtcbmltcG9ydCBGaWVsZEJhc2VEZWxlZ2F0ZSBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9GaWVsZEJhc2VEZWxlZ2F0ZVwiO1xuaW1wb3J0IFR5cGVNYXAgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvVHlwZU1hcFwiO1xuaW1wb3J0IFN0YXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgU2ltcGxlVHlwZSBmcm9tIFwic2FwL3VpL21vZGVsL1NpbXBsZVR5cGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwiLi4vQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcIi4uL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyQVBJIGZyb20gXCIuLi9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvblBheWxvYWRNYXAsIENvbmRpdGlvblBheWxvYWRUeXBlLCBFeHRlcm5hbFN0YXRlVHlwZSB9IGZyb20gXCIuLi92YWx1ZWhlbHAvVmFsdWVIZWxwRGVsZWdhdGVcIjtcblxuZXhwb3J0IHR5cGUgRmllbGRQYXlsb2FkID0ge1xuXHRyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0PzogYm9vbGVhbjtcblx0aXNGaWx0ZXJGaWVsZD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBWYWx1ZSA9IHN0cmluZyB8IERhdGUgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuZXhwb3J0IHR5cGUgVHlwZUluaXRpYWxpemF0aW9uID0ge1xuXHRiVHlwZUluaXRpYWxpemVkPzogYm9vbGVhbjtcblx0bUN1c3RvbVVuaXRzPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ29uZmlnID0ge1xuXHR2YWx1ZTogVmFsdWU7XG5cdHBhcnNlZFZhbHVlOiBWYWx1ZTtcblx0YmluZGluZ0NvbnRleHQ6IENvbnRleHQ7XG5cdGNoZWNrS2V5OiBib29sZWFuO1xuXHRjaGVja0Rlc2NyaXB0aW9uOiBib29sZWFuO1xuXHRjb25kaXRpb25Nb2RlbD86IENvbmRpdGlvbk1vZGVsO1xuXHRjb25kaXRpb25Nb2RlbE5hbWU/OiBzdHJpbmc7XG5cdGNvbnRyb2w/OiBvYmplY3Q7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBPYmplY3QuYXNzaWduKHt9LCBGaWVsZEJhc2VEZWxlZ2F0ZSwge1xuXHRhcGlWZXJzaW9uOiAyLFxuXG5cdC8qKlxuXHQgKiBJZiB0aGUgPGNvZGU+RmllbGQ8L2NvZGU+IGNvbnRyb2wgaXMgdXNlZCwgdGhlIHVzZWQgZGF0YSB0eXBlIG1pZ2h0IGNvbWUgZnJvbSB0aGUgYmluZGluZy5cblx0ICogSW4gVjQtdW5pdCBvciBjdXJyZW5jeSBjYXNlIGl0IG1pZ2h0IG5lZWQgdG8gYmUgZm9ybWF0dGVkIG9uY2UuXG5cdCAqIFRvIGluaXRpYWxpemUgdGhlIGludGVybmFsIHR5cGUgbGF0ZXIgb24sIHRoZSBjdXJyZW5jaWVzIG11c3QgYmUgcmV0dXJuZWQuXG5cdCAqIEBwYXJhbSBmaWVsZCBUaGUgPGNvZGU+RmllbGQ8L2NvZGU+IGluc3RhbmNlXG5cdCAqIEBwYXJhbSB0eXBlIFR5cGUgZnJvbSBiaW5kaW5nXG5cdCAqIEBwYXJhbSB2YWx1ZSBHaXZlbiB2YWx1ZVxuXHQgKiBAcmV0dXJucyBJbmZvcm1hdGlvbiBuZWVkZWQgdG8gaW5pdGlhbGl6ZSBpbnRlcm5hbCB0eXBlIChuZWVkcyB0byBzZXQgYlR5cGVJbml0aWFsaXplZCB0byB0cnVlIGlmIGluaXRpYWxpemVkKVxuXHQgKi9cblx0aW5pdGlhbGl6ZVR5cGVGcm9tQmluZGluZzogZnVuY3Rpb24gKGZpZWxkOiBGaWVsZCwgdHlwZTogU2ltcGxlVHlwZSB8IHVuZGVmaW5lZCwgdmFsdWU6IFZhbHVlIHwgVmFsdWVbXSkge1xuXHRcdC8vIFY0IFVuaXQgYW5kIEN1cnJlbmN5IHR5cGVzIGhhdmUgYSBtYXAgd2l0aCB2YWxpZCB1bml0cyBhbmQgY3JlYXRlIGFuIGludGVybmFsIGN1c3RvbWl6aW5nIGZvciBpdC5cblx0XHQvLyBUaGUgRmllbGQgbmVlZHMgdG8ga2VlcCB0aGlzIGN1c3RvbWl6aW5nIGxvZ2ljIHdoZW4gY3JlYXRpbmcgdGhlIGludGVybmFsIHR5cGUuXG5cdFx0Ly8gKEFzIGV4dGVybmFsIFJBVyBiaW5kaW5nIGlzIHVzZWQgdGhlcmUgaXMgbm8gZm9ybWF0dGluZyBvbiBwYXJzaW5nLilcblxuXHRcdGNvbnN0IHJlc3VsdDogVHlwZUluaXRpYWxpemF0aW9uID0ge307XG5cdFx0aWYgKFxuXHRcdFx0dHlwZSAmJlxuXHRcdFx0dHlwZS5pc0EoW1wic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiLCBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkN1cnJlbmN5XCJdKSAmJlxuXHRcdFx0QXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcblx0XHRcdHZhbHVlLmxlbmd0aCA+IDIgJiZcblx0XHRcdHZhbHVlWzJdICE9PSB1bmRlZmluZWRcblx0XHQpIHtcblx0XHRcdC8vIGZvcm1hdCBvbmNlIHRvIHNldCBpbnRlcm5hbCBjdXN0b21pemluZy4gQWxsb3cgbnVsbCBhcyB2YWxpZCB2YWx1ZXMgZm9yIGN1c3RvbSB1bml0c1xuXHRcdFx0dHlwZS5mb3JtYXRWYWx1ZSh2YWx1ZSwgXCJzdHJpbmdcIik7XG5cdFx0XHRyZXN1bHQuYlR5cGVJbml0aWFsaXplZCA9IHRydWU7XG5cdFx0XHRyZXN1bHQubUN1c3RvbVVuaXRzID0gdmFsdWVbMl0gYXMgc3RyaW5nOyAvLyBUT0RPOiBmaW5kIGEgYmV0dGVyIHdheSB0byBwcm92aWRlIGN1c3RvbSB1bml0cyB0byBpbnRlcm5hbCB0eXBlXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgdW5pdCB0eXBlLlxuXHQgKiBJZiB0aGUgPGNvZGU+RmllbGQ8L2NvZGU+IGNvbnRyb2wgaXMgdXNlZCwgdGhlIHVzZWQgZGF0YSB0eXBlIG1pZ2h0IGNvbWUgZnJvbSB0aGUgYmluZGluZy5cblx0ICogSWYgdGhlIHR5cGUgaXMgYSBWNCB1bml0IG9yIGN1cnJlbmN5LCBpdCBtaWdodCBuZWVkIHRvIGJlIGZvcm1hdHRlZCBvbmNlLlxuXHQgKiBAcGFyYW0gZmllbGQgVGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gdHlwZSBUeXBlIGZyb20gYmluZGluZ1xuXHQgKiBAcGFyYW0gdHlwZUluaXRpYWxpemF0aW9uIEluZm9ybWF0aW9uIG5lZWRlZCB0byBpbml0aWFsaXplIGludGVybmFsIHR5cGVcblx0ICovXG5cdGluaXRpYWxpemVJbnRlcm5hbFVuaXRUeXBlOiBmdW5jdGlvbiAoZmllbGQ6IEZpZWxkLCB0eXBlOiBTaW1wbGVUeXBlLCB0eXBlSW5pdGlhbGl6YXRpb24/OiBUeXBlSW5pdGlhbGl6YXRpb24pIHtcblx0XHRpZiAodHlwZUluaXRpYWxpemF0aW9uPy5tQ3VzdG9tVW5pdHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gaWYgYWxyZWFkeSBpbml0aWFsaXplZCBpbml0aWFsaXplIG5ldyB0eXBlIHRvby5cblx0XHRcdHR5cGUuZm9ybWF0VmFsdWUoW251bGwsIG51bGwsIHR5cGVJbml0aWFsaXphdGlvbi5tQ3VzdG9tVW5pdHNdLCBcInN0cmluZ1wiKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gZW5oYW5jZXMgdGhlIHZhbHVlIHdpdGggdW5pdCBvciBjdXJyZW5jeSBpbmZvcm1hdGlvbiBpZiBuZWVkZWQgYnkgdGhlIGRhdGEgdHlwZS5cblx0ICogQHBhcmFtIGZpZWxkIFRoZSA8Y29kZT5GaWVsZDwvY29kZT4gaW5zdGFuY2Vcblx0ICogQHBhcmFtICB2YWx1ZXMgVmFsdWVzXG5cdCAqIEBwYXJhbSAgdHlwZUluaXRpYWxpemF0aW9uIEluZm9ybWF0aW9uIG5lZWRlZCB0byBpbml0aWFsaXplIGludGVybmFsIHR5cGVcblx0ICogQHJldHVybnMgVmFsdWVzXG5cdCAqL1xuXHRlbmhhbmNlVmFsdWVGb3JVbml0OiBmdW5jdGlvbiAoZmllbGQ6IEZpZWxkLCB2YWx1ZXM6IFZhbHVlW10sIHR5cGVJbml0aWFsaXphdGlvbj86IFR5cGVJbml0aWFsaXphdGlvbikge1xuXHRcdGlmICh0eXBlSW5pdGlhbGl6YXRpb24/LmJUeXBlSW5pdGlhbGl6ZWQgPT09IHRydWUgJiYgdmFsdWVzLmxlbmd0aCA9PT0gMikge1xuXHRcdFx0dmFsdWVzLnB1c2godHlwZUluaXRpYWxpemF0aW9uLm1DdXN0b21Vbml0cyk7XG5cdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdH1cblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB3aGljaCA8Y29kZT5WYWx1ZUhlbHBEZWxlZ2F0ZTwvY29kZT4gaXMgdXNlZFxuXHQgKiBpZiBhIGRlZmF1bHQgZmllbGQgaGVscCAoZm9yIGV4YW1wbGUsIGZvciBkZWZpbmluZyBjb25kaXRpb25zIGluIDwvY29kZT5GaWx0ZXJGaWVsZDwvY29kZT4pXG5cdCAqIGlzIGNyZWF0ZWQuXG5cdCAqIEBwYXJhbSBfZmllbGQgVGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBEZWxlZ2F0ZSBvYmplY3Qgd2l0aCBuYW1lIGFuZCBwYXlsb2FkXG5cdCAqL1xuXHRnZXREZWZhdWx0VmFsdWVIZWxwRGVsZWdhdGU6IGZ1bmN0aW9uIChfZmllbGQ6IEZpZWxkKSB7XG5cdFx0cmV0dXJuIHsgbmFtZTogXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1ZhbHVlSGVscERlbGVnYXRlXCIsIHBheWxvYWQ6IHt9IH07XG5cdH0sXG5cblx0Z2V0VHlwZU1hcDogZnVuY3Rpb24gKF9maWVsZDogRmllbGQpIHtcblx0XHRyZXR1cm4gVHlwZU1hcDtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lIGFsbCBwYXJhbWV0ZXJzIGluIGEgdmFsdWUgaGVscCB0aGF0IHVzZSBhIHNwZWNpZmljIHByb3BlcnR5LlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0SW5mbyBWYWx1ZSBsaXN0IGluZm9cblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eVxuXHQgKiBAcmV0dXJucyBMaXN0IG9mIGFsbCBmb3VuZCBwYXJhbWV0ZXJzXG5cdCAqL1xuXHRfZ2V0VmFsdWVMaXN0UGFyYW1ldGVyOiBmdW5jdGlvbiAodmFsdWVMaXN0SW5mbzogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XG5cdFx0Ly9kZXRlcm1pbmUgcGF0aCB0byB2YWx1ZSBsaXN0IHByb3BlcnR5XG5cdFx0cmV0dXJuIHZhbHVlTGlzdEluZm8uUGFyYW1ldGVycy5maWx0ZXIoZnVuY3Rpb24gKGVudHJ5KSB7XG5cdFx0XHRpZiAoZW50cnkuTG9jYWxEYXRhUHJvcGVydHkpIHtcblx0XHRcdFx0cmV0dXJuIGVudHJ5LkxvY2FsRGF0YVByb3BlcnR5LiRQcm9wZXJ0eVBhdGggPT09IHByb3BlcnR5TmFtZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblx0LyoqXG5cdCAqIEJ1aWxkIGZpbHRlcnMgZm9yIGVhY2ggcmVsZXZhbnQgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0IFZhbHVlIGxpc3QgaW5mb1xuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSB2YWx1ZUhlbHBQcm9wZXJ0eSBOYW1lIG9mIHRoZSB2YWx1ZSBoZWxwIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBrZXlWYWx1ZSBWYWx1ZSBvZiB0aGUgcHJvcGVydHlcblx0ICogQHBhcmFtIHZhbHVlaGVscFBheWxvYWQgUGF5bG9hZCBvZiB0aGUgdmFsdWUgaGVscFxuXHQgKiBAcGFyYW0gdmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCBBZGRpdGlvbmFsIGNvbmRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhpcyBrZXlcblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0IEJpbmRpbmdDb250ZXh0IG9mIHRoZSBmaWVsZFxuXHQgKiBAcmV0dXJucyBMaXN0IG9mIGZpbHRlcnNcblx0ICovXG5cdF9nZXRGaWx0ZXI6IGZ1bmN0aW9uIChcblx0XHR2YWx1ZUxpc3Q6IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlLFxuXHRcdHByb3BlcnR5TmFtZTogc3RyaW5nLFxuXHRcdHZhbHVlSGVscFByb3BlcnR5OiBzdHJpbmcsXG5cdFx0a2V5VmFsdWU6IHN0cmluZyxcblx0XHR2YWx1ZWhlbHBQYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkLFxuXHRcdHZhbHVlaGVscENvbmRpdGlvblBheWxvYWQ6IENvbmRpdGlvblBheWxvYWRUeXBlW10gfCB1bmRlZmluZWQsXG5cdFx0YmluZGluZ0NvbnRleHQ/OiBDb250ZXh0LFxuXHRcdGZpbHRlckJhckNvbmRpdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT5cblx0KSB7XG5cdFx0bGV0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XG5cdFx0Y29uc3QgcGFyYW1ldGVycyA9IHZhbHVlTGlzdC5QYXJhbWV0ZXJzLmZpbHRlcihmdW5jdGlvbiAocGFyYW1ldGVyKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRwYXJhbWV0ZXIuJFR5cGUgPT09IENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbiB8fFxuXHRcdFx0XHRwYXJhbWV0ZXIuJFR5cGUgPT09IENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCB8fFxuXHRcdFx0XHQocGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5Py4kUHJvcGVydHlQYXRoID09PSBwcm9wZXJ0eU5hbWUgJiYgcGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5ID09PSB2YWx1ZUhlbHBQcm9wZXJ0eSlcblx0XHRcdCk7XG5cdFx0fSk7XG5cdFx0Zm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgcGFyYW1ldGVycykge1xuXHRcdFx0bGV0IGZpbHRlclZhbHVlO1xuXHRcdFx0aWYgKHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aCA9PT0gcHJvcGVydHlOYW1lKSB7XG5cdFx0XHRcdGZpbHRlclZhbHVlID0ga2V5VmFsdWU7XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlaGVscFBheWxvYWQ/LmlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nID09PSB0cnVlKSB7XG5cdFx0XHRcdGNvbnN0IGFwZEZpZWxkUGF0aCA9IGBBUERfOjoke3BhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aH1gO1xuXHRcdFx0XHRjb25zdCBhcGRGaWVsZCA9IEVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXBkRmllbGRQYXRoKSBhcyBGaWVsZDtcblx0XHRcdFx0ZmlsdGVyVmFsdWUgPSBhcGRGaWVsZD8uZ2V0VmFsdWUoKTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IHNvdXJjZVBhdGggPSBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHRcdGNvbnN0IGNvbmRpdGlvblBheWxvYWQgPSB2YWx1ZWhlbHBDb25kaXRpb25QYXlsb2FkPy5bMF07XG5cdFx0XHRcdGZpbHRlclZhbHVlID0gc291cmNlUGF0aCAmJiBjb25kaXRpb25QYXlsb2FkPy5bc291cmNlUGF0aF07XG5cdFx0XHR9IGVsc2UgaWYgKGJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRcdC8vIGlmIHRoZSB2YWx1ZSBoZWxwIGlzIG5vdCB1c2VkIHRyeSBnZXR0aW5nIHRoZSBmaWx0ZXIgdmFsdWUgZnJvbSB0aGUgYmluZGluZyBjb250ZXh0XG5cdFx0XHRcdGNvbnN0IHNvdXJjZVBhdGggPSBwYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGZpbHRlclZhbHVlID0gYmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KHNvdXJjZVBhdGgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWZpbHRlclZhbHVlICYmIGZpbHRlckJhckNvbmRpdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgY29uZGl0aW9uID0gZmlsdGVyQmFyQ29uZGl0aW9ucz8uW3BhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eV07XG5cdFx0XHRcdGlmIChjb25kaXRpb24/Lmxlbmd0aCA9PT0gMSAmJiBjb25kaXRpb25bMF0/Lm9wZXJhdG9yID09PSBcIkVRXCIpIHtcblx0XHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IGNvbmRpdGlvblswXT8udmFsdWVzWzBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvKiBBZGQgdmFsdWUgdG8gdGhlIGZpbHRlciBmb3IgdGhlIHRleHQgZGV0ZXJtaW5hdGlvbiAqL1xuXHRcdFx0aWYgKGZpbHRlclZhbHVlICE9PSBudWxsICYmIGZpbHRlclZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHksIG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMTogZmlsdGVyVmFsdWUgfSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAodmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZD8uWzBdKSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIG11bHRpcGxlIGtleXMgZm9yIHRoZSB2YWx1ZWxpc3QgY29sbGVjdGlvbiwgdGhlIG1haW4gVmFsdWVMaXN0UHJvcGVydHkgbWlnaHQgbm90IGJlIHVuaXF1ZSB0byBnZXQgZXhhY3QgdmFsdWUgbGlzdCBzZWxlY3Rpb24uXG5cdFx0XHQvLyBTbywgd2UgYWRkIGZpbHRlcnMgZm9yIGtleSBwcm9wZXJ0aWVzIGlmIHRoZXkgYXJlIHByZXNlbnQgaW4gdGhlIHZhbHVlaGVscENvbmRpdGlvblBheWxvYWQuXG5cdFx0XHRmaWx0ZXJzID0gZmlsdGVycy5jb25jYXQodGhpcy5fZ2V0UmVtYWluaW5nS2V5VmFsdWVGaWx0ZXJzKHZhbHVlaGVscENvbmRpdGlvblBheWxvYWRbMF0sIHZhbHVlTGlzdCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmlsdGVycztcblx0fSxcblxuXHQvKipcblx0ICogR2V0IG1vZGVsIGZpbHRlcnMgdG8gZW5zdXJlIGEgcHJlY2lzZSBzZWxlY3Rpb24gZnJvbSB0aGUgY29uZGl0aW9uIHBheWxvYWQuXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXlsb2FkIEFkZGl0aW9uYWwgY29uZGl0aW9uIGluZm9ybWF0aW9uIGZvciB0aGlzIGtleVxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0IFZhbHVlIGxpc3QgaW5mb3JtYXRpb25cblx0ICogQHJldHVybnMgTGlzdCBvZiBmaWx0ZXJzXG5cdCAqL1xuXHRfZ2V0UmVtYWluaW5nS2V5VmFsdWVGaWx0ZXJzKGNvbmRpdGlvblBheWxvYWQ6IENvbmRpdGlvblBheWxvYWRUeXBlLCB2YWx1ZUxpc3Q6IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlKTogRmlsdGVyW10ge1xuXHRcdGNvbnN0IHsgJG1vZGVsOiB2YWx1ZUxpc3RNb2RlbCwgQ29sbGVjdGlvblBhdGg6IGNvbGxlY3Rpb25QYXRoLCBQYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzIH0gPSB2YWx1ZUxpc3Q7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSB2YWx1ZUxpc3RNb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhQ29udGV4dChgLyR7Y29sbGVjdGlvblBhdGh9YCk7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhQ29udGV4dCkudGFyZ2V0RW50aXR5VHlwZTtcblx0XHRjb25zdCBhbGxMb2NhbERhdGFQcm9wZXJ0aWVzID0gcGFyYW1ldGVycy5yZWR1Y2UoKGFyciwgcGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRpZiAocGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5Py4kUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdGFyci5wdXNoKHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eS4kUHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhcnI7XG5cdFx0fSwgW10gYXMgc3RyaW5nW10pO1xuXHRcdGNvbnN0IGFsbFJlbWFpbmluZ0tleXMgPSBlbnRpdHlUeXBlLmtleXMucmVkdWNlKChhcnIsIHsgbmFtZToga2V5TmFtZSB9KSA9PiB7XG5cdFx0XHRpZiAoIWFsbExvY2FsRGF0YVByb3BlcnRpZXMuaW5jbHVkZXMoa2V5TmFtZSkgJiYgY29uZGl0aW9uUGF5bG9hZC5oYXNPd25Qcm9wZXJ0eShrZXlOYW1lKSkge1xuXHRcdFx0XHRhcnIucHVzaChrZXlOYW1lKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhcnI7XG5cdFx0fSwgW10gYXMgc3RyaW5nW10pO1xuXHRcdGlmIChhbGxSZW1haW5pbmdLZXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBhbGxSZW1haW5pbmdLZXlzLnJlZHVjZSgoZmlsdGVyczogRmlsdGVyW10sIGtleTogc3RyaW5nKTogRmlsdGVyW10gPT4ge1xuXHRcdFx0XHQvLyBUaGlzIGlzIGEgbWV0YW1vZGVsIG9wZXJhdGlvbi4gVGhlIG9yaWdpbmFsIGlzUHJvcGVydHlGaWx0ZXJhYmxlIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCBsYXRlci5cblx0XHRcdFx0Y29uc3Qga2V5Q29udGV4dCA9IHZhbHVlTGlzdE1vZGVsLmdldE1ldGFNb2RlbCgpLmdldE1ldGFDb250ZXh0KGAvJHtjb2xsZWN0aW9uUGF0aH0vJHtrZXl9YCk7XG5cdFx0XHRcdGlmIChDb21tb25IZWxwZXIuaXNQcm9wZXJ0eUZpbHRlcmFibGUoa2V5Q29udGV4dCwgdW5kZWZpbmVkLCB0cnVlKSkge1xuXHRcdFx0XHRcdGZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDoga2V5LCBvcGVyYXRvcjogXCJFUVwiLCB2YWx1ZTE6IGNvbmRpdGlvblBheWxvYWRba2V5XSB9KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZpbHRlcnM7XG5cdFx0XHR9LCBbXSk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUga2V5LCBkZXNjcmlwdGlvbiwgYW5kIHBheWxvYWQgb2YgYSB1c2VyIGlucHV0LlxuXHQgKiBAcGFyYW0gZmllbGQgVGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwIFZhbHVlIGhlbHAgaW5zdGFuY2Vcblx0ICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIE9iamVjdFxuXHQgKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyBkZXNjcmlwdGlvbiwga2V5LCBhbmQgcGF5bG9hZC4gSWYgaXQgaXMgbm90IGF2YWlsYWJsZSByaWdodCBub3cgKG11c3QgYmUgcmVxdWVzdGVkKSwgYSA8Y29kZT5Qcm9taXNlPC9jb2RlPiBpcyByZXR1cm5lZFxuXHQgKi9cblx0Z2V0SXRlbUZvclZhbHVlOiBmdW5jdGlvbiAoZmllbGQ6IEZpZWxkLCB2YWx1ZUhlbHA6IFZhbHVlSGVscCwgY29uZmlnOiBJdGVtRm9yVmFsdWVDb25maWd1cmF0aW9uKSB7XG5cdFx0Ly9CQ1A6IDIyNzAxNjI4ODcgLiBUaGUgTURDIGZpZWxkIHNob3VsZCBub3QgdHJ5IHRvIGdldCB0aGUgaXRlbSB3aGVuIHRoZSBmaWVsZCBpcyBlbXB0aWVkXG5cdFx0Ly8gSklSQTogRklPUklURUNIUDEtMjUzNjEgLSBJbXByb3ZlIHRoZSB0eXBlLWFoZWFkIGJlaGF2aW9yIGZvciBtaXNzaW5uZyB0ZXh0IGFubm90YXRpb24gb3IgY29uc3RyYWludHMgdmlvbGF0aW9ucyBvZiB0aGUgZXhpc3RpbmcgdGV4dCBhbm5vdGF0aW9uXG5cdFx0aWYgKGNvbmZpZy52YWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChjb25maWcuY2hlY2tEZXNjcmlwdGlvbikge1xuXHRcdFx0Y29uc3QgdmFsdWVoZWxwUGF5bG9hZCA9IHZhbHVlSGVscC5nZXRQYXlsb2FkKCkgYXMgVmFsdWVIZWxwUGF5bG9hZDtcblx0XHRcdGNvbnN0IGRlc2NyaXB0aW9uUGF0aCA9IHZhbHVlaGVscFBheWxvYWQudmFsdWVIZWxwRGVzY3JpcHRpb25QYXRoO1xuXHRcdFx0Y29uc3QgbWF4TGVuZ3RoID0gdmFsdWVoZWxwUGF5bG9hZD8ubWF4TGVuZ3RoO1xuXHRcdFx0Y29uc3QgdmFsdWVMZW5ndGggPSBjb25maWcudmFsdWUgIT09IG51bGwgJiYgY29uZmlnLnZhbHVlICE9PSB1bmRlZmluZWQgPyBjb25maWcudmFsdWUudG9TdHJpbmcoKS5sZW5ndGggOiAwO1xuXHRcdFx0aWYgKGRlc2NyaXB0aW9uUGF0aCA9PT0gXCJcIikge1xuXHRcdFx0XHQvLyBJbiBjYXNlIHRoZSBwcm9wZXJ0eSB2YWx1ZSBoZWxwIGNvbGxlY3Rpb24gaGFzIG5vIHRleHQgYW5ub3RhdGlvbiAoZGVzY3JpcHRpb25QYXRoIGlzIGVtcHR5KSB0aGUgZGVzY3JpcHRpb24gY2hlY2sgc2hvdWxkbsK0dCBvY2N1ci5cblx0XHRcdFx0Ly8gSW4gc3VjaCBhIGNhc2UgdGhlIG1ldGhvZCBnZXREZXNjcmlwdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBNREMgYW5kIHdpdGhpbiB0aGlzIG1ldGhvZCBhIFNpZGVFZmZlY3QgaXMgcmVxdWVzdGVkIHRvIHJldHJpZXZlIHRoZSB0ZXh0IGZyb20gdGhlIHRleHQgcHJvcGVydHkgb2YgdGhlIG1haW4gZW50aXR5XG5cdFx0XHRcdGNvbmZpZy5jaGVja0Rlc2NyaXB0aW9uID0gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKG1heExlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHZhbHVlTGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG5cdFx0XHRcdC8vdmFsdWUgbGVuZ3RoIGlzID4gdGV4dCBwcm9lcGVydHkgbGVuZ3RoIGNvbnN0cmFpbnRcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gRmllbGRCYXNlRGVsZWdhdGUuZ2V0SXRlbUZvclZhbHVlKGZpZWxkLCB2YWx1ZUhlbHAsIGNvbmZpZyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgZmlsdGVyIGJhciBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgZmllbGQuXG5cdCAqIEBwYXJhbSBmaWVsZCBGaWVsZCBDb250cm9sXG5cdCAqIEByZXR1cm5zIFRoZSBmaWx0ZXIgYmFyIGluc3RhbmNlXG5cdCAqL1xuXHRfZ2V0RmlsdGVyQmFyOiBmdW5jdGlvbiAoZmllbGQ6IEZpZWxkIHwgbnVsbCk6IEZpbHRlckJhciB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGZpbHRlckJhckFQSTtcblx0XHRpZiAoZmllbGQ/LmlzQShcInNhcC51aS5tZGMuRmlsdGVyRmllbGRcIikpIHtcblx0XHRcdHdoaWxlIChmaWVsZCkge1xuXHRcdFx0XHRpZiAoZmllbGQ/LmlzQTxGaWx0ZXJCYXJBUEk+KFwic2FwLmZlLm1hY3Jvcy5maWx0ZXJCYXIuRmlsdGVyQmFyQVBJXCIpKSB7XG5cdFx0XHRcdFx0ZmlsdGVyQmFyQVBJID0gZmllbGQ7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZmllbGQgPSBmaWVsZD8uZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyBGaWVsZDtcblx0XHRcdH1cblx0XHRcdGlmIChmaWx0ZXJCYXJBUEk/LmdldENvbnRlbnQoKT8uaXNBKFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWx0ZXJCYXJcIikpIHtcblx0XHRcdFx0cmV0dXJuIGZpbHRlckJhckFQSS5nZXRDb250ZW50KCkgYXMgRmlsdGVyQmFyO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSBkZXNjcmlwdGlvbiBmb3IgYSBnaXZlbiBrZXkuXG5cdCAqIEBwYXJhbSBmaWVsZCBUaGUgPGNvZGU+RmllbGQ8L2NvZGU+IGluc3RhbmNlXG5cdCAqIEBwYXJhbSB2YWx1ZUhlbHAgRmllbGQgaGVscCBhc3NpZ25lZCB0byB0aGUgPGNvZGU+RmllbGQ8L2NvZGU+IG9yIDxjb2RlPkZpbHRlckZpZWxkPC9jb2RlPiBjb250cm9sXG5cdCAqIEBwYXJhbSBrZXkgS2V5IHZhbHVlIG9mIHRoZSBkZXNjcmlwdGlvblxuXHQgKiBAcGFyYW0gX2NvbmRpdGlvbkluIEluIHBhcmFtZXRlcnMgZm9yIHRoZSBrZXkgKG5vIGxvbmdlciBzdXBwb3J0ZWQpXG5cdCAqIEBwYXJhbSBfY29uZGl0aW9uT3V0IE91dCBwYXJhbWV0ZXJzIGZvciB0aGUga2V5IChubyBsb25nZXIgc3VwcG9ydGVkKVxuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHQgQmluZGluZ0NvbnRleHQgPGNvZGU+QmluZGluZ0NvbnRleHQ8L2NvZGU+IG9mIHRoZSBjaGVja2VkIGZpZWxkLiBJbnNpZGUgYSB0YWJsZSwgdGhlIDxjb2RlPlZhbHVlSGVscDwvY29kZT4gZWxlbWVudCBjYW4gYmUgY29ubmVjdGVkIHRvIGEgZGlmZmVyZW50IHJvd1xuXHQgKiBAcGFyYW0gX0NvbmRpdGlvbk1vZGVsIENvbmRpdGlvbk1vZGVsPC9jb2RlPiwgaWYgYm91bmQgdG8gb25lXG5cdCAqIEBwYXJhbSBfY29uZGl0aW9uTW9kZWxOYW1lIE5hbWUgb2YgdGhlIDxjb2RlPkNvbmRpdGlvbk1vZGVsPC9jb2RlPiwgaWYgYm91bmQgdG8gb25lXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXlsb2FkIEFkZGl0aW9uYWwgY29udGV4dCBpbmZvcm1hdGlvbiBmb3IgdGhpcyBrZXlcblx0ICogQHBhcmFtIGNvbnRyb2wgSW5zdGFuY2Ugb2YgdGhlIGNhbGxpbmcgY29udHJvbFxuXHQgKiBAcGFyYW0gX3R5cGUgVHlwZSBvZiB0aGUgdmFsdWVcblx0ICogQHJldHVybnMgRGVzY3JpcHRpb24gZm9yIHRoZSBrZXkgb3Igb2JqZWN0IGNvbnRhaW5pbmcgYSBkZXNjcmlwdGlvbiwga2V5IGFuZCBwYXlsb2FkLiBJZiB0aGUgZGVzY3JpcHRpb24gaXMgbm90IGF2YWlsYWJsZSByaWdodCBhd2F5IChpdCBtdXN0IGJlIHJlcXVlc3RlZCksIGEgPGNvZGU+UHJvbWlzZTwvY29kZT4gaXMgcmV0dXJuZWRcblx0ICovXG5cdGdldERlc2NyaXB0aW9uOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0ZmllbGQ6IEZpZWxkIHwgbnVsbCxcblx0XHR2YWx1ZUhlbHA6IFZhbHVlSGVscCxcblx0XHRrZXk6IHN0cmluZyxcblx0XHRfY29uZGl0aW9uSW46IG9iamVjdCxcblx0XHRfY29uZGl0aW9uT3V0OiBvYmplY3QsXG5cdFx0YmluZGluZ0NvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0X0NvbmRpdGlvbk1vZGVsOiBDb25kaXRpb25Nb2RlbCxcblx0XHRfY29uZGl0aW9uTW9kZWxOYW1lOiBzdHJpbmcsXG5cdFx0Y29uZGl0aW9uUGF5bG9hZDogQ29uZGl0aW9uUGF5bG9hZE1hcCxcblx0XHRjb250cm9sOiBDb250cm9sLFxuXHRcdF90eXBlOiB1bmtub3duLFxuXHRcdGVtcHR5QWxsb3dlZDogYm9vbGVhblxuXHQpIHtcblx0XHQvL0pJUkE6IEZJT1JJVEVDSFAxLTIyMDIyIC4gVGhlIE1EQyBmaWVsZCBzaG91bGQgbm90ICB0cmllcyB0byBkZXRlcm1pbmUgZGVzY3JpcHRpb24gd2l0aCB0aGUgaW5pdGlhbCBHRVQgb2YgdGhlIGRhdGEuXG5cdFx0Ly8gaXQgc2hvdWxkIHJlbHkgb24gdGhlIGRhdGEgd2UgYWxyZWFkeSByZWNlaXZlZCBmcm9tIHRoZSBiYWNrZW5kXG5cdFx0Ly8gQnV0IFRoZSBnZXREZXNjcmlwdGlvbiBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCBpbiB0aGUgRmlsdGVyRmllbGQgY2FzZSBpZiBhIHZhcmlhbnQgaXMgbG9hZGVkLlxuXHRcdC8vIEFzIHRoZSBkZXNjcmlwdGlvbiB0ZXh0IGNvdWxkIGJlIGxhbmd1YWdlIGRlcGVuZGVudCBpdCBpcyBub3Qgc3RvcmVkIGluIHRoZSB2YXJpYW50LCBzbyBpdCBuZWVkcyB0byBiZSByZWFkIG9uIHJlbmRlcmluZy5cblxuXHRcdGxldCBwYXlsb2FkID0gZmllbGQ/LmdldFBheWxvYWQoKSBhcyBGaWVsZFBheWxvYWQ7XG5cblx0XHQvKiBSZXRyaWV2ZSB0ZXh0IGZyb20gdmFsdWUgaGVscCwgaWYgdmFsdWUgd2FzIHNldCBieSBvdXQtcGFyYW1ldGVyIChCQ1AgMjI3MDE2MDYzMykgKi9cblx0XHRpZiAoIXBheWxvYWQgJiYgKGNvbnRyb2wgYXMgRmllbGRCYXNlKT8uZ2V0RGlzcGxheSgpLmluY2x1ZGVzKFwiRGVzY3JpcHRpb25cIikpIHtcblx0XHRcdHBheWxvYWQgPSB7XG5cdFx0XHRcdHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Q6IHRydWVcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYgKHBheWxvYWQ/LnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgPT09IHRydWUgfHwgcGF5bG9hZD8uaXNGaWx0ZXJGaWVsZCA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgZGF0YU1vZGVsID0gdmFsdWVIZWxwLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IG93bmVyID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHZhbHVlSGVscCBhcyB1bmtub3duIGFzIENvbnRyb2wpO1xuXHRcdFx0Ly8gSWYgbmVpdGhlciBkYXRhTW9kZWwgbm9yIG93bmVyIGlzIGRlZmluZWQsIHRoZSB2YWx1ZUhlbHAgY2Fubm90IGJlIGFuIEZFIGNvbnRyb2wuXG5cdFx0XHQvLyBUaGlzIG9jY3VycyBpbiBjYXNlcyBvZiBhIHN0YW5kYXJkIE1EQyBjb250cm9scyAoZS5nLiwgZGVmYXVsdCBWYWx1ZUhlbHAgZm9yIGJvb2xlYW4gdmFsdWVzKS5cblx0XHRcdGlmICghZGF0YU1vZGVsICYmICFvd25lcikge1xuXHRcdFx0XHRyZXR1cm4gRmllbGRCYXNlRGVsZWdhdGUuZ2V0RGVzY3JpcHRpb24oXG5cdFx0XHRcdFx0ZmllbGQgYXMgRmllbGRCYXNlLFxuXHRcdFx0XHRcdHZhbHVlSGVscCxcblx0XHRcdFx0XHRrZXksXG5cdFx0XHRcdFx0X2NvbmRpdGlvbkluLFxuXHRcdFx0XHRcdF9jb25kaXRpb25PdXQsXG5cdFx0XHRcdFx0YmluZGluZ0NvbnRleHQgYXMgQ29udGV4dCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNvbmRpdGlvblBheWxvYWQsXG5cdFx0XHRcdFx0Y29udHJvbCxcblx0XHRcdFx0XHRfdHlwZSxcblx0XHRcdFx0XHRlbXB0eUFsbG93ZWRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IGRhdGFNb2RlbFxuXHRcdFx0XHQ/IGRhdGFNb2RlbC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHQ6IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh2YWx1ZUhlbHAgYXMgdW5rbm93biBhcyBDb250cm9sKVxuXHRcdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IHZhbHVlaGVscFBheWxvYWQgPSB2YWx1ZUhlbHAuZ2V0UGF5bG9hZCgpIGFzIFZhbHVlSGVscFBheWxvYWQ7XG5cdFx0XHRjb25zdCB2YWx1ZWhlbHBDb25kaXRpb25QYXlsb2FkID0gY29uZGl0aW9uUGF5bG9hZD8uW3ZhbHVlaGVscFBheWxvYWQudmFsdWVIZWxwUXVhbGlmaWVyXTtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHZhbHVlaGVscFBheWxvYWQucHJvcGVydHlQYXRoO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlEZXNjcmlwdGlvblBhdGggPSB2YWx1ZWhlbHBQYXlsb2FkPy5wcm9wZXJ0eURlc2NyaXB0aW9uUGF0aDtcblx0XHRcdGxldCB0ZXh0UHJvcGVydHk6IHN0cmluZztcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0LyogUmVxdWVzdCB2YWx1ZSBoZWxwIG1ldGFkYXRhICovXG5cdFx0XHRcdGNvbnN0IHZhbHVlTGlzdEluZm8gPSBhd2FpdCBtZXRhTW9kZWwucmVxdWVzdFZhbHVlTGlzdEluZm8ocHJvcGVydHlQYXRoLCB0cnVlLCBiaW5kaW5nQ29udGV4dCk7XG5cblx0XHRcdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyKGZpZWxkKTtcblx0XHRcdFx0bGV0IGZpbHRlckNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0XHRcdGNvbnN0IGZpbHRlclN0YXRlOiBFeHRlcm5hbFN0YXRlVHlwZSA9IGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUoZmlsdGVyQmFyKTtcblx0XHRcdFx0XHRmaWx0ZXJDb25kaXRpb25zID0gZmlsdGVyU3RhdGUuZmlsdGVyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QHNhcHVpLm5hbWVgKSBhcyBzdHJpbmc7XG5cdFx0XHRcdC8vIHRha2UgdGhlIGZpcnN0IHZhbHVlIGxpc3QgYW5ub3RhdGlvbiAtIGFsdGVybmF0aXZlbHkgdGFrZSB0aGUgb25lIHdpdGhvdXQgcXVhbGlmaWVyIG9yIHRoZSBmaXJzdCBvbmVcblx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0ID0gdmFsdWVMaXN0SW5mb1tPYmplY3Qua2V5cyh2YWx1ZUxpc3RJbmZvKVswXV07XG5cdFx0XHRcdGNvbnN0IHZhbHVlSGVscFBhcmFtZXRlcnMgPSB0aGlzLl9nZXRWYWx1ZUxpc3RQYXJhbWV0ZXIodmFsdWVMaXN0LCBwcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHRjb25zdCB2YWx1ZUhlbHBQcm9wZXJ0eSA9IHZhbHVlSGVscFBhcmFtZXRlcnM/LlswXT8uVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHRcdGlmICghdmFsdWVIZWxwUHJvcGVydHkpIHtcblx0XHRcdFx0XHR0aHJvdyBFcnJvcihgSW5jb25zaXN0ZW50IHZhbHVlIGhlbHAgYW5ub3RhdGlvbiBmb3IgJHtwcm9wZXJ0eU5hbWV9YCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gZ2V0IHRleHQgYW5ub3RhdGlvbiBmb3IgdGhpcyB2YWx1ZSBsaXN0IHByb3BlcnR5XG5cdFx0XHRcdGNvbnN0IHZhbHVlTGlzdE1vZGVsID0gdmFsdWVMaXN0LiRtb2RlbDtcblx0XHRcdFx0Y29uc3QgdGV4dEFubm90YXRpb24gPSB2YWx1ZUxpc3RNb2RlbFxuXHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRPYmplY3QoYC8ke3ZhbHVlTGlzdC5Db2xsZWN0aW9uUGF0aH0vJHt2YWx1ZUhlbHBQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRgKTtcblx0XHRcdFx0aWYgKHRleHRBbm5vdGF0aW9uICYmIHRleHRBbm5vdGF0aW9uLiRQYXRoKSB7XG5cdFx0XHRcdFx0dGV4dFByb3BlcnR5ID0gdGV4dEFubm90YXRpb24uJFBhdGg7XG5cdFx0XHRcdFx0LyogQnVpbGQgdGhlIGZpbHRlciBmb3IgdGhlIHJlbGV2YW50IHBhcmFtZXRlcnMgKi9cblx0XHRcdFx0XHRjb25zdCBmaWx0ZXJzID0gdGhpcy5fZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdFx0dmFsdWVMaXN0LFxuXHRcdFx0XHRcdFx0cHJvcGVydHlOYW1lLFxuXHRcdFx0XHRcdFx0dmFsdWVIZWxwUHJvcGVydHksXG5cdFx0XHRcdFx0XHRrZXksXG5cdFx0XHRcdFx0XHR2YWx1ZWhlbHBQYXlsb2FkLFxuXHRcdFx0XHRcdFx0dmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCxcblx0XHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRcdFx0ZmlsdGVyQ29uZGl0aW9uc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSB2YWx1ZUxpc3RNb2RlbC5iaW5kTGlzdChgLyR7dmFsdWVMaXN0LkNvbGxlY3Rpb25QYXRofWAsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmaWx0ZXJzLCB7XG5cdFx0XHRcdFx0XHQkc2VsZWN0OiB0ZXh0UHJvcGVydHlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQvKiBSZXF1ZXN0IGRlc2NyaXB0aW9uIGZvciBnaXZlbiBrZXkgZnJvbSB2YWx1ZSBsaXN0IGVudGl0eSAqL1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRleHRzID0gYXdhaXQgbGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIDIpO1xuXHRcdFx0XHRcdHJldHVybiBjb250ZXh0cy5sZW5ndGggPyBjb250ZXh0c1swXS5nZXRPYmplY3QodGV4dFByb3BlcnR5KSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0fSBlbHNlIGlmIChiaW5kaW5nQ29udGV4dCAhPT0gdW5kZWZpbmVkICYmIHByb3BlcnR5RGVzY3JpcHRpb25QYXRoKSB7XG5cdFx0XHRcdFx0Y29uc3QgbGFzdEluZGV4ID0gcHJvcGVydHlEZXNjcmlwdGlvblBhdGgubGFzdEluZGV4T2YoXCIvXCIpO1xuXHRcdFx0XHRcdGNvbnN0IHNpZGVFZmZlY3RQYXRoID0gbGFzdEluZGV4ID4gMCA/IHByb3BlcnR5RGVzY3JpcHRpb25QYXRoLnN1YnN0cmluZygwLCBsYXN0SW5kZXgpIDogcHJvcGVydHlEZXNjcmlwdGlvblBhdGg7XG5cdFx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHZhbHVlSGVscCBhcyB1bmtub3duIGFzIENvbnRyb2wpLmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0XHRcdGF3YWl0IHNpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMoW3NpZGVFZmZlY3RQYXRoXSwgYmluZGluZ0NvbnRleHQpO1xuXHRcdFx0XHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XHRcdFx0YFJlcXVlc3RTaWRlRWZmZWN0cyBpcyB0cmlnZ2VyZWQgYmVjYXVzZSB0aGUgdGV4dCBhbm5vdGF0aW9uIGZvciAke3ZhbHVlSGVscFByb3BlcnR5fSBpcyBub3QgZGVmaW5lZCBhdCB0aGUgQ29sbGVjdGlvblBhdGggb2YgdGhlIHZhbHVlIGhlbHBgXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8qIEVYVEVSTkFsSUQgKi9cblx0XHRcdFx0XHRjb25zdCBleHRlcm5hbElkUGF0aCA9IG1ldGFNb2RlbD8uZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdFx0YCR7dmFsdWVoZWxwUGF5bG9hZC5wcm9wZXJ0eVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FeHRlcm5hbElEYFxuXHRcdFx0XHRcdCk/LiRQYXRoO1xuXHRcdFx0XHRcdGlmIChleHRlcm5hbElkUGF0aCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZXh0ZXJuYWxJZEZ1bGxQYXRoID0gdmFsdWVoZWxwUGF5bG9hZC5wcm9wZXJ0eVBhdGgucmVwbGFjZShwcm9wZXJ0eU5hbWUsIGV4dGVybmFsSWRQYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IGV4dGVybmFsSWROYW1lID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtleHRlcm5hbElkRnVsbFBhdGh9QHNhcHVpLm5hbWVgKTtcblx0XHRcdFx0XHRcdGNvbnN0IGV4dGVybmFsSWREZXNjcmlwdGlvblBhdGggPSBtZXRhTW9kZWw/LmdldE9iamVjdChgJHtleHRlcm5hbElkRnVsbFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0YClcblx0XHRcdFx0XHRcdFx0Py4kUGF0aDtcblx0XHRcdFx0XHRcdGNvbnN0IGZpbHRlcnMgPSBbXTtcblx0XHRcdFx0XHRcdGZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogZXh0ZXJuYWxJZE5hbWUsIG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMToga2V5IH0pKTtcblx0XHRcdFx0XHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gdmFsdWVMaXN0TW9kZWwuYmluZExpc3QoYC8ke3ZhbHVlTGlzdC5Db2xsZWN0aW9uUGF0aH1gLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmlsdGVycywge1xuXHRcdFx0XHRcdFx0XHQkc2VsZWN0OiBgJHtleHRlcm5hbElkTmFtZX0sJHtleHRlcm5hbElkRGVzY3JpcHRpb25QYXRofWBcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udGV4dHMgPSBhd2FpdCBsaXN0QmluZGluZy5yZXF1ZXN0Q29udGV4dHMoMCwgMik7XG5cdFx0XHRcdFx0XHRpZiAoY29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBjb250ZXh0c1swXS5nZXRPYmplY3QoZXh0ZXJuYWxJZERlc2NyaXB0aW9uUGF0aCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdExvZy5lcnJvcihgVGV4dCBBbm5vdGF0aW9uIGZvciAke3ZhbHVlSGVscFByb3BlcnR5fSBpcyBub3QgZGVmaW5lZGApO1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnN0IHN0YXR1cyA9IGVycm9yID8gKGVycm9yIGFzIFhNTEh0dHBSZXF1ZXN0KS5zdGF0dXMgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG5cdFx0XHRcdGNvbnN0IG1zZyA9IHN0YXR1cyA9PT0gNDA0ID8gYE1ldGFkYXRhIG5vdCBmb3VuZCAoJHtzdGF0dXN9KSBmb3IgdmFsdWUgaGVscCBvZiBwcm9wZXJ0eSAke3Byb3BlcnR5UGF0aH1gIDogbWVzc2FnZTtcblx0XHRcdFx0TG9nLmVycm9yKG1zZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1c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
|
|
365
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJhc3NpZ24iLCJGaWVsZEJhc2VEZWxlZ2F0ZSIsImFwaVZlcnNpb24iLCJpbml0aWFsaXplVHlwZUZyb21CaW5kaW5nIiwiZmllbGQiLCJ0eXBlIiwidmFsdWUiLCJyZXN1bHQiLCJpc0EiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJmb3JtYXRWYWx1ZSIsImJUeXBlSW5pdGlhbGl6ZWQiLCJtQ3VzdG9tVW5pdHMiLCJpbml0aWFsaXplSW50ZXJuYWxVbml0VHlwZSIsInR5cGVJbml0aWFsaXphdGlvbiIsImVuaGFuY2VWYWx1ZUZvclVuaXQiLCJ2YWx1ZXMiLCJwdXNoIiwiZ2V0RGVmYXVsdFZhbHVlSGVscERlbGVnYXRlIiwiX2ZpZWxkIiwibmFtZSIsInBheWxvYWQiLCJnZXRUeXBlTWFwIiwiVHlwZU1hcCIsIl9nZXRWYWx1ZUxpc3RQYXJhbWV0ZXIiLCJ2YWx1ZUxpc3RJbmZvIiwicHJvcGVydHlOYW1lIiwiUGFyYW1ldGVycyIsImZpbHRlciIsImVudHJ5IiwiTG9jYWxEYXRhUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiX2dldEZpbHRlciIsInZhbHVlTGlzdCIsInZhbHVlSGVscFByb3BlcnR5Iiwia2V5VmFsdWUiLCJ2YWx1ZWhlbHBQYXlsb2FkIiwidmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCIsImJpbmRpbmdDb250ZXh0IiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImZpbHRlcnMiLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyIiwiJFR5cGUiLCJWYWx1ZUxpc3RQcm9wZXJ0eSIsImZpbHRlclZhbHVlIiwiaXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJhcGRGaWVsZFBhdGgiLCJhcGRGaWVsZCIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldFZhbHVlIiwic291cmNlUGF0aCIsImNvbmRpdGlvblBheWxvYWQiLCJnZXRPYmplY3QiLCJjb25kaXRpb24iLCJvcGVyYXRvciIsIkZpbHRlciIsInBhdGgiLCJ2YWx1ZTEiLCJjb25jYXQiLCJfZ2V0UmVtYWluaW5nS2V5VmFsdWVGaWx0ZXJzIiwiJG1vZGVsIiwidmFsdWVMaXN0TW9kZWwiLCJDb2xsZWN0aW9uUGF0aCIsImNvbGxlY3Rpb25QYXRoIiwibWV0YUNvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJnZXRNZXRhQ29udGV4dCIsImVudGl0eVR5cGUiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiYWxsTG9jYWxEYXRhUHJvcGVydGllcyIsInJlZHVjZSIsImFyciIsImFsbFJlbWFpbmluZ0tleXMiLCJrZXlzIiwiX3JlZiIsImtleU5hbWUiLCJpbmNsdWRlcyIsImhhc093blByb3BlcnR5Iiwia2V5Iiwia2V5Q29udGV4dCIsIkNvbW1vbkhlbHBlciIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwiZ2V0SXRlbUZvclZhbHVlIiwidmFsdWVIZWxwIiwiY29uZmlnIiwiY2hlY2tEZXNjcmlwdGlvbiIsImNvbnRhaW5lciIsImdldFR5cGVhaGVhZCIsImdldFBheWxvYWQiLCJzZWxlY3RlZENvbnRlbnQiLCJnZXRTZWxlY3RlZENvbnRlbnQiLCJjb250ZW50SWQiLCJnZXRJZCIsIlZhbHVlSGVscERlbGVnYXRlIiwicmV0cmlldmVDb250ZW50IiwibWF4TGVuZ3RoIiwidmFsdWVMZW5ndGgiLCJ0b1N0cmluZyIsImRlc2NyaXB0aW9uUGF0aCIsInZhbHVlSGVscERlc2NyaXB0aW9uUGF0aCIsIl9nZXRGaWx0ZXJCYXIiLCJmaWx0ZXJCYXJBUEkiLCJnZXRQYXJlbnQiLCJnZXRDb250ZW50IiwiZ2V0RGVzY3JpcHRpb24iLCJfY29uZGl0aW9uSW4iLCJfY29uZGl0aW9uT3V0IiwiX0NvbmRpdGlvbk1vZGVsIiwiX2NvbmRpdGlvbk1vZGVsTmFtZSIsImNvbnRyb2wiLCJfdHlwZSIsImVtcHR5QWxsb3dlZCIsImdldERpc3BsYXkiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiaXNGaWx0ZXJGaWVsZCIsImRhdGFNb2RlbCIsImdldE1vZGVsIiwib3duZXIiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsIm1ldGFNb2RlbCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwidmFsdWVIZWxwUXVhbGlmaWVyIiwicHJvcGVydHlQYXRoIiwicHJvcGVydHlEZXNjcmlwdGlvblBhdGgiLCJ0ZXh0UHJvcGVydHkiLCJyZXF1ZXN0VmFsdWVMaXN0SW5mbyIsImZpbHRlckJhciIsImZpbHRlckNvbmRpdGlvbnMiLCJmaWx0ZXJTdGF0ZSIsIlN0YXRlVXRpbCIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsInZhbHVlSGVscFBhcmFtZXRlcnMiLCJFcnJvciIsInRleHRBbm5vdGF0aW9uIiwiJFBhdGgiLCJsaXN0QmluZGluZyIsImJpbmRMaXN0IiwiJHNlbGVjdCIsImNvbnRleHRzIiwicmVxdWVzdENvbnRleHRzIiwibGFzdEluZGV4IiwibGFzdEluZGV4T2YiLCJzaWRlRWZmZWN0UGF0aCIsInN1YnN0cmluZyIsInNpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsInJlcXVlc3RTaWRlRWZmZWN0cyIsIkxvZyIsIndhcm5pbmciLCJleHRlcm5hbElkUGF0aCIsImV4dGVybmFsSWRGdWxsUGF0aCIsInJlcGxhY2UiLCJleHRlcm5hbElkTmFtZSIsImV4dGVybmFsSWREZXNjcmlwdGlvblBhdGgiLCJlcnJvciIsInN0YXR1cyIsIm1lc3NhZ2UiLCJTdHJpbmciLCJtc2ciXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZpZWxkQmFzZURlbGVnYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbkFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSwgVmFsdWVIZWxwUGF5bG9hZCB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUxpc3RIZWxwZXJcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBWYWx1ZUhlbHAgZnJvbSBcInNhcC91aS9tZGMvVmFsdWVIZWxwXCI7XG5pbXBvcnQgdHlwZSB7IEl0ZW1Gb3JWYWx1ZUNvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL3VpL21kYy9WYWx1ZUhlbHBcIjtcbmltcG9ydCB7IHR5cGUgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29uZGl0aW9uTW9kZWwgZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvbk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEJhc2UgZnJvbSBcInNhcC91aS9tZGMvZmllbGQvRmllbGRCYXNlXCI7XG5pbXBvcnQgRmllbGRCYXNlRGVsZWdhdGUgZnJvbSBcInNhcC91aS9tZGMvZmllbGQvRmllbGRCYXNlRGVsZWdhdGVcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCB0eXBlIFNpbXBsZVR5cGUgZnJvbSBcInNhcC91aS9tb2RlbC9TaW1wbGVUeXBlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcIi4uL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCIuLi9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwiLi4vZmlsdGVyQmFyL0ZpbHRlckJhckFQSVwiO1xuaW1wb3J0IHR5cGUgeyBDb25kaXRpb25QYXlsb2FkTWFwLCBDb25kaXRpb25QYXlsb2FkVHlwZSwgRXh0ZXJuYWxTdGF0ZVR5cGUgfSBmcm9tIFwiLi4vdmFsdWVoZWxwL1ZhbHVlSGVscERlbGVnYXRlXCI7XG5pbXBvcnQgVmFsdWVIZWxwRGVsZWdhdGUgZnJvbSBcIi4uL3ZhbHVlaGVscC9WYWx1ZUhlbHBEZWxlZ2F0ZVwiO1xuXG5leHBvcnQgdHlwZSBGaWVsZFBheWxvYWQgPSB7XG5cdHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Q/OiBib29sZWFuO1xuXHRpc0ZpbHRlckZpZWxkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFZhbHVlID0gc3RyaW5nIHwgRGF0ZSB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQgfCBudWxsO1xuXG5leHBvcnQgdHlwZSBUeXBlSW5pdGlhbGl6YXRpb24gPSB7XG5cdGJUeXBlSW5pdGlhbGl6ZWQ/OiBib29sZWFuO1xuXHRtQ3VzdG9tVW5pdHM/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDb25maWcgPSB7XG5cdHZhbHVlOiBWYWx1ZTtcblx0cGFyc2VkVmFsdWU6IFZhbHVlO1xuXHRiaW5kaW5nQ29udGV4dDogQ29udGV4dDtcblx0Y2hlY2tLZXk6IGJvb2xlYW47XG5cdGNoZWNrRGVzY3JpcHRpb246IGJvb2xlYW47XG5cdGNvbmRpdGlvbk1vZGVsPzogQ29uZGl0aW9uTW9kZWw7XG5cdGNvbmRpdGlvbk1vZGVsTmFtZT86IHN0cmluZztcblx0Y29udHJvbD86IG9iamVjdDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdC5hc3NpZ24oe30sIEZpZWxkQmFzZURlbGVnYXRlLCB7XG5cdGFwaVZlcnNpb246IDIsXG5cblx0LyoqXG5cdCAqIElmIHRoZSA8Y29kZT5GaWVsZDwvY29kZT4gY29udHJvbCBpcyB1c2VkLCB0aGUgdXNlZCBkYXRhIHR5cGUgbWlnaHQgY29tZSBmcm9tIHRoZSBiaW5kaW5nLlxuXHQgKiBJbiBWNC11bml0IG9yIGN1cnJlbmN5IGNhc2UgaXQgbWlnaHQgbmVlZCB0byBiZSBmb3JtYXR0ZWQgb25jZS5cblx0ICogVG8gaW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgdHlwZSBsYXRlciBvbiwgdGhlIGN1cnJlbmNpZXMgbXVzdCBiZSByZXR1cm5lZC5cblx0ICogQHBhcmFtIGZpZWxkIFRoZSA8Y29kZT5GaWVsZDwvY29kZT4gaW5zdGFuY2Vcblx0ICogQHBhcmFtIHR5cGUgVHlwZSBmcm9tIGJpbmRpbmdcblx0ICogQHBhcmFtIHZhbHVlIEdpdmVuIHZhbHVlXG5cdCAqIEByZXR1cm5zIEluZm9ybWF0aW9uIG5lZWRlZCB0byBpbml0aWFsaXplIGludGVybmFsIHR5cGUgKG5lZWRzIHRvIHNldCBiVHlwZUluaXRpYWxpemVkIHRvIHRydWUgaWYgaW5pdGlhbGl6ZWQpXG5cdCAqL1xuXHRpbml0aWFsaXplVHlwZUZyb21CaW5kaW5nOiBmdW5jdGlvbiAoZmllbGQ6IEZpZWxkLCB0eXBlOiBTaW1wbGVUeXBlIHwgdW5kZWZpbmVkLCB2YWx1ZTogVmFsdWUgfCBWYWx1ZVtdKSB7XG5cdFx0Ly8gVjQgVW5pdCBhbmQgQ3VycmVuY3kgdHlwZXMgaGF2ZSBhIG1hcCB3aXRoIHZhbGlkIHVuaXRzIGFuZCBjcmVhdGUgYW4gaW50ZXJuYWwgY3VzdG9taXppbmcgZm9yIGl0LlxuXHRcdC8vIFRoZSBGaWVsZCBuZWVkcyB0byBrZWVwIHRoaXMgY3VzdG9taXppbmcgbG9naWMgd2hlbiBjcmVhdGluZyB0aGUgaW50ZXJuYWwgdHlwZS5cblx0XHQvLyAoQXMgZXh0ZXJuYWwgUkFXIGJpbmRpbmcgaXMgdXNlZCB0aGVyZSBpcyBubyBmb3JtYXR0aW5nIG9uIHBhcnNpbmcuKVxuXG5cdFx0Y29uc3QgcmVzdWx0OiBUeXBlSW5pdGlhbGl6YXRpb24gPSB7fTtcblx0XHRpZiAoXG5cdFx0XHR0eXBlICYmXG5cdFx0XHR0eXBlLmlzQShbXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIsIFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQ3VycmVuY3lcIl0pICYmXG5cdFx0XHRBcnJheS5pc0FycmF5KHZhbHVlKSAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID4gMiAmJlxuXHRcdFx0dmFsdWVbMl0gIT09IHVuZGVmaW5lZFxuXHRcdCkge1xuXHRcdFx0Ly8gZm9ybWF0IG9uY2UgdG8gc2V0IGludGVybmFsIGN1c3RvbWl6aW5nLiBBbGxvdyBudWxsIGFzIHZhbGlkIHZhbHVlcyBmb3IgY3VzdG9tIHVuaXRzXG5cdFx0XHR0eXBlLmZvcm1hdFZhbHVlKHZhbHVlLCBcInN0cmluZ1wiKTtcblx0XHRcdHJlc3VsdC5iVHlwZUluaXRpYWxpemVkID0gdHJ1ZTtcblx0XHRcdHJlc3VsdC5tQ3VzdG9tVW5pdHMgPSB2YWx1ZVsyXSBhcyBzdHJpbmc7IC8vIFRPRE86IGZpbmQgYSBiZXR0ZXIgd2F5IHRvIHByb3ZpZGUgY3VzdG9tIHVuaXRzIHRvIGludGVybmFsIHR5cGVcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSB1bml0IHR5cGUuXG5cdCAqIElmIHRoZSA8Y29kZT5GaWVsZDwvY29kZT4gY29udHJvbCBpcyB1c2VkLCB0aGUgdXNlZCBkYXRhIHR5cGUgbWlnaHQgY29tZSBmcm9tIHRoZSBiaW5kaW5nLlxuXHQgKiBJZiB0aGUgdHlwZSBpcyBhIFY0IHVuaXQgb3IgY3VycmVuY3ksIGl0IG1pZ2h0IG5lZWQgdG8gYmUgZm9ybWF0dGVkIG9uY2UuXG5cdCAqIEBwYXJhbSBmaWVsZCBUaGUgPGNvZGU+RmllbGQ8L2NvZGU+IGluc3RhbmNlXG5cdCAqIEBwYXJhbSB0eXBlIFR5cGUgZnJvbSBiaW5kaW5nXG5cdCAqIEBwYXJhbSB0eXBlSW5pdGlhbGl6YXRpb24gSW5mb3JtYXRpb24gbmVlZGVkIHRvIGluaXRpYWxpemUgaW50ZXJuYWwgdHlwZVxuXHQgKi9cblx0aW5pdGlhbGl6ZUludGVybmFsVW5pdFR5cGU6IGZ1bmN0aW9uIChmaWVsZDogRmllbGQsIHR5cGU6IFNpbXBsZVR5cGUsIHR5cGVJbml0aWFsaXphdGlvbj86IFR5cGVJbml0aWFsaXphdGlvbikge1xuXHRcdGlmICh0eXBlSW5pdGlhbGl6YXRpb24/Lm1DdXN0b21Vbml0cyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBpZiBhbHJlYWR5IGluaXRpYWxpemVkIGluaXRpYWxpemUgbmV3IHR5cGUgdG9vLlxuXHRcdFx0dHlwZS5mb3JtYXRWYWx1ZShbbnVsbCwgbnVsbCwgdHlwZUluaXRpYWxpemF0aW9uLm1DdXN0b21Vbml0c10sIFwic3RyaW5nXCIpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBlbmhhbmNlcyB0aGUgdmFsdWUgd2l0aCB1bml0IG9yIGN1cnJlbmN5IGluZm9ybWF0aW9uIGlmIG5lZWRlZCBieSB0aGUgZGF0YSB0eXBlLlxuXHQgKiBAcGFyYW0gZmllbGQgVGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gIHZhbHVlcyBWYWx1ZXNcblx0ICogQHBhcmFtICB0eXBlSW5pdGlhbGl6YXRpb24gSW5mb3JtYXRpb24gbmVlZGVkIHRvIGluaXRpYWxpemUgaW50ZXJuYWwgdHlwZVxuXHQgKiBAcmV0dXJucyBWYWx1ZXNcblx0ICovXG5cdGVuaGFuY2VWYWx1ZUZvclVuaXQ6IGZ1bmN0aW9uIChmaWVsZDogRmllbGQsIHZhbHVlczogVmFsdWVbXSwgdHlwZUluaXRpYWxpemF0aW9uPzogVHlwZUluaXRpYWxpemF0aW9uKSB7XG5cdFx0aWYgKHR5cGVJbml0aWFsaXphdGlvbj8uYlR5cGVJbml0aWFsaXplZCA9PT0gdHJ1ZSAmJiB2YWx1ZXMubGVuZ3RoID09PSAyKSB7XG5cdFx0XHR2YWx1ZXMucHVzaCh0eXBlSW5pdGlhbGl6YXRpb24ubUN1c3RvbVVuaXRzKTtcblx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHdoaWNoIDxjb2RlPlZhbHVlSGVscERlbGVnYXRlPC9jb2RlPiBpcyB1c2VkXG5cdCAqIGlmIGEgZGVmYXVsdCBmaWVsZCBoZWxwIChmb3IgZXhhbXBsZSwgZm9yIGRlZmluaW5nIGNvbmRpdGlvbnMgaW4gPC9jb2RlPkZpbHRlckZpZWxkPC9jb2RlPilcblx0ICogaXMgY3JlYXRlZC5cblx0ICogQHBhcmFtIF9maWVsZCBUaGUgPGNvZGU+RmllbGQ8L2NvZGU+IGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIERlbGVnYXRlIG9iamVjdCB3aXRoIG5hbWUgYW5kIHBheWxvYWRcblx0ICovXG5cdGdldERlZmF1bHRWYWx1ZUhlbHBEZWxlZ2F0ZTogZnVuY3Rpb24gKF9maWVsZDogRmllbGQpIHtcblx0XHRyZXR1cm4geyBuYW1lOiBcInNhcC91aS9tZGMvb2RhdGEvdjQvVmFsdWVIZWxwRGVsZWdhdGVcIiwgcGF5bG9hZDoge30gfTtcblx0fSxcblxuXHRnZXRUeXBlTWFwOiBmdW5jdGlvbiAoX2ZpZWxkOiBGaWVsZCkge1xuXHRcdHJldHVybiBUeXBlTWFwO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmUgYWxsIHBhcmFtZXRlcnMgaW4gYSB2YWx1ZSBoZWxwIHRoYXQgdXNlIGEgc3BlY2lmaWMgcHJvcGVydHkuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3RJbmZvIFZhbHVlIGxpc3QgaW5mb1xuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIExpc3Qgb2YgYWxsIGZvdW5kIHBhcmFtZXRlcnNcblx0ICovXG5cdF9nZXRWYWx1ZUxpc3RQYXJhbWV0ZXI6IGZ1bmN0aW9uICh2YWx1ZUxpc3RJbmZvOiBBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSwgcHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcblx0XHQvL2RldGVybWluZSBwYXRoIHRvIHZhbHVlIGxpc3QgcHJvcGVydHlcblx0XHRyZXR1cm4gdmFsdWVMaXN0SW5mby5QYXJhbWV0ZXJzLmZpbHRlcihmdW5jdGlvbiAoZW50cnkpIHtcblx0XHRcdGlmIChlbnRyeS5Mb2NhbERhdGFQcm9wZXJ0eSkge1xuXHRcdFx0XHRyZXR1cm4gZW50cnkuTG9jYWxEYXRhUHJvcGVydHkuJFByb3BlcnR5UGF0aCA9PT0gcHJvcGVydHlOYW1lO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXHQvKipcblx0ICogQnVpbGQgZmlsdGVycyBmb3IgZWFjaCByZWxldmFudCBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3QgVmFsdWUgbGlzdCBpbmZvXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgTmFtZSBvZiB0aGUgcHJvcGVydHlcblx0ICogQHBhcmFtIHZhbHVlSGVscFByb3BlcnR5IE5hbWUgb2YgdGhlIHZhbHVlIGhlbHAgcHJvcGVydHlcblx0ICogQHBhcmFtIGtleVZhbHVlIFZhbHVlIG9mIHRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gdmFsdWVoZWxwUGF5bG9hZCBQYXlsb2FkIG9mIHRoZSB2YWx1ZSBoZWxwXG5cdCAqIEBwYXJhbSB2YWx1ZWhlbHBDb25kaXRpb25QYXlsb2FkIEFkZGl0aW9uYWwgY29uZGl0aW9uIGluZm9ybWF0aW9uIGZvciB0aGlzIGtleVxuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHQgQmluZGluZ0NvbnRleHQgb2YgdGhlIGZpZWxkXG5cdCAqIEByZXR1cm5zIExpc3Qgb2YgZmlsdGVyc1xuXHQgKi9cblx0X2dldEZpbHRlcjogZnVuY3Rpb24gKFxuXHRcdHZhbHVlTGlzdDogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUsXG5cdFx0cHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdFx0dmFsdWVIZWxwUHJvcGVydHk6IHN0cmluZyxcblx0XHRrZXlWYWx1ZTogc3RyaW5nLFxuXHRcdHZhbHVlaGVscFBheWxvYWQ6IFZhbHVlSGVscFBheWxvYWQsXG5cdFx0dmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZDogQ29uZGl0aW9uUGF5bG9hZFR5cGVbXSB8IHVuZGVmaW5lZCxcblx0XHRiaW5kaW5nQ29udGV4dD86IENvbnRleHQsXG5cdFx0ZmlsdGVyQmFyQ29uZGl0aW9ucz86IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPlxuXHQpIHtcblx0XHRsZXQgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcblx0XHRjb25zdCBwYXJhbWV0ZXJzID0gdmFsdWVMaXN0LlBhcmFtZXRlcnMuZmlsdGVyKGZ1bmN0aW9uIChwYXJhbWV0ZXIpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHBhcmFtZXRlci4kVHlwZSA9PT0gQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluIHx8XG5cdFx0XHRcdHBhcmFtZXRlci4kVHlwZSA9PT0gQ29tbW9uQW5ub3RhdGlvblR5cGVzLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0IHx8XG5cdFx0XHRcdChwYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGggPT09IHByb3BlcnR5TmFtZSAmJiBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHkgPT09IHZhbHVlSGVscFByb3BlcnR5KVxuXHRcdFx0KTtcblx0XHR9KTtcblx0XHRmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBwYXJhbWV0ZXJzKSB7XG5cdFx0XHRsZXQgZmlsdGVyVmFsdWU7XG5cdFx0XHRpZiAocGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5Py4kUHJvcGVydHlQYXRoID09PSBwcm9wZXJ0eU5hbWUpIHtcblx0XHRcdFx0ZmlsdGVyVmFsdWUgPSBrZXlWYWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAodmFsdWVoZWxwUGF5bG9hZD8uaXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2cgPT09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgYXBkRmllbGRQYXRoID0gYEFQRF86OiR7cGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5Py4kUHJvcGVydHlQYXRofWA7XG5cdFx0XHRcdGNvbnN0IGFwZEZpZWxkID0gRWxlbWVudC5nZXRFbGVtZW50QnlJZChhcGRGaWVsZFBhdGgpIGFzIEZpZWxkO1xuXHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IGFwZEZpZWxkPy5nZXRWYWx1ZSgpO1xuXHRcdFx0fSBlbHNlIGlmICh2YWx1ZWhlbHBDb25kaXRpb25QYXlsb2FkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc3Qgc291cmNlUGF0aCA9IHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eTtcblx0XHRcdFx0Y29uc3QgY29uZGl0aW9uUGF5bG9hZCA9IHZhbHVlaGVscENvbmRpdGlvblBheWxvYWQ/LlswXTtcblx0XHRcdFx0ZmlsdGVyVmFsdWUgPSBzb3VyY2VQYXRoICYmIGNvbmRpdGlvblBheWxvYWQ/Lltzb3VyY2VQYXRoXTtcblx0XHRcdH0gZWxzZSBpZiAoYmluZGluZ0NvbnRleHQpIHtcblx0XHRcdFx0Ly8gaWYgdGhlIHZhbHVlIGhlbHAgaXMgbm90IHVzZWQgdHJ5IGdldHRpbmcgdGhlIGZpbHRlciB2YWx1ZSBmcm9tIHRoZSBiaW5kaW5nIGNvbnRleHRcblx0XHRcdFx0Y29uc3Qgc291cmNlUGF0aCA9IHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aDtcblx0XHRcdFx0ZmlsdGVyVmFsdWUgPSBiaW5kaW5nQ29udGV4dC5nZXRPYmplY3Qoc291cmNlUGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWZpbHRlclZhbHVlICYmIGZpbHRlckJhckNvbmRpdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgY29uZGl0aW9uID0gZmlsdGVyQmFyQ29uZGl0aW9ucz8uW3BhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eV07XG5cdFx0XHRcdGlmIChjb25kaXRpb24/Lmxlbmd0aCA9PT0gMSAmJiBjb25kaXRpb25bMF0/Lm9wZXJhdG9yID09PSBcIkVRXCIpIHtcblx0XHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IGNvbmRpdGlvblswXT8udmFsdWVzWzBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvKiBBZGQgdmFsdWUgdG8gdGhlIGZpbHRlciBmb3IgdGhlIHRleHQgZGV0ZXJtaW5hdGlvbiAqL1xuXHRcdFx0aWYgKGZpbHRlclZhbHVlICE9PSBudWxsICYmIGZpbHRlclZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHksIG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMTogZmlsdGVyVmFsdWUgfSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAodmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZD8uWzBdKSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIG11bHRpcGxlIGtleXMgZm9yIHRoZSB2YWx1ZWxpc3QgY29sbGVjdGlvbiwgdGhlIG1haW4gVmFsdWVMaXN0UHJvcGVydHkgbWlnaHQgbm90IGJlIHVuaXF1ZSB0byBnZXQgZXhhY3QgdmFsdWUgbGlzdCBzZWxlY3Rpb24uXG5cdFx0XHQvLyBTbywgd2UgYWRkIGZpbHRlcnMgZm9yIGtleSBwcm9wZXJ0aWVzIGlmIHRoZXkgYXJlIHByZXNlbnQgaW4gdGhlIHZhbHVlaGVscENvbmRpdGlvblBheWxvYWQuXG5cdFx0XHRmaWx0ZXJzID0gZmlsdGVycy5jb25jYXQodGhpcy5fZ2V0UmVtYWluaW5nS2V5VmFsdWVGaWx0ZXJzKHZhbHVlaGVscENvbmRpdGlvblBheWxvYWRbMF0sIHZhbHVlTGlzdCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmlsdGVycztcblx0fSxcblxuXHQvKipcblx0ICogR2V0IG1vZGVsIGZpbHRlcnMgdG8gZW5zdXJlIGEgcHJlY2lzZSBzZWxlY3Rpb24gZnJvbSB0aGUgY29uZGl0aW9uIHBheWxvYWQuXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXlsb2FkIEFkZGl0aW9uYWwgY29uZGl0aW9uIGluZm9ybWF0aW9uIGZvciB0aGlzIGtleVxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0IFZhbHVlIGxpc3QgaW5mb3JtYXRpb25cblx0ICogQHJldHVybnMgTGlzdCBvZiBmaWx0ZXJzXG5cdCAqL1xuXHRfZ2V0UmVtYWluaW5nS2V5VmFsdWVGaWx0ZXJzKGNvbmRpdGlvblBheWxvYWQ6IENvbmRpdGlvblBheWxvYWRUeXBlLCB2YWx1ZUxpc3Q6IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlKTogRmlsdGVyW10ge1xuXHRcdGNvbnN0IHsgJG1vZGVsOiB2YWx1ZUxpc3RNb2RlbCwgQ29sbGVjdGlvblBhdGg6IGNvbGxlY3Rpb25QYXRoLCBQYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzIH0gPSB2YWx1ZUxpc3Q7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSB2YWx1ZUxpc3RNb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhQ29udGV4dChgLyR7Y29sbGVjdGlvblBhdGh9YCk7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhQ29udGV4dCkudGFyZ2V0RW50aXR5VHlwZTtcblx0XHRjb25zdCBhbGxMb2NhbERhdGFQcm9wZXJ0aWVzID0gcGFyYW1ldGVycy5yZWR1Y2UoKGFyciwgcGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRpZiAocGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5Py4kUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdGFyci5wdXNoKHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eS4kUHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhcnI7XG5cdFx0fSwgW10gYXMgc3RyaW5nW10pO1xuXHRcdGNvbnN0IGFsbFJlbWFpbmluZ0tleXMgPSBlbnRpdHlUeXBlLmtleXMucmVkdWNlKChhcnIsIHsgbmFtZToga2V5TmFtZSB9KSA9PiB7XG5cdFx0XHRpZiAoIWFsbExvY2FsRGF0YVByb3BlcnRpZXMuaW5jbHVkZXMoa2V5TmFtZSkgJiYgY29uZGl0aW9uUGF5bG9hZC5oYXNPd25Qcm9wZXJ0eShrZXlOYW1lKSkge1xuXHRcdFx0XHRhcnIucHVzaChrZXlOYW1lKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhcnI7XG5cdFx0fSwgW10gYXMgc3RyaW5nW10pO1xuXHRcdGlmIChhbGxSZW1haW5pbmdLZXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBhbGxSZW1haW5pbmdLZXlzLnJlZHVjZSgoZmlsdGVyczogRmlsdGVyW10sIGtleTogc3RyaW5nKTogRmlsdGVyW10gPT4ge1xuXHRcdFx0XHQvLyBUaGlzIGlzIGEgbWV0YW1vZGVsIG9wZXJhdGlvbi4gVGhlIG9yaWdpbmFsIGlzUHJvcGVydHlGaWx0ZXJhYmxlIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCBsYXRlci5cblx0XHRcdFx0Y29uc3Qga2V5Q29udGV4dCA9IHZhbHVlTGlzdE1vZGVsLmdldE1ldGFNb2RlbCgpLmdldE1ldGFDb250ZXh0KGAvJHtjb2xsZWN0aW9uUGF0aH0vJHtrZXl9YCk7XG5cdFx0XHRcdGlmIChDb21tb25IZWxwZXIuaXNQcm9wZXJ0eUZpbHRlcmFibGUoa2V5Q29udGV4dCwgdW5kZWZpbmVkLCB0cnVlKSkge1xuXHRcdFx0XHRcdGZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDoga2V5LCBvcGVyYXRvcjogXCJFUVwiLCB2YWx1ZTE6IGNvbmRpdGlvblBheWxvYWRba2V5XSB9KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZpbHRlcnM7XG5cdFx0XHR9LCBbXSk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUga2V5LCBkZXNjcmlwdGlvbiwgYW5kIHBheWxvYWQgb2YgYSB1c2VyIGlucHV0LlxuXHQgKiBAcGFyYW0gZmllbGQgVGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwIFZhbHVlIGhlbHAgaW5zdGFuY2Vcblx0ICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIE9iamVjdFxuXHQgKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyBkZXNjcmlwdGlvbiwga2V5LCBhbmQgcGF5bG9hZC4gSWYgaXQgaXMgbm90IGF2YWlsYWJsZSByaWdodCBub3cgKG11c3QgYmUgcmVxdWVzdGVkKSwgYSA8Y29kZT5Qcm9taXNlPC9jb2RlPiBpcyByZXR1cm5lZFxuXHQgKi9cblx0Z2V0SXRlbUZvclZhbHVlOiBhc3luYyBmdW5jdGlvbiAoZmllbGQ6IEZpZWxkLCB2YWx1ZUhlbHA6IFZhbHVlSGVscCwgY29uZmlnOiBJdGVtRm9yVmFsdWVDb25maWd1cmF0aW9uKSB7XG5cdFx0Ly9CQ1A6IDIyNzAxNjI4ODcgLiBUaGUgTURDIGZpZWxkIHNob3VsZCBub3QgdHJ5IHRvIGdldCB0aGUgaXRlbSB3aGVuIHRoZSBmaWVsZCBpcyBlbXB0aWVkXG5cdFx0Ly8gSklSQTogRklPUklURUNIUDEtMjUzNjEgLSBJbXByb3ZlIHRoZSB0eXBlLWFoZWFkIGJlaGF2aW9yIGZvciBtaXNzaW5uZyB0ZXh0IGFubm90YXRpb24gb3IgY29uc3RyYWludHMgdmlvbGF0aW9ucyBvZiB0aGUgZXhpc3RpbmcgdGV4dCBhbm5vdGF0aW9uXG5cdFx0aWYgKGNvbmZpZy52YWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChjb25maWcuY2hlY2tEZXNjcmlwdGlvbikge1xuXHRcdFx0Y29uc3QgY29udGFpbmVyID0gdmFsdWVIZWxwLmdldFR5cGVhaGVhZCgpO1xuXHRcdFx0Y29uc3QgcGF5bG9hZCA9IHZhbHVlSGVscC5nZXRQYXlsb2FkKCkgYXMgVmFsdWVIZWxwUGF5bG9hZDtcblx0XHRcdGNvbnN0IHNlbGVjdGVkQ29udGVudCA9IGNvbnRhaW5lci5nZXRTZWxlY3RlZENvbnRlbnQoKTtcblx0XHRcdGNvbnN0IGNvbnRlbnRJZCA9IHNlbGVjdGVkQ29udGVudCAmJiBzZWxlY3RlZENvbnRlbnQuZ2V0SWQoKTtcblx0XHRcdC8vIEluIGNhc2VzIHdoZXJlIGdldEl0ZW1Gb3JWYWx1ZSBpcyBjYWxsZWQgYmVmb3JlIHNob3dWYWx1ZUxpc3QsIHRoZSBkZXNjcmlwdGlvbiBtYXkgbm90IGJlIGF2YWlsYWJsZS5cblx0XHRcdC8vIFRoZXJlZm9yZSwgdGhpcyByZXRyaWV2ZUNvbnRlbnQgbWV0aG9kIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBkZXNjcmlwdGlvbi5cblx0XHRcdGF3YWl0IFZhbHVlSGVscERlbGVnYXRlLnJldHJpZXZlQ29udGVudCh2YWx1ZUhlbHAsIGNvbnRhaW5lciwgY29udGVudElkKTtcblx0XHRcdGNvbnN0IG1heExlbmd0aCA9IHBheWxvYWQubWF4TGVuZ3RoO1xuXHRcdFx0Y29uc3QgdmFsdWVMZW5ndGggPSBjb25maWcudmFsdWU/LnRvU3RyaW5nKCkubGVuZ3RoIHx8IDA7XG5cdFx0XHRjb25zdCBkZXNjcmlwdGlvblBhdGggPSBwYXlsb2FkLnZhbHVlSGVscERlc2NyaXB0aW9uUGF0aDtcblx0XHRcdGlmIChkZXNjcmlwdGlvblBhdGggPT09IFwiXCIpIHtcblx0XHRcdFx0Ly8gSW4gY2FzZSB0aGUgcHJvcGVydHkgdmFsdWUgaGVscCBjb2xsZWN0aW9uIGhhcyBubyB0ZXh0IGFubm90YXRpb24gKGRlc2NyaXB0aW9uUGF0aCBpcyBlbXB0eSkgdGhlIGRlc2NyaXB0aW9uIGNoZWNrIHNob3VsZG7CtHQgb2NjdXIuXG5cdFx0XHRcdC8vIEluIHN1Y2ggYSBjYXNlIHRoZSBtZXRob2QgZ2V0RGVzY3JpcHRpb24gd2lsbCBiZSBjYWxsZWQgYnkgTURDIGFuZCB3aXRoaW4gdGhpcyBtZXRob2QgYSBTaWRlRWZmZWN0IGlzIHJlcXVlc3RlZCB0byByZXRyaWV2ZSB0aGUgdGV4dCBmcm9tIHRoZSB0ZXh0IHByb3BlcnR5IG9mIHRoZSBtYWluIGVudGl0eVxuXHRcdFx0XHRjb25maWcuY2hlY2tEZXNjcmlwdGlvbiA9IGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmIChtYXhMZW5ndGggIT09IHVuZGVmaW5lZCAmJiB2YWx1ZUxlbmd0aCA+IG1heExlbmd0aCkge1xuXHRcdFx0XHQvL3ZhbHVlIGxlbmd0aCBpcyA+IHRleHQgcHJvZXBlcnR5IGxlbmd0aCBjb25zdHJhaW50XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIEZpZWxkQmFzZURlbGVnYXRlLmdldEl0ZW1Gb3JWYWx1ZShmaWVsZCwgdmFsdWVIZWxwLCBjb25maWcpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZpbHRlciBiYXIgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGZpZWxkLlxuXHQgKiBAcGFyYW0gZmllbGQgRmllbGQgQ29udHJvbFxuXHQgKiBAcmV0dXJucyBUaGUgZmlsdGVyIGJhciBpbnN0YW5jZVxuXHQgKi9cblx0X2dldEZpbHRlckJhcjogZnVuY3Rpb24gKGZpZWxkOiBGaWVsZCB8IG51bGwpOiBGaWx0ZXJCYXIgfCB1bmRlZmluZWQge1xuXHRcdGxldCBmaWx0ZXJCYXJBUEk7XG5cdFx0aWYgKGZpZWxkPy5pc0EoXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHR3aGlsZSAoZmllbGQpIHtcblx0XHRcdFx0aWYgKGZpZWxkPy5pc0E8RmlsdGVyQmFyQVBJPihcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckJhckFQSVwiKSkge1xuXHRcdFx0XHRcdGZpbHRlckJhckFQSSA9IGZpZWxkO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZpZWxkID0gZmllbGQ/LmdldFBhcmVudCgpIGFzIHVua25vd24gYXMgRmllbGQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZmlsdGVyQmFyQVBJPy5nZXRDb250ZW50KCk/LmlzQShcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmlsdGVyQmFyXCIpKSB7XG5cdFx0XHRcdHJldHVybiBmaWx0ZXJCYXJBUEkuZ2V0Q29udGVudCgpIGFzIEZpbHRlckJhcjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUgZGVzY3JpcHRpb24gZm9yIGEgZ2l2ZW4ga2V5LlxuXHQgKiBAcGFyYW0gZmllbGQgVGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gdmFsdWVIZWxwIEZpZWxkIGhlbHAgYXNzaWduZWQgdG8gdGhlIDxjb2RlPkZpZWxkPC9jb2RlPiBvciA8Y29kZT5GaWx0ZXJGaWVsZDwvY29kZT4gY29udHJvbFxuXHQgKiBAcGFyYW0ga2V5IEtleSB2YWx1ZSBvZiB0aGUgZGVzY3JpcHRpb25cblx0ICogQHBhcmFtIF9jb25kaXRpb25JbiBJbiBwYXJhbWV0ZXJzIGZvciB0aGUga2V5IChubyBsb25nZXIgc3VwcG9ydGVkKVxuXHQgKiBAcGFyYW0gX2NvbmRpdGlvbk91dCBPdXQgcGFyYW1ldGVycyBmb3IgdGhlIGtleSAobm8gbG9uZ2VyIHN1cHBvcnRlZClcblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0IEJpbmRpbmdDb250ZXh0IDxjb2RlPkJpbmRpbmdDb250ZXh0PC9jb2RlPiBvZiB0aGUgY2hlY2tlZCBmaWVsZC4gSW5zaWRlIGEgdGFibGUsIHRoZSA8Y29kZT5WYWx1ZUhlbHA8L2NvZGU+IGVsZW1lbnQgY2FuIGJlIGNvbm5lY3RlZCB0byBhIGRpZmZlcmVudCByb3dcblx0ICogQHBhcmFtIF9Db25kaXRpb25Nb2RlbCBDb25kaXRpb25Nb2RlbDwvY29kZT4sIGlmIGJvdW5kIHRvIG9uZVxuXHQgKiBAcGFyYW0gX2NvbmRpdGlvbk1vZGVsTmFtZSBOYW1lIG9mIHRoZSA8Y29kZT5Db25kaXRpb25Nb2RlbDwvY29kZT4sIGlmIGJvdW5kIHRvIG9uZVxuXHQgKiBAcGFyYW0gY29uZGl0aW9uUGF5bG9hZCBBZGRpdGlvbmFsIGNvbnRleHQgaW5mb3JtYXRpb24gZm9yIHRoaXMga2V5XG5cdCAqIEBwYXJhbSBjb250cm9sIEluc3RhbmNlIG9mIHRoZSBjYWxsaW5nIGNvbnRyb2xcblx0ICogQHBhcmFtIF90eXBlIFR5cGUgb2YgdGhlIHZhbHVlXG5cdCAqIEByZXR1cm5zIERlc2NyaXB0aW9uIGZvciB0aGUga2V5IG9yIG9iamVjdCBjb250YWluaW5nIGEgZGVzY3JpcHRpb24sIGtleSBhbmQgcGF5bG9hZC4gSWYgdGhlIGRlc2NyaXB0aW9uIGlzIG5vdCBhdmFpbGFibGUgcmlnaHQgYXdheSAoaXQgbXVzdCBiZSByZXF1ZXN0ZWQpLCBhIDxjb2RlPlByb21pc2U8L2NvZGU+IGlzIHJldHVybmVkXG5cdCAqL1xuXHRnZXREZXNjcmlwdGlvbjogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdGZpZWxkOiBGaWVsZCB8IG51bGwsXG5cdFx0dmFsdWVIZWxwOiBWYWx1ZUhlbHAsXG5cdFx0a2V5OiBzdHJpbmcsXG5cdFx0X2NvbmRpdGlvbkluOiBvYmplY3QsXG5cdFx0X2NvbmRpdGlvbk91dDogb2JqZWN0LFxuXHRcdGJpbmRpbmdDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdF9Db25kaXRpb25Nb2RlbDogQ29uZGl0aW9uTW9kZWwsXG5cdFx0X2NvbmRpdGlvbk1vZGVsTmFtZTogc3RyaW5nLFxuXHRcdGNvbmRpdGlvblBheWxvYWQ6IENvbmRpdGlvblBheWxvYWRNYXAsXG5cdFx0Y29udHJvbDogQ29udHJvbCxcblx0XHRfdHlwZTogdW5rbm93bixcblx0XHRlbXB0eUFsbG93ZWQ6IGJvb2xlYW5cblx0KSB7XG5cdFx0Ly9KSVJBOiBGSU9SSVRFQ0hQMS0yMjAyMiAuIFRoZSBNREMgZmllbGQgc2hvdWxkIG5vdCAgdHJpZXMgdG8gZGV0ZXJtaW5lIGRlc2NyaXB0aW9uIHdpdGggdGhlIGluaXRpYWwgR0VUIG9mIHRoZSBkYXRhLlxuXHRcdC8vIGl0IHNob3VsZCByZWx5IG9uIHRoZSBkYXRhIHdlIGFscmVhZHkgcmVjZWl2ZWQgZnJvbSB0aGUgYmFja2VuZFxuXHRcdC8vIEJ1dCBUaGUgZ2V0RGVzY3JpcHRpb24gZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgaW4gdGhlIEZpbHRlckZpZWxkIGNhc2UgaWYgYSB2YXJpYW50IGlzIGxvYWRlZC5cblx0XHQvLyBBcyB0aGUgZGVzY3JpcHRpb24gdGV4dCBjb3VsZCBiZSBsYW5ndWFnZSBkZXBlbmRlbnQgaXQgaXMgbm90IHN0b3JlZCBpbiB0aGUgdmFyaWFudCwgc28gaXQgbmVlZHMgdG8gYmUgcmVhZCBvbiByZW5kZXJpbmcuXG5cblx0XHRsZXQgcGF5bG9hZCA9IGZpZWxkPy5nZXRQYXlsb2FkKCkgYXMgRmllbGRQYXlsb2FkO1xuXG5cdFx0LyogUmV0cmlldmUgdGV4dCBmcm9tIHZhbHVlIGhlbHAsIGlmIHZhbHVlIHdhcyBzZXQgYnkgb3V0LXBhcmFtZXRlciAoQkNQIDIyNzAxNjA2MzMpICovXG5cdFx0aWYgKCFwYXlsb2FkICYmIChjb250cm9sIGFzIEZpZWxkQmFzZSk/LmdldERpc3BsYXkoKS5pbmNsdWRlcyhcIkRlc2NyaXB0aW9uXCIpKSB7XG5cdFx0XHRwYXlsb2FkID0ge1xuXHRcdFx0XHRyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0OiB0cnVlXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmIChwYXlsb2FkPy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0ID09PSB0cnVlIHx8IHBheWxvYWQ/LmlzRmlsdGVyRmllbGQgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGRhdGFNb2RlbCA9IHZhbHVlSGVscC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwgfCB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBvd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih2YWx1ZUhlbHAgYXMgdW5rbm93biBhcyBDb250cm9sKTtcblx0XHRcdC8vIElmIG5laXRoZXIgZGF0YU1vZGVsIG5vciBvd25lciBpcyBkZWZpbmVkLCB0aGUgdmFsdWVIZWxwIGNhbm5vdCBiZSBhbiBGRSBjb250cm9sLlxuXHRcdFx0Ly8gVGhpcyBvY2N1cnMgaW4gY2FzZXMgb2YgYSBzdGFuZGFyZCBNREMgY29udHJvbHMgKGUuZy4sIGRlZmF1bHQgVmFsdWVIZWxwIGZvciBib29sZWFuIHZhbHVlcykuXG5cdFx0XHRpZiAoIWRhdGFNb2RlbCAmJiAhb3duZXIpIHtcblx0XHRcdFx0cmV0dXJuIEZpZWxkQmFzZURlbGVnYXRlLmdldERlc2NyaXB0aW9uKFxuXHRcdFx0XHRcdGZpZWxkIGFzIEZpZWxkQmFzZSxcblx0XHRcdFx0XHR2YWx1ZUhlbHAsXG5cdFx0XHRcdFx0a2V5LFxuXHRcdFx0XHRcdF9jb25kaXRpb25Jbixcblx0XHRcdFx0XHRfY29uZGl0aW9uT3V0LFxuXHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0IGFzIENvbnRleHQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRjb25kaXRpb25QYXlsb2FkLFxuXHRcdFx0XHRcdGNvbnRyb2wsXG5cdFx0XHRcdFx0X3R5cGUsXG5cdFx0XHRcdFx0ZW1wdHlBbGxvd2VkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBkYXRhTW9kZWxcblx0XHRcdFx0PyBkYXRhTW9kZWwuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0OiBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodmFsdWVIZWxwIGFzIHVua25vd24gYXMgQ29udHJvbClcblx0XHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCB2YWx1ZWhlbHBQYXlsb2FkID0gdmFsdWVIZWxwLmdldFBheWxvYWQoKSBhcyBWYWx1ZUhlbHBQYXlsb2FkO1xuXHRcdFx0Y29uc3QgdmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCA9IGNvbmRpdGlvblBheWxvYWQ/Llt2YWx1ZWhlbHBQYXlsb2FkLnZhbHVlSGVscFF1YWxpZmllcl07XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSB2YWx1ZWhlbHBQYXlsb2FkLnByb3BlcnR5UGF0aDtcblx0XHRcdGNvbnN0IHByb3BlcnR5RGVzY3JpcHRpb25QYXRoID0gdmFsdWVoZWxwUGF5bG9hZD8ucHJvcGVydHlEZXNjcmlwdGlvblBhdGg7XG5cdFx0XHRsZXQgdGV4dFByb3BlcnR5OiBzdHJpbmc7XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdC8qIFJlcXVlc3QgdmFsdWUgaGVscCBtZXRhZGF0YSAqL1xuXHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RJbmZvID0gYXdhaXQgbWV0YU1vZGVsLnJlcXVlc3RWYWx1ZUxpc3RJbmZvKHByb3BlcnR5UGF0aCwgdHJ1ZSwgYmluZGluZ0NvbnRleHQpO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXIoZmllbGQpO1xuXHRcdFx0XHRsZXQgZmlsdGVyQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRcdFx0Y29uc3QgZmlsdGVyU3RhdGU6IEV4dGVybmFsU3RhdGVUeXBlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShmaWx0ZXJCYXIpO1xuXHRcdFx0XHRcdGZpbHRlckNvbmRpdGlvbnMgPSBmaWx0ZXJTdGF0ZS5maWx0ZXI7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QHNhcHVpLm5hbWVgKSBhcyBzdHJpbmc7XG5cdFx0XHRcdC8vIHRha2UgdGhlIGZpcnN0IHZhbHVlIGxpc3QgYW5ub3RhdGlvbiAtIGFsdGVybmF0aXZlbHkgdGFrZSB0aGUgb25lIHdpdGhvdXQgcXVhbGlmaWVyIG9yIHRoZSBmaXJzdCBvbmVcblx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0ID0gdmFsdWVMaXN0SW5mb1tPYmplY3Qua2V5cyh2YWx1ZUxpc3RJbmZvKVswXV07XG5cdFx0XHRcdGNvbnN0IHZhbHVlSGVscFBhcmFtZXRlcnMgPSB0aGlzLl9nZXRWYWx1ZUxpc3RQYXJhbWV0ZXIodmFsdWVMaXN0LCBwcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHRjb25zdCB2YWx1ZUhlbHBQcm9wZXJ0eSA9IHZhbHVlSGVscFBhcmFtZXRlcnM/LlswXT8uVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHRcdGlmICghdmFsdWVIZWxwUHJvcGVydHkpIHtcblx0XHRcdFx0XHR0aHJvdyBFcnJvcihgSW5jb25zaXN0ZW50IHZhbHVlIGhlbHAgYW5ub3RhdGlvbiBmb3IgJHtwcm9wZXJ0eU5hbWV9YCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gZ2V0IHRleHQgYW5ub3RhdGlvbiBmb3IgdGhpcyB2YWx1ZSBsaXN0IHByb3BlcnR5XG5cdFx0XHRcdGNvbnN0IHZhbHVlTGlzdE1vZGVsID0gdmFsdWVMaXN0LiRtb2RlbDtcblx0XHRcdFx0Y29uc3QgdGV4dEFubm90YXRpb24gPSB2YWx1ZUxpc3RNb2RlbFxuXHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRPYmplY3QoYC8ke3ZhbHVlTGlzdC5Db2xsZWN0aW9uUGF0aH0vJHt2YWx1ZUhlbHBQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRgKTtcblx0XHRcdFx0aWYgKHRleHRBbm5vdGF0aW9uICYmIHRleHRBbm5vdGF0aW9uLiRQYXRoKSB7XG5cdFx0XHRcdFx0dGV4dFByb3BlcnR5ID0gdGV4dEFubm90YXRpb24uJFBhdGg7XG5cdFx0XHRcdFx0LyogQnVpbGQgdGhlIGZpbHRlciBmb3IgdGhlIHJlbGV2YW50IHBhcmFtZXRlcnMgKi9cblx0XHRcdFx0XHRjb25zdCBmaWx0ZXJzID0gdGhpcy5fZ2V0RmlsdGVyKFxuXHRcdFx0XHRcdFx0dmFsdWVMaXN0LFxuXHRcdFx0XHRcdFx0cHJvcGVydHlOYW1lLFxuXHRcdFx0XHRcdFx0dmFsdWVIZWxwUHJvcGVydHksXG5cdFx0XHRcdFx0XHRrZXksXG5cdFx0XHRcdFx0XHR2YWx1ZWhlbHBQYXlsb2FkLFxuXHRcdFx0XHRcdFx0dmFsdWVoZWxwQ29uZGl0aW9uUGF5bG9hZCxcblx0XHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRcdFx0ZmlsdGVyQ29uZGl0aW9uc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSB2YWx1ZUxpc3RNb2RlbC5iaW5kTGlzdChgLyR7dmFsdWVMaXN0LkNvbGxlY3Rpb25QYXRofWAsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmaWx0ZXJzLCB7XG5cdFx0XHRcdFx0XHQkc2VsZWN0OiB0ZXh0UHJvcGVydHlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQvKiBSZXF1ZXN0IGRlc2NyaXB0aW9uIGZvciBnaXZlbiBrZXkgZnJvbSB2YWx1ZSBsaXN0IGVudGl0eSAqL1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRleHRzID0gYXdhaXQgbGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIDIpO1xuXHRcdFx0XHRcdHJldHVybiBjb250ZXh0cy5sZW5ndGggPyBjb250ZXh0c1swXS5nZXRPYmplY3QodGV4dFByb3BlcnR5KSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0fSBlbHNlIGlmIChiaW5kaW5nQ29udGV4dCAhPT0gdW5kZWZpbmVkICYmIHByb3BlcnR5RGVzY3JpcHRpb25QYXRoKSB7XG5cdFx0XHRcdFx0Y29uc3QgbGFzdEluZGV4ID0gcHJvcGVydHlEZXNjcmlwdGlvblBhdGgubGFzdEluZGV4T2YoXCIvXCIpO1xuXHRcdFx0XHRcdGNvbnN0IHNpZGVFZmZlY3RQYXRoID0gbGFzdEluZGV4ID4gMCA/IHByb3BlcnR5RGVzY3JpcHRpb25QYXRoLnN1YnN0cmluZygwLCBsYXN0SW5kZXgpIDogcHJvcGVydHlEZXNjcmlwdGlvblBhdGg7XG5cdFx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHZhbHVlSGVscCBhcyB1bmtub3duIGFzIENvbnRyb2wpLmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0XHRcdGF3YWl0IHNpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMoW3NpZGVFZmZlY3RQYXRoXSwgYmluZGluZ0NvbnRleHQpO1xuXHRcdFx0XHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XHRcdFx0YFJlcXVlc3RTaWRlRWZmZWN0cyBpcyB0cmlnZ2VyZWQgYmVjYXVzZSB0aGUgdGV4dCBhbm5vdGF0aW9uIGZvciAke3ZhbHVlSGVscFByb3BlcnR5fSBpcyBub3QgZGVmaW5lZCBhdCB0aGUgQ29sbGVjdGlvblBhdGggb2YgdGhlIHZhbHVlIGhlbHBgXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8qIEVYVEVSTkFsSUQgKi9cblx0XHRcdFx0XHRjb25zdCBleHRlcm5hbElkUGF0aCA9IG1ldGFNb2RlbD8uZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdFx0YCR7dmFsdWVoZWxwUGF5bG9hZC5wcm9wZXJ0eVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FeHRlcm5hbElEYFxuXHRcdFx0XHRcdCk/LiRQYXRoO1xuXHRcdFx0XHRcdGlmIChleHRlcm5hbElkUGF0aCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZXh0ZXJuYWxJZEZ1bGxQYXRoID0gdmFsdWVoZWxwUGF5bG9hZC5wcm9wZXJ0eVBhdGgucmVwbGFjZShwcm9wZXJ0eU5hbWUsIGV4dGVybmFsSWRQYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IGV4dGVybmFsSWROYW1lID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtleHRlcm5hbElkRnVsbFBhdGh9QHNhcHVpLm5hbWVgKTtcblx0XHRcdFx0XHRcdGNvbnN0IGV4dGVybmFsSWREZXNjcmlwdGlvblBhdGggPSBtZXRhTW9kZWw/LmdldE9iamVjdChgJHtleHRlcm5hbElkRnVsbFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0YClcblx0XHRcdFx0XHRcdFx0Py4kUGF0aDtcblx0XHRcdFx0XHRcdGNvbnN0IGZpbHRlcnMgPSBbXTtcblx0XHRcdFx0XHRcdGZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogZXh0ZXJuYWxJZE5hbWUsIG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMToga2V5IH0pKTtcblx0XHRcdFx0XHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gdmFsdWVMaXN0TW9kZWwuYmluZExpc3QoYC8ke3ZhbHVlTGlzdC5Db2xsZWN0aW9uUGF0aH1gLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmlsdGVycywge1xuXHRcdFx0XHRcdFx0XHQkc2VsZWN0OiBgJHtleHRlcm5hbElkTmFtZX0sJHtleHRlcm5hbElkRGVzY3JpcHRpb25QYXRofWBcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0Y29uc3QgY29udGV4dHMgPSBhd2FpdCBsaXN0QmluZGluZy5yZXF1ZXN0Q29udGV4dHMoMCwgMik7XG5cdFx0XHRcdFx0XHRpZiAoY29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBjb250ZXh0c1swXS5nZXRPYmplY3QoZXh0ZXJuYWxJZERlc2NyaXB0aW9uUGF0aCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdExvZy5lcnJvcihgVGV4dCBBbm5vdGF0aW9uIGZvciAke3ZhbHVlSGVscFByb3BlcnR5fSBpcyBub3QgZGVmaW5lZGApO1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnN0IHN0YXR1cyA9IGVycm9yID8gKGVycm9yIGFzIFhNTEh0dHBSZXF1ZXN0KS5zdGF0dXMgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG5cdFx0XHRcdGNvbnN0IG1zZyA9IHN0YXR1cyA9PT0gNDA0ID8gYE1ldGFkYXRhIG5vdCBmb3VuZCAoJHtzdGF0dXN9KSBmb3IgdmFsdWUgaGVscCBvZiBwcm9wZXJ0eSAke3Byb3BlcnR5UGF0aH1gIDogbWVzc2FnZTtcblx0XHRcdFx0TG9nLmVycm9yKG1zZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztTQWtEZUEsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVDLGlCQUFpQixFQUFFO0lBQ25EQyxVQUFVLEVBQUUsQ0FBQztJQUViO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyx5QkFBeUIsRUFBRSxTQUFBQSxDQUFVQyxLQUFZLEVBQUVDLElBQTRCLEVBQUVDLEtBQXNCLEVBQUU7TUFDeEc7TUFDQTtNQUNBOztNQUVBLE1BQU1DLE1BQTBCLEdBQUcsQ0FBQyxDQUFDO01BQ3JDLElBQ0NGLElBQUksSUFDSkEsSUFBSSxDQUFDRyxHQUFHLENBQUMsQ0FBQyw4QkFBOEIsRUFBRSxrQ0FB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
|
|
@@ -23,6 +23,7 @@ import CommonHelper from "../CommonHelper";
|
|
|
23
23
|
import type FilterBar from "../controls/FilterBar";
|
|
24
24
|
import type FilterBarAPI from "../filterBar/FilterBarAPI";
|
|
25
25
|
import type { ConditionPayloadMap, ConditionPayloadType, ExternalStateType } from "../valuehelp/ValueHelpDelegate";
|
|
26
|
+
import ValueHelpDelegate from "../valuehelp/ValueHelpDelegate";
|
|
26
27
|
|
|
27
28
|
export type FieldPayload = {
|
|
28
29
|
retrieveTextFromValueList?: boolean;
|
|
@@ -189,7 +190,6 @@ export default Object.assign({}, FieldBaseDelegate, {
|
|
|
189
190
|
const sourcePath = parameter.LocalDataProperty?.$PropertyPath;
|
|
190
191
|
filterValue = bindingContext.getObject(sourcePath);
|
|
191
192
|
}
|
|
192
|
-
|
|
193
193
|
if (!filterValue && filterBarConditions) {
|
|
194
194
|
const condition = filterBarConditions?.[parameter.ValueListProperty];
|
|
195
195
|
if (condition?.length === 1 && condition[0]?.operator === "EQ") {
|
|
@@ -251,7 +251,7 @@ export default Object.assign({}, FieldBaseDelegate, {
|
|
|
251
251
|
* @param config Configuration Object
|
|
252
252
|
* @returns Object containing description, key, and payload. If it is not available right now (must be requested), a <code>Promise</code> is returned
|
|
253
253
|
*/
|
|
254
|
-
getItemForValue: function (field: Field, valueHelp: ValueHelp, config: ItemForValueConfiguration) {
|
|
254
|
+
getItemForValue: async function (field: Field, valueHelp: ValueHelp, config: ItemForValueConfiguration) {
|
|
255
255
|
//BCP: 2270162887 . The MDC field should not try to get the item when the field is emptied
|
|
256
256
|
// JIRA: FIORITECHP1-25361 - Improve the type-ahead behavior for missinng text annotation or constraints violations of the existing text annotation
|
|
257
257
|
if (config.value === "") {
|
|
@@ -259,10 +259,16 @@ export default Object.assign({}, FieldBaseDelegate, {
|
|
|
259
259
|
}
|
|
260
260
|
|
|
261
261
|
if (config.checkDescription) {
|
|
262
|
-
const
|
|
263
|
-
const
|
|
264
|
-
const
|
|
265
|
-
const
|
|
262
|
+
const container = valueHelp.getTypeahead();
|
|
263
|
+
const payload = valueHelp.getPayload() as ValueHelpPayload;
|
|
264
|
+
const selectedContent = container.getSelectedContent();
|
|
265
|
+
const contentId = selectedContent && selectedContent.getId();
|
|
266
|
+
// In cases where getItemForValue is called before showValueList, the description may not be available.
|
|
267
|
+
// Therefore, this retrieveContent method is used to update the description.
|
|
268
|
+
await ValueHelpDelegate.retrieveContent(valueHelp, container, contentId);
|
|
269
|
+
const maxLength = payload.maxLength;
|
|
270
|
+
const valueLength = config.value?.toString().length || 0;
|
|
271
|
+
const descriptionPath = payload.valueHelpDescriptionPath;
|
|
266
272
|
if (descriptionPath === "") {
|
|
267
273
|
// In case the property value help collection has no text annotation (descriptionPath is empty) the description check shouldn´t occur.
|
|
268
274
|
// In such a case the method getDescription will be called by MDC and within this method a SideEffect is requested to retrieve the text from the text property of the main entity
|
|
@@ -375,14 +381,12 @@ export default Object.assign({}, FieldBaseDelegate, {
|
|
|
375
381
|
try {
|
|
376
382
|
/* Request value help metadata */
|
|
377
383
|
const valueListInfo = await metaModel.requestValueListInfo(propertyPath, true, bindingContext);
|
|
378
|
-
|
|
379
384
|
const filterBar = this._getFilterBar(field);
|
|
380
385
|
let filterConditions: Record<string, ConditionObject[]> | undefined;
|
|
381
386
|
if (filterBar) {
|
|
382
387
|
const filterState: ExternalStateType = await StateUtil.retrieveExternalState(filterBar);
|
|
383
388
|
filterConditions = filterState.filter;
|
|
384
389
|
}
|
|
385
|
-
|
|
386
390
|
const propertyName = metaModel.getObject(`${propertyPath}@sapui.name`) as string;
|
|
387
391
|
// take the first value list annotation - alternatively take the one without qualifier or the first one
|
|
388
392
|
const valueList = valueListInfo[Object.keys(valueListInfo)[0]];
|