@sapui5/sap.fe.core 1.130.1 → 1.131.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +3 -3
  4. package/src/sap/fe/core/ActionRuntime.ts +1 -1
  5. package/src/sap/fe/core/AppComponent.js +4 -11
  6. package/src/sap/fe/core/AppComponent.ts +3 -12
  7. package/src/sap/fe/core/CommonUtils.js +13 -13
  8. package/src/sap/fe/core/CommonUtils.ts +16 -16
  9. package/src/sap/fe/core/TemplateComponent.js +4 -1
  10. package/src/sap/fe/core/TemplateComponent.ts +2 -0
  11. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +248 -0
  12. package/src/sap/fe/core/buildingBlocks/{BuildingBlockBase.ts → BuildingBlock.ts} +73 -132
  13. package/src/sap/fe/core/controllerextensions/EditFlow.js +17 -7
  14. package/src/sap/fe/core/controllerextensions/EditFlow.ts +17 -6
  15. package/src/sap/fe/core/controllerextensions/InternalRouting.js +5 -2
  16. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +4 -0
  17. package/src/sap/fe/core/controllerextensions/KPIManagement.js +47 -19
  18. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +57 -19
  19. package/src/sap/fe/core/controllerextensions/PageReady.js +20 -18
  20. package/src/sap/fe/core/controllerextensions/PageReady.ts +19 -18
  21. package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -1
  22. package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -0
  23. package/src/sap/fe/core/controllerextensions/Routing.js +2 -2
  24. package/src/sap/fe/core/controllerextensions/Routing.ts +1 -1
  25. package/src/sap/fe/core/controllerextensions/Share.js +3 -2
  26. package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
  27. package/src/sap/fe/core/controllerextensions/ViewState.js +5 -1
  28. package/src/sap/fe/core/controllerextensions/ViewState.ts +4 -0
  29. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -2
  30. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +0 -1
  31. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +4 -4
  32. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +3 -0
  33. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -4
  34. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +2 -2
  35. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +16 -19
  36. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +29 -28
  37. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +5 -5
  38. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +4 -1
  39. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +77 -35
  40. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +88 -43
  41. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +3 -7
  42. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -4
  43. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +70 -0
  44. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.ts +99 -0
  45. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  46. package/src/sap/fe/core/controls/FormElementWrapper.ts +1 -1
  47. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +14 -2
  48. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +20 -6
  49. package/src/sap/fe/core/converters/ConverterContext.js +10 -3
  50. package/src/sap/fe/core/converters/ConverterContext.ts +8 -1
  51. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  52. package/src/sap/fe/core/converters/ManifestSettings.ts +2 -1
  53. package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
  54. package/src/sap/fe/core/converters/controls/Common/Action.ts +5 -1
  55. package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
  56. package/src/sap/fe/core/converters/controls/Common/Chart.ts +10 -5
  57. package/src/sap/fe/core/converters/controls/Common/KPI.js +26 -9
  58. package/src/sap/fe/core/converters/controls/Common/KPI.ts +48 -5
  59. package/src/sap/fe/core/converters/controls/Common/Table.js +43 -46
  60. package/src/sap/fe/core/converters/controls/Common/Table.ts +68 -57
  61. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +2 -1
  62. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -0
  63. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +2 -3
  64. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +2 -2
  65. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +12 -8
  66. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +10 -6
  67. package/src/sap/fe/core/fpm/manifest.json +1 -1
  68. package/src/sap/fe/core/helpers/AppStartupHelper.js +7 -9
  69. package/src/sap/fe/core/helpers/AppStartupHelper.ts +6 -13
  70. package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
  71. package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
  72. package/src/sap/fe/core/helpers/DeleteHelper.js +3 -2
  73. package/src/sap/fe/core/helpers/DeleteHelper.ts +2 -1
  74. package/src/sap/fe/core/helpers/MetaPath.js +16 -2
  75. package/src/sap/fe/core/helpers/MetaPath.ts +19 -1
  76. package/src/sap/fe/core/helpers/RecommendationHelper.js +2 -2
  77. package/src/sap/fe/core/helpers/RecommendationHelper.ts +1 -1
  78. package/src/sap/fe/core/helpers/ResourceModelHelper.js +8 -3
  79. package/src/sap/fe/core/helpers/ResourceModelHelper.ts +9 -2
  80. package/src/sap/fe/core/library.js +5 -2
  81. package/src/sap/fe/core/library.support.js +3 -3
  82. package/src/sap/fe/core/library.support.ts +2 -1
  83. package/src/sap/fe/core/library.ts +4 -0
  84. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +17 -8
  85. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +16 -14
  86. package/src/sap/fe/core/messagebundle.properties +6 -0
  87. package/src/sap/fe/core/messagebundle_ar.properties +11 -3
  88. package/src/sap/fe/core/messagebundle_bg.properties +14 -6
  89. package/src/sap/fe/core/messagebundle_ca.properties +10 -2
  90. package/src/sap/fe/core/messagebundle_cnr.properties +10 -2
  91. package/src/sap/fe/core/messagebundle_cs.properties +10 -2
  92. package/src/sap/fe/core/messagebundle_cy.properties +10 -2
  93. package/src/sap/fe/core/messagebundle_da.properties +10 -2
  94. package/src/sap/fe/core/messagebundle_de.properties +12 -4
  95. package/src/sap/fe/core/messagebundle_el.properties +10 -2
  96. package/src/sap/fe/core/messagebundle_en.properties +9 -1
  97. package/src/sap/fe/core/messagebundle_en_GB.properties +10 -2
  98. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +10 -2
  99. package/src/sap/fe/core/messagebundle_es.properties +12 -4
  100. package/src/sap/fe/core/messagebundle_es_MX.properties +10 -2
  101. package/src/sap/fe/core/messagebundle_et.properties +10 -2
  102. package/src/sap/fe/core/messagebundle_fi.properties +10 -2
  103. package/src/sap/fe/core/messagebundle_fr.properties +10 -2
  104. package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -3
  105. package/src/sap/fe/core/messagebundle_hi.properties +10 -2
  106. package/src/sap/fe/core/messagebundle_hr.properties +11 -3
  107. package/src/sap/fe/core/messagebundle_hu.properties +11 -3
  108. package/src/sap/fe/core/messagebundle_id.properties +10 -2
  109. package/src/sap/fe/core/messagebundle_it.properties +10 -2
  110. package/src/sap/fe/core/messagebundle_iw.properties +11 -3
  111. package/src/sap/fe/core/messagebundle_ja.properties +10 -2
  112. package/src/sap/fe/core/messagebundle_kk.properties +10 -2
  113. package/src/sap/fe/core/messagebundle_ko.properties +10 -2
  114. package/src/sap/fe/core/messagebundle_lt.properties +10 -2
  115. package/src/sap/fe/core/messagebundle_lv.properties +10 -2
  116. package/src/sap/fe/core/messagebundle_mk.properties +10 -2
  117. package/src/sap/fe/core/messagebundle_ms.properties +10 -2
  118. package/src/sap/fe/core/messagebundle_nl.properties +12 -4
  119. package/src/sap/fe/core/messagebundle_no.properties +11 -3
  120. package/src/sap/fe/core/messagebundle_pl.properties +10 -2
  121. package/src/sap/fe/core/messagebundle_pt.properties +10 -2
  122. package/src/sap/fe/core/messagebundle_pt_PT.properties +10 -2
  123. package/src/sap/fe/core/messagebundle_ro.properties +10 -2
  124. package/src/sap/fe/core/messagebundle_ru.properties +10 -2
  125. package/src/sap/fe/core/messagebundle_sh.properties +10 -2
  126. package/src/sap/fe/core/messagebundle_sk.properties +10 -2
  127. package/src/sap/fe/core/messagebundle_sl.properties +10 -2
  128. package/src/sap/fe/core/messagebundle_sr.properties +10 -2
  129. package/src/sap/fe/core/messagebundle_sv.properties +10 -2
  130. package/src/sap/fe/core/messagebundle_th.properties +12 -4
  131. package/src/sap/fe/core/messagebundle_tr.properties +12 -4
  132. package/src/sap/fe/core/messagebundle_uk.properties +10 -2
  133. package/src/sap/fe/core/messagebundle_vi.properties +11 -3
  134. package/src/sap/fe/core/messagebundle_zh_CN.properties +10 -2
  135. package/src/sap/fe/core/messagebundle_zh_TW.properties +10 -2
  136. package/src/sap/fe/core/operationsHelper.js +4 -4
  137. package/src/sap/fe/core/operationsHelper.ts +4 -4
  138. package/src/sap/fe/core/rootView/Fcl.controller.js +2 -2
  139. package/src/sap/fe/core/rootView/Fcl.controller.ts +4 -1
  140. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +5 -5
  141. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -3
  142. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -28
  143. package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -35
  144. package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -4
  145. package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -3
  146. package/src/sap/fe/core/services/ShellServicesFactory.js +2 -13
  147. package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -17
  148. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +5 -3
  149. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -1
  150. package/src/sap/fe/core/templating/DataFieldFormatters.js +13 -6
  151. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -6
  152. package/src/sap/fe/core/templating/UIFormatters.js +3 -3
  153. package/src/sap/fe/core/templating/UIFormatters.ts +4 -3
  154. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +0 -326
@@ -849,13 +849,12 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
849
849
  const filterFields = oAnnotatedSelectionFieldData.filterFields;
850
850
 
851
851
  // finally create final list of filter fields by adding the SelectionFields first (order matters)...
852
- let allFilters = propSelectionFields
852
+ const allFilters = propSelectionFields
853
853
 
854
854
  // ...and adding remaining filter fields, that are not used in a SelectionVariant (order doesn't matter)
855
855
  .concat(Object.keys(filterFields).filter(propertyPath => !excludedFilterProperties.has(propertyPath)).map(propertyPath => {
856
856
  return Object.assign(filterFields[propertyPath], filterFacetMap[propertyPath]);
857
857
  }));
858
- const sContextPath = converterContext.getContextPath();
859
858
  const selectionFields = insertCustomManifestElements(allFilters, entityType, converterContext, annotationPath);
860
859
 
861
860
  // Add caseSensitive property to all selection fields.
@@ -892,4 +891,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
892
891
  _exports.getExpandFilterFields = getExpandFilterFields;
893
892
  return _exports;
894
893
  }, false);
