@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
@@ -318,7 +318,8 @@ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/c
318
318
  href: fileLinkHref,
319
319
  visible: fileStreamNotEmpty,
320
320
  wrapping: "true",
321
- reactiveAreaMode: field.formatOptions?.reactiveAreaMode
321
+ reactiveAreaMode: field.formatOptions?.reactiveAreaMode,
322
+ ariaLabelledBy: field.ariaLabelledBy
322
323
  }),
323
324
  text: _jsx(Text, {
324
325
  emptyIndicatorMode: field.emptyIndicatorMode,
@@ -1022,4 +1023,4 @@ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/c
1022
1023
  };
1023
1024
  return DisplayStyle;
1024
1025
  }, false);
1025
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEaXNwbGF5U3R5bGUiLCJnZXRQcmVjaXNpb25Gb3JDdXJyZW5jeSIsImZpZWxkIiwic2NhbGUiLCJwcm9wZXJ0eSIsInByZWNpc2lvbiIsIk1hdGgiLCJtaW4iLCJnZXRDdXJyZW5jeU9yVW5pdENvbnRyb2wiLCJjdXJyZW5jeU9yVW5pdCIsInZpc2libGVFeHByZXNzaW9uIiwiX2pzeCIsIkxpbmsiLCJ0ZXh0IiwicHJlc3MiLCJldmVudEhhbmRsZXJzIiwiZGlzcGxheUFnZ3JlZ2F0aW9uRGV0YWlscyIsInZpc2libGUiLCJyZWFjdGl2ZUFyZWFNb2RlIiwiZm9ybWF0T3B0aW9ucyIsImNoaWxkcmVuIiwiZGVwZW5kZW50cyIsImNsb25lIiwiZ2V0TnVtYmVyV2l0aFVuaXRPckN1cnJlbmN5QWxpZ25lZFRlbXBsYXRlIiwicmVsYXRpdmVQcm9wZXJ0eVBhdGgiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiZGF0YU1vZGVsUGF0aCIsIm92ZXJhbGxWaXNpYmxlIiwibm90IiwiZXF1YWwiLCJwYXRoSW5Nb2RlbCIsInVuZGVmaW5lZCIsImN1cnJlbmN5IiwiTnVtYmVyV2l0aFVuaXRPckN1cnJlbmN5IiwibnVtYmVyIiwidmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9uIiwidW5pdE9yQ3VycmVuY3kiLCJ1bml0QmluZGluZ0V4cHJlc3Npb24iLCJpc0FuYWx5dGljcyIsIkNvbmRpdGlvbmFsV3JhcHBlciIsImRpc3BsYXlWaXNpYmxlIiwiY29uZGl0aW9uIiwiaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQiLCJjb250ZW50VHJ1ZSIsImNvbnRlbnRGYWxzZSIsImdldEF2YXRhclRlbXBsYXRlIiwiYXZhdGFySWQiLCJfZmxleElkIiwiaWRQcmVmaXgiLCJnZW5lcmF0ZSIsImF2YXRhclZpc2libGUiLCJGaWVsZFRlbXBsYXRpbmciLCJnZXRWaXNpYmxlRXhwcmVzc2lvbiIsImF2YXRhclNyYyIsImdldFZhbHVlQmluZGluZyIsImF2YXRhckRpc3BsYXlTaGFwZSIsImdldEF2YXRhclNoYXBlIiwiRm9ybUVsZW1lbnRXcmFwcGVyIiwiQXZhdGFyIiwiaWQiLCJzcmMiLCJkaXNwbGF5U2l6ZSIsImNsYXNzIiwiaW1hZ2VGaXRUeXBlIiwiZGlzcGxheVNoYXBlIiwiZ2V0QnV0dG9uVGVtcGxhdGUiLCJpY29uIiwic2hvd0ljb25VcmwiLCJjb252ZXJ0ZWRNZXRhUGF0aCIsIkljb25VcmwiLCJMYWJlbCIsInRvb2x0aXAiLCJidXR0b25QcmVzcyIsImJ1dHRvbklzQm91bmQiLCJidXR0b25PcGVyYXRpb25BdmFpbGFibGUiLCJidXR0b25PcGVyYXRpb25BdmFpbGFibGVGb3JtYXR0ZWQiLCJuYXZpZ2F0aW9uQXZhaWxhYmxlIiwiJFR5cGUiLCJvbkRhdGFGaWVsZEFjdGlvbkJ1dHRvbiIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJhbm5vdGF0aW9ucyIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJhY3Rpb25UYXJnZXQiLCJiaW5kaW5nUGFyYW1OYW1lIiwicGFyYW1ldGVycyIsIm5hbWUiLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsInBhdGgiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsIm9uRGF0YUZpZWxkV2l0aElCTiIsIk5hdmlnYXRpb25BdmFpbGFibGUiLCJTdHJpbmciLCJpZ25vcmVOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiYnV0dG9uIiwiQnV0dG9uIiwiZW5hYmxlZCIsIkZpZWxkSGVscGVyIiwiaXNEYXRhRmllbGRBY3Rpb25CdXR0b25WaXNpYmxlIiwiaXNEYXRhRmllbGRBY3Rpb25CdXR0b25FbmFibGVkIiwiaXNBbmFseXRpY2FsQWdncmVnYXRlZFJvdyIsImFuZCIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiVUkiLCJpc05vZGVMZXZlbE5hdmlnYWJsZSIsInR5cGUiLCJidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUJ1dHRvblR5cGUiLCJpc0FjdGlvbkFJT3BlcmF0aW9uIiwiYWlJY29uIiwiZ2V0Q29udGFjdFRlbXBsYXRlIiwiY29udGFjdE1ldGFQYXRoIiwibWV0YVBhdGgiLCJnZXRNb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiY29udGFjdFZpc2libGUiLCJDb250YWN0IiwiYXJpYUxhYmVsbGVkQnkiLCJnZXRQYXRoIiwiY29udGV4dFBhdGgiLCJzaG93RW1wdHlJbmRpY2F0b3IiLCJnZXREYXRhUG9pbnRJbm5lclBhcnQiLCJ3aXRoQ29uZGl0aW9uYWxXcmFwcGVyIiwiY29udmVydGVkRGF0YUZpZWxkIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJEYXRhUG9pbnQiLCJ2YWx1ZSIsIkRhdGFQb2ludEZvcm1hdE9wdGlvbnMiLCJnZXREYXRhUG9pbnRUZW1wbGF0ZSIsImhhc1VuaXRPckN1cnJlbmN5IiwiZ2V0RXhwYW5kYWJsZVRleHQiLCJFeHBhbmRhYmxlVGV4dCIsImRpc3BsYXlTdHlsZUlkIiwib3ZlcmZsb3dNb2RlIiwidGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheSIsIm1heENoYXJhY3RlcnMiLCJ0ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXkiLCJlbXB0eUluZGljYXRvck1vZGUiLCJnZXRGaWxlVGVtcGxhdGUiLCJpbm5lckZpbGVQYXJ0IiwiZmlsZVN0cmVhbU5vdEVtcHR5IiwiZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRoIiwiZmlsZUZpbGVuYW1lRXhwcmVzc2lvbiIsImZpbGVVcGxvYWRVcmwiLCJmaWxlRmlsZW5hbWVQYXRoIiwiQ29udGVudERpc3Bvc2l0aW9uIiwiRmlsZW5hbWUiLCJmaWxlTWVkaWFUeXBlIiwiTWVkaWFUeXBlIiwiZmlsZUlzSW1hZ2UiLCJJc0ltYWdlVVJMIiwiSXNJbWFnZSIsInRlc3QiLCJ0b1N0cmluZyIsImZpbGVBdmF0YXJTcmMiLCJmaWxlQXZhdGFyRGlzcGxheVNoYXBlIiwiZmlsZUljb25TcmMiLCJnZXRQYXRoRm9ySWNvblNvdXJjZSIsImZpbGVMaW5rVGV4dCIsImdldEZpbGVuYW1lRXhwciIsImZpbGVMaW5rSHJlZiIsImdldERvd25sb2FkVXJsIiwiZmlsZVRleHRWaXNpYmxlIiwiZmlsZUFjY2VwdGFibGVNZWRpYVR5cGVzIiwiQWNjZXB0YWJsZU1lZGlhVHlwZXMiLCJhY2NlcHRlZFR5cGVzIiwiQXJyYXkiLCJmcm9tIiwibWFwIiwiam9pbiIsImZpbGVNYXhpbXVtU2l6ZSIsImNhbGN1bGF0ZU1CZnJvbUJ5dGUiLCJtYXhMZW5ndGgiLCJhdmF0YXIiLCJjdXN0b21EYXRhIiwiSW1hZ2VDdXN0b21EYXRhIiwicGFyYW1OYW1lIiwiSWNvbiIsImxpbmsiLCJ0YXJnZXQiLCJocmVmIiwid3JhcHBpbmciLCJUZXh0IiwiZWRpdE1vZGUiLCJjb21wdXRlZEVkaXRNb2RlIiwiRmllbGRFZGl0TW9kZSIsIkRpc3BsYXkiLCJiZWZvcmVEaWFsb2dPcGVuIiwiY29sbGFib3JhdGlvbkVuYWJsZWQiLCJoYW5kbGVPcGVuVXBsb2FkZXIiLCJhZnRlckRpYWxvZ09wZW4iLCJoYW5kbGVDbG9zZVVwbG9hZGVyIiwiZmlsZVVwbG9hZGVyIiwiRmlsZVVwbG9hZGVyIiwiZmlsZVVwbG9hZGVyVmlzaWJsZSIsImJ1dHRvbk9ubHkiLCJpY29uT25seSIsIm11bHRpcGxlIiwic3R5bGUiLCJzZW5kWEhSIiwidXNlTXVsdGlwYXJ0Iiwic2FtZUZpbGVuYW1lQWxsb3dlZCIsIm1pbWVUeXBlIiwidHlwZU1pc3NtYXRjaCIsImhhbmRsZVR5cGVNaXNzbWF0Y2giLCJtYXhpbXVtRmlsZVNpemUiLCJmaWxlU2l6ZUV4Y2VlZCIsImhhbmRsZUZpbGVTaXplRXhjZWVkIiwidXBsb2FkT25DaGFuZ2UiLCJ1cGxvYWRDb21wbGV0ZSIsImhhbmRsZVVwbG9hZENvbXBsZXRlIiwiaHR0cFJlcXVlc3RNZXRob2QiLCJpc0R5bmFtaWNJbnN0YW50aWF0aW9uIiwiRmlsZVVwbG9hZGVySHR0cFJlcXVlc3RNZXRob2QiLCJQdXQiLCJjaGFuZ2UiLCJ1cGxvYWRTdHJlYW0iLCJhZnRlckRpYWxvZ0Nsb3NlIiwidXBsb2FkU3RhcnQiLCJkZWxldGVCdXR0b24iLCJyZW1vdmVTdHJlYW0iLCJGaWxlV3JhcHBlciIsInVwbG9hZFVybCIsInByb3BlcnR5UGF0aCIsImZpbGVuYW1lIiwibWVkaWFUeXBlIiwiZmllbGRHcm91cElkcyIsInZhbGlkYXRlRmllbGRHcm91cCIsIkN1c3RvbURhdGEiLCJkYXRhU291cmNlUGF0aCIsImdldExpbmtUZW1wbGF0ZSIsImxpbmtVcmwiLCJpY29uVXJsIiwibGlua0FjdGl2ZWQiLCJsaW5rVGFyZ2V0IiwiY29tcHV0ZVRleHRXaXRoV2hpdGVTcGFjZSIsImFjY2Vzc2libGVSb2xlIiwiTGlua0FjY2Vzc2libGVSb2xlIiwib25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgiLCJodG1sNUxpbmtUYXJnZXQiLCJIVE1MNSIsIkxpbmtUYXJnZXQiLCJsaW5rQmluZGluZyIsIlVybCIsIkNvbW11bmljYXRpb24iLCJJc0VtYWlsQWRkcmVzcyIsIklzUGhvbmVOdW1iZXIiLCJsaW5rSXNFbWFpbEFkZHJlc3MiLCJsaW5rSXNQaG9uZU51bWJlciIsInByb3BlcnR5VmFsdWVCaW5kaW5nIiwibWFpbEJsb2NrSWQiLCJ1aWQiLCJFbWFpbCIsIm1haWwiLCJPYmplY3RTdGF0dXMiLCJvcGVuRXh0ZXJuYWxMaW5rIiwiYWN0aXZlIiwid3JhcCIsImdldEZvcmVpZ25LZXlGb3JDdXN0b21EYXRhIiwicmVsYXRpdmVQYXRoVG9RdWlja1ZpZXdFbnRpdHkiLCJRdWlja1ZpZXciLCJnZXRSZWxhdGl2ZVBhdGhUb1F1aWNrVmlld0VudGl0eSIsInRhcmdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwidGFyZ2V0RW50aXR5VHlwZSIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwidGFyZ2V0TmF2UHJvcCIsImZpbmQiLCJuYXZQcm9wIiwicmVmQ29uc3RyYWludCIsInJlZmVyZW50aWFsQ29uc3RyYWludCIsImtleSIsImxlbmd0aCIsInRhcmdldFByb3BlcnR5Iiwia2V5VG9GZXRjaCIsImdldEZvcmVpZ25LZXlWYWx1ZUV4cHJlc3Npb24iLCJmb3JlaWduS2V5UmVsYXRpdmVQYXRoIiwiZXhwcmVzc2lvbiIsIl90eXBlIiwiaWZFbHNlIiwiY29uc3RhbnQiLCJnZXRTdGFuZGFyZExpbmtXaXRoUXVpY2tWaWV3VGVtcGxhdGUiLCJsaW5rUHJlc3NlZCIsImdldE1kY0xpbmtGb3JRdWlja1ZpZXciLCJnZXRDb25kaXRpb25hbExpbmtXaXRoUXVpY2tWaWV3VGVtcGxhdGUiLCJUZXh0TGluayIsInNob3dBc0xpbmsiLCJzZW1hbnRpY09iamVjdCIsImdldENvbmRpdGlvbmFsV3JhcHBlckZvclF1aWNrVmlld1RlbXBsYXRlIiwiZ2V0TGlua1dpdGhRdWlja1ZpZXdUZW1wbGF0ZSIsInJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QiLCJ0ZXh0RnJvbVZhbHVlTGlzdCIsImdldFF1aWNrVmlld0NvbmRpdGlvbiIsImdldFRleHRUZW1wbGF0ZSIsInJlbmRlcldoaXRlc3BhY2UiLCJjdXN0b21kYXRhIiwiZGlzcGxheU1vZGUiLCJnZXRQYXNzd29yZFRlbXBsYXRlIiwidGV4dEJpbmRpbmciLCJnZXRUZXh0QmluZGluZyIsInRleHRFeHByZXNzaW9uIiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJmb3JtYXRSZXN1bHQiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRQYXNzd29yZFRleHQiLCJnZXRPYmplY3RJZGVudGlmaWVyIiwidGl0bGVBY3RpdmUiLCJoYXNRdWlja1ZpZXciLCJpZGVudGlmaWVyIiwiT2JqZWN0SWRlbnRpZmllciIsInRpdGxlIiwiaWRlbnRpZmllclRpdGxlIiwiaWRlbnRpZmllclRleHQiLCJ0aXRsZVByZXNzIiwiaGFzU2l0dWF0aW9uc0luZGljYXRvciIsIl9qc3hzIiwiSEJveCIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsIndpZHRoIiwiU2l0dWF0aW9uc0luZGljYXRvciIsInNpdHVhdGlvbnNJbmRpY2F0b3JQcm9wZXJ0eVBhdGgiLCJzaG93RXJyb3JJbmRpY2F0b3IiLCJzaG93RXJyb3JPYmplY3RTdGF0dXMiLCJWQm94Iiwic3RhdGUiLCJnZXRPYmplY3RTdGF0dXMiLCJvYmplY3RTdGF0dXMiLCJyZXF1aXJlZEhlbHBlciIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJlbmhhbmNlZFZhbHVlRGF0YU1vZGVsUGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwidGFyZ2V0T2JqZWN0IiwiVmFsdWUiLCJjcml0aWNhbGl0eUljb24iLCJidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUljb24iLCJidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yIiwidG9vbFRpcFZhbHVlIiwiZ2V0VG9vbHRpcFZhbHVlIiwiY29udGVudCIsInRleHRBbGlnbiIsImlzQWN0aXZlIiwicHJlc3NBY3Rpb24iLCJjcmVhdGVDb250ZW50IiwiZ2V0TGFiZWxTZW1hbnRpY0tleSIsImVtcGhhc2l6ZWQiLCJkZXNpZ24iLCJoYXNRdWlja3ZpZXciLCJhZGREcmFmdEluZGljYXRvciIsInNlbWFudGljS2V5VGVtcGxhdGUiLCJmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgiLCJnZXRNYXJnaW5DbGFzcyIsImNvbXBhY3RTZW1hbnRpY0tleSIsIkRyYWZ0SW5kaWNhdG9yIiwiZHJhZnRJbmRpY2F0b3JUeXBlIiwiT2JqZWN0TWFya2VyVmlzaWJpbGl0eSIsIkljb25BbmRUZXh0IiwiZHJhZnRJbmRpY2F0b3JWaXNpYmxlIiwiZGF0YU1vZGVsUGF0aEV4dGVybmFsSUQiLCJyZXBsYWNlV2hpdGVzcGFjZSIsInF1aWNrVmlld1R5cGUiLCJkeW5hbWljU2VtYW50aWNPYmplY3RzIiwibGlzdE9mRHluYW1pY1NlbWFudGljT2JqZWN0cyIsInNlbWFudGljT2JqZWN0RXhwcmVzc2lvbiIsInB1c2giLCJzZW1hbnRpY09iamVjdHNQYXRoIiwiY29uY2F0IiwiaGFzU2VtYW50aWNPYmplY3RzIiwiZ2V0Q2hlY2tCb3hHcm91cEl0ZW1UZW1wbGF0ZSIsIkNoZWNrQm94IiwiZGlzcGxheU9ubHkiLCJsYWJlbCIsInNlbGVjdGVkIiwidmFsdWVCaW5kaW5nRXhwcmVzc2lvbiIsImdldFRlbXBsYXRlIiwiaW5uZXJGaWVsZENvbnRlbnQiLCJkaXNwbGF5U3R5bGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRpc3BsYXlTdHlsZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb24sIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHksIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YUZpZWxkV2l0aFVybCxcblx0RGF0YVBvaW50VHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24sXG5cdG5vdCxcblx0cGF0aEluTW9kZWwsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IEZvcm1FbGVtZW50V3JhcHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvRm9ybUVsZW1lbnRXcmFwcGVyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBhaUljb24sIGlzQWN0aW9uQUlPcGVyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5QnV0dG9uVHlwZSxcblx0YnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvcixcblx0YnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0NyaXRpY2FsaXR5Rm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRUb29sdGlwVmFsdWUsIGhhc1ZhbGlkQW5hbHl0aWNhbEN1cnJlbmN5T3JVbml0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgRmllbGRIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRIZWxwZXJcIjtcbmltcG9ydCAqIGFzIEZpZWxkVGVtcGxhdGluZyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIHsgRmllbGRCbG9ja1Byb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9maWVsZC9GaWVsZFN0cnVjdHVyZUhlbHBlclwiO1xuaW1wb3J0IFF1aWNrVmlldyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9xdWlja1ZpZXcvUXVpY2tWaWV3XCI7XG5pbXBvcnQgQXZhdGFyIGZyb20gXCJzYXAvbS9BdmF0YXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IENoZWNrQm94IGZyb20gXCJzYXAvbS9DaGVja0JveFwiO1xuaW1wb3J0IEV4cGFuZGFibGVUZXh0IGZyb20gXCJzYXAvbS9FeHBhbmRhYmxlVGV4dFwiO1xuaW1wb3J0IEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCBJbWFnZUN1c3RvbURhdGEgZnJvbSBcInNhcC9tL0ltYWdlQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IHR5cGUgeyBMaW5rJFByZXNzRXZlbnQgfSBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCBPYmplY3RJZGVudGlmaWVyIGZyb20gXCJzYXAvbS9PYmplY3RJZGVudGlmaWVyXCI7XG5pbXBvcnQgT2JqZWN0U3RhdHVzIGZyb20gXCJzYXAvbS9PYmplY3RTdGF0dXNcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgVkJveCBmcm9tIFwic2FwL20vVkJveFwiO1xuaW1wb3J0IHsgTGlua0FjY2Vzc2libGVSb2xlLCBPYmplY3RNYXJrZXJWaXNpYmlsaXR5IH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgRXZlbnRQcm92aWRlciBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgSWNvbiBmcm9tIFwic2FwL3VpL2NvcmUvSWNvblwiO1xuaW1wb3J0IHR5cGUgTWRjTGluayBmcm9tIFwic2FwL3VpL21kYy9MaW5rXCI7XG5pbXBvcnQgRmllbGRFZGl0TW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9GaWVsZEVkaXRNb2RlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRGaWxlU2l6ZUV4Y2VlZEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVXBsb2FkQ29tcGxldGVFdmVudCxcblx0RmlsZVVwbG9hZGVyJFVwbG9hZFN0YXJ0RXZlbnRcbn0gZnJvbSBcInNhcC91aS91bmlmaWVkL0ZpbGVVcGxvYWRlclwiO1xuaW1wb3J0IEZpbGVVcGxvYWRlciBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgRmlsZVVwbG9hZGVySHR0cFJlcXVlc3RNZXRob2QgZnJvbSBcInNhcC91aS91bmlmaWVkL0ZpbGVVcGxvYWRlckh0dHBSZXF1ZXN0TWV0aG9kXCI7XG5pbXBvcnQgQ29udGFjdCBmcm9tIFwiLi4vLi4vY29udGFjdC9Db250YWN0XCI7XG5pbXBvcnQgRW1haWwgZnJvbSBcIi4uLy4uL2NvbnRhY3QvRW1haWxcIjtcbmltcG9ydCBDb25kaXRpb25hbFdyYXBwZXIgZnJvbSBcIi4uLy4uL2NvbnRyb2xzL0NvbmRpdGlvbmFsV3JhcHBlclwiO1xuaW1wb3J0IEZpbGVXcmFwcGVyIGZyb20gXCIuLi8uLi9jb250cm9scy9GaWxlV3JhcHBlclwiO1xuaW1wb3J0IE51bWJlcldpdGhVbml0T3JDdXJyZW5jeSBmcm9tIFwiLi4vLi4vY29udHJvbHMvTnVtYmVyV2l0aFVuaXRPckN1cnJlbmN5XCI7XG5pbXBvcnQgVGV4dExpbmsgZnJvbSBcIi4uLy4uL2NvbnRyb2xzL1RleHRMaW5rXCI7XG5pbXBvcnQgRHJhZnRJbmRpY2F0b3IgZnJvbSBcIi4uLy4uL2RyYWZ0SW5kaWNhdG9yL0RyYWZ0SW5kaWNhdG9yXCI7XG5pbXBvcnQgU2l0dWF0aW9uc0luZGljYXRvciBmcm9tIFwiLi4vLi4vc2l0dWF0aW9ucy9TaXR1YXRpb25zSW5kaWNhdG9yXCI7XG5pbXBvcnQgRGF0YVBvaW50IGZyb20gXCIuLi9EYXRhUG9pbnRcIjtcbmltcG9ydCBEYXRhUG9pbnRGb3JtYXRPcHRpb25zIGZyb20gXCIuLi9EYXRhUG9pbnRGb3JtYXRPcHRpb25zXCI7XG5pbXBvcnQgdHlwZSB7IERpc3BsYXlTdHlsZSBhcyBEaXNwbGF5U3R5bGVUeXBlIH0gZnJvbSBcIi4vRmllbGRTdHlsZXNcIjtcblxuY29uc3QgRGlzcGxheVN0eWxlID0ge1xuXHRnZXRQcmVjaXNpb25Gb3JDdXJyZW5jeShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBudW1iZXIge1xuXHRcdGxldCBzY2FsZSA9IGZpZWxkLnByb3BlcnR5LnNjYWxlID8/IDU7XG5cdFx0aWYgKHR5cGVvZiBzY2FsZSAhPT0gXCJudW1iZXJcIikge1xuXHRcdFx0Ly8gU2NhbGUgY2FuIGJlIFwidmFyaWFibGVcIiBidXQgaXQncyBub3QgdHlwZWQgYXMgc3VjaC4gSW4gdGhpcyBjYXNlLCBTY2FsZSBlcXVhbHMgdGhlIHByZWNpc2lvblxuXHRcdFx0c2NhbGUgPSBmaWVsZC5wcm9wZXJ0eS5wcmVjaXNpb24gPz8gNTtcblx0XHR9XG5cdFx0cmV0dXJuIE1hdGgubWluKHNjYWxlLCA1KTtcblx0fSxcblxuXHRnZXRDdXJyZW5jeU9yVW5pdENvbnRyb2woXG5cdFx0ZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLFxuXHRcdGN1cnJlbmN5T3JVbml0OiBzdHJpbmcgfCBDb250cm9sLFxuXHRcdHZpc2libGVFeHByZXNzaW9uPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+XG5cdCk6IENvbnRyb2wge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TGlua1xuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RklFTERSVU5USU1FOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWUnfVwiXG5cdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9TSE9XX0RFVEFJTFN9XCJcblx0XHRcdFx0cHJlc3M9e2ZpZWxkLmV2ZW50SGFuZGxlcnMuZGlzcGxheUFnZ3JlZ2F0aW9uRGV0YWlsc31cblx0XHRcdFx0dmlzaWJsZT17dmlzaWJsZUV4cHJlc3Npb259XG5cdFx0XHRcdHJlYWN0aXZlQXJlYU1vZGU9e2ZpZWxkLmZvcm1hdE9wdGlvbnM/LnJlYWN0aXZlQXJlYU1vZGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0ZGVwZW5kZW50czogKGN1cnJlbmN5T3JVbml0IGFzIENvbnRyb2wpPy5jbG9uZSA/IChjdXJyZW5jeU9yVW5pdCBhcyBDb250cm9sKS5jbG9uZSgpIDogY3VycmVuY3lPclVuaXRcblx0XHRcdFx0fX1cblx0XHRcdDwvTGluaz5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIE51bWJlcldpdGhVbml0T3JDdXJyZW5jeUFsaWduZWQgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXROdW1iZXJXaXRoVW5pdE9yQ3VycmVuY3lBbGlnbmVkVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHQvLyBXZSBkb24ndCBkaXNwbGF5IGFueXRoaW5nIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWRcblx0XHRjb25zdCByZWxhdGl2ZVByb3BlcnR5UGF0aCA9IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZmllbGQuZGF0YU1vZGVsUGF0aCk7XG5cdFx0Y29uc3Qgb3ZlcmFsbFZpc2libGUgPSBub3QoZXF1YWwocGF0aEluTW9kZWwocmVsYXRpdmVQcm9wZXJ0eVBhdGgpLCB1bmRlZmluZWQpKTtcblx0XHRjb25zdCBjdXJyZW5jeSA9IChcblx0XHRcdDxOdW1iZXJXaXRoVW5pdE9yQ3VycmVuY3kgbnVtYmVyPXtmaWVsZC52YWx1ZUFzU3RyaW5nQmluZGluZ0V4cHJlc3Npb259IHVuaXRPckN1cnJlbmN5PXtmaWVsZC51bml0QmluZGluZ0V4cHJlc3Npb259IC8+XG5cdFx0KTtcblx0XHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucy5pc0FuYWx5dGljcykge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PENvbmRpdGlvbmFsV3JhcHBlciB2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX0gY29uZGl0aW9uPXtmaWVsZC5oYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCBhcyB1bmtub3duIGFzIGJvb2xlYW59PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjb250ZW50VHJ1ZTogY3VycmVuY3ksXG5cdFx0XHRcdFx0XHRjb250ZW50RmFsc2U6IHRoaXMuZ2V0Q3VycmVuY3lPclVuaXRDb250cm9sKGZpZWxkLCBjdXJyZW5jeSwgb3ZlcmFsbFZpc2libGUpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9Db25kaXRpb25hbFdyYXBwZXI+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY3VycmVuY3k7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIEF2YXRhciB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldEF2YXRhclRlbXBsYXRlKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0bGV0IGF2YXRhcklkO1xuXHRcdGlmIChmaWVsZC5fZmxleElkKSB7XG5cdFx0XHRhdmF0YXJJZCA9IGZpZWxkLl9mbGV4SWQ7XG5cdFx0fSBlbHNlIGlmIChmaWVsZC5pZFByZWZpeCkge1xuXHRcdFx0YXZhdGFySWQgPSBnZW5lcmF0ZShbZmllbGQuaWRQcmVmaXgsIFwiRmllbGQtY29udGVudFwiXSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYXZhdGFyVmlzaWJsZSA9IEZpZWxkVGVtcGxhdGluZy5nZXRWaXNpYmxlRXhwcmVzc2lvbihmaWVsZC5kYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4pO1xuXG5cdFx0Y29uc3QgYXZhdGFyU3JjID0gRmllbGRUZW1wbGF0aW5nLmdldFZhbHVlQmluZGluZyhmaWVsZC5kYXRhTW9kZWxQYXRoLCB7fSk7XG5cdFx0Y29uc3QgYXZhdGFyRGlzcGxheVNoYXBlID0gRmllbGRUZW1wbGF0aW5nLmdldEF2YXRhclNoYXBlKGZpZWxkLmRhdGFNb2RlbFBhdGgpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxGb3JtRWxlbWVudFdyYXBwZXIgdmlzaWJsZT17YXZhdGFyVmlzaWJsZX0+XG5cdFx0XHRcdDxBdmF0YXJcblx0XHRcdFx0XHRpZD17YXZhdGFySWR9XG5cdFx0XHRcdFx0c3JjPXthdmF0YXJTcmN9XG5cdFx0XHRcdFx0ZGlzcGxheVNpemU9XCJTXCJcblx0XHRcdFx0XHRjbGFzcz1cInNhcFVpU21hbGxNYXJnaW5FbmRcIlxuXHRcdFx0XHRcdGltYWdlRml0VHlwZT1cIkNvdmVyXCJcblx0XHRcdFx0XHRkaXNwbGF5U2hhcGU9e2F2YXRhckRpc3BsYXlTaGFwZX1cblx0XHRcdFx0Lz5cblx0XHRcdDwvRm9ybUVsZW1lbnRXcmFwcGVyPlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgYnV0dG9uIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0QnV0dG9uVGVtcGxhdGU6IChmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcgPT4ge1xuXHRcdGxldCBpY29uID0gZmllbGQuZm9ybWF0T3B0aW9ucz8uc2hvd0ljb25VcmwgPz8gZmFsc2UgPyAoZmllbGQuY29udmVydGVkTWV0YVBhdGggYXMgRGF0YUZpZWxkVHlwZXMpLkljb25VcmwgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdGV4dCA9ICEoZmllbGQuZm9ybWF0T3B0aW9ucz8uc2hvd0ljb25VcmwgPz8gZmFsc2UpID8gKGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoIGFzIERhdGFGaWVsZFR5cGVzKS5MYWJlbCA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0b29sdGlwID0gZmllbGQuZm9ybWF0T3B0aW9ucz8uc2hvd0ljb25VcmwgPz8gZmFsc2UgPyAoZmllbGQuY29udmVydGVkTWV0YVBhdGggYXMgRGF0YUZpZWxkVHlwZXMpLkxhYmVsIDogdW5kZWZpbmVkO1xuXG5cdFx0bGV0IGJ1dHRvblByZXNzO1xuXHRcdGxldCBidXR0b25Jc0JvdW5kO1xuXHRcdGxldCBidXR0b25PcGVyYXRpb25BdmFpbGFibGU7XG5cdFx0bGV0IGJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZUZvcm1hdHRlZDtcblx0XHRsZXQgbmF2aWdhdGlvbkF2YWlsYWJsZTtcblxuXHRcdGlmIChmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRidXR0b25QcmVzcyA9IGZpZWxkLmV2ZW50SGFuZGxlcnMub25EYXRhRmllbGRBY3Rpb25CdXR0b247XG5cblx0XHRcdGJ1dHRvbklzQm91bmQgPSBmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5BY3Rpb25UYXJnZXQgPyBmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5BY3Rpb25UYXJnZXQuaXNCb3VuZCA6IHRydWU7XG5cdFx0XHRidXR0b25PcGVyYXRpb25BdmFpbGFibGUgPSBmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5BY3Rpb25UYXJnZXRcblx0XHRcdFx0PyBmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5BY3Rpb25UYXJnZXQuYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZVxuXHRcdFx0XHQ6IFwiZmFsc2VcIjtcblx0XHRcdGJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZUZvcm1hdHRlZCA9IGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLkFjdGlvblRhcmdldCA/IHVuZGVmaW5lZCA6IFwiZmFsc2VcIjtcblxuXHRcdFx0aWYgKGJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZSAmJiBidXR0b25PcGVyYXRpb25BdmFpbGFibGUgIT09IFwiZmFsc2VcIikge1xuXHRcdFx0XHRjb25zdCBhY3Rpb25UYXJnZXQgPSBmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5BY3Rpb25UYXJnZXQgYXMgQWN0aW9uO1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nUGFyYW1OYW1lID0gYWN0aW9uVGFyZ2V0LnBhcmFtZXRlcnNbMF0ubmFtZTtcblx0XHRcdFx0Ly9RVUFMTVMsIG5lZWRzIHRvIGJlIGNoZWNrZWQgd2hldGhlciB0aGlzIG1ha2VzIHNlbnNlIGF0IHRoYXQgcGxhY2UsIG1pZ2h0IGJlIGdvb2QgaW4gYSBkZWRpY2F0ZWQgaGVscGVyIGZ1bmN0aW9uXG5cdFx0XHRcdGJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZUZvcm1hdHRlZCA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdGJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxib29sZWFuPixcblx0XHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0KHBhdGg6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAocGF0aC5zdGFydHNXaXRoKGJpbmRpbmdQYXJhbU5hbWUpKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHBhdGgucmVwbGFjZShiaW5kaW5nUGFyYW1OYW1lICsgXCIvXCIsIFwiXCIpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBwYXRoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZmllbGQuY29udmVydGVkTWV0YVBhdGguJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0YnV0dG9uUHJlc3MgPSBmaWVsZC5ldmVudEhhbmRsZXJzLm9uRGF0YUZpZWxkV2l0aElCTjtcblx0XHRcdG5hdmlnYXRpb25BdmFpbGFibGUgPSB0cnVlO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiAmJlxuXHRcdFx0XHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5OYXZpZ2F0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0U3RyaW5nKGZpZWxkLmZvcm1hdE9wdGlvbnMuaWdub3JlTmF2aWdhdGlvbkF2YWlsYWJsZSkgIT09IFwidHJ1ZVwiXG5cdFx0XHQpIHtcblx0XHRcdFx0bmF2aWdhdGlvbkF2YWlsYWJsZSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5OYXZpZ2F0aW9uQXZhaWxhYmxlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IGJ1dHRvbiA9IFwiXCI7XG5cdFx0aWYgKGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdGJ1dHRvbiA9IChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLnZpc2libGV9XG5cdFx0XHRcdFx0dGV4dD17dGV4dH1cblx0XHRcdFx0XHRpY29uPXtpY29ufVxuXHRcdFx0XHRcdGVuYWJsZWQ9e25hdmlnYXRpb25BdmFpbGFibGV9XG5cdFx0XHRcdFx0dG9vbHRpcD17dG9vbHRpcH1cblx0XHRcdFx0XHRwcmVzcz17YnV0dG9uUHJlc3MgYXMgdW5rbm93biBhcyAoKG9FdmVudDogRXZlbnQ8b2JqZWN0LCBFdmVudFByb3ZpZGVyPikgPT4gdm9pZCkgfCB1bmRlZmluZWR9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRGaWVsZEhlbHBlci5pc0RhdGFGaWVsZEFjdGlvbkJ1dHRvblZpc2libGUoXG5cdFx0XHRcdGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLFxuXHRcdFx0XHRidXR0b25Jc0JvdW5kLFxuXHRcdFx0XHRidXR0b25PcGVyYXRpb25BdmFpbGFibGUgYXMgYm9vbGVhbiB8IHVuZGVmaW5lZFxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0bGV0IGVuYWJsZWQ6IHN0cmluZyB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0gRmllbGRIZWxwZXIuaXNEYXRhRmllbGRBY3Rpb25CdXR0b25FbmFibGVkKFxuXHRcdFx0XHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCBhcyBEYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGJ1dHRvbklzQm91bmQgYXMgdW5rbm93biBhcyBib29sZWFuLFxuXHRcdFx0XHRidXR0b25PcGVyYXRpb25BdmFpbGFibGUsXG5cdFx0XHRcdGJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZUZvcm1hdHRlZCBhcyBzdHJpbmdcblx0XHRcdCk7XG5cblx0XHRcdGlmIChmaWVsZC5mb3JtYXRPcHRpb25zLmlzQW5hbHl0aWNhbEFnZ3JlZ2F0ZWRSb3cpIHtcblx0XHRcdFx0ZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhlbmFibGVkKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdHlwZSA9IGJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5QnV0dG9uVHlwZShmaWVsZC5kYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4pO1xuXHRcdFx0aWNvbiA9IGljb24gPz8gKGlzQWN0aW9uQUlPcGVyYXRpb24oZmllbGQuY29udmVydGVkTWV0YVBhdGggYXMgRGF0YUZpZWxkRm9yQWN0aW9uKSA/IGFpSWNvbiA6IHVuZGVmaW5lZCk7XG5cblx0XHRcdGJ1dHRvbiA9IChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGNsYXNzPXtmaWVsZC5jbGFzc31cblx0XHRcdFx0XHR0ZXh0PXt0ZXh0fVxuXHRcdFx0XHRcdGljb249e2ljb259XG5cdFx0XHRcdFx0dG9vbHRpcD17dG9vbHRpcH1cblx0XHRcdFx0XHRwcmVzcz17YnV0dG9uUHJlc3MgYXMgdW5rbm93biBhcyAoKG9FdmVudDogRXZlbnQ8b2JqZWN0LCBFdmVudFByb3ZpZGVyPikgPT4gdm9pZCkgfCB1bmRlZmluZWR9XG5cdFx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC52aXNpYmxlfVxuXHRcdFx0XHRcdHR5cGU9e3R5cGV9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gYnV0dG9uO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIENvbnRhY3QgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRDb250YWN0VGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCBjb250YWN0TWV0YVBhdGggPSBmaWVsZC5tZXRhUGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aFwiLCBmaWVsZC5tZXRhUGF0aCk7XG5cdFx0Y29uc3QgY29udGFjdFZpc2libGUgPSBGaWVsZFRlbXBsYXRpbmcuZ2V0VmlzaWJsZUV4cHJlc3Npb24oZmllbGQuZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+KTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8Q29udGFjdFxuXHRcdFx0XHRpZFByZWZpeD17ZmllbGQuaWRQcmVmaXh9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeX1cblx0XHRcdFx0bWV0YVBhdGg9e2NvbnRhY3RNZXRhUGF0aC5nZXRQYXRoKCl9XG5cdFx0XHRcdGNvbnRleHRQYXRoPXtmaWVsZC5jb250ZXh0UGF0aC5nZXRQYXRoKCl9XG5cdFx0XHRcdF9mbGV4SWQ9e2ZpZWxkLl9mbGV4SWR9XG5cdFx0XHRcdHZpc2libGU9e2NvbnRhY3RWaXNpYmxlfVxuXHRcdFx0XHRzaG93RW1wdHlJbmRpY2F0b3I9e2ZpZWxkLmZvcm1hdE9wdGlvbnMuc2hvd0VtcHR5SW5kaWNhdG9yfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIGlubmVycGFydCBvZiB0aGUgZGF0YSBwb2ludCB0byBiZSB1c2VkIGluIGdldERhdGFQb2ludFRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEBwYXJhbSB3aXRoQ29uZGl0aW9uYWxXcmFwcGVyIEJvb2xlYW4gdmFsdWUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIERhdGFQb2ludFxuXHQgKiBcdFx0XHRcdFx0ICBcdFx0XHRzaGFsbCBiZSBnZW5lcmF0ZWQgZm9yIHRoZSBjb25kaXRpb25hbCB3cmFwcGVyIGNhc2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXREYXRhUG9pbnRJbm5lclBhcnQoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCB3aXRoQ29uZGl0aW9uYWxXcmFwcGVyOiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRjb25zdCBjb252ZXJ0ZWREYXRhRmllbGQgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydE1ldGFNb2RlbENvbnRleHQoZmllbGQubWV0YVBhdGgpIGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXM7XG5cblx0XHRjb25zdCBtZXRhUGF0aCA9XG5cdFx0XHRjb252ZXJ0ZWREYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb25cblx0XHRcdFx0PyBmaWVsZC5tZXRhUGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aFwiLCBmaWVsZC5tZXRhUGF0aClcblx0XHRcdFx0OiBmaWVsZC5tZXRhUGF0aDtcblxuXHRcdGNvbnN0IGZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRtZWFzdXJlRGlzcGxheU1vZGU6IGZpZWxkLmZvcm1hdE9wdGlvbnMubWVhc3VyZURpc3BsYXlNb2RlLFxuXHRcdFx0c2hvd0VtcHR5SW5kaWNhdG9yOiBmaWVsZC5mb3JtYXRPcHRpb25zLnNob3dFbXB0eUluZGljYXRvclxuXHRcdH07XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PERhdGFQb2ludFxuXHRcdFx0XHRpZFByZWZpeD17d2l0aENvbmRpdGlvbmFsV3JhcHBlciA/IHVuZGVmaW5lZCA6IGZpZWxkLmlkUHJlZml4fVxuXHRcdFx0XHR2aXNpYmxlPXsoIXdpdGhDb25kaXRpb25hbFdyYXBwZXIgPyBmaWVsZC5kaXNwbGF5VmlzaWJsZSA6IHVuZGVmaW5lZCkgYXMgdW5rbm93biBhcyBzdHJpbmcgfCB1bmRlZmluZWR9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSA/IGZpZWxkLmFyaWFMYWJlbGxlZEJ5IDogdW5kZWZpbmVkfVxuXHRcdFx0XHRtZXRhUGF0aD17bWV0YVBhdGguZ2V0UGF0aCgpfVxuXHRcdFx0XHRjb250ZXh0UGF0aD17ZmllbGQuY29udGV4dFBhdGg/LmdldFBhdGgoKX1cblx0XHRcdFx0dmFsdWU9e2ZpZWxkLnZhbHVlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGZvcm1hdE9wdGlvbnM6IDxEYXRhUG9pbnRGb3JtYXRPcHRpb25zIHsuLi5mb3JtYXRPcHRpb25zfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9EYXRhUG9pbnQ+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBEYXRhUG9pbnQgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXREYXRhUG9pbnRUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGlmICgoZmllbGQuZm9ybWF0T3B0aW9ucy5pc0FuYWx5dGljcyA/PyBmYWxzZSkgJiYgKGZpZWxkLmhhc1VuaXRPckN1cnJlbmN5ID8/IGZhbHNlKSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PENvbmRpdGlvbmFsV3JhcHBlciB2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX0gY29uZGl0aW9uPXtmaWVsZC5oYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCBhcyB1bmtub3duIGFzIGJvb2xlYW59PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjb250ZW50VHJ1ZTogdGhpcy5nZXREYXRhUG9pbnRJbm5lclBhcnQoZmllbGQsIHRydWUpLFxuXHRcdFx0XHRcdFx0Y29udGVudEZhbHNlOiB0aGlzLmdldEN1cnJlbmN5T3JVbml0Q29udHJvbChmaWVsZCwgdGhpcy5nZXREYXRhUG9pbnRJbm5lclBhcnQoZmllbGQsIHRydWUpKVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQ29uZGl0aW9uYWxXcmFwcGVyPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0RGF0YVBvaW50SW5uZXJQYXJ0KGZpZWxkLCBmYWxzZSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIEV4cGFuZGFibGVUZXh0IHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0RXhwYW5kYWJsZVRleHQoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEV4cGFuZGFibGVUZXh0XG5cdFx0XHRcdGlkPXtmaWVsZD8uZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdHZpc2libGU9e2ZpZWxkPy5kaXNwbGF5VmlzaWJsZX1cblx0XHRcdFx0dGV4dD17ZmllbGQudGV4dH1cblx0XHRcdFx0b3ZlcmZsb3dNb2RlPXtmaWVsZD8uZm9ybWF0T3B0aW9ucz8udGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheX1cblx0XHRcdFx0bWF4Q2hhcmFjdGVycz17ZmllbGQ/LmZvcm1hdE9wdGlvbnM/LnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheX1cblx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZD8uZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIEZpbGUgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRGaWxlVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRsZXQgaW5uZXJGaWxlUGFydDtcblxuXHRcdGNvbnN0IGZpbGVTdHJlYW1Ob3RFbXB0eSA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0bm90KGVxdWFsKHBhdGhJbk1vZGVsKGAke2ZpZWxkLmZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aH1Ab2RhdGEubWVkaWFDb250ZW50VHlwZWApLCBudWxsKSlcblx0XHQpO1xuXG5cdFx0Y29uc3QgZmlsZUZpbGVuYW1lRXhwcmVzc2lvbiA9IGZpZWxkLmZpbGVGaWxlbmFtZUV4cHJlc3Npb24gPyBcInsgcGF0aDogJ1wiICsgZmllbGQuZmlsZUZpbGVuYW1lRXhwcmVzc2lvbiArIFwiJyB9XCIgOiBcIlwiO1xuXG5cdFx0Ly8gRmlsZVdyYXBwZXJcblx0XHRjb25zdCBmaWxlVXBsb2FkVXJsID0gRmllbGRUZW1wbGF0aW5nLmdldFZhbHVlQmluZGluZyhmaWVsZC5kYXRhTW9kZWxQYXRoLCB7fSk7XG5cdFx0Y29uc3QgZmlsZUZpbGVuYW1lUGF0aCA9IChmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5Db250ZW50RGlzcG9zaXRpb24/LkZpbGVuYW1lIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KT8ucGF0aDtcblx0XHRjb25zdCBmaWxlTWVkaWFUeXBlID1cblx0XHRcdGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvcmU/Lk1lZGlhVHlwZSAmJlxuXHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvcmU/Lk1lZGlhVHlwZSkpO1xuXG5cdFx0Ly8gdGVtcGxhdGU6aWZcblx0XHRjb25zdCBmaWxlSXNJbWFnZSA9XG5cdFx0XHQhIWZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLlVJPy5Jc0ltYWdlVVJMIHx8XG5cdFx0XHQhIWZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLlVJPy5Jc0ltYWdlIHx8XG5cdFx0XHQvaW1hZ2VcXC8vaS50ZXN0KGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvcmU/Lk1lZGlhVHlwZT8udG9TdHJpbmcoKSA/PyBcIlwiKTtcblxuXHRcdC8vIEF2YXRhclxuXHRcdGNvbnN0IGZpbGVBdmF0YXJTcmMgPSBGaWVsZFRlbXBsYXRpbmcuZ2V0VmFsdWVCaW5kaW5nKGZpZWxkLmRhdGFNb2RlbFBhdGgsIHt9KTtcblx0XHRjb25zdCBmaWxlQXZhdGFyRGlzcGxheVNoYXBlID0gRmllbGRUZW1wbGF0aW5nLmdldEF2YXRhclNoYXBlKGZpZWxkLmRhdGFNb2RlbFBhdGgpO1xuXG5cdFx0Ly8gSWNvblxuXHRcdGNvbnN0IGZpbGVJY29uU3JjID0gRmllbGRIZWxwZXIuZ2V0UGF0aEZvckljb25Tb3VyY2UoZmllbGQuZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRoKTtcblxuXHRcdC8vIExpbmtcblx0XHRjb25zdCBmaWxlTGlua1RleHQgPSBGaWVsZEhlbHBlci5nZXRGaWxlbmFtZUV4cHIoZmlsZUZpbGVuYW1lRXhwcmVzc2lvbiwgXCJ7c2FwLmZlLmkxOG4+TV9GSUVMRF9GSUxFVVBMT0FERVJfTk9GSUxFTkFNRV9URVhUfVwiKTtcblx0XHRjb25zdCBmaWxlTGlua0hyZWYgPSBGaWVsZEhlbHBlci5nZXREb3dubG9hZFVybChmaWxlVXBsb2FkVXJsID8/IFwiXCIpO1xuXG5cdFx0Ly8gVGV4dFxuXHRcdGNvbnN0IGZpbGVUZXh0VmlzaWJsZSA9IGNvbXBpbGVFeHByZXNzaW9uKGVxdWFsKHBhdGhJbk1vZGVsKGAke2ZpZWxkLmZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aH1Ab2RhdGEubWVkaWFDb250ZW50VHlwZWApLCBudWxsKSk7XG5cblx0XHRsZXQgZmlsZUFjY2VwdGFibGVNZWRpYVR5cGVzO1xuXHRcdC8vIEZpbGVVcGxvYWRlclxuXHRcdGlmIChmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5BY2NlcHRhYmxlTWVkaWFUeXBlcykge1xuXHRcdFx0Y29uc3QgYWNjZXB0ZWRUeXBlcyA9IEFycmF5LmZyb20oZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnMuQ29yZS5BY2NlcHRhYmxlTWVkaWFUeXBlcyBhcyB1bmtub3duIGFzIHN0cmluZ1tdKS5tYXAoXG5cdFx0XHRcdCh0eXBlKSA9PiBgJyR7dHlwZX0nYFxuXHRcdFx0KTtcblx0XHRcdGZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcyA9IGB7PW9kYXRhLmNvbGxlY3Rpb24oWyR7YWNjZXB0ZWRUeXBlcy5qb2luKFwiLFwiKX1dKX1gOyAvLyBUaGlzIGRvZXMgbm90IGZlZWwgcmlnaHQsIGJ1dCBmb2xsb3dzIHRoZSBsb2dpYyBvZiBBbm5vdGF0aW9uSGVscGVyI3ZhbHVlXG5cdFx0fVxuXHRcdGNvbnN0IGZpbGVNYXhpbXVtU2l6ZSA9IEZpZWxkSGVscGVyLmNhbGN1bGF0ZU1CZnJvbUJ5dGUoZmllbGQucHJvcGVydHkubWF4TGVuZ3RoKTtcblxuXHRcdGlmIChmaWxlSXNJbWFnZSkge1xuXHRcdFx0aW5uZXJGaWxlUGFydCA9IHtcblx0XHRcdFx0YXZhdGFyOiAoXG5cdFx0XHRcdFx0PEF2YXRhclxuXHRcdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdFx0XHRzcmM9e2ZpbGVBdmF0YXJTcmN9XG5cdFx0XHRcdFx0XHRkaXNwbGF5U2l6ZT1cIlNcIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaVNtYWxsTWFyZ2luRW5kXCJcblx0XHRcdFx0XHRcdGltYWdlRml0VHlwZT1cIkNvdmVyXCJcblx0XHRcdFx0XHRcdGRpc3BsYXlTaGFwZT17ZmlsZUF2YXRhckRpc3BsYXlTaGFwZX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhOiA8SW1hZ2VDdXN0b21EYXRhIHBhcmFtTmFtZT1cInhjYWNoZVwiIC8+XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdDwvQXZhdGFyPlxuXHRcdFx0XHQpXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbm5lckZpbGVQYXJ0ID0ge1xuXHRcdFx0XHRpY29uOiA8SWNvbiBzcmM9e2ZpbGVJY29uU3JjfSBjbGFzcz1cInNhcFVpU21hbGxNYXJnaW5FbmRcIiB2aXNpYmxlPXtmaWxlU3RyZWFtTm90RW1wdHl9IC8+LFxuXHRcdFx0XHRsaW5rOiAoXG5cdFx0XHRcdFx0PExpbmtcblx0XHRcdFx0XHRcdHRleHQ9e2ZpbGVMaW5rVGV4dH1cblx0XHRcdFx0XHRcdHRhcmdldD1cIl9ibGFua1wiXG5cdFx0XHRcdFx0XHRocmVmPXtmaWxlTGlua0hyZWZ9XG5cdFx0XHRcdFx0XHR2aXNpYmxlPXtmaWxlU3RyZWFtTm90RW1wdHl9XG5cdFx0XHRcdFx0XHR3cmFwcGluZz1cInRydWVcIlxuXHRcdFx0XHRcdFx0cmVhY3RpdmVBcmVhTW9kZT17ZmllbGQuZm9ybWF0T3B0aW9ucz8ucmVhY3RpdmVBcmVhTW9kZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0ZXh0OiA8VGV4dCBlbXB0eUluZGljYXRvck1vZGU9e2ZpZWxkLmVtcHR5SW5kaWNhdG9yTW9kZX0gdGV4dD1cIlwiIHZpc2libGU9e2ZpbGVUZXh0VmlzaWJsZX0gLz5cblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYgKChmaWVsZC5lZGl0TW9kZSA/PyBmaWVsZC5jb21wdXRlZEVkaXRNb2RlKSAhPT0gRmllbGRFZGl0TW9kZS5EaXNwbGF5KSB7XG5cdFx0XHRjb25zdCBiZWZvcmVEaWFsb2dPcGVuID0gZmllbGQuY29sbGFib3JhdGlvbkVuYWJsZWQgPyBmaWVsZC5ldmVudEhhbmRsZXJzLmhhbmRsZU9wZW5VcGxvYWRlciA6IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGFmdGVyRGlhbG9nT3BlbiA9IGZpZWxkLmNvbGxhYm9yYXRpb25FbmFibGVkID8gZmllbGQuZXZlbnRIYW5kbGVycy5oYW5kbGVDbG9zZVVwbG9hZGVyIDogdW5kZWZpbmVkO1xuXG5cdFx0XHRpbm5lckZpbGVQYXJ0ID0ge1xuXHRcdFx0XHQuLi5pbm5lckZpbGVQYXJ0LFxuXHRcdFx0XHRmaWxlVXBsb2FkZXI6IChcblx0XHRcdFx0XHQ8RmlsZVVwbG9hZGVyXG5cdFx0XHRcdFx0XHRuYW1lPVwiRkVWNEZpbGVVcGxvYWRcIlxuXHRcdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZmlsZVVwbG9hZGVyVmlzaWJsZX1cblx0XHRcdFx0XHRcdGJ1dHRvbk9ubHk9XCJ0cnVlXCJcblx0XHRcdFx0XHRcdGljb25Pbmx5PVwidHJ1ZVwiXG5cdFx0XHRcdFx0XHRtdWx0aXBsZT1cImZhbHNlXCJcblx0XHRcdFx0XHRcdHRvb2x0aXA9XCJ7c2FwLmZlLmkxOG4+TV9GSUVMRF9GSUxFVVBMT0FERVJfVVBMT0FEX0JVVFRPTl9UT09MVElQfVwiXG5cdFx0XHRcdFx0XHRpY29uPVwic2FwLWljb246Ly91cGxvYWRcIlxuXHRcdFx0XHRcdFx0c3R5bGU9XCJUcmFuc3BhcmVudFwiXG5cdFx0XHRcdFx0XHRzZW5kWEhSPVwidHJ1ZVwiXG5cdFx0XHRcdFx0XHR1c2VNdWx0aXBhcnQ9XCJmYWxzZVwiXG5cdFx0XHRcdFx0XHRzYW1lRmlsZW5hbWVBbGxvd2VkPVwidHJ1ZVwiXG5cdFx0XHRcdFx0XHRtaW1lVHlwZT17ZmlsZUFjY2VwdGFibGVNZWRpYVR5cGVzfVxuXHRcdFx0XHRcdFx0dHlwZU1pc3NtYXRjaD17XG5cdFx0XHRcdFx0XHRcdGZpZWxkLmV2ZW50SGFuZGxlcnMuaGFuZGxlVHlwZU1pc3NtYXRjaCBhcyB1bmtub3duIGFzIChvRXZlbnQ6IEZpbGVVcGxvYWRlciRUeXBlTWlzc21hdGNoRXZlbnQpID0+IHZvaWRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG1heGltdW1GaWxlU2l6ZT17ZmlsZU1heGltdW1TaXplfVxuXHRcdFx0XHRcdFx0ZmlsZVNpemVFeGNlZWQ9e1xuXHRcdFx0XHRcdFx0XHRmaWVsZC5ldmVudEhhbmRsZXJzLmhhbmRsZUZpbGVTaXplRXhjZWVkIGFzIHVua25vd24gYXMgKG9FdmVudDogRmlsZVVwbG9hZGVyJEZpbGVTaXplRXhjZWVkRXZlbnQpID0+IHZvaWRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHVwbG9hZE9uQ2hhbmdlPVwiZmFsc2VcIlxuXHRcdFx0XHRcdFx0dXBsb2FkQ29tcGxldGU9e1xuXHRcdFx0XHRcdFx0XHRmaWVsZC5ldmVudEhhbmRsZXJzLmhhbmRsZVVwbG9hZENvbXBsZXRlIGFzIHVua25vd24gYXMgKG9FdmVudDogRmlsZVVwbG9hZGVyJFVwbG9hZENvbXBsZXRlRXZlbnQpID0+IHZvaWRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0TWV0aG9kPXtmaWVsZC5pc0R5bmFtaWNJbnN0YW50aWF0aW9uID8gRmlsZVVwbG9hZGVySHR0cFJlcXVlc3RNZXRob2QuUHV0IDogXCJQdXRcIn1cblx0XHRcdFx0XHRcdGNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy51cGxvYWRTdHJlYW0gYXMgdW5rbm93biBhcyAob0V2ZW50OiBGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdFx0XHRiZWZvcmVEaWFsb2dPcGVuPXtiZWZvcmVEaWFsb2dPcGVuIGFzIHVua25vd24gYXMgKG9FdmVudDogRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdFx0XHRhZnRlckRpYWxvZ0Nsb3NlPXthZnRlckRpYWxvZ09wZW4gYXMgdW5rbm93biBhcyAob0V2ZW50OiBFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0XHRcdHVwbG9hZFN0YXJ0PXtmaWVsZC5ldmVudEhhbmRsZXJzLmhhbmRsZU9wZW5VcGxvYWRlciBhcyB1bmtub3duIGFzIChvRXZlbnQ6IEZpbGVVcGxvYWRlciRVcGxvYWRTdGFydEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCksXG5cdFx0XHRcdGRlbGV0ZUJ1dHRvbjogKFxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGljb249XCJzYXAtaWNvbjovL3N5cy1jYW5jZWxcIlxuXHRcdFx0XHRcdFx0dHlwZT1cIlRyYW5zcGFyZW50XCJcblx0XHRcdFx0XHRcdHByZXNzPXtmaWVsZC5ldmVudEhhbmRsZXJzLnJlbW92ZVN0cmVhbSBhcyB1bmtub3duIGFzIChvRXZlbnQ6IEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRcdFx0dG9vbHRpcD1cIntzYXAuZmUuaTE4bj5NX0ZJRUxEX0ZJTEVVUExPQURFUl9ERUxFVEVfQlVUVE9OX1RPT0xUSVB9XCJcblx0XHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmZpbGVVcGxvYWRlclZpc2libGV9XG5cdFx0XHRcdFx0XHRlbmFibGVkPXtmaWxlU3RyZWFtTm90RW1wdHl9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZpbGVXcmFwcGVyXG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZFJ1bnRpbWVIZWxwZXI6ICdzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlcid9XCJcblx0XHRcdFx0dmlzaWJsZT17ZmllbGQudmlzaWJsZX1cblx0XHRcdFx0dXBsb2FkVXJsPXtmaWxlVXBsb2FkVXJsfVxuXHRcdFx0XHRwcm9wZXJ0eVBhdGg9e2ZpZWxkLmZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aH1cblx0XHRcdFx0ZmlsZW5hbWU9e2ZpbGVGaWxlbmFtZVBhdGh9XG5cdFx0XHRcdG1lZGlhVHlwZT17ZmlsZU1lZGlhVHlwZX1cblx0XHRcdFx0ZmllbGRHcm91cElkcz17ZmllbGQuZmllbGRHcm91cElkc31cblx0XHRcdFx0dmFsaWRhdGVGaWVsZEdyb3VwPXtmaWVsZC5ldmVudEhhbmRsZXJzLnZhbGlkYXRlRmllbGRHcm91cCBhcyAob0V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+LFxuXHRcdFx0XHRcdGlubmVyRmlsZVBhcnRcblx0XHRcdFx0fX1cblx0XHRcdDwvRmlsZVdyYXBwZXI+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBMaW5rIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0TGlua1RlbXBsYXRlKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0bGV0IGxpbmtVcmw7XG5cdFx0bGV0IGljb25Vcmw7XG5cdFx0bGV0IGxpbmtBY3RpdmVkO1xuXHRcdHR5cGUgTGlua1RhcmdldCA9IFwiX2JsYW5rXCIgfCBcIl9zZWxmXCIgfCBcIl90b3BcIiB8IFwiX3BhcmVudFwiO1xuXHRcdGxldCBsaW5rVGFyZ2V0OiBMaW5rVGFyZ2V0IHwgdW5kZWZpbmVkO1xuXG5cdFx0c3dpdGNoIChmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC4kVHlwZSBhcyBzdHJpbmcpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8TGlua1xuXHRcdFx0XHRcdFx0aWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdFx0XHR0ZXh0PXtEaXNwbGF5U3R5bGUuY29tcHV0ZVRleHRXaXRoV2hpdGVTcGFjZShmaWVsZCl9XG5cdFx0XHRcdFx0XHRwcmVzcz17ZmllbGQuZXZlbnRIYW5kbGVycy5vbkRhdGFGaWVsZFdpdGhJQk4gYXMgdW5rbm93biBhcyAob0V2ZW50OiBMaW5rJFByZXNzRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBNVGV4dFJlbmRlcldoaXRlc3BhY2VXcmFwXCJcblx0XHRcdFx0XHRcdGFjY2Vzc2libGVSb2xlPXtMaW5rQWNjZXNzaWJsZVJvbGUuQnV0dG9ufVxuXHRcdFx0XHRcdFx0cmVhY3RpdmVBcmVhTW9kZT17ZmllbGQuZm9ybWF0T3B0aW9ucz8ucmVhY3RpdmVBcmVhTW9kZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PExpbmtcblx0XHRcdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZFJ1bnRpbWVIZWxwZXI6ICdzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlcid9XCJcblx0XHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHRcdFx0dGV4dD17ZmllbGQudGV4dH1cblx0XHRcdFx0XHRcdHByZXNzPXtmaWVsZC5ldmVudEhhbmRsZXJzLm9uRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoIGFzIHVua25vd24gYXMgKG9FdmVudDogTGluayRQcmVzc0V2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRcdFx0ZW5hYmxlZD17ZmllbGQuZm9ybWF0T3B0aW9ucy5pc0FuYWx5dGljYWxBZ2dyZWdhdGVkUm93ID8gVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRcdFx0cmVhY3RpdmVBcmVhTW9kZT17ZmllbGQuZm9ybWF0T3B0aW9ucz8ucmVhY3RpdmVBcmVhTW9kZX1cblx0XHRcdFx0XHRcdGNsYXNzPVwic2FwTVRleHRSZW5kZXJXaGl0ZXNwYWNlV3JhcFwiXG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KTtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8TGlua1xuXHRcdFx0XHRcdFx0aWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdFx0XHR0ZXh0PXtmaWVsZC50ZXh0fVxuXHRcdFx0XHRcdFx0cHJlc3M9e2ZpZWxkLmV2ZW50SGFuZGxlcnMub25EYXRhRmllbGRBY3Rpb25CdXR0b24gYXMgdW5rbm93biBhcyAob0V2ZW50OiBMaW5rJFByZXNzRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdFx0XHRlbmFibGVkPXtmaWVsZC5mb3JtYXRPcHRpb25zLmlzQW5hbHl0aWNhbEFnZ3JlZ2F0ZWRSb3cgPyBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdFx0XHRjbGFzcz1cInNhcE1UZXh0UmVuZGVyV2hpdGVzcGFjZVdyYXBcIlxuXHRcdFx0XHRcdFx0YWNjZXNzaWJsZVJvbGU9e0xpbmtBY2Nlc3NpYmxlUm9sZS5CdXR0b259XG5cdFx0XHRcdFx0XHRyZWFjdGl2ZUFyZWFNb2RlPXtmaWVsZC5mb3JtYXRPcHRpb25zPy5yZWFjdGl2ZUFyZWFNb2RlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0XHRcdGNvbnN0IGh0bWw1TGlua1RhcmdldCA9IGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkhUTUw1Py5MaW5rVGFyZ2V0O1xuXHRcdFx0XHRmaWVsZC50ZXh0ID0gRGlzcGxheVN0eWxlLmNvbXB1dGVUZXh0V2l0aFdoaXRlU3BhY2UoZmllbGQpO1xuXHRcdFx0XHRpY29uVXJsID0gKGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoIGFzIERhdGFGaWVsZFR5cGVzKS5JY29uVXJsXG5cdFx0XHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdChmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCBhcyBEYXRhRmllbGRUeXBlcykuSWNvblVybCBhcyB1bmtub3duIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFN0cmluZz5cblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRjb25zdCBsaW5rQmluZGluZyA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHQoZmllbGQuY29udmVydGVkTWV0YVBhdGggYXMgRGF0YUZpZWxkV2l0aFVybCkuVXJsIGFzIHVua25vd24gYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8U3RyaW5nPlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRsaW5rVXJsID0gY29tcGlsZUV4cHJlc3Npb24obGlua0JpbmRpbmcpO1xuXHRcdFx0XHRsaW5rQWN0aXZlZCA9IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChsaW5rQmluZGluZywgXCJcIikpKTtcblx0XHRcdFx0bGlua1RhcmdldCA9IGh0bWw1TGlua1RhcmdldCAmJiAoaHRtbDVMaW5rVGFyZ2V0LnRvU3RyaW5nKCkgYXMgTGlua1RhcmdldCk7XG5cdFx0fVxuXG5cdFx0aWYgKGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcyB8fCBmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNQaG9uZU51bWJlcikge1xuXHRcdFx0Y29uc3QgbGlua0lzRW1haWxBZGRyZXNzID0gZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbXVuaWNhdGlvbj8uSXNFbWFpbEFkZHJlc3MgIT09IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGxpbmtJc1Bob25lTnVtYmVyID0gZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbXVuaWNhdGlvbj8uSXNQaG9uZU51bWJlciAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlWYWx1ZUJpbmRpbmcgPSBGaWVsZFRlbXBsYXRpbmcuZ2V0VmFsdWVCaW5kaW5nKGZpZWxkLmRhdGFNb2RlbFBhdGgsIHt9KTtcblx0XHRcdGNvbnN0IG1haWxCbG9ja0lkID0gZmllbGQuZGlzcGxheVN0eWxlSWQgPyBmaWVsZC5kaXNwbGF5U3R5bGVJZCA6IGBtYWlsQmxvY2ske3VpZCgpfWA7XG5cdFx0XHRpZiAobGlua0lzRW1haWxBZGRyZXNzKSB7XG5cdFx0XHRcdGxpbmtVcmwgPSBgbWFpbHRvOiR7cHJvcGVydHlWYWx1ZUJpbmRpbmd9YDtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8RW1haWxcblx0XHRcdFx0XHRcdGlkPXttYWlsQmxvY2tJZH1cblx0XHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHRcdFx0dGV4dD17ZmllbGQudGV4dH1cblx0XHRcdFx0XHRcdG1haWw9e3Byb3BlcnR5VmFsdWVCaW5kaW5nfVxuXHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5ID8gZmllbGQuYXJpYUxhYmVsbGVkQnkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRlbXB0eUluZGljYXRvck1vZGU9e2ZpZWxkLmVtcHR5SW5kaWNhdG9yTW9kZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGxpbmtJc1Bob25lTnVtYmVyKSB7XG5cdFx0XHRcdGxpbmtVcmwgPSBgdGVsOiR7cHJvcGVydHlWYWx1ZUJpbmRpbmd9YDtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8TGlua1xuXHRcdFx0XHRcdFx0aWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdFx0XHR0ZXh0PXtEaXNwbGF5U3R5bGUuY29tcHV0ZVRleHRXaXRoV2hpdGVTcGFjZShmaWVsZCl9XG5cdFx0XHRcdFx0XHRocmVmPXtsaW5rVXJsfVxuXHRcdFx0XHRcdFx0ZW5hYmxlZD17bGlua0FjdGl2ZWR9XG5cdFx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBNVGV4dFJlbmRlcldoaXRlc3BhY2VXcmFwXCJcblx0XHRcdFx0XHRcdHJlYWN0aXZlQXJlYU1vZGU9e2ZpZWxkLmZvcm1hdE9wdGlvbnM/LnJlYWN0aXZlQXJlYU1vZGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaWNvblVybCkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PE9iamVjdFN0YXR1c1xuXHRcdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZFJ1bnRpbWVIZWxwZXI6ICdzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlcid9XCJcblx0XHRcdFx0XHRpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdFx0aWNvbj17aWNvblVybH1cblx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX1cblx0XHRcdFx0XHR0ZXh0PXtmaWVsZC50ZXh0fVxuXHRcdFx0XHRcdHByZXNzPXtmaWVsZC5ldmVudEhhbmRsZXJzLm9wZW5FeHRlcm5hbExpbmsgYXMgdW5rbm93biBhcyAob0V2ZW50OiBFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0XHRhY3RpdmU9e2xpbmtBY3RpdmVkfVxuXHRcdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRcdHJlYWN0aXZlQXJlYU1vZGU9e2ZpZWxkLmZvcm1hdE9wdGlvbnM/LnJlYWN0aXZlQXJlYU1vZGV9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PXtcInVybFwifSB2YWx1ZT17bGlua1VybH0gLz5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L09iamVjdFN0YXR1cz5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxMaW5rXG5cdFx0XHRcdFx0aWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfVxuXHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHRcdHRleHQ9e2ZpZWxkLnRleHR9XG5cdFx0XHRcdFx0aHJlZj17bGlua1VybH1cblx0XHRcdFx0XHRlbmFibGVkPXtsaW5rQWN0aXZlZH1cblx0XHRcdFx0XHR0YXJnZXQ9e2xpbmtUYXJnZXQgPT09IHVuZGVmaW5lZCA/IFwiX3RvcFwiIDogbGlua1RhcmdldH1cblx0XHRcdFx0XHR3cmFwcGluZz17ZmllbGQud3JhcCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGZpZWxkLndyYXB9XG5cdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdFx0cmVhY3RpdmVBcmVhTW9kZT17ZmllbGQuZm9ybWF0T3B0aW9ucz8ucmVhY3RpdmVBcmVhTW9kZX1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBGaW5kIHRoZSBmb3JlaWduIGtleSBvZiB0YXJnZXQgZW50aXR5IHdoaWNoIHF1aWNrIHZpZXcgRmFjZXRzIHdlIHdhbnQgdG8gZGlzcGxheS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBUaGUga2V5IG9mIHRoZSB0YXJnZXQgZW50aXR5XG5cdCAqL1xuXHRnZXRGb3JlaWduS2V5Rm9yQ3VzdG9tRGF0YShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHJlbGF0aXZlUGF0aFRvUXVpY2tWaWV3RW50aXR5ID0gUXVpY2tWaWV3LmdldFJlbGF0aXZlUGF0aFRvUXVpY2tWaWV3RW50aXR5KGZpZWxkLmRhdGFNb2RlbFBhdGgpO1xuXHRcdGlmIChyZWxhdGl2ZVBhdGhUb1F1aWNrVmlld0VudGl0eSkge1xuXHRcdFx0Y29uc3QgdGFyZ2V0TmF2aWdhdGlvblByb3BlcnRpZXMgPSBmaWVsZC5kYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXM7XG5cdFx0XHRjb25zdCB0YXJnZXROYXZQcm9wID0gdGFyZ2V0TmF2aWdhdGlvblByb3BlcnRpZXMuZmluZCgobmF2UHJvcCkgPT4gbmF2UHJvcC5uYW1lID09PSByZWxhdGl2ZVBhdGhUb1F1aWNrVmlld0VudGl0eSk7XG5cdFx0XHRjb25zdCByZWZDb25zdHJhaW50ID0gdGFyZ2V0TmF2UHJvcD8ucmVmZXJlbnRpYWxDb25zdHJhaW50O1xuXHRcdFx0Y29uc3Qga2V5ID0gcmVmQ29uc3RyYWludD8ubGVuZ3RoICYmIHR5cGVvZiByZWZDb25zdHJhaW50WzBdID09PSBcIm9iamVjdFwiICYmIHJlZkNvbnN0cmFpbnRbMF0udGFyZ2V0UHJvcGVydHk7XG5cdFx0XHRjb25zdCBrZXlUb0ZldGNoID0ga2V5ID8gYCR7cmVsYXRpdmVQYXRoVG9RdWlja1ZpZXdFbnRpdHl9LyR7a2V5fWAgOiB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoa2V5VG9GZXRjaCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBrZXlUb0ZldGNoO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIGNoZWNrIGV4cHJlc3Npb24gZm9yIGRpc3BsYXlpbmcgb3Igbm90IGEgcXVpY2t2aWV3LlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIFRoZSBrZXkgb2YgdGhlIHRhcmdldCBlbnRpdHlcblx0ICovXG5cdGdldEZvcmVpZ25LZXlWYWx1ZUV4cHJlc3Npb24oZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCBmb3JlaWduS2V5UmVsYXRpdmVQYXRoID0gUXVpY2tWaWV3LmdldFJlbGF0aXZlUGF0aFRvUXVpY2tWaWV3RW50aXR5KGZpZWxkLmRhdGFNb2RlbFBhdGgpXG5cdFx0XHQ/IHRoaXMuZ2V0Rm9yZWlnbktleUZvckN1c3RvbURhdGEoZmllbGQpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9IHtcblx0XHRcdHBhdGg6IGAke2ZvcmVpZ25LZXlSZWxhdGl2ZVBhdGh9YCxcblx0XHRcdF90eXBlOiBcIlBhdGhJbk1vZGVsXCJcblx0XHR9O1xuXHRcdHJldHVybiBgJHtjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoZXF1YWwoZm9yZWlnbktleVJlbGF0aXZlUGF0aCwgdW5kZWZpbmVkKSwgY29uc3RhbnQodHJ1ZSksIG5vdChlcXVhbChudWxsLCBleHByZXNzaW9uKSkpKX1gO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIFN0YW5kYXJkTGlua1dpdGhRdWlja1ZpZXcgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHBhcmFtIHRleHQgVGhlIHRleHQgdG8gZGlzcGxheVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldFN0YW5kYXJkTGlua1dpdGhRdWlja1ZpZXdUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsIHRleHQ6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PExpbmtcblx0XHRcdFx0aWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfVxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGRSdW50aW1lSGVscGVyOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXInfVwiXG5cdFx0XHRcdHRleHQ9e3RleHR9XG5cdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHR3cmFwcGluZz17ZmllbGQud3JhcCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGZpZWxkLndyYXB9XG5cdFx0XHRcdHByZXNzPXtmaWVsZC5ldmVudEhhbmRsZXJzLmxpbmtQcmVzc2VkfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdGFjY2Vzc2libGVSb2xlPXtMaW5rQWNjZXNzaWJsZVJvbGUuQnV0dG9ufVxuXHRcdFx0XHRyZWFjdGl2ZUFyZWFNb2RlPXtmaWVsZC5mb3JtYXRPcHRpb25zPy5yZWFjdGl2ZUFyZWFNb2RlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFs8Q3VzdG9tRGF0YSBrZXk9e1wibG9hZFZhbHVlXCJ9IHZhbHVlPXtmaWVsZC52YWx1ZUFzU3RyaW5nQmluZGluZ0V4cHJlc3Npb259IC8+XSxcblx0XHRcdFx0XHRkZXBlbmRlbnRzOiBEaXNwbGF5U3R5bGUuZ2V0TWRjTGlua0ZvclF1aWNrVmlldyhmaWVsZClcblx0XHRcdFx0fX1cblx0XHRcdDwvTGluaz5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIENvbmRpdGlvbmFsTGlua1RlbXBsYXRlIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBjb25kaXRpb24gQ29uZGl0aW9uIHRvIGRpc3BsYXkgYSBMaW5rIG9yIGEgVGV4dFxuXHQgKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBkaXNwbGF5XG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0Q29uZGl0aW9uYWxMaW5rV2l0aFF1aWNrVmlld1RlbXBsYXRlKFxuXHRcdGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyxcblx0XHRjb25kaXRpb246IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRcdHRleHQ6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG5cdCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxUZXh0TGlua1xuXHRcdFx0XHRpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZFJ1bnRpbWVIZWxwZXI6ICdzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlcid9XCJcblx0XHRcdFx0c2hvd0FzTGluaz17Y29uZGl0aW9uIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0c2VtYW50aWNPYmplY3Q9e2ZpZWxkLnNlbWFudGljT2JqZWN0fVxuXHRcdFx0XHR0ZXh0PXt0ZXh0fVxuXHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX1cblx0XHRcdFx0d3JhcHBpbmc9e2ZpZWxkLndyYXAgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBmaWVsZC53cmFwfVxuXHRcdFx0XHRwcmVzcz17ZmllbGQuZXZlbnRIYW5kbGVycy5saW5rUHJlc3NlZH1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5fVxuXHRcdFx0XHRlbXB0eUluZGljYXRvck1vZGU9e2ZpZWxkLmVtcHR5SW5kaWNhdG9yTW9kZX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbPEN1c3RvbURhdGEga2V5PXtcImxvYWRWYWx1ZVwifSB2YWx1ZT17ZmllbGQudmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9ufSAvPl0sXG5cdFx0XHRcdFx0ZGVwZW5kZW50czogRGlzcGxheVN0eWxlLmdldE1kY0xpbmtGb3JRdWlja1ZpZXcoZmllbGQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L1RleHRMaW5rPlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgQ29uZGl0aW9uYWxMaW5rVGVtcGxhdGUgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHBhcmFtIGNvbmRpdGlvbiBDb25kaXRpb24gdG8gZGlzcGxheSBhIExpbmsgb3IgYSBUZXh0XG5cdCAqIEBwYXJhbSBjb250ZW50VHJ1ZSBUaGUgQ29udHJvbCB0byBkaXNwbGF5IGluIGNhc2UgY29uZGl0aW9uIGlzIHRydWVcblx0ICogQHBhcmFtIGNvbnRlbnRGYWxzZSBUaGUgQ29udHJvbCB0byBkaXNwbGF5IGluIGNhc2UgY29uZGl0aW9uIGlzIGZhbHNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0Q29uZGl0aW9uYWxXcmFwcGVyRm9yUXVpY2tWaWV3VGVtcGxhdGUoXG5cdFx0ZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLFxuXHRcdGNvbmRpdGlvbjogc3RyaW5nLFxuXHRcdGNvbnRlbnRUcnVlOiBzdHJpbmcsXG5cdFx0Y29udGVudEZhbHNlOiBzdHJpbmdcblx0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PENvbmRpdGlvbmFsV3JhcHBlciB2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX0gY29uZGl0aW9uPXtjb25kaXRpb24gYXMgdW5rbm93biBhcyBib29sZWFufT5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjb250ZW50VHJ1ZTogY29udGVudFRydWUsXG5cdFx0XHRcdFx0Y29udGVudEZhbHNlOiBjb250ZW50RmFsc2Vcblx0XHRcdFx0fX1cblx0XHRcdDwvQ29uZGl0aW9uYWxXcmFwcGVyPlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgTGlua1dpdGhRdWlja1ZpZXcgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRMaW5rV2l0aFF1aWNrVmlld1RlbXBsYXRlKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdGV4dCA9IGZpZWxkLmZvcm1hdE9wdGlvbnMucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdFxuXHRcdFx0PyBmaWVsZC50ZXh0RnJvbVZhbHVlTGlzdFxuXHRcdFx0OiBEaXNwbGF5U3R5bGUuY29tcHV0ZVRleHRXaXRoV2hpdGVTcGFjZShmaWVsZCk7XG5cdFx0Y29uc3QgY29uZGl0aW9uID0gdGhpcy5nZXRRdWlja1ZpZXdDb25kaXRpb24oZmllbGQpO1xuXHRcdGlmIChjb25kaXRpb24gPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRTdGFuZGFyZExpbmtXaXRoUXVpY2tWaWV3VGVtcGxhdGUoZmllbGQsIHRleHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5nZXRDb25kaXRpb25hbExpbmtXaXRoUXVpY2tWaWV3VGVtcGxhdGUoZmllbGQsIGNvbmRpdGlvbiwgdGV4dCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgVGV4dCB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldFRleHRUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGlmIChmaWVsZC5mb3JtYXRPcHRpb25zLnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxUZXh0XG5cdFx0XHRcdFx0aWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfVxuXHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHRcdHRleHQ9e2ZpZWxkLnRleHRGcm9tVmFsdWVMaXN0fVxuXHRcdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZFJ1bnRpbWU6ICdzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkUnVudGltZSd9XCJcblx0XHRcdFx0XHRlbXB0eUluZGljYXRvck1vZGU9e2ZpZWxkLmVtcHR5SW5kaWNhdG9yTW9kZX1cblx0XHRcdFx0XHRyZW5kZXJXaGl0ZXNwYWNlPVwidHJ1ZVwiXG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBXaGVuIGhhdmluZyBhIFRleHRBcnJhbmdlbWVudCB3aXRoIFRleHRPbmx5LCBSVEEgY2FuIG9ubHkgZmluZCB0aGUgYmluZGluZyBmb3IgdGhlIHRleHQsIGJ1dCBub3QgZm9yIHRoZSBmaWVsZC5cblx0XHRcdC8vIFRvIHByZXZlbnQgdGhhdCBzdWNoIGEgZmllbGQgY2FuIGJlIGFkZGVkIHR3aWNlIHZpYSBSVEEsIHdlIG5lZWQgdG8gcHJvdmlkZSB0aGUgZmllbGQgYmluZGluZyBhcyBhIGR1bW15IGN1c3RvbSBiaW5kaW5nLlxuXHRcdFx0bGV0IGN1c3RvbWRhdGE7XG5cdFx0XHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSA9PT0gXCJEZXNjcmlwdGlvblwiICYmIGZpZWxkLnZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbikge1xuXHRcdFx0XHRjdXN0b21kYXRhID0gPEN1c3RvbURhdGEga2V5PVwiZmllbGRCaW5kaW5nXCIgdmFsdWU9e2ZpZWxkLnZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbn0gLz47XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8VGV4dFxuXHRcdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX1cblx0XHRcdFx0XHR0ZXh0PXtmaWVsZC50ZXh0fVxuXHRcdFx0XHRcdHdyYXBwaW5nPXtmaWVsZC53cmFwfVxuXHRcdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRcdHJlbmRlcldoaXRlc3BhY2U9XCJ0cnVlXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3VzdG9tZGF0YV1cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L1RleHQ+XG5cdFx0XHQpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0ZW1wbGF0ZSBmb3IgdGhlIHBhc3N3b3JkIGZpZWxkLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0UGFzc3dvcmRUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHRleHRCaW5kaW5nID0gRmllbGRUZW1wbGF0aW5nLmdldFRleHRCaW5kaW5nKGZpZWxkLmRhdGFNb2RlbFBhdGgsIGZpZWxkLmZvcm1hdE9wdGlvbnMsIHRydWUpO1xuXHRcdGNvbnN0IHRleHRFeHByZXNzaW9uID1cblx0XHRcdGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKHRleHRCaW5kaW5nKSB8fCB0eXBlb2YgdGV4dEJpbmRpbmcgPT09IFwic3RyaW5nXCJcblx0XHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihmb3JtYXRSZXN1bHQoW3RleHRCaW5kaW5nXSwgdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFBhc3N3b3JkVGV4dCkpXG5cdFx0XHRcdDogY29tcGlsZUV4cHJlc3Npb24odGV4dEJpbmRpbmcpO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8VGV4dFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7dmFsdWVGb3JtYXR0ZXJzOiAnc2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlcid9XCJcblx0XHRcdFx0aWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfVxuXHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX1cblx0XHRcdFx0dGV4dD17dGV4dEV4cHJlc3Npb259XG5cdFx0XHRcdHdyYXBwaW5nPXtmaWVsZC53cmFwfVxuXHRcdFx0XHRyZW5kZXJXaGl0ZXNwYWNlPVwidHJ1ZVwiXG5cdFx0XHQ+PC9UZXh0PlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgT2JqZWN0SWRlbnRpZmllciB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldE9iamVjdElkZW50aWZpZXIoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRsZXQgZGVwZW5kZW50czogTWRjTGluayB8IHVuZGVmaW5lZDtcblx0XHRsZXQgdGl0bGVBY3RpdmU7XG5cdFx0aWYgKGZpZWxkLmhhc1F1aWNrVmlldykge1xuXHRcdFx0dGl0bGVBY3RpdmUgPSB0aGlzLmdldFF1aWNrVmlld0NvbmRpdGlvbihmaWVsZCk7XG5cdFx0XHRkZXBlbmRlbnRzID0gRGlzcGxheVN0eWxlLmdldE1kY0xpbmtGb3JRdWlja1ZpZXcoZmllbGQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aXRsZUFjdGl2ZSA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdGxldCBpZGVudGlmaWVyID0gKFxuXHRcdFx0PE9iamVjdElkZW50aWZpZXJcblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkUnVudGltZUhlbHBlcjogJ3NhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lSGVscGVyJ31cIlxuXHRcdFx0XHRpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdHRpdGxlPXtmaWVsZC5pZGVudGlmaWVyVGl0bGV9XG5cdFx0XHRcdHRleHQ9e2ZpZWxkLmlkZW50aWZpZXJUZXh0fVxuXHRcdFx0XHR0aXRsZUFjdGl2ZT17dGl0bGVBY3RpdmV9XG5cdFx0XHRcdHRpdGxlUHJlc3M9e2ZpZWxkLmV2ZW50SGFuZGxlcnMubGlua1ByZXNzZWR9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRlbXB0eUluZGljYXRvck1vZGU9e2ZpZWxkLmVtcHR5SW5kaWNhdG9yTW9kZX1cblx0XHRcdFx0cmVhY3RpdmVBcmVhTW9kZT17ZmllbGQuZm9ybWF0T3B0aW9ucz8ucmVhY3RpdmVBcmVhTW9kZX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbPEN1c3RvbURhdGEga2V5PXtcImxvYWRWYWx1ZVwifSB2YWx1ZT17ZmllbGQudmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9ufSAvPl0sXG5cdFx0XHRcdFx0ZGVwZW5kZW50czogZGVwZW5kZW50c1xuXHRcdFx0XHR9fVxuXHRcdFx0PC9PYmplY3RJZGVudGlmaWVyPlxuXHRcdCk7XG5cdFx0aWYgKGZpZWxkLmhhc1NpdHVhdGlvbnNJbmRpY2F0b3IpIHtcblx0XHRcdGlkZW50aWZpZXIgPSAoXG5cdFx0XHRcdDxIQm94IGFsaWduSXRlbXM9XCJDZW50ZXJcIiBqdXN0aWZ5Q29udGVudD1cIlNwYWNlQmV0d2VlblwiIHdpZHRoPVwiMTAwJVwiPlxuXHRcdFx0XHRcdHtpZGVudGlmaWVyfVxuXHRcdFx0XHRcdDxTaXR1YXRpb25zSW5kaWNhdG9yIGNvbnRleHRQYXRoPXtmaWVsZC5jb250ZXh0UGF0aC5nZXRQYXRoKCl9IHByb3BlcnR5UGF0aD17ZmllbGQuc2l0dWF0aW9uc0luZGljYXRvclByb3BlcnR5UGF0aH0gLz5cblx0XHRcdFx0PC9IQm94PlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aWYgKGZpZWxkLnNob3dFcnJvckluZGljYXRvciAmJiBmaWVsZC5zaG93RXJyb3JPYmplY3RTdGF0dXMpIHtcblx0XHRcdGlkZW50aWZpZXIgPSAoXG5cdFx0XHRcdDxWQm94PlxuXHRcdFx0XHRcdHtpZGVudGlmaWVyfVxuXHRcdFx0XHRcdDxPYmplY3RTdGF0dXNcblx0XHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLnNob3dFcnJvck9iamVjdFN0YXR1c31cblx0XHRcdFx0XHRcdGNsYXNzPVwic2FwVWlTbWFsbE1hcmdpbkJvdHRvbVwiXG5cdFx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPkNvbnRhaW5zX0Vycm9yc31cIlxuXHRcdFx0XHRcdFx0c3RhdGU9XCJFcnJvclwiXG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9WQm94PlxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaWRlbnRpZmllcjtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBPYmplY3RTdGF0dXMgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRPYmplY3RTdGF0dXMoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRsZXQgb2JqZWN0U3RhdHVzO1xuXHRcdGxldCByZXF1aXJlZEhlbHBlciA9IHtcblx0XHRcdFwiY29yZTpyZXF1aXJlXCI6IFwie0ZpZWxkUnVudGltZUhlbHBlcjogJ3NhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lSGVscGVyJ31cIlxuXHRcdH07XG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkPihmaWVsZC5tZXRhUGF0aCwgZmllbGQuY29udGV4dFBhdGgpO1xuXHRcdGNvbnN0IGVuaGFuY2VkVmFsdWVEYXRhTW9kZWxQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHk+KFxuXHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5WYWx1ZS5wYXRoXG5cdFx0KTtcblx0XHRjb25zdCBjb25kaXRpb24gPSBoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdChlbmhhbmNlZFZhbHVlRGF0YU1vZGVsUGF0aCk7XG5cdFx0Y29uc3QgY29udmVydGVkRGF0YUZpZWxkID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhUG9pbnRUeXBlPihmaWVsZC5tZXRhUGF0aCk7XG5cdFx0Y29uc3QgY3JpdGljYWxpdHlJY29uID0gYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uKGNvbnZlcnRlZERhdGFGaWVsZCk7XG5cdFx0Y29uc3Qgc3RhdGUgPSBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yKGNvbnZlcnRlZERhdGFGaWVsZCk7XG5cblx0XHQvLyBFeHRyYWN0IHRvb2x0aXAgZnJvbSBRdWlja0luZm8gYW5ub3RhdGlvbiAtIGNoZWNrIERhdGFGaWVsZCBmaXJzdCwgdGhlbiBwcm9wZXJ0eVxuXHRcdGNvbnN0IHRvb2xUaXBWYWx1ZSA9IGdldFRvb2x0aXBWYWx1ZShkYXRhTW9kZWxPYmplY3RQYXRoLCBlbmhhbmNlZFZhbHVlRGF0YU1vZGVsUGF0aCk7XG5cblx0XHRjb25zdCBsaW5rVXJsID0gKGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoIGFzIERhdGFGaWVsZFdpdGhVcmwpLlVybFxuXHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0XHQoZmllbGQuY29udmVydGVkTWV0YVBhdGggYXMgRGF0YUZpZWxkV2l0aFVybCkuVXJsIGFzIHVua25vd24gYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8U3RyaW5nPlxuXHRcdFx0XHRcdClcblx0XHRcdCAgKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucy5pc0FuYWx5dGljcyAmJiBmaWVsZC5oYXNVbml0T3JDdXJyZW5jeSkge1xuXHRcdFx0Y29uc3QgY29udGVudCA9IERpc3BsYXlTdHlsZS5nZXRDdXJyZW5jeU9yVW5pdENvbnRyb2woZmllbGQsIDxUZXh0IHRleHQ9e2ZpZWxkLnRleHR9IHRleHRBbGlnbj1cIkVuZFwiPjwvVGV4dD4pO1xuXHRcdFx0b2JqZWN0U3RhdHVzID0gKFxuXHRcdFx0XHQ8Q29uZGl0aW9uYWxXcmFwcGVyIGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH0gY29uZGl0aW9uPXtjb25kaXRpb24gYXMgdW5rbm93biBhcyBib29sZWFufT5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y29udGVudFRydWU6IChcblx0XHRcdFx0XHRcdFx0PE9iamVjdFN0YXR1c1xuXHRcdFx0XHRcdFx0XHRcdGljb249e2NyaXRpY2FsaXR5SWNvbn1cblx0XHRcdFx0XHRcdFx0XHRzdGF0ZT17c3RhdGV9XG5cdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdFx0XHRcdFx0dGV4dD17ZmllbGQudGV4dH1cblx0XHRcdFx0XHRcdFx0XHR0b29sdGlwPXt0b29sVGlwVmFsdWV9XG5cdFx0XHRcdFx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBNVGV4dFJlbmRlcldoaXRlc3BhY2VXcmFwXCJcblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRjb250ZW50RmFsc2U6IGNvbnRlbnRcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0NvbmRpdGlvbmFsV3JhcHBlcj5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxldCBkZXBlbmRlbnRzOiBNZGNMaW5rIHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IGFjdGl2ZSA9IGZhbHNlO1xuXHRcdFx0bGV0IGlzQWN0aXZlO1xuXHRcdFx0bGV0IHByZXNzQWN0aW9uO1xuXHRcdFx0aWYgKGZpZWxkLmhhc1F1aWNrVmlldykge1xuXHRcdFx0XHRkZXBlbmRlbnRzID0gRGlzcGxheVN0eWxlLmdldE1kY0xpbmtGb3JRdWlja1ZpZXcoZmllbGQpO1xuXHRcdFx0XHRpc0FjdGl2ZSA9IHRoaXMuZ2V0UXVpY2tWaWV3Q29uZGl0aW9uKGZpZWxkKTtcblx0XHRcdFx0cHJlc3NBY3Rpb24gPSBmaWVsZC5ldmVudEhhbmRsZXJzLmxpbmtQcmVzc2VkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGxpbmtVcmwpIHtcblx0XHRcdFx0YWN0aXZlID0gdHJ1ZTtcblx0XHRcdFx0cmVxdWlyZWRIZWxwZXIgPSB7XG5cdFx0XHRcdFx0XCJjb3JlOnJlcXVpcmVcIjogXCJ7RmllbGRSdW50aW1lSGVscGVyOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXInfVwiXG5cdFx0XHRcdH07XG5cdFx0XHRcdHByZXNzQWN0aW9uID0gZmllbGQuZXZlbnRIYW5kbGVycy5vcGVuRXh0ZXJuYWxMaW5rO1xuXHRcdFx0fVxuXG5cdFx0XHRvYmplY3RTdGF0dXMgPSAoXG5cdFx0XHRcdDxPYmplY3RTdGF0dXNcblx0XHRcdFx0XHRpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdFx0aWNvbj17Y3JpdGljYWxpdHlJY29ufVxuXHRcdFx0XHRcdHN0YXRlPXtzdGF0ZX1cblx0XHRcdFx0XHR0ZXh0PXtmaWVsZC50ZXh0fVxuXHRcdFx0XHRcdHRvb2x0aXA9e3Rvb2xUaXBWYWx1ZX1cblx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX1cblx0XHRcdFx0XHRlbXB0eUluZGljYXRvck1vZGU9e2ZpZWxkLmVtcHR5SW5kaWNhdG9yTW9kZX1cblx0XHRcdFx0XHR7Li4ucmVxdWlyZWRIZWxwZXJ9XG5cdFx0XHRcdFx0YWN0aXZlPXtpc0FjdGl2ZSA/IGlzQWN0aXZlIDogYWN0aXZlfVxuXHRcdFx0XHRcdHByZXNzPXtwcmVzc0FjdGlvbn1cblx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0XHRyZWFjdGl2ZUFyZWFNb2RlPXtmaWVsZC5mb3JtYXRPcHRpb25zPy5yZWFjdGl2ZUFyZWFNb2RlfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IFtcblx0XHRcdFx0XHRcdFx0PEN1c3RvbURhdGEga2V5PXtcImxvYWRWYWx1ZVwifSB2YWx1ZT17ZmllbGQudmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9ufSAvPixcblx0XHRcdFx0XHRcdFx0PEN1c3RvbURhdGEga2V5PXtcInVybFwifSB2YWx1ZT17bGlua1VybH0gLz5cblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRkZXBlbmRlbnRzOiBkZXBlbmRlbnRzXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9PYmplY3RTdGF0dXM+XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvYmplY3RTdGF0dXM7XG5cdH0sXG5cblx0Z2V0TWRjTGlua0ZvclF1aWNrVmlldyhmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBNZGNMaW5rIHtcblx0XHRyZXR1cm4gbmV3IFF1aWNrVmlldyhcblx0XHRcdGZpZWxkLmRhdGFNb2RlbFBhdGgsXG5cdFx0XHRmaWVsZC5tZXRhUGF0aC5nZXRQYXRoKCksXG5cdFx0XHRmaWVsZC5jb250ZXh0UGF0aC5nZXRQYXRoKCksXG5cdFx0XHRmaWVsZC5zZW1hbnRpY09iamVjdFxuXHRcdCkuY3JlYXRlQ29udGVudCgpIGFzIE1kY0xpbms7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgTGFiZWxTZW1hbnRpY0tleSB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldExhYmVsU2VtYW50aWNLZXkoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCBjb250ZW50VHJ1ZSA9IChcblx0XHRcdDxMaW5rXG5cdFx0XHRcdHRleHQ9e2ZpZWxkLnRleHR9XG5cdFx0XHRcdHdyYXBwaW5nPVwidHJ1ZVwiXG5cdFx0XHRcdGVtcGhhc2l6ZWQ9XCJ0cnVlXCJcblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkUnVudGltZUhlbHBlcjogJ3NhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lSGVscGVyJ31cIlxuXHRcdFx0XHRwcmVzcz17ZmllbGQuZXZlbnRIYW5kbGVycy5saW5rUHJlc3NlZH1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRhY2Nlc3NpYmxlUm9sZT17TGlua0FjY2Vzc2libGVSb2xlLkJ1dHRvbn1cblx0XHRcdFx0cmVhY3RpdmVBcmVhTW9kZT17ZmllbGQuZm9ybWF0T3B0aW9ucz8ucmVhY3RpdmVBcmVhTW9kZX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbPEN1c3RvbURhdGEga2V5PXtcImxvYWRWYWx1ZVwifSB2YWx1ZT17ZmllbGQudmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9ufSAvPl0sXG5cdFx0XHRcdFx0ZGVwZW5kZW50czogRGlzcGxheVN0eWxlLmdldE1kY0xpbmtGb3JRdWlja1ZpZXcoZmllbGQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0xpbms+XG5cdFx0KTtcblx0XHRjb25zdCBjb250ZW50RmFsc2UgPSA8TGFiZWwgaWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfSB2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX0gdGV4dD17ZmllbGQuaWRlbnRpZmllclRpdGxlfSBkZXNpZ249XCJCb2xkXCIgLz47XG5cdFx0aWYgKGZpZWxkLmhhc1F1aWNrVmlldykge1xuXHRcdFx0Y29uc3QgaGFzUXVpY2t2aWV3ID0gdGhpcy5nZXRRdWlja1ZpZXdDb25kaXRpb24oZmllbGQpO1xuXHRcdFx0aWYgKGhhc1F1aWNrdmlldyA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRlbnRUcnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0Q29uZGl0aW9uYWxXcmFwcGVyRm9yUXVpY2tWaWV3VGVtcGxhdGUoZmllbGQsIGhhc1F1aWNrdmlldyBhcyBzdHJpbmcsIGNvbnRlbnRUcnVlLCBjb250ZW50RmFsc2UpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gPExhYmVsIGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH0gdmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9IHRleHQ9e2ZpZWxkLmlkZW50aWZpZXJUaXRsZX0gZGVzaWduPVwiQm9sZFwiIC8+O1xuXHR9LFxuXHQvKipcblx0ICogR2V0cyB0aGUgdGVtcGxhdGUgZm9yIHRoZSBzZW1hbnRpYyBrZXkgd2l0aCBkcmFmdCBpbmRpY2F0b3IuXG5cdCAqIEBwYXJhbSBzZW1hbnRpY0tleVRlbXBsYXRlIFRoZSB0ZW1wbGF0ZSByZXN1bHQgd2l0aG91dCBkcmFmdCBpbmRpY2F0b3Jcblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGFkZERyYWZ0SW5kaWNhdG9yKHNlbWFudGljS2V5VGVtcGxhdGU6IHN0cmluZywgZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRpZiAoIWZpZWxkLmZvcm1hdE9wdGlvbnMuZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoKSB7XG5cdFx0XHQvLyBpZiB0aGUgZHJhZnRJbmRpY2F0b3IgaXMgbm90IGhhbmRsZWQgYXQgdGhlIGZpZWxkR3JvdXAgbGV2ZWxcblx0XHRcdC8vVE9ETyBjb3VsZCB0aGlzIGJlIGEgYm9vbGVhbiBubyBkcmFmdEluZGljYXRvclxuXHRcdFx0c2VtYW50aWNLZXlUZW1wbGF0ZSA9IChcblx0XHRcdFx0PEZvcm1FbGVtZW50V3JhcHBlciB2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX0+XG5cdFx0XHRcdFx0PFZCb3ggY2xhc3M9e0ZpZWxkSGVscGVyLmdldE1hcmdpbkNsYXNzKGZpZWxkLmZvcm1hdE9wdGlvbnMuY29tcGFjdFNlbWFudGljS2V5KX0+XG5cdFx0XHRcdFx0XHR7c2VtYW50aWNLZXlUZW1wbGF0ZX1cblx0XHRcdFx0XHRcdDxEcmFmdEluZGljYXRvclxuXHRcdFx0XHRcdFx0XHRkcmFmdEluZGljYXRvclR5cGU9e09iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbkFuZFRleHR9XG5cdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoPXtmaWVsZC5jb250ZXh0UGF0aC5nZXRQYXRoKCl9XG5cdFx0XHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRyYWZ0SW5kaWNhdG9yVmlzaWJsZX1cblx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5ID8gZmllbGQuYXJpYUxhYmVsbGVkQnkgOiBbXX1cblx0XHRcdFx0XHRcdFx0cmVhY3RpdmVBcmVhTW9kZT17ZmllbGQuZm9ybWF0T3B0aW9ucz8ucmVhY3RpdmVBcmVhTW9kZX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHQ8L0Zvcm1FbGVtZW50V3JhcHBlcj5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBzZW1hbnRpY0tleVRlbXBsYXRlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDb21wdXRlcyB0aGUgdGV4dCBwcm9wZXJ0eSB3aXRoIHRoZSBhcHByb3ByaWF0ZSB3aGl0ZSBzcGFjZSBoYW5kbGluZy5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGNvbXB1dGVUZXh0V2l0aFdoaXRlU3BhY2UoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRcdGNvbnN0IHRleHQgPSBGaWVsZFRlbXBsYXRpbmcuZ2V0VGV4dEJpbmRpbmcoXG5cdFx0XHQoZmllbGQuZGF0YU1vZGVsUGF0aEV4dGVybmFsSUQgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pID8/IGZpZWxkLmRhdGFNb2RlbFBhdGgsXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdFx0cmV0dXJuIGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKHRleHQpIHx8IHR5cGVvZiB0ZXh0ID09PSBcInN0cmluZ1wiXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGZvcm1hdFJlc3VsdChbdGV4dF0sIHZhbHVlRm9ybWF0dGVycy5yZXBsYWNlV2hpdGVzcGFjZSkpXG5cdFx0XHQ6IGNvbXBpbGVFeHByZXNzaW9uKHRleHQpO1xuXHR9LFxuXHQvKipcblx0ICogR2V0cyB0aGUgY29uZGl0aW9uIGZvciBoYXZpbmcgYW4gYWN0aXZlIGxpbmsgdGhhdCBvcGVucyB0aGUgcXVpY2sgdmlldy5cblx0ICogQHBhcmFtIGZpZWxkXG5cdCAqIEByZXR1cm5zIEEgY29tcGlsZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBjb25kaXRpb24uXG5cdCAqL1xuXHRnZXRRdWlja1ZpZXdDb25kaXRpb24oZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRcdHN3aXRjaCAoZmllbGQucXVpY2tWaWV3VHlwZSkge1xuXHRcdFx0Y2FzZSBcIkZhY2V0c1wiOlxuXHRcdFx0XHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucy5pc0FuYWx5dGljcyAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRcdC8vIFdlIG9ubHkgY2hlY2sgaWYgdGhlIG5hdmlnYXRpb24gaXMgcmVhY2hhYmxlIGlmIHRoZSB0YWJsZSBpcyBub3QgYW5hbHl0aWNhbC5cblx0XHRcdFx0XHQvLyBJZiB0aGUgdGFibGUgaXMgYW5hbHl0aWNhbCwgd2UgY2Fubm90IHJlbHkgb24gdGhlIG5hdmlnYXRpb24gYmVpbmcgcmVhY2hhYmxlLCBhcyB3ZSBjYW5ub3QgbG9hZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgaW4gdGhlIGFuYWx5dGljYWwgcXVlcmllcy5cblx0XHRcdFx0XHQvL3RoZXJlIGlzIHF1aWNrIHZpZXdGYWNldHMgYW5ub3RhdGlvbiBvbmx5IHRoZW4gd2UgY2hlY2sgaWYgdGhlIG5hdmlnYXRpb24gaXMgcmVhY2hhYmxlXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0Rm9yZWlnbktleVZhbHVlRXhwcmVzc2lvbihmaWVsZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJTZW1hbnRpY0xpbmtzXCI6XG5cdFx0XHRcdGlmIChmaWVsZC5keW5hbWljU2VtYW50aWNPYmplY3RzKSB7XG5cdFx0XHRcdFx0Y29uc3QgbGlzdE9mRHluYW1pY1NlbWFudGljT2JqZWN0czogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5bXSA9IFtdO1xuXHRcdFx0XHRcdGlmIChmaWVsZC5zZW1hbnRpY09iamVjdCkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgd2Ugc2VlIGEgZHluYW1pYyBleHByZXNzaW9uIHdpdGggYSBmb3JtYXR0ZXIsIHdlIHJldHVybiBmYWxzZS4gVGhlIGNvbmRpdGlvbiB3aWxsIGJlIHJlc29sdmVkIGxhdGVyIGluIFRleHRMaW5rIGNvbnRyb2wuXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oY29uc3RhbnQoZmFsc2UpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzZW1hbnRpY09iamVjdEV4cHJlc3Npb24gb2YgZmllbGQuZHluYW1pY1NlbWFudGljT2JqZWN0cykge1xuXHRcdFx0XHRcdFx0aWYgKHNlbWFudGljT2JqZWN0RXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJQYXRoSW5Nb2RlbFwiIHx8IHNlbWFudGljT2JqZWN0RXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJDb25zdGFudFwiKSB7XG5cdFx0XHRcdFx0XHRcdGxpc3RPZkR5bmFtaWNTZW1hbnRpY09iamVjdHMucHVzaChzZW1hbnRpY09iamVjdEV4cHJlc3Npb24pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gSWYgd2Ugc2VlIGEgZHluYW1pYyBleHByZXNzaW9uICgkZWRtSnNvbiksIHdlIHJldHVybiB0cnVlLlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oY29uc3RhbnQodHJ1ZSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBzZW1hbnRpY09iamVjdHNQYXRoID0gW1xuXHRcdFx0XHRcdFx0cGF0aEluTW9kZWw8Q29udGV4dFtdPihcIi9zZW1hbnRpY09iamVjdHNcIiwgXCJpbnRlcm5hbFwiKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuXHRcdFx0XHRcdF0uY29uY2F0KGxpc3RPZkR5bmFtaWNTZW1hbnRpY09iamVjdHMpO1xuXHRcdFx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihmb3JtYXRSZXN1bHQoc2VtYW50aWNPYmplY3RzUGF0aCwgdmFsdWVGb3JtYXR0ZXJzLmhhc1NlbWFudGljT2JqZWN0cykpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBcInRydWVcIjtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdC8vIFwiZmFjZXRzQW5kU2VtYW50aWNMaW5rc1wiXG5cdFx0XHRcdC8vIGlmIHRoZXJlIGlzIGJvdGggZmFjZXRzIGFuZCBzZW1hbnRpYyBsaW5rcywgd2UgZG8gbm90IGNoZWNrIGlmIHRoZSBuYXZpZ2F0aW9uIGlzIHJlYWNoYWJsZVxuXHRcdFx0XHRyZXR1cm4gXCJ0cnVlXCI7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIENoZWNrQm94R3JvdXAgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRDaGVja0JveEdyb3VwSXRlbVRlbXBsYXRlKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDaGVja0JveFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIlxuXHRcdFx0XHRpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdGRpc3BsYXlPbmx5PXt0cnVlfVxuXHRcdFx0XHR0ZXh0PXtmaWVsZC5sYWJlbH1cblx0XHRcdFx0d3JhcHBpbmc9e3RydWV9XG5cdFx0XHRcdHNlbGVjdGVkPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRmaWVsZEdyb3VwSWRzPXtmaWVsZC5maWVsZEdyb3VwSWRzfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdD5cblx0XHRcdFx0e3sgY3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PVwic291cmNlUGF0aFwiIHZhbHVlPXtmaWVsZC5kYXRhU291cmNlUGF0aH0gLz4gfX1cblx0XHRcdDwvQ2hlY2tCb3g+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogRW50cnkgcG9pbnQgZm9yIGZ1cnRoZXIgdGVtcGxhdGluZyBwcm9jZXNzaW5ncy5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldFRlbXBsYXRlOiAoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nID0+IHtcblx0XHRsZXQgaW5uZXJGaWVsZENvbnRlbnQ7XG5cdFx0c3dpdGNoIChmaWVsZC5kaXNwbGF5U3R5bGUgYXMgRGlzcGxheVN0eWxlVHlwZSkge1xuXHRcdFx0Y2FzZSBcIkF2YXRhclwiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IERpc3BsYXlTdHlsZS5nZXRBdmF0YXJUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkJ1dHRvblwiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IERpc3BsYXlTdHlsZS5nZXRCdXR0b25UZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkNoZWNrQm94R3JvdXBJdGVtXCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldENoZWNrQm94R3JvdXBJdGVtVGVtcGxhdGUoZmllbGQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJDb250YWN0XCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldENvbnRhY3RUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkRhdGFQb2ludFwiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IERpc3BsYXlTdHlsZS5nZXREYXRhUG9pbnRUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkV4cGFuZGFibGVUZXh0XCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldEV4cGFuZGFibGVUZXh0KGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRmlsZVwiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IERpc3BsYXlTdHlsZS5nZXRGaWxlVGVtcGxhdGUoZmllbGQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJMaW5rXCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldExpbmtUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkxpbmtXaXRoUXVpY2tWaWV3XCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldExpbmtXaXRoUXVpY2tWaWV3VGVtcGxhdGUoZmllbGQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOdW1iZXJXaXRoVW5pdE9yQ3VycmVuY3lBbGlnbmVkXCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldE51bWJlcldpdGhVbml0T3JDdXJyZW5jeUFsaWduZWRUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk9iamVjdElkZW50aWZpZXJcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0T2JqZWN0SWRlbnRpZmllcihmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk9iamVjdFN0YXR1c1wiOiB7XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldE9iamVjdFN0YXR1cyhmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcIkxhYmVsU2VtYW50aWNLZXlcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0TGFiZWxTZW1hbnRpY0tleShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlRleHRcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0VGV4dFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTWFza2VkXCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldFBhc3N3b3JkVGVtcGxhdGUoZmllbGQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gXCJcIjtcblx0XHR9XG5cdFx0aWYgKGZpZWxkLmFkZERyYWZ0SW5kaWNhdG9yICYmIGlubmVyRmllbGRDb250ZW50KSB7XG5cdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IERpc3BsYXlTdHlsZS5hZGREcmFmdEluZGljYXRvcihpbm5lckZpZWxkQ29udGVudCwgZmllbGQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBpbm5lckZpZWxkQ29udGVudDtcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgRGlzcGxheVN0eWxlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdUZBLE1BQU1BLFlBQVksR0FBRztJQUNwQkMsdUJBQXVCQSxDQUFDQyxLQUEyQixFQUFVO01BQzVELElBQUlDLEtBQUssR0FBR0QsS0FBSyxDQUFDRSxRQUFRLENBQUNELEtBQUssSUFBSSxDQUFDO01BQ3JDLElBQUksT0FBT0EsS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM5QjtRQUNBQSxLQUFLLEdBQUdELEtBQUssQ0FBQ0UsUUFBUSxDQUFDQyxTQUFTLElBQUksQ0FBQztNQUN0QztNQUNBLE9BQU9DLElBQUksQ0FBQ0MsR0FBRyxDQUFDSixLQUFLLEVBQUUs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
1026
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEaXNwbGF5U3R5bGUiLCJnZXRQcmVjaXNpb25Gb3JDdXJyZW5jeSIsImZpZWxkIiwic2NhbGUiLCJwcm9wZXJ0eSIsInByZWNpc2lvbiIsIk1hdGgiLCJtaW4iLCJnZXRDdXJyZW5jeU9yVW5pdENvbnRyb2wiLCJjdXJyZW5jeU9yVW5pdCIsInZpc2libGVFeHByZXNzaW9uIiwiX2pzeCIsIkxpbmsiLCJ0ZXh0IiwicHJlc3MiLCJldmVudEhhbmRsZXJzIiwiZGlzcGxheUFnZ3JlZ2F0aW9uRGV0YWlscyIsInZpc2libGUiLCJyZWFjdGl2ZUFyZWFNb2RlIiwiZm9ybWF0T3B0aW9ucyIsImNoaWxkcmVuIiwiZGVwZW5kZW50cyIsImNsb25lIiwiZ2V0TnVtYmVyV2l0aFVuaXRPckN1cnJlbmN5QWxpZ25lZFRlbXBsYXRlIiwicmVsYXRpdmVQcm9wZXJ0eVBhdGgiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiZGF0YU1vZGVsUGF0aCIsIm92ZXJhbGxWaXNpYmxlIiwibm90IiwiZXF1YWwiLCJwYXRoSW5Nb2RlbCIsInVuZGVmaW5lZCIsImN1cnJlbmN5IiwiTnVtYmVyV2l0aFVuaXRPckN1cnJlbmN5IiwibnVtYmVyIiwidmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9uIiwidW5pdE9yQ3VycmVuY3kiLCJ1bml0QmluZGluZ0V4cHJlc3Npb24iLCJpc0FuYWx5dGljcyIsIkNvbmRpdGlvbmFsV3JhcHBlciIsImRpc3BsYXlWaXNpYmxlIiwiY29uZGl0aW9uIiwiaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQiLCJjb250ZW50VHJ1ZSIsImNvbnRlbnRGYWxzZSIsImdldEF2YXRhclRlbXBsYXRlIiwiYXZhdGFySWQiLCJfZmxleElkIiwiaWRQcmVmaXgiLCJnZW5lcmF0ZSIsImF2YXRhclZpc2libGUiLCJGaWVsZFRlbXBsYXRpbmciLCJnZXRWaXNpYmxlRXhwcmVzc2lvbiIsImF2YXRhclNyYyIsImdldFZhbHVlQmluZGluZyIsImF2YXRhckRpc3BsYXlTaGFwZSIsImdldEF2YXRhclNoYXBlIiwiRm9ybUVsZW1lbnRXcmFwcGVyIiwiQXZhdGFyIiwiaWQiLCJzcmMiLCJkaXNwbGF5U2l6ZSIsImNsYXNzIiwiaW1hZ2VGaXRUeXBlIiwiZGlzcGxheVNoYXBlIiwiZ2V0QnV0dG9uVGVtcGxhdGUiLCJpY29uIiwic2hvd0ljb25VcmwiLCJjb252ZXJ0ZWRNZXRhUGF0aCIsIkljb25VcmwiLCJMYWJlbCIsInRvb2x0aXAiLCJidXR0b25QcmVzcyIsImJ1dHRvbklzQm91bmQiLCJidXR0b25PcGVyYXRpb25BdmFpbGFibGUiLCJidXR0b25PcGVyYXRpb25BdmFpbGFibGVGb3JtYXR0ZWQiLCJuYXZpZ2F0aW9uQXZhaWxhYmxlIiwiJFR5cGUiLCJvbkRhdGFGaWVsZEFjdGlvbkJ1dHRvbiIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJhbm5vdGF0aW9ucyIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJhY3Rpb25UYXJnZXQiLCJiaW5kaW5nUGFyYW1OYW1lIiwicGFyYW1ldGVycyIsIm5hbWUiLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsInBhdGgiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsIm9uRGF0YUZpZWxkV2l0aElCTiIsIk5hdmlnYXRpb25BdmFpbGFibGUiLCJTdHJpbmciLCJpZ25vcmVOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiYnV0dG9uIiwiQnV0dG9uIiwiZW5hYmxlZCIsIkZpZWxkSGVscGVyIiwiaXNEYXRhRmllbGRBY3Rpb25CdXR0b25WaXNpYmxlIiwiaXNEYXRhRmllbGRBY3Rpb25CdXR0b25FbmFibGVkIiwiaXNBbmFseXRpY2FsQWdncmVnYXRlZFJvdyIsImFuZCIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiVUkiLCJpc05vZGVMZXZlbE5hdmlnYWJsZSIsInR5cGUiLCJidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUJ1dHRvblR5cGUiLCJpc0FjdGlvbkFJT3BlcmF0aW9uIiwiYWlJY29uIiwiZ2V0Q29udGFjdFRlbXBsYXRlIiwiY29udGFjdE1ldGFQYXRoIiwibWV0YVBhdGgiLCJnZXRNb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiY29udGFjdFZpc2libGUiLCJDb250YWN0IiwiYXJpYUxhYmVsbGVkQnkiLCJnZXRQYXRoIiwiY29udGV4dFBhdGgiLCJzaG93RW1wdHlJbmRpY2F0b3IiLCJnZXREYXRhUG9pbnRJbm5lclBhcnQiLCJ3aXRoQ29uZGl0aW9uYWxXcmFwcGVyIiwiY29udmVydGVkRGF0YUZpZWxkIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJEYXRhUG9pbnQiLCJ2YWx1ZSIsIkRhdGFQb2ludEZvcm1hdE9wdGlvbnMiLCJnZXREYXRhUG9pbnRUZW1wbGF0ZSIsImhhc1VuaXRPckN1cnJlbmN5IiwiZ2V0RXhwYW5kYWJsZVRleHQiLCJFeHBhbmRhYmxlVGV4dCIsImRpc3BsYXlTdHlsZUlkIiwib3ZlcmZsb3dNb2RlIiwidGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheSIsIm1heENoYXJhY3RlcnMiLCJ0ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXkiLCJlbXB0eUluZGljYXRvck1vZGUiLCJnZXRGaWxlVGVtcGxhdGUiLCJpbm5lckZpbGVQYXJ0IiwiZmlsZVN0cmVhbU5vdEVtcHR5IiwiZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRoIiwiZmlsZUZpbGVuYW1lRXhwcmVzc2lvbiIsImZpbGVVcGxvYWRVcmwiLCJmaWxlRmlsZW5hbWVQYXRoIiwiQ29udGVudERpc3Bvc2l0aW9uIiwiRmlsZW5hbWUiLCJmaWxlTWVkaWFUeXBlIiwiTWVkaWFUeXBlIiwiZmlsZUlzSW1hZ2UiLCJJc0ltYWdlVVJMIiwiSXNJbWFnZSIsInRlc3QiLCJ0b1N0cmluZyIsImZpbGVBdmF0YXJTcmMiLCJmaWxlQXZhdGFyRGlzcGxheVNoYXBlIiwiZmlsZUljb25TcmMiLCJnZXRQYXRoRm9ySWNvblNvdXJjZSIsImZpbGVMaW5rVGV4dCIsImdldEZpbGVuYW1lRXhwciIsImZpbGVMaW5rSHJlZiIsImdldERvd25sb2FkVXJsIiwiZmlsZVRleHRWaXNpYmxlIiwiZmlsZUFjY2VwdGFibGVNZWRpYVR5cGVzIiwiQWNjZXB0YWJsZU1lZGlhVHlwZXMiLCJhY2NlcHRlZFR5cGVzIiwiQXJyYXkiLCJmcm9tIiwibWFwIiwiam9pbiIsImZpbGVNYXhpbXVtU2l6ZSIsImNhbGN1bGF0ZU1CZnJvbUJ5dGUiLCJtYXhMZW5ndGgiLCJhdmF0YXIiLCJjdXN0b21EYXRhIiwiSW1hZ2VDdXN0b21EYXRhIiwicGFyYW1OYW1lIiwiSWNvbiIsImxpbmsiLCJ0YXJnZXQiLCJocmVmIiwid3JhcHBpbmciLCJUZXh0IiwiZWRpdE1vZGUiLCJjb21wdXRlZEVkaXRNb2RlIiwiRmllbGRFZGl0TW9kZSIsIkRpc3BsYXkiLCJiZWZvcmVEaWFsb2dPcGVuIiwiY29sbGFib3JhdGlvbkVuYWJsZWQiLCJoYW5kbGVPcGVuVXBsb2FkZXIiLCJhZnRlckRpYWxvZ09wZW4iLCJoYW5kbGVDbG9zZVVwbG9hZGVyIiwiZmlsZVVwbG9hZGVyIiwiRmlsZVVwbG9hZGVyIiwiZmlsZVVwbG9hZGVyVmlzaWJsZSIsImJ1dHRvbk9ubHkiLCJpY29uT25seSIsIm11bHRpcGxlIiwic3R5bGUiLCJzZW5kWEhSIiwidXNlTXVsdGlwYXJ0Iiwic2FtZUZpbGVuYW1lQWxsb3dlZCIsIm1pbWVUeXBlIiwidHlwZU1pc3NtYXRjaCIsImhhbmRsZVR5cGVNaXNzbWF0Y2giLCJtYXhpbXVtRmlsZVNpemUiLCJmaWxlU2l6ZUV4Y2VlZCIsImhhbmRsZUZpbGVTaXplRXhjZWVkIiwidXBsb2FkT25DaGFuZ2UiLCJ1cGxvYWRDb21wbGV0ZSIsImhhbmRsZVVwbG9hZENvbXBsZXRlIiwiaHR0cFJlcXVlc3RNZXRob2QiLCJpc0R5bmFtaWNJbnN0YW50aWF0aW9uIiwiRmlsZVVwbG9hZGVySHR0cFJlcXVlc3RNZXRob2QiLCJQdXQiLCJjaGFuZ2UiLCJ1cGxvYWRTdHJlYW0iLCJhZnRlckRpYWxvZ0Nsb3NlIiwidXBsb2FkU3RhcnQiLCJkZWxldGVCdXR0b24iLCJyZW1vdmVTdHJlYW0iLCJGaWxlV3JhcHBlciIsInVwbG9hZFVybCIsInByb3BlcnR5UGF0aCIsImZpbGVuYW1lIiwibWVkaWFUeXBlIiwiZmllbGRHcm91cElkcyIsInZhbGlkYXRlRmllbGRHcm91cCIsIkN1c3RvbURhdGEiLCJkYXRhU291cmNlUGF0aCIsImdldExpbmtUZW1wbGF0ZSIsImxpbmtVcmwiLCJpY29uVXJsIiwibGlua0FjdGl2ZWQiLCJsaW5rVGFyZ2V0IiwiY29tcHV0ZVRleHRXaXRoV2hpdGVTcGFjZSIsImFjY2Vzc2libGVSb2xlIiwiTGlua0FjY2Vzc2libGVSb2xlIiwib25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgiLCJodG1sNUxpbmtUYXJnZXQiLCJIVE1MNSIsIkxpbmtUYXJnZXQiLCJsaW5rQmluZGluZyIsIlVybCIsIkNvbW11bmljYXRpb24iLCJJc0VtYWlsQWRkcmVzcyIsIklzUGhvbmVOdW1iZXIiLCJsaW5rSXNFbWFpbEFkZHJlc3MiLCJsaW5rSXNQaG9uZU51bWJlciIsInByb3BlcnR5VmFsdWVCaW5kaW5nIiwibWFpbEJsb2NrSWQiLCJ1aWQiLCJFbWFpbCIsIm1haWwiLCJPYmplY3RTdGF0dXMiLCJvcGVuRXh0ZXJuYWxMaW5rIiwiYWN0aXZlIiwid3JhcCIsImdldEZvcmVpZ25LZXlGb3JDdXN0b21EYXRhIiwicmVsYXRpdmVQYXRoVG9RdWlja1ZpZXdFbnRpdHkiLCJRdWlja1ZpZXciLCJnZXRSZWxhdGl2ZVBhdGhUb1F1aWNrVmlld0VudGl0eSIsInRhcmdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwidGFyZ2V0RW50aXR5VHlwZSIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwidGFyZ2V0TmF2UHJvcCIsImZpbmQiLCJuYXZQcm9wIiwicmVmQ29uc3RyYWludCIsInJlZmVyZW50aWFsQ29uc3RyYWludCIsImtleSIsImxlbmd0aCIsInRhcmdldFByb3BlcnR5Iiwia2V5VG9GZXRjaCIsImdldEZvcmVpZ25LZXlWYWx1ZUV4cHJlc3Npb24iLCJmb3JlaWduS2V5UmVsYXRpdmVQYXRoIiwiZXhwcmVzc2lvbiIsIl90eXBlIiwiaWZFbHNlIiwiY29uc3RhbnQiLCJnZXRTdGFuZGFyZExpbmtXaXRoUXVpY2tWaWV3VGVtcGxhdGUiLCJsaW5rUHJlc3NlZCIsImdldE1kY0xpbmtGb3JRdWlja1ZpZXciLCJnZXRDb25kaXRpb25hbExpbmtXaXRoUXVpY2tWaWV3VGVtcGxhdGUiLCJUZXh0TGluayIsInNob3dBc0xpbmsiLCJzZW1hbnRpY09iamVjdCIsImdldENvbmRpdGlvbmFsV3JhcHBlckZvclF1aWNrVmlld1RlbXBsYXRlIiwiZ2V0TGlua1dpdGhRdWlja1ZpZXdUZW1wbGF0ZSIsInJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QiLCJ0ZXh0RnJvbVZhbHVlTGlzdCIsImdldFF1aWNrVmlld0NvbmRpdGlvbiIsImdldFRleHRUZW1wbGF0ZSIsInJlbmRlcldoaXRlc3BhY2UiLCJjdXN0b21kYXRhIiwiZGlzcGxheU1vZGUiLCJnZXRQYXNzd29yZFRlbXBsYXRlIiwidGV4dEJpbmRpbmciLCJnZXRUZXh0QmluZGluZyIsInRleHRFeHByZXNzaW9uIiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJmb3JtYXRSZXN1bHQiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRQYXNzd29yZFRleHQiLCJnZXRPYmplY3RJZGVudGlmaWVyIiwidGl0bGVBY3RpdmUiLCJoYXNRdWlja1ZpZXciLCJpZGVudGlmaWVyIiwiT2JqZWN0SWRlbnRpZmllciIsInRpdGxlIiwiaWRlbnRpZmllclRpdGxlIiwiaWRlbnRpZmllclRleHQiLCJ0aXRsZVByZXNzIiwiaGFzU2l0dWF0aW9uc0luZGljYXRvciIsIl9qc3hzIiwiSEJveCIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsIndpZHRoIiwiU2l0dWF0aW9uc0luZGljYXRvciIsInNpdHVhdGlvbnNJbmRpY2F0b3JQcm9wZXJ0eVBhdGgiLCJzaG93RXJyb3JJbmRpY2F0b3IiLCJzaG93RXJyb3JPYmplY3RTdGF0dXMiLCJWQm94Iiwic3RhdGUiLCJnZXRPYmplY3RTdGF0dXMiLCJvYmplY3RTdGF0dXMiLCJyZXF1aXJlZEhlbHBlciIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJlbmhhbmNlZFZhbHVlRGF0YU1vZGVsUGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwidGFyZ2V0T2JqZWN0IiwiVmFsdWUiLCJjcml0aWNhbGl0eUljb24iLCJidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUljb24iLCJidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yIiwidG9vbFRpcFZhbHVlIiwiZ2V0VG9vbHRpcFZhbHVlIiwiY29udGVudCIsInRleHRBbGlnbiIsImlzQWN0aXZlIiwicHJlc3NBY3Rpb24iLCJjcmVhdGVDb250ZW50IiwiZ2V0TGFiZWxTZW1hbnRpY0tleSIsImVtcGhhc2l6ZWQiLCJkZXNpZ24iLCJoYXNRdWlja3ZpZXciLCJhZGREcmFmdEluZGljYXRvciIsInNlbWFudGljS2V5VGVtcGxhdGUiLCJmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgiLCJnZXRNYXJnaW5DbGFzcyIsImNvbXBhY3RTZW1hbnRpY0tleSIsIkRyYWZ0SW5kaWNhdG9yIiwiZHJhZnRJbmRpY2F0b3JUeXBlIiwiT2JqZWN0TWFya2VyVmlzaWJpbGl0eSIsIkljb25BbmRUZXh0IiwiZHJhZnRJbmRpY2F0b3JWaXNpYmxlIiwiZGF0YU1vZGVsUGF0aEV4dGVybmFsSUQiLCJyZXBsYWNlV2hpdGVzcGFjZSIsInF1aWNrVmlld1R5cGUiLCJkeW5hbWljU2VtYW50aWNPYmplY3RzIiwibGlzdE9mRHluYW1pY1NlbWFudGljT2JqZWN0cyIsInNlbWFudGljT2JqZWN0RXhwcmVzc2lvbiIsInB1c2giLCJzZW1hbnRpY09iamVjdHNQYXRoIiwiY29uY2F0IiwiaGFzU2VtYW50aWNPYmplY3RzIiwiZ2V0Q2hlY2tCb3hHcm91cEl0ZW1UZW1wbGF0ZSIsIkNoZWNrQm94IiwiZGlzcGxheU9ubHkiLCJsYWJlbCIsInNlbGVjdGVkIiwidmFsdWVCaW5kaW5nRXhwcmVzc2lvbiIsImdldFRlbXBsYXRlIiwiaW5uZXJGaWVsZENvbnRlbnQiLCJkaXNwbGF5U3R5bGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRpc3BsYXlTdHlsZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb24sIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHksIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YUZpZWxkV2l0aFVybCxcblx0RGF0YVBvaW50VHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24sXG5cdG5vdCxcblx0cGF0aEluTW9kZWwsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IEZvcm1FbGVtZW50V3JhcHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvRm9ybUVsZW1lbnRXcmFwcGVyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBhaUljb24sIGlzQWN0aW9uQUlPcGVyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5QnV0dG9uVHlwZSxcblx0YnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvcixcblx0YnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0NyaXRpY2FsaXR5Rm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRUb29sdGlwVmFsdWUsIGhhc1ZhbGlkQW5hbHl0aWNhbEN1cnJlbmN5T3JVbml0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgRmllbGRIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRIZWxwZXJcIjtcbmltcG9ydCAqIGFzIEZpZWxkVGVtcGxhdGluZyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIHsgRmllbGRCbG9ja1Byb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9maWVsZC9GaWVsZFN0cnVjdHVyZUhlbHBlclwiO1xuaW1wb3J0IFF1aWNrVmlldyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9xdWlja1ZpZXcvUXVpY2tWaWV3XCI7XG5pbXBvcnQgQXZhdGFyIGZyb20gXCJzYXAvbS9BdmF0YXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IENoZWNrQm94IGZyb20gXCJzYXAvbS9DaGVja0JveFwiO1xuaW1wb3J0IEV4cGFuZGFibGVUZXh0IGZyb20gXCJzYXAvbS9FeHBhbmRhYmxlVGV4dFwiO1xuaW1wb3J0IEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCBJbWFnZUN1c3RvbURhdGEgZnJvbSBcInNhcC9tL0ltYWdlQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IHR5cGUgeyBMaW5rJFByZXNzRXZlbnQgfSBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCBPYmplY3RJZGVudGlmaWVyIGZyb20gXCJzYXAvbS9PYmplY3RJZGVudGlmaWVyXCI7XG5pbXBvcnQgT2JqZWN0U3RhdHVzIGZyb20gXCJzYXAvbS9PYmplY3RTdGF0dXNcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgVkJveCBmcm9tIFwic2FwL20vVkJveFwiO1xuaW1wb3J0IHsgTGlua0FjY2Vzc2libGVSb2xlLCBPYmplY3RNYXJrZXJWaXNpYmlsaXR5IH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgRXZlbnRQcm92aWRlciBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgSWNvbiBmcm9tIFwic2FwL3VpL2NvcmUvSWNvblwiO1xuaW1wb3J0IHR5cGUgTWRjTGluayBmcm9tIFwic2FwL3VpL21kYy9MaW5rXCI7XG5pbXBvcnQgRmllbGRFZGl0TW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9GaWVsZEVkaXRNb2RlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRGaWxlU2l6ZUV4Y2VlZEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVXBsb2FkQ29tcGxldGVFdmVudCxcblx0RmlsZVVwbG9hZGVyJFVwbG9hZFN0YXJ0RXZlbnRcbn0gZnJvbSBcInNhcC91aS91bmlmaWVkL0ZpbGVVcGxvYWRlclwiO1xuaW1wb3J0IEZpbGVVcGxvYWRlciBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgRmlsZVVwbG9hZGVySHR0cFJlcXVlc3RNZXRob2QgZnJvbSBcInNhcC91aS91bmlmaWVkL0ZpbGVVcGxvYWRlckh0dHBSZXF1ZXN0TWV0aG9kXCI7XG5pbXBvcnQgQ29udGFjdCBmcm9tIFwiLi4vLi4vY29udGFjdC9Db250YWN0XCI7XG5pbXBvcnQgRW1haWwgZnJvbSBcIi4uLy4uL2NvbnRhY3QvRW1haWxcIjtcbmltcG9ydCBDb25kaXRpb25hbFdyYXBwZXIgZnJvbSBcIi4uLy4uL2NvbnRyb2xzL0NvbmRpdGlvbmFsV3JhcHBlclwiO1xuaW1wb3J0IEZpbGVXcmFwcGVyIGZyb20gXCIuLi8uLi9jb250cm9scy9GaWxlV3JhcHBlclwiO1xuaW1wb3J0IE51bWJlcldpdGhVbml0T3JDdXJyZW5jeSBmcm9tIFwiLi4vLi4vY29udHJvbHMvTnVtYmVyV2l0aFVuaXRPckN1cnJlbmN5XCI7XG5pbXBvcnQgVGV4dExpbmsgZnJvbSBcIi4uLy4uL2NvbnRyb2xzL1RleHRMaW5rXCI7XG5pbXBvcnQgRHJhZnRJbmRpY2F0b3IgZnJvbSBcIi4uLy4uL2RyYWZ0SW5kaWNhdG9yL0RyYWZ0SW5kaWNhdG9yXCI7XG5pbXBvcnQgU2l0dWF0aW9uc0luZGljYXRvciBmcm9tIFwiLi4vLi4vc2l0dWF0aW9ucy9TaXR1YXRpb25zSW5kaWNhdG9yXCI7XG5pbXBvcnQgRGF0YVBvaW50IGZyb20gXCIuLi9EYXRhUG9pbnRcIjtcbmltcG9ydCBEYXRhUG9pbnRGb3JtYXRPcHRpb25zIGZyb20gXCIuLi9EYXRhUG9pbnRGb3JtYXRPcHRpb25zXCI7XG5pbXBvcnQgdHlwZSB7IERpc3BsYXlTdHlsZSBhcyBEaXNwbGF5U3R5bGVUeXBlIH0gZnJvbSBcIi4vRmllbGRTdHlsZXNcIjtcblxuY29uc3QgRGlzcGxheVN0eWxlID0ge1xuXHRnZXRQcmVjaXNpb25Gb3JDdXJyZW5jeShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBudW1iZXIge1xuXHRcdGxldCBzY2FsZSA9IGZpZWxkLnByb3BlcnR5LnNjYWxlID8/IDU7XG5cdFx0aWYgKHR5cGVvZiBzY2FsZSAhPT0gXCJudW1iZXJcIikge1xuXHRcdFx0Ly8gU2NhbGUgY2FuIGJlIFwidmFyaWFibGVcIiBidXQgaXQncyBub3QgdHlwZWQgYXMgc3VjaC4gSW4gdGhpcyBjYXNlLCBTY2FsZSBlcXVhbHMgdGhlIHByZWNpc2lvblxuXHRcdFx0c2NhbGUgPSBmaWVsZC5wcm9wZXJ0eS5wcmVjaXNpb24gPz8gNTtcblx0XHR9XG5cdFx0cmV0dXJuIE1hdGgubWluKHNjYWxlLCA1KTtcblx0fSxcblxuXHRnZXRDdXJyZW5jeU9yVW5pdENvbnRyb2woXG5cdFx0ZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLFxuXHRcdGN1cnJlbmN5T3JVbml0OiBzdHJpbmcgfCBDb250cm9sLFxuXHRcdHZpc2libGVFeHByZXNzaW9uPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+XG5cdCk6IENvbnRyb2wge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TGlua1xuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RklFTERSVU5USU1FOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWUnfVwiXG5cdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9TSE9XX0RFVEFJTFN9XCJcblx0XHRcdFx0cHJlc3M9e2ZpZWxkLmV2ZW50SGFuZGxlcnMuZGlzcGxheUFnZ3JlZ2F0aW9uRGV0YWlsc31cblx0XHRcdFx0dmlzaWJsZT17dmlzaWJsZUV4cHJlc3Npb259XG5cdFx0XHRcdHJlYWN0aXZlQXJlYU1vZGU9e2ZpZWxkLmZvcm1hdE9wdGlvbnM/LnJlYWN0aXZlQXJlYU1vZGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0ZGVwZW5kZW50czogKGN1cnJlbmN5T3JVbml0IGFzIENvbnRyb2wpPy5jbG9uZSA/IChjdXJyZW5jeU9yVW5pdCBhcyBDb250cm9sKS5jbG9uZSgpIDogY3VycmVuY3lPclVuaXRcblx0XHRcdFx0fX1cblx0XHRcdDwvTGluaz5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIE51bWJlcldpdGhVbml0T3JDdXJyZW5jeUFsaWduZWQgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXROdW1iZXJXaXRoVW5pdE9yQ3VycmVuY3lBbGlnbmVkVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHQvLyBXZSBkb24ndCBkaXNwbGF5IGFueXRoaW5nIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWRcblx0XHRjb25zdCByZWxhdGl2ZVByb3BlcnR5UGF0aCA9IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZmllbGQuZGF0YU1vZGVsUGF0aCk7XG5cdFx0Y29uc3Qgb3ZlcmFsbFZpc2libGUgPSBub3QoZXF1YWwocGF0aEluTW9kZWwocmVsYXRpdmVQcm9wZXJ0eVBhdGgpLCB1bmRlZmluZWQpKTtcblx0XHRjb25zdCBjdXJyZW5jeSA9IChcblx0XHRcdDxOdW1iZXJXaXRoVW5pdE9yQ3VycmVuY3kgbnVtYmVyPXtmaWVsZC52YWx1ZUFzU3RyaW5nQmluZGluZ0V4cHJlc3Npb259IHVuaXRPckN1cnJlbmN5PXtmaWVsZC51bml0QmluZGluZ0V4cHJlc3Npb259IC8+XG5cdFx0KTtcblx0XHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucy5pc0FuYWx5dGljcykge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PENvbmRpdGlvbmFsV3JhcHBlciB2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX0gY29uZGl0aW9uPXtmaWVsZC5oYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCBhcyB1bmtub3duIGFzIGJvb2xlYW59PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjb250ZW50VHJ1ZTogY3VycmVuY3ksXG5cdFx0XHRcdFx0XHRjb250ZW50RmFsc2U6IHRoaXMuZ2V0Q3VycmVuY3lPclVuaXRDb250cm9sKGZpZWxkLCBjdXJyZW5jeSwgb3ZlcmFsbFZpc2libGUpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9Db25kaXRpb25hbFdyYXBwZXI+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY3VycmVuY3k7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIEF2YXRhciB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldEF2YXRhclRlbXBsYXRlKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0bGV0IGF2YXRhcklkO1xuXHRcdGlmIChmaWVsZC5fZmxleElkKSB7XG5cdFx0XHRhdmF0YXJJZCA9IGZpZWxkLl9mbGV4SWQ7XG5cdFx0fSBlbHNlIGlmIChmaWVsZC5pZFByZWZpeCkge1xuXHRcdFx0YXZhdGFySWQgPSBnZW5lcmF0ZShbZmllbGQuaWRQcmVmaXgsIFwiRmllbGQtY29udGVudFwiXSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYXZhdGFyVmlzaWJsZSA9IEZpZWxkVGVtcGxhdGluZy5nZXRWaXNpYmxlRXhwcmVzc2lvbihmaWVsZC5kYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4pO1xuXG5cdFx0Y29uc3QgYXZhdGFyU3JjID0gRmllbGRUZW1wbGF0aW5nLmdldFZhbHVlQmluZGluZyhmaWVsZC5kYXRhTW9kZWxQYXRoLCB7fSk7XG5cdFx0Y29uc3QgYXZhdGFyRGlzcGxheVNoYXBlID0gRmllbGRUZW1wbGF0aW5nLmdldEF2YXRhclNoYXBlKGZpZWxkLmRhdGFNb2RlbFBhdGgpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxGb3JtRWxlbWVudFdyYXBwZXIgdmlzaWJsZT17YXZhdGFyVmlzaWJsZX0+XG5cdFx0XHRcdDxBdmF0YXJcblx0XHRcdFx0XHRpZD17YXZhdGFySWR9XG5cdFx0XHRcdFx0c3JjPXthdmF0YXJTcmN9XG5cdFx0XHRcdFx0ZGlzcGxheVNpemU9XCJTXCJcblx0XHRcdFx0XHRjbGFzcz1cInNhcFVpU21hbGxNYXJnaW5FbmRcIlxuXHRcdFx0XHRcdGltYWdlRml0VHlwZT1cIkNvdmVyXCJcblx0XHRcdFx0XHRkaXNwbGF5U2hhcGU9e2F2YXRhckRpc3BsYXlTaGFwZX1cblx0XHRcdFx0Lz5cblx0XHRcdDwvRm9ybUVsZW1lbnRXcmFwcGVyPlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgYnV0dG9uIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0QnV0dG9uVGVtcGxhdGU6IChmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcgPT4ge1xuXHRcdGxldCBpY29uID0gZmllbGQuZm9ybWF0T3B0aW9ucz8uc2hvd0ljb25VcmwgPz8gZmFsc2UgPyAoZmllbGQuY29udmVydGVkTWV0YVBhdGggYXMgRGF0YUZpZWxkVHlwZXMpLkljb25VcmwgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdGV4dCA9ICEoZmllbGQuZm9ybWF0T3B0aW9ucz8uc2hvd0ljb25VcmwgPz8gZmFsc2UpID8gKGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoIGFzIERhdGFGaWVsZFR5cGVzKS5MYWJlbCA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0b29sdGlwID0gZmllbGQuZm9ybWF0T3B0aW9ucz8uc2hvd0ljb25VcmwgPz8gZmFsc2UgPyAoZmllbGQuY29udmVydGVkTWV0YVBhdGggYXMgRGF0YUZpZWxkVHlwZXMpLkxhYmVsIDogdW5kZWZpbmVkO1xuXG5cdFx0bGV0IGJ1dHRvblByZXNzO1xuXHRcdGxldCBidXR0b25Jc0JvdW5kO1xuXHRcdGxldCBidXR0b25PcGVyYXRpb25BdmFpbGFibGU7XG5cdFx0bGV0IGJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZUZvcm1hdHRlZDtcblx0XHRsZXQgbmF2aWdhdGlvbkF2YWlsYWJsZTtcblxuXHRcdGlmIChmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRidXR0b25QcmVzcyA9IGZpZWxkLmV2ZW50SGFuZGxlcnMub25EYXRhRmllbGRBY3Rpb25CdXR0b247XG5cblx0XHRcdGJ1dHRvbklzQm91bmQgPSBmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5BY3Rpb25UYXJnZXQgPyBmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5BY3Rpb25UYXJnZXQuaXNCb3VuZCA6IHRydWU7XG5cdFx0XHRidXR0b25PcGVyYXRpb25BdmFpbGFibGUgPSBmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5BY3Rpb25UYXJnZXRcblx0XHRcdFx0PyBmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5BY3Rpb25UYXJnZXQuYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZVxuXHRcdFx0XHQ6IFwiZmFsc2VcIjtcblx0XHRcdGJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZUZvcm1hdHRlZCA9IGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLkFjdGlvblRhcmdldCA/IHVuZGVmaW5lZCA6IFwiZmFsc2VcIjtcblxuXHRcdFx0aWYgKGJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZSAmJiBidXR0b25PcGVyYXRpb25BdmFpbGFibGUgIT09IFwiZmFsc2VcIikge1xuXHRcdFx0XHRjb25zdCBhY3Rpb25UYXJnZXQgPSBmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5BY3Rpb25UYXJnZXQgYXMgQWN0aW9uO1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nUGFyYW1OYW1lID0gYWN0aW9uVGFyZ2V0LnBhcmFtZXRlcnNbMF0ubmFtZTtcblx0XHRcdFx0Ly9RVUFMTVMsIG5lZWRzIHRvIGJlIGNoZWNrZWQgd2hldGhlciB0aGlzIG1ha2VzIHNlbnNlIGF0IHRoYXQgcGxhY2UsIG1pZ2h0IGJlIGdvb2QgaW4gYSBkZWRpY2F0ZWQgaGVscGVyIGZ1bmN0aW9uXG5cdFx0XHRcdGJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZUZvcm1hdHRlZCA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdGJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxib29sZWFuPixcblx0XHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0KHBhdGg6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAocGF0aC5zdGFydHNXaXRoKGJpbmRpbmdQYXJhbU5hbWUpKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHBhdGgucmVwbGFjZShiaW5kaW5nUGFyYW1OYW1lICsgXCIvXCIsIFwiXCIpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBwYXRoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZmllbGQuY29udmVydGVkTWV0YVBhdGguJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0YnV0dG9uUHJlc3MgPSBmaWVsZC5ldmVudEhhbmRsZXJzLm9uRGF0YUZpZWxkV2l0aElCTjtcblx0XHRcdG5hdmlnYXRpb25BdmFpbGFibGUgPSB0cnVlO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiAmJlxuXHRcdFx0XHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5OYXZpZ2F0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0U3RyaW5nKGZpZWxkLmZvcm1hdE9wdGlvbnMuaWdub3JlTmF2aWdhdGlvbkF2YWlsYWJsZSkgIT09IFwidHJ1ZVwiXG5cdFx0XHQpIHtcblx0XHRcdFx0bmF2aWdhdGlvbkF2YWlsYWJsZSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5OYXZpZ2F0aW9uQXZhaWxhYmxlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IGJ1dHRvbiA9IFwiXCI7XG5cdFx0aWYgKGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdGJ1dHRvbiA9IChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLnZpc2libGV9XG5cdFx0XHRcdFx0dGV4dD17dGV4dH1cblx0XHRcdFx0XHRpY29uPXtpY29ufVxuXHRcdFx0XHRcdGVuYWJsZWQ9e25hdmlnYXRpb25BdmFpbGFibGV9XG5cdFx0XHRcdFx0dG9vbHRpcD17dG9vbHRpcH1cblx0XHRcdFx0XHRwcmVzcz17YnV0dG9uUHJlc3MgYXMgdW5rbm93biBhcyAoKG9FdmVudDogRXZlbnQ8b2JqZWN0LCBFdmVudFByb3ZpZGVyPikgPT4gdm9pZCkgfCB1bmRlZmluZWR9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRGaWVsZEhlbHBlci5pc0RhdGFGaWVsZEFjdGlvbkJ1dHRvblZpc2libGUoXG5cdFx0XHRcdGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLFxuXHRcdFx0XHRidXR0b25Jc0JvdW5kLFxuXHRcdFx0XHRidXR0b25PcGVyYXRpb25BdmFpbGFibGUgYXMgYm9vbGVhbiB8IHVuZGVmaW5lZFxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0bGV0IGVuYWJsZWQ6IHN0cmluZyB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0gRmllbGRIZWxwZXIuaXNEYXRhRmllbGRBY3Rpb25CdXR0b25FbmFibGVkKFxuXHRcdFx0XHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCBhcyBEYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGJ1dHRvbklzQm91bmQgYXMgdW5rbm93biBhcyBib29sZWFuLFxuXHRcdFx0XHRidXR0b25PcGVyYXRpb25BdmFpbGFibGUsXG5cdFx0XHRcdGJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZUZvcm1hdHRlZCBhcyBzdHJpbmdcblx0XHRcdCk7XG5cblx0XHRcdGlmIChmaWVsZC5mb3JtYXRPcHRpb25zLmlzQW5hbHl0aWNhbEFnZ3JlZ2F0ZWRSb3cpIHtcblx0XHRcdFx0ZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhlbmFibGVkKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdHlwZSA9IGJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5QnV0dG9uVHlwZShmaWVsZC5kYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4pO1xuXHRcdFx0aWNvbiA9IGljb24gPz8gKGlzQWN0aW9uQUlPcGVyYXRpb24oZmllbGQuY29udmVydGVkTWV0YVBhdGggYXMgRGF0YUZpZWxkRm9yQWN0aW9uKSA/IGFpSWNvbiA6IHVuZGVmaW5lZCk7XG5cblx0XHRcdGJ1dHRvbiA9IChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGNsYXNzPXtmaWVsZC5jbGFzc31cblx0XHRcdFx0XHR0ZXh0PXt0ZXh0fVxuXHRcdFx0XHRcdGljb249e2ljb259XG5cdFx0XHRcdFx0dG9vbHRpcD17dG9vbHRpcH1cblx0XHRcdFx0XHRwcmVzcz17YnV0dG9uUHJlc3MgYXMgdW5rbm93biBhcyAoKG9FdmVudDogRXZlbnQ8b2JqZWN0LCBFdmVudFByb3ZpZGVyPikgPT4gdm9pZCkgfCB1bmRlZmluZWR9XG5cdFx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC52aXNpYmxlfVxuXHRcdFx0XHRcdHR5cGU9e3R5cGV9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gYnV0dG9uO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIENvbnRhY3QgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRDb250YWN0VGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCBjb250YWN0TWV0YVBhdGggPSBmaWVsZC5tZXRhUGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aFwiLCBmaWVsZC5tZXRhUGF0aCk7XG5cdFx0Y29uc3QgY29udGFjdFZpc2libGUgPSBGaWVsZFRlbXBsYXRpbmcuZ2V0VmlzaWJsZUV4cHJlc3Npb24oZmllbGQuZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+KTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8Q29udGFjdFxuXHRcdFx0XHRpZFByZWZpeD17ZmllbGQuaWRQcmVmaXh9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeX1cblx0XHRcdFx0bWV0YVBhdGg9e2NvbnRhY3RNZXRhUGF0aC5nZXRQYXRoKCl9XG5cdFx0XHRcdGNvbnRleHRQYXRoPXtmaWVsZC5jb250ZXh0UGF0aC5nZXRQYXRoKCl9XG5cdFx0XHRcdF9mbGV4SWQ9e2ZpZWxkLl9mbGV4SWR9XG5cdFx0XHRcdHZpc2libGU9e2NvbnRhY3RWaXNpYmxlfVxuXHRcdFx0XHRzaG93RW1wdHlJbmRpY2F0b3I9e2ZpZWxkLmZvcm1hdE9wdGlvbnMuc2hvd0VtcHR5SW5kaWNhdG9yfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIGlubmVycGFydCBvZiB0aGUgZGF0YSBwb2ludCB0byBiZSB1c2VkIGluIGdldERhdGFQb2ludFRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEBwYXJhbSB3aXRoQ29uZGl0aW9uYWxXcmFwcGVyIEJvb2xlYW4gdmFsdWUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIERhdGFQb2ludFxuXHQgKiBcdFx0XHRcdFx0ICBcdFx0XHRzaGFsbCBiZSBnZW5lcmF0ZWQgZm9yIHRoZSBjb25kaXRpb25hbCB3cmFwcGVyIGNhc2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXREYXRhUG9pbnRJbm5lclBhcnQoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCB3aXRoQ29uZGl0aW9uYWxXcmFwcGVyOiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRjb25zdCBjb252ZXJ0ZWREYXRhRmllbGQgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydE1ldGFNb2RlbENvbnRleHQoZmllbGQubWV0YVBhdGgpIGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXM7XG5cblx0XHRjb25zdCBtZXRhUGF0aCA9XG5cdFx0XHRjb252ZXJ0ZWREYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb25cblx0XHRcdFx0PyBmaWVsZC5tZXRhUGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aFwiLCBmaWVsZC5tZXRhUGF0aClcblx0XHRcdFx0OiBmaWVsZC5tZXRhUGF0aDtcblxuXHRcdGNvbnN0IGZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRtZWFzdXJlRGlzcGxheU1vZGU6IGZpZWxkLmZvcm1hdE9wdGlvbnMubWVhc3VyZURpc3BsYXlNb2RlLFxuXHRcdFx0c2hvd0VtcHR5SW5kaWNhdG9yOiBmaWVsZC5mb3JtYXRPcHRpb25zLnNob3dFbXB0eUluZGljYXRvclxuXHRcdH07XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PERhdGFQb2ludFxuXHRcdFx0XHRpZFByZWZpeD17d2l0aENvbmRpdGlvbmFsV3JhcHBlciA/IHVuZGVmaW5lZCA6IGZpZWxkLmlkUHJlZml4fVxuXHRcdFx0XHR2aXNpYmxlPXsoIXdpdGhDb25kaXRpb25hbFdyYXBwZXIgPyBmaWVsZC5kaXNwbGF5VmlzaWJsZSA6IHVuZGVmaW5lZCkgYXMgdW5rbm93biBhcyBzdHJpbmcgfCB1bmRlZmluZWR9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSA/IGZpZWxkLmFyaWFMYWJlbGxlZEJ5IDogdW5kZWZpbmVkfVxuXHRcdFx0XHRtZXRhUGF0aD17bWV0YVBhdGguZ2V0UGF0aCgpfVxuXHRcdFx0XHRjb250ZXh0UGF0aD17ZmllbGQuY29udGV4dFBhdGg/LmdldFBhdGgoKX1cblx0XHRcdFx0dmFsdWU9e2ZpZWxkLnZhbHVlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGZvcm1hdE9wdGlvbnM6IDxEYXRhUG9pbnRGb3JtYXRPcHRpb25zIHsuLi5mb3JtYXRPcHRpb25zfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9EYXRhUG9pbnQ+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBEYXRhUG9pbnQgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXREYXRhUG9pbnRUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGlmICgoZmllbGQuZm9ybWF0T3B0aW9ucy5pc0FuYWx5dGljcyA/PyBmYWxzZSkgJiYgKGZpZWxkLmhhc1VuaXRPckN1cnJlbmN5ID8/IGZhbHNlKSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PENvbmRpdGlvbmFsV3JhcHBlciB2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX0gY29uZGl0aW9uPXtmaWVsZC5oYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCBhcyB1bmtub3duIGFzIGJvb2xlYW59PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjb250ZW50VHJ1ZTogdGhpcy5nZXREYXRhUG9pbnRJbm5lclBhcnQoZmllbGQsIHRydWUpLFxuXHRcdFx0XHRcdFx0Y29udGVudEZhbHNlOiB0aGlzLmdldEN1cnJlbmN5T3JVbml0Q29udHJvbChmaWVsZCwgdGhpcy5nZXREYXRhUG9pbnRJbm5lclBhcnQoZmllbGQsIHRydWUpKVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQ29uZGl0aW9uYWxXcmFwcGVyPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0RGF0YVBvaW50SW5uZXJQYXJ0KGZpZWxkLCBmYWxzZSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIEV4cGFuZGFibGVUZXh0IHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0RXhwYW5kYWJsZVRleHQoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEV4cGFuZGFibGVUZXh0XG5cdFx0XHRcdGlkPXtmaWVsZD8uZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdHZpc2libGU9e2ZpZWxkPy5kaXNwbGF5VmlzaWJsZX1cblx0XHRcdFx0dGV4dD17ZmllbGQudGV4dH1cblx0XHRcdFx0b3ZlcmZsb3dNb2RlPXtmaWVsZD8uZm9ybWF0T3B0aW9ucz8udGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheX1cblx0XHRcdFx0bWF4Q2hhcmFjdGVycz17ZmllbGQ/LmZvcm1hdE9wdGlvbnM/LnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheX1cblx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZD8uZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIEZpbGUgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRGaWxlVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRsZXQgaW5uZXJGaWxlUGFydDtcblxuXHRcdGNvbnN0IGZpbGVTdHJlYW1Ob3RFbXB0eSA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0bm90KGVxdWFsKHBhdGhJbk1vZGVsKGAke2ZpZWxkLmZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aH1Ab2RhdGEubWVkaWFDb250ZW50VHlwZWApLCBudWxsKSlcblx0XHQpO1xuXG5cdFx0Y29uc3QgZmlsZUZpbGVuYW1lRXhwcmVzc2lvbiA9IGZpZWxkLmZpbGVGaWxlbmFtZUV4cHJlc3Npb24gPyBcInsgcGF0aDogJ1wiICsgZmllbGQuZmlsZUZpbGVuYW1lRXhwcmVzc2lvbiArIFwiJyB9XCIgOiBcIlwiO1xuXG5cdFx0Ly8gRmlsZVdyYXBwZXJcblx0XHRjb25zdCBmaWxlVXBsb2FkVXJsID0gRmllbGRUZW1wbGF0aW5nLmdldFZhbHVlQmluZGluZyhmaWVsZC5kYXRhTW9kZWxQYXRoLCB7fSk7XG5cdFx0Y29uc3QgZmlsZUZpbGVuYW1lUGF0aCA9IChmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5Db250ZW50RGlzcG9zaXRpb24/LkZpbGVuYW1lIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KT8ucGF0aDtcblx0XHRjb25zdCBmaWxlTWVkaWFUeXBlID1cblx0XHRcdGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvcmU/Lk1lZGlhVHlwZSAmJlxuXHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvcmU/Lk1lZGlhVHlwZSkpO1xuXG5cdFx0Ly8gdGVtcGxhdGU6aWZcblx0XHRjb25zdCBmaWxlSXNJbWFnZSA9XG5cdFx0XHQhIWZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLlVJPy5Jc0ltYWdlVVJMIHx8XG5cdFx0XHQhIWZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLlVJPy5Jc0ltYWdlIHx8XG5cdFx0XHQvaW1hZ2VcXC8vaS50ZXN0KGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvcmU/Lk1lZGlhVHlwZT8udG9TdHJpbmcoKSA/PyBcIlwiKTtcblxuXHRcdC8vIEF2YXRhclxuXHRcdGNvbnN0IGZpbGVBdmF0YXJTcmMgPSBGaWVsZFRlbXBsYXRpbmcuZ2V0VmFsdWVCaW5kaW5nKGZpZWxkLmRhdGFNb2RlbFBhdGgsIHt9KTtcblx0XHRjb25zdCBmaWxlQXZhdGFyRGlzcGxheVNoYXBlID0gRmllbGRUZW1wbGF0aW5nLmdldEF2YXRhclNoYXBlKGZpZWxkLmRhdGFNb2RlbFBhdGgpO1xuXG5cdFx0Ly8gSWNvblxuXHRcdGNvbnN0IGZpbGVJY29uU3JjID0gRmllbGRIZWxwZXIuZ2V0UGF0aEZvckljb25Tb3VyY2UoZmllbGQuZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRoKTtcblxuXHRcdC8vIExpbmtcblx0XHRjb25zdCBmaWxlTGlua1RleHQgPSBGaWVsZEhlbHBlci5nZXRGaWxlbmFtZUV4cHIoZmlsZUZpbGVuYW1lRXhwcmVzc2lvbiwgXCJ7c2FwLmZlLmkxOG4+TV9GSUVMRF9GSUxFVVBMT0FERVJfTk9GSUxFTkFNRV9URVhUfVwiKTtcblx0XHRjb25zdCBmaWxlTGlua0hyZWYgPSBGaWVsZEhlbHBlci5nZXREb3dubG9hZFVybChmaWxlVXBsb2FkVXJsID8/IFwiXCIpO1xuXG5cdFx0Ly8gVGV4dFxuXHRcdGNvbnN0IGZpbGVUZXh0VmlzaWJsZSA9IGNvbXBpbGVFeHByZXNzaW9uKGVxdWFsKHBhdGhJbk1vZGVsKGAke2ZpZWxkLmZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aH1Ab2RhdGEubWVkaWFDb250ZW50VHlwZWApLCBudWxsKSk7XG5cblx0XHRsZXQgZmlsZUFjY2VwdGFibGVNZWRpYVR5cGVzO1xuXHRcdC8vIEZpbGVVcGxvYWRlclxuXHRcdGlmIChmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5BY2NlcHRhYmxlTWVkaWFUeXBlcykge1xuXHRcdFx0Y29uc3QgYWNjZXB0ZWRUeXBlcyA9IEFycmF5LmZyb20oZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnMuQ29yZS5BY2NlcHRhYmxlTWVkaWFUeXBlcyBhcyB1bmtub3duIGFzIHN0cmluZ1tdKS5tYXAoXG5cdFx0XHRcdCh0eXBlKSA9PiBgJyR7dHlwZX0nYFxuXHRcdFx0KTtcblx0XHRcdGZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcyA9IGB7PW9kYXRhLmNvbGxlY3Rpb24oWyR7YWNjZXB0ZWRUeXBlcy5qb2luKFwiLFwiKX1dKX1gOyAvLyBUaGlzIGRvZXMgbm90IGZlZWwgcmlnaHQsIGJ1dCBmb2xsb3dzIHRoZSBsb2dpYyBvZiBBbm5vdGF0aW9uSGVscGVyI3ZhbHVlXG5cdFx0fVxuXHRcdGNvbnN0IGZpbGVNYXhpbXVtU2l6ZSA9IEZpZWxkSGVscGVyLmNhbGN1bGF0ZU1CZnJvbUJ5dGUoZmllbGQucHJvcGVydHkubWF4TGVuZ3RoKTtcblxuXHRcdGlmIChmaWxlSXNJbWFnZSkge1xuXHRcdFx0aW5uZXJGaWxlUGFydCA9IHtcblx0XHRcdFx0YXZhdGFyOiAoXG5cdFx0XHRcdFx0PEF2YXRhclxuXHRcdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdFx0XHRzcmM9e2ZpbGVBdmF0YXJTcmN9XG5cdFx0XHRcdFx0XHRkaXNwbGF5U2l6ZT1cIlNcIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaVNtYWxsTWFyZ2luRW5kXCJcblx0XHRcdFx0XHRcdGltYWdlRml0VHlwZT1cIkNvdmVyXCJcblx0XHRcdFx0XHRcdGRpc3BsYXlTaGFwZT17ZmlsZUF2YXRhckRpc3BsYXlTaGFwZX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhOiA8SW1hZ2VDdXN0b21EYXRhIHBhcmFtTmFtZT1cInhjYWNoZVwiIC8+XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdDwvQXZhdGFyPlxuXHRcdFx0XHQpXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbm5lckZpbGVQYXJ0ID0ge1xuXHRcdFx0XHRpY29uOiA8SWNvbiBzcmM9e2ZpbGVJY29uU3JjfSBjbGFzcz1cInNhcFVpU21hbGxNYXJnaW5FbmRcIiB2aXNpYmxlPXtmaWxlU3RyZWFtTm90RW1wdHl9IC8+LFxuXHRcdFx0XHRsaW5rOiAoXG5cdFx0XHRcdFx0PExpbmtcblx0XHRcdFx0XHRcdHRleHQ9e2ZpbGVMaW5rVGV4dH1cblx0XHRcdFx0XHRcdHRhcmdldD1cIl9ibGFua1wiXG5cdFx0XHRcdFx0XHRocmVmPXtmaWxlTGlua0hyZWZ9XG5cdFx0XHRcdFx0XHR2aXNpYmxlPXtmaWxlU3RyZWFtTm90RW1wdHl9XG5cdFx0XHRcdFx0XHR3cmFwcGluZz1cInRydWVcIlxuXHRcdFx0XHRcdFx0cmVhY3RpdmVBcmVhTW9kZT17ZmllbGQuZm9ybWF0T3B0aW9ucz8ucmVhY3RpdmVBcmVhTW9kZX1cblx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCksXG5cdFx0XHRcdHRleHQ6IDxUZXh0IGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfSB0ZXh0PVwiXCIgdmlzaWJsZT17ZmlsZVRleHRWaXNpYmxlfSAvPlxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoKGZpZWxkLmVkaXRNb2RlID8/IGZpZWxkLmNvbXB1dGVkRWRpdE1vZGUpICE9PSBGaWVsZEVkaXRNb2RlLkRpc3BsYXkpIHtcblx0XHRcdGNvbnN0IGJlZm9yZURpYWxvZ09wZW4gPSBmaWVsZC5jb2xsYWJvcmF0aW9uRW5hYmxlZCA/IGZpZWxkLmV2ZW50SGFuZGxlcnMuaGFuZGxlT3BlblVwbG9hZGVyIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgYWZ0ZXJEaWFsb2dPcGVuID0gZmllbGQuY29sbGFib3JhdGlvbkVuYWJsZWQgPyBmaWVsZC5ldmVudEhhbmRsZXJzLmhhbmRsZUNsb3NlVXBsb2FkZXIgOiB1bmRlZmluZWQ7XG5cblx0XHRcdGlubmVyRmlsZVBhcnQgPSB7XG5cdFx0XHRcdC4uLmlubmVyRmlsZVBhcnQsXG5cdFx0XHRcdGZpbGVVcGxvYWRlcjogKFxuXHRcdFx0XHRcdDxGaWxlVXBsb2FkZXJcblx0XHRcdFx0XHRcdG5hbWU9XCJGRVY0RmlsZVVwbG9hZFwiXG5cdFx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5maWxlVXBsb2FkZXJWaXNpYmxlfVxuXHRcdFx0XHRcdFx0YnV0dG9uT25seT1cInRydWVcIlxuXHRcdFx0XHRcdFx0aWNvbk9ubHk9XCJ0cnVlXCJcblx0XHRcdFx0XHRcdG11bHRpcGxlPVwiZmFsc2VcIlxuXHRcdFx0XHRcdFx0dG9vbHRpcD1cIntzYXAuZmUuaTE4bj5NX0ZJRUxEX0ZJTEVVUExPQURFUl9VUExPQURfQlVUVE9OX1RPT0xUSVB9XCJcblx0XHRcdFx0XHRcdGljb249XCJzYXAtaWNvbjovL3VwbG9hZFwiXG5cdFx0XHRcdFx0XHRzdHlsZT1cIlRyYW5zcGFyZW50XCJcblx0XHRcdFx0XHRcdHNlbmRYSFI9XCJ0cnVlXCJcblx0XHRcdFx0XHRcdHVzZU11bHRpcGFydD1cImZhbHNlXCJcblx0XHRcdFx0XHRcdHNhbWVGaWxlbmFtZUFsbG93ZWQ9XCJ0cnVlXCJcblx0XHRcdFx0XHRcdG1pbWVUeXBlPXtmaWxlQWNjZXB0YWJsZU1lZGlhVHlwZXN9XG5cdFx0XHRcdFx0XHR0eXBlTWlzc21hdGNoPXtcblx0XHRcdFx0XHRcdFx0ZmllbGQuZXZlbnRIYW5kbGVycy5oYW5kbGVUeXBlTWlzc21hdGNoIGFzIHVua25vd24gYXMgKG9FdmVudDogRmlsZVVwbG9hZGVyJFR5cGVNaXNzbWF0Y2hFdmVudCkgPT4gdm9pZFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bWF4aW11bUZpbGVTaXplPXtmaWxlTWF4aW11bVNpemV9XG5cdFx0XHRcdFx0XHRmaWxlU2l6ZUV4Y2VlZD17XG5cdFx0XHRcdFx0XHRcdGZpZWxkLmV2ZW50SGFuZGxlcnMuaGFuZGxlRmlsZVNpemVFeGNlZWQgYXMgdW5rbm93biBhcyAob0V2ZW50OiBGaWxlVXBsb2FkZXIkRmlsZVNpemVFeGNlZWRFdmVudCkgPT4gdm9pZFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dXBsb2FkT25DaGFuZ2U9XCJmYWxzZVwiXG5cdFx0XHRcdFx0XHR1cGxvYWRDb21wbGV0ZT17XG5cdFx0XHRcdFx0XHRcdGZpZWxkLmV2ZW50SGFuZGxlcnMuaGFuZGxlVXBsb2FkQ29tcGxldGUgYXMgdW5rbm93biBhcyAob0V2ZW50OiBGaWxlVXBsb2FkZXIkVXBsb2FkQ29tcGxldGVFdmVudCkgPT4gdm9pZFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aHR0cFJlcXVlc3RNZXRob2Q9e2ZpZWxkLmlzRHluYW1pY0luc3RhbnRpYXRpb24gPyBGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZC5QdXQgOiBcIlB1dFwifVxuXHRcdFx0XHRcdFx0Y2hhbmdlPXtmaWVsZC5ldmVudEhhbmRsZXJzLnVwbG9hZFN0cmVhbSBhcyB1bmtub3duIGFzIChvRXZlbnQ6IEZpbGVVcGxvYWRlciRDaGFuZ2VFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0XHRcdGJlZm9yZURpYWxvZ09wZW49e2JlZm9yZURpYWxvZ09wZW4gYXMgdW5rbm93biBhcyAob0V2ZW50OiBFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0XHRcdGFmdGVyRGlhbG9nQ2xvc2U9e2FmdGVyRGlhbG9nT3BlbiBhcyB1bmtub3duIGFzIChvRXZlbnQ6IEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRcdFx0dXBsb2FkU3RhcnQ9e2ZpZWxkLmV2ZW50SGFuZGxlcnMuaGFuZGxlT3BlblVwbG9hZGVyIGFzIHVua25vd24gYXMgKG9FdmVudDogRmlsZVVwbG9hZGVyJFVwbG9hZFN0YXJ0RXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KSxcblx0XHRcdFx0ZGVsZXRlQnV0dG9uOiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0aWNvbj1cInNhcC1pY29uOi8vc3lzLWNhbmNlbFwiXG5cdFx0XHRcdFx0XHR0eXBlPVwiVHJhbnNwYXJlbnRcIlxuXHRcdFx0XHRcdFx0cHJlc3M9e2ZpZWxkLmV2ZW50SGFuZGxlcnMucmVtb3ZlU3RyZWFtIGFzIHVua25vd24gYXMgKG9FdmVudDogRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdFx0XHR0b29sdGlwPVwie3NhcC5mZS5pMThuPk1fRklFTERfRklMRVVQTE9BREVSX0RFTEVURV9CVVRUT05fVE9PTFRJUH1cIlxuXHRcdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZmlsZVVwbG9hZGVyVmlzaWJsZX1cblx0XHRcdFx0XHRcdGVuYWJsZWQ9e2ZpbGVTdHJlYW1Ob3RFbXB0eX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8RmlsZVdyYXBwZXJcblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkUnVudGltZUhlbHBlcjogJ3NhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lSGVscGVyJ31cIlxuXHRcdFx0XHR2aXNpYmxlPXtmaWVsZC52aXNpYmxlfVxuXHRcdFx0XHR1cGxvYWRVcmw9e2ZpbGVVcGxvYWRVcmx9XG5cdFx0XHRcdHByb3BlcnR5UGF0aD17ZmllbGQuZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRofVxuXHRcdFx0XHRmaWxlbmFtZT17ZmlsZUZpbGVuYW1lUGF0aH1cblx0XHRcdFx0bWVkaWFUeXBlPXtmaWxlTWVkaWFUeXBlfVxuXHRcdFx0XHRmaWVsZEdyb3VwSWRzPXtmaWVsZC5maWVsZEdyb3VwSWRzfVxuXHRcdFx0XHR2YWxpZGF0ZUZpZWxkR3JvdXA9e2ZpZWxkLmV2ZW50SGFuZGxlcnMudmFsaWRhdGVGaWVsZEdyb3VwIGFzIChvRXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpID0+IHZvaWR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PVwic291cmNlUGF0aFwiIHZhbHVlPXtmaWVsZC5kYXRhU291cmNlUGF0aH0gLz4sXG5cdFx0XHRcdFx0aW5uZXJGaWxlUGFydFxuXHRcdFx0XHR9fVxuXHRcdFx0PC9GaWxlV3JhcHBlcj5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIExpbmsgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRMaW5rVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRsZXQgbGlua1VybDtcblx0XHRsZXQgaWNvblVybDtcblx0XHRsZXQgbGlua0FjdGl2ZWQ7XG5cdFx0dHlwZSBMaW5rVGFyZ2V0ID0gXCJfYmxhbmtcIiB8IFwiX3NlbGZcIiB8IFwiX3RvcFwiIHwgXCJfcGFyZW50XCI7XG5cdFx0bGV0IGxpbmtUYXJnZXQ6IExpbmtUYXJnZXQgfCB1bmRlZmluZWQ7XG5cblx0XHRzd2l0Y2ggKGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLiRUeXBlIGFzIHN0cmluZykge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxMaW5rXG5cdFx0XHRcdFx0XHRpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX1cblx0XHRcdFx0XHRcdHRleHQ9e0Rpc3BsYXlTdHlsZS5jb21wdXRlVGV4dFdpdGhXaGl0ZVNwYWNlKGZpZWxkKX1cblx0XHRcdFx0XHRcdHByZXNzPXtmaWVsZC5ldmVudEhhbmRsZXJzLm9uRGF0YUZpZWxkV2l0aElCTiBhcyB1bmtub3duIGFzIChvRXZlbnQ6IExpbmskUHJlc3NFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdFx0XHRjbGFzcz1cInNhcE1UZXh0UmVuZGVyV2hpdGVzcGFjZVdyYXBcIlxuXHRcdFx0XHRcdFx0YWNjZXNzaWJsZVJvbGU9e0xpbmtBY2Nlc3NpYmxlUm9sZS5CdXR0b259XG5cdFx0XHRcdFx0XHRyZWFjdGl2ZUFyZWFNb2RlPXtmaWVsZC5mb3JtYXRPcHRpb25zPy5yZWFjdGl2ZUFyZWFNb2RlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8TGlua1xuXHRcdFx0XHRcdFx0aWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfVxuXHRcdFx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkUnVudGltZUhlbHBlcjogJ3NhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lSGVscGVyJ31cIlxuXHRcdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdFx0XHR0ZXh0PXtmaWVsZC50ZXh0fVxuXHRcdFx0XHRcdFx0cHJlc3M9e2ZpZWxkLmV2ZW50SGFuZGxlcnMub25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGggYXMgdW5rbm93biBhcyAob0V2ZW50OiBMaW5rJFByZXNzRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdFx0XHRlbmFibGVkPXtmaWVsZC5mb3JtYXRPcHRpb25zLmlzQW5hbHl0aWNhbEFnZ3JlZ2F0ZWRSb3cgPyBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdFx0XHRyZWFjdGl2ZUFyZWFNb2RlPXtmaWVsZC5mb3JtYXRPcHRpb25zPy5yZWFjdGl2ZUFyZWFNb2RlfVxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBNVGV4dFJlbmRlcldoaXRlc3BhY2VXcmFwXCJcblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxMaW5rXG5cdFx0XHRcdFx0XHRpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX1cblx0XHRcdFx0XHRcdHRleHQ9e2ZpZWxkLnRleHR9XG5cdFx0XHRcdFx0XHRwcmVzcz17ZmllbGQuZXZlbnRIYW5kbGVycy5vbkRhdGFGaWVsZEFjdGlvbkJ1dHRvbiBhcyB1bmtub3duIGFzIChvRXZlbnQ6IExpbmskUHJlc3NFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0XHRcdGVuYWJsZWQ9e2ZpZWxkLmZvcm1hdE9wdGlvbnMuaXNBbmFseXRpY2FsQWdncmVnYXRlZFJvdyA/IFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdFx0XHRlbXB0eUluZGljYXRvck1vZGU9e2ZpZWxkLmVtcHR5SW5kaWNhdG9yTW9kZX1cblx0XHRcdFx0XHRcdGNsYXNzPVwic2FwTVRleHRSZW5kZXJXaGl0ZXNwYWNlV3JhcFwiXG5cdFx0XHRcdFx0XHRhY2Nlc3NpYmxlUm9sZT17TGlua0FjY2Vzc2libGVSb2xlLkJ1dHRvbn1cblx0XHRcdFx0XHRcdHJlYWN0aXZlQXJlYU1vZGU9e2ZpZWxkLmZvcm1hdE9wdGlvbnM/LnJlYWN0aXZlQXJlYU1vZGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KTtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdFx0Y29uc3QgaHRtbDVMaW5rVGFyZ2V0ID0gZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnMuSFRNTDU/LkxpbmtUYXJnZXQ7XG5cdFx0XHRcdGZpZWxkLnRleHQgPSBEaXNwbGF5U3R5bGUuY29tcHV0ZVRleHRXaXRoV2hpdGVTcGFjZShmaWVsZCk7XG5cdFx0XHRcdGljb25VcmwgPSAoZmllbGQuY29udmVydGVkTWV0YVBhdGggYXMgRGF0YUZpZWxkVHlwZXMpLkljb25Vcmxcblx0XHRcdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0XHRcdFx0KGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoIGFzIERhdGFGaWVsZFR5cGVzKS5JY29uVXJsIGFzIHVua25vd24gYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8U3RyaW5nPlxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdGNvbnN0IGxpbmtCaW5kaW5nID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdChmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCBhcyBEYXRhRmllbGRXaXRoVXJsKS5VcmwgYXMgdW5rbm93biBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxTdHJpbmc+XG5cdFx0XHRcdCk7XG5cdFx0XHRcdGxpbmtVcmwgPSBjb21waWxlRXhwcmVzc2lvbihsaW5rQmluZGluZyk7XG5cdFx0XHRcdGxpbmtBY3RpdmVkID0gY29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKGxpbmtCaW5kaW5nLCBcIlwiKSkpO1xuXHRcdFx0XHRsaW5rVGFyZ2V0ID0gaHRtbDVMaW5rVGFyZ2V0ICYmIChodG1sNUxpbmtUYXJnZXQudG9TdHJpbmcoKSBhcyBMaW5rVGFyZ2V0KTtcblx0XHR9XG5cblx0XHRpZiAoZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW11bmljYXRpb24/LklzRW1haWxBZGRyZXNzIHx8IGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc1Bob25lTnVtYmVyKSB7XG5cdFx0XHRjb25zdCBsaW5rSXNFbWFpbEFkZHJlc3MgPSBmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcyAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgbGlua0lzUGhvbmVOdW1iZXIgPSBmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tdW5pY2F0aW9uPy5Jc1Bob25lTnVtYmVyICE9PSB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVZhbHVlQmluZGluZyA9IEZpZWxkVGVtcGxhdGluZy5nZXRWYWx1ZUJpbmRpbmcoZmllbGQuZGF0YU1vZGVsUGF0aCwge30pO1xuXHRcdFx0Y29uc3QgbWFpbEJsb2NrSWQgPSBmaWVsZC5kaXNwbGF5U3R5bGVJZCA/IGZpZWxkLmRpc3BsYXlTdHlsZUlkIDogYG1haWxCbG9jayR7dWlkKCl9YDtcblx0XHRcdGlmIChsaW5rSXNFbWFpbEFkZHJlc3MpIHtcblx0XHRcdFx0bGlua1VybCA9IGBtYWlsdG86JHtwcm9wZXJ0eVZhbHVlQmluZGluZ31gO1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxFbWFpbFxuXHRcdFx0XHRcdFx0aWQ9e21haWxCbG9ja0lkfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdFx0XHR0ZXh0PXtmaWVsZC50ZXh0fVxuXHRcdFx0XHRcdFx0bWFpbD17cHJvcGVydHlWYWx1ZUJpbmRpbmd9XG5cdFx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgPyBmaWVsZC5hcmlhTGFiZWxsZWRCeSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAobGlua0lzUGhvbmVOdW1iZXIpIHtcblx0XHRcdFx0bGlua1VybCA9IGB0ZWw6JHtwcm9wZXJ0eVZhbHVlQmluZGluZ31gO1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxMaW5rXG5cdFx0XHRcdFx0XHRpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX1cblx0XHRcdFx0XHRcdHRleHQ9e0Rpc3BsYXlTdHlsZS5jb21wdXRlVGV4dFdpdGhXaGl0ZVNwYWNlKGZpZWxkKX1cblx0XHRcdFx0XHRcdGhyZWY9e2xpbmtVcmx9XG5cdFx0XHRcdFx0XHRlbmFibGVkPXtsaW5rQWN0aXZlZH1cblx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdFx0XHRjbGFzcz1cInNhcE1UZXh0UmVuZGVyV2hpdGVzcGFjZVdyYXBcIlxuXHRcdFx0XHRcdFx0cmVhY3RpdmVBcmVhTW9kZT17ZmllbGQuZm9ybWF0T3B0aW9ucz8ucmVhY3RpdmVBcmVhTW9kZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChpY29uVXJsKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8T2JqZWN0U3RhdHVzXG5cdFx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkUnVudGltZUhlbHBlcjogJ3NhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lSGVscGVyJ31cIlxuXHRcdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0XHRpY29uPXtpY29uVXJsfVxuXHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHRcdHRleHQ9e2ZpZWxkLnRleHR9XG5cdFx0XHRcdFx0cHJlc3M9e2ZpZWxkLmV2ZW50SGFuZGxlcnMub3BlbkV4dGVybmFsTGluayBhcyB1bmtub3duIGFzIChvRXZlbnQ6IEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRcdGFjdGl2ZT17bGlua0FjdGl2ZWR9XG5cdFx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdFx0cmVhY3RpdmVBcmVhTW9kZT17ZmllbGQuZm9ybWF0T3B0aW9ucz8ucmVhY3RpdmVBcmVhTW9kZX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhOiA8Q3VzdG9tRGF0YSBrZXk9e1widXJsXCJ9IHZhbHVlPXtsaW5rVXJsfSAvPlxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvT2JqZWN0U3RhdHVzPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PExpbmtcblx0XHRcdFx0XHRpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdFx0dGV4dD17ZmllbGQudGV4dH1cblx0XHRcdFx0XHRocmVmPXtsaW5rVXJsfVxuXHRcdFx0XHRcdGVuYWJsZWQ9e2xpbmtBY3RpdmVkfVxuXHRcdFx0XHRcdHRhcmdldD17bGlua1RhcmdldCA9PT0gdW5kZWZpbmVkID8gXCJfdG9wXCIgOiBsaW5rVGFyZ2V0fVxuXHRcdFx0XHRcdHdyYXBwaW5nPXtmaWVsZC53cmFwID09PSB1bmRlZmluZWQgPyB0cnVlIDogZmllbGQud3JhcH1cblx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0XHRlbXB0eUluZGljYXRvck1vZGU9e2ZpZWxkLmVtcHR5SW5kaWNhdG9yTW9kZX1cblx0XHRcdFx0XHRyZWFjdGl2ZUFyZWFNb2RlPXtmaWVsZC5mb3JtYXRPcHRpb25zPy5yZWFjdGl2ZUFyZWFNb2RlfVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZpbmQgdGhlIGZvcmVpZ24ga2V5IG9mIHRhcmdldCBlbnRpdHkgd2hpY2ggcXVpY2sgdmlldyBGYWNldHMgd2Ugd2FudCB0byBkaXNwbGF5LlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIFRoZSBrZXkgb2YgdGhlIHRhcmdldCBlbnRpdHlcblx0ICovXG5cdGdldEZvcmVpZ25LZXlGb3JDdXN0b21EYXRhKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgcmVsYXRpdmVQYXRoVG9RdWlja1ZpZXdFbnRpdHkgPSBRdWlja1ZpZXcuZ2V0UmVsYXRpdmVQYXRoVG9RdWlja1ZpZXdFbnRpdHkoZmllbGQuZGF0YU1vZGVsUGF0aCk7XG5cdFx0aWYgKHJlbGF0aXZlUGF0aFRvUXVpY2tWaWV3RW50aXR5KSB7XG5cdFx0XHRjb25zdCB0YXJnZXROYXZpZ2F0aW9uUHJvcGVydGllcyA9IGZpZWxkLmRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcztcblx0XHRcdGNvbnN0IHRhcmdldE5hdlByb3AgPSB0YXJnZXROYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKChuYXZQcm9wKSA9PiBuYXZQcm9wLm5hbWUgPT09IHJlbGF0aXZlUGF0aFRvUXVpY2tWaWV3RW50aXR5KTtcblx0XHRcdGNvbnN0IHJlZkNvbnN0cmFpbnQgPSB0YXJnZXROYXZQcm9wPy5yZWZlcmVudGlhbENvbnN0cmFpbnQ7XG5cdFx0XHRjb25zdCBrZXkgPSByZWZDb25zdHJhaW50Py5sZW5ndGggJiYgdHlwZW9mIHJlZkNvbnN0cmFpbnRbMF0gPT09IFwib2JqZWN0XCIgJiYgcmVmQ29uc3RyYWludFswXS50YXJnZXRQcm9wZXJ0eTtcblx0XHRcdGNvbnN0IGtleVRvRmV0Y2ggPSBrZXkgPyBgJHtyZWxhdGl2ZVBhdGhUb1F1aWNrVmlld0VudGl0eX0vJHtrZXl9YCA6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChrZXlUb0ZldGNoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGtleVRvRmV0Y2g7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgY2hlY2sgZXhwcmVzc2lvbiBmb3IgZGlzcGxheWluZyBvciBub3QgYSBxdWlja3ZpZXcuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgVGhlIGtleSBvZiB0aGUgdGFyZ2V0IGVudGl0eVxuXHQgKi9cblx0Z2V0Rm9yZWlnbktleVZhbHVlRXhwcmVzc2lvbihmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGZvcmVpZ25LZXlSZWxhdGl2ZVBhdGggPSBRdWlja1ZpZXcuZ2V0UmVsYXRpdmVQYXRoVG9RdWlja1ZpZXdFbnRpdHkoZmllbGQuZGF0YU1vZGVsUGF0aClcblx0XHRcdD8gdGhpcy5nZXRGb3JlaWduS2V5Rm9yQ3VzdG9tRGF0YShmaWVsZClcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+ID0ge1xuXHRcdFx0cGF0aDogYCR7Zm9yZWlnbktleVJlbGF0aXZlUGF0aH1gLFxuXHRcdFx0X3R5cGU6IFwiUGF0aEluTW9kZWxcIlxuXHRcdH07XG5cdFx0cmV0dXJuIGAke2NvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShlcXVhbChmb3JlaWduS2V5UmVsYXRpdmVQYXRoLCB1bmRlZmluZWQpLCBjb25zdGFudCh0cnVlKSwgbm90KGVxdWFsKG51bGwsIGV4cHJlc3Npb24pKSkpfWA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgU3RhbmRhcmRMaW5rV2l0aFF1aWNrVmlldyB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBkaXNwbGF5XG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0U3RhbmRhcmRMaW5rV2l0aFF1aWNrVmlld1RlbXBsYXRlKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcywgdGV4dDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24pOiBzdHJpbmcge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TGlua1xuXHRcdFx0XHRpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZFJ1bnRpbWVIZWxwZXI6ICdzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlcid9XCJcblx0XHRcdFx0dGV4dD17dGV4dH1cblx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdHdyYXBwaW5nPXtmaWVsZC53cmFwID09PSB1bmRlZmluZWQgPyB0cnVlIDogZmllbGQud3JhcH1cblx0XHRcdFx0cHJlc3M9e2ZpZWxkLmV2ZW50SGFuZGxlcnMubGlua1ByZXNzZWR9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRlbXB0eUluZGljYXRvck1vZGU9e2ZpZWxkLmVtcHR5SW5kaWNhdG9yTW9kZX1cblx0XHRcdFx0YWNjZXNzaWJsZVJvbGU9e0xpbmtBY2Nlc3NpYmxlUm9sZS5CdXR0b259XG5cdFx0XHRcdHJlYWN0aXZlQXJlYU1vZGU9e2ZpZWxkLmZvcm1hdE9wdGlvbnM/LnJlYWN0aXZlQXJlYU1vZGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogWzxDdXN0b21EYXRhIGtleT17XCJsb2FkVmFsdWVcIn0gdmFsdWU9e2ZpZWxkLnZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbn0gLz5dLFxuXHRcdFx0XHRcdGRlcGVuZGVudHM6IERpc3BsYXlTdHlsZS5nZXRNZGNMaW5rRm9yUXVpY2tWaWV3KGZpZWxkKVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9MaW5rPlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgQ29uZGl0aW9uYWxMaW5rVGVtcGxhdGUgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHBhcmFtIGNvbmRpdGlvbiBDb25kaXRpb24gdG8gZGlzcGxheSBhIExpbmsgb3IgYSBUZXh0XG5cdCAqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIGRpc3BsYXlcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRDb25kaXRpb25hbExpbmtXaXRoUXVpY2tWaWV3VGVtcGxhdGUoXG5cdFx0ZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLFxuXHRcdGNvbmRpdGlvbjogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdFx0dGV4dDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb25cblx0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFRleHRMaW5rXG5cdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkUnVudGltZUhlbHBlcjogJ3NhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lSGVscGVyJ31cIlxuXHRcdFx0XHRzaG93QXNMaW5rPXtjb25kaXRpb24gYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRzZW1hbnRpY09iamVjdD17ZmllbGQuc2VtYW50aWNPYmplY3R9XG5cdFx0XHRcdHRleHQ9e3RleHR9XG5cdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHR3cmFwcGluZz17ZmllbGQud3JhcCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGZpZWxkLndyYXB9XG5cdFx0XHRcdHByZXNzPXtmaWVsZC5ldmVudEhhbmRsZXJzLmxpbmtQcmVzc2VkfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnl9XG5cdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFs8Q3VzdG9tRGF0YSBrZXk9e1wibG9hZFZhbHVlXCJ9IHZhbHVlPXtmaWVsZC52YWx1ZUFzU3RyaW5nQmluZGluZ0V4cHJlc3Npb259IC8+XSxcblx0XHRcdFx0XHRkZXBlbmRlbnRzOiBEaXNwbGF5U3R5bGUuZ2V0TWRjTGlua0ZvclF1aWNrVmlldyhmaWVsZClcblx0XHRcdFx0fX1cblx0XHRcdDwvVGV4dExpbms+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBDb25kaXRpb25hbExpbmtUZW1wbGF0ZSB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gY29uZGl0aW9uIENvbmRpdGlvbiB0byBkaXNwbGF5IGEgTGluayBvciBhIFRleHRcblx0ICogQHBhcmFtIGNvbnRlbnRUcnVlIFRoZSBDb250cm9sIHRvIGRpc3BsYXkgaW4gY2FzZSBjb25kaXRpb24gaXMgdHJ1ZVxuXHQgKiBAcGFyYW0gY29udGVudEZhbHNlIFRoZSBDb250cm9sIHRvIGRpc3BsYXkgaW4gY2FzZSBjb25kaXRpb24gaXMgZmFsc2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRDb25kaXRpb25hbFdyYXBwZXJGb3JRdWlja1ZpZXdUZW1wbGF0ZShcblx0XHRmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdFx0Y29uZGl0aW9uOiBzdHJpbmcsXG5cdFx0Y29udGVudFRydWU6IHN0cmluZyxcblx0XHRjb250ZW50RmFsc2U6IHN0cmluZ1xuXHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8Q29uZGl0aW9uYWxXcmFwcGVyIHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfSBjb25kaXRpb249e2NvbmRpdGlvbiBhcyB1bmtub3duIGFzIGJvb2xlYW59PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnRUcnVlOiBjb250ZW50VHJ1ZSxcblx0XHRcdFx0XHRjb250ZW50RmFsc2U6IGNvbnRlbnRGYWxzZVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9Db25kaXRpb25hbFdyYXBwZXI+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBMaW5rV2l0aFF1aWNrVmlldyB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldExpbmtXaXRoUXVpY2tWaWV3VGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCB0ZXh0ID0gZmllbGQuZm9ybWF0T3B0aW9ucy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0XG5cdFx0XHQ/IGZpZWxkLnRleHRGcm9tVmFsdWVMaXN0XG5cdFx0XHQ6IERpc3BsYXlTdHlsZS5jb21wdXRlVGV4dFdpdGhXaGl0ZVNwYWNlKGZpZWxkKTtcblx0XHRjb25zdCBjb25kaXRpb24gPSB0aGlzLmdldFF1aWNrVmlld0NvbmRpdGlvbihmaWVsZCk7XG5cdFx0aWYgKGNvbmRpdGlvbiA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldFN0YW5kYXJkTGlua1dpdGhRdWlja1ZpZXdUZW1wbGF0ZShmaWVsZCwgdGV4dCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmdldENvbmRpdGlvbmFsTGlua1dpdGhRdWlja1ZpZXdUZW1wbGF0ZShmaWVsZCwgY29uZGl0aW9uLCB0ZXh0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBUZXh0IHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0VGV4dFRlbXBsYXRlKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0aWYgKGZpZWxkLmZvcm1hdE9wdGlvbnMucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PFRleHRcblx0XHRcdFx0XHRpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdFx0dGV4dD17ZmllbGQudGV4dEZyb21WYWx1ZUxpc3R9XG5cdFx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkUnVudGltZTogJ3NhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lJ31cIlxuXHRcdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRcdHJlbmRlcldoaXRlc3BhY2U9XCJ0cnVlXCJcblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFdoZW4gaGF2aW5nIGEgVGV4dEFycmFuZ2VtZW50IHdpdGggVGV4dE9ubHksIFJUQSBjYW4gb25seSBmaW5kIHRoZSBiaW5kaW5nIGZvciB0aGUgdGV4dCwgYnV0IG5vdCBmb3IgdGhlIGZpZWxkLlxuXHRcdFx0Ly8gVG8gcHJldmVudCB0aGF0IHN1Y2ggYSBmaWVsZCBjYW4gYmUgYWRkZWQgdHdpY2UgdmlhIFJUQSwgd2UgbmVlZCB0byBwcm92aWRlIHRoZSBmaWVsZCBiaW5kaW5nIGFzIGEgZHVtbXkgY3VzdG9tIGJpbmRpbmcuXG5cdFx0XHRsZXQgY3VzdG9tZGF0YTtcblx0XHRcdGlmIChmaWVsZC5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlID09PSBcIkRlc2NyaXB0aW9uXCIgJiYgZmllbGQudmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGN1c3RvbWRhdGEgPSA8Q3VzdG9tRGF0YSBrZXk9XCJmaWVsZEJpbmRpbmdcIiB2YWx1ZT17ZmllbGQudmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9ufSAvPjtcblx0XHRcdH1cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxUZXh0XG5cdFx0XHRcdFx0aWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfVxuXHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHRcdHRleHQ9e2ZpZWxkLnRleHR9XG5cdFx0XHRcdFx0d3JhcHBpbmc9e2ZpZWxkLndyYXB9XG5cdFx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdFx0cmVuZGVyV2hpdGVzcGFjZT1cInRydWVcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjdXN0b21kYXRhXVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvVGV4dD5cblx0XHRcdCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRlbXBsYXRlIGZvciB0aGUgcGFzc3dvcmQgZmllbGQuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRQYXNzd29yZFRlbXBsYXRlKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdGV4dEJpbmRpbmcgPSBGaWVsZFRlbXBsYXRpbmcuZ2V0VGV4dEJpbmRpbmcoZmllbGQuZGF0YU1vZGVsUGF0aCwgZmllbGQuZm9ybWF0T3B0aW9ucywgdHJ1ZSk7XG5cdFx0Y29uc3QgdGV4dEV4cHJlc3Npb24gPVxuXHRcdFx0aXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24odGV4dEJpbmRpbmcpIHx8IHR5cGVvZiB0ZXh0QmluZGluZyA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGZvcm1hdFJlc3VsdChbdGV4dEJpbmRpbmddLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0UGFzc3dvcmRUZXh0KSlcblx0XHRcdFx0OiBjb21waWxlRXhwcmVzc2lvbih0ZXh0QmluZGluZyk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxUZXh0XG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cInt2YWx1ZUZvcm1hdHRlcnM6ICdzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyJ31cIlxuXHRcdFx0XHRpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHR0ZXh0PXt0ZXh0RXhwcmVzc2lvbn1cblx0XHRcdFx0d3JhcHBpbmc9e2ZpZWxkLndyYXB9XG5cdFx0XHRcdHJlbmRlcldoaXRlc3BhY2U9XCJ0cnVlXCJcblx0XHRcdD48L1RleHQ+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBPYmplY3RJZGVudGlmaWVyIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0T2JqZWN0SWRlbnRpZmllcihmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGxldCBkZXBlbmRlbnRzOiBNZGNMaW5rIHwgdW5kZWZpbmVkO1xuXHRcdGxldCB0aXRsZUFjdGl2ZTtcblx0XHRpZiAoZmllbGQuaGFzUXVpY2tWaWV3KSB7XG5cdFx0XHR0aXRsZUFjdGl2ZSA9IHRoaXMuZ2V0UXVpY2tWaWV3Q29uZGl0aW9uKGZpZWxkKTtcblx0XHRcdGRlcGVuZGVudHMgPSBEaXNwbGF5U3R5bGUuZ2V0TWRjTGlua0ZvclF1aWNrVmlldyhmaWVsZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRpdGxlQWN0aXZlID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0bGV0IGlkZW50aWZpZXIgPSAoXG5cdFx0XHQ8T2JqZWN0SWRlbnRpZmllclxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGRSdW50aW1lSGVscGVyOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXInfVwiXG5cdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0dGl0bGU9e2ZpZWxkLmlkZW50aWZpZXJUaXRsZX1cblx0XHRcdFx0dGV4dD17ZmllbGQuaWRlbnRpZmllclRleHR9XG5cdFx0XHRcdHRpdGxlQWN0aXZlPXt0aXRsZUFjdGl2ZX1cblx0XHRcdFx0dGl0bGVQcmVzcz17ZmllbGQuZXZlbnRIYW5kbGVycy5saW5rUHJlc3NlZH1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRyZWFjdGl2ZUFyZWFNb2RlPXtmaWVsZC5mb3JtYXRPcHRpb25zPy5yZWFjdGl2ZUFyZWFNb2RlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFs8Q3VzdG9tRGF0YSBrZXk9e1wibG9hZFZhbHVlXCJ9IHZhbHVlPXtmaWVsZC52YWx1ZUFzU3RyaW5nQmluZGluZ0V4cHJlc3Npb259IC8+XSxcblx0XHRcdFx0XHRkZXBlbmRlbnRzOiBkZXBlbmRlbnRzXG5cdFx0XHRcdH19XG5cdFx0XHQ8L09iamVjdElkZW50aWZpZXI+XG5cdFx0KTtcblx0XHRpZiAoZmllbGQuaGFzU2l0dWF0aW9uc0luZGljYXRvcikge1xuXHRcdFx0aWRlbnRpZmllciA9IChcblx0XHRcdFx0PEhCb3ggYWxpZ25JdGVtcz1cIkNlbnRlclwiIGp1c3RpZnlDb250ZW50PVwiU3BhY2VCZXR3ZWVuXCIgd2lkdGg9XCIxMDAlXCI+XG5cdFx0XHRcdFx0e2lkZW50aWZpZXJ9XG5cdFx0XHRcdFx0PFNpdHVhdGlvbnNJbmRpY2F0b3IgY29udGV4dFBhdGg9e2ZpZWxkLmNvbnRleHRQYXRoLmdldFBhdGgoKX0gcHJvcGVydHlQYXRoPXtmaWVsZC5zaXR1YXRpb25zSW5kaWNhdG9yUHJvcGVydHlQYXRofSAvPlxuXHRcdFx0XHQ8L0hCb3g+XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRpZiAoZmllbGQuc2hvd0Vycm9ySW5kaWNhdG9yICYmIGZpZWxkLnNob3dFcnJvck9iamVjdFN0YXR1cykge1xuXHRcdFx0aWRlbnRpZmllciA9IChcblx0XHRcdFx0PFZCb3g+XG5cdFx0XHRcdFx0e2lkZW50aWZpZXJ9XG5cdFx0XHRcdFx0PE9iamVjdFN0YXR1c1xuXHRcdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuc2hvd0Vycm9yT2JqZWN0U3RhdHVzfVxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaVNtYWxsTWFyZ2luQm90dG9tXCJcblx0XHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+Q29udGFpbnNfRXJyb3JzfVwiXG5cdFx0XHRcdFx0XHRzdGF0ZT1cIkVycm9yXCJcblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBpZGVudGlmaWVyO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIE9iamVjdFN0YXR1cyB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldE9iamVjdFN0YXR1cyhmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGxldCBvYmplY3RTdGF0dXM7XG5cdFx0bGV0IHJlcXVpcmVkSGVscGVyID0ge1xuXHRcdFx0XCJjb3JlOnJlcXVpcmVcIjogXCJ7RmllbGRSdW50aW1lSGVscGVyOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXInfVwiXG5cdFx0fTtcblx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGQ+KGZpZWxkLm1ldGFQYXRoLCBmaWVsZC5jb250ZXh0UGF0aCk7XG5cdFx0Y29uc3QgZW5oYW5jZWRWYWx1ZURhdGFNb2RlbFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LlZhbHVlLnBhdGhcblx0XHQpO1xuXHRcdGNvbnN0IGNvbmRpdGlvbiA9IGhhc1ZhbGlkQW5hbHl0aWNhbEN1cnJlbmN5T3JVbml0KGVuaGFuY2VkVmFsdWVEYXRhTW9kZWxQYXRoKTtcblx0XHRjb25zdCBjb252ZXJ0ZWREYXRhRmllbGQgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFQb2ludFR5cGU+KGZpZWxkLm1ldGFQYXRoKTtcblx0XHRjb25zdCBjcml0aWNhbGl0eUljb24gPSBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUljb24oY29udmVydGVkRGF0YUZpZWxkKTtcblx0XHRjb25zdCBzdGF0ZSA9IGJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5Q29sb3IoY29udmVydGVkRGF0YUZpZWxkKTtcblxuXHRcdC8vIEV4dHJhY3QgdG9vbHRpcCBmcm9tIFF1aWNrSW5mbyBhbm5vdGF0aW9uIC0gY2hlY2sgRGF0YUZpZWxkIGZpcnN0LCB0aGVuIHByb3BlcnR5XG5cdFx0Y29uc3QgdG9vbFRpcFZhbHVlID0gZ2V0VG9vbHRpcFZhbHVlKGRhdGFNb2RlbE9iamVjdFBhdGgsIGVuaGFuY2VkVmFsdWVEYXRhTW9kZWxQYXRoKTtcblxuXHRcdGNvbnN0IGxpbmtVcmwgPSAoZmllbGQuY29udmVydGVkTWV0YVBhdGggYXMgRGF0YUZpZWxkV2l0aFVybCkuVXJsXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdChmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCBhcyBEYXRhRmllbGRXaXRoVXJsKS5VcmwgYXMgdW5rbm93biBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxTdHJpbmc+XG5cdFx0XHRcdFx0KVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdGlmIChmaWVsZC5mb3JtYXRPcHRpb25zLmlzQW5hbHl0aWNzICYmIGZpZWxkLmhhc1VuaXRPckN1cnJlbmN5KSB7XG5cdFx0XHRjb25zdCBjb250ZW50ID0gRGlzcGxheVN0eWxlLmdldEN1cnJlbmN5T3JVbml0Q29udHJvbChmaWVsZCwgPFRleHQgdGV4dD17ZmllbGQudGV4dH0gdGV4dEFsaWduPVwiRW5kXCI+PC9UZXh0Pik7XG5cdFx0XHRvYmplY3RTdGF0dXMgPSAoXG5cdFx0XHRcdDxDb25kaXRpb25hbFdyYXBwZXIgaWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfSBjb25kaXRpb249e2NvbmRpdGlvbiBhcyB1bmtub3duIGFzIGJvb2xlYW59PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjb250ZW50VHJ1ZTogKFxuXHRcdFx0XHRcdFx0XHQ8T2JqZWN0U3RhdHVzXG5cdFx0XHRcdFx0XHRcdFx0aWNvbj17Y3JpdGljYWxpdHlJY29ufVxuXHRcdFx0XHRcdFx0XHRcdHN0YXRlPXtzdGF0ZX1cblx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX1cblx0XHRcdFx0XHRcdFx0XHR0ZXh0PXtmaWVsZC50ZXh0fVxuXHRcdFx0XHRcdFx0XHRcdHRvb2x0aXA9e3Rvb2xUaXBWYWx1ZX1cblx0XHRcdFx0XHRcdFx0XHRlbXB0eUluZGljYXRvck1vZGU9e2ZpZWxkLmVtcHR5SW5kaWNhdG9yTW9kZX1cblx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInNhcE1UZXh0UmVuZGVyV2hpdGVzcGFjZVdyYXBcIlxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdGNvbnRlbnRGYWxzZTogY29udGVudFxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQ29uZGl0aW9uYWxXcmFwcGVyPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGV0IGRlcGVuZGVudHM6IE1kY0xpbmsgfCB1bmRlZmluZWQ7XG5cdFx0XHRsZXQgYWN0aXZlID0gZmFsc2U7XG5cdFx0XHRsZXQgaXNBY3RpdmU7XG5cdFx0XHRsZXQgcHJlc3NBY3Rpb247XG5cdFx0XHRpZiAoZmllbGQuaGFzUXVpY2tWaWV3KSB7XG5cdFx0XHRcdGRlcGVuZGVudHMgPSBEaXNwbGF5U3R5bGUuZ2V0TWRjTGlua0ZvclF1aWNrVmlldyhmaWVsZCk7XG5cdFx0XHRcdGlzQWN0aXZlID0gdGhpcy5nZXRRdWlja1ZpZXdDb25kaXRpb24oZmllbGQpO1xuXHRcdFx0XHRwcmVzc0FjdGlvbiA9IGZpZWxkLmV2ZW50SGFuZGxlcnMubGlua1ByZXNzZWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAobGlua1VybCkge1xuXHRcdFx0XHRhY3RpdmUgPSB0cnVlO1xuXHRcdFx0XHRyZXF1aXJlZEhlbHBlciA9IHtcblx0XHRcdFx0XHRcImNvcmU6cmVxdWlyZVwiOiBcIntGaWVsZFJ1bnRpbWVIZWxwZXI6ICdzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlcid9XCJcblx0XHRcdFx0fTtcblx0XHRcdFx0cHJlc3NBY3Rpb24gPSBmaWVsZC5ldmVudEhhbmRsZXJzLm9wZW5FeHRlcm5hbExpbms7XG5cdFx0XHR9XG5cblx0XHRcdG9iamVjdFN0YXR1cyA9IChcblx0XHRcdFx0PE9iamVjdFN0YXR1c1xuXHRcdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0XHRpY29uPXtjcml0aWNhbGl0eUljb259XG5cdFx0XHRcdFx0c3RhdGU9e3N0YXRlfVxuXHRcdFx0XHRcdHRleHQ9e2ZpZWxkLnRleHR9XG5cdFx0XHRcdFx0dG9vbHRpcD17dG9vbFRpcFZhbHVlfVxuXHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRcdHsuLi5yZXF1aXJlZEhlbHBlcn1cblx0XHRcdFx0XHRhY3RpdmU9e2lzQWN0aXZlID8gaXNBY3RpdmUgOiBhY3RpdmV9XG5cdFx0XHRcdFx0cHJlc3M9e3ByZXNzQWN0aW9ufVxuXHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRcdHJlYWN0aXZlQXJlYU1vZGU9e2ZpZWxkLmZvcm1hdE9wdGlvbnM/LnJlYWN0aXZlQXJlYU1vZGV9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogW1xuXHRcdFx0XHRcdFx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wibG9hZFZhbHVlXCJ9IHZhbHVlPXtmaWVsZC52YWx1ZUFzU3RyaW5nQmluZGluZ0V4cHJlc3Npb259IC8+LFxuXHRcdFx0XHRcdFx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1widXJsXCJ9IHZhbHVlPXtsaW5rVXJsfSAvPlxuXHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdGRlcGVuZGVudHM6IGRlcGVuZGVudHNcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L09iamVjdFN0YXR1cz5cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9iamVjdFN0YXR1cztcblx0fSxcblxuXHRnZXRNZGNMaW5rRm9yUXVpY2tWaWV3KGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IE1kY0xpbmsge1xuXHRcdHJldHVybiBuZXcgUXVpY2tWaWV3KFxuXHRcdFx0ZmllbGQuZGF0YU1vZGVsUGF0aCxcblx0XHRcdGZpZWxkLm1ldGFQYXRoLmdldFBhdGgoKSxcblx0XHRcdGZpZWxkLmNvbnRleHRQYXRoLmdldFBhdGgoKSxcblx0XHRcdGZpZWxkLnNlbWFudGljT2JqZWN0XG5cdFx0KS5jcmVhdGVDb250ZW50KCkgYXMgTWRjTGluaztcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBMYWJlbFNlbWFudGljS2V5IHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0TGFiZWxTZW1hbnRpY0tleShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNvbnRlbnRUcnVlID0gKFxuXHRcdFx0PExpbmtcblx0XHRcdFx0dGV4dD17ZmllbGQudGV4dH1cblx0XHRcdFx0d3JhcHBpbmc9XCJ0cnVlXCJcblx0XHRcdFx0ZW1waGFzaXplZD1cInRydWVcIlxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGRSdW50aW1lSGVscGVyOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXInfVwiXG5cdFx0XHRcdHByZXNzPXtmaWVsZC5ldmVudEhhbmRsZXJzLmxpbmtQcmVzc2VkfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdGFjY2Vzc2libGVSb2xlPXtMaW5rQWNjZXNzaWJsZVJvbGUuQnV0dG9ufVxuXHRcdFx0XHRyZWFjdGl2ZUFyZWFNb2RlPXtmaWVsZC5mb3JtYXRPcHRpb25zPy5yZWFjdGl2ZUFyZWFNb2RlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFs8Q3VzdG9tRGF0YSBrZXk9e1wibG9hZFZhbHVlXCJ9IHZhbHVlPXtmaWVsZC52YWx1ZUFzU3RyaW5nQmluZGluZ0V4cHJlc3Npb259IC8+XSxcblx0XHRcdFx0XHRkZXBlbmRlbnRzOiBEaXNwbGF5U3R5bGUuZ2V0TWRjTGlua0ZvclF1aWNrVmlldyhmaWVsZClcblx0XHRcdFx0fX1cblx0XHRcdDwvTGluaz5cblx0XHQpO1xuXHRcdGNvbnN0IGNvbnRlbnRGYWxzZSA9IDxMYWJlbCBpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9IHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfSB0ZXh0PXtmaWVsZC5pZGVudGlmaWVyVGl0bGV9IGRlc2lnbj1cIkJvbGRcIiAvPjtcblx0XHRpZiAoZmllbGQuaGFzUXVpY2tWaWV3KSB7XG5cdFx0XHRjb25zdCBoYXNRdWlja3ZpZXcgPSB0aGlzLmdldFF1aWNrVmlld0NvbmRpdGlvbihmaWVsZCk7XG5cdFx0XHRpZiAoaGFzUXVpY2t2aWV3ID09PSBcInRydWVcIikge1xuXHRcdFx0XHRyZXR1cm4gY29udGVudFRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRDb25kaXRpb25hbFdyYXBwZXJGb3JRdWlja1ZpZXdUZW1wbGF0ZShmaWVsZCwgaGFzUXVpY2t2aWV3IGFzIHN0cmluZywgY29udGVudFRydWUsIGNvbnRlbnRGYWxzZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiA8TGFiZWwgaWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfSB2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX0gdGV4dD17ZmllbGQuaWRlbnRpZmllclRpdGxlfSBkZXNpZ249XCJCb2xkXCIgLz47XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIHNlbWFudGljIGtleSB3aXRoIGRyYWZ0IGluZGljYXRvci5cblx0ICogQHBhcmFtIHNlbWFudGljS2V5VGVtcGxhdGUgVGhlIHRlbXBsYXRlIHJlc3VsdCB3aXRob3V0IGRyYWZ0IGluZGljYXRvclxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0YWRkRHJhZnRJbmRpY2F0b3Ioc2VtYW50aWNLZXlUZW1wbGF0ZTogc3RyaW5nLCBmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGlmICghZmllbGQuZm9ybWF0T3B0aW9ucy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdC8vIGlmIHRoZSBkcmFmdEluZGljYXRvciBpcyBub3QgaGFuZGxlZCBhdCB0aGUgZmllbGRHcm91cCBsZXZlbFxuXHRcdFx0Ly9UT0RPIGNvdWxkIHRoaXMgYmUgYSBib29sZWFuIG5vIGRyYWZ0SW5kaWNhdG9yXG5cdFx0XHRzZW1hbnRpY0tleVRlbXBsYXRlID0gKFxuXHRcdFx0XHQ8Rm9ybUVsZW1lbnRXcmFwcGVyIHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfT5cblx0XHRcdFx0XHQ8VkJveCBjbGFzcz17RmllbGRIZWxwZXIuZ2V0TWFyZ2luQ2xhc3MoZmllbGQuZm9ybWF0T3B0aW9ucy5jb21wYWN0U2VtYW50aWNLZXkpfT5cblx0XHRcdFx0XHRcdHtzZW1hbnRpY0tleVRlbXBsYXRlfVxuXHRcdFx0XHRcdFx0PERyYWZ0SW5kaWNhdG9yXG5cdFx0XHRcdFx0XHRcdGRyYWZ0SW5kaWNhdG9yVHlwZT17T2JqZWN0TWFya2VyVmlzaWJpbGl0eS5JY29uQW5kVGV4dH1cblx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg9e2ZpZWxkLmNvbnRleHRQYXRoLmdldFBhdGgoKX1cblx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZHJhZnRJbmRpY2F0b3JWaXNpYmxlfVxuXHRcdFx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgPyBmaWVsZC5hcmlhTGFiZWxsZWRCeSA6IFtdfVxuXHRcdFx0XHRcdFx0XHRyZWFjdGl2ZUFyZWFNb2RlPXtmaWVsZC5mb3JtYXRPcHRpb25zPy5yZWFjdGl2ZUFyZWFNb2RlfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHRcdDwvRm9ybUVsZW1lbnRXcmFwcGVyPlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHNlbWFudGljS2V5VGVtcGxhdGU7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENvbXB1dGVzIHRoZSB0ZXh0IHByb3BlcnR5IHdpdGggdGhlIGFwcHJvcHJpYXRlIHdoaXRlIHNwYWNlIGhhbmRsaW5nLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Y29tcHV0ZVRleHRXaXRoV2hpdGVTcGFjZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3QgdGV4dCA9IEZpZWxkVGVtcGxhdGluZy5nZXRUZXh0QmluZGluZyhcblx0XHRcdChmaWVsZC5kYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PikgPz8gZmllbGQuZGF0YU1vZGVsUGF0aCxcblx0XHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0XHRyZXR1cm4gaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24odGV4dCkgfHwgdHlwZW9mIHRleHQgPT09IFwic3RyaW5nXCJcblx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZm9ybWF0UmVzdWx0KFt0ZXh0XSwgdmFsdWVGb3JtYXR0ZXJzLnJlcGxhY2VXaGl0ZXNwYWNlKSlcblx0XHRcdDogY29tcGlsZUV4cHJlc3Npb24odGV4dCk7XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjb25kaXRpb24gZm9yIGhhdmluZyBhbiBhY3RpdmUgbGluayB0aGF0IG9wZW5zIHRoZSBxdWljayB2aWV3LlxuXHQgKiBAcGFyYW0gZmllbGRcblx0ICogQHJldHVybnMgQSBjb21waWxlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGNvbmRpdGlvbi5cblx0ICovXG5cdGdldFF1aWNrVmlld0NvbmRpdGlvbihmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0c3dpdGNoIChmaWVsZC5xdWlja1ZpZXdUeXBlKSB7XG5cdFx0XHRjYXNlIFwiRmFjZXRzXCI6XG5cdFx0XHRcdGlmIChmaWVsZC5mb3JtYXRPcHRpb25zLmlzQW5hbHl0aWNzICE9PSB0cnVlKSB7XG5cdFx0XHRcdFx0Ly8gV2Ugb25seSBjaGVjayBpZiB0aGUgbmF2aWdhdGlvbiBpcyByZWFjaGFibGUgaWYgdGhlIHRhYmxlIGlzIG5vdCBhbmFseXRpY2FsLlxuXHRcdFx0XHRcdC8vIElmIHRoZSB0YWJsZSBpcyBhbmFseXRpY2FsLCB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgbmF2aWdhdGlvbiBiZWluZyByZWFjaGFibGUsIGFzIHdlIGNhbm5vdCBsb2FkIG5hdmlnYXRpb24gcHJvcGVydGllcyBpbiB0aGUgYW5hbHl0aWNhbCBxdWVyaWVzLlxuXHRcdFx0XHRcdC8vdGhlcmUgaXMgcXVpY2sgdmlld0ZhY2V0cyBhbm5vdGF0aW9uIG9ubHkgdGhlbiB3ZSBjaGVjayBpZiB0aGUgbmF2aWdhdGlvbiBpcyByZWFjaGFibGVcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRGb3JlaWduS2V5VmFsdWVFeHByZXNzaW9uKGZpZWxkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIlNlbWFudGljTGlua3NcIjpcblx0XHRcdFx0aWYgKGZpZWxkLmR5bmFtaWNTZW1hbnRpY09iamVjdHMpIHtcblx0XHRcdFx0XHRjb25zdCBsaXN0T2ZEeW5hbWljU2VtYW50aWNPYmplY3RzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPltdID0gW107XG5cdFx0XHRcdFx0aWYgKGZpZWxkLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHQvLyBJZiB3ZSBzZWUgYSBkeW5hbWljIGV4cHJlc3Npb24gd2l0aCBhIGZvcm1hdHRlciwgd2UgcmV0dXJuIGZhbHNlLiBUaGUgY29uZGl0aW9uIHdpbGwgYmUgcmVzb2x2ZWQgbGF0ZXIgaW4gVGV4dExpbmsgY29udHJvbC5cblx0XHRcdFx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihjb25zdGFudChmYWxzZSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRmb3IgKGNvbnN0IHNlbWFudGljT2JqZWN0RXhwcmVzc2lvbiBvZiBmaWVsZC5keW5hbWljU2VtYW50aWNPYmplY3RzKSB7XG5cdFx0XHRcdFx0XHRpZiAoc2VtYW50aWNPYmplY3RFeHByZXNzaW9uLl90eXBlID09PSBcIlBhdGhJbk1vZGVsXCIgfHwgc2VtYW50aWNPYmplY3RFeHByZXNzaW9uLl90eXBlID09PSBcIkNvbnN0YW50XCIpIHtcblx0XHRcdFx0XHRcdFx0bGlzdE9mRHluYW1pY1NlbWFudGljT2JqZWN0cy5wdXNoKHNlbWFudGljT2JqZWN0RXhwcmVzc2lvbik7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBJZiB3ZSBzZWUgYSBkeW5hbWljIGV4cHJlc3Npb24gKCRlZG1Kc29uKSwgd2UgcmV0dXJuIHRydWUuXG5cdFx0XHRcdFx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihjb25zdGFudCh0cnVlKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IHNlbWFudGljT2JqZWN0c1BhdGggPSBbXG5cdFx0XHRcdFx0XHRwYXRoSW5Nb2RlbDxDb250ZXh0W10+KFwiL3NlbWFudGljT2JqZWN0c1wiLCBcImludGVybmFsXCIpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0XHRcdFx0XS5jb25jYXQobGlzdE9mRHluYW1pY1NlbWFudGljT2JqZWN0cyk7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZvcm1hdFJlc3VsdChzZW1hbnRpY09iamVjdHNQYXRoLCB2YWx1ZUZvcm1hdHRlcnMuaGFzU2VtYW50aWNPYmplY3RzKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIFwidHJ1ZVwiO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Ly8gXCJmYWNldHNBbmRTZW1hbnRpY0xpbmtzXCJcblx0XHRcdFx0Ly8gaWYgdGhlcmUgaXMgYm90aCBmYWNldHMgYW5kIHNlbWFudGljIGxpbmtzLCB3ZSBkbyBub3QgY2hlY2sgaWYgdGhlIG5hdmlnYXRpb24gaXMgcmVhY2hhYmxlXG5cdFx0XHRcdHJldHVybiBcInRydWVcIjtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgQ2hlY2tCb3hHcm91cCB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldENoZWNrQm94R3JvdXBJdGVtVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PENoZWNrQm94XG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZDogJ3NhcC9mZS9tYWNyb3MvRmllbGQnfVwiXG5cdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0ZGlzcGxheU9ubHk9e3RydWV9XG5cdFx0XHRcdHRleHQ9e2ZpZWxkLmxhYmVsfVxuXHRcdFx0XHR3cmFwcGluZz17dHJ1ZX1cblx0XHRcdFx0c2VsZWN0ZWQ9e2ZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb259XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0PlxuXHRcdFx0XHR7eyBjdXN0b21EYXRhOiA8Q3VzdG9tRGF0YSBrZXk9XCJzb3VyY2VQYXRoXCIgdmFsdWU9e2ZpZWxkLmRhdGFTb3VyY2VQYXRofSAvPiB9fVxuXHRcdFx0PC9DaGVja0JveD5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBFbnRyeSBwb2ludCBmb3IgZnVydGhlciB0ZW1wbGF0aW5nIHByb2Nlc3NpbmdzLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0VGVtcGxhdGU6IChmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcgPT4ge1xuXHRcdGxldCBpbm5lckZpZWxkQ29udGVudDtcblx0XHRzd2l0Y2ggKGZpZWxkLmRpc3BsYXlTdHlsZSBhcyBEaXNwbGF5U3R5bGVUeXBlKSB7XG5cdFx0XHRjYXNlIFwiQXZhdGFyXCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldEF2YXRhclRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiQnV0dG9uXCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldEJ1dHRvblRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiQ2hlY2tCb3hHcm91cEl0ZW1cIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0Q2hlY2tCb3hHcm91cEl0ZW1UZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkNvbnRhY3RcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0Q29udGFjdFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRGF0YVBvaW50XCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldERhdGFQb2ludFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRXhwYW5kYWJsZVRleHRcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0RXhwYW5kYWJsZVRleHQoZmllbGQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJGaWxlXCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldEZpbGVUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkxpbmtcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0TGlua1RlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTGlua1dpdGhRdWlja1ZpZXdcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0TGlua1dpdGhRdWlja1ZpZXdUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk51bWJlcldpdGhVbml0T3JDdXJyZW5jeUFsaWduZWRcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0TnVtYmVyV2l0aFVuaXRPckN1cnJlbmN5QWxpZ25lZFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiT2JqZWN0SWRlbnRpZmllclwiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IERpc3BsYXlTdHlsZS5nZXRPYmplY3RJZGVudGlmaWVyKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiT2JqZWN0U3RhdHVzXCI6IHtcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0T2JqZWN0U3RhdHVzKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiTGFiZWxTZW1hbnRpY0tleVwiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IERpc3BsYXlTdHlsZS5nZXRMYWJlbFNlbWFudGljS2V5KGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiVGV4dFwiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IERpc3BsYXlTdHlsZS5nZXRUZXh0VGVtcGxhdGUoZmllbGQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJNYXNrZWRcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0UGFzc3dvcmRUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBcIlwiO1xuXHRcdH1cblx0XHRpZiAoZmllbGQuYWRkRHJhZnRJbmRpY2F0b3IgJiYgaW5uZXJGaWVsZENvbnRlbnQpIHtcblx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmFkZERyYWZ0SW5kaWNhdG9yKGlubmVyRmllbGRDb250ZW50LCBmaWVsZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlubmVyRmllbGRDb250ZW50O1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBEaXNwbGF5U3R5bGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF1RkEsTUFBTUEsWUFBWSxHQUFHO0lBQ3BCQyx1QkFBdUJBLENBQUNDLEtBQTJCLEVBQVU7TUFDNUQsSUFBSUMsS0FBSyxHQUFHRCxLQUFLLENBQUNFLFFBQVEsQ0FBQ0QsS0FBSyxJQUFJLENBQUM7TUFDckMsSUFBSSxPQUFPQSxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzlCO1FBQ0FBLEtBQUssR0FB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
@@ -454,6 +454,7 @@ const DisplayStyle = {
454
454
  visible={fileStreamNotEmpty}
455
455
  wrapping="true"
456
456
  reactiveAreaMode={field.formatOptions?.reactiveAreaMode}
457
+ ariaLabelledBy={field.ariaLabelledBy as unknown as Array<Control | string>}
457
458
  />
458
459
  ),
459
460
  text: <Text emptyIndicatorMode={field.emptyIndicatorMode} text="" visible={fileTextVisible} />