@sapui5/sap.fe.macros 1.142.0 → 1.142.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Field.js +5 -5
  4. package/src/sap/fe/macros/Field.ts +5 -3
  5. package/src/sap/fe/macros/FooterContent.js +3 -2
  6. package/src/sap/fe/macros/FooterContent.tsx +2 -10
  7. package/src/sap/fe/macros/MessageButton.js +3 -3
  8. package/src/sap/fe/macros/MessageButton.tsx +3 -2
  9. package/src/sap/fe/macros/Page.js +8 -4
  10. package/src/sap/fe/macros/Page.tsx +13 -4
  11. package/src/sap/fe/macros/RichTextEditor.js +12 -14
  12. package/src/sap/fe/macros/RichTextEditor.tsx +10 -13
  13. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  14. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  15. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  16. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  17. package/src/sap/fe/macros/chart/Action.js +19 -7
  18. package/src/sap/fe/macros/chart/Action.ts +8 -0
  19. package/src/sap/fe/macros/chart/ChartDelegate.js +13 -2
  20. package/src/sap/fe/macros/chart/ChartDelegate.ts +20 -1
  21. package/src/sap/fe/macros/chart/MdcChartTemplate.js +8 -6
  22. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +13 -22
  23. package/src/sap/fe/macros/controls/FileWrapper.js +4 -3
  24. package/src/sap/fe/macros/controls/FileWrapper.ts +3 -2
  25. package/src/sap/fe/macros/controls/FilterBar.js +1 -1
  26. package/src/sap/fe/macros/controls/FilterBar.ts +8 -1
  27. package/src/sap/fe/macros/controls/Section.js +3 -2
  28. package/src/sap/fe/macros/controls/Section.ts +1 -1
  29. package/src/sap/fe/macros/controls/TextLink.js +15 -1
  30. package/src/sap/fe/macros/controls/TextLink.tsx +19 -0
  31. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +23 -18
  32. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +27 -25
  33. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +4 -2
  34. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +7 -7
  35. package/src/sap/fe/macros/field/FieldTemplating.js +8 -3
  36. package/src/sap/fe/macros/field/FieldTemplating.ts +8 -3
  37. package/src/sap/fe/macros/filterBar/FilterBar.block.js +10 -1
  38. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +10 -0
  39. package/src/sap/fe/macros/form/FormContainer.block.js +9 -8
  40. package/src/sap/fe/macros/form/FormContainer.block.ts +10 -7
  41. package/src/sap/fe/macros/internal/field/DisplayStyle.js +3 -2
  42. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +1 -0
  43. package/src/sap/fe/macros/internal/field/EditStyle.js +11 -6
  44. package/src/sap/fe/macros/internal/field/EditStyle.tsx +7 -3
  45. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +36 -7
  46. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +35 -6
  47. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +54 -1
  48. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +59 -0
  49. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +23 -3
  50. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +24 -2
  51. package/src/sap/fe/macros/library.js +5 -6
  52. package/src/sap/fe/macros/{library.ts → library.tsx} +1 -1
  53. package/src/sap/fe/macros/messagebundle.properties +6 -0
  54. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  55. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  56. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +8 -3
  57. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +9 -2
  58. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  59. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  60. package/src/sap/fe/macros/table/ActionsTemplating.js +6 -5
  61. package/src/sap/fe/macros/table/ActionsTemplating.tsx +4 -4
  62. package/src/sap/fe/macros/table/MdcTableTemplate.js +31 -13
  63. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +35 -7
  64. package/src/sap/fe/macros/table/Table.block.js +3 -1
  65. package/src/sap/fe/macros/table/Table.block.tsx +7 -4
  66. package/src/sap/fe/macros/table/TableAPI.js +62 -28
  67. package/src/sap/fe/macros/table/TableAPI.ts +73 -32
  68. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +15 -4
  69. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +16 -3
  70. package/src/sap/fe/macros/table/TableRuntime.js +6 -4
  71. package/src/sap/fe/macros/table/TableRuntime.ts +16 -3
  72. package/src/sap/fe/macros/table/delegates/TableDelegate.js +3 -3
  73. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +3 -4
  74. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  75. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  76. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -4
  77. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -2
  78. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +10 -4
  79. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +9 -3
  80. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +6 -6
  81. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +5 -5
  82. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +28 -10
  83. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +33 -14
@@ -19,7 +19,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
19
19
  var getInvolvedDataModelObjects = MetaModelConverter.getInvolvedDataModelObjects;
20
20
  var TemplateType = ManifestSettings.TemplateType;
21
21
  var escapeXMLAttributeValue = BuildingBlockTemplateProcessor.escapeXMLAttributeValue;
22
- var resolveBindingString = BindingToolkit.resolveBindingString;
23
22
  var pathInModel = BindingToolkit.pathInModel;
24
23
  var notEqual = BindingToolkit.notEqual;
25
24
  const measureRole = {
@@ -90,7 +89,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
90
89
  customActions[action.key] = getActionProperties(action.key, action.text, action.press, !!action.requiresSelection, action.enabled === null || action.enabled == undefined ? true : action.enabled, {
91
90
  placement: action.placement,
92
91
  anchor: action.anchor
93
- }, undefined, action.group, action.overflowGroup);
92
+ }, undefined, action.group, action.overflowGroup, action.priority);
94
93
  }
95
94
  });
96
95
  }
@@ -109,7 +108,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
109
108
  }
110
109
  return extraParams;
111
110
  }
112
- function getActionProperties(key, text, press, requiresSelection, enabled, position, menu, group, overflowGroup) {
111
+ function getActionProperties(key, text, press, requiresSelection, enabled, position, menu, group, overflowGroup, priority) {
113
112
  const actionProperties = {
114
113
  key,
115
114
  text,
@@ -126,6 +125,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
126
125
  if (menu) {
127
126
  actionProperties.menu = menu;
128
127
  }
128
+ if (priority !== undefined) {
129
+ actionProperties.priority = priority;
130
+ }
129
131
  return actionProperties;
130
132
  }
131
133
  function createBindingContext(data) {
@@ -221,7 +223,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
221
223
  };
222
224
  dynamicMeasure.propertyPath = aggregatedProperty.AggregatableProperty.value;
223
225
  dynamicMeasure.aggregationMethod = aggregatedProperty.AggregationMethod.toString();
224
- dynamicMeasure.label = resolveBindingString(aggregatedProperty.annotations?.Common?.Label?.toString() ?? aggregatedProperty.AggregatableProperty.$target?.annotations?.Common?.Label?.toString() ?? "");
226
+ dynamicMeasure.label = aggregatedProperty.annotations?.Common?.Label?.toString() ?? aggregatedProperty.AggregatableProperty.$target?.annotations?.Common?.Label?.toString() ?? "";
225
227
  setChartMeasureAttributes(chart.MeasureAttributes, entitySetPath, dynamicMeasure, chartBlock);
226
228
  measures.push(dynamicMeasure);
227
229
  }
@@ -604,7 +606,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
604
606
  id: item.id,
605
607
  propertyKey: prefix + item.key,
606
608
  type: type,
607
- label: resolveBindingString(item.label, "string"),
609
+ label: item.label,
608
610
  role: item.role
609
611
  });
610
612
  }
@@ -1344,4 +1346,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/merge",
1344
1346
  }
1345
1347
  return _exports;
1346
1348
  }, false);
1347
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtZWFzdXJlUm9sZSIsInBlcnNvbmFsaXphdGlvblZhbHVlcyIsImNyZWF0ZUNoYXJ0RGVmaW5pdGlvbiIsImNoYXJ0QmxvY2siLCJjb252ZXJ0ZXJDb250ZXh0IiwiY29udGV4dE9iamVjdFBhdGgiLCJjb250cm9sUGF0aCIsInZpc3VhbGl6YXRpb25QYXRoIiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsInZpc3VhbGl6YXRpb25zIiwiX21ldGFQYXRoQ29udGV4dCIsImdldE9iamVjdCIsIiRUeXBlIiwiVmlzdWFsaXphdGlvbnMiLCJQcmVzZW50YXRpb25WYXJpYW50IiwibGVuZ3RoIiwiY2hlY2tDaGFydEV4aXN0cyIsInZpc3VhbGl6YXRpb25EZWZpbml0aW9uIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCIsInVzZUNvbmRlbnNlZExheW91dCIsImlzTWFjcm9Pck11bHRpcGxlVmlldyIsInNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uIiwic29tZSIsInZpc3VhbGl6YXRpb24iLCJpbmNsdWRlcyIsIiRBbm5vdGF0aW9uUGF0aCIsImdldENvbnRlbnRJZCIsIm1hY3JvSWQiLCJnZXRFeHRyYVBhcmFtcyIsImV4dHJhUGFyYW1zIiwiY3VzdG9tQWN0aW9ucyIsImFjdGlvbk92ZXJmbG93R3JvdXBzIiwiYWN0aW9ucyIsIk9iamVjdCIsInZhbHVlcyIsImZvckVhY2giLCJhY3Rpb24iLCJpc0EiLCJrZXkiLCJnZXRBY3Rpb25Qcm9wZXJ0aWVzIiwidGV4dCIsInBsYWNlbWVudCIsImFuY2hvciIsIm1hcCIsIl8iLCJpbmRleCIsImdyb3VwIiwib3ZlcmZsb3dHcm91cCIsImFjdCIsImFjdGlvbktleSIsImNvbmNhdCIsInByZXNzIiwicmVxdWlyZXNTZWxlY3Rpb24iLCJlbmFibGVkIiwidW5kZWZpbmVkIiwidG9TdHJpbmciLCJzaG93U2VwYXJhdG9yIiwib3ZlcmZsb3dHcm91cHMiLCJwb3NpdGlvbiIsIm1lbnUiLCJhY3Rpb25Qcm9wZXJ0aWVzIiwiX19ub1dyYXAiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImRhdGEiLCJjb250ZXh0UGF0aCIsInVpZCIsImFjdGlvbnNNb2RlbCIsIkpTT05Nb2RlbCIsInNldFByb3BlcnR5IiwiZ2V0Q2hhcnRNZWFzdXJlcyIsImNoYXJ0QW5ub3RhdGlvblBhdGgiLCJjaGFydERlZmluaXRpb24iLCJhbm5vdGF0aW9uUGF0aCIsInNwbGl0IiwiZmlsdGVyIiwiaXRlbSIsInBvcyIsImluZGV4T2YiLCJyZXBsYWNlQWxsIiwib0NoYXJ0IiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiX21ldGFNb2RlbCIsIl9jb250ZXh0IiwidGFyZ2V0T2JqZWN0IiwibWVhc3VyZXMiLCJhbm5vUGF0aCIsImdldFBhdGgiLCJjaGFydE1lYXN1cmVzIiwiTWVhc3VyZXMiLCJjaGFydER5bmFtaWNNZWFzdXJlcyIsIkR5bmFtaWNNZWFzdXJlcyIsImVudGl0eVNldFBhdGgiLCJyZXBsYWNlIiwidHJhbnNBZ2dyZWdhdGlvbnMiLCJ0cmFuc0FnZyIsImN1c3RvbUFnZ3JlZ2F0aW9ucyIsImN1c3RvbUFnZyIsImNvbnRhaW5zQWdncmVnYXRlZFByb3BlcnR5IiwiY29udGFpbnNUcmFuc0FnZ0luTWVhc3VyZXMiLCJMb2ciLCJ3YXJuaW5nIiwiaXNDdXN0b21BZ2dyZWdhdGVJc01lYXN1cmUiLCJvQ2hhcnRNZWFzdXJlIiwib0N1c3RvbUFnZ01lYXN1cmUiLCJnZXRDdXN0b21BZ2dNZWFzdXJlIiwiRXJyb3IiLCJkeW5hbWljTWVhc3VyZSIsImdldER5bmFtaWNNZWFzdXJlcyIsImNoYXJ0TWVhc3VyZSIsInZhbHVlIiwiY3VzdG9tQWdnTWVhc3VyZSIsIm1lYXN1cmVUeXBlIiwic2V0Q3VzdG9tQWdnTWVhc3VyZSIsInNldFRyYW5zQWdnTWVhc3VyZSIsInNldENoYXJ0TWVhc3VyZUF0dHJpYnV0ZXMiLCJfY2hhcnQiLCJNZWFzdXJlQXR0cmlidXRlcyIsIm1lYXN1cmVzTW9kZWwiLCIkJHZhbHVlQXNQcm9taXNlIiwibWVhc3VyZSIsImVycm9yIiwicm9sZSIsImxhYmVsIiwicHJvcGVydHlQYXRoIiwicHVzaCIsInRyYW5zQWdnTWVhc3VyZSIsIm5hbWUiLCJhZ2dyZWdhdGlvbk1ldGhvZCIsImNoYXJ0RHluYW1pY01lYXN1cmUiLCJjaGFydCIsImFnZ3JlZ2F0ZWRQcm9wZXJ0eSIsInN0YXJ0c1dpdGgiLCJOYW1lIiwiQWdncmVnYXRhYmxlUHJvcGVydHkiLCJBZ2dyZWdhdGlvbk1ldGhvZCIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJMYWJlbCIsIiR0YXJnZXQiLCJtZWFzdXJlQXR0cmlidXRlcyIsIm1lYXN1cmVBdHRyaWJ1dGUiLCJfc2V0Q2hhcnRNZWFzdXJlQXR0cmlidXRlIiwicGF0aCIsIkR5bmFtaWNNZWFzdXJlIiwiTWVhc3VyZSIsIm1lYXN1cmVBdHRyaWJ1dGVEYXRhUG9pbnQiLCJEYXRhUG9pbnQiLCJSb2xlIiwiZGF0YVBvaW50Iiwic2V0TWVhc3VyZVJvbGUiLCJzZXRNZWFzdXJlRGF0YVBvaW50IiwiY3JlYXRlRGF0YVBvaW50UHJvcGVydHkiLCJvRGF0YVBvaW50QW5ubyIsIm9EYXRhUG9pbnQiLCJUYXJnZXRWYWx1ZSIsInRhcmdldFZhbHVlIiwiJFBhdGgiLCJGb3JlY2FzdFZhbHVlIiwiZm9yZUNhc3RWYWx1ZSIsIm9Dcml0aWNhbGl0eSIsIkNyaXRpY2FsaXR5IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJDYWxjdWxhdGVkIiwiU3RhdGljIiwiJEVudW1NZW1iZXIiLCJDcml0aWNhbGl0eUNhbGN1bGF0aW9uIiwib1RocmVzaG9sZHMiLCJiQ29uc3RhbnQiLCJidWlsZFRocmVzaG9sZHMiLCJDb25zdGFudFRocmVzaG9sZHMiLCJEeW5hbWljVGhyZXNob2xkcyIsImNyaXRpY2FsaXR5IiwidGhyZXNob2xkcyIsImNyaXRpY2FsaXR5Q2FsY3VsYXRpb24iLCJrZXlzIiwiSW1wcm92ZW1lbnREaXJlY3Rpb24iLCJkeW5hbWljVGhyZXNob2xkcyIsIm9uZVN1cHBsaWVkIiwidXNlZE1lYXN1cmVzIiwiY29uc3RhbnRUaHJlc2hvbGRzIiwiaW5pdGlhbGlzZVRocmVzaG9sZHMiLCJwcm9jZXNzVGhyZXNob2xkcyIsIkFnZ3JlZ2F0aW9uTGV2ZWxzIiwicHJvY2Vzc0FnZ3JlZ2F0aW9uTGV2ZWxGb3JUaHJlc2hvbGRzIiwib0FnZ3JlZ2F0aW9uTGV2ZWwiLCJWaXNpYmxlRGltZW5zaW9ucyIsInNLZXkiLCJwcm9jZXNzQWdncmVnYXRpb25MZXZlbHNGb3JDb25zdGFudFRocmVzaG9sZHMiLCJhZ2dyZWdhdGlvbkxldmVsIiwiYWdncmVnYXRpb25MZXZlbEluZm8iLCJ2aXNpYmxlRGltZW5zaW9ucyIsIkFnZ3JlZ2F0aW9uTGV2ZWwiLCIkUHJvcGVydHlQYXRoIiwiVmFsdWUiLCJDaGFydEhlbHBlciIsImZvcm1hdEpTT05Ub1N0cmluZyIsImdldERlcGVuZGVudHMiLCJjaGFydENvbnRleHQiLCJfY29tbWFuZEFjdGlvbnMiLCJjb21tYW5kQWN0aW9uIiwiZ2V0QWN0aW9uQ29tbWFuZCIsImNoZWNrUGVyc29uYWxpemF0aW9uSW5DaGFydFByb3BlcnRpZXMiLCJwZXJzb25hbGl6YXRpb24iLCJfcGVyc29uYWxpemF0aW9uIiwiam9pbiIsInZlcmlmeVZhbGlkUGVyc29uYWxpemF0aW9uIiwidmFsaWQiLCJzcGxpdEFycmF5IiwiYWNjZXB0ZWRWYWx1ZXMiLCJhcnJheUVsZW1lbnQiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsInZhcmlhbnRNYW5hZ2VtZW50IiwiY3JlYXRlVmFyaWFudE1hbmFnZW1lbnQiLCJfanN4IiwiVmFyaWFudE1hbmFnZW1lbnQiLCJpZCIsImdlbmVyYXRlIiwiX2Jsb2NrSWQiLCJmb3IiLCJzaG93U2V0QXNEZWZhdWx0IiwiaGVhZGVyTGV2ZWwiLCJzZWxlY3QiLCJldmVudCIsImZpcmVWYXJpYW50U2VsZWN0ZWQiLCJzYXZlIiwiZmlyZVZhcmlhbnRTYXZlZCIsImdldFBlcnNpc3RlbmNlUHJvdmlkZXIiLCJQZXJzaXN0ZW5jZVByb3ZpZGVyIiwicHVzaEFjdGlvbkNvbW1hbmQiLCJhY3Rpb25Db250ZXh0IiwiZGF0YUZpZWxkIiwiY2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAiLCJvbkV4ZWN1dGVBY3Rpb24iLCJnZXRQcmVzc0V2ZW50Rm9yRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uIiwib25FeGVjdXRlSUJOIiwiQ29tbW9uSGVscGVyIiwiZ2V0UHJlc3NIYW5kbGVyRm9yRGF0YUZpZWxkRm9ySUJOIiwib25FeGVjdXRlTWFuaWZlc3QiLCJidWlsZEFjdGlvbldyYXBwZXIiLCJkYXRhRmllbGRDb250ZXh0IiwiZGF0YUZpZWxkQWN0aW9uIiwiZ2V0QWN0aW9uQ29udGV4dCIsImlzQm91bmRQYXRoIiwiZ2V0UGF0aFRvQm91bmRBY3Rpb25PdmVybG9hZCIsImlzQm91bmQiLCJlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZSIsImdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImNvbnRleHQiLCJpc0FjdGlvbkVuYWJsZWQiLCJpc0RhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbkVuYWJsZWQiLCIkSXNCb3VuZCIsIkFjdGlvbiIsImVuYWJsZU9uU2VsZWN0IiwiaXNJQk5FbmFibGVkIiwiUmVxdWlyZXNDb250ZXh0IiwiY29tbWFuZEVuYWJsZWQiLCJ0eXBlIiwiYWN0aW9uQ29tbWFuZCIsIkNvbW1hbmRFeGVjdXRpb24iLCJleGVjdXRlIiwiY29tbWFuZEV4ZWN1dGUiLCJ2aXNpYmxlIiwiZ2V0VmlzaWJsZSIsImNvbW1hbmQiLCJJc0JvdW5kIiwidmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsImdldFNvdXJjZSIsImNvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwic0ludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsInBhcmFtcyIsImNvbnRleHRzIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRQcm9wZXJ0eSIsImludm9jYXRpb25Hcm91cGluZyIsImNvbnRyb2xJZCIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJlZGl0RmxvdyIsImludm9rZUFjdGlvbiIsIm5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibmF2aWdhdGlvbkNvbnRleHRzIiwiTWFwcGluZyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwibmF2aWdhdGUiLCJTZW1hbnRpY09iamVjdCIsIkZQTUhlbHBlciIsImFjdGlvbldyYXBwZXIiLCJoYW5kbGVyTW9kdWxlIiwiaGFuZGxlck1ldGhvZCIsImdldEl0ZW1zIiwiZGltZW5zaW9ucyIsIkRpbWVuc2lvbnMiLCJmb3JtYXREaW1lbnNpb25zIiwiX2NoYXJ0Q29udGV4dCIsImRpbWVuc2lvbiIsImdldEl0ZW0iLCJmb3JtYXRNZWFzdXJlcyIsInByZWZpeCIsIk1kY0NoYXJ0SXRlbSIsInByb3BlcnR5S2V5IiwiZ2V0VG9vbGJhckFjdGlvbnMiLCJnZXRBY3Rpb25zIiwib25TZWdtZW50ZWRCdXR0b25QcmVzc2VkIiwiZ2V0U2VnbWVudGVkQnV0dG9uIiwiaXNJbnNpZ2h0c0VuYWJsZWQiLCJnZXRTdGFuZGFyZEFjdGlvbnMiLCJpc0luc2lnaHRzVmlzaWJsZSIsIkFjdGlvblRvb2xiYXJBY3Rpb24iLCJjaGlsZHJlbiIsIkJ1dHRvbiIsIm9uQWRkQ2FyZFRvSW5zaWdodHNQcmVzc2VkIiwibGF5b3V0RGF0YSIsIk92ZXJmbG93VG9vbGJhckxheW91dERhdGEiLCJwcmlvcml0eSIsInJlbW92ZU1lbnVJdGVtcyIsImNoYXJ0QWN0aW9ucyIsImFjdGlvbnNXaXRoT3ZlcmZsb3dQcm90ZWN0aW9uIiwiQWN0aW9uSGVscGVyIiwiZW5zdXJlUHJpbWFyeUFjdGlvbk5ldmVyT3ZlcmZsb3dzIiwiZ2V0QWN0aW9uIiwiZ2V0U2VwYXJhdG9yIiwiaGFzT3duUHJvcGVydHkiLCJnZXRDdXN0b21BY3Rpb25zIiwiaWR4Iiwic3BsaWNlIiwiYWN0aW9uRW5hYmxlZCIsImdldEFjdGlvblRvb2xiYXJBY3Rpb24iLCJ1bml0dGVzdGlkIiwiYXJpYUhhc1BvcHVwIiwiZ2V0QWN0aW9uVG9vbGJhck1lbnVBY3Rpb24iLCJ1c2VEZWZhdWx0QWN0aW9uT25seSIsIkRlZmF1bHRBY3Rpb25IYW5kbGVyIiwiZ2V0VXNlRGVmYXVsdEFjdGlvbk9ubHkiLCJidXR0b25Nb2RlIiwiZ2V0QnV0dG9uTW9kZSIsImRlZmF1bHRBY3Rpb24iLCJnZXRNZW51SXRlbUZyb21NZW51IiwibWVudUl0ZW1BY3Rpb24iLCJwcmVzc0hhbmRsZXIiLCJub1dyYXAiLCJmdW5jdGlvbk5hbWUiLCJzZWxlY3RlZENvbnRleHRzIiwiTWVudUl0ZW0iLCJwcm9wcyIsImFNZW51SXRlbXMiLCJpc0FJT3BlcmF0aW9uIiwiaXNNZW51QUlPcGVyYXRpb24iLCJNZW51QnV0dG9uIiwibWVudVBvc2l0aW9uIiwiRG9jayIsIkJlZ2luQm90dG9tIiwiaWNvbiIsImFpSWNvbiIsImFyaWFEZXNjcmliZWRCeSIsImdldElkIiwiTWVudSIsImlzTWVudUl0ZW0iLCJnZXROYXZpZ2F0aW9uQWN0aW9ucyIsImdldEFubm90YXRpb25BY3Rpb25zIiwibWVudUl0ZW1zIiwibWVudUFjdGlvbiIsIlRvb2xiYXJTZXBhcmF0b3IiLCJhY3Rpb25PYmplY3QiLCJnZXRBbm5vdGF0aW9uQWN0aW9uc0VuYWJsZWQiLCJkYXRhRmllbGRNb2RlbE9iamVjdFBhdGgiLCJpc0RhdGFNb2RlbE9iamVjdFBhdGhGb3JBY3Rpb25XaXRoRGlhbG9nIiwidG9vbGJhckFjdGlvbiIsInByZXNzRXZlbnQiLCJkaXNhYmxlU3RyaWN0SGFuZGxpbmciLCJidWlsZEFjdGlvbiIsImdldEFjdGlvblByZXNzIiwiYWN0aW9uUHJlc3MiLCJnZXRDdXN0b21BY3Rpb25QcmVzcyIsImdldEFjdGlvblByZXNzV2l0aEFubm90YXRpb25QYXRoIiwiZ2V0U3RhbmRhcmRBY3Rpb25QcmVzc1dpdGhOb0NvbW1hbmQiLCJsYXlvdXRJbmZvcm1hdGlvbiIsImFnZ3JlZ2F0aW9uTmFtZSIsImFsaWdubWVudCIsIlNlZ21lbnRlZEJ1dHRvbiIsInNlbGVjdGlvbkNoYW5nZSIsImZpcmVTZWdtZW50ZWRCdXR0b25QcmVzc2VkIiwibWVyZ2UiLCJnZXRQYXJhbWV0ZXJzIiwic2VsZWN0ZWRLZXkiLCJnZXRTZWxlY3RlZEtleSIsIm5vdEVxdWFsIiwicGF0aEluTW9kZWwiLCJpdGVtcyIsImdldFNlZ21lbnRlZEJ1dHRvbkl0ZW1zIiwic2VnbWVudGVkQnV0dG9uSXRlbXMiLCJpc0Rlc2t0b3AiLCJnZXRTZWdtZW50ZWRCdXR0b25JdGVtIiwidG9vbHRpcCIsIlNlZ21lbnRlZEJ1dHRvbkl0ZW0iLCJnZXRWaXN1YWxpemF0aW9uUGF0aCIsIm1ldGFQYXRoIiwidGVybSIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJnZXRWaXN1YWxpemF0aW9uc0Zyb21Bbm5vdGF0aW9uIiwiY2hhcnRWaXoiLCJmaW5kIiwidml6IiwiaGlkZGVuUGF0aENvbnRleHQiLCJnZXRIaWRkZW5QYXRoRXhwcmVzc2lvbkZvclRhYmxlQWN0aW9uc0FuZElCTiIsImdldENoYXJ0Q29udmVydGVyQ29udGV4dCIsInByb3BlcnRpZXMiLCJvcmlnaW5hbFZpZXdEYXRhIiwiZGlhZ25vc3RpY3MiLCJ2aWV3RGF0YSIsImFzc2lnbiIsInJlc291cmNlTW9kZWwiLCJhcHBDb21wb25lbnQiLCJkZWVwQ2xvbmUiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsInJlbGF0aXZlUGF0aCIsImdldFRhcmdldE9iamVjdFBhdGgiLCJjb250ZXh0TG9jYXRpb24iLCJlbnRpdHlTZXROYW1lIiwidGFyZ2V0RW50aXR5U2V0IiwiZW50aXR5U2V0IiwiQ29udmVydGVyQ29udGV4dCIsImNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyIsInN0YXJ0aW5nRW50aXR5U2V0IiwiTWFuaWZlc3RXcmFwcGVyIiwiZ2V0Q29udmVydGVyQ29udGV4dCIsImluaXRpYWxDb252ZXJ0ZXJDb250ZXh0IiwibW9kaWZ5SWRlbnRpZmllcnMiLCJfYXBwbHlJZFRvQ29udGVudCIsIl9jb250ZW50SWQiLCJpbml0aWFsaXNlIiwibWV0YUNvbnRleHRQYXRoIiwiZ2V0TWV0YVBhdGhPYmplY3QiLCJfcmVzb2x2ZWRDb250ZXh0UGF0aCIsIl9nZXRPd25lciIsInByZXByb2Nlc3NvckNvbnRleHQiLCJtb2RlbHMiLCJtZXRhTW9kZWwiLCJnZXRDb250ZXh0UGF0aCIsInZpZXdDb25maWciLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsImlzTXVsdGlUYWJzIiwicGF0aHMiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiQW5hbHl0aWNhbExpc3RQYWdlIiwiZ2V0VWlDaGFydCIsIl9ibG9ja0FjdGlvbnMiLCJjb2xsZWN0aW9uIiwibmF2aWdhdGlvblBhdGgiLCJhdXRvQmluZE9uSW5pdCIsInZpelByb3BlcnRpZXMiLCJnZXRGaWx0ZXJCYXIiLCJkcmFmdFN1cHBvcnRlZCIsIk1vZGVsSGVscGVyIiwiaXNNZXRhUGF0aERyYWZ0U3VwcG9ydGVkIiwiX2NoYXJ0VHlwZSIsImZvcm1hdENoYXJ0VHlwZSIsIkNoYXJ0VHlwZSIsImNvbW1hbmRBY3Rpb25zIiwicHJlc2VudGF0aW9uUGF0aCIsImNyZWF0ZVByZXNlbnRhdGlvblBhdGhDb250ZXh0IiwiX3NvcnRDb25kaXRpb25zIiwiZ2V0U29ydENvbmRpdGlvbnMiLCJhcHBseVN1cHBvcnRlZCIsImNoYXJ0QWN0aW9uc0NvbnRleHQiLCJBY3Rpb25zIiwidGFyZ2V0Q29sbGVjdGlvblBhdGgiLCJnZXRUYXJnZXRDb2xsZWN0aW9uUGF0aCIsInRhcmdldENvbGxlY3Rpb25QYXRoQ29udGV4dCIsImFjdGlvbnNPYmplY3QiLCJjb252ZXJ0ZWRUeXBlcyIsInJlc29sdmVQYXRoIiwidGFyZ2V0IiwiX2N1c3RvbURhdGEiLCJlbnRpdHlUeXBlIiwicGFyc2UiLCJtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyIsImdldE11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zIiwic2VnbWVudGVkQnV0dG9uSWQiLCJtdWx0aVZpZXdzIiwic2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGgiLCJjaGFydERpbWVuc2lvbktleUFuZFJvbGUiLCJjaGFydE1lYXN1cmVLZXlBbmRSb2xlIiwiaXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0Iiwic3Vic3RyaW5nIiwiZmlsdGVyQmFyIiwiRWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiZ2V0RGVsZWdhdGUiLCJjaGFydERlbGVnYXRlIiwicGF5bG9hZCIsInNlbGVjdGlvbk1vZGUiLCJ0b1VwcGVyQ2FzZSIsImNoYXJ0Q29udGV4dFBhdGgiLCJwYXJhbWV0ZXJzIiwiJCRncm91cElkIiwiZ2V0Q3VzdG9tRGF0YSIsIkN1c3RvbURhdGEiLCJnZXROb0RhdGEiLCJJbGx1c3RyYXRlZE1lc3NhZ2UiLCJpbGx1c3RyYXRpb25TaXplIiwiSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZSIsIkF1dG8iLCJpbGx1c3RyYXRpb25UeXBlIiwiSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSIsIkJlZm9yZVNlYXJjaCIsInRpdGxlIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJkZXNjcmlwdGlvbiIsImVuYWJsZURlZmF1bHRUaXRsZUFuZERlc2NyaXB0aW9uIiwiZW5hYmxlVmVydGljYWxSZXNwb25zaXZlbmVzcyIsImdldE1kY0NoYXJ0VGVtcGxhdGUiLCJGbGV4SXRlbURhdGEiLCJncm93RmFjdG9yIiwic2hyaW5rRmFjdG9yIiwiTWRjQ2hhcnQiLCJiaW5kaW5nIiwiaW50ZXJuYWwiLCJjaGFydFR5cGUiLCJzb3J0Q29uZGl0aW9ucyIsImhlYWRlciIsIlRpdGxlIiwiaGVhZGVyVmlzaWJsZSIsIm1pbkhlaWdodCIsIkRldmljZSIsInN5c3RlbSIsInBob25lIiwiaGVpZ2h0Iiwid2lkdGgiLCJoZWFkZXJTdHlsZSIsInAxM25Nb2RlIiwibm9EYXRhVGV4dCIsImRlbGVnYXRlIiwiY3VzdG9tRGF0YSIsImRlcGVuZGVudHMiLCJnZXRBY2NBSUFjdGlvbkludmlzaWJsZVRleHQiLCJ2YXJpYW50Iiwibm9EYXRhIiwiX2V4cG9ydHMiLCJpbnZpc2libGVUZXh0QWNjQUlBY3Rpb24iLCJJbnZpc2libGVUZXh0IiwidG9TdGF0aWMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1kY0NoYXJ0VGVtcGxhdGUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJpbWl0aXZlVHlwZSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFnZ3JlZ2F0ZWRQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQW5hbHl0aWNzXCI7XG5pbXBvcnQgeyBBbmFseXRpY3NBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FuYWx5dGljc1wiO1xuaW1wb3J0IHsgQ29yZUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29yZVwiO1xuaW1wb3J0IHR5cGUge1xuXHRDaGFydE1lYXN1cmVBdHRyaWJ1dGVUeXBlLFxuXHRDaGFydE1lYXN1cmVSb2xlVHlwZSxcblx0Q2hhcnQgYXMgQ2hhcnRUeXBlLFxuXHRDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZSxcblx0Q3JpdGljYWxpdHlUeXBlLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YVBvaW50LFxuXHRJbXByb3ZlbWVudERpcmVjdGlvblR5cGUsXG5cdExldmVsVGhyZXNob2xkc1R5cGUsXG5cdFByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgT3BlcmF0aW9uR3JvdXBpbmdUeXBlLCBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQge1xuXHRub3RFcXVhbCxcblx0cGF0aEluTW9kZWwsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nLFxuXHR0eXBlIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0dHlwZSBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvblxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgQ29tbWFuZFByb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uUGFyYW1ldGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IENvbW1hbmRFeGVjdXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQmFzZU1hbmlmZXN0U2V0dGluZ3MsIENvbnRyb2xDb25maWd1cmF0aW9uLCBPdmVyZmxvd0dyb3Vwc0NvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBpc0RhdGFNb2RlbE9iamVjdFBhdGhGb3JBY3Rpb25XaXRoRGlhbG9nIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQge1xuXHRhaUljb24sXG5cdGlzTWVudUFJT3BlcmF0aW9uLFxuXHR0eXBlIEFubm90YXRpb25BY3Rpb24sXG5cdHR5cGUgQmFzZUFjdGlvbixcblx0dHlwZSBDdXN0b21BY3Rpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydFAxM25UeXBlLCBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgVmlzdWFsaXphdGlvbkFuZFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB7XG5cdGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbixcblx0Z2V0VmlzdWFsaXphdGlvbnNGcm9tQW5ub3RhdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCBGUE1IZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBWaWV3RGF0YSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9UZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIERpYWdub3N0aWNzIGZyb20gXCJzYXAvZmUvY29yZS9zdXBwb3J0L0RpYWdub3N0aWNzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLCBnZXRUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIEFjdGlvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIEFjdGlvbkdyb3VwIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0FjdGlvbkdyb3VwXCI7XG5pbXBvcnQgdHlwZSB7IEJ1dHRvbiRQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRmxleEl0ZW1EYXRhIGZyb20gXCJzYXAvbS9GbGV4SXRlbURhdGFcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2UgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZVNpemUgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVNpemVcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IE1lbnVCdXR0b24gZnJvbSBcInNhcC9tL01lbnVCdXR0b25cIjtcbmltcG9ydCBNZW51SXRlbSBmcm9tIFwic2FwL20vTWVudUl0ZW1cIjtcbmltcG9ydCBPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIGZyb20gXCJzYXAvbS9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXCI7XG5pbXBvcnQgdHlwZSB7IFNlZ21lbnRlZEJ1dHRvbiRTZWxlY3Rpb25DaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvbS9TZWdtZW50ZWRCdXR0b25cIjtcbmltcG9ydCBTZWdtZW50ZWRCdXR0b24gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvblwiO1xuaW1wb3J0IFNlZ21lbnRlZEJ1dHRvbkl0ZW0gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvbkl0ZW1cIjtcbmltcG9ydCBUb29sYmFyU2VwYXJhdG9yIGZyb20gXCJzYXAvbS9Ub29sYmFyU2VwYXJhdG9yXCI7XG5pbXBvcnQgdHlwZSB7IE92ZXJmbG93VG9vbGJhclByaW9yaXR5IH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCBEZXZpY2UgZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kRXhlY3V0aW9uJEV4ZWN1dGVFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgQ3VzdG9tRGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IEVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBJbnZpc2libGVUZXh0IGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVUZXh0XCI7XG5pbXBvcnQgeyBEb2NrIH0gZnJvbSBcInNhcC91aS9jb3JlL1BvcHVwXCI7XG5pbXBvcnQgdHlwZSB7IFZhcmlhbnRNYW5hZ2VtZW50JFNhdmVFdmVudCwgVmFyaWFudE1hbmFnZW1lbnQkU2VsZWN0RXZlbnQgfSBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgVmFyaWFudE1hbmFnZW1lbnQgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TWFuYWdlbWVudFwiO1xuaW1wb3J0IE1kY0NoYXJ0IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IE1kY0NoYXJ0SXRlbSBmcm9tIFwic2FwL3VpL21kYy9jaGFydC9JdGVtXCI7XG5pbXBvcnQgUGVyc2lzdGVuY2VQcm92aWRlciBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1BlcnNpc3RlbmNlUHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRXhwYW5kUGF0aFR5cGUsIE1ldGFNb2RlbEVudW0sIE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBDaGFydEJsb2NrIGZyb20gXCIuLi9DaGFydFwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcIi4uL01hY3JvQVBJXCI7XG5pbXBvcnQgQWN0aW9uSGVscGVyIGZyb20gXCIuLi9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IERlZmF1bHRBY3Rpb25IYW5kbGVyIGZyb20gXCIuLi9pbnRlcm5hbC9oZWxwZXJzL0RlZmF1bHRBY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgQ2hhcnRIZWxwZXIgZnJvbSBcIi4vQ2hhcnRIZWxwZXJcIjtcblxuY29uc3QgbWVhc3VyZVJvbGU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRNZWFzdXJlUm9sZVR5cGUvQXhpczFcIjogXCJheGlzMVwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0TWVhc3VyZVJvbGVUeXBlL0F4aXMyXCI6IFwiYXhpczJcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydE1lYXN1cmVSb2xlVHlwZS9BeGlzM1wiOiBcImF4aXMzXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRNZWFzdXJlUm9sZVR5cGUvQXhpczRcIjogXCJheGlzNFwiXG59O1xudHlwZSBFeHRlbmRlZEFjdGlvbkdyb3VwID0gQWN0aW9uR3JvdXAgJiB7IG1lbnVDb250ZW50QWN0aW9ucz86IFJlY29yZDxzdHJpbmcsIEFjdGlvbj4gfTtcbnR5cGUgQ2hhcnRQYXlsb2FkID0ge1xuXHRjaGFydENvbnRleHRQYXRoOiBzdHJpbmc7XG5cdHBhcmFtZXRlcnM6IG9iamVjdDtcblx0c2VsZWN0aW9uTW9kZTogc3RyaW5nO1xufTtcbnR5cGUgQ2hhcnREZWxlZ2F0ZSA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRwYXlsb2FkOiBDaGFydFBheWxvYWQ7XG59O1xuZXhwb3J0IHR5cGUgQWN0aW9uT3JBY3Rpb25Hcm91cCA9IFJlY29yZDxzdHJpbmcsIEFjdGlvbiB8IEV4dGVuZGVkQWN0aW9uR3JvdXA+O1xuZXhwb3J0IHR5cGUgQ3VzdG9tQW5kQWN0aW9uID0gQ3VzdG9tQWN0aW9uICYgKEFjdGlvbiB8IEFjdGlvbkdyb3VwKTtcbmV4cG9ydCB0eXBlIEN1c3RvbVRvb2xiYXJNZW51QWN0aW9uID0ge1xuXHRpZDogc3RyaW5nO1xuXHR0ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHZpc2libGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0ZW5hYmxlZD86IHN0cmluZyB8IGJvb2xlYW47XG5cdHVzZURlZmF1bHRBY3Rpb25Pbmx5PzogYm9vbGVhbjtcblx0YnV0dG9uTW9kZT86IHN0cmluZztcblx0ZGVmYXVsdEFjdGlvbj86IHN0cmluZztcblx0YWN0aW9ucz86IEN1c3RvbUFjdGlvbjtcblx0cHJpb3JpdHk/OiBPdmVyZmxvd1Rvb2xiYXJQcmlvcml0eTtcblx0Z3JvdXA/OiBudW1iZXI7XG5cdG92ZXJmbG93R3JvdXA/OiBudW1iZXI7XG59O1xuXG5lbnVtIHBlcnNvbmFsaXphdGlvblZhbHVlcyB7XG5cdFNvcnQgPSBcIlNvcnRcIixcblx0VHlwZSA9IFwiVHlwZVwiLFxuXHRJdGVtID0gXCJJdGVtXCIsXG5cdEZpbHRlciA9IFwiRmlsdGVyXCJcbn1cblxuZXhwb3J0IHR5cGUgTWVhc3VyZVR5cGUgPSB7XG5cdGlkPzogc3RyaW5nO1xuXHRrZXk/OiBzdHJpbmc7XG5cdHJvbGU/OiBzdHJpbmc7XG5cdHByb3BlcnR5UGF0aD86IHN0cmluZztcblx0YWdncmVnYXRpb25NZXRob2Q/OiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+O1xuXHR2YWx1ZT86IHN0cmluZztcblx0ZGF0YVBvaW50Pzogc3RyaW5nO1xuXHRuYW1lPzogc3RyaW5nO1xufTtcblxudHlwZSBEaW1lbnNpb25UeXBlID0ge1xuXHRpZD86IHN0cmluZztcblx0a2V5Pzogc3RyaW5nO1xuXHRyb2xlPzogc3RyaW5nO1xuXHRwcm9wZXJ0eVBhdGg/OiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+O1xuXHR2YWx1ZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIENvbW1hbmRBY3Rpb24gPSB7XG5cdGFjdGlvbkNvbnRleHQ6IENvbnRleHQ7XG5cdG9uRXhlY3V0ZUFjdGlvbjogc3RyaW5nO1xuXHRvbkV4ZWN1dGVJQk4/OiBzdHJpbmc7XG5cdG9uRXhlY3V0ZU1hbmlmZXN0OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG59O1xuXG50eXBlIFRvb2xCYXJBY3Rpb24gPSB7XG5cdHVuaXR0ZXN0aWQ6IHN0cmluZztcblx0aWQ/OiBzdHJpbmc7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdGFyaWFIYXNQb3B1cD86IHN0cmluZztcblx0cHJlc3M/OiBzdHJpbmc7XG5cdGVuYWJsZWQ/OiBzdHJpbmcgfCBib29sZWFuO1xuXHR2aXNpYmxlOiBzdHJpbmcgfCBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ2hhcnRDdXN0b21EYXRhID0ge1xuXHR0YXJnZXRDb2xsZWN0aW9uUGF0aDogc3RyaW5nO1xuXHRlbnRpdHlTZXQ6IHN0cmluZztcblx0ZW50aXR5VHlwZTogc3RyaW5nO1xuXHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZztcblx0bXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnM6IHN0cmluZztcblx0c2VnbWVudGVkQnV0dG9uSWQ6IHN0cmluZztcblx0Y3VzdG9tQWdnOiBvYmplY3Q7XG5cdHRyYW5zQWdnOiBvYmplY3Q7XG5cdGFwcGx5U3VwcG9ydGVkOiBvYmplY3Q7XG5cdHZpelByb3BlcnRpZXM6IG9iamVjdDtcblx0ZHJhZnRTdXBwb3J0ZWQ/OiBib29sZWFuO1xuXHRtdWx0aVZpZXdzPzogYm9vbGVhbjtcblx0c2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGg/OiBvYmplY3Q7XG5cdGNoYXJ0RGltZW5zaW9uS2V5QW5kUm9sZT86IG9iamVjdDtcblx0Y2hhcnRNZWFzdXJlS2V5QW5kUm9sZT86IG9iamVjdDtcbn07XG5cbmV4cG9ydCB0eXBlIENoYXJ0Q29udGV4dE9iamVjdFBhdGggPSBDaGFydFR5cGUgfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgUHJlc2VudGF0aW9uVmFyaWFudDtcblxudHlwZSBBY3Rpb25Qcm9wZXJ0aWVzID0ge1xuXHRrZXk6IHN0cmluZztcblx0dGV4dDogc3RyaW5nO1xuXHRfX25vV3JhcDogYm9vbGVhbjtcblx0cHJlc3M6IHN0cmluZyB8IG51bGw7XG5cdHJlcXVpcmVzU2VsZWN0aW9uOiBib29sZWFuO1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHRwb3NpdGlvbj86IG9iamVjdDtcblx0bWVudT86IHN0cmluZ1tdO1xuXHRncm91cD86IG51bWJlcjtcblx0b3ZlcmZsb3dHcm91cD86IG51bWJlcjtcbn07XG5cbnR5cGUgVG9vbGJhckFjdGlvbiA9IE1lbnVJdGVtIHwgQWN0aW9uVG9vbGJhckFjdGlvbiB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gY3JlYXRlQ2hhcnREZWZpbml0aW9uKFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxDaGFydFR5cGUgfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdGNvbnRyb2xQYXRoOiBzdHJpbmdcbik6IENoYXJ0VmlzdWFsaXphdGlvbiB7XG5cdGxldCB2aXN1YWxpemF0aW9uUGF0aCA9IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoY29udGV4dE9iamVjdFBhdGgpO1xuXHRsZXQgdmlzdWFsaXphdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5bXSA9IFtdO1xuXHRpZiAoY2hhcnRCbG9jay5fbWV0YVBhdGhDb250ZXh0Py5nZXRPYmplY3QoKT8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlByZXNlbnRhdGlvblZhcmlhbnRUeXBlKSB7XG5cdFx0dmlzdWFsaXphdGlvbnMgPSBjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQuZ2V0T2JqZWN0KCkuVmlzdWFsaXphdGlvbnM7XG5cdH0gZWxzZSBpZiAoY2hhcnRCbG9jay5fbWV0YVBhdGhDb250ZXh0Py5nZXRPYmplY3QoKT8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlKSB7XG5cdFx0dmlzdWFsaXphdGlvbnMgPSBjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQuZ2V0T2JqZWN0KCkuUHJlc2VudGF0aW9uVmFyaWFudD8uVmlzdWFsaXphdGlvbnM7XG5cdH1cblx0aWYgKHZpc3VhbGl6YXRpb25zPy5sZW5ndGggJiYgIWNoZWNrQ2hhcnRFeGlzdHModmlzdWFsaXphdGlvbnMsIGNvbnRyb2xQYXRoKSkge1xuXHRcdHZpc3VhbGl6YXRpb25QYXRoID0gXCJcIjtcblx0fVxuXG5cdC8vIGZhbGxiYWNrIHRvIGRlZmF1bHQgQ2hhcnQgaWYgdmlzdWFsaXphdGlvblBhdGggaXMgbWlzc2luZyBvciB2aXN1YWxpemF0aW9uUGF0aCBpcyBub3QgZm91bmQgaW4gY29udHJvbCAoaW4gY2FzZSBvZiBQcmVzZW50YXRpb25WYXJpYW50KVxuXHRpZiAoIXZpc3VhbGl6YXRpb25QYXRoKSB7XG5cdFx0dmlzdWFsaXphdGlvblBhdGggPSBgQCR7VUlBbm5vdGF0aW9uVGVybXMuQ2hhcnR9YDtcblx0fVxuXG5cdGNvbnN0IHZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCB7XG5cdFx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudDogY2hhcnRCbG9jay51c2VDb25kZW5zZWRMYXlvdXQsXG5cdFx0aXNNYWNyb09yTXVsdGlwbGVWaWV3OiB0cnVlLFxuXHRcdHNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uOiBmYWxzZVxuXHR9KTtcblx0cmV0dXJuIHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnZpc3VhbGl6YXRpb25zWzBdIGFzIENoYXJ0VmlzdWFsaXphdGlvbjtcbn1cblxuZnVuY3Rpb24gY2hlY2tDaGFydEV4aXN0cyh2aXN1YWxpemF0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPltdLCB2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdHJldHVybiB2aXN1YWxpemF0aW9ucy5zb21lKCh2aXN1YWxpemF0aW9uKSA9PiB2aXN1YWxpemF0aW9uUGF0aD8uaW5jbHVkZXModmlzdWFsaXphdGlvbi4kQW5ub3RhdGlvblBhdGgpKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGVudElkKG1hY3JvSWQ6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBgJHttYWNyb0lkfS1jb250ZW50YDtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB1c2VkIHRvIGdldCBkZXRhaWxzIFdSVCBhY3Rpb24ocykgc2hvd24gaW4gdGhlIGNoYXJ0J3MgdG9vbGJhci5cbiAqIEBwYXJhbSBjaGFydEJsb2NrIENoYXJ0IGJsb2NrIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aCBWaXN1YWxpemF0aW9uIHBhdGhcbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIGFsbCB0aGUgcmVxdWlyZWQgYWN0aW9uKHMpIGRldGFpbHNcbiAqL1xuZnVuY3Rpb24gZ2V0RXh0cmFQYXJhbXMoY2hhcnRCbG9jazogQ2hhcnRCbG9jaywgdmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4ge1xuXHRjb25zdCBleHRyYVBhcmFtczogUmVjb3JkPHN0cmluZywgb2JqZWN0PiA9IHt9O1xuXHRjb25zdCBjdXN0b21BY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cdGNvbnN0IGFjdGlvbk92ZXJmbG93R3JvdXBzOiBPdmVyZmxvd0dyb3Vwc0NvbmZpZ3VyYXRpb24gPSB7fTtcblxuXHRpZiAoY2hhcnRCbG9jay5hY3Rpb25zKSB7XG5cdFx0T2JqZWN0LnZhbHVlcyhjaGFydEJsb2NrLmFjdGlvbnMpPy5mb3JFYWNoKChhY3Rpb246IEFjdGlvbiB8IEFjdGlvbkdyb3VwKSA9PiB7XG5cdFx0XHRpZiAoYWN0aW9uLmlzQTxBY3Rpb25Hcm91cD4oXCJzYXAuZmUubWFjcm9zLmNoYXJ0LkFjdGlvbkdyb3VwXCIpKSB7XG5cdFx0XHRcdGN1c3RvbUFjdGlvbnNbYWN0aW9uLmtleV0gPSBnZXRBY3Rpb25Qcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdGFjdGlvbi5rZXksXG5cdFx0XHRcdFx0YWN0aW9uLnRleHQsXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHBsYWNlbWVudDogYWN0aW9uLnBsYWNlbWVudCxcblx0XHRcdFx0XHRcdGFuY2hvcjogYWN0aW9uLmFuY2hvclxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0YWN0aW9uLmFjdGlvbnMubWFwKChfLCBpbmRleCkgPT4gYWN0aW9uLmtleSArIFwiX01lbnVfXCIgKyBpbmRleCksXG5cdFx0XHRcdFx0YWN0aW9uLmdyb3VwLFxuXHRcdFx0XHRcdGFjdGlvbi5vdmVyZmxvd0dyb3VwXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0YWN0aW9uLmFjdGlvbnM/LmZvckVhY2goKGFjdDogQWN0aW9uLCBpbmRleDogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgYWN0aW9uS2V5ID0gYWN0aW9uLmtleS5jb25jYXQoXCJfTWVudV9cIiwgaW5kZXggYXMgdW5rbm93biBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdGN1c3RvbUFjdGlvbnNbYWN0aW9uS2V5XSA9IGdldEFjdGlvblByb3BlcnRpZXMoXG5cdFx0XHRcdFx0XHRhY3Rpb25LZXksXG5cdFx0XHRcdFx0XHRhY3QudGV4dCxcblx0XHRcdFx0XHRcdGFjdC5wcmVzcyxcblx0XHRcdFx0XHRcdCEhYWN0LnJlcXVpcmVzU2VsZWN0aW9uLFxuXHRcdFx0XHRcdFx0YWN0LmVuYWJsZWQgPT09IG51bGwgfHwgYWN0LmVuYWJsZWQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBhY3QuZW5hYmxlZFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChhY3Rpb24uaXNBPEFjdGlvbj4oXCJzYXAuZmUubWFjcm9zLmNoYXJ0LkFjdGlvblwiKSkge1xuXHRcdFx0XHRjdXN0b21BY3Rpb25zW2FjdGlvbi5rZXldID0gZ2V0QWN0aW9uUHJvcGVydGllcyhcblx0XHRcdFx0XHRhY3Rpb24ua2V5LFxuXHRcdFx0XHRcdGFjdGlvbi50ZXh0LFxuXHRcdFx0XHRcdGFjdGlvbi5wcmVzcyxcblx0XHRcdFx0XHQhIWFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbixcblx0XHRcdFx0XHRhY3Rpb24uZW5hYmxlZCA9PT0gbnVsbCB8fCBhY3Rpb24uZW5hYmxlZCA9PSB1bmRlZmluZWQgPyB0cnVlIDogYWN0aW9uLmVuYWJsZWQsXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGxhY2VtZW50OiBhY3Rpb24ucGxhY2VtZW50LFxuXHRcdFx0XHRcdFx0YW5jaG9yOiBhY3Rpb24uYW5jaG9yXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0YWN0aW9uLmdyb3VwLFxuXHRcdFx0XHRcdGFjdGlvbi5vdmVyZmxvd0dyb3VwXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0aWYgKGNoYXJ0QmxvY2suYWN0aW9uT3ZlcmZsb3dHcm91cHMpIHtcblx0XHRPYmplY3QudmFsdWVzKGNoYXJ0QmxvY2suYWN0aW9uT3ZlcmZsb3dHcm91cHMpPy5mb3JFYWNoKChvdmVyZmxvd0dyb3VwKSA9PiB7XG5cdFx0XHRhY3Rpb25PdmVyZmxvd0dyb3Vwc1tvdmVyZmxvd0dyb3VwLm92ZXJmbG93R3JvdXAudG9TdHJpbmcoKV0gPSB7IHNob3dTZXBhcmF0b3I6IG92ZXJmbG93R3JvdXAuc2hvd1NlcGFyYXRvciA/PyBmYWxzZSB9O1xuXHRcdH0pO1xuXHR9XG5cdGlmICh2aXN1YWxpemF0aW9uUGF0aCAmJiBjaGFydEJsb2NrLmFjdGlvbnMpIHtcblx0XHRleHRyYVBhcmFtc1t2aXN1YWxpemF0aW9uUGF0aF0gPSB7XG5cdFx0XHRhY3Rpb25zOiBjdXN0b21BY3Rpb25zLFxuXHRcdFx0b3ZlcmZsb3dHcm91cHM6IGFjdGlvbk92ZXJmbG93R3JvdXBzXG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBleHRyYVBhcmFtcztcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uUHJvcGVydGllcyhcblx0a2V5OiBzdHJpbmcsXG5cdHRleHQ6IHN0cmluZyxcblx0cHJlc3M6IHN0cmluZyB8IG51bGwsXG5cdHJlcXVpcmVzU2VsZWN0aW9uOiBib29sZWFuLFxuXHRlbmFibGVkOiBib29sZWFuLFxuXHRwb3NpdGlvbj86IG9iamVjdCxcblx0bWVudT86IHN0cmluZ1tdLFxuXHRncm91cD86IG51bWJlcixcblx0b3ZlcmZsb3dHcm91cD86IG51bWJlclxuKTogQWN0aW9uUHJvcGVydGllcyB7XG5cdGNvbnN0IGFjdGlvblByb3BlcnRpZXM6IEFjdGlvblByb3BlcnRpZXMgPSB7XG5cdFx0a2V5LFxuXHRcdHRleHQsXG5cdFx0X19ub1dyYXA6IHRydWUsXG5cdFx0cHJlc3MsXG5cdFx0cmVxdWlyZXNTZWxlY3Rpb24sXG5cdFx0ZW5hYmxlZCxcblx0XHRncm91cCxcblx0XHRvdmVyZmxvd0dyb3VwXG5cdH07XG5cblx0aWYgKHBvc2l0aW9uKSB7XG5cdFx0YWN0aW9uUHJvcGVydGllcy5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuXHR9XG5cdGlmIChtZW51KSB7XG5cdFx0YWN0aW9uUHJvcGVydGllcy5tZW51ID0gbWVudTtcblx0fVxuXG5cdHJldHVybiBhY3Rpb25Qcm9wZXJ0aWVzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCaW5kaW5nQ29udGV4dChkYXRhOiBvYmplY3QgfCBCYXNlQWN0aW9uW10gfCBDdXN0b21BY3Rpb24pOiBDb250ZXh0IHtcblx0Y29uc3QgY29udGV4dFBhdGggPSBgLyR7dWlkKCl9YDtcblx0Y29uc3QgYWN0aW9uc01vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRhY3Rpb25zTW9kZWwuc2V0UHJvcGVydHkoY29udGV4dFBhdGgsIGRhdGEpO1xuXHRyZXR1cm4gYWN0aW9uc01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGNvbnRleHRQYXRoKSE7XG59XG5cbmZ1bmN0aW9uIGdldENoYXJ0TWVhc3VyZXMoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IENvbnRleHQge1xuXHRjb25zdCBjaGFydEFubm90YXRpb25QYXRoID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uYW5ub3RhdGlvblBhdGguc3BsaXQoXCIvXCIpO1xuXHQvLyB0aGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgZ2V0QWJzb2x1dGVQYXRoIGluIGNvbnZlcnRlckNvbnRleHQgcmV0dXJucyBcIi9TYWxlc09yZGVyTWFuYWdlL19JdGVtL19JdGVtL0Bjb20uc2FwLnZvY2FidWxhcmllcy52MS5DaGFydFwiIGFzIGFubm90YXRpb25QYXRoXG5cdGNvbnN0IGFubm90YXRpb25QYXRoID0gY2hhcnRBbm5vdGF0aW9uUGF0aFxuXHRcdC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW06IHN0cmluZywgcG9zOiBudW1iZXIpOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBjaGFydEFubm90YXRpb25QYXRoLmluZGV4T2YoaXRlbSkgPT0gcG9zO1xuXHRcdH0pXG5cdFx0LnRvU3RyaW5nKClcblx0XHQucmVwbGFjZUFsbChcIixcIiwgXCIvXCIpO1xuXHRjb25zdCBvQ2hhcnQgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8Q2hhcnRUeXBlPihcblx0XHRjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYW5ub3RhdGlvblBhdGgpISxcblx0XHRjaGFydEJsb2NrLl9jb250ZXh0XG5cdCkudGFyZ2V0T2JqZWN0O1xuXHRsZXQgbWVhc3VyZXM6IE1lYXN1cmVUeXBlW10gPSBbXTtcblx0Y29uc3QgYW5ub1BhdGggPSBjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQuZ2V0UGF0aCgpO1xuXHRjb25zdCBjaGFydE1lYXN1cmVzID0gb0NoYXJ0Py5NZWFzdXJlcyA/IG9DaGFydC5NZWFzdXJlcyA6IFtdO1xuXHRjb25zdCBjaGFydER5bmFtaWNNZWFzdXJlcyA9IG9DaGFydD8uRHluYW1pY01lYXN1cmVzID8gb0NoYXJ0LkR5bmFtaWNNZWFzdXJlcyA6IFtdO1xuXHRjb25zdCBlbnRpdHlTZXRQYXRoID0gYW5ub1BhdGgucmVwbGFjZSgvQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLihDaGFydHxQcmVzZW50YXRpb25WYXJpYW50fFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpLiovLCBcIlwiKTtcblx0Y29uc3QgdHJhbnNBZ2dyZWdhdGlvbnMgPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi50cmFuc0FnZyBhcyBSZWNvcmQ8c3RyaW5nLCBNZWFzdXJlVHlwZT47XG5cdGNvbnN0IGN1c3RvbUFnZ3JlZ2F0aW9ucyA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmN1c3RvbUFnZyBhcyBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cblx0Ly8gaW50aW1hdGUgdGhlIHVzZXIgaWYgdGhlcmUgaXMgQWdncmVnYXRlUHJvcGVydHkgY29uZmlndXJlZCB3aXRoIG5vIER5bmFtaWNNZWFzdXJlcywgYnV0IHRoZXJlIGFyZSBtZWFzdXJlcyB3aXRoIEFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzXG5cdGlmIChcblx0XHRjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5jb250YWluc0FnZ3JlZ2F0ZWRQcm9wZXJ0eSAmJlxuXHRcdCFjaGFydER5bmFtaWNNZWFzdXJlcyAmJlxuXHRcdGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmNvbnRhaW5zVHJhbnNBZ2dJbk1lYXN1cmVzXG5cdCkge1xuXHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XCJUaGUgdHJhbnNmb3JtYXRpb25hbCBhZ2dyZWdhdGUgbWVhc3VyZXMgYXJlIGNvbmZpZ3VyZWQgYXMgQ2hhcnQuTWVhc3VyZXMgYnV0IHNob3VsZCBiZSBjb25maWd1cmVkIGFzIENoYXJ0LkR5bmFtaWNNZWFzdXJlcyBpbnN0ZWFkLiBQbGVhc2UgY2hlY2sgdGhlIFNBUCBIZWxwIGRvY3VtZW50YXRpb24gYW5kIGNvcnJlY3QgdGhlIGNvbmZpZ3VyYXRpb24gYWNjb3JkaW5nbHkuXCJcblx0XHQpO1xuXHR9XG5cdGNvbnN0IGlzQ3VzdG9tQWdncmVnYXRlSXNNZWFzdXJlID0gY2hhcnRNZWFzdXJlcy5zb21lKChvQ2hhcnRNZWFzdXJlOiBNZWFzdXJlVHlwZSkgPT4ge1xuXHRcdGNvbnN0IG9DdXN0b21BZ2dNZWFzdXJlID0gZ2V0Q3VzdG9tQWdnTWVhc3VyZShjdXN0b21BZ2dyZWdhdGlvbnMsIG9DaGFydE1lYXN1cmUpO1xuXHRcdHJldHVybiAhIW9DdXN0b21BZ2dNZWFzdXJlO1xuXHR9KTtcblx0aWYgKGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmNvbnRhaW5zQWdncmVnYXRlZFByb3BlcnR5ICYmICFjaGFydER5bmFtaWNNZWFzdXJlcz8ubGVuZ3RoICYmICFpc0N1c3RvbUFnZ3JlZ2F0ZUlzTWVhc3VyZSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSBjb25maWd1cmUgRHluYW1pY01lYXN1cmVzIGZvciB0aGUgY2hhcnRcIik7XG5cdH1cblx0aWYgKGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmNvbnRhaW5zQWdncmVnYXRlZFByb3BlcnR5ICYmIG9DaGFydCkge1xuXHRcdGZvciAoY29uc3QgZHluYW1pY01lYXN1cmUgb2YgY2hhcnREeW5hbWljTWVhc3VyZXMpIHtcblx0XHRcdG1lYXN1cmVzID0gZ2V0RHluYW1pY01lYXN1cmVzKG1lYXN1cmVzLCBkeW5hbWljTWVhc3VyZSwgZW50aXR5U2V0UGF0aCwgb0NoYXJ0LCBjaGFydEJsb2NrKTtcblx0XHR9XG5cdH1cblx0Zm9yIChjb25zdCBjaGFydE1lYXN1cmUgb2YgY2hhcnRNZWFzdXJlcykge1xuXHRcdGNvbnN0IGtleSA9IGNoYXJ0TWVhc3VyZS52YWx1ZTtcblx0XHRjb25zdCBjdXN0b21BZ2dNZWFzdXJlID0gZ2V0Q3VzdG9tQWdnTWVhc3VyZShjdXN0b21BZ2dyZWdhdGlvbnMsIGNoYXJ0TWVhc3VyZSk7XG5cdFx0Y29uc3QgbWVhc3VyZVR5cGU6IE1lYXN1cmVUeXBlID0ge307XG5cdFx0aWYgKGN1c3RvbUFnZ01lYXN1cmUpIHtcblx0XHRcdG1lYXN1cmVzID0gc2V0Q3VzdG9tQWdnTWVhc3VyZShtZWFzdXJlcywgbWVhc3VyZVR5cGUsIGN1c3RvbUFnZ01lYXN1cmUsIGtleSk7XG5cdFx0XHQvL2lmIHRoZXJlIGlzIG5laXRoZXIgYWdncmVnYXRlZFByb3BlcnR5IG5vciBtZWFzdXJlcyBwb2ludGluZyB0byBjdXN0b21BZ2dyZWdhdGVzLCBidXQgd2UgaGF2ZSBub3JtYWwgbWVhc3VyZXMuIE5vdyBjaGVjayBpZiB0aGVzZSBtZWFzdXJlcyBhcmUgcGFydCBvZiBBZ2dyZWdhdGVkUHJvcGVydGllcyBPYmpcblx0XHR9IGVsc2UgaWYgKCFjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5jb250YWluc0FnZ3JlZ2F0ZWRQcm9wZXJ0eSAmJiB0cmFuc0FnZ3JlZ2F0aW9uc1trZXldKSB7XG5cdFx0XHRtZWFzdXJlcyA9IHNldFRyYW5zQWdnTWVhc3VyZShtZWFzdXJlcywgbWVhc3VyZVR5cGUsIHRyYW5zQWdncmVnYXRpb25zLCBrZXkpO1xuXHRcdH1cblx0XHRzZXRDaGFydE1lYXN1cmVBdHRyaWJ1dGVzKGNoYXJ0QmxvY2suX2NoYXJ0Lk1lYXN1cmVBdHRyaWJ1dGVzLCBlbnRpdHlTZXRQYXRoLCBtZWFzdXJlVHlwZSwgY2hhcnRCbG9jayk7XG5cdH1cblx0Y29uc3QgbWVhc3VyZXNNb2RlbDogSlNPTk1vZGVsID0gbmV3IEpTT05Nb2RlbChtZWFzdXJlcyk7XG5cdChtZWFzdXJlc01vZGVsIGFzIHsgJCR2YWx1ZUFzUHJvbWlzZT86IGJvb2xlYW4gfSkuJCR2YWx1ZUFzUHJvbWlzZSA9IHRydWU7XG5cdHJldHVybiBtZWFzdXJlc01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcbn1cblxuZnVuY3Rpb24gc2V0Q3VzdG9tQWdnTWVhc3VyZShtZWFzdXJlczogTWVhc3VyZVR5cGVbXSwgbWVhc3VyZTogTWVhc3VyZVR5cGUsIGN1c3RvbUFnZ01lYXN1cmU6IE1lYXN1cmVUeXBlLCBrZXk6IHN0cmluZyk6IE1lYXN1cmVUeXBlW10ge1xuXHRpZiAoa2V5LmluY2x1ZGVzKFwiL1wiKSkge1xuXHRcdExvZy5lcnJvcihgJGV4cGFuZCBpcyBub3QgeWV0IHN1cHBvcnRlZC4gTWVhc3VyZTogJHtrZXl9IGZyb20gYW4gYXNzb2NpYXRpb24gY2Fubm90IGJlIHVzZWRgKTtcblx0fVxuXHRtZWFzdXJlLmtleSA9IGN1c3RvbUFnZ01lYXN1cmUudmFsdWU7XG5cdG1lYXN1cmUucm9sZSA9IFwiYXhpczFcIjtcblx0bWVhc3VyZS5sYWJlbCA9IGN1c3RvbUFnZ01lYXN1cmUubGFiZWw7XG5cdG1lYXN1cmUucHJvcGVydHlQYXRoID0gY3VzdG9tQWdnTWVhc3VyZS52YWx1ZTtcblx0bWVhc3VyZXMucHVzaChtZWFzdXJlKTtcblx0cmV0dXJuIG1lYXN1cmVzO1xufVxuXG5mdW5jdGlvbiBzZXRUcmFuc0FnZ01lYXN1cmUoXG5cdG1lYXN1cmVzOiBNZWFzdXJlVHlwZVtdLFxuXHRtZWFzdXJlOiBNZWFzdXJlVHlwZSxcblx0dHJhbnNBZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1lYXN1cmVUeXBlPixcblx0a2V5OiBzdHJpbmdcbik6IE1lYXN1cmVUeXBlW10ge1xuXHRjb25zdCB0cmFuc0FnZ01lYXN1cmUgPSB0cmFuc0FnZ3JlZ2F0aW9uc1trZXldO1xuXHRtZWFzdXJlLmtleSA9IHRyYW5zQWdnTWVhc3VyZS5uYW1lO1xuXHRtZWFzdXJlLnJvbGUgPSBcImF4aXMxXCI7XG5cdG1lYXN1cmUucHJvcGVydHlQYXRoID0ga2V5O1xuXHRtZWFzdXJlLmFnZ3JlZ2F0aW9uTWV0aG9kID0gdHJhbnNBZ2dNZWFzdXJlLmFnZ3JlZ2F0aW9uTWV0aG9kO1xuXHRtZWFzdXJlLmxhYmVsID0gdHJhbnNBZ2dNZWFzdXJlLmxhYmVsIHx8IG1lYXN1cmUubGFiZWw7XG5cdG1lYXN1cmVzLnB1c2gobWVhc3VyZSk7XG5cdHJldHVybiBtZWFzdXJlcztcbn1cblxuZnVuY3Rpb24gZ2V0RHluYW1pY01lYXN1cmVzKFxuXHRtZWFzdXJlczogTWVhc3VyZVR5cGVbXSxcblx0Y2hhcnREeW5hbWljTWVhc3VyZTogTWVhc3VyZVR5cGUsXG5cdGVudGl0eVNldFBhdGg6IHN0cmluZyxcblx0Y2hhcnQ6IENoYXJ0VHlwZSxcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9ja1xuKTogTWVhc3VyZVR5cGVbXSB7XG5cdGNvbnN0IGtleSA9IGNoYXJ0RHluYW1pY01lYXN1cmUudmFsdWUgfHwgXCJcIjtcblx0Y29uc3QgYWdncmVnYXRlZFByb3BlcnR5ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPEFnZ3JlZ2F0ZWRQcm9wZXJ0eT4oXG5cdFx0Y2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGVudGl0eVNldFBhdGggKyBrZXkpIGFzIENvbnRleHQsXG5cdFx0Y2hhcnRCbG9jay5fY29udGV4dFxuXHQpLnRhcmdldE9iamVjdDtcblx0aWYgKGtleS5pbmNsdWRlcyhcIi9cIikpIHtcblx0XHRMb2cuZXJyb3IoYCRleHBhbmQgaXMgbm90IHlldCBzdXBwb3J0ZWQuIE1lYXN1cmU6ICR7a2V5fSBmcm9tIGFuIGFzc29jaWF0aW9uIGNhbm5vdCBiZSB1c2VkYCk7XG5cdFx0Ly8gY2hlY2sgaWYgdGhlIGFubm90YXRpb24gcGF0aCBpcyB3cm9uZ1xuXHR9IGVsc2UgaWYgKCFhZ2dyZWdhdGVkUHJvcGVydHkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYFBsZWFzZSBwcm92aWRlIHRoZSByaWdodCBBbm5vdGF0aW9uUGF0aCB0byB0aGUgRHluYW1pYyBNZWFzdXJlICR7Y2hhcnREeW5hbWljTWVhc3VyZS52YWx1ZX1gKTtcblx0XHQvLyBjaGVjayBpZiB0aGUgcGF0aCBzdGFydHMgd2l0aCBAXG5cdH0gZWxzZSBpZiAoY2hhcnREeW5hbWljTWVhc3VyZS52YWx1ZT8uc3RhcnRzV2l0aChgQCR7QW5hbHl0aWNzQW5ub3RhdGlvblRlcm1zLkFnZ3JlZ2F0ZWRQcm9wZXJ0eX1gKSA9PT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgUGxlYXNlIHByb3ZpZGUgdGhlIHJpZ2h0IEFubm90YXRpb25QYXRoIHRvIHRoZSBEeW5hbWljIE1lYXN1cmUgJHtjaGFydER5bmFtaWNNZWFzdXJlLnZhbHVlfWApO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGNoZWNrIGlmIEFnZ3JlZ2F0ZWRQcm9wZXJ0eSBpcyBkZWZpbmVkIGluIGdpdmVuIER5bmFtaWNNZWFzdXJlXG5cdFx0Y29uc3QgZHluYW1pY01lYXN1cmU6IE1lYXN1cmVUeXBlID0ge1xuXHRcdFx0a2V5OiBhZ2dyZWdhdGVkUHJvcGVydHkuTmFtZS50b1N0cmluZygpLFxuXHRcdFx0cm9sZTogXCJheGlzMVwiXG5cdFx0fTtcblx0XHRkeW5hbWljTWVhc3VyZS5wcm9wZXJ0eVBhdGggPSBhZ2dyZWdhdGVkUHJvcGVydHkuQWdncmVnYXRhYmxlUHJvcGVydHkudmFsdWU7XG5cdFx0ZHluYW1pY01lYXN1cmUuYWdncmVnYXRpb25NZXRob2QgPSBhZ2dyZWdhdGVkUHJvcGVydHkuQWdncmVnYXRpb25NZXRob2QudG9TdHJpbmcoKTtcblx0XHRkeW5hbWljTWVhc3VyZS5sYWJlbCA9IHJlc29sdmVCaW5kaW5nU3RyaW5nKFxuXHRcdFx0YWdncmVnYXRlZFByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/XG5cdFx0XHRcdGFnZ3JlZ2F0ZWRQcm9wZXJ0eS5BZ2dyZWdhdGFibGVQcm9wZXJ0eS4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSA/P1xuXHRcdFx0XHRcIlwiXG5cdFx0KTtcblx0XHRzZXRDaGFydE1lYXN1cmVBdHRyaWJ1dGVzKGNoYXJ0Lk1lYXN1cmVBdHRyaWJ1dGVzLCBlbnRpdHlTZXRQYXRoLCBkeW5hbWljTWVhc3VyZSwgY2hhcnRCbG9jayk7XG5cdFx0bWVhc3VyZXMucHVzaChkeW5hbWljTWVhc3VyZSk7XG5cdH1cblx0cmV0dXJuIG1lYXN1cmVzO1xufVxuXG5mdW5jdGlvbiBnZXRDdXN0b21BZ2dNZWFzdXJlKGN1c3RvbUFnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgTWVhc3VyZVR5cGUgfCB1bmRlZmluZWQ+LCBtZWFzdXJlOiBNZWFzdXJlVHlwZSk6IE1lYXN1cmVUeXBlIHwgbnVsbCB7XG5cdGlmIChtZWFzdXJlLnZhbHVlICYmIGN1c3RvbUFnZ3JlZ2F0aW9uc1ttZWFzdXJlLnZhbHVlXSkge1xuXHRcdG1lYXN1cmUubGFiZWwgPSBjdXN0b21BZ2dyZWdhdGlvbnNbbWVhc3VyZS52YWx1ZV0/LmxhYmVsO1xuXHRcdHJldHVybiBtZWFzdXJlO1xuXHR9XG5cdHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBzZXRDaGFydE1lYXN1cmVBdHRyaWJ1dGVzKFxuXHRtZWFzdXJlQXR0cmlidXRlczogQ2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZVtdLFxuXHRlbnRpdHlTZXRQYXRoOiBzdHJpbmcsXG5cdG1lYXN1cmU6IE1lYXN1cmVUeXBlLFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrXG4pOiB2b2lkIHtcblx0aWYgKG1lYXN1cmVBdHRyaWJ1dGVzPy5sZW5ndGgpIHtcblx0XHRmb3IgKGNvbnN0IG1lYXN1cmVBdHRyaWJ1dGUgb2YgbWVhc3VyZUF0dHJpYnV0ZXMpIHtcblx0XHRcdF9zZXRDaGFydE1lYXN1cmVBdHRyaWJ1dGUobWVhc3VyZUF0dHJpYnV0ZSwgZW50aXR5U2V0UGF0aCwgbWVhc3VyZSwgY2hhcnRCbG9jayk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIF9zZXRDaGFydE1lYXN1cmVBdHRyaWJ1dGUoXG5cdG1lYXN1cmVBdHRyaWJ1dGU6IENoYXJ0TWVhc3VyZUF0dHJpYnV0ZVR5cGUsXG5cdGVudGl0eVNldFBhdGg6IHN0cmluZyxcblx0bWVhc3VyZTogTWVhc3VyZVR5cGUsXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IHZvaWQge1xuXHRjb25zdCBwYXRoID0gbWVhc3VyZUF0dHJpYnV0ZS5EeW5hbWljTWVhc3VyZSA/IG1lYXN1cmVBdHRyaWJ1dGU/LkR5bmFtaWNNZWFzdXJlPy52YWx1ZSA6IG1lYXN1cmVBdHRyaWJ1dGU/Lk1lYXN1cmU/LnZhbHVlO1xuXHRjb25zdCBtZWFzdXJlQXR0cmlidXRlRGF0YVBvaW50ID0gbWVhc3VyZUF0dHJpYnV0ZS5EYXRhUG9pbnQgPyBtZWFzdXJlQXR0cmlidXRlPy5EYXRhUG9pbnQ/LnZhbHVlIDogbnVsbDtcblx0Y29uc3Qgcm9sZSA9IG1lYXN1cmVBdHRyaWJ1dGUuUm9sZTtcblx0Y29uc3QgZGF0YVBvaW50OiBEYXRhUG9pbnQgfCB1bmRlZmluZWQgPSBtZWFzdXJlQXR0cmlidXRlRGF0YVBvaW50XG5cdFx0PyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YVBvaW50Pihcblx0XHRcdFx0Y2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGVudGl0eVNldFBhdGggKyBtZWFzdXJlQXR0cmlidXRlRGF0YVBvaW50KSBhcyBDb250ZXh0LFxuXHRcdFx0XHRjaGFydEJsb2NrLl9jb250ZXh0XG5cdFx0ICApLnRhcmdldE9iamVjdFxuXHRcdDogdW5kZWZpbmVkO1xuXHRpZiAobWVhc3VyZS5rZXkgPT09IHBhdGgpIHtcblx0XHRzZXRNZWFzdXJlUm9sZShtZWFzdXJlLCByb2xlIGFzIHVua25vd24gYXMgTWV0YU1vZGVsRW51bTxDaGFydE1lYXN1cmVSb2xlVHlwZT4pO1xuXHRcdC8vc3RpbGwgdG8gYWRkIGRhdGEgcG9pbnQsIGJ1dCBVSTUgQ2hhcnQgQVBJIGlzIG1pc3Npbmdcblx0XHRzZXRNZWFzdXJlRGF0YVBvaW50KG1lYXN1cmUsIGRhdGFQb2ludCk7XG5cdH1cbn1cblxuLyoqXG4gKiBGb3JtYXQgdGhlIGRhdGEgcG9pbnQgYXMgYSBKU09OIG9iamVjdC5cbiAqIEBwYXJhbSBvRGF0YVBvaW50QW5ub1xuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBqc29uIG9iamVjdFxuICovXG5mdW5jdGlvbiBjcmVhdGVEYXRhUG9pbnRQcm9wZXJ0eShvRGF0YVBvaW50QW5ubzogRGF0YVBvaW50KToge1xuXHR0YXJnZXRWYWx1ZT86IHN0cmluZztcblx0Zm9yZUNhc3RWYWx1ZT86IHN0cmluZztcblx0Y3JpdGljYWxpdHk/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn0ge1xuXHRjb25zdCBvRGF0YVBvaW50OiB7IHRhcmdldFZhbHVlPzogc3RyaW5nOyBmb3JlQ2FzdFZhbHVlPzogc3RyaW5nOyBjcml0aWNhbGl0eT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0gPSB7fTtcblxuXHRpZiAob0RhdGFQb2ludEFubm8uVGFyZ2V0VmFsdWUpIHtcblx0XHRvRGF0YVBvaW50LnRhcmdldFZhbHVlID0gb0RhdGFQb2ludEFubm8uVGFyZ2V0VmFsdWUuJFBhdGg7XG5cdH1cblxuXHRpZiAob0RhdGFQb2ludEFubm8uRm9yZWNhc3RWYWx1ZSkge1xuXHRcdG9EYXRhUG9pbnQuZm9yZUNhc3RWYWx1ZSA9IG9EYXRhUG9pbnRBbm5vLkZvcmVjYXN0VmFsdWUuJFBhdGg7XG5cdH1cblxuXHRsZXQgb0NyaXRpY2FsaXR5ID0gbnVsbDtcblx0aWYgKG9EYXRhUG9pbnRBbm5vLkNyaXRpY2FsaXR5KSB7XG5cdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9EYXRhUG9pbnRBbm5vLkNyaXRpY2FsaXR5KSAmJiBvRGF0YVBvaW50QW5uby5Dcml0aWNhbGl0eS5wYXRoKSB7XG5cdFx0XHQvL3dpbGwgYmUgYW4gYWdncmVnYXRlZCBwcm9wZXJ0eSBvciBjdXN0b20gYWdncmVnYXRlXG5cdFx0XHRvQ3JpdGljYWxpdHkgPSB7XG5cdFx0XHRcdENhbGN1bGF0ZWQ6IG9EYXRhUG9pbnRBbm5vLkNyaXRpY2FsaXR5LnBhdGhcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9Dcml0aWNhbGl0eSA9IHtcblx0XHRcdFx0U3RhdGljOiAob0RhdGFQb2ludEFubm8uQ3JpdGljYWxpdHkgYXMgdW5rbm93biBhcyBNZXRhTW9kZWxFbnVtPENyaXRpY2FsaXR5VHlwZT4pLiRFbnVtTWVtYmVyLnJlcGxhY2UoXG5cdFx0XHRcdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eVR5cGUvXCIsXG5cdFx0XHRcdFx0XCJcIlxuXHRcdFx0XHQpXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIGlmIChvRGF0YVBvaW50QW5uby5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uKSB7XG5cdFx0Y29uc3Qgb1RocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyBBZ2dyZWdhdGlvbkxldmVscz86IHVua25vd25bXSB9ID0ge307XG5cdFx0Y29uc3QgYkNvbnN0YW50ID0gYnVpbGRUaHJlc2hvbGRzKG9UaHJlc2hvbGRzLCBvRGF0YVBvaW50QW5uby5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uKTtcblxuXHRcdGlmIChiQ29uc3RhbnQpIHtcblx0XHRcdG9Dcml0aWNhbGl0eSA9IHtcblx0XHRcdFx0Q29uc3RhbnRUaHJlc2hvbGRzOiBvVGhyZXNob2xkc1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0NyaXRpY2FsaXR5ID0ge1xuXHRcdFx0XHREeW5hbWljVGhyZXNob2xkczogb1RocmVzaG9sZHNcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9Dcml0aWNhbGl0eSkge1xuXHRcdG9EYXRhUG9pbnQuY3JpdGljYWxpdHkgPSBvQ3JpdGljYWxpdHk7XG5cdH1cblxuXHRyZXR1cm4gb0RhdGFQb2ludDtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdGhyZXNob2xkcyBhcmUgZHluYW1pYyBvciBjb25zdGFudC5cbiAqIEBwYXJhbSB0aHJlc2hvbGRzIFRoZSB0aHJlc2hvbGQgc2tlbGV0b25cbiAqIEBwYXJhbSBjcml0aWNhbGl0eUNhbGN1bGF0aW9uIFRoZSBVSS5EYXRhUG9pbnQuQ3JpdGljYWxpdHlDYWxjdWxhdGlvbiBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHRocmVzaG9sZCBzaG91bGQgYmUgc3VwcGxpZWQgYXMgQ29uc3RhbnRUaHJlc2hvbGRzLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgdGhlIHRocmVzaG9sZCBzaG91bGRcbiAqIGJlIHN1cHBsaWVkIGFzIER5bmFtaWNUaHJlc2hvbGRzXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBidWlsZFRocmVzaG9sZHMoXG5cdHRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyBBZ2dyZWdhdGlvbkxldmVscz86IHVua25vd25bXSB9LFxuXHRjcml0aWNhbGl0eUNhbGN1bGF0aW9uOiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZVxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IGtleXMgPSBbXG5cdFx0XCJBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZVwiLFxuXHRcdFwiQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlXCIsXG5cdFx0XCJUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlXCIsXG5cdFx0XCJUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZVwiLFxuXHRcdFwiRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZVwiLFxuXHRcdFwiRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVcIlxuXHRdO1xuXHR0aHJlc2hvbGRzLkltcHJvdmVtZW50RGlyZWN0aW9uID0gKFxuXHRcdGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uSW1wcm92ZW1lbnREaXJlY3Rpb24gYXMgdW5rbm93biBhcyBNZXRhTW9kZWxFbnVtPEltcHJvdmVtZW50RGlyZWN0aW9uVHlwZT5cblx0KT8uJEVudW1NZW1iZXIucmVwbGFjZShcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9cIiwgXCJcIik7XG5cblx0Y29uc3QgZHluYW1pY1RocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyB1c2VkTWVhc3VyZXM6IHVua25vd25bXSB9ID0ge1xuXHRcdG9uZVN1cHBsaWVkOiBmYWxzZSxcblx0XHR1c2VkTWVhc3VyZXM6IFtdXG5cdFx0Ly8gY29tYmluYXRpb24gdG8gY2hlY2sgd2hldGhlciBhdCBsZWFzdCBvbmUgaXMgc3VwcGxpZWRcblx0fTtcblx0Y29uc3QgY29uc3RhbnRUaHJlc2hvbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcblx0XHRvbmVTdXBwbGllZDogZmFsc2Vcblx0XHQvLyBjb21iaW5hdGlvbiB0byBjaGVjayB3aGV0aGVyIGF0IGxlYXN0IG9uZSBpcyBzdXBwbGllZFxuXHR9O1xuXG5cdGluaXRpYWxpc2VUaHJlc2hvbGRzKGtleXMsIGR5bmFtaWNUaHJlc2hvbGRzLCBjb25zdGFudFRocmVzaG9sZHMsIGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24pO1xuXHRwcm9jZXNzVGhyZXNob2xkcyhrZXlzLCB0aHJlc2hvbGRzLCBkeW5hbWljVGhyZXNob2xkcywgY29uc3RhbnRUaHJlc2hvbGRzLCBjcml0aWNhbGl0eUNhbGN1bGF0aW9uKTtcblxuXHRyZXR1cm4gIWR5bmFtaWNUaHJlc2hvbGRzLm9uZVN1cHBsaWVkO1xufVxuXG5mdW5jdGlvbiBpbml0aWFsaXNlVGhyZXNob2xkcyhcblx0a2V5czogc3RyaW5nW10sXG5cdGR5bmFtaWNUaHJlc2hvbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIHsgdXNlZE1lYXN1cmVzOiB1bmtub3duW10gfSxcblx0Y29uc3RhbnRUaHJlc2hvbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvbjogQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGVcbik6IHZvaWQge1xuXHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0ZHluYW1pY1RocmVzaG9sZHNba2V5XSA9IGNyaXRpY2FsaXR5Q2FsY3VsYXRpb25ba2V5IGFzIGtleW9mIENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXVxuXHRcdFx0PyBjcml0aWNhbGl0eUNhbGN1bGF0aW9uW2tleSBhcyBrZXlvZiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZV0uJFBhdGhcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGR5bmFtaWNUaHJlc2hvbGRzLm9uZVN1cHBsaWVkID0gZHluYW1pY1RocmVzaG9sZHMub25lU3VwcGxpZWQgfHwgZHluYW1pY1RocmVzaG9sZHNba2V5XTtcblxuXHRcdGlmICghZHluYW1pY1RocmVzaG9sZHMub25lU3VwcGxpZWQpIHtcblx0XHRcdC8vIG9ubHkgY29uc2lkZXIgaW4gY2FzZSBubyBkeW5hbWljIHRocmVzaG9sZCBpcyBzdXBwbGllZFxuXHRcdFx0Y29uc3RhbnRUaHJlc2hvbGRzW2tleV0gPSBjcml0aWNhbGl0eUNhbGN1bGF0aW9uW2tleSBhcyBrZXlvZiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZV07XG5cdFx0XHRjb25zdGFudFRocmVzaG9sZHMub25lU3VwcGxpZWQgPSBjb25zdGFudFRocmVzaG9sZHMub25lU3VwcGxpZWQgfHwgY29uc3RhbnRUaHJlc2hvbGRzW2tleV07XG5cdFx0fSBlbHNlIGlmIChkeW5hbWljVGhyZXNob2xkc1trZXldKSB7XG5cdFx0XHRkeW5hbWljVGhyZXNob2xkcy51c2VkTWVhc3VyZXMucHVzaChkeW5hbWljVGhyZXNob2xkc1trZXkgYXMga2V5b2YgQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGVdKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1RocmVzaG9sZHMoXG5cdGtleXM6IHN0cmluZ1tdLFxuXHR0aHJlc2hvbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIHsgQWdncmVnYXRpb25MZXZlbHM/OiB1bmtub3duW10gfSxcblx0ZHluYW1pY1RocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyB1c2VkTWVhc3VyZXM6IHVua25vd25bXSB9LFxuXHRjb25zdGFudFRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRjcml0aWNhbGl0eUNhbGN1bGF0aW9uOiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZVxuKTogdm9pZCB7XG5cdC8vIGR5bmFtaWMgZGVmaW5pdGlvbiBzaGFsbCBvdmVycnVsZSBjb25zdGFudCBkZWZpbml0aW9uXG5cdGlmIChkeW5hbWljVGhyZXNob2xkcy5vbmVTdXBwbGllZCkge1xuXHRcdGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcblx0XHRcdGlmIChkeW5hbWljVGhyZXNob2xkc1trZXldKSB7XG5cdFx0XHRcdHRocmVzaG9sZHNba2V5XSA9IGR5bmFtaWNUaHJlc2hvbGRzW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRocmVzaG9sZHMudXNlZE1lYXN1cmVzID0gZHluYW1pY1RocmVzaG9sZHMudXNlZE1lYXN1cmVzO1xuXHR9IGVsc2Uge1xuXHRcdHRocmVzaG9sZHMuQWdncmVnYXRpb25MZXZlbHMgPSBbXTtcblx0XHRwcm9jZXNzQWdncmVnYXRpb25MZXZlbEZvclRocmVzaG9sZHMoa2V5cywgdGhyZXNob2xkcywgY29uc3RhbnRUaHJlc2hvbGRzLCBjcml0aWNhbGl0eUNhbGN1bGF0aW9uKTtcblx0fVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzQWdncmVnYXRpb25MZXZlbEZvclRocmVzaG9sZHMoXG5cdGtleXM6IHN0cmluZ1tdLFxuXHR0aHJlc2hvbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIHsgQWdncmVnYXRpb25MZXZlbHM/OiB1bmtub3duW10gfSxcblx0Y29uc3RhbnRUaHJlc2hvbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvbjogQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGVcbik6IHZvaWQge1xuXHRsZXQgb0FnZ3JlZ2F0aW9uTGV2ZWw6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdC8vIGNoZWNrIGlmIGF0IGxlYXN0IG9uZSBzdGF0aWMgdmFsdWUgaXMgc3VwcGxpZWRcblx0aWYgKGNvbnN0YW50VGhyZXNob2xkcy5vbmVTdXBwbGllZCkge1xuXHRcdC8vIGFkZCBvbmUgZW50cnkgaW4gdGhlIGFnZ3JlZ2F0aW9uIGxldmVsXG5cdFx0b0FnZ3JlZ2F0aW9uTGV2ZWwgPSB7XG5cdFx0XHRWaXNpYmxlRGltZW5zaW9uczogbnVsbFxuXHRcdH07XG5cblx0XHRmb3IgKGNvbnN0IHNLZXkgb2Yga2V5cykge1xuXHRcdFx0aWYgKGNvbnN0YW50VGhyZXNob2xkc1tzS2V5XSkge1xuXHRcdFx0XHRvQWdncmVnYXRpb25MZXZlbFtzS2V5XSA9IGNvbnN0YW50VGhyZXNob2xkc1tzS2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aHJlc2hvbGRzLkFnZ3JlZ2F0aW9uTGV2ZWxzPy5wdXNoKG9BZ2dyZWdhdGlvbkxldmVsKTtcblx0fVxuXG5cdHByb2Nlc3NBZ2dyZWdhdGlvbkxldmVsc0ZvckNvbnN0YW50VGhyZXNob2xkcyhrZXlzLCB0aHJlc2hvbGRzLCBjcml0aWNhbGl0eUNhbGN1bGF0aW9uLCBvQWdncmVnYXRpb25MZXZlbCk7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NBZ2dyZWdhdGlvbkxldmVsc0ZvckNvbnN0YW50VGhyZXNob2xkcyhcblx0a2V5czogc3RyaW5nW10sXG5cdHRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyBBZ2dyZWdhdGlvbkxldmVscz86IHVua25vd25bXSB9LFxuXHRjcml0aWNhbGl0eUNhbGN1bGF0aW9uOiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZSxcblx0YWdncmVnYXRpb25MZXZlbDogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IHZvaWQge1xuXHRpZiAoY3JpdGljYWxpdHlDYWxjdWxhdGlvbi5Db25zdGFudFRocmVzaG9sZHMgJiYgY3JpdGljYWxpdHlDYWxjdWxhdGlvbi5Db25zdGFudFRocmVzaG9sZHMubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgYWdncmVnYXRpb25MZXZlbEluZm8gb2YgY3JpdGljYWxpdHlDYWxjdWxhdGlvbi5Db25zdGFudFRocmVzaG9sZHMpIHtcblx0XHRcdGNvbnN0IHZpc2libGVEaW1lbnNpb25zOiBzdHJpbmdbXSB8IG51bGwgPSBhZ2dyZWdhdGlvbkxldmVsSW5mby5BZ2dyZWdhdGlvbkxldmVsID8gW10gOiBudWxsO1xuXG5cdFx0XHRpZiAodmlzaWJsZURpbWVuc2lvbnMgJiYgYWdncmVnYXRpb25MZXZlbEluZm8uQWdncmVnYXRpb25MZXZlbCAmJiBhZ2dyZWdhdGlvbkxldmVsSW5mby5BZ2dyZWdhdGlvbkxldmVsLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Zm9yIChjb25zdCBwcm9wZXJ0eVBhdGggb2YgYWdncmVnYXRpb25MZXZlbEluZm8uQWdncmVnYXRpb25MZXZlbCkge1xuXHRcdFx0XHRcdHZpc2libGVEaW1lbnNpb25zLnB1c2goKHByb3BlcnR5UGF0aCBhcyB1bmtub3duIGFzIEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD4pLiRQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGFnZ3JlZ2F0aW9uTGV2ZWwgPSB7XG5cdFx0XHRcdFZpc2libGVEaW1lbnNpb25zOiB2aXNpYmxlRGltZW5zaW9uc1xuXHRcdFx0fTtcblxuXHRcdFx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGFnZ3JlZ2F0aW9uTGV2ZWxJbmZvW2tleSBhcyB1bmtub3duIGFzIGtleW9mIExldmVsVGhyZXNob2xkc1R5cGVdO1xuXHRcdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0XHRhZ2dyZWdhdGlvbkxldmVsW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aHJlc2hvbGRzLkFnZ3JlZ2F0aW9uTGV2ZWxzPy5wdXNoKGFnZ3JlZ2F0aW9uTGV2ZWwpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBzZXRNZWFzdXJlRGF0YVBvaW50KG1lYXN1cmU6IE1lYXN1cmVUeXBlLCBkYXRhUG9pbnQ6IERhdGFQb2ludCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRpZiAoZGF0YVBvaW50ICYmIGRhdGFQb2ludC5WYWx1ZS4kUGF0aCA9PSBtZWFzdXJlLmtleSkge1xuXHRcdG1lYXN1cmUuZGF0YVBvaW50ID0gQ2hhcnRIZWxwZXIuZm9ybWF0SlNPTlRvU3RyaW5nKGNyZWF0ZURhdGFQb2ludFByb3BlcnR5KGRhdGFQb2ludCkpIHx8IFwiXCI7XG5cdH1cbn1cblxuZnVuY3Rpb24gc2V0TWVhc3VyZVJvbGUobWVhc3VyZTogTWVhc3VyZVR5cGUsIHJvbGU6IE1ldGFNb2RlbEVudW08Q2hhcnRNZWFzdXJlUm9sZVR5cGU+IHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdGlmIChyb2xlICE9IG51bGwpIHtcblx0XHRjb25zdCBpbmRleCA9IHJvbGUuJEVudW1NZW1iZXI7XG5cdFx0bWVhc3VyZS5yb2xlID0gbWVhc3VyZVJvbGVbaW5kZXhdO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldERlcGVuZGVudHMoY2hhcnRCbG9jazogQ2hhcnRCbG9jaywgY2hhcnRDb250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHwgc3RyaW5nW10ge1xuXHRpZiAoY2hhcnRCbG9jay5fY29tbWFuZEFjdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBjaGFydEJsb2NrLl9jb21tYW5kQWN0aW9ucy5tYXAoKGNvbW1hbmRBY3Rpb246IENvbW1hbmRBY3Rpb24pID0+IHtcblx0XHRcdHJldHVybiBnZXRBY3Rpb25Db21tYW5kKGNvbW1hbmRBY3Rpb24sIGNoYXJ0Q29udGV4dCwgY2hhcnRCbG9jayk7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIFwiXCI7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBwZXJzb25hbGl6YXRpb24gU3BlY2lmaWVzIHRoZSBjaGFydCBwZXJzb25hbGl6YXRpb25cbiAqL1xuXG5mdW5jdGlvbiBjaGVja1BlcnNvbmFsaXphdGlvbkluQ2hhcnRQcm9wZXJ0aWVzKHBlcnNvbmFsaXphdGlvbjogQ2hhcnRQMTNuVHlwZSwgY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IHZvaWQge1xuXHRpZiAocGVyc29uYWxpemF0aW9uKSB7XG5cdFx0aWYgKHBlcnNvbmFsaXphdGlvbiA9PT0gXCJmYWxzZVwiIHx8IChwZXJzb25hbGl6YXRpb24gYXMgYm9vbGVhbikgPT09IGZhbHNlKSB7XG5cdFx0XHRjaGFydEJsb2NrLl9wZXJzb25hbGl6YXRpb24gPSB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIGlmIChwZXJzb25hbGl6YXRpb24gPT09IFwidHJ1ZVwiIHx8IChwZXJzb25hbGl6YXRpb24gYXMgYm9vbGVhbikgPT09IHRydWUpIHtcblx0XHRcdGNoYXJ0QmxvY2suX3BlcnNvbmFsaXphdGlvbiA9IE9iamVjdC52YWx1ZXMocGVyc29uYWxpemF0aW9uVmFsdWVzKS5qb2luKFwiLFwiKTtcblx0XHR9IGVsc2UgaWYgKHZlcmlmeVZhbGlkUGVyc29uYWxpemF0aW9uKHBlcnNvbmFsaXphdGlvbiBhcyBzdHJpbmcpID09PSB0cnVlKSB7XG5cdFx0XHRjaGFydEJsb2NrLl9wZXJzb25hbGl6YXRpb24gPSBwZXJzb25hbGl6YXRpb247XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNoYXJ0QmxvY2suX3BlcnNvbmFsaXphdGlvbiA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHBlcnNvbmFsaXphdGlvblxuICogQHJldHVybnMgYHRydWVgIG9yIGBmYWxzZWAgaWYgdGhlIHBlcnNvbmFsaXphdGlvbiBpcyB2YWxpZCBvciBub3QgdmFsaWRcbiAqL1xuZnVuY3Rpb24gdmVyaWZ5VmFsaWRQZXJzb25hbGl6YXRpb24ocGVyc29uYWxpemF0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcblx0bGV0IHZhbGlkID0gdHJ1ZTtcblx0Y29uc3Qgc3BsaXRBcnJheSA9IHBlcnNvbmFsaXphdGlvbi5zcGxpdChcIixcIik7XG5cdGNvbnN0IGFjY2VwdGVkVmFsdWVzOiBzdHJpbmdbXSA9IE9iamVjdC52YWx1ZXMocGVyc29uYWxpemF0aW9uVmFsdWVzKTtcblx0c3BsaXRBcnJheS5mb3JFYWNoKChhcnJheUVsZW1lbnQpID0+IHtcblx0XHRpZiAoIWFjY2VwdGVkVmFsdWVzLmluY2x1ZGVzKGFycmF5RWxlbWVudCkpIHtcblx0XHRcdHZhbGlkID0gZmFsc2U7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHZhbGlkO1xufVxuXG5mdW5jdGlvbiBnZXRWYXJpYW50TWFuYWdlbWVudChjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogc3RyaW5nIHtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSBjaGFydEJsb2NrLnZhcmlhbnRNYW5hZ2VtZW50ID8gY2hhcnRCbG9jay52YXJpYW50TWFuYWdlbWVudCA6IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLnZhcmlhbnRNYW5hZ2VtZW50O1xuXHRyZXR1cm4gY2hhcnRCbG9jay5wZXJzb25hbGl6YXRpb24gPT09IHVuZGVmaW5lZCA/IFwiTm9uZVwiIDogdmFyaWFudE1hbmFnZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVZhcmlhbnRNYW5hZ2VtZW50KGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBzdHJpbmcge1xuXHRjb25zdCBwZXJzb25hbGl6YXRpb24gPSBjaGFydEJsb2NrLnBlcnNvbmFsaXphdGlvbjtcblx0aWYgKHBlcnNvbmFsaXphdGlvbikge1xuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gZ2V0VmFyaWFudE1hbmFnZW1lbnQoY2hhcnRCbG9jayk7XG5cdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIikge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PFZhcmlhbnRNYW5hZ2VtZW50XG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtjaGFydEJsb2NrLl9ibG9ja0lkLCBcIlZNXCJdKX1cblx0XHRcdFx0XHRmb3I9e1tjaGFydEJsb2NrLl9ibG9ja0lkIV19XG5cdFx0XHRcdFx0c2hvd1NldEFzRGVmYXVsdD17dHJ1ZX1cblx0XHRcdFx0XHRoZWFkZXJMZXZlbD17Y2hhcnRCbG9jay5oZWFkZXJMZXZlbH1cblx0XHRcdFx0XHRzZWxlY3Q9eyhldmVudDogVmFyaWFudE1hbmFnZW1lbnQkU2VsZWN0RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdGNoYXJ0QmxvY2suZmlyZVZhcmlhbnRTZWxlY3RlZD8uKGV2ZW50KTtcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdHNhdmU9eyhldmVudDogVmFyaWFudE1hbmFnZW1lbnQkU2F2ZUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRjaGFydEJsb2NrLmZpcmVWYXJpYW50U2F2ZWQ/LihldmVudCk7XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmICh2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJOb25lXCIgfHwgdmFyaWFudE1hbmFnZW1lbnQgPT09IFwiUGFnZVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH0gZWxzZSBpZiAoIXBlcnNvbmFsaXphdGlvbikge1xuXHRcdExvZy53YXJuaW5nKFwiVmFyaWFudCBNYW5hZ2VtZW50IGNhbm5vdCBiZSBlbmFibGVkIHdoZW4gcGVyc29uYWxpemF0aW9uIGlzIGRpc2FibGVkXCIpO1xuXHR9XG5cdHJldHVybiBcIlwiO1xufVxuXG5mdW5jdGlvbiBnZXRQZXJzaXN0ZW5jZVByb3ZpZGVyKGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBQZXJzaXN0ZW5jZVByb3ZpZGVyIHwgdW5kZWZpbmVkIHtcblx0aWYgKGdldFZhcmlhbnRNYW5hZ2VtZW50KGNoYXJ0QmxvY2spID09PSBcIk5vbmVcIikge1xuXHRcdHJldHVybiA8UGVyc2lzdGVuY2VQcm92aWRlciBpZD17Z2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIFwiUGVyc2lzdGVuY2VQcm92aWRlclwiXSl9IGZvcj17Y2hhcnRCbG9jay5fYmxvY2tJZH0gLz47XG5cdH1cbn1cblxuZnVuY3Rpb24gcHVzaEFjdGlvbkNvbW1hbmQoXG5cdGFjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdGRhdGFGaWVsZDogKE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkRm9yQWN0aW9uPiAmIHsgSW52b2NhdGlvbkdyb3VwaW5nOiBNZXRhTW9kZWxFbnVtPE9wZXJhdGlvbkdyb3VwaW5nVHlwZT4gfSkgfCB1bmRlZmluZWQsXG5cdGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9ja1xuKTogdm9pZCB7XG5cdGlmIChkYXRhRmllbGQpIHtcblx0XHRjb25zdCBjb21tYW5kQWN0aW9uID0ge1xuXHRcdFx0YWN0aW9uQ29udGV4dDogYWN0aW9uQ29udGV4dCxcblx0XHRcdG9uRXhlY3V0ZUFjdGlvbjogQ2hhcnRIZWxwZXIuZ2V0UHJlc3NFdmVudEZvckRhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbihcblx0XHRcdFx0Y2hhcnRCbG9jay5fYmxvY2tJZCEsXG5cdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAgfHwgXCJcIlxuXHRcdFx0KSxcblx0XHRcdG9uRXhlY3V0ZUlCTjogQ29tbW9uSGVscGVyLmdldFByZXNzSGFuZGxlckZvckRhdGFGaWVsZEZvcklCTihcblx0XHRcdFx0ZGF0YUZpZWxkIGFzIHVua25vd24gYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRgXFwke2ludGVybmFsPnNlbGVjdGVkQ29udGV4dHN9YCxcblx0XHRcdFx0ZmFsc2Vcblx0XHRcdCksXG5cdFx0XHRvbkV4ZWN1dGVNYW5pZmVzdDogQ29tbW9uSGVscGVyLmJ1aWxkQWN0aW9uV3JhcHBlcihhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uLCBjaGFydEJsb2NrKSxcblx0XHRcdGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwXG5cdFx0fTtcblx0XHRjaGFydEJsb2NrLl9jb21tYW5kQWN0aW9ucy5wdXNoKGNvbW1hbmRBY3Rpb24pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvbkNvbW1hbmQoY29tbWFuZEFjdGlvbjogQ29tbWFuZEFjdGlvbiwgY2hhcnRDb250ZXh0OiBDb250ZXh0LCBjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogc3RyaW5nIHtcblx0Y29uc3QgYWN0aW9uID0gY29tbWFuZEFjdGlvbi5hY3Rpb25Db250ZXh0LmdldE9iamVjdCgpO1xuXHRjb25zdCBkYXRhRmllbGRDb250ZXh0ID0gYWN0aW9uLmFubm90YXRpb25QYXRoICYmIGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGgpO1xuXHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRDb250ZXh0ICYmIGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdGNvbnN0IGRhdGFGaWVsZEFjdGlvbiA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGggKyBcIi9BY3Rpb25cIikhO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0ID0gQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQoZGF0YUZpZWxkQWN0aW9uKTtcblx0Y29uc3QgaXNCb3VuZFBhdGggPSBDb21tb25IZWxwZXIuZ2V0UGF0aFRvQm91bmRBY3Rpb25PdmVybG9hZChkYXRhRmllbGRBY3Rpb24pO1xuXHRjb25zdCBpc0JvdW5kID0gY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGlzQm91bmRQYXRoKSEuZ2V0T2JqZWN0KCk7XG5cdGNvbnN0IGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUoXG5cdFx0Q2hhcnRIZWxwZXIuZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGNoYXJ0Q29udGV4dC5nZXRPYmplY3QoKSwge1xuXHRcdFx0Y29udGV4dDogY2hhcnRDb250ZXh0XG5cdFx0fSlcblx0KTtcblx0Y29uc3QgaXNBY3Rpb25FbmFibGVkID0gYWN0aW9uLmVuYWJsZWRcblx0XHQ/IGFjdGlvbi5lbmFibGVkXG5cdFx0OiBDaGFydEhlbHBlci5pc0RhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbkVuYWJsZWQoXG5cdFx0XHRcdGlzQm91bmQgJiYgaXNCb3VuZC4kSXNCb3VuZCxcblx0XHRcdFx0ZGF0YUZpZWxkLkFjdGlvbixcblx0XHRcdFx0Y2hhcnRCbG9jay5fY29udGV4dCxcblx0XHRcdFx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAgfHwgXCJcIixcblx0XHRcdFx0YWN0aW9uLmVuYWJsZU9uU2VsZWN0IHx8IFwiXCJcblx0XHQgICk7XG5cdGxldCBpc0lCTkVuYWJsZWQ7XG5cdGlmIChhY3Rpb24uZW5hYmxlZCkge1xuXHRcdGlzSUJORW5hYmxlZCA9IGFjdGlvbi5lbmFibGVkO1xuXHR9IGVsc2UgaWYgKGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQpIHtcblx0XHRpc0lCTkVuYWJsZWQgPSBcIns9ICV7aW50ZXJuYWw+bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfSA+PSAxfVwiO1xuXHR9XG5cblx0bGV0IGNvbW1hbmRFbmFibGVkOiBib29sZWFuO1xuXHRzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG5cdFx0Y2FzZSBcIkZvckFjdGlvblwiOlxuXHRcdFx0Y29tbWFuZEVuYWJsZWQgPSBpc0FjdGlvbkVuYWJsZWQgPz8gYWN0aW9uLmVuYWJsZWQ7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRm9yTmF2aWdhdGlvblwiOlxuXHRcdFx0Y29tbWFuZEVuYWJsZWQgPSBpc0lCTkVuYWJsZWQgPz8gYWN0aW9uLmVuYWJsZWQ7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0Y29tbWFuZEVuYWJsZWQgPSBhY3Rpb24uZW5hYmxlZDtcblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0Y29uc3QgYWN0aW9uQ29tbWFuZCA9IChcblx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0ZXhlY3V0ZT17KGV2ZW50OiBDb21tYW5kRXhlY3V0aW9uJEV4ZWN1dGVFdmVudCk6IHZvaWQgPT5cblx0XHRcdFx0Y29tbWFuZEV4ZWN1dGUoZXZlbnQsIGFjdGlvbiwgY2hhcnRCbG9jay5fYmxvY2tJZCEsIGNvbW1hbmRBY3Rpb24uY2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAhLCBkYXRhRmllbGQpXG5cdFx0XHR9XG5cdFx0XHRlbmFibGVkPXtjb21tYW5kRW5hYmxlZH1cblx0XHRcdHZpc2libGU9eyhnZXRWaXNpYmxlKGRhdGFGaWVsZENvbnRleHQsIGNoYXJ0QmxvY2spIGFzIGJvb2xlYW4pID8/IGFjdGlvbi52aXNpYmxlfVxuXHRcdFx0Y29tbWFuZD17YWN0aW9uLmNvbW1hbmR9XG5cdFx0Lz5cblx0KTtcblxuXHRpZiAoXG5cdFx0YWN0aW9uLnR5cGUgPT0gXCJGb3JBY3Rpb25cIiAmJlxuXHRcdCghaXNCb3VuZCB8fFxuXHRcdFx0aXNCb3VuZC5Jc0JvdW5kICE9PSB0cnVlIHx8XG5cdFx0XHQoYWN0aW9uQ29udGV4dCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtgQCR7Q29yZUFubm90YXRpb25UZXJtcy5PcGVyYXRpb25BdmFpbGFibGV9YF0gIT09IGZhbHNlKVxuXHQpIHtcblx0XHRyZXR1cm4gYWN0aW9uQ29tbWFuZDtcblx0fSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PSBcIkZvckFjdGlvblwiKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGFjdGlvbkNvbW1hbmQ7XG5cdH1cbn1cblxuZnVuY3Rpb24gY29tbWFuZEV4ZWN1dGUoXG5cdGV2ZW50OiBDb21tYW5kRXhlY3V0aW9uJEV4ZWN1dGVFdmVudCxcblx0YWN0aW9uOiB7IEludm9jYXRpb25Hcm91cGluZzogeyAkRW51bU1lbWJlcjogc3RyaW5nIH07IGFjdGlvbjogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGhhbmRsZXJNb2R1bGU6IHN0cmluZzsgaGFuZGxlck1ldGhvZDogc3RyaW5nIH0sXG5cdGlkOiBzdHJpbmcsXG5cdGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBzdHJpbmcsXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG4pOiB2b2lkIHtcblx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoZXZlbnQuZ2V0U291cmNlKCkpO1xuXHRjb25zdCBjb250cm9sbGVyID0gdmlldz8uZ2V0Q29udHJvbGxlcigpO1xuXG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRjb25zdCBzSW52b2NhdGlvbkdyb3VwaW5nID1cblx0XHRcdFx0YWN0aW9uLkludm9jYXRpb25Hcm91cGluZyAmJlxuXHRcdFx0XHRhY3Rpb24uSW52b2NhdGlvbkdyb3VwaW5nLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdD8gXCJDaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdDogXCJJc29sYXRlZFwiO1xuXHRcdFx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdFx0XHRjb250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiksXG5cdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzogc0ludm9jYXRpb25Hcm91cGluZyxcblx0XHRcdFx0Y29udHJvbElkOiBpZCxcblx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCxcblx0XHRcdFx0bW9kZWw6IHZpZXcuZ2V0TW9kZWwoKSxcblx0XHRcdFx0bGFiZWw6IGRhdGFGaWVsZC5MYWJlbCBhcyBzdHJpbmdcblx0XHRcdH07XG5cdFx0XHRjb250cm9sbGVyLmVkaXRGbG93Lmludm9rZUFjdGlvbihkYXRhRmllbGQuQWN0aW9uIGFzIHN0cmluZywgcGFyYW1zKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJGb3JOYXZpZ2F0aW9uXCI6XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGFyYW1ldGVyczogTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIilcblx0XHRcdH07XG5cdFx0XHRpZiAoKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLk1hcHBpbmcpIHtcblx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gSlNPTi5zdHJpbmdpZnkoKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLk1hcHBpbmcpO1xuXHRcdFx0fVxuXHRcdFx0Y29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKFxuXHRcdFx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuU2VtYW50aWNPYmplY3QgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5BY3Rpb24gYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdEZQTUhlbHBlci5hY3Rpb25XcmFwcGVyKGV2ZW50LCBhY3Rpb24uaGFuZGxlck1vZHVsZSwgYWN0aW9uLmhhbmRsZXJNZXRob2QsIHtcblx0XHRcdFx0Y29udGV4dHM6IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpXG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEl0ZW1zKGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG5cdGlmIChjaGFydEJsb2NrLl9jaGFydCkge1xuXHRcdGNvbnN0IGRpbWVuc2lvbnM6IHN0cmluZ1tdID0gW107XG5cdFx0Y29uc3QgbWVhc3VyZXM6IHN0cmluZ1tdID0gW107XG5cdFx0aWYgKGNoYXJ0QmxvY2suX2NoYXJ0LkRpbWVuc2lvbnMpIHtcblx0XHRcdENoYXJ0SGVscGVyLmZvcm1hdERpbWVuc2lvbnMoY2hhcnRCbG9jay5fY2hhcnRDb250ZXh0KVxuXHRcdFx0XHQuZ2V0T2JqZWN0KClcblx0XHRcdFx0LmZvckVhY2goKGRpbWVuc2lvbjogRGltZW5zaW9uVHlwZSkgPT4ge1xuXHRcdFx0XHRcdGRpbWVuc2lvbi5pZCA9IGdlbmVyYXRlKFtjaGFydEJsb2NrLmlkLCBcImRpbWVuc2lvblwiLCBkaW1lbnNpb24ua2V5XSk7XG5cdFx0XHRcdFx0ZGltZW5zaW9ucy5wdXNoKFxuXHRcdFx0XHRcdFx0Z2V0SXRlbShcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGlkOiBkaW1lbnNpb24uaWQsXG5cdFx0XHRcdFx0XHRcdFx0a2V5OiBkaW1lbnNpb24ua2V5LFxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBkaW1lbnNpb24ubGFiZWwsXG5cdFx0XHRcdFx0XHRcdFx0cm9sZTogZGltZW5zaW9uLnJvbGVcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XCJfZmVfZ3JvdXBhYmxlX1wiLFxuXHRcdFx0XHRcdFx0XHRcImdyb3VwYWJsZVwiXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChjaGFydEJsb2NrLm1lYXN1cmVzKSB7XG5cdFx0XHRDaGFydEhlbHBlci5mb3JtYXRNZWFzdXJlcyhjaGFydEJsb2NrLm1lYXN1cmVzKS5mb3JFYWNoKChtZWFzdXJlOiBNZWFzdXJlVHlwZSkgPT4ge1xuXHRcdFx0XHRtZWFzdXJlLmlkID0gZ2VuZXJhdGUoW2NoYXJ0QmxvY2suaWQsIFwibWVhc3VyZVwiLCBtZWFzdXJlLmtleV0pO1xuXHRcdFx0XHRtZWFzdXJlcy5wdXNoKFxuXHRcdFx0XHRcdGdldEl0ZW0oXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGlkOiBtZWFzdXJlLmlkLFxuXHRcdFx0XHRcdFx0XHRrZXk6IG1lYXN1cmUua2V5LFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogbWVhc3VyZS5sYWJlbCxcblx0XHRcdFx0XHRcdFx0cm9sZTogbWVhc3VyZS5yb2xlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XCJfZmVfYWdncmVnYXRhYmxlX1wiLFxuXHRcdFx0XHRcdFx0XCJhZ2dyZWdhdGFibGVcIlxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAoZGltZW5zaW9ucy5sZW5ndGggJiYgbWVhc3VyZXMubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gZGltZW5zaW9ucy5jb25jYXQobWVhc3VyZXMpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gXCJcIjtcbn1cblxuZnVuY3Rpb24gZ2V0SXRlbShpdGVtOiBNZWFzdXJlVHlwZSB8IERpbWVuc2lvblR5cGUsIHByZWZpeDogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gKFxuXHRcdDxNZGNDaGFydEl0ZW1cblx0XHRcdGlkPXtpdGVtLmlkfVxuXHRcdFx0cHJvcGVydHlLZXk9e3ByZWZpeCArIGl0ZW0ua2V5fVxuXHRcdFx0dHlwZT17dHlwZX1cblx0XHRcdGxhYmVsPXtyZXNvbHZlQmluZGluZ1N0cmluZyhpdGVtLmxhYmVsIGFzIHN0cmluZywgXCJzdHJpbmdcIil9XG5cdFx0XHRyb2xlPXtpdGVtLnJvbGV9XG5cdFx0Lz5cblx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0VG9vbGJhckFjdGlvbnMoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IFRvb2xiYXJBY3Rpb25bXSB7XG5cdGNvbnN0IGFjdGlvbnMgPSBnZXRBY3Rpb25zKGNoYXJ0QmxvY2spO1xuXHRpZiAoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/Lm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCkge1xuXHRcdGFjdGlvbnMucHVzaChnZXRTZWdtZW50ZWRCdXR0b24oY2hhcnRCbG9jaykpO1xuXHR9XG5cdGlmIChjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5pc0luc2lnaHRzRW5hYmxlZCkge1xuXHRcdGFjdGlvbnMucHVzaChcblx0XHRcdGdldFN0YW5kYXJkQWN0aW9ucyhcblx0XHRcdFx0Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uaXNJbnNpZ2h0c0VuYWJsZWQsXG5cdFx0XHRcdGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmlzSW5zaWdodHNWaXNpYmxlLFxuXHRcdFx0XHRjaGFydEJsb2NrLl9ibG9ja0lkISxcblx0XHRcdFx0Y2hhcnRCbG9ja1xuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblx0aWYgKGFjdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBhY3Rpb25zO1xuXHR9XG5cdHJldHVybiBbXTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25zKFxuXHRpc0luc2lnaHRzRW5hYmxlZDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHwgdW5kZWZpbmVkLFxuXHRpc0luc2lnaHRzVmlzaWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHwgdW5kZWZpbmVkLFxuXHRpZDogc3RyaW5nLFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrXG4pOiBNZW51SXRlbSB8IEFjdGlvblRvb2xiYXJBY3Rpb24ge1xuXHRyZXR1cm4gKFxuXHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uIHZpc2libGU9e2lzSW5zaWdodHNWaXNpYmxlfT5cblx0XHRcdDxCdXR0b25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtpZCwgXCJTdGFuZGFyZEFjdGlvbjo6SW5zaWdodHNcIl0pfVxuXHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX0lOU0lHSFRTX0NBUkR9XCJcblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRjaGFydEJsb2NrLm9uQWRkQ2FyZFRvSW5zaWdodHNQcmVzc2VkKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVuYWJsZWQ9e2lzSW5zaWdodHNFbmFibGVkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PVwiQWx3YXlzT3ZlcmZsb3dcIiAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9CdXR0b24+XG5cdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXRBY3Rpb25zKGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBUb29sYmFyQWN0aW9uW10ge1xuXHRjb25zdCBhY3Rpb25zID0gcmVtb3ZlTWVudUl0ZW1zKGNoYXJ0QmxvY2suY2hhcnRBY3Rpb25zID8/IFtdKTtcblx0Ly8gQXBwbHkgcHJpbWFyeSBhY3Rpb24gb3ZlcmZsb3cgcHJvdGVjdGlvbiBiZWZvcmUgcHJvY2Vzc2luZ1xuXHRjb25zdCBhY3Rpb25zV2l0aE92ZXJmbG93UHJvdGVjdGlvbiA9IEFjdGlvbkhlbHBlci5lbnN1cmVQcmltYXJ5QWN0aW9uTmV2ZXJPdmVyZmxvd3MoYWN0aW9ucyk7XG5cblx0cmV0dXJuIGFjdGlvbnNXaXRoT3ZlcmZsb3dQcm90ZWN0aW9uLm1hcCgoYWN0aW9uOiBCYXNlQWN0aW9uKSA9PiB7XG5cdFx0aWYgKGFjdGlvbi5hbm5vdGF0aW9uUGF0aCB8fCAoYWN0aW9uLnR5cGUgPT09IFwiTWVudVwiICYmICFhY3Rpb24uaWQ/LnN0YXJ0c1dpdGgoXCJDdXN0b21BY3Rpb25cIikpKSB7XG5cdFx0XHQvLyBMb2FkIGFubm90YXRpb24gYmFzZWQgYWN0aW9uc1xuXHRcdFx0cmV0dXJuIGdldEFjdGlvbihhY3Rpb24sIGNoYXJ0QmxvY2suX2NoYXJ0Q29udGV4dCwgZmFsc2UsIGNoYXJ0QmxvY2spO1xuXHRcdH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09IFwiU2VwYXJhdG9yXCIpIHtcblx0XHRcdHJldHVybiBnZXRTZXBhcmF0b3IoYWN0aW9uKTtcblx0XHR9IGVsc2UgaWYgKGFjdGlvbi5oYXNPd25Qcm9wZXJ0eShcIm5vV3JhcFwiKSkge1xuXHRcdFx0Ly8gTG9hZCBYTUwgb3IgbWFuaWZlc3QgYmFzZWQgYWN0aW9ucyAvIGFjdGlvbiBncm91cHNcblx0XHRcdHJldHVybiBnZXRDdXN0b21BY3Rpb25zKGFjdGlvbiBhcyBDdXN0b21BbmRBY3Rpb24sIGNoYXJ0QmxvY2suX2NoYXJ0Q29udGV4dCwgY2hhcnRCbG9jayk7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTWVudUl0ZW1zKGFjdGlvbnM6IEJhc2VBY3Rpb25bXSk6IEJhc2VBY3Rpb25bXSB7XG5cdC8vIElmIGFjdGlvbiBpcyBhbHJlYWR5IHBhcnQgb2YgbWVudSBpbiBhY3Rpb24gZ3JvdXAsIHRoZW4gaXQgd2lsbFxuXHQvLyBiZSByZW1vdmVkIGZyb20gdGhlIG1haW4gYWN0aW9ucyBsaXN0XG5cdGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcblx0XHRpZiAoYWN0aW9uLm1lbnUpIHtcblx0XHRcdGFjdGlvbi5tZW51LmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRcdFx0Y29uc3QgaWR4ID0gYWN0aW9ucy5tYXAoKGFjdCkgPT4gYWN0LmtleSkuaW5kZXhPZihpdGVtLmtleSk7XG5cdFx0XHRcdGlmIChpZHggIT09IC0xKSB7XG5cdFx0XHRcdFx0YWN0aW9ucy5zcGxpY2UoaWR4LCAxKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhY3Rpb25zO1xufVxuXG5mdW5jdGlvbiBnZXRDdXN0b21BY3Rpb25zKGFjdGlvbjogQ3VzdG9tQW5kQWN0aW9uLCBjaGFydENvbnRleHQ6IENvbnRleHQsIGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBUb29sYmFyQWN0aW9uIHtcblx0bGV0IGFjdGlvbkVuYWJsZWQgPSBhY3Rpb24uZW5hYmxlZCBhcyBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRpZiAoKGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiA/PyBmYWxzZSkgJiYgYWN0aW9uLmVuYWJsZWQgPT09IFwidHJ1ZVwiKSB7XG5cdFx0YWN0aW9uRW5hYmxlZCA9IFwiez0gJXtpbnRlcm5hbD5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDF9XCI7XG5cdH1cblx0aWYgKGFjdGlvbi50eXBlID09PSBcIkRlZmF1bHRcIikge1xuXHRcdC8vIExvYWQgWE1MIG9yIG1hbmlmZXN0IGJhc2VkIHRvb2xiYXIgYWN0aW9uc1xuXHRcdHJldHVybiBnZXRBY3Rpb25Ub29sYmFyQWN0aW9uKFxuXHRcdFx0YWN0aW9uLFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogZ2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIGFjdGlvbi5pZF0pLFxuXHRcdFx0XHR1bml0dGVzdGlkOiBcIkRhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbkFjdGlvblwiLFxuXHRcdFx0XHRsYWJlbDogYWN0aW9uLnRleHQgPyBhY3Rpb24udGV4dCA6IFwiXCIsXG5cdFx0XHRcdGFyaWFIYXNQb3B1cDogdW5kZWZpbmVkLFxuXHRcdFx0XHRwcmVzczogYWN0aW9uLnByZXNzID8gYWN0aW9uLnByZXNzIDogXCJcIixcblx0XHRcdFx0ZW5hYmxlZDogYWN0aW9uRW5hYmxlZCxcblx0XHRcdFx0dmlzaWJsZTogYWN0aW9uLnZpc2libGUgPyBhY3Rpb24udmlzaWJsZSA6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRjaGFydEJsb2NrXG5cdFx0KTtcblx0fSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gXCJNZW51XCIpIHtcblx0XHQvLyBMb2FkIGFjdGlvbiBncm91cHMgKE1lbnUpXG5cdFx0cmV0dXJuIGdldEFjdGlvblRvb2xiYXJNZW51QWN0aW9uKFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogZ2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIGFjdGlvbi5pZF0pLFxuXHRcdFx0XHR0ZXh0OiBhY3Rpb24udGV4dCxcblx0XHRcdFx0dmlzaWJsZTogYWN0aW9uLnZpc2libGUsXG5cdFx0XHRcdGVuYWJsZWQ6IGFjdGlvbkVuYWJsZWQsXG5cdFx0XHRcdHVzZURlZmF1bHRBY3Rpb25Pbmx5OiBEZWZhdWx0QWN0aW9uSGFuZGxlci5nZXRVc2VEZWZhdWx0QWN0aW9uT25seShhY3Rpb24pLFxuXHRcdFx0XHRidXR0b25Nb2RlOiBEZWZhdWx0QWN0aW9uSGFuZGxlci5nZXRCdXR0b25Nb2RlKGFjdGlvbiksXG5cdFx0XHRcdGRlZmF1bHRBY3Rpb246IHVuZGVmaW5lZCxcblx0XHRcdFx0YWN0aW9uczogYWN0aW9uLFxuXHRcdFx0XHRwcmlvcml0eTogYWN0aW9uLnByaW9yaXR5LFxuXHRcdFx0XHRncm91cDogYWN0aW9uLmdyb3VwXG5cdFx0XHR9LFxuXHRcdFx0Y2hhcnRDb250ZXh0LFxuXHRcdFx0Y2hhcnRCbG9ja1xuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0TWVudUl0ZW1Gcm9tTWVudShtZW51SXRlbUFjdGlvbjogQ3VzdG9tQWN0aW9uLCBjaGFydENvbnRleHQ6IENvbnRleHQsIGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBUb29sYmFyQWN0aW9uIHtcblx0bGV0IHByZXNzSGFuZGxlcjogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHwgeyBcImpzeDpjb21tYW5kXCI6IENvbW1hbmRQcm9wZXJ0aWVzIH07XG5cdGlmIChtZW51SXRlbUFjdGlvbi5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdC8vQW5ub3RhdGlvbiBiYXNlZCBhY3Rpb24gaXMgcGFzc2VkIGFzIG1lbnUgaXRlbSBmb3IgbWVudSBidXR0b25cblx0XHRyZXR1cm4gZ2V0QWN0aW9uKG1lbnVJdGVtQWN0aW9uLCBjaGFydENvbnRleHQsIHRydWUsIGNoYXJ0QmxvY2spO1xuXHR9XG5cdGlmIChtZW51SXRlbUFjdGlvbi5jb21tYW5kKSB7XG5cdFx0cHJlc3NIYW5kbGVyID0geyBcImpzeDpjb21tYW5kXCI6IGBjbWQ6JHttZW51SXRlbUFjdGlvbi5jb21tYW5kfXxwcmVzc2AgYXMgQ29tbWFuZFByb3BlcnRpZXMgfTtcblx0fSBlbHNlIGlmIChtZW51SXRlbUFjdGlvbi5ub1dyYXAgPz8gZmFsc2UpIHtcblx0XHRwcmVzc0hhbmRsZXIgPSB7XG5cdFx0XHRwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBmdW5jdGlvbk5hbWUgPSBtZW51SXRlbUFjdGlvbi5oYW5kbGVyTWV0aG9kPy5zcGxpdChcIi5cIilbMV0gYXMgc3RyaW5nO1xuXHRcdFx0XHRjb25zdCBjb250cm9sbGVyID0geyAuLi5Db21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGV2ZW50LmdldFNvdXJjZSgpKS5nZXRDb250cm9sbGVyKCkgfSBhcyB1bmtub3duIGFzIHtcblx0XHRcdFx0XHRbdGVtcDogc3RyaW5nXTogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZDtcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKGNvbnRyb2xsZXJbZnVuY3Rpb25OYW1lXSkgY29udHJvbGxlcltmdW5jdGlvbk5hbWVdKGV2ZW50KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHByZXNzSGFuZGxlciA9IHtcblx0XHRcdHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IHNlbGVjdGVkQ29udGV4dHMgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGV2ZW50LmdldFNvdXJjZSgpKVxuXHRcdFx0XHRcdC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpXG5cdFx0XHRcdFx0Py5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIik7XG5cdFx0XHRcdEZQTUhlbHBlci5hY3Rpb25XcmFwcGVyKGV2ZW50LCBtZW51SXRlbUFjdGlvbi5oYW5kbGVyTW9kdWxlLCBtZW51SXRlbUFjdGlvbi5oYW5kbGVyTWV0aG9kLCB7IGNvbnRleHRzOiBzZWxlY3RlZENvbnRleHRzIH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gPE1lbnVJdGVtIHRleHQ9e21lbnVJdGVtQWN0aW9uLnRleHR9IHsuLi5wcmVzc0hhbmRsZXJ9IHZpc2libGU9e21lbnVJdGVtQWN0aW9uLnZpc2libGV9IGVuYWJsZWQ9e21lbnVJdGVtQWN0aW9uLmVuYWJsZWR9IC8+O1xufVxuXG5mdW5jdGlvbiBnZXRBY3Rpb25Ub29sYmFyTWVudUFjdGlvbihcblx0cHJvcHM6IEN1c3RvbVRvb2xiYXJNZW51QWN0aW9uLFxuXHRjaGFydENvbnRleHQ6IENvbnRleHQsXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IE1lbnVJdGVtIHwgQWN0aW9uVG9vbGJhckFjdGlvbiB7XG5cdGNvbnN0IGFNZW51SXRlbXMgPSAocHJvcHMuYWN0aW9ucz8ubWVudSBhcyBDdXN0b21BY3Rpb25bXSkubWFwKChhY3Rpb246IEN1c3RvbUFjdGlvbikgPT4ge1xuXHRcdHJldHVybiBnZXRNZW51SXRlbUZyb21NZW51KGFjdGlvbiwgY2hhcnRDb250ZXh0LCBjaGFydEJsb2NrKTtcblx0fSk7XG5cdGNvbnN0IGlzQUlPcGVyYXRpb24gPSBpc01lbnVBSU9wZXJhdGlvbihwcm9wcy5hY3Rpb25zPy5tZW51IGFzIEN1c3RvbUFjdGlvbltdKTtcblx0cmV0dXJuIChcblx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdHRleHQ9e3Byb3BzLnRleHR9XG5cdFx0XHRcdHR5cGU9XCJUcmFuc3BhcmVudFwiXG5cdFx0XHRcdGlkPXtwcm9wcy5pZH1cblx0XHRcdFx0dmlzaWJsZT17cHJvcHMudmlzaWJsZX1cblx0XHRcdFx0ZW5hYmxlZD17cHJvcHMuZW5hYmxlZH1cblx0XHRcdFx0dXNlRGVmYXVsdEFjdGlvbk9ubHk9e3Byb3BzLnVzZURlZmF1bHRBY3Rpb25Pbmx5fVxuXHRcdFx0XHRidXR0b25Nb2RlPXtwcm9wcy5idXR0b25Nb2RlfVxuXHRcdFx0XHRtZW51UG9zaXRpb249e0RvY2suQmVnaW5Cb3R0b219XG5cdFx0XHRcdGRlZmF1bHRBY3Rpb249e3Byb3BzLmRlZmF1bHRBY3Rpb24gYXMgdW5rbm93biBhcyAob0V2ZW50OiBVSTVFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0aWNvbj17aXNBSU9wZXJhdGlvbiA/IGFpSWNvbiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0YXJpYURlc2NyaWJlZEJ5PXtpc0FJT3BlcmF0aW9uID8gW2Ake2NoYXJ0QmxvY2suZ2V0SWQoKX0tLWZlOjpBaUFjdGlvbjo6QXJpYVRleHRgXSA6IHVuZGVmaW5lZH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRtZW51OiA8TWVudT57YU1lbnVJdGVtc308L01lbnU+LFxuXHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXtwcm9wcy5wcmlvcml0eX0gZ3JvdXA9e3Byb3BzLmdyb3VwfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51QnV0dG9uPlxuXHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uKGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbiwgY2hhcnRDb250ZXh0OiBDb250ZXh0LCBpc01lbnVJdGVtOiBib29sZWFuLCBjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogVG9vbGJhckFjdGlvbiB7XG5cdGNvbnN0IGRhdGFGaWVsZENvbnRleHQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoID8/IFwiXCIpITtcblx0aWYgKGFjdGlvbi50eXBlID09PSBcIkZvck5hdmlnYXRpb25cIikge1xuXHRcdHJldHVybiBnZXROYXZpZ2F0aW9uQWN0aW9ucyhhY3Rpb24sIGRhdGFGaWVsZENvbnRleHQsIGlzTWVudUl0ZW0sIGNoYXJ0QmxvY2spO1xuXHR9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBcIkZvckFjdGlvblwiKSB7XG5cdFx0cmV0dXJuIGdldEFubm90YXRpb25BY3Rpb25zKGNoYXJ0Q29udGV4dCwgYWN0aW9uIGFzIEFubm90YXRpb25BY3Rpb24sIGRhdGFGaWVsZENvbnRleHQsIGlzTWVudUl0ZW0sIGNoYXJ0QmxvY2spO1xuXHR9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBcIk1lbnVcIikge1xuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IGFjdGlvbi5tZW51Py5tYXAoKG1lbnVBY3Rpb246IEJhc2VBY3Rpb24pID0+IHtcblx0XHRcdHJldHVybiBnZXRBY3Rpb24obWVudUFjdGlvbiwgY2hhcnRDb250ZXh0LCB0cnVlLCBjaGFydEJsb2NrKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdFx0dHlwZT1cIlRyYW5zcGFyZW50XCJcblx0XHRcdFx0XHRpZD17YWN0aW9uLmtleX1cblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZH1cblx0XHRcdFx0XHRtZW51UG9zaXRpb249e0RvY2suQmVnaW5Cb3R0b219XG5cdFx0XHRcdFx0aWNvbj17YWN0aW9uPy5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gYWlJY29uIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdGFyaWFEZXNjcmliZWRCeT17YWN0aW9uPy5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gW2Ake2NoYXJ0QmxvY2suZ2V0SWQoKX0tLWZlOjpBaUFjdGlvbjo6QXJpYVRleHRgXSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRtZW51OiA8TWVudT57bWVudUl0ZW1zfTwvTWVudT4sXG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfSAvPlxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvTWVudUJ1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFNlcGFyYXRvcihhY3Rpb246IEJhc2VBY3Rpb24pOiBUb29sYmFyQWN0aW9uIHtcblx0cmV0dXJuIChcblx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdDxUb29sYmFyU2VwYXJhdG9yPlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0fX1cblx0XHRcdDwvVG9vbGJhclNlcGFyYXRvcj5cblx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdCk7XG59XG5cbmZ1bmN0aW9uIGdldE5hdmlnYXRpb25BY3Rpb25zKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdGRhdGFGaWVsZENvbnRleHQ6IENvbnRleHQsXG5cdGlzTWVudUl0ZW06IGJvb2xlYW4sXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IE1lbnVJdGVtIHwgQWN0aW9uVG9vbGJhckFjdGlvbiB7XG5cdGxldCBlbmFibGVkID0gXCJ0cnVlXCI7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdGlmIChhY3Rpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0ZW5hYmxlZCA9IGFjdGlvbi5lbmFibGVkO1xuXHR9IGVsc2UgaWYgKGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQpIHtcblx0XHRlbmFibGVkID0gXCJ7PSAle2ludGVybmFsPm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c30gPj0gMX1cIjtcblx0fVxuXHRyZXR1cm4gZ2V0QWN0aW9uVG9vbGJhckFjdGlvbihcblx0XHRhY3Rpb24sXG5cdFx0e1xuXHRcdFx0aWQ6IHVuZGVmaW5lZCxcblx0XHRcdHVuaXR0ZXN0aWQ6IFwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uQnV0dG9uQWN0aW9uXCIsXG5cdFx0XHRsYWJlbDogZGF0YUZpZWxkLkxhYmVsLFxuXHRcdFx0YXJpYUhhc1BvcHVwOiB1bmRlZmluZWQsXG5cdFx0XHRwcmVzczogQ29tbW9uSGVscGVyLmdldFByZXNzSGFuZGxlckZvckRhdGFGaWVsZEZvcklCTihkYXRhRmllbGQsIGBcXCR7aW50ZXJuYWw+c2VsZWN0ZWRDb250ZXh0c31gLCBmYWxzZSkhLFxuXHRcdFx0ZW5hYmxlZDogZW5hYmxlZCxcblx0XHRcdHZpc2libGU6IGdldFZpc2libGUoZGF0YUZpZWxkQ29udGV4dCwgY2hhcnRCbG9jaylcblx0XHR9LFxuXHRcdGlzTWVudUl0ZW0sXG5cdFx0Y2hhcnRCbG9jayxcblx0XHRkYXRhRmllbGRcblx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0QW5ub3RhdGlvbkFjdGlvbnMoXG5cdGNoYXJ0Q29udGV4dDogQ29udGV4dCxcblx0YWN0aW9uOiBBbm5vdGF0aW9uQWN0aW9uLFxuXHRkYXRhRmllbGRDb250ZXh0OiBDb250ZXh0LFxuXHRpc01lbnVJdGVtOiBib29sZWFuLFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrXG4pOiBUb29sYmFyQWN0aW9uIHtcblx0Y29uc3QgZGF0YUZpZWxkQWN0aW9uID0gY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCArIFwiL0FjdGlvblwiKSE7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQoZGF0YUZpZWxkQWN0aW9uKSk7XG5cdGNvbnN0IGFjdGlvbk9iamVjdCA9IGFjdGlvbkNvbnRleHQ/LmdldE9iamVjdCgpO1xuXHRjb25zdCBpc0JvdW5kUGF0aCA9IENvbW1vbkhlbHBlci5nZXRQYXRoVG9Cb3VuZEFjdGlvbk92ZXJsb2FkKGRhdGFGaWVsZEFjdGlvbik7XG5cdGNvbnN0IGlzQm91bmQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoaXNCb3VuZFBhdGgpIS5nZXRPYmplY3QoKTtcblx0Y29uc3QgZGF0YUZpZWxkID0gZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0aWYgKCFpc0JvdW5kIHx8IGlzQm91bmQuJElzQm91bmQgIT09IHRydWUgfHwgYWN0aW9uT2JqZWN0W2BAJHtDb3JlQW5ub3RhdGlvblRlcm1zLk9wZXJhdGlvbkF2YWlsYWJsZX1gXSAhPT0gZmFsc2UpIHtcblx0XHRjb25zdCBlbmFibGVkID0gZ2V0QW5ub3RhdGlvbkFjdGlvbnNFbmFibGVkKGFjdGlvbiwgaXNCb3VuZCwgZGF0YUZpZWxkLCBjaGFydENvbnRleHQsIGNoYXJ0QmxvY2suX2NvbnRleHQpO1xuXHRcdGNvbnN0IGRhdGFGaWVsZE1vZGVsT2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPihcblx0XHRcdGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGgpIGFzIENvbnRleHRcblx0XHQpO1xuXHRcdGNvbnN0IGFyaWFIYXNQb3B1cCA9IGlzRGF0YU1vZGVsT2JqZWN0UGF0aEZvckFjdGlvbldpdGhEaWFsb2coZGF0YUZpZWxkTW9kZWxPYmplY3RQYXRoKTtcblx0XHRjb25zdCBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9XG5cdFx0XHRlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShcblx0XHRcdFx0Q2hhcnRIZWxwZXIuZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGNoYXJ0Q29udGV4dC5nZXRPYmplY3QoKSwge1xuXHRcdFx0XHRcdGNvbnRleHQ6IGNoYXJ0Q29udGV4dFxuXHRcdFx0XHR9KVxuXHRcdFx0KSB8fCBcIlwiO1xuXHRcdHJldHVybiBnZXRBY3Rpb25Ub29sYmFyQWN0aW9uKFxuXHRcdFx0YWN0aW9uLFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogZ2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhkYXRhRmllbGRDb250ZXh0KV0pLFxuXHRcdFx0XHR1bml0dGVzdGlkOiBcIkRhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbkFjdGlvblwiLFxuXHRcdFx0XHRsYWJlbDogZGF0YUZpZWxkLkxhYmVsLFxuXHRcdFx0XHRhcmlhSGFzUG9wdXA6IGFyaWFIYXNQb3B1cCxcblx0XHRcdFx0ZW5hYmxlZDogZW5hYmxlZCxcblx0XHRcdFx0dmlzaWJsZTogZ2V0VmlzaWJsZShkYXRhRmllbGRDb250ZXh0LCBjaGFydEJsb2NrKVxuXHRcdFx0fSxcblx0XHRcdGlzTWVudUl0ZW0sXG5cdFx0XHRjaGFydEJsb2NrLFxuXHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXBcblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvblRvb2xiYXJBY3Rpb24oXG5cdGFjdGlvbjogKEJhc2VBY3Rpb24gfCBDdXN0b21BY3Rpb24pICYgeyBub1dyYXA/OiBib29sZWFuIH0sXG5cdHRvb2xiYXJBY3Rpb246IFRvb2xCYXJBY3Rpb24sXG5cdGlzTWVudUl0ZW06IGJvb2xlYW4sXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2ssXG5cdGRhdGFGaWVsZD86IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmdcbik6IE1lbnVJdGVtIHwgQWN0aW9uVG9vbGJhckFjdGlvbiB7XG5cdGlmIChpc01lbnVJdGVtKSB7XG5cdFx0Y29uc3QgcHJlc3NFdmVudDogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHwgeyBcImpzeDpjb21tYW5kXCI6IENvbW1hbmRQcm9wZXJ0aWVzIH0gPSBhY3Rpb24uY29tbWFuZFxuXHRcdFx0PyB7IFwianN4OmNvbW1hbmRcIjogYGNtZDoke2FjdGlvbi5jb21tYW5kfXxwcmVzc2AgYXMgQ29tbWFuZFByb3BlcnRpZXMgfVxuXHRcdFx0OiB7XG5cdFx0XHRcdFx0cHJlc3M6IChldmVudDogQnV0dG9uJFByZXNzRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGV2ZW50LmdldFNvdXJjZSgpKTtcblx0XHRcdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdFx0XHRcdGlmIChhY3Rpb24udHlwZSA9PT0gXCJGb3JBY3Rpb25cIikge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dHM6IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpLFxuXHRcdFx0XHRcdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzpcblx0XHRcdFx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKT8uSW52b2NhdGlvbkdyb3VwaW5nID09PSBPcGVyYXRpb25Hcm91cGluZ1R5cGUuQ2hhbmdlU2V0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gXCJDaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IFwiSXNvbGF0ZWRcIixcblx0XHRcdFx0XHRcdFx0XHRjb250cm9sSWQ6IGNoYXJ0QmxvY2suX2Jsb2NrSWQsXG5cdFx0XHRcdFx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCxcblx0XHRcdFx0XHRcdFx0XHRtb2RlbDogdmlldy5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQ/LkxhYmVsIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdFx0XHRkaXNhYmxlU3RyaWN0SGFuZGxpbmc6IGFjdGlvbi5kaXNhYmxlU3RyaWN0SGFuZGxpbmdcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0Y29udHJvbGxlci5lZGl0Rmxvdy5pbnZva2VBY3Rpb24oZGF0YUZpZWxkPy5BY3Rpb24gYXMgc3RyaW5nLCBwYXJhbXMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gXCJGb3JOYXZpZ2F0aW9uXCIpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvblBhcmFtZXRlcnM6IE5hdmlnYXRpb25QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIilcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0aWYgKChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKT8uTWFwcGluZykge1xuXHRcdFx0XHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IEpTT04uc3RyaW5naWZ5KFxuXHRcdFx0XHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLk1hcHBpbmdcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShcblx0XHRcdFx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuU2VtYW50aWNPYmplY3QgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLkFjdGlvbiBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdCAgfTtcblxuXHRcdHJldHVybiA8TWVudUl0ZW0gdGV4dD17dG9vbGJhckFjdGlvbi5sYWJlbH0gey4uLnByZXNzRXZlbnR9IGVuYWJsZWQ9e3Rvb2xiYXJBY3Rpb24uZW5hYmxlZH0gdmlzaWJsZT17dG9vbGJhckFjdGlvbi52aXNpYmxlfSAvPjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYnVpbGRBY3Rpb24oYWN0aW9uLCB0b29sYmFyQWN0aW9uLCBjaGFydEJsb2NrLCBkYXRhRmllbGQsIGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKTtcblx0fVxufVxuXG5mdW5jdGlvbiBidWlsZEFjdGlvbihcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHR0b29sYmFyQWN0aW9uOiBUb29sQmFyQWN0aW9uLFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrLFxuXHRkYXRhRmllbGQ/OiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwPzogc3RyaW5nXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHtcblx0cmV0dXJuIChcblx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdDxCdXR0b25cblx0XHRcdFx0aWQ9e3Rvb2xiYXJBY3Rpb24uaWR9XG5cdFx0XHRcdHRleHQ9e3Rvb2xiYXJBY3Rpb24ubGFiZWx9XG5cdFx0XHRcdGFyaWFIYXNQb3B1cD17dG9vbGJhckFjdGlvbi5hcmlhSGFzUG9wdXB9XG5cdFx0XHRcdHsuLi5nZXRBY3Rpb25QcmVzcyhhY3Rpb24sIGRhdGFGaWVsZCwgY2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAsIGNoYXJ0QmxvY2spfVxuXHRcdFx0XHRlbmFibGVkPXt0b29sYmFyQWN0aW9uLmVuYWJsZWR9XG5cdFx0XHRcdHZpc2libGU9e3Rvb2xiYXJBY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0aWNvbj17YWN0aW9uLmlzQUlPcGVyYXRpb24gPT09IHRydWUgPyBhaUljb24gOiB1bmRlZmluZWR9XG5cdFx0XHRcdGFyaWFEZXNjcmliZWRCeT17YWN0aW9uPy5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gW2Ake2NoYXJ0QmxvY2suZ2V0SWQoKX0tLWZlOjpBaUFjdGlvbjo6QXJpYVRleHRgXSA6IHVuZGVmaW5lZH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9CdXR0b24+XG5cdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXRBY3Rpb25QcmVzcyhcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRkYXRhRmllbGQ/OiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwPzogc3RyaW5nLFxuXHRjaGFydEJsb2NrPzogQ2hhcnRCbG9ja1xuKTogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHwgeyBcImpzeDpjb21tYW5kXCI6IENvbW1hbmRQcm9wZXJ0aWVzIH0ge1xuXHRsZXQgYWN0aW9uUHJlc3M6IHsgcHJlc3M6IChldmVudDogQnV0dG9uJFByZXNzRXZlbnQpID0+IHZvaWQgfSB8IHsgXCJqc3g6Y29tbWFuZFwiOiBDb21tYW5kUHJvcGVydGllcyB9ID0ge1xuXHRcdHByZXNzOiBcIlwiIGFzIHVua25vd24gYXMgKCkgPT4gdm9pZFxuXHR9O1xuXG5cdGlmIChhY3Rpb24uaGFzT3duUHJvcGVydHkoXCJub1dyYXBcIikpIHtcblx0XHRpZiAoYWN0aW9uLmNvbW1hbmQpIHtcblx0XHRcdGFjdGlvblByZXNzID0geyBcImpzeDpjb21tYW5kXCI6IGBjbWQ6JHthY3Rpb24uY29tbWFuZH18cHJlc3NgIGFzIENvbW1hbmRQcm9wZXJ0aWVzIH07XG5cdFx0fSBlbHNlIGlmICgoYWN0aW9uIGFzIEN1c3RvbUFjdGlvbikubm9XcmFwID09PSB0cnVlKSB7XG5cdFx0XHRhY3Rpb25QcmVzcyA9IGdldEN1c3RvbUFjdGlvblByZXNzKGFjdGlvbiBhcyBDdXN0b21BY3Rpb24pO1xuXHRcdH0gZWxzZSBpZiAoIWFjdGlvbi5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0YWN0aW9uUHJlc3MgPSBnZXRBY3Rpb25QcmVzc1dpdGhBbm5vdGF0aW9uUGF0aChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0YWN0aW9uUHJlc3MgPSBhY3Rpb24uY29tbWFuZFxuXHRcdFx0PyB7IFwianN4OmNvbW1hbmRcIjogYGNtZDoke2FjdGlvbi5jb21tYW5kfXxwcmVzc2AgYXMgQ29tbWFuZFByb3BlcnRpZXMgfVxuXHRcdFx0OiBnZXRTdGFuZGFyZEFjdGlvblByZXNzV2l0aE5vQ29tbWFuZChhY3Rpb24sIGRhdGFGaWVsZCwgY2hhcnRCbG9jaywgY2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXApO1xuXHR9XG5cblx0cmV0dXJuIGFjdGlvblByZXNzO1xufVxuXG5mdW5jdGlvbiBnZXRDdXN0b21BY3Rpb25QcmVzcyhhY3Rpb246IEN1c3RvbUFjdGlvbik6IHsgcHJlc3M6IChldmVudDogQnV0dG9uJFByZXNzRXZlbnQpID0+IHZvaWQgfSB7XG5cdHJldHVybiB7XG5cdFx0cHJlc3M6IChldmVudDogQnV0dG9uJFByZXNzRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGFjdGlvbi5oYW5kbGVyTWV0aG9kPy5zcGxpdChcIi5cIilbMV0gYXMgc3RyaW5nO1xuXHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHsgLi4uQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhldmVudC5nZXRTb3VyY2UoKSkuZ2V0Q29udHJvbGxlcigpIH0gYXMgdW5rbm93biBhcyB7XG5cdFx0XHRcdFttZXRob2Q6IHN0cmluZ106IChldmVudDogQnV0dG9uJFByZXNzRXZlbnQpID0+IHZvaWQ7XG5cdFx0XHR9O1xuXHRcdFx0aWYgKGNvbnRyb2xsZXJbZnVuY3Rpb25OYW1lXSkgY29udHJvbGxlcltmdW5jdGlvbk5hbWVdKGV2ZW50KTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvblByZXNzV2l0aEFubm90YXRpb25QYXRoKGFjdGlvbjogQ3VzdG9tQWN0aW9uKTogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHtcblx0cmV0dXJuIHtcblx0XHRwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3Qgc2VsZWN0ZWRDb250ZXh0cyA9IGV2ZW50LmdldFNvdXJjZSgpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKTtcblx0XHRcdEZQTUhlbHBlci5hY3Rpb25XcmFwcGVyKGV2ZW50LCBhY3Rpb24uaGFuZGxlck1vZHVsZSwgYWN0aW9uLmhhbmRsZXJNZXRob2QsIHtcblx0XHRcdFx0Y29udGV4dHM6IHNlbGVjdGVkQ29udGV4dHNcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25QcmVzc1dpdGhOb0NvbW1hbmQoXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0ZGF0YUZpZWxkPzogRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRjaGFydEJsb2NrPzogQ2hhcnRCbG9jayxcblx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmdcbik6IHsgcHJlc3M6IChldmVudDogQnV0dG9uJFByZXNzRXZlbnQpID0+IHZvaWQgfSB7XG5cdHJldHVybiB7XG5cdFx0cHJlc3M6IChldmVudDogQnV0dG9uJFByZXNzRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGV2ZW50LmdldFNvdXJjZSgpKTtcblx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdGlmIChhY3Rpb24udHlwZSA9PT0gXCJGb3JBY3Rpb25cIikge1xuXHRcdFx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRcdFx0Y29udGV4dHM6IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpLFxuXHRcdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzpcblx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKT8uSW52b2NhdGlvbkdyb3VwaW5nID09PSBPcGVyYXRpb25Hcm91cGluZ1R5cGUuQ2hhbmdlU2V0XG5cdFx0XHRcdFx0XHRcdD8gXCJDaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdFx0XHQ6IFwiSXNvbGF0ZWRcIixcblx0XHRcdFx0XHRjb250cm9sSWQ6IGNoYXJ0QmxvY2s/Ll9ibG9ja0lkLFxuXHRcdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogY2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAsXG5cdFx0XHRcdFx0bW9kZWw6IHZpZXcuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRsYWJlbDogZGF0YUZpZWxkPy5MYWJlbCBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0ZGlzYWJsZVN0cmljdEhhbmRsaW5nOiBhY3Rpb24uZGlzYWJsZVN0cmljdEhhbmRsaW5nXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnRyb2xsZXIuZWRpdEZsb3cuaW52b2tlQWN0aW9uKGRhdGFGaWVsZD8uQWN0aW9uIGFzIHN0cmluZywgcGFyYW1zKTtcblx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09IFwiRm9yTmF2aWdhdGlvblwiKSB7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpXG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmICgoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbik/Lk1hcHBpbmcpIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBKU09OLnN0cmluZ2lmeSgoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuTWFwcGluZyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKFxuXHRcdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5TZW1hbnRpY09iamVjdCBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuQWN0aW9uIGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBnZXRBbm5vdGF0aW9uQWN0aW9uc0VuYWJsZWQoXG5cdGFjdGlvbjogQmFzZUFjdGlvbixcblx0aXNCb3VuZDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRjaGFydENvbnRleHQ6IENvbnRleHQsXG5cdGNvbnRleHQ6IENvbnRleHRcbik6IHN0cmluZyB7XG5cdHJldHVybiBhY3Rpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkXG5cdFx0PyBhY3Rpb24uZW5hYmxlZFxuXHRcdDogQ2hhcnRIZWxwZXIuaXNEYXRhRmllbGRGb3JBY3Rpb25CdXR0b25FbmFibGVkKFxuXHRcdFx0XHRpc0JvdW5kICYmIGlzQm91bmQuJElzQm91bmQsXG5cdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24gYXMgc3RyaW5nLFxuXHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHRDaGFydEhlbHBlci5nZXRPcGVyYXRpb25BdmFpbGFibGVNYXAoY2hhcnRDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IGNoYXJ0Q29udGV4dCB9KSxcblx0XHRcdFx0YWN0aW9uLmVuYWJsZU9uU2VsZWN0IHx8IFwiXCJcblx0XHQgICk7XG59XG5cbmZ1bmN0aW9uIGdldFNlZ21lbnRlZEJ1dHRvbihjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogQWN0aW9uVG9vbGJhckFjdGlvbiB7XG5cdHJldHVybiAoXG5cdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdGxheW91dEluZm9ybWF0aW9uPXt7XG5cdFx0XHRcdGFnZ3JlZ2F0aW9uTmFtZTogXCJlbmRcIixcblx0XHRcdFx0YWxpZ25tZW50OiBcIkVuZFwiXG5cdFx0XHR9fVxuXHRcdD5cblx0XHRcdDxTZWdtZW50ZWRCdXR0b25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtjaGFydEJsb2NrLl9ibG9ja0lkLCBcIlNlZ21lbnRlZEJ1dHRvblwiLCBcIlRlbXBsYXRlQ29udGVudFZpZXdcIl0pfVxuXHRcdFx0XHRzZWxlY3Rpb25DaGFuZ2U9eyhldmVudDogU2VnbWVudGVkQnV0dG9uJFNlbGVjdGlvbkNoYW5nZUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0Y2hhcnRCbG9jay5maXJlU2VnbWVudGVkQnV0dG9uUHJlc3NlZD8uKFxuXHRcdFx0XHRcdFx0bWVyZ2UoZXZlbnQuZ2V0UGFyYW1ldGVycygpLCB7IHNlbGVjdGVkS2V5OiBldmVudC5nZXRTb3VyY2UoKS5nZXRTZWxlY3RlZEtleSgpIH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fX1cblx0XHRcdFx0dmlzaWJsZT17bm90RXF1YWwocGF0aEluTW9kZWwoXCJhbHBDb250ZW50Vmlld1wiLCBcInBhZ2VJbnRlcm5hbFwiKSwgXCJUYWJsZVwiKX1cblx0XHRcdFx0c2VsZWN0ZWRLZXk9e3BhdGhJbk1vZGVsKFwiYWxwQ29udGVudFZpZXdcIiwgXCJwYWdlSW50ZXJuYWxcIil9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0aXRlbXM6IGdldFNlZ21lbnRlZEJ1dHRvbkl0ZW1zKClcblx0XHRcdFx0fX1cblx0XHRcdDwvU2VnbWVudGVkQnV0dG9uPlxuXHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VnbWVudGVkQnV0dG9uSXRlbXMoKTogc3RyaW5nW10ge1xuXHRjb25zdCBzZWdtZW50ZWRCdXR0b25JdGVtcyA9IFtdO1xuXHRpZiAoQ29tbW9uSGVscGVyLmlzRGVza3RvcCgpKSB7XG5cdFx0c2VnbWVudGVkQnV0dG9uSXRlbXMucHVzaChcblx0XHRcdGdldFNlZ21lbnRlZEJ1dHRvbkl0ZW0oXCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fSFlCUklEX1NFR01FTlRFRF9CVVRUT05fSVRFTV9UT09MVElQfVwiLCBcIkh5YnJpZFwiLCBcInNhcC1pY29uOi8vY2hhcnQtdGFibGUtdmlld1wiKVxuXHRcdCk7XG5cdH1cblx0c2VnbWVudGVkQnV0dG9uSXRlbXMucHVzaChcblx0XHRnZXRTZWdtZW50ZWRCdXR0b25JdGVtKFwie3NhcC5mZS5pMThuPk1fQ09NTU9OX0NIQVJUX1NFR01FTlRFRF9CVVRUT05fSVRFTV9UT09MVElQfVwiLCBcIkNoYXJ0XCIsIFwic2FwLWljb246Ly9iYXItY2hhcnRcIilcblx0KTtcblx0c2VnbWVudGVkQnV0dG9uSXRlbXMucHVzaChcblx0XHRnZXRTZWdtZW50ZWRCdXR0b25JdGVtKFwie3NhcC5mZS5pMThuPk1fQ09NTU9OX1RBQkxFX1NFR01FTlRFRF9CVVRUT05fSVRFTV9UT09MVElQfVwiLCBcIlRhYmxlXCIsIFwic2FwLWljb246Ly90YWJsZS12aWV3XCIpXG5cdCk7XG5cdHJldHVybiBzZWdtZW50ZWRCdXR0b25JdGVtcztcbn1cblxuZnVuY3Rpb24gZ2V0U2VnbWVudGVkQnV0dG9uSXRlbSh0b29sdGlwOiBzdHJpbmcsIGtleTogc3RyaW5nLCBpY29uOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gPFNlZ21lbnRlZEJ1dHRvbkl0ZW0gdG9vbHRpcD17dG9vbHRpcH0ga2V5PXtrZXl9IGljb249e2ljb259IC8+O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGFubm90YXRpb24gcGF0aCBwb2ludGluZyB0byB0aGUgdmlzdWFsaXphdGlvbiBhbm5vdGF0aW9uIChDaGFydCkuXG4gKiBAcGFyYW0gY29udGV4dE9iamVjdFBhdGggVGhlIGRhdGFtb2RlbCBvYmplY3QgcGF0aCBmb3IgdGhlIGNoYXJ0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBhbm5vdGF0aW9uIHBhdGhcbiAqL1xuZnVuY3Rpb24gZ2V0VmlzdWFsaXphdGlvblBhdGgoXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0VHlwZSB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBQcmVzZW50YXRpb25WYXJpYW50Pixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogc3RyaW5nIHtcblx0Y29uc3QgbWV0YVBhdGggPSBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGNvbnRleHRPYmplY3RQYXRoKTtcblxuXHQvLyBmYWxsYmFjayB0byBkZWZhdWx0IENoYXJ0IGlmIG1ldGFQYXRoIGlzIG5vdCBzZXRcblx0aWYgKCFtZXRhUGF0aCkge1xuXHRcdExvZy5lcnJvcihgTWlzc2luZyBtZXRhUGF0aCBwYXJhbWV0ZXIgZm9yIENoYXJ0YCk7XG5cdFx0cmV0dXJuIGBAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gO1xuXHR9XG5cblx0aWYgKGNvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnQpIHtcblx0XHRyZXR1cm4gbWV0YVBhdGg7IC8vIE1ldGFQYXRoIGlzIGFscmVhZHkgcG9pbnRpbmcgdG8gYSBDaGFydFxuXHR9XG5cblx0Ly9OZWVkIHRvIHN3aXRjaCB0byB0aGUgY29udGV4dCByZWxhdGVkIHRoZSBQViBvciBTUFZcblx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKG1ldGFQYXRoKTtcblxuXHRsZXQgdmlzdWFsaXphdGlvbnM6IFZpc3VhbGl6YXRpb25BbmRQYXRoW10gPSBbXTtcblx0c3dpdGNoIChjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LnRlcm0pIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRpZiAoY29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0dmlzdWFsaXphdGlvbnMgPSBnZXRWaXN1YWxpemF0aW9uc0Zyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdGNvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdCxcblx0XHRcdFx0XHRtZXRhUGF0aCxcblx0XHRcdFx0XHRyZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudDpcblx0XHRcdHZpc3VhbGl6YXRpb25zID0gZ2V0VmlzdWFsaXphdGlvbnNGcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0Y29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LFxuXHRcdFx0XHRtZXRhUGF0aCxcblx0XHRcdFx0cmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdGNvbnN0IGNoYXJ0Vml6ID0gdmlzdWFsaXphdGlvbnMuZmluZCgodml6KSA9PiB7XG5cdFx0cmV0dXJuIHZpei52aXN1YWxpemF0aW9uLnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0O1xuXHR9KTtcblxuXHRpZiAoY2hhcnRWaXopIHtcblx0XHRyZXR1cm4gY2hhcnRWaXouYW5ub3RhdGlvblBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZmFsbGJhY2sgdG8gZGVmYXVsdCBDaGFydCBpZiBhbm5vdGF0aW9uIG1pc3NpbmcgaW4gUFZcblx0XHRMb2cuZXJyb3IoYEJhZCBtZXRhUGF0aCBwYXJhbWV0ZXIgZm9yIGNoYXJ0OiAke2NvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdD8udGVybX1gKTtcblx0XHRyZXR1cm4gYEAke1VJQW5ub3RhdGlvblRlcm1zLkNoYXJ0fWA7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0VmlzaWJsZShkYXRhRmllbGRDb250ZXh0OiBDb250ZXh0LCBjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogc3RyaW5nIHwgYm9vbGVhbiB7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdGlmIChkYXRhRmllbGRbYEAke1VJQW5ub3RhdGlvblRlcm1zLkhpZGRlbn1gXSAmJiBkYXRhRmllbGRbYEAke1VJQW5ub3RhdGlvblRlcm1zLkhpZGRlbn1gXS4kUGF0aCkge1xuXHRcdGNvbnN0IGhpZGRlblBhdGhDb250ZXh0ID0gY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFxuXHRcdFx0ZGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCkgKyBgL0Ake1VJQW5ub3RhdGlvblRlcm1zLkhpZGRlbn0vJFBhdGhgLFxuXHRcdFx0ZGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF0uJFBhdGhcblx0XHQpO1xuXHRcdHJldHVybiBDaGFydEhlbHBlci5nZXRIaWRkZW5QYXRoRXhwcmVzc2lvbkZvclRhYmxlQWN0aW9uc0FuZElCTihkYXRhRmllbGRbYEAke1VJQW5ub3RhdGlvblRlcm1zLkhpZGRlbn1gXS4kUGF0aCwge1xuXHRcdFx0Y29udGV4dDogaGlkZGVuUGF0aENvbnRleHRcblx0XHR9KTtcblx0fSBlbHNlIGlmIChkYXRhRmllbGRbYEAke1VJQW5ub3RhdGlvblRlcm1zLkhpZGRlbn1gXSkge1xuXHRcdHJldHVybiAhZGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcnRDb252ZXJ0ZXJDb250ZXh0KFxuXHRwcm9wZXJ0aWVzOiBDaGFydEJsb2NrLFxuXHRvcmlnaW5hbFZpZXdEYXRhOiBQYXJ0aWFsPFZpZXdEYXRhPixcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8Q2hhcnRDb250ZXh0T2JqZWN0UGF0aD4sXG5cdGRpYWdub3N0aWNzOiBEaWFnbm9zdGljcyxcblx0ZXh0cmFQYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+IHtcblx0bGV0IHZpZXdEYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgb3JpZ2luYWxWaWV3RGF0YSk7XG5cdGRlbGV0ZSB2aWV3RGF0YS5yZXNvdXJjZU1vZGVsO1xuXHRkZWxldGUgdmlld0RhdGEuYXBwQ29tcG9uZW50O1xuXHR2aWV3RGF0YSA9IGRlZXBDbG9uZSh2aWV3RGF0YSk7XG5cdGxldCBjb250cm9sQ29uZmlndXJhdGlvbiA9IHt9O1xuXG5cdC8vIE9ubHkgbWVyZ2UgaW4gcGFnZSBjb250cm9sIGNvbmZpZ3VyYXRpb24gaWYgdGhlIGJ1aWxkaW5nIGJsb2NrIGlzIG9uIHRoZSBzYW1lIGNvbnRleHRcblx0Y29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChjb250ZXh0T2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24gPz8gY29udGV4dE9iamVjdFBhdGgpO1xuXHRjb25zdCBlbnRpdHlTZXROYW1lID0gY29udGV4dE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uPy50YXJnZXRFbnRpdHlTZXQ/Lm5hbWUgPz8gY29udGV4dE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0Py5uYW1lO1xuXHRpZiAoXG5cdFx0cmVsYXRpdmVQYXRoID09PSBvcmlnaW5hbFZpZXdEYXRhPy5jb250ZXh0UGF0aCB8fFxuXHRcdHJlbGF0aXZlUGF0aCA9PT0gYC8ke29yaWdpbmFsVmlld0RhdGE/LmVudGl0eVNldH1gIHx8XG5cdFx0ZW50aXR5U2V0TmFtZSA9PT0gb3JpZ2luYWxWaWV3RGF0YT8uZW50aXR5U2V0XG5cdCkge1xuXHRcdGNvbnRyb2xDb25maWd1cmF0aW9uID0gdmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24hO1xuXHR9XG5cdHZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uID0gbWVyZ2UoY29udHJvbENvbmZpZ3VyYXRpb24sIGV4dHJhUGFyYW1zIHx8IHt9KSBhcyBDb250cm9sQ29uZmlndXJhdGlvbjtcblxuXHRyZXR1cm4gQ29udmVydGVyQ29udGV4dC5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oXG5cdFx0Y29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZSxcblx0XHRwcm9wZXJ0aWVzLl9tZXRhTW9kZWwsXG5cdFx0ZGlhZ25vc3RpY3MsXG5cdFx0bWVyZ2UsXG5cdFx0Y29udGV4dE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLFxuXHRcdG5ldyBNYW5pZmVzdFdyYXBwZXIodmlld0RhdGEgYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3MpXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnZlcnRlckNvbnRleHQoXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2ssXG5cdHZpZXdEYXRhOiBWaWV3RGF0YSxcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8Q2hhcnRDb250ZXh0T2JqZWN0UGF0aD4sXG5cdGRpYWdub3N0aWNzOiBEaWFnbm9zdGljc1xuKTogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+IHtcblx0Y29uc3QgaW5pdGlhbENvbnZlcnRlckNvbnRleHQgPSBnZXRDaGFydENvbnZlcnRlckNvbnRleHQoY2hhcnRCbG9jaywgdmlld0RhdGEsIGNvbnRleHRPYmplY3RQYXRoLCBkaWFnbm9zdGljcyk7XG5cdGNvbnN0IHZpc3VhbGl6YXRpb25QYXRoID0gZ2V0VmlzdWFsaXphdGlvblBhdGgoY29udGV4dE9iamVjdFBhdGgsIGluaXRpYWxDb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZXh0cmFQYXJhbXMgPSBnZXRFeHRyYVBhcmFtcyhjaGFydEJsb2NrLCB2aXN1YWxpemF0aW9uUGF0aCk7XG5cdHJldHVybiBnZXRDaGFydENvbnZlcnRlckNvbnRleHQoY2hhcnRCbG9jaywgdmlld0RhdGEsIGNvbnRleHRPYmplY3RQYXRoLCBkaWFnbm9zdGljcywgZXh0cmFQYXJhbXMpO1xufVxuXG5mdW5jdGlvbiBtb2RpZnlJZGVudGlmaWVycyhjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogdm9pZCB7XG5cdGlmIChjaGFydEJsb2NrLl9hcHBseUlkVG9Db250ZW50KSB7XG5cdFx0Y2hhcnRCbG9jay5fYmxvY2tJZCA9IGNoYXJ0QmxvY2suaWQucmVwbGFjZSgvOjpDaGFydCQvLCBcIlwiKTtcblx0XHRjaGFydEJsb2NrLl9jb250ZW50SWQgPSBjaGFydEJsb2NrLl9ibG9ja0lkO1xuXHR9IGVsc2Uge1xuXHRcdGNoYXJ0QmxvY2suX2Jsb2NrSWQgPSBjaGFydEJsb2NrLmlkO1xuXHRcdGNoYXJ0QmxvY2suX2NvbnRlbnRJZCA9IGdldENvbnRlbnRJZChjaGFydEJsb2NrLmlkKTtcblx0fVxufVxuXG5mdW5jdGlvbiBpbml0aWFsaXNlKFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrLFxuXHR2aWV3RGF0YTogVmlld0RhdGEsXG5cdGRpYWdub3N0aWNzOiBEaWFnbm9zdGljcyxcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8Q2hhcnRDb250ZXh0T2JqZWN0UGF0aD5cbik6IHZvaWQge1xuXHRjb25zdCBtZXRhQ29udGV4dFBhdGggPSBjaGFydEJsb2NrLmdldE1ldGFQYXRoT2JqZWN0KGNoYXJ0QmxvY2subWV0YVBhdGgsIGNoYXJ0QmxvY2suX3Jlc29sdmVkQ29udGV4dFBhdGgpO1xuXHRjaGFydEJsb2NrLl9tZXRhTW9kZWwgPSBjaGFydEJsb2NrLl9nZXRPd25lcigpPy5wcmVwcm9jZXNzb3JDb250ZXh0Py5tb2RlbHMubWV0YU1vZGVsIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobWV0YUNvbnRleHRQYXRoIS5nZXRQYXRoKCkpITtcblx0Y2hhcnRCbG9jay5fY29udGV4dCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChjaGFydEJsb2NrLmNvbnRleHRQYXRoID8/IG1ldGFDb250ZXh0UGF0aD8uZ2V0Q29udGV4dFBhdGgoKSkhO1xuXG5cdGNvbnN0IGNvbnZlcnRlckNvbnRleHQgPSBnZXRDb252ZXJ0ZXJDb250ZXh0KGNoYXJ0QmxvY2ssIHZpZXdEYXRhLCBjb250ZXh0T2JqZWN0UGF0aCwgZGlhZ25vc3RpY3MpO1xuXHRjb25zdCB2aWV3Q29uZmlnID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKT8uZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKTtcblx0Y29uc3QgaXNNdWx0aVRhYnMgPSAodmlld0NvbmZpZz8ucGF0aHM/Lmxlbmd0aCBhcyBudW1iZXIpID4gMTtcblx0Y29uc3QgaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKT8uaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZTtcblxuXHRjaGFydEJsb2NrLl9jaGFydENvbnRleHQgPSBDaGFydEhlbHBlci5nZXRVaUNoYXJ0KGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dCkhO1xuXHRjaGFydEJsb2NrLl9jaGFydCA9IGNoYXJ0QmxvY2suX2NoYXJ0Q29udGV4dC5nZXRPYmplY3QoKSBhcyBDaGFydFR5cGU7XG5cdGNoYXJ0QmxvY2suX2Jsb2NrQWN0aW9ucyA9IFtdO1xuXHRjaGFydEJsb2NrLl9jb21tYW5kQWN0aW9ucyA9IFtdO1xuXHRtb2RpZnlJZGVudGlmaWVycyhjaGFydEJsb2NrKTtcblx0aWYgKGNoYXJ0QmxvY2suX2NoYXJ0KSB7XG5cdFx0Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24gPSBjcmVhdGVDaGFydERlZmluaXRpb24oXG5cdFx0XHRjaGFydEJsb2NrLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdGNvbnRleHRPYmplY3RQYXRoLFxuXHRcdFx0Y2hhcnRCbG9jay5fY2hhcnRDb250ZXh0LmdldFBhdGgoKVxuXHRcdCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbiA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5jb2xsZWN0aW9uKSBhcyBDb250ZXh0O1xuXHRcdC8vIEFQSSBQcm9wZXJ0aWVzXG5cdFx0Y2hhcnRCbG9jay5uYXZpZ2F0aW9uUGF0aCA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLm5hdmlnYXRpb25QYXRoO1xuXHRcdGNoYXJ0QmxvY2suYXV0b0JpbmRPbkluaXQgPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5hdXRvQmluZE9uSW5pdDtcblx0XHRjaGFydEJsb2NrLnZpelByb3BlcnRpZXMgPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi52aXpQcm9wZXJ0aWVzO1xuXHRcdGNoYXJ0QmxvY2suY2hhcnRBY3Rpb25zID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uYWN0aW9ucztcblx0XHRjaGFydEJsb2NrLmZpbHRlciA9IGdldEZpbHRlckJhcihjaGFydEJsb2NrKTtcblx0XHRsZXQgcGVyc29uYWxpemF0aW9uOiBDaGFydFAxM25UeXBlO1xuXHRcdGlmIChjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8ucGVyc29uYWxpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBlcnNvbmFsaXphdGlvbiA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLnBlcnNvbmFsaXphdGlvbjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3dpdGNoIChjaGFydEJsb2NrLnBlcnNvbmFsaXphdGlvbikge1xuXHRcdFx0XHRjYXNlIFwiZmFsc2VcIjpcblx0XHRcdFx0XHRwZXJzb25hbGl6YXRpb24gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJ0cnVlXCI6XG5cdFx0XHRcdFx0cGVyc29uYWxpemF0aW9uID0gT2JqZWN0LnZhbHVlcyhwZXJzb25hbGl6YXRpb25WYWx1ZXMpLmpvaW4oXCIsXCIpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHBlcnNvbmFsaXphdGlvbiA9IGNoYXJ0QmxvY2sucGVyc29uYWxpemF0aW9uIGFzIHN0cmluZztcblx0XHRcdH1cblx0XHR9XG5cdFx0Y2hlY2tQZXJzb25hbGl6YXRpb25JbkNoYXJ0UHJvcGVydGllcyhwZXJzb25hbGl6YXRpb24sIGNoYXJ0QmxvY2spO1xuXHRcdGNoYXJ0QmxvY2sudmlzaWJsZSA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLnZpc2libGU7XG5cdFx0Y2hhcnRCbG9jay5kcmFmdFN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmlzTWV0YVBhdGhEcmFmdFN1cHBvcnRlZChtZXRhQ29udGV4dFBhdGghKTtcblx0XHRjaGFydEJsb2NrLl9jaGFydFR5cGUgPSBDaGFydEhlbHBlci5mb3JtYXRDaGFydFR5cGUoY2hhcnRCbG9jay5fY2hhcnQuQ2hhcnRUeXBlKTtcblxuXHRcdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IENoYXJ0SGVscGVyLmdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChjaGFydEJsb2NrLl9jaGFydCwge1xuXHRcdFx0Y29udGV4dDogY2hhcnRCbG9jay5fY2hhcnRDb250ZXh0XG5cdFx0fSk7XG5cblx0XHRpZiAoT2JqZWN0LmtleXMoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmNvbW1hbmRBY3Rpb25zIGFzIG9iamVjdCkubGVuZ3RoID4gMCkge1xuXHRcdFx0T2JqZWN0LmtleXMoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmNvbW1hbmRBY3Rpb25zIGFzIG9iamVjdCkuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0Y29uc3QgYWN0aW9uID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmNvbW1hbmRBY3Rpb25zW2tleV07XG5cdFx0XHRcdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBjcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24pO1xuXHRcdFx0XHRjb25zdCBkYXRhRmllbGRDb250ZXh0ID0gYWN0aW9uLmFubm90YXRpb25QYXRoICYmIGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0XHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRDb250ZXh0ICYmIGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGNvbnN0IGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUob3BlcmF0aW9uQXZhaWxhYmxlTWFwKTtcblx0XHRcdFx0cHVzaEFjdGlvbkNvbW1hbmQoYWN0aW9uQ29udGV4dCwgZGF0YUZpZWxkLCBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgYWN0aW9uLCBjaGFydEJsb2NrKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRjaGFydEJsb2NrLm1lYXN1cmVzID0gZ2V0Q2hhcnRNZWFzdXJlcyhjaGFydEJsb2NrKTtcblx0XHRjb25zdCBwcmVzZW50YXRpb25QYXRoID0gQ29tbW9uSGVscGVyLmNyZWF0ZVByZXNlbnRhdGlvblBhdGhDb250ZXh0KGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dCk7XG5cdFx0Y2hhcnRCbG9jay5fc29ydENvbmRpdGlvbnMgPSBDaGFydEhlbHBlci5nZXRTb3J0Q29uZGl0aW9ucyhcblx0XHRcdGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dCxcblx0XHRcdGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdHByZXNlbnRhdGlvblBhdGguZ2V0UGF0aCgpLFxuXHRcdFx0Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uYXBwbHlTdXBwb3J0ZWRcblx0XHQpO1xuXHRcdGNvbnN0IGNoYXJ0QWN0aW9uc0NvbnRleHQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXG5cdFx0XHRjaGFydEJsb2NrLl9jaGFydENvbnRleHQuZ2V0UGF0aCgpICsgXCIvQWN0aW9uc1wiLFxuXHRcdFx0Y2hhcnRCbG9jay5fY2hhcnQuQWN0aW9ucyBhcyB1bmtub3duIGFzIENvbnRleHRcblx0XHQpO1xuXHRcdGNvbnN0IHRhcmdldENvbGxlY3Rpb25QYXRoID0gQ29tbW9uSGVscGVyLmdldFRhcmdldENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb24pO1xuXHRcdGNvbnN0IHRhcmdldENvbGxlY3Rpb25QYXRoQ29udGV4dCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dCh0YXJnZXRDb2xsZWN0aW9uUGF0aCwgY29sbGVjdGlvbikhO1xuXHRcdGNvbnN0IGFjdGlvbnNPYmplY3QgPSBjb250ZXh0T2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcy5yZXNvbHZlUGF0aChjaGFydEFjdGlvbnNDb250ZXh0LmdldFBhdGgoKSk/LnRhcmdldDtcblxuXHRcdGNoYXJ0QmxvY2suX2N1c3RvbURhdGEgPSB7XG5cdFx0XHR0YXJnZXRDb2xsZWN0aW9uUGF0aDogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29sbGVjdGlvbixcblx0XHRcdGVudGl0eVNldDpcblx0XHRcdFx0dHlwZW9mIHRhcmdldENvbGxlY3Rpb25QYXRoQ29udGV4dC5nZXRPYmplY3QoKSA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHRcdD8gdGFyZ2V0Q29sbGVjdGlvblBhdGhDb250ZXh0LmdldE9iamVjdCgpXG5cdFx0XHRcdFx0OiB0YXJnZXRDb2xsZWN0aW9uUGF0aENvbnRleHQuZ2V0T2JqZWN0KFwiQHNhcHVpLm5hbWVcIiksXG5cdFx0XHRlbnRpdHlUeXBlOiBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5jb2xsZWN0aW9uICsgXCIvXCIsXG5cdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04ucGFyc2Uob3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdG11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zOiBBY3Rpb25IZWxwZXIuZ2V0TXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnMoYWN0aW9uc09iamVjdCBhcyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzW10pICsgXCJcIixcblx0XHRcdHNlZ21lbnRlZEJ1dHRvbklkOiBnZW5lcmF0ZShbY2hhcnRCbG9jay5fYmxvY2tJZCwgXCJTZWdtZW50ZWRCdXR0b25cIiwgXCJUZW1wbGF0ZUNvbnRlbnRWaWV3XCJdKSxcblx0XHRcdGN1c3RvbUFnZzogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmN1c3RvbUFnZyxcblx0XHRcdHRyYW5zQWdnOiBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8udHJhbnNBZ2csXG5cdFx0XHRhcHBseVN1cHBvcnRlZDogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmFwcGx5U3VwcG9ydGVkLFxuXHRcdFx0dml6UHJvcGVydGllczogSlNPTi5wYXJzZShjaGFydEJsb2NrLnZpelByb3BlcnRpZXMpLFxuXHRcdFx0ZHJhZnRTdXBwb3J0ZWQ6IGNoYXJ0QmxvY2suZHJhZnRTdXBwb3J0ZWQsXG5cdFx0XHRtdWx0aVZpZXdzOiBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8ubXVsdGlWaWV3cyB8fCAoIWhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMgJiYgaXNNdWx0aVRhYnMpLFxuXHRcdFx0c2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGg6IHtcblx0XHRcdFx0ZGF0YTogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LnNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRQYXRoXG5cdFx0XHR9LFxuXHRcdFx0Y2hhcnREaW1lbnNpb25LZXlBbmRSb2xlOiBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8uY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlLFxuXHRcdFx0Y2hhcnRNZWFzdXJlS2V5QW5kUm9sZTogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmNoYXJ0TWVhc3VyZUtleUFuZFJvbGVcblx0XHR9O1xuXHRcdGlmIChjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5pc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQpIHtcblx0XHRcdGNoYXJ0QmxvY2suX2N1c3RvbURhdGEuZW50aXR5U2V0ID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29sbGVjdGlvbi5zdWJzdHJpbmcoMSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGZhbGxiYWNrIHRvIGRpc3BsYXkgZW1wdHkgY2hhcnRcblx0XHRjaGFydEJsb2NrLmF1dG9CaW5kT25Jbml0ID0gZmFsc2U7XG5cdFx0Y2hhcnRCbG9jay52aXNpYmxlID0gXCJ0cnVlXCI7XG5cdFx0Y2hhcnRCbG9jay5uYXZpZ2F0aW9uUGF0aCA9IFwiXCI7XG5cblx0XHRjaGFydEJsb2NrLl9jdXN0b21EYXRhID0ge1xuXHRcdFx0dGFyZ2V0Q29sbGVjdGlvblBhdGg6IFwiXCIsXG5cdFx0XHRlbnRpdHlTZXQ6IFwiXCIsXG5cdFx0XHRlbnRpdHlUeXBlOiBcIlwiLFxuXHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBcIlwiLFxuXHRcdFx0bXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnM6IFwiXCIsXG5cdFx0XHRzZWdtZW50ZWRCdXR0b25JZDogXCJcIixcblx0XHRcdGN1c3RvbUFnZzoge30sXG5cdFx0XHR0cmFuc0FnZzoge30sXG5cdFx0XHRhcHBseVN1cHBvcnRlZDoge30sXG5cdFx0XHR2aXpQcm9wZXJ0aWVzOiB7fVxuXHRcdH07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyQmFyKGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBmaWx0ZXJCYXIgPSBFbGVtZW50LmdldEVsZW1lbnRCeUlkKGNoYXJ0QmxvY2suZmlsdGVyQmFyKTtcblx0aWYgKGNoYXJ0QmxvY2suZmlsdGVyQmFyICYmIGZpbHRlckJhcj8uaXNBPE1hY3JvQVBJPihcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckJhckFQSVwiKSkge1xuXHRcdHJldHVybiBnZXRDb250ZW50SWQoY2hhcnRCbG9jay5maWx0ZXJCYXIpO1xuXHR9IGVsc2UgaWYgKGZpbHRlckJhcj8uaXNBPENvbnRyb2w+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWx0ZXJCYXJcIikpIHtcblx0XHRyZXR1cm4gY2hhcnRCbG9jay5maWx0ZXJCYXI7XG5cdH0gZWxzZSBpZiAoY2hhcnRCbG9jay5maWx0ZXJCYXIpIHtcblx0XHRyZXR1cm4gZ2V0Q29udGVudElkKGNoYXJ0QmxvY2suZmlsdGVyQmFyKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXREZWxlZ2F0ZShjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogb2JqZWN0IHtcblx0aWYgKGNoYXJ0QmxvY2suY2hhcnREZWxlZ2F0ZSkge1xuXHRcdChjaGFydEJsb2NrLmNoYXJ0RGVsZWdhdGUgYXMgQ2hhcnREZWxlZ2F0ZSkucGF5bG9hZC5zZWxlY3Rpb25Nb2RlID1cblx0XHRcdGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLnNlbGVjdGlvbk1vZGU/LnRvVXBwZXJDYXNlKCkgPz9cblx0XHRcdChjaGFydEJsb2NrLmNoYXJ0RGVsZWdhdGUgYXMgQ2hhcnREZWxlZ2F0ZSkucGF5bG9hZC5zZWxlY3Rpb25Nb2RlID8/XG5cdFx0XHRcIk1VTFRJUExFXCI7XG5cdH1cblx0cmV0dXJuIGNoYXJ0QmxvY2suY2hhcnREZWxlZ2F0ZVxuXHRcdD8gY2hhcnRCbG9jay5jaGFydERlbGVnYXRlXG5cdFx0OiB7XG5cdFx0XHRcdG5hbWU6IFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydERlbGVnYXRlXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0XHRjaGFydENvbnRleHRQYXRoOiBjaGFydEJsb2NrLl9jdXN0b21EYXRhLnRhcmdldENvbGxlY3Rpb25QYXRoLFxuXHRcdFx0XHRcdHBhcmFtZXRlcnM6IHtcblx0XHRcdFx0XHRcdCQkZ3JvdXBJZDogXCIkYXV0by5Xb3JrZXJzXCJcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHNlbGVjdGlvbk1vZGU6XG5cdFx0XHRcdFx0XHRjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5zZWxlY3Rpb25Nb2RlPy50b1VwcGVyQ2FzZSgpID8/IGNoYXJ0QmxvY2suc2VsZWN0aW9uTW9kZT8udG9VcHBlckNhc2UoKSA/PyBcIk1VTFRJUExFXCJcblx0XHRcdFx0fVxuXHRcdCAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VzdG9tRGF0YShjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogQ3VzdG9tRGF0YVtdIHtcblx0cmV0dXJuIFtcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1widGFyZ2V0Q29sbGVjdGlvblBhdGhcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEudGFyZ2V0Q29sbGVjdGlvblBhdGh9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJlbnRpdHlTZXRcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuZW50aXR5U2V0fSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wiZW50aXR5VHlwZVwifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5lbnRpdHlUeXBlfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wib3BlcmF0aW9uQXZhaWxhYmxlTWFwXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLm9wZXJhdGlvbkF2YWlsYWJsZU1hcH0gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcIm11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLm11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wic2VnbWVudGVkQnV0dG9uSWRcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuc2VnbWVudGVkQnV0dG9uSWR9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJjdXN0b21BZ2dcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuY3VzdG9tQWdnfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1widHJhbnNBZ2dcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEudHJhbnNBZ2d9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJhcHBseVN1cHBvcnRlZFwifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5hcHBseVN1cHBvcnRlZH0gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcInZpelByb3BlcnRpZXNcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEudml6UHJvcGVydGllc30gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcImRyYWZ0U3VwcG9ydGVkXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLmRyYWZ0U3VwcG9ydGVkfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wibXVsdGlWaWV3c1wifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5tdWx0aVZpZXdzfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wic2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGhcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGh9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJjaGFydERpbWVuc2lvbktleUFuZFJvbGVcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wiY2hhcnRNZWFzdXJlS2V5QW5kUm9sZVwifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5jaGFydE1lYXN1cmVLZXlBbmRSb2xlfSAvPlxuXHRdO1xufVxuXG5mdW5jdGlvbiBnZXROb0RhdGEoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IElsbHVzdHJhdGVkTWVzc2FnZSB8IHVuZGVmaW5lZCB7XG5cdGlmIChjaGFydEJsb2NrLl9jdXN0b21EYXRhLnRhcmdldENvbGxlY3Rpb25QYXRoID09PSBcIlwiKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHJldHVybiAoXG5cdFx0PElsbHVzdHJhdGVkTWVzc2FnZVxuXHRcdFx0aWxsdXN0cmF0aW9uU2l6ZT17SWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZS5BdXRvfVxuXHRcdFx0aWxsdXN0cmF0aW9uVHlwZT17SWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5CZWZvcmVTZWFyY2h9XG5cdFx0XHR0aXRsZT17Y2hhcnRCbG9jay5nZXRUcmFuc2xhdGVkVGV4dChcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVElUTEVfVEVYVFwiKX1cblx0XHRcdGRlc2NyaXB0aW9uPXtjaGFydEJsb2NrLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUXCIpfVxuXHRcdFx0ZW5hYmxlRGVmYXVsdFRpdGxlQW5kRGVzY3JpcHRpb249e2ZhbHNlfVxuXHRcdFx0ZW5hYmxlVmVydGljYWxSZXNwb25zaXZlbmVzcz17dHJ1ZX1cblx0XHQ+PC9JbGx1c3RyYXRlZE1lc3NhZ2U+XG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZGNDaGFydFRlbXBsYXRlKFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrLFxuXHR2aWV3RGF0YTogVmlld0RhdGEsXG5cdGRpYWdub3N0aWNzOiBEaWFnbm9zdGljcyxcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8Q2hhcnRDb250ZXh0T2JqZWN0UGF0aD5cbik6IE1kY0NoYXJ0IHtcblx0aW5pdGlhbGlzZShjaGFydEJsb2NrLCB2aWV3RGF0YSwgZGlhZ25vc3RpY3MsIGNvbnRleHRPYmplY3RQYXRoKTtcblx0Y2hhcnRCbG9jay5sYXlvdXREYXRhID0gPEZsZXhJdGVtRGF0YSBncm93RmFjdG9yPVwiMVwiIHNocmlua0ZhY3Rvcj1cIjFcIiAvPjtcblxuXHRyZXR1cm4gKFxuXHRcdDxNZGNDaGFydFxuXHRcdFx0YmluZGluZz17eyBpbnRlcm5hbDogXCJjb250cm9scy9cIiArIGNoYXJ0QmxvY2suX2Jsb2NrSWQgfX1cblx0XHRcdGlkPXtjaGFydEJsb2NrLl9jb250ZW50SWR9XG5cdFx0XHRjaGFydFR5cGU9e2NoYXJ0QmxvY2suX2NoYXJ0VHlwZX1cblx0XHRcdHNvcnRDb25kaXRpb25zPXtjaGFydEJsb2NrLl9zb3J0Q29uZGl0aW9uc31cblx0XHRcdGhlYWRlcj17Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uaGVhZGVyID8/IGNoYXJ0QmxvY2suaGVhZGVyID8/IGNoYXJ0QmxvY2suX2NoYXJ0Py5UaXRsZT8udG9TdHJpbmcoKSA/PyBcIlwifVxuXHRcdFx0aGVhZGVyVmlzaWJsZT17Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uaGVhZGVyVmlzaWJsZSA/PyBjaGFydEJsb2NrLmhlYWRlclZpc2libGV9XG5cdFx0XHRtaW5IZWlnaHQ9e0RldmljZS5zeXN0ZW0ucGhvbmUgPyBcIjgwdmhcIiA6IFwiNDAwcHhcIn1cblx0XHRcdGhlaWdodD1cIjEwMCVcIlxuXHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdGhlYWRlckxldmVsPXtjaGFydEJsb2NrLmhlYWRlckxldmVsfVxuXHRcdFx0aGVhZGVyU3R5bGU9e2NoYXJ0QmxvY2suaGVhZGVyU3R5bGV9XG5cdFx0XHRwMTNuTW9kZT17KGNoYXJ0QmxvY2suX3BlcnNvbmFsaXphdGlvbiEgYXMgc3RyaW5nKT8uc3BsaXQoXCIsXCIpfVxuXHRcdFx0ZmlsdGVyPXtjaGFydEJsb2NrLmZpbHRlcn1cblx0XHRcdG5vRGF0YVRleHQ9e1xuXHRcdFx0XHRjaGFydEJsb2NrLl9jdXN0b21EYXRhLnRhcmdldENvbGxlY3Rpb25QYXRoID09PSBcIlwiXG5cdFx0XHRcdFx0PyBjaGFydEJsb2NrLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9DSEFSVF9OT19BTk5PVEFUSU9OX1NFVF9URVhUXCIpXG5cdFx0XHRcdFx0OiBjaGFydEJsb2NrLm5vRGF0YVRleHRcblx0XHRcdH1cblx0XHRcdGF1dG9CaW5kT25Jbml0PXtjaGFydEJsb2NrLmF1dG9CaW5kT25Jbml0fVxuXHRcdFx0ZGVsZWdhdGU9e2dldERlbGVnYXRlKGNoYXJ0QmxvY2spfVxuXHRcdFx0dmlzaWJsZT17Y2hhcnRCbG9jay52aXNpYmxlfVxuXHRcdD5cblx0XHRcdHt7XG5cdFx0XHRcdGN1c3RvbURhdGE6IGdldEN1c3RvbURhdGEoY2hhcnRCbG9jayksXG5cdFx0XHRcdGRlcGVuZGVudHM6IFtcblx0XHRcdFx0XHRnZXREZXBlbmRlbnRzKGNoYXJ0QmxvY2ssIGNoYXJ0QmxvY2suX2NoYXJ0Q29udGV4dCksXG5cdFx0XHRcdFx0Z2V0UGVyc2lzdGVuY2VQcm92aWRlcihjaGFydEJsb2NrKSxcblx0XHRcdFx0XHRnZXRBY2NBSUFjdGlvbkludmlzaWJsZVRleHQoY2hhcnRCbG9jaylcblx0XHRcdFx0XSxcblx0XHRcdFx0aXRlbXM6IGdldEl0ZW1zKGNoYXJ0QmxvY2spLFxuXHRcdFx0XHRhY3Rpb25zOiBjaGFydEJsb2NrLmNoYXJ0QWN0aW9ucyA/IGdldFRvb2xiYXJBY3Rpb25zKGNoYXJ0QmxvY2spIDogY2hhcnRCbG9jay5fYmxvY2tBY3Rpb25zLFxuXHRcdFx0XHR2YXJpYW50OiBjcmVhdGVWYXJpYW50TWFuYWdlbWVudChjaGFydEJsb2NrKSxcblx0XHRcdFx0bm9EYXRhOiBnZXROb0RhdGEoY2hhcnRCbG9jaylcblx0XHRcdH19XG5cdFx0PC9NZGNDaGFydD5cblx0KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIEludmlzaWJsZVRleHQgZm9yIHRoZSBBSSBBY3Rpb24gYnV0dG9ucy5cbiAqIEBwYXJhbSBjaGFydEJsb2NrIENoYXJ0QmxvY2sgaW5zdGFuY2VcbiAqIEByZXR1cm5zIEludmlzaWJsZVRleHQgY29udHJvbFxuICovXG5mdW5jdGlvbiBnZXRBY2NBSUFjdGlvbkludmlzaWJsZVRleHQoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IEludmlzaWJsZVRleHQge1xuXHRjb25zdCBpbnZpc2libGVUZXh0QWNjQUlBY3Rpb24gPSBuZXcgSW52aXNpYmxlVGV4dCh7XG5cdFx0aWQ6IGAke2NoYXJ0QmxvY2suZ2V0SWQoKX0tLWZlOjpBaUFjdGlvbjo6QXJpYVRleHRgLFxuXHRcdHRleHQ6IFwie3NhcC5mZS5pMThuPkNfQUNDRVNTSUJJTElUWV9BSV9BQ1RJT05fQVJJQV9URVhUfVwiXG5cdH0pO1xuXHRpbnZpc2libGVUZXh0QWNjQUlBY3Rpb24udG9TdGF0aWMoKTtcblx0cmV0dXJuIGludmlzaWJsZVRleHRBY2NBSUFjdGlvbjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMEdBLE1BQU1BLFdBQXNDLEdBQUc7SUFDOUMsdURBQXVELEVBQUUsT0FBTztJQUNoRSx1REFBdUQsRUFBRSxPQUFPO0lBQ2hFLHVEQUF1RCxFQUFFLE9BQU87SUFDaEUsdURBQXVELEVBQUU7RUFDMUQsQ0FBQztFQUFDLElBMkJHQyxxQkFBcUIsMEJBQXJCQSxxQkFBcUI7SUFBckJBLHFCQUFxQjtJQUFyQkEscUJBQXFCO0lBQXJCQSxxQkFBcUI7SUFBckJBLHFCQUFxQjtJQUFBLE9BQXJCQSxxQkFBcUI7RUFBQSxFQUFyQkEscUJBQXFCO0VBaUYxQixTQUFTQyxxQkFBcUJBLENBQzdCQyxVQUFzQixFQUN0QkMsZ0JBQWtDLEVBQ2xDQyxpQkFBc0csRUFDdEdDLFdBQW1CLEVBQ0U7SUFDckIsSUFBSUMsaUJBQWlCLEdBQUdDLGtDQUFrQyxDQUFDSCxpQkFBaUIsQ0FBQztJQUM3RSxJQUFJSSxjQUF3QyxHQUFHLEVBQUU7SUFDakQsSUFBSU4sVUFBVSxDQUFDTyxnQkFBZ0IsRUFBRUMsU0FBUyxDQUFDLENBQUMsRUFBRUMsS0FBSyx5REFBOEMsRUFBRTtNQUNsR0gsY0FBYyxHQUFHTixVQUFVLENBQUNPLGdCQUFnQixDQUFDQyxTQUFTLENBQUMsQ0FBQyxDQUFDRSxjQUFjO0lBQ3hFLENBQUMsTUFBTSxJQUFJVixVQUFVLENBQUNPLGdCQUFnQixFQUFFQyxTQUFTLENBQUMsQ0FBQyxFQUFFQyxLQUFLLGtFQUF1RCxFQUFFO01BQ2xISCxjQUFjLEdBQUdOLFVBQVUsQ0FBQ08sZ0JBQWdCLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENB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
1349
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtZWFzdXJlUm9sZSIsInBlcnNvbmFsaXphdGlvblZhbHVlcyIsImNyZWF0ZUNoYXJ0RGVmaW5pdGlvbiIsImNoYXJ0QmxvY2siLCJjb252ZXJ0ZXJDb250ZXh0IiwiY29udGV4dE9iamVjdFBhdGgiLCJjb250cm9sUGF0aCIsInZpc3VhbGl6YXRpb25QYXRoIiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsInZpc3VhbGl6YXRpb25zIiwiX21ldGFQYXRoQ29udGV4dCIsImdldE9iamVjdCIsIiRUeXBlIiwiVmlzdWFsaXphdGlvbnMiLCJQcmVzZW50YXRpb25WYXJpYW50IiwibGVuZ3RoIiwiY2hlY2tDaGFydEV4aXN0cyIsInZpc3VhbGl6YXRpb25EZWZpbml0aW9uIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCIsInVzZUNvbmRlbnNlZExheW91dCIsImlzTWFjcm9Pck11bHRpcGxlVmlldyIsInNob3VsZENyZWF0ZVRlbXBsYXRlQ2hhcnRWaXN1YWxpemF0aW9uIiwic29tZSIsInZpc3VhbGl6YXRpb24iLCJpbmNsdWRlcyIsIiRBbm5vdGF0aW9uUGF0aCIsImdldENvbnRlbnRJZCIsIm1hY3JvSWQiLCJnZXRFeHRyYVBhcmFtcyIsImV4dHJhUGFyYW1zIiwiY3VzdG9tQWN0aW9ucyIsImFjdGlvbk92ZXJmbG93R3JvdXBzIiwiYWN0aW9ucyIsIk9iamVjdCIsInZhbHVlcyIsImZvckVhY2giLCJhY3Rpb24iLCJpc0EiLCJrZXkiLCJnZXRBY3Rpb25Qcm9wZXJ0aWVzIiwidGV4dCIsInBsYWNlbWVudCIsImFuY2hvciIsIm1hcCIsIl8iLCJpbmRleCIsImdyb3VwIiwib3ZlcmZsb3dHcm91cCIsImFjdCIsImFjdGlvbktleSIsImNvbmNhdCIsInByZXNzIiwicmVxdWlyZXNTZWxlY3Rpb24iLCJlbmFibGVkIiwidW5kZWZpbmVkIiwicHJpb3JpdHkiLCJ0b1N0cmluZyIsInNob3dTZXBhcmF0b3IiLCJvdmVyZmxvd0dyb3VwcyIsInBvc2l0aW9uIiwibWVudSIsImFjdGlvblByb3BlcnRpZXMiLCJfX25vV3JhcCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZGF0YSIsImNvbnRleHRQYXRoIiwidWlkIiwiYWN0aW9uc01vZGVsIiwiSlNPTk1vZGVsIiwic2V0UHJvcGVydHkiLCJnZXRDaGFydE1lYXN1cmVzIiwiY2hhcnRBbm5vdGF0aW9uUGF0aCIsImNoYXJ0RGVmaW5pdGlvbiIsImFubm90YXRpb25QYXRoIiwic3BsaXQiLCJmaWx0ZXIiLCJpdGVtIiwicG9zIiwiaW5kZXhPZiIsInJlcGxhY2VBbGwiLCJvQ2hhcnQiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJfbWV0YU1vZGVsIiwiX2NvbnRleHQiLCJ0YXJnZXRPYmplY3QiLCJtZWFzdXJlcyIsImFubm9QYXRoIiwiZ2V0UGF0aCIsImNoYXJ0TWVhc3VyZXMiLCJNZWFzdXJlcyIsImNoYXJ0RHluYW1pY01lYXN1cmVzIiwiRHluYW1pY01lYXN1cmVzIiwiZW50aXR5U2V0UGF0aCIsInJlcGxhY2UiLCJ0cmFuc0FnZ3JlZ2F0aW9ucyIsInRyYW5zQWdnIiwiY3VzdG9tQWdncmVnYXRpb25zIiwiY3VzdG9tQWdnIiwiY29udGFpbnNBZ2dyZWdhdGVkUHJvcGVydHkiLCJjb250YWluc1RyYW5zQWdnSW5NZWFzdXJlcyIsIkxvZyIsIndhcm5pbmciLCJpc0N1c3RvbUFnZ3JlZ2F0ZUlzTWVhc3VyZSIsIm9DaGFydE1lYXN1cmUiLCJvQ3VzdG9tQWdnTWVhc3VyZSIsImdldEN1c3RvbUFnZ01lYXN1cmUiLCJFcnJvciIsImR5bmFtaWNNZWFzdXJlIiwiZ2V0RHluYW1pY01lYXN1cmVzIiwiY2hhcnRNZWFzdXJlIiwidmFsdWUiLCJjdXN0b21BZ2dNZWFzdXJlIiwibWVhc3VyZVR5cGUiLCJzZXRDdXN0b21BZ2dNZWFzdXJlIiwic2V0VHJhbnNBZ2dNZWFzdXJlIiwic2V0Q2hhcnRNZWFzdXJlQXR0cmlidXRlcyIsIl9jaGFydCIsIk1lYXN1cmVBdHRyaWJ1dGVzIiwibWVhc3VyZXNNb2RlbCIsIiQkdmFsdWVBc1Byb21pc2UiLCJtZWFzdXJlIiwiZXJyb3IiLCJyb2xlIiwibGFiZWwiLCJwcm9wZXJ0eVBhdGgiLCJwdXNoIiwidHJhbnNBZ2dNZWFzdXJlIiwibmFtZSIsImFnZ3JlZ2F0aW9uTWV0aG9kIiwiY2hhcnREeW5hbWljTWVhc3VyZSIsImNoYXJ0IiwiYWdncmVnYXRlZFByb3BlcnR5Iiwic3RhcnRzV2l0aCIsIk5hbWUiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0eSIsIkFnZ3JlZ2F0aW9uTWV0aG9kIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJMYWJlbCIsIiR0YXJnZXQiLCJtZWFzdXJlQXR0cmlidXRlcyIsIm1lYXN1cmVBdHRyaWJ1dGUiLCJfc2V0Q2hhcnRNZWFzdXJlQXR0cmlidXRlIiwicGF0aCIsIkR5bmFtaWNNZWFzdXJlIiwiTWVhc3VyZSIsIm1lYXN1cmVBdHRyaWJ1dGVEYXRhUG9pbnQiLCJEYXRhUG9pbnQiLCJSb2xlIiwiZGF0YVBvaW50Iiwic2V0TWVhc3VyZVJvbGUiLCJzZXRNZWFzdXJlRGF0YVBvaW50IiwiY3JlYXRlRGF0YVBvaW50UHJvcGVydHkiLCJvRGF0YVBvaW50QW5ubyIsIm9EYXRhUG9pbnQiLCJUYXJnZXRWYWx1ZSIsInRhcmdldFZhbHVlIiwiJFBhdGgiLCJGb3JlY2FzdFZhbHVlIiwiZm9yZUNhc3RWYWx1ZSIsIm9Dcml0aWNhbGl0eSIsIkNyaXRpY2FsaXR5IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJDYWxjdWxhdGVkIiwiU3RhdGljIiwiJEVudW1NZW1iZXIiLCJDcml0aWNhbGl0eUNhbGN1bGF0aW9uIiwib1RocmVzaG9sZHMiLCJiQ29uc3RhbnQiLCJidWlsZFRocmVzaG9sZHMiLCJDb25zdGFudFRocmVzaG9sZHMiLCJEeW5hbWljVGhyZXNob2xkcyIsImNyaXRpY2FsaXR5IiwidGhyZXNob2xkcyIsImNyaXRpY2FsaXR5Q2FsY3VsYXRpb24iLCJrZXlzIiwiSW1wcm92ZW1lbnREaXJlY3Rpb24iLCJkeW5hbWljVGhyZXNob2xkcyIsIm9uZVN1cHBsaWVkIiwidXNlZE1lYXN1cmVzIiwiY29uc3RhbnRUaHJlc2hvbGRzIiwiaW5pdGlhbGlzZVRocmVzaG9sZHMiLCJwcm9jZXNzVGhyZXNob2xkcyIsIkFnZ3JlZ2F0aW9uTGV2ZWxzIiwicHJvY2Vzc0FnZ3JlZ2F0aW9uTGV2ZWxGb3JUaHJlc2hvbGRzIiwib0FnZ3JlZ2F0aW9uTGV2ZWwiLCJWaXNpYmxlRGltZW5zaW9ucyIsInNLZXkiLCJwcm9jZXNzQWdncmVnYXRpb25MZXZlbHNGb3JDb25zdGFudFRocmVzaG9sZHMiLCJhZ2dyZWdhdGlvbkxldmVsIiwiYWdncmVnYXRpb25MZXZlbEluZm8iLCJ2aXNpYmxlRGltZW5zaW9ucyIsIkFnZ3JlZ2F0aW9uTGV2ZWwiLCIkUHJvcGVydHlQYXRoIiwiVmFsdWUiLCJDaGFydEhlbHBlciIsImZvcm1hdEpTT05Ub1N0cmluZyIsImdldERlcGVuZGVudHMiLCJjaGFydENvbnRleHQiLCJfY29tbWFuZEFjdGlvbnMiLCJjb21tYW5kQWN0aW9uIiwiZ2V0QWN0aW9uQ29tbWFuZCIsImNoZWNrUGVyc29uYWxpemF0aW9uSW5DaGFydFByb3BlcnRpZXMiLCJwZXJzb25hbGl6YXRpb24iLCJfcGVyc29uYWxpemF0aW9uIiwiam9pbiIsInZlcmlmeVZhbGlkUGVyc29uYWxpemF0aW9uIiwidmFsaWQiLCJzcGxpdEFycmF5IiwiYWNjZXB0ZWRWYWx1ZXMiLCJhcnJheUVsZW1lbnQiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsInZhcmlhbnRNYW5hZ2VtZW50IiwiY3JlYXRlVmFyaWFudE1hbmFnZW1lbnQiLCJfanN4IiwiVmFyaWFudE1hbmFnZW1lbnQiLCJpZCIsImdlbmVyYXRlIiwiX2Jsb2NrSWQiLCJmb3IiLCJzaG93U2V0QXNEZWZhdWx0IiwiaGVhZGVyTGV2ZWwiLCJzZWxlY3QiLCJldmVudCIsImZpcmVWYXJpYW50U2VsZWN0ZWQiLCJzYXZlIiwiZmlyZVZhcmlhbnRTYXZlZCIsImdldFBlcnNpc3RlbmNlUHJvdmlkZXIiLCJQZXJzaXN0ZW5jZVByb3ZpZGVyIiwicHVzaEFjdGlvbkNvbW1hbmQiLCJhY3Rpb25Db250ZXh0IiwiZGF0YUZpZWxkIiwiY2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAiLCJvbkV4ZWN1dGVBY3Rpb24iLCJnZXRQcmVzc0V2ZW50Rm9yRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uIiwib25FeGVjdXRlSUJOIiwiQ29tbW9uSGVscGVyIiwiZ2V0UHJlc3NIYW5kbGVyRm9yRGF0YUZpZWxkRm9ySUJOIiwib25FeGVjdXRlTWFuaWZlc3QiLCJidWlsZEFjdGlvbldyYXBwZXIiLCJkYXRhRmllbGRDb250ZXh0IiwiZGF0YUZpZWxkQWN0aW9uIiwiZ2V0QWN0aW9uQ29udGV4dCIsImlzQm91bmRQYXRoIiwiZ2V0UGF0aFRvQm91bmRBY3Rpb25PdmVybG9hZCIsImlzQm91bmQiLCJlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZSIsImdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImNvbnRleHQiLCJpc0FjdGlvbkVuYWJsZWQiLCJpc0RhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbkVuYWJsZWQiLCIkSXNCb3VuZCIsIkFjdGlvbiIsImVuYWJsZU9uU2VsZWN0IiwiaXNJQk5FbmFibGVkIiwiUmVxdWlyZXNDb250ZXh0IiwiY29tbWFuZEVuYWJsZWQiLCJ0eXBlIiwiYWN0aW9uQ29tbWFuZCIsIkNvbW1hbmRFeGVjdXRpb24iLCJleGVjdXRlIiwiY29tbWFuZEV4ZWN1dGUiLCJ2aXNpYmxlIiwiZ2V0VmlzaWJsZSIsImNvbW1hbmQiLCJJc0JvdW5kIiwidmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsImdldFNvdXJjZSIsImNvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwic0ludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsInBhcmFtcyIsImNvbnRleHRzIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRQcm9wZXJ0eSIsImludm9jYXRpb25Hcm91cGluZyIsImNvbnRyb2xJZCIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJlZGl0RmxvdyIsImludm9rZUFjdGlvbiIsIm5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibmF2aWdhdGlvbkNvbnRleHRzIiwiTWFwcGluZyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwibmF2aWdhdGUiLCJTZW1hbnRpY09iamVjdCIsIkZQTUhlbHBlciIsImFjdGlvbldyYXBwZXIiLCJoYW5kbGVyTW9kdWxlIiwiaGFuZGxlck1ldGhvZCIsImdldEl0ZW1zIiwiZGltZW5zaW9ucyIsIkRpbWVuc2lvbnMiLCJmb3JtYXREaW1lbnNpb25zIiwiX2NoYXJ0Q29udGV4dCIsImRpbWVuc2lvbiIsImdldEl0ZW0iLCJmb3JtYXRNZWFzdXJlcyIsInByZWZpeCIsIk1kY0NoYXJ0SXRlbSIsInByb3BlcnR5S2V5IiwiZ2V0VG9vbGJhckFjdGlvbnMiLCJnZXRBY3Rpb25zIiwib25TZWdtZW50ZWRCdXR0b25QcmVzc2VkIiwiZ2V0U2VnbWVudGVkQnV0dG9uIiwiaXNJbnNpZ2h0c0VuYWJsZWQiLCJnZXRTdGFuZGFyZEFjdGlvbnMiLCJpc0luc2lnaHRzVmlzaWJsZSIsIkFjdGlvblRvb2xiYXJBY3Rpb24iLCJjaGlsZHJlbiIsIkJ1dHRvbiIsIm9uQWRkQ2FyZFRvSW5zaWdodHNQcmVzc2VkIiwibGF5b3V0RGF0YSIsIk92ZXJmbG93VG9vbGJhckxheW91dERhdGEiLCJyZW1vdmVNZW51SXRlbXMiLCJjaGFydEFjdGlvbnMiLCJhY3Rpb25zV2l0aE92ZXJmbG93UHJvdGVjdGlvbiIsIkFjdGlvbkhlbHBlciIsImVuc3VyZVByaW1hcnlBY3Rpb25OZXZlck92ZXJmbG93cyIsImdldEFjdGlvbiIsImdldFNlcGFyYXRvciIsImhhc093blByb3BlcnR5IiwiZ2V0Q3VzdG9tQWN0aW9ucyIsImlkeCIsInNwbGljZSIsImFjdGlvbkVuYWJsZWQiLCJnZXRBY3Rpb25Ub29sYmFyQWN0aW9uIiwidW5pdHRlc3RpZCIsImFyaWFIYXNQb3B1cCIsImdldEFjdGlvblRvb2xiYXJNZW51QWN0aW9uIiwidXNlRGVmYXVsdEFjdGlvbk9ubHkiLCJEZWZhdWx0QWN0aW9uSGFuZGxlciIsImdldFVzZURlZmF1bHRBY3Rpb25Pbmx5IiwiYnV0dG9uTW9kZSIsImdldEJ1dHRvbk1vZGUiLCJkZWZhdWx0QWN0aW9uIiwiZ2V0TWVudUl0ZW1Gcm9tTWVudSIsIm1lbnVJdGVtQWN0aW9uIiwicHJlc3NIYW5kbGVyIiwibm9XcmFwIiwiZnVuY3Rpb25OYW1lIiwic2VsZWN0ZWRDb250ZXh0cyIsIk1lbnVJdGVtIiwicHJvcHMiLCJhTWVudUl0ZW1zIiwiaXNBSU9wZXJhdGlvbiIsImlzTWVudUFJT3BlcmF0aW9uIiwiTWVudUJ1dHRvbiIsIm1lbnVQb3NpdGlvbiIsIkRvY2siLCJCZWdpbkJvdHRvbSIsImljb24iLCJhaUljb24iLCJhcmlhRGVzY3JpYmVkQnkiLCJnZXRJZCIsIk1lbnUiLCJpc01lbnVJdGVtIiwiZ2V0TmF2aWdhdGlvbkFjdGlvbnMiLCJnZXRBbm5vdGF0aW9uQWN0aW9ucyIsIm1lbnVJdGVtcyIsIm1lbnVBY3Rpb24iLCJUb29sYmFyU2VwYXJhdG9yIiwiYWN0aW9uT2JqZWN0IiwiZ2V0QW5ub3RhdGlvbkFjdGlvbnNFbmFibGVkIiwiZGF0YUZpZWxkTW9kZWxPYmplY3RQYXRoIiwiaXNEYXRhTW9kZWxPYmplY3RQYXRoRm9yQWN0aW9uV2l0aERpYWxvZyIsInRvb2xiYXJBY3Rpb24iLCJwcmVzc0V2ZW50IiwiZGlzYWJsZVN0cmljdEhhbmRsaW5nIiwiYnVpbGRBY3Rpb24iLCJnZXRBY3Rpb25QcmVzcyIsImFjdGlvblByZXNzIiwiZ2V0Q3VzdG9tQWN0aW9uUHJlc3MiLCJnZXRBY3Rpb25QcmVzc1dpdGhBbm5vdGF0aW9uUGF0aCIsImdldFN0YW5kYXJkQWN0aW9uUHJlc3NXaXRoTm9Db21tYW5kIiwibGF5b3V0SW5mb3JtYXRpb24iLCJhZ2dyZWdhdGlvbk5hbWUiLCJhbGlnbm1lbnQiLCJTZWdtZW50ZWRCdXR0b24iLCJzZWxlY3Rpb25DaGFuZ2UiLCJmaXJlU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsIm1lcmdlIiwiZ2V0UGFyYW1ldGVycyIsInNlbGVjdGVkS2V5IiwiZ2V0U2VsZWN0ZWRLZXkiLCJub3RFcXVhbCIsInBhdGhJbk1vZGVsIiwiaXRlbXMiLCJnZXRTZWdtZW50ZWRCdXR0b25JdGVtcyIsInNlZ21lbnRlZEJ1dHRvbkl0ZW1zIiwiaXNEZXNrdG9wIiwiZ2V0U2VnbWVudGVkQnV0dG9uSXRlbSIsInRvb2x0aXAiLCJTZWdtZW50ZWRCdXR0b25JdGVtIiwiZ2V0VmlzdWFsaXphdGlvblBhdGgiLCJtZXRhUGF0aCIsInRlcm0iLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiZ2V0VmlzdWFsaXphdGlvbnNGcm9tQW5ub3RhdGlvbiIsImNoYXJ0Vml6IiwiZmluZCIsInZpeiIsImhpZGRlblBhdGhDb250ZXh0IiwiZ2V0SGlkZGVuUGF0aEV4cHJlc3Npb25Gb3JUYWJsZUFjdGlvbnNBbmRJQk4iLCJnZXRDaGFydENvbnZlcnRlckNvbnRleHQiLCJwcm9wZXJ0aWVzIiwib3JpZ2luYWxWaWV3RGF0YSIsImRpYWdub3N0aWNzIiwidmlld0RhdGEiLCJhc3NpZ24iLCJyZXNvdXJjZU1vZGVsIiwiYXBwQ29tcG9uZW50IiwiZGVlcENsb25lIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJyZWxhdGl2ZVBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiY29udGV4dExvY2F0aW9uIiwiZW50aXR5U2V0TmFtZSIsInRhcmdldEVudGl0eVNldCIsImVudGl0eVNldCIsIkNvbnZlcnRlckNvbnRleHQiLCJjcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8iLCJzdGFydGluZ0VudGl0eVNldCIsIk1hbmlmZXN0V3JhcHBlciIsImdldENvbnZlcnRlckNvbnRleHQiLCJpbml0aWFsQ29udmVydGVyQ29udGV4dCIsIm1vZGlmeUlkZW50aWZpZXJzIiwiX2FwcGx5SWRUb0NvbnRlbnQiLCJfY29udGVudElkIiwiaW5pdGlhbGlzZSIsIm1ldGFDb250ZXh0UGF0aCIsImdldE1ldGFQYXRoT2JqZWN0IiwiX3Jlc29sdmVkQ29udGV4dFBhdGgiLCJfZ2V0T3duZXIiLCJwcmVwcm9jZXNzb3JDb250ZXh0IiwibW9kZWxzIiwibWV0YU1vZGVsIiwiZ2V0Q29udGV4dFBhdGgiLCJ2aWV3Q29uZmlnIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0Vmlld0NvbmZpZ3VyYXRpb24iLCJpc011bHRpVGFicyIsInBhdGhzIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkFuYWx5dGljYWxMaXN0UGFnZSIsImdldFVpQ2hhcnQiLCJfYmxvY2tBY3Rpb25zIiwiY29sbGVjdGlvbiIsIm5hdmlnYXRpb25QYXRoIiwiYXV0b0JpbmRPbkluaXQiLCJ2aXpQcm9wZXJ0aWVzIiwiZ2V0RmlsdGVyQmFyIiwiZHJhZnRTdXBwb3J0ZWQiLCJNb2RlbEhlbHBlciIsImlzTWV0YVBhdGhEcmFmdFN1cHBvcnRlZCIsIl9jaGFydFR5cGUiLCJmb3JtYXRDaGFydFR5cGUiLCJDaGFydFR5cGUiLCJjb21tYW5kQWN0aW9ucyIsInByZXNlbnRhdGlvblBhdGgiLCJjcmVhdGVQcmVzZW50YXRpb25QYXRoQ29udGV4dCIsIl9zb3J0Q29uZGl0aW9ucyIsImdldFNvcnRDb25kaXRpb25zIiwiYXBwbHlTdXBwb3J0ZWQiLCJjaGFydEFjdGlvbnNDb250ZXh0IiwiQWN0aW9ucyIsInRhcmdldENvbGxlY3Rpb25QYXRoIiwiZ2V0VGFyZ2V0Q29sbGVjdGlvblBhdGgiLCJ0YXJnZXRDb2xsZWN0aW9uUGF0aENvbnRleHQiLCJhY3Rpb25zT2JqZWN0IiwiY29udmVydGVkVHlwZXMiLCJyZXNvbHZlUGF0aCIsInRhcmdldCIsIl9jdXN0b21EYXRhIiwiZW50aXR5VHlwZSIsInBhcnNlIiwibXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnMiLCJnZXRNdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyIsInNlZ21lbnRlZEJ1dHRvbklkIiwibXVsdGlWaWV3cyIsInNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRQYXRoIiwiY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlIiwiY2hhcnRNZWFzdXJlS2V5QW5kUm9sZSIsImlzUGFyYW1ldGVyaXplZEVudGl0eVNldCIsInN1YnN0cmluZyIsImZpbHRlckJhciIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldERlbGVnYXRlIiwiY2hhcnREZWxlZ2F0ZSIsInBheWxvYWQiLCJzZWxlY3Rpb25Nb2RlIiwidG9VcHBlckNhc2UiLCJjaGFydENvbnRleHRQYXRoIiwicGFyYW1ldGVycyIsIiQkZ3JvdXBJZCIsImdldEN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwiZ2V0Tm9EYXRhIiwiSWxsdXN0cmF0ZWRNZXNzYWdlIiwiaWxsdXN0cmF0aW9uU2l6ZSIsIklsbHVzdHJhdGVkTWVzc2FnZVNpemUiLCJBdXRvIiwiaWxsdXN0cmF0aW9uVHlwZSIsIklsbHVzdHJhdGVkTWVzc2FnZVR5cGUiLCJCZWZvcmVTZWFyY2giLCJ0aXRsZSIsImdldFRyYW5zbGF0ZWRUZXh0IiwiZGVzY3JpcHRpb24iLCJlbmFibGVEZWZhdWx0VGl0bGVBbmREZXNjcmlwdGlvbiIsImVuYWJsZVZlcnRpY2FsUmVzcG9uc2l2ZW5lc3MiLCJnZXRNZGNDaGFydFRlbXBsYXRlIiwiRmxleEl0ZW1EYXRhIiwiZ3Jvd0ZhY3RvciIsInNocmlua0ZhY3RvciIsIk1kY0NoYXJ0IiwiYmluZGluZyIsImludGVybmFsIiwiY2hhcnRUeXBlIiwic29ydENvbmRpdGlvbnMiLCJoZWFkZXIiLCJUaXRsZSIsImhlYWRlclZpc2libGUiLCJtaW5IZWlnaHQiLCJEZXZpY2UiLCJzeXN0ZW0iLCJwaG9uZSIsImhlaWdodCIsIndpZHRoIiwiaGVhZGVyU3R5bGUiLCJwMTNuTW9kZSIsIm5vRGF0YVRleHQiLCJkZWxlZ2F0ZSIsImN1c3RvbURhdGEiLCJkZXBlbmRlbnRzIiwiZ2V0QWNjQUlBY3Rpb25JbnZpc2libGVUZXh0IiwidmFyaWFudCIsIm5vRGF0YSIsIl9leHBvcnRzIiwiaW52aXNpYmxlVGV4dEFjY0FJQWN0aW9uIiwiSW52aXNpYmxlVGV4dCIsInRvU3RhdGljIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZGNDaGFydFRlbXBsYXRlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByaW1pdGl2ZVR5cGUsIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBZ2dyZWdhdGVkUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FuYWx5dGljc1wiO1xuaW1wb3J0IHsgQW5hbHl0aWNzQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BbmFseXRpY3NcIjtcbmltcG9ydCB7IENvcmVBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvcmVcIjtcbmltcG9ydCB0eXBlIHtcblx0Q2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZSxcblx0Q2hhcnRNZWFzdXJlUm9sZVR5cGUsXG5cdENoYXJ0IGFzIENoYXJ0VHlwZSxcblx0Q3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGUsXG5cdENyaXRpY2FsaXR5VHlwZSxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdERhdGFQb2ludCxcblx0SW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlLFxuXHRMZXZlbFRocmVzaG9sZHNUeXBlLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IE9wZXJhdGlvbkdyb3VwaW5nVHlwZSwgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IHsgbm90RXF1YWwsIHBhdGhJbk1vZGVsLCB0eXBlIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgdHlwZSBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25QYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgQ29tbWFuZEV4ZWN1dGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlTWFuaWZlc3RTZXR0aW5ncywgQ29udHJvbENvbmZpZ3VyYXRpb24sIE92ZXJmbG93R3JvdXBzQ29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IFRlbXBsYXRlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RXcmFwcGVyXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzRGF0YU1vZGVsT2JqZWN0UGF0aEZvckFjdGlvbldpdGhEaWFsb2cgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB7XG5cdGFpSWNvbixcblx0aXNNZW51QUlPcGVyYXRpb24sXG5cdHR5cGUgQW5ub3RhdGlvbkFjdGlvbixcblx0dHlwZSBCYXNlQWN0aW9uLFxuXHR0eXBlIEN1c3RvbUFjdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0UDEzblR5cGUsIENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHR5cGUgeyBWaXN1YWxpemF0aW9uQW5kUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHtcblx0Z2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uLFxuXHRnZXRWaXN1YWxpemF0aW9uc0Zyb21Bbm5vdGF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IFZpZXdEYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1RlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgRGlhZ25vc3RpY3MgZnJvbSBcInNhcC9mZS9jb3JlL3N1cHBvcnQvRGlhZ25vc3RpY3NcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgsIGdldFRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uR3JvdXAgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQWN0aW9uR3JvdXBcIjtcbmltcG9ydCB0eXBlIHsgQnV0dG9uJFByZXNzRXZlbnQgfSBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBGbGV4SXRlbURhdGEgZnJvbSBcInNhcC9tL0ZsZXhJdGVtRGF0YVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBNZW51IGZyb20gXCJzYXAvbS9NZW51XCI7XG5pbXBvcnQgTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vTWVudUJ1dHRvblwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhckxheW91dERhdGFcIjtcbmltcG9ydCB0eXBlIHsgU2VnbWVudGVkQnV0dG9uJFNlbGVjdGlvbkNoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvblwiO1xuaW1wb3J0IFNlZ21lbnRlZEJ1dHRvbiBmcm9tIFwic2FwL20vU2VnbWVudGVkQnV0dG9uXCI7XG5pbXBvcnQgU2VnbWVudGVkQnV0dG9uSXRlbSBmcm9tIFwic2FwL20vU2VnbWVudGVkQnV0dG9uSXRlbVwiO1xuaW1wb3J0IFRvb2xiYXJTZXBhcmF0b3IgZnJvbSBcInNhcC9tL1Rvb2xiYXJTZXBhcmF0b3JcIjtcbmltcG9ydCB0eXBlIHsgT3ZlcmZsb3dUb29sYmFyUHJpb3JpdHkgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEludmlzaWJsZVRleHQgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZVRleHRcIjtcbmltcG9ydCB7IERvY2sgfSBmcm9tIFwic2FwL3VpL2NvcmUvUG9wdXBcIjtcbmltcG9ydCB0eXBlIHsgVmFyaWFudE1hbmFnZW1lbnQkU2F2ZUV2ZW50LCBWYXJpYW50TWFuYWdlbWVudCRTZWxlY3RFdmVudCB9IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCBWYXJpYW50TWFuYWdlbWVudCBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgTWRjQ2hhcnQgZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9tZGMvQ29udHJvbFwiO1xuaW1wb3J0IEFjdGlvblRvb2xiYXJBY3Rpb24gZnJvbSBcInNhcC91aS9tZGMvYWN0aW9udG9vbGJhci9BY3Rpb25Ub29sYmFyQWN0aW9uXCI7XG5pbXBvcnQgTWRjQ2hhcnRJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2NoYXJ0L0l0ZW1cIjtcbmltcG9ydCBQZXJzaXN0ZW5jZVByb3ZpZGVyIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vUGVyc2lzdGVuY2VQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBFeHBhbmRQYXRoVHlwZSwgTWV0YU1vZGVsRW51bSwgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIENoYXJ0QmxvY2sgZnJvbSBcIi4uL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBNYWNyb0FQSSBmcm9tIFwiLi4vTWFjcm9BUElcIjtcbmltcG9ydCBBY3Rpb25IZWxwZXIgZnJvbSBcIi4uL2ludGVybmFsL2hlbHBlcnMvQWN0aW9uSGVscGVyXCI7XG5pbXBvcnQgRGVmYXVsdEFjdGlvbkhhbmRsZXIgZnJvbSBcIi4uL2ludGVybmFsL2hlbHBlcnMvRGVmYXVsdEFjdGlvbkhhbmRsZXJcIjtcbmltcG9ydCBDaGFydEhlbHBlciBmcm9tIFwiLi9DaGFydEhlbHBlclwiO1xuXG5jb25zdCBtZWFzdXJlUm9sZTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydE1lYXN1cmVSb2xlVHlwZS9BeGlzMVwiOiBcImF4aXMxXCIsXG5cdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRNZWFzdXJlUm9sZVR5cGUvQXhpczJcIjogXCJheGlzMlwiLFxuXHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0TWVhc3VyZVJvbGVUeXBlL0F4aXMzXCI6IFwiYXhpczNcIixcblx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydE1lYXN1cmVSb2xlVHlwZS9BeGlzNFwiOiBcImF4aXM0XCJcbn07XG50eXBlIEV4dGVuZGVkQWN0aW9uR3JvdXAgPSBBY3Rpb25Hcm91cCAmIHsgbWVudUNvbnRlbnRBY3Rpb25zPzogUmVjb3JkPHN0cmluZywgQWN0aW9uPiB9O1xudHlwZSBDaGFydFBheWxvYWQgPSB7XG5cdGNoYXJ0Q29udGV4dFBhdGg6IHN0cmluZztcblx0cGFyYW1ldGVyczogb2JqZWN0O1xuXHRzZWxlY3Rpb25Nb2RlOiBzdHJpbmc7XG59O1xudHlwZSBDaGFydERlbGVnYXRlID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdHBheWxvYWQ6IENoYXJ0UGF5bG9hZDtcbn07XG5leHBvcnQgdHlwZSBBY3Rpb25PckFjdGlvbkdyb3VwID0gUmVjb3JkPHN0cmluZywgQWN0aW9uIHwgRXh0ZW5kZWRBY3Rpb25Hcm91cD47XG5leHBvcnQgdHlwZSBDdXN0b21BbmRBY3Rpb24gPSBDdXN0b21BY3Rpb24gJiAoQWN0aW9uIHwgQWN0aW9uR3JvdXApO1xuZXhwb3J0IHR5cGUgQ3VzdG9tVG9vbGJhck1lbnVBY3Rpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdHRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0dmlzaWJsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRlbmFibGVkPzogc3RyaW5nIHwgYm9vbGVhbjtcblx0dXNlRGVmYXVsdEFjdGlvbk9ubHk/OiBib29sZWFuO1xuXHRidXR0b25Nb2RlPzogc3RyaW5nO1xuXHRkZWZhdWx0QWN0aW9uPzogc3RyaW5nO1xuXHRhY3Rpb25zPzogQ3VzdG9tQWN0aW9uO1xuXHRwcmlvcml0eT86IE92ZXJmbG93VG9vbGJhclByaW9yaXR5O1xuXHRncm91cD86IG51bWJlcjtcblx0b3ZlcmZsb3dHcm91cD86IG51bWJlcjtcbn07XG5cbmVudW0gcGVyc29uYWxpemF0aW9uVmFsdWVzIHtcblx0U29ydCA9IFwiU29ydFwiLFxuXHRUeXBlID0gXCJUeXBlXCIsXG5cdEl0ZW0gPSBcIkl0ZW1cIixcblx0RmlsdGVyID0gXCJGaWx0ZXJcIlxufVxuXG5leHBvcnQgdHlwZSBNZWFzdXJlVHlwZSA9IHtcblx0aWQ/OiBzdHJpbmc7XG5cdGtleT86IHN0cmluZztcblx0cm9sZT86IHN0cmluZztcblx0cHJvcGVydHlQYXRoPzogc3RyaW5nO1xuXHRhZ2dyZWdhdGlvbk1ldGhvZD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmcgfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT47XG5cdHZhbHVlPzogc3RyaW5nO1xuXHRkYXRhUG9pbnQ/OiBzdHJpbmc7XG5cdG5hbWU/OiBzdHJpbmc7XG59O1xuXG50eXBlIERpbWVuc2lvblR5cGUgPSB7XG5cdGlkPzogc3RyaW5nO1xuXHRrZXk/OiBzdHJpbmc7XG5cdHJvbGU/OiBzdHJpbmc7XG5cdHByb3BlcnR5UGF0aD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmcgfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT47XG5cdHZhbHVlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ29tbWFuZEFjdGlvbiA9IHtcblx0YWN0aW9uQ29udGV4dDogQ29udGV4dDtcblx0b25FeGVjdXRlQWN0aW9uOiBzdHJpbmc7XG5cdG9uRXhlY3V0ZUlCTj86IHN0cmluZztcblx0b25FeGVjdXRlTWFuaWZlc3Q6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcbn07XG5cbnR5cGUgVG9vbEJhckFjdGlvbiA9IHtcblx0dW5pdHRlc3RpZDogc3RyaW5nO1xuXHRpZD86IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0YXJpYUhhc1BvcHVwPzogc3RyaW5nO1xuXHRwcmVzcz86IHN0cmluZztcblx0ZW5hYmxlZD86IHN0cmluZyB8IGJvb2xlYW47XG5cdHZpc2libGU6IHN0cmluZyB8IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBDaGFydEN1c3RvbURhdGEgPSB7XG5cdHRhcmdldENvbGxlY3Rpb25QYXRoOiBzdHJpbmc7XG5cdGVudGl0eVNldDogc3RyaW5nO1xuXHRlbnRpdHlUeXBlOiBzdHJpbmc7XG5cdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogc3RyaW5nO1xuXHRtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9uczogc3RyaW5nO1xuXHRzZWdtZW50ZWRCdXR0b25JZDogc3RyaW5nO1xuXHRjdXN0b21BZ2c6IG9iamVjdDtcblx0dHJhbnNBZ2c6IG9iamVjdDtcblx0YXBwbHlTdXBwb3J0ZWQ6IG9iamVjdDtcblx0dml6UHJvcGVydGllczogb2JqZWN0O1xuXHRkcmFmdFN1cHBvcnRlZD86IGJvb2xlYW47XG5cdG11bHRpVmlld3M/OiBib29sZWFuO1xuXHRzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aD86IG9iamVjdDtcblx0Y2hhcnREaW1lbnNpb25LZXlBbmRSb2xlPzogb2JqZWN0O1xuXHRjaGFydE1lYXN1cmVLZXlBbmRSb2xlPzogb2JqZWN0O1xufTtcblxuZXhwb3J0IHR5cGUgQ2hhcnRDb250ZXh0T2JqZWN0UGF0aCA9IENoYXJ0VHlwZSB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBQcmVzZW50YXRpb25WYXJpYW50O1xuXG50eXBlIEFjdGlvblByb3BlcnRpZXMgPSB7XG5cdGtleTogc3RyaW5nO1xuXHR0ZXh0OiBzdHJpbmc7XG5cdF9fbm9XcmFwOiBib29sZWFuO1xuXHRwcmVzczogc3RyaW5nIHwgbnVsbDtcblx0cmVxdWlyZXNTZWxlY3Rpb246IGJvb2xlYW47XG5cdGVuYWJsZWQ6IGJvb2xlYW47XG5cdHBvc2l0aW9uPzogb2JqZWN0O1xuXHRtZW51Pzogc3RyaW5nW107XG5cdGdyb3VwPzogbnVtYmVyO1xuXHRvdmVyZmxvd0dyb3VwPzogbnVtYmVyO1xuXHRwcmlvcml0eT86IE92ZXJmbG93VG9vbGJhclByaW9yaXR5O1xufTtcblxudHlwZSBUb29sYmFyQWN0aW9uID0gTWVudUl0ZW0gfCBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBjcmVhdGVDaGFydERlZmluaXRpb24oXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2ssXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0VHlwZSB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBQcmVzZW50YXRpb25WYXJpYW50Pixcblx0Y29udHJvbFBhdGg6IHN0cmluZ1xuKTogQ2hhcnRWaXN1YWxpemF0aW9uIHtcblx0bGV0IHZpc3VhbGl6YXRpb25QYXRoID0gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChjb250ZXh0T2JqZWN0UGF0aCk7XG5cdGxldCB2aXN1YWxpemF0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPltdID0gW107XG5cdGlmIChjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQ/LmdldE9iamVjdCgpPy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpIHtcblx0XHR2aXN1YWxpemF0aW9ucyA9IGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dC5nZXRPYmplY3QoKS5WaXN1YWxpemF0aW9ucztcblx0fSBlbHNlIGlmIChjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQ/LmdldE9iamVjdCgpPy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpIHtcblx0XHR2aXN1YWxpemF0aW9ucyA9IGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dC5nZXRPYmplY3QoKS5QcmVzZW50YXRpb25WYXJpYW50Py5WaXN1YWxpemF0aW9ucztcblx0fVxuXHRpZiAodmlzdWFsaXphdGlvbnM/Lmxlbmd0aCAmJiAhY2hlY2tDaGFydEV4aXN0cyh2aXN1YWxpemF0aW9ucywgY29udHJvbFBhdGgpKSB7XG5cdFx0dmlzdWFsaXphdGlvblBhdGggPSBcIlwiO1xuXHR9XG5cblx0Ly8gZmFsbGJhY2sgdG8gZGVmYXVsdCBDaGFydCBpZiB2aXN1YWxpemF0aW9uUGF0aCBpcyBtaXNzaW5nIG9yIHZpc3VhbGl6YXRpb25QYXRoIGlzIG5vdCBmb3VuZCBpbiBjb250cm9sIChpbiBjYXNlIG9mIFByZXNlbnRhdGlvblZhcmlhbnQpXG5cdGlmICghdmlzdWFsaXphdGlvblBhdGgpIHtcblx0XHR2aXN1YWxpemF0aW9uUGF0aCA9IGBAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gO1xuXHR9XG5cblx0Y29uc3QgdmlzdWFsaXphdGlvbkRlZmluaXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIHtcblx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50OiBjaGFydEJsb2NrLnVzZUNvbmRlbnNlZExheW91dCxcblx0XHRpc01hY3JvT3JNdWx0aXBsZVZpZXc6IHRydWUsXG5cdFx0c2hvdWxkQ3JlYXRlVGVtcGxhdGVDaGFydFZpc3VhbGl6YXRpb246IGZhbHNlXG5cdH0pO1xuXHRyZXR1cm4gdmlzdWFsaXphdGlvbkRlZmluaXRpb24udmlzdWFsaXphdGlvbnNbMF0gYXMgQ2hhcnRWaXN1YWxpemF0aW9uO1xufVxuXG5mdW5jdGlvbiBjaGVja0NoYXJ0RXhpc3RzKHZpc3VhbGl6YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+W10sIHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0cmV0dXJuIHZpc3VhbGl6YXRpb25zLnNvbWUoKHZpc3VhbGl6YXRpb24pID0+IHZpc3VhbGl6YXRpb25QYXRoPy5pbmNsdWRlcyh2aXN1YWxpemF0aW9uLiRBbm5vdGF0aW9uUGF0aCkpO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZW50SWQobWFjcm9JZDogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGAke21hY3JvSWR9LWNvbnRlbnRgO1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHVzZWQgdG8gZ2V0IGRldGFpbHMgV1JUIGFjdGlvbihzKSBzaG93biBpbiB0aGUgY2hhcnQncyB0b29sYmFyLlxuICogQHBhcmFtIGNoYXJ0QmxvY2sgQ2hhcnQgYmxvY2sgcHJvcGVydGllc1xuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFZpc3VhbGl6YXRpb24gcGF0aFxuICogQHJldHVybnMgT2JqZWN0IHdpdGggYWxsIHRoZSByZXF1aXJlZCBhY3Rpb24ocykgZGV0YWlsc1xuICovXG5mdW5jdGlvbiBnZXRFeHRyYVBhcmFtcyhjaGFydEJsb2NrOiBDaGFydEJsb2NrLCB2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgb2JqZWN0PiB7XG5cdGNvbnN0IGV4dHJhUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cdGNvbnN0IGN1c3RvbUFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblx0Y29uc3QgYWN0aW9uT3ZlcmZsb3dHcm91cHM6IE92ZXJmbG93R3JvdXBzQ29uZmlndXJhdGlvbiA9IHt9O1xuXG5cdGlmIChjaGFydEJsb2NrLmFjdGlvbnMpIHtcblx0XHRPYmplY3QudmFsdWVzKGNoYXJ0QmxvY2suYWN0aW9ucyk/LmZvckVhY2goKGFjdGlvbjogQWN0aW9uIHwgQWN0aW9uR3JvdXApID0+IHtcblx0XHRcdGlmIChhY3Rpb24uaXNBPEFjdGlvbkdyb3VwPihcInNhcC5mZS5tYWNyb3MuY2hhcnQuQWN0aW9uR3JvdXBcIikpIHtcblx0XHRcdFx0Y3VzdG9tQWN0aW9uc1thY3Rpb24ua2V5XSA9IGdldEFjdGlvblByb3BlcnRpZXMoXG5cdFx0XHRcdFx0YWN0aW9uLmtleSxcblx0XHRcdFx0XHRhY3Rpb24udGV4dCxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGxhY2VtZW50OiBhY3Rpb24ucGxhY2VtZW50LFxuXHRcdFx0XHRcdFx0YW5jaG9yOiBhY3Rpb24uYW5jaG9yXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRhY3Rpb24uYWN0aW9ucy5tYXAoKF8sIGluZGV4KSA9PiBhY3Rpb24ua2V5ICsgXCJfTWVudV9cIiArIGluZGV4KSxcblx0XHRcdFx0XHRhY3Rpb24uZ3JvdXAsXG5cdFx0XHRcdFx0YWN0aW9uLm92ZXJmbG93R3JvdXBcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRhY3Rpb24uYWN0aW9ucz8uZm9yRWFjaCgoYWN0OiBBY3Rpb24sIGluZGV4OiBudW1iZXIpID0+IHtcblx0XHRcdFx0XHRjb25zdCBhY3Rpb25LZXkgPSBhY3Rpb24ua2V5LmNvbmNhdChcIl9NZW51X1wiLCBpbmRleCBhcyB1bmtub3duIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0Y3VzdG9tQWN0aW9uc1thY3Rpb25LZXldID0gZ2V0QWN0aW9uUHJvcGVydGllcyhcblx0XHRcdFx0XHRcdGFjdGlvbktleSxcblx0XHRcdFx0XHRcdGFjdC50ZXh0LFxuXHRcdFx0XHRcdFx0YWN0LnByZXNzLFxuXHRcdFx0XHRcdFx0ISFhY3QucmVxdWlyZXNTZWxlY3Rpb24sXG5cdFx0XHRcdFx0XHRhY3QuZW5hYmxlZCA9PT0gbnVsbCB8fCBhY3QuZW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGFjdC5lbmFibGVkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKGFjdGlvbi5pc0E8QWN0aW9uPihcInNhcC5mZS5tYWNyb3MuY2hhcnQuQWN0aW9uXCIpKSB7XG5cdFx0XHRcdGN1c3RvbUFjdGlvbnNbYWN0aW9uLmtleV0gPSBnZXRBY3Rpb25Qcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdGFjdGlvbi5rZXksXG5cdFx0XHRcdFx0YWN0aW9uLnRleHQsXG5cdFx0XHRcdFx0YWN0aW9uLnByZXNzLFxuXHRcdFx0XHRcdCEhYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uLFxuXHRcdFx0XHRcdGFjdGlvbi5lbmFibGVkID09PSBudWxsIHx8IGFjdGlvbi5lbmFibGVkID09IHVuZGVmaW5lZCA/IHRydWUgOiBhY3Rpb24uZW5hYmxlZCxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRwbGFjZW1lbnQ6IGFjdGlvbi5wbGFjZW1lbnQsXG5cdFx0XHRcdFx0XHRhbmNob3I6IGFjdGlvbi5hbmNob3Jcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRhY3Rpb24uZ3JvdXAsXG5cdFx0XHRcdFx0YWN0aW9uLm92ZXJmbG93R3JvdXAsXG5cdFx0XHRcdFx0YWN0aW9uLnByaW9yaXR5XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0aWYgKGNoYXJ0QmxvY2suYWN0aW9uT3ZlcmZsb3dHcm91cHMpIHtcblx0XHRPYmplY3QudmFsdWVzKGNoYXJ0QmxvY2suYWN0aW9uT3ZlcmZsb3dHcm91cHMpPy5mb3JFYWNoKChvdmVyZmxvd0dyb3VwKSA9PiB7XG5cdFx0XHRhY3Rpb25PdmVyZmxvd0dyb3Vwc1tvdmVyZmxvd0dyb3VwLm92ZXJmbG93R3JvdXAudG9TdHJpbmcoKV0gPSB7IHNob3dTZXBhcmF0b3I6IG92ZXJmbG93R3JvdXAuc2hvd1NlcGFyYXRvciA/PyBmYWxzZSB9O1xuXHRcdH0pO1xuXHR9XG5cdGlmICh2aXN1YWxpemF0aW9uUGF0aCAmJiBjaGFydEJsb2NrLmFjdGlvbnMpIHtcblx0XHRleHRyYVBhcmFtc1t2aXN1YWxpemF0aW9uUGF0aF0gPSB7XG5cdFx0XHRhY3Rpb25zOiBjdXN0b21BY3Rpb25zLFxuXHRcdFx0b3ZlcmZsb3dHcm91cHM6IGFjdGlvbk92ZXJmbG93R3JvdXBzXG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiBleHRyYVBhcmFtcztcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uUHJvcGVydGllcyhcblx0a2V5OiBzdHJpbmcsXG5cdHRleHQ6IHN0cmluZyxcblx0cHJlc3M6IHN0cmluZyB8IG51bGwsXG5cdHJlcXVpcmVzU2VsZWN0aW9uOiBib29sZWFuLFxuXHRlbmFibGVkOiBib29sZWFuLFxuXHRwb3NpdGlvbj86IG9iamVjdCxcblx0bWVudT86IHN0cmluZ1tdLFxuXHRncm91cD86IG51bWJlcixcblx0b3ZlcmZsb3dHcm91cD86IG51bWJlcixcblx0cHJpb3JpdHk/OiBPdmVyZmxvd1Rvb2xiYXJQcmlvcml0eVxuKTogQWN0aW9uUHJvcGVydGllcyB7XG5cdGNvbnN0IGFjdGlvblByb3BlcnRpZXM6IEFjdGlvblByb3BlcnRpZXMgPSB7XG5cdFx0a2V5LFxuXHRcdHRleHQsXG5cdFx0X19ub1dyYXA6IHRydWUsXG5cdFx0cHJlc3MsXG5cdFx0cmVxdWlyZXNTZWxlY3Rpb24sXG5cdFx0ZW5hYmxlZCxcblx0XHRncm91cCxcblx0XHRvdmVyZmxvd0dyb3VwXG5cdH07XG5cblx0aWYgKHBvc2l0aW9uKSB7XG5cdFx0YWN0aW9uUHJvcGVydGllcy5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuXHR9XG5cdGlmIChtZW51KSB7XG5cdFx0YWN0aW9uUHJvcGVydGllcy5tZW51ID0gbWVudTtcblx0fVxuXHRpZiAocHJpb3JpdHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdGFjdGlvblByb3BlcnRpZXMucHJpb3JpdHkgPSBwcmlvcml0eTtcblx0fVxuXG5cdHJldHVybiBhY3Rpb25Qcm9wZXJ0aWVzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCaW5kaW5nQ29udGV4dChkYXRhOiBvYmplY3QgfCBCYXNlQWN0aW9uW10gfCBDdXN0b21BY3Rpb24pOiBDb250ZXh0IHtcblx0Y29uc3QgY29udGV4dFBhdGggPSBgLyR7dWlkKCl9YDtcblx0Y29uc3QgYWN0aW9uc01vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRhY3Rpb25zTW9kZWwuc2V0UHJvcGVydHkoY29udGV4dFBhdGgsIGRhdGEpO1xuXHRyZXR1cm4gYWN0aW9uc01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGNvbnRleHRQYXRoKSE7XG59XG5cbmZ1bmN0aW9uIGdldENoYXJ0TWVhc3VyZXMoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IENvbnRleHQge1xuXHRjb25zdCBjaGFydEFubm90YXRpb25QYXRoID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uYW5ub3RhdGlvblBhdGguc3BsaXQoXCIvXCIpO1xuXHQvLyB0aGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgZ2V0QWJzb2x1dGVQYXRoIGluIGNvbnZlcnRlckNvbnRleHQgcmV0dXJucyBcIi9TYWxlc09yZGVyTWFuYWdlL19JdGVtL19JdGVtL0Bjb20uc2FwLnZvY2FidWxhcmllcy52MS5DaGFydFwiIGFzIGFubm90YXRpb25QYXRoXG5cdGNvbnN0IGFubm90YXRpb25QYXRoID0gY2hhcnRBbm5vdGF0aW9uUGF0aFxuXHRcdC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW06IHN0cmluZywgcG9zOiBudW1iZXIpOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBjaGFydEFubm90YXRpb25QYXRoLmluZGV4T2YoaXRlbSkgPT0gcG9zO1xuXHRcdH0pXG5cdFx0LnRvU3RyaW5nKClcblx0XHQucmVwbGFjZUFsbChcIixcIiwgXCIvXCIpO1xuXHRjb25zdCBvQ2hhcnQgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8Q2hhcnRUeXBlPihcblx0XHRjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYW5ub3RhdGlvblBhdGgpISxcblx0XHRjaGFydEJsb2NrLl9jb250ZXh0XG5cdCkudGFyZ2V0T2JqZWN0O1xuXHRsZXQgbWVhc3VyZXM6IE1lYXN1cmVUeXBlW10gPSBbXTtcblx0Y29uc3QgYW5ub1BhdGggPSBjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQuZ2V0UGF0aCgpO1xuXHRjb25zdCBjaGFydE1lYXN1cmVzID0gb0NoYXJ0Py5NZWFzdXJlcyA/IG9DaGFydC5NZWFzdXJlcyA6IFtdO1xuXHRjb25zdCBjaGFydER5bmFtaWNNZWFzdXJlcyA9IG9DaGFydD8uRHluYW1pY01lYXN1cmVzID8gb0NoYXJ0LkR5bmFtaWNNZWFzdXJlcyA6IFtdO1xuXHRjb25zdCBlbnRpdHlTZXRQYXRoID0gYW5ub1BhdGgucmVwbGFjZSgvQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLihDaGFydHxQcmVzZW50YXRpb25WYXJpYW50fFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpLiovLCBcIlwiKTtcblx0Y29uc3QgdHJhbnNBZ2dyZWdhdGlvbnMgPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi50cmFuc0FnZyBhcyBSZWNvcmQ8c3RyaW5nLCBNZWFzdXJlVHlwZT47XG5cdGNvbnN0IGN1c3RvbUFnZ3JlZ2F0aW9ucyA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmN1c3RvbUFnZyBhcyBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cblx0Ly8gaW50aW1hdGUgdGhlIHVzZXIgaWYgdGhlcmUgaXMgQWdncmVnYXRlUHJvcGVydHkgY29uZmlndXJlZCB3aXRoIG5vIER5bmFtaWNNZWFzdXJlcywgYnV0IHRoZXJlIGFyZSBtZWFzdXJlcyB3aXRoIEFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzXG5cdGlmIChcblx0XHRjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5jb250YWluc0FnZ3JlZ2F0ZWRQcm9wZXJ0eSAmJlxuXHRcdCFjaGFydER5bmFtaWNNZWFzdXJlcyAmJlxuXHRcdGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmNvbnRhaW5zVHJhbnNBZ2dJbk1lYXN1cmVzXG5cdCkge1xuXHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XCJUaGUgdHJhbnNmb3JtYXRpb25hbCBhZ2dyZWdhdGUgbWVhc3VyZXMgYXJlIGNvbmZpZ3VyZWQgYXMgQ2hhcnQuTWVhc3VyZXMgYnV0IHNob3VsZCBiZSBjb25maWd1cmVkIGFzIENoYXJ0LkR5bmFtaWNNZWFzdXJlcyBpbnN0ZWFkLiBQbGVhc2UgY2hlY2sgdGhlIFNBUCBIZWxwIGRvY3VtZW50YXRpb24gYW5kIGNvcnJlY3QgdGhlIGNvbmZpZ3VyYXRpb24gYWNjb3JkaW5nbHkuXCJcblx0XHQpO1xuXHR9XG5cdGNvbnN0IGlzQ3VzdG9tQWdncmVnYXRlSXNNZWFzdXJlID0gY2hhcnRNZWFzdXJlcy5zb21lKChvQ2hhcnRNZWFzdXJlOiBNZWFzdXJlVHlwZSkgPT4ge1xuXHRcdGNvbnN0IG9DdXN0b21BZ2dNZWFzdXJlID0gZ2V0Q3VzdG9tQWdnTWVhc3VyZShjdXN0b21BZ2dyZWdhdGlvbnMsIG9DaGFydE1lYXN1cmUpO1xuXHRcdHJldHVybiAhIW9DdXN0b21BZ2dNZWFzdXJlO1xuXHR9KTtcblx0aWYgKGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmNvbnRhaW5zQWdncmVnYXRlZFByb3BlcnR5ICYmICFjaGFydER5bmFtaWNNZWFzdXJlcz8ubGVuZ3RoICYmICFpc0N1c3RvbUFnZ3JlZ2F0ZUlzTWVhc3VyZSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSBjb25maWd1cmUgRHluYW1pY01lYXN1cmVzIGZvciB0aGUgY2hhcnRcIik7XG5cdH1cblx0aWYgKGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmNvbnRhaW5zQWdncmVnYXRlZFByb3BlcnR5ICYmIG9DaGFydCkge1xuXHRcdGZvciAoY29uc3QgZHluYW1pY01lYXN1cmUgb2YgY2hhcnREeW5hbWljTWVhc3VyZXMpIHtcblx0XHRcdG1lYXN1cmVzID0gZ2V0RHluYW1pY01lYXN1cmVzKG1lYXN1cmVzLCBkeW5hbWljTWVhc3VyZSwgZW50aXR5U2V0UGF0aCwgb0NoYXJ0LCBjaGFydEJsb2NrKTtcblx0XHR9XG5cdH1cblx0Zm9yIChjb25zdCBjaGFydE1lYXN1cmUgb2YgY2hhcnRNZWFzdXJlcykge1xuXHRcdGNvbnN0IGtleSA9IGNoYXJ0TWVhc3VyZS52YWx1ZTtcblx0XHRjb25zdCBjdXN0b21BZ2dNZWFzdXJlID0gZ2V0Q3VzdG9tQWdnTWVhc3VyZShjdXN0b21BZ2dyZWdhdGlvbnMsIGNoYXJ0TWVhc3VyZSk7XG5cdFx0Y29uc3QgbWVhc3VyZVR5cGU6IE1lYXN1cmVUeXBlID0ge307XG5cdFx0aWYgKGN1c3RvbUFnZ01lYXN1cmUpIHtcblx0XHRcdG1lYXN1cmVzID0gc2V0Q3VzdG9tQWdnTWVhc3VyZShtZWFzdXJlcywgbWVhc3VyZVR5cGUsIGN1c3RvbUFnZ01lYXN1cmUsIGtleSk7XG5cdFx0XHQvL2lmIHRoZXJlIGlzIG5laXRoZXIgYWdncmVnYXRlZFByb3BlcnR5IG5vciBtZWFzdXJlcyBwb2ludGluZyB0byBjdXN0b21BZ2dyZWdhdGVzLCBidXQgd2UgaGF2ZSBub3JtYWwgbWVhc3VyZXMuIE5vdyBjaGVjayBpZiB0aGVzZSBtZWFzdXJlcyBhcmUgcGFydCBvZiBBZ2dyZWdhdGVkUHJvcGVydGllcyBPYmpcblx0XHR9IGVsc2UgaWYgKCFjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5jb250YWluc0FnZ3JlZ2F0ZWRQcm9wZXJ0eSAmJiB0cmFuc0FnZ3JlZ2F0aW9uc1trZXldKSB7XG5cdFx0XHRtZWFzdXJlcyA9IHNldFRyYW5zQWdnTWVhc3VyZShtZWFzdXJlcywgbWVhc3VyZVR5cGUsIHRyYW5zQWdncmVnYXRpb25zLCBrZXkpO1xuXHRcdH1cblx0XHRzZXRDaGFydE1lYXN1cmVBdHRyaWJ1dGVzKGNoYXJ0QmxvY2suX2NoYXJ0Lk1lYXN1cmVBdHRyaWJ1dGVzLCBlbnRpdHlTZXRQYXRoLCBtZWFzdXJlVHlwZSwgY2hhcnRCbG9jayk7XG5cdH1cblx0Y29uc3QgbWVhc3VyZXNNb2RlbDogSlNPTk1vZGVsID0gbmV3IEpTT05Nb2RlbChtZWFzdXJlcyk7XG5cdChtZWFzdXJlc01vZGVsIGFzIHsgJCR2YWx1ZUFzUHJvbWlzZT86IGJvb2xlYW4gfSkuJCR2YWx1ZUFzUHJvbWlzZSA9IHRydWU7XG5cdHJldHVybiBtZWFzdXJlc01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcbn1cblxuZnVuY3Rpb24gc2V0Q3VzdG9tQWdnTWVhc3VyZShtZWFzdXJlczogTWVhc3VyZVR5cGVbXSwgbWVhc3VyZTogTWVhc3VyZVR5cGUsIGN1c3RvbUFnZ01lYXN1cmU6IE1lYXN1cmVUeXBlLCBrZXk6IHN0cmluZyk6IE1lYXN1cmVUeXBlW10ge1xuXHRpZiAoa2V5LmluY2x1ZGVzKFwiL1wiKSkge1xuXHRcdExvZy5lcnJvcihgJGV4cGFuZCBpcyBub3QgeWV0IHN1cHBvcnRlZC4gTWVhc3VyZTogJHtrZXl9IGZyb20gYW4gYXNzb2NpYXRpb24gY2Fubm90IGJlIHVzZWRgKTtcblx0fVxuXHRtZWFzdXJlLmtleSA9IGN1c3RvbUFnZ01lYXN1cmUudmFsdWU7XG5cdG1lYXN1cmUucm9sZSA9IFwiYXhpczFcIjtcblx0bWVhc3VyZS5sYWJlbCA9IGN1c3RvbUFnZ01lYXN1cmUubGFiZWw7XG5cdG1lYXN1cmUucHJvcGVydHlQYXRoID0gY3VzdG9tQWdnTWVhc3VyZS52YWx1ZTtcblx0bWVhc3VyZXMucHVzaChtZWFzdXJlKTtcblx0cmV0dXJuIG1lYXN1cmVzO1xufVxuXG5mdW5jdGlvbiBzZXRUcmFuc0FnZ01lYXN1cmUoXG5cdG1lYXN1cmVzOiBNZWFzdXJlVHlwZVtdLFxuXHRtZWFzdXJlOiBNZWFzdXJlVHlwZSxcblx0dHJhbnNBZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1lYXN1cmVUeXBlPixcblx0a2V5OiBzdHJpbmdcbik6IE1lYXN1cmVUeXBlW10ge1xuXHRjb25zdCB0cmFuc0FnZ01lYXN1cmUgPSB0cmFuc0FnZ3JlZ2F0aW9uc1trZXldO1xuXHRtZWFzdXJlLmtleSA9IHRyYW5zQWdnTWVhc3VyZS5uYW1lO1xuXHRtZWFzdXJlLnJvbGUgPSBcImF4aXMxXCI7XG5cdG1lYXN1cmUucHJvcGVydHlQYXRoID0ga2V5O1xuXHRtZWFzdXJlLmFnZ3JlZ2F0aW9uTWV0aG9kID0gdHJhbnNBZ2dNZWFzdXJlLmFnZ3JlZ2F0aW9uTWV0aG9kO1xuXHRtZWFzdXJlLmxhYmVsID0gdHJhbnNBZ2dNZWFzdXJlLmxhYmVsIHx8IG1lYXN1cmUubGFiZWw7XG5cdG1lYXN1cmVzLnB1c2gobWVhc3VyZSk7XG5cdHJldHVybiBtZWFzdXJlcztcbn1cblxuZnVuY3Rpb24gZ2V0RHluYW1pY01lYXN1cmVzKFxuXHRtZWFzdXJlczogTWVhc3VyZVR5cGVbXSxcblx0Y2hhcnREeW5hbWljTWVhc3VyZTogTWVhc3VyZVR5cGUsXG5cdGVudGl0eVNldFBhdGg6IHN0cmluZyxcblx0Y2hhcnQ6IENoYXJ0VHlwZSxcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9ja1xuKTogTWVhc3VyZVR5cGVbXSB7XG5cdGNvbnN0IGtleSA9IGNoYXJ0RHluYW1pY01lYXN1cmUudmFsdWUgfHwgXCJcIjtcblx0Y29uc3QgYWdncmVnYXRlZFByb3BlcnR5ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPEFnZ3JlZ2F0ZWRQcm9wZXJ0eT4oXG5cdFx0Y2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGVudGl0eVNldFBhdGggKyBrZXkpIGFzIENvbnRleHQsXG5cdFx0Y2hhcnRCbG9jay5fY29udGV4dFxuXHQpLnRhcmdldE9iamVjdDtcblx0aWYgKGtleS5pbmNsdWRlcyhcIi9cIikpIHtcblx0XHRMb2cuZXJyb3IoYCRleHBhbmQgaXMgbm90IHlldCBzdXBwb3J0ZWQuIE1lYXN1cmU6ICR7a2V5fSBmcm9tIGFuIGFzc29jaWF0aW9uIGNhbm5vdCBiZSB1c2VkYCk7XG5cdFx0Ly8gY2hlY2sgaWYgdGhlIGFubm90YXRpb24gcGF0aCBpcyB3cm9uZ1xuXHR9IGVsc2UgaWYgKCFhZ2dyZWdhdGVkUHJvcGVydHkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYFBsZWFzZSBwcm92aWRlIHRoZSByaWdodCBBbm5vdGF0aW9uUGF0aCB0byB0aGUgRHluYW1pYyBNZWFzdXJlICR7Y2hhcnREeW5hbWljTWVhc3VyZS52YWx1ZX1gKTtcblx0XHQvLyBjaGVjayBpZiB0aGUgcGF0aCBzdGFydHMgd2l0aCBAXG5cdH0gZWxzZSBpZiAoY2hhcnREeW5hbWljTWVhc3VyZS52YWx1ZT8uc3RhcnRzV2l0aChgQCR7QW5hbHl0aWNzQW5ub3RhdGlvblRlcm1zLkFnZ3JlZ2F0ZWRQcm9wZXJ0eX1gKSA9PT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgUGxlYXNlIHByb3ZpZGUgdGhlIHJpZ2h0IEFubm90YXRpb25QYXRoIHRvIHRoZSBEeW5hbWljIE1lYXN1cmUgJHtjaGFydER5bmFtaWNNZWFzdXJlLnZhbHVlfWApO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGNoZWNrIGlmIEFnZ3JlZ2F0ZWRQcm9wZXJ0eSBpcyBkZWZpbmVkIGluIGdpdmVuIER5bmFtaWNNZWFzdXJlXG5cdFx0Y29uc3QgZHluYW1pY01lYXN1cmU6IE1lYXN1cmVUeXBlID0ge1xuXHRcdFx0a2V5OiBhZ2dyZWdhdGVkUHJvcGVydHkuTmFtZS50b1N0cmluZygpLFxuXHRcdFx0cm9sZTogXCJheGlzMVwiXG5cdFx0fTtcblx0XHRkeW5hbWljTWVhc3VyZS5wcm9wZXJ0eVBhdGggPSBhZ2dyZWdhdGVkUHJvcGVydHkuQWdncmVnYXRhYmxlUHJvcGVydHkudmFsdWU7XG5cdFx0ZHluYW1pY01lYXN1cmUuYWdncmVnYXRpb25NZXRob2QgPSBhZ2dyZWdhdGVkUHJvcGVydHkuQWdncmVnYXRpb25NZXRob2QudG9TdHJpbmcoKTtcblx0XHRkeW5hbWljTWVhc3VyZS5sYWJlbCA9XG5cdFx0XHRhZ2dyZWdhdGVkUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz9cblx0XHRcdGFnZ3JlZ2F0ZWRQcm9wZXJ0eS5BZ2dyZWdhdGFibGVQcm9wZXJ0eS4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSA/P1xuXHRcdFx0XCJcIjtcblx0XHRzZXRDaGFydE1lYXN1cmVBdHRyaWJ1dGVzKGNoYXJ0Lk1lYXN1cmVBdHRyaWJ1dGVzLCBlbnRpdHlTZXRQYXRoLCBkeW5hbWljTWVhc3VyZSwgY2hhcnRCbG9jayk7XG5cdFx0bWVhc3VyZXMucHVzaChkeW5hbWljTWVhc3VyZSk7XG5cdH1cblx0cmV0dXJuIG1lYXN1cmVzO1xufVxuXG5mdW5jdGlvbiBnZXRDdXN0b21BZ2dNZWFzdXJlKGN1c3RvbUFnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgTWVhc3VyZVR5cGUgfCB1bmRlZmluZWQ+LCBtZWFzdXJlOiBNZWFzdXJlVHlwZSk6IE1lYXN1cmVUeXBlIHwgbnVsbCB7XG5cdGlmIChtZWFzdXJlLnZhbHVlICYmIGN1c3RvbUFnZ3JlZ2F0aW9uc1ttZWFzdXJlLnZhbHVlXSkge1xuXHRcdG1lYXN1cmUubGFiZWwgPSBjdXN0b21BZ2dyZWdhdGlvbnNbbWVhc3VyZS52YWx1ZV0/LmxhYmVsO1xuXHRcdHJldHVybiBtZWFzdXJlO1xuXHR9XG5cdHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBzZXRDaGFydE1lYXN1cmVBdHRyaWJ1dGVzKFxuXHRtZWFzdXJlQXR0cmlidXRlczogQ2hhcnRNZWFzdXJlQXR0cmlidXRlVHlwZVtdLFxuXHRlbnRpdHlTZXRQYXRoOiBzdHJpbmcsXG5cdG1lYXN1cmU6IE1lYXN1cmVUeXBlLFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrXG4pOiB2b2lkIHtcblx0aWYgKG1lYXN1cmVBdHRyaWJ1dGVzPy5sZW5ndGgpIHtcblx0XHRmb3IgKGNvbnN0IG1lYXN1cmVBdHRyaWJ1dGUgb2YgbWVhc3VyZUF0dHJpYnV0ZXMpIHtcblx0XHRcdF9zZXRDaGFydE1lYXN1cmVBdHRyaWJ1dGUobWVhc3VyZUF0dHJpYnV0ZSwgZW50aXR5U2V0UGF0aCwgbWVhc3VyZSwgY2hhcnRCbG9jayk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIF9zZXRDaGFydE1lYXN1cmVBdHRyaWJ1dGUoXG5cdG1lYXN1cmVBdHRyaWJ1dGU6IENoYXJ0TWVhc3VyZUF0dHJpYnV0ZVR5cGUsXG5cdGVudGl0eVNldFBhdGg6IHN0cmluZyxcblx0bWVhc3VyZTogTWVhc3VyZVR5cGUsXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IHZvaWQge1xuXHRjb25zdCBwYXRoID0gbWVhc3VyZUF0dHJpYnV0ZS5EeW5hbWljTWVhc3VyZSA/IG1lYXN1cmVBdHRyaWJ1dGU/LkR5bmFtaWNNZWFzdXJlPy52YWx1ZSA6IG1lYXN1cmVBdHRyaWJ1dGU/Lk1lYXN1cmU/LnZhbHVlO1xuXHRjb25zdCBtZWFzdXJlQXR0cmlidXRlRGF0YVBvaW50ID0gbWVhc3VyZUF0dHJpYnV0ZS5EYXRhUG9pbnQgPyBtZWFzdXJlQXR0cmlidXRlPy5EYXRhUG9pbnQ/LnZhbHVlIDogbnVsbDtcblx0Y29uc3Qgcm9sZSA9IG1lYXN1cmVBdHRyaWJ1dGUuUm9sZTtcblx0Y29uc3QgZGF0YVBvaW50OiBEYXRhUG9pbnQgfCB1bmRlZmluZWQgPSBtZWFzdXJlQXR0cmlidXRlRGF0YVBvaW50XG5cdFx0PyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YVBvaW50Pihcblx0XHRcdFx0Y2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGVudGl0eVNldFBhdGggKyBtZWFzdXJlQXR0cmlidXRlRGF0YVBvaW50KSBhcyBDb250ZXh0LFxuXHRcdFx0XHRjaGFydEJsb2NrLl9jb250ZXh0XG5cdFx0ICApLnRhcmdldE9iamVjdFxuXHRcdDogdW5kZWZpbmVkO1xuXHRpZiAobWVhc3VyZS5rZXkgPT09IHBhdGgpIHtcblx0XHRzZXRNZWFzdXJlUm9sZShtZWFzdXJlLCByb2xlIGFzIHVua25vd24gYXMgTWV0YU1vZGVsRW51bTxDaGFydE1lYXN1cmVSb2xlVHlwZT4pO1xuXHRcdC8vc3RpbGwgdG8gYWRkIGRhdGEgcG9pbnQsIGJ1dCBVSTUgQ2hhcnQgQVBJIGlzIG1pc3Npbmdcblx0XHRzZXRNZWFzdXJlRGF0YVBvaW50KG1lYXN1cmUsIGRhdGFQb2ludCk7XG5cdH1cbn1cblxuLyoqXG4gKiBGb3JtYXQgdGhlIGRhdGEgcG9pbnQgYXMgYSBKU09OIG9iamVjdC5cbiAqIEBwYXJhbSBvRGF0YVBvaW50QW5ub1xuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBqc29uIG9iamVjdFxuICovXG5mdW5jdGlvbiBjcmVhdGVEYXRhUG9pbnRQcm9wZXJ0eShvRGF0YVBvaW50QW5ubzogRGF0YVBvaW50KToge1xuXHR0YXJnZXRWYWx1ZT86IHN0cmluZztcblx0Zm9yZUNhc3RWYWx1ZT86IHN0cmluZztcblx0Y3JpdGljYWxpdHk/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn0ge1xuXHRjb25zdCBvRGF0YVBvaW50OiB7IHRhcmdldFZhbHVlPzogc3RyaW5nOyBmb3JlQ2FzdFZhbHVlPzogc3RyaW5nOyBjcml0aWNhbGl0eT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0gPSB7fTtcblxuXHRpZiAob0RhdGFQb2ludEFubm8uVGFyZ2V0VmFsdWUpIHtcblx0XHRvRGF0YVBvaW50LnRhcmdldFZhbHVlID0gb0RhdGFQb2ludEFubm8uVGFyZ2V0VmFsdWUuJFBhdGg7XG5cdH1cblxuXHRpZiAob0RhdGFQb2ludEFubm8uRm9yZWNhc3RWYWx1ZSkge1xuXHRcdG9EYXRhUG9pbnQuZm9yZUNhc3RWYWx1ZSA9IG9EYXRhUG9pbnRBbm5vLkZvcmVjYXN0VmFsdWUuJFBhdGg7XG5cdH1cblxuXHRsZXQgb0NyaXRpY2FsaXR5ID0gbnVsbDtcblx0aWYgKG9EYXRhUG9pbnRBbm5vLkNyaXRpY2FsaXR5KSB7XG5cdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9EYXRhUG9pbnRBbm5vLkNyaXRpY2FsaXR5KSAmJiBvRGF0YVBvaW50QW5uby5Dcml0aWNhbGl0eS5wYXRoKSB7XG5cdFx0XHQvL3dpbGwgYmUgYW4gYWdncmVnYXRlZCBwcm9wZXJ0eSBvciBjdXN0b20gYWdncmVnYXRlXG5cdFx0XHRvQ3JpdGljYWxpdHkgPSB7XG5cdFx0XHRcdENhbGN1bGF0ZWQ6IG9EYXRhUG9pbnRBbm5vLkNyaXRpY2FsaXR5LnBhdGhcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9Dcml0aWNhbGl0eSA9IHtcblx0XHRcdFx0U3RhdGljOiAob0RhdGFQb2ludEFubm8uQ3JpdGljYWxpdHkgYXMgdW5rbm93biBhcyBNZXRhTW9kZWxFbnVtPENyaXRpY2FsaXR5VHlwZT4pLiRFbnVtTWVtYmVyLnJlcGxhY2UoXG5cdFx0XHRcdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eVR5cGUvXCIsXG5cdFx0XHRcdFx0XCJcIlxuXHRcdFx0XHQpXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIGlmIChvRGF0YVBvaW50QW5uby5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uKSB7XG5cdFx0Y29uc3Qgb1RocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyBBZ2dyZWdhdGlvbkxldmVscz86IHVua25vd25bXSB9ID0ge307XG5cdFx0Y29uc3QgYkNvbnN0YW50ID0gYnVpbGRUaHJlc2hvbGRzKG9UaHJlc2hvbGRzLCBvRGF0YVBvaW50QW5uby5Dcml0aWNhbGl0eUNhbGN1bGF0aW9uKTtcblxuXHRcdGlmIChiQ29uc3RhbnQpIHtcblx0XHRcdG9Dcml0aWNhbGl0eSA9IHtcblx0XHRcdFx0Q29uc3RhbnRUaHJlc2hvbGRzOiBvVGhyZXNob2xkc1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0NyaXRpY2FsaXR5ID0ge1xuXHRcdFx0XHREeW5hbWljVGhyZXNob2xkczogb1RocmVzaG9sZHNcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9Dcml0aWNhbGl0eSkge1xuXHRcdG9EYXRhUG9pbnQuY3JpdGljYWxpdHkgPSBvQ3JpdGljYWxpdHk7XG5cdH1cblxuXHRyZXR1cm4gb0RhdGFQb2ludDtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdGhyZXNob2xkcyBhcmUgZHluYW1pYyBvciBjb25zdGFudC5cbiAqIEBwYXJhbSB0aHJlc2hvbGRzIFRoZSB0aHJlc2hvbGQgc2tlbGV0b25cbiAqIEBwYXJhbSBjcml0aWNhbGl0eUNhbGN1bGF0aW9uIFRoZSBVSS5EYXRhUG9pbnQuQ3JpdGljYWxpdHlDYWxjdWxhdGlvbiBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHRocmVzaG9sZCBzaG91bGQgYmUgc3VwcGxpZWQgYXMgQ29uc3RhbnRUaHJlc2hvbGRzLCA8Y29kZT5mYWxzZTwvY29kZT4gaWYgdGhlIHRocmVzaG9sZCBzaG91bGRcbiAqIGJlIHN1cHBsaWVkIGFzIER5bmFtaWNUaHJlc2hvbGRzXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBidWlsZFRocmVzaG9sZHMoXG5cdHRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyBBZ2dyZWdhdGlvbkxldmVscz86IHVua25vd25bXSB9LFxuXHRjcml0aWNhbGl0eUNhbGN1bGF0aW9uOiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZVxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IGtleXMgPSBbXG5cdFx0XCJBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZVwiLFxuXHRcdFwiQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlXCIsXG5cdFx0XCJUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlXCIsXG5cdFx0XCJUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZVwiLFxuXHRcdFwiRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZVwiLFxuXHRcdFwiRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVcIlxuXHRdO1xuXHR0aHJlc2hvbGRzLkltcHJvdmVtZW50RGlyZWN0aW9uID0gKFxuXHRcdGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24uSW1wcm92ZW1lbnREaXJlY3Rpb24gYXMgdW5rbm93biBhcyBNZXRhTW9kZWxFbnVtPEltcHJvdmVtZW50RGlyZWN0aW9uVHlwZT5cblx0KT8uJEVudW1NZW1iZXIucmVwbGFjZShcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9cIiwgXCJcIik7XG5cblx0Y29uc3QgZHluYW1pY1RocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyB1c2VkTWVhc3VyZXM6IHVua25vd25bXSB9ID0ge1xuXHRcdG9uZVN1cHBsaWVkOiBmYWxzZSxcblx0XHR1c2VkTWVhc3VyZXM6IFtdXG5cdFx0Ly8gY29tYmluYXRpb24gdG8gY2hlY2sgd2hldGhlciBhdCBsZWFzdCBvbmUgaXMgc3VwcGxpZWRcblx0fTtcblx0Y29uc3QgY29uc3RhbnRUaHJlc2hvbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcblx0XHRvbmVTdXBwbGllZDogZmFsc2Vcblx0XHQvLyBjb21iaW5hdGlvbiB0byBjaGVjayB3aGV0aGVyIGF0IGxlYXN0IG9uZSBpcyBzdXBwbGllZFxuXHR9O1xuXG5cdGluaXRpYWxpc2VUaHJlc2hvbGRzKGtleXMsIGR5bmFtaWNUaHJlc2hvbGRzLCBjb25zdGFudFRocmVzaG9sZHMsIGNyaXRpY2FsaXR5Q2FsY3VsYXRpb24pO1xuXHRwcm9jZXNzVGhyZXNob2xkcyhrZXlzLCB0aHJlc2hvbGRzLCBkeW5hbWljVGhyZXNob2xkcywgY29uc3RhbnRUaHJlc2hvbGRzLCBjcml0aWNhbGl0eUNhbGN1bGF0aW9uKTtcblxuXHRyZXR1cm4gIWR5bmFtaWNUaHJlc2hvbGRzLm9uZVN1cHBsaWVkO1xufVxuXG5mdW5jdGlvbiBpbml0aWFsaXNlVGhyZXNob2xkcyhcblx0a2V5czogc3RyaW5nW10sXG5cdGR5bmFtaWNUaHJlc2hvbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIHsgdXNlZE1lYXN1cmVzOiB1bmtub3duW10gfSxcblx0Y29uc3RhbnRUaHJlc2hvbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvbjogQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGVcbik6IHZvaWQge1xuXHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0ZHluYW1pY1RocmVzaG9sZHNba2V5XSA9IGNyaXRpY2FsaXR5Q2FsY3VsYXRpb25ba2V5IGFzIGtleW9mIENyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXVxuXHRcdFx0PyBjcml0aWNhbGl0eUNhbGN1bGF0aW9uW2tleSBhcyBrZXlvZiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZV0uJFBhdGhcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGR5bmFtaWNUaHJlc2hvbGRzLm9uZVN1cHBsaWVkID0gZHluYW1pY1RocmVzaG9sZHMub25lU3VwcGxpZWQgfHwgZHluYW1pY1RocmVzaG9sZHNba2V5XTtcblxuXHRcdGlmICghZHluYW1pY1RocmVzaG9sZHMub25lU3VwcGxpZWQpIHtcblx0XHRcdC8vIG9ubHkgY29uc2lkZXIgaW4gY2FzZSBubyBkeW5hbWljIHRocmVzaG9sZCBpcyBzdXBwbGllZFxuXHRcdFx0Y29uc3RhbnRUaHJlc2hvbGRzW2tleV0gPSBjcml0aWNhbGl0eUNhbGN1bGF0aW9uW2tleSBhcyBrZXlvZiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZV07XG5cdFx0XHRjb25zdGFudFRocmVzaG9sZHMub25lU3VwcGxpZWQgPSBjb25zdGFudFRocmVzaG9sZHMub25lU3VwcGxpZWQgfHwgY29uc3RhbnRUaHJlc2hvbGRzW2tleV07XG5cdFx0fSBlbHNlIGlmIChkeW5hbWljVGhyZXNob2xkc1trZXldKSB7XG5cdFx0XHRkeW5hbWljVGhyZXNob2xkcy51c2VkTWVhc3VyZXMucHVzaChkeW5hbWljVGhyZXNob2xkc1trZXkgYXMga2V5b2YgQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGVdKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1RocmVzaG9sZHMoXG5cdGtleXM6IHN0cmluZ1tdLFxuXHR0aHJlc2hvbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIHsgQWdncmVnYXRpb25MZXZlbHM/OiB1bmtub3duW10gfSxcblx0ZHluYW1pY1RocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyB1c2VkTWVhc3VyZXM6IHVua25vd25bXSB9LFxuXHRjb25zdGFudFRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRjcml0aWNhbGl0eUNhbGN1bGF0aW9uOiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZVxuKTogdm9pZCB7XG5cdC8vIGR5bmFtaWMgZGVmaW5pdGlvbiBzaGFsbCBvdmVycnVsZSBjb25zdGFudCBkZWZpbml0aW9uXG5cdGlmIChkeW5hbWljVGhyZXNob2xkcy5vbmVTdXBwbGllZCkge1xuXHRcdGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcblx0XHRcdGlmIChkeW5hbWljVGhyZXNob2xkc1trZXldKSB7XG5cdFx0XHRcdHRocmVzaG9sZHNba2V5XSA9IGR5bmFtaWNUaHJlc2hvbGRzW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRocmVzaG9sZHMudXNlZE1lYXN1cmVzID0gZHluYW1pY1RocmVzaG9sZHMudXNlZE1lYXN1cmVzO1xuXHR9IGVsc2Uge1xuXHRcdHRocmVzaG9sZHMuQWdncmVnYXRpb25MZXZlbHMgPSBbXTtcblx0XHRwcm9jZXNzQWdncmVnYXRpb25MZXZlbEZvclRocmVzaG9sZHMoa2V5cywgdGhyZXNob2xkcywgY29uc3RhbnRUaHJlc2hvbGRzLCBjcml0aWNhbGl0eUNhbGN1bGF0aW9uKTtcblx0fVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzQWdncmVnYXRpb25MZXZlbEZvclRocmVzaG9sZHMoXG5cdGtleXM6IHN0cmluZ1tdLFxuXHR0aHJlc2hvbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIHsgQWdncmVnYXRpb25MZXZlbHM/OiB1bmtub3duW10gfSxcblx0Y29uc3RhbnRUaHJlc2hvbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0Y3JpdGljYWxpdHlDYWxjdWxhdGlvbjogQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGVcbik6IHZvaWQge1xuXHRsZXQgb0FnZ3JlZ2F0aW9uTGV2ZWw6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdC8vIGNoZWNrIGlmIGF0IGxlYXN0IG9uZSBzdGF0aWMgdmFsdWUgaXMgc3VwcGxpZWRcblx0aWYgKGNvbnN0YW50VGhyZXNob2xkcy5vbmVTdXBwbGllZCkge1xuXHRcdC8vIGFkZCBvbmUgZW50cnkgaW4gdGhlIGFnZ3JlZ2F0aW9uIGxldmVsXG5cdFx0b0FnZ3JlZ2F0aW9uTGV2ZWwgPSB7XG5cdFx0XHRWaXNpYmxlRGltZW5zaW9uczogbnVsbFxuXHRcdH07XG5cblx0XHRmb3IgKGNvbnN0IHNLZXkgb2Yga2V5cykge1xuXHRcdFx0aWYgKGNvbnN0YW50VGhyZXNob2xkc1tzS2V5XSkge1xuXHRcdFx0XHRvQWdncmVnYXRpb25MZXZlbFtzS2V5XSA9IGNvbnN0YW50VGhyZXNob2xkc1tzS2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aHJlc2hvbGRzLkFnZ3JlZ2F0aW9uTGV2ZWxzPy5wdXNoKG9BZ2dyZWdhdGlvbkxldmVsKTtcblx0fVxuXG5cdHByb2Nlc3NBZ2dyZWdhdGlvbkxldmVsc0ZvckNvbnN0YW50VGhyZXNob2xkcyhrZXlzLCB0aHJlc2hvbGRzLCBjcml0aWNhbGl0eUNhbGN1bGF0aW9uLCBvQWdncmVnYXRpb25MZXZlbCk7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NBZ2dyZWdhdGlvbkxldmVsc0ZvckNvbnN0YW50VGhyZXNob2xkcyhcblx0a2V5czogc3RyaW5nW10sXG5cdHRocmVzaG9sZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyBBZ2dyZWdhdGlvbkxldmVscz86IHVua25vd25bXSB9LFxuXHRjcml0aWNhbGl0eUNhbGN1bGF0aW9uOiBDcml0aWNhbGl0eUNhbGN1bGF0aW9uVHlwZSxcblx0YWdncmVnYXRpb25MZXZlbDogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IHZvaWQge1xuXHRpZiAoY3JpdGljYWxpdHlDYWxjdWxhdGlvbi5Db25zdGFudFRocmVzaG9sZHMgJiYgY3JpdGljYWxpdHlDYWxjdWxhdGlvbi5Db25zdGFudFRocmVzaG9sZHMubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgYWdncmVnYXRpb25MZXZlbEluZm8gb2YgY3JpdGljYWxpdHlDYWxjdWxhdGlvbi5Db25zdGFudFRocmVzaG9sZHMpIHtcblx0XHRcdGNvbnN0IHZpc2libGVEaW1lbnNpb25zOiBzdHJpbmdbXSB8IG51bGwgPSBhZ2dyZWdhdGlvbkxldmVsSW5mby5BZ2dyZWdhdGlvbkxldmVsID8gW10gOiBudWxsO1xuXG5cdFx0XHRpZiAodmlzaWJsZURpbWVuc2lvbnMgJiYgYWdncmVnYXRpb25MZXZlbEluZm8uQWdncmVnYXRpb25MZXZlbCAmJiBhZ2dyZWdhdGlvbkxldmVsSW5mby5BZ2dyZWdhdGlvbkxldmVsLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Zm9yIChjb25zdCBwcm9wZXJ0eVBhdGggb2YgYWdncmVnYXRpb25MZXZlbEluZm8uQWdncmVnYXRpb25MZXZlbCkge1xuXHRcdFx0XHRcdHZpc2libGVEaW1lbnNpb25zLnB1c2goKHByb3BlcnR5UGF0aCBhcyB1bmtub3duIGFzIEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD4pLiRQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGFnZ3JlZ2F0aW9uTGV2ZWwgPSB7XG5cdFx0XHRcdFZpc2libGVEaW1lbnNpb25zOiB2aXNpYmxlRGltZW5zaW9uc1xuXHRcdFx0fTtcblxuXHRcdFx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGFnZ3JlZ2F0aW9uTGV2ZWxJbmZvW2tleSBhcyB1bmtub3duIGFzIGtleW9mIExldmVsVGhyZXNob2xkc1R5cGVdO1xuXHRcdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0XHRhZ2dyZWdhdGlvbkxldmVsW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aHJlc2hvbGRzLkFnZ3JlZ2F0aW9uTGV2ZWxzPy5wdXNoKGFnZ3JlZ2F0aW9uTGV2ZWwpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBzZXRNZWFzdXJlRGF0YVBvaW50KG1lYXN1cmU6IE1lYXN1cmVUeXBlLCBkYXRhUG9pbnQ6IERhdGFQb2ludCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRpZiAoZGF0YVBvaW50ICYmIGRhdGFQb2ludC5WYWx1ZS4kUGF0aCA9PSBtZWFzdXJlLmtleSkge1xuXHRcdG1lYXN1cmUuZGF0YVBvaW50ID0gQ2hhcnRIZWxwZXIuZm9ybWF0SlNPTlRvU3RyaW5nKGNyZWF0ZURhdGFQb2ludFByb3BlcnR5KGRhdGFQb2ludCkpIHx8IFwiXCI7XG5cdH1cbn1cblxuZnVuY3Rpb24gc2V0TWVhc3VyZVJvbGUobWVhc3VyZTogTWVhc3VyZVR5cGUsIHJvbGU6IE1ldGFNb2RlbEVudW08Q2hhcnRNZWFzdXJlUm9sZVR5cGU+IHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdGlmIChyb2xlICE9IG51bGwpIHtcblx0XHRjb25zdCBpbmRleCA9IHJvbGUuJEVudW1NZW1iZXI7XG5cdFx0bWVhc3VyZS5yb2xlID0gbWVhc3VyZVJvbGVbaW5kZXhdO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldERlcGVuZGVudHMoY2hhcnRCbG9jazogQ2hhcnRCbG9jaywgY2hhcnRDb250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHwgc3RyaW5nW10ge1xuXHRpZiAoY2hhcnRCbG9jay5fY29tbWFuZEFjdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBjaGFydEJsb2NrLl9jb21tYW5kQWN0aW9ucy5tYXAoKGNvbW1hbmRBY3Rpb246IENvbW1hbmRBY3Rpb24pID0+IHtcblx0XHRcdHJldHVybiBnZXRBY3Rpb25Db21tYW5kKGNvbW1hbmRBY3Rpb24sIGNoYXJ0Q29udGV4dCwgY2hhcnRCbG9jayk7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIFwiXCI7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBwZXJzb25hbGl6YXRpb24gU3BlY2lmaWVzIHRoZSBjaGFydCBwZXJzb25hbGl6YXRpb25cbiAqL1xuXG5mdW5jdGlvbiBjaGVja1BlcnNvbmFsaXphdGlvbkluQ2hhcnRQcm9wZXJ0aWVzKHBlcnNvbmFsaXphdGlvbjogQ2hhcnRQMTNuVHlwZSwgY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IHZvaWQge1xuXHRpZiAocGVyc29uYWxpemF0aW9uKSB7XG5cdFx0aWYgKHBlcnNvbmFsaXphdGlvbiA9PT0gXCJmYWxzZVwiIHx8IChwZXJzb25hbGl6YXRpb24gYXMgYm9vbGVhbikgPT09IGZhbHNlKSB7XG5cdFx0XHRjaGFydEJsb2NrLl9wZXJzb25hbGl6YXRpb24gPSB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIGlmIChwZXJzb25hbGl6YXRpb24gPT09IFwidHJ1ZVwiIHx8IChwZXJzb25hbGl6YXRpb24gYXMgYm9vbGVhbikgPT09IHRydWUpIHtcblx0XHRcdGNoYXJ0QmxvY2suX3BlcnNvbmFsaXphdGlvbiA9IE9iamVjdC52YWx1ZXMocGVyc29uYWxpemF0aW9uVmFsdWVzKS5qb2luKFwiLFwiKTtcblx0XHR9IGVsc2UgaWYgKHZlcmlmeVZhbGlkUGVyc29uYWxpemF0aW9uKHBlcnNvbmFsaXphdGlvbiBhcyBzdHJpbmcpID09PSB0cnVlKSB7XG5cdFx0XHRjaGFydEJsb2NrLl9wZXJzb25hbGl6YXRpb24gPSBwZXJzb25hbGl6YXRpb247XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNoYXJ0QmxvY2suX3BlcnNvbmFsaXphdGlvbiA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHBlcnNvbmFsaXphdGlvblxuICogQHJldHVybnMgYHRydWVgIG9yIGBmYWxzZWAgaWYgdGhlIHBlcnNvbmFsaXphdGlvbiBpcyB2YWxpZCBvciBub3QgdmFsaWRcbiAqL1xuZnVuY3Rpb24gdmVyaWZ5VmFsaWRQZXJzb25hbGl6YXRpb24ocGVyc29uYWxpemF0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcblx0bGV0IHZhbGlkID0gdHJ1ZTtcblx0Y29uc3Qgc3BsaXRBcnJheSA9IHBlcnNvbmFsaXphdGlvbi5zcGxpdChcIixcIik7XG5cdGNvbnN0IGFjY2VwdGVkVmFsdWVzOiBzdHJpbmdbXSA9IE9iamVjdC52YWx1ZXMocGVyc29uYWxpemF0aW9uVmFsdWVzKTtcblx0c3BsaXRBcnJheS5mb3JFYWNoKChhcnJheUVsZW1lbnQpID0+IHtcblx0XHRpZiAoIWFjY2VwdGVkVmFsdWVzLmluY2x1ZGVzKGFycmF5RWxlbWVudCkpIHtcblx0XHRcdHZhbGlkID0gZmFsc2U7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHZhbGlkO1xufVxuXG5mdW5jdGlvbiBnZXRWYXJpYW50TWFuYWdlbWVudChjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogc3RyaW5nIHtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSBjaGFydEJsb2NrLnZhcmlhbnRNYW5hZ2VtZW50ID8gY2hhcnRCbG9jay52YXJpYW50TWFuYWdlbWVudCA6IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLnZhcmlhbnRNYW5hZ2VtZW50O1xuXHRyZXR1cm4gY2hhcnRCbG9jay5wZXJzb25hbGl6YXRpb24gPT09IHVuZGVmaW5lZCA/IFwiTm9uZVwiIDogdmFyaWFudE1hbmFnZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVZhcmlhbnRNYW5hZ2VtZW50KGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBzdHJpbmcge1xuXHRjb25zdCBwZXJzb25hbGl6YXRpb24gPSBjaGFydEJsb2NrLnBlcnNvbmFsaXphdGlvbjtcblx0aWYgKHBlcnNvbmFsaXphdGlvbikge1xuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gZ2V0VmFyaWFudE1hbmFnZW1lbnQoY2hhcnRCbG9jayk7XG5cdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIikge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PFZhcmlhbnRNYW5hZ2VtZW50XG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtjaGFydEJsb2NrLl9ibG9ja0lkLCBcIlZNXCJdKX1cblx0XHRcdFx0XHRmb3I9e1tjaGFydEJsb2NrLl9ibG9ja0lkIV19XG5cdFx0XHRcdFx0c2hvd1NldEFzRGVmYXVsdD17dHJ1ZX1cblx0XHRcdFx0XHRoZWFkZXJMZXZlbD17Y2hhcnRCbG9jay5oZWFkZXJMZXZlbH1cblx0XHRcdFx0XHRzZWxlY3Q9eyhldmVudDogVmFyaWFudE1hbmFnZW1lbnQkU2VsZWN0RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdGNoYXJ0QmxvY2suZmlyZVZhcmlhbnRTZWxlY3RlZD8uKGV2ZW50KTtcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdHNhdmU9eyhldmVudDogVmFyaWFudE1hbmFnZW1lbnQkU2F2ZUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRjaGFydEJsb2NrLmZpcmVWYXJpYW50U2F2ZWQ/LihldmVudCk7XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmICh2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJOb25lXCIgfHwgdmFyaWFudE1hbmFnZW1lbnQgPT09IFwiUGFnZVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH0gZWxzZSBpZiAoIXBlcnNvbmFsaXphdGlvbikge1xuXHRcdExvZy53YXJuaW5nKFwiVmFyaWFudCBNYW5hZ2VtZW50IGNhbm5vdCBiZSBlbmFibGVkIHdoZW4gcGVyc29uYWxpemF0aW9uIGlzIGRpc2FibGVkXCIpO1xuXHR9XG5cdHJldHVybiBcIlwiO1xufVxuXG5mdW5jdGlvbiBnZXRQZXJzaXN0ZW5jZVByb3ZpZGVyKGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBQZXJzaXN0ZW5jZVByb3ZpZGVyIHwgdW5kZWZpbmVkIHtcblx0aWYgKGdldFZhcmlhbnRNYW5hZ2VtZW50KGNoYXJ0QmxvY2spID09PSBcIk5vbmVcIikge1xuXHRcdHJldHVybiA8UGVyc2lzdGVuY2VQcm92aWRlciBpZD17Z2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIFwiUGVyc2lzdGVuY2VQcm92aWRlclwiXSl9IGZvcj17Y2hhcnRCbG9jay5fYmxvY2tJZH0gLz47XG5cdH1cbn1cblxuZnVuY3Rpb24gcHVzaEFjdGlvbkNvbW1hbmQoXG5cdGFjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdGRhdGFGaWVsZDogKE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkRm9yQWN0aW9uPiAmIHsgSW52b2NhdGlvbkdyb3VwaW5nOiBNZXRhTW9kZWxFbnVtPE9wZXJhdGlvbkdyb3VwaW5nVHlwZT4gfSkgfCB1bmRlZmluZWQsXG5cdGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0Y2hhcnRCbG9jazogQ2hhcnRCbG9ja1xuKTogdm9pZCB7XG5cdGlmIChkYXRhRmllbGQpIHtcblx0XHRjb25zdCBjb21tYW5kQWN0aW9uID0ge1xuXHRcdFx0YWN0aW9uQ29udGV4dDogYWN0aW9uQ29udGV4dCxcblx0XHRcdG9uRXhlY3V0ZUFjdGlvbjogQ2hhcnRIZWxwZXIuZ2V0UHJlc3NFdmVudEZvckRhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbihcblx0XHRcdFx0Y2hhcnRCbG9jay5fYmxvY2tJZCEsXG5cdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAgfHwgXCJcIlxuXHRcdFx0KSxcblx0XHRcdG9uRXhlY3V0ZUlCTjogQ29tbW9uSGVscGVyLmdldFByZXNzSGFuZGxlckZvckRhdGFGaWVsZEZvcklCTihcblx0XHRcdFx0ZGF0YUZpZWxkIGFzIHVua25vd24gYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRgXFwke2ludGVybmFsPnNlbGVjdGVkQ29udGV4dHN9YCxcblx0XHRcdFx0ZmFsc2Vcblx0XHRcdCksXG5cdFx0XHRvbkV4ZWN1dGVNYW5pZmVzdDogQ29tbW9uSGVscGVyLmJ1aWxkQWN0aW9uV3JhcHBlcihhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uLCBjaGFydEJsb2NrKSxcblx0XHRcdGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwXG5cdFx0fTtcblx0XHRjaGFydEJsb2NrLl9jb21tYW5kQWN0aW9ucy5wdXNoKGNvbW1hbmRBY3Rpb24pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvbkNvbW1hbmQoY29tbWFuZEFjdGlvbjogQ29tbWFuZEFjdGlvbiwgY2hhcnRDb250ZXh0OiBDb250ZXh0LCBjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogc3RyaW5nIHtcblx0Y29uc3QgYWN0aW9uID0gY29tbWFuZEFjdGlvbi5hY3Rpb25Db250ZXh0LmdldE9iamVjdCgpO1xuXHRjb25zdCBkYXRhRmllbGRDb250ZXh0ID0gYWN0aW9uLmFubm90YXRpb25QYXRoICYmIGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGgpO1xuXHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRDb250ZXh0ICYmIGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdGNvbnN0IGRhdGFGaWVsZEFjdGlvbiA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGggKyBcIi9BY3Rpb25cIikhO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0ID0gQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQoZGF0YUZpZWxkQWN0aW9uKTtcblx0Y29uc3QgaXNCb3VuZFBhdGggPSBDb21tb25IZWxwZXIuZ2V0UGF0aFRvQm91bmRBY3Rpb25PdmVybG9hZChkYXRhRmllbGRBY3Rpb24pO1xuXHRjb25zdCBpc0JvdW5kID0gY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGlzQm91bmRQYXRoKSEuZ2V0T2JqZWN0KCk7XG5cdGNvbnN0IGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUoXG5cdFx0Q2hhcnRIZWxwZXIuZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGNoYXJ0Q29udGV4dC5nZXRPYmplY3QoKSwge1xuXHRcdFx0Y29udGV4dDogY2hhcnRDb250ZXh0XG5cdFx0fSlcblx0KTtcblx0Y29uc3QgaXNBY3Rpb25FbmFibGVkID0gYWN0aW9uLmVuYWJsZWRcblx0XHQ/IGFjdGlvbi5lbmFibGVkXG5cdFx0OiBDaGFydEhlbHBlci5pc0RhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbkVuYWJsZWQoXG5cdFx0XHRcdGlzQm91bmQgJiYgaXNCb3VuZC4kSXNCb3VuZCxcblx0XHRcdFx0ZGF0YUZpZWxkLkFjdGlvbixcblx0XHRcdFx0Y2hhcnRCbG9jay5fY29udGV4dCxcblx0XHRcdFx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAgfHwgXCJcIixcblx0XHRcdFx0YWN0aW9uLmVuYWJsZU9uU2VsZWN0IHx8IFwiXCJcblx0XHQgICk7XG5cdGxldCBpc0lCTkVuYWJsZWQ7XG5cdGlmIChhY3Rpb24uZW5hYmxlZCkge1xuXHRcdGlzSUJORW5hYmxlZCA9IGFjdGlvbi5lbmFibGVkO1xuXHR9IGVsc2UgaWYgKGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQpIHtcblx0XHRpc0lCTkVuYWJsZWQgPSBcIns9ICV7aW50ZXJuYWw+bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfSA+PSAxfVwiO1xuXHR9XG5cblx0bGV0IGNvbW1hbmRFbmFibGVkOiBib29sZWFuO1xuXHRzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG5cdFx0Y2FzZSBcIkZvckFjdGlvblwiOlxuXHRcdFx0Y29tbWFuZEVuYWJsZWQgPSBpc0FjdGlvbkVuYWJsZWQgPz8gYWN0aW9uLmVuYWJsZWQ7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRm9yTmF2aWdhdGlvblwiOlxuXHRcdFx0Y29tbWFuZEVuYWJsZWQgPSBpc0lCTkVuYWJsZWQgPz8gYWN0aW9uLmVuYWJsZWQ7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0Y29tbWFuZEVuYWJsZWQgPSBhY3Rpb24uZW5hYmxlZDtcblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0Y29uc3QgYWN0aW9uQ29tbWFuZCA9IChcblx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0ZXhlY3V0ZT17KGV2ZW50OiBDb21tYW5kRXhlY3V0aW9uJEV4ZWN1dGVFdmVudCk6IHZvaWQgPT5cblx0XHRcdFx0Y29tbWFuZEV4ZWN1dGUoZXZlbnQsIGFjdGlvbiwgY2hhcnRCbG9jay5fYmxvY2tJZCEsIGNvbW1hbmRBY3Rpb24uY2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAhLCBkYXRhRmllbGQpXG5cdFx0XHR9XG5cdFx0XHRlbmFibGVkPXtjb21tYW5kRW5hYmxlZH1cblx0XHRcdHZpc2libGU9eyhnZXRWaXNpYmxlKGRhdGFGaWVsZENvbnRleHQsIGNoYXJ0QmxvY2spIGFzIGJvb2xlYW4pID8/IGFjdGlvbi52aXNpYmxlfVxuXHRcdFx0Y29tbWFuZD17YWN0aW9uLmNvbW1hbmR9XG5cdFx0Lz5cblx0KTtcblxuXHRpZiAoXG5cdFx0YWN0aW9uLnR5cGUgPT0gXCJGb3JBY3Rpb25cIiAmJlxuXHRcdCghaXNCb3VuZCB8fFxuXHRcdFx0aXNCb3VuZC5Jc0JvdW5kICE9PSB0cnVlIHx8XG5cdFx0XHQoYWN0aW9uQ29udGV4dCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtgQCR7Q29yZUFubm90YXRpb25UZXJtcy5PcGVyYXRpb25BdmFpbGFibGV9YF0gIT09IGZhbHNlKVxuXHQpIHtcblx0XHRyZXR1cm4gYWN0aW9uQ29tbWFuZDtcblx0fSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PSBcIkZvckFjdGlvblwiKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGFjdGlvbkNvbW1hbmQ7XG5cdH1cbn1cblxuZnVuY3Rpb24gY29tbWFuZEV4ZWN1dGUoXG5cdGV2ZW50OiBDb21tYW5kRXhlY3V0aW9uJEV4ZWN1dGVFdmVudCxcblx0YWN0aW9uOiB7IEludm9jYXRpb25Hcm91cGluZzogeyAkRW51bU1lbWJlcjogc3RyaW5nIH07IGFjdGlvbjogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGhhbmRsZXJNb2R1bGU6IHN0cmluZzsgaGFuZGxlck1ldGhvZDogc3RyaW5nIH0sXG5cdGlkOiBzdHJpbmcsXG5cdGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBzdHJpbmcsXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG4pOiB2b2lkIHtcblx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoZXZlbnQuZ2V0U291cmNlKCkpO1xuXHRjb25zdCBjb250cm9sbGVyID0gdmlldz8uZ2V0Q29udHJvbGxlcigpO1xuXG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRjb25zdCBzSW52b2NhdGlvbkdyb3VwaW5nID1cblx0XHRcdFx0YWN0aW9uLkludm9jYXRpb25Hcm91cGluZyAmJlxuXHRcdFx0XHRhY3Rpb24uSW52b2NhdGlvbkdyb3VwaW5nLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdD8gXCJDaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdDogXCJJc29sYXRlZFwiO1xuXHRcdFx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdFx0XHRjb250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiksXG5cdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzogc0ludm9jYXRpb25Hcm91cGluZyxcblx0XHRcdFx0Y29udHJvbElkOiBpZCxcblx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCxcblx0XHRcdFx0bW9kZWw6IHZpZXcuZ2V0TW9kZWwoKSxcblx0XHRcdFx0bGFiZWw6IGRhdGFGaWVsZC5MYWJlbCBhcyBzdHJpbmdcblx0XHRcdH07XG5cdFx0XHRjb250cm9sbGVyLmVkaXRGbG93Lmludm9rZUFjdGlvbihkYXRhRmllbGQuQWN0aW9uIGFzIHN0cmluZywgcGFyYW1zKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJGb3JOYXZpZ2F0aW9uXCI6XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGFyYW1ldGVyczogTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIilcblx0XHRcdH07XG5cdFx0XHRpZiAoKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLk1hcHBpbmcpIHtcblx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gSlNPTi5zdHJpbmdpZnkoKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLk1hcHBpbmcpO1xuXHRcdFx0fVxuXHRcdFx0Y29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKFxuXHRcdFx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuU2VtYW50aWNPYmplY3QgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5BY3Rpb24gYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdEZQTUhlbHBlci5hY3Rpb25XcmFwcGVyKGV2ZW50LCBhY3Rpb24uaGFuZGxlck1vZHVsZSwgYWN0aW9uLmhhbmRsZXJNZXRob2QsIHtcblx0XHRcdFx0Y29udGV4dHM6IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpXG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEl0ZW1zKGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG5cdGlmIChjaGFydEJsb2NrLl9jaGFydCkge1xuXHRcdGNvbnN0IGRpbWVuc2lvbnM6IHN0cmluZ1tdID0gW107XG5cdFx0Y29uc3QgbWVhc3VyZXM6IHN0cmluZ1tdID0gW107XG5cdFx0aWYgKGNoYXJ0QmxvY2suX2NoYXJ0LkRpbWVuc2lvbnMpIHtcblx0XHRcdENoYXJ0SGVscGVyLmZvcm1hdERpbWVuc2lvbnMoY2hhcnRCbG9jay5fY2hhcnRDb250ZXh0KVxuXHRcdFx0XHQuZ2V0T2JqZWN0KClcblx0XHRcdFx0LmZvckVhY2goKGRpbWVuc2lvbjogRGltZW5zaW9uVHlwZSkgPT4ge1xuXHRcdFx0XHRcdGRpbWVuc2lvbi5pZCA9IGdlbmVyYXRlKFtjaGFydEJsb2NrLmlkLCBcImRpbWVuc2lvblwiLCBkaW1lbnNpb24ua2V5XSk7XG5cdFx0XHRcdFx0ZGltZW5zaW9ucy5wdXNoKFxuXHRcdFx0XHRcdFx0Z2V0SXRlbShcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGlkOiBkaW1lbnNpb24uaWQsXG5cdFx0XHRcdFx0XHRcdFx0a2V5OiBkaW1lbnNpb24ua2V5LFxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBkaW1lbnNpb24ubGFiZWwsXG5cdFx0XHRcdFx0XHRcdFx0cm9sZTogZGltZW5zaW9uLnJvbGVcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XCJfZmVfZ3JvdXBhYmxlX1wiLFxuXHRcdFx0XHRcdFx0XHRcImdyb3VwYWJsZVwiXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChjaGFydEJsb2NrLm1lYXN1cmVzKSB7XG5cdFx0XHRDaGFydEhlbHBlci5mb3JtYXRNZWFzdXJlcyhjaGFydEJsb2NrLm1lYXN1cmVzKS5mb3JFYWNoKChtZWFzdXJlOiBNZWFzdXJlVHlwZSkgPT4ge1xuXHRcdFx0XHRtZWFzdXJlLmlkID0gZ2VuZXJhdGUoW2NoYXJ0QmxvY2suaWQsIFwibWVhc3VyZVwiLCBtZWFzdXJlLmtleV0pO1xuXHRcdFx0XHRtZWFzdXJlcy5wdXNoKFxuXHRcdFx0XHRcdGdldEl0ZW0oXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGlkOiBtZWFzdXJlLmlkLFxuXHRcdFx0XHRcdFx0XHRrZXk6IG1lYXN1cmUua2V5LFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogbWVhc3VyZS5sYWJlbCxcblx0XHRcdFx0XHRcdFx0cm9sZTogbWVhc3VyZS5yb2xlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XCJfZmVfYWdncmVnYXRhYmxlX1wiLFxuXHRcdFx0XHRcdFx0XCJhZ2dyZWdhdGFibGVcIlxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAoZGltZW5zaW9ucy5sZW5ndGggJiYgbWVhc3VyZXMubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gZGltZW5zaW9ucy5jb25jYXQobWVhc3VyZXMpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gXCJcIjtcbn1cblxuZnVuY3Rpb24gZ2V0SXRlbShpdGVtOiBNZWFzdXJlVHlwZSB8IERpbWVuc2lvblR5cGUsIHByZWZpeDogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gPE1kY0NoYXJ0SXRlbSBpZD17aXRlbS5pZH0gcHJvcGVydHlLZXk9e3ByZWZpeCArIGl0ZW0ua2V5fSB0eXBlPXt0eXBlfSBsYWJlbD17aXRlbS5sYWJlbH0gcm9sZT17aXRlbS5yb2xlfSAvPjtcbn1cblxuZnVuY3Rpb24gZ2V0VG9vbGJhckFjdGlvbnMoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IFRvb2xiYXJBY3Rpb25bXSB7XG5cdGNvbnN0IGFjdGlvbnMgPSBnZXRBY3Rpb25zKGNoYXJ0QmxvY2spO1xuXHRpZiAoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/Lm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCkge1xuXHRcdGFjdGlvbnMucHVzaChnZXRTZWdtZW50ZWRCdXR0b24oY2hhcnRCbG9jaykpO1xuXHR9XG5cdGlmIChjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5pc0luc2lnaHRzRW5hYmxlZCkge1xuXHRcdGFjdGlvbnMucHVzaChcblx0XHRcdGdldFN0YW5kYXJkQWN0aW9ucyhcblx0XHRcdFx0Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uaXNJbnNpZ2h0c0VuYWJsZWQsXG5cdFx0XHRcdGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLmlzSW5zaWdodHNWaXNpYmxlLFxuXHRcdFx0XHRjaGFydEJsb2NrLl9ibG9ja0lkISxcblx0XHRcdFx0Y2hhcnRCbG9ja1xuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblx0aWYgKGFjdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBhY3Rpb25zO1xuXHR9XG5cdHJldHVybiBbXTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25zKFxuXHRpc0luc2lnaHRzRW5hYmxlZDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHwgdW5kZWZpbmVkLFxuXHRpc0luc2lnaHRzVmlzaWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHwgdW5kZWZpbmVkLFxuXHRpZDogc3RyaW5nLFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrXG4pOiBNZW51SXRlbSB8IEFjdGlvblRvb2xiYXJBY3Rpb24ge1xuXHRyZXR1cm4gKFxuXHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uIHZpc2libGU9e2lzSW5zaWdodHNWaXNpYmxlfT5cblx0XHRcdDxCdXR0b25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtpZCwgXCJTdGFuZGFyZEFjdGlvbjo6SW5zaWdodHNcIl0pfVxuXHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX0lOU0lHSFRTX0NBUkR9XCJcblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRjaGFydEJsb2NrLm9uQWRkQ2FyZFRvSW5zaWdodHNQcmVzc2VkKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVuYWJsZWQ9e2lzSW5zaWdodHNFbmFibGVkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PVwiQWx3YXlzT3ZlcmZsb3dcIiAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9CdXR0b24+XG5cdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXRBY3Rpb25zKGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBUb29sYmFyQWN0aW9uW10ge1xuXHRjb25zdCBhY3Rpb25zID0gcmVtb3ZlTWVudUl0ZW1zKGNoYXJ0QmxvY2suY2hhcnRBY3Rpb25zID8/IFtdKTtcblx0Ly8gQXBwbHkgcHJpbWFyeSBhY3Rpb24gb3ZlcmZsb3cgcHJvdGVjdGlvbiBiZWZvcmUgcHJvY2Vzc2luZ1xuXHRjb25zdCBhY3Rpb25zV2l0aE92ZXJmbG93UHJvdGVjdGlvbiA9IEFjdGlvbkhlbHBlci5lbnN1cmVQcmltYXJ5QWN0aW9uTmV2ZXJPdmVyZmxvd3MoYWN0aW9ucyk7XG5cblx0cmV0dXJuIGFjdGlvbnNXaXRoT3ZlcmZsb3dQcm90ZWN0aW9uLm1hcCgoYWN0aW9uOiBCYXNlQWN0aW9uKSA9PiB7XG5cdFx0aWYgKGFjdGlvbi5hbm5vdGF0aW9uUGF0aCB8fCAoYWN0aW9uLnR5cGUgPT09IFwiTWVudVwiICYmICFhY3Rpb24uaWQ/LnN0YXJ0c1dpdGgoXCJDdXN0b21BY3Rpb25cIikpKSB7XG5cdFx0XHQvLyBMb2FkIGFubm90YXRpb24gYmFzZWQgYWN0aW9uc1xuXHRcdFx0cmV0dXJuIGdldEFjdGlvbihhY3Rpb24sIGNoYXJ0QmxvY2suX2NoYXJ0Q29udGV4dCwgZmFsc2UsIGNoYXJ0QmxvY2spO1xuXHRcdH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09IFwiU2VwYXJhdG9yXCIpIHtcblx0XHRcdHJldHVybiBnZXRTZXBhcmF0b3IoYWN0aW9uKTtcblx0XHR9IGVsc2UgaWYgKGFjdGlvbi5oYXNPd25Qcm9wZXJ0eShcIm5vV3JhcFwiKSkge1xuXHRcdFx0Ly8gTG9hZCBYTUwgb3IgbWFuaWZlc3QgYmFzZWQgYWN0aW9ucyAvIGFjdGlvbiBncm91cHNcblx0XHRcdHJldHVybiBnZXRDdXN0b21BY3Rpb25zKGFjdGlvbiBhcyBDdXN0b21BbmRBY3Rpb24sIGNoYXJ0QmxvY2suX2NoYXJ0Q29udGV4dCwgY2hhcnRCbG9jayk7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTWVudUl0ZW1zKGFjdGlvbnM6IEJhc2VBY3Rpb25bXSk6IEJhc2VBY3Rpb25bXSB7XG5cdC8vIElmIGFjdGlvbiBpcyBhbHJlYWR5IHBhcnQgb2YgbWVudSBpbiBhY3Rpb24gZ3JvdXAsIHRoZW4gaXQgd2lsbFxuXHQvLyBiZSByZW1vdmVkIGZyb20gdGhlIG1haW4gYWN0aW9ucyBsaXN0XG5cdGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcblx0XHRpZiAoYWN0aW9uLm1lbnUpIHtcblx0XHRcdGFjdGlvbi5tZW51LmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRcdFx0Y29uc3QgaWR4ID0gYWN0aW9ucy5tYXAoKGFjdCkgPT4gYWN0LmtleSkuaW5kZXhPZihpdGVtLmtleSk7XG5cdFx0XHRcdGlmIChpZHggIT09IC0xKSB7XG5cdFx0XHRcdFx0YWN0aW9ucy5zcGxpY2UoaWR4LCAxKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhY3Rpb25zO1xufVxuXG5mdW5jdGlvbiBnZXRDdXN0b21BY3Rpb25zKGFjdGlvbjogQ3VzdG9tQW5kQWN0aW9uLCBjaGFydENvbnRleHQ6IENvbnRleHQsIGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBUb29sYmFyQWN0aW9uIHtcblx0bGV0IGFjdGlvbkVuYWJsZWQgPSBhY3Rpb24uZW5hYmxlZCBhcyBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRpZiAoKGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiA/PyBmYWxzZSkgJiYgYWN0aW9uLmVuYWJsZWQgPT09IFwidHJ1ZVwiKSB7XG5cdFx0YWN0aW9uRW5hYmxlZCA9IFwiez0gJXtpbnRlcm5hbD5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDF9XCI7XG5cdH1cblx0aWYgKGFjdGlvbi50eXBlID09PSBcIkRlZmF1bHRcIikge1xuXHRcdC8vIExvYWQgWE1MIG9yIG1hbmlmZXN0IGJhc2VkIHRvb2xiYXIgYWN0aW9uc1xuXHRcdHJldHVybiBnZXRBY3Rpb25Ub29sYmFyQWN0aW9uKFxuXHRcdFx0YWN0aW9uLFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogZ2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIGFjdGlvbi5pZF0pLFxuXHRcdFx0XHR1bml0dGVzdGlkOiBcIkRhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbkFjdGlvblwiLFxuXHRcdFx0XHRsYWJlbDogYWN0aW9uLnRleHQgPyBhY3Rpb24udGV4dCA6IFwiXCIsXG5cdFx0XHRcdGFyaWFIYXNQb3B1cDogdW5kZWZpbmVkLFxuXHRcdFx0XHRwcmVzczogYWN0aW9uLnByZXNzID8gYWN0aW9uLnByZXNzIDogXCJcIixcblx0XHRcdFx0ZW5hYmxlZDogYWN0aW9uRW5hYmxlZCxcblx0XHRcdFx0dmlzaWJsZTogYWN0aW9uLnZpc2libGUgPyBhY3Rpb24udmlzaWJsZSA6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRjaGFydEJsb2NrXG5cdFx0KTtcblx0fSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gXCJNZW51XCIpIHtcblx0XHQvLyBMb2FkIGFjdGlvbiBncm91cHMgKE1lbnUpXG5cdFx0cmV0dXJuIGdldEFjdGlvblRvb2xiYXJNZW51QWN0aW9uKFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogZ2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIGFjdGlvbi5pZF0pLFxuXHRcdFx0XHR0ZXh0OiBhY3Rpb24udGV4dCxcblx0XHRcdFx0dmlzaWJsZTogYWN0aW9uLnZpc2libGUsXG5cdFx0XHRcdGVuYWJsZWQ6IGFjdGlvbkVuYWJsZWQsXG5cdFx0XHRcdHVzZURlZmF1bHRBY3Rpb25Pbmx5OiBEZWZhdWx0QWN0aW9uSGFuZGxlci5nZXRVc2VEZWZhdWx0QWN0aW9uT25seShhY3Rpb24pLFxuXHRcdFx0XHRidXR0b25Nb2RlOiBEZWZhdWx0QWN0aW9uSGFuZGxlci5nZXRCdXR0b25Nb2RlKGFjdGlvbiksXG5cdFx0XHRcdGRlZmF1bHRBY3Rpb246IHVuZGVmaW5lZCxcblx0XHRcdFx0YWN0aW9uczogYWN0aW9uLFxuXHRcdFx0XHRwcmlvcml0eTogYWN0aW9uLnByaW9yaXR5LFxuXHRcdFx0XHRncm91cDogYWN0aW9uLmdyb3VwXG5cdFx0XHR9LFxuXHRcdFx0Y2hhcnRDb250ZXh0LFxuXHRcdFx0Y2hhcnRCbG9ja1xuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0TWVudUl0ZW1Gcm9tTWVudShtZW51SXRlbUFjdGlvbjogQ3VzdG9tQWN0aW9uLCBjaGFydENvbnRleHQ6IENvbnRleHQsIGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBUb29sYmFyQWN0aW9uIHtcblx0bGV0IHByZXNzSGFuZGxlcjogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHwgeyBcImpzeDpjb21tYW5kXCI6IENvbW1hbmRQcm9wZXJ0aWVzIH07XG5cdGlmIChtZW51SXRlbUFjdGlvbi5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdC8vQW5ub3RhdGlvbiBiYXNlZCBhY3Rpb24gaXMgcGFzc2VkIGFzIG1lbnUgaXRlbSBmb3IgbWVudSBidXR0b25cblx0XHRyZXR1cm4gZ2V0QWN0aW9uKG1lbnVJdGVtQWN0aW9uLCBjaGFydENvbnRleHQsIHRydWUsIGNoYXJ0QmxvY2spO1xuXHR9XG5cdGlmIChtZW51SXRlbUFjdGlvbi5jb21tYW5kKSB7XG5cdFx0cHJlc3NIYW5kbGVyID0geyBcImpzeDpjb21tYW5kXCI6IGBjbWQ6JHttZW51SXRlbUFjdGlvbi5jb21tYW5kfXxwcmVzc2AgYXMgQ29tbWFuZFByb3BlcnRpZXMgfTtcblx0fSBlbHNlIGlmIChtZW51SXRlbUFjdGlvbi5ub1dyYXAgPz8gZmFsc2UpIHtcblx0XHRwcmVzc0hhbmRsZXIgPSB7XG5cdFx0XHRwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBmdW5jdGlvbk5hbWUgPSBtZW51SXRlbUFjdGlvbi5oYW5kbGVyTWV0aG9kPy5zcGxpdChcIi5cIilbMV0gYXMgc3RyaW5nO1xuXHRcdFx0XHRjb25zdCBjb250cm9sbGVyID0geyAuLi5Db21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGV2ZW50LmdldFNvdXJjZSgpKS5nZXRDb250cm9sbGVyKCkgfSBhcyB1bmtub3duIGFzIHtcblx0XHRcdFx0XHRbdGVtcDogc3RyaW5nXTogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZDtcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKGNvbnRyb2xsZXJbZnVuY3Rpb25OYW1lXSkgY29udHJvbGxlcltmdW5jdGlvbk5hbWVdKGV2ZW50KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHByZXNzSGFuZGxlciA9IHtcblx0XHRcdHByZXNzOiAoZXZlbnQ6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IHNlbGVjdGVkQ29udGV4dHMgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGV2ZW50LmdldFNvdXJjZSgpKVxuXHRcdFx0XHRcdC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpXG5cdFx0XHRcdFx0Py5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIik7XG5cdFx0XHRcdEZQTUhlbHBlci5hY3Rpb25XcmFwcGVyKGV2ZW50LCBtZW51SXRlbUFjdGlvbi5oYW5kbGVyTW9kdWxlLCBtZW51SXRlbUFjdGlvbi5oYW5kbGVyTWV0aG9kLCB7IGNvbnRleHRzOiBzZWxlY3RlZENvbnRleHRzIH0pO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gPE1lbnVJdGVtIHRleHQ9e21lbnVJdGVtQWN0aW9uLnRleHR9IHsuLi5wcmVzc0hhbmRsZXJ9IHZpc2libGU9e21lbnVJdGVtQWN0aW9uLnZpc2libGV9IGVuYWJsZWQ9e21lbnVJdGVtQWN0aW9uLmVuYWJsZWR9IC8+O1xufVxuXG5mdW5jdGlvbiBnZXRBY3Rpb25Ub29sYmFyTWVudUFjdGlvbihcblx0cHJvcHM6IEN1c3RvbVRvb2xiYXJNZW51QWN0aW9uLFxuXHRjaGFydENvbnRleHQ6IENvbnRleHQsXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IE1lbnVJdGVtIHwgQWN0aW9uVG9vbGJhckFjdGlvbiB7XG5cdGNvbnN0IGFNZW51SXRlbXMgPSAocHJvcHMuYWN0aW9ucz8ubWVudSBhcyBDdXN0b21BY3Rpb25bXSkubWFwKChhY3Rpb246IEN1c3RvbUFjdGlvbikgPT4ge1xuXHRcdHJldHVybiBnZXRNZW51SXRlbUZyb21NZW51KGFjdGlvbiwgY2hhcnRDb250ZXh0LCBjaGFydEJsb2NrKTtcblx0fSk7XG5cdGNvbnN0IGlzQUlPcGVyYXRpb24gPSBpc01lbnVBSU9wZXJhdGlvbihwcm9wcy5hY3Rpb25zPy5tZW51IGFzIEN1c3RvbUFjdGlvbltdKTtcblx0cmV0dXJuIChcblx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdHRleHQ9e3Byb3BzLnRleHR9XG5cdFx0XHRcdHR5cGU9XCJUcmFuc3BhcmVudFwiXG5cdFx0XHRcdGlkPXtwcm9wcy5pZH1cblx0XHRcdFx0dmlzaWJsZT17cHJvcHMudmlzaWJsZX1cblx0XHRcdFx0ZW5hYmxlZD17cHJvcHMuZW5hYmxlZH1cblx0XHRcdFx0dXNlRGVmYXVsdEFjdGlvbk9ubHk9e3Byb3BzLnVzZURlZmF1bHRBY3Rpb25Pbmx5fVxuXHRcdFx0XHRidXR0b25Nb2RlPXtwcm9wcy5idXR0b25Nb2RlfVxuXHRcdFx0XHRtZW51UG9zaXRpb249e0RvY2suQmVnaW5Cb3R0b219XG5cdFx0XHRcdGRlZmF1bHRBY3Rpb249e3Byb3BzLmRlZmF1bHRBY3Rpb24gYXMgdW5rbm93biBhcyAob0V2ZW50OiBVSTVFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0aWNvbj17aXNBSU9wZXJhdGlvbiA/IGFpSWNvbiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0YXJpYURlc2NyaWJlZEJ5PXtpc0FJT3BlcmF0aW9uID8gW2Ake2NoYXJ0QmxvY2suZ2V0SWQoKX0tLWZlOjpBaUFjdGlvbjo6QXJpYVRleHRgXSA6IHVuZGVmaW5lZH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRtZW51OiA8TWVudT57YU1lbnVJdGVtc308L01lbnU+LFxuXHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXtwcm9wcy5wcmlvcml0eX0gZ3JvdXA9e3Byb3BzLmdyb3VwfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51QnV0dG9uPlxuXHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uKGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbiwgY2hhcnRDb250ZXh0OiBDb250ZXh0LCBpc01lbnVJdGVtOiBib29sZWFuLCBjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogVG9vbGJhckFjdGlvbiB7XG5cdGNvbnN0IGRhdGFGaWVsZENvbnRleHQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoID8/IFwiXCIpITtcblx0aWYgKGFjdGlvbi50eXBlID09PSBcIkZvck5hdmlnYXRpb25cIikge1xuXHRcdHJldHVybiBnZXROYXZpZ2F0aW9uQWN0aW9ucyhhY3Rpb24sIGRhdGFGaWVsZENvbnRleHQsIGlzTWVudUl0ZW0sIGNoYXJ0QmxvY2spO1xuXHR9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBcIkZvckFjdGlvblwiKSB7XG5cdFx0cmV0dXJuIGdldEFubm90YXRpb25BY3Rpb25zKGNoYXJ0Q29udGV4dCwgYWN0aW9uIGFzIEFubm90YXRpb25BY3Rpb24sIGRhdGFGaWVsZENvbnRleHQsIGlzTWVudUl0ZW0sIGNoYXJ0QmxvY2spO1xuXHR9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBcIk1lbnVcIikge1xuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IGFjdGlvbi5tZW51Py5tYXAoKG1lbnVBY3Rpb246IEJhc2VBY3Rpb24pID0+IHtcblx0XHRcdHJldHVybiBnZXRBY3Rpb24obWVudUFjdGlvbiwgY2hhcnRDb250ZXh0LCB0cnVlLCBjaGFydEJsb2NrKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdFx0dHlwZT1cIlRyYW5zcGFyZW50XCJcblx0XHRcdFx0XHRpZD17YWN0aW9uLmtleX1cblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZH1cblx0XHRcdFx0XHRtZW51UG9zaXRpb249e0RvY2suQmVnaW5Cb3R0b219XG5cdFx0XHRcdFx0aWNvbj17YWN0aW9uPy5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gYWlJY29uIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdGFyaWFEZXNjcmliZWRCeT17YWN0aW9uPy5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gW2Ake2NoYXJ0QmxvY2suZ2V0SWQoKX0tLWZlOjpBaUFjdGlvbjo6QXJpYVRleHRgXSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRtZW51OiA8TWVudT57bWVudUl0ZW1zfTwvTWVudT4sXG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfSAvPlxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvTWVudUJ1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFNlcGFyYXRvcihhY3Rpb246IEJhc2VBY3Rpb24pOiBUb29sYmFyQWN0aW9uIHtcblx0cmV0dXJuIChcblx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdDxUb29sYmFyU2VwYXJhdG9yPlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0fX1cblx0XHRcdDwvVG9vbGJhclNlcGFyYXRvcj5cblx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdCk7XG59XG5cbmZ1bmN0aW9uIGdldE5hdmlnYXRpb25BY3Rpb25zKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdGRhdGFGaWVsZENvbnRleHQ6IENvbnRleHQsXG5cdGlzTWVudUl0ZW06IGJvb2xlYW4sXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2tcbik6IE1lbnVJdGVtIHwgQWN0aW9uVG9vbGJhckFjdGlvbiB7XG5cdGxldCBlbmFibGVkID0gXCJ0cnVlXCI7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdGlmIChhY3Rpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0ZW5hYmxlZCA9IGFjdGlvbi5lbmFibGVkO1xuXHR9IGVsc2UgaWYgKGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQpIHtcblx0XHRlbmFibGVkID0gXCJ7PSAle2ludGVybmFsPm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c30gPj0gMX1cIjtcblx0fVxuXHRyZXR1cm4gZ2V0QWN0aW9uVG9vbGJhckFjdGlvbihcblx0XHRhY3Rpb24sXG5cdFx0e1xuXHRcdFx0aWQ6IHVuZGVmaW5lZCxcblx0XHRcdHVuaXR0ZXN0aWQ6IFwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uQnV0dG9uQWN0aW9uXCIsXG5cdFx0XHRsYWJlbDogZGF0YUZpZWxkLkxhYmVsLFxuXHRcdFx0YXJpYUhhc1BvcHVwOiB1bmRlZmluZWQsXG5cdFx0XHRwcmVzczogQ29tbW9uSGVscGVyLmdldFByZXNzSGFuZGxlckZvckRhdGFGaWVsZEZvcklCTihkYXRhRmllbGQsIGBcXCR7aW50ZXJuYWw+c2VsZWN0ZWRDb250ZXh0c31gLCBmYWxzZSkhLFxuXHRcdFx0ZW5hYmxlZDogZW5hYmxlZCxcblx0XHRcdHZpc2libGU6IGdldFZpc2libGUoZGF0YUZpZWxkQ29udGV4dCwgY2hhcnRCbG9jaylcblx0XHR9LFxuXHRcdGlzTWVudUl0ZW0sXG5cdFx0Y2hhcnRCbG9jayxcblx0XHRkYXRhRmllbGRcblx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0QW5ub3RhdGlvbkFjdGlvbnMoXG5cdGNoYXJ0Q29udGV4dDogQ29udGV4dCxcblx0YWN0aW9uOiBBbm5vdGF0aW9uQWN0aW9uLFxuXHRkYXRhRmllbGRDb250ZXh0OiBDb250ZXh0LFxuXHRpc01lbnVJdGVtOiBib29sZWFuLFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrXG4pOiBUb29sYmFyQWN0aW9uIHtcblx0Y29uc3QgZGF0YUZpZWxkQWN0aW9uID0gY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCArIFwiL0FjdGlvblwiKSE7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQoZGF0YUZpZWxkQWN0aW9uKSk7XG5cdGNvbnN0IGFjdGlvbk9iamVjdCA9IGFjdGlvbkNvbnRleHQ/LmdldE9iamVjdCgpO1xuXHRjb25zdCBpc0JvdW5kUGF0aCA9IENvbW1vbkhlbHBlci5nZXRQYXRoVG9Cb3VuZEFjdGlvbk92ZXJsb2FkKGRhdGFGaWVsZEFjdGlvbik7XG5cdGNvbnN0IGlzQm91bmQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoaXNCb3VuZFBhdGgpIS5nZXRPYmplY3QoKTtcblx0Y29uc3QgZGF0YUZpZWxkID0gZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0aWYgKCFpc0JvdW5kIHx8IGlzQm91bmQuJElzQm91bmQgIT09IHRydWUgfHwgYWN0aW9uT2JqZWN0W2BAJHtDb3JlQW5ub3RhdGlvblRlcm1zLk9wZXJhdGlvbkF2YWlsYWJsZX1gXSAhPT0gZmFsc2UpIHtcblx0XHRjb25zdCBlbmFibGVkID0gZ2V0QW5ub3RhdGlvbkFjdGlvbnNFbmFibGVkKGFjdGlvbiwgaXNCb3VuZCwgZGF0YUZpZWxkLCBjaGFydENvbnRleHQsIGNoYXJ0QmxvY2suX2NvbnRleHQpO1xuXHRcdGNvbnN0IGRhdGFGaWVsZE1vZGVsT2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPihcblx0XHRcdGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGgpIGFzIENvbnRleHRcblx0XHQpO1xuXHRcdGNvbnN0IGFyaWFIYXNQb3B1cCA9IGlzRGF0YU1vZGVsT2JqZWN0UGF0aEZvckFjdGlvbldpdGhEaWFsb2coZGF0YUZpZWxkTW9kZWxPYmplY3RQYXRoKTtcblx0XHRjb25zdCBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9XG5cdFx0XHRlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShcblx0XHRcdFx0Q2hhcnRIZWxwZXIuZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGNoYXJ0Q29udGV4dC5nZXRPYmplY3QoKSwge1xuXHRcdFx0XHRcdGNvbnRleHQ6IGNoYXJ0Q29udGV4dFxuXHRcdFx0XHR9KVxuXHRcdFx0KSB8fCBcIlwiO1xuXHRcdHJldHVybiBnZXRBY3Rpb25Ub29sYmFyQWN0aW9uKFxuXHRcdFx0YWN0aW9uLFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogZ2VuZXJhdGUoW2NoYXJ0QmxvY2suX2Jsb2NrSWQsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhkYXRhRmllbGRDb250ZXh0KV0pLFxuXHRcdFx0XHR1bml0dGVzdGlkOiBcIkRhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbkFjdGlvblwiLFxuXHRcdFx0XHRsYWJlbDogZGF0YUZpZWxkLkxhYmVsLFxuXHRcdFx0XHRhcmlhSGFzUG9wdXA6IGFyaWFIYXNQb3B1cCxcblx0XHRcdFx0ZW5hYmxlZDogZW5hYmxlZCxcblx0XHRcdFx0dmlzaWJsZTogZ2V0VmlzaWJsZShkYXRhRmllbGRDb250ZXh0LCBjaGFydEJsb2NrKVxuXHRcdFx0fSxcblx0XHRcdGlzTWVudUl0ZW0sXG5cdFx0XHRjaGFydEJsb2NrLFxuXHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXBcblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvblRvb2xiYXJBY3Rpb24oXG5cdGFjdGlvbjogKEJhc2VBY3Rpb24gfCBDdXN0b21BY3Rpb24pICYgeyBub1dyYXA/OiBib29sZWFuIH0sXG5cdHRvb2xiYXJBY3Rpb246IFRvb2xCYXJBY3Rpb24sXG5cdGlzTWVudUl0ZW06IGJvb2xlYW4sXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2ssXG5cdGRhdGFGaWVsZD86IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmdcbik6IE1lbnVJdGVtIHwgQWN0aW9uVG9vbGJhckFjdGlvbiB7XG5cdGlmIChpc01lbnVJdGVtKSB7XG5cdFx0Y29uc3QgcHJlc3NFdmVudDogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHwgeyBcImpzeDpjb21tYW5kXCI6IENvbW1hbmRQcm9wZXJ0aWVzIH0gPSBhY3Rpb24uY29tbWFuZFxuXHRcdFx0PyB7IFwianN4OmNvbW1hbmRcIjogYGNtZDoke2FjdGlvbi5jb21tYW5kfXxwcmVzc2AgYXMgQ29tbWFuZFByb3BlcnRpZXMgfVxuXHRcdFx0OiB7XG5cdFx0XHRcdFx0cHJlc3M6IChldmVudDogQnV0dG9uJFByZXNzRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGV2ZW50LmdldFNvdXJjZSgpKTtcblx0XHRcdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdFx0XHRcdGlmIChhY3Rpb24udHlwZSA9PT0gXCJGb3JBY3Rpb25cIikge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dHM6IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpLFxuXHRcdFx0XHRcdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzpcblx0XHRcdFx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKT8uSW52b2NhdGlvbkdyb3VwaW5nID09PSBPcGVyYXRpb25Hcm91cGluZ1R5cGUuQ2hhbmdlU2V0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gXCJDaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IFwiSXNvbGF0ZWRcIixcblx0XHRcdFx0XHRcdFx0XHRjb250cm9sSWQ6IGNoYXJ0QmxvY2suX2Jsb2NrSWQsXG5cdFx0XHRcdFx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCxcblx0XHRcdFx0XHRcdFx0XHRtb2RlbDogdmlldy5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQ/LkxhYmVsIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdFx0XHRkaXNhYmxlU3RyaWN0SGFuZGxpbmc6IGFjdGlvbi5kaXNhYmxlU3RyaWN0SGFuZGxpbmdcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0Y29udHJvbGxlci5lZGl0Rmxvdy5pbnZva2VBY3Rpb24oZGF0YUZpZWxkPy5BY3Rpb24gYXMgc3RyaW5nLCBwYXJhbXMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gXCJGb3JOYXZpZ2F0aW9uXCIpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvblBhcmFtZXRlcnM6IE5hdmlnYXRpb25QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIilcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0aWYgKChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKT8uTWFwcGluZykge1xuXHRcdFx0XHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IEpTT04uc3RyaW5naWZ5KFxuXHRcdFx0XHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLk1hcHBpbmdcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShcblx0XHRcdFx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuU2VtYW50aWNPYmplY3QgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLkFjdGlvbiBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdCAgfTtcblxuXHRcdHJldHVybiA8TWVudUl0ZW0gdGV4dD17dG9vbGJhckFjdGlvbi5sYWJlbH0gey4uLnByZXNzRXZlbnR9IGVuYWJsZWQ9e3Rvb2xiYXJBY3Rpb24uZW5hYmxlZH0gdmlzaWJsZT17dG9vbGJhckFjdGlvbi52aXNpYmxlfSAvPjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYnVpbGRBY3Rpb24oYWN0aW9uLCB0b29sYmFyQWN0aW9uLCBjaGFydEJsb2NrLCBkYXRhRmllbGQsIGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKTtcblx0fVxufVxuXG5mdW5jdGlvbiBidWlsZEFjdGlvbihcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHR0b29sYmFyQWN0aW9uOiBUb29sQmFyQWN0aW9uLFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrLFxuXHRkYXRhRmllbGQ/OiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwPzogc3RyaW5nXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHtcblx0cmV0dXJuIChcblx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdDxCdXR0b25cblx0XHRcdFx0aWQ9e3Rvb2xiYXJBY3Rpb24uaWR9XG5cdFx0XHRcdHRleHQ9e3Rvb2xiYXJBY3Rpb24ubGFiZWx9XG5cdFx0XHRcdGFyaWFIYXNQb3B1cD17dG9vbGJhckFjdGlvbi5hcmlhSGFzUG9wdXB9XG5cdFx0XHRcdHsuLi5nZXRBY3Rpb25QcmVzcyhhY3Rpb24sIGRhdGFGaWVsZCwgY2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAsIGNoYXJ0QmxvY2spfVxuXHRcdFx0XHRlbmFibGVkPXt0b29sYmFyQWN0aW9uLmVuYWJsZWR9XG5cdFx0XHRcdHZpc2libGU9e3Rvb2xiYXJBY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0aWNvbj17YWN0aW9uLmlzQUlPcGVyYXRpb24gPT09IHRydWUgPyBhaUljb24gOiB1bmRlZmluZWR9XG5cdFx0XHRcdGFyaWFEZXNjcmliZWRCeT17YWN0aW9uPy5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gW2Ake2NoYXJ0QmxvY2suZ2V0SWQoKX0tLWZlOjpBaUFjdGlvbjo6QXJpYVRleHRgXSA6IHVuZGVmaW5lZH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9CdXR0b24+XG5cdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXRBY3Rpb25QcmVzcyhcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRkYXRhRmllbGQ/OiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwPzogc3RyaW5nLFxuXHRjaGFydEJsb2NrPzogQ2hhcnRCbG9ja1xuKTogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHwgeyBcImpzeDpjb21tYW5kXCI6IENvbW1hbmRQcm9wZXJ0aWVzIH0ge1xuXHRsZXQgYWN0aW9uUHJlc3M6IHsgcHJlc3M6IChldmVudDogQnV0dG9uJFByZXNzRXZlbnQpID0+IHZvaWQgfSB8IHsgXCJqc3g6Y29tbWFuZFwiOiBDb21tYW5kUHJvcGVydGllcyB9ID0ge1xuXHRcdHByZXNzOiBcIlwiIGFzIHVua25vd24gYXMgKCkgPT4gdm9pZFxuXHR9O1xuXG5cdGlmIChhY3Rpb24uaGFzT3duUHJvcGVydHkoXCJub1dyYXBcIikpIHtcblx0XHRpZiAoYWN0aW9uLmNvbW1hbmQpIHtcblx0XHRcdGFjdGlvblByZXNzID0geyBcImpzeDpjb21tYW5kXCI6IGBjbWQ6JHthY3Rpb24uY29tbWFuZH18cHJlc3NgIGFzIENvbW1hbmRQcm9wZXJ0aWVzIH07XG5cdFx0fSBlbHNlIGlmICgoYWN0aW9uIGFzIEN1c3RvbUFjdGlvbikubm9XcmFwID09PSB0cnVlKSB7XG5cdFx0XHRhY3Rpb25QcmVzcyA9IGdldEN1c3RvbUFjdGlvblByZXNzKGFjdGlvbiBhcyBDdXN0b21BY3Rpb24pO1xuXHRcdH0gZWxzZSBpZiAoIWFjdGlvbi5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0YWN0aW9uUHJlc3MgPSBnZXRBY3Rpb25QcmVzc1dpdGhBbm5vdGF0aW9uUGF0aChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0YWN0aW9uUHJlc3MgPSBhY3Rpb24uY29tbWFuZFxuXHRcdFx0PyB7IFwianN4OmNvbW1hbmRcIjogYGNtZDoke2FjdGlvbi5jb21tYW5kfXxwcmVzc2AgYXMgQ29tbWFuZFByb3BlcnRpZXMgfVxuXHRcdFx0OiBnZXRTdGFuZGFyZEFjdGlvblByZXNzV2l0aE5vQ29tbWFuZChhY3Rpb24sIGRhdGFGaWVsZCwgY2hhcnRCbG9jaywgY2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXApO1xuXHR9XG5cblx0cmV0dXJuIGFjdGlvblByZXNzO1xufVxuXG5mdW5jdGlvbiBnZXRDdXN0b21BY3Rpb25QcmVzcyhhY3Rpb246IEN1c3RvbUFjdGlvbik6IHsgcHJlc3M6IChldmVudDogQnV0dG9uJFByZXNzRXZlbnQpID0+IHZvaWQgfSB7XG5cdHJldHVybiB7XG5cdFx0cHJlc3M6IChldmVudDogQnV0dG9uJFByZXNzRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGFjdGlvbi5oYW5kbGVyTWV0aG9kPy5zcGxpdChcIi5cIilbMV0gYXMgc3RyaW5nO1xuXHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHsgLi4uQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhldmVudC5nZXRTb3VyY2UoKSkuZ2V0Q29udHJvbGxlcigpIH0gYXMgdW5rbm93biBhcyB7XG5cdFx0XHRcdFttZXRob2Q6IHN0cmluZ106IChldmVudDogQnV0dG9uJFByZXNzRXZlbnQpID0+IHZvaWQ7XG5cdFx0XHR9O1xuXHRcdFx0aWYgKGNvbnRyb2xsZXJbZnVuY3Rpb25OYW1lXSkgY29udHJvbGxlcltmdW5jdGlvbk5hbWVdKGV2ZW50KTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvblByZXNzV2l0aEFubm90YXRpb25QYXRoKGFjdGlvbjogQ3VzdG9tQWN0aW9uKTogeyBwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCkgPT4gdm9pZCB9IHtcblx0cmV0dXJuIHtcblx0XHRwcmVzczogKGV2ZW50OiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3Qgc2VsZWN0ZWRDb250ZXh0cyA9IGV2ZW50LmdldFNvdXJjZSgpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKTtcblx0XHRcdEZQTUhlbHBlci5hY3Rpb25XcmFwcGVyKGV2ZW50LCBhY3Rpb24uaGFuZGxlck1vZHVsZSwgYWN0aW9uLmhhbmRsZXJNZXRob2QsIHtcblx0XHRcdFx0Y29udGV4dHM6IHNlbGVjdGVkQ29udGV4dHNcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25QcmVzc1dpdGhOb0NvbW1hbmQoXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0ZGF0YUZpZWxkPzogRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRjaGFydEJsb2NrPzogQ2hhcnRCbG9jayxcblx0Y2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmdcbik6IHsgcHJlc3M6IChldmVudDogQnV0dG9uJFByZXNzRXZlbnQpID0+IHZvaWQgfSB7XG5cdHJldHVybiB7XG5cdFx0cHJlc3M6IChldmVudDogQnV0dG9uJFByZXNzRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGV2ZW50LmdldFNvdXJjZSgpKTtcblx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdGlmIChhY3Rpb24udHlwZSA9PT0gXCJGb3JBY3Rpb25cIikge1xuXHRcdFx0XHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0XHRcdFx0Y29udGV4dHM6IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpLFxuXHRcdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzpcblx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKT8uSW52b2NhdGlvbkdyb3VwaW5nID09PSBPcGVyYXRpb25Hcm91cGluZ1R5cGUuQ2hhbmdlU2V0XG5cdFx0XHRcdFx0XHRcdD8gXCJDaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdFx0XHQ6IFwiSXNvbGF0ZWRcIixcblx0XHRcdFx0XHRjb250cm9sSWQ6IGNoYXJ0QmxvY2s/Ll9ibG9ja0lkLFxuXHRcdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogY2hhcnRPcGVyYXRpb25BdmFpbGFibGVNYXAsXG5cdFx0XHRcdFx0bW9kZWw6IHZpZXcuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRsYWJlbDogZGF0YUZpZWxkPy5MYWJlbCBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0ZGlzYWJsZVN0cmljdEhhbmRsaW5nOiBhY3Rpb24uZGlzYWJsZVN0cmljdEhhbmRsaW5nXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnRyb2xsZXIuZWRpdEZsb3cuaW52b2tlQWN0aW9uKGRhdGFGaWVsZD8uQWN0aW9uIGFzIHN0cmluZywgcGFyYW1zKTtcblx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09IFwiRm9yTmF2aWdhdGlvblwiKSB7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIpXG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmICgoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbik/Lk1hcHBpbmcpIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBKU09OLnN0cmluZ2lmeSgoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuTWFwcGluZyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKFxuXHRcdFx0XHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5TZW1hbnRpY09iamVjdCBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuQWN0aW9uIGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBnZXRBbm5vdGF0aW9uQWN0aW9uc0VuYWJsZWQoXG5cdGFjdGlvbjogQmFzZUFjdGlvbixcblx0aXNCb3VuZDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRjaGFydENvbnRleHQ6IENvbnRleHQsXG5cdGNvbnRleHQ6IENvbnRleHRcbik6IHN0cmluZyB7XG5cdHJldHVybiBhY3Rpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkXG5cdFx0PyBhY3Rpb24uZW5hYmxlZFxuXHRcdDogQ2hhcnRIZWxwZXIuaXNEYXRhRmllbGRGb3JBY3Rpb25CdXR0b25FbmFibGVkKFxuXHRcdFx0XHRpc0JvdW5kICYmIGlzQm91bmQuJElzQm91bmQsXG5cdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24gYXMgc3RyaW5nLFxuXHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHRDaGFydEhlbHBlci5nZXRPcGVyYXRpb25BdmFpbGFibGVNYXAoY2hhcnRDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IGNoYXJ0Q29udGV4dCB9KSxcblx0XHRcdFx0YWN0aW9uLmVuYWJsZU9uU2VsZWN0IHx8IFwiXCJcblx0XHQgICk7XG59XG5cbmZ1bmN0aW9uIGdldFNlZ21lbnRlZEJ1dHRvbihjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogQWN0aW9uVG9vbGJhckFjdGlvbiB7XG5cdHJldHVybiAoXG5cdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdGxheW91dEluZm9ybWF0aW9uPXt7XG5cdFx0XHRcdGFnZ3JlZ2F0aW9uTmFtZTogXCJlbmRcIixcblx0XHRcdFx0YWxpZ25tZW50OiBcIkVuZFwiXG5cdFx0XHR9fVxuXHRcdD5cblx0XHRcdDxTZWdtZW50ZWRCdXR0b25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtjaGFydEJsb2NrLl9ibG9ja0lkLCBcIlNlZ21lbnRlZEJ1dHRvblwiLCBcIlRlbXBsYXRlQ29udGVudFZpZXdcIl0pfVxuXHRcdFx0XHRzZWxlY3Rpb25DaGFuZ2U9eyhldmVudDogU2VnbWVudGVkQnV0dG9uJFNlbGVjdGlvbkNoYW5nZUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0Y2hhcnRCbG9jay5maXJlU2VnbWVudGVkQnV0dG9uUHJlc3NlZD8uKFxuXHRcdFx0XHRcdFx0bWVyZ2UoZXZlbnQuZ2V0UGFyYW1ldGVycygpLCB7IHNlbGVjdGVkS2V5OiBldmVudC5nZXRTb3VyY2UoKS5nZXRTZWxlY3RlZEtleSgpIH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fX1cblx0XHRcdFx0dmlzaWJsZT17bm90RXF1YWwocGF0aEluTW9kZWwoXCJhbHBDb250ZW50Vmlld1wiLCBcInBhZ2VJbnRlcm5hbFwiKSwgXCJUYWJsZVwiKX1cblx0XHRcdFx0c2VsZWN0ZWRLZXk9e3BhdGhJbk1vZGVsKFwiYWxwQ29udGVudFZpZXdcIiwgXCJwYWdlSW50ZXJuYWxcIil9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0aXRlbXM6IGdldFNlZ21lbnRlZEJ1dHRvbkl0ZW1zKClcblx0XHRcdFx0fX1cblx0XHRcdDwvU2VnbWVudGVkQnV0dG9uPlxuXHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VnbWVudGVkQnV0dG9uSXRlbXMoKTogc3RyaW5nW10ge1xuXHRjb25zdCBzZWdtZW50ZWRCdXR0b25JdGVtcyA9IFtdO1xuXHRpZiAoQ29tbW9uSGVscGVyLmlzRGVza3RvcCgpKSB7XG5cdFx0c2VnbWVudGVkQnV0dG9uSXRlbXMucHVzaChcblx0XHRcdGdldFNlZ21lbnRlZEJ1dHRvbkl0ZW0oXCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fSFlCUklEX1NFR01FTlRFRF9CVVRUT05fSVRFTV9UT09MVElQfVwiLCBcIkh5YnJpZFwiLCBcInNhcC1pY29uOi8vY2hhcnQtdGFibGUtdmlld1wiKVxuXHRcdCk7XG5cdH1cblx0c2VnbWVudGVkQnV0dG9uSXRlbXMucHVzaChcblx0XHRnZXRTZWdtZW50ZWRCdXR0b25JdGVtKFwie3NhcC5mZS5pMThuPk1fQ09NTU9OX0NIQVJUX1NFR01FTlRFRF9CVVRUT05fSVRFTV9UT09MVElQfVwiLCBcIkNoYXJ0XCIsIFwic2FwLWljb246Ly9iYXItY2hhcnRcIilcblx0KTtcblx0c2VnbWVudGVkQnV0dG9uSXRlbXMucHVzaChcblx0XHRnZXRTZWdtZW50ZWRCdXR0b25JdGVtKFwie3NhcC5mZS5pMThuPk1fQ09NTU9OX1RBQkxFX1NFR01FTlRFRF9CVVRUT05fSVRFTV9UT09MVElQfVwiLCBcIlRhYmxlXCIsIFwic2FwLWljb246Ly90YWJsZS12aWV3XCIpXG5cdCk7XG5cdHJldHVybiBzZWdtZW50ZWRCdXR0b25JdGVtcztcbn1cblxuZnVuY3Rpb24gZ2V0U2VnbWVudGVkQnV0dG9uSXRlbSh0b29sdGlwOiBzdHJpbmcsIGtleTogc3RyaW5nLCBpY29uOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gPFNlZ21lbnRlZEJ1dHRvbkl0ZW0gdG9vbHRpcD17dG9vbHRpcH0ga2V5PXtrZXl9IGljb249e2ljb259IC8+O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGFubm90YXRpb24gcGF0aCBwb2ludGluZyB0byB0aGUgdmlzdWFsaXphdGlvbiBhbm5vdGF0aW9uIChDaGFydCkuXG4gKiBAcGFyYW0gY29udGV4dE9iamVjdFBhdGggVGhlIGRhdGFtb2RlbCBvYmplY3QgcGF0aCBmb3IgdGhlIGNoYXJ0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBhbm5vdGF0aW9uIHBhdGhcbiAqL1xuZnVuY3Rpb24gZ2V0VmlzdWFsaXphdGlvblBhdGgoXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0VHlwZSB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBQcmVzZW50YXRpb25WYXJpYW50Pixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogc3RyaW5nIHtcblx0Y29uc3QgbWV0YVBhdGggPSBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGNvbnRleHRPYmplY3RQYXRoKTtcblxuXHQvLyBmYWxsYmFjayB0byBkZWZhdWx0IENoYXJ0IGlmIG1ldGFQYXRoIGlzIG5vdCBzZXRcblx0aWYgKCFtZXRhUGF0aCkge1xuXHRcdExvZy5lcnJvcihgTWlzc2luZyBtZXRhUGF0aCBwYXJhbWV0ZXIgZm9yIENoYXJ0YCk7XG5cdFx0cmV0dXJuIGBAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gO1xuXHR9XG5cblx0aWYgKGNvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnQpIHtcblx0XHRyZXR1cm4gbWV0YVBhdGg7IC8vIE1ldGFQYXRoIGlzIGFscmVhZHkgcG9pbnRpbmcgdG8gYSBDaGFydFxuXHR9XG5cblx0Ly9OZWVkIHRvIHN3aXRjaCB0byB0aGUgY29udGV4dCByZWxhdGVkIHRoZSBQViBvciBTUFZcblx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKG1ldGFQYXRoKTtcblxuXHRsZXQgdmlzdWFsaXphdGlvbnM6IFZpc3VhbGl6YXRpb25BbmRQYXRoW10gPSBbXTtcblx0c3dpdGNoIChjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LnRlcm0pIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRpZiAoY29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0dmlzdWFsaXphdGlvbnMgPSBnZXRWaXN1YWxpemF0aW9uc0Zyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdGNvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdCxcblx0XHRcdFx0XHRtZXRhUGF0aCxcblx0XHRcdFx0XHRyZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudDpcblx0XHRcdHZpc3VhbGl6YXRpb25zID0gZ2V0VmlzdWFsaXphdGlvbnNGcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0Y29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LFxuXHRcdFx0XHRtZXRhUGF0aCxcblx0XHRcdFx0cmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdGNvbnN0IGNoYXJ0Vml6ID0gdmlzdWFsaXphdGlvbnMuZmluZCgodml6KSA9PiB7XG5cdFx0cmV0dXJuIHZpei52aXN1YWxpemF0aW9uLnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkNoYXJ0O1xuXHR9KTtcblxuXHRpZiAoY2hhcnRWaXopIHtcblx0XHRyZXR1cm4gY2hhcnRWaXouYW5ub3RhdGlvblBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZmFsbGJhY2sgdG8gZGVmYXVsdCBDaGFydCBpZiBhbm5vdGF0aW9uIG1pc3NpbmcgaW4gUFZcblx0XHRMb2cuZXJyb3IoYEJhZCBtZXRhUGF0aCBwYXJhbWV0ZXIgZm9yIGNoYXJ0OiAke2NvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdD8udGVybX1gKTtcblx0XHRyZXR1cm4gYEAke1VJQW5ub3RhdGlvblRlcm1zLkNoYXJ0fWA7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0VmlzaWJsZShkYXRhRmllbGRDb250ZXh0OiBDb250ZXh0LCBjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogc3RyaW5nIHwgYm9vbGVhbiB7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdGlmIChkYXRhRmllbGRbYEAke1VJQW5ub3RhdGlvblRlcm1zLkhpZGRlbn1gXSAmJiBkYXRhRmllbGRbYEAke1VJQW5ub3RhdGlvblRlcm1zLkhpZGRlbn1gXS4kUGF0aCkge1xuXHRcdGNvbnN0IGhpZGRlblBhdGhDb250ZXh0ID0gY2hhcnRCbG9jay5fbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFxuXHRcdFx0ZGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCkgKyBgL0Ake1VJQW5ub3RhdGlvblRlcm1zLkhpZGRlbn0vJFBhdGhgLFxuXHRcdFx0ZGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF0uJFBhdGhcblx0XHQpO1xuXHRcdHJldHVybiBDaGFydEhlbHBlci5nZXRIaWRkZW5QYXRoRXhwcmVzc2lvbkZvclRhYmxlQWN0aW9uc0FuZElCTihkYXRhRmllbGRbYEAke1VJQW5ub3RhdGlvblRlcm1zLkhpZGRlbn1gXS4kUGF0aCwge1xuXHRcdFx0Y29udGV4dDogaGlkZGVuUGF0aENvbnRleHRcblx0XHR9KTtcblx0fSBlbHNlIGlmIChkYXRhRmllbGRbYEAke1VJQW5ub3RhdGlvblRlcm1zLkhpZGRlbn1gXSkge1xuXHRcdHJldHVybiAhZGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcnRDb252ZXJ0ZXJDb250ZXh0KFxuXHRwcm9wZXJ0aWVzOiBDaGFydEJsb2NrLFxuXHRvcmlnaW5hbFZpZXdEYXRhOiBQYXJ0aWFsPFZpZXdEYXRhPixcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8Q2hhcnRDb250ZXh0T2JqZWN0UGF0aD4sXG5cdGRpYWdub3N0aWNzOiBEaWFnbm9zdGljcyxcblx0ZXh0cmFQYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+IHtcblx0bGV0IHZpZXdEYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgb3JpZ2luYWxWaWV3RGF0YSk7XG5cdGRlbGV0ZSB2aWV3RGF0YS5yZXNvdXJjZU1vZGVsO1xuXHRkZWxldGUgdmlld0RhdGEuYXBwQ29tcG9uZW50O1xuXHR2aWV3RGF0YSA9IGRlZXBDbG9uZSh2aWV3RGF0YSk7XG5cdGxldCBjb250cm9sQ29uZmlndXJhdGlvbiA9IHt9O1xuXG5cdC8vIE9ubHkgbWVyZ2UgaW4gcGFnZSBjb250cm9sIGNvbmZpZ3VyYXRpb24gaWYgdGhlIGJ1aWxkaW5nIGJsb2NrIGlzIG9uIHRoZSBzYW1lIGNvbnRleHRcblx0Y29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChjb250ZXh0T2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24gPz8gY29udGV4dE9iamVjdFBhdGgpO1xuXHRjb25zdCBlbnRpdHlTZXROYW1lID0gY29udGV4dE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uPy50YXJnZXRFbnRpdHlTZXQ/Lm5hbWUgPz8gY29udGV4dE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0Py5uYW1lO1xuXHRpZiAoXG5cdFx0cmVsYXRpdmVQYXRoID09PSBvcmlnaW5hbFZpZXdEYXRhPy5jb250ZXh0UGF0aCB8fFxuXHRcdHJlbGF0aXZlUGF0aCA9PT0gYC8ke29yaWdpbmFsVmlld0RhdGE/LmVudGl0eVNldH1gIHx8XG5cdFx0ZW50aXR5U2V0TmFtZSA9PT0gb3JpZ2luYWxWaWV3RGF0YT8uZW50aXR5U2V0XG5cdCkge1xuXHRcdGNvbnRyb2xDb25maWd1cmF0aW9uID0gdmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24hO1xuXHR9XG5cdHZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uID0gbWVyZ2UoY29udHJvbENvbmZpZ3VyYXRpb24sIGV4dHJhUGFyYW1zIHx8IHt9KSBhcyBDb250cm9sQ29uZmlndXJhdGlvbjtcblxuXHRyZXR1cm4gQ29udmVydGVyQ29udGV4dC5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oXG5cdFx0Y29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZSxcblx0XHRwcm9wZXJ0aWVzLl9tZXRhTW9kZWwsXG5cdFx0ZGlhZ25vc3RpY3MsXG5cdFx0bWVyZ2UsXG5cdFx0Y29udGV4dE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLFxuXHRcdG5ldyBNYW5pZmVzdFdyYXBwZXIodmlld0RhdGEgYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3MpXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnZlcnRlckNvbnRleHQoXG5cdGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2ssXG5cdHZpZXdEYXRhOiBWaWV3RGF0YSxcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8Q2hhcnRDb250ZXh0T2JqZWN0UGF0aD4sXG5cdGRpYWdub3N0aWNzOiBEaWFnbm9zdGljc1xuKTogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+IHtcblx0Y29uc3QgaW5pdGlhbENvbnZlcnRlckNvbnRleHQgPSBnZXRDaGFydENvbnZlcnRlckNvbnRleHQoY2hhcnRCbG9jaywgdmlld0RhdGEsIGNvbnRleHRPYmplY3RQYXRoLCBkaWFnbm9zdGljcyk7XG5cdGNvbnN0IHZpc3VhbGl6YXRpb25QYXRoID0gZ2V0VmlzdWFsaXphdGlvblBhdGgoY29udGV4dE9iamVjdFBhdGgsIGluaXRpYWxDb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZXh0cmFQYXJhbXMgPSBnZXRFeHRyYVBhcmFtcyhjaGFydEJsb2NrLCB2aXN1YWxpemF0aW9uUGF0aCk7XG5cdHJldHVybiBnZXRDaGFydENvbnZlcnRlckNvbnRleHQoY2hhcnRCbG9jaywgdmlld0RhdGEsIGNvbnRleHRPYmplY3RQYXRoLCBkaWFnbm9zdGljcywgZXh0cmFQYXJhbXMpO1xufVxuXG5mdW5jdGlvbiBtb2RpZnlJZGVudGlmaWVycyhjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogdm9pZCB7XG5cdGlmIChjaGFydEJsb2NrLl9hcHBseUlkVG9Db250ZW50KSB7XG5cdFx0Y2hhcnRCbG9jay5fYmxvY2tJZCA9IGNoYXJ0QmxvY2suaWQucmVwbGFjZSgvOjpDaGFydCQvLCBcIlwiKTtcblx0XHRjaGFydEJsb2NrLl9jb250ZW50SWQgPSBjaGFydEJsb2NrLl9ibG9ja0lkO1xuXHR9IGVsc2Uge1xuXHRcdGNoYXJ0QmxvY2suX2Jsb2NrSWQgPSBjaGFydEJsb2NrLmlkO1xuXHRcdGNoYXJ0QmxvY2suX2NvbnRlbnRJZCA9IGdldENvbnRlbnRJZChjaGFydEJsb2NrLmlkKTtcblx0fVxufVxuXG5mdW5jdGlvbiBpbml0aWFsaXNlKFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrLFxuXHR2aWV3RGF0YTogVmlld0RhdGEsXG5cdGRpYWdub3N0aWNzOiBEaWFnbm9zdGljcyxcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8Q2hhcnRDb250ZXh0T2JqZWN0UGF0aD5cbik6IHZvaWQge1xuXHRjb25zdCBtZXRhQ29udGV4dFBhdGggPSBjaGFydEJsb2NrLmdldE1ldGFQYXRoT2JqZWN0KGNoYXJ0QmxvY2subWV0YVBhdGgsIGNoYXJ0QmxvY2suX3Jlc29sdmVkQ29udGV4dFBhdGgpO1xuXHRjaGFydEJsb2NrLl9tZXRhTW9kZWwgPSBjaGFydEJsb2NrLl9nZXRPd25lcigpPy5wcmVwcm9jZXNzb3JDb250ZXh0Py5tb2RlbHMubWV0YU1vZGVsIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRjaGFydEJsb2NrLl9tZXRhUGF0aENvbnRleHQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobWV0YUNvbnRleHRQYXRoIS5nZXRQYXRoKCkpITtcblx0Y2hhcnRCbG9jay5fY29udGV4dCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChjaGFydEJsb2NrLmNvbnRleHRQYXRoID8/IG1ldGFDb250ZXh0UGF0aD8uZ2V0Q29udGV4dFBhdGgoKSkhO1xuXG5cdGNvbnN0IGNvbnZlcnRlckNvbnRleHQgPSBnZXRDb252ZXJ0ZXJDb250ZXh0KGNoYXJ0QmxvY2ssIHZpZXdEYXRhLCBjb250ZXh0T2JqZWN0UGF0aCwgZGlhZ25vc3RpY3MpO1xuXHRjb25zdCB2aWV3Q29uZmlnID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKT8uZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKTtcblx0Y29uc3QgaXNNdWx0aVRhYnMgPSAodmlld0NvbmZpZz8ucGF0aHM/Lmxlbmd0aCBhcyBudW1iZXIpID4gMTtcblx0Y29uc3QgaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA9XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKT8uaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZTtcblxuXHRjaGFydEJsb2NrLl9jaGFydENvbnRleHQgPSBDaGFydEhlbHBlci5nZXRVaUNoYXJ0KGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dCkhO1xuXHRjaGFydEJsb2NrLl9jaGFydCA9IGNoYXJ0QmxvY2suX2NoYXJ0Q29udGV4dC5nZXRPYmplY3QoKSBhcyBDaGFydFR5cGU7XG5cdGNoYXJ0QmxvY2suX2Jsb2NrQWN0aW9ucyA9IFtdO1xuXHRjaGFydEJsb2NrLl9jb21tYW5kQWN0aW9ucyA9IFtdO1xuXHRtb2RpZnlJZGVudGlmaWVycyhjaGFydEJsb2NrKTtcblx0aWYgKGNoYXJ0QmxvY2suX2NoYXJ0KSB7XG5cdFx0Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24gPSBjcmVhdGVDaGFydERlZmluaXRpb24oXG5cdFx0XHRjaGFydEJsb2NrLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdGNvbnRleHRPYmplY3RQYXRoLFxuXHRcdFx0Y2hhcnRCbG9jay5fY2hhcnRDb250ZXh0LmdldFBhdGgoKVxuXHRcdCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbiA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5jb2xsZWN0aW9uKSBhcyBDb250ZXh0O1xuXHRcdC8vIEFQSSBQcm9wZXJ0aWVzXG5cdFx0Y2hhcnRCbG9jay5uYXZpZ2F0aW9uUGF0aCA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLm5hdmlnYXRpb25QYXRoO1xuXHRcdGNoYXJ0QmxvY2suYXV0b0JpbmRPbkluaXQgPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5hdXRvQmluZE9uSW5pdDtcblx0XHRjaGFydEJsb2NrLnZpelByb3BlcnRpZXMgPSBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi52aXpQcm9wZXJ0aWVzO1xuXHRcdGNoYXJ0QmxvY2suY2hhcnRBY3Rpb25zID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uYWN0aW9ucztcblx0XHRjaGFydEJsb2NrLmZpbHRlciA9IGdldEZpbHRlckJhcihjaGFydEJsb2NrKTtcblx0XHRsZXQgcGVyc29uYWxpemF0aW9uOiBDaGFydFAxM25UeXBlO1xuXHRcdGlmIChjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8ucGVyc29uYWxpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBlcnNvbmFsaXphdGlvbiA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLnBlcnNvbmFsaXphdGlvbjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3dpdGNoIChjaGFydEJsb2NrLnBlcnNvbmFsaXphdGlvbikge1xuXHRcdFx0XHRjYXNlIFwiZmFsc2VcIjpcblx0XHRcdFx0XHRwZXJzb25hbGl6YXRpb24gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJ0cnVlXCI6XG5cdFx0XHRcdFx0cGVyc29uYWxpemF0aW9uID0gT2JqZWN0LnZhbHVlcyhwZXJzb25hbGl6YXRpb25WYWx1ZXMpLmpvaW4oXCIsXCIpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHBlcnNvbmFsaXphdGlvbiA9IGNoYXJ0QmxvY2sucGVyc29uYWxpemF0aW9uIGFzIHN0cmluZztcblx0XHRcdH1cblx0XHR9XG5cdFx0Y2hlY2tQZXJzb25hbGl6YXRpb25JbkNoYXJ0UHJvcGVydGllcyhwZXJzb25hbGl6YXRpb24sIGNoYXJ0QmxvY2spO1xuXHRcdGNoYXJ0QmxvY2sudmlzaWJsZSA9IGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLnZpc2libGU7XG5cdFx0Y2hhcnRCbG9jay5kcmFmdFN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmlzTWV0YVBhdGhEcmFmdFN1cHBvcnRlZChtZXRhQ29udGV4dFBhdGghKTtcblx0XHRjaGFydEJsb2NrLl9jaGFydFR5cGUgPSBDaGFydEhlbHBlci5mb3JtYXRDaGFydFR5cGUoY2hhcnRCbG9jay5fY2hhcnQuQ2hhcnRUeXBlKTtcblxuXHRcdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IENoYXJ0SGVscGVyLmdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChjaGFydEJsb2NrLl9jaGFydCwge1xuXHRcdFx0Y29udGV4dDogY2hhcnRCbG9jay5fY2hhcnRDb250ZXh0XG5cdFx0fSk7XG5cblx0XHRpZiAoT2JqZWN0LmtleXMoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmNvbW1hbmRBY3Rpb25zIGFzIG9iamVjdCkubGVuZ3RoID4gMCkge1xuXHRcdFx0T2JqZWN0LmtleXMoY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmNvbW1hbmRBY3Rpb25zIGFzIG9iamVjdCkuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0Y29uc3QgYWN0aW9uID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmNvbW1hbmRBY3Rpb25zW2tleV07XG5cdFx0XHRcdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBjcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24pO1xuXHRcdFx0XHRjb25zdCBkYXRhRmllbGRDb250ZXh0ID0gYWN0aW9uLmFubm90YXRpb25QYXRoICYmIGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0XHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRDb250ZXh0ICYmIGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGNvbnN0IGNoYXJ0T3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUob3BlcmF0aW9uQXZhaWxhYmxlTWFwKTtcblx0XHRcdFx0cHVzaEFjdGlvbkNvbW1hbmQoYWN0aW9uQ29udGV4dCwgZGF0YUZpZWxkLCBjaGFydE9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgYWN0aW9uLCBjaGFydEJsb2NrKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRjaGFydEJsb2NrLm1lYXN1cmVzID0gZ2V0Q2hhcnRNZWFzdXJlcyhjaGFydEJsb2NrKTtcblx0XHRjb25zdCBwcmVzZW50YXRpb25QYXRoID0gQ29tbW9uSGVscGVyLmNyZWF0ZVByZXNlbnRhdGlvblBhdGhDb250ZXh0KGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dCk7XG5cdFx0Y2hhcnRCbG9jay5fc29ydENvbmRpdGlvbnMgPSBDaGFydEhlbHBlci5nZXRTb3J0Q29uZGl0aW9ucyhcblx0XHRcdGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dCxcblx0XHRcdGNoYXJ0QmxvY2suX21ldGFQYXRoQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdHByZXNlbnRhdGlvblBhdGguZ2V0UGF0aCgpLFxuXHRcdFx0Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uYXBwbHlTdXBwb3J0ZWRcblx0XHQpO1xuXHRcdGNvbnN0IGNoYXJ0QWN0aW9uc0NvbnRleHQgPSBjaGFydEJsb2NrLl9tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXG5cdFx0XHRjaGFydEJsb2NrLl9jaGFydENvbnRleHQuZ2V0UGF0aCgpICsgXCIvQWN0aW9uc1wiLFxuXHRcdFx0Y2hhcnRCbG9jay5fY2hhcnQuQWN0aW9ucyBhcyB1bmtub3duIGFzIENvbnRleHRcblx0XHQpO1xuXHRcdGNvbnN0IHRhcmdldENvbGxlY3Rpb25QYXRoID0gQ29tbW9uSGVscGVyLmdldFRhcmdldENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb24pO1xuXHRcdGNvbnN0IHRhcmdldENvbGxlY3Rpb25QYXRoQ29udGV4dCA9IGNoYXJ0QmxvY2suX21ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dCh0YXJnZXRDb2xsZWN0aW9uUGF0aCwgY29sbGVjdGlvbikhO1xuXHRcdGNvbnN0IGFjdGlvbnNPYmplY3QgPSBjb250ZXh0T2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcy5yZXNvbHZlUGF0aChjaGFydEFjdGlvbnNDb250ZXh0LmdldFBhdGgoKSk/LnRhcmdldDtcblxuXHRcdGNoYXJ0QmxvY2suX2N1c3RvbURhdGEgPSB7XG5cdFx0XHR0YXJnZXRDb2xsZWN0aW9uUGF0aDogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29sbGVjdGlvbixcblx0XHRcdGVudGl0eVNldDpcblx0XHRcdFx0dHlwZW9mIHRhcmdldENvbGxlY3Rpb25QYXRoQ29udGV4dC5nZXRPYmplY3QoKSA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHRcdD8gdGFyZ2V0Q29sbGVjdGlvblBhdGhDb250ZXh0LmdldE9iamVjdCgpXG5cdFx0XHRcdFx0OiB0YXJnZXRDb2xsZWN0aW9uUGF0aENvbnRleHQuZ2V0T2JqZWN0KFwiQHNhcHVpLm5hbWVcIiksXG5cdFx0XHRlbnRpdHlUeXBlOiBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5jb2xsZWN0aW9uICsgXCIvXCIsXG5cdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04ucGFyc2Uob3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdG11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zOiBBY3Rpb25IZWxwZXIuZ2V0TXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnMoYWN0aW9uc09iamVjdCBhcyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzW10pICsgXCJcIixcblx0XHRcdHNlZ21lbnRlZEJ1dHRvbklkOiBnZW5lcmF0ZShbY2hhcnRCbG9jay5fYmxvY2tJZCwgXCJTZWdtZW50ZWRCdXR0b25cIiwgXCJUZW1wbGF0ZUNvbnRlbnRWaWV3XCJdKSxcblx0XHRcdGN1c3RvbUFnZzogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmN1c3RvbUFnZyxcblx0XHRcdHRyYW5zQWdnOiBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8udHJhbnNBZ2csXG5cdFx0XHRhcHBseVN1cHBvcnRlZDogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmFwcGx5U3VwcG9ydGVkLFxuXHRcdFx0dml6UHJvcGVydGllczogSlNPTi5wYXJzZShjaGFydEJsb2NrLnZpelByb3BlcnRpZXMpLFxuXHRcdFx0ZHJhZnRTdXBwb3J0ZWQ6IGNoYXJ0QmxvY2suZHJhZnRTdXBwb3J0ZWQsXG5cdFx0XHRtdWx0aVZpZXdzOiBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8ubXVsdGlWaWV3cyB8fCAoIWhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMgJiYgaXNNdWx0aVRhYnMpLFxuXHRcdFx0c2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGg6IHtcblx0XHRcdFx0ZGF0YTogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LnNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRQYXRoXG5cdFx0XHR9LFxuXHRcdFx0Y2hhcnREaW1lbnNpb25LZXlBbmRSb2xlOiBjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbj8uY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlLFxuXHRcdFx0Y2hhcnRNZWFzdXJlS2V5QW5kUm9sZTogY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24/LmNoYXJ0TWVhc3VyZUtleUFuZFJvbGVcblx0XHR9O1xuXHRcdGlmIChjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5pc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQpIHtcblx0XHRcdGNoYXJ0QmxvY2suX2N1c3RvbURhdGEuZW50aXR5U2V0ID0gY2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uY29sbGVjdGlvbi5zdWJzdHJpbmcoMSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGZhbGxiYWNrIHRvIGRpc3BsYXkgZW1wdHkgY2hhcnRcblx0XHRjaGFydEJsb2NrLmF1dG9CaW5kT25Jbml0ID0gZmFsc2U7XG5cdFx0Y2hhcnRCbG9jay52aXNpYmxlID0gXCJ0cnVlXCI7XG5cdFx0Y2hhcnRCbG9jay5uYXZpZ2F0aW9uUGF0aCA9IFwiXCI7XG5cblx0XHRjaGFydEJsb2NrLl9jdXN0b21EYXRhID0ge1xuXHRcdFx0dGFyZ2V0Q29sbGVjdGlvblBhdGg6IFwiXCIsXG5cdFx0XHRlbnRpdHlTZXQ6IFwiXCIsXG5cdFx0XHRlbnRpdHlUeXBlOiBcIlwiLFxuXHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBcIlwiLFxuXHRcdFx0bXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnM6IFwiXCIsXG5cdFx0XHRzZWdtZW50ZWRCdXR0b25JZDogXCJcIixcblx0XHRcdGN1c3RvbUFnZzoge30sXG5cdFx0XHR0cmFuc0FnZzoge30sXG5cdFx0XHRhcHBseVN1cHBvcnRlZDoge30sXG5cdFx0XHR2aXpQcm9wZXJ0aWVzOiB7fVxuXHRcdH07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyQmFyKGNoYXJ0QmxvY2s6IENoYXJ0QmxvY2spOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBmaWx0ZXJCYXIgPSBFbGVtZW50LmdldEVsZW1lbnRCeUlkKGNoYXJ0QmxvY2suZmlsdGVyQmFyKTtcblx0aWYgKGNoYXJ0QmxvY2suZmlsdGVyQmFyICYmIGZpbHRlckJhcj8uaXNBPE1hY3JvQVBJPihcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckJhckFQSVwiKSkge1xuXHRcdHJldHVybiBnZXRDb250ZW50SWQoY2hhcnRCbG9jay5maWx0ZXJCYXIpO1xuXHR9IGVsc2UgaWYgKGZpbHRlckJhcj8uaXNBPENvbnRyb2w+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWx0ZXJCYXJcIikpIHtcblx0XHRyZXR1cm4gY2hhcnRCbG9jay5maWx0ZXJCYXI7XG5cdH0gZWxzZSBpZiAoY2hhcnRCbG9jay5maWx0ZXJCYXIpIHtcblx0XHRyZXR1cm4gZ2V0Q29udGVudElkKGNoYXJ0QmxvY2suZmlsdGVyQmFyKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXREZWxlZ2F0ZShjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogb2JqZWN0IHtcblx0aWYgKGNoYXJ0QmxvY2suY2hhcnREZWxlZ2F0ZSkge1xuXHRcdChjaGFydEJsb2NrLmNoYXJ0RGVsZWdhdGUgYXMgQ2hhcnREZWxlZ2F0ZSkucGF5bG9hZC5zZWxlY3Rpb25Nb2RlID1cblx0XHRcdGNoYXJ0QmxvY2suY2hhcnREZWZpbml0aW9uLnNlbGVjdGlvbk1vZGU/LnRvVXBwZXJDYXNlKCkgPz9cblx0XHRcdChjaGFydEJsb2NrLmNoYXJ0RGVsZWdhdGUgYXMgQ2hhcnREZWxlZ2F0ZSkucGF5bG9hZC5zZWxlY3Rpb25Nb2RlID8/XG5cdFx0XHRcIk1VTFRJUExFXCI7XG5cdH1cblx0cmV0dXJuIGNoYXJ0QmxvY2suY2hhcnREZWxlZ2F0ZVxuXHRcdD8gY2hhcnRCbG9jay5jaGFydERlbGVnYXRlXG5cdFx0OiB7XG5cdFx0XHRcdG5hbWU6IFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydERlbGVnYXRlXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0XHRjaGFydENvbnRleHRQYXRoOiBjaGFydEJsb2NrLl9jdXN0b21EYXRhLnRhcmdldENvbGxlY3Rpb25QYXRoLFxuXHRcdFx0XHRcdHBhcmFtZXRlcnM6IHtcblx0XHRcdFx0XHRcdCQkZ3JvdXBJZDogXCIkYXV0by5Xb3JrZXJzXCJcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHNlbGVjdGlvbk1vZGU6XG5cdFx0XHRcdFx0XHRjaGFydEJsb2NrLmNoYXJ0RGVmaW5pdGlvbi5zZWxlY3Rpb25Nb2RlPy50b1VwcGVyQ2FzZSgpID8/IGNoYXJ0QmxvY2suc2VsZWN0aW9uTW9kZT8udG9VcHBlckNhc2UoKSA/PyBcIk1VTFRJUExFXCJcblx0XHRcdFx0fVxuXHRcdCAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VzdG9tRGF0YShjaGFydEJsb2NrOiBDaGFydEJsb2NrKTogQ3VzdG9tRGF0YVtdIHtcblx0cmV0dXJuIFtcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1widGFyZ2V0Q29sbGVjdGlvblBhdGhcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEudGFyZ2V0Q29sbGVjdGlvblBhdGh9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJlbnRpdHlTZXRcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuZW50aXR5U2V0fSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wiZW50aXR5VHlwZVwifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5lbnRpdHlUeXBlfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wib3BlcmF0aW9uQXZhaWxhYmxlTWFwXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLm9wZXJhdGlvbkF2YWlsYWJsZU1hcH0gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcIm11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLm11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wic2VnbWVudGVkQnV0dG9uSWRcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuc2VnbWVudGVkQnV0dG9uSWR9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJjdXN0b21BZ2dcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuY3VzdG9tQWdnfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1widHJhbnNBZ2dcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEudHJhbnNBZ2d9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJhcHBseVN1cHBvcnRlZFwifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5hcHBseVN1cHBvcnRlZH0gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcInZpelByb3BlcnRpZXNcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEudml6UHJvcGVydGllc30gLz4sXG5cdFx0PEN1c3RvbURhdGEga2V5PXtcImRyYWZ0U3VwcG9ydGVkXCJ9IHZhbHVlPXtjaGFydEJsb2NrLl9jdXN0b21EYXRhLmRyYWZ0U3VwcG9ydGVkfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wibXVsdGlWaWV3c1wifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5tdWx0aVZpZXdzfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wic2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGhcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGh9IC8+LFxuXHRcdDxDdXN0b21EYXRhIGtleT17XCJjaGFydERpbWVuc2lvbktleUFuZFJvbGVcIn0gdmFsdWU9e2NoYXJ0QmxvY2suX2N1c3RvbURhdGEuY2hhcnREaW1lbnNpb25LZXlBbmRSb2xlfSAvPixcblx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wiY2hhcnRNZWFzdXJlS2V5QW5kUm9sZVwifSB2YWx1ZT17Y2hhcnRCbG9jay5fY3VzdG9tRGF0YS5jaGFydE1lYXN1cmVLZXlBbmRSb2xlfSAvPlxuXHRdO1xufVxuXG5mdW5jdGlvbiBnZXROb0RhdGEoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IElsbHVzdHJhdGVkTWVzc2FnZSB8IHVuZGVmaW5lZCB7XG5cdGlmIChjaGFydEJsb2NrLl9jdXN0b21EYXRhLnRhcmdldENvbGxlY3Rpb25QYXRoID09PSBcIlwiKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHJldHVybiAoXG5cdFx0PElsbHVzdHJhdGVkTWVzc2FnZVxuXHRcdFx0aWxsdXN0cmF0aW9uU2l6ZT17SWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZS5BdXRvfVxuXHRcdFx0aWxsdXN0cmF0aW9uVHlwZT17SWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5CZWZvcmVTZWFyY2h9XG5cdFx0XHR0aXRsZT17Y2hhcnRCbG9jay5nZXRUcmFuc2xhdGVkVGV4dChcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVElUTEVfVEVYVFwiKX1cblx0XHRcdGRlc2NyaXB0aW9uPXtjaGFydEJsb2NrLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUXCIpfVxuXHRcdFx0ZW5hYmxlRGVmYXVsdFRpdGxlQW5kRGVzY3JpcHRpb249e2ZhbHNlfVxuXHRcdFx0ZW5hYmxlVmVydGljYWxSZXNwb25zaXZlbmVzcz17dHJ1ZX1cblx0XHQ+PC9JbGx1c3RyYXRlZE1lc3NhZ2U+XG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZGNDaGFydFRlbXBsYXRlKFxuXHRjaGFydEJsb2NrOiBDaGFydEJsb2NrLFxuXHR2aWV3RGF0YTogVmlld0RhdGEsXG5cdGRpYWdub3N0aWNzOiBEaWFnbm9zdGljcyxcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8Q2hhcnRDb250ZXh0T2JqZWN0UGF0aD5cbik6IE1kY0NoYXJ0IHtcblx0aW5pdGlhbGlzZShjaGFydEJsb2NrLCB2aWV3RGF0YSwgZGlhZ25vc3RpY3MsIGNvbnRleHRPYmplY3RQYXRoKTtcblx0Y2hhcnRCbG9jay5sYXlvdXREYXRhID0gPEZsZXhJdGVtRGF0YSBncm93RmFjdG9yPVwiMVwiIHNocmlua0ZhY3Rvcj1cIjFcIiAvPjtcblxuXHRyZXR1cm4gKFxuXHRcdDxNZGNDaGFydFxuXHRcdFx0YmluZGluZz17eyBpbnRlcm5hbDogXCJjb250cm9scy9cIiArIGNoYXJ0QmxvY2suX2Jsb2NrSWQgfX1cblx0XHRcdGlkPXtjaGFydEJsb2NrLl9jb250ZW50SWR9XG5cdFx0XHRjaGFydFR5cGU9e2NoYXJ0QmxvY2suX2NoYXJ0VHlwZX1cblx0XHRcdHNvcnRDb25kaXRpb25zPXtjaGFydEJsb2NrLl9zb3J0Q29uZGl0aW9uc31cblx0XHRcdGhlYWRlcj17Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uaGVhZGVyID8/IGNoYXJ0QmxvY2suaGVhZGVyID8/IGNoYXJ0QmxvY2suX2NoYXJ0Py5UaXRsZT8udG9TdHJpbmcoKSA/PyBcIlwifVxuXHRcdFx0aGVhZGVyVmlzaWJsZT17Y2hhcnRCbG9jay5jaGFydERlZmluaXRpb24uaGVhZGVyVmlzaWJsZSA/PyBjaGFydEJsb2NrLmhlYWRlclZpc2libGV9XG5cdFx0XHRtaW5IZWlnaHQ9e0RldmljZS5zeXN0ZW0ucGhvbmUgPyBcIjgwdmhcIiA6IFwiNDAwcHhcIn1cblx0XHRcdGhlaWdodD1cIjEwMCVcIlxuXHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdGhlYWRlckxldmVsPXtjaGFydEJsb2NrLmhlYWRlckxldmVsfVxuXHRcdFx0aGVhZGVyU3R5bGU9e2NoYXJ0QmxvY2suaGVhZGVyU3R5bGV9XG5cdFx0XHRwMTNuTW9kZT17KGNoYXJ0QmxvY2suX3BlcnNvbmFsaXphdGlvbiEgYXMgc3RyaW5nKT8uc3BsaXQoXCIsXCIpfVxuXHRcdFx0ZmlsdGVyPXtjaGFydEJsb2NrLmZpbHRlcn1cblx0XHRcdG5vRGF0YVRleHQ9e1xuXHRcdFx0XHRjaGFydEJsb2NrLl9jdXN0b21EYXRhLnRhcmdldENvbGxlY3Rpb25QYXRoID09PSBcIlwiXG5cdFx0XHRcdFx0PyBjaGFydEJsb2NrLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9DSEFSVF9OT19BTk5PVEFUSU9OX1NFVF9URVhUXCIpXG5cdFx0XHRcdFx0OiBjaGFydEJsb2NrLm5vRGF0YVRleHRcblx0XHRcdH1cblx0XHRcdGF1dG9CaW5kT25Jbml0PXtjaGFydEJsb2NrLmF1dG9CaW5kT25Jbml0fVxuXHRcdFx0ZGVsZWdhdGU9e2dldERlbGVnYXRlKGNoYXJ0QmxvY2spfVxuXHRcdFx0dmlzaWJsZT17Y2hhcnRCbG9jay52aXNpYmxlfVxuXHRcdD5cblx0XHRcdHt7XG5cdFx0XHRcdGN1c3RvbURhdGE6IGdldEN1c3RvbURhdGEoY2hhcnRCbG9jayksXG5cdFx0XHRcdGRlcGVuZGVudHM6IFtcblx0XHRcdFx0XHRnZXREZXBlbmRlbnRzKGNoYXJ0QmxvY2ssIGNoYXJ0QmxvY2suX2NoYXJ0Q29udGV4dCksXG5cdFx0XHRcdFx0Z2V0UGVyc2lzdGVuY2VQcm92aWRlcihjaGFydEJsb2NrKSxcblx0XHRcdFx0XHRnZXRBY2NBSUFjdGlvbkludmlzaWJsZVRleHQoY2hhcnRCbG9jaylcblx0XHRcdFx0XSxcblx0XHRcdFx0aXRlbXM6IGdldEl0ZW1zKGNoYXJ0QmxvY2spLFxuXHRcdFx0XHRhY3Rpb25zOiBjaGFydEJsb2NrLmNoYXJ0QWN0aW9ucyA/IGdldFRvb2xiYXJBY3Rpb25zKGNoYXJ0QmxvY2spIDogY2hhcnRCbG9jay5fYmxvY2tBY3Rpb25zLFxuXHRcdFx0XHR2YXJpYW50OiBjcmVhdGVWYXJpYW50TWFuYWdlbWVudChjaGFydEJsb2NrKSxcblx0XHRcdFx0bm9EYXRhOiBnZXROb0RhdGEoY2hhcnRCbG9jaylcblx0XHRcdH19XG5cdFx0PC9NZGNDaGFydD5cblx0KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIEludmlzaWJsZVRleHQgZm9yIHRoZSBBSSBBY3Rpb24gYnV0dG9ucy5cbiAqIEBwYXJhbSBjaGFydEJsb2NrIENoYXJ0QmxvY2sgaW5zdGFuY2VcbiAqIEByZXR1cm5zIEludmlzaWJsZVRleHQgY29udHJvbFxuICovXG5mdW5jdGlvbiBnZXRBY2NBSUFjdGlvbkludmlzaWJsZVRleHQoY2hhcnRCbG9jazogQ2hhcnRCbG9jayk6IEludmlzaWJsZVRleHQge1xuXHRjb25zdCBpbnZpc2libGVUZXh0QWNjQUlBY3Rpb24gPSBuZXcgSW52aXNpYmxlVGV4dCh7XG5cdFx0aWQ6IGAke2NoYXJ0QmxvY2suZ2V0SWQoKX0tLWZlOjpBaUFjdGlvbjo6QXJpYVRleHRgLFxuXHRcdHRleHQ6IFwie3NhcC5mZS5pMThuPkNfQUNDRVNTSUJJTElUWV9BSV9BQ1RJT05fQVJJQV9URVhUfVwiXG5cdH0pO1xuXHRpbnZpc2libGVUZXh0QWNjQUlBY3Rpb24udG9TdGF0aWMoKTtcblx0cmV0dXJuIGludmlzaWJsZVRleHRBY2NBSUFjdGlvbjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFvR0EsTUFBTUEsV0FBc0MsR0FBRztJQUM5Qyx1REFBdUQsRUFBRSxPQUFPO0lBQ2hFLHVEQUF1RCxFQUFFLE9BQU87SUFDaEUsdURBQXVELEVBQUUsT0FBTztJQUNoRSx1REFBdUQsRUFBRTtFQUMxRCxDQUFDO0VBQUMsSUEyQkdDLHFCQUFxQiwwQkFBckJBLHFCQUFxQjtJQUFyQkEscUJBQXFCO0lBQXJCQSxxQkFBcUI7SUFBckJBLHFCQUFxQjtJQUFyQkEscUJBQXFCO0lBQUEsT0FBckJBLHFCQUFxQjtFQUFBLEVBQXJCQSxxQkFBcUI7RUFrRjFCLFNBQVNDLHFCQUFxQkEsQ0FDN0JDLFVBQXNCLEVBQ3RCQyxnQkFBa0MsRUFDbENDLGlCQUFzRyxFQUN0R0MsV0FBbUIsRUFDRTtJQUNyQixJQUFJQyxpQkFBaUIsR0FBR0Msa0NBQWtDLENBQUNILGlCQUFpQixDQUFDO0lBQzdFLElBQUlJLGNBQXdDLEdBQUcsRUFBRTtJQUNqRCxJQUFJTixVQUFVLENBQUNPLGdCQUFnQixFQUFFQyxTQUFTLENBQUMsQ0FBQyxFQUFFQyxLQUFLLHlEQUE4QyxFQUFFO01BQ2xHSCxjQUFjLEdBQUdOLFVBQVUsQ0FBQ08sZ0JBQWdCLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQUNFLGNBQWM7SUFDeEUsQ0FBQyxNQUFNLElBQUlWLFVBQVUsQ0FBQ08sZ0JBQWdCLEVBQUVDLFNBQVMsQ0FBQyxDQUFDLEVBQUVDLEtBQUssa0VBQXVELEVBQUU7TUFDbEhILGNBQWMsR0FBR04sVUFBVSxDQUFDTyxnQkFBZ0IsQ0FBQ0MsU0FBUyxDQUFDLENBQUMsQ0FBQ0cs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