895
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJfZmllbGRHcm91cCRMYWJlbCIsIl9maWVsZEdyb3VwJGFubm90YXRpbyIsIl9maWVsZEdyb3VwJGFubm90YXRpbzIiLCJfZmllbGRHcm91cCRhbm5vdGF0aW8zIiwiVmFsdWUiLCJwYXRoIiwiZ3JvdXAiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJncm91cExhYmVsIiwiTGFiZWwiLCJ0b1N0cmluZyIsImFubm90YXRpb25zIiwiQ29tbW9uIiwicXVhbGlmaWVyIiwiZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzIiwibHJUYWJsZVZpc3VhbGl6YXRpb25zIiwiY29udmVydGVyQ29udGV4dCIsIl9jb252ZXJ0ZXJDb250ZXh0JGdldCIsIl9jb252ZXJ0ZXJDb250ZXh0JGdldDIiLCJfY29udmVydGVyQ29udGV4dCRnZXQzIiwic2VsZWN0aW9uVmFyaWFudFBhdGhzIiwiU2V0IiwibWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiZmlsdGVyRmllbGRzIiwic2VsZWN0aW9uRmllbGRQYXRocyIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiVUkiLCJTZWxlY3Rpb25GaWVsZHMiLCJtYXAiLCJzZWxlY3Rpb25GaWVsZCIsInZhbHVlIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImtleSIsInRlbXBsYXRlIiwidmlzdWFsaXphdGlvbiIsIl90YWJsZUZpbHRlcnMkaGlkZGVuRiIsIl90YWJsZUZpbHRlcnMkcXVpY2tGaSIsInRhYmxlRmlsdGVycyIsImNvbnRyb2wiLCJmaWx0ZXJzIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwicXVpY2tGaWx0ZXJzIiwiYW5ub3RhdGlvblBhdGgiLCJoYXMiLCJhZGQiLCJzZWxlY3Rpb25WYXJpYW50Q29uZmlnIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJwcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiZmxhdCIsIl9nZXRDb25kaXRpb25QYXRoIiwiZW50aXR5VHlwZSIsInByb3BlcnR5UGF0aCIsInBhcnRzIiwic3BsaXQiLCJwYXJ0aWFsUGF0aCIsImxlbmd0aCIsInBhcnQiLCJzaGlmdCIsInByb3BlcnR5IiwicmVzb2x2ZVBhdGgiLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5IiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMyIiwiX3Byb3BlcnR5JGFubm90YXRpb25zMyIsInRhcmdldFR5cGUiLCJ1bmRlZmluZWQiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwiX3Byb3BlcnR5JGFubm90YXRpb25zNCIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczUiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnM2IiwiX3Byb3BlcnR5JGFubm90YXRpb25zNyIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczgiLCJfdGFyZ2V0RW50aXR5VHlwZSRhbm4iLCJfdGFyZ2V0RW50aXR5VHlwZSRhbm4yIiwiX3RhcmdldEVudGl0eVR5cGUkYW5uMyIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiZmlsdGVyRmllbGQiLCJLZXlIZWxwZXIiLCJnZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImNvbmRpdGlvblBhdGgiLCJhdmFpbGFiaWxpdHkiLCJIaWRkZW5GaWx0ZXIiLCJsYWJlbCIsIm5hbWUiLCJnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyIsInN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMiLCJTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzIiwiVE8iLCJUT01PUlJPVyIsIk5FWFRXRUVLIiwiTkVYVE1PTlRIIiwiTkVYVFFVQVJURVIiLCJORVhUWUVBUiIsInNldHRpbmdzIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZXF1YWxzIiwiam9pbiIsImV4Y2x1ZGUiLCJfZ2V0U2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblBhdGgiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uRmllbGRNYXAiLCJmdWxsUGF0aCIsIl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgiLCJwcm9wZXJ0eVBhdGhzIiwic2VsZWN0aW9uRmllbGRzIiwibG9jYWxTZWxlY3Rpb25GaWVsZHMiLCJlbmhhbmNlZFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInRhcmdldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZmluZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsIl9uYXZpZ2F0aW9uUHJvcGVydHkkYSIsIl9uYXZpZ2F0aW9uUHJvcGVydHkkYTIiLCJfbmF2aWdhdGlvblByb3BlcnR5JGEzIiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJlbnRpdHlQcm9wZXJ0aWVzIiwiaXNDb21wbGV4VHlwZSIsImdldFRhcmdldE5hdmlnYXRpb25QYXRoIiwiX2dldEZpbHRlckZpZWxkIiwiX2NvbnZlcnRlckNvbnRleHQkZ2V0NCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUlTU0lOR19TRUxFQ1RJT05GSUVMRCIsIl9lbnRpdHlUeXBlJGFubm90YXRpbyIsIl9lbnRpdHlUeXBlJGFubm90YXRpbzIiLCJpc1BhcmFtZXRlciIsIlJlc3VsdENvbnRleHQiLCJfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyIsImFTZWxlY3RPcHRpb25zIiwiZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzIiwiYW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzIiwiVUlTZWxlY3Rpb25GaWVsZHMiLCJTZWxlY3Rpb25GaWVsZCIsInNlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsInNQcm9wZXJ0eVBhdGgiLCJjdXJyZW50U2VsZWN0aW9uRmllbGRzIiwiRmlsdGVyRmllbGQiLCJnZXRGaWx0ZXJGaWVsZCIsInB1c2giLCJfcHJvcGVydHkkYW5ub3RhdGlvbnM5IiwiX3Byb3BlcnR5JGFubm90YXRpb25zMTAiLCJkZWZhdWx0RmlsdGVyVmFsdWUiLCJGaWx0ZXJEZWZhdWx0VmFsdWUiLCJfZ2V0UGFyYW1ldGVyRmllbGRzIiwiX3BhcmFtZXRlckVudGl0eVR5cGUkIiwiX3BhcmFtZXRlckVudGl0eVR5cGUkMiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJwYXJhbWV0ZXJFbnRpdHlUeXBlIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJpc1BhcmFtZXRlcml6ZWQiLCJ0YXJnZXRFbnRpdHlTZXQiLCJwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImdldEZpbHRlckJhckhpZGVCYXNpY1NlYXJjaCIsImxpc3RSZXBvcnRUYWJsZXMiLCJjaGFydHMiLCJub1NlYXJjaEluQ2hhcnRzIiwiZXZlcnkiLCJjaGFydCIsImFwcGx5U3VwcG9ydGVkIiwiZW5hYmxlU2VhcmNoIiwibm9TZWFyY2hJblRhYmxlcyIsInRhYmxlIiwiZW5hYmxlQW5hbHl0aWNzIiwidHlwZSIsImVuYWJsZUJhc2ljU2VhcmNoIiwiY29udGV4dFBhdGgiLCJnZXRDb250ZXh0UGF0aCIsIl9leHBvcnRzIiwiZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJfZmJDb25maWciLCJtYW5pZmVzdFdyYXBwZXIiLCJzZXR0aW5nc0NvbnRleHRQYXRoIiwiZ2V0RW50aXR5U2V0IiwiZmlsdGVyQ29uZmlndXJhdGlvblBhdGgiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uUGF0aCIsImZiQ29uZmlnIiwiZGVmaW5lZEZpbHRlckZpZWxkcyIsImdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkiLCJzS2V5IiwiU2xvdCIsIkRlZmF1bHQiLCJ2aXN1YWxGaWx0ZXIiLCJnZXRWaXN1YWxGaWx0ZXJzIiwiaXNDdXN0b21GaWx0ZXIiLCJzbG90TmFtZSIsImRvY3VtZW50UmVmVGV4dCIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwicmVxdWlyZWQiLCJvYmplY3RQYXRoIiwiZmlsdGVyQmFyQ29udGV4dFBhdGgiLCJtZXRhUGF0aCIsInN0YXJ0c1dpdGgiLCJyZXBsYWNlIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zIiwib0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24iLCJzUmVzdHJpY3Rpb24iLCJhUHJvcHMiLCJvUHJvcGVydHkiLCJnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbiIsIm1BbGxvd2VkRXhwcmVzc2lvbnMiLCJGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIiwiX29Qcm9wZXJ0eSRQcm9wZXJ0eSIsIlByb3BlcnR5IiwiQWxsb3dlZEV4cHJlc3Npb25zIiwiX29Qcm9wZXJ0eSRQcm9wZXJ0eTIiLCJfb1Byb3BlcnR5JFByb3BlcnR5MyIsIl9vUHJvcGVydHkkUHJvcGVydHk0IiwiZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvIiwiZGF0YVR5cGUiLCJtYXhDb25kaXRpb25zIiwiZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvIiwiaGlkZGVuRmlsdGVyIiwiZ2V0U2VhcmNoUmVzdHJpY3Rpb25zIiwiX2VudGl0eVNldCRhbm5vdGF0aW9uIiwiZW50aXR5U2V0IiwiaXNFbnRpdHlTZXQiLCJDYXBhYmlsaXRpZXMiLCJTZWFyY2hSZXN0cmljdGlvbnMiLCJnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwic05hdmlnYXRpb25QYXRoIiwiX2NvbnZlcnRlckNvbnRleHQkZ2V0NSIsIl9jb252ZXJ0ZXJDb250ZXh0JGdldDYiLCJfY29udmVydGVyQ29udGV4dCRnZXQ3Iiwib05hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJOYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwiYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJvUmVzdHJpY3RlZFByb3BlcnR5IiwiTmF2aWdhdGlvblByb3BlcnR5IiwiX2ZldGNoQmFzaWNQcm9wZXJ0eUluZm8iLCJvRmlsdGVyRmllbGRJbmZvIiwiX29GaWx0ZXJGaWVsZEluZm8kc2V0IiwiZGlzcGxheSIsImNhc2VTZW5zaXRpdmUiLCJtZW51IiwiX2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzIiwiaGFzT3duUHJvcGVydHkiLCJnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uIiwiYUV4cHJlc3Npb25zIiwiYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5Iiwic29ydCIsImEiLCJiIiwiaW5kZXhPZiIsImRpc3BsYXlNb2RlIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJvQ29sbGVjdGlvbkFubm90YXRpb25zIiwiX29Qcm9wZXJ0eUFubm90YXRpb25zIiwiX29Qcm9wZXJ0eUFubm90YXRpb25zMiIsIl9vUHJvcGVydHlBbm5vdGF0aW9uczMiLCJfb1Byb3BlcnR5QW5ub3RhdGlvbnM0IiwiX29Qcm9wZXJ0eUFubm90YXRpb25zNSIsIl9vQ29sbGVjdGlvbkFubm90YXRpbyIsIm9UZXh0QW5ub3RhdGlvbiIsIlRleHQiLCJvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uIiwiVGV4dEFycmFuZ2VtZW50IiwiZmV0Y2hQcm9wZXJ0eUluZm8iLCJvVHlwZUNvbmZpZyIsIl9jb252ZXJ0ZXJDb250ZXh0JGdldDgiLCJvUHJvcGVydHlJbmZvIiwic0Fubm90YXRpb25QYXRoIiwidGFyZ2V0UHJvcGVydHlPYmplY3QiLCJvRm9ybWF0T3B0aW9ucyIsImZvcm1hdE9wdGlvbnMiLCJvQ29uc3RyYWludHMiLCJjb25zdHJhaW50cyIsImFzc2lnbiIsImlzTXVsdGlWYWx1ZSIsImJJc011bHRpVmFsdWUiLCJmaWx0ZXJFeHByZXNzaW9uIiwiX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImVudHJ5IiwiX2VudHJ5JFZhbHVlJHBhdGgiLCJpbmNsdWRlcyIsImFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMiLCJuYXZQcm9wZXJ0aWVzIiwiX1ZhbHVlIiwidGFyZ2V0UHJvcGVydHkiLCIkdGFyZ2V0IiwiYWRkaXRpb25hbFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseSIsIl9kYXRhRmllbGQkVGFyZ2V0IiwiX2RhdGFGaWVsZCRUYXJnZXQkJHRhIiwiVGFyZ2V0IiwiX2RhdGFGaWVsZCRUYXJnZXQkJHRhMiIsImlubmVyRGF0YUZpZWxkIiwiZ2V0UmVsYXRpdmVQYXRocyIsImdldEFubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSIsIl9jb252ZXJ0ZXJDb250ZXh0JGdldDkiLCJfZW50aXR5VHlwZSRhbm5vdGF0aW8zIiwiX2VudGl0eVR5cGUkYW5ub3RhdGlvNCIsImxyVGFibGVzIiwiYXJndW1lbnRzIiwibGluZUl0ZW1UZXJtIiwiZ2V0RW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsIl9jb252ZXJ0ZXJDb250ZXh0JGdldDEwIiwiTW9kZWxIZWxwZXIiLCJpc0RyYWZ0Um9vdCIsInNlbGVjdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsInByb3BlcnR5SW5mb0ZpZWxkcyIsInJlZHVjZSIsImZpbHRlclByb3BlcnR5UGF0aCIsImRlZmF1bHRGaWx0ZXJGaWVsZHMiLCJmZXRjaFR5cGVDb25maWciLCJnZXRUeXBlQ29uZmlnIiwibnVsbGFibGUiLCJwYXJzZUtlZXBzRW1wdHlTdHJpbmciLCJhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvIiwicHJvcGVydHlJbmZvRmllbGQiLCJhUmVxdWlyZWRQcm9wcyIsImFUeXBlQ29uZmlnIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwicHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyIsImRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzIiwiX2VudGl0eVNldCRhbm5vdGF0aW9uMiIsImNvbmNhdCIsInBhcmFtZXRlckZpZWxkIiwicHJvcGVydHlDb252ZXJ0eUNvbnRleHQiLCJwcm9wZXJ0eVRhcmdldE9iamVjdCIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJvUmV0IiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMiLCJzRW50aXR5U2V0UGF0aCIsImFQYXRoUGFydHMiLCJzcGxpY2UiLCJvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyIsImFOb25GaWx0ZXJhYmxlUHJvcHMiLCJhRmV0Y2hlZFByb3BlcnRpZXMiLCJpc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZCIsInNlYXJjaFJlc3RyaWN0aW9ucyIsImhpZGVCYXNpY1NlYXJjaCIsIkJvb2xlYW4iLCJTZWFyY2hhYmxlIiwiaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwic29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwiLCJwcm9wZXJ0eUluZm9zIiwiYUdyb3VwTGFiZWxJc1NldCIsImJHcm91cExhYmVsSXNTZXQiLCJsb2NhbGVDb21wYXJlIiwiZ2V0U2VsZWN0aW9uRmllbGRzIiwiX2VudGl0eVR5cGUkYW5ub3RhdGlvNSIsIl9lbnRpdHlUeXBlJGFubm90YXRpbzYiLCJvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhIiwicGFyYW1ldGVyRmllbGRzIiwic0ZldGNoUHJvcGVydGllcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzUHJvcGVydHlJbmZvIiwicHJvcFNlbGVjdGlvbkZpZWxkcyIsInBhcnNlIiwiZmlsdGVyRmFjZXRzIiwiRmlsdGVyRmFjZXRzIiwiYUZpZWxkR3JvdXBzIiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJpIiwicHJldmlvdXNWYWx1ZSIsImZpbHRlckZhY2V0IiwiX2ZpbHRlckZhY2V0JFRhcmdldCIsIl9maWx0ZXJGYWNldCRUYXJnZXQkJCIsIl9maWx0ZXJGYWNldCRUYXJnZXQkJDIiLCJfZmlsdGVyRmFjZXQkVGFyZ2V0MiIsIl9maWx0ZXJGYWNldCRUYXJnZXQyJCIsIl9maWx0ZXJGYWNldCRUYXJnZXQyJDIiLCJfZmlsdGVyRmFjZXQkVGFyZ2V0MiQzIiwiX2ZpbHRlckZhY2V0JElEIiwiX2ZpbHRlckZhY2V0JExhYmVsIiwiSUQiLCJhbGxGaWx0ZXJzIiwic0NvbnRleHRQYXRoIiwiaXNDYXNlU2Vuc2l0aXZlIiwiZ2V0RXhwYW5kRmlsdGVyRmllbGRzIiwiZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiIsInZhbHVlTGlzdCIsInJlcXVpcmVkUHJvcGVydGllcyIsIkZldGNoVmFsdWVzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWx0ZXJCYXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGVybSwgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5LCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uVHlwZSxcblx0RmlsdGVyRXhwcmVzc2lvblR5cGUsXG5cdEZpbHRlclJlc3RyaWN0aW9ucyxcblx0RmlsdGVyUmVzdHJpY3Rpb25zVHlwZSxcblx0TmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb24sXG5cdFNlYXJjaFJlc3RyaWN0aW9uc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZUxpc3QgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlUeXBlQW5ub3RhdGlvbnMsIFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VkbV9UeXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdERhdGFGaWVsZFdpdGhVcmwsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRTZWxlY3RPcHRpb25UeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB7IGdldFNlbGVjdGlvblZhcmlhbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlUeXBlQ29uZmlnLCBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB7IGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uLCBnZXRUeXBlQ29uZmlnLCBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgVmlzdWFsRmlsdGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvVmlzdWFsRmlsdGVyc1wiO1xuaW1wb3J0IHsgZ2V0VmlzdWFsRmlsdGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvVmlzdWFsRmlsdGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQsIFBvc2l0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IE92ZXJyaWRlVHlwZSwgUGxhY2VtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNDb21wbGV4VHlwZSwgaXNFbnRpdHlTZXQsIGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHksIGlzTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldFJlbGF0aXZlUGF0aHMsIGdldFRhcmdldE5hdmlnYXRpb25QYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgU3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cyB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBUeXBlQ29uZmlnIGZyb20gXCJzYXAvdWkvbWRjL1R5cGVDb25maWdcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0QXZhaWxhYmlsaXR5VHlwZSxcblx0RmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0RmlsdGVyU2V0dGluZ3Ncbn0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcblxuLy9pbXBvcnQgeyBoYXNWYWx1ZUhlbHAgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJGaWVsZCA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0dHlwZT86IHN0cmluZztcblx0a2V5OiBzdHJpbmc7XG5cdGRhdGFUeXBlPzogc3RyaW5nO1xuXHRuYW1lPzogc3RyaW5nO1xuXHRjb25kaXRpb25QYXRoOiBzdHJpbmc7XG5cdGF2YWlsYWJpbGl0eTogQXZhaWxhYmlsaXR5VHlwZTtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRkb2N1bWVudFJlZlRleHQ/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRtZW51Pzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRzZXR0aW5ncz86IEZpbHRlclNldHRpbmdzO1xuXHRpc1BhcmFtZXRlcj86IGJvb2xlYW47XG5cdHZpc3VhbEZpbHRlcj86IFZpc3VhbEZpbHRlcnM7XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBNYW5pZmVzdEZpbHRlckZpZWxkID0gRmlsdGVyRmllbGQgJiB7XG5cdHNsb3ROYW1lPzogc3RyaW5nO1xufTtcblxudHlwZSBGaWx0ZXJHcm91cCA9IHtcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG59O1xuXG5lbnVtIGZpbHRlckZpZWxkVHlwZSB7XG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIixcblx0U2xvdCA9IFwiU2xvdFwiXG59XG5cbmNvbnN0IHNFZG1TdHJpbmcgPSBcIkVkbS5TdHJpbmdcIjtcbmNvbnN0IHNTdHJpbmdEYXRhVHlwZSA9IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCI7XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZCA9IEN1c3RvbUVsZW1lbnQ8TWFuaWZlc3RGaWx0ZXJGaWVsZD47XG5cbi8qKlxuICogRW50ZXIgYWxsIERhdGFGaWVsZHMgb2YgYSBnaXZlbiBGaWVsZEdyb3VwIGludG8gdGhlIGZpbHRlckZhY2V0TWFwLlxuICogQHBhcmFtIGZpZWxkR3JvdXBcbiAqIEByZXR1cm5zIFRoZSBtYXAgb2YgZmFjZXRzIGZvciB0aGUgZ2l2ZW4gRmllbGRHcm91cFxuICovXG5mdW5jdGlvbiBnZXRGaWVsZEdyb3VwRmlsdGVyR3JvdXBzKGZpZWxkR3JvdXA6IEZpZWxkR3JvdXApOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4ge1xuXHRjb25zdCBmaWx0ZXJGYWNldE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+ID0ge307XG5cdGZpZWxkR3JvdXAuRGF0YS5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiKSB7XG5cdFx0XHRmaWx0ZXJGYWNldE1hcFtkYXRhRmllbGQuVmFsdWUucGF0aF0gPSB7XG5cdFx0XHRcdGdyb3VwOiBmaWVsZEdyb3VwLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0Z3JvdXBMYWJlbDogZmllbGRHcm91cC5MYWJlbD8udG9TdHJpbmcoKSA/PyBmaWVsZEdyb3VwLmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/IGZpZWxkR3JvdXAucXVhbGlmaWVyXG5cdFx0XHR9O1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBmaWx0ZXJGYWNldE1hcDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHNlbGVjdGlvbiB2YXJpYW50cyB1c2VkIGluIHRoZSBkaWZmZXJlbnQgdmlzdWFsaXphdGlvbnMgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQuXG4gKiBAcGFyYW0gbHJUYWJsZVZpc3VhbGl6YXRpb25zIFRoZSBsaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGV4Y2x1ZGVkIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKFxuXHRsclRhYmxlVmlzdWFsaXphdGlvbnM6IFRhYmxlVmlzdWFsaXphdGlvbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFNldDxzdHJpbmc+IHtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdGNvbnN0IG1hbmlmZXN0RmlsdGVyRmllbGRzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkuZmlsdGVyRmllbGRzID8/IHt9O1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFtcblx0XHQvL1NlbGVjdGlvbiBGaWVsZHMgY29taW5nIGZyb20gdGhlIGFubm90YXRpb25cblx0XHQuLi4oY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHMgPz8gW10pLm1hcChcblx0XHRcdChzZWxlY3Rpb25GaWVsZCkgPT4gc2VsZWN0aW9uRmllbGQudmFsdWVcblx0XHQpLFxuXHRcdC8vU2VsZWN0aW9uIEZpZWxkcyBjb21pbmcgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIG5vdCB3aXRoIGN1c3RvbSB0ZW1wbGF0ZVxuXHRcdC4uLk9iamVjdC5rZXlzKG1hbmlmZXN0RmlsdGVyRmllbGRzKS5maWx0ZXIoKGtleSkgPT4gISFtYW5pZmVzdEZpbHRlckZpZWxkc1trZXldLnRlbXBsYXRlKVxuXHRdKTtcblxuXHRyZXR1cm4gbmV3IFNldChcblx0XHRsclRhYmxlVmlzdWFsaXphdGlvbnNcblx0XHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdFx0Y29uc3QgdGFibGVGaWx0ZXJzID0gdmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnM7XG5cdFx0XHRcdGlmICghdGFibGVGaWx0ZXJzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBbLi4uKHRhYmxlRmlsdGVycy5oaWRkZW5GaWx0ZXJzPy5wYXRocyA/PyBbXSksIC4uLih0YWJsZUZpbHRlcnMucXVpY2tGaWx0ZXJzPy5wYXRocyA/PyBbXSldLm1hcCgocGF0aCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gcGF0aC5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRpZiAoIXNlbGVjdGlvblZhcmlhbnRQYXRocy5oYXMoYW5ub3RhdGlvblBhdGgpKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aHMuYWRkKGFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRDb25maWcgPSBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbihhbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRpZiAoc2VsZWN0aW9uVmFyaWFudENvbmZpZykge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXMgPSBzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0XHRcdChwcm9wZXJ0eU5hbWUpID0+ICFzZWxlY3Rpb25GaWVsZFBhdGhzLmhhcyhwcm9wZXJ0eU5hbWUpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmZsYXQoMilcblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb25kaXRpb24gcGF0aCByZXF1aXJlZCBmb3IgdGhlIGNvbmRpdGlvbiBtb2RlbC4gSXQgbG9va3MgYXMgZm9sbG93czpcbiAqIDwxOk4tUHJvcGVydHlOYW1lPipcXC88MToxLVByb3BlcnR5TmFtZT4vPFByb3BlcnR5TmFtZT4uXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgcm9vdCBFbnRpdHlUeXBlXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBjb25kaXRpb24gcGF0aFxuICovXG5jb25zdCBfZ2V0Q29uZGl0aW9uUGF0aCA9IGZ1bmN0aW9uIChlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHBhcnRzID0gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0bGV0IHBhcnRpYWxQYXRoO1xuXHRsZXQga2V5ID0gXCJcIjtcblx0d2hpbGUgKHBhcnRzLmxlbmd0aCkge1xuXHRcdGxldCBwYXJ0ID0gcGFydHMuc2hpZnQoKSBhcyBzdHJpbmc7XG5cdFx0cGFydGlhbFBhdGggPSBwYXJ0aWFsUGF0aCA/IGAke3BhcnRpYWxQYXRofS8ke3BhcnR9YCA6IHBhcnQ7XG5cdFx0Y29uc3QgcHJvcGVydHk6IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5ID0gZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwYXJ0aWFsUGF0aCk7XG5cdFx0aWYgKGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0XHRwYXJ0ICs9IFwiKlwiO1xuXHRcdH1cblx0XHRrZXkgPSBrZXkgPyBgJHtrZXl9LyR7cGFydH1gIDogcGFydDtcblx0fVxuXHRyZXR1cm4ga2V5O1xufTtcblxuY29uc3QgX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0eTogUHJvcGVydHksXG5cdGZ1bGxQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdC8vIGlnbm9yZSBjb21wbGV4IHByb3BlcnR5IHR5cGVzIGFuZCBoaWRkZW4gYW5ub3RhdGVkIG9uZXNcblx0aWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LnRhcmdldFR5cGUgPT09IHVuZGVmaW5lZCAmJiAoaW5jbHVkZUhpZGRlbiB8fCBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpICE9PSB0cnVlKSkge1xuXHRcdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKHByb3BlcnR5KSxcblx0XHRcdGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCA9IHtcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0Y29uZGl0aW9uUGF0aDogX2dldENvbmRpdGlvblBhdGgoZW50aXR5VHlwZSwgZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW5GaWx0ZXI/LnZhbHVlT2YoKSA9PT0gdHJ1ZSA/IFwiSGlkZGVuXCIgOiBcIkFkYXB0YXRpb25cIixcblx0XHRcdFx0bGFiZWw6IHByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gcHJvcGVydHkubmFtZSxcblx0XHRcdFx0Z3JvdXA6IHRhcmdldEVudGl0eVR5cGUubmFtZSxcblx0XHRcdFx0Z3JvdXBMYWJlbDogdGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gdGFyZ2V0RW50aXR5VHlwZS5uYW1lXG5cdFx0XHR9O1xuXHRcdGdldFNldHRpbmdzT2ZEZWZhdWx0RmlsdGVyRmllbGRzKGZpbHRlckZpZWxkKTtcblx0XHRyZXR1cm4gZmlsdGVyRmllbGQ7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0ZWNobmljYWwgcHJvcGVydHkgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEuIE9ubHkgcmVsZXZhbnQgZm9yIENyZWF0aW9uRGF0ZVRpbWVcbiAqIGFuZCBMYXN0Q2hhbmdlRGF0ZVRpbWUsIGFzIHRoZXkgYXJlIGRpc3BsYXlpbmcgdGhlIHRpbWVmcmFtZSByZWxhdGVkIHByb3BlcnRpZXMgYXMgYSBTZW1hbnRpY0RhdGVSYW5nZS5cbiAqIEBwYXJhbSBmaWx0ZXJGaWVsZFxuICovXG5jb25zdCBnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQpOiB2b2lkIHtcblx0aWYgKFxuXHRcdGZpbHRlckZpZWxkLmtleSA9PT0gXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YTo6Q3JlYXRpb25EYXRlVGltZVwiIHx8XG5cdFx0ZmlsdGVyRmllbGQua2V5ID09PSBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhOjpMYXN0Q2hhbmdlRGF0ZVRpbWVcIlxuXHQpIHtcblx0XHRjb25zdCBzdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzID0gW1xuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5UTyxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuVE9NT1JST1csXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRXRUVLLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5ORVhUTU9OVEgsXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRRVUFSVEVSLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5ORVhUWUVBUlxuXHRcdF07XG5cdFx0ZmlsdGVyRmllbGQuc2V0dGluZ3MgPSB7XG5cdFx0XHRvcGVyYXRvckNvbmZpZ3VyYXRpb246IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHBhdGg6IFwia2V5XCIsXG5cdFx0XHRcdFx0ZXF1YWxzOiBzdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLmpvaW4oXCIsXCIpLFxuXHRcdFx0XHRcdGV4Y2x1ZGU6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH07XG5cdH1cbn07XG5cbmNvbnN0IF9nZXRTZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdG5hdmlnYXRpb25QYXRoOiBzdHJpbmcsXG5cdHByb3BlcnRpZXM6IEFycmF5PFByb3BlcnR5PiB8IHVuZGVmaW5lZCxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4ge1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHkubmFtZTtcblx0XHRcdGNvbnN0IGZ1bGxQYXRoOiBzdHJpbmcgPSAobmF2aWdhdGlvblBhdGggPyBgJHtuYXZpZ2F0aW9uUGF0aH0vYCA6IFwiXCIpICsgcHJvcGVydHlQYXRoO1xuXHRcdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGQgPSBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQoZW50aXR5VHlwZSwgcHJvcGVydHksIGZ1bGxQYXRoLCBpbmNsdWRlSGlkZGVuLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGlmIChzZWxlY3Rpb25GaWVsZCkge1xuXHRcdFx0XHRzZWxlY3Rpb25GaWVsZE1hcFtmdWxsUGF0aF0gPSBzZWxlY3Rpb25GaWVsZDtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRNYXA7XG59O1xuXG5jb25zdCBfZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0eVBhdGhzOiBBcnJheTxzdHJpbmc+IHwgdW5kZWZpbmVkLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiB7XG5cdGxldCBzZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHt9O1xuXHRpZiAocHJvcGVydHlQYXRocykge1xuXHRcdHByb3BlcnR5UGF0aHMuZm9yRWFjaCgocHJvcGVydHlQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRcdGxldCBsb2NhbFNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdFx0XHRjb25zdCBlbmhhbmNlZFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eT4oXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGhcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eSA9IGVuaGFuY2VkUGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHByb3BlcnR5ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0KCFpbmNsdWRlSGlkZGVuICYmXG5cdFx0XHRcdFx0ZW5oYW5jZWRQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmQoXG5cdFx0XHRcdFx0XHQobmF2aWdhdGlvblByb3BlcnR5KSA9PiBuYXZpZ2F0aW9uUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZVxuXHRcdFx0XHRcdCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzTmF2aWdhdGlvblByb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdFx0XHQvLyBoYW5kbGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRwcm9wZXJ0eS50YXJnZXRUeXBlLmVudGl0eVByb3BlcnRpZXMsXG5cdFx0XHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKGlzQ29tcGxleFR5cGUocHJvcGVydHkudGFyZ2V0VHlwZSkpIHtcblx0XHRcdFx0Ly8gaGFuZGxlIENvbXBsZXhUeXBlIHByb3BlcnRpZXNcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdHByb3BlcnR5LnRhcmdldFR5cGUucHJvcGVydGllcyxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdGdldFRhcmdldE5hdmlnYXRpb25QYXRoKGVuaGFuY2VkUGF0aCwgdHJ1ZSksXG5cdFx0XHRcdFx0W3Byb3BlcnR5XSxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0aW9uRmllbGRzID0ge1xuXHRcdFx0XHQuLi5zZWxlY3Rpb25GaWVsZHMsXG5cdFx0XHRcdC4uLmxvY2FsU2VsZWN0aW9uRmllbGRzXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG59O1xuXG5jb25zdCBfZ2V0RmlsdGVyRmllbGQgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+LFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdGxldCBmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBmaWx0ZXJGaWVsZHNbcHJvcGVydHlQYXRoXTtcblx0aWYgKGZpbHRlckZpZWxkKSB7XG5cdFx0ZGVsZXRlIGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdO1xuXHR9IGVsc2Uge1xuXHRcdGZpbHRlckZpZWxkID0gX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkKGVudGl0eVR5cGUsIGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocHJvcGVydHlQYXRoKSwgcHJvcGVydHlQYXRoLCB0cnVlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0fVxuXHRpZiAoIWZpbHRlckZpZWxkKSB7XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREaWFnbm9zdGljcygpPy5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1JU1NJTkdfU0VMRUNUSU9ORklFTEQpO1xuXHR9XG5cdC8vIGRlZmluZWQgU2VsZWN0aW9uRmllbGRzIGFyZSBhdmFpbGFibGUgYnkgZGVmYXVsdFxuXHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgPSBmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgPT09IFwiSGlkZGVuXCIgPyBcIkhpZGRlblwiIDogXCJEZWZhdWx0XCI7XG5cdFx0ZmlsdGVyRmllbGQuaXNQYXJhbWV0ZXIgPSAhIWVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dDtcblx0fVxuXHRyZXR1cm4gZmlsdGVyRmllbGQ7XG59O1xuXG5jb25zdCBfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0YVNlbGVjdE9wdGlvbnM6IFNlbGVjdE9wdGlvblR5cGVbXSxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IFNldDxzdHJpbmc+LFxuXHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM6IFByb3BlcnR5UGF0aFtdXG4pOiBGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gW107XG5cdGNvbnN0IFVJU2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzO1xuXHQvLyBVc2luZyBlbnRpdHlUeXBlIGluc3RlYWQgb2YgZW50aXR5U2V0XG5cdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8uZm9yRWFjaCgoU2VsZWN0aW9uRmllbGQpID0+IHtcblx0XHRVSVNlbGVjdGlvbkZpZWxkc1tTZWxlY3Rpb25GaWVsZC52YWx1ZV0gPSB0cnVlO1xuXHR9KTtcblx0aWYgKGFTZWxlY3RPcHRpb25zICYmIGFTZWxlY3RPcHRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRhU2VsZWN0T3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0T3B0aW9uOiBTZWxlY3RPcHRpb25UeXBlKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IHByb3BlcnR5TmFtZT8udmFsdWU7XG5cdFx0XHRjb25zdCBjdXJyZW50U2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXHRcdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzPy5mb3JFYWNoKChTZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFx0XHRjdXJyZW50U2VsZWN0aW9uRmllbGRzW1NlbGVjdGlvbkZpZWxkLnZhbHVlXSA9IHRydWU7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChzUHJvcGVydHlQYXRoICYmICFleGNsdWRlZEZpbHRlclByb3BlcnRpZXMuaGFzKHNQcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdGlmICghKHNQcm9wZXJ0eVBhdGggaW4gY3VycmVudFNlbGVjdGlvbkZpZWxkcykpIHtcblx0XHRcdFx0XHRjb25zdCBGaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBnZXRGaWx0ZXJGaWVsZChzUHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRpZiAoRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKEZpbHRlckZpZWxkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IGRlZmF1bHRGaWx0ZXJWYWx1ZSA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkZpbHRlckRlZmF1bHRWYWx1ZTtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHByb3BlcnR5Lm5hbWU7XG5cdFx0XHRpZiAoIShwcm9wZXJ0eVBhdGggaW4gZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKSkge1xuXHRcdFx0XHRpZiAoZGVmYXVsdEZpbHRlclZhbHVlICYmICEocHJvcGVydHlQYXRoIGluIFVJU2VsZWN0aW9uRmllbGRzKSkge1xuXHRcdFx0XHRcdGNvbnN0IEZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGdldEZpbHRlckZpZWxkKHByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG5cdFx0XHRcdFx0aWYgKEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChGaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcbn07XG5cbi8qKlxuICogR2V0IGFsbCBwYXJhbWV0ZXIgZmlsdGVyIGZpZWxkcyBpbiBjYXNlIG9mIGEgcGFyYW1ldGVyaXplZCBzZXJ2aWNlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHBhcmFtZXRlciBGaWx0ZXJGaWVsZHNcbiAqL1xuZnVuY3Rpb24gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBwYXJhbWV0ZXJFbnRpdHlUeXBlID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRjb25zdCBpc1BhcmFtZXRlcml6ZWQgPSAhIXBhcmFtZXRlckVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dCAmJiAhZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQ7XG5cdGNvbnN0IHBhcmFtZXRlckNvbnZlcnRlckNvbnRleHQgPVxuXHRcdGlzUGFyYW1ldGVyaXplZCAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8RW50aXR5U2V0PihgLyR7ZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lfWApO1xuXG5cdHJldHVybiAoXG5cdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dFxuXHRcdFx0PyBwYXJhbWV0ZXJFbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMubWFwKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuXHRcdFx0XHRcdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0XHR7fSBhcyBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4sXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHBhcmFtZXRlckVudGl0eVR5cGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0ICB9KVxuXHRcdFx0OiBbXVxuXHQpIGFzIEZpbHRlckZpZWxkW107XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgRmlsdGVyQmFyIHNlYXJjaCBmaWVsZCBpcyBoaWRkZW4gb3Igbm90LlxuICogQHBhcmFtIGxpc3RSZXBvcnRUYWJsZXMgVGhlIGxpc3QgcmVwb3J0IHRhYmxlc1xuICogQHBhcmFtIGNoYXJ0cyBUaGUgQUxQIGNoYXJ0c1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgaW5mb3JtYXRpb24gaWYgdGhlIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaXMgaGlkZGVuIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyQmFySGlkZUJhc2ljU2VhcmNoID0gZnVuY3Rpb24gKFxuXHRsaXN0UmVwb3J0VGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSxcblx0Y2hhcnRzOiBDaGFydFZpc3VhbGl6YXRpb25bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBib29sZWFuIHtcblx0Ly8gQ2hlY2sgaWYgY2hhcnRzIGFsbG93IHNlYXJjaFxuXHRjb25zdCBub1NlYXJjaEluQ2hhcnRzID0gY2hhcnRzLmxlbmd0aCA9PT0gMCB8fCBjaGFydHMuZXZlcnkoKGNoYXJ0KSA9PiAhY2hhcnQuYXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoKTtcblxuXHQvLyBDaGVjayBpZiBhbGwgdGFibGVzIGFyZSBhbmFseXRpY2FsIGFuZCBub25lIG9mIHRoZW0gYWxsb3cgZm9yIHNlYXJjaFxuXHQvLyBvciBhbGwgdGFibGVzIGFyZSBUcmVlVGFibGUgYW5kIG5vbmUgb2YgdGhlbSBhbGxvdyBmb3Igc2VhcmNoXG5cdGNvbnN0IG5vU2VhcmNoSW5UYWJsZXMgPVxuXHRcdGxpc3RSZXBvcnRUYWJsZXMubGVuZ3RoID09PSAwIHx8XG5cdFx0bGlzdFJlcG9ydFRhYmxlcy5ldmVyeSgodGFibGUpID0+ICh0YWJsZS5lbmFibGVBbmFseXRpY3MgfHwgdGFibGUuY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSAmJiAhdGFibGUuZW5hYmxlQmFzaWNTZWFyY2gpO1xuXG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRpZiAoY29udGV4dFBhdGggJiYgbm9TZWFyY2hJbkNoYXJ0cyAmJiBub1NlYXJjaEluVGFibGVzKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBmaWx0ZXIgZmllbGRzIGZyb20gdGhlIG1hbmlmZXN0LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgZW50aXR5VHlwZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gYW5ub3RhdGlvblBhdGggQW5ub3RhdGlvbiBwYXRoIG9mIHRoZSBzZWxlY3Rpb24gZmllbGRzXG4gKiBAcmV0dXJucyBUaGUgZmlsdGVyIGZpZWxkcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICovXG5leHBvcnQgY29uc3QgZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmdcbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXG5cdGNvbnN0IHNldHRpbmdzQ29udGV4dFBhdGggPVxuXHRcdG1hbmlmZXN0V3JhcHBlci5nZXRDb250ZXh0UGF0aCgpIHx8IChtYW5pZmVzdFdyYXBwZXIuZ2V0RW50aXR5U2V0KCkgPyBgLyR7bWFuaWZlc3RXcmFwcGVyLmdldEVudGl0eVNldCgpfWAgOiB1bmRlZmluZWQpO1xuXHRjb25zdCBmaWx0ZXJDb25maWd1cmF0aW9uUGF0aCA9IGdldEZpbHRlckNvbmZpZ3VyYXRpb25QYXRoKGNvbnZlcnRlckNvbnRleHQsIHNldHRpbmdzQ29udGV4dFBhdGgsIGFubm90YXRpb25QYXRoKTtcblx0bGV0IGZiQ29uZmlnOiBGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSB7fTtcblx0ZmJDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbihmaWx0ZXJDb25maWd1cmF0aW9uUGF0aCk7XG5cblx0Y29uc3QgZGVmaW5lZEZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24+ID0gZmJDb25maWc/LmZpbHRlckZpZWxkcyB8fCB7fTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBfZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0T2JqZWN0LmtleXMoZGVmaW5lZEZpbHRlckZpZWxkcykubWFwKChrZXkpID0+IGRlZmluZWRGaWx0ZXJGaWVsZHNba2V5XS5wcm9wZXJ0eSA/PyBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShrZXkpKSxcblx0XHR0cnVlLFxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0KTtcblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+ID0ge307XG5cblx0Zm9yIChjb25zdCBzS2V5IGluIGRlZmluZWRGaWx0ZXJGaWVsZHMpIHtcblx0XHRjb25zdCBmaWx0ZXJGaWVsZCA9IGRlZmluZWRGaWx0ZXJGaWVsZHNbc0tleV07XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gZmlsdGVyRmllbGQucHJvcGVydHkgPz8gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoc0tleSk7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGQgPSBzZWxlY3Rpb25GaWVsZHNbcHJvcGVydHlOYW1lXTtcblx0XHRjb25zdCB0eXBlID0gZmlsdGVyRmllbGQudHlwZSA9PT0gXCJTbG90XCIgPyBmaWx0ZXJGaWVsZFR5cGUuU2xvdCA6IGZpbHRlckZpZWxkVHlwZS5EZWZhdWx0O1xuXHRcdGNvbnN0IHZpc3VhbEZpbHRlciA9XG5cdFx0XHRmaWx0ZXJGaWVsZCAmJiBmaWx0ZXJGaWVsZD8udmlzdWFsRmlsdGVyXG5cdFx0XHRcdD8gZ2V0VmlzdWFsRmlsdGVycyhlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBzS2V5LCBkZWZpbmVkRmlsdGVyRmllbGRzKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAoZmlsdGVyRmllbGQudGVtcGxhdGUgfHwgZmlsdGVyRmllbGQudHlwZSA9PT0gZmlsdGVyRmllbGRUeXBlLlNsb3QpIHtcblx0XHRcdGlmIChmaWx0ZXJGaWVsZC5zZXR0aW5ncykge1xuXHRcdFx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncy5pc0N1c3RvbUZpbHRlciA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncyA9IHtcblx0XHRcdFx0XHRpc0N1c3RvbUZpbHRlcjogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmaWx0ZXJGaWVsZHNbc0tleV0gPSB7XG5cdFx0XHRrZXk6IHNLZXksXG5cdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0c2xvdE5hbWU6IGZpbHRlckZpZWxkPy5zbG90TmFtZSB8fCBzS2V5LFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IHNlbGVjdGlvbkZpZWxkPy5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdGNvbmRpdGlvblBhdGg6IGZpbHRlckZpZWxkLnByb3BlcnR5XG5cdFx0XHRcdD8gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoc0tleSlcblx0XHRcdFx0OiBzZWxlY3Rpb25GaWVsZD8uY29uZGl0aW9uUGF0aCB8fCBwcm9wZXJ0eU5hbWUsXG5cdFx0XHRkb2N1bWVudFJlZlRleHQ6XG5cdFx0XHRcdGZpbHRlckZpZWxkLnByb3BlcnR5ICYmXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbChcblx0XHRcdFx0XHRcInttZXRhTW9kZWw+XCIgKyBmaWx0ZXJGaWVsZC5wcm9wZXJ0eSArIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Eb2N1bWVudGF0aW9uUmVmfVwiXG5cdFx0XHRcdCksXG5cdFx0XHR0ZW1wbGF0ZTogZmlsdGVyRmllbGQudGVtcGxhdGUsXG5cdFx0XHRsYWJlbDogY29udmVydGVyQ29udGV4dC5mZXRjaFRleHRGcm9tTWV0YU1vZGVsKGZpbHRlckZpZWxkLmxhYmVsKSxcblx0XHRcdHBvc2l0aW9uOiBmaWx0ZXJGaWVsZC5wb3NpdGlvbiB8fCB7IHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyIH0sXG5cdFx0XHRhdmFpbGFiaWxpdHk6IGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSB8fCBcIkRlZmF1bHRcIixcblx0XHRcdHNldHRpbmdzOiBmaWx0ZXJGaWVsZC5zZXR0aW5ncyxcblx0XHRcdHZpc3VhbEZpbHRlcjogdmlzdWFsRmlsdGVyLFxuXHRcdFx0cmVxdWlyZWQ6IGZpbHRlckZpZWxkLnJlcXVpcmVkXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gZmlsdGVyRmllbGRzO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGNvbmZpZ3VyYXRpb24gcGF0aCB0byBmZXRjaCB0aGUgY3VzdG9tIGZpbHRlciBmaWVsZHMgZnJvbSBtYW5pZmVzdC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHNldHRpbmdzQ29udGV4dFBhdGggTWFuaWZlc3QgZW50aXR5IHNldCBwYXRoIGFuZCBjb250ZXh0IHBhdGhcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aCBUaGUgYW5ub3RhdGlvbiBwYXRoXG4gKiBAcmV0dXJucyBQYXRoIHRvIGZldGNoIHRoZSBjdXN0b20gZmlsdGVycyBmcm9tIHRoZSBtYW5pZmVzdFxuICovXG5jb25zdCBnZXRGaWx0ZXJDb25maWd1cmF0aW9uUGF0aCA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzZXR0aW5nc0NvbnRleHRQYXRoPzogc3RyaW5nLFxuXHRhbm5vdGF0aW9uUGF0aD86IHN0cmluZ1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IG9iamVjdFBhdGg7XG5cdGNvbnN0IGZpbHRlckJhckNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBtZXRhUGF0aCA9IGAke2ZpbHRlckJhckNvbnRleHRQYXRofS8ke2Fubm90YXRpb25QYXRofWA7XG5cdGlmIChzZXR0aW5nc0NvbnRleHRQYXRoICYmIG1ldGFQYXRoPy5zdGFydHNXaXRoKHNldHRpbmdzQ29udGV4dFBhdGgpICYmIGFubm90YXRpb25QYXRoKSB7XG5cdFx0b2JqZWN0UGF0aCA9IG1ldGFQYXRoLnJlcGxhY2UoYCR7c2V0dGluZ3NDb250ZXh0UGF0aH0vYCwgXCJcIik7XG5cdH0gZWxzZSB7XG5cdFx0b2JqZWN0UGF0aCA9IGFubm90YXRpb25QYXRoO1xuXHR9XG5cdHJldHVybiBvYmplY3RQYXRoID8gb2JqZWN0UGF0aCA6IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJGaWVsZCA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gX2dldEZpbHRlckZpZWxkKHt9LCBwcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlclJlc3RyaWN0aW9ucyA9IGZ1bmN0aW9uIChcblx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IEZpbHRlclJlc3RyaWN0aW9uc1R5cGUgfCB1bmRlZmluZWQsXG5cdHNSZXN0cmljdGlvbjogXCJSZXF1aXJlZFByb3BlcnRpZXNcIiB8IFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIlxuKTogc3RyaW5nW10ge1xuXHRsZXQgYVByb3BzOiBzdHJpbmdbXSA9IFtdO1xuXHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXSkge1xuXHRcdGFQcm9wcyA9IG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbl0ubWFwKGZ1bmN0aW9uIChvUHJvcGVydHkpIHtcblx0XHRcdHJldHVybiBvUHJvcGVydHkudmFsdWU7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGFQcm9wcztcbn07XG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uOiBGaWx0ZXJSZXN0cmljdGlvbnNUeXBlIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJFeHByZXNzaW9uVHlwZVtdPiB7XG5cdGNvbnN0IG1BbGxvd2VkRXhwcmVzc2lvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckV4cHJlc3Npb25UeXBlW10+ID0ge307XG5cdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbi5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKSB7XG5cdFx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHk6IEZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGUpIHtcblx0XHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRcdGlmIChvUHJvcGVydHkuUHJvcGVydHk/LnZhbHVlICYmIG9Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMpIHtcblx0XHRcdFx0aWYgKG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5Py52YWx1ZV0pIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eT8udmFsdWVdLnB1c2gob1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucy50b1N0cmluZygpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eT8udmFsdWVdID0gW29Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMudG9TdHJpbmcoKV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gbUFsbG93ZWRFeHByZXNzaW9ucztcbn07XG5cbmNvbnN0IGdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uICgpOiBQcm9wZXJ0eUluZm8ge1xuXHRyZXR1cm4ge1xuXHRcdG5hbWU6IFwiJHNlYXJjaFwiLFxuXHRcdHBhdGg6IFwiJHNlYXJjaFwiLFxuXHRcdGRhdGFUeXBlOiBzU3RyaW5nRGF0YVR5cGUsXG5cdFx0bWF4Q29uZGl0aW9uczogMVxuXHR9O1xufTtcblxuY29uc3QgZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKCk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0bmFtZTogXCIkZWRpdFN0YXRlXCIsXG5cdFx0cGF0aDogXCIkZWRpdFN0YXRlXCIsXG5cdFx0Z3JvdXBMYWJlbDogXCJcIixcblx0XHRncm91cDogXCJcIixcblx0XHRkYXRhVHlwZTogc1N0cmluZ0RhdGFUeXBlLFxuXHRcdGhpZGRlbkZpbHRlcjogZmFsc2Vcblx0fTtcbn07XG5cbmNvbnN0IGdldFNlYXJjaFJlc3RyaWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBTZWFyY2hSZXN0cmljdGlvbnMgfCB1bmRlZmluZWQge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRyZXR1cm4gaXNFbnRpdHlTZXQoZW50aXR5U2V0KSA/IGVudGl0eVNldC5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LlNlYXJjaFJlc3RyaWN0aW9ucyA6IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHNOYXZpZ2F0aW9uUGF0aDogc3RyaW5nXG4pOiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uTmF2aWdhdGlvblJlc3RyaWN0aW9ucztcblx0Y29uc3QgYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuUmVzdHJpY3RlZFByb3BlcnRpZXM7XG5cdHJldHVybiAoXG5cdFx0YVJlc3RyaWN0ZWRQcm9wZXJ0aWVzICYmXG5cdFx0YVJlc3RyaWN0ZWRQcm9wZXJ0aWVzLmZpbmQoZnVuY3Rpb24gKG9SZXN0cmljdGVkUHJvcGVydHkpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG9SZXN0cmljdGVkUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkudmFsdWUgPT09IHNOYXZpZ2F0aW9uUGF0aFxuXHRcdFx0KTtcblx0XHR9KVxuXHQpO1xufTtcbi8vIFRoZSBwcm9wZXJ0eUluZm8gdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiBGRVxuZXhwb3J0IHR5cGUgUHJvcGVydHlJbmZvID0ge1xuXHRrZXk/OiBzdHJpbmc7XG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nO1xuXHRjb25kaXRpb25QYXRoPzogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR0b29sdGlwPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogYm9vbGVhbjtcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcblx0bWF4Q29uZGl0aW9ucz86IG51bWJlcjtcblx0ZGF0YVR5cGU/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRoaWRkZW5GaWx0ZXI/OiBib29sZWFuO1xuXHRkaXNwbGF5Pzogc3RyaW5nO1xuXHRpc1BhcmFtZXRlcj86IGJvb2xlYW47XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xuXHRhdmFpbGFiaWxpdHk/OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRwb3NpdGlvbj86IFBvc2l0aW9uO1xuXHR0eXBlPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0bWVudT86IHN0cmluZztcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRmaWx0ZXJFeHByZXNzaW9uPzogc3RyaW5nO1xuXHRpc0N1c3RvbUZpbHRlcj86IGJvb2xlYW47XG5cdGNvbnN0cmFpbnRzPzogb2JqZWN0O1xuXHRmb3JtYXRPcHRpb25zPzogb2JqZWN0O1xuXHRzZXR0aW5ncz86IEZpbHRlclNldHRpbmdzO1xuXHR2aXN1YWxGaWx0ZXI/OiBWaXN1YWxGaWx0ZXJzO1xuXHR0eXBlQ29uZmlnPzogVHlwZUNvbmZpZztcbn07XG5cbi8vIFRoZSBwcm9wZXJ0eUluZm8gd2Ugc2hhcmUgd2l0aCBNRENcbmV4cG9ydCB0eXBlIFByb3BlcnR5SW5mb0V4dGVybmFsID0ge1xuXHRrZXk6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0ZGF0YVR5cGU6IHN0cmluZztcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRjb25zdHJhaW50cz86IG9iamVjdDtcblx0Zm9ybWF0T3B0aW9ucz86IG9iamVjdDtcblx0bWF4Q29uZGl0aW9ucz86IG51bWJlcjtcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0aGlkZGVuRmlsdGVyPzogYm9vbGVhbjtcbn07XG5jb25zdCBfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChvRmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCB8IFByb3BlcnR5SW5mbyk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0a2V5OiBvRmlsdGVyRmllbGRJbmZvLmtleSxcblx0XHRhbm5vdGF0aW9uUGF0aDogb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aCxcblx0XHRjb25kaXRpb25QYXRoOiBvRmlsdGVyRmllbGRJbmZvLmNvbmRpdGlvblBhdGgsXG5cdFx0bmFtZTogb0ZpbHRlckZpZWxkSW5mby5jb25kaXRpb25QYXRoISxcblx0XHRsYWJlbDogb0ZpbHRlckZpZWxkSW5mby5sYWJlbCxcblx0XHRoaWRkZW5GaWx0ZXI6IG9GaWx0ZXJGaWVsZEluZm8uYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiLFxuXHRcdGRpc3BsYXk6IFwiVmFsdWVcIixcblx0XHRpc1BhcmFtZXRlcjogb0ZpbHRlckZpZWxkSW5mby5pc1BhcmFtZXRlcixcblx0XHRjYXNlU2Vuc2l0aXZlOiBvRmlsdGVyRmllbGRJbmZvLmNhc2VTZW5zaXRpdmUsXG5cdFx0YXZhaWxhYmlsaXR5OiBvRmlsdGVyRmllbGRJbmZvLmF2YWlsYWJpbGl0eSxcblx0XHRwb3NpdGlvbjogb0ZpbHRlckZpZWxkSW5mby5wb3NpdGlvbixcblx0XHR0eXBlOiBvRmlsdGVyRmllbGRJbmZvLnR5cGUsXG5cdFx0dGVtcGxhdGU6IG9GaWx0ZXJGaWVsZEluZm8udGVtcGxhdGUsXG5cdFx0bWVudTogb0ZpbHRlckZpZWxkSW5mby5tZW51LFxuXHRcdHJlcXVpcmVkOiBvRmlsdGVyRmllbGRJbmZvLnJlcXVpcmVkLFxuXHRcdGlzQ3VzdG9tRmlsdGVyOiBvRmlsdGVyRmllbGRJbmZvLnNldHRpbmdzPy5pc0N1c3RvbUZpbHRlclxuXHR9O1xufTtcblxuY29uc3QgX2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSxcblx0bWFuaWZlc3RGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD5cbik6IHZvaWQge1xuXHRmaWx0ZXJGaWVsZHMuZm9yRWFjaCgoZmlsdGVyRmllbGQpID0+IHtcblx0XHRpZiAobWFuaWZlc3RGaWx0ZXJGaWVsZHMuaGFzT3duUHJvcGVydHkoZmlsdGVyRmllbGQua2V5KSAmJiAhbWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCkge1xuXHRcdFx0bWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCA9IGZpbHRlckZpZWxkLmxhYmVsO1xuXHRcdH1cblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChhRXhwcmVzc2lvbnM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0Y29uc3QgYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5ID0gW1xuXHRcdFwiU2luZ2xlVmFsdWVcIixcblx0XHRcIk11bHRpVmFsdWVcIixcblx0XHRcIlNpbmdsZVJhbmdlXCIsXG5cdFx0XCJNdWx0aVJhbmdlXCIsXG5cdFx0XCJTZWFyY2hFeHByZXNzaW9uXCIsXG5cdFx0XCJNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXCJcblx0XTtcblxuXHRhRXhwcmVzc2lvbnMuc29ydChmdW5jdGlvbiAoYTogc3RyaW5nLCBiOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYSkgLSBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihiKTtcblx0fSk7XG5cblx0cmV0dXJuIGFFeHByZXNzaW9uc1swXTtcbn07XG5cbmV4cG9ydCBjb25zdCBkaXNwbGF5TW9kZSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5QW5ub3RhdGlvbnM6IFByb3BlcnR5QW5ub3RhdGlvbnMgfCB1bmRlZmluZWQsXG5cdG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM6IEVudGl0eVR5cGVBbm5vdGF0aW9ucyB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHtcblx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5QW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCxcblx0XHRvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uID1cblx0XHRcdG9UZXh0QW5ub3RhdGlvbiAmJlxuXHRcdFx0KChvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkgfHxcblx0XHRcdFx0KG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgJiYgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkpO1xuXG5cdGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24udmFsdWVPZigpID09PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dE9ubHlcIikge1xuXHRcdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25cIjtcblx0XHR9IGVsc2UgaWYgKG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24udmFsdWVPZigpID09PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dExhc3RcIikge1xuXHRcdFx0cmV0dXJuIFwiVmFsdWVEZXNjcmlwdGlvblwiO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblZhbHVlXCI7IC8vVGV4dEZpcnN0XG5cdH1cblx0cmV0dXJuIG9UZXh0QW5ub3RhdGlvbiA/IFwiRGVzY3JpcHRpb25WYWx1ZVwiIDogXCJWYWx1ZVwiO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG9GaWx0ZXJGaWVsZEluZm86IEZpbHRlckZpZWxkIHwgUHJvcGVydHlJbmZvLFxuXHRvVHlwZUNvbmZpZzogUGFydGlhbDxQcm9wZXJ0eVR5cGVDb25maWc+XG4pOiBQcm9wZXJ0eUluZm8ge1xuXHRsZXQgb1Byb3BlcnR5SW5mbyA9IF9mZXRjaEJhc2ljUHJvcGVydHlJbmZvKG9GaWx0ZXJGaWVsZEluZm8pO1xuXHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBvRmlsdGVyRmllbGRJbmZvLmFubm90YXRpb25QYXRoO1xuXG5cdGlmICghc0Fubm90YXRpb25QYXRoKSB7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG5cdH1cblx0Y29uc3QgdGFyZ2V0UHJvcGVydHlPYmplY3QgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8UHJvcGVydHk+KHNBbm5vdGF0aW9uUGF0aCkuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblxuXHRjb25zdCBvUHJvcGVydHlBbm5vdGF0aW9ucyA9IHRhcmdldFByb3BlcnR5T2JqZWN0Py5hbm5vdGF0aW9ucztcblx0Y29uc3Qgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQ/LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zO1xuXG5cdGNvbnN0IG9Gb3JtYXRPcHRpb25zID0gb1R5cGVDb25maWcuZm9ybWF0T3B0aW9ucztcblx0Y29uc3Qgb0NvbnN0cmFpbnRzID0gb1R5cGVDb25maWcuY29uc3RyYWludHM7XG5cdG9Qcm9wZXJ0eUluZm8gPSBPYmplY3QuYXNzaWduKG9Qcm9wZXJ0eUluZm8sIHtcblx0XHRmb3JtYXRPcHRpb25zOiBvRm9ybWF0T3B0aW9ucyxcblx0XHRjb25zdHJhaW50czogb0NvbnN0cmFpbnRzLFxuXHRcdGRpc3BsYXk6IGRpc3BsYXlNb2RlKG9Qcm9wZXJ0eUFubm90YXRpb25zLCBvQ29sbGVjdGlvbkFubm90YXRpb25zKVxuXHR9KTtcblx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG59O1xuXG5leHBvcnQgY29uc3QgaXNNdWx0aVZhbHVlID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHlJbmZvKTogYm9vbGVhbiB7XG5cdGxldCBiSXNNdWx0aVZhbHVlID0gdHJ1ZTtcblx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRzd2l0Y2ggKG9Qcm9wZXJ0eS5maWx0ZXJFeHByZXNzaW9uKSB7XG5cdFx0Y2FzZSBcIlNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRjYXNlIFwiU2luZ2xlUmFuZ2VcIjpcblx0XHRjYXNlIFwiU2luZ2xlVmFsdWVcIjpcblx0XHRcdGJJc011bHRpVmFsdWUgPSBmYWxzZTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXHRpZiAob1Byb3BlcnR5LnR5cGUgJiYgb1Byb3BlcnR5LnR5cGUuaW5kZXhPZihcIkJvb2xlYW5cIikgPiAwKSB7XG5cdFx0YklzTXVsdGlWYWx1ZSA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiBiSXNNdWx0aVZhbHVlO1xufTtcblxuY29uc3QgX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0ZW50cnk6IERhdGFGaWVsZEFic3RyYWN0VHlwZXNcbik6IGVudHJ5IGlzIEFubm90YXRpb25UZXJtPERhdGFGaWVsZCB8IERhdGFGaWVsZFdpdGhVcmwgfCBEYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg+IHtcblx0cmV0dXJuIChcblx0XHQoZW50cnkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fFxuXHRcdFx0ZW50cnkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwgfHxcblx0XHRcdGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgpICYmXG5cdFx0ZW50cnkuVmFsdWUucGF0aD8uaW5jbHVkZXMoXCIvXCIpXG5cdCk7XG59O1xuXG4vKipcbiAqIEFkZHMgdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgd2hpY2ggcmVmZXJlbmNlcyB0byB0aGUgdW5pdCwgdGltZXpvbmUsIHRleHRBcnJhbmdlbWVudCBvciBjdXJyZW5jeSBmcm9tIGEgZGF0YSBmaWVsZC5cbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gbmF2UHJvcGVydGllcyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqL1xuY29uc3QgYWRkQ2hpbGROYXZpZ2F0aW9uUHJvcGVydGllcyA9IGZ1bmN0aW9uIChcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG5hdlByb3BlcnRpZXM6IHN0cmluZ1tdXG4pOiB2b2lkIHtcblx0Y29uc3QgdGFyZ2V0UHJvcGVydHkgPSAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZCkuVmFsdWU/LiR0YXJnZXQ7XG5cdGlmICh0YXJnZXRQcm9wZXJ0eSkge1xuXHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGggPVxuXHRcdFx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCh0YXJnZXRQcm9wZXJ0eSkgfHxcblx0XHRcdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aCh0YXJnZXRQcm9wZXJ0eSk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnR5ID0gYWRkaXRpb25hbFByb3BlcnR5UGF0aFxuXHRcdFx0PyBlbmhhbmNlRGF0YU1vZGVsUGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgYWRkaXRpb25hbFByb3BlcnR5UGF0aCkubmF2aWdhdGlvblByb3BlcnRpZXNcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmIChuYXZpZ2F0aW9uUHJvcGVydHk/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVswXS5uYW1lO1xuXHRcdFx0aWYgKCFuYXZQcm9wZXJ0aWVzLmluY2x1ZGVzKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdG5hdlByb3BlcnRpZXMucHVzaChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogR2V0cyB1c2VkIG5hdmlnYXRpb24gcHJvcGVydGllcyBmb3IgYXZhaWxhYmxlIGRhdGFGaWVsZC5cbiAqIEBwYXJhbSBuYXZQcm9wZXJ0aWVzIFRoZSBsaXN0IG9mIG5hdmlnYXRpb24gcHJvcGVydGllc1xuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YSBmaWVsZCB0byBiZSBjb25zaWRlcmVkXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIG5hdmlnYXRpb24gcHJvcGVydGllc1xuICovXG5jb25zdCBnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5ID0gZnVuY3Rpb24gKFxuXHRuYXZQcm9wZXJ0aWVzOiBzdHJpbmdbXSxcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IHN0cmluZ1tdIHtcblx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRpZiAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlKSB7XG5cdFx0XHRcdGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC5EYXRhPy5mb3JFYWNoKChpbm5lckRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0XHRcdGdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzUmVjdXJzaXZlbHkobmF2UHJvcGVydGllcywgaW5uZXJEYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdGlmIChfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5KGRhdGFGaWVsZCkpIHtcblx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IGdldFJlbGF0aXZlUGF0aHMoXG5cdFx0XHRcdFx0ZW5oYW5jZURhdGFNb2RlbFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIGRhdGFGaWVsZC5WYWx1ZS5wYXRoKSxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCkuam9pbihcIi9cIik7XG5cdFx0XHRcdGlmICghbmF2UHJvcGVydGllcy5pbmNsdWRlcyhuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRcdG5hdlByb3BlcnRpZXMucHVzaChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gQWRkaXRpb25hbCBwcm9wZXJ0eSBmcm9tIHRleHQgYXJyYW5nZW1lbnQvdW5pdHMvY3VycmVuY2llcy90aW1lem9uZS4uLlxuXHRcdFx0YWRkQ2hpbGROYXZpZ2F0aW9uUHJvcGVydGllcyhkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQsIG5hdlByb3BlcnRpZXMpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdC8vIE90aGVyIHR5cGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gbmF2UHJvcGVydGllcztcbn07XG5cbmNvbnN0IGdldEFubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXSxcblx0YW5ub3RhdGlvblBhdGggPSBcIlwiLFxuXHRpbmNsdWRlSGlkZGVuID0gZmFsc2UsXG5cdGxpbmVJdGVtVGVybT86IHN0cmluZ1xuKToge1xuXHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IFNldDxzdHJpbmc+O1xuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlO1xuXHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM6IFByb3BlcnR5UGF0aFtdO1xuXHRmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPjtcblx0cHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdO1xuXHRkZWZhdWx0RmlsdGVyRmllbGRzOiBGaWx0ZXJGaWVsZFtdO1xufSB7XG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgaW4gc2VsZWN0aW9uIHZhcmlhbnRzIGRlZmluZWQgaW4gdGhlIGRpZmZlcmVudCB2aXN1YWxpemF0aW9ucyBhbmQgZGlmZmVyZW50IHZpZXdzIChtdWx0aSB0YWJsZSBtb2RlKVxuXHRjb25zdCBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMgPSBnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMobHJUYWJsZXMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdC8vRmlsdGVycyB3aGljaCBoYXMgdG8gYmUgYWRkZWQgd2hpY2ggaXMgcGFydCBvZiBTVi9EZWZhdWx0IGFubm90YXRpb25zIGJ1dCBub3QgcHJlc2VudCBpbiB0aGUgU2VsZWN0aW9uRmllbGRzXG5cdGNvbnN0IGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcyA9ICgoYW5ub3RhdGlvblBhdGggJiYgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihhbm5vdGF0aW9uUGF0aCk/LmFubm90YXRpb24pIHx8XG5cdFx0ZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LlNlbGVjdGlvbkZpZWxkcyB8fFxuXHRcdFtdKSBhcyBQcm9wZXJ0eVBhdGhbXTtcblxuXHRsZXQgbmF2UHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0aWYgKGxyVGFibGVzLmxlbmd0aCA9PT0gMCAmJiAhIWxpbmVJdGVtVGVybSkge1xuXHRcdChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGxpbmVJdGVtVGVybSkuYW5ub3RhdGlvbiBhcyBMaW5lSXRlbSk/LmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0bmF2UHJvcGVydGllcyA9IGdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzUmVjdXJzaXZlbHkobmF2UHJvcGVydGllcywgZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHR9KTtcblx0fVxuXG5cdGlmIChNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKSkge1xuXHRcdG5hdlByb3BlcnRpZXMucHVzaChcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvQ3JlYXRpb25EYXRlVGltZVwiLFxuXHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9DcmVhdGVkQnlVc2VyXCIsXG5cdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0xhc3RDaGFuZ2VEYXRlVGltZVwiLFxuXHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlZEJ5VXNlclwiXG5cdFx0KTtcblx0fVxuXG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBhbGwgcG90ZW50aWFsIGZpbHRlciBmaWVsZHMgYmFzZWQgb24uLi5cblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7XG5cdFx0Ly8gLi4ubm9uIGhpZGRlbiBwcm9wZXJ0aWVzIG9mIHRoZSBlbnRpdHlcblx0XHQuLi5fZ2V0U2VsZWN0aW9uRmllbGRzKGVudGl0eVR5cGUsIFwiXCIsIGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcywgaW5jbHVkZUhpZGRlbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Ly8gLi4uIG5vbiBoaWRkZW4gcHJvcGVydGllcyBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHQuLi5fZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKGVudGl0eVR5cGUsIG5hdlByb3BlcnRpZXMsIGZhbHNlLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHQvLyAuLi5hZGRpdGlvbmFsIG1hbmlmZXN0IGRlZmluZWQgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aChcblx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oKS5uYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0KVxuXHR9O1xuXHRsZXQgYVNlbGVjdE9wdGlvbnM6IFNlbGVjdE9wdGlvblR5cGVbXSA9IFtdO1xuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50ID0gZ2V0U2VsZWN0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0aWYgKHNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRhU2VsZWN0T3B0aW9ucyA9IHNlbGVjdGlvblZhcmlhbnQuU2VsZWN0T3B0aW9ucztcblx0fVxuXG5cdGNvbnN0IHByb3BlcnR5SW5mb0ZpZWxkczogRmlsdGVyRmllbGRbXSA9XG5cdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzPy5yZWR1Y2UoKHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXSwgc2VsZWN0aW9uRmllbGQpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHNlbGVjdGlvbkZpZWxkLnZhbHVlO1xuXHRcdFx0aWYgKCFleGNsdWRlZEZpbHRlclByb3BlcnRpZXMuaGFzKHByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0bGV0IG5hdmlnYXRpb25QYXRoOiBzdHJpbmc7XG5cdFx0XHRcdGlmIChhbm5vdGF0aW9uUGF0aD8uc3RhcnRzV2l0aChcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIikpIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGF0aCA9IFwiXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhdGggPSBhbm5vdGF0aW9uUGF0aD8uc3BsaXQoXCIvQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiKVswXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGZpbHRlclByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25QYXRoID8gbmF2aWdhdGlvblBhdGggKyBcIi9cIiArIHByb3BlcnR5UGF0aCA6IHByb3BlcnR5UGF0aDtcblx0XHRcdFx0Y29uc3QgZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gX2dldEZpbHRlckZpZWxkKFxuXHRcdFx0XHRcdGZpbHRlckZpZWxkcyxcblx0XHRcdFx0XHRmaWx0ZXJQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRlbnRpdHlUeXBlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdGZpbHRlckZpZWxkLmdyb3VwID0gXCJcIjtcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZC5ncm91cExhYmVsID0gXCJcIjtcblx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChmaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG5cdFx0fSwgW10pIHx8IFtdO1xuXG5cdGNvbnN0IGRlZmF1bHRGaWx0ZXJGaWVsZHMgPSBfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyhcblx0XHRhU2VsZWN0T3B0aW9ucyxcblx0XHRlbnRpdHlUeXBlLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLFxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkc1xuXHQpO1xuXG5cdHJldHVybiB7XG5cdFx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMsXG5cdFx0ZW50aXR5VHlwZTogZW50aXR5VHlwZSxcblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM6IGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcyxcblx0XHRmaWx0ZXJGaWVsZHM6IGZpbHRlckZpZWxkcyxcblx0XHRwcm9wZXJ0eUluZm9GaWVsZHM6IHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRkZWZhdWx0RmlsdGVyRmllbGRzOiBkZWZhdWx0RmlsdGVyRmllbGRzXG5cdH07XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hUeXBlQ29uZmlnID0gZnVuY3Rpb24gKHByb3BlcnR5PzogUHJvcGVydHkpOiBQcm9wZXJ0eVR5cGVDb25maWcge1xuXHRjb25zdCBvVHlwZUNvbmZpZyA9IGdldFR5cGVDb25maWcocHJvcGVydHksIHByb3BlcnR5Py50eXBlKTtcblx0aWYgKHByb3BlcnR5Py50eXBlID09PSBzRWRtU3RyaW5nICYmIChvVHlwZUNvbmZpZy5jb25zdHJhaW50cy5udWxsYWJsZSA9PT0gdW5kZWZpbmVkIHx8IG9UeXBlQ29uZmlnLmNvbnN0cmFpbnRzLm51bGxhYmxlID09PSB0cnVlKSkge1xuXHRcdG9UeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMucGFyc2VLZWVwc0VtcHR5U3RyaW5nID0gZmFsc2U7XG5cdH1cblx0cmV0dXJuIG9UeXBlQ29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IGFzc2lnbkRhdGFUeXBlVG9Qcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5SW5mb0ZpZWxkOiBGaWx0ZXJGaWVsZCB8IFByb3BlcnR5SW5mbyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhUmVxdWlyZWRQcm9wczogdW5rbm93bltdLFxuXHRhVHlwZUNvbmZpZzogUmVjb3JkPHN0cmluZywgUGFydGlhbDxQcm9wZXJ0eVR5cGVDb25maWc+PlxuKTogUHJvcGVydHlJbmZvIHtcblx0bGV0IG9Qcm9wZXJ0eUluZm8gPSBmZXRjaFByb3BlcnR5SW5mbyhjb252ZXJ0ZXJDb250ZXh0LCBwcm9wZXJ0eUluZm9GaWVsZCwgYVR5cGVDb25maWdbcHJvcGVydHlJbmZvRmllbGQua2V5IV0pLFxuXHRcdHNQcm9wZXJ0eVBhdGggPSBcIlwiO1xuXHRpZiAocHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aCkge1xuXHRcdHNQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eUluZm9GaWVsZC5jb25kaXRpb25QYXRoLnJlcGxhY2UoL1xcK3xcXCovZywgXCJcIik7XG5cdH1cblx0aWYgKG9Qcm9wZXJ0eUluZm8pIHtcblx0XHRvUHJvcGVydHlJbmZvID0gT2JqZWN0LmFzc2lnbihvUHJvcGVydHlJbmZvLCB7XG5cdFx0XHRtYXhDb25kaXRpb25zOiAhb1Byb3BlcnR5SW5mby5pc1BhcmFtZXRlciAmJiBpc011bHRpVmFsdWUob1Byb3BlcnR5SW5mbykgPyAtMSA6IDEsXG5cdFx0XHRyZXF1aXJlZDogcHJvcGVydHlJbmZvRmllbGQucmVxdWlyZWQgPz8gKG9Qcm9wZXJ0eUluZm8uaXNQYXJhbWV0ZXIgfHwgYVJlcXVpcmVkUHJvcHMuaW5jbHVkZXMoc1Byb3BlcnR5UGF0aCkpLFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0ZGF0YVR5cGU6IGFUeXBlQ29uZmlnW3Byb3BlcnR5SW5mb0ZpZWxkLmtleSFdLnR5cGVcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gb1Byb3BlcnR5SW5mbztcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9jZXNzU2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHM/OiBGaWx0ZXJGaWVsZFtdXG4pOiBQcm9wZXJ0eUluZm9bXSB7XG5cdC8vZ2V0IFR5cGVDb25maWcgZnVuY3Rpb25cblx0Y29uc3QgYVR5cGVDb25maWc6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPj4gPSB7fTtcblxuXHRpZiAoZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHMpIHtcblx0XHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBwcm9wZXJ0eUluZm9GaWVsZHMuY29uY2F0KGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzKTtcblx0fVxuXHQvL2FkZCB0eXBlQ29uZmlnXG5cdHByb3BlcnR5SW5mb0ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbWV0ZXJGaWVsZCkge1xuXHRcdGlmIChwYXJhbWV0ZXJGaWVsZC5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlDb252ZXJ0eUNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8UHJvcGVydHk+KHBhcmFtZXRlckZpZWxkLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0ID0gcHJvcGVydHlDb252ZXJ0eUNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblx0XHRcdGNvbnN0IG9UeXBlQ29uZmlnID0gZmV0Y2hUeXBlQ29uZmlnKHByb3BlcnR5VGFyZ2V0T2JqZWN0KTtcblx0XHRcdGFUeXBlQ29uZmlnW3BhcmFtZXRlckZpZWxkLmtleV0gPSBvVHlwZUNvbmZpZztcblx0XHR9IGVsc2Uge1xuXHRcdFx0YVR5cGVDb25maWdbcGFyYW1ldGVyRmllbGQua2V5XSA9IHsgdHlwZTogc1N0cmluZ0RhdGFUeXBlIH07XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBmaWx0ZXJSZXN0cmljdGlvbnNcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IGlzRW50aXR5U2V0KGVudGl0eVNldCkgPyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnMgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9SZXQ6IHtcblx0XHRSZXF1aXJlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0XHROb25GaWx0ZXJhYmxlUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHRcdEZpbHRlckFsbG93ZWRFeHByZXNzaW9ucz86IFJlY29yZDxzdHJpbmcsIEZpbHRlckV4cHJlc3Npb25UeXBlW10+O1xuXHR9ID0ge307XG5cdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW107XG5cdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9ucyk7XG5cblx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGNvbnN0IGFQYXRoUGFydHMgPSBzRW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIik7XG5cdGlmIChhUGF0aFBhcnRzLmxlbmd0aCA+IDIpIHtcblx0XHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBhUGF0aFBhcnRzW2FQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cdFx0YVBhdGhQYXJ0cy5zcGxpY2UoLTEsIDEpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBzTmF2aWdhdGlvblBhdGgpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuRmlsdGVyUmVzdHJpY3Rpb25zO1xuXHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gb1JldC5SZXF1aXJlZFByb3BlcnRpZXMuY29uY2F0KFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXVxuXHRcdCk7XG5cdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuY29uY2F0KFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdXG5cdFx0KTtcblx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IHtcblx0XHRcdC4uLihnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucykgfHwge30pLFxuXHRcdFx0Li4ub1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcblx0XHR9O1xuXHR9XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BzID0gb1JldC5SZXF1aXJlZFByb3BlcnRpZXM7XG5cdGNvbnN0IGFOb25GaWx0ZXJhYmxlUHJvcHMgPSBvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzO1xuXHRjb25zdCBhRmV0Y2hlZFByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdID0gW107XG5cblx0Ly8gcHJvY2VzcyB0aGUgZmllbGRzIHRvIGFkZCBuZWNlc3NhcnkgcHJvcGVydGllc1xuXHRwcm9wZXJ0eUluZm9GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHlJbmZvRmllbGQpIHtcblx0XHRjb25zdCBzUHJvcGVydHlQYXRoID0gcHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aC5yZXBsYWNlKC9bKypdL2csIFwiXCIpO1xuXHRcdGlmICghYU5vbkZpbHRlcmFibGVQcm9wcy5pbmNsdWRlcyhzUHJvcGVydHlQYXRoKSkge1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5SW5mbyA9IGFzc2lnbkRhdGFUeXBlVG9Qcm9wZXJ0eUluZm8ocHJvcGVydHlJbmZvRmllbGQsIGNvbnZlcnRlckNvbnRleHQsIGFSZXF1aXJlZFByb3BzLCBhVHlwZUNvbmZpZyk7XG5cdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChvUHJvcGVydHlJbmZvKTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vYWRkIGVkaXRcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRpZiAoTW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoZGF0YU1vZGVsT2JqZWN0UGF0aCkpIHtcblx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8oKSk7XG5cdH1cblx0Ly8gYWRkIHNlYXJjaFxuXHRjb25zdCBzZWFyY2hSZXN0cmljdGlvbnMgPSBnZXRTZWFyY2hSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IEJvb2xlYW4oc2VhcmNoUmVzdHJpY3Rpb25zICYmICFzZWFyY2hSZXN0cmljdGlvbnMuU2VhcmNoYWJsZSk7XG5cdGlmIChzRW50aXR5U2V0UGF0aCAmJiBoaWRlQmFzaWNTZWFyY2ggIT09IHRydWUpIHtcblx0XHRpZiAoIXNlYXJjaFJlc3RyaWN0aW9ucyB8fCBzZWFyY2hSZXN0cmljdGlvbnM/LlNlYXJjaGFibGUpIHtcblx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKGdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbygpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYUZldGNoZWRQcm9wZXJ0aWVzO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkczogTWFuaWZlc3RGaWx0ZXJGaWVsZFtdLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmdcbik6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSB7XG5cdGNvbnN0IG1hbmlmZXN0RmlsdGVyRmllbGRzID0gZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgYW5ub3RhdGlvblBhdGgpO1xuXHRfZ2V0TWlzc2luZ0xhYmVsRm9yTWFuaWZlc3RGaWx0ZXJGaWVsZHMoZmlsdGVyRmllbGRzLCBtYW5pZmVzdEZpbHRlckZpZWxkcyk7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhmaWx0ZXJGaWVsZHMsIG1hbmlmZXN0RmlsdGVyRmllbGRzLCB7XG5cdFx0YXZhaWxhYmlsaXR5OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGxhYmVsOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHR5cGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cG9zaXRpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0c2xvdE5hbWU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZG9jdW1lbnRSZWZUZXh0OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHRlbXBsYXRlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHNldHRpbmdzOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc3VhbEZpbHRlcjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRyZXF1aXJlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzb3J0UHJvcGVydHlJbmZvc0J5R3JvdXBMYWJlbCA9IChwcm9wZXJ0eUluZm9zOiBQcm9wZXJ0eUluZm9bXSk6IHZvaWQgPT4ge1xuXHRwcm9wZXJ0eUluZm9zLnNvcnQoZnVuY3Rpb24gKGE6IEZpbHRlckdyb3VwLCBiOiBGaWx0ZXJHcm91cCkge1xuXHRcdGNvbnN0IGFHcm91cExhYmVsSXNTZXQgPSBhLmdyb3VwTGFiZWwgIT09IHVuZGVmaW5lZCAmJiBhLmdyb3VwTGFiZWwgIT09IG51bGw7XG5cdFx0Y29uc3QgYkdyb3VwTGFiZWxJc1NldCA9IGIuZ3JvdXBMYWJlbCAhPT0gdW5kZWZpbmVkICYmIGIuZ3JvdXBMYWJlbCAhPT0gbnVsbDtcblx0XHRpZiAoIWFHcm91cExhYmVsSXNTZXQgJiYgIWJHcm91cExhYmVsSXNTZXQpIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblx0XHRpZiAoYUdyb3VwTGFiZWxJc1NldCAmJiAhYkdyb3VwTGFiZWxJc1NldCkge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblx0XHRpZiAoIWFHcm91cExhYmVsSXNTZXQgJiYgYkdyb3VwTGFiZWxJc1NldCkge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXHRcdHJldHVybiBhLmdyb3VwTGFiZWwhLmxvY2FsZUNvbXBhcmUoYi5ncm91cExhYmVsISk7XG5cdH0pO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlbGVjdGlvbiBmaWVsZHMgdGhhdCB3aWxsIGJlIHVzZWQgd2l0aGluIHRoZSBmaWx0ZXIgYmFyXG4gKiBUaGlzIGNvbmZpZ3VyYXRpb24gdGFrZXMgaW50byBhY2NvdW50IHRoZSBhbm5vdGF0aW9uIGFuZCB0aGUgc2VsZWN0aW9uIHZhcmlhbnRzLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBsclRhYmxlc1xuICogQHBhcmFtIGFubm90YXRpb25QYXRoXG4gKiBAcGFyYW0gW2luY2x1ZGVIaWRkZW5dXG4gKiBAcGFyYW0gW2xpbmVJdGVtVGVybV1cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHNlbGVjdGlvbiBmaWVsZHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXSxcblx0YW5ub3RhdGlvblBhdGggPSBcIlwiLFxuXHRpbmNsdWRlSGlkZGVuPzogYm9vbGVhbixcblx0bGluZUl0ZW1UZXJtPzogc3RyaW5nXG4pOiB7IHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXTsgc1Byb3BlcnR5SW5mbzogc3RyaW5nIH0ge1xuXHRjb25zdCBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhID0gZ2V0QW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhKFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0bHJUYWJsZXMsXG5cdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0aW5jbHVkZUhpZGRlbixcblx0XHRsaW5lSXRlbVRlcm1cblx0KTtcblx0Y29uc3QgcGFyYW1ldGVyRmllbGRzID0gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0bGV0IHByb3BlcnR5SW5mb0ZpZWxkczogRmlsdGVyRmllbGRbXSA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEucHJvcGVydHlJbmZvRmllbGRzO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5lbnRpdHlUeXBlO1xuXG5cdHByb3BlcnR5SW5mb0ZpZWxkcyA9IHBhcmFtZXRlckZpZWxkcy5jb25jYXQocHJvcGVydHlJbmZvRmllbGRzKTtcblxuXHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzKHByb3BlcnR5SW5mb0ZpZWxkcywgZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgYW5ub3RhdGlvblBhdGgpO1xuXG5cdGNvbnN0IGFGZXRjaGVkUHJvcGVydGllcyA9IHByb2Nlc3NTZWxlY3Rpb25GaWVsZHMoXG5cdFx0cHJvcGVydHlJbmZvRmllbGRzLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0b0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5kZWZhdWx0RmlsdGVyRmllbGRzXG5cdCk7XG5cdHNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsKGFGZXRjaGVkUHJvcGVydGllcyk7XG5cblx0bGV0IHNGZXRjaFByb3BlcnRpZXMgPSBKU09OLnN0cmluZ2lmeShhRmV0Y2hlZFByb3BlcnRpZXMpO1xuXHRzRmV0Y2hQcm9wZXJ0aWVzID0gc0ZldGNoUHJvcGVydGllcy5yZXBsYWNlKC9cXHsvZywgXCJcXFxce1wiKTtcblx0c0ZldGNoUHJvcGVydGllcyA9IHNGZXRjaFByb3BlcnRpZXMucmVwbGFjZSgvXFx9L2csIFwiXFxcXH1cIik7XG5cdGNvbnN0IHNQcm9wZXJ0eUluZm8gPSBzRmV0Y2hQcm9wZXJ0aWVzO1xuXHQvLyBlbmQgb2YgcHJvcGVydHlGaWVsZHMgcHJvY2Vzc2luZ1xuXG5cdC8vIHRvIHBvcHVsYXRlIHNlbGVjdGlvbiBmaWVsZHNcblx0bGV0IHByb3BTZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEucHJvcGVydHlJbmZvRmllbGRzKSk7XG5cdHByb3BTZWxlY3Rpb25GaWVsZHMgPSBwYXJhbWV0ZXJGaWVsZHMuY29uY2F0KHByb3BTZWxlY3Rpb25GaWVsZHMpO1xuXHQvLyBjcmVhdGUgYSBtYXAgb2YgcHJvcGVydGllcyB0byBiZSB1c2VkIGluIHNlbGVjdGlvbiB2YXJpYW50c1xuXHRjb25zdCBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMgPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcztcblx0Y29uc3QgZmlsdGVyRmFjZXRzID0gZW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5GaWx0ZXJGYWNldHM7XG5cdGxldCBmaWx0ZXJGYWNldE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+ID0ge307XG5cblx0Y29uc3QgYUZpZWxkR3JvdXBzID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIlVJXCIsIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXApIGFzIEZpZWxkR3JvdXBbXTtcblxuXHRpZiAoZmlsdGVyRmFjZXRzID09PSB1bmRlZmluZWQgfHwgZmlsdGVyRmFjZXRzLmxlbmd0aCA8IDApIHtcblx0XHRmb3IgKGNvbnN0IGkgaW4gYUZpZWxkR3JvdXBzKSB7XG5cdFx0XHRmaWx0ZXJGYWNldE1hcCA9IHtcblx0XHRcdFx0Li4uZmlsdGVyRmFjZXRNYXAsXG5cdFx0XHRcdC4uLmdldEZpZWxkR3JvdXBGaWx0ZXJHcm91cHMoYUZpZWxkR3JvdXBzW2ldKVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0ZmlsdGVyRmFjZXRNYXAgPSBmaWx0ZXJGYWNldHMucmVkdWNlKChwcmV2aW91c1ZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4sIGZpbHRlckZhY2V0OiBSZWZlcmVuY2VGYWNldFR5cGVzKSA9PiB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IChmaWx0ZXJGYWNldD8uVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXApPy5EYXRhPy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRwcmV2aW91c1ZhbHVlWygoZmlsdGVyRmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YVtpXSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy5wYXRoXSA9IHtcblx0XHRcdFx0XHRncm91cDogZmlsdGVyRmFjZXQ/LklEPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGdyb3VwTGFiZWw6IGZpbHRlckZhY2V0Py5MYWJlbD8udG9TdHJpbmcoKVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByZXZpb3VzVmFsdWU7XG5cdFx0fSwge30pO1xuXHR9XG5cblx0Ly8gY3JlYXRlIGEgbWFwIG9mIGFsbCBwb3RlbnRpYWwgZmlsdGVyIGZpZWxkcyBiYXNlZCBvbi4uLlxuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZmlsdGVyRmllbGRzO1xuXG5cdC8vIGZpbmFsbHkgY3JlYXRlIGZpbmFsIGxpc3Qgb2YgZmlsdGVyIGZpZWxkcyBieSBhZGRpbmcgdGhlIFNlbGVjdGlvbkZpZWxkcyBmaXJzdCAob3JkZXIgbWF0dGVycykuLi5cblx0bGV0IGFsbEZpbHRlcnMgPSBwcm9wU2VsZWN0aW9uRmllbGRzXG5cblx0XHQvLyAuLi5hbmQgYWRkaW5nIHJlbWFpbmluZyBmaWx0ZXIgZmllbGRzLCB0aGF0IGFyZSBub3QgdXNlZCBpbiBhIFNlbGVjdGlvblZhcmlhbnQgKG9yZGVyIGRvZXNuJ3QgbWF0dGVyKVxuXHRcdC5jb25jYXQoXG5cdFx0XHRPYmplY3Qua2V5cyhmaWx0ZXJGaWVsZHMpXG5cdFx0XHRcdC5maWx0ZXIoKHByb3BlcnR5UGF0aCkgPT4gIWV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcy5oYXMocHJvcGVydHlQYXRoKSlcblx0XHRcdFx0Lm1hcCgocHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF0sIGZpbHRlckZhY2V0TWFwW3Byb3BlcnR5UGF0aF0pO1xuXHRcdFx0XHR9KVxuXHRcdCk7XG5cdGNvbnN0IHNDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblxuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHMgPSBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzKGFsbEZpbHRlcnMsIGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGFubm90YXRpb25QYXRoKTtcblxuXHQvLyBBZGQgY2FzZVNlbnNpdGl2ZSBwcm9wZXJ0eSB0byBhbGwgc2VsZWN0aW9uIGZpZWxkcy5cblx0Y29uc3QgaXNDYXNlU2Vuc2l0aXZlID0gaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpO1xuXHRzZWxlY3Rpb25GaWVsZHMuZm9yRWFjaCgoZmlsdGVyRmllbGQpID0+IHtcblx0XHRmaWx0ZXJGaWVsZC5jYXNlU2Vuc2l0aXZlID0gaXNDYXNlU2Vuc2l0aXZlO1xuXHR9KTtcblxuXHRyZXR1cm4geyBzZWxlY3Rpb25GaWVsZHMsIHNQcm9wZXJ0eUluZm8gfTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWx0ZXIgYmFyIGluc2lkZSBhIHZhbHVlIGhlbHAgZGlhbG9nIHNob3VsZCBiZSBleHBhbmRlZC4gVGhpcyBpcyB0cnVlIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaG9sZDpcbiAqICgxKSBhIGZpbHRlciBwcm9wZXJ0eSBpcyBtYW5kYXRvcnksXG4gKiAoMikgbm8gc2VhcmNoIGZpZWxkIGV4aXN0cyAoZW50aXR5IGlzbid0IHNlYXJjaCBlbmFibGVkKSxcbiAqICgzKSB3aGVuIHRoZSBkYXRhIGlzbid0IGxvYWRlZCBieSBkZWZhdWx0IChhbm5vdGF0aW9uIEZldGNoVmFsdWVzID0gMikuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIFRoZSBGaWx0ZXJSZXN0cmljdGlvbiBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmFsdWVMaXN0IFRoZSBWYWx1ZUxpc3QgYW5ub3RhdGlvblxuICogQHJldHVybnMgVGhlIHZhbHVlIGZvciBleHBhbmRGaWx0ZXJGaWVsZHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cGFuZEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uOiBGaWx0ZXJSZXN0cmljdGlvbnMgfCB1bmRlZmluZWQsXG5cdHZhbHVlTGlzdDogTWV0YU1vZGVsVHlwZTxWYWx1ZUxpc3Q+XG4pOiBib29sZWFuIHtcblx0Y29uc3QgcmVxdWlyZWRQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24sIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpO1xuXHRjb25zdCBzZWFyY2hSZXN0cmljdGlvbnMgPSBnZXRTZWFyY2hSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IEJvb2xlYW4oc2VhcmNoUmVzdHJpY3Rpb25zICYmICFzZWFyY2hSZXN0cmljdGlvbnMuU2VhcmNoYWJsZSk7XG5cdGlmIChyZXF1aXJlZFByb3BlcnRpZXMubGVuZ3RoID4gMCB8fCBoaWRlQmFzaWNTZWFyY2ggfHwgdmFsdWVMaXN0Py5GZXRjaFZhbHVlcyA9PT0gMikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBc0RBO0VBQUEsSUFnQ0tBLGVBQWU7RUFBQSxXQUFmQSxlQUFlO0lBQWZBLGVBQWU7SUFBZkEsZUFBZTtFQUFBLEdBQWZBLGVBQWUsS0FBZkEs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
894
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJfZmllbGRHcm91cCRMYWJlbCIsIl9maWVsZEdyb3VwJGFubm90YXRpbyIsIl9maWVsZEdyb3VwJGFubm90YXRpbzIiLCJfZmllbGRHcm91cCRhbm5vdGF0aW8zIiwiVmFsdWUiLCJwYXRoIiwiZ3JvdXAiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJncm91cExhYmVsIiwiTGFiZWwiLCJ0b1N0cmluZyIsImFubm90YXRpb25zIiwiQ29tbW9uIiwicXVhbGlmaWVyIiwiZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzIiwibHJUYWJsZVZpc3VhbGl6YXRpb25zIiwiY29udmVydGVyQ29udGV4dCIsIl9jb252ZXJ0ZXJDb250ZXh0JGdldCIsIl9jb252ZXJ0ZXJDb250ZXh0JGdldDIiLCJfY29udmVydGVyQ29udGV4dCRnZXQzIiwic2VsZWN0aW9uVmFyaWFudFBhdGhzIiwiU2V0IiwibWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiZmlsdGVyRmllbGRzIiwic2VsZWN0aW9uRmllbGRQYXRocyIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiVUkiLCJTZWxlY3Rpb25GaWVsZHMiLCJtYXAiLCJzZWxlY3Rpb25GaWVsZCIsInZhbHVlIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImtleSIsInRlbXBsYXRlIiwidmlzdWFsaXphdGlvbiIsIl90YWJsZUZpbHRlcnMkaGlkZGVuRiIsIl90YWJsZUZpbHRlcnMkcXVpY2tGaSIsInRhYmxlRmlsdGVycyIsImNvbnRyb2wiLCJmaWx0ZXJzIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwicXVpY2tGaWx0ZXJzIiwiYW5ub3RhdGlvblBhdGgiLCJoYXMiLCJhZGQiLCJzZWxlY3Rpb25WYXJpYW50Q29uZmlnIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJwcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiZmxhdCIsIl9nZXRDb25kaXRpb25QYXRoIiwiZW50aXR5VHlwZSIsInByb3BlcnR5UGF0aCIsInBhcnRzIiwic3BsaXQiLCJwYXJ0aWFsUGF0aCIsImxlbmd0aCIsInBhcnQiLCJzaGlmdCIsInByb3BlcnR5IiwicmVzb2x2ZVBhdGgiLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5IiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnMyIiwiX3Byb3BlcnR5JGFubm90YXRpb25zMyIsInRhcmdldFR5cGUiLCJ1bmRlZmluZWQiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwiX3Byb3BlcnR5JGFubm90YXRpb25zNCIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczUiLCJfcHJvcGVydHkkYW5ub3RhdGlvbnM2IiwiX3Byb3BlcnR5JGFubm90YXRpb25zNyIsIl9wcm9wZXJ0eSRhbm5vdGF0aW9uczgiLCJfdGFyZ2V0RW50aXR5VHlwZSRhbm4iLCJfdGFyZ2V0RW50aXR5VHlwZSRhbm4yIiwiX3RhcmdldEVudGl0eVR5cGUkYW5uMyIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiZmlsdGVyRmllbGQiLCJLZXlIZWxwZXIiLCJnZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImNvbmRpdGlvblBhdGgiLCJhdmFpbGFiaWxpdHkiLCJIaWRkZW5GaWx0ZXIiLCJsYWJlbCIsIm5hbWUiLCJnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyIsInN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMiLCJTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzIiwiVE8iLCJUT01PUlJPVyIsIk5FWFRXRUVLIiwiTkVYVE1PTlRIIiwiTkVYVFFVQVJURVIiLCJORVhUWUVBUiIsInNldHRpbmdzIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZXF1YWxzIiwiam9pbiIsImV4Y2x1ZGUiLCJfZ2V0U2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblBhdGgiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uRmllbGRNYXAiLCJmdWxsUGF0aCIsIl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgiLCJwcm9wZXJ0eVBhdGhzIiwic2VsZWN0aW9uRmllbGRzIiwibG9jYWxTZWxlY3Rpb25GaWVsZHMiLCJlbmhhbmNlZFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInRhcmdldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZmluZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsIl9uYXZpZ2F0aW9uUHJvcGVydHkkYSIsIl9uYXZpZ2F0aW9uUHJvcGVydHkkYTIiLCJfbmF2aWdhdGlvblByb3BlcnR5JGEzIiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJlbnRpdHlQcm9wZXJ0aWVzIiwiaXNDb21wbGV4VHlwZSIsImdldFRhcmdldE5hdmlnYXRpb25QYXRoIiwiX2dldEZpbHRlckZpZWxkIiwiX2NvbnZlcnRlckNvbnRleHQkZ2V0NCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUlTU0lOR19TRUxFQ1RJT05GSUVMRCIsIl9lbnRpdHlUeXBlJGFubm90YXRpbyIsIl9lbnRpdHlUeXBlJGFubm90YXRpbzIiLCJpc1BhcmFtZXRlciIsIlJlc3VsdENvbnRleHQiLCJfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyIsImFTZWxlY3RPcHRpb25zIiwiZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzIiwiYW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzIiwiVUlTZWxlY3Rpb25GaWVsZHMiLCJTZWxlY3Rpb25GaWVsZCIsInNlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsInNQcm9wZXJ0eVBhdGgiLCJjdXJyZW50U2VsZWN0aW9uRmllbGRzIiwiRmlsdGVyRmllbGQiLCJnZXRGaWx0ZXJGaWVsZCIsInB1c2giLCJfcHJvcGVydHkkYW5ub3RhdGlvbnM5IiwiX3Byb3BlcnR5JGFubm90YXRpb25zMTAiLCJkZWZhdWx0RmlsdGVyVmFsdWUiLCJGaWx0ZXJEZWZhdWx0VmFsdWUiLCJfZ2V0UGFyYW1ldGVyRmllbGRzIiwiX3BhcmFtZXRlckVudGl0eVR5cGUkIiwiX3BhcmFtZXRlckVudGl0eVR5cGUkMiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJwYXJhbWV0ZXJFbnRpdHlUeXBlIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJpc1BhcmFtZXRlcml6ZWQiLCJ0YXJnZXRFbnRpdHlTZXQiLCJwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImdldEZpbHRlckJhckhpZGVCYXNpY1NlYXJjaCIsImxpc3RSZXBvcnRUYWJsZXMiLCJjaGFydHMiLCJub1NlYXJjaEluQ2hhcnRzIiwiZXZlcnkiLCJjaGFydCIsImFwcGx5U3VwcG9ydGVkIiwiZW5hYmxlU2VhcmNoIiwibm9TZWFyY2hJblRhYmxlcyIsInRhYmxlIiwiZW5hYmxlQW5hbHl0aWNzIiwidHlwZSIsImVuYWJsZUJhc2ljU2VhcmNoIiwiY29udGV4dFBhdGgiLCJnZXRDb250ZXh0UGF0aCIsIl9leHBvcnRzIiwiZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJfZmJDb25maWciLCJtYW5pZmVzdFdyYXBwZXIiLCJzZXR0aW5nc0NvbnRleHRQYXRoIiwiZ2V0RW50aXR5U2V0IiwiZmlsdGVyQ29uZmlndXJhdGlvblBhdGgiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uUGF0aCIsImZiQ29uZmlnIiwiZGVmaW5lZEZpbHRlckZpZWxkcyIsImdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkiLCJzS2V5IiwiU2xvdCIsIkRlZmF1bHQiLCJ2aXN1YWxGaWx0ZXIiLCJnZXRWaXN1YWxGaWx0ZXJzIiwiaXNDdXN0b21GaWx0ZXIiLCJzbG90TmFtZSIsImRvY3VtZW50UmVmVGV4dCIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwicmVxdWlyZWQiLCJvYmplY3RQYXRoIiwiZmlsdGVyQmFyQ29udGV4dFBhdGgiLCJtZXRhUGF0aCIsInN0YXJ0c1dpdGgiLCJyZXBsYWNlIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zIiwib0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24iLCJzUmVzdHJpY3Rpb24iLCJhUHJvcHMiLCJvUHJvcGVydHkiLCJnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbiIsIm1BbGxvd2VkRXhwcmVzc2lvbnMiLCJGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIiwiX29Qcm9wZXJ0eSRQcm9wZXJ0eSIsIlByb3BlcnR5IiwiQWxsb3dlZEV4cHJlc3Npb25zIiwiX29Qcm9wZXJ0eSRQcm9wZXJ0eTIiLCJfb1Byb3BlcnR5JFByb3BlcnR5MyIsIl9vUHJvcGVydHkkUHJvcGVydHk0IiwiZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvIiwiZGF0YVR5cGUiLCJtYXhDb25kaXRpb25zIiwiZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvIiwiaGlkZGVuRmlsdGVyIiwiZ2V0U2VhcmNoUmVzdHJpY3Rpb25zIiwiX2VudGl0eVNldCRhbm5vdGF0aW9uIiwiZW50aXR5U2V0IiwiaXNFbnRpdHlTZXQiLCJDYXBhYmlsaXRpZXMiLCJTZWFyY2hSZXN0cmljdGlvbnMiLCJnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwic05hdmlnYXRpb25QYXRoIiwiX2NvbnZlcnRlckNvbnRleHQkZ2V0NSIsIl9jb252ZXJ0ZXJDb250ZXh0JGdldDYiLCJfY29udmVydGVyQ29udGV4dCRnZXQ3Iiwib05hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJOYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwiYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJvUmVzdHJpY3RlZFByb3BlcnR5IiwiTmF2aWdhdGlvblByb3BlcnR5IiwiX2ZldGNoQmFzaWNQcm9wZXJ0eUluZm8iLCJvRmlsdGVyRmllbGRJbmZvIiwiX29GaWx0ZXJGaWVsZEluZm8kc2V0IiwiZGlzcGxheSIsImNhc2VTZW5zaXRpdmUiLCJtZW51IiwiX2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzIiwiaGFzT3duUHJvcGVydHkiLCJnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uIiwiYUV4cHJlc3Npb25zIiwiYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5Iiwic29ydCIsImEiLCJiIiwiaW5kZXhPZiIsImRpc3BsYXlNb2RlIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJvQ29sbGVjdGlvbkFubm90YXRpb25zIiwiX29Qcm9wZXJ0eUFubm90YXRpb25zIiwiX29Qcm9wZXJ0eUFubm90YXRpb25zMiIsIl9vUHJvcGVydHlBbm5vdGF0aW9uczMiLCJfb1Byb3BlcnR5QW5ub3RhdGlvbnM0IiwiX29Qcm9wZXJ0eUFubm90YXRpb25zNSIsIl9vQ29sbGVjdGlvbkFubm90YXRpbyIsIm9UZXh0QW5ub3RhdGlvbiIsIlRleHQiLCJvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uIiwiVGV4dEFycmFuZ2VtZW50IiwiZmV0Y2hQcm9wZXJ0eUluZm8iLCJvVHlwZUNvbmZpZyIsIl9jb252ZXJ0ZXJDb250ZXh0JGdldDgiLCJvUHJvcGVydHlJbmZvIiwic0Fubm90YXRpb25QYXRoIiwidGFyZ2V0UHJvcGVydHlPYmplY3QiLCJvRm9ybWF0T3B0aW9ucyIsImZvcm1hdE9wdGlvbnMiLCJvQ29uc3RyYWludHMiLCJjb25zdHJhaW50cyIsImFzc2lnbiIsImlzTXVsdGlWYWx1ZSIsImJJc011bHRpVmFsdWUiLCJmaWx0ZXJFeHByZXNzaW9uIiwiX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImVudHJ5IiwiX2VudHJ5JFZhbHVlJHBhdGgiLCJpbmNsdWRlcyIsImFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMiLCJuYXZQcm9wZXJ0aWVzIiwiX1ZhbHVlIiwidGFyZ2V0UHJvcGVydHkiLCIkdGFyZ2V0IiwiYWRkaXRpb25hbFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseSIsIl9kYXRhRmllbGQkVGFyZ2V0IiwiX2RhdGFGaWVsZCRUYXJnZXQkJHRhIiwiVGFyZ2V0IiwiX2RhdGFGaWVsZCRUYXJnZXQkJHRhMiIsImlubmVyRGF0YUZpZWxkIiwiZ2V0UmVsYXRpdmVQYXRocyIsImdldEFubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSIsIl9jb252ZXJ0ZXJDb250ZXh0JGdldDkiLCJfZW50aXR5VHlwZSRhbm5vdGF0aW8zIiwiX2VudGl0eVR5cGUkYW5ub3RhdGlvNCIsImxyVGFibGVzIiwiYXJndW1lbnRzIiwibGluZUl0ZW1UZXJtIiwiZ2V0RW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsIl9jb252ZXJ0ZXJDb250ZXh0JGdldDEwIiwiTW9kZWxIZWxwZXIiLCJpc0RyYWZ0Um9vdCIsInNlbGVjdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsInByb3BlcnR5SW5mb0ZpZWxkcyIsInJlZHVjZSIsImZpbHRlclByb3BlcnR5UGF0aCIsImRlZmF1bHRGaWx0ZXJGaWVsZHMiLCJmZXRjaFR5cGVDb25maWciLCJnZXRUeXBlQ29uZmlnIiwibnVsbGFibGUiLCJwYXJzZUtlZXBzRW1wdHlTdHJpbmciLCJhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvIiwicHJvcGVydHlJbmZvRmllbGQiLCJhUmVxdWlyZWRQcm9wcyIsImFUeXBlQ29uZmlnIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwicHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyIsImRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzIiwiX2VudGl0eVNldCRhbm5vdGF0aW9uMiIsImNvbmNhdCIsInBhcmFtZXRlckZpZWxkIiwicHJvcGVydHlDb252ZXJ0eUNvbnRleHQiLCJwcm9wZXJ0eVRhcmdldE9iamVjdCIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJvUmV0IiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMiLCJzRW50aXR5U2V0UGF0aCIsImFQYXRoUGFydHMiLCJzcGxpY2UiLCJvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyIsImFOb25GaWx0ZXJhYmxlUHJvcHMiLCJhRmV0Y2hlZFByb3BlcnRpZXMiLCJpc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZCIsInNlYXJjaFJlc3RyaWN0aW9ucyIsImhpZGVCYXNpY1NlYXJjaCIsIkJvb2xlYW4iLCJTZWFyY2hhYmxlIiwiaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwic29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwiLCJwcm9wZXJ0eUluZm9zIiwiYUdyb3VwTGFiZWxJc1NldCIsImJHcm91cExhYmVsSXNTZXQiLCJsb2NhbGVDb21wYXJlIiwiZ2V0U2VsZWN0aW9uRmllbGRzIiwiX2VudGl0eVR5cGUkYW5ub3RhdGlvNSIsIl9lbnRpdHlUeXBlJGFubm90YXRpbzYiLCJvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhIiwicGFyYW1ldGVyRmllbGRzIiwic0ZldGNoUHJvcGVydGllcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzUHJvcGVydHlJbmZvIiwicHJvcFNlbGVjdGlvbkZpZWxkcyIsInBhcnNlIiwiZmlsdGVyRmFjZXRzIiwiRmlsdGVyRmFjZXRzIiwiYUZpZWxkR3JvdXBzIiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJpIiwicHJldmlvdXNWYWx1ZSIsImZpbHRlckZhY2V0IiwiX2ZpbHRlckZhY2V0JFRhcmdldCIsIl9maWx0ZXJGYWNldCRUYXJnZXQkJCIsIl9maWx0ZXJGYWNldCRUYXJnZXQkJDIiLCJfZmlsdGVyRmFjZXQkVGFyZ2V0MiIsIl9maWx0ZXJGYWNldCRUYXJnZXQyJCIsIl9maWx0ZXJGYWNldCRUYXJnZXQyJDIiLCJfZmlsdGVyRmFjZXQkVGFyZ2V0MiQzIiwiX2ZpbHRlckZhY2V0JElEIiwiX2ZpbHRlckZhY2V0JExhYmVsIiwiSUQiLCJhbGxGaWx0ZXJzIiwiaXNDYXNlU2Vuc2l0aXZlIiwiZ2V0RXhwYW5kRmlsdGVyRmllbGRzIiwiZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiIsInZhbHVlTGlzdCIsInJlcXVpcmVkUHJvcGVydGllcyIsIkZldGNoVmFsdWVzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWx0ZXJCYXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGVybSwgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5LCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uVHlwZSxcblx0RmlsdGVyRXhwcmVzc2lvblR5cGUsXG5cdEZpbHRlclJlc3RyaWN0aW9ucyxcblx0RmlsdGVyUmVzdHJpY3Rpb25zVHlwZSxcblx0TmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb24sXG5cdFNlYXJjaFJlc3RyaWN0aW9uc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZUxpc3QgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlUeXBlQW5ub3RhdGlvbnMsIFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VkbV9UeXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdERhdGFGaWVsZFdpdGhVcmwsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRTZWxlY3RPcHRpb25UeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB7IGdldFNlbGVjdGlvblZhcmlhbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlUeXBlQ29uZmlnLCBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB7IGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uLCBnZXRUeXBlQ29uZmlnLCBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgVmlzdWFsRmlsdGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvVmlzdWFsRmlsdGVyc1wiO1xuaW1wb3J0IHsgZ2V0VmlzdWFsRmlsdGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvVmlzdWFsRmlsdGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQsIFBvc2l0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IE92ZXJyaWRlVHlwZSwgUGxhY2VtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNDb21wbGV4VHlwZSwgaXNFbnRpdHlTZXQsIGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHksIGlzTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldFJlbGF0aXZlUGF0aHMsIGdldFRhcmdldE5hdmlnYXRpb25QYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgU3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cyB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBUeXBlQ29uZmlnIGZyb20gXCJzYXAvdWkvbWRjL1R5cGVDb25maWdcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0QXZhaWxhYmlsaXR5VHlwZSxcblx0RmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0RmlsdGVyU2V0dGluZ3Ncbn0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcblxuLy9pbXBvcnQgeyBoYXNWYWx1ZUhlbHAgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJGaWVsZCA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0dHlwZT86IHN0cmluZztcblx0a2V5OiBzdHJpbmc7XG5cdGRhdGFUeXBlPzogc3RyaW5nO1xuXHRuYW1lPzogc3RyaW5nO1xuXHRjb25kaXRpb25QYXRoOiBzdHJpbmc7XG5cdGF2YWlsYWJpbGl0eTogQXZhaWxhYmlsaXR5VHlwZTtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRkb2N1bWVudFJlZlRleHQ/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRtZW51Pzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRzZXR0aW5ncz86IEZpbHRlclNldHRpbmdzO1xuXHRpc1BhcmFtZXRlcj86IGJvb2xlYW47XG5cdHZpc3VhbEZpbHRlcj86IFZpc3VhbEZpbHRlcnM7XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBNYW5pZmVzdEZpbHRlckZpZWxkID0gRmlsdGVyRmllbGQgJiB7XG5cdHNsb3ROYW1lPzogc3RyaW5nO1xufTtcblxudHlwZSBGaWx0ZXJHcm91cCA9IHtcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG59O1xuXG5lbnVtIGZpbHRlckZpZWxkVHlwZSB7XG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIixcblx0U2xvdCA9IFwiU2xvdFwiXG59XG5cbmNvbnN0IHNFZG1TdHJpbmcgPSBcIkVkbS5TdHJpbmdcIjtcbmNvbnN0IHNTdHJpbmdEYXRhVHlwZSA9IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCI7XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZCA9IEN1c3RvbUVsZW1lbnQ8TWFuaWZlc3RGaWx0ZXJGaWVsZD47XG5cbi8qKlxuICogRW50ZXIgYWxsIERhdGFGaWVsZHMgb2YgYSBnaXZlbiBGaWVsZEdyb3VwIGludG8gdGhlIGZpbHRlckZhY2V0TWFwLlxuICogQHBhcmFtIGZpZWxkR3JvdXBcbiAqIEByZXR1cm5zIFRoZSBtYXAgb2YgZmFjZXRzIGZvciB0aGUgZ2l2ZW4gRmllbGRHcm91cFxuICovXG5mdW5jdGlvbiBnZXRGaWVsZEdyb3VwRmlsdGVyR3JvdXBzKGZpZWxkR3JvdXA6IEZpZWxkR3JvdXApOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4ge1xuXHRjb25zdCBmaWx0ZXJGYWNldE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+ID0ge307XG5cdGZpZWxkR3JvdXAuRGF0YS5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiKSB7XG5cdFx0XHRmaWx0ZXJGYWNldE1hcFtkYXRhRmllbGQuVmFsdWUucGF0aF0gPSB7XG5cdFx0XHRcdGdyb3VwOiBmaWVsZEdyb3VwLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0Z3JvdXBMYWJlbDogZmllbGRHcm91cC5MYWJlbD8udG9TdHJpbmcoKSA/PyBmaWVsZEdyb3VwLmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/IGZpZWxkR3JvdXAucXVhbGlmaWVyXG5cdFx0XHR9O1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBmaWx0ZXJGYWNldE1hcDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHNlbGVjdGlvbiB2YXJpYW50cyB1c2VkIGluIHRoZSBkaWZmZXJlbnQgdmlzdWFsaXphdGlvbnMgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQuXG4gKiBAcGFyYW0gbHJUYWJsZVZpc3VhbGl6YXRpb25zIFRoZSBsaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGV4Y2x1ZGVkIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKFxuXHRsclRhYmxlVmlzdWFsaXphdGlvbnM6IFRhYmxlVmlzdWFsaXphdGlvbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFNldDxzdHJpbmc+IHtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdGNvbnN0IG1hbmlmZXN0RmlsdGVyRmllbGRzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkuZmlsdGVyRmllbGRzID8/IHt9O1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFtcblx0XHQvL1NlbGVjdGlvbiBGaWVsZHMgY29taW5nIGZyb20gdGhlIGFubm90YXRpb25cblx0XHQuLi4oY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHMgPz8gW10pLm1hcChcblx0XHRcdChzZWxlY3Rpb25GaWVsZCkgPT4gc2VsZWN0aW9uRmllbGQudmFsdWVcblx0XHQpLFxuXHRcdC8vU2VsZWN0aW9uIEZpZWxkcyBjb21pbmcgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIG5vdCB3aXRoIGN1c3RvbSB0ZW1wbGF0ZVxuXHRcdC4uLk9iamVjdC5rZXlzKG1hbmlmZXN0RmlsdGVyRmllbGRzKS5maWx0ZXIoKGtleSkgPT4gISFtYW5pZmVzdEZpbHRlckZpZWxkc1trZXldLnRlbXBsYXRlKVxuXHRdKTtcblxuXHRyZXR1cm4gbmV3IFNldChcblx0XHRsclRhYmxlVmlzdWFsaXphdGlvbnNcblx0XHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdFx0Y29uc3QgdGFibGVGaWx0ZXJzID0gdmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnM7XG5cdFx0XHRcdGlmICghdGFibGVGaWx0ZXJzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBbLi4uKHRhYmxlRmlsdGVycy5oaWRkZW5GaWx0ZXJzPy5wYXRocyA/PyBbXSksIC4uLih0YWJsZUZpbHRlcnMucXVpY2tGaWx0ZXJzPy5wYXRocyA/PyBbXSldLm1hcCgocGF0aCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gcGF0aC5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRpZiAoIXNlbGVjdGlvblZhcmlhbnRQYXRocy5oYXMoYW5ub3RhdGlvblBhdGgpKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aHMuYWRkKGFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRDb25maWcgPSBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbihhbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRpZiAoc2VsZWN0aW9uVmFyaWFudENvbmZpZykge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXMgPSBzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0XHRcdChwcm9wZXJ0eU5hbWUpID0+ICFzZWxlY3Rpb25GaWVsZFBhdGhzLmhhcyhwcm9wZXJ0eU5hbWUpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmZsYXQoMilcblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb25kaXRpb24gcGF0aCByZXF1aXJlZCBmb3IgdGhlIGNvbmRpdGlvbiBtb2RlbC4gSXQgbG9va3MgYXMgZm9sbG93czpcbiAqIDwxOk4tUHJvcGVydHlOYW1lPipcXC88MToxLVByb3BlcnR5TmFtZT4vPFByb3BlcnR5TmFtZT4uXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgcm9vdCBFbnRpdHlUeXBlXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBjb25kaXRpb24gcGF0aFxuICovXG5jb25zdCBfZ2V0Q29uZGl0aW9uUGF0aCA9IGZ1bmN0aW9uIChlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHBhcnRzID0gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0bGV0IHBhcnRpYWxQYXRoO1xuXHRsZXQga2V5ID0gXCJcIjtcblx0d2hpbGUgKHBhcnRzLmxlbmd0aCkge1xuXHRcdGxldCBwYXJ0ID0gcGFydHMuc2hpZnQoKSBhcyBzdHJpbmc7XG5cdFx0cGFydGlhbFBhdGggPSBwYXJ0aWFsUGF0aCA/IGAke3BhcnRpYWxQYXRofS8ke3BhcnR9YCA6IHBhcnQ7XG5cdFx0Y29uc3QgcHJvcGVydHk6IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5ID0gZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwYXJ0aWFsUGF0aCk7XG5cdFx0aWYgKGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0XHRwYXJ0ICs9IFwiKlwiO1xuXHRcdH1cblx0XHRrZXkgPSBrZXkgPyBgJHtrZXl9LyR7cGFydH1gIDogcGFydDtcblx0fVxuXHRyZXR1cm4ga2V5O1xufTtcblxuY29uc3QgX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0eTogUHJvcGVydHksXG5cdGZ1bGxQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdC8vIGlnbm9yZSBjb21wbGV4IHByb3BlcnR5IHR5cGVzIGFuZCBoaWRkZW4gYW5ub3RhdGVkIG9uZXNcblx0aWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LnRhcmdldFR5cGUgPT09IHVuZGVmaW5lZCAmJiAoaW5jbHVkZUhpZGRlbiB8fCBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpICE9PSB0cnVlKSkge1xuXHRcdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKHByb3BlcnR5KSxcblx0XHRcdGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCA9IHtcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0Y29uZGl0aW9uUGF0aDogX2dldENvbmRpdGlvblBhdGgoZW50aXR5VHlwZSwgZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW5GaWx0ZXI/LnZhbHVlT2YoKSA9PT0gdHJ1ZSA/IFwiSGlkZGVuXCIgOiBcIkFkYXB0YXRpb25cIixcblx0XHRcdFx0bGFiZWw6IHByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gcHJvcGVydHkubmFtZSxcblx0XHRcdFx0Z3JvdXA6IHRhcmdldEVudGl0eVR5cGUubmFtZSxcblx0XHRcdFx0Z3JvdXBMYWJlbDogdGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gdGFyZ2V0RW50aXR5VHlwZS5uYW1lXG5cdFx0XHR9O1xuXHRcdGdldFNldHRpbmdzT2ZEZWZhdWx0RmlsdGVyRmllbGRzKGZpbHRlckZpZWxkKTtcblx0XHRyZXR1cm4gZmlsdGVyRmllbGQ7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0ZWNobmljYWwgcHJvcGVydHkgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEuIE9ubHkgcmVsZXZhbnQgZm9yIENyZWF0aW9uRGF0ZVRpbWVcbiAqIGFuZCBMYXN0Q2hhbmdlRGF0ZVRpbWUsIGFzIHRoZXkgYXJlIGRpc3BsYXlpbmcgdGhlIHRpbWVmcmFtZSByZWxhdGVkIHByb3BlcnRpZXMgYXMgYSBTZW1hbnRpY0RhdGVSYW5nZS5cbiAqIEBwYXJhbSBmaWx0ZXJGaWVsZFxuICovXG5jb25zdCBnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQpOiB2b2lkIHtcblx0aWYgKFxuXHRcdGZpbHRlckZpZWxkLmtleSA9PT0gXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YTo6Q3JlYXRpb25EYXRlVGltZVwiIHx8XG5cdFx0ZmlsdGVyRmllbGQua2V5ID09PSBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhOjpMYXN0Q2hhbmdlRGF0ZVRpbWVcIlxuXHQpIHtcblx0XHRjb25zdCBzdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzID0gW1xuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5UTyxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuVE9NT1JST1csXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRXRUVLLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5ORVhUTU9OVEgsXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRRVUFSVEVSLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5ORVhUWUVBUlxuXHRcdF07XG5cdFx0ZmlsdGVyRmllbGQuc2V0dGluZ3MgPSB7XG5cdFx0XHRvcGVyYXRvckNvbmZpZ3VyYXRpb246IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHBhdGg6IFwia2V5XCIsXG5cdFx0XHRcdFx0ZXF1YWxzOiBzdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLmpvaW4oXCIsXCIpLFxuXHRcdFx0XHRcdGV4Y2x1ZGU6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH07XG5cdH1cbn07XG5cbmNvbnN0IF9nZXRTZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdG5hdmlnYXRpb25QYXRoOiBzdHJpbmcsXG5cdHByb3BlcnRpZXM6IEFycmF5PFByb3BlcnR5PiB8IHVuZGVmaW5lZCxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4ge1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHkubmFtZTtcblx0XHRcdGNvbnN0IGZ1bGxQYXRoOiBzdHJpbmcgPSAobmF2aWdhdGlvblBhdGggPyBgJHtuYXZpZ2F0aW9uUGF0aH0vYCA6IFwiXCIpICsgcHJvcGVydHlQYXRoO1xuXHRcdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGQgPSBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQoZW50aXR5VHlwZSwgcHJvcGVydHksIGZ1bGxQYXRoLCBpbmNsdWRlSGlkZGVuLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGlmIChzZWxlY3Rpb25GaWVsZCkge1xuXHRcdFx0XHRzZWxlY3Rpb25GaWVsZE1hcFtmdWxsUGF0aF0gPSBzZWxlY3Rpb25GaWVsZDtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRNYXA7XG59O1xuXG5jb25zdCBfZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0eVBhdGhzOiBBcnJheTxzdHJpbmc+IHwgdW5kZWZpbmVkLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiB7XG5cdGxldCBzZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHt9O1xuXHRpZiAocHJvcGVydHlQYXRocykge1xuXHRcdHByb3BlcnR5UGF0aHMuZm9yRWFjaCgocHJvcGVydHlQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRcdGxldCBsb2NhbFNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdFx0XHRjb25zdCBlbmhhbmNlZFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eT4oXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGhcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eSA9IGVuaGFuY2VkUGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHByb3BlcnR5ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0KCFpbmNsdWRlSGlkZGVuICYmXG5cdFx0XHRcdFx0ZW5oYW5jZWRQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmQoXG5cdFx0XHRcdFx0XHQobmF2aWdhdGlvblByb3BlcnR5KSA9PiBuYXZpZ2F0aW9uUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZVxuXHRcdFx0XHRcdCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzTmF2aWdhdGlvblByb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdFx0XHQvLyBoYW5kbGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRwcm9wZXJ0eS50YXJnZXRUeXBlLmVudGl0eVByb3BlcnRpZXMsXG5cdFx0XHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKGlzQ29tcGxleFR5cGUocHJvcGVydHkudGFyZ2V0VHlwZSkpIHtcblx0XHRcdFx0Ly8gaGFuZGxlIENvbXBsZXhUeXBlIHByb3BlcnRpZXNcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdHByb3BlcnR5LnRhcmdldFR5cGUucHJvcGVydGllcyxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdGdldFRhcmdldE5hdmlnYXRpb25QYXRoKGVuaGFuY2VkUGF0aCwgdHJ1ZSksXG5cdFx0XHRcdFx0W3Byb3BlcnR5XSxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0aW9uRmllbGRzID0ge1xuXHRcdFx0XHQuLi5zZWxlY3Rpb25GaWVsZHMsXG5cdFx0XHRcdC4uLmxvY2FsU2VsZWN0aW9uRmllbGRzXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG59O1xuXG5jb25zdCBfZ2V0RmlsdGVyRmllbGQgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+LFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdGxldCBmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBmaWx0ZXJGaWVsZHNbcHJvcGVydHlQYXRoXTtcblx0aWYgKGZpbHRlckZpZWxkKSB7XG5cdFx0ZGVsZXRlIGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdO1xuXHR9IGVsc2Uge1xuXHRcdGZpbHRlckZpZWxkID0gX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkKGVudGl0eVR5cGUsIGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocHJvcGVydHlQYXRoKSwgcHJvcGVydHlQYXRoLCB0cnVlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0fVxuXHRpZiAoIWZpbHRlckZpZWxkKSB7XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREaWFnbm9zdGljcygpPy5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1JU1NJTkdfU0VMRUNUSU9ORklFTEQpO1xuXHR9XG5cdC8vIGRlZmluZWQgU2VsZWN0aW9uRmllbGRzIGFyZSBhdmFpbGFibGUgYnkgZGVmYXVsdFxuXHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgPSBmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgPT09IFwiSGlkZGVuXCIgPyBcIkhpZGRlblwiIDogXCJEZWZhdWx0XCI7XG5cdFx0ZmlsdGVyRmllbGQuaXNQYXJhbWV0ZXIgPSAhIWVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dDtcblx0fVxuXHRyZXR1cm4gZmlsdGVyRmllbGQ7XG59O1xuXG5jb25zdCBfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0YVNlbGVjdE9wdGlvbnM6IFNlbGVjdE9wdGlvblR5cGVbXSxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IFNldDxzdHJpbmc+LFxuXHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM6IFByb3BlcnR5UGF0aFtdXG4pOiBGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gW107XG5cdGNvbnN0IFVJU2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzO1xuXHQvLyBVc2luZyBlbnRpdHlUeXBlIGluc3RlYWQgb2YgZW50aXR5U2V0XG5cdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8uZm9yRWFjaCgoU2VsZWN0aW9uRmllbGQpID0+IHtcblx0XHRVSVNlbGVjdGlvbkZpZWxkc1tTZWxlY3Rpb25GaWVsZC52YWx1ZV0gPSB0cnVlO1xuXHR9KTtcblx0aWYgKGFTZWxlY3RPcHRpb25zICYmIGFTZWxlY3RPcHRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRhU2VsZWN0T3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0T3B0aW9uOiBTZWxlY3RPcHRpb25UeXBlKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IHByb3BlcnR5TmFtZT8udmFsdWU7XG5cdFx0XHRjb25zdCBjdXJyZW50U2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXHRcdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzPy5mb3JFYWNoKChTZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFx0XHRjdXJyZW50U2VsZWN0aW9uRmllbGRzW1NlbGVjdGlvbkZpZWxkLnZhbHVlXSA9IHRydWU7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChzUHJvcGVydHlQYXRoICYmICFleGNsdWRlZEZpbHRlclByb3BlcnRpZXMuaGFzKHNQcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdGlmICghKHNQcm9wZXJ0eVBhdGggaW4gY3VycmVudFNlbGVjdGlvbkZpZWxkcykpIHtcblx0XHRcdFx0XHRjb25zdCBGaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBnZXRGaWx0ZXJGaWVsZChzUHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRpZiAoRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKEZpbHRlckZpZWxkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IGRlZmF1bHRGaWx0ZXJWYWx1ZSA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkZpbHRlckRlZmF1bHRWYWx1ZTtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHByb3BlcnR5Lm5hbWU7XG5cdFx0XHRpZiAoIShwcm9wZXJ0eVBhdGggaW4gZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKSkge1xuXHRcdFx0XHRpZiAoZGVmYXVsdEZpbHRlclZhbHVlICYmICEocHJvcGVydHlQYXRoIGluIFVJU2VsZWN0aW9uRmllbGRzKSkge1xuXHRcdFx0XHRcdGNvbnN0IEZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGdldEZpbHRlckZpZWxkKHByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG5cdFx0XHRcdFx0aWYgKEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChGaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcbn07XG5cbi8qKlxuICogR2V0IGFsbCBwYXJhbWV0ZXIgZmlsdGVyIGZpZWxkcyBpbiBjYXNlIG9mIGEgcGFyYW1ldGVyaXplZCBzZXJ2aWNlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHBhcmFtZXRlciBGaWx0ZXJGaWVsZHNcbiAqL1xuZnVuY3Rpb24gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBwYXJhbWV0ZXJFbnRpdHlUeXBlID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRjb25zdCBpc1BhcmFtZXRlcml6ZWQgPSAhIXBhcmFtZXRlckVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dCAmJiAhZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQ7XG5cdGNvbnN0IHBhcmFtZXRlckNvbnZlcnRlckNvbnRleHQgPVxuXHRcdGlzUGFyYW1ldGVyaXplZCAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8RW50aXR5U2V0PihgLyR7ZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lfWApO1xuXG5cdHJldHVybiAoXG5cdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dFxuXHRcdFx0PyBwYXJhbWV0ZXJFbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMubWFwKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuXHRcdFx0XHRcdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0XHR7fSBhcyBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4sXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHBhcmFtZXRlckVudGl0eVR5cGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0ICB9KVxuXHRcdFx0OiBbXVxuXHQpIGFzIEZpbHRlckZpZWxkW107XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgRmlsdGVyQmFyIHNlYXJjaCBmaWVsZCBpcyBoaWRkZW4gb3Igbm90LlxuICogQHBhcmFtIGxpc3RSZXBvcnRUYWJsZXMgVGhlIGxpc3QgcmVwb3J0IHRhYmxlc1xuICogQHBhcmFtIGNoYXJ0cyBUaGUgQUxQIGNoYXJ0c1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgaW5mb3JtYXRpb24gaWYgdGhlIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaXMgaGlkZGVuIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyQmFySGlkZUJhc2ljU2VhcmNoID0gZnVuY3Rpb24gKFxuXHRsaXN0UmVwb3J0VGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSxcblx0Y2hhcnRzOiBDaGFydFZpc3VhbGl6YXRpb25bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBib29sZWFuIHtcblx0Ly8gQ2hlY2sgaWYgY2hhcnRzIGFsbG93IHNlYXJjaFxuXHRjb25zdCBub1NlYXJjaEluQ2hhcnRzID0gY2hhcnRzLmxlbmd0aCA9PT0gMCB8fCBjaGFydHMuZXZlcnkoKGNoYXJ0KSA9PiAhY2hhcnQuYXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoKTtcblxuXHQvLyBDaGVjayBpZiBhbGwgdGFibGVzIGFyZSBhbmFseXRpY2FsIGFuZCBub25lIG9mIHRoZW0gYWxsb3cgZm9yIHNlYXJjaFxuXHQvLyBvciBhbGwgdGFibGVzIGFyZSBUcmVlVGFibGUgYW5kIG5vbmUgb2YgdGhlbSBhbGxvdyBmb3Igc2VhcmNoXG5cdGNvbnN0IG5vU2VhcmNoSW5UYWJsZXMgPVxuXHRcdGxpc3RSZXBvcnRUYWJsZXMubGVuZ3RoID09PSAwIHx8XG5cdFx0bGlzdFJlcG9ydFRhYmxlcy5ldmVyeSgodGFibGUpID0+ICh0YWJsZS5lbmFibGVBbmFseXRpY3MgfHwgdGFibGUuY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSAmJiAhdGFibGUuZW5hYmxlQmFzaWNTZWFyY2gpO1xuXG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRpZiAoY29udGV4dFBhdGggJiYgbm9TZWFyY2hJbkNoYXJ0cyAmJiBub1NlYXJjaEluVGFibGVzKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBmaWx0ZXIgZmllbGRzIGZyb20gdGhlIG1hbmlmZXN0LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgZW50aXR5VHlwZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gYW5ub3RhdGlvblBhdGggQW5ub3RhdGlvbiBwYXRoIG9mIHRoZSBzZWxlY3Rpb24gZmllbGRzXG4gKiBAcmV0dXJucyBUaGUgZmlsdGVyIGZpZWxkcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICovXG5leHBvcnQgY29uc3QgZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmdcbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXG5cdGNvbnN0IHNldHRpbmdzQ29udGV4dFBhdGggPVxuXHRcdG1hbmlmZXN0V3JhcHBlci5nZXRDb250ZXh0UGF0aCgpIHx8IChtYW5pZmVzdFdyYXBwZXIuZ2V0RW50aXR5U2V0KCkgPyBgLyR7bWFuaWZlc3RXcmFwcGVyLmdldEVudGl0eVNldCgpfWAgOiB1bmRlZmluZWQpO1xuXHRjb25zdCBmaWx0ZXJDb25maWd1cmF0aW9uUGF0aCA9IGdldEZpbHRlckNvbmZpZ3VyYXRpb25QYXRoKGNvbnZlcnRlckNvbnRleHQsIHNldHRpbmdzQ29udGV4dFBhdGgsIGFubm90YXRpb25QYXRoKTtcblx0bGV0IGZiQ29uZmlnOiBGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSB7fTtcblx0ZmJDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbihmaWx0ZXJDb25maWd1cmF0aW9uUGF0aCk7XG5cblx0Y29uc3QgZGVmaW5lZEZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24+ID0gZmJDb25maWc/LmZpbHRlckZpZWxkcyB8fCB7fTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBfZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0T2JqZWN0LmtleXMoZGVmaW5lZEZpbHRlckZpZWxkcykubWFwKChrZXkpID0+IGRlZmluZWRGaWx0ZXJGaWVsZHNba2V5XS5wcm9wZXJ0eSA/PyBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShrZXkpKSxcblx0XHR0cnVlLFxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0KTtcblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+ID0ge307XG5cblx0Zm9yIChjb25zdCBzS2V5IGluIGRlZmluZWRGaWx0ZXJGaWVsZHMpIHtcblx0XHRjb25zdCBmaWx0ZXJGaWVsZCA9IGRlZmluZWRGaWx0ZXJGaWVsZHNbc0tleV07XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gZmlsdGVyRmllbGQucHJvcGVydHkgPz8gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoc0tleSk7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGQgPSBzZWxlY3Rpb25GaWVsZHNbcHJvcGVydHlOYW1lXTtcblx0XHRjb25zdCB0eXBlID0gZmlsdGVyRmllbGQudHlwZSA9PT0gXCJTbG90XCIgPyBmaWx0ZXJGaWVsZFR5cGUuU2xvdCA6IGZpbHRlckZpZWxkVHlwZS5EZWZhdWx0O1xuXHRcdGNvbnN0IHZpc3VhbEZpbHRlciA9XG5cdFx0XHRmaWx0ZXJGaWVsZCAmJiBmaWx0ZXJGaWVsZD8udmlzdWFsRmlsdGVyXG5cdFx0XHRcdD8gZ2V0VmlzdWFsRmlsdGVycyhlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBzS2V5LCBkZWZpbmVkRmlsdGVyRmllbGRzKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAoZmlsdGVyRmllbGQudGVtcGxhdGUgfHwgZmlsdGVyRmllbGQudHlwZSA9PT0gZmlsdGVyRmllbGRUeXBlLlNsb3QpIHtcblx0XHRcdGlmIChmaWx0ZXJGaWVsZC5zZXR0aW5ncykge1xuXHRcdFx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncy5pc0N1c3RvbUZpbHRlciA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncyA9IHtcblx0XHRcdFx0XHRpc0N1c3RvbUZpbHRlcjogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmaWx0ZXJGaWVsZHNbc0tleV0gPSB7XG5cdFx0XHRrZXk6IHNLZXksXG5cdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0c2xvdE5hbWU6IGZpbHRlckZpZWxkPy5zbG90TmFtZSB8fCBzS2V5LFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IHNlbGVjdGlvbkZpZWxkPy5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdGNvbmRpdGlvblBhdGg6IGZpbHRlckZpZWxkLnByb3BlcnR5XG5cdFx0XHRcdD8gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoc0tleSlcblx0XHRcdFx0OiBzZWxlY3Rpb25GaWVsZD8uY29uZGl0aW9uUGF0aCB8fCBwcm9wZXJ0eU5hbWUsXG5cdFx0XHRkb2N1bWVudFJlZlRleHQ6XG5cdFx0XHRcdGZpbHRlckZpZWxkLnByb3BlcnR5ICYmXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbChcblx0XHRcdFx0XHRcInttZXRhTW9kZWw+XCIgKyBmaWx0ZXJGaWVsZC5wcm9wZXJ0eSArIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Eb2N1bWVudGF0aW9uUmVmfVwiXG5cdFx0XHRcdCksXG5cdFx0XHR0ZW1wbGF0ZTogZmlsdGVyRmllbGQudGVtcGxhdGUsXG5cdFx0XHRsYWJlbDogY29udmVydGVyQ29udGV4dC5mZXRjaFRleHRGcm9tTWV0YU1vZGVsKGZpbHRlckZpZWxkLmxhYmVsKSxcblx0XHRcdHBvc2l0aW9uOiBmaWx0ZXJGaWVsZC5wb3NpdGlvbiB8fCB7IHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyIH0sXG5cdFx0XHRhdmFpbGFiaWxpdHk6IGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSB8fCBcIkRlZmF1bHRcIixcblx0XHRcdHNldHRpbmdzOiBmaWx0ZXJGaWVsZC5zZXR0aW5ncyxcblx0XHRcdHZpc3VhbEZpbHRlcjogdmlzdWFsRmlsdGVyLFxuXHRcdFx0cmVxdWlyZWQ6IGZpbHRlckZpZWxkLnJlcXVpcmVkXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gZmlsdGVyRmllbGRzO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGNvbmZpZ3VyYXRpb24gcGF0aCB0byBmZXRjaCB0aGUgY3VzdG9tIGZpbHRlciBmaWVsZHMgZnJvbSBtYW5pZmVzdC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHNldHRpbmdzQ29udGV4dFBhdGggTWFuaWZlc3QgZW50aXR5IHNldCBwYXRoIGFuZCBjb250ZXh0IHBhdGhcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aCBUaGUgYW5ub3RhdGlvbiBwYXRoXG4gKiBAcmV0dXJucyBQYXRoIHRvIGZldGNoIHRoZSBjdXN0b20gZmlsdGVycyBmcm9tIHRoZSBtYW5pZmVzdFxuICovXG5jb25zdCBnZXRGaWx0ZXJDb25maWd1cmF0aW9uUGF0aCA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzZXR0aW5nc0NvbnRleHRQYXRoPzogc3RyaW5nLFxuXHRhbm5vdGF0aW9uUGF0aD86IHN0cmluZ1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IG9iamVjdFBhdGg7XG5cdGNvbnN0IGZpbHRlckJhckNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBtZXRhUGF0aCA9IGAke2ZpbHRlckJhckNvbnRleHRQYXRofS8ke2Fubm90YXRpb25QYXRofWA7XG5cdGlmIChzZXR0aW5nc0NvbnRleHRQYXRoICYmIG1ldGFQYXRoPy5zdGFydHNXaXRoKHNldHRpbmdzQ29udGV4dFBhdGgpICYmIGFubm90YXRpb25QYXRoKSB7XG5cdFx0b2JqZWN0UGF0aCA9IG1ldGFQYXRoLnJlcGxhY2UoYCR7c2V0dGluZ3NDb250ZXh0UGF0aH0vYCwgXCJcIik7XG5cdH0gZWxzZSB7XG5cdFx0b2JqZWN0UGF0aCA9IGFubm90YXRpb25QYXRoO1xuXHR9XG5cdHJldHVybiBvYmplY3RQYXRoID8gb2JqZWN0UGF0aCA6IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJGaWVsZCA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gX2dldEZpbHRlckZpZWxkKHt9LCBwcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlclJlc3RyaWN0aW9ucyA9IGZ1bmN0aW9uIChcblx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IEZpbHRlclJlc3RyaWN0aW9uc1R5cGUgfCB1bmRlZmluZWQsXG5cdHNSZXN0cmljdGlvbjogXCJSZXF1aXJlZFByb3BlcnRpZXNcIiB8IFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIlxuKTogc3RyaW5nW10ge1xuXHRsZXQgYVByb3BzOiBzdHJpbmdbXSA9IFtdO1xuXHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXSkge1xuXHRcdGFQcm9wcyA9IG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbl0ubWFwKGZ1bmN0aW9uIChvUHJvcGVydHkpIHtcblx0XHRcdHJldHVybiBvUHJvcGVydHkudmFsdWU7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGFQcm9wcztcbn07XG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uOiBGaWx0ZXJSZXN0cmljdGlvbnNUeXBlIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJFeHByZXNzaW9uVHlwZVtdPiB7XG5cdGNvbnN0IG1BbGxvd2VkRXhwcmVzc2lvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckV4cHJlc3Npb25UeXBlW10+ID0ge307XG5cdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbi5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKSB7XG5cdFx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHk6IEZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGUpIHtcblx0XHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRcdGlmIChvUHJvcGVydHkuUHJvcGVydHk/LnZhbHVlICYmIG9Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMpIHtcblx0XHRcdFx0aWYgKG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5Py52YWx1ZV0pIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eT8udmFsdWVdLnB1c2gob1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucy50b1N0cmluZygpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eT8udmFsdWVdID0gW29Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMudG9TdHJpbmcoKV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gbUFsbG93ZWRFeHByZXNzaW9ucztcbn07XG5cbmNvbnN0IGdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uICgpOiBQcm9wZXJ0eUluZm8ge1xuXHRyZXR1cm4ge1xuXHRcdG5hbWU6IFwiJHNlYXJjaFwiLFxuXHRcdHBhdGg6IFwiJHNlYXJjaFwiLFxuXHRcdGRhdGFUeXBlOiBzU3RyaW5nRGF0YVR5cGUsXG5cdFx0bWF4Q29uZGl0aW9uczogMVxuXHR9O1xufTtcblxuY29uc3QgZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKCk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0bmFtZTogXCIkZWRpdFN0YXRlXCIsXG5cdFx0cGF0aDogXCIkZWRpdFN0YXRlXCIsXG5cdFx0Z3JvdXBMYWJlbDogXCJcIixcblx0XHRncm91cDogXCJcIixcblx0XHRkYXRhVHlwZTogc1N0cmluZ0RhdGFUeXBlLFxuXHRcdGhpZGRlbkZpbHRlcjogZmFsc2Vcblx0fTtcbn07XG5cbmNvbnN0IGdldFNlYXJjaFJlc3RyaWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBTZWFyY2hSZXN0cmljdGlvbnMgfCB1bmRlZmluZWQge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRyZXR1cm4gaXNFbnRpdHlTZXQoZW50aXR5U2V0KSA/IGVudGl0eVNldC5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LlNlYXJjaFJlc3RyaWN0aW9ucyA6IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHNOYXZpZ2F0aW9uUGF0aDogc3RyaW5nXG4pOiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uTmF2aWdhdGlvblJlc3RyaWN0aW9ucztcblx0Y29uc3QgYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuUmVzdHJpY3RlZFByb3BlcnRpZXM7XG5cdHJldHVybiAoXG5cdFx0YVJlc3RyaWN0ZWRQcm9wZXJ0aWVzICYmXG5cdFx0YVJlc3RyaWN0ZWRQcm9wZXJ0aWVzLmZpbmQoZnVuY3Rpb24gKG9SZXN0cmljdGVkUHJvcGVydHkpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG9SZXN0cmljdGVkUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkudmFsdWUgPT09IHNOYXZpZ2F0aW9uUGF0aFxuXHRcdFx0KTtcblx0XHR9KVxuXHQpO1xufTtcbi8vIFRoZSBwcm9wZXJ0eUluZm8gdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiBGRVxuZXhwb3J0IHR5cGUgUHJvcGVydHlJbmZvID0ge1xuXHRrZXk/OiBzdHJpbmc7XG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nO1xuXHRjb25kaXRpb25QYXRoPzogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR0b29sdGlwPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogYm9vbGVhbjtcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcblx0bWF4Q29uZGl0aW9ucz86IG51bWJlcjtcblx0ZGF0YVR5cGU/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRoaWRkZW5GaWx0ZXI/OiBib29sZWFuO1xuXHRkaXNwbGF5Pzogc3RyaW5nO1xuXHRpc1BhcmFtZXRlcj86IGJvb2xlYW47XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xuXHRhdmFpbGFiaWxpdHk/OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRwb3NpdGlvbj86IFBvc2l0aW9uO1xuXHR0eXBlPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0bWVudT86IHN0cmluZztcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRmaWx0ZXJFeHByZXNzaW9uPzogc3RyaW5nO1xuXHRpc0N1c3RvbUZpbHRlcj86IGJvb2xlYW47XG5cdGNvbnN0cmFpbnRzPzogb2JqZWN0O1xuXHRmb3JtYXRPcHRpb25zPzogb2JqZWN0O1xuXHRzZXR0aW5ncz86IEZpbHRlclNldHRpbmdzO1xuXHR2aXN1YWxGaWx0ZXI/OiBWaXN1YWxGaWx0ZXJzO1xuXHR0eXBlQ29uZmlnPzogVHlwZUNvbmZpZztcblx0ZmlsdGVyYWJsZT86IGJvb2xlYW47XG59O1xuXG4vLyBUaGUgcHJvcGVydHlJbmZvIHdlIHNoYXJlIHdpdGggTURDXG5leHBvcnQgdHlwZSBQcm9wZXJ0eUluZm9FeHRlcm5hbCA9IHtcblx0a2V5OiBzdHJpbmc7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdGRhdGFUeXBlOiBzdHJpbmc7XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0Y29uc3RyYWludHM/OiBvYmplY3Q7XG5cdGZvcm1hdE9wdGlvbnM/OiBvYmplY3Q7XG5cdG1heENvbmRpdGlvbnM/OiBudW1iZXI7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHR0b29sdGlwPzogc3RyaW5nO1xuXHRwYXRoPzogc3RyaW5nO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGhpZGRlbkZpbHRlcj86IGJvb2xlYW47XG59O1xuY29uc3QgX2ZldGNoQmFzaWNQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAob0ZpbHRlckZpZWxkSW5mbzogRmlsdGVyRmllbGQgfCBQcm9wZXJ0eUluZm8pOiBQcm9wZXJ0eUluZm8ge1xuXHRyZXR1cm4ge1xuXHRcdGtleTogb0ZpbHRlckZpZWxkSW5mby5rZXksXG5cdFx0YW5ub3RhdGlvblBhdGg6IG9GaWx0ZXJGaWVsZEluZm8uYW5ub3RhdGlvblBhdGgsXG5cdFx0Y29uZGl0aW9uUGF0aDogb0ZpbHRlckZpZWxkSW5mby5jb25kaXRpb25QYXRoLFxuXHRcdG5hbWU6IG9GaWx0ZXJGaWVsZEluZm8uY29uZGl0aW9uUGF0aCEsXG5cdFx0bGFiZWw6IG9GaWx0ZXJGaWVsZEluZm8ubGFiZWwsXG5cdFx0aGlkZGVuRmlsdGVyOiBvRmlsdGVyRmllbGRJbmZvLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIixcblx0XHRkaXNwbGF5OiBcIlZhbHVlXCIsXG5cdFx0aXNQYXJhbWV0ZXI6IG9GaWx0ZXJGaWVsZEluZm8uaXNQYXJhbWV0ZXIsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogb0ZpbHRlckZpZWxkSW5mby5jYXNlU2Vuc2l0aXZlLFxuXHRcdGF2YWlsYWJpbGl0eTogb0ZpbHRlckZpZWxkSW5mby5hdmFpbGFiaWxpdHksXG5cdFx0cG9zaXRpb246IG9GaWx0ZXJGaWVsZEluZm8ucG9zaXRpb24sXG5cdFx0dHlwZTogb0ZpbHRlckZpZWxkSW5mby50eXBlLFxuXHRcdHRlbXBsYXRlOiBvRmlsdGVyRmllbGRJbmZvLnRlbXBsYXRlLFxuXHRcdG1lbnU6IG9GaWx0ZXJGaWVsZEluZm8ubWVudSxcblx0XHRyZXF1aXJlZDogb0ZpbHRlckZpZWxkSW5mby5yZXF1aXJlZCxcblx0XHRpc0N1c3RvbUZpbHRlcjogb0ZpbHRlckZpZWxkSW5mby5zZXR0aW5ncz8uaXNDdXN0b21GaWx0ZXJcblx0fTtcbn07XG5cbmNvbnN0IF9nZXRNaXNzaW5nTGFiZWxGb3JNYW5pZmVzdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZmlsdGVyRmllbGRzOiBNYW5pZmVzdEZpbHRlckZpZWxkW10sXG5cdG1hbmlmZXN0RmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+XG4pOiB2b2lkIHtcblx0ZmlsdGVyRmllbGRzLmZvckVhY2goKGZpbHRlckZpZWxkKSA9PiB7XG5cdFx0aWYgKG1hbmlmZXN0RmlsdGVyRmllbGRzLmhhc093blByb3BlcnR5KGZpbHRlckZpZWxkLmtleSkgJiYgIW1hbmlmZXN0RmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkLmtleV0ubGFiZWwpIHtcblx0XHRcdG1hbmlmZXN0RmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkLmtleV0ubGFiZWwgPSBmaWx0ZXJGaWVsZC5sYWJlbDtcblx0XHR9XG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoYUV4cHJlc3Npb25zOiBzdHJpbmdbXSk6IHN0cmluZyB7XG5cdGNvbnN0IGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSA9IFtcblx0XHRcIlNpbmdsZVZhbHVlXCIsXG5cdFx0XCJNdWx0aVZhbHVlXCIsXG5cdFx0XCJTaW5nbGVSYW5nZVwiLFxuXHRcdFwiTXVsdGlSYW5nZVwiLFxuXHRcdFwiU2VhcmNoRXhwcmVzc2lvblwiLFxuXHRcdFwiTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblwiXG5cdF07XG5cblx0YUV4cHJlc3Npb25zLnNvcnQoZnVuY3Rpb24gKGE6IHN0cmluZywgYjogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eS5pbmRleE9mKGEpIC0gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYik7XG5cdH0pO1xuXG5cdHJldHVybiBhRXhwcmVzc2lvbnNbMF07XG59O1xuXG5leHBvcnQgY29uc3QgZGlzcGxheU1vZGUgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eUFubm90YXRpb25zOiBQcm9wZXJ0eUFubm90YXRpb25zIHwgdW5kZWZpbmVkLFxuXHRvQ29sbGVjdGlvbkFubm90YXRpb25zOiBFbnRpdHlUeXBlQW5ub3RhdGlvbnMgfCB1bmRlZmluZWRcbik6IHN0cmluZyB7XG5cdGNvbnN0IG9UZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eUFubm90YXRpb25zPy5Db21tb24/LlRleHQsXG5cdFx0b1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbiA9XG5cdFx0XHRvVGV4dEFubm90YXRpb24gJiZcblx0XHRcdCgob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dD8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpIHx8XG5cdFx0XHRcdChvQ29sbGVjdGlvbkFubm90YXRpb25zICYmIG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpKTtcblxuXHRpZiAob1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbikge1xuXHRcdGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uLnZhbHVlT2YoKSA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCIpIHtcblx0XHRcdHJldHVybiBcIkRlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uLnZhbHVlT2YoKSA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRMYXN0XCIpIHtcblx0XHRcdHJldHVybiBcIlZhbHVlRGVzY3JpcHRpb25cIjtcblx0XHR9XG5cdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25WYWx1ZVwiOyAvL1RleHRGaXJzdFxuXHR9XG5cdHJldHVybiBvVGV4dEFubm90YXRpb24gPyBcIkRlc2NyaXB0aW9uVmFsdWVcIiA6IFwiVmFsdWVcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRvRmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCB8IFByb3BlcnR5SW5mbyxcblx0b1R5cGVDb25maWc6IFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPlxuKTogUHJvcGVydHlJbmZvIHtcblx0bGV0IG9Qcm9wZXJ0eUluZm8gPSBfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyhvRmlsdGVyRmllbGRJbmZvKTtcblx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aDtcblxuXHRpZiAoIXNBbm5vdGF0aW9uUGF0aCkge1xuXHRcdHJldHVybiBvUHJvcGVydHlJbmZvO1xuXHR9XG5cdGNvbnN0IHRhcmdldFByb3BlcnR5T2JqZWN0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFByb3BlcnR5PihzQW5ub3RhdGlvblBhdGgpLmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q7XG5cblx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSB0YXJnZXRQcm9wZXJ0eU9iamVjdD8uYW5ub3RhdGlvbnM7XG5cdGNvbnN0IG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucztcblxuXHRjb25zdCBvRm9ybWF0T3B0aW9ucyA9IG9UeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnM7XG5cdGNvbnN0IG9Db25zdHJhaW50cyA9IG9UeXBlQ29uZmlnLmNvbnN0cmFpbnRzO1xuXHRvUHJvcGVydHlJbmZvID0gT2JqZWN0LmFzc2lnbihvUHJvcGVydHlJbmZvLCB7XG5cdFx0Zm9ybWF0T3B0aW9uczogb0Zvcm1hdE9wdGlvbnMsXG5cdFx0Y29uc3RyYWludHM6IG9Db25zdHJhaW50cyxcblx0XHRkaXNwbGF5OiBkaXNwbGF5TW9kZShvUHJvcGVydHlBbm5vdGF0aW9ucywgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucylcblx0fSk7XG5cdHJldHVybiBvUHJvcGVydHlJbmZvO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzTXVsdGlWYWx1ZSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5SW5mbyk6IGJvb2xlYW4ge1xuXHRsZXQgYklzTXVsdGlWYWx1ZSA9IHRydWU7XG5cdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0c3dpdGNoIChvUHJvcGVydHkuZmlsdGVyRXhwcmVzc2lvbikge1xuXHRcdGNhc2UgXCJTZWFyY2hFeHByZXNzaW9uXCI6XG5cdFx0Y2FzZSBcIlNpbmdsZVJhbmdlXCI6XG5cdFx0Y2FzZSBcIlNpbmdsZVZhbHVlXCI6XG5cdFx0XHRiSXNNdWx0aVZhbHVlID0gZmFsc2U7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0aWYgKG9Qcm9wZXJ0eS50eXBlICYmIG9Qcm9wZXJ0eS50eXBlLmluZGV4T2YoXCJCb29sZWFuXCIpID4gMCkge1xuXHRcdGJJc011bHRpVmFsdWUgPSBmYWxzZTtcblx0fVxuXHRyZXR1cm4gYklzTXVsdGlWYWx1ZTtcbn07XG5cbmNvbnN0IF9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGVudHJ5OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzXG4pOiBlbnRyeSBpcyBBbm5vdGF0aW9uVGVybTxEYXRhRmllbGQgfCBEYXRhRmllbGRXaXRoVXJsIHwgRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoPiB7XG5cdHJldHVybiAoXG5cdFx0KGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHxcblx0XHRcdGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsIHx8XG5cdFx0XHRlbnRyeS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoKSAmJlxuXHRcdGVudHJ5LlZhbHVlLnBhdGg/LmluY2x1ZGVzKFwiL1wiKVxuXHQpO1xufTtcblxuLyoqXG4gKiBBZGRzIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHdoaWNoIHJlZmVyZW5jZXMgdG8gdGhlIHVuaXQsIHRpbWV6b25lLCB0ZXh0QXJyYW5nZW1lbnQgb3IgY3VycmVuY3kgZnJvbSBhIGRhdGEgZmllbGQuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIHRvIGJlIGNvbnNpZGVyZWRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIG5hdlByb3BlcnRpZXMgVGhlIGxpc3Qgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKi9cbmNvbnN0IGFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRuYXZQcm9wZXJ0aWVzOiBzdHJpbmdbXVxuKTogdm9pZCB7XG5cdGNvbnN0IHRhcmdldFByb3BlcnR5ID0gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGQpLlZhbHVlPy4kdGFyZ2V0O1xuXHRpZiAodGFyZ2V0UHJvcGVydHkpIHtcblx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlQYXRoID1cblx0XHRcdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpO1xuXHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSA9IGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGhcblx0XHRcdD8gZW5oYW5jZURhdGFNb2RlbFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAobmF2aWdhdGlvblByb3BlcnR5Py5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlbMF0ubmFtZTtcblx0XHRcdGlmICghbmF2UHJvcGVydGllcy5pbmNsdWRlcyhuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRuYXZQcm9wZXJ0aWVzLnB1c2gobmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEdldHMgdXNlZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgZm9yIGF2YWlsYWJsZSBkYXRhRmllbGQuXG4gKiBAcGFyYW0gbmF2UHJvcGVydGllcyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqL1xuY29uc3QgZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseSA9IGZ1bmN0aW9uIChcblx0bmF2UHJvcGVydGllczogc3RyaW5nW10sXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBzdHJpbmdbXSB7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0aWYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZSkge1xuXHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdFx0XHRnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5KG5hdlByb3BlcnRpZXMsIGlubmVyRGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRpZiAoX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eShkYXRhRmllbGQpKSB7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKFxuXHRcdFx0XHRcdGVuaGFuY2VEYXRhTW9kZWxQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBkYXRhRmllbGQuVmFsdWUucGF0aCksXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpLmpvaW4oXCIvXCIpO1xuXHRcdFx0XHRpZiAoIW5hdlByb3BlcnRpZXMuaW5jbHVkZXMobmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0XHRuYXZQcm9wZXJ0aWVzLnB1c2gobmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIEFkZGl0aW9uYWwgcHJvcGVydHkgZnJvbSB0ZXh0IGFycmFuZ2VtZW50L3VuaXRzL2N1cnJlbmNpZXMvdGltZXpvbmUuLi5cblx0XHRcdGFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMoZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZQcm9wZXJ0aWVzKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyBPdGhlciB0eXBlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIG5hdlByb3BlcnRpZXM7XG59O1xuXG5jb25zdCBnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW10sXG5cdGFubm90YXRpb25QYXRoID0gXCJcIixcblx0aW5jbHVkZUhpZGRlbiA9IGZhbHNlLFxuXHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcbik6IHtcblx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBTZXQ8c3RyaW5nPjtcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZTtcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBQcm9wZXJ0eVBhdGhbXTtcblx0ZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD47XG5cdHByb3BlcnR5SW5mb0ZpZWxkczogRmlsdGVyRmllbGRbXTtcblx0ZGVmYXVsdEZpbHRlckZpZWxkczogRmlsdGVyRmllbGRbXTtcbn0ge1xuXHQvLyBjcmVhdGUgYSBtYXAgb2YgcHJvcGVydGllcyB0byBiZSB1c2VkIGluIHNlbGVjdGlvbiB2YXJpYW50cyBkZWZpbmVkIGluIHRoZSBkaWZmZXJlbnQgdmlzdWFsaXphdGlvbnMgYW5kIGRpZmZlcmVudCB2aWV3cyAobXVsdGkgdGFibGUgbW9kZSlcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzID0gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKGxyVGFibGVzLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHQvL0ZpbHRlcnMgd2hpY2ggaGFzIHRvIGJlIGFkZGVkIHdoaWNoIGlzIHBhcnQgb2YgU1YvRGVmYXVsdCBhbm5vdGF0aW9ucyBidXQgbm90IHByZXNlbnQgaW4gdGhlIFNlbGVjdGlvbkZpZWxkc1xuXHRjb25zdCBhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMgPSAoKGFubm90YXRpb25QYXRoICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oYW5ub3RhdGlvblBhdGgpPy5hbm5vdGF0aW9uKSB8fFxuXHRcdGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHMgfHxcblx0XHRbXSkgYXMgUHJvcGVydHlQYXRoW107XG5cblx0bGV0IG5hdlByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdGlmIChsclRhYmxlcy5sZW5ndGggPT09IDAgJiYgISFsaW5lSXRlbVRlcm0pIHtcblx0XHQoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihsaW5lSXRlbVRlcm0pLmFubm90YXRpb24gYXMgTGluZUl0ZW0pPy5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdG5hdlByb3BlcnRpZXMgPSBnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5KG5hdlByb3BlcnRpZXMsIGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSkpIHtcblx0XHRuYXZQcm9wZXJ0aWVzLnB1c2goXG5cdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0NyZWF0aW9uRGF0ZVRpbWVcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvQ3JlYXRlZEJ5VXNlclwiLFxuXHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZWRCeVVzZXJcIlxuXHRcdCk7XG5cdH1cblxuXHQvLyBjcmVhdGUgYSBtYXAgb2YgYWxsIHBvdGVudGlhbCBmaWx0ZXIgZmllbGRzIGJhc2VkIG9uLi4uXG5cdGNvbnN0IGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge1xuXHRcdC8vIC4uLm5vbiBoaWRkZW4gcHJvcGVydGllcyBvZiB0aGUgZW50aXR5XG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkcyhlbnRpdHlUeXBlLCBcIlwiLCBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMsIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIC4uLiBub24gaGlkZGVuIHByb3BlcnRpZXMgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aChlbnRpdHlUeXBlLCBuYXZQcm9wZXJ0aWVzLCBmYWxzZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Ly8gLi4uYWRkaXRpb25hbCBtYW5pZmVzdCBkZWZpbmVkIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoXG5cdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkubmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdClcblx0fTtcblx0bGV0IGFTZWxlY3RPcHRpb25zOiBTZWxlY3RPcHRpb25UeXBlW10gPSBbXTtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChzZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0YVNlbGVjdE9wdGlvbnMgPSBzZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnM7XG5cdH1cblxuXHRjb25zdCBwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10gPVxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8ucmVkdWNlKChzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sIHNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBzZWxlY3Rpb25GaWVsZC52YWx1ZTtcblx0XHRcdGlmICghZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdGxldCBuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRcdFx0XHRpZiAoYW5ub3RhdGlvblBhdGg/LnN0YXJ0c1dpdGgoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIpKSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhdGggPSBcIlwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXRoID0gYW5ub3RhdGlvblBhdGg/LnNwbGl0KFwiL0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIilbMF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBmaWx0ZXJQcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUGF0aCA/IG5hdmlnYXRpb25QYXRoICsgXCIvXCIgKyBwcm9wZXJ0eVBhdGggOiBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGNvbnN0IGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IF9nZXRGaWx0ZXJGaWVsZChcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZHMsXG5cdFx0XHRcdFx0ZmlsdGVyUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0ZW50aXR5VHlwZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZC5ncm91cCA9IFwiXCI7XG5cdFx0XHRcdFx0ZmlsdGVyRmllbGQuZ3JvdXBMYWJlbCA9IFwiXCI7XG5cdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goZmlsdGVyRmllbGQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xuXHRcdH0sIFtdKSB8fCBbXTtcblxuXHRjb25zdCBkZWZhdWx0RmlsdGVyRmllbGRzID0gX2dldERlZmF1bHRGaWx0ZXJGaWVsZHMoXG5cdFx0YVNlbGVjdE9wdGlvbnMsXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyxcblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHNcblx0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLFxuXHRcdGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG5cdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMsXG5cdFx0ZmlsdGVyRmllbGRzOiBmaWx0ZXJGaWVsZHMsXG5cdFx0cHJvcGVydHlJbmZvRmllbGRzOiBwcm9wZXJ0eUluZm9GaWVsZHMsXG5cdFx0ZGVmYXVsdEZpbHRlckZpZWxkczogZGVmYXVsdEZpbHRlckZpZWxkc1xuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoVHlwZUNvbmZpZyA9IGZ1bmN0aW9uIChwcm9wZXJ0eT86IFByb3BlcnR5KTogUHJvcGVydHlUeXBlQ29uZmlnIHtcblx0Y29uc3Qgb1R5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKHByb3BlcnR5LCBwcm9wZXJ0eT8udHlwZSk7XG5cdGlmIChwcm9wZXJ0eT8udHlwZSA9PT0gc0VkbVN0cmluZyAmJiAob1R5cGVDb25maWcuY29uc3RyYWludHMubnVsbGFibGUgPT09IHVuZGVmaW5lZCB8fCBvVHlwZUNvbmZpZy5jb25zdHJhaW50cy5udWxsYWJsZSA9PT0gdHJ1ZSkpIHtcblx0XHRvVHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLnBhcnNlS2VlcHNFbXB0eVN0cmluZyA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiBvVHlwZUNvbmZpZztcbn07XG5cbmV4cG9ydCBjb25zdCBhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eUluZm9GaWVsZDogRmlsdGVyRmllbGQgfCBQcm9wZXJ0eUluZm8sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YVJlcXVpcmVkUHJvcHM6IHVua25vd25bXSxcblx0YVR5cGVDb25maWc6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPj5cbik6IFByb3BlcnR5SW5mbyB7XG5cdGxldCBvUHJvcGVydHlJbmZvID0gZmV0Y2hQcm9wZXJ0eUluZm8oY29udmVydGVyQ29udGV4dCwgcHJvcGVydHlJbmZvRmllbGQsIGFUeXBlQ29uZmlnW3Byb3BlcnR5SW5mb0ZpZWxkLmtleSFdKSxcblx0XHRzUHJvcGVydHlQYXRoID0gXCJcIjtcblx0aWYgKHByb3BlcnR5SW5mb0ZpZWxkLmNvbmRpdGlvblBhdGgpIHtcblx0XHRzUHJvcGVydHlQYXRoID0gcHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aC5yZXBsYWNlKC9cXCt8XFwqL2csIFwiXCIpO1xuXHR9XG5cdGlmIChvUHJvcGVydHlJbmZvKSB7XG5cdFx0b1Byb3BlcnR5SW5mbyA9IE9iamVjdC5hc3NpZ24ob1Byb3BlcnR5SW5mbywge1xuXHRcdFx0bWF4Q29uZGl0aW9uczogIW9Qcm9wZXJ0eUluZm8uaXNQYXJhbWV0ZXIgJiYgaXNNdWx0aVZhbHVlKG9Qcm9wZXJ0eUluZm8pID8gLTEgOiAxLFxuXHRcdFx0cmVxdWlyZWQ6IHByb3BlcnR5SW5mb0ZpZWxkLnJlcXVpcmVkID8/IChvUHJvcGVydHlJbmZvLmlzUGFyYW1ldGVyIHx8IGFSZXF1aXJlZFByb3BzLmluY2x1ZGVzKHNQcm9wZXJ0eVBhdGgpKSxcblx0XHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGRhdGFUeXBlOiBhVHlwZUNvbmZpZ1twcm9wZXJ0eUluZm9GaWVsZC5rZXkhXS50eXBlXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG59O1xuXG5leHBvcnQgY29uc3QgcHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzPzogRmlsdGVyRmllbGRbXVxuKTogUHJvcGVydHlJbmZvW10ge1xuXHQvL2dldCBUeXBlQ29uZmlnIGZ1bmN0aW9uXG5cdGNvbnN0IGFUeXBlQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsPFByb3BlcnR5VHlwZUNvbmZpZz4+ID0ge307XG5cblx0aWYgKGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzKSB7XG5cdFx0cHJvcGVydHlJbmZvRmllbGRzID0gcHJvcGVydHlJbmZvRmllbGRzLmNvbmNhdChkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcyk7XG5cdH1cblx0Ly9hZGQgdHlwZUNvbmZpZ1xuXHRwcm9wZXJ0eUluZm9GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAocGFyYW1ldGVyRmllbGQpIHtcblx0XHRpZiAocGFyYW1ldGVyRmllbGQuYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5Q29udmVydHlDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFByb3BlcnR5PihwYXJhbWV0ZXJGaWVsZC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVRhcmdldE9iamVjdCA9IHByb3BlcnR5Q29udmVydHlDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q7XG5cdFx0XHRjb25zdCBvVHlwZUNvbmZpZyA9IGZldGNoVHlwZUNvbmZpZyhwcm9wZXJ0eVRhcmdldE9iamVjdCk7XG5cdFx0XHRhVHlwZUNvbmZpZ1twYXJhbWV0ZXJGaWVsZC5rZXldID0gb1R5cGVDb25maWc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFUeXBlQ29uZmlnW3BhcmFtZXRlckZpZWxkLmtleV0gPSB7IHR5cGU6IHNTdHJpbmdEYXRhVHlwZSB9O1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gZmlsdGVyUmVzdHJpY3Rpb25zXG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uRmlsdGVyUmVzdHJpY3Rpb25zIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvUmV0OiB7XG5cdFx0UmVxdWlyZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdFx0Tm9uRmlsdGVyYWJsZVByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0XHRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM/OiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJFeHByZXNzaW9uVHlwZVtdPjtcblx0fSA9IHt9O1xuXHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXTtcblx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IGdldEZpbHRlckFsbG93ZWRFeHByZXNzaW9uKG9GaWx0ZXJSZXN0cmljdGlvbnMpO1xuXG5cdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBhUGF0aFBhcnRzID0gc0VudGl0eVNldFBhdGguc3BsaXQoXCIvXCIpO1xuXHRpZiAoYVBhdGhQYXJ0cy5sZW5ndGggPiAyKSB7XG5cdFx0Y29uc3Qgc05hdmlnYXRpb25QYXRoID0gYVBhdGhQYXJ0c1thUGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdGFQYXRoUGFydHMuc3BsaWNlKC0xLCAxKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCwgc05hdmlnYXRpb25QYXRoKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLkZpbHRlclJlc3RyaWN0aW9ucztcblx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzLmNvbmNhdChcblx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW11cblx0XHQpO1xuXHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSBvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmNvbmNhdChcblx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXVxuXHRcdCk7XG5cdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSB7XG5cdFx0XHQuLi4oZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMpIHx8IHt9KSxcblx0XHRcdC4uLm9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXG5cdFx0fTtcblx0fVxuXHRjb25zdCBhUmVxdWlyZWRQcm9wcyA9IG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzO1xuXHRjb25zdCBhTm9uRmlsdGVyYWJsZVByb3BzID0gb1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcztcblx0Y29uc3QgYUZldGNoZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSA9IFtdO1xuXG5cdC8vIHByb2Nlc3MgdGhlIGZpZWxkcyB0byBhZGQgbmVjZXNzYXJ5IHByb3BlcnRpZXNcblx0cHJvcGVydHlJbmZvRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5SW5mb0ZpZWxkKSB7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IHByb3BlcnR5SW5mb0ZpZWxkLmNvbmRpdGlvblBhdGgucmVwbGFjZSgvWysqXS9nLCBcIlwiKTtcblx0XHRpZiAoIWFOb25GaWx0ZXJhYmxlUHJvcHMuaW5jbHVkZXMoc1Byb3BlcnR5UGF0aCkpIHtcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUluZm8gPSBhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvKHByb3BlcnR5SW5mb0ZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0LCBhUmVxdWlyZWRQcm9wcywgYVR5cGVDb25maWcpO1xuXHRcdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2gob1Byb3BlcnR5SW5mbyk7XG5cdFx0fVxuXHR9KTtcblxuXHQvL2FkZCBlZGl0XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0aWYgKE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGRhdGFNb2RlbE9iamVjdFBhdGgpKSB7XG5cdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2goZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvKCkpO1xuXHR9XG5cdC8vIGFkZCBzZWFyY2hcblx0Y29uc3Qgc2VhcmNoUmVzdHJpY3Rpb25zID0gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBCb29sZWFuKHNlYXJjaFJlc3RyaWN0aW9ucyAmJiAhc2VhcmNoUmVzdHJpY3Rpb25zLlNlYXJjaGFibGUpO1xuXHRpZiAoc0VudGl0eVNldFBhdGggJiYgaGlkZUJhc2ljU2VhcmNoICE9PSB0cnVlKSB7XG5cdFx0aWYgKCFzZWFyY2hSZXN0cmljdGlvbnMgfHwgc2VhcmNoUmVzdHJpY3Rpb25zPy5TZWFyY2hhYmxlKSB7XG5cdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChnZXRTZWFyY2hGaWx0ZXJQcm9wZXJ0eUluZm8oKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFGZXRjaGVkUHJvcGVydGllcztcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nXG4pOiBNYW5pZmVzdEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBtYW5pZmVzdEZpbHRlckZpZWxkcyA9IGdldE1hbmlmZXN0RmlsdGVyRmllbGRzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGFubm90YXRpb25QYXRoKTtcblx0X2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzKGZpbHRlckZpZWxkcywgbWFuaWZlc3RGaWx0ZXJGaWVsZHMpO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoZmlsdGVyRmllbGRzLCBtYW5pZmVzdEZpbHRlckZpZWxkcywge1xuXHRcdGF2YWlsYWJpbGl0eTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRsYWJlbDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR0eXBlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHBvc2l0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHNsb3ROYW1lOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGRvY3VtZW50UmVmVGV4dDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR0ZW1wbGF0ZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRzZXR0aW5nczogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR2aXN1YWxGaWx0ZXI6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cmVxdWlyZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwgPSAocHJvcGVydHlJbmZvczogUHJvcGVydHlJbmZvW10pOiB2b2lkID0+IHtcblx0cHJvcGVydHlJbmZvcy5zb3J0KGZ1bmN0aW9uIChhOiBGaWx0ZXJHcm91cCwgYjogRmlsdGVyR3JvdXApIHtcblx0XHRjb25zdCBhR3JvdXBMYWJlbElzU2V0ID0gYS5ncm91cExhYmVsICE9PSB1bmRlZmluZWQgJiYgYS5ncm91cExhYmVsICE9PSBudWxsO1xuXHRcdGNvbnN0IGJHcm91cExhYmVsSXNTZXQgPSBiLmdyb3VwTGFiZWwgIT09IHVuZGVmaW5lZCAmJiBiLmdyb3VwTGFiZWwgIT09IG51bGw7XG5cdFx0aWYgKCFhR3JvdXBMYWJlbElzU2V0ICYmICFiR3JvdXBMYWJlbElzU2V0KSB7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cdFx0aWYgKGFHcm91cExhYmVsSXNTZXQgJiYgIWJHcm91cExhYmVsSXNTZXQpIHtcblx0XHRcdHJldHVybiAtMTtcblx0XHR9XG5cdFx0aWYgKCFhR3JvdXBMYWJlbElzU2V0ICYmIGJHcm91cExhYmVsSXNTZXQpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblx0XHRyZXR1cm4gYS5ncm91cExhYmVsIS5sb2NhbGVDb21wYXJlKGIuZ3JvdXBMYWJlbCEpO1xuXHR9KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZWxlY3Rpb24gZmllbGRzIHRoYXQgd2lsbCBiZSB1c2VkIHdpdGhpbiB0aGUgZmlsdGVyIGJhclxuICogVGhpcyBjb25maWd1cmF0aW9uIHRha2VzIGludG8gYWNjb3VudCB0aGUgYW5ub3RhdGlvbiBhbmQgdGhlIHNlbGVjdGlvbiB2YXJpYW50cy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbHJUYWJsZXNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aFxuICogQHBhcmFtIFtpbmNsdWRlSGlkZGVuXVxuICogQHBhcmFtIFtsaW5lSXRlbVRlcm1dXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzZWxlY3Rpb24gZmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW10sXG5cdGFubm90YXRpb25QYXRoID0gXCJcIixcblx0aW5jbHVkZUhpZGRlbj86IGJvb2xlYW4sXG5cdGxpbmVJdGVtVGVybT86IHN0cmluZ1xuKTogeyBzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW107IHNQcm9wZXJ0eUluZm86IHN0cmluZyB9IHtcblx0Y29uc3Qgb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSA9IGdldEFubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YShcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGxyVGFibGVzLFxuXHRcdGFubm90YXRpb25QYXRoLFxuXHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0bGluZUl0ZW1UZXJtXG5cdCk7XG5cdGNvbnN0IHBhcmFtZXRlckZpZWxkcyA9IF9nZXRQYXJhbWV0ZXJGaWVsZHMoY29udmVydGVyQ29udGV4dCk7XG5cdGxldCBwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLnByb3BlcnR5SW5mb0ZpZWxkcztcblx0Y29uc3QgZW50aXR5VHlwZSA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZW50aXR5VHlwZTtcblxuXHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBwYXJhbWV0ZXJGaWVsZHMuY29uY2F0KHByb3BlcnR5SW5mb0ZpZWxkcyk7XG5cblx0cHJvcGVydHlJbmZvRmllbGRzID0gaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyhwcm9wZXJ0eUluZm9GaWVsZHMsIGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGFubm90YXRpb25QYXRoKTtcblxuXHRjb25zdCBhRmV0Y2hlZFByb3BlcnRpZXMgPSBwcm9jZXNzU2VsZWN0aW9uRmllbGRzKFxuXHRcdHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZGVmYXVsdEZpbHRlckZpZWxkc1xuXHQpO1xuXHRzb3J0UHJvcGVydHlJbmZvc0J5R3JvdXBMYWJlbChhRmV0Y2hlZFByb3BlcnRpZXMpO1xuXG5cdGxldCBzRmV0Y2hQcm9wZXJ0aWVzID0gSlNPTi5zdHJpbmdpZnkoYUZldGNoZWRQcm9wZXJ0aWVzKTtcblx0c0ZldGNoUHJvcGVydGllcyA9IHNGZXRjaFByb3BlcnRpZXMucmVwbGFjZSgvXFx7L2csIFwiXFxcXHtcIik7XG5cdHNGZXRjaFByb3BlcnRpZXMgPSBzRmV0Y2hQcm9wZXJ0aWVzLnJlcGxhY2UoL1xcfS9nLCBcIlxcXFx9XCIpO1xuXHRjb25zdCBzUHJvcGVydHlJbmZvID0gc0ZldGNoUHJvcGVydGllcztcblx0Ly8gZW5kIG9mIHByb3BlcnR5RmllbGRzIHByb2Nlc3NpbmdcblxuXHQvLyB0byBwb3B1bGF0ZSBzZWxlY3Rpb24gZmllbGRzXG5cdGxldCBwcm9wU2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLnByb3BlcnR5SW5mb0ZpZWxkcykpO1xuXHRwcm9wU2VsZWN0aW9uRmllbGRzID0gcGFyYW1ldGVyRmllbGRzLmNvbmNhdChwcm9wU2VsZWN0aW9uRmllbGRzKTtcblx0Ly8gY3JlYXRlIGEgbWFwIG9mIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBpbiBzZWxlY3Rpb24gdmFyaWFudHNcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5leGNsdWRlZEZpbHRlclByb3BlcnRpZXM7XG5cdGNvbnN0IGZpbHRlckZhY2V0cyA9IGVudGl0eVR5cGU/LmFubm90YXRpb25zPy5VST8uRmlsdGVyRmFjZXRzO1xuXHRsZXQgZmlsdGVyRmFjZXRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiA9IHt9O1xuXG5cdGNvbnN0IGFGaWVsZEdyb3VwcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJVSVwiLCBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwKSBhcyBGaWVsZEdyb3VwW107XG5cblx0aWYgKGZpbHRlckZhY2V0cyA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlckZhY2V0cy5sZW5ndGggPCAwKSB7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFGaWVsZEdyb3Vwcykge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXAgPSB7XG5cdFx0XHRcdC4uLmZpbHRlckZhY2V0TWFwLFxuXHRcdFx0XHQuLi5nZXRGaWVsZEdyb3VwRmlsdGVyR3JvdXBzKGFGaWVsZEdyb3Vwc1tpXSlcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZpbHRlckZhY2V0TWFwID0gZmlsdGVyRmFjZXRzLnJlZHVjZSgocHJldmlvdXNWYWx1ZTogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+LCBmaWx0ZXJGYWNldDogUmVmZXJlbmNlRmFjZXRUeXBlcykgPT4ge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAoZmlsdGVyRmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YT8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0cHJldmlvdXNWYWx1ZVsoKGZpbHRlckZhY2V0Py5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cCk/LkRhdGFbaV0gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8ucGF0aF0gPSB7XG5cdFx0XHRcdFx0Z3JvdXA6IGZpbHRlckZhY2V0Py5JRD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHRncm91cExhYmVsOiBmaWx0ZXJGYWNldD8uTGFiZWw/LnRvU3RyaW5nKClcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcmV2aW91c1ZhbHVlO1xuXHRcdH0sIHt9KTtcblx0fVxuXG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBhbGwgcG90ZW50aWFsIGZpbHRlciBmaWVsZHMgYmFzZWQgb24uLi5cblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmZpbHRlckZpZWxkcztcblxuXHQvLyBmaW5hbGx5IGNyZWF0ZSBmaW5hbCBsaXN0IG9mIGZpbHRlciBmaWVsZHMgYnkgYWRkaW5nIHRoZSBTZWxlY3Rpb25GaWVsZHMgZmlyc3QgKG9yZGVyIG1hdHRlcnMpLi4uXG5cdGNvbnN0IGFsbEZpbHRlcnMgPSBwcm9wU2VsZWN0aW9uRmllbGRzXG5cblx0XHQvLyAuLi5hbmQgYWRkaW5nIHJlbWFpbmluZyBmaWx0ZXIgZmllbGRzLCB0aGF0IGFyZSBub3QgdXNlZCBpbiBhIFNlbGVjdGlvblZhcmlhbnQgKG9yZGVyIGRvZXNuJ3QgbWF0dGVyKVxuXHRcdC5jb25jYXQoXG5cdFx0XHRPYmplY3Qua2V5cyhmaWx0ZXJGaWVsZHMpXG5cdFx0XHRcdC5maWx0ZXIoKHByb3BlcnR5UGF0aCkgPT4gIWV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcy5oYXMocHJvcGVydHlQYXRoKSlcblx0XHRcdFx0Lm1hcCgocHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF0sIGZpbHRlckZhY2V0TWFwW3Byb3BlcnR5UGF0aF0pO1xuXHRcdFx0XHR9KVxuXHRcdCk7XG5cblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzID0gaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyhhbGxGaWx0ZXJzLCBlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBhbm5vdGF0aW9uUGF0aCk7XG5cblx0Ly8gQWRkIGNhc2VTZW5zaXRpdmUgcHJvcGVydHkgdG8gYWxsIHNlbGVjdGlvbiBmaWVsZHMuXG5cdGNvbnN0IGlzQ2FzZVNlbnNpdGl2ZSA9IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KTtcblx0c2VsZWN0aW9uRmllbGRzLmZvckVhY2goKGZpbHRlckZpZWxkKSA9PiB7XG5cdFx0ZmlsdGVyRmllbGQuY2FzZVNlbnNpdGl2ZSA9IGlzQ2FzZVNlbnNpdGl2ZTtcblx0fSk7XG5cblx0cmV0dXJuIHsgc2VsZWN0aW9uRmllbGRzLCBzUHJvcGVydHlJbmZvIH07XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmlsdGVyIGJhciBpbnNpZGUgYSB2YWx1ZSBoZWxwIGRpYWxvZyBzaG91bGQgYmUgZXhwYW5kZWQuIFRoaXMgaXMgdHJ1ZSBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGhvbGQ6XG4gKiAoMSkgYSBmaWx0ZXIgcHJvcGVydHkgaXMgbWFuZGF0b3J5LFxuICogKDIpIG5vIHNlYXJjaCBmaWVsZCBleGlzdHMgKGVudGl0eSBpc24ndCBzZWFyY2ggZW5hYmxlZCksXG4gKiAoMykgd2hlbiB0aGUgZGF0YSBpc24ndCBsb2FkZWQgYnkgZGVmYXVsdCAoYW5ub3RhdGlvbiBGZXRjaFZhbHVlcyA9IDIpLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiBUaGUgRmlsdGVyUmVzdHJpY3Rpb24gYW5ub3RhdGlvblxuICogQHBhcmFtIHZhbHVlTGlzdCBUaGUgVmFsdWVMaXN0IGFubm90YXRpb25cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBmb3IgZXhwYW5kRmlsdGVyRmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHBhbmRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogRmlsdGVyUmVzdHJpY3Rpb25zIHwgdW5kZWZpbmVkLFxuXHR2YWx1ZUxpc3Q6IE1ldGFNb2RlbFR5cGU8VmFsdWVMaXN0PlxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IHJlcXVpcmVkUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKTtcblx0Y29uc3Qgc2VhcmNoUmVzdHJpY3Rpb25zID0gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBCb29sZWFuKHNlYXJjaFJlc3RyaWN0aW9ucyAmJiAhc2VhcmNoUmVzdHJpY3Rpb25zLlNlYXJjaGFibGUpO1xuXHRpZiAocmVxdWlyZWRQcm9wZXJ0aWVzLmxlbmd0aCA+IDAgfHwgaGlkZUJhc2ljU2VhcmNoIHx8IHZhbHVlTGlzdD8uRmV0Y2hWYWx1ZXMgPT09IDIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXNEQTtFQUFBLElBZ0NLQSxlQUFlO0VBQUEsV0FBZkEsZUFBZTtJQUFmQSxlQUFlO0lBQWZBLGVBQWU7RUFBQSxHQUFmQSxlQUFlLEtBQWZBLGVBQWU7RUFLcEIsTUFBTUMsVUFBVSxHQUFHLFlBQVk7RUFDL0IsTUFBTUMsZUFBZSxHQUFHLGdDQUFnQztFQUl4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0MseUJBQXlCQSxDQUFDQyxVQUFzQixFQUErQjtJQUN2RixNQUFNQyxjQUEyQyxHQUFHLENBQUMsQ0FBQztJQUN0REQsVUFBVSxDQUFDRSxJQUFJLENBQUNDLE9BQU8sQ0FBRUMsU0FBaUMsSUFBSztNQUM5RCxJQUFJQSxTQUFTLENBQUNDLEtBQUssS0FBSyxzQ0FBc0MsRUFBRTtRQUFBLElBQUFDLGlCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBO1FBQy9EUixjQUFjLENBQUNHLFNBQVMsQ0FBQ00sS0FBSyxDQUFDQyxJQUFJLENBQUMsR0FBRztVQUN0Q0MsS0FBSyxFQUFFWixVQUFVLENBQUNhLGtCQUFrQjtVQUNwQ0MsVUFBVSxFQUFFLEVBQUFSLGlCQUFBLEdBQUFOLFVBQVUsQ0FBQ2UsS0FBSyxjQUFBVCxpQkFBQSx1QkFBaEJBLGlCQUFBLENBQWtCVSxRQUFRLENBQUMsQ0FBQyxPQUFBVCxxQkFBQSxHQUFJUCxVQUFVLENBQUNpQixXQUFXLGNBQUFWLHFCQUFBLHdCQUFBQyxzQkFBQSxHQUF0QkQscUJBQUEsQ0FBd0JXLE1BQU0sY0FBQVYsc0JBQUEsd0JBQUFDLHNCQUFBLEdBQTlCRCxzQkFBQSxDQUFnQ08sS0FBSyxjQUFBTixzQkFBQSx1QkFBckNBLHNCQUFBLENBQXVDTyxRQUFRLENBQUMsQ0FBQyxLQUFJaEIsVUFBVSxDQUFDbUI7UUFDN0csQ0FBQztNQUNGO0lBQ0QsQ0FBQyxDQUFDO0lBQ0YsT0FBT2xCLGNBQWM7RUFDdEI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU21CLDJCQUEyQkEsQ0FDbkNDLHFCQUEyQyxFQUMzQ0MsZ0JBQXlELEVBQzNDO0lBQUEsSUFBQUMscUJBQUEsRUFBQUMsc0JBQUEsRUFBQUMsc0JBQUE7SUFDZCxNQUFNQyxxQkFBcUIsR0FBRyxJQUFJQyxHQUFHLENBQVMsQ0FBQztJQUMvQyxNQUFNQyxvQkFBb0IsR0FBR04sZ0JBQWdCLENBQUNPLGtCQUFrQixDQUFDLENBQUMsQ0FBQ0Msc0JBQXNCLENBQUMsQ0FBQyxDQUFDQyxZQUFZLElBQUksQ0FBQyxDQUFDO0lBQzlHLE1BQU1DLG1CQUFtQixHQUFHLElBQUlMLEdBQUcsQ0FBUztJQUMzQztJQUNBLEdBQUcsQ0FBQyxFQUFBSixxQkFBQSxHQUFBRCxnQkFBZ0IsQ0FBQ1csc0JBQXNCLENBQUMsQ0FBQyxDQUFDQyxnQkFBZ0IsY0FBQVgscUJBQUEsd0JBQUFDLHNCQUFBLEdBQTFERCxxQkFBQSxDQUE0RE4sV0FBVyxjQUFBTyxzQkFBQSx3QkFBQUMsc0JBQUEsR0FBdkVELHNCQUFBLENBQXlFVyxFQUFFLGNBQUFWLHNCQUFBLHVCQUEzRUEsc0JBQUEsQ0FBNkVXLGVBQWUsS0FBSSxFQUFFLEVBQUVDLEdBQUcsQ0FDekdDLGNBQWMsSUFBS0EsY0FBYyxDQUFDQyxLQUNwQyxDQUFDO0lBQ0Q7SUFDQSxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQ2Isb0JBQW9CLENBQUMsQ0FBQ2MsTUFBTSxDQUFFQyxHQUFHLElBQUssQ0FBQyxDQUFDZixvQkFBb0IsQ0FBQ2UsR0FBRyxDQUFDLENBQUNDLFFBQVEsQ0FBQyxDQUMxRixDQUFDO0lBRUYsT0FBTyxJQUFJakIsR0FBRyxDQUNiTixxQkFBcUIsQ0FDbkJnQixHQUFHLENBQUVRLGFBQWEsSUFBSztNQUFBLElBQUFDLHFCQUFBLEVBQUFDLHFCQUFBO01BQ3ZCLE1BQU1DLFlBQVksR0FBR0gsYUFBYSxDQUFDSSxPQUFPLENBQUNDLE9BQU87TUFDbEQsSUFBSSxDQUFDRixZQUFZLEVBQUU7UUFDbEIsT0FBTyxFQUFFO01BQ1Y7TUFDQSxPQUFPLENBQUMsSUFBSSxFQUFBRixxQkFBQSxHQUFBRSxZQUFZLENBQUNHLGFBQWEsY0FBQUwscUJBQUEsdUJBQTFCQSxxQkFBQSxDQUE0Qk0sS0FBSyxLQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBQUwscUJBQUEsR0FBQUMsWUFBWSxDQUFDSyxZQUFZLGNBQUFOLHFCQUFBLHVCQUF6QkEscUJBQUEsQ0FBMkJLLEtBQUssS0FBSSxFQUFFLENBQUMsQ0FBQyxDQUFDZixHQUFHLENBQUUxQixJQUFJLElBQUs7UUFDaEgsTUFBTTJDLGNBQWMsR0FBRzNDLElBQUksQ0FBQzJDLGNBQWM7UUFDMUMsSUFBSSxDQUFDNUIscUJBQXFCLENBQUM2QixHQUFHLENBQUNELGNBQWMsQ0FBQyxFQUFFO1VBQy9DNUIscUJBQXFCLENBQUM4QixHQUFHLENBQUNGLGNBQWMsQ0FBQztVQUN6QyxNQUFNRyxzQkFBc0IsR0FBR0MsZ0NBQWdDLENBQUNKLGNBQWMsRUFBRWhDLGdCQUFnQixDQUFDO1VBQ2pHLElBQUltQyxzQkFBc0IsRUFBRTtZQUMzQkEsc0JBQXNCLENBQUNFLGFBQWEsR0FBR0Ysc0JBQXNCLENBQUNFLGFBQWEsQ0FBQ2pCLE1BQU0sQ0FDaEZrQixZQUFZLElBQUssQ0FBQzVCLG1CQUFtQixDQUFDdUIsR0FBRyxDQUFDSyxZQUFZLENBQ3hELENBQUM7WUFDRCxPQUFPSCxzQkFBc0IsQ0FBQ0UsYUFBYTtVQUM1QztRQUNEO1FBQ0EsT0FBTyxFQUFFO01BQ1YsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQ0RFLElBQUksQ0FBQyxDQUFDLENBQ1QsQ0FBQztFQUNGOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTUMsaUJBQWlCLEdBQUcsU0FBQUEsQ0FBVUMsVUFBc0IsRUFBRUMsWUFBb0IsRUFBVTtJQUN6RixNQUFNQyxLQUFLLEdBQUdELFlBQVksQ0FBQ0UsS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUNyQyxJQUFJQyxXQUFXO0lBQ2YsSUFBSXhCLEdBQUcsR0FBRyxFQUFFO0lBQ1osT0FBT3NCLEtBQUssQ0FBQ0csTUFBTSxFQUFFO01BQ3BCLElBQUlDLElBQUksR0FBR0osS0FBSyxDQUFDSyxLQUFLLENBQUMsQ0FBVztNQUNsQ0gsV0FBVyxHQUFHQSxXQUFXLEdBQUcsR0FBR0EsV0FBVyxJQUFJRSxJQUFJLEVBQUUsR0FBR0EsSUFBSTtNQUMzRCxNQUFNRSxRQUF1QyxHQUFHUixVQUFVLENBQUNTLFdBQVcsQ0FBQ0wsV0FBVyxDQUFDO01BQ25GLElBQUlNLDRCQUE0QixDQUFDRixRQUFRLENBQUMsRUFBRTtRQUMzQ0YsSUFBSSxJQUFJLEdBQUc7TUFDWjtNQUNBMUIsR0FBRyxHQUFHQSxHQUFHLEdBQUcsR0FBR0EsR0FBRyxJQUFJMEIsSUFBSSxFQUFFLEdBQUdBLElBQUk7SUFDcEM7SUFDQSxPQUFPMUIsR0FBRztFQUNYLENBQUM7RUFFRCxNQUFNK0IsMkJBQTJCLEdBQUcsU0FBQUEsQ0FDbkNYLFVBQXNCLEVBQ3RCUSxRQUFrQixFQUNsQkksZ0JBQXdCLEVBQ3hCQyxhQUFzQixFQUN0QnRELGdCQUF5RCxFQUMvQjtJQUFBLElBQUF1RCxxQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQTtJQUMxQjtJQUNBLElBQUlSLFFBQVEsSUFBSUEsUUFBUSxDQUFDUyxVQUFVLEtBQUtDLFNBQVMsS0FBS0wsYUFBYSxJQUFJLEVBQUFDLHFCQUFBLEdBQUFOLFFBQVEsQ0FBQ3RELFdBQVcsY0FBQTRELHFCQUFBLHdCQUFBQyxzQkFBQSxHQUFwQkQscUJBQUEsQ0FBc0IxQyxFQUFFLGNBQUEyQyxzQkFBQSx3QkFBQUMsc0JBQUEsR0FBeEJELHNCQUFBLENBQTBCSSxNQUFNLGNBQUFILHNCQUFBLHVCQUFoQ0Esc0JBQUEsQ0FBa0NJLE9BQU8sQ0FBQyxDQUFDLE1BQUssSUFBSSxDQUFDLEVBQUU7TUFBQSxJQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQTtNQUM3SCxNQUFNekQsZ0JBQWdCLEdBQUdaLGdCQUFnQixDQUFDc0UsdUJBQXVCLENBQUNyQixRQUFRLENBQUM7UUFDMUVzQixXQUF3QixHQUFHO1VBQzFCbEQsR0FBRyxFQUFFbUQsU0FBUyxDQUFDQyw0QkFBNEIsQ0FBQ3BCLGdCQUFnQixDQUFDO1VBQzdEckIsY0FBYyxFQUFFaEMsZ0JBQWdCLENBQUMwRSx5QkFBeUIsQ0FBQ3JCLGdCQUFnQixDQUFDO1VBQzVFc0IsYUFBYSxFQUFFbkMsaUJBQWlCLENBQUNDLFVBQVUsRUFBRVksZ0JBQWdCLENBQUM7VUFDOUR1QixZQUFZLEVBQUUsRUFBQWQsc0JBQUEsR0FBQWIsUUFBUSxDQUFDdEQsV0FBVyxjQUFBbUUsc0JBQUEsd0JBQUFDLHNCQUFBLEdBQXBCRCxzQkFBQSxDQUFzQmpELEVBQUUsY0FBQWtELHNCQUFBLHdCQUFBQyxzQkFBQSxHQUF4QkQsc0JBQUEsQ0FBMEJjLFlBQVksY0FBQWIsc0JBQUEsdUJBQXRDQSxzQkFBQSxDQUF3Q0gsT0FBTyxDQUFDLENBQUMsTUFBSyxJQUFJLEdBQUcsUUFBUSxHQUFHLFlBQVk7VUFDbEdpQixLQUFLLEVBQUUsRUFBQWIsc0JBQUEsR0FBQWhCLFFBQVEsQ0FBQ3RELFdBQVcsQ0FBQ0MsTUFBTSxjQUFBcUUsc0JBQUEsd0JBQUFDLHNCQUFBLEdBQTNCRCxzQkFBQSxDQUE2QnhFLEtBQUssY0FBQXlFLHNCQUFBLHVCQUFsQ0Esc0JBQUEsQ0FBb0N4RSxRQUFRLENBQUMsQ0FBQyxLQUFJdUQsUUFBUSxDQUFDOEIsSUFBSTtVQUN0RXpGLEtBQUssRUFBRXNCLGdCQUFnQixDQUFDbUUsSUFBSTtVQUM1QnZGLFVBQVUsRUFBRSxDQUFBb0IsZ0JBQWdCLGFBQWhCQSxnQkFBZ0Isd0JBQUF1RCxxQkFBQSxHQUFoQnZELGdCQUFnQixDQUFFakIsV0FBVyxjQUFBd0UscUJBQUEsd0JBQUFDLHNCQUFBLEdBQTdCRCxxQkFBQSxDQUErQnZFLE1BQU0sY0FBQXdFLHNCQUFBLHdCQUFBQyxzQkFBQSxHQUFyQ0Qsc0JBQUEsQ0FBdUMzRSxLQUFLLGNBQUE0RSxzQkFBQSx1QkFBNUNBLHNCQUFBLENBQThDM0UsUUFBUSxDQUFDLENBQUMsS0FBSWtCLGdCQUFnQixDQUFDbUU7UUFDMUYsQ0FBQztNQUNGQyxnQ0FBZ0MsQ0FBQ1QsV0FBVyxDQUFDO01BQzdDLE9BQU9BLFdBQVc7SUFDbkI7SUFDQSxPQUFPWixTQUFTO0VBQ2pCLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLE1BQU1xQixnQ0FBZ0MsR0FBRyxTQUFBQSxDQUFVVCxXQUF3QixFQUFRO0lBQ2xGLElBQ0NBLFdBQVcsQ0FBQ2xELEdBQUcsS0FBSywyQ0FBMkMsSUFDL0RrRCxXQUFXLENBQUNsRCxHQUFHLEtBQUssNkNBQTZDLEVBQ2hFO01BQ0QsTUFBTTRELDRCQUE0QixHQUFHLENBQ3BDQyw0QkFBNEIsQ0FBQ0MsRUFBRSxFQUMvQkQsNEJBQTRCLENBQUNFLFFBQVEsRUFDckNGLDRCQUE0QixDQUFDRyxRQUFRLEVBQ3JDSCw0QkFBNEIsQ0FBQ0ksU0FBUyxFQUN0Q0osNEJBQTRCLENBQUNLLFdBQVcsRUFDeENMLDRCQUE0QixDQUFDTSxRQUFRLENBQ3JDO01BQ0RqQixXQUFXLENBQUNrQixRQUFRLEdBQUc7UUFDdEJDLHFCQUFxQixFQUFFLENBQ3RCO1VBQ0NyRyxJQUFJLEVBQUUsS0FBSztVQUNYc0csTUFBTSxFQUFFViw0QkFBNEIsQ0FBQ1csSUFBSSxDQUFDLEdBQUcsQ0FBQztVQUM5Q0MsT0FBTyxFQUFFO1FBQ1YsQ0FBQztNQUVILENBQUM7SUFDRjtFQUNELENBQUM7RUFFRCxNQUFNQyxtQkFBbUIsR0FBRyxTQUFBQSxDQUMzQnJELFVBQXNCLEVBQ3RCc0QsY0FBc0IsRUFDdEJDLFVBQXVDLEVBQ3ZDMUMsYUFBc0IsRUFDdEJ0RCxnQkFBeUQsRUFDM0I7SUFDOUIsTUFBTWlHLGlCQUE4QyxHQUFHLENBQUMsQ0FBQztJQUN6RCxJQUFJRCxVQUFVLEVBQUU7TUFDZkEsVUFBVSxDQUFDbkgsT0FBTyxDQUFFb0UsUUFBa0IsSUFBSztRQUMxQyxNQUFNUCxZQUFvQixHQUFHTyxRQUFRLENBQUM4QixJQUFJO1FBQzFDLE1BQU1tQixRQUFnQixHQUFHLENBQUNILGNBQWMsR0FBRyxHQUFHQSxjQUFjLEdBQUcsR0FBRyxFQUFFLElBQUlyRCxZQUFZO1FBQ3BGLE1BQU0xQixjQUFjLEdBQUdvQywyQkFBMkIsQ0FBQ1gsVUFBVSxFQUFFUSxRQUFRLEVBQUVpRCxRQUFRLEVBQUU1QyxhQUFhLEVBQUV0RCxnQkFBZ0IsQ0FBQztRQUNuSCxJQUFJZ0IsY0FBYyxFQUFFO1VBQ25CaUYsaUJBQWlCLENBQUNDLFFBQVEsQ0FBQyxHQUFHbEYsY0FBYztRQUM3QztNQUNELENBQUMsQ0FBQztJQUNIO0lBQ0EsT0FBT2lGLGlCQUFpQjtFQUN6QixDQUFDO0VBRUQsTUFBTUUseUJBQXlCLEdBQUcsU0FBQUEsQ0FDakMxRCxVQUFzQixFQUN0QjJELGFBQXdDLEVBQ3hDOUMsYUFBc0IsRUFDdEJ0RCxnQkFBeUQsRUFDM0I7SUFDOUIsSUFBSXFHLGVBQTRDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELElBQUlELGFBQWEsRUFBRTtNQUNsQkEsYUFBYSxDQUFDdkgsT0FBTyxDQUFFNkQsWUFBb0IsSUFBSztRQUMvQyxJQUFJNEQsb0JBQWlELEdBQUcsQ0FBQyxDQUFDO1FBQzFELE1BQU1DLFlBQVksR0FBR0Msb0JBQW9CLENBQ3hDeEcsZ0JBQWdCLENBQUNXLHNCQUFzQixDQUFDLENBQUMsRUFDekMrQixZQUNELENBQUM7UUFDRCxNQUFNTyxRQUFRLEdBQUdzRCxZQUFZLENBQUNFLFlBQVk7UUFDMUMsSUFDQ3hELFFBQVEsS0FBS1UsU0FBUyxJQUNyQixDQUFDTCxhQUFhLElBQ2RpRCxZQUFZLENBQUNHLG9CQUFvQixDQUFDQyxJQUFJLENBQ3BDQyxrQkFBa0I7VUFBQSxJQUFBQyxxQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQTtVQUFBLE9BQUssRUFBQUYscUJBQUEsR0FBQUQsa0JBQWtCLENBQUNqSCxXQUFXLGNBQUFrSCxxQkFBQSx3QkFBQUMsc0JBQUEsR0FBOUJELHFCQUFBLENBQWdDaEcsRUFBRSxjQUFBaUcsc0JBQUEsd0JBQUFDLHNCQUFBLEdBQWxDRCxzQkFBQSxDQUFvQ2xELE1BQU0sY0FBQW1ELHNCQUFBLHVCQUExQ0Esc0JBQUEsQ0FBNENsRCxPQUFPLENBQUMsQ0FBQyxNQUFLLElBQUk7UUFBQSxDQUN2RixDQUFFLEVBQ0Y7VUFDRDtRQUNEO1FBQ0EsSUFBSW1ELG9CQUFvQixDQUFDL0QsUUFBUSxDQUFDLEVBQUU7VUFDbkM7VUFDQXFELG9CQUFvQixHQUFHUixtQkFBbUIsQ0FDekNyRCxVQUFVLEVBQ1ZDLFlBQVksRUFDWk8sUUFBUSxDQUFDUyxVQUFVLENBQUN1RCxnQkFBZ0IsRUFDcEMzRCxhQUFhLEVBQ2J0RCxnQkFDRCxDQUFDO1FBQ0YsQ0FBQyxNQUFNLElBQUlrSCxhQUFhLENBQUNqRSxRQUFRLENBQUNTLFVBQVUsQ0FBQyxFQUFFO1VBQzlDO1VBQ0E0QyxvQkFBb0IsR0FBR1IsbUJBQW1CLENBQ3pDckQsVUFBVSxFQUNWQyxZQUFZLEVBQ1pPLFFBQVEsQ0FBQ1MsVUFBVSxDQUFDc0MsVUFBVSxFQUM5QjFDLGFBQWEsRUFDYnRELGdCQUNELENBQUM7UUFDRixDQUFDLE1BQU07VUFDTnNHLG9CQUFvQixHQUFHUixtQkFBbUIsQ0FDekNyRCxVQUFVLEVBQ1YwRSx1QkFBdUIsQ0FBQ1osWUFBWSxFQUFFLElBQUksQ0FBQyxFQUMzQyxDQUFDdEQsUUFBUSxDQUFDLEVBQ1ZLLGFBQWEsRUFDYnRELGdCQUNELENBQUM7UUFDRjtRQUVBcUcsZUFBZSxHQUFHO1VBQ2pCLEdBQUdBLGVBQWU7VUFDbEIsR0FBR0M7UUFDSixDQUFDO01BQ0YsQ0FBQyxDQUFDO0lBQ0g7SUFDQSxPQUFPRCxlQUFlO0VBQ3ZCLENBQUM7RUFFRCxNQUFNZSxlQUFlLEdBQUcsU0FBQUEsQ0FDdkIzRyxZQUF5QyxFQUN6Q2lDLFlBQW9CLEVBQ3BCMUMsZ0JBQXlELEVBQ3pEeUMsVUFBc0IsRUFDSTtJQUMxQixJQUFJOEIsV0FBb0MsR0FBRzlELFlBQVksQ0FBQ2lDLFlBQVksQ0FBQztJQUNyRSxJQUFJNkIsV0FBVyxFQUFFO01BQ2hCLE9BQU85RCxZQUFZLENBQUNpQyxZQUFZLENBQUM7SUFDbEMsQ0FBQyxNQUFNO01BQ042QixXQUFXLEdBQUduQiwyQkFBMkIsQ0FBQ1gsVUFBVSxFQUFFQSxVQUFVLENBQUNTLFdBQVcsQ0FBQ1IsWUFBWSxDQUFDLEVBQUVBLFlBQVksRUFBRSxJQUFJLEVBQUUxQyxnQkFBZ0IsQ0FBQztJQUNsSTtJQUNBLElBQUksQ0FBQ3VFLFdBQVcsRUFBRTtNQUFBLElBQUE4QyxzQkFBQTtNQUNqQixDQUFBQSxzQkFBQSxHQUFBckgsZ0JBQWdCLENBQUNzSCxjQUFjLENBQUMsQ0FBQyxjQUFBRCxzQkFBQSx1QkFBakNBLHNCQUFBLENBQW1DRSxRQUFRLENBQUNDLGFBQWEsQ0FBQ0MsVUFBVSxFQUFFQyxhQUFhLENBQUNDLElBQUksRUFBRUMsU0FBUyxDQUFDQyxzQkFBc0IsQ0FBQztJQUM1SDtJQUNBO0lBQ0EsSUFBSXRELFdBQVcsRUFBRTtNQUFBLElBQUF1RCxxQkFBQSxFQUFBQyxzQkFBQTtNQUNoQnhELFdBQVcsQ0FBQ0ssWUFBWSxHQUFHTCxXQUFXLENBQUNLLFlBQVksS0FBSyxRQUFRLEdBQUcsUUFBUSxHQUFHLFNBQVM7TUFDdkZMLFdBQVcsQ0FBQ3lELFdBQVcsR0FBRyxDQUFDLEdBQUFGLHFCQUFBLEdBQUNyRixVQUFVLENBQUM5QyxXQUFXLGNBQUFtSSxxQkFBQSxnQkFBQUMsc0JBQUEsR0FBdEJELHFCQUFBLENBQXdCbEksTUFBTSxjQUFBbUksc0JBQUEsZUFBOUJBLHNCQUFBLENBQWdDRSxhQUFhO0lBQzFFO0lBQ0EsT0FBTzFELFdBQVc7RUFDbkIsQ0FBQztFQUVELE1BQU0yRCx1QkFBdUIsR0FBRyxTQUFBQSxDQUMvQkMsY0FBa0MsRUFDbEMxRixVQUFzQixFQUN0QnpDLGdCQUF5RCxFQUN6RG9JLHdCQUFxQyxFQUNyQ0Msd0JBQXdDLEVBQ3hCO0lBQ2hCLE1BQU1oQyxlQUE4QixHQUFHLEVBQUU7SUFDekMsTUFBTWlDLGlCQUEwQyxHQUFHLENBQUMsQ0FBQztJQUNyRCxNQUFNdEMsVUFBVSxHQUFHdkQsVUFBVSxDQUFDd0UsZ0JBQWdCO0lBQzlDO0lBQ0FvQix3QkFBd0IsYUFBeEJBLHdCQUF3Qix1QkFBeEJBLHdCQUF3QixDQUFFeEosT0FBTyxDQUFFMEosY0FBYyxJQUFLO01BQ3JERCxpQkFBaUIsQ0FBQ0MsY0FBYyxDQUFDdEgsS0FBSyxDQUFDLEdBQUcsSUFBSTtJQUMvQyxDQUFDLENBQUM7SUFDRixJQUFJa0gsY0FBYyxJQUFJQSxjQUFjLENBQUNyRixNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ2hEcUYsY0FBYyxhQUFkQSxjQUFjLHVCQUFkQSxjQUFjLENBQUV0SixPQUFPLENBQUUySixZQUE4QixJQUFLO1FBQzNELE1BQU1sRyxZQUFZLEdBQUdrRyxZQUFZLENBQUNDLFlBQVk7UUFDOUMsTUFBTUMsYUFBYSxHQUFHcEcsWUFBWSxhQUFaQSxZQUFZLHVCQUFaQSxZQUFZLENBQUVyQixLQUFLO1FBQ3pDLE1BQU0wSCxzQkFBK0MsR0FBRyxDQUFDLENBQUM7UUFDMUROLHdCQUF3QixhQUF4QkEsd0JBQXdCLHVCQUF4QkEsd0JBQXdCLENBQUV4SixPQUFPLENBQUUwSixjQUFjLElBQUs7VUFDckRJLHNCQUFzQixDQUFDSixjQUFjLENBQUN0SCxLQUFLLENBQUMsR0FBRyxJQUFJO1FBQ3BELENBQUMsQ0FBQztRQUNGLElBQUl5SCxhQUFhLElBQUksQ0FBQ04sd0JBQXdCLENBQUNuRyxHQUFHLENBQUN5RyxhQUFhLENBQUMsRUFBRTtVQUNsRSxJQUFJLEVBQUVBLGFBQWEsSUFBSUMsc0JBQXNCLENBQUMsRUFBRTtZQUMvQyxNQUFNQyxXQUFvQyxHQUFHQyxjQUFjLENBQUNILGFBQWEsRUFBRTFJLGdCQUFnQixFQUFFeUMsVUFBVSxDQUFDO1lBQ3hHLElBQUltRyxXQUFXLEVBQUU7Y0FDaEJ2QyxlQUFlLENBQUN5QyxJQUFJLENBQUNGLFdBQVcsQ0FBQztZQUNsQztVQUNEO1FBQ0Q7TUFDRCxDQUFDLENBQUM7SUFDSCxDQUFDLE1BQU0sSUFBSTVDLFVBQVUsRUFBRTtNQUN0QkEsVUFBVSxDQUFDbkgsT0FBTyxDQUFFb0UsUUFBa0IsSUFBSztRQUFBLElBQUE4RixzQkFBQSxFQUFBQyx1QkFBQTtRQUMxQyxNQUFNQyxrQkFBa0IsSUFBQUYsc0JBQUEsR0FBRzlGLFFBQVEsQ0FBQ3RELFdBQVcsY0FBQW9KLHNCQUFBLHdCQUFBQyx1QkFBQSxHQUFwQkQsc0JBQUEsQ0FBc0JuSixNQUFNLGNBQUFvSix1QkFBQSx1QkFBNUJBLHVCQUFBLENBQThCRSxrQkFBa0I7UUFDM0UsTUFBTXhHLFlBQVksR0FBR08sUUFBUSxDQUFDOEIsSUFBSTtRQUNsQyxJQUFJLEVBQUVyQyxZQUFZLElBQUkwRix3QkFBd0IsQ0FBQyxFQUFFO1VBQ2hELElBQUlhLGtCQUFrQixJQUFJLEVBQUV2RyxZQUFZLElBQUk0RixpQkFBaUIsQ0FBQyxFQUFFO1lBQy9ELE1BQU1NLFdBQW9DLEdBQUdDLGNBQWMsQ0FBQ25HLFlBQVksRUFBRTFDLGdCQUFnQixFQUFFeUMsVUFBVSxDQUFDO1lBQ3ZHLElBQUltRyxXQUFXLEVBQUU7Y0FDaEJ2QyxlQUFlLENBQUN5QyxJQUFJLENBQUNGLFdBQVcsQ0FBQztZQUNsQztVQUNEO1FBQ0Q7TUFDRCxDQUFDLENBQUM7SUFDSDtJQUNBLE9BQU92QyxlQUFlO0VBQ3ZCLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVM4QyxtQkFBbUJBLENBQUNuSixnQkFBeUQsRUFBaUI7SUFBQSxJQUFBb0oscUJBQUEsRUFBQUMsc0JBQUE7SUFDdEcsTUFBTUMsbUJBQW1CLEdBQUd0SixnQkFBZ0IsQ0FBQ1csc0JBQXNCLENBQUMsQ0FBQztJQUNyRSxNQUFNNEksbUJBQW1CLEdBQUdELG1CQUFtQixDQUFDRSxpQkFBaUIsQ0FBQy9HLFVBQVU7SUFDNUUsTUFBTWdILGVBQWUsR0FBRyxDQUFDLEdBQUFMLHFCQUFBLEdBQUNHLG1CQUFtQixDQUFDNUosV0FBVyxjQUFBeUoscUJBQUEsZ0JBQUFDLHNCQUFBLEdBQS9CRCxxQkFBQSxDQUFpQ3hKLE1BQU0sY0FBQXlKLHNCQUFBLGVBQXZDQSxzQkFBQSxDQUF5Q3BCLGFBQWEsS0FBSSxDQUFDcUIsbUJBQW1CLENBQUNJLGVBQWU7SUFDeEgsTUFBTUMseUJBQXlCLEdBQzlCRixlQUFlLElBQUl6SixnQkFBZ0IsQ0FBQzRKLHNCQUFzQixDQUFZLElBQUlOLG1CQUFtQixDQUFDRSxpQkFBaUIsQ0FBQ3pFLElBQUksRUFBRSxDQUFDO0lBRXhILE9BQ0M0RSx5QkFBeUIsR0FDdEJKLG1CQUFtQixDQUFDdEMsZ0JBQWdCLENBQUNsRyxHQUFHLENBQUMsVUFBVWtDLFFBQVEsRUFBRTtNQUM3RCxPQUFPbUUsZUFBZSxDQUNyQixDQUFDLENBQUMsRUFDRm5FLFFBQVEsQ0FBQzhCLElBQUksRUFDYjRFLHlCQUF5QixFQUN6QkosbUJBQ0QsQ0FBQztJQUNELENBQUMsQ0FBQyxHQUNGLEVBQUU7RUFFUDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLE1BQU1NLDJCQUEyQixHQUFHLFNBQUFBLENBQzFDQyxnQkFBc0MsRUFDdENDLE1BQTRCLEVBQzVCL0osZ0JBQXlELEVBQy9DO0lBQ1Y7SUFDQSxNQUFNZ0ssZ0JBQWdCLEdBQUdELE1BQU0sQ0FBQ2pILE1BQU0sS0FBSyxDQUFDLElBQUlpSCxNQUFNLENBQUNFLEtBQUssQ0FBRUMsS0FBSyxJQUFLLENBQUNBLEtBQUssQ0FBQ0MsY0FBYyxDQUFDQyxZQUFZLENBQUM7O0lBRTNHO0lBQ0E7SUFDQSxNQUFNQyxnQkFBZ0IsR0FDckJQLGdCQUFnQixDQUFDaEgsTUFBTSxLQUFLLENBQUMsSUFDN0JnSCxnQkFBZ0IsQ0FBQ0csS0FBSyxDQUFFSyxLQUFLLElBQUssQ0FBQ0EsS0FBSyxDQUFDQyxlQUFlLElBQUlELEtBQUssQ0FBQzNJLE9BQU8sQ0FBQzZJLElBQUksS0FBSyxXQUFXLEtBQUssQ0FBQ0YsS0FBSyxDQUFDRyxpQkFBaUIsQ0FBQztJQUU3SCxNQUFNQyxXQUFXLEdBQUcxSyxnQkFBZ0IsQ0FBQzJLLGNBQWMsQ0FBQyxDQUFDO0lBQ3JELElBQUlELFdBQVcsSUFBSVYsZ0JBQWdCLElBQUlLLGdCQUFnQixFQUFFO01BQ3hELE9BQU8sSUFBSTtJQUNaLENBQUMsTUFBTTtNQUNOLE9BQU8sS0FBSztJQUNiO0VBQ0QsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BTyxRQUFBLENBQUFmLDJCQUFBLEdBQUFBLDJCQUFBO0VBT08sTUFBTWdCLHVCQUF1QixHQUFHLFNBQUFBLENBQ3RDcEksVUFBc0IsRUFDdEJ6QyxnQkFBeUQsRUFDekRnQyxjQUF1QixFQUNvQjtJQUFBLElBQUE4SSxTQUFBO0lBQzNDLE1BQU1DLGVBQWUsR0FBRy9LLGdCQUFnQixDQUFDTyxrQkFBa0IsQ0FBQyxDQUFDO0lBRTdELE1BQU15SyxtQkFBbUIsR0FDeEJELGVBQWUsQ0FBQ0osY0FBYyxDQUFDLENBQUMsS0FBS0ksZUFBZSxDQUFDRSxZQUFZLENBQUMsQ0FBQyxHQUFHLElBQUlGLGVBQWUsQ0FBQ0UsWUFBWSxDQUFDLENBQUMsRUFBRSxHQUFHdEgsU0FBUyxDQUFDO0lBQ3hILE1BQU11SCx1QkFBdUIsR0FBR0MsMEJBQTBCLENBQUNuTCxnQkFBZ0IsRUFBRWdMLG1CQUFtQixFQUFFaEosY0FBYyxDQUFDO0lBQ2pILElBQUlvSixRQUFxQyxHQUFHLENBQUMsQ0FBQztJQUM5Q0EsUUFBUSxHQUFHTCxlQUFlLENBQUN2SyxzQkFBc0IsQ0FBQzBLLHVCQUF1QixDQUFDO0lBRTFFLE1BQU1HLG1CQUFxRSxHQUFHLEVBQUFQLFNBQUEsR0FBQU0sUUFBUSxjQUFBTixTQUFBLHVCQUFSQSxTQUFBLENBQVVySyxZQUFZLEtBQUksQ0FBQyxDQUFDO0lBQzFHLE1BQU00RixlQUE0QyxHQUFHRix5QkFBeUIsQ0FDN0UxRCxVQUFVLEVBQ1Z2QixNQUFNLENBQUNDLElBQUksQ0FBQ2tLLG1CQUFtQixDQUFDLENBQUN0SyxHQUFHLENBQUVNLEdBQUcsSUFBS2dLLG1CQUFtQixDQUFDaEssR0FBRyxDQUFDLENBQUM0QixRQUFRLElBQUl1QixTQUFTLENBQUM4Ryw0QkFBNEIsQ0FBQ2pLLEdBQUcsQ0FBQyxDQUFDLEVBQy9ILElBQUksRUFDSnJCLGdCQUNELENBQUM7SUFDRCxNQUFNUyxZQUFzRCxHQUFHLENBQUMsQ0FBQztJQUVqRSxLQUFLLE1BQU04SyxJQUFJLElBQUlGLG1CQUFtQixFQUFFO01BQ3ZDLE1BQU05RyxXQUFXLEdBQUc4RyxtQkFBbUIsQ0FBQ0UsSUFBSSxDQUFDO01BQzdDLE1BQU1qSixZQUFZLEdBQUdpQyxXQUFXLENBQUN0QixRQUFRLElBQUl1QixTQUFTLENBQUM4Ryw0QkFBNEIsQ0FBQ0MsSUFBSSxDQUFDO01BQ3pGLE1BQU12SyxjQUFjLEdBQUdxRixlQUFlLENBQUMvRCxZQUFZLENBQUM7TUFDcEQsTUFBTWtJLElBQUksR0FBR2pHLFdBQVcsQ0FBQ2lHLElBQUksS0FBSyxNQUFNLEdBQUdsTSxlQUFlLENBQUNrTixJQUFJLEdBQUdsTixlQUFlLENBQUNtTixPQUFPO01BQ3pGLE1BQU1DLFlBQVksR0FDakJuSCxXQUFXLElBQUlBLFdBQVcsYUFBWEEsV0FBVyxlQUFYQSxXQUFXLENBQUVtSCxZQUFZLEdBQ3JDQyxnQkFBZ0IsQ0FBQ2xKLFVBQVUsRUFBRXpDLGdCQUFnQixFQUFFdUwsSUFBSSxFQUFFRixtQkFBbUIsQ0FBQyxHQUN6RTFILFNBQVM7TUFDYixJQUFJWSxXQUFXLENBQUNqRCxRQUFRLElBQUlpRCxXQUFXLENBQUNpRyxJQUFJLEtBQUtsTSxlQUFlLENBQUNrTixJQUFJLEVBQUU7UUFDdEUsSUFBSWpILFdBQVcsQ0FBQ2tCLFFBQVEsRUFBRTtVQUN6QmxCLFdBQVcsQ0FBQ2tCLFFBQVEsQ0FBQ21HLGNBQWMsR0FBRyxJQUFJO1FBQzNDLENBQUMsTUFBTTtVQUNOckgsV0FBVyxDQUFDa0IsUUFBUSxHQUFHO1lBQ3RCbUcsY0FBYyxFQUFFO1VBQ2pCLENBQUM7UUFDRjtNQUNEO01BQ0FuTCxZQUFZLENBQUM4SyxJQUFJLENBQUMsR0FBRztRQUNwQmxLLEdBQUcsRUFBRWtLLElBQUk7UUFDVGYsSUFBSSxFQUFFQSxJQUFJO1FBQ1ZxQixRQUFRLEVBQUUsQ0FBQXRILFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFc0gsUUFBUSxLQUFJTixJQUFJO1FBQ3ZDdkosY0FBYyxFQUFFaEIsY0FBYyxhQUFkQSxjQUFjLHVCQUFkQSxjQUFjLENBQUVnQixjQUFjO1FBQzlDMkMsYUFBYSxFQUFFSixXQUFXLENBQUN0QixRQUFRLEdBQ2hDdUIsU0FBUyxDQUFDOEcsNEJBQTRCLENBQUNDLElBQUksQ0FBQyxHQUM1QyxDQUFBdkssY0FBYyxhQUFkQSxjQUFjLHVCQUFkQSxjQUFjLENBQUUyRCxhQUFhLEtBQUlyQyxZQUFZO1FBQ2hEd0osZUFBZSxFQUNkdkgsV0FBVyxDQUFDdEIsUUFBUSxJQUNwQmpELGdCQUFnQixDQUFDK0wsc0JBQXNCLENBQ3RDLGFBQWEsR0FBR3hILFdBQVcsQ0FBQ3RCLFFBQVEsR0FBRyxtREFDeEMsQ0FBQztRQUNGM0IsUUFBUSxFQUFFaUQsV0FBVyxDQUFDakQsUUFBUTtRQUM5QndELEtBQUssRUFBRTlFLGdCQUFnQixDQUFDK0wsc0JBQXNCLENBQUN4SCxXQUFXLENBQUNPLEtBQUssQ0FBQztRQUNqRWtILFFBQVEsRUFBRXpILFdBQVcsQ0FBQ3lILFFBQVEsSUFBSTtVQUFFQyxTQUFTLEVBQUVDLFNBQVMsQ0FBQ0M7UUFBTSxDQUFDO1FBQ2hFdkgsWUFBWSxFQUFFTCxXQUFXLENBQUNLLFlBQVksSUFBSSxTQUFTO1FBQ25EYSxRQUFRLEVBQUVsQixXQUFXLENBQUNrQixRQUFRO1FBQzlCaUcsWUFBWSxFQUFFQSxZQUFZO1FBQzFCVSxRQUFRLEVBQUU3SCxXQUFXLENBQUM2SDtNQUN2QixDQUFDO0lBQ0Y7SUFDQSxPQUFPM0wsWUFBWTtFQUNwQixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkFtSyxRQUFBLENBQUFDLHVCQUFBLEdBQUFBLHVCQUFBO0VBT0EsTUFBTU0sMEJBQTBCLEdBQUcsU0FBQUEsQ0FDbENuTCxnQkFBeUQsRUFDekRnTCxtQkFBNEIsRUFDNUJoSixjQUF1QixFQUNGO0lBQ3JCLElBQUlxSyxVQUFVO0lBQ2QsTUFBTUMsb0JBQW9CLEdBQUd0TSxnQkFBZ0IsQ0FBQzJLLGNBQWMsQ0FBQyxDQUFDO0lBQzlELE1BQU00QixRQUFRLEdBQUcsR0FBR0Qsb0JBQW9CLElBQUl0SyxjQUFjLEVBQUU7SUFDNUQsSUFBSWdKLG1CQUFtQixJQUFJdUIsUUFBUSxhQUFSQSxRQUFRLGVBQVJBLFFBQVEsQ0FBRUMsVUFBVSxDQUFDeEIsbUJBQW1CLENBQUMsSUFBSWhKLGNBQWMsRUFBRTtNQUN2RnFLLFVBQVUsR0FBR0UsUUFBUSxDQUFDRSxPQUFPLENBQUMsR0FBR3pCLG1CQUFtQixHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQzdELENBQUMsTUFBTTtNQUNOcUIsVUFBVSxHQUFHckssY0FBYztJQUM1QjtJQUNBLE9BQU9xSyxVQUFVLEdBQUdBLFVBQVUsR0FBRzFJLFNBQVM7RUFDM0MsQ0FBQztFQUVNLE1BQU1rRixjQUFjLEdBQUcsU0FBQUEsQ0FDN0JuRyxZQUFvQixFQUNwQjFDLGdCQUF5RCxFQUN6RHlDLFVBQXNCLEVBQ0k7SUFDMUIsT0FBTzJFLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRTFFLFlBQVksRUFBRTFDLGdCQUFnQixFQUFFeUMsVUFBVSxDQUFDO0VBQ3ZFLENBQUM7RUFBQ21JLFFBQUEsQ0FBQS9CLGNBQUEsR0FBQUEsY0FBQTtFQUVLLE1BQU02RCxxQkFBcUIsR0FBRyxTQUFBQSxDQUNwQ0MsNkJBQWlFLEVBQ2pFQyxZQUE4RCxFQUNuRDtJQUNYLElBQUlDLE1BQWdCLEdBQUcsRUFBRTtJQUN6QixJQUFJRiw2QkFBNkIsSUFBSUEsNkJBQTZCLENBQUNDLFlBQVksQ0FBQyxFQUFFO01BQ2pGQyxNQUFNLEdBQUdGLDZCQUE2QixDQUFDQyxZQUFZLENBQUMsQ0FBQzdMLEdBQUcsQ0FBQyxVQUFVK0wsU0FBUyxFQUFFO1FBQzdFLE9BQU9BLFNBQVMsQ0FBQzdMLEtBQUs7TUFDdkIsQ0FBQyxDQUFDO0lBQ0g7SUFDQSxPQUFPNEwsTUFBTTtFQUNkLENBQUM7RUFBQ2pDLFFBQUEsQ0FBQThCLHFCQUFBLEdBQUFBLHFCQUFBO0VBQ0ssTUFBTUssMEJBQTBCLEdBQUcsU0FBQUEsQ0FDekNKLDZCQUFpRSxFQUN4QjtJQUN6QyxNQUFNSyxtQkFBMkQsR0FBRyxDQUFDLENBQUM7SUFDdEUsSUFBSUwsNkJBQTZCLElBQUlBLDZCQUE2QixDQUFDTSw0QkFBNEIsRUFBRTtNQUNoR04sNkJBQTZCLENBQUNNLDRCQUE0QixDQUFDcE8sT0FBTyxDQUFDLFVBQVVpTyxTQUEwQyxFQUFFO1FBQUEsSUFBQUksbUJBQUE7UUFDeEg7UUFDQSxJQUFJLENBQUFBLG1CQUFBLEdBQUFKLFNBQVMsQ0FBQ0ssUUFBUSxjQUFBRCxtQkFBQSxlQUFsQkEsbUJBQUEsQ0FBb0JqTSxLQUFLLElBQUk2TCxTQUFTLENBQUNNLGtCQUFrQixFQUFFO1VBQUEsSUFBQUMsb0JBQUE7VUFDOUQsSUFBSUwsbUJBQW1CLEVBQUFLLG9CQUFBLEdBQUNQLFNBQVMsQ0FBQ0ssUUFBUSxjQUFBRSxvQkFBQSx1QkFBbEJBLG9CQUFBLENBQW9CcE0sS0FBSyxDQUFDLEVBQUU7WUFBQSxJQUFBcU0sb0JBQUE7WUFDbkROLG1CQUFtQixFQUFBTSxvQkFBQSxHQUFDUixTQUFTLENBQUNLLFFBQVEsY0FBQUcsb0JBQUEsdUJBQWxCQSxvQkFBQSxDQUFvQnJNLEtBQUssQ0FBQyxDQUFDNkgsSUFBSSxDQUFDZ0UsU0FBUyxDQUFDTSxrQkFBa0IsQ0FBQzFOLFFBQVEsQ0FBQyxDQUFDLENBQUM7VUFDN0YsQ0FBQyxNQUFNO1lBQUEsSUFBQTZOLG9CQUFBO1lBQ05QLG1CQUFtQixFQUFBTyxvQkFBQSxHQUFDVCxTQUFTLENBQUNLLFFBQVEsY0FBQUksb0JBQUEsdUJBQWxCQSxvQkFBQSxDQUFvQnRNLEtBQUssQ0FBQyxHQUFHLENBQUM2TCxTQUFTLENBQUNNLGtCQUFrQixDQUFDMU4sUUFBUSxDQUFDLENBQUMsQ0FBQztVQUMzRjtRQUNEO01BQ0QsQ0FBQyxDQUFDO0lBQ0g7SUFDQSxPQUFPc04sbUJBQW1CO0VBQzNCLENBQUM7RUFBQ3BDLFFBQUEsQ0FBQW1DLDBCQUFBLEdBQUFBLDBCQUFBO0VBRUYsTUFBTVMsMkJBQTJCLEdBQUcsU0FBQUEsQ0FBQSxFQUEwQjtJQUM3RCxPQUFPO01BQ056SSxJQUFJLEVBQUUsU0FBUztNQUNmMUYsSUFBSSxFQUFFLFNBQVM7TUFDZm9PLFFBQVEsRUFBRWpQLGVBQWU7TUFDekJrUCxhQUFhLEVBQUU7SUFDaEIsQ0FBQztFQUNGLENBQUM7RUFFRCxNQUFNQyw4QkFBOEIsR0FBRyxTQUFBQSxDQUFBLEVBQTBCO0lBQ2hFLE9BQU87TUFDTjVJLElBQUksRUFBRSxZQUFZO01BQ2xCMUYsSUFBSSxFQUFFLFlBQVk7TUFDbEJHLFVBQVUsRUFBRSxFQUFFO01BQ2RGLEtBQUssRUFBRSxFQUFFO01BQ1RtTyxRQUFRLEVBQUVqUCxlQUFlO01BQ3pCb1AsWUFBWSxFQUFFO0lBQ2YsQ0FBQztFQUNGLENBQUM7RUFFRCxNQUFNQyxxQkFBcUIsR0FBRyxTQUFBQSxDQUFVN04sZ0JBQXlELEVBQWtDO0lBQUEsSUFBQThOLHFCQUFBO0lBQ2xJLE1BQU1DLFNBQVMsR0FBRy9OLGdCQUFnQixDQUFDaUwsWUFBWSxDQUFDLENBQUM7SUFDakQsT0FBTytDLFdBQVcsQ0FBQ0QsU0FBUyxDQUFDLElBQUFELHFCQUFBLEdBQUdDLFNBQVMsQ0FBQ3BPLFdBQVcsQ0FBQ3NPLFlBQVksY0FBQUgscUJBQUEsdUJBQWxDQSxxQkFBQSxDQUFvQ0ksa0JBQWtCLEdBQUd2SyxTQUFTO0VBQ25HLENBQUM7RUFFTSxNQUFNd0sseUJBQXlCLEdBQUcsU0FBQUEsQ0FDeENuTyxnQkFBeUQsRUFDekRvTyxlQUF1QixFQUNxQjtJQUFBLElBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBO0lBQzVDLE1BQU1DLHVCQUF1QixJQUFBSCxzQkFBQSxHQUFHck8sZ0JBQWdCLENBQUNpTCxZQUFZLENBQUMsQ0FBQyxjQUFBb0Qsc0JBQUEsd0JBQUFDLHNCQUFBLEdBQS9CRCxzQkFBQSxDQUFpQzFPLFdBQVcsY0FBQTJPLHNCQUFBLHdCQUFBQyxzQkFBQSxHQUE1Q0Qsc0JBQUEsQ0FBOENMLFlBQVksY0FBQU0sc0JBQUEsdUJBQTFEQSxzQkFBQSxDQUE0REUsc0JBQXNCO0lBQ2xILE1BQU1DLHFCQUFxQixHQUFHRix1QkFBdUIsSUFBSUEsdUJBQXVCLENBQUNHLG9CQUFvQjtJQUNyRyxPQUNDRCxxQkFBcUIsSUFDckJBLHFCQUFxQixDQUFDL0gsSUFBSSxDQUFDLFVBQVVpSSxtQkFBbUIsRUFBRTtNQUN6RCxPQUNDQSxtQkFBbUIsSUFDbkJBLG1CQUFtQixDQUFDQyxrQkFBa0IsSUFDdENELG1CQUFtQixDQUFDQyxrQkFBa0IsQ0FBQzVOLEtBQUssS0FBS21OLGVBQWU7SUFFbEUsQ0FBQyxDQUFDO0VBRUosQ0FBQztFQUNEOztFQWtDQTtFQUFBeEQsUUFBQSxDQUFBdUQseUJBQUEsR0FBQUEseUJBQUE7RUFpQkEsTUFBTVcsdUJBQXVCLEdBQUcsU0FBQUEsQ0FBVUMsZ0JBQTRDLEVBQWdCO0lBQUEsSUFBQUMscUJBQUE7SUFDckcsT0FBTztNQUNOM04sR0FBRyxFQUFFME4sZ0JBQWdCLENBQUMxTixHQUFHO01BQ3pCVyxjQUFjLEVBQUUrTSxnQkFBZ0IsQ0FBQy9NLGNBQWM7TUFDL0MyQyxhQUFhLEVBQUVvSyxnQkFBZ0IsQ0FBQ3BLLGFBQWE7TUFDN0NJLElBQUksRUFBRWdLLGdCQUFnQixDQUFDcEssYUFBYztNQUNyQ0csS0FBSyxFQUFFaUssZ0JBQWdCLENBQUNqSyxLQUFLO01BQzdCOEksWUFBWSxFQUFFbUIsZ0JBQWdCLENBQUNuSyxZQUFZLEtBQUssUUFBUTtNQUN4RHFLLE9BQU8sRUFBRSxPQUFPO01BQ2hCakgsV0FBVyxFQUFFK0csZ0JBQWdCLENBQUMvRyxXQUFXO01BQ3pDa0gsYUFBYSxFQUFFSCxnQkFBZ0IsQ0FBQ0csYUFBYTtNQUM3Q3RLLFlBQVksRUFBRW1LLGdCQUFnQixDQUFDbkssWUFBWTtNQUMzQ29ILFFBQVEsRUFBRStDLGdCQUFnQixDQUFDL0MsUUFBUTtNQUNuQ3hCLElBQUksRUFBRXVFLGdCQUFnQixDQUFDdkUsSUFBSTtNQUMzQmxKLFFBQVEsRUFBRXlOLGdCQUFnQixDQUFDek4sUUFBUTtNQUNuQzZOLElBQUksRUFBRUosZ0JBQWdCLENBQUNJLElBQUk7TUFDM0IvQyxRQUFRLEVBQUUyQyxnQkFBZ0IsQ0FBQzNDLFFBQVE7TUFDbkNSLGNBQWMsR0FBQW9ELHFCQUFBLEdBQUVELGdCQUFnQixDQUFDdEosUUFBUSxjQUFBdUoscUJBQUEsdUJBQXpCQSxxQkFBQSxDQUEyQnBEO0lBQzVDLENBQUM7RUFDRixDQUFDO0VBRUQsTUFBTXdELHVDQUF1QyxHQUFHLFNBQUFBLENBQy9DM08sWUFBbUMsRUFDbkNILG9CQUE4RCxFQUN2RDtJQUNQRyxZQUFZLENBQUM1QixPQUFPLENBQUUwRixXQUFXLElBQUs7TUFDckMsSUFBSWpFLG9CQUFvQixDQUFDK08sY0FBYyxDQUFDOUssV0FBVyxDQUFDbEQsR0FBRyxDQUFDLElBQUksQ0FBQ2Ysb0JBQW9CLENBQUNpRSxXQUFXLENBQUNsRCxHQUFHLENBQUMsQ0FBQ3lELEtBQUssRUFBRTtRQUN6R3hFLG9CQUFvQixDQUFDaUUsV0FBVyxDQUFDbEQsR0FBRyxDQUFDLENBQUN5RCxLQUFLLEdBQUdQLFdBQVcsQ0FBQ08sS0FBSztNQUNoRTtJQUNELENBQUMsQ0FBQztFQUNILENBQUM7RUFFTSxNQUFNd0ssNEJBQTRCLEdBQUcsU0FBQUEsQ0FBVUMsWUFBc0IsRUFBVTtJQUNyRixNQUFNQywyQkFBMkIsR0FBRyxDQUNuQyxhQUFhLEVBQ2IsWUFBWSxFQUNaLGFBQWEsRUFDYixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLDhCQUE4QixDQUM5QjtJQUVERCxZQUFZLENBQUNFLElBQUksQ0FBQyxVQUFVQyxDQUFTLEVBQUVDLENBQVMsRUFBRTtNQUNqRCxPQUFPSCwyQkFBMkIsQ0FBQ0ksT0FBTyxDQUFDRixDQUFDLENBQUMsR0FBR0YsMkJBQTJCLENBQUNJLE9BQU8sQ0FBQ0QsQ0FBQyxDQUFDO0lBQ3ZGLENBQUMsQ0FBQztJQUVGLE9BQU9KLFlBQVksQ0FBQyxDQUFDLENBQUM7RUFDdkIsQ0FBQztFQUFDM0UsUUFBQSxDQUFBMEUsNEJBQUEsR0FBQUEsNEJBQUE7RUFFSyxNQUFNTyxXQUFXLEdBQUcsU0FBQUEsQ0FDMUJDLG9CQUFxRCxFQUNyREMsc0JBQXlELEVBQ2hEO0lBQUEsSUFBQUMscUJBQUEsRUFBQUMsc0JBQUEsRUFBQUMsc0JBQUEsRUFBQUMsc0JBQUEsRUFBQUMsc0JBQUEsRUFBQUMscUJBQUE7SUFDVCxNQUFNQyxlQUFlLEdBQUdSLG9CQUFvQixhQUFwQkEsb0JBQW9CLHdCQUFBRSxxQkFBQSxHQUFwQkYsb0JBQW9CLENBQUVsUSxNQUFNLGNBQUFvUSxxQkFBQSx1QkFBNUJBLHFCQUFBLENBQThCTyxJQUFJO01BQ3pEQyx5QkFBeUIsR0FDeEJGLGVBQWUsS0FDYlIsb0JBQW9CLEtBQUlBLG9CQUFvQixhQUFwQkEsb0JBQW9CLHdCQUFBRyxzQkFBQSxHQUFwQkgsb0JBQW9CLENBQUVsUSxNQUFNLGNBQUFxUSxzQkFBQSx3QkFBQUMsc0JBQUEsR0FBNUJELHNCQUFBLENBQThCTSxJQUFJLGNBQUFMLHNCQUFBLHdCQUFBQyxzQkFBQSxHQUFsQ0Qsc0JBQUEsQ0FBb0N2USxXQUFXLGNBQUF3USxzQkFBQSx3QkFBQUMsc0JBQUEsR0FBL0NELHNCQUFBLENBQWlEdFAsRUFBRSxjQUFBdVAsc0JBQUEsdUJBQW5EQSxzQkFBQSxDQUFxREssZUFBZSxLQUM1RlYsc0JBQXNCLEtBQUlBLHNCQUFzQixhQUF0QkEsc0JBQXNCLHdCQUFBTSxxQkFBQSxHQUF0Qk4sc0JBQXNCLENBQUVsUCxFQUFFLGNBQUF3UCxxQkFBQSx1QkFBMUJBLHFCQUFBLENBQTRCSSxlQUFlLENBQUMsQ0FBQztJQUUzRSxJQUFJRCx5QkFBeUIsRUFBRTtNQUM5QixJQUFJQSx5QkFBeUIsQ0FBQzNNLE9BQU8sQ0FBQyxDQUFDLEtBQUssaUNBQWlDLEVBQUU7UUFDOUUsT0FBTyxhQUFhO01BQ3JCLENBQUMsTUFBTSxJQUFJMk0seUJBQXlCLENBQUMzTSxPQUFPLENBQUMsQ0FBQyxLQUFLLGlDQUFpQyxFQUFFO1FBQ3JGLE9BQU8sa0JBQWtCO01BQzFCO01BQ0EsT0FBTyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzVCO0lBQ0EsT0FBT3lNLGVBQWUsR0FBRyxrQkFBa0IsR0FBRyxPQUFPO0VBQ3RELENBQUM7RUFBQzFGLFFBQUEsQ0FBQWlGLFdBQUEsR0FBQUEsV0FBQTtFQUVLLE1BQU1hLGlCQUFpQixHQUFHLFNBQUFBLENBQ2hDMVEsZ0JBQXlELEVBQ3pEK08sZ0JBQTRDLEVBQzVDNEIsV0FBd0MsRUFDekI7SUFBQSxJQUFBQyxzQkFBQTtJQUNmLElBQUlDLGFBQWEsR0FBRy9CLHVCQUF1QixDQUFDQyxnQkFBZ0IsQ0FBQztJQUM3RCxNQUFNK0IsZUFBZSxHQUFHL0IsZ0JBQWdCLENBQUMvTSxjQUFjO0lBRXZELElBQUksQ0FBQzhPLGVBQWUsRUFBRTtNQUNyQixPQUFPRCxhQUFhO0lBQ3JCO0lBQ0EsTUFBTUUsb0JBQW9CLEdBQUcvUSxnQkFBZ0IsQ0FBQzRKLHNCQUFzQixDQUFXa0gsZUFBZSxDQUFDLENBQUNuUSxzQkFBc0IsQ0FBQyxDQUFDLENBQUM4RixZQUFZO0lBRXJJLE1BQU1xSixvQkFBb0IsR0FBR2lCLG9CQUFvQixhQUFwQkEsb0JBQW9CLHVCQUFwQkEsb0JBQW9CLENBQUVwUixXQUFXO0lBQzlELE1BQU1vUSxzQkFBc0IsR0FBRy9QLGdCQUFnQixhQUFoQkEsZ0JBQWdCLHdCQUFBNFEsc0JBQUEsR0FBaEI1USxnQkFBZ0IsQ0FBRVcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDOEYsWUFBWSxjQUFBbUssc0JBQUEsdUJBQXZEQSxzQkFBQSxDQUF5RGpSLFdBQVc7SUFFbkcsTUFBTXFSLGNBQWMsR0FBR0wsV0FBVyxDQUFDTSxhQUFhO0lBQ2hELE1BQU1DLFlBQVksR0FBR1AsV0FBVyxDQUFDUSxXQUFXO0lBQzVDTixhQUFhLEdBQUczUCxNQUFNLENBQUNrUSxNQUFNLENBQUNQLGFBQWEsRUFBRTtNQUM1Q0ksYUFBYSxFQUFFRCxjQUFjO01BQzdCRyxXQUFXLEVBQUVELFlBQVk7TUFDekJqQyxPQUFPLEVBQUVZLFdBQVcsQ0FBQ0Msb0JBQW9CLEVBQUVDLHNCQUFzQjtJQUNsRSxDQUFDLENBQUM7SUFDRixPQUFPYyxhQUFhO0VBQ3JCLENBQUM7RUFBQ2pHLFFBQUEsQ0FBQThGLGlCQUFBLEdBQUFBLGlCQUFBO0VBRUssTUFBTVcsWUFBWSxHQUFHLFNBQUFBLENBQVV2RSxTQUF1QixFQUFXO0lBQ3ZFLElBQUl3RSxhQUFhLEdBQUcsSUFBSTtJQUN4QjtJQUNBLFFBQVF4RSxTQUFTLENBQUN5RSxnQkFBZ0I7TUFDakMsS0FBSyxrQkFBa0I7TUFDdkIsS0FBSyxhQUFhO01BQ2xCLEtBQUssYUFBYTtRQUNqQkQsYUFBYSxHQUFHLEtBQUs7UUFDckI7TUFDRDtRQUNDO0lBQ0Y7SUFDQSxJQUFJeEUsU0FBUyxDQUFDdEMsSUFBSSxJQUFJc0MsU0FBUyxDQUFDdEMsSUFBSSxDQUFDb0YsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtNQUM1RDBCLGFBQWEsR0FBRyxLQUFLO0lBQ3RCO0lBQ0EsT0FBT0EsYUFBYTtFQUNyQixDQUFDO0VBQUMxRyxRQUFBLENBQUF5RyxZQUFBLEdBQUFBLFlBQUE7RUFFRixNQUFNRywrQkFBK0IsR0FBRyxTQUFBQSxDQUN2Q0MsS0FBNkIsRUFDeUQ7SUFBQSxJQUFBQyxpQkFBQTtJQUN0RixPQUNDLENBQUNELEtBQUssQ0FBQzFTLEtBQUssMkNBQWdDLElBQzNDMFMsS0FBSyxDQUFDMVMsS0FBSyxrREFBdUMsSUFDbEQwUyxLQUFLLENBQUMxUyxLQUFLLDZEQUFrRCxPQUFBMlMsaUJBQUEsR0FDOURELEtBQUssQ0FBQ3JTLEtBQUssQ0FBQ0MsSUFBSSxjQUFBcVMsaUJBQUEsdUJBQWhCQSxpQkFBQSxDQUFrQkMsUUFBUSxDQUFDLEdBQUcsQ0FBQztFQUVqQyxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLE1BQU1DLDRCQUE0QixHQUFHLFNBQUFBLENBQ3BDOVMsU0FBaUMsRUFDakNrQixnQkFBeUQsRUFDekQ2UixhQUF1QixFQUNoQjtJQUFBLElBQUFDLE1BQUE7SUFDUCxNQUFNQyxjQUFjLElBQUFELE1BQUEsR0FBSWhULFNBQVMsQ0FBZU0sS0FBSyxjQUFBMFMsTUFBQSx1QkFBOUJBLE1BQUEsQ0FBZ0NFLE9BQU87SUFDOUQsSUFBSUQsY0FBYyxFQUFFO01BQ25CLE1BQU1FLHNCQUFzQixHQUMzQkMsNkJBQTZCLENBQUNILGNBQWMsQ0FBQyxJQUM3Q0ksaUNBQWlDLENBQUNKLGNBQWMsQ0FBQyxJQUNqREssNkJBQTZCLENBQUNMLGNBQWMsQ0FBQyxJQUM3Q00saUNBQWlDLENBQUNOLGNBQWMsQ0FBQztNQUNsRCxNQUFNbkwsa0JBQWtCLEdBQUdxTCxzQkFBc0IsR0FDOUN6TCxvQkFBb0IsQ0FBQ3hHLGdCQUFnQixDQUFDVyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUVzUixzQkFBc0IsQ0FBQyxDQUFDdkwsb0JBQW9CLEdBQzVHL0MsU0FBUztNQUNaLElBQUlpRCxrQkFBa0IsYUFBbEJBLGtCQUFrQixlQUFsQkEsa0JBQWtCLENBQUU5RCxNQUFNLEVBQUU7UUFDL0IsTUFBTXdQLHNCQUFzQixHQUFHMUwsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM3QixJQUFJO1FBQ3pELElBQUksQ0FBQzhNLGFBQWEsQ0FBQ0YsUUFBUSxDQUFDVyxzQkFBc0IsQ0FBQyxFQUFFO1VBQ3BEVCxhQUFhLENBQUMvSSxJQUFJLENBQUN3SixzQkFBc0IsQ0FBQztRQUMzQztNQUNEO0lBQ0Q7RUFDRCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTUMsa0NBQWtDLEdBQUcsU0FBQUEsQ0FDMUNWLGFBQXVCLEVBQ3ZCL1MsU0FBaUMsRUFDakNrQixnQkFBeUQsRUFDOUM7SUFBQSxJQUFBd1MsaUJBQUEsRUFBQUMscUJBQUE7SUFDWCxRQUFRM1QsU0FBUyxDQUFDQyxLQUFLO01BQ3RCO1FBQ0MsSUFBSSxFQUFBeVQsaUJBQUEsR0FBQTFULFNBQVMsQ0FBQzRULE1BQU0sY0FBQUYsaUJBQUEsd0JBQUFDLHFCQUFBLEdBQWhCRCxpQkFBQSxDQUFrQlIsT0FBTyxjQUFBUyxxQkFBQSx1QkFBekJBLHFCQUFBLENBQTJCMVQsS0FBSyxpREFBcUMsRUFBRTtVQUFBLElBQUE0VCxzQkFBQTtVQUMxRSxDQUFBQSxzQkFBQSxHQUFBN1QsU0FBUyxDQUFDNFQsTUFBTSxDQUFDVixPQUFPLENBQUNwVCxJQUFJLGNBQUErVCxzQkFBQSx1QkFBN0JBLHNCQUFBLENBQStCOVQsT0FBTyxDQUFFK1QsY0FBc0MsSUFBSztZQUNsRkwsa0NBQWtDLENBQUNWLGFBQWEsRUFBRWUsY0FBYyxFQUFFNVMsZ0JBQWdCLENBQUM7VUFDcEYsQ0FBQyxDQUFDO1FBQ0g7UUFDQTtNQUNEO01BQ0E7TUFDQTtRQUNDLElBQUl3UiwrQkFBK0IsQ0FBQzFTLFNBQVMsQ0FBQyxFQUFFO1VBQy9DLE1BQU13VCxzQkFBc0IsR0FBR08sZ0JBQWdCLENBQzlDck0sb0JBQW9CLENBQUN4RyxnQkFBZ0IsQ0FBQ1csc0JBQXNCLENBQUMsQ0FBQyxFQUFFN0IsU0FBUyxDQUFDTSxLQUFLLENBQUNDLElBQUksQ0FBQyxFQUNyRixJQUNELENBQUMsQ0FBQ3VHLElBQUksQ0FBQyxHQUFHLENBQUM7VUFDWCxJQUFJLENBQUNpTSxhQUFhLENBQUNGLFFBQVEsQ0FBQ1csc0JBQXNCLENBQUMsRUFBRTtZQUNwRFQsYUFBYSxDQUFDL0ksSUFBSSxDQUFDd0osc0JBQXNCLENBQUM7VUFDM0M7UUFDRDtRQUNBO1FBQ0FWLDRCQUE0QixDQUFDOVMsU0FBUyxFQUFFa0IsZ0JBQWdCLEVBQUU2UixhQUFhLENBQUM7UUFDeEU7TUFDRDtRQUNDO1FBQ0E7SUFDRjtJQUNBLE9BQU9BLGFBQWE7RUFDckIsQ0FBQztFQUVELE1BQU1pQiw4QkFBOEIsR0FBRyxTQUFBQSxDQUN0QzlTLGdCQUF5RCxFQVl4RDtJQUFBLElBQUErUyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQTtJQUFBLElBWERDLFFBQThCLEdBQUFDLFNBQUEsQ0FBQXJRLE1BQUEsUUFBQXFRLFNBQUEsUUFBQXhQLFNBQUEsR0FBQXdQLFNBQUEsTUFBRyxFQUFFO0lBQUEsSUFDbkNuUixjQUFjLEdBQUFtUixTQUFBLENBQUFyUSxNQUFBLFFBQUFxUSxTQUFBLFFBQUF4UCxTQUFBLEdBQUF3UCxTQUFBLE1BQUcsRUFBRTtJQUFBLElBQ25CN1AsYUFBYSxHQUFBNlAsU0FBQSxDQUFBclEsTUFBQSxRQUFBcVEsU0FBQSxRQUFBeFAsU0FBQSxHQUFBd1AsU0FBQSxNQUFHLEtBQUs7SUFBQSxJQUNyQkMsWUFBcUIsR0FBQUQsU0FBQSxDQUFBclEsTUFBQSxPQUFBcVEsU0FBQSxNQUFBeFAsU0FBQTtJQVNyQjtJQUNBLE1BQU15RSx3QkFBd0IsR0FBR3RJLDJCQUEyQixDQUFDb1QsUUFBUSxFQUFFbFQsZ0JBQWdCLENBQUM7SUFDeEYsTUFBTXlDLFVBQVUsR0FBR3pDLGdCQUFnQixDQUFDcVQsYUFBYSxDQUFDLENBQUM7SUFDbkQ7SUFDQSxNQUFNaEwsd0JBQXdCLEdBQUtyRyxjQUFjLE1BQUErUSxzQkFBQSxHQUFJL1MsZ0JBQWdCLENBQUNzVCx1QkFBdUIsQ0FBQ3RSLGNBQWMsQ0FBQyxjQUFBK1Esc0JBQUEsdUJBQXhEQSxzQkFBQSxDQUEwRFEsVUFBVSxPQUFBUCxzQkFBQSxHQUN4SHZRLFVBQVUsQ0FBQzlDLFdBQVcsY0FBQXFULHNCQUFBLHdCQUFBQyxzQkFBQSxHQUF0QkQsc0JBQUEsQ0FBd0JuUyxFQUFFLGNBQUFvUyxzQkFBQSx1QkFBMUJBLHNCQUFBLENBQTRCblMsZUFBZSxLQUMzQyxFQUFxQjtJQUV0QixJQUFJK1EsYUFBdUIsR0FBRyxFQUFFO0lBQ2hDLElBQUlxQixRQUFRLENBQUNwUSxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQ3NRLFlBQVksRUFBRTtNQUFBLElBQUFJLHVCQUFBO01BQzVDLENBQUFBLHVCQUFBLEdBQUN4VCxnQkFBZ0IsQ0FBQ3NULHVCQUF1QixDQUFDRixZQUFZLENBQUMsQ0FBQ0csVUFBVSxjQUFBQyx1QkFBQSx1QkFBbEVBLHVCQUFBLENBQWlGM1UsT0FBTyxDQUFFQyxTQUFpQyxJQUFLO1FBQy9IK1MsYUFBYSxHQUFHVSxrQ0FBa0MsQ0FBQ1YsYUFBYSxFQUFFL1MsU0FBUyxFQUFFa0IsZ0JBQWdCLENBQUM7TUFDL0YsQ0FBQyxDQUFDO0lBQ0g7SUFFQSxJQUFJeVQsV0FBVyxDQUFDQyxXQUFXLENBQUMxVCxnQkFBZ0IsQ0FBQ2lMLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRTtNQUM3RDRHLGFBQWEsQ0FBQy9JLElBQUksQ0FDakIsMENBQTBDLEVBQzFDLHVDQUF1QyxFQUN2Qyw0Q0FBNEMsRUFDNUMsMkNBQ0QsQ0FBQztJQUNGOztJQUVBO0lBQ0EsTUFBTXJJLFlBQXlDLEdBQUc7TUFDakQ7TUFDQSxHQUFHcUYsbUJBQW1CLENBQUNyRCxVQUFVLEVBQUUsRUFBRSxFQUFFQSxVQUFVLENBQUN3RSxnQkFBZ0IsRUFBRTNELGFBQWEsRUFBRXRELGdCQUFnQixDQUFDO01BQ3BHO01BQ0EsR0FBR21HLHlCQUF5QixDQUFDMUQsVUFBVSxFQUFFb1AsYUFBYSxFQUFFLEtBQUssRUFBRTdSLGdCQUFnQixDQUFDO01BQ2hGO01BQ0EsR0FBR21HLHlCQUF5QixDQUMzQjFELFVBQVUsRUFDVnpDLGdCQUFnQixDQUFDTyxrQkFBa0IsQ0FBQyxDQUFDLENBQUNDLHNCQUFzQixDQUFDLENBQUMsQ0FBQ2tHLG9CQUFvQixFQUNuRnBELGFBQWEsRUFDYnRELGdCQUNEO0lBQ0QsQ0FBQztJQUNELElBQUltSSxjQUFrQyxHQUFHLEVBQUU7SUFDM0MsTUFBTXdMLGdCQUFnQixHQUFHQyxtQkFBbUIsQ0FBQ25SLFVBQVUsRUFBRXpDLGdCQUFnQixDQUFDO0lBQzFFLElBQUkyVCxnQkFBZ0IsRUFBRTtNQUNyQnhMLGNBQWMsR0FBR3dMLGdCQUFnQixDQUFDRSxhQUFhO0lBQ2hEO0lBRUEsTUFBTUMsa0JBQWlDLEdBQ3RDLENBQUF6TCx3QkFBd0IsYUFBeEJBLHdCQUF3Qix1QkFBeEJBLHdCQUF3QixDQUFFMEwsTUFBTSxDQUFDLENBQUMxTixlQUE4QixFQUFFckYsY0FBYyxLQUFLO01BQ3BGLE1BQU0wQixZQUFZLEdBQUcxQixjQUFjLENBQUNDLEtBQUs7TUFDekMsSUFBSSxDQUFDbUgsd0JBQXdCLENBQUNuRyxHQUFHLENBQUNTLFlBQVksQ0FBQyxFQUFFO1FBQ2hELElBQUlxRCxjQUFzQjtRQUMxQixJQUFJL0QsY0FBYyxhQUFkQSxjQUFjLGVBQWRBLGNBQWMsQ0FBRXdLLFVBQVUsQ0FBQyw2Q0FBNkMsQ0FBQyxFQUFFO1VBQzlFekcsY0FBYyxHQUFHLEVBQUU7UUFDcEIsQ0FBQyxNQUFNO1VBQ05BLGNBQWMsR0FBRy9ELGNBQWMsYUFBZEEsY0FBYyx1QkFBZEEsY0FBYyxDQUFFWSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUY7UUFFQSxNQUFNb1Isa0JBQWtCLEdBQUdqTyxjQUFjLEdBQUdBLGNBQWMsR0FBRyxHQUFHLEdBQUdyRCxZQUFZLEdBQUdBLFlBQVk7UUFDOUYsTUFBTTZCLFdBQW9DLEdBQUc2QyxlQUFlLENBQzNEM0csWUFBWSxFQUNadVQsa0JBQWtCLEVBQ2xCaFUsZ0JBQWdCLEVBQ2hCeUMsVUFDRCxDQUFDO1FBQ0QsSUFBSThCLFdBQVcsRUFBRTtVQUNoQkEsV0FBVyxDQUFDakYsS0FBSyxHQUFHLEVBQUU7VUFDdEJpRixXQUFXLENBQUMvRSxVQUFVLEdBQUcsRUFBRTtVQUMzQjZHLGVBQWUsQ0FBQ3lDLElBQUksQ0FBQ3ZFLFdBQVcsQ0FBQztRQUNsQztNQUNEO01BQ0EsT0FBTzhCLGVBQWU7SUFDdkIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFJLEVBQUU7SUFFYixNQUFNNE4sbUJBQW1CLEdBQUcvTCx1QkFBdUIsQ0FDbERDLGNBQWMsRUFDZDFGLFVBQVUsRUFDVnpDLGdCQUFnQixFQUNoQm9JLHdCQUF3QixFQUN4QkMsd0JBQ0QsQ0FBQztJQUVELE9BQU87TUFDTkQsd0JBQXdCLEVBQUVBLHdCQUF3QjtNQUNsRDNGLFVBQVUsRUFBRUEsVUFBVTtNQUN0QjRGLHdCQUF3QixFQUFFQSx3QkFBd0I7TUFDbEQ1SCxZQUFZLEVBQUVBLFlBQVk7TUFDMUJxVCxrQkFBa0IsRUFBRUEsa0JBQWtCO01BQ3RDRyxtQkFBbUIsRUFBRUE7SUFDdEIsQ0FBQztFQUNGLENBQUM7RUFFTSxNQUFNQyxlQUFlLEdBQUcsU0FBQUEsQ0FBVWpSLFFBQW1CLEVBQXNCO0lBQ2pGLE1BQU0wTixXQUFXLEdBQUd3RCxhQUFhLENBQUNsUixRQUFRLEVBQUVBLFFBQVEsYUFBUkEsUUFBUSx1QkFBUkEsUUFBUSxDQUFFdUgsSUFBSSxDQUFDO0lBQzNELElBQUksQ0FBQXZILFFBQVEsYUFBUkEsUUFBUSx1QkFBUkEsUUFBUSxDQUFFdUgsSUFBSSxNQUFLak0sVUFBVSxLQUFLb1MsV0FBVyxDQUFDUSxXQUFXLENBQUNpRCxRQUFRLEtBQUt6USxTQUFTLElBQUlnTixXQUFXLENBQUNRLFdBQVcsQ0FBQ2lELFFBQVEsS0FBSyxJQUFJLENBQUMsRUFBRTtNQUNuSXpELFdBQVcsQ0FBQ00sYUFBYSxDQUFDb0QscUJBQXFCLEdBQUcsS0FBSztJQUN4RDtJQUNBLE9BQU8xRCxXQUFXO0VBQ25CLENBQUM7RUFBQy9GLFFBQUEsQ0FBQXNKLGVBQUEsR0FBQUEsZUFBQTtFQUVLLE1BQU1JLDRCQUE0QixHQUFHLFNBQUFBLENBQzNDQyxpQkFBNkMsRUFDN0N2VSxnQkFBeUQsRUFDekR3VSxjQUF5QixFQUN6QkMsV0FBd0QsRUFDekM7SUFDZixJQUFJNUQsYUFBYSxHQUFHSCxpQkFBaUIsQ0FBQzFRLGdCQUFnQixFQUFFdVUsaUJBQWlCLEVBQUVFLFdBQVcsQ0FBQ0YsaUJBQWlCLENBQUNsVCxHQUFHLENBQUUsQ0FBQztNQUM5R3FILGFBQWEsR0FBRyxFQUFFO0lBQ25CLElBQUk2TCxpQkFBaUIsQ0FBQzVQLGFBQWEsRUFBRTtNQUNwQytELGFBQWEsR0FBRzZMLGlCQUFpQixDQUFDNVAsYUFBYSxDQUFDOEgsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7SUFDdEU7SUFDQSxJQUFJb0UsYUFBYSxFQUFFO01BQ2xCQSxhQUFhLEdBQUczUCxNQUFNLENBQUNrUSxNQUFNLENBQUNQLGFBQWEsRUFBRTtRQUM1Q25ELGFBQWEsRUFBRSxDQUFDbUQsYUFBYSxDQUFDN0ksV0FBVyxJQUFJcUosWUFBWSxDQUFDUixhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ2pGekUsUUFBUSxFQUFFbUksaUJBQWlCLENBQUNuSSxRQUFRLEtBQUt5RSxhQUFhLENBQUM3SSxXQUFXLElBQUl3TSxjQUFjLENBQUM3QyxRQUFRLENBQUNqSixhQUFhLENBQUMsQ0FBQztRQUM3R3dHLGFBQWEsRUFBRXdGLHdCQUF3QixDQUFDMVUsZ0JBQWdCLENBQUM7UUFDekR5TixRQUFRLEVBQUVnSCxXQUFXLENBQUNGLGlCQUFpQixDQUFDbFQsR0FBRyxDQUFFLENBQUNtSjtNQUMvQyxDQUFDLENBQUM7SUFDSDtJQUNBLE9BQU9xRyxhQUFhO0VBQ3JCLENBQUM7RUFBQ2pHLFFBQUEsQ0FBQTBKLDRCQUFBLEdBQUFBLDRCQUFBO0VBRUssTUFBTUssc0JBQXNCLEdBQUcsU0FBQUEsQ0FDckNiLGtCQUFpQyxFQUNqQzlULGdCQUF5RCxFQUN6RDRVLDBCQUEwQyxFQUN6QjtJQUFBLElBQUFDLHNCQUFBO0lBQ2pCO0lBQ0EsTUFBTUosV0FBd0QsR0FBRyxDQUFDLENBQUM7SUFFbkUsSUFBSUcsMEJBQTBCLEVBQUU7TUFDL0JkLGtCQUFrQixHQUFHQSxrQkFBa0IsQ0FBQ2dCLE1BQU0sQ0FBQ0YsMEJBQTBCLENBQUM7SUFDM0U7SUFDQTtJQUNBZCxrQkFBa0IsQ0FBQ2pWLE9BQU8sQ0FBQyxVQUFVa1csY0FBYyxFQUFFO01BQ3BELElBQUlBLGNBQWMsQ0FBQy9TLGNBQWMsRUFBRTtRQUNsQyxNQUFNZ1QsdUJBQXVCLEdBQUdoVixnQkFBZ0IsQ0FBQzRKLHNCQUFzQixDQUFXbUwsY0FBYyxDQUFDL1MsY0FBYyxDQUFDO1FBQ2hILE1BQU1pVCxvQkFBb0IsR0FBR0QsdUJBQXVCLENBQUNyVSxzQkFBc0IsQ0FBQyxDQUFDLENBQUM4RixZQUFZO1FBQzFGLE1BQU1rSyxXQUFXLEdBQUd1RCxlQUFlLENBQUNlLG9CQUFvQixDQUFDO1FBQ3pEUixXQUFXLENBQUNNLGNBQWMsQ0FBQzFULEdBQUcsQ0FBQyxHQUFHc1AsV0FBVztNQUM5QyxDQUFDLE1BQU07UUFDTjhELFdBQVcsQ0FBQ00sY0FBYyxDQUFDMVQsR0FBRyxDQUFDLEdBQUc7VUFBRW1KLElBQUksRUFBRWhNO1FBQWdCLENBQUM7TUFDNUQ7SUFDRCxDQUFDLENBQUM7O0lBRUY7SUFDQSxNQUFNdVAsU0FBUyxHQUFHL04sZ0JBQWdCLENBQUNpTCxZQUFZLENBQUMsQ0FBQztJQUNqRCxNQUFNaUssbUJBQW1CLEdBQUdsSCxXQUFXLENBQUNELFNBQVMsQ0FBQyxJQUFBOEcsc0JBQUEsR0FBRzlHLFNBQVMsQ0FBQ3BPLFdBQVcsQ0FBQ3NPLFlBQVksY0FBQTRHLHNCQUFBLHVCQUFsQ0Esc0JBQUEsQ0FBb0NNLGtCQUFrQixHQUFHeFIsU0FBUztJQUN2SCxNQUFNeVIsSUFJTCxHQUFHLENBQUMsQ0FBQztJQUNOQSxJQUFJLENBQUNDLGtCQUFrQixHQUFHM0kscUJBQXFCLENBQUN3SSxtQkFBbUIsRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUU7SUFDaEdFLElBQUksQ0FBQ0UsdUJBQXVCLEdBQUc1SSxxQkFBcUIsQ0FBQ3dJLG1CQUFtQixFQUFFLHlCQUF5QixDQUFDLElBQUksRUFBRTtJQUMxR0UsSUFBSSxDQUFDRyx3QkFBd0IsR0FBR3hJLDBCQUEwQixDQUFDbUksbUJBQW1CLENBQUM7SUFFL0UsTUFBTU0sY0FBYyxHQUFHeFYsZ0JBQWdCLENBQUMySyxjQUFjLENBQUMsQ0FBQztJQUN4RCxNQUFNOEssVUFBVSxHQUFHRCxjQUFjLENBQUM1UyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQzVDLElBQUk2UyxVQUFVLENBQUMzUyxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQzFCLE1BQU1zTCxlQUFlLEdBQUdxSCxVQUFVLENBQUNBLFVBQVUsQ0FBQzNTLE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDekQyUyxVQUFVLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDeEIsTUFBTWxILHVCQUF1QixHQUFHTCx5QkFBeUIsQ0FBQ25PLGdCQUFnQixFQUFFb08sZUFBZSxDQUFDO01BQzVGLE1BQU11SCw2QkFBNkIsR0FBR25ILHVCQUF1QixJQUFJQSx1QkFBdUIsQ0FBQzJHLGtCQUFrQjtNQUMzR0MsSUFBSSxDQUFDQyxrQkFBa0IsR0FBR0QsSUFBSSxDQUFDQyxrQkFBa0IsQ0FBQ1AsTUFBTSxDQUN2RHBJLHFCQUFxQixDQUFDaUosNkJBQTZCLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxFQUMvRSxDQUFDO01BQ0RQLElBQUksQ0FBQ0UsdUJBQXVCLEdBQUdGLElBQUksQ0FBQ0UsdUJBQXVCLENBQUNSLE1BQU0sQ0FDakVwSSxxQkFBcUIsQ0FBQ2lKLDZCQUE2QixFQUFFLHlCQUF5QixDQUFDLElBQUksRUFDcEYsQ0FBQztNQUNEUCxJQUFJLENBQUNHLHdCQUF3QixHQUFHO1FBQy9CLElBQUl4SSwwQkFBMEIsQ0FBQzRJLDZCQUE2QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEUsR0FBR1AsSUFBSSxDQUFDRztNQUNULENBQUM7SUFDRjtJQUNBLE1BQU1mLGNBQWMsR0FBR1ksSUFBSSxDQUFDQyxrQkFBa0I7SUFDOUMsTUFBTU8sbUJBQW1CLEdBQUdSLElBQUksQ0FBQ0UsdUJBQXVCO0lBQ3hELE1BQU1PLGtCQUFrQyxHQUFHLEVBQUU7O0lBRTdDO0lBQ0EvQixrQkFBa0IsQ0FBQ2pWLE9BQU8sQ0FBQyxVQUFVMFYsaUJBQWlCLEVBQUU7TUFDdkQsTUFBTTdMLGFBQWEsR0FBRzZMLGlCQUFpQixDQUFDNVAsYUFBYSxDQUFDOEgsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7TUFDMUUsSUFBSSxDQUFDbUosbUJBQW1CLENBQUNqRSxRQUFRLENBQUNqSixhQUFhLENBQUMsRUFBRTtRQUNqRCxNQUFNbUksYUFBYSxHQUFHeUQsNEJBQTRCLENBQUNDLGlCQUFpQixFQUFFdlUsZ0JBQWdCLEVBQUV3VSxjQUFjLEVBQUVDLFdBQVcsQ0FBQztRQUNwSG9CLGtCQUFrQixDQUFDL00sSUFBSSxDQUFDK0gsYUFBYSxDQUFDO01BQ3ZDO0lBQ0QsQ0FBQyxDQUFDOztJQUVGO0lBQ0EsTUFBTXZILG1CQUFtQixHQUFHdEosZ0JBQWdCLENBQUNXLHNCQUFzQixDQUFDLENBQUM7SUFDckUsSUFBSThTLFdBQVcsQ0FBQ3FDLDBCQUEwQixDQUFDeE0sbUJBQW1CLENBQUMsRUFBRTtNQUNoRXVNLGtCQUFrQixDQUFDL00sSUFBSSxDQUFDNkUsOEJBQThCLENBQUMsQ0FBQyxDQUFDO0lBQzFEO0lBQ0E7SUFDQSxNQUFNb0ksa0JBQWtCLEdBQUdsSSxxQkFBcUIsQ0FBQzdOLGdCQUFnQixDQUFDO0lBQ2xFLE1BQU1nVyxlQUFlLEdBQUdDLE9BQU8sQ0FBQ0Ysa0JBQWtCLElBQUksQ0FBQ0Esa0JBQWtCLENBQUNHLFVBQVUsQ0FBQztJQUNyRixJQUFJVixjQUFjLElBQUlRLGVBQWUsS0FBSyxJQUFJLEVBQUU7TUFDL0MsSUFBSSxDQUFDRCxrQkFBa0IsSUFBSUEsa0JBQWtCLGFBQWxCQSxrQkFBa0IsZUFBbEJBLGtCQUFrQixDQUFFRyxVQUFVLEVBQUU7UUFDMURMLGtCQUFrQixDQUFDL00sSUFBSSxDQUFDMEUsMkJBQTJCLENBQUMsQ0FBQyxDQUFDO01BQ3ZEO0lBQ0Q7SUFFQSxPQUFPcUksa0JBQWtCO0VBQzFCLENBQUM7RUFBQ2pMLFFBQUEsQ0FBQStKLHNCQUFBLEdBQUFBLHNCQUFBO0VBRUssTUFBTXdCLDRCQUE0QixHQUFHLFNBQUFBLENBQzNDMVYsWUFBbUMsRUFDbkNnQyxVQUFzQixFQUN0QnpDLGdCQUF5RCxFQUN6RGdDLGNBQXNCLEVBQ0U7SUFDeEIsTUFBTTFCLG9CQUFvQixHQUFHdUssdUJBQXVCLENBQUNwSSxVQUFVLEVBQUV6QyxnQkFBZ0IsRUFBRWdDLGNBQWMsQ0FBQztJQUNsR29OLHVDQUF1QyxDQUFDM08sWUFBWSxFQUFFSCxvQkFBb0IsQ0FBQztJQUMzRSxPQUFPOFYsb0JBQW9CLENBQUMzVixZQUFZLEVBQUVILG9CQUFvQixFQUFFO01BQy9Ec0UsWUFBWSxFQUFFeVIsWUFBWSxDQUFDQyxTQUFTO01BQ3BDeFIsS0FBSyxFQUFFdVIsWUFBWSxDQUFDQyxTQUFTO01BQzdCOUwsSUFBSSxFQUFFNkwsWUFBWSxDQUFDQyxTQUFTO01BQzVCdEssUUFBUSxFQUFFcUssWUFBWSxDQUFDQyxTQUFTO01BQ2hDekssUUFBUSxFQUFFd0ssWUFBWSxDQUFDQyxTQUFTO01BQ2hDeEssZUFBZSxFQUFFdUssWUFBWSxDQUFDQyxTQUFTO01BQ3ZDaFYsUUFBUSxFQUFFK1UsWUFBWSxDQUFDQyxTQUFTO01BQ2hDN1EsUUFBUSxFQUFFNFEsWUFBWSxDQUFDQyxTQUFTO01BQ2hDNUssWUFBWSxFQUFFMkssWUFBWSxDQUFDQyxTQUFTO01BQ3BDbEssUUFBUSxFQUFFaUssWUFBWSxDQUFDQztJQUN4QixDQUFDLENBQUM7RUFDSCxDQUFDO0VBQUMxTCxRQUFBLENBQUF1TCw0QkFBQSxHQUFBQSw0QkFBQTtFQUVLLE1BQU1JLDZCQUE2QixHQUFJQyxhQUE2QixJQUFXO0lBQ3JGQSxhQUFhLENBQUMvRyxJQUFJLENBQUMsVUFBVUMsQ0FBYyxFQUFFQyxDQUFjLEVBQUU7TUFDNUQsTUFBTThHLGdCQUFnQixHQUFHL0csQ0FBQyxDQUFDbFEsVUFBVSxLQUFLbUUsU0FBUyxJQUFJK0wsQ0FBQyxDQUFDbFEsVUFBVSxLQUFLLElBQUk7TUFDNUUsTUFBTWtYLGdCQUFnQixHQUFHL0csQ0FBQyxDQUFDblEsVUFBVSxLQUFLbUUsU0FBUyxJQUFJZ00sQ0FBQyxDQUFDblEsVUFBVSxLQUFLLElBQUk7TUFDNUUsSUFBSSxDQUFDaVgsZ0JBQWdCLElBQUksQ0FBQ0MsZ0JBQWdCLEVBQUU7UUFDM0MsT0FBTyxDQUFDO01BQ1Q7TUFDQSxJQUFJRCxnQkFBZ0IsSUFBSSxDQUFDQyxnQkFBZ0IsRUFBRTtRQUMxQyxPQUFPLENBQUMsQ0FBQztNQUNWO01BQ0EsSUFBSSxDQUFDRCxnQkFBZ0IsSUFBSUMsZ0JBQWdCLEVBQUU7UUFDMUMsT0FBTyxDQUFDO01BQ1Q7TUFDQSxPQUFPaEgsQ0FBQyxDQUFDbFEsVUFBVSxDQUFFbVgsYUFBYSxDQUFDaEgsQ0FBQyxDQUFDblEsVUFBVyxDQUFDO0lBQ2xELENBQUMsQ0FBQztFQUNILENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFUQW9MLFFBQUEsQ0FBQTJMLDZCQUFBLEdBQUFBLDZCQUFBO0VBVU8sTUFBTUssa0JBQWtCLEdBQUcsU0FBQUEsQ0FDakM1VyxnQkFBeUQsRUFLRztJQUFBLElBQUE2VyxzQkFBQSxFQUFBQyxzQkFBQTtJQUFBLElBSjVENUQsUUFBOEIsR0FBQUMsU0FBQSxDQUFBclEsTUFBQSxRQUFBcVEsU0FBQSxRQUFBeFAsU0FBQSxHQUFBd1AsU0FBQSxNQUFHLEVBQUU7SUFBQSxJQUNuQ25SLGNBQWMsR0FBQW1SLFNBQUEsQ0FBQXJRLE1BQUEsUUFBQXFRLFNBQUEsUUFBQXhQLFNBQUEsR0FBQXdQLFNBQUEsTUFBRyxFQUFFO0lBQUEsSUFDbkI3UCxhQUF1QixHQUFBNlAsU0FBQSxDQUFBclEsTUFBQSxPQUFBcVEsU0FBQSxNQUFBeFAsU0FBQTtJQUFBLElBQ3ZCeVAsWUFBcUIsR0FBQUQsU0FBQSxDQUFBclEsTUFBQSxPQUFBcVEsU0FBQSxNQUFBeFAsU0FBQTtJQUVyQixNQUFNb1QsNEJBQTRCLEdBQUdqRSw4QkFBOEIsQ0FDbEU5UyxnQkFBZ0IsRUFDaEJrVCxRQUFRLEVBQ1JsUixjQUFjLEVBQ2RzQixhQUFhLEVBQ2I4UCxZQUNELENBQUM7SUFDRCxNQUFNNEQsZUFBZSxHQUFHN04sbUJBQW1CLENBQUNuSixnQkFBZ0IsQ0FBQztJQUM3RCxJQUFJOFQsa0JBQWlDLEdBQUdpRCw0QkFBNEIsQ0FBQ2pELGtCQUFrQjtJQUN2RixNQUFNclIsVUFBVSxHQUFHc1UsNEJBQTRCLENBQUN0VSxVQUFVO0lBRTFEcVIsa0JBQWtCLEdBQUdrRCxlQUFlLENBQUNsQyxNQUFNLENBQUNoQixrQkFBa0IsQ0FBQztJQUUvREEsa0JBQWtCLEdBQUdxQyw0QkFBNEIsQ0FBQ3JDLGtCQUFrQixFQUFFclIsVUFBVSxFQUFFekMsZ0JBQWdCLEVBQUVnQyxjQUFjLENBQUM7SUFFbkgsTUFBTTZULGtCQUFrQixHQUFHbEIsc0JBQXNCLENBQ2hEYixrQkFBa0IsRUFDbEI5VCxnQkFBZ0IsRUFDaEIrVyw0QkFBNEIsQ0FBQzlDLG1CQUM5QixDQUFDO0lBQ0RzQyw2QkFBNkIsQ0FBQ1Ysa0JBQWtCLENBQUM7SUFFakQsSUFBSW9CLGdCQUFnQixHQUFHQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ3RCLGtCQUFrQixDQUFDO0lBQ3pEb0IsZ0JBQWdCLEdBQUdBLGdCQUFnQixDQUFDeEssT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7SUFDekR3SyxnQkFBZ0IsR0FBR0EsZ0JBQWdCLENBQUN4SyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztJQUN6RCxNQUFNMkssYUFBYSxHQUFHSCxnQkFBZ0I7SUFDdEM7O0lBRUE7SUFDQSxJQUFJSSxtQkFBa0MsR0FBR0gsSUFBSSxDQUFDSSxLQUFLLENBQUNKLElBQUksQ0FBQ0MsU0FBUyxDQUFDSiw0QkFBNEIsQ0FBQ2pELGtCQUFrQixDQUFDLENBQUM7SUFDcEh1RCxtQkFBbUIsR0FBR0wsZUFBZSxDQUFDbEMsTUFBTSxDQUFDdUMsbUJBQW1CLENBQUM7SUFDakU7SUFDQSxNQUFNalAsd0JBQXdCLEdBQUcyTyw0QkFBNEIsQ0FBQzNPLHdCQUF3QjtJQUN0RixNQUFNbVAsWUFBWSxHQUFHOVUsVUFBVSxhQUFWQSxVQUFVLHdCQUFBb1Usc0JBQUEsR0FBVnBVLFVBQVUsQ0FBRTlDLFdBQVcsY0FBQWtYLHNCQUFBLHdCQUFBQyxzQkFBQSxHQUF2QkQsc0JBQUEsQ0FBeUJoVyxFQUFFLGNBQUFpVyxzQkFBQSx1QkFBM0JBLHNCQUFBLENBQTZCVSxZQUFZO0lBQzlELElBQUk3WSxjQUEyQyxHQUFHLENBQUMsQ0FBQztJQUVwRCxNQUFNOFksWUFBWSxHQUFHelgsZ0JBQWdCLENBQUMwWCxvQkFBb0IsQ0FBQyxJQUFJLHlDQUE4QixDQUFpQjtJQUU5RyxJQUFJSCxZQUFZLEtBQUs1VCxTQUFTLElBQUk0VCxZQUFZLENBQUN6VSxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQzFELEtBQUssTUFBTTZVLENBQUMsSUFBSUYsWUFBWSxFQUFFO1FBQzdCOVksY0FBYyxHQUFHO1VBQ2hCLEdBQUdBLGNBQWM7VUFDakIsR0FBR0YseUJBQXlCLENBQUNnWixZQUFZLENBQUNFLENBQUMsQ0FBQztRQUM3QyxDQUFDO01BQ0Y7SUFDRCxDQUFDLE1BQU07TUFDTmhaLGNBQWMsR0FBRzRZLFlBQVksQ0FBQ3hELE1BQU0sQ0FBQyxDQUFDNkQsYUFBMEMsRUFBRUMsV0FBZ0MsS0FBSztRQUN0SCxLQUFLLElBQUlGLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsSUFBSUUsV0FBVyxhQUFYQSxXQUFXLHdCQUFBQyxtQkFBQSxHQUFYRCxXQUFXLENBQUVuRixNQUFNLGNBQUFvRixtQkFBQSx3QkFBQUMscUJBQUEsR0FBbkJELG1CQUFBLENBQXFCOUYsT0FBTyxjQUFBK0YscUJBQUEsd0JBQUFDLHNCQUFBLEdBQTdCRCxxQkFBQSxDQUE4Q25aLElBQUksY0FBQW9aLHNCQUFBLHVCQUFsREEsc0JBQUEsQ0FBb0RsVixNQUFNLEdBQUU2VSxDQUFDLEVBQUUsRUFBRTtVQUFBLElBQUFHLG1CQUFBLEVBQUFDLHFCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLG9CQUFBLEVBQUFDLHFCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLGVBQUEsRUFBQUMsa0JBQUE7VUFDcEZWLGFBQWEsQ0FBR0MsV0FBVyxhQUFYQSxXQUFXLHdCQUFBSSxvQkFBQSxHQUFYSixXQUFXLENBQUVuRixNQUFNLGNBQUF1RixvQkFBQSx3QkFBQUMscUJBQUEsR0FBbkJELG9CQUFBLENBQXFCakcsT0FBTyxjQUFBa0cscUJBQUEsd0JBQUFDLHNCQUFBLEdBQTdCRCxxQkFBQSxDQUE4Q3RaLElBQUksQ0FBQytZLENBQUMsQ0FBQyxjQUFBUSxzQkFBQSx3QkFBQUMsc0JBQUEsR0FBdERELHNCQUFBLENBQTJFL1ksS0FBSyxjQUFBZ1osc0JBQUEsdUJBQWhGQSxzQkFBQSxDQUFrRi9ZLElBQUksQ0FBQyxHQUFHO1lBQ3ZHQyxLQUFLLEVBQUV1WSxXQUFXLGFBQVhBLFdBQVcsd0JBQUFRLGVBQUEsR0FBWFIsV0FBVyxDQUFFVSxFQUFFLGNBQUFGLGVBQUEsdUJBQWZBLGVBQUEsQ0FBaUIzWSxRQUFRLENBQUMsQ0FBQztZQUNsQ0YsVUFBVSxFQUFFcVksV0FBVyxhQUFYQSxXQUFXLHdCQUFBUyxrQkFBQSxHQUFYVCxXQUFXLENBQUVwWSxLQUFLLGNBQUE2WSxrQkFBQSx1QkFBbEJBLGtCQUFBLENBQW9CNVksUUFBUSxDQUFDO1VBQzFDLENBQUM7UUFDRjtRQUNBLE9BQU9rWSxhQUFhO01BQ3JCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNQOztJQUVBO0lBQ0EsTUFBTW5YLFlBQXlDLEdBQUdzVyw0QkFBNEIsQ0FBQ3RXLFlBQVk7O0lBRTNGO0lBQ0EsTUFBTStYLFVBQVUsR0FBR25COztJQUVsQjtJQUFBLENBQ0N2QyxNQUFNLENBQ041VCxNQUFNLENBQUNDLElBQUksQ0FBQ1YsWUFBWSxDQUFDLENBQ3ZCVyxNQUFNLENBQUVzQixZQUFZLElBQUssQ0FBQzBGLHdCQUF3QixDQUFDbkcsR0FBRyxDQUFDUyxZQUFZLENBQUMsQ0FBQyxDQUNyRTNCLEdBQUcsQ0FBRTJCLFlBQVksSUFBSztNQUN0QixPQUFPeEIsTUFBTSxDQUFDa1EsTUFBTSxDQUFDM1EsWUFBWSxDQUFDaUMsWUFBWSxDQUFDLEVBQUUvRCxjQUFjLENBQUMrRCxZQUFZLENBQUMsQ0FBQztJQUMvRSxDQUFDLENBQ0gsQ0FBQztJQUVGLE1BQU0yRCxlQUFlLEdBQUc4UCw0QkFBNEIsQ0FBQ3FDLFVBQVUsRUFBRS9WLFVBQVUsRUFBRXpDLGdCQUFnQixFQUFFZ0MsY0FBYyxDQUFDOztJQUU5RztJQUNBLE1BQU15VyxlQUFlLEdBQUcvRCx3QkFBd0IsQ0FBQzFVLGdCQUFnQixDQUFDO0lBQ2xFcUcsZUFBZSxDQUFDeEgsT0FBTyxDQUFFMEYsV0FBVyxJQUFLO01BQ3hDQSxXQUFXLENBQUMySyxhQUFhLEdBQUd1SixlQUFlO0lBQzVDLENBQUMsQ0FBQztJQUVGLE9BQU87TUFBRXBTLGVBQWU7TUFBRStRO0lBQWMsQ0FBQztFQUMxQyxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBVEF4TSxRQUFBLENBQUFnTSxrQkFBQSxHQUFBQSxrQkFBQTtFQVVPLE1BQU04QixxQkFBcUIsR0FBRyxTQUFBQSxDQUNwQzFZLGdCQUF5RCxFQUN6RDJZLDRCQUE0RCxFQUM1REMsU0FBbUMsRUFDekI7SUFDVixNQUFNQyxrQkFBa0IsR0FBR25NLHFCQUFxQixDQUFDaU0sNEJBQTRCLEVBQUUsb0JBQW9CLENBQUM7SUFDcEcsTUFBTTVDLGtCQUFrQixHQUFHbEkscUJBQXFCLENBQUM3TixnQkFBZ0IsQ0FBQztJQUNsRSxNQUFNZ1csZUFBZSxHQUFHQyxPQUFPLENBQUNGLGtCQUFrQixJQUFJLENBQUNBLGtCQUFrQixDQUFDRyxVQUFVLENBQUM7SUFDckYsSUFBSTJDLGtCQUFrQixDQUFDL1YsTUFBTSxHQUFHLENBQUMsSUFBSWtULGVBQWUsSUFBSSxDQUFBNEMsU0FBUyxhQUFUQSxTQUFTLHVCQUFUQSxTQUFTLENBQUVFLFdBQVcsTUFBSyxDQUFDLEVBQUU7TUFDckYsT0FBTyxJQUFJO0lBQ1o7SUFDQSxPQUFPLEtBQUs7RUFDYixDQUFDO0VBQUNsTyxRQUFBLENBQUE4TixxQkFBQSxHQUFBQSxxQkFBQTtFQUFBLE9BQUE5TixRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=