@sapui5/sap.fe.macros 1.139.0 → 1.140.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Field.js +65 -55
  4. package/src/sap/fe/macros/Field.ts +83 -57
  5. package/src/sap/fe/macros/FooterContent.js +5 -2
  6. package/src/sap/fe/macros/FooterContent.tsx +4 -1
  7. package/src/sap/fe/macros/MessageButton.js +1 -2
  8. package/src/sap/fe/macros/MessageButton.tsx +0 -1
  9. package/src/sap/fe/macros/MultiValueField.js +1 -3
  10. package/src/sap/fe/macros/MultiValueField.tsx +0 -2
  11. package/src/sap/fe/macros/Share.js +14 -2
  12. package/src/sap/fe/macros/Share.tsx +13 -0
  13. package/src/sap/fe/macros/Status.js +226 -0
  14. package/src/sap/fe/macros/Status.tsx +192 -0
  15. package/src/sap/fe/macros/ValueHelp.js +4 -28
  16. package/src/sap/fe/macros/ValueHelp.tsx +2 -42
  17. package/src/sap/fe/macros/ai/EasyFilterBar.js +105 -96
  18. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +122 -103
  19. package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
  20. package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
  21. package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
  22. package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
  23. package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
  24. package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
  25. package/src/sap/fe/macros/chart/MdcChartTemplate.js +2 -4
  26. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +1 -4
  27. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
  28. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
  29. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
  30. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
  31. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
  32. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
  33. package/src/sap/fe/macros/designtime/Designtime.helper.js +28 -1
  34. package/src/sap/fe/macros/designtime/Designtime.helper.ts +27 -0
  35. package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
  36. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
  37. package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
  38. package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
  39. package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
  40. package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
  41. package/src/sap/fe/macros/form/Form.js +1 -4
  42. package/src/sap/fe/macros/form/Form.tsx +0 -3
  43. package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
  44. package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
  45. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  46. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  47. package/src/sap/fe/macros/form/FormHelper.js +1 -2
  48. package/src/sap/fe/macros/form/FormHelper.ts +0 -1
  49. package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
  50. package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
  51. package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
  52. package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
  53. package/src/sap/fe/macros/internal/FilterField.block.js +7 -1
  54. package/src/sap/fe/macros/internal/FilterField.block.ts +8 -0
  55. package/src/sap/fe/macros/internal/field/DisplayStyle.js +3 -3
  56. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +2 -2
  57. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +1 -1
  58. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +1 -0
  59. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
  60. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
  61. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
  62. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
  63. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -1
  64. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +10 -3
  65. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +13 -2
  66. package/src/sap/fe/macros/library.js +1 -1
  67. package/src/sap/fe/macros/messagebundle.properties +5 -3
  68. package/src/sap/fe/macros/messagebundle_ar.properties +7 -1
  69. package/src/sap/fe/macros/messagebundle_bg.properties +7 -1
  70. package/src/sap/fe/macros/messagebundle_ca.properties +10 -4
  71. package/src/sap/fe/macros/messagebundle_cnr.properties +7 -1
  72. package/src/sap/fe/macros/messagebundle_cs.properties +6 -0
  73. package/src/sap/fe/macros/messagebundle_cy.properties +8 -2
  74. package/src/sap/fe/macros/messagebundle_da.properties +7 -1
  75. package/src/sap/fe/macros/messagebundle_de.properties +13 -7
  76. package/src/sap/fe/macros/messagebundle_el.properties +6 -0
  77. package/src/sap/fe/macros/messagebundle_en.properties +10 -4
  78. package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -2
  79. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +10 -4
  80. package/src/sap/fe/macros/messagebundle_es.properties +8 -2
  81. package/src/sap/fe/macros/messagebundle_es_MX.properties +10 -4
  82. package/src/sap/fe/macros/messagebundle_et.properties +8 -2
  83. package/src/sap/fe/macros/messagebundle_fi.properties +6 -0
  84. package/src/sap/fe/macros/messagebundle_fr.properties +8 -2
  85. package/src/sap/fe/macros/messagebundle_fr_CA.properties +7 -1
  86. package/src/sap/fe/macros/messagebundle_hi.properties +7 -1
  87. package/src/sap/fe/macros/messagebundle_hr.properties +7 -1
  88. package/src/sap/fe/macros/messagebundle_hu.properties +6 -0
  89. package/src/sap/fe/macros/messagebundle_id.properties +10 -4
  90. package/src/sap/fe/macros/messagebundle_it.properties +6 -0
  91. package/src/sap/fe/macros/messagebundle_iw.properties +7 -1
  92. package/src/sap/fe/macros/messagebundle_ja.properties +8 -2
  93. package/src/sap/fe/macros/messagebundle_kk.properties +10 -4
  94. package/src/sap/fe/macros/messagebundle_ko.properties +6 -0
  95. package/src/sap/fe/macros/messagebundle_lt.properties +7 -1
  96. package/src/sap/fe/macros/messagebundle_lv.properties +7 -1
  97. package/src/sap/fe/macros/messagebundle_mk.properties +7 -1
  98. package/src/sap/fe/macros/messagebundle_ms.properties +6 -0
  99. package/src/sap/fe/macros/messagebundle_nl.properties +6 -0
  100. package/src/sap/fe/macros/messagebundle_no.properties +6 -0
  101. package/src/sap/fe/macros/messagebundle_pl.properties +7 -1
  102. package/src/sap/fe/macros/messagebundle_pt.properties +6 -0
  103. package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -0
  104. package/src/sap/fe/macros/messagebundle_ro.properties +7 -1
  105. package/src/sap/fe/macros/messagebundle_ru.properties +9 -3
  106. package/src/sap/fe/macros/messagebundle_sh.properties +7 -1
  107. package/src/sap/fe/macros/messagebundle_sk.properties +6 -0
  108. package/src/sap/fe/macros/messagebundle_sl.properties +6 -0
  109. package/src/sap/fe/macros/messagebundle_sr.properties +7 -1
  110. package/src/sap/fe/macros/messagebundle_sv.properties +6 -0
  111. package/src/sap/fe/macros/messagebundle_th.properties +7 -1
  112. package/src/sap/fe/macros/messagebundle_tr.properties +6 -0
  113. package/src/sap/fe/macros/messagebundle_uk.properties +9 -3
  114. package/src/sap/fe/macros/messagebundle_vi.properties +8 -2
  115. package/src/sap/fe/macros/messagebundle_zh_CN.properties +6 -0
  116. package/src/sap/fe/macros/messagebundle_zh_TW.properties +7 -1
  117. package/src/sap/fe/macros/messages/MessageButton.js +39 -18
  118. package/src/sap/fe/macros/messages/MessageButton.ts +40 -17
  119. package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
  120. package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
  121. package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
  122. package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
  123. package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
  124. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
  125. package/src/sap/fe/macros/share/ShareAPI.js +4 -29
  126. package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
  127. package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
  128. package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
  129. package/src/sap/fe/macros/table/MdcTableTemplate.js +3 -1
  130. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +6 -2
  131. package/src/sap/fe/macros/table/TableHelper.js +1 -2
  132. package/src/sap/fe/macros/table/TableHelper.ts +0 -1
  133. package/src/sap/fe/macros/table/TableRuntime.js +24 -5
  134. package/src/sap/fe/macros/table/TableRuntime.ts +31 -3
  135. package/src/sap/fe/macros/table/Utils.js +6 -2
  136. package/src/sap/fe/macros/table/Utils.ts +5 -1
  137. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
  138. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
  139. package/src/sap/fe/macros/table/delegates/TableDelegate.js +1 -2
  140. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +0 -1
  141. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
  142. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
  143. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +5 -1
  144. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +7 -0
  145. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  146. package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
  147. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +10 -1
  148. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +17 -0
  149. package/src/sap/fe/macros/visualfilters/VisualFilter.js +1 -2
  150. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +0 -1
  151. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +2 -3
  152. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +1 -2
@@ -26,7 +26,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
26
26
  * The class is experimental and the API and the behavior are not finalized. This class is not intended for productive usage.
27
27
  * @author SAP SE
28
28
  * @private
29
- * @experimental
30
29
  * @since 1.69.0
31
30
  * @alias sap.fe.macros.TableDelegate
32
31
  */
@@ -1377,4 +1376,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/base/util/deepExt
1377
1376
  }
1378
1377
  });
1379
1378
  }, false);
1380
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IiLCJTRUFSQ0hfSEFTX0JFRU5fRklSRUQiLCJDT0xVTU5fSEFTX0JFRU5fQURERUQiLCJQUkVWSU9VU19TT1JURVJTIiwiT2JqZWN0IiwiYXNzaWduIiwiVGFibGVEZWxlZ2F0ZUJhc2UiLCJhcGlWZXJzaW9uIiwiX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckZpZWxkR3JvdXAiLCJ0YWJsZSIsInByb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mb3MiLCJrZXkiLCJpbmRleE9mIiwiY29sdW1uIiwiZ2V0Q29sdW1ucyIsImZpbmQiLCJjb2wiLCJnZXRQcm9wZXJ0eUtleSIsInNob3dEYXRhRmllbGRzTGFiZWwiLCJkYXRhIiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0Q29udGV4dCIsImFubm90YXRpb25QYXRoIiwiY29udmVydGVkTWV0YURhdGEiLCJjb252ZXJ0ZWRUeXBlcyIsIm9EYXRhRmllbGQiLCJ0YXJnZXRPYmplY3QiLCJvRmllbGRHcm91cCIsIlRhcmdldCIsIiR0YXJnZXQiLCJhRmllbGRXaWR0aCIsIkRhdGEiLCJmb3JFYWNoIiwib0RhdGEiLCJvRGF0YUZpZWxkV2lkdGgiLCIkVHlwZSIsIlRhYmxlU2l6ZUhlbHBlciIsImdldFdpZHRoRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImdldFdpZHRoRm9yRGF0YUZpZWxkIiwibGFiZWxXaWR0aCIsInByb3BlcnR5V2lkdGgiLCJTaXplSGVscGVyIiwiZ2V0QnV0dG9uV2lkdGgiLCJMYWJlbCIsInRvU3RyaW5nIiwicHVzaCIsIm5XaWRlc3QiLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsIk1hdGgiLCJtYXgiLCJ2aXN1YWxTZXR0aW5ncyIsImRlZXBFeHRlbmQiLCJ3aWR0aENhbGN1bGF0aW9uIiwidmVydGljYWxBcnJhbmdlbWVudCIsIm1pbldpZHRoIiwiY2VpbCIsIl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAiLCJwcm9wZXJ0eSIsInRhYmxlQVBJIiwiZ2V0UGFyZW50IiwibWV0YU1vZGVsIiwiZGF0YUZpZWxkIiwiZ2V0T2JqZWN0IiwiZ2FwIiwiZ2V0UHJvcGVydHkiLCJfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCIsInVuaXQiLCJ1bml0VGV4dCIsInRpbWV6b25lVGV4dCIsIm9UYWJsZUFQSSIsInRleHQiLCJnZXRSZWFkT25seSIsIl9jb21wdXRlTGFiZWwiLCJsYWJlbE1hcCIsImxhYmVsIiwicHJvcGVydGllc1dpdGhTYW1lTGFiZWwiLCJpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSIsInNvbWUiLCJwcm9wIiwicGF0aCIsIm1vZGUiLCJsZW5ndGgiLCJpbmNsdWRlcyIsImFkZGl0aW9uYWxMYWJlbHMiLCJmaWx0ZXJhYmxlIiwiam9pbiIsIl91cGRhdGVQcm9wZXJ0eUluZm8iLCJwcm9wZXJ0aWVzIiwicDEzbk1vZGUiLCJnZXRQMTNuTW9kZSIsInNvcnRhYmxlIiwiZ3JvdXBhYmxlIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiZ3JvdXBMYWJlbCIsImdyb3VwIiwiZGF0YVR5cGUiLCJ2aXNpYmxlIiwiZ2V0Q29sdW1uc0ZvciIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbHVtbnMiLCJmZXRjaEV4cG9ydENhcGFiaWxpdGllcyIsIm9UYWJsZSIsIm9DYXBhYmlsaXRpZXMiLCJYTFNYIiwib01vZGVsIiwiRGVsZWdhdGVVdGlsIiwiZmV0Y2hNb2RlbCIsInRoZW4iLCJtb2RlbCIsImFTdXBwb3J0ZWRGb3JtYXRzIiwiYUxvd2VyRm9ybWF0cyIsIm1hcCIsImVsZW1lbnQiLCJ0b0xvd2VyQ2FzZSIsIm9Bbm5vdGF0aW9uIiwiY2F0Y2giLCJlcnIiLCJMb2ciLCJlcnJvciIsIl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJjb2x1bW5JbmZvIiwiY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzRmlsdGVyYWJsZSIsImlzUGF0aEZpbHRlcmFibGUiLCJyZWxhdGl2ZVBhdGgiLCJpc1BhcnRPZkxpbmVJdGVtIiwiaXNQYXJ0T2ZDdXN0b21Db2x1bW4iLCJpc0NvbnN0YW50IiwiX2ZldGNoUHJvcGVydHlJbmZvIiwiYXBwQ29tcG9uZW50Iiwic0Fic29sdXRlTmF2aWdhdGlvblBhdGgiLCJvTmF2aWdhdGlvbkNvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImlzQ29tcGxleFR5cGUiLCJ0eXBlQ29uZmlnIiwiY2xhc3NOYW1lIiwiYkZpbHRlcmFibGUiLCJDb21tb25IZWxwZXIiLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsImJJc0FuYWx5dGljYWxUYWJsZSIsImdldEN1c3RvbURhdGEiLCJnZXRMb2NhbGl6ZWRUZXh0IiwidG9vbHRpcCIsIl9nZXRUeXBlQ29uZmlnIiwibmFtZSIsImZvcm1hdE9wdGlvbnMiLCJiYXNlVHlwZSIsInN0eWxlIiwiY29uc3RyYWludHMiLCJhdmFpbGFiaWxpdHkiLCJleHBvcnRTZXR0aW5ncyIsIl9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5ncyIsInR5cGUiLCJDb2x1bW5UeXBlIiwiQW5ub3RhdGlvbiIsInRlbXBsYXRlIiwiY2xpcGJvYXJkU2V0dGluZ3MiLCJrZXlzIiwiZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJfdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMiLCJpc0tleSIsImlzR3JvdXBhYmxlIiwidGV4dEFycmFuZ2VtZW50IiwiX3NldFRleHRBcnJhbmdlbWVudEluZm8iLCJleHRlbnNpb24iLCJ0ZWNobmljYWxseUdyb3VwYWJsZSIsImNhc2VTZW5zaXRpdmUiLCJhZGRpdGlvbmFsTGFiZWwiLCJleHBvcnRGb3JtYXQiLCJfZ2V0RXhwb3J0Rm9ybWF0IiwiZm9ybWF0IiwiVHlwZU1hcCIsImdldFR5cGVDb25maWciLCJpc1R5cGVGaWx0ZXJhYmxlIiwiZGVzY3JpcHRpb25Db2x1bW4iLCJvQ29sIiwidGV4dFByb3BlcnR5IiwidmFsdWVQcm9wZXJ0eSIsImRlc2NyaXB0aW9uUHJvcGVydHkiLCJhZ2dyZWdhdGFibGUiLCJfZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbyIsIl9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbyIsImhlYWRlciIsInN0YXJ0c1dpdGgiLCJNb2RlbEhlbHBlciIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJfYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yIiwib0NvbHVtbkluZm8iLCJoYXNEcmFmdEluZGljYXRvciIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsIl91cGRhdGVEcmFmdEluZGljYXRvck1vZGVsIiwiX29UYWJsZSIsIl9vQ29sdW1uSW5mbyIsImFWaXNpYmxlQ29sdW1ucyIsIm9JbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzSW50ZXJuYWxQYXRoIiwiZ2V0UGF0aCIsImluZGV4Iiwic2V0UHJvcGVydHkiLCJfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5IiwiZW50aXR5VHlwZVBhdGgiLCJiaW5kaW5nUGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJmZXRjaGVkUHJvcGVydGllcyIsIm5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiQ29tbW9uVXRpbHMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsIlByb21pc2UiLCJyZXNvbHZlIiwibWF4Q29uZGl0aW9ucyIsImlzTXVsdGlWYWx1ZSIsIkVycm9yIiwic2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyIsImdldFByb3BlcnR5SW5mb3MiLCJfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJnZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwic3ViRmV0Y2hlZFByb3BlcnRpZXMiLCJzZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwic2V0Tm9EYXRhSW5mb3JtYXRpb24iLCJpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbiIsIm5vRGF0YUFnZ3JlZ2F0aW9uIiwiZ2V0Tm9EYXRhIiwiaXNBIiwiY3VycmVudElsbHVzdHJhdGVkTWVzc2FnZSIsInNldFRpdGxlIiwidGl0bGUiLCJzZXREZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwic2V0SWxsdXN0cmF0aW9uVHlwZSIsImlsbHVzdHJhdGlvblR5cGUiLCJzZXRJbGx1c3RyYXRpb25TaXplIiwiaWxsdXN0cmF0aW9uU2l6ZSIsImlsbHVzdHJhdGVkTWVzc2FnZSIsIklsbHVzdHJhdGVkTWVzc2FnZSIsInNldE5vRGF0YSIsInNldFRhYmxlTm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlIiwiYmluZGluZ0luZm8iLCJ0YWJsZUZpbHRlckluZm8iLCJUYWJsZVV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwic3VmZml4UmVzb3VyY2VLZXkiLCJzdWJzdHJpbmciLCJpbGx1c3RyYXRlZEluZm9ybWF0aW9uIiwiZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMiLCJnZXRRdWlja0ZpbHRlciIsImdldFRleHQiLCJJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIiwiTm9TZWFyY2hSZXN1bHRzIiwiZmlsdGVyQXNzb2NpYXRpb24iLCJnZXRGaWx0ZXIiLCJoYXNGaWx0ZXJPclNlYXJjaCIsInNlYXJjaCIsImZpbHRlcnMiLCJ0ZXN0IiwiTm9EYXRhIiwiZ2V0VGFyZ2V0VmlldyIsImdldFZpZXdEYXRhIiwibGl2ZU1vZGUiLCJnZXROb0RhdGFNZXNzYWdlTW9kZSIsImN1cnJlbnROb0RhdGEiLCJoYW5kbGVUYWJsZURhdGFSZWNlaXZlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9CaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsImJEYXRhUmVjZWl2ZWRBdHRhY2hlZCIsImF0dGFjaERhdGFSZWNlaXZlZCIsInNldFRpbWVvdXQiLCJhU2VsZWN0ZWRDb250ZXh0cyIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiSlNPTiIsInBhcnNlIiwidGFibGVEZWZpbml0aW9uIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJEZWxldGVIZWxwZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsInNldFVwRW1wdHlSb3dzIiwiX3VwZGF0ZUF2YWlsYWJsZUNhcmRzIiwic2V0T3B0aW1pc3RpY0JhdGNoUHJvbWlzZUZvck1vZGVsIiwiY29udHJvbGxlciIsImdldEFwcENvbXBvbmVudCIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlIiwiUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsIiwiZW5hYmxlT3B0aW1pc3RpY0JhdGNoTW9kZSIsImZpbHRlcnNQcm9wZXJ0aWVzQXNQb3RlbnRpYWxseVNlbnNpdGl2ZURhdGFPckRhdGVUeXBlIiwiaXNGaWx0ZXJFbGlnaWJsZUZvck9wdGltaXN0aWNCYXRjaCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UiLCJkYXRhTW9kZWwiLCJpc09wdGltaXN0aWNCYXRjaEhhc1RvQmVFbmFibGVkIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlciIsImlzT3B0aW1pc3RpY0JhdGNoRGlzYWJsZWQiLCJvcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIiLCJwcm9taXNlIiwicmViaW5kIiwib0JpbmRpbmdJbmZvIiwiYklzU3VzcGVuZGVkIiwiVGFibGVSdW50aW1lIiwiY2xlYXJTZWxlY3Rpb24iLCJhcHBseSIsIm9uVGFibGVCb3VuZCIsIndoZW5Cb3VuZCIsIm9FcnJvciIsImZldGNoUHJvcGVydGllcyIsInByZUluaXQiLCJmYXN0Q3JlYXRpb25Sb3ciLCJnZXRDcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwidXBkYXRlQmluZGluZ0luZm8iLCJpbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIiwiQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIiwiX2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTSIsIl9pbnRlcm5hbFVwZGF0ZUJpbmRpbmdJbmZvIiwiX2hhbmRsZVJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzIiwiX2hhbmRsZUZpbHRlcnNGb3JFeHRlcm5hbElEIiwiZmlyZUV2ZW50IiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvIiwiYXR0YWNoZWRFdmVudHMiLCJnZXRBdHRhY2hlZEV2ZW50cyIsImNvbnRleHQiLCJUYWJsZUhlbHBlciIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsInNldEF0dGFjaEV2ZW50cyIsImUiLCJzb3J0ZXJzIiwic29ydGVyIiwibmV3U29ydGVyc1RvQmVBcHBsaWVkIiwidGFibGVQcm9wZXJ0aWVzIiwidGFibGVQcm9wZXJ0eSIsInVuaXRQcm9wZXJ0eSIsInVuaXRTb3J0ZXJBdmFpbGFibGUiLCJzb3J0IiwiU29ydGVyIiwiZ2V0RmlsdGVycyIsInVwZGF0ZUZpbHRlcnNGb3JFeHRlcm5hbElEIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJyZWNvbW1lbmRhdGlvbnMiLCJpc1JlY29tbWVuZGF0aW9uRW5hYmxlZCIsInRhYmxlRGVmIiwicmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0UmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHMiLCJhbm5vdGF0aW9uIiwiZW50aXR5VHlwZU5hbWUiLCJwYXJhbWV0ZXJzIiwiJHNlbGVjdCIsImdldFZpZXciLCJjb252ZXJ0ZXJUeXBlIiwiY2FyZHMiLCJjb2xsZWN0QXZhaWxhYmxlQ2FyZHMiLCJjb2xsYWJvcmF0aW9uTWFuYWdlciIsIkNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiY2FyZE9iamVjdCIsInVwZGF0ZUNhcmRzIiwicGFyZW50QXBwSWQiLCJnZXRJZCIsImdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNoYXJlQXZhaWxhYmxlQ2FyZHMiLCJnZXRJblJlc3VsdFByb3BlcnR5S2V5cyIsImNvbnRyb2wiLCJhbmFseXRpY2FsQ29uZmlndXJhdGlvbiIsImFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwiLCJhbGxLa2V5c1JlcXVlc3RlZCIsImNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZCIsIm92ZXJyaWRlUm93UHJlc3MiLCJyZXF1ZXN0QXRMZWFzdCIsImZpbHRlciIsImZpZWxkTmFtZSIsIm9yaWdpbiIsImdldENvbnRlbnQiLCJhbGxDb2x1bW5zIiwia2V5UHJvcGVydHlOYW1lcyIsImMiLCJkaXNwbGF5ZWRDb2x1bW5zIiwicmVmZXJlbmNlZFByb3BlcnR5UGF0aHMiLCJTZXQiLCJwcm9jZXNzQ29sdW1uIiwiYWRkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJhZGRpdGlvbmFsQ29sdW1uTmFtZSIsImFkZGl0aW9uYWxDb2x1bW4iLCJyZWxhdGVkQ29sdW1uTmFtZSIsInJlbGF0ZWRDb2x1bW4iLCJldmVyeSIsInByb3BOYW1lIiwiaGFzIiwiZ2V0U2VhcmNoUXVlcnkiLCJiaW5kaW5nIiwiYWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGlvbiIsImdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzIiwiJHNlYXJjaCIsInVwZGF0ZUJpbmRpbmciLCIkJGdldEtlZXBBbGl2ZUNvbnRleHQiLCJjb2xsZWN0aW9uUGF0aCIsImludGVybmFsTW9kZWwiLCJrZXB0QWxpdmVMaXN0cyIsIm5lZWRNYW51YWxSZWZyZXNoIiwidmlldyIsIm1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5IiwicGVuZGluZ01hbnVhbFVwZGF0ZSIsIm5ld1NvcnRlcnMiLCJzdHJpbmdpZnkiLCJ2aWV3RGF0YSIsIm9sZEZpbHRlcnMiLCJwcmV2aW91c1NvcnRlcnMiLCJmaWx0ZXJOb3RDaGFuZ2VkIiwiZGVlcEVxdWFsIiwiTFJNdWx0aVZpZXdFbmFibGVkIiwidmlld3MiLCJlbmFibGVBbmFseXRpY3MiLCJzZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwic2V0R3JvdXBDb25kaXRpb25zIiwic2V0VGFibGVCaW5kaW5nSW5mbyIsInNldERvd25sb2FkVXJsIiwicmVxdWVzdFJlZnJlc2giLCJnZXRHcm91cElkIiwiZmluYWxseSIsInN0b3JlZEV2ZW50cyIsIl9yZWYiLCJldmVudElkIiwiY2FsbGJhY2siLCJsaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiX2NvbXB1dGVSb3dCaW5kaW5nSW5mb0Zyb21UZW1wbGF0ZSIsInJvd0JpbmRpbmdJbmZvIiwiZ2V0VGFibGVUZW1wbGF0ZUJpbmRpbmdJbmZvIiwiYmluZGluZ0NvbnRleHQiLCJ0YWJsZUNhbkJlSW5JbmxpbmVFZGl0IiwiZ2V0QmluZGluZyIsImdldFVwZGF0ZUdyb3VwSWQiLCJJTkxJTkVFRElUX1VQREFURUdST1VQSUQiLCIkJHVwZGF0ZUdyb3VwSWQiLCJzdXNwZW5kZWQiLCJvRmlsdGVyIiwib0ZpbHRlckluZm8iLCJGaWx0ZXIiLCJhbmQiLCJvRGF0YVN0YXRlSW5kaWNhdG9yIiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaXNGaWx0ZXJpbmciLCJ1cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeSIsImFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXMiLCJmaWx0ZXJJbmZvIiwibm9ybWFsaXplU2VhcmNoVGVybSIsInBheWxvYWQiLCJnZXRQYXlsb2FkIiwiZmlsdGVyT25BY3RpdmVFbnRpdGllcyIsImZpbHRlck9uQWN0aXZlIiwib3BlcmF0b3IiLCJ2YWx1ZTEiLCJfdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQiLCJtb2RpZmllciIsInRhYmxlSWQiLCJzbG90Q29sdW1uc1hNTCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImpzeCIsInJlbmRlckFzWE1MIiwiZ2V0U2xvdENvbHVtbiIsInNsb3RYTUwiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIm9UZW1wbGF0ZSIsImZpcnN0RWxlbWVudENoaWxkIiwibm9kZU5hbWUiLCJyZXBsYWNlV2l0aCIsInJlbW92ZSIsInJlc3VsdFhNTCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJtb2RlbHMiLCJnZXRDb250cm9sbGVyIiwiZ2V0T3duZXJDb21wb25lbnQiLCJnZXRQcmVwcm9jZXNzb3JDb250ZXh0IiwidGFyZ2V0cyIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJFeGNlbEZvcm1hdCIsImdldEV4Y2VsRGF0ZWZyb21KU0RhdGUiLCJnZXRFeGNlbERhdGVUaW1lZnJvbUpTRGF0ZVRpbWUiLCJnZXRFeGNlbFRpbWVmcm9tSlNUaW1lIiwiX2dldFZIUmVsZXZhbnRGaWVsZHMiLCJzTWV0YWRhdGFQYXRoIiwic0JpbmRpbmdQYXRoIiwiYUZpZWxkcyIsIm9EYXRhRmllbGREYXRhIiwiJGtpbmQiLCJvVmFsdWUiLCJpSW5kZXgiLCJnZXROYXZpZ2F0aW9uUGF0aCIsIl9zZXREcmFmdEluZGljYXRvck9uVmlzaWJsZUNvbHVtbiIsImFDb2x1bW5zIiwiYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IiLCJvQ29sdW1uIiwic0FkZFZpc2libGVDb2x1bW5OYW1lIiwic1Zpc2libGVDb2x1bW5OYW1lIiwiYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCIsInNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yIiwiaSIsImoiLCJyZW1vdmVJdGVtIiwib1Byb3BlcnR5SW5mb05hbWUiLCJtUHJvcGVydHlCYWciLCJkb1JlbW92ZUl0ZW0iLCJvTW9kaWZpZXIiLCJzRGF0YVByb3BlcnR5IiwiaW5zZXJ0QWdncmVnYXRpb24iLCJfc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMiLCJfZ2V0TWV0YU1vZGVsIiwiX2dldEdyb3VwSWQiLCJzUmV0cmlldmVkR3JvdXBJZCIsIl9pbnNlcnRBZ2dyZWdhdGlvbiIsIm9WYWx1ZUhlbHAiLCJhZGRJdGVtIiwicHJvcGVydHlJbmZvTmFtZSIsInNUYWJsZUlkIiwid2FybmluZyIsInNQYXRoIiwiZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllciIsIm9UYWJsZUNvbnRleHQiLCJnZXRDdXJyZW50UGFnZVZpZXciLCJnZXRDb21wdXRlZENvbHVtbiIsImdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MiLCJwcm9wSW5mbyIsIm9Qcm9wZXJ0eUNvbnRleHQiLCJmblRlbXBsYXRlRnJhZ21lbnQiLCJvSW5Qcm9wZXJ0eUluZm8iLCJvVmlldyIsImJEaXNwbGF5TW9kZSIsInNUYWJsZVR5cGVDdXN0b21EYXRhIiwic0NyZWF0aW9uTW9kZUN1c3RvbURhdGEiLCJhbGwiLCJhQ3VzdG9tRGF0YSIsIm9UaGlzIiwiSlNPTk1vZGVsIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwicmVhZE9ubHkiLCJ0YWJsZVR5cGUiLCJpZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJjb2xsZWN0aW9uIiwiY3JlYXRpb25Nb2RlIiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJ0aGlzIiwidGFibGVDb2xsZWN0aW9uIiwiaGFuZGxlclByb3ZpZGVyIiwiVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciIsImNvbGxlY3Rpb25FbnRpdHkiLCJjb21wdXRlZENvbHVtblhNTCIsImdldENvbHVtblRlbXBsYXRlIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJkZXN0cm95IiwiZ2V0RmlsdGVyRGVsZWdhdGUiLCJGaWx0ZXJCYXJEZWxlZ2F0ZSIsIm9QYXJlbnRDb250cm9sIiwic1Byb3BlcnR5SW5mb05hbWUiLCJyZXBsYWNlIiwiZ2V0VHlwZU1hcCIsImZvcm1hdEdyb3VwSGVhZGVyIiwib2JqIiwiZGF0YUJhc2VUeXBlIiwiZXh0ZXJuYWxGb3JtYXQiLCJWYWx1ZUZvcm1hdHRlciIsImZvcm1hdFdpdGhCcmFja2V0cyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVEZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIERhdGFGaWVsZEZvckFubm90YXRpb24sIEZpZWxkR3JvdXBUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFcXVhbFwiO1xuaW1wb3J0IGRlZXBFeHRlbmQgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEV4dGVuZFwiO1xuaW1wb3J0IHsgaXNDb25zdGFudCB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlVHJlZU1vZGlmaWVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgV3JhcHBlZENhcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRmFjdG9yeVwiO1xuXG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbk1hbmFnZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NhcmRzL0NvbGxhYm9yYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0Q29sdW1uRXhwb3J0U2V0dGluZ3MsXG5cdENvbXB1dGVkVGFibGVDb2x1bW4sXG5cdEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sXG5cdFRhYmxlQ29sdW1uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgVmFsdWVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCBEZWxldGVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRGVsZXRlSGVscGVyXCI7XG5pbXBvcnQgRXhjZWxGb3JtYXQgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRXhjZWxGb3JtYXRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUHJvbWlzZUtlZXBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Qcm9taXNlS2VlcGVyXCI7XG5pbXBvcnQgeyBnZXRMb2NhbGl6ZWRUZXh0LCBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IFNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2l6ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaXNQYXRoRmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGlzVHlwZUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9FRE1cIjtcbmltcG9ydCB0eXBlIHsgQ29sbGVjdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29sbGVjdGlvbkJpbmRpbmdJbmZvXCI7XG5pbXBvcnQgQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbGxlY3Rpb25CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgRmlsdGVyQmFyRGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckRlbGVnYXRlXCI7XG5pbXBvcnQgeyBnZXRDb2x1bW5UZW1wbGF0ZSwgZ2V0Q29tcHV0ZWRDb2x1bW4sIGdldFNsb3RDb2x1bW4gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9NZGNUYWJsZVRlbXBsYXRlXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVJ1bnRpbWVcIjtcbmltcG9ydCBUYWJsZVNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVTaXplSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCB0eXBlIExpc3RSZXBvcnRDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MgfSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBZ2dyZWdhdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgeyBKc0NvbnRyb2xUcmVlTW9kaWZpZXIgfSBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNRENUYWJsZSwgTURDVGFibGVQcm9wZXJ0eUluZm8gYXMgUHJvcGVydHlJbmZvLCBkZWZhdWx0IGFzIFRhYmxlLCBWaXN1YWxTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBUeXBlQ29uZmlnIGZyb20gXCJzYXAvdWkvbWRjL1R5cGVDb25maWdcIjtcbmltcG9ydCB0eXBlIHsgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IFRhYmxlRGVsZWdhdGVCYXNlIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1RhYmxlRGVsZWdhdGVcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSBNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9NZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0LCBkZWZhdWx0IGFzIHY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciBmcm9tIFwiLi4vVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclwiO1xuXG5jb25zdCBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IgPSBcIi9zZW1hbnRpY0tleUhhc0RyYWZ0SW5kaWNhdG9yXCI7XG5jb25zdCBTRUFSQ0hfSEFTX0JFRU5fRklSRUQgPSBcInNlYXJjaEZpcmVkXCI7XG5jb25zdCBDT0xVTU5fSEFTX0JFRU5fQURERUQgPSBcImNvbHVtbkFkZGVkXCI7XG5jb25zdCBQUkVWSU9VU19TT1JURVJTID0gXCJwcmV2aW91c1NvcnRlcnNcIjtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHNhcC51aS5tZGMuVGFibGUuXG4gKiA8aDM+PGI+Tm90ZTo8L2I+PC9oMz5cbiAqIFRoZSBjbGFzcyBpcyBleHBlcmltZW50YWwgYW5kIHRoZSBBUEkgYW5kIHRoZSBiZWhhdmlvciBhcmUgbm90IGZpbmFsaXplZC4gVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgZm9yIHByb2R1Y3RpdmUgdXNhZ2UuXG4gKiBAYXV0aG9yIFNBUCBTRVxuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWxcbiAqIEBzaW5jZSAxLjY5LjBcbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLlRhYmxlRGVsZWdhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgT2JqZWN0LmFzc2lnbih7fSwgVGFibGVEZWxlZ2F0ZUJhc2UsIHtcblx0YXBpVmVyc2lvbjogMixcblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgd2lkdGggb2YgYSBGaWVsZEdyb3VwIGNvbHVtbi5cblx0ICogVGhlIHdpZHRoIG9mIHRoZSBGaWVsZEdyb3VwIGlzIHRoZSB3aWR0aCBvZiB0aGUgd2lkZXN0IHByb3BlcnR5IGNvbnRhaW5lZCBpbiB0aGUgRmllbGRHcm91cCAoaW5jbHVkaW5nIHRoZSBsYWJlbCBpZiBzaG93RGF0YUZpZWxkc0xhYmVsIGlzIHRydWUpXG5cdCAqIFRoZSByZXN1bHQgb2YgdGhpcyBjYWxjdWxhdGlvbiBpcyBzdG9yZWQgaW4gdGhlIHZpc3VhbFNldHRpbmdzLndpZHRoQ2FsY3VsYXRpb24ubWluV2lkdGggcHJvcGVydHksIHdoaWNoIGlzIHVzZWQgYnkgdGhlIE1EQ3RhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm8gQ3VycmVudCBwcm9wZXJ0eUluZm9cblx0ICogQHBhcmFtIHByb3BlcnR5SW5mb3MgQXJyYXkgb2YgcHJvcGVydGllc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZURlbGVnYXRlXG5cdCAqL1xuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yRmllbGRHcm91cDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRwcm9wZXJ0eUluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sXG5cdFx0cHJvcGVydHlJbmZvczogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdXG5cdCkge1xuXHRcdGlmIChwcm9wZXJ0eUluZm8ua2V5LmluZGV4T2YoXCJEYXRhRmllbGRGb3JBbm5vdGF0aW9uOjpGaWVsZEdyb3VwOjpcIikgPT09IDApIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IHRhYmxlLmdldENvbHVtbnMoKS5maW5kKChjb2wpID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbC5nZXRQcm9wZXJ0eUtleSgpID09PSBwcm9wZXJ0eUluZm8ua2V5O1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBzaG93RGF0YUZpZWxkc0xhYmVsID0gY29sdW1uID8gY29sdW1uLmRhdGEoXCJzaG93RGF0YUZpZWxkc0xhYmVsXCIpID09PSBcInRydWVcIiA6IGZhbHNlO1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9ICh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3QgaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9NZXRhTW9kZWwuZ2V0Q29udGV4dChwcm9wZXJ0eUluZm8uYW5ub3RhdGlvblBhdGgpKTtcblx0XHRcdGNvbnN0IGNvbnZlcnRlZE1ldGFEYXRhID0gaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLmNvbnZlcnRlZFR5cGVzO1xuXHRcdFx0Y29uc3Qgb0RhdGFGaWVsZCA9IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cy50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjtcblx0XHRcdGNvbnN0IG9GaWVsZEdyb3VwID0gb0RhdGFGaWVsZC5UYXJnZXQuJHRhcmdldCBhcyBGaWVsZEdyb3VwVHlwZTtcblx0XHRcdGNvbnN0IGFGaWVsZFdpZHRoOiBudW1iZXJbXSA9IFtdO1xuXHRcdFx0b0ZpZWxkR3JvdXAuRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChvRGF0YTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHRcdFx0XHRsZXQgb0RhdGFGaWVsZFdpZHRoOiB7IGxhYmVsV2lkdGg6IG51bWJlcjsgcHJvcGVydHlXaWR0aDogbnVtYmVyIH07XG5cdFx0XHRcdHN3aXRjaCAob0RhdGEuJFR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRcdFx0b0RhdGFGaWVsZFdpZHRoID0gVGFibGVTaXplSGVscGVyLmdldFdpZHRoRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0b0RhdGEsXG5cdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm9zLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWRNZXRhRGF0YSxcblx0XHRcdFx0XHRcdFx0c2hvd0RhdGFGaWVsZHNMYWJlbFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IFRhYmxlU2l6ZUhlbHBlci5nZXRXaWR0aEZvckRhdGFGaWVsZChcblx0XHRcdFx0XHRcdFx0b0RhdGEsXG5cdFx0XHRcdFx0XHRcdHNob3dEYXRhRmllbGRzTGFiZWwsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mb3MsXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlZE1ldGFEYXRhLFxuXHRcdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IHtcblx0XHRcdFx0XHRcdFx0bGFiZWxXaWR0aDogMCxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlXaWR0aDogU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aChvRGF0YS5MYWJlbD8udG9TdHJpbmcoKSlcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRGF0YUZpZWxkV2lkdGghKSB7XG5cdFx0XHRcdFx0YUZpZWxkV2lkdGgucHVzaChvRGF0YUZpZWxkV2lkdGgubGFiZWxXaWR0aCArIG9EYXRhRmllbGRXaWR0aC5wcm9wZXJ0eVdpZHRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBuV2lkZXN0ID0gYUZpZWxkV2lkdGgucmVkdWNlKGZ1bmN0aW9uIChhY2M6IG51bWJlciwgdmFsdWU6IG51bWJlcikge1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoYWNjLCB2YWx1ZSk7XG5cdFx0XHR9LCAwKTtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzIGFzIG9iamVjdCwge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0dmVydGljYWxBcnJhbmdlbWVudDogdHJ1ZSxcblx0XHRcdFx0XHRtaW5XaWR0aDogTWF0aC5jZWlsKG5XaWRlc3QpXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVmFsdWVIZWxwOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBwcm9wZXJ0eTogRW5oYW5jZWRGRVByb3BlcnR5SW5mbykge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0aWYgKCFwcm9wZXJ0eS5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aCAmJiBtZXRhTW9kZWwpIHtcblx0XHRcdFx0Y29uc3QgZGF0YUZpZWxkID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aH1AYCk7XG5cdFx0XHRcdGlmIChkYXRhRmllbGQgJiYgZGF0YUZpZWxkW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIl0pIHtcblx0XHRcdFx0XHRwcm9wZXJ0eS52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHkudmlzdWFsU2V0dGluZ3MgfHwge30sIHtcblx0XHRcdFx0XHRcdHdpZHRoQ2FsY3VsYXRpb246IHtcblx0XHRcdFx0XHRcdFx0Z2FwOiB0YWJsZUFQSS5nZXRQcm9wZXJ0eShcInJlYWRPbmx5XCIpID8gMCA6IDRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyxcblx0XHR1bml0Pzogc3RyaW5nLFxuXHRcdHVuaXRUZXh0Pzogc3RyaW5nLFxuXHRcdHRpbWV6b25lVGV4dD86IHN0cmluZ1xuXHQpIHtcblx0XHRjb25zdCBvVGFibGVBUEk6IEVuaGFuY2VXaXRoVUk1PFRhYmxlQVBJPiB8IG51bGwgPSB0YWJsZSA/ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBFbmhhbmNlV2l0aFVJNTxUYWJsZUFQST4pIDogbnVsbDtcblx0XHQvLyB1cGRhdGUgZ2FwIGZvciBwcm9wZXJ0aWVzIHdpdGggc3RyaW5nIHVuaXRcblx0XHRjb25zdCB0ZXh0ID0gdW5pdFRleHQgfHwgdGltZXpvbmVUZXh0O1xuXHRcdGlmICh0ZXh0KSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBWaXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Z2FwOiBNYXRoLmNlaWwoU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aCh0ZXh0KSlcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmICh1bml0KSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBWaXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Ly8gRm9yIHByb3BlcnRpZXMgd2l0aCB1bml0LCBhIGdhcCBuZWVkcyB0byBiZSBhZGRlZCB0byBwcm9wZXJseSByZW5kZXIgdGhlIGNvbHVtbiB3aWR0aCBvbiBlZGl0IG1vZGVcblx0XHRcdFx0XHRnYXA6IG9UYWJsZUFQSSAmJiBvVGFibGVBUEkuZ2V0UmVhZE9ubHkoKSA/IDAgOiA2XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZUxhYmVsOiBmdW5jdGlvbiAocHJvcGVydHk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sIGxhYmVsTWFwOiB7IFtsYWJlbDogc3RyaW5nXTogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdIH0pIHtcblx0XHRpZiAocHJvcGVydHkubGFiZWwpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsID0gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdO1xuXHRcdFx0Ly8gVGhpcyBjb21wdXRhdGlvbiBpcyBvbmx5IGZvciBkdXBsaWNhdGUgbGFiZWxzIG9uIG5hdmlnYXRpb24gcHJvcGVydGllcy5cblx0XHRcdC8vIEV4Y2x1ZGUgdGV4dCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBhcyB0ZXh0IG9uIGEgcHJvcGVydHkgYW5ub3RhdGVkIHdpdGggdGV4dCBhcnJhbmdlbWVudCBzZXQgYXMgVGV4dE9ubHkuXG5cdFx0XHQvLyBFeGNsdWRlIG5hdmlnYXRpb24gcHJvcGVydGllcyBjcmVhdGVkIG9ubHkgZm9yIGZpbHRlcmluZyBwdXJwb3NlcyB3aXRoIGEgdGV4dCBhcnJhbmdlbWVudCBzZXQgdG8gVGV4dE9ubHkuXG5cdFx0XHRjb25zdCBpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSA9IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsPy5zb21lKFxuXHRcdFx0XHQocHJvcCkgPT4gcHJvcC50ZXh0ID09PSBwcm9wZXJ0eS5wYXRoICYmIHByb3A/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIlxuXHRcdFx0KTtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvcGVydGllc1dpdGhTYW1lTGFiZWw/Lmxlbmd0aCA+IDEgJiZcblx0XHRcdFx0cHJvcGVydHkucGF0aD8uaW5jbHVkZXMoXCIvXCIpICYmXG5cdFx0XHRcdHByb3BlcnR5LmFkZGl0aW9uYWxMYWJlbHMgJiZcblx0XHRcdFx0IWlzUHJvcGVydHlVc2VkQXNUZXh0T25seVByb3BlcnR5ICYmXG5cdFx0XHRcdCEocHJvcGVydHk/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIiAmJiBwcm9wZXJ0eS5maWx0ZXJhYmxlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHByb3BlcnR5LmxhYmVsID0gcHJvcGVydHkubGFiZWwgKyBcIiAoXCIgKyBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzLmpvaW4oXCIgLyBcIikgKyBcIilcIjtcblx0XHRcdH1cblx0XHRcdGRlbGV0ZSBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzO1xuXHRcdH1cblx0fSxcblx0Ly9VcGRhdGUgVmlzdWFsU2V0dGluZyBmb3IgY29sdW1uV2lkdGggY2FsY3VsYXRpb24gYW5kIGxhYmVscyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0X3VwZGF0ZVByb3BlcnR5SW5mbzogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgcHJvcGVydGllczogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdKSB7XG5cdFx0Y29uc3QgbGFiZWxNYXA6IHsgW2xhYmVsOiBzdHJpbmddOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10gfSA9IHt9O1xuXHRcdC8vIENoZWNrIGF2YWlsYWJsZSBwMTNuIG1vZGVzXG5cdFx0Y29uc3QgcDEzbk1vZGUgPSB0YWJsZS5nZXRQMTNuTW9kZSgpO1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcblx0XHRcdGlmICghcHJvcGVydHkucHJvcGVydHlJbmZvcyAmJiBwcm9wZXJ0eS5sYWJlbCkge1xuXHRcdFx0XHQvLyBPbmx5IGZvciBub24tY29tcGxleCBwcm9wZXJ0aWVzXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiU29ydFwiKSAmJiBwcm9wZXJ0eS5zb3J0YWJsZSkgfHxcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiRmlsdGVyXCIpICYmIHByb3BlcnR5LmZpbHRlcmFibGUpIHx8XG5cdFx0XHRcdFx0KHAxM25Nb2RlPy5pbmNsdWRlcyhcIkdyb3VwXCIpICYmIHByb3BlcnR5Lmdyb3VwYWJsZSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0bGFiZWxNYXBbcHJvcGVydHkubGFiZWxdID1cblx0XHRcdFx0XHRcdGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXSAhPT0gdW5kZWZpbmVkID8gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdLmNvbmNhdChbcHJvcGVydHldKSA6IFtwcm9wZXJ0eV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwKHRhYmxlLCBwcm9wZXJ0eSwgcHJvcGVydGllcyk7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAodGFibGUsIHByb3BlcnR5KTtcblx0XHRcdHRoaXMuX2NvbXB1dGVMYWJlbChwcm9wZXJ0eSwgbGFiZWxNYXApO1xuXHRcdH0pO1xuXHRcdC8vIEFkZCB0aGUgJGVkaXRTdGF0ZSBwcm9wZXJ0eVxuXHRcdHByb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRrZXk6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdFx0cGF0aDogXCIkZWRpdFN0YXRlXCIsXG5cdFx0XHRncm91cExhYmVsOiBcIlwiLFxuXHRcdFx0Z3JvdXA6IFwiXCIsXG5cdFx0XHRsYWJlbDogXCJcIixcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0ZmlsdGVyYWJsZTogZmFsc2Vcblx0XHR9IGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pO1xuXHRcdHJldHVybiBwcm9wZXJ0aWVzO1xuXHR9LFxuXG5cdGdldENvbHVtbnNGb3I6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBUYWJsZUNvbHVtbltdIHtcblx0XHRyZXR1cm4gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBleHBvcnQgY2FwYWJpbGl0aWVzIGZvciB0aGUgZ2l2ZW4gc2FwLnVpLm1kYy5UYWJsZSBpbnN0YW5jZS5cblx0ICogQHBhcmFtIG9UYWJsZSBJbnN0YW5jZSBvZiB0aGUgdGFibGVcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXByZXNlbnRpbmcgdGhlIGV4cG9ydCBjYXBhYmlsaXRpZXMgb2YgdGhlIHRhYmxlIGluc3RhbmNlXG5cdCAqL1xuXHRmZXRjaEV4cG9ydENhcGFiaWxpdGllczogYXN5bmMgZnVuY3Rpb24gKG9UYWJsZTogVGFibGUpOiBQcm9taXNlPHsgWExTWD86IHVua25vd247IFBERj86IHVua25vd24gfT4ge1xuXHRcdGNvbnN0IG9DYXBhYmlsaXRpZXM6IHsgWExTWD86IHVua25vd247IFBERj86IHVua25vd24gfSA9IHsgWExTWDoge30gfTtcblx0XHRsZXQgb01vZGVsITogT0RhdGFNb2RlbDtcblx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmZldGNoTW9kZWwob1RhYmxlKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG1vZGVsOiBNb2RlbCkge1xuXHRcdFx0XHRvTW9kZWwgPSBtb2RlbCBhcyBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXR1cm4gb01vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU3VwcG9ydGVkRm9ybWF0c1wiKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoYVN1cHBvcnRlZEZvcm1hdHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IGFMb3dlckZvcm1hdHMgPSAoYVN1cHBvcnRlZEZvcm1hdHMgfHwgW10pLm1hcCgoZWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtZW50LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoYUxvd2VyRm9ybWF0cy5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL3BkZlwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KFwiLyRFbnRpdHlDb250YWluZXJAY29tLnNhcC52b2NhYnVsYXJpZXMuUERGLnYxLkZlYXR1cmVzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9Bbm5vdGF0aW9uOiB1bmtub3duKSB7XG5cdFx0XHRcdGlmIChvQW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNbXCJQREZcIl0gPSBPYmplY3QuYXNzaWduKHt9LCBvQW5ub3RhdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIGNvbXB1dGluZyBleHBvcnQgY2FwYWJpbGl0aWVzOiAke2Vycn1gKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBvQ2FwYWJpbGl0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZpbHRlcmluZyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIExpbmVJdGVtIGFubm90YXRpb24gbm9yIG9mIHRoZSBjdXN0b20gY29sdW1ucyBpcyBmb3JiaWRkZW4uXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvXG5cdCAqIEBwYXJhbSBjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdHJ1ZSBpZiBmaWx0ZXJpbmcgaXMgYWxsb3dlZCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5OiBmdW5jdGlvbiAoXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRcdGNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaXNGaWx0ZXJhYmxlID0gaXNQYXRoRmlsdGVyYWJsZShjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0IWNvbHVtbkluZm8ucmVsYXRpdmVQYXRoLmluY2x1ZGVzKFwiL1wiKSB8fFxuXHRcdFx0KChjb2x1bW5JbmZvLmlzUGFydE9mTGluZUl0ZW0gPT09IHRydWUgfHwgY29sdW1uSW5mby5pc1BhcnRPZkN1c3RvbUNvbHVtbiA9PT0gdHJ1ZSkgJiZcblx0XHRcdFx0IShpc0NvbnN0YW50KGlzRmlsdGVyYWJsZSkgJiYgaXNGaWx0ZXJhYmxlLnZhbHVlID09PSBmYWxzZSkpXG5cdFx0KTtcblx0fSxcblxuXHRfZmV0Y2hQcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChcblx0XHRtZXRhTW9kZWw6IE1ldGFNb2RlbCxcblx0XHRjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8ge1xuXHRcdGNvbnN0IHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoID0gY29sdW1uSW5mby5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdG9EYXRhRmllbGQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoKSxcblx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCkgYXMgQ29udGV4dCxcblx0XHRcdGlzQ29tcGxleFR5cGUgPSBjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSAmJiBjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lPy5pbmRleE9mKFwiRWRtLlwiKSAhPT0gMCxcblx0XHRcdGJGaWx0ZXJhYmxlID0gQ29tbW9uSGVscGVyLmlzUHJvcGVydHlGaWx0ZXJhYmxlKG9OYXZpZ2F0aW9uQ29udGV4dCwgb0RhdGFGaWVsZCksXG5cdFx0XHRiSXNBbmFseXRpY2FsVGFibGUgPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YSh0YWJsZSwgXCJlbmFibGVBbmFseXRpY3NcIikgPT09IFwidHJ1ZVwiLFxuXHRcdFx0bGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8ubGFiZWwgPz8gXCJcIiwgYXBwQ29tcG9uZW50ID8/IHRhYmxlKSxcblx0XHRcdHRvb2x0aXAgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8udG9vbHRpcCA/PyBcIlwiLCBhcHBDb21wb25lbnQgPz8gdGFibGUpLFxuXHRcdFx0dHlwZUNvbmZpZyA9IHRoaXMuX2dldFR5cGVDb25maWcoY29sdW1uSW5mbywgaXNDb21wbGV4VHlwZSksXG5cdFx0XHRwcm9wZXJ0eUluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRcdG5hbWU6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdFx0a2V5OiBjb2x1bW5JbmZvLm5hbWUsXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCxcblx0XHRcdFx0Z3JvdXBMYWJlbDogY29sdW1uSW5mby5ncm91cExhYmVsLFxuXHRcdFx0XHRncm91cDogY29sdW1uSW5mby5ncm91cCxcblx0XHRcdFx0bGFiZWw6IGxhYmVsLFxuXHRcdFx0XHR0b29sdGlwOiB0b29sdGlwLFxuXHRcdFx0XHRkYXRhVHlwZTogdHlwZUNvbmZpZy5jbGFzc05hbWUsXG5cdFx0XHRcdHR5cGVDb25maWc6IHR5cGVDb25maWcsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6XG5cdFx0XHRcdFx0Y29sdW1uSW5mby50eXBlQ29uZmlnPy5iYXNlVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIlxuXHRcdFx0XHRcdFx0PyB7IHN0eWxlOiBcIm1lZGl1bS9zaG9ydFwiIH0gLyogVGhpcyBjb25kaXRpb24gZG9lc24ndCBoYXZlIGFueSBpbXBhY3QsIHRvIGJlIHJldmlld2VkICovXG5cdFx0XHRcdFx0XHQ6IGNvbHVtbkluZm8udHlwZUNvbmZpZz8uZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0Y29uc3RyYWludHM6IGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY29uc3RyYWludHMsXG5cdFx0XHRcdHZpc2libGU6IGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiICYmICFpc0NvbXBsZXhUeXBlLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogdGhpcy5fc2V0UHJvcGVydHlJbmZvRXhwb3J0U2V0dGluZ3MoY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncywgY29sdW1uSW5mbyksXG5cdFx0XHRcdHVuaXQ6IGNvbHVtbkluZm8udW5pdCxcblx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRyZWxhdGl2ZVBhdGg6IGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoXG5cdFx0XHR9O1xuXHRcdGlmIChwcm9wZXJ0eUluZm8uZXhwb3J0U2V0dGluZ3M/LnRlbXBsYXRlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8uY2xpcGJvYXJkU2V0dGluZ3MgPSB7IHRlbXBsYXRlOiBwcm9wZXJ0eUluZm8uZXhwb3J0U2V0dGluZ3MudGVtcGxhdGUgfTtcblx0XHRcdC8vIGlmIEkgc2V0IHRoaXMgY2xpcEJvYXJkU2V0dGluZ3MgdGhlIGNvcHkgcHJvdmlkZXIgZXh0cmFjdCB0aGUgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIHRlbXBsYXRlIGluIHRoZSBodG1sIHByb3BlcnR5IGFuZCBpdCBpcyBwcm9wZXJseSBjb3BpZWQgaW4gZXhjZWxcblx0XHRcdC8vIGJ1dCB3aGVuIHdlIGNvcHkgZWxzZXdoZXJlIHdlIG9ubHkgZ2V0IHRoZSByYXcgZGF0YSBhbmQgbm90IHRoZSB0ZW1wbGF0ZWQgZGF0YVxuXHRcdH1cblxuXHRcdC8vIFNldCB2aXN1YWxTZXR0aW5ncyBvbmx5IGlmIGl0IGV4aXN0c1xuXHRcdGlmIChjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzICYmIE9iamVjdC5rZXlzKGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3MpLmxlbmd0aCA+IDApIHtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3M7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRcdHByb3BlcnR5SW5mby5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSA9IGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWU7XG5cdFx0fVxuXG5cdFx0Ly8gTURDIGV4cGVjdHMgICdwcm9wZXJ0eUluZm9zJyBvbmx5IGZvciBjb21wbGV4IHByb3BlcnRpZXMuXG5cdFx0Ly8gQW4gZW1wdHkgYXJyYXkgdGhyb3dzIHZhbGlkYXRpb24gZXJyb3IgYW5kIHVuZGVmaW5lZCB2YWx1ZSBpcyB1bmhhbmRsZWQuXG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcz8ubGVuZ3RoKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQWRkIHByb3BlcnRpZXMgd2hpY2ggYXJlIHN1cHBvcnRlZCBvbmx5IGJ5IHNpbXBsZSBQcm9wZXJ0eUluZm9zLlxuXG5cdFx0XHQvL2dldCB0aGUgRGF0YU1vZGVsT2JqZWN0UGF0aCBmb3IgdGhlIGNvbHVtblxuXHRcdFx0Y29uc3QgY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdFx0bWV0YU1vZGVsLmdldENvbnRleHQoY29sdW1uSW5mby5hbm5vdGF0aW9uUGF0aCksXG5cdFx0XHRcdG1ldGFNb2RlbC5nZXRDb250ZXh0KERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKHRhYmxlLCBcIm1ldGFQYXRoXCIpISlcblx0XHRcdCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucGF0aCA9IGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoO1xuXHRcdFx0Ly8gVE9ETyB3aXRoIHRoZSBuZXcgY29tcGxleCBwcm9wZXJ0eSBpbmZvLCBhIGxvdCBvZiBcIkRlc2NyaXB0aW9uXCIgZmllbGRzIGFyZSBhZGRlZCBhcyBmaWx0ZXIvc29ydCBmaWVsZHNcblx0XHRcdHByb3BlcnR5SW5mby5zb3J0YWJsZSA9IGNvbHVtbkluZm8uc29ydGFibGU7XG5cdFx0XHRpZiAoYklzQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUFuYWx5dGljYWxQcm9wZXJ0eUluZm9BdHRyaWJ1dGVzKHByb3BlcnR5SW5mbywgY29sdW1uSW5mbyk7XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eUluZm8uZmlsdGVyYWJsZSA9XG5cdFx0XHRcdGNvbHVtbkluZm8uZmlsdGVyYWJsZSAhPT0gZmFsc2UgJiZcblx0XHRcdFx0ISFiRmlsdGVyYWJsZSAmJlxuXHRcdFx0XHR0aGlzLl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkoY29sdW1uSW5mbywgY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8uaXNLZXkgPSBjb2x1bW5JbmZvLmlzS2V5O1xuXHRcdFx0cHJvcGVydHlJbmZvLmdyb3VwYWJsZSA9IGNvbHVtbkluZm8uaXNHcm91cGFibGU7XG5cdFx0XHRpZiAoY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5fc2V0VGV4dEFycmFuZ2VtZW50SW5mbyhwcm9wZXJ0eUluZm8sIGNvbHVtbkluZm8sIHRhYmxlKTtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eUluZm8uaXNLZXkpIHtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmV4dGVuc2lvbiA9IHtcblx0XHRcdFx0XHQvLyBNREMgbmVlZHMgdG8gZml4IHRoaXMsIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3IgYSBub24gQW5hbHl0aWNhbCBUYWJsZVxuXHRcdFx0XHRcdHRlY2huaWNhbGx5R3JvdXBhYmxlOiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eUluZm8uY2FzZVNlbnNpdGl2ZSA9IGNvbHVtbkluZm8uY2FzZVNlbnNpdGl2ZTtcblx0XHRcdGlmIChjb2x1bW5JbmZvLmFkZGl0aW9uYWxMYWJlbHMpIHtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmFkZGl0aW9uYWxMYWJlbHMgPSBjb2x1bW5JbmZvLmFkZGl0aW9uYWxMYWJlbHMubWFwKChhZGRpdGlvbmFsTGFiZWw6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBnZXRMb2NhbGl6ZWRUZXh0KGFkZGl0aW9uYWxMYWJlbCwgYXBwQ29tcG9uZW50IHx8IHRhYmxlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5fY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCh0YWJsZSwgcHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvLnVuaXQsIGNvbHVtbkluZm8udW5pdFRleHQsIGNvbHVtbkluZm8udGltZXpvbmVUZXh0KTtcblxuXHRcdHJldHVybiBwcm9wZXJ0eUluZm87XG5cdH0sXG5cblx0LyoqXG5cdCAqIEV4dGVuZCB0aGUgZXhwb3J0IHNldHRpbmdzIGJhc2VkIG9uIHRoZSBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIGV4cG9ydFNldHRpbmdzIFRoZSBleHBvcnQgc2V0dGluZ3MgdG8gYmUgZXh0ZW5kZWRcblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbkluZm8gb2JqZWN0XG5cdCAqIEByZXR1cm5zIFRoZSBleHRlbmRlZCBleHBvcnQgc2V0dGluZ3Ncblx0ICovXG5cdF9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5nczogZnVuY3Rpb24gKFxuXHRcdGV4cG9ydFNldHRpbmdzOiBDb2x1bW5FeHBvcnRTZXR0aW5ncyB8IHVuZGVmaW5lZCB8IG51bGwsXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uXG5cdCk6IENvbHVtbkV4cG9ydFNldHRpbmdzIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG5cdFx0Y29uc3QgZXhwb3J0Rm9ybWF0ID0gdGhpcy5fZ2V0RXhwb3J0Rm9ybWF0KGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lKTtcblx0XHRpZiAoZXhwb3J0Rm9ybWF0ICYmIGV4cG9ydFNldHRpbmdzKSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy5mb3JtYXQgPSBleHBvcnRGb3JtYXQ7XG5cdFx0fVxuXHRcdHJldHVybiBleHBvcnRTZXR0aW5ncztcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHlwZSBjb25maWcgZm9yIHRoZSBnaXZlbiBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbkluZm8gb2JqZWN0LlxuXHQgKiBAcGFyYW0gaXNDb21wbGV4VHlwZSBJbmRpY2F0ZXMgaWYgdGhlIGRhdGFUeXBlIGlzIGNvbXBsZXguXG5cdCAqIEByZXR1cm5zIFRoZSBNREMgdHlwZSBjb25maWcuXG5cdCAqL1xuXHRfZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIGlzQ29tcGxleFR5cGU/OiBib29sZWFuKTogVHlwZUNvbmZpZyB7XG5cdFx0bGV0IHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIik7IC8vIE1EQyBleHBlY3RzIGFsd2F5cyBhIGRhdGFUeXBlXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lICYmIGlzVHlwZUZpbHRlcmFibGUoY29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZSkpIHtcblx0XHRcdHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWUsXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRjb2x1bW5JbmZvLnR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSAmJiAhaXNDb21wbGV4VHlwZSkge1xuXHRcdFx0dHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lKTtcblx0XHR9XG5cdFx0cmV0dXJuIHR5cGVDb25maWc7XG5cdH0sXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHRleHQgYXJyYW5nZW1lbnQgaW5mbyBmb3IgdGhlIGNvbHVtbiBpbmZvLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvIFRoZSBjdXJyZW50IHByb3BlcnR5SW5mbyBvYmplY3QuXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjb2x1bW5JbmZvIG9iamVjdC5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICovXG5cdF9zZXRUZXh0QXJyYW5nZW1lbnRJbmZvOiBmdW5jdGlvbiAocHJvcGVydHlJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIHRhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGRlc2NyaXB0aW9uQ29sdW1uID0gdGhpcy5nZXRDb2x1bW5zRm9yKHRhYmxlKS5maW5kKGZ1bmN0aW9uIChvQ29sKSB7XG5cdFx0XHRyZXR1cm4gb0NvbC5uYW1lID09PSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudD8udGV4dFByb3BlcnR5O1xuXHRcdH0pO1xuXHRcdGlmIChkZXNjcmlwdGlvbkNvbHVtbikge1xuXHRcdFx0cHJvcGVydHlJbmZvLm1vZGUgPSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudCEubW9kZTtcblx0XHRcdHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5ID0gY29sdW1uSW5mby5yZWxhdGl2ZVBhdGg7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA9IChkZXNjcmlwdGlvbkNvbHVtbiBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvKS5yZWxhdGl2ZVBhdGg7XG5cdFx0fVxuXHRcdHByb3BlcnR5SW5mby50ZXh0ID0gY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQ/LnRleHRQcm9wZXJ0eTtcblx0fSxcblxuXHRfdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMocHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8sIGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtbikge1xuXHRcdGlmIChjb2x1bW5JbmZvLmFnZ3JlZ2F0YWJsZSkge1xuXHRcdFx0cHJvcGVydHlJbmZvLmFnZ3JlZ2F0YWJsZSA9IGNvbHVtbkluZm8uYWdncmVnYXRhYmxlO1xuXHRcdH1cblx0XHRpZiAoY29sdW1uSW5mby5leHRlbnNpb24pIHtcblx0XHRcdHByb3BlcnR5SW5mby5leHRlbnNpb24gPSBjb2x1bW5JbmZvLmV4dGVuc2lvbjtcblx0XHR9XG5cdH0sXG5cblx0X2ZldGNoQ29tcHV0ZWRQcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDb21wdXRlZFRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUpIHtcblx0XHRjb25zdCBsYWJlbCA9IGdldExvY2FsaXplZFRleHQoY29sdW1uSW5mby5sYWJlbCwgdGFibGUpOyAvLyBUb2RvOiBUbyBiZSByZW1vdmVkIG9uY2UgTURDIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHN1cHBvcnRcblx0XHRjb25zdCBwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyA9IHtcblx0XHRcdGtleTogY29sdW1uSW5mby5uYW1lLFxuXHRcdFx0bGFiZWw6IGxhYmVsLnRvU3RyaW5nKCksXG5cdFx0XHRkYXRhVHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIixcblx0XHRcdHZpc2libGU6IGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiLFxuXHRcdFx0ZmlsdGVyYWJsZTogZmFsc2UsXG5cdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRjbGlwYm9hcmRTZXR0aW5nczogY29sdW1uSW5mby5jbGlwYm9hcmRTZXR0aW5ncyBhcyBQcm9wZXJ0eUluZm9bXCJjbGlwYm9hcmRTZXR0aW5nc1wiXVxuXHRcdH07XG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcyAhPT0gdW5kZWZpbmVkICYmIGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9XG5cdFx0cmV0dXJuIHByb3BlcnR5SW5mbztcblx0fSxcblxuXHRfZmV0Y2hDdXN0b21Qcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSB7XG5cdFx0bGV0IGxhYmVsO1xuXHRcdGlmIChjb2x1bW5JbmZvLmhlYWRlcikge1xuXHRcdFx0aWYgKGNvbHVtbkluZm8uaGVhZGVyLnN0YXJ0c1dpdGgoXCJ7bWV0YU1vZGVsPlwiKSkge1xuXHRcdFx0XHRsYWJlbCA9IE1vZGVsSGVscGVyLmZldGNoVGV4dEZyb21NZXRhTW9kZWwoY29sdW1uSW5mby5oZWFkZXIsIHVuZGVmaW5lZCwgKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8uaGVhZGVyLCBhcHBDb21wb25lbnQpOyAvLyBUb2RvOiBUbyBiZSByZW1vdmVkIG9uY2UgTURDIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHN1cHBvcnRcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRrZXk6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdGdyb3VwTGFiZWw6IHVuZGVmaW5lZCxcblx0XHRcdGdyb3VwOiB1bmRlZmluZWQsXG5cdFx0XHRsYWJlbDogbGFiZWwgPz8gXCJcIixcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogY29sdW1uSW5mby5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyxcblx0XHRcdHZpc3VhbFNldHRpbmdzOiBjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzIGFzIFByb3BlcnR5SW5mb1tcInZpc3VhbFNldHRpbmdzXCJdXG5cdFx0fTtcblxuXHRcdC8vIE1EQyBleHBlY3RzICdwcm9wZXJ0eUluZm9zJyBvbmx5IGZvciBjb21wbGV4IHByb3BlcnRpZXMuXG5cdFx0Ly8gQW4gZW1wdHkgYXJyYXkgdGhyb3dzIHZhbGlkYXRpb24gZXJyb3IgYW5kIHVuZGVmaW5lZCB2YWx1ZSBpcyB1bmhhbmRsZWQuXG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcyAmJiBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MubGVuZ3RoKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQWRkIHByb3BlcnRpZXMgd2hpY2ggYXJlIHN1cHBvcnRlZCBvbmx5IGJ5IHNpbXBsZSBQcm9wZXJ0eUluZm9zLlxuXHRcdFx0cHJvcGVydHlJbmZvLnBhdGggPSBjb2x1bW5JbmZvLm5hbWU7XG5cdFx0XHRwcm9wZXJ0eUluZm8uc29ydGFibGUgPSBmYWxzZTtcblx0XHRcdHByb3BlcnR5SW5mby5maWx0ZXJhYmxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBwcm9wZXJ0eUluZm87XG5cdH0sXG5cdF9iQ29sdW1uSGFzUHJvcGVydHlXaXRoRHJhZnRJbmRpY2F0b3I6IGZ1bmN0aW9uIChvQ29sdW1uSW5mbzogVGFibGVDb2x1bW4pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISEoXG5cdFx0XHQob0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucyAmJiBvQ29sdW1uSW5mby5mb3JtYXRPcHRpb25zLmhhc0RyYWZ0SW5kaWNhdG9yKSB8fFxuXHRcdFx0KG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMgJiYgb0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgpXG5cdFx0KTtcblx0fSxcblx0X3VwZGF0ZURyYWZ0SW5kaWNhdG9yTW9kZWw6IGZ1bmN0aW9uIChfb1RhYmxlOiBUYWJsZSwgX29Db2x1bW5JbmZvOiBUYWJsZUNvbHVtbik6IHZvaWQge1xuXHRcdGNvbnN0IGFWaXNpYmxlQ29sdW1ucyA9IF9vVGFibGUuZ2V0Q29sdW1ucygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gX29UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGNvbnN0IHNJbnRlcm5hbFBhdGggPSBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCAmJiBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKGFWaXNpYmxlQ29sdW1ucyAmJiBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Zm9yIChjb25zdCBpbmRleCBpbiBhVmlzaWJsZUNvbHVtbnMpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRoaXMuX2JDb2x1bW5IYXNQcm9wZXJ0eVdpdGhEcmFmdEluZGljYXRvcihfb0NvbHVtbkluZm8pICYmXG5cdFx0XHRcdFx0X29Db2x1bW5JbmZvLm5hbWUgPT09IGFWaXNpYmxlQ29sdW1uc1tpbmRleF0uZ2V0UHJvcGVydHlLZXkoKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpZiAob0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUikgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiwgX29Db2x1bW5JbmZvLm5hbWUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGVudGl0eVR5cGVQYXRoOiBzdHJpbmcsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuXHQpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiB7XG5cdFx0Ly8gd2hlbiBmZXRjaGluZyBwcm9wZXJ0aWVzLCB0aGlzIGJpbmRpbmcgY29udGV4dCBpcyBuZWVkZWQgLSBzbyBsZXRzIGNyZWF0ZSBpdCBvbmx5IG9uY2UgYW5kIHVzZSBpZiBmb3IgYWxsIHByb3BlcnRpZXMvZGF0YS1maWVsZHMvbGluZS1pdGVtc1xuXHRcdGNvbnN0IGJpbmRpbmdQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChlbnRpdHlUeXBlUGF0aCk7XG5cdFx0bGV0IGZldGNoZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSA9IFtdO1xuXHRcdGNvbnN0IG5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gQ29tbW9uVXRpbHMuZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKGJpbmRpbmdQYXRoLCBtZXRhTW9kZWwpLk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzO1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5nZXRDb2x1bW5zRm9yKHRhYmxlKSlcblx0XHRcdC50aGVuKChjb2x1bW5zOiBUYWJsZUNvbHVtbltdKSA9PiB7XG5cdFx0XHRcdC8vIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhIGRvZXMgbm90IHdvcmsgdmlhICdlbnRpdHlTZXQvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEnXG5cdFx0XHRcdGlmIChjb2x1bW5zKSB7XG5cdFx0XHRcdFx0bGV0IHByb3BlcnR5SW5mbztcblx0XHRcdFx0XHRjb2x1bW5zLmZvckVhY2goKGNvbHVtbkluZm8pID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZURyYWZ0SW5kaWNhdG9yTW9kZWwodGFibGUsIGNvbHVtbkluZm8pO1xuXHRcdFx0XHRcdFx0c3dpdGNoIChjb2x1bW5JbmZvLnR5cGUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIkFubm90YXRpb25cIjpcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8gPSB0aGlzLl9mZXRjaFByb3BlcnR5SW5mbyhtZXRhTW9kZWwsIGNvbHVtbkluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uLCB0YWJsZSwgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdFx0XHRpZiAocHJvcGVydHlJbmZvICYmICFub25GaWx0ZXJhYmxlUHJvcGVydGllcy5pbmNsdWRlcygocHJvcGVydHlJbmZvIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikubmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mby5tYXhDb25kaXRpb25zID0gRGVsZWdhdGVVdGlsLmlzTXVsdGlWYWx1ZShwcm9wZXJ0eUluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKSA/IC0xIDogMTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJDb21wdXRlZFwiOlxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbyA9IHRoaXMuX2ZldGNoQ29tcHV0ZWRQcm9wZXJ0eUluZm8oY29sdW1uSW5mbyBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLCB0YWJsZSk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJTbG90XCI6XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJEZWZhdWx0XCI6XG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID0gdGhpcy5fZmV0Y2hDdXN0b21Qcm9wZXJ0eUluZm8oY29sdW1uSW5mbyBhcyBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZSwgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuaGFuZGxlZCBzd2l0Y2ggY2FzZSAke2NvbHVtbkluZm8udHlwZX1gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlJbmZvIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzID0gdGhpcy5fdXBkYXRlUHJvcGVydHlJbmZvKHRhYmxlLCBmZXRjaGVkUHJvcGVydGllcyBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10pO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHR0YWJsZUFQSS5zZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zKGZldGNoZWRQcm9wZXJ0aWVzIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSk7XG5cdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0UHJvcGVydHlJbmZvcygpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgdXBkYXRpbmcgZmV0Y2hlZCBwcm9wZXJ0aWVzOiAke2VyciBhcyBzdHJpbmd9YCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gZmV0Y2hlZFByb3BlcnRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblxuXHRfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHk6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0ZW50aXR5VHlwZVBhdGg6IHN0cmluZyxcblx0XHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+IHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGZldGNoZWRQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0Q2FjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdGlmIChmZXRjaGVkUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmV0Y2hlZFByb3BlcnRpZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KHRhYmxlLCBlbnRpdHlUeXBlUGF0aCwgbWV0YU1vZGVsLCBhcHBDb21wb25lbnQpLnRoZW4oZnVuY3Rpb24gKFxuXHRcdFx0c3ViRmV0Y2hlZFByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdXG5cdFx0KSB7XG5cdFx0XHR0YWJsZUFQSS5zZXRDYWNoZWRQcm9wZXJ0eUluZm9zKHN1YkZldGNoZWRQcm9wZXJ0aWVzKTtcblx0XHRcdHJldHVybiBzdWJGZXRjaGVkUHJvcGVydGllcztcblx0XHR9KTtcblx0fSxcblx0c2V0Tm9EYXRhSW5mb3JtYXRpb246IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MpOiB2b2lkIHtcblx0XHRjb25zdCBub0RhdGFBZ2dyZWdhdGlvbiA9IHRhYmxlLmdldE5vRGF0YSgpO1xuXHRcdGlmICh0eXBlb2Ygbm9EYXRhQWdncmVnYXRpb24gIT0gXCJzdHJpbmdcIiAmJiAobm9EYXRhQWdncmVnYXRpb24gYXMgQ29udHJvbCk/LmlzQShcInNhcC5tLklsbHVzdHJhdGVkTWVzc2FnZVwiKSkge1xuXHRcdFx0Y29uc3QgY3VycmVudElsbHVzdHJhdGVkTWVzc2FnZSA9IG5vRGF0YUFnZ3JlZ2F0aW9uIGFzIElsbHVzdHJhdGVkTWVzc2FnZTtcblx0XHRcdC8vIFdlIG92ZXJyaWRlIHRoZSBjdXJyZW50IHZhbHVlcyBvZiB0aGUgSWxsdXN0cmF0ZWRNZXNzYWdlXG5cdFx0XHRjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlLnNldFRpdGxlKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLnRpdGxlKTtcblx0XHRcdGN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2Uuc2V0RGVzY3JpcHRpb24oaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXRJbGx1c3RyYXRpb25UeXBlKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblR5cGUpO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXRJbGx1c3RyYXRpb25TaXplKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBpbGx1c3RyYXRlZE1lc3NhZ2UgPSBuZXcgSWxsdXN0cmF0ZWRNZXNzYWdlKHtcblx0XHRcdFx0Li4uaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb25cblx0XHRcdH0pO1xuXHRcdFx0dGFibGUuc2V0Tm9EYXRhKGlsbHVzdHJhdGVkTWVzc2FnZSk7XG5cdFx0fVxuXHR9LFxuXG5cdHNldFRhYmxlTm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3QgdGFibGVGaWx0ZXJJbmZvID0gVGFibGVVdGlscy5nZXRBbGxGaWx0ZXJJbmZvKHRhYmxlKTtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSk7XG5cdFx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBiaW5kaW5nSW5mby5wYXRoPy5zdGFydHNXaXRoKFwiL1wiKSA/IGJpbmRpbmdJbmZvLnBhdGguc3Vic3RyaW5nKDEpIDogYmluZGluZ0luZm8ucGF0aDtcblx0XHRsZXQgaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbjogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzO1xuXG5cdFx0Y29uc3QgZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMgPSBmdW5jdGlvbiAoKTogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIHtcblx0XHRcdGlmICh0YWJsZS5kYXRhKFwiaGlkZGVuRmlsdGVyc1wiKSB8fCB0YWJsZS5nZXRRdWlja0ZpbHRlcigpKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9NVUxUSV9WSUVXXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9TZWFyY2hSZXN1bHRzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiKSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9XSVRIX0ZJTFRFUlwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob1NlYXJjaFJlc3VsdHNcblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdGNvbnN0IGZpbHRlckFzc29jaWF0aW9uID0gdGFibGUuZ2V0RmlsdGVyKCk7XG5cdFx0Y29uc3QgaGFzRmlsdGVyT3JTZWFyY2ggPSB0YWJsZUZpbHRlckluZm8uc2VhcmNoIHx8IHRhYmxlRmlsdGVySW5mby5maWx0ZXJzPy5sZW5ndGg7XG5cdFx0aWYgKGZpbHRlckFzc29jaWF0aW9uICYmICEvQmFzaWNTZWFyY2gkLy50ZXN0KGZpbHRlckFzc29jaWF0aW9uKSkge1xuXHRcdFx0Ly8gY2hlY2sgaWYgYSBGaWx0ZXJCYXIgaXMgYXNzb2NpYXRlZCB0byB0aGUgVGFibGUgKGJhc2ljIHNlYXJjaCBvbiB0b29sQmFyIGlzIGV4Y2x1ZGVkKVxuXHRcdFx0aWYgKGhhc0ZpbHRlck9yU2VhcmNoKSB7XG5cdFx0XHRcdC8vIGNoZWNrIGlmIHRhYmxlIGhhcyBhbnkgRmlsdGVyYmFyIGZpbHRlcnMgb3IgcGVyc29uYWxpemF0aW9uIGZpbHRlcnNcblx0XHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IGdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0ge1xuXHRcdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9TRUFSQ0hSRVNVTFRTXCIpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob1NlYXJjaFJlc3VsdHNcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGhhc0ZpbHRlck9yU2VhcmNoKSB7XG5cdFx0XHQvL2NoZWNrIGlmIHRhYmxlIGhhcyBhbnkgcGVyc29uYWxpemF0aW9uIGZpbHRlcnNcblx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0ge1xuXHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PREFUQVwiKSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0ZJTFRFUlNfTk9fREFUQV9URVhUXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRGF0YVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpLmdldFZpZXdEYXRhKCkubGl2ZU1vZGUpIHtcblx0XHRcdGlmIChoYXNGaWx0ZXJPclNlYXJjaCkge1xuXHRcdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0gZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSB7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0ZJTFRFUlNfTk9fREFUQV9URVhUXCIpLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9TZWFyY2hSZXN1bHRzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24uaWxsdXN0cmF0aW9uU2l6ZSA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0Tm9EYXRhTWVzc2FnZU1vZGUoKTtcblxuXHRcdGlmIChpbGx1c3RyYXRlZEluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUgPT09IFwidGV4dFwiKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50Tm9EYXRhID0gdGFibGUuZ2V0Tm9EYXRhKCk7XG5cdFx0XHRpZiAodHlwZW9mIGN1cnJlbnROb0RhdGEgPT09IFwic3RyaW5nXCIgJiYgY3VycmVudE5vRGF0YSA9PT0gaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbikge1xuXHRcdFx0XHQvLyBXZSBkb24ndCBjaGFuZ2UgdGhlIG5vRGF0YSBhZ2dyZWdhdGlvbiB1bm5lY2Vzc2FyeS5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGFibGUuc2V0Tm9EYXRhKGlsbHVzdHJhdGVkSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE5vRGF0YUluZm9ybWF0aW9uKHRhYmxlLCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uKTtcblx0XHR9XG5cdH0sXG5cblx0aGFuZGxlVGFibGVEYXRhUmVjZWl2ZWQ6IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0JpbmRpbmcgPSBvVGFibGUgJiYgb1RhYmxlLmdldFJvd0JpbmRpbmcoKSxcblx0XHRcdGJEYXRhUmVjZWl2ZWRBdHRhY2hlZCA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiKTtcblxuXHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQgJiYgIWJEYXRhUmVjZWl2ZWRBdHRhY2hlZCkge1xuXHRcdFx0b0JpbmRpbmcuYXR0YWNoRGF0YVJlY2VpdmVkKCgpID0+IHtcblx0XHRcdFx0Ly8gYXMgdGhlIGRhdGFSZWNlaXZlZCBldmVudCBpcyBmaXJlZCBtdWx0aXBsZSB0aW1lcywgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZXZlbnQgaXMgb25seSBoYW5kbGVkIG9uY2Vcblx0XHRcdFx0aWYgKCFvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRUaW1lb3V0U2V0XCIpKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkVGltZW91dFNldFwiLCB0cnVlKTtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZFRpbWVvdXRTZXRcIiwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0Ly8gUmVmcmVzaCB0aGUgc2VsZWN0ZWQgY29udGV4dHMgdG8gdHJpZ2dlciByZS1jYWxjdWxhdGlvbiBvZiBlbmFibGVkIHN0YXRlIG9mIGFjdGlvbnMuXG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIFtdKTtcblx0XHRcdFx0XHRcdGNvbnN0IGFTZWxlY3RlZENvbnRleHRzID0gb1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKSBhcyBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiLCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IEpTT04ucGFyc2UodGFibGVBUEkudGFibGVEZWZpbml0aW9uLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdFx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhU2VsZWN0ZWRDb250ZXh0cywgXCJ0YWJsZVwiKTtcblx0XHRcdFx0XHRcdC8vIFJlZnJlc2ggZW5hYmxlbWVudCBvZiBkZWxldGUgYnV0dG9uXG5cdFx0XHRcdFx0XHREZWxldGVIZWxwZXIudXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRcdFx0XHRjb25zdCBvVGFibGVBUEkgPSBvVGFibGUgPyBvVGFibGUuZ2V0UGFyZW50KCkgOiBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKG9UYWJsZUFQSSkge1xuXHRcdFx0XHRcdFx0XHQob1RhYmxlQVBJIGFzIFRhYmxlQVBJKS5zZXRVcEVtcHR5Um93cyhvVGFibGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlQXZhaWxhYmxlQ2FyZHMob1RhYmxlKTtcblx0XHRcdFx0XHR9LCAwKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiLCB0cnVlKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNldCB0aGUgb3B0aW1pc3RpYyBiYXRjaCBwcm9taXNlIGZvciB0aGUgZW5hYmxlciBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgVGhlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHRhYmxlQVBJIFRoZSBUYWJsZUFQSVxuXHQgKi9cblx0c2V0T3B0aW1pc3RpY0JhdGNoUHJvbWlzZUZvck1vZGVsOiBmdW5jdGlvbiAoY29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsIHRhYmxlQVBJOiBUYWJsZUFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IG1vZGVsID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRNb2RlbCgpO1xuXHRcdGlmIChtb2RlbCkge1xuXHRcdFx0dGFibGVBUEkuc2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UobmV3IFByb21pc2VLZWVwZXI8Ym9vbGVhbj4oKSk7XG5cdFx0XHR0aGlzLnNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsKGNvbnRyb2xsZXIsIG1vZGVsLCB0YWJsZUFQSSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBFbmFibGUgdGhlIG9wdGltaXN0aWMgYmF0Y2ggbW9kZSBpZiBhdmFpbGFibGUuXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKi9cblx0ZW5hYmxlT3B0aW1pc3RpY0JhdGNoTW9kZTogZnVuY3Rpb24gKGNvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLCB0YWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJzUHJvcGVydGllc0FzUG90ZW50aWFsbHlTZW5zaXRpdmVEYXRhT3JEYXRlVHlwZSA9XG5cdFx0XHR0YWJsZSAmJiBUYWJsZVV0aWxzLmlzRmlsdGVyRWxpZ2libGVGb3JPcHRpbWlzdGljQmF0Y2godGFibGUsIGNvbnRyb2xsZXIuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBGaWx0ZXJCYXIpO1xuXHRcdCh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UoKT8ucmVzb2x2ZSghZmlsdGVyc1Byb3BlcnRpZXNBc1BvdGVudGlhbGx5U2Vuc2l0aXZlRGF0YU9yRGF0ZVR5cGUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBTZXR0ZXIgZm9yIHRoZSBvcHRpbWlzdGljIGJhdGNoIGVuYWJsZXIgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWwgVGhlIE9EYXRhIE1vZGVsXG5cdCAqIEBwYXJhbSB0YWJsZUFQSSBUaGUgVGFibGVBUElcblx0ICogQHNlZSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWwjc2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcn0gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG5cdCAqL1xuXHRzZXRPcHRpbWlzdGljQmF0Y2hGb3JNb2RlbDogZnVuY3Rpb24gKGNvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLCBkYXRhTW9kZWw6IE9EYXRhTW9kZWwsIHRhYmxlQVBJOiBUYWJsZUFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IGlzT3B0aW1pc3RpY0JhdGNoSGFzVG9CZUVuYWJsZWQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKS5pc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCgpO1xuXHRcdGlmIChkYXRhTW9kZWwuZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcigpID09PSBudWxsICYmICF0YWJsZUFQSS5pc09wdGltaXN0aWNCYXRjaERpc2FibGVkKCkgJiYgaXNPcHRpbWlzdGljQmF0Y2hIYXNUb0JlRW5hYmxlZCkge1xuXHRcdFx0Y29uc3Qgb3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2VLZWVwZXIgPSB0YWJsZUFQSS5nZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZSgpO1xuXHRcdFx0ZGF0YU1vZGVsLnNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIoZnVuY3Rpb24gKCk6IFByb21pc2U8Ym9vbGVhbj4gfCB1bmRlZmluZWQge1xuXHRcdFx0XHRyZXR1cm4gb3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2VLZWVwZXI/LnByb21pc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0cmViaW5kOiBhc3luYyBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgb0JpbmRpbmdJbmZvOiBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG9UYWJsZUFQSSA9IG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCBiSXNTdXNwZW5kZWQgPSBvVGFibGVBUEk/LmdldFByb3BlcnR5KFwiYmluZGluZ1N1c3BlbmRlZFwiKTtcblx0XHRvVGFibGVBUEk/LnNldFByb3BlcnR5KFwib3V0RGF0ZWRCaW5kaW5nXCIsIGJJc1N1c3BlbmRlZCk7XG5cdFx0aWYgKCFiSXNTdXNwZW5kZWQpIHtcblx0XHRcdFRhYmxlUnVudGltZS5jbGVhclNlbGVjdGlvbihvVGFibGUpO1xuXHRcdFx0VGFibGVEZWxlZ2F0ZUJhc2UucmViaW5kLmFwcGx5KHRoaXMsIFtvVGFibGUsIG9CaW5kaW5nSW5mb10pO1xuXHRcdFx0VGFibGVVdGlscy5vblRhYmxlQm91bmQob1RhYmxlKTtcblx0XHRcdHJldHVybiBUYWJsZVV0aWxzLndoZW5Cb3VuZChvVGFibGUpXG5cdFx0XHRcdC50aGVuKCh0YWJsZTogVGFibGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmhhbmRsZVRhYmxlRGF0YVJlY2VpdmVkKHRhYmxlLCB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRhYmxlIHRvIGJlIGJvdW5kXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBGZXRjaGVzIHRoZSByZWxldmFudCBtZXRhZGF0YSBmb3IgdGhlIHRhYmxlIGFuZCByZXR1cm5zIHByb3BlcnR5IGluZm8gYXJyYXkuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0aGUgTURDdGFibGVcblx0ICogQHJldHVybnMgQXJyYXkgb2YgcHJvcGVydHkgaW5mb1xuXHQgKi9cblx0ZmV0Y2hQcm9wZXJ0aWVzOiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwuZmV0Y2hNb2RlbCh0YWJsZSlcblx0XHRcdC50aGVuKGFzeW5jIChtb2RlbCk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+ID0+IHtcblx0XHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRhYmxlKTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KFxuXHRcdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRcdERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHN0cmluZz4odGFibGUsIFwiZW50aXR5VHlwZVwiKSA/PyBcIlwiLFxuXHRcdFx0XHRcdG1vZGVsLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKChwcm9wZXJ0aWVzKSA9PiB7XG5cdFx0XHRcdCh0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIENvbnRleHQpPy5zZXRQcm9wZXJ0eShcInRhYmxlUHJvcGVydGllc0F2YWlsYWJsZVwiLCB0cnVlKTtcblx0XHRcdFx0cmV0dXJuIHByb3BlcnRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblxuXHRwcmVJbml0OiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIChUYWJsZURlbGVnYXRlQmFzZS5wcmVJbml0IGFzICh0YWJsZTogVGFibGUpID0+IFByb21pc2U8dm9pZD4pLmFwcGx5KHRoaXMsIFt0YWJsZV0pLnRoZW4oKCkgPT4ge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBTZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvdyB0byBhdm9pZCBpbmhlcml0aW5nXG5cdFx0XHQgKiB0aGUgd3JvbmcgY29udGV4dCBhbmQgcmVxdWVzdGluZyB0aGUgdGFibGUgY29sdW1ucyBvbiB0aGUgcGFyZW50IGVudGl0eVxuXHRcdFx0ICogU2V0IHRoZSBjb3JyZWN0IGJpbmRpbmcgY29udGV4dCBpbiBPYmplY3RQYWdlQ29udHJvbGxlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coKVxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBmYXN0Q3JlYXRpb25Sb3cgPSB0YWJsZS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0aWYgKGZhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRmYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQobnVsbCBhcyB1bmtub3duIGFzIENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9LFxuXHR1cGRhdGVCaW5kaW5nSW5mbzogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJID0gbmV3IENvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSShiaW5kaW5nSW5mbyk7XG5cdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoXCJpc0luc2lnaHRzRW5hYmxlZFwiLCB0cnVlKTtcblx0XHRUYWJsZURlbGVnYXRlQmFzZS51cGRhdGVCaW5kaW5nSW5mby5hcHBseSh0aGlzLCBbdGFibGUsIGJpbmRpbmdJbmZvXSk7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMuX2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTSh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5faW50ZXJuYWxVcGRhdGVCaW5kaW5nSW5mbyh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5zZXRUYWJsZU5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZSh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5faGFuZGxlUmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHModGFibGUsIGJpbmRpbmdJbmZvKTtcblx0XHRcdHRoaXMuX2hhbmRsZUZpbHRlcnNGb3JFeHRlcm5hbElEKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cblx0XHRcdHRhYmxlLmdldFBhcmVudCgpPy5maXJlRXZlbnQoXCJiZWZvcmVSZWJpbmRUYWJsZVwiLCB7IGNvbGxlY3Rpb25CaW5kaW5nSW5mbzogY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIH0pO1xuXHRcdFx0Y29uc3QgYXR0YWNoZWRFdmVudHMgPSBjb2xsZWN0aW9uQmluZGluZ0luZm9BUEkuZ2V0QXR0YWNoZWRFdmVudHMoKTtcblx0XHRcdC8qKlxuXHRcdFx0ICogV2UgaGF2ZSB0byBzZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvdyB0byBhdm9pZCBpdCBpbmhlcml0aW5nXG5cdFx0XHQgKiB0aGUgd3JvbmcgY29udGV4dCBhbmQgcmVxdWVzdGluZyB0aGUgdGFibGUgY29sdW1ucyBmb3IgdGhlIHBhcmVudCBlbnRpdHlcblx0XHRcdCAqIFRoZSBjb3JyZWN0IGJpbmRpbmcgY29udGV4dCBpcyBzZXQgaW4gT2JqZWN0UGFnZUNvbnRyb2xsZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KClcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3QgY29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cblx0XHRcdGlmICh0YWJsZS5nZXRDcmVhdGlvblJvdygpPy5nZXRCaW5kaW5nQ29udGV4dCgpID09PSBudWxsICYmIGJpbmRpbmdJbmZvLnBhdGggJiYgY29udGV4dCkge1xuXHRcdFx0XHRUYWJsZUhlbHBlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5cdFx0XHRcdFx0dGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0XHRiaW5kaW5nSW5mby5wYXRoLFxuXHRcdFx0XHRcdGNvbnRleHQgYXMgdjRDb250ZXh0LFxuXHRcdFx0XHRcdHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCxcblx0XHRcdFx0XHRQcm9taXNlLnJlc29sdmUoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0dGFibGVBUEkuc2V0QXR0YWNoRXZlbnRzKGF0dGFjaGVkRXZlbnRzKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB1cGRhdGluZyB0aGUgYmluZGluZyBpbmZvXCIsIGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH0sXG5cblx0X2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTTogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IHNvcnRlcnM6IFNvcnRlcltdIHwgdW5kZWZpbmVkID0gYmluZGluZ0luZm8uc29ydGVyO1xuXHRcdGNvbnN0IG5ld1NvcnRlcnNUb0JlQXBwbGllZDogU29ydGVyW10gPSBbXTtcblx0XHRpZiAoc29ydGVycz8ubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0Y29uc3QgdGFibGVQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0Q2FjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdFx0Zm9yIChjb25zdCBzb3J0ZXIgb2Ygc29ydGVycykge1xuXHRcdFx0XHRjb25zdCB0YWJsZVByb3BlcnR5ID0gdGFibGVQcm9wZXJ0aWVzPy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkucGF0aCA9PT0gc29ydGVyLmdldFBhdGgoKSk7XG5cdFx0XHRcdGlmICh0YWJsZVByb3BlcnR5Py51bml0KSB7XG5cdFx0XHRcdFx0Y29uc3QgdW5pdFByb3BlcnR5ID0gdGFibGVQcm9wZXJ0aWVzPy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkua2V5ID09PSB0YWJsZVByb3BlcnR5Py51bml0KTtcblx0XHRcdFx0XHRjb25zdCB1bml0U29ydGVyQXZhaWxhYmxlID0gdW5pdFByb3BlcnR5Py5wYXRoICYmIHNvcnRlcnMuc29tZSgoc29ydCkgPT4gc29ydC5nZXRQYXRoKCkgPT09IHVuaXRQcm9wZXJ0eS5wYXRoKTtcblx0XHRcdFx0XHRpZiAoIXVuaXRTb3J0ZXJBdmFpbGFibGUgJiYgdW5pdFByb3BlcnR5Py5zb3J0YWJsZSAhPT0gZmFsc2UgJiYgdW5pdFByb3BlcnR5Py5wYXRoKSB7XG5cdFx0XHRcdFx0XHRuZXdTb3J0ZXJzVG9CZUFwcGxpZWQucHVzaChuZXcgU29ydGVyKHVuaXRQcm9wZXJ0eS5wYXRoLCBmYWxzZSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRuZXdTb3J0ZXJzVG9CZUFwcGxpZWQucHVzaChzb3J0ZXIpO1xuXHRcdFx0fVxuXHRcdFx0YmluZGluZ0luZm8uc29ydGVyID0gbmV3U29ydGVyc1RvQmVBcHBsaWVkO1xuXHRcdH1cblx0fSxcblxuXHRfaGFuZGxlRmlsdGVyc0ZvckV4dGVybmFsSUQ6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKT8uZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBiaW5kaW5nSW5mby5wYXRoICsgXCIvXCI7XG5cdFx0Y29uc3QgZmlsdGVycyA9IGJpbmRpbmdJbmZvLmZpbHRlcnM/LmdldEZpbHRlcnMoKTtcblx0XHRpZiAoZmlsdGVycyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRUYWJsZVV0aWxzLnVwZGF0ZUZpbHRlcnNGb3JFeHRlcm5hbElEKG1ldGFNb2RlbCwgZmlsdGVycyBhcyB1bmtub3duIGFzIENvbmRpdGlvbk9iamVjdFtdLCBlbnRpdHlUeXBlUGF0aCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9oYW5kbGVSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkczogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgb0JpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0YWJsZUFQST8uZ2V0UGFnZUNvbnRyb2xsZXIoKTtcblx0XHRpZiAoY29udHJvbGxlcj8ucmVjb21tZW5kYXRpb25zLmlzUmVjb21tZW5kYXRpb25FbmFibGVkKCkpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0XHRjb25zdCB0YWJsZURlZiA9IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzID0gYXBwQ29tcG9uZW50XG5cdFx0XHRcdC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKVxuXHRcdFx0XHQuZ2V0UmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHModGFibGVEZWYuYW5ub3RhdGlvbi5lbnRpdHlUeXBlTmFtZSk7XG5cdFx0XHRpZiAocmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzICYmIHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcy5sZW5ndGggPiAwICYmIG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWxlY3QgPSBvQmluZGluZ0luZm8ucGFyYW1ldGVycz8uJHNlbGVjdD8uY29uY2F0KFwiLFwiLCByZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMuam9pbigpKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0aGUgY2FyZHMgd2hlbiB0aGUgYmluZGluZyBpcyByZWZyZXNoZWQuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgbWRjIHRhYmxlIGNvbnRyb2wuXG5cdCAqL1xuXHRfdXBkYXRlQXZhaWxhYmxlQ2FyZHM6IGFzeW5jIGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICh0YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpPy5jb252ZXJ0ZXJUeXBlID09PSBcIkxpc3RSZXBvcnRcIikge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGFibGVBUEk/LmdldFBhZ2VDb250cm9sbGVyKCk/LmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0Y29uc3QgY2FyZHM6IFdyYXBwZWRDYXJkW10gPSBbXTtcblx0XHRcdGF3YWl0IHRhYmxlQVBJLmNvbGxlY3RBdmFpbGFibGVDYXJkcyhjYXJkcyk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aW9uTWFuYWdlciA9IG5ldyBDb2xsYWJvcmF0aW9uTWFuYWdlcigpO1xuXHRcdFx0Y29uc3QgY2FyZE9iamVjdCA9IGNvbGxhYm9yYXRpb25NYW5hZ2VyLnVwZGF0ZUNhcmRzKGNhcmRzKTtcblx0XHRcdGNvbnN0IHBhcmVudEFwcElkID0gYXBwQ29tcG9uZW50LmdldElkKCk7XG5cdFx0XHRhcHBDb21wb25lbnQuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCkuYWRkQ2FyZHNUb0NvbGxhYm9yYXRpb25NYW5hZ2VyKGNhcmRPYmplY3QsIHBhcmVudEFwcElkKTtcblx0XHRcdGFwcENvbXBvbmVudC5nZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UoKS5zaGFyZUF2YWlsYWJsZUNhcmRzKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGUgaG9vayBpbXBsZW1lbnRlZCBieSBNREMgdGhhdCB3ZSBjYW4gb3ZlcnJpZGUuXG5cdCAqIFRoaXMgYWxsb3dzIHVzIHRvIGRlZmluZSBwcm9wZXJ0aWVzIHRvIGJlIHJlcXVlc3RlZCBpbiB0aGUgTURDIHRhYmxlIChNYWluIGNhc2UgaXMgZm9yIHRoZSBhbmFseXRpY2FsIHRhYmxlKS5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZSB0byBiZSByZXF1ZXN0ZWQuXG5cdCAqL1xuXHRnZXRJblJlc3VsdFByb3BlcnR5S2V5czogZnVuY3Rpb24gKHRhYmxlOiBNRENUYWJsZSk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICh0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCkge1xuXHRcdFx0Y29uc3QgYWxsS2tleXNSZXF1ZXN0ZWQgPSB0aGlzLmNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZCh0YWJsZUFQSSk7XG5cdFx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdC8vIGlmIGEgcm93cHJlc3MgaXMgb3ZlcnJpZGRlbiwgd2UgIHNob3VsZCBlbmFibGUgdGhlIG5hdmlnYXRpb24gYXQgdGhlIG5vZGUgbGV2ZWxcblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFwiaXNOb2RlTGV2ZWxOYXZpZ2FibGVcIiwgdGFibGVBUEkub3ZlcnJpZGVSb3dQcmVzcyA/IHRydWUgOiBhbGxLa2V5c1JlcXVlc3RlZCk7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRPYmplY3Qua2V5cyh0YWJsZUFQSS50YWJsZURlZmluaXRpb24ucmVxdWVzdEF0TGVhc3QpXG5cdFx0XHRcdFx0Ly8gZm9yIGFuYWx5dGljIHRhYmxlcyB3aXRoIGFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwgd2Ugc2hvdWxkIG5vdCByZXF1ZXN0IHRoZSBzZW1hbnRpY0tleSBleHBlY3RlZCB3aGVuIGFsbCBrZXlzIGFyZSByZXF1ZXN0ZWQgLT4gIGl0IHdpbGwgcGVybWl0cyB0byBuYXZpZ2F0ZSBmcm9tIGEgbm9kZSBsZXZlbCB3aGVuIHNlbWFudGljS2V5IGFyZSBlbmFibGVkXG5cdFx0XHRcdFx0Ly8gcmVzdHJpY3Rpb24gYXJlIGFsc28gZXhjbHVkZWQgYXMgd2UgY2Fubm90IGRlc3Rpbmd1aXNoIGJldHdlZW4gYSBub2RlIGFuZCBhIGFnZ3JlZ2F0aW9uIGxldmVsXG5cblx0XHRcdFx0XHQuZmlsdGVyKChmaWVsZE5hbWU6IHN0cmluZykgPT5cblx0XHRcdFx0XHRcdCFhbGxLa2V5c1JlcXVlc3RlZFxuXHRcdFx0XHRcdFx0XHQ/IHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5yZXF1ZXN0QXRMZWFzdFtmaWVsZE5hbWVdLnNvbWUoXG5cdFx0XHRcdFx0XHRcdFx0XHQob3JpZ2luKSA9PiBvcmlnaW4gIT09IFwicmVzdHJpY3Rpb25cIiAmJiBvcmlnaW4gIT09IFwic2VtYW50aWNLZXlcIlxuXHRcdFx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHRcdFx0OiB0cnVlXG5cdFx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5yZXF1ZXN0QXRMZWFzdCA/PyB7fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGFsbCBrZXlzKCkgZXhjZXB0ZWQgSXNBY3RpdmVFbnRpdHkpIGFyZSByZXF1ZXN0ZWQgaW4gdGhlIHRhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGVBUEkgVGhlIHRhYmxlIEFQSVxuXHQgKiBAcmV0dXJucyAgVHJ1ZSBpZiBhbGwga2V5cyBhcmUgcmVxdWVzdGVkLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdGNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZDogZnVuY3Rpb24gKHRhYmxlQVBJOiBUYWJsZUFQSSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHRhYmxlID0gdGFibGVBUEkuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IGFsbENvbHVtbnMgPSB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zIGFzIChUYWJsZUNvbHVtbiAmIHsgaXNLZXk6IGJvb2xlYW47IHJlbGF0aXZlUGF0aDogc3RyaW5nIH0pW107XG5cdFx0Y29uc3Qga2V5UHJvcGVydHlOYW1lcyA9IGFsbENvbHVtbnNcblx0XHRcdC5maWx0ZXIoKGMpID0+IGMuaXNLZXkgJiYgYy5yZWxhdGl2ZVBhdGggJiYgYy5yZWxhdGl2ZVBhdGggIT09IFwiSXNBY3RpdmVFbnRpdHlcIilcblx0XHRcdC5tYXAoKGMpID0+IGMucmVsYXRpdmVQYXRoKTtcblxuXHRcdGNvbnN0IGRpc3BsYXllZENvbHVtbnMgPSB0YWJsZVxuXHRcdFx0LmdldENvbHVtbnMoKVxuXHRcdFx0Lm1hcCgoY29sdW1uKSA9PiB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gY29sdW1uLmdldFByb3BlcnR5S2V5KCkpKTtcblxuXHRcdC8vIFN0b3JlIGFsbCBwcm9wZXJ0aWVzIHJlZmVyZW5jZWQgYnkgZGlzcGxheWVkIGNvbHVtbnMgaW4gYSBTZXRcblx0XHRjb25zdCByZWZlcmVuY2VkUHJvcGVydHlQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGZ1bmN0aW9uIHByb2Nlc3NDb2x1bW4oY29sOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0XHRcdC8vIEFkZCB0aGUgcHJvcGVydHkgbmFtZSBmcm9tIGNvbHVtbiBpdHNlbGYgaWYgaXQncyBub3QgYSBjb21wbGV4IHByb3BlcnR5SW5mb1xuXHRcdFx0aWYgKGNvbC5yZWxhdGl2ZVBhdGggJiYgY29sLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZWZlcmVuY2VkUHJvcGVydHlQYXRocy5hZGQoY29sLnJlbGF0aXZlUGF0aCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0aGUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHJlZmVyZW5jZWQgYnkgdGhlIGNvbHVtblxuXHRcdFx0Y29sLmV4dGVuc2lvbj8uYWRkaXRpb25hbFByb3BlcnRpZXM/LmZvckVhY2goKGFkZGl0aW9uYWxDb2x1bW5OYW1lKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFkZGl0aW9uYWxDb2x1bW4gPSBhbGxDb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gYWRkaXRpb25hbENvbHVtbk5hbWUpO1xuXHRcdFx0XHRpZiAoYWRkaXRpb25hbENvbHVtbj8ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRcdFx0cmVmZXJlbmNlZFByb3BlcnR5UGF0aHMuYWRkKGFkZGl0aW9uYWxDb2x1bW4ucmVsYXRpdmVQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGRpc3BsYXllZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0XHRpZiAoIWNvbHVtbikge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBQcm9jZXNzIHRoZSBjb2x1bW4gaXRzZWxmXG5cdFx0XHRwcm9jZXNzQ29sdW1uKGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pO1xuXG5cdFx0XHQvLyBQcm9jZXNzIHRoZSBjb2x1bW5zIHJlZmVyZW5jZWQgYnkgdGhlIGNvbHVtblxuXHRcdFx0Y29sdW1uLnByb3BlcnR5SW5mb3M/LmZvckVhY2goKHJlbGF0ZWRDb2x1bW5OYW1lKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlbGF0ZWRDb2x1bW4gPSBhbGxDb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gcmVsYXRlZENvbHVtbk5hbWUpO1xuXHRcdFx0XHRpZiAocmVsYXRlZENvbHVtbikge1xuXHRcdFx0XHRcdHByb2Nlc3NDb2x1bW4ocmVsYXRlZENvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBrZXlQcm9wZXJ0eU5hbWVzLmV2ZXJ5KChwcm9wTmFtZSkgPT4gcHJvcE5hbWUgJiYgcmVmZXJlbmNlZFByb3BlcnR5UGF0aHMuaGFzKHByb3BOYW1lKSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzZWFyY2ggcXVlcnkgZm9yIGFuYWx5dGljYWwgYW5kIG5vbiBhbmFseXRpY2FsIG9kYXRhTGlzdEJpbmRpbmcuXG5cdCAqIEBwYXJhbSBiaW5kaW5nIFRoZSBvRGF0YUxpc3RCaW5kaW5nIGluc3RhbmNlLlxuXHQgKiBAcmV0dXJucyBUaGUgc2VhcmNoIHF1ZXJ5IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cblx0ICovXG5cdGdldFNlYXJjaFF1ZXJ5OiBmdW5jdGlvbiAoYmluZGluZzogT0RhdGFMaXN0QmluZGluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgYWdncmVnYXRpb24gPSBiaW5kaW5nLmdldEFnZ3JlZ2F0aW9uPy4oKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYWdncmVnYXRpb24/LnNlYXJjaCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBGb3IgYW5hbHl0aWNhbCB0YWJsZXMsIHRoZSBzZWFyY2ggcXVlcnkgaXMgc3RvcmVkIGluIHRoZSBhZ2dyZWdhdGlvblxuXHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uLnNlYXJjaCBhcyBzdHJpbmc7XG5cdFx0fVxuXHRcdC8vIElmIG5vdCBmb3VuZCBpbiBhZ2dyZWdhdGlvbiwgY2hlY2sgdGhlIHF1ZXJ5IG9wdGlvbnNcblx0XHRyZXR1cm4gYmluZGluZy5nZXRRdWVyeU9wdGlvbnNGcm9tUGFyYW1ldGVycygpLiRzZWFyY2g7XG5cdH0sXG5cdHVwZGF0ZUJpbmRpbmc6IGZ1bmN0aW9uICh0YWJsZTogTURDVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8sIGJpbmRpbmc/OiBPRGF0YUxpc3RCaW5kaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCBiSXNTdXNwZW5kZWQgPSB0YWJsZUFQST8uZ2V0UHJvcGVydHkoXCJiaW5kaW5nU3VzcGVuZGVkXCIpO1xuXHRcdGlmICghYklzU3VzcGVuZGVkKSB7XG5cdFx0XHQvLyBpZiB0aGUgcm93QmluZGluZ0luZm8gaGFzIGEgJCRnZXRLZWVwQWxpdmVDb250ZXh0IHBhcmFtZXRlciB3ZSBuZWVkIHRvIGNoZWNrIGl0IGlzIHRoZSBvbmx5IFRhYmxlIHdpdGggc3VjaCBhXG5cdFx0XHQvLyBwYXJhbWV0ZXIgZm9yIHRoZSBjb2xsZWN0aW9uTWV0YVBhdGhcblx0XHRcdGlmIChiaW5kaW5nSW5mby5wYXJhbWV0ZXJzPy4kJGdldEtlZXBBbGl2ZUNvbnRleHQgPT09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvblBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KHRhYmxlLCBcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpID8/IFwiXCI7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0YWJsZS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdFx0Y29uc3Qga2VwdEFsaXZlTGlzdHMgPSBpbnRlcm5hbE1vZGVsPy5nZXRPYmplY3QoXCIva2VwdEFsaXZlTGlzdHNcIikgPz8ge307XG5cdFx0XHRcdGlmICgha2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdKSB7XG5cdFx0XHRcdFx0a2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdID0gdGFibGUuZ2V0SWQoKTtcblx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsPy5zZXRQcm9wZXJ0eShcIi9rZXB0QWxpdmVMaXN0c1wiLCBrZXB0QWxpdmVMaXN0cyk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoa2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdICE9PSB0YWJsZS5nZXRJZCgpKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRnZXRLZWVwQWxpdmVDb250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGxldCBuZWVkTWFudWFsUmVmcmVzaCA9IGZhbHNlO1xuXHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRjb25zdCBtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSA9IFwicGVuZGluZ01hbnVhbEJpbmRpbmdVcGRhdGVcIjtcblx0XHRcdGNvbnN0IHBlbmRpbmdNYW51YWxVcGRhdGUgPSBpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSkgYXMgYm9vbGVhbjtcblx0XHRcdGNvbnN0IG5ld1NvcnRlcnMgPSBKU09OLnN0cmluZ2lmeShiaW5kaW5nSW5mby5zb3J0ZXIgPz8gW10pO1xuXG5cdFx0XHRpZiAoYmluZGluZykge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogTWFudWFsIHJlZnJlc2ggaWYgZmlsdGVycyBhcmUgbm90IGNoYW5nZWQgYnkgYmluZGluZy5yZWZyZXNoKCkgc2luY2UgdXBkYXRpbmcgdGhlIGJpbmRpbmdJbmZvXG5cdFx0XHRcdCAqIGlzIG5vdCBlbm91Z2ggdG8gdHJpZ2dlciBhIGJhdGNoIHJlcXVlc3QuXG5cdFx0XHRcdCAqIFJlbW92aW5nIGNvbHVtbnMgY3JlYXRlcyBvbmUgYmF0Y2ggcmVxdWVzdCB0aGF0IHdhcyBub3QgZXhlY3V0ZWQgYmVmb3JlXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXc/LmdldFZpZXdEYXRhKCkgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3M7XG5cdFx0XHRcdGNvbnN0IG9sZEZpbHRlcnMgPSBiaW5kaW5nLmdldEZpbHRlcnMoXCJBcHBsaWNhdGlvblwiKTtcblx0XHRcdFx0Y29uc3QgcHJldmlvdXNTb3J0ZXJzID0gaW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoUFJFVklPVVNfU09SVEVSUykgPz8gXCJbXVwiO1xuXG5cdFx0XHRcdGNvbnN0IGZpbHRlck5vdENoYW5nZWQgPVxuXHRcdFx0XHRcdCgoYmluZGluZ0luZm8uZmlsdGVycyA9PT0gbnVsbCAmJiBvbGRGaWx0ZXJzLmxlbmd0aCA9PT0gMCkgfHwgLy8gb24gYW5hbHl0aWNhbCB0YWJsZXMsIHRoZSBmaWx0ZXJzIGFyZSBzZXQgdG8gbnVsbCB3aGVuIG5vIGZpbHRlcnNcblx0XHRcdFx0XHRcdGRlZXBFcXVhbChiaW5kaW5nSW5mby5maWx0ZXJzLCBvbGRGaWx0ZXJzWzBdKSkgJiZcblx0XHRcdFx0XHRuZXdTb3J0ZXJzID09PSBwcmV2aW91c1NvcnRlcnMgJiZcblx0XHRcdFx0XHRiaW5kaW5nSW5mby5wYXRoID09PSBiaW5kaW5nLmdldFBhdGgoKSAmJiAvLyBUaGUgcGF0aCBjYW4gYmUgY2hhbmdlZCBpbiBjYXNlIG9mIGEgcGFyYW1ldHJpemVkIGVudGl0eVxuXHRcdFx0XHRcdHRoaXMuZ2V0U2VhcmNoUXVlcnkoYmluZGluZykgPT09IGJpbmRpbmdJbmZvPy5wYXJhbWV0ZXJzPy4kc2VhcmNoO1xuXHRcdFx0XHRjb25zdCBMUk11bHRpVmlld0VuYWJsZWQgPSAhIXZpZXdEYXRhLnZpZXdzO1xuXG5cdFx0XHRcdG5lZWRNYW51YWxSZWZyZXNoID1cblx0XHRcdFx0XHRmaWx0ZXJOb3RDaGFuZ2VkICYmXG5cdFx0XHRcdFx0KGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KFNFQVJDSF9IQVNfQkVFTl9GSVJFRCkgfHwgLy8gY2hlY2sgaWYgdGhlIHNlYXJjaCBoYXMgYmVlbiB0cmlnZ2VyZWRcblx0XHRcdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCkgfHwgLy8gY2hlY2sgaWYgYSBjb2x1bW4gaGFzIGJlZW4gYWRkZWRcblx0XHRcdFx0XHRcdExSTXVsdGlWaWV3RW5hYmxlZCkgJiYgLy8gaWYgdGhlIG11bHRpIHZpZXcgaXMgZW5hYmxlZCB0aGUgcmVxdWVzdCBzaG91bGQgYmUgcmVmcmVzaGVkIGFzIHdlIGRvbid0IGtub3duIGlmIHRoZSBjb250ZW50IG9mIHRoZSB0YWJsZSBpcyBvdXRkYXRlZCBkdWUgdG8gYW4gYWN0aW9uIG9uIGFub3RoZXIgdGFibGVcblx0XHRcdFx0XHQhcGVuZGluZ01hbnVhbFVwZGF0ZTtcblx0XHRcdH1cblx0XHRcdC8vIENsZWFudXAgZ3JvdXBDb25kaXRpb25zIGFuZCBhZ2dyZWdhdGVDb25kaXRpb25zIGlmIHRoZXkgZG9uJ3QgbWFrZSBzZW5zZVxuXHRcdFx0aWYgKHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUFuYWx5dGljcyAhPT0gdHJ1ZSkge1xuXHRcdFx0XHQvLyBBZ2dyZWdhdGUgY29uZGl0aW9ucyBuZXZlciBtYWtlIHNlbnNlIG91dHNpZGUgb2YgYW4gYW5hbHl0aWNhbCB0YWJsZVxuXHRcdFx0XHR0YWJsZS5zZXRBZ2dyZWdhdGVDb25kaXRpb25zKCk7XG5cblx0XHRcdFx0Ly8gR3JvdXAgY29uZGl0aW9ucyBkb24ndCBtYWtlIHNlbnNlIGluIGEgVHJlZSBvciBHcmlkIHRhYmxlXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiR3JpZFRhYmxlXCIgfHxcblx0XHRcdFx0XHR0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGFibGUuc2V0R3JvdXBDb25kaXRpb25zKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmcuYXBwbHkodGhpcywgW3RhYmxlLCBiaW5kaW5nSW5mbywgYmluZGluZ10pO1xuXHRcdFx0Ly8gd2Ugc3RvcmUgdGhlIHRhYmxlIGJpbmRpbmcgaW5mbyB0aGF0IHdhcyB1c2VkIHRvIGJpbmQgdGhlIHRhYmxlIGluIHRoZSB0YWJsZSBBUElcblx0XHRcdC8vIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhZnRlciB0aGUgY2FsbCB0byBUYWJsZURlbGVnYXRlQmFzZS51cGRhdGVCaW5kaW5nIG90aGVyIHdpc2Ugd2UgZG9uJ3QgZ2V0IHRoZSBhZ2dyZWdhdGUgcGFyYW1ldGVyc1xuXHRcdFx0Ly8gb3RoZXJ3aXNlIHRoZXJlIGlzIG5vIHdheSB0byByZXRyaWV2ZSBzb3J0ZXJzIGFkZGVkIGluIHRoZSBvbkJlZm9yZVJlYmluZFRhYmxlIGV2ZW50XG5cdFx0XHR0YWJsZUFQSS5zZXRUYWJsZUJpbmRpbmdJbmZvKGJpbmRpbmdJbmZvKTtcblx0XHRcdC8vIHdlIG1ha2UgdGhlIGNhbGwgdG8gdXBkYXRlIHRoZSBkb3dubG9hZCB1cmwgYnV0IGRvIG5vdCBhd2FpdCBpdFxuXHRcdFx0dGFibGVBUEkuc2V0RG93bmxvYWRVcmwoKTtcblxuXHRcdFx0dGFibGUuZmlyZUV2ZW50KFwiYmluZGluZ1VwZGF0ZWRcIik7XG5cdFx0XHRpZiAobmVlZE1hbnVhbFJlZnJlc2ggJiYgdGFibGUuZ2V0RmlsdGVyKCkgJiYgYmluZGluZykge1xuXHRcdFx0XHRiaW5kaW5nXG5cdFx0XHRcdFx0LnJlcXVlc3RSZWZyZXNoKGJpbmRpbmcuZ2V0R3JvdXBJZCgpKVxuXHRcdFx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCBmYWxzZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVmcmVzaGluZyB0aGUgdGFibGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCB0cnVlKTtcblx0XHRcdH1cblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFNFQVJDSF9IQVNfQkVFTl9GSVJFRCwgZmFsc2UpO1xuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoQ09MVU1OX0hBU19CRUVOX0FEREVELCBmYWxzZSk7XG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShQUkVWSU9VU19TT1JURVJTLCBuZXdTb3J0ZXJzKTtcblxuXHRcdFx0Ly9mb3IgVHJlZXRhYmxlLCBpdCdzIG5lY2Vzc2FyeSB0byBjbGVhciB0aGUgcGFzdGFibGVDb250ZXh0cyBzaW5jZSB0aGUgYmluZGluZyBkZXN0cm95cyBwcmV2aW91cyBjb250ZXh0cy5cblx0XHRcdGlmICh0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoXCJwYXN0YWJsZUNvbnRleHRzXCIsIFtdKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYXR0YWNoZWRFdmVudHMgPSB0YWJsZUFQSS5zdG9yZWRFdmVudHMgPz8gW107XG5cdFx0XHRhdHRhY2hlZEV2ZW50cy5mb3JFYWNoKCh7IGV2ZW50SWQsIGNhbGxiYWNrLCBsaXN0ZW5lciwgZGF0YSB9KSA9PiB7XG5cdFx0XHRcdHRhYmxlLmdldFJvd0JpbmRpbmcoKT8uYXR0YWNoRXZlbnQoZXZlbnRJZCwgZGF0YSwgY2FsbGJhY2ssIGxpc3RlbmVyKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0YWJsZUFQST8uc2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIiwgYklzU3VzcGVuZGVkKTtcblx0fSxcblxuXHRfY29tcHV0ZVJvd0JpbmRpbmdJbmZvRnJvbVRlbXBsYXRlOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSk6IENvbGxlY3Rpb25CaW5kaW5nSW5mbyB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSBvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3Qgcm93QmluZGluZ0luZm8gPSB0YWJsZUFQSS5nZXRUYWJsZVRlbXBsYXRlQmluZGluZ0luZm8oKTtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGxldCB0YWJsZUNhbkJlSW5JbmxpbmVFZGl0ID0gZmFsc2U7XG5cdFx0aWYgKFxuXHRcdFx0YmluZGluZ0NvbnRleHQgPT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0b1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwidWlcIik/LmdldFByb3BlcnR5KFwiaXNFZGl0YWJsZVwiKSA9PT0gZmFsc2UgJiZcblx0XHRcdG9UYWJsZS5nZXRNb2RlbChcInZpZXdEYXRhXCIpPy5nZXRQcm9wZXJ0eShcIi9pc0lubGluZUVkaXRFbmFibGVkXCIpXG5cdFx0KSB7XG5cdFx0XHR0YWJsZUNhbkJlSW5JbmxpbmVFZGl0ID0gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0KGJpbmRpbmdDb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKT8uZ2V0QmluZGluZygpLmdldFVwZGF0ZUdyb3VwSWQoKSA9PSBDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSURcblx0XHQpIHtcblx0XHRcdHRhYmxlQ2FuQmVJbklubGluZUVkaXQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh0YWJsZUNhbkJlSW5JbmxpbmVFZGl0KSB7XG5cdFx0XHRyb3dCaW5kaW5nSW5mby5wYXJhbWV0ZXJzID8/PSB7fTtcblx0XHRcdHJvd0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCR1cGRhdGVHcm91cElkID0gQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEO1xuXHRcdH1cblxuXHRcdHJldHVybiByb3dCaW5kaW5nSW5mbztcblx0fSxcblx0X2ludGVybmFsVXBkYXRlQmluZGluZ0luZm86IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBvQmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdE9iamVjdC5hc3NpZ24ob0JpbmRpbmdJbmZvLCB0aGlzLl9jb21wdXRlUm93QmluZGluZ0luZm9Gcm9tVGVtcGxhdGUob1RhYmxlKSk7XG5cdFx0LyoqXG5cdFx0ICogQmluZGluZyBpbmZvIG1pZ2h0IGJlIHN1c3BlbmRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlIGZpcnN0IGJpbmRSb3dzIGlzIGNhbGxlZDpcblx0XHQgKiBUbyBhdm9pZCBkdXBsaWNhdGUgcmVxdWVzdHMgYnV0IHN0aWxsIGhhdmUgYSBiaW5kaW5nIHRvIGNyZWF0ZSBuZXcgZW50cmllcy5cdFx0XHRcdCAqXG5cdFx0ICogQWZ0ZXIgdGhlIGluaXRpYWwgYmluZGluZyBzdGVwLCBmb2xsb3cgdXAgYmluZGluZ3Mgc2hvdWxkIG5vIGxvbmdlciBiZSBzdXNwZW5kZWQuXG5cdFx0ICovXG5cdFx0aWYgKG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5zdXNwZW5kZWQgPSBmYWxzZTtcblx0XHR9XG5cdFx0Ly8gVGhlIHByZXZpb3VzbHkgYWRkZWQgaGFuZGxlciBmb3IgdGhlIGV2ZW50ICdkYXRhUmVjZWl2ZWQnIGlzIG5vdCBhbnltb3JlIHRoZXJlXG5cdFx0Ly8gc2luY2UgdGhlIGJpbmRpbmdJbmZvIGlzIHJlY3JlYXRlZCBmcm9tIHNjcmF0Y2ggc28gd2UgbmVlZCB0byBzZXQgdGhlIGZsYWcgdG8gZmFsc2UgaW4gb3JkZXJcblx0XHQvLyB0byBhZ2FpbiBhZGQgdGhlIGhhbmRsZXIgb24gdGhpcyBldmVudCBpZiBuZWVkZWRcblx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiLCBmYWxzZSk7XG5cdFx0fVxuXG5cdFx0bGV0IG9GaWx0ZXI7XG5cdFx0Y29uc3Qgb0ZpbHRlckluZm8gPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8ob1RhYmxlKTtcblx0XHQvLyBQcmVwYXJlIGJpbmRpbmcgaW5mbyB3aXRoIGZpbHRlci9zZWFyY2ggcGFyYW1ldGVyc1xuXHRcdGlmIChvRmlsdGVySW5mby5maWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdG9GaWx0ZXIgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogb0ZpbHRlckluZm8uZmlsdGVycywgYW5kOiB0cnVlIH0pO1xuXHRcdH1cblx0XHRpZiAob0ZpbHRlckluZm8uYmluZGluZ1BhdGgpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5wYXRoID0gb0ZpbHRlckluZm8uYmluZGluZ1BhdGg7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0RhdGFTdGF0ZUluZGljYXRvciA9IG9UYWJsZS5nZXREYXRhU3RhdGVJbmRpY2F0b3IoKTtcblx0XHRpZiAob0RhdGFTdGF0ZUluZGljYXRvciAmJiBvRGF0YVN0YXRlSW5kaWNhdG9yLmlzRmlsdGVyaW5nKCkpIHtcblx0XHRcdC8vIEluY2x1ZGUgZmlsdGVycyBvbiBtZXNzYWdlU3RyaXBcblx0XHRcdGlmICgob0JpbmRpbmdJbmZvLmZpbHRlcnMgYXMgdW5rbm93biBhcyBGaWx0ZXJbXSkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRvRmlsdGVyID0gbmV3IEZpbHRlcih7IGZpbHRlcnM6IChvQmluZGluZ0luZm8uZmlsdGVycyBhcyB1bmtub3duIGFzIEZpbHRlcltdKS5jb25jYXQob0ZpbHRlckluZm8uZmlsdGVycyksIGFuZDogdHJ1ZSB9KTtcblx0XHRcdFx0dGhpcy51cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeShvQmluZGluZ0luZm8sIG9GaWx0ZXJJbmZvLCBvRmlsdGVyKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy51cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeShvQmluZGluZ0luZm8sIG9GaWx0ZXJJbmZvLCBvRmlsdGVyKTtcblx0XHR9XG5cblx0XHR0aGlzLmFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXMob1RhYmxlLCBvQmluZGluZ0luZm8pO1xuXHR9LFxuXG5cdHVwZGF0ZUJpbmRpbmdJbmZvV2l0aFNlYXJjaFF1ZXJ5OiBmdW5jdGlvbiAoYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbywgZmlsdGVySW5mbzogSW50ZXJuYWxCaW5kaW5nSW5mbywgZmlsdGVyPzogRmlsdGVyKSB7XG5cdFx0YmluZGluZ0luZm8uZmlsdGVycyA9IGZpbHRlcjtcblx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzID8/PSB7fTtcblx0XHRpZiAoZmlsdGVySW5mby5zZWFyY2gpIHtcblx0XHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCA9IENvbW1vblV0aWxzLm5vcm1hbGl6ZVNlYXJjaFRlcm0oZmlsdGVySW5mby5zZWFyY2gpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2ggPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogSWYgc3BlY2lmaWVkIGluIHRoZSBwYXlsb2FkLCBhZGRzIGEgZmlsdGVyIHRvIGRpc3BsYXkgb25seSBhY3RpdmUgZW50aXRpZXMuXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcGFyYW0gYmluZGluZ0luZm9cblx0ICovXG5cdGFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXM6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBwYXlsb2FkID0gdGFibGUuZ2V0UGF5bG9hZCgpIGFzIHsgZmlsdGVyT25BY3RpdmVFbnRpdGllcz86IGJvb2xlYW4gfTtcblxuXHRcdGlmIChwYXlsb2FkPy5maWx0ZXJPbkFjdGl2ZUVudGl0aWVzID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJPbkFjdGl2ZSA9IG5ldyBGaWx0ZXIoeyBwYXRoOiBcIklzQWN0aXZlRW50aXR5XCIsIG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMTogdHJ1ZSB9KTtcblx0XHRcdGlmIChiaW5kaW5nSW5mby5maWx0ZXJzKSB7XG5cdFx0XHRcdGJpbmRpbmdJbmZvLmZpbHRlcnMgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogW2ZpbHRlck9uQWN0aXZlLCBiaW5kaW5nSW5mby5maWx0ZXJzXSwgYW5kOiB0cnVlIH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YmluZGluZ0luZm8uZmlsdGVycyA9IGZpbHRlck9uQWN0aXZlO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIHRlbXBsYXRlIGZyb20gdGhlIGZyYWdtZW50IG9mIGEgc2xvdCBjb2x1bW4uXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjdXN0b20gdGFibGUgY29sdW1uXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSBjdXJyZW50IHZpZXdcblx0ICogQHBhcmFtIG1vZGlmaWVyIFRoZSBjb250cm9sIHRyZWUgbW9kaWZpZXJcblx0ICogQHBhcmFtIHRhYmxlSWQgVGhlIGlkIG9mIHRoZSB1bmRlcmx5aW5nIHRhYmxlXG5cdCAqIEByZXR1cm5zIFRoZSBsb2FkZWQgZnJhZ21lbnRcblx0ICovXG5cdF90ZW1wbGF0ZVNsb3RDb2x1bW5GcmFnbWVudDogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdGNvbHVtbkluZm86IEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4sXG5cdFx0dmlldzogVmlldyxcblx0XHRtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB8IEpzQ29udHJvbFRyZWVNb2RpZmllcixcblx0XHR0YWJsZUlkOiBzdHJpbmdcblx0KTogUHJvbWlzZTxudWxsIHwgQ29udHJvbCB8IENvbnRyb2xbXSB8IEVsZW1lbnQ+IHtcblx0XHRjb25zdCBzbG90Q29sdW1uc1hNTCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoXG5cdFx0XHRqc3gucmVuZGVyQXNYTUwoKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZ2V0U2xvdENvbHVtbih0YWJsZUlkLCBjb2x1bW5JbmZvLCBmYWxzZSkgYXMgdW5rbm93biBhcyBzdHJpbmc7XG5cdFx0XHR9KSxcblx0XHRcdFwidGV4dC94bWxcIlxuXHRcdCk7XG5cdFx0aWYgKCFzbG90Q29sdW1uc1hNTCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3Qgc2xvdFhNTCA9IHNsb3RDb2x1bW5zWE1MLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2xvdFwiKVswXTtcblxuXHRcdGlmIChjb2x1bW5JbmZvLnRlbXBsYXRlKSB7XG5cdFx0XHRpZiAoc2xvdFhNTCkge1xuXHRcdFx0XHRjb25zdCBvVGVtcGxhdGUgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGNvbHVtbkluZm8udGVtcGxhdGUgYXMgc3RyaW5nLCBcInRleHQveG1sXCIpO1xuXHRcdFx0XHRpZiAob1RlbXBsYXRlLmZpcnN0RWxlbWVudENoaWxkICYmIG9UZW1wbGF0ZS5maXJzdEVsZW1lbnRDaGlsZC5ub2RlTmFtZSAhPT0gXCJodG1sXCIpIHtcblx0XHRcdFx0XHRzbG90WE1MLnJlcGxhY2VXaXRoKG9UZW1wbGF0ZS5maXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2xvdFhNTC5yZW1vdmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuZXJyb3IoYFBsZWFzZSBwcm92aWRlIGNvbnRlbnQgaW5zaWRlIHRoaXMgQnVpbGRpbmcgQmxvY2sgQ29sdW1uOiAke2NvbHVtbkluZm8uaGVhZGVyfWApO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3QgcmVzdWx0WE1MID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRzbG90Q29sdW1uc1hNTC5maXJzdEVsZW1lbnRDaGlsZCxcblx0XHRcdHsgbW9kZWxzOiB7fSB9LFxuXHRcdFx0KHZpZXcuZ2V0Q29udHJvbGxlcigpLmdldE93bmVyQ29tcG9uZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8VGVtcGxhdGVDb21wb25lbnQ+KS5nZXRQcmVwcm9jZXNzb3JDb250ZXh0KClcblx0XHQpO1xuXHRcdGlmIChtb2RpZmllcj8udGFyZ2V0cyAhPT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHJldHVybiByZXN1bHRYTUwuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0fVxuXHRcdHJldHVybiBGcmFnbWVudC5sb2FkKHtcblx0XHRcdHR5cGU6IFwiWE1MXCIsXG5cdFx0XHRkZWZpbml0aW9uOiByZXN1bHRYTUwsXG5cdFx0XHRjb250cm9sbGVyOiB2aWV3LmdldENvbnRyb2xsZXIoKVxuXHRcdH0pIGFzIFByb21pc2U8Q29udHJvbCB8IENvbnRyb2xbXT47XG5cdH0sXG5cblx0X2dldEV4cG9ydEZvcm1hdDogZnVuY3Rpb24gKGRhdGFUeXBlPzogc3RyaW5nKSB7XG5cdFx0c3dpdGNoIChkYXRhVHlwZSkge1xuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlXCI6XG5cdFx0XHRcdHJldHVybiBFeGNlbEZvcm1hdC5nZXRFeGNlbERhdGVmcm9tSlNEYXRlKCk7XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6XG5cdFx0XHRcdHJldHVybiBFeGNlbEZvcm1hdC5nZXRFeGNlbERhdGVUaW1lZnJvbUpTRGF0ZVRpbWUoKTtcblx0XHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRcdHJldHVybiBFeGNlbEZvcm1hdC5nZXRFeGNlbFRpbWVmcm9tSlNUaW1lKCk7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSxcblxuXHRfZ2V0VkhSZWxldmFudEZpZWxkczogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzTWV0YWRhdGFQYXRoOiBzdHJpbmcsIHNCaW5kaW5nUGF0aD86IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0XHRsZXQgYUZpZWxkczogc3RyaW5nW10gPSBbXSxcblx0XHRcdG9EYXRhRmllbGREYXRhID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc01ldGFkYXRhUGF0aCk7XG5cblx0XHRpZiAob0RhdGFGaWVsZERhdGEuJGtpbmQgJiYgb0RhdGFGaWVsZERhdGEuJGtpbmQgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdFx0b0RhdGFGaWVsZERhdGEgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGREZWZhdWx0YCk7XG5cdFx0XHRzTWV0YWRhdGFQYXRoID0gYCR7c01ldGFkYXRhUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdGA7XG5cdFx0fVxuXHRcdHN3aXRjaCAob0RhdGFGaWVsZERhdGEuJFR5cGUpIHtcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCI6XG5cdFx0XHRcdGlmIChvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoYCkuaW5jbHVkZXMoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCIpKSB7XG5cdFx0XHRcdFx0b01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH0vVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhYCkuZm9yRWFjaCgob1ZhbHVlOiB1bmtub3duLCBpSW5kZXg6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRcdFx0YUZpZWxkcyA9IGFGaWVsZHMuY29uY2F0KFxuXHRcdFx0XHRcdFx0XHR0aGlzLl9nZXRWSFJlbGV2YW50RmllbGRzKG9NZXRhTW9kZWwsIGAke3NNZXRhZGF0YVBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YS8ke2lJbmRleH1gKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGhcIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoVXJsXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvblwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhBY3Rpb25cIjpcblx0XHRcdFx0YUZpZWxkcy5wdXNoKG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9L1ZhbHVlLyRQYXRoYCkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHQvLyBwcm9wZXJ0eVxuXHRcdFx0XHQvLyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB0byBtYWtlIHN1cmUgVkggcmVsZXZhbnQgZmllbGQgcGF0aCBkbyBub3QgY29udGFpbiB0aGUgYmluZGluZ3BhdGhcblx0XHRcdFx0aWYgKHNCaW5kaW5nUGF0aCAmJiBzTWV0YWRhdGFQYXRoLmluZGV4T2Yoc0JpbmRpbmdQYXRoKSA9PT0gMCkge1xuXHRcdFx0XHRcdGFGaWVsZHMucHVzaChzTWV0YWRhdGFQYXRoLnN1YnN0cmluZyhzQmluZGluZ1BhdGgubGVuZ3RoICsgMSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFGaWVsZHMucHVzaChDb21tb25IZWxwZXIuZ2V0TmF2aWdhdGlvblBhdGgoc01ldGFkYXRhUGF0aCwgdHJ1ZSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGFGaWVsZHM7XG5cdH0sXG5cdF9zZXREcmFmdEluZGljYXRvck9uVmlzaWJsZUNvbHVtbjogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIGFDb2x1bW5zOiBUYWJsZUNvbHVtbltdLCBvQ29sdW1uSW5mbz86IFRhYmxlQ29sdW1uKSB7XG5cdFx0Y29uc3Qgb0ludGVybmFsQmluZGluZ0NvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpZiAoIW9JbnRlcm5hbEJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHNJbnRlcm5hbFBhdGggPSBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IgPSBhQ29sdW1ucy5maWx0ZXIoKG9Db2x1bW46IFRhYmxlQ29sdW1uKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yKG9Db2x1bW4pO1xuXHRcdH0pO1xuXHRcdGNvbnN0IGFWaXNpYmxlQ29sdW1ucyA9IG9UYWJsZS5nZXRDb2x1bW5zKCk7XG5cdFx0bGV0IHNBZGRWaXNpYmxlQ29sdW1uTmFtZSwgc1Zpc2libGVDb2x1bW5OYW1lLCBiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0LCBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcjtcblx0XHRmb3IgKGNvbnN0IGkgaW4gYVZpc2libGVDb2x1bW5zKSB7XG5cdFx0XHRzVmlzaWJsZUNvbHVtbk5hbWUgPSBhVmlzaWJsZUNvbHVtbnNbaV0uZ2V0UHJvcGVydHlLZXkoKTtcblx0XHRcdGZvciAoY29uc3QgaiBpbiBhQ29sdW1uc1dpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvciA9IGFDb2x1bW5zV2l0aERyYWZ0SW5kaWNhdG9yW2pdLm5hbWU7XG5cdFx0XHRcdGlmIChzVmlzaWJsZUNvbHVtbk5hbWUgPT09IHNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0XHRcdFx0YkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9Db2x1bW5JbmZvICYmIG9Db2x1bW5JbmZvLm5hbWUgPT09IHNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0XHRcdFx0c0FkZFZpc2libGVDb2x1bW5OYW1lID0gb0NvbHVtbkluZm8ubmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQpIHtcblx0XHRcdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiwgc1Zpc2libGVDb2x1bW5OYW1lKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCAmJiBzQWRkVmlzaWJsZUNvbHVtbk5hbWUpIHtcblx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IsIHNBZGRWaXNpYmxlQ29sdW1uTmFtZSk7XG5cdFx0fVxuXHR9LFxuXHRyZW1vdmVJdGVtOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b1RhYmxlOiBVSTVFbGVtZW50IHwgRWxlbWVudCxcblx0XHRvUHJvcGVydHlJbmZvTmFtZTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdFx0bVByb3BlcnR5QmFnOiB7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyOyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9XG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGxldCBkb1JlbW92ZUl0ZW0gPSB0cnVlO1xuXHRcdGlmICghb1Byb3BlcnR5SW5mb05hbWUpIHtcblx0XHRcdC8vIDEuIEFwcGxpY2F0aW9uIHJlbW92ZWQgdGhlIHByb3BlcnR5IGZyb20gdGhlaXIgZGF0YSBtb2RlbFxuXHRcdFx0Ly8gMi4gYWRkSXRlbSBmYWlsZWQgYmVmb3JlIHJldmVydERhdGEgY3JlYXRlZFxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkb1JlbW92ZUl0ZW0pO1xuXHRcdH1cblx0XHRjb25zdCBvTW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXI7XG5cdFx0Y29uc3Qgc0RhdGFQcm9wZXJ0eSA9IGF3YWl0IG9Nb2RpZmllci5nZXRQcm9wZXJ0eTxzdHJpbmc+KG9Qcm9wZXJ0eUluZm9OYW1lLCBcImRhdGFQcm9wZXJ0eVwiKTtcblx0XHRpZiAoc0RhdGFQcm9wZXJ0eSAmJiBzRGF0YVByb3BlcnR5LmluY2x1ZGVzICYmIHNEYXRhUHJvcGVydHkuaW5jbHVkZXMoXCJJbmxpbmVYTUxcIikpIHtcblx0XHRcdG9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvVGFibGUsIFwiZGVwZW5kZW50c1wiLCBvUHJvcGVydHlJbmZvTmFtZSk7XG5cdFx0XHRkb1JlbW92ZUl0ZW0gPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKChvVGFibGUgYXMgVUk1RWxlbWVudCkuaXNBICYmIG9Nb2RpZmllci50YXJnZXRzID09PSBcImpzQ29udHJvbFRyZWVcIikge1xuXHRcdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMob01vZGlmaWVyLCBvVGFibGUsIHRoaXMuZ2V0Q29sdW1uc0ZvcihvVGFibGUgYXMgVGFibGUpKTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkb1JlbW92ZUl0ZW0pO1xuXHR9LFxuXHRfZ2V0TWV0YU1vZGVsOiBmdW5jdGlvbiAobVByb3BlcnR5QmFnOiB7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50IH0pIHtcblx0XHRyZXR1cm4gbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdH0sXG5cdF9zZXREcmFmdEluZGljYXRvclN0YXR1czogZnVuY3Rpb24gKFxuXHRcdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcixcblx0XHRvVGFibGU6IFVJNUVsZW1lbnQgfCBFbGVtZW50LFxuXHRcdGFDb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRcdG9Db2x1bW5JbmZvPzogVGFibGVDb2x1bW5cblx0KSB7XG5cdFx0aWYgKG9Nb2RpZmllci50YXJnZXRzID09PSBcImpzQ29udHJvbFRyZWVcIikge1xuXHRcdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JPblZpc2libGVDb2x1bW4ob1RhYmxlIGFzIFRhYmxlLCBhQ29sdW1ucywgb0NvbHVtbkluZm8pO1xuXHRcdH1cblx0fSxcblx0X2dldEdyb3VwSWQ6IGZ1bmN0aW9uIChzUmV0cmlldmVkR3JvdXBJZDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNSZXRyaWV2ZWRHcm91cElkIHx8IHVuZGVmaW5lZDtcblx0fSxcblx0X2luc2VydEFnZ3JlZ2F0aW9uOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b1ZhbHVlSGVscDogRWxlbWVudCB8IFVJNUVsZW1lbnQgfCBFbGVtZW50W10gfCBVSTVFbGVtZW50W10sXG5cdFx0b01vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyLFxuXHRcdG9UYWJsZTogRWxlbWVudCB8IFVJNUVsZW1lbnRcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKG9WYWx1ZUhlbHApIHtcblx0XHRcdHJldHVybiBvTW9kaWZpZXIuaW5zZXJ0QWdncmVnYXRpb24ob1RhYmxlLCBcImRlcGVuZGVudHNcIiwgb1ZhbHVlSGVscCwgMCk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fSxcblxuXHQvKipcblx0ICogSW52b2tlZCB3aGVuIGEgY29sdW1uIGlzIGFkZGVkIHVzaW5nIHRoZSB0YWJsZSBwZXJzb25hbGl6YXRpb24gZGlhbG9nLlxuXHQgKiBAcGFyYW0gb1RhYmxlIEluc3RhbmNlIG9mIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIHNQcm9wZXJ0eUluZm9OYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5IGZvciB3aGljaCB0aGUgY29sdW1uIGlzIGFkZGVkXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcgSW5zdGFuY2Ugb2YgcHJvcGVydHkgYmFnIGZyb20gdGhlIGZsZXhpYmlsaXR5IEFQSVxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLm1vZGlmaWVyIEluc3RhbmNlIG9mIHRoZSBjb250cm9sIHRyZWUgbW9kaWZpZXJcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgSW5zdGFuY2Ugb2YgdGhlIGFwcCBjb21wb25lbnRcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy52aWV3IEluc3RhbmNlIG9mIHRoZSB2aWV3XG5cdCAqIEByZXR1cm5zIE9uY2UgcmVzb2x2ZWQsIGEgdGFibGUgY29sdW1uIGRlZmluaXRpb24gaXMgcmV0dXJuZWRcblx0ICovXG5cdGFkZEl0ZW06IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR0YWJsZTogRWxlbWVudCB8IFVJNUVsZW1lbnQsXG5cdFx0cHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRcdG1Qcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IHZpZXc/OiBGRVZpZXcgfVxuXHQpIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5fZ2V0TWV0YU1vZGVsKG1Qcm9wZXJ0eUJhZyksXG5cdFx0XHRvTW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXIsXG5cdFx0XHRzVGFibGVJZCA9IG9Nb2RpZmllci5nZXRJZCh0YWJsZSksXG5cdFx0XHRhQ29sdW1ucyA9ICh0YWJsZSBhcyBVSTVFbGVtZW50KS5pc0EgPyB0aGlzLmdldENvbHVtbnNGb3IodGFibGUgYXMgVGFibGUpIDogbnVsbCxcblx0XHRcdHRhYmxlQVBJID0gKHRhYmxlIGFzIFRhYmxlKS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRpZiAoIWFDb2x1bW5zKSB7XG5cdFx0XHQvLyBXZSByZXR1cm4gbnVsbCBoZXJlIGJlY2F1c2UgZXZlcnl0aGluZyBzaG91bGQgYXBwbHkgYXQgcnVudGltZVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cblx0XHRjb25zdCBjb2x1bW5JbmZvID0gYUNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbikge1xuXHRcdFx0cmV0dXJuIG9Db2x1bW4ubmFtZSA9PT0gcHJvcGVydHlJbmZvTmFtZTtcblx0XHR9KTtcblx0XHRpZiAoIWNvbHVtbkluZm8pIHtcblx0XHRcdExvZy5lcnJvcihgJHtwcm9wZXJ0eUluZm9OYW1lfSBub3QgZm91bmQgd2hpbGUgYWRkaW5nIGNvbHVtbmApO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0aWYgKGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRMb2cud2FybmluZyhgQ29sdW1uIGZvciAke3Byb3BlcnR5SW5mb05hbWV9IG5vdCBhZGRlZCBiZWNhdXNlIGl0J3MgaGlkZGVuYCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gKHRhYmxlIGFzIFRhYmxlKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCwgdHJ1ZSk7XG5cdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMob01vZGlmaWVyLCB0YWJsZSwgYUNvbHVtbnMsIGNvbHVtbkluZm8pO1xuXHRcdGNvbnN0IHNQYXRoID0gYXdhaXQgRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJtZXRhUGF0aFwiLCBvTW9kaWZpZXIpO1xuXHRcdGNvbnN0IG9UYWJsZUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQYXRoISkhO1xuXHRcdC8vIElmIHZpZXcgaXMgbm90IHByb3ZpZGVkIHRyeSB0byBnZXQgaXQgYnkgYWNjZXNzaW5nIHRvIHRoZSBwYXJlbnRhbCBoaWVyYXJjaHlcblx0XHQvLyBJZiBpdCBkb2Vzbid0IHdvcmsgKHRhYmxlIGludG8gYW4gdW5hdHRhY2hlZCBPUCBzZWN0aW9uKSBnZXQgdGhlIHZpZXcgdmlhIHRoZSBBcHBDb21wb25lbnRcblx0XHRjb25zdCB2aWV3ID1cblx0XHRcdG1Qcm9wZXJ0eUJhZy52aWV3IHx8XG5cdFx0XHRDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlIGFzIFVJNUVsZW1lbnQpIHx8XG5cdFx0XHQobVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCA/IENvbW1vblV0aWxzLmdldEN1cnJlbnRQYWdlVmlldyhtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50KSA6IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAoY29sdW1uSW5mby50eXBlID09PSBcIkRlZmF1bHRcIikge1xuXHRcdFx0TG9nLmVycm9yKFwiQ3VzdG9tIGNvbHVtbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgYXJlIG5vdCBzdXBwb3J0ZWQgd2hlbiB1c2luZyBhIHRhYmxlIGJ1aWxkaW5nIGJsb2NrLlwiKTtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkN1c3RvbSBjb2x1bW5zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGFyZSBub3Qgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYSB0YWJsZSBidWlsZGluZyBibG9jay5cIik7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZSA9PT0gXCJTbG90XCIpIHtcblx0XHRcdHJldHVybiB0aGlzLl90ZW1wbGF0ZVNsb3RDb2x1bW5GcmFnbWVudChjb2x1bW5JbmZvIGFzIEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4sIHZpZXcsIG9Nb2RpZmllciwgc1RhYmxlSWQpO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IFwiQ29tcHV0ZWRcIikge1xuXHRcdFx0Y29uc3QgZW5hYmxlQW5hbHl0aWNzID0gKCh0YWJsZSBhcyBNRENUYWJsZSkuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUFuYWx5dGljcztcblx0XHRcdHJldHVybiBnZXRDb21wdXRlZENvbHVtbihzVGFibGVJZCwgY29sdW1uSW5mbyBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLCBvVGFibGVDb250ZXh0LCBlbmFibGVBbmFseXRpY3MpO1xuXHRcdH1cblxuXHRcdC8vIGZhbGwtYmFja1xuXHRcdGlmICghb01ldGFNb2RlbCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cblx0XHRsZXQgcHJvcGVydHlJbmZvcyA9IHRhYmxlQVBJLmdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MoKTtcblx0XHRpZiAoIXByb3BlcnR5SW5mb3MubGVuZ3RoKSB7XG5cdFx0XHQvLyBJZiB0aGUgcHJvcGVydHlJbmZvcyBhcmUgbm90IGZldGNoZWQgeWV0LCB3ZSBuZWVkIHRvIGZldGNoIHRoZW1cblx0XHRcdC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGUgdGFibGUgaXMgbm90IGNyZWF0ZWQgeWV0XG5cdFx0XHRhd2FpdCB0aGlzLmZldGNoUHJvcGVydGllcyh0YWJsZSBhcyBNRENUYWJsZSk7XG5cdFx0XHRwcm9wZXJ0eUluZm9zID0gdGFibGVBUEkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdH1cblx0XHRjb25zdCBwcm9wZXJ0eUluZm8gPSBwcm9wZXJ0eUluZm9zLmZpbmQoZnVuY3Rpb24gKHByb3BJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRyZXR1cm4gcHJvcEluZm8ubmFtZSA9PT0gcHJvcGVydHlJbmZvTmFtZTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IG9Qcm9wZXJ0eUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHByb3BlcnR5SW5mbyEuYW5ub3RhdGlvblBhdGgpITtcblxuXHRcdGNvbnN0IGZuVGVtcGxhdGVGcmFnbWVudCA9IGFzeW5jIChcblx0XHRcdG9JblByb3BlcnR5SW5mbzogdW5rbm93bixcblx0XHRcdG9WaWV3OiBGRVZpZXdcblx0XHQpOiBQcm9taXNlPFVJNUVsZW1lbnQgfCBFbGVtZW50IHwgVUk1RWxlbWVudFtdIHwgRWxlbWVudFtdPiA9PiB7XG5cdFx0XHRsZXQgYkRpc3BsYXlNb2RlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IHNUYWJsZVR5cGVDdXN0b21EYXRhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRsZXQgc0NyZWF0aW9uTW9kZUN1c3RvbURhdGE6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nIHwgYm9vbGVhbj4odGFibGUsIFwiZGlzcGxheU1vZGVQcm9wZXJ0eUJpbmRpbmdcIiwgb01vZGlmaWVyKSxcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJ0YWJsZVR5cGVcIiwgb01vZGlmaWVyKSxcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJjcmVhdGlvbk1vZGVcIiwgb01vZGlmaWVyKVxuXHRcdFx0XSkudGhlbihhc3luYyAoYUN1c3RvbURhdGE6IChzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKVtdKSA9PiB7XG5cdFx0XHRcdGJEaXNwbGF5TW9kZSA9IGFDdXN0b21EYXRhWzBdIGFzIGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdHNUYWJsZVR5cGVDdXN0b21EYXRhID0gYUN1c3RvbURhdGFbMV0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YSA9IGFDdXN0b21EYXRhWzJdIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gUmVhZCBPbmx5IGFuZCBDb2x1bW4gRWRpdCBNb2RlIGNhbiBib3RoIGhhdmUgdGhyZWUgc3RhdGVcblx0XHRcdFx0Ly8gVW5kZWZpbmVkIG1lYW5zIHRoYXQgdGhlIGZyYW1ld29yayBkZWNpZGVzIHdoYXQgdG8gZG9cblx0XHRcdFx0Ly8gVHJ1ZSAvIERpc3BsYXkgbWVhbnMgYWx3YXlzIHJlYWQgb25seVxuXHRcdFx0XHQvLyBGYWxzZSAvIEVkaXRhYmxlIG1lYW5zIGVkaXRhYmxlIGJ1dCB3aGlsZSBzdGlsbCByZXNwZWN0aW5nIHRoZSBsb3cgbGV2ZWwgcHJpbmNpcGxlIChpbW11dGFibGUgcHJvcGVydHkgd2lsbCBub3QgYmUgZWRpdGFibGUpXG5cdFx0XHRcdGlmIChiRGlzcGxheU1vZGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgYkRpc3BsYXlNb2RlICE9PSBcImJvb2xlYW5cIikge1xuXHRcdFx0XHRcdGJEaXNwbGF5TW9kZSA9IGJEaXNwbGF5TW9kZSA9PT0gXCJ0cnVlXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9ICh0YWJsZSBhcyBUYWJsZSkuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0XHRcdGNvbnN0IG9UaGlzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRcdFx0XHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuZW5hYmxlQXV0b0NvbHVtbldpZHRoLFxuXHRcdFx0XHRcdFx0cmVhZE9ubHk6IGJEaXNwbGF5TW9kZSxcblx0XHRcdFx0XHRcdHRhYmxlVHlwZTogc1RhYmxlVHlwZUN1c3RvbURhdGEsXG5cdFx0XHRcdFx0XHRpZDogc1RhYmxlSWQsXG5cdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBwcm9wZXJ0eUluZm9OYW1lLFxuXHRcdFx0XHRcdFx0Y29sdW1uSW5mbzogY29sdW1uSW5mbyxcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGghKSxcblx0XHRcdFx0XHRcdGNyZWF0aW9uTW9kZTogeyBuYW1lOiBzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YSB9LFxuXHRcdFx0XHRcdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXJcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBvVGFibGVDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBvVGFibGVDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRkYXRhRmllbGQ6IG9Qcm9wZXJ0eUNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHRoaXM6IG9UaGlzLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9jb2x1bW5JbmZvXCIpXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdHRoaXM6IG9UaGlzLFxuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW46IG9UaGlzXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCB0YWJsZUNvbGxlY3Rpb24gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5Pihcblx0XHRcdFx0XHRvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb24pIVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBoYW5kbGVyUHJvdmlkZXIgPSBuZXcgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcihcblx0XHRcdFx0XHR0YWJsZUFQSSxcblx0XHRcdFx0XHR7IGNvbGxlY3Rpb25FbnRpdHk6IHRhYmxlQ29sbGVjdGlvbi50YXJnZXRPYmplY3QhLCBtZXRhTW9kZWw6IG9NZXRhTW9kZWwgfSxcblx0XHRcdFx0XHR0YWJsZUFQSVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBjb21wdXRlZENvbHVtblhNTCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoXG5cdFx0XHRcdFx0anN4LnJlbmRlckFzWE1MKCgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiAoZ2V0Q29sdW1uVGVtcGxhdGUoXG5cdFx0XHRcdFx0XHRcdHNUYWJsZUlkLFxuXHRcdFx0XHRcdFx0XHR0YWJsZUFQSSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uSW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0XHRcdFx0XHRcdG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGghKSEsXG5cdFx0XHRcdFx0XHRcdGhhbmRsZXJQcm92aWRlclxuXHRcdFx0XHRcdFx0KSA/PyBcIlwiKSBhcyB1bmtub3duIGFzIHN0cmluZztcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcInRleHQveG1sXCJcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIERlbGVnYXRlVXRpbC50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChcblx0XHRcdFx0XHRjb21wdXRlZENvbHVtblhNTC5maXJzdEVsZW1lbnRDaGlsZCxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MsXG5cdFx0XHRcdFx0eyB2aWV3OiBvVmlldyB9LFxuXHRcdFx0XHRcdG9Nb2RpZmllclxuXHRcdFx0XHQpLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdG9UaGlzLmRlc3Ryb3koKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIGZuVGVtcGxhdGVGcmFnbWVudChwcm9wZXJ0eUluZm8sIHZpZXcpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBQcm92aWRlIHRoZSBUYWJsZSdzIGZpbHRlciBkZWxlZ2F0ZSB0byBwcm92aWRlIGJhc2ljIGZpbHRlciBmdW5jdGlvbmFsaXR5IHN1Y2ggYXMgYWRkaW5nIEZpbHRlckZpZWxkcy5cblx0ICogQHJldHVybnMgT2JqZWN0IGZvciB0aGUgVGFibGVzIGZpbHRlciBwZXJzb25hbGl6YXRpb24uXG5cdCAqL1xuXHRnZXRGaWx0ZXJEZWxlZ2F0ZTogZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e1xuXHRcdFx0XHRhcGlWZXJzaW9uOiAyXG5cdFx0XHR9LFxuXHRcdFx0RmlsdGVyQmFyRGVsZWdhdGUsXG5cdFx0XHR7XG5cdFx0XHRcdGFkZEl0ZW06IGFzeW5jIGZ1bmN0aW9uIChvUGFyZW50Q29udHJvbDogQ29udHJvbCwgc1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZykge1xuXHRcdFx0XHRcdGlmIChzUHJvcGVydHlJbmZvTmFtZS5pbmRleE9mKFwiUHJvcGVydHk6OlwiKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0Ly8gQ29ycmVjdCB0aGUgbmFtZSBvZiBjb21wbGV4IHByb3BlcnR5IGluZm8gcmVmZXJlbmNlcy5cblx0XHRcdFx0XHRcdHNQcm9wZXJ0eUluZm9OYW1lID0gc1Byb3BlcnR5SW5mb05hbWUucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBGaWx0ZXJCYXJEZWxlZ2F0ZS5hZGRJdGVtKG9QYXJlbnRDb250cm9sIGFzIEZpbHRlckJhciwgc1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgVHlwZU1hcCBhdHRhY2hlZCB0byB0aGlzIGRlbGVnYXRlLlxuXHQgKiBAcmV0dXJucyBBbnkgaW5zdGFuY2Ugb2YgVHlwZU1hcFxuXHQgKi9cblx0Z2V0VHlwZU1hcDogZnVuY3Rpb24gKC8qb1BheWxvYWQ6IG9iamVjdCovKSB7XG5cdFx0cmV0dXJuIFR5cGVNYXA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZvcm1hdCB0aGUgdGl0bGUgb2YgdGhlIGdyb3VwIGhlYWRlciAuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0YWJsZSBjb250cm9sXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICogQHBhcmFtIHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIEZvcm1hdHRlZCB0aXRsZSBvZiB0aGUgZ3JvdXAgaGVhZGVyLlxuXHQgKi9cblx0Zm9ybWF0R3JvdXBIZWFkZXIodGFibGU6IE1EQ1RhYmxlLCBjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgcHJvcGVydHk6IHN0cmluZykge1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb3MgPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MoKTtcblx0XHRjb25zdCBwcm9wZXJ0eUluZm8gPSBwcm9wZXJ0eUluZm9zPy5maW5kKChvYmopID0+IHtcblx0XHRcdHJldHVybiBvYmoubmFtZSA9PT0gcHJvcGVydHk7XG5cdFx0fSk7XG5cdFx0LypGb3IgYSBEYXRlLCBEYXRlVGltZSwgQm9vbGVhbiBvciBEZWNpbWFsIHByb3BlcnR5LCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgaW4gZXh0ZXJuYWwgZm9ybWF0IHVzaW5nIGEgVUk1IHR5cGUgZm9yIHRoZVxuXHQgICAgICAgIGdpdmVuIHByb3BlcnR5IHBhdGggdGhhdCBmb3JtYXRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5J3MgRURNIHR5cGUgYW5kIGNvbnN0cmFpbnRzKi9cblx0XHRjb25zdCBkYXRhQmFzZVR5cGUgPSBUeXBlTWFwLmdldFR5cGVDb25maWcocHJvcGVydHlJbmZvPy5kYXRhVHlwZSkuYmFzZVR5cGU7XG5cdFx0Y29uc3QgZXh0ZXJuYWxGb3JtYXQgPVxuXHRcdFx0ZGF0YUJhc2VUeXBlID09PSBcIkRhdGVUaW1lXCIgfHwgZGF0YUJhc2VUeXBlID09PSBcIkRhdGVcIiB8fCBkYXRhQmFzZVR5cGUgPT09IFwiQm9vbGVhblwiIHx8IGRhdGFCYXNlVHlwZSA9PT0gXCJOdW1lcmljXCI7XG5cdFx0bGV0IHZhbHVlO1xuXHRcdGlmICghY29udGV4dCkge1xuXHRcdFx0dmFsdWUgPSBnZXRSZXNvdXJjZU1vZGVsKENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVfVkFMVUVcIik7XG5cdFx0XHRyZXR1cm4gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fVEFCTEVfR1JPVVBfSEVBREVSX1RJVExFXCIsIFtwcm9wZXJ0eUluZm8/LmxhYmVsLCB2YWx1ZV0pO1xuXHRcdH1cblx0XHRpZiAocHJvcGVydHlJbmZvPy5tb2RlKSB7XG5cdFx0XHRzd2l0Y2ggKHByb3BlcnR5SW5mby5tb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHZhbHVlID0gcHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBWYWx1ZUZvcm1hdHRlci5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBWYWx1ZUZvcm1hdHRlci5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YWx1ZSA9IHByb3BlcnR5SW5mbz8ucGF0aCA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnBhdGgsIGV4dGVybmFsRm9ybWF0KSA6IG51bGw7XG5cdFx0fVxuXHRcdGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0dmFsdWUgPSBnZXRSZXNvdXJjZU1vZGVsKENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVfVkFMVUVcIik7XG5cdFx0fVxuXHRcdHJldHVybiBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVcIiwgW3Byb3BlcnR5SW5mbz8ubGFiZWwsIHZhbHVlXSk7XG5cdH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztFQWlGQSxNQUFNQSw4QkFBOEIsR0FB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
1379
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IiLCJTRUFSQ0hfSEFTX0JFRU5fRklSRUQiLCJDT0xVTU5fSEFTX0JFRU5fQURERUQiLCJQUkVWSU9VU19TT1JURVJTIiwiT2JqZWN0IiwiYXNzaWduIiwiVGFibGVEZWxlZ2F0ZUJhc2UiLCJhcGlWZXJzaW9uIiwiX2NvbXB1dGVWaXN1YWxTZXR0aW5nc0ZvckZpZWxkR3JvdXAiLCJ0YWJsZSIsInByb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mb3MiLCJrZXkiLCJpbmRleE9mIiwiY29sdW1uIiwiZ2V0Q29sdW1ucyIsImZpbmQiLCJjb2wiLCJnZXRQcm9wZXJ0eUtleSIsInNob3dEYXRhRmllbGRzTGFiZWwiLCJkYXRhIiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0Q29udGV4dCIsImFubm90YXRpb25QYXRoIiwiY29udmVydGVkTWV0YURhdGEiLCJjb252ZXJ0ZWRUeXBlcyIsIm9EYXRhRmllbGQiLCJ0YXJnZXRPYmplY3QiLCJvRmllbGRHcm91cCIsIlRhcmdldCIsIiR0YXJnZXQiLCJhRmllbGRXaWR0aCIsIkRhdGEiLCJmb3JFYWNoIiwib0RhdGEiLCJvRGF0YUZpZWxkV2lkdGgiLCIkVHlwZSIsIlRhYmxlU2l6ZUhlbHBlciIsImdldFdpZHRoRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImdldFdpZHRoRm9yRGF0YUZpZWxkIiwibGFiZWxXaWR0aCIsInByb3BlcnR5V2lkdGgiLCJTaXplSGVscGVyIiwiZ2V0QnV0dG9uV2lkdGgiLCJMYWJlbCIsInRvU3RyaW5nIiwicHVzaCIsIm5XaWRlc3QiLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsIk1hdGgiLCJtYXgiLCJ2aXN1YWxTZXR0aW5ncyIsImRlZXBFeHRlbmQiLCJ3aWR0aENhbGN1bGF0aW9uIiwidmVydGljYWxBcnJhbmdlbWVudCIsIm1pbldpZHRoIiwiY2VpbCIsIl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAiLCJwcm9wZXJ0eSIsInRhYmxlQVBJIiwiZ2V0UGFyZW50IiwibWV0YU1vZGVsIiwiZGF0YUZpZWxkIiwiZ2V0T2JqZWN0IiwiZ2FwIiwiZ2V0UHJvcGVydHkiLCJfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCIsInVuaXQiLCJ1bml0VGV4dCIsInRpbWV6b25lVGV4dCIsIm9UYWJsZUFQSSIsInRleHQiLCJnZXRSZWFkT25seSIsIl9jb21wdXRlTGFiZWwiLCJsYWJlbE1hcCIsImxhYmVsIiwicHJvcGVydGllc1dpdGhTYW1lTGFiZWwiLCJpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSIsInNvbWUiLCJwcm9wIiwicGF0aCIsIm1vZGUiLCJsZW5ndGgiLCJpbmNsdWRlcyIsImFkZGl0aW9uYWxMYWJlbHMiLCJmaWx0ZXJhYmxlIiwiam9pbiIsIl91cGRhdGVQcm9wZXJ0eUluZm8iLCJwcm9wZXJ0aWVzIiwicDEzbk1vZGUiLCJnZXRQMTNuTW9kZSIsInNvcnRhYmxlIiwiZ3JvdXBhYmxlIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiZ3JvdXBMYWJlbCIsImdyb3VwIiwiZGF0YVR5cGUiLCJ2aXNpYmxlIiwiZ2V0Q29sdW1uc0ZvciIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbHVtbnMiLCJmZXRjaEV4cG9ydENhcGFiaWxpdGllcyIsIm9UYWJsZSIsIm9DYXBhYmlsaXRpZXMiLCJYTFNYIiwib01vZGVsIiwiRGVsZWdhdGVVdGlsIiwiZmV0Y2hNb2RlbCIsInRoZW4iLCJtb2RlbCIsImFTdXBwb3J0ZWRGb3JtYXRzIiwiYUxvd2VyRm9ybWF0cyIsIm1hcCIsImVsZW1lbnQiLCJ0b0xvd2VyQ2FzZSIsIm9Bbm5vdGF0aW9uIiwiY2F0Y2giLCJlcnIiLCJMb2ciLCJlcnJvciIsIl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJjb2x1bW5JbmZvIiwiY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzRmlsdGVyYWJsZSIsImlzUGF0aEZpbHRlcmFibGUiLCJyZWxhdGl2ZVBhdGgiLCJpc1BhcnRPZkxpbmVJdGVtIiwiaXNQYXJ0T2ZDdXN0b21Db2x1bW4iLCJpc0NvbnN0YW50IiwiX2ZldGNoUHJvcGVydHlJbmZvIiwiYXBwQ29tcG9uZW50Iiwic0Fic29sdXRlTmF2aWdhdGlvblBhdGgiLCJvTmF2aWdhdGlvbkNvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImlzQ29tcGxleFR5cGUiLCJ0eXBlQ29uZmlnIiwiY2xhc3NOYW1lIiwiYkZpbHRlcmFibGUiLCJDb21tb25IZWxwZXIiLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsImJJc0FuYWx5dGljYWxUYWJsZSIsImdldEN1c3RvbURhdGEiLCJnZXRMb2NhbGl6ZWRUZXh0IiwidG9vbHRpcCIsIl9nZXRUeXBlQ29uZmlnIiwibmFtZSIsImZvcm1hdE9wdGlvbnMiLCJiYXNlVHlwZSIsInN0eWxlIiwiY29uc3RyYWludHMiLCJhdmFpbGFiaWxpdHkiLCJleHBvcnRTZXR0aW5ncyIsIl9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5ncyIsInR5cGUiLCJDb2x1bW5UeXBlIiwiQW5ub3RhdGlvbiIsInRlbXBsYXRlIiwiY2xpcGJvYXJkU2V0dGluZ3MiLCJrZXlzIiwiZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJfdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMiLCJpc0tleSIsImlzR3JvdXBhYmxlIiwidGV4dEFycmFuZ2VtZW50IiwiX3NldFRleHRBcnJhbmdlbWVudEluZm8iLCJleHRlbnNpb24iLCJ0ZWNobmljYWxseUdyb3VwYWJsZSIsImNhc2VTZW5zaXRpdmUiLCJhZGRpdGlvbmFsTGFiZWwiLCJleHBvcnRGb3JtYXQiLCJfZ2V0RXhwb3J0Rm9ybWF0IiwiZm9ybWF0IiwiVHlwZU1hcCIsImdldFR5cGVDb25maWciLCJpc1R5cGVGaWx0ZXJhYmxlIiwiZGVzY3JpcHRpb25Db2x1bW4iLCJvQ29sIiwidGV4dFByb3BlcnR5IiwidmFsdWVQcm9wZXJ0eSIsImRlc2NyaXB0aW9uUHJvcGVydHkiLCJhZ2dyZWdhdGFibGUiLCJfZmV0Y2hDb21wdXRlZFByb3BlcnR5SW5mbyIsIl9mZXRjaEN1c3RvbVByb3BlcnR5SW5mbyIsImhlYWRlciIsInN0YXJ0c1dpdGgiLCJNb2RlbEhlbHBlciIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJfYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yIiwib0NvbHVtbkluZm8iLCJoYXNEcmFmdEluZGljYXRvciIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsIl91cGRhdGVEcmFmdEluZGljYXRvck1vZGVsIiwiX29UYWJsZSIsIl9vQ29sdW1uSW5mbyIsImFWaXNpYmxlQ29sdW1ucyIsIm9JbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzSW50ZXJuYWxQYXRoIiwiZ2V0UGF0aCIsImluZGV4Iiwic2V0UHJvcGVydHkiLCJfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5IiwiZW50aXR5VHlwZVBhdGgiLCJiaW5kaW5nUGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJmZXRjaGVkUHJvcGVydGllcyIsIm5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiQ29tbW9uVXRpbHMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsIlByb21pc2UiLCJyZXNvbHZlIiwibWF4Q29uZGl0aW9ucyIsImlzTXVsdGlWYWx1ZSIsIkVycm9yIiwic2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcyIsImdldFByb3BlcnR5SW5mb3MiLCJfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJnZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwic3ViRmV0Y2hlZFByb3BlcnRpZXMiLCJzZXRDYWNoZWRQcm9wZXJ0eUluZm9zIiwic2V0Tm9EYXRhSW5mb3JtYXRpb24iLCJpbGx1c3RyYXRlZE1lc3NhZ2VJbmZvcm1hdGlvbiIsIm5vRGF0YUFnZ3JlZ2F0aW9uIiwiZ2V0Tm9EYXRhIiwiaXNBIiwiY3VycmVudElsbHVzdHJhdGVkTWVzc2FnZSIsInNldFRpdGxlIiwidGl0bGUiLCJzZXREZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwic2V0SWxsdXN0cmF0aW9uVHlwZSIsImlsbHVzdHJhdGlvblR5cGUiLCJzZXRJbGx1c3RyYXRpb25TaXplIiwiaWxsdXN0cmF0aW9uU2l6ZSIsImlsbHVzdHJhdGVkTWVzc2FnZSIsIklsbHVzdHJhdGVkTWVzc2FnZSIsInNldE5vRGF0YSIsInNldFRhYmxlTm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlIiwiYmluZGluZ0luZm8iLCJ0YWJsZUZpbHRlckluZm8iLCJUYWJsZVV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwic3VmZml4UmVzb3VyY2VLZXkiLCJzdWJzdHJpbmciLCJpbGx1c3RyYXRlZEluZm9ybWF0aW9uIiwiZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMiLCJnZXRRdWlja0ZpbHRlciIsImdldFRleHQiLCJJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIiwiTm9TZWFyY2hSZXN1bHRzIiwiZmlsdGVyQXNzb2NpYXRpb24iLCJnZXRGaWx0ZXIiLCJoYXNGaWx0ZXJPclNlYXJjaCIsInNlYXJjaCIsImZpbHRlcnMiLCJ0ZXN0IiwiTm9EYXRhIiwiZ2V0VGFyZ2V0VmlldyIsImdldFZpZXdEYXRhIiwibGl2ZU1vZGUiLCJnZXROb0RhdGFNZXNzYWdlTW9kZSIsImN1cnJlbnROb0RhdGEiLCJoYW5kbGVUYWJsZURhdGFSZWNlaXZlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9CaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsImJEYXRhUmVjZWl2ZWRBdHRhY2hlZCIsImF0dGFjaERhdGFSZWNlaXZlZCIsInNldFRpbWVvdXQiLCJhU2VsZWN0ZWRDb250ZXh0cyIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiSlNPTiIsInBhcnNlIiwidGFibGVEZWZpbml0aW9uIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJEZWxldGVIZWxwZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsInNldFVwRW1wdHlSb3dzIiwiX3VwZGF0ZUF2YWlsYWJsZUNhcmRzIiwic2V0T3B0aW1pc3RpY0JhdGNoUHJvbWlzZUZvck1vZGVsIiwiY29udHJvbGxlciIsImdldEFwcENvbXBvbmVudCIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJQcm9taXNlIiwiUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsIiwiZW5hYmxlT3B0aW1pc3RpY0JhdGNoTW9kZSIsImZpbHRlcnNQcm9wZXJ0aWVzQXNQb3RlbnRpYWxseVNlbnNpdGl2ZURhdGFPckRhdGVUeXBlIiwiaXNGaWx0ZXJFbGlnaWJsZUZvck9wdGltaXN0aWNCYXRjaCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UiLCJkYXRhTW9kZWwiLCJpc09wdGltaXN0aWNCYXRjaEhhc1RvQmVFbmFibGVkIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkIiwiZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlciIsImlzT3B0aW1pc3RpY0JhdGNoRGlzYWJsZWQiLCJvcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZUtlZXBlciIsInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIiLCJwcm9taXNlIiwicmViaW5kIiwib0JpbmRpbmdJbmZvIiwiYklzU3VzcGVuZGVkIiwiVGFibGVSdW50aW1lIiwiY2xlYXJTZWxlY3Rpb24iLCJhcHBseSIsIm9uVGFibGVCb3VuZCIsIndoZW5Cb3VuZCIsIm9FcnJvciIsImZldGNoUHJvcGVydGllcyIsInByZUluaXQiLCJmYXN0Q3JlYXRpb25Sb3ciLCJnZXRDcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwidXBkYXRlQmluZGluZ0luZm8iLCJpbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIiwiQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIiwiX2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTSIsIl9pbnRlcm5hbFVwZGF0ZUJpbmRpbmdJbmZvIiwiX2hhbmRsZVJlY29tbWVuZGF0aW9uT3V0cHV0RmllbGRzIiwiX2hhbmRsZUZpbHRlcnNGb3JFeHRlcm5hbElEIiwiZmlyZUV2ZW50IiwiY29sbGVjdGlvbkJpbmRpbmdJbmZvIiwiYXR0YWNoZWRFdmVudHMiLCJnZXRBdHRhY2hlZEV2ZW50cyIsImNvbnRleHQiLCJUYWJsZUhlbHBlciIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsInNldEF0dGFjaEV2ZW50cyIsImUiLCJzb3J0ZXJzIiwic29ydGVyIiwibmV3U29ydGVyc1RvQmVBcHBsaWVkIiwidGFibGVQcm9wZXJ0aWVzIiwidGFibGVQcm9wZXJ0eSIsInVuaXRQcm9wZXJ0eSIsInVuaXRTb3J0ZXJBdmFpbGFibGUiLCJzb3J0IiwiU29ydGVyIiwiZ2V0RmlsdGVycyIsInVwZGF0ZUZpbHRlcnNGb3JFeHRlcm5hbElEIiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJyZWNvbW1lbmRhdGlvbnMiLCJpc1JlY29tbWVuZGF0aW9uRW5hYmxlZCIsInRhYmxlRGVmIiwicmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0UmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHMiLCJhbm5vdGF0aW9uIiwiZW50aXR5VHlwZU5hbWUiLCJwYXJhbWV0ZXJzIiwiJHNlbGVjdCIsImdldFZpZXciLCJjb252ZXJ0ZXJUeXBlIiwiY2FyZHMiLCJjb2xsZWN0QXZhaWxhYmxlQ2FyZHMiLCJjb2xsYWJvcmF0aW9uTWFuYWdlciIsIkNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiY2FyZE9iamVjdCIsInVwZGF0ZUNhcmRzIiwicGFyZW50QXBwSWQiLCJnZXRJZCIsImdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNoYXJlQXZhaWxhYmxlQ2FyZHMiLCJnZXRJblJlc3VsdFByb3BlcnR5S2V5cyIsImNvbnRyb2wiLCJhbmFseXRpY2FsQ29uZmlndXJhdGlvbiIsImFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwiLCJhbGxLa2V5c1JlcXVlc3RlZCIsImNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZCIsIm92ZXJyaWRlUm93UHJlc3MiLCJyZXF1ZXN0QXRMZWFzdCIsImZpbHRlciIsImZpZWxkTmFtZSIsIm9yaWdpbiIsImdldENvbnRlbnQiLCJhbGxDb2x1bW5zIiwia2V5UHJvcGVydHlOYW1lcyIsImMiLCJkaXNwbGF5ZWRDb2x1bW5zIiwicmVmZXJlbmNlZFByb3BlcnR5UGF0aHMiLCJTZXQiLCJwcm9jZXNzQ29sdW1uIiwiYWRkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJhZGRpdGlvbmFsQ29sdW1uTmFtZSIsImFkZGl0aW9uYWxDb2x1bW4iLCJyZWxhdGVkQ29sdW1uTmFtZSIsInJlbGF0ZWRDb2x1bW4iLCJldmVyeSIsInByb3BOYW1lIiwiaGFzIiwiZ2V0U2VhcmNoUXVlcnkiLCJiaW5kaW5nIiwiYWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGlvbiIsImdldFF1ZXJ5T3B0aW9uc0Zyb21QYXJhbWV0ZXJzIiwiJHNlYXJjaCIsInVwZGF0ZUJpbmRpbmciLCIkJGdldEtlZXBBbGl2ZUNvbnRleHQiLCJjb2xsZWN0aW9uUGF0aCIsImludGVybmFsTW9kZWwiLCJrZXB0QWxpdmVMaXN0cyIsIm5lZWRNYW51YWxSZWZyZXNoIiwidmlldyIsIm1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5IiwicGVuZGluZ01hbnVhbFVwZGF0ZSIsIm5ld1NvcnRlcnMiLCJzdHJpbmdpZnkiLCJ2aWV3RGF0YSIsIm9sZEZpbHRlcnMiLCJwcmV2aW91c1NvcnRlcnMiLCJmaWx0ZXJOb3RDaGFuZ2VkIiwiZGVlcEVxdWFsIiwiTFJNdWx0aVZpZXdFbmFibGVkIiwidmlld3MiLCJlbmFibGVBbmFseXRpY3MiLCJzZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwic2V0R3JvdXBDb25kaXRpb25zIiwic2V0VGFibGVCaW5kaW5nSW5mbyIsInNldERvd25sb2FkVXJsIiwicmVxdWVzdFJlZnJlc2giLCJnZXRHcm91cElkIiwiZmluYWxseSIsInN0b3JlZEV2ZW50cyIsIl9yZWYiLCJldmVudElkIiwiY2FsbGJhY2siLCJsaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiX2NvbXB1dGVSb3dCaW5kaW5nSW5mb0Zyb21UZW1wbGF0ZSIsInJvd0JpbmRpbmdJbmZvIiwiZ2V0VGFibGVUZW1wbGF0ZUJpbmRpbmdJbmZvIiwiYmluZGluZ0NvbnRleHQiLCJ0YWJsZUNhbkJlSW5JbmxpbmVFZGl0IiwiZ2V0QmluZGluZyIsImdldFVwZGF0ZUdyb3VwSWQiLCJJTkxJTkVFRElUX1VQREFURUdST1VQSUQiLCIkJHVwZGF0ZUdyb3VwSWQiLCJzdXNwZW5kZWQiLCJvRmlsdGVyIiwib0ZpbHRlckluZm8iLCJGaWx0ZXIiLCJhbmQiLCJvRGF0YVN0YXRlSW5kaWNhdG9yIiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaXNGaWx0ZXJpbmciLCJ1cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeSIsImFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXMiLCJmaWx0ZXJJbmZvIiwibm9ybWFsaXplU2VhcmNoVGVybSIsInBheWxvYWQiLCJnZXRQYXlsb2FkIiwiZmlsdGVyT25BY3RpdmVFbnRpdGllcyIsImZpbHRlck9uQWN0aXZlIiwib3BlcmF0b3IiLCJ2YWx1ZTEiLCJfdGVtcGxhdGVTbG90Q29sdW1uRnJhZ21lbnQiLCJtb2RpZmllciIsInRhYmxlSWQiLCJzbG90Q29sdW1uc1hNTCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImpzeCIsInJlbmRlckFzWE1MIiwiZ2V0U2xvdENvbHVtbiIsInNsb3RYTUwiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIm9UZW1wbGF0ZSIsImZpcnN0RWxlbWVudENoaWxkIiwibm9kZU5hbWUiLCJyZXBsYWNlV2l0aCIsInJlbW92ZSIsInJlc3VsdFhNTCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJtb2RlbHMiLCJnZXRDb250cm9sbGVyIiwiZ2V0T3duZXJDb21wb25lbnQiLCJnZXRQcmVwcm9jZXNzb3JDb250ZXh0IiwidGFyZ2V0cyIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJFeGNlbEZvcm1hdCIsImdldEV4Y2VsRGF0ZWZyb21KU0RhdGUiLCJnZXRFeGNlbERhdGVUaW1lZnJvbUpTRGF0ZVRpbWUiLCJnZXRFeGNlbFRpbWVmcm9tSlNUaW1lIiwiX2dldFZIUmVsZXZhbnRGaWVsZHMiLCJzTWV0YWRhdGFQYXRoIiwic0JpbmRpbmdQYXRoIiwiYUZpZWxkcyIsIm9EYXRhRmllbGREYXRhIiwiJGtpbmQiLCJvVmFsdWUiLCJpSW5kZXgiLCJnZXROYXZpZ2F0aW9uUGF0aCIsIl9zZXREcmFmdEluZGljYXRvck9uVmlzaWJsZUNvbHVtbiIsImFDb2x1bW5zIiwiYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IiLCJvQ29sdW1uIiwic0FkZFZpc2libGVDb2x1bW5OYW1lIiwic1Zpc2libGVDb2x1bW5OYW1lIiwiYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCIsInNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yIiwiaSIsImoiLCJyZW1vdmVJdGVtIiwib1Byb3BlcnR5SW5mb05hbWUiLCJtUHJvcGVydHlCYWciLCJkb1JlbW92ZUl0ZW0iLCJvTW9kaWZpZXIiLCJzRGF0YVByb3BlcnR5IiwiaW5zZXJ0QWdncmVnYXRpb24iLCJfc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMiLCJfZ2V0TWV0YU1vZGVsIiwiX2dldEdyb3VwSWQiLCJzUmV0cmlldmVkR3JvdXBJZCIsIl9pbnNlcnRBZ2dyZWdhdGlvbiIsIm9WYWx1ZUhlbHAiLCJhZGRJdGVtIiwicHJvcGVydHlJbmZvTmFtZSIsInNUYWJsZUlkIiwid2FybmluZyIsInNQYXRoIiwiZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllciIsIm9UYWJsZUNvbnRleHQiLCJnZXRDdXJyZW50UGFnZVZpZXciLCJnZXRDb21wdXRlZENvbHVtbiIsImdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MiLCJwcm9wSW5mbyIsIm9Qcm9wZXJ0eUNvbnRleHQiLCJmblRlbXBsYXRlRnJhZ21lbnQiLCJvSW5Qcm9wZXJ0eUluZm8iLCJvVmlldyIsImJEaXNwbGF5TW9kZSIsInNUYWJsZVR5cGVDdXN0b21EYXRhIiwic0NyZWF0aW9uTW9kZUN1c3RvbURhdGEiLCJhbGwiLCJhQ3VzdG9tRGF0YSIsIm9UaGlzIiwiSlNPTk1vZGVsIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwicmVhZE9ubHkiLCJ0YWJsZVR5cGUiLCJpZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJjb2xsZWN0aW9uIiwiY3JlYXRpb25Nb2RlIiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJ0aGlzIiwidGFibGVDb2xsZWN0aW9uIiwiaGFuZGxlclByb3ZpZGVyIiwiVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciIsImNvbGxlY3Rpb25FbnRpdHkiLCJjb21wdXRlZENvbHVtblhNTCIsImdldENvbHVtblRlbXBsYXRlIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJkZXN0cm95IiwiZ2V0RmlsdGVyRGVsZWdhdGUiLCJGaWx0ZXJCYXJEZWxlZ2F0ZSIsIm9QYXJlbnRDb250cm9sIiwic1Byb3BlcnR5SW5mb05hbWUiLCJyZXBsYWNlIiwiZ2V0VHlwZU1hcCIsImZvcm1hdEdyb3VwSGVhZGVyIiwib2JqIiwiZGF0YUJhc2VUeXBlIiwiZXh0ZXJuYWxGb3JtYXQiLCJWYWx1ZUZvcm1hdHRlciIsImZvcm1hdFdpdGhCcmFja2V0cyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVEZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIERhdGFGaWVsZEZvckFubm90YXRpb24sIEZpZWxkR3JvdXBUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFcXVhbFwiO1xuaW1wb3J0IGRlZXBFeHRlbmQgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEV4dGVuZFwiO1xuaW1wb3J0IHsgaXNDb25zdGFudCB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlVHJlZU1vZGlmaWVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgV3JhcHBlZENhcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRmFjdG9yeVwiO1xuXG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbk1hbmFnZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NhcmRzL0NvbGxhYm9yYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0Q29sdW1uRXhwb3J0U2V0dGluZ3MsXG5cdENvbXB1dGVkVGFibGVDb2x1bW4sXG5cdEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sXG5cdFRhYmxlQ29sdW1uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgVmFsdWVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCBEZWxldGVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRGVsZXRlSGVscGVyXCI7XG5pbXBvcnQgRXhjZWxGb3JtYXQgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRXhjZWxGb3JtYXRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUHJvbWlzZUtlZXBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Qcm9taXNlS2VlcGVyXCI7XG5pbXBvcnQgeyBnZXRMb2NhbGl6ZWRUZXh0LCBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IFNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2l6ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaXNQYXRoRmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGlzVHlwZUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9FRE1cIjtcbmltcG9ydCB0eXBlIHsgQ29sbGVjdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29sbGVjdGlvbkJpbmRpbmdJbmZvXCI7XG5pbXBvcnQgQ29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbGxlY3Rpb25CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgRmlsdGVyQmFyRGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckRlbGVnYXRlXCI7XG5pbXBvcnQgeyBnZXRDb2x1bW5UZW1wbGF0ZSwgZ2V0Q29tcHV0ZWRDb2x1bW4sIGdldFNsb3RDb2x1bW4gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9NZGNUYWJsZVRlbXBsYXRlXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVJ1bnRpbWVcIjtcbmltcG9ydCBUYWJsZVNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVTaXplSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCB0eXBlIExpc3RSZXBvcnRDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MgfSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBZ2dyZWdhdGlvbkJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgeyBKc0NvbnRyb2xUcmVlTW9kaWZpZXIgfSBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNRENUYWJsZSwgTURDVGFibGVQcm9wZXJ0eUluZm8gYXMgUHJvcGVydHlJbmZvLCBkZWZhdWx0IGFzIFRhYmxlLCBWaXN1YWxTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBUeXBlQ29uZmlnIGZyb20gXCJzYXAvdWkvbWRjL1R5cGVDb25maWdcIjtcbmltcG9ydCB0eXBlIHsgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IFRhYmxlRGVsZWdhdGVCYXNlIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1RhYmxlRGVsZWdhdGVcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSBNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9NZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0LCBkZWZhdWx0IGFzIHY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciBmcm9tIFwiLi4vVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclwiO1xuXG5jb25zdCBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IgPSBcIi9zZW1hbnRpY0tleUhhc0RyYWZ0SW5kaWNhdG9yXCI7XG5jb25zdCBTRUFSQ0hfSEFTX0JFRU5fRklSRUQgPSBcInNlYXJjaEZpcmVkXCI7XG5jb25zdCBDT0xVTU5fSEFTX0JFRU5fQURERUQgPSBcImNvbHVtbkFkZGVkXCI7XG5jb25zdCBQUkVWSU9VU19TT1JURVJTID0gXCJwcmV2aW91c1NvcnRlcnNcIjtcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHNhcC51aS5tZGMuVGFibGUuXG4gKiA8aDM+PGI+Tm90ZTo8L2I+PC9oMz5cbiAqIFRoZSBjbGFzcyBpcyBleHBlcmltZW50YWwgYW5kIHRoZSBBUEkgYW5kIHRoZSBiZWhhdmlvciBhcmUgbm90IGZpbmFsaXplZC4gVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgZm9yIHByb2R1Y3RpdmUgdXNhZ2UuXG4gKiBAYXV0aG9yIFNBUCBTRVxuICogQHByaXZhdGVcbiAqIEBzaW5jZSAxLjY5LjBcbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLlRhYmxlRGVsZWdhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgT2JqZWN0LmFzc2lnbih7fSwgVGFibGVEZWxlZ2F0ZUJhc2UsIHtcblx0YXBpVmVyc2lvbjogMixcblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgd2lkdGggb2YgYSBGaWVsZEdyb3VwIGNvbHVtbi5cblx0ICogVGhlIHdpZHRoIG9mIHRoZSBGaWVsZEdyb3VwIGlzIHRoZSB3aWR0aCBvZiB0aGUgd2lkZXN0IHByb3BlcnR5IGNvbnRhaW5lZCBpbiB0aGUgRmllbGRHcm91cCAoaW5jbHVkaW5nIHRoZSBsYWJlbCBpZiBzaG93RGF0YUZpZWxkc0xhYmVsIGlzIHRydWUpXG5cdCAqIFRoZSByZXN1bHQgb2YgdGhpcyBjYWxjdWxhdGlvbiBpcyBzdG9yZWQgaW4gdGhlIHZpc3VhbFNldHRpbmdzLndpZHRoQ2FsY3VsYXRpb24ubWluV2lkdGggcHJvcGVydHksIHdoaWNoIGlzIHVzZWQgYnkgdGhlIE1EQ3RhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm8gQ3VycmVudCBwcm9wZXJ0eUluZm9cblx0ICogQHBhcmFtIHByb3BlcnR5SW5mb3MgQXJyYXkgb2YgcHJvcGVydGllc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZURlbGVnYXRlXG5cdCAqL1xuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yRmllbGRHcm91cDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRwcm9wZXJ0eUluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sXG5cdFx0cHJvcGVydHlJbmZvczogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdXG5cdCkge1xuXHRcdGlmIChwcm9wZXJ0eUluZm8ua2V5LmluZGV4T2YoXCJEYXRhRmllbGRGb3JBbm5vdGF0aW9uOjpGaWVsZEdyb3VwOjpcIikgPT09IDApIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IHRhYmxlLmdldENvbHVtbnMoKS5maW5kKChjb2wpID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbC5nZXRQcm9wZXJ0eUtleSgpID09PSBwcm9wZXJ0eUluZm8ua2V5O1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBzaG93RGF0YUZpZWxkc0xhYmVsID0gY29sdW1uID8gY29sdW1uLmRhdGEoXCJzaG93RGF0YUZpZWxkc0xhYmVsXCIpID09PSBcInRydWVcIiA6IGZhbHNlO1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9ICh0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3QgaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9NZXRhTW9kZWwuZ2V0Q29udGV4dChwcm9wZXJ0eUluZm8uYW5ub3RhdGlvblBhdGgpKTtcblx0XHRcdGNvbnN0IGNvbnZlcnRlZE1ldGFEYXRhID0gaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLmNvbnZlcnRlZFR5cGVzO1xuXHRcdFx0Y29uc3Qgb0RhdGFGaWVsZCA9IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cy50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjtcblx0XHRcdGNvbnN0IG9GaWVsZEdyb3VwID0gb0RhdGFGaWVsZC5UYXJnZXQuJHRhcmdldCBhcyBGaWVsZEdyb3VwVHlwZTtcblx0XHRcdGNvbnN0IGFGaWVsZFdpZHRoOiBudW1iZXJbXSA9IFtdO1xuXHRcdFx0b0ZpZWxkR3JvdXAuRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChvRGF0YTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHRcdFx0XHRsZXQgb0RhdGFGaWVsZFdpZHRoOiB7IGxhYmVsV2lkdGg6IG51bWJlcjsgcHJvcGVydHlXaWR0aDogbnVtYmVyIH07XG5cdFx0XHRcdHN3aXRjaCAob0RhdGEuJFR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRcdFx0b0RhdGFGaWVsZFdpZHRoID0gVGFibGVTaXplSGVscGVyLmdldFdpZHRoRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0b0RhdGEsXG5cdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm9zLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWRNZXRhRGF0YSxcblx0XHRcdFx0XHRcdFx0c2hvd0RhdGFGaWVsZHNMYWJlbFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IFRhYmxlU2l6ZUhlbHBlci5nZXRXaWR0aEZvckRhdGFGaWVsZChcblx0XHRcdFx0XHRcdFx0b0RhdGEsXG5cdFx0XHRcdFx0XHRcdHNob3dEYXRhRmllbGRzTGFiZWwsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mb3MsXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlZE1ldGFEYXRhLFxuXHRcdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdFx0XHRcdG9EYXRhRmllbGRXaWR0aCA9IHtcblx0XHRcdFx0XHRcdFx0bGFiZWxXaWR0aDogMCxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlXaWR0aDogU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aChvRGF0YS5MYWJlbD8udG9TdHJpbmcoKSlcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRGF0YUZpZWxkV2lkdGghKSB7XG5cdFx0XHRcdFx0YUZpZWxkV2lkdGgucHVzaChvRGF0YUZpZWxkV2lkdGgubGFiZWxXaWR0aCArIG9EYXRhRmllbGRXaWR0aC5wcm9wZXJ0eVdpZHRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBuV2lkZXN0ID0gYUZpZWxkV2lkdGgucmVkdWNlKGZ1bmN0aW9uIChhY2M6IG51bWJlciwgdmFsdWU6IG51bWJlcikge1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoYWNjLCB2YWx1ZSk7XG5cdFx0XHR9LCAwKTtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHlJbmZvLnZpc3VhbFNldHRpbmdzIGFzIG9iamVjdCwge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0dmVydGljYWxBcnJhbmdlbWVudDogdHJ1ZSxcblx0XHRcdFx0XHRtaW5XaWR0aDogTWF0aC5jZWlsKG5XaWRlc3QpXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVmFsdWVIZWxwOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBwcm9wZXJ0eTogRW5oYW5jZWRGRVByb3BlcnR5SW5mbykge1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0aWYgKCFwcm9wZXJ0eS5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aCAmJiBtZXRhTW9kZWwpIHtcblx0XHRcdFx0Y29uc3QgZGF0YUZpZWxkID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aH1AYCk7XG5cdFx0XHRcdGlmIChkYXRhRmllbGQgJiYgZGF0YUZpZWxkW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIl0pIHtcblx0XHRcdFx0XHRwcm9wZXJ0eS52aXN1YWxTZXR0aW5ncyA9IGRlZXBFeHRlbmQocHJvcGVydHkudmlzdWFsU2V0dGluZ3MgfHwge30sIHtcblx0XHRcdFx0XHRcdHdpZHRoQ2FsY3VsYXRpb246IHtcblx0XHRcdFx0XHRcdFx0Z2FwOiB0YWJsZUFQSS5nZXRQcm9wZXJ0eShcInJlYWRPbmx5XCIpID8gMCA6IDRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlOiBUYWJsZSxcblx0XHRwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyxcblx0XHR1bml0Pzogc3RyaW5nLFxuXHRcdHVuaXRUZXh0Pzogc3RyaW5nLFxuXHRcdHRpbWV6b25lVGV4dD86IHN0cmluZ1xuXHQpIHtcblx0XHRjb25zdCBvVGFibGVBUEk6IEVuaGFuY2VXaXRoVUk1PFRhYmxlQVBJPiB8IG51bGwgPSB0YWJsZSA/ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBFbmhhbmNlV2l0aFVJNTxUYWJsZUFQST4pIDogbnVsbDtcblx0XHQvLyB1cGRhdGUgZ2FwIGZvciBwcm9wZXJ0aWVzIHdpdGggc3RyaW5nIHVuaXRcblx0XHRjb25zdCB0ZXh0ID0gdW5pdFRleHQgfHwgdGltZXpvbmVUZXh0O1xuXHRcdGlmICh0ZXh0KSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBWaXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Z2FwOiBNYXRoLmNlaWwoU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aCh0ZXh0KSlcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmICh1bml0KSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8udmlzdWFsU2V0dGluZ3MgPSBkZWVwRXh0ZW5kKHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyBhcyBWaXN1YWxTZXR0aW5ncywge1xuXHRcdFx0XHR3aWR0aENhbGN1bGF0aW9uOiB7XG5cdFx0XHRcdFx0Ly8gRm9yIHByb3BlcnRpZXMgd2l0aCB1bml0LCBhIGdhcCBuZWVkcyB0byBiZSBhZGRlZCB0byBwcm9wZXJseSByZW5kZXIgdGhlIGNvbHVtbiB3aWR0aCBvbiBlZGl0IG1vZGVcblx0XHRcdFx0XHRnYXA6IG9UYWJsZUFQSSAmJiBvVGFibGVBUEkuZ2V0UmVhZE9ubHkoKSA/IDAgOiA2XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfY29tcHV0ZUxhYmVsOiBmdW5jdGlvbiAocHJvcGVydHk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8sIGxhYmVsTWFwOiB7IFtsYWJlbDogc3RyaW5nXTogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdIH0pIHtcblx0XHRpZiAocHJvcGVydHkubGFiZWwpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsID0gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdO1xuXHRcdFx0Ly8gVGhpcyBjb21wdXRhdGlvbiBpcyBvbmx5IGZvciBkdXBsaWNhdGUgbGFiZWxzIG9uIG5hdmlnYXRpb24gcHJvcGVydGllcy5cblx0XHRcdC8vIEV4Y2x1ZGUgdGV4dCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBhcyB0ZXh0IG9uIGEgcHJvcGVydHkgYW5ub3RhdGVkIHdpdGggdGV4dCBhcnJhbmdlbWVudCBzZXQgYXMgVGV4dE9ubHkuXG5cdFx0XHQvLyBFeGNsdWRlIG5hdmlnYXRpb24gcHJvcGVydGllcyBjcmVhdGVkIG9ubHkgZm9yIGZpbHRlcmluZyBwdXJwb3NlcyB3aXRoIGEgdGV4dCBhcnJhbmdlbWVudCBzZXQgdG8gVGV4dE9ubHkuXG5cdFx0XHRjb25zdCBpc1Byb3BlcnR5VXNlZEFzVGV4dE9ubHlQcm9wZXJ0eSA9IHByb3BlcnRpZXNXaXRoU2FtZUxhYmVsPy5zb21lKFxuXHRcdFx0XHQocHJvcCkgPT4gcHJvcC50ZXh0ID09PSBwcm9wZXJ0eS5wYXRoICYmIHByb3A/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIlxuXHRcdFx0KTtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvcGVydGllc1dpdGhTYW1lTGFiZWw/Lmxlbmd0aCA+IDEgJiZcblx0XHRcdFx0cHJvcGVydHkucGF0aD8uaW5jbHVkZXMoXCIvXCIpICYmXG5cdFx0XHRcdHByb3BlcnR5LmFkZGl0aW9uYWxMYWJlbHMgJiZcblx0XHRcdFx0IWlzUHJvcGVydHlVc2VkQXNUZXh0T25seVByb3BlcnR5ICYmXG5cdFx0XHRcdCEocHJvcGVydHk/Lm1vZGUgPT09IFwiRGVzY3JpcHRpb25cIiAmJiBwcm9wZXJ0eS5maWx0ZXJhYmxlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHByb3BlcnR5LmxhYmVsID0gcHJvcGVydHkubGFiZWwgKyBcIiAoXCIgKyBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzLmpvaW4oXCIgLyBcIikgKyBcIilcIjtcblx0XHRcdH1cblx0XHRcdGRlbGV0ZSBwcm9wZXJ0eS5hZGRpdGlvbmFsTGFiZWxzO1xuXHRcdH1cblx0fSxcblx0Ly9VcGRhdGUgVmlzdWFsU2V0dGluZyBmb3IgY29sdW1uV2lkdGggY2FsY3VsYXRpb24gYW5kIGxhYmVscyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0X3VwZGF0ZVByb3BlcnR5SW5mbzogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgcHJvcGVydGllczogRW5oYW5jZWRGRVByb3BlcnR5SW5mb1tdKSB7XG5cdFx0Y29uc3QgbGFiZWxNYXA6IHsgW2xhYmVsOiBzdHJpbmddOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10gfSA9IHt9O1xuXHRcdC8vIENoZWNrIGF2YWlsYWJsZSBwMTNuIG1vZGVzXG5cdFx0Y29uc3QgcDEzbk1vZGUgPSB0YWJsZS5nZXRQMTNuTW9kZSgpO1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcblx0XHRcdGlmICghcHJvcGVydHkucHJvcGVydHlJbmZvcyAmJiBwcm9wZXJ0eS5sYWJlbCkge1xuXHRcdFx0XHQvLyBPbmx5IGZvciBub24tY29tcGxleCBwcm9wZXJ0aWVzXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiU29ydFwiKSAmJiBwcm9wZXJ0eS5zb3J0YWJsZSkgfHxcblx0XHRcdFx0XHQocDEzbk1vZGU/LmluY2x1ZGVzKFwiRmlsdGVyXCIpICYmIHByb3BlcnR5LmZpbHRlcmFibGUpIHx8XG5cdFx0XHRcdFx0KHAxM25Nb2RlPy5pbmNsdWRlcyhcIkdyb3VwXCIpICYmIHByb3BlcnR5Lmdyb3VwYWJsZSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0bGFiZWxNYXBbcHJvcGVydHkubGFiZWxdID1cblx0XHRcdFx0XHRcdGxhYmVsTWFwW3Byb3BlcnR5LmxhYmVsXSAhPT0gdW5kZWZpbmVkID8gbGFiZWxNYXBbcHJvcGVydHkubGFiZWxdLmNvbmNhdChbcHJvcGVydHldKSA6IFtwcm9wZXJ0eV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JGaWVsZEdyb3VwKHRhYmxlLCBwcm9wZXJ0eSwgcHJvcGVydGllcyk7XG5cdFx0XHR0aGlzLl9jb21wdXRlVmlzdWFsU2V0dGluZ3NGb3JQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAodGFibGUsIHByb3BlcnR5KTtcblx0XHRcdHRoaXMuX2NvbXB1dGVMYWJlbChwcm9wZXJ0eSwgbGFiZWxNYXApO1xuXHRcdH0pO1xuXHRcdC8vIEFkZCB0aGUgJGVkaXRTdGF0ZSBwcm9wZXJ0eVxuXHRcdHByb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRrZXk6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdFx0cGF0aDogXCIkZWRpdFN0YXRlXCIsXG5cdFx0XHRncm91cExhYmVsOiBcIlwiLFxuXHRcdFx0Z3JvdXA6IFwiXCIsXG5cdFx0XHRsYWJlbDogXCJcIixcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0ZmlsdGVyYWJsZTogZmFsc2Vcblx0XHR9IGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pO1xuXHRcdHJldHVybiBwcm9wZXJ0aWVzO1xuXHR9LFxuXG5cdGdldENvbHVtbnNGb3I6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBUYWJsZUNvbHVtbltdIHtcblx0XHRyZXR1cm4gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBleHBvcnQgY2FwYWJpbGl0aWVzIGZvciB0aGUgZ2l2ZW4gc2FwLnVpLm1kYy5UYWJsZSBpbnN0YW5jZS5cblx0ICogQHBhcmFtIG9UYWJsZSBJbnN0YW5jZSBvZiB0aGUgdGFibGVcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXByZXNlbnRpbmcgdGhlIGV4cG9ydCBjYXBhYmlsaXRpZXMgb2YgdGhlIHRhYmxlIGluc3RhbmNlXG5cdCAqL1xuXHRmZXRjaEV4cG9ydENhcGFiaWxpdGllczogYXN5bmMgZnVuY3Rpb24gKG9UYWJsZTogVGFibGUpOiBQcm9taXNlPHsgWExTWD86IHVua25vd247IFBERj86IHVua25vd24gfT4ge1xuXHRcdGNvbnN0IG9DYXBhYmlsaXRpZXM6IHsgWExTWD86IHVua25vd247IFBERj86IHVua25vd24gfSA9IHsgWExTWDoge30gfTtcblx0XHRsZXQgb01vZGVsITogT0RhdGFNb2RlbDtcblx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmZldGNoTW9kZWwob1RhYmxlKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG1vZGVsOiBNb2RlbCkge1xuXHRcdFx0XHRvTW9kZWwgPSBtb2RlbCBhcyBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXR1cm4gb01vZGVsLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU3VwcG9ydGVkRm9ybWF0c1wiKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoYVN1cHBvcnRlZEZvcm1hdHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IGFMb3dlckZvcm1hdHMgPSAoYVN1cHBvcnRlZEZvcm1hdHMgfHwgW10pLm1hcCgoZWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtZW50LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoYUxvd2VyRm9ybWF0cy5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL3BkZlwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KFwiLyRFbnRpdHlDb250YWluZXJAY29tLnNhcC52b2NhYnVsYXJpZXMuUERGLnYxLkZlYXR1cmVzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9Bbm5vdGF0aW9uOiB1bmtub3duKSB7XG5cdFx0XHRcdGlmIChvQW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNbXCJQREZcIl0gPSBPYmplY3QuYXNzaWduKHt9LCBvQW5ub3RhdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIGNvbXB1dGluZyBleHBvcnQgY2FwYWJpbGl0aWVzOiAke2Vycn1gKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBvQ2FwYWJpbGl0aWVzO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZpbHRlcmluZyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIExpbmVJdGVtIGFubm90YXRpb24gbm9yIG9mIHRoZSBjdXN0b20gY29sdW1ucyBpcyBmb3JiaWRkZW4uXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvXG5cdCAqIEBwYXJhbSBjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdHJ1ZSBpZiBmaWx0ZXJpbmcgaXMgYWxsb3dlZCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5OiBmdW5jdGlvbiAoXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRcdGNvbHVtbkRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaXNGaWx0ZXJhYmxlID0gaXNQYXRoRmlsdGVyYWJsZShjb2x1bW5EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0IWNvbHVtbkluZm8ucmVsYXRpdmVQYXRoLmluY2x1ZGVzKFwiL1wiKSB8fFxuXHRcdFx0KChjb2x1bW5JbmZvLmlzUGFydE9mTGluZUl0ZW0gPT09IHRydWUgfHwgY29sdW1uSW5mby5pc1BhcnRPZkN1c3RvbUNvbHVtbiA9PT0gdHJ1ZSkgJiZcblx0XHRcdFx0IShpc0NvbnN0YW50KGlzRmlsdGVyYWJsZSkgJiYgaXNGaWx0ZXJhYmxlLnZhbHVlID09PSBmYWxzZSkpXG5cdFx0KTtcblx0fSxcblxuXHRfZmV0Y2hQcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChcblx0XHRtZXRhTW9kZWw6IE1ldGFNb2RlbCxcblx0XHRjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8ge1xuXHRcdGNvbnN0IHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoID0gY29sdW1uSW5mby5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdG9EYXRhRmllbGQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KHNBYnNvbHV0ZU5hdmlnYXRpb25QYXRoKSxcblx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCkgYXMgQ29udGV4dCxcblx0XHRcdGlzQ29tcGxleFR5cGUgPSBjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSAmJiBjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lPy5pbmRleE9mKFwiRWRtLlwiKSAhPT0gMCxcblx0XHRcdGJGaWx0ZXJhYmxlID0gQ29tbW9uSGVscGVyLmlzUHJvcGVydHlGaWx0ZXJhYmxlKG9OYXZpZ2F0aW9uQ29udGV4dCwgb0RhdGFGaWVsZCksXG5cdFx0XHRiSXNBbmFseXRpY2FsVGFibGUgPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YSh0YWJsZSwgXCJlbmFibGVBbmFseXRpY3NcIikgPT09IFwidHJ1ZVwiLFxuXHRcdFx0bGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8ubGFiZWwgPz8gXCJcIiwgYXBwQ29tcG9uZW50ID8/IHRhYmxlKSxcblx0XHRcdHRvb2x0aXAgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8udG9vbHRpcCA/PyBcIlwiLCBhcHBDb21wb25lbnQgPz8gdGFibGUpLFxuXHRcdFx0dHlwZUNvbmZpZyA9IHRoaXMuX2dldFR5cGVDb25maWcoY29sdW1uSW5mbywgaXNDb21wbGV4VHlwZSksXG5cdFx0XHRwcm9wZXJ0eUluZm86IEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRcdG5hbWU6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdFx0a2V5OiBjb2x1bW5JbmZvLm5hbWUsXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBzQWJzb2x1dGVOYXZpZ2F0aW9uUGF0aCxcblx0XHRcdFx0Z3JvdXBMYWJlbDogY29sdW1uSW5mby5ncm91cExhYmVsLFxuXHRcdFx0XHRncm91cDogY29sdW1uSW5mby5ncm91cCxcblx0XHRcdFx0bGFiZWw6IGxhYmVsLFxuXHRcdFx0XHR0b29sdGlwOiB0b29sdGlwLFxuXHRcdFx0XHRkYXRhVHlwZTogdHlwZUNvbmZpZy5jbGFzc05hbWUsXG5cdFx0XHRcdHR5cGVDb25maWc6IHR5cGVDb25maWcsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6XG5cdFx0XHRcdFx0Y29sdW1uSW5mby50eXBlQ29uZmlnPy5iYXNlVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIlxuXHRcdFx0XHRcdFx0PyB7IHN0eWxlOiBcIm1lZGl1bS9zaG9ydFwiIH0gLyogVGhpcyBjb25kaXRpb24gZG9lc24ndCBoYXZlIGFueSBpbXBhY3QsIHRvIGJlIHJldmlld2VkICovXG5cdFx0XHRcdFx0XHQ6IGNvbHVtbkluZm8udHlwZUNvbmZpZz8uZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0Y29uc3RyYWludHM6IGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY29uc3RyYWludHMsXG5cdFx0XHRcdHZpc2libGU6IGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiICYmICFpc0NvbXBsZXhUeXBlLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogdGhpcy5fc2V0UHJvcGVydHlJbmZvRXhwb3J0U2V0dGluZ3MoY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncywgY29sdW1uSW5mbyksXG5cdFx0XHRcdHVuaXQ6IGNvbHVtbkluZm8udW5pdCxcblx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRyZWxhdGl2ZVBhdGg6IGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoXG5cdFx0XHR9O1xuXHRcdGlmIChwcm9wZXJ0eUluZm8uZXhwb3J0U2V0dGluZ3M/LnRlbXBsYXRlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8uY2xpcGJvYXJkU2V0dGluZ3MgPSB7IHRlbXBsYXRlOiBwcm9wZXJ0eUluZm8uZXhwb3J0U2V0dGluZ3MudGVtcGxhdGUgfTtcblx0XHRcdC8vIGlmIEkgc2V0IHRoaXMgY2xpcEJvYXJkU2V0dGluZ3MgdGhlIGNvcHkgcHJvdmlkZXIgZXh0cmFjdCB0aGUgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIHRlbXBsYXRlIGluIHRoZSBodG1sIHByb3BlcnR5IGFuZCBpdCBpcyBwcm9wZXJseSBjb3BpZWQgaW4gZXhjZWxcblx0XHRcdC8vIGJ1dCB3aGVuIHdlIGNvcHkgZWxzZXdoZXJlIHdlIG9ubHkgZ2V0IHRoZSByYXcgZGF0YSBhbmQgbm90IHRoZSB0ZW1wbGF0ZWQgZGF0YVxuXHRcdH1cblxuXHRcdC8vIFNldCB2aXN1YWxTZXR0aW5ncyBvbmx5IGlmIGl0IGV4aXN0c1xuXHRcdGlmIChjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzICYmIE9iamVjdC5rZXlzKGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3MpLmxlbmd0aCA+IDApIHtcblx0XHRcdHByb3BlcnR5SW5mby52aXN1YWxTZXR0aW5ncyA9IGNvbHVtbkluZm8udmlzdWFsU2V0dGluZ3M7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRcdHByb3BlcnR5SW5mby5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSA9IGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWU7XG5cdFx0fVxuXG5cdFx0Ly8gTURDIGV4cGVjdHMgICdwcm9wZXJ0eUluZm9zJyBvbmx5IGZvciBjb21wbGV4IHByb3BlcnRpZXMuXG5cdFx0Ly8gQW4gZW1wdHkgYXJyYXkgdGhyb3dzIHZhbGlkYXRpb24gZXJyb3IgYW5kIHVuZGVmaW5lZCB2YWx1ZSBpcyB1bmhhbmRsZWQuXG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcz8ubGVuZ3RoKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQWRkIHByb3BlcnRpZXMgd2hpY2ggYXJlIHN1cHBvcnRlZCBvbmx5IGJ5IHNpbXBsZSBQcm9wZXJ0eUluZm9zLlxuXG5cdFx0XHQvL2dldCB0aGUgRGF0YU1vZGVsT2JqZWN0UGF0aCBmb3IgdGhlIGNvbHVtblxuXHRcdFx0Y29uc3QgY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdFx0bWV0YU1vZGVsLmdldENvbnRleHQoY29sdW1uSW5mby5hbm5vdGF0aW9uUGF0aCksXG5cdFx0XHRcdG1ldGFNb2RlbC5nZXRDb250ZXh0KERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKHRhYmxlLCBcIm1ldGFQYXRoXCIpISlcblx0XHRcdCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucGF0aCA9IGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoO1xuXHRcdFx0Ly8gVE9ETyB3aXRoIHRoZSBuZXcgY29tcGxleCBwcm9wZXJ0eSBpbmZvLCBhIGxvdCBvZiBcIkRlc2NyaXB0aW9uXCIgZmllbGRzIGFyZSBhZGRlZCBhcyBmaWx0ZXIvc29ydCBmaWVsZHNcblx0XHRcdHByb3BlcnR5SW5mby5zb3J0YWJsZSA9IGNvbHVtbkluZm8uc29ydGFibGU7XG5cdFx0XHRpZiAoYklzQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUFuYWx5dGljYWxQcm9wZXJ0eUluZm9BdHRyaWJ1dGVzKHByb3BlcnR5SW5mbywgY29sdW1uSW5mbyk7XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eUluZm8uZmlsdGVyYWJsZSA9XG5cdFx0XHRcdGNvbHVtbkluZm8uZmlsdGVyYWJsZSAhPT0gZmFsc2UgJiZcblx0XHRcdFx0ISFiRmlsdGVyYWJsZSAmJlxuXHRcdFx0XHR0aGlzLl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkoY29sdW1uSW5mbywgY29sdW1uRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0XHRwcm9wZXJ0eUluZm8uaXNLZXkgPSBjb2x1bW5JbmZvLmlzS2V5O1xuXHRcdFx0cHJvcGVydHlJbmZvLmdyb3VwYWJsZSA9IGNvbHVtbkluZm8uaXNHcm91cGFibGU7XG5cdFx0XHRpZiAoY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5fc2V0VGV4dEFycmFuZ2VtZW50SW5mbyhwcm9wZXJ0eUluZm8sIGNvbHVtbkluZm8sIHRhYmxlKTtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eUluZm8uaXNLZXkpIHtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmV4dGVuc2lvbiA9IHtcblx0XHRcdFx0XHQvLyBNREMgbmVlZHMgdG8gZml4IHRoaXMsIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3IgYSBub24gQW5hbHl0aWNhbCBUYWJsZVxuXHRcdFx0XHRcdHRlY2huaWNhbGx5R3JvdXBhYmxlOiB0cnVlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0eUluZm8uY2FzZVNlbnNpdGl2ZSA9IGNvbHVtbkluZm8uY2FzZVNlbnNpdGl2ZTtcblx0XHRcdGlmIChjb2x1bW5JbmZvLmFkZGl0aW9uYWxMYWJlbHMpIHtcblx0XHRcdFx0cHJvcGVydHlJbmZvLmFkZGl0aW9uYWxMYWJlbHMgPSBjb2x1bW5JbmZvLmFkZGl0aW9uYWxMYWJlbHMubWFwKChhZGRpdGlvbmFsTGFiZWw6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBnZXRMb2NhbGl6ZWRUZXh0KGFkZGl0aW9uYWxMYWJlbCwgYXBwQ29tcG9uZW50IHx8IHRhYmxlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5fY29tcHV0ZVZpc3VhbFNldHRpbmdzRm9yUHJvcGVydHlXaXRoVW5pdCh0YWJsZSwgcHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvLnVuaXQsIGNvbHVtbkluZm8udW5pdFRleHQsIGNvbHVtbkluZm8udGltZXpvbmVUZXh0KTtcblxuXHRcdHJldHVybiBwcm9wZXJ0eUluZm87XG5cdH0sXG5cblx0LyoqXG5cdCAqIEV4dGVuZCB0aGUgZXhwb3J0IHNldHRpbmdzIGJhc2VkIG9uIHRoZSBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIGV4cG9ydFNldHRpbmdzIFRoZSBleHBvcnQgc2V0dGluZ3MgdG8gYmUgZXh0ZW5kZWRcblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbkluZm8gb2JqZWN0XG5cdCAqIEByZXR1cm5zIFRoZSBleHRlbmRlZCBleHBvcnQgc2V0dGluZ3Ncblx0ICovXG5cdF9zZXRQcm9wZXJ0eUluZm9FeHBvcnRTZXR0aW5nczogZnVuY3Rpb24gKFxuXHRcdGV4cG9ydFNldHRpbmdzOiBDb2x1bW5FeHBvcnRTZXR0aW5ncyB8IHVuZGVmaW5lZCB8IG51bGwsXG5cdFx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uXG5cdCk6IENvbHVtbkV4cG9ydFNldHRpbmdzIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG5cdFx0Y29uc3QgZXhwb3J0Rm9ybWF0ID0gdGhpcy5fZ2V0RXhwb3J0Rm9ybWF0KGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lKTtcblx0XHRpZiAoZXhwb3J0Rm9ybWF0ICYmIGV4cG9ydFNldHRpbmdzKSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy5mb3JtYXQgPSBleHBvcnRGb3JtYXQ7XG5cdFx0fVxuXHRcdHJldHVybiBleHBvcnRTZXR0aW5ncztcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHlwZSBjb25maWcgZm9yIHRoZSBnaXZlbiBjb2x1bW4gaW5mby5cblx0ICogQHBhcmFtIGNvbHVtbkluZm8gVGhlIGNvbHVtbkluZm8gb2JqZWN0LlxuXHQgKiBAcGFyYW0gaXNDb21wbGV4VHlwZSBJbmRpY2F0ZXMgaWYgdGhlIGRhdGFUeXBlIGlzIGNvbXBsZXguXG5cdCAqIEByZXR1cm5zIFRoZSBNREMgdHlwZSBjb25maWcuXG5cdCAqL1xuXHRfZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIGlzQ29tcGxleFR5cGU/OiBib29sZWFuKTogVHlwZUNvbmZpZyB7XG5cdFx0bGV0IHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIik7IC8vIE1EQyBleHBlY3RzIGFsd2F5cyBhIGRhdGFUeXBlXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZUNvbmZpZz8uY2xhc3NOYW1lICYmIGlzVHlwZUZpbHRlcmFibGUoY29sdW1uSW5mby50eXBlQ29uZmlnLmNsYXNzTmFtZSkpIHtcblx0XHRcdHR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5jbGFzc05hbWUsXG5cdFx0XHRcdGNvbHVtbkluZm8udHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRjb2x1bW5JbmZvLnR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChjb2x1bW5JbmZvLnR5cGVDb25maWc/LmNsYXNzTmFtZSAmJiAhaXNDb21wbGV4VHlwZSkge1xuXHRcdFx0dHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhjb2x1bW5JbmZvLnR5cGVDb25maWcuY2xhc3NOYW1lKTtcblx0XHR9XG5cdFx0cmV0dXJuIHR5cGVDb25maWc7XG5cdH0sXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHRleHQgYXJyYW5nZW1lbnQgaW5mbyBmb3IgdGhlIGNvbHVtbiBpbmZvLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvIFRoZSBjdXJyZW50IHByb3BlcnR5SW5mbyBvYmplY3QuXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjb2x1bW5JbmZvIG9iamVjdC5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICovXG5cdF9zZXRUZXh0QXJyYW5nZW1lbnRJbmZvOiBmdW5jdGlvbiAocHJvcGVydHlJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvLCBjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIHRhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdGNvbnN0IGRlc2NyaXB0aW9uQ29sdW1uID0gdGhpcy5nZXRDb2x1bW5zRm9yKHRhYmxlKS5maW5kKGZ1bmN0aW9uIChvQ29sKSB7XG5cdFx0XHRyZXR1cm4gb0NvbC5uYW1lID09PSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudD8udGV4dFByb3BlcnR5O1xuXHRcdH0pO1xuXHRcdGlmIChkZXNjcmlwdGlvbkNvbHVtbikge1xuXHRcdFx0cHJvcGVydHlJbmZvLm1vZGUgPSBjb2x1bW5JbmZvLnRleHRBcnJhbmdlbWVudCEubW9kZTtcblx0XHRcdHByb3BlcnR5SW5mby52YWx1ZVByb3BlcnR5ID0gY29sdW1uSW5mby5yZWxhdGl2ZVBhdGg7XG5cdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA9IChkZXNjcmlwdGlvbkNvbHVtbiBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvKS5yZWxhdGl2ZVBhdGg7XG5cdFx0fVxuXHRcdHByb3BlcnR5SW5mby50ZXh0ID0gY29sdW1uSW5mby50ZXh0QXJyYW5nZW1lbnQ/LnRleHRQcm9wZXJ0eTtcblx0fSxcblxuXHRfdXBkYXRlQW5hbHl0aWNhbFByb3BlcnR5SW5mb0F0dHJpYnV0ZXMocHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8sIGNvbHVtbkluZm86IEFubm90YXRpb25UYWJsZUNvbHVtbikge1xuXHRcdGlmIChjb2x1bW5JbmZvLmFnZ3JlZ2F0YWJsZSkge1xuXHRcdFx0cHJvcGVydHlJbmZvLmFnZ3JlZ2F0YWJsZSA9IGNvbHVtbkluZm8uYWdncmVnYXRhYmxlO1xuXHRcdH1cblx0XHRpZiAoY29sdW1uSW5mby5leHRlbnNpb24pIHtcblx0XHRcdHByb3BlcnR5SW5mby5leHRlbnNpb24gPSBjb2x1bW5JbmZvLmV4dGVuc2lvbjtcblx0XHR9XG5cdH0sXG5cblx0X2ZldGNoQ29tcHV0ZWRQcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDb21wdXRlZFRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUpIHtcblx0XHRjb25zdCBsYWJlbCA9IGdldExvY2FsaXplZFRleHQoY29sdW1uSW5mby5sYWJlbCwgdGFibGUpOyAvLyBUb2RvOiBUbyBiZSByZW1vdmVkIG9uY2UgTURDIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHN1cHBvcnRcblx0XHRjb25zdCBwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbyA9IHtcblx0XHRcdGtleTogY29sdW1uSW5mby5uYW1lLFxuXHRcdFx0bGFiZWw6IGxhYmVsLnRvU3RyaW5nKCksXG5cdFx0XHRkYXRhVHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIixcblx0XHRcdHZpc2libGU6IGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiLFxuXHRcdFx0ZmlsdGVyYWJsZTogZmFsc2UsXG5cdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRjbGlwYm9hcmRTZXR0aW5nczogY29sdW1uSW5mby5jbGlwYm9hcmRTZXR0aW5ncyBhcyBQcm9wZXJ0eUluZm9bXCJjbGlwYm9hcmRTZXR0aW5nc1wiXVxuXHRcdH07XG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcyAhPT0gdW5kZWZpbmVkICYmIGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9XG5cdFx0cmV0dXJuIHByb3BlcnR5SW5mbztcblx0fSxcblxuXHRfZmV0Y2hDdXN0b21Qcm9wZXJ0eUluZm86IGZ1bmN0aW9uIChjb2x1bW5JbmZvOiBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZTogVGFibGUsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSB7XG5cdFx0bGV0IGxhYmVsO1xuXHRcdGlmIChjb2x1bW5JbmZvLmhlYWRlcikge1xuXHRcdFx0aWYgKGNvbHVtbkluZm8uaGVhZGVyLnN0YXJ0c1dpdGgoXCJ7bWV0YU1vZGVsPlwiKSkge1xuXHRcdFx0XHRsYWJlbCA9IE1vZGVsSGVscGVyLmZldGNoVGV4dEZyb21NZXRhTW9kZWwoY29sdW1uSW5mby5oZWFkZXIsIHVuZGVmaW5lZCwgKHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkluZm8uaGVhZGVyLCBhcHBDb21wb25lbnQpOyAvLyBUb2RvOiBUbyBiZSByZW1vdmVkIG9uY2UgTURDIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHN1cHBvcnRcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8gPSB7XG5cdFx0XHRrZXk6IGNvbHVtbkluZm8ubmFtZSxcblx0XHRcdGdyb3VwTGFiZWw6IHVuZGVmaW5lZCxcblx0XHRcdGdyb3VwOiB1bmRlZmluZWQsXG5cdFx0XHRsYWJlbDogbGFiZWwgPz8gXCJcIixcblx0XHRcdGRhdGFUeXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLFxuXHRcdFx0dmlzaWJsZTogY29sdW1uSW5mby5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogY29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyxcblx0XHRcdHZpc3VhbFNldHRpbmdzOiBjb2x1bW5JbmZvLnZpc3VhbFNldHRpbmdzIGFzIFByb3BlcnR5SW5mb1tcInZpc3VhbFNldHRpbmdzXCJdXG5cdFx0fTtcblxuXHRcdC8vIE1EQyBleHBlY3RzICdwcm9wZXJ0eUluZm9zJyBvbmx5IGZvciBjb21wbGV4IHByb3BlcnRpZXMuXG5cdFx0Ly8gQW4gZW1wdHkgYXJyYXkgdGhyb3dzIHZhbGlkYXRpb24gZXJyb3IgYW5kIHVuZGVmaW5lZCB2YWx1ZSBpcyB1bmhhbmRsZWQuXG5cdFx0aWYgKGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcyAmJiBjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MubGVuZ3RoKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8ucHJvcGVydHlJbmZvcyA9IGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQWRkIHByb3BlcnRpZXMgd2hpY2ggYXJlIHN1cHBvcnRlZCBvbmx5IGJ5IHNpbXBsZSBQcm9wZXJ0eUluZm9zLlxuXHRcdFx0cHJvcGVydHlJbmZvLnBhdGggPSBjb2x1bW5JbmZvLm5hbWU7XG5cdFx0XHRwcm9wZXJ0eUluZm8uc29ydGFibGUgPSBmYWxzZTtcblx0XHRcdHByb3BlcnR5SW5mby5maWx0ZXJhYmxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBwcm9wZXJ0eUluZm87XG5cdH0sXG5cdF9iQ29sdW1uSGFzUHJvcGVydHlXaXRoRHJhZnRJbmRpY2F0b3I6IGZ1bmN0aW9uIChvQ29sdW1uSW5mbzogVGFibGVDb2x1bW4pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISEoXG5cdFx0XHQob0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucyAmJiBvQ29sdW1uSW5mby5mb3JtYXRPcHRpb25zLmhhc0RyYWZ0SW5kaWNhdG9yKSB8fFxuXHRcdFx0KG9Db2x1bW5JbmZvLmZvcm1hdE9wdGlvbnMgJiYgb0NvbHVtbkluZm8uZm9ybWF0T3B0aW9ucy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgpXG5cdFx0KTtcblx0fSxcblx0X3VwZGF0ZURyYWZ0SW5kaWNhdG9yTW9kZWw6IGZ1bmN0aW9uIChfb1RhYmxlOiBUYWJsZSwgX29Db2x1bW5JbmZvOiBUYWJsZUNvbHVtbik6IHZvaWQge1xuXHRcdGNvbnN0IGFWaXNpYmxlQ29sdW1ucyA9IF9vVGFibGUuZ2V0Q29sdW1ucygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gX29UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGNvbnN0IHNJbnRlcm5hbFBhdGggPSBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCAmJiBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKGFWaXNpYmxlQ29sdW1ucyAmJiBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Zm9yIChjb25zdCBpbmRleCBpbiBhVmlzaWJsZUNvbHVtbnMpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRoaXMuX2JDb2x1bW5IYXNQcm9wZXJ0eVdpdGhEcmFmdEluZGljYXRvcihfb0NvbHVtbkluZm8pICYmXG5cdFx0XHRcdFx0X29Db2x1bW5JbmZvLm5hbWUgPT09IGFWaXNpYmxlQ29sdW1uc1tpbmRleF0uZ2V0UHJvcGVydHlLZXkoKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpZiAob0ludGVybmFsQmluZGluZ0NvbnRleHQuZ2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUikgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiwgX29Db2x1bW5JbmZvLm5hbWUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRfZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdGVudGl0eVR5cGVQYXRoOiBzdHJpbmcsXG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuXHQpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiB7XG5cdFx0Ly8gd2hlbiBmZXRjaGluZyBwcm9wZXJ0aWVzLCB0aGlzIGJpbmRpbmcgY29udGV4dCBpcyBuZWVkZWQgLSBzbyBsZXRzIGNyZWF0ZSBpdCBvbmx5IG9uY2UgYW5kIHVzZSBpZiBmb3IgYWxsIHByb3BlcnRpZXMvZGF0YS1maWVsZHMvbGluZS1pdGVtc1xuXHRcdGNvbnN0IGJpbmRpbmdQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChlbnRpdHlUeXBlUGF0aCk7XG5cdFx0bGV0IGZldGNoZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSA9IFtdO1xuXHRcdGNvbnN0IG5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gQ29tbW9uVXRpbHMuZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKGJpbmRpbmdQYXRoLCBtZXRhTW9kZWwpLk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzO1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5nZXRDb2x1bW5zRm9yKHRhYmxlKSlcblx0XHRcdC50aGVuKChjb2x1bW5zOiBUYWJsZUNvbHVtbltdKSA9PiB7XG5cdFx0XHRcdC8vIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhIGRvZXMgbm90IHdvcmsgdmlhICdlbnRpdHlTZXQvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEnXG5cdFx0XHRcdGlmIChjb2x1bW5zKSB7XG5cdFx0XHRcdFx0bGV0IHByb3BlcnR5SW5mbztcblx0XHRcdFx0XHRjb2x1bW5zLmZvckVhY2goKGNvbHVtbkluZm8pID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZURyYWZ0SW5kaWNhdG9yTW9kZWwodGFibGUsIGNvbHVtbkluZm8pO1xuXHRcdFx0XHRcdFx0c3dpdGNoIChjb2x1bW5JbmZvLnR5cGUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIkFubm90YXRpb25cIjpcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8gPSB0aGlzLl9mZXRjaFByb3BlcnR5SW5mbyhtZXRhTW9kZWwsIGNvbHVtbkluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uLCB0YWJsZSwgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdFx0XHRpZiAocHJvcGVydHlJbmZvICYmICFub25GaWx0ZXJhYmxlUHJvcGVydGllcy5pbmNsdWRlcygocHJvcGVydHlJbmZvIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikubmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mby5tYXhDb25kaXRpb25zID0gRGVsZWdhdGVVdGlsLmlzTXVsdGlWYWx1ZShwcm9wZXJ0eUluZm8gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKSA/IC0xIDogMTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJDb21wdXRlZFwiOlxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbyA9IHRoaXMuX2ZldGNoQ29tcHV0ZWRQcm9wZXJ0eUluZm8oY29sdW1uSW5mbyBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLCB0YWJsZSk7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJTbG90XCI6XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJEZWZhdWx0XCI6XG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID0gdGhpcy5fZmV0Y2hDdXN0b21Qcm9wZXJ0eUluZm8oY29sdW1uSW5mbyBhcyBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZSwgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuaGFuZGxlZCBzd2l0Y2ggY2FzZSAke2NvbHVtbkluZm8udHlwZX1gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlJbmZvIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm8pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzID0gdGhpcy5fdXBkYXRlUHJvcGVydHlJbmZvKHRhYmxlLCBmZXRjaGVkUHJvcGVydGllcyBhcyBFbmhhbmNlZEZFUHJvcGVydHlJbmZvW10pO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHR0YWJsZUFQSS5zZXRFbmhhbmNlZEZldGNoZWRQcm9wZXJ0eUluZm9zKGZldGNoZWRQcm9wZXJ0aWVzIGFzIEVuaGFuY2VkRkVQcm9wZXJ0eUluZm9bXSk7XG5cdFx0XHRcdGZldGNoZWRQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0UHJvcGVydHlJbmZvcygpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgdXBkYXRpbmcgZmV0Y2hlZCBwcm9wZXJ0aWVzOiAke2VyciBhcyBzdHJpbmd9YCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gZmV0Y2hlZFByb3BlcnRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblxuXHRfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHk6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0ZW50aXR5VHlwZVBhdGg6IHN0cmluZyxcblx0XHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+IHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGZldGNoZWRQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0Q2FjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdGlmIChmZXRjaGVkUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmV0Y2hlZFByb3BlcnRpZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KHRhYmxlLCBlbnRpdHlUeXBlUGF0aCwgbWV0YU1vZGVsLCBhcHBDb21wb25lbnQpLnRoZW4oZnVuY3Rpb24gKFxuXHRcdFx0c3ViRmV0Y2hlZFByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdXG5cdFx0KSB7XG5cdFx0XHR0YWJsZUFQSS5zZXRDYWNoZWRQcm9wZXJ0eUluZm9zKHN1YkZldGNoZWRQcm9wZXJ0aWVzKTtcblx0XHRcdHJldHVybiBzdWJGZXRjaGVkUHJvcGVydGllcztcblx0XHR9KTtcblx0fSxcblx0c2V0Tm9EYXRhSW5mb3JtYXRpb246IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MpOiB2b2lkIHtcblx0XHRjb25zdCBub0RhdGFBZ2dyZWdhdGlvbiA9IHRhYmxlLmdldE5vRGF0YSgpO1xuXHRcdGlmICh0eXBlb2Ygbm9EYXRhQWdncmVnYXRpb24gIT0gXCJzdHJpbmdcIiAmJiAobm9EYXRhQWdncmVnYXRpb24gYXMgQ29udHJvbCk/LmlzQShcInNhcC5tLklsbHVzdHJhdGVkTWVzc2FnZVwiKSkge1xuXHRcdFx0Y29uc3QgY3VycmVudElsbHVzdHJhdGVkTWVzc2FnZSA9IG5vRGF0YUFnZ3JlZ2F0aW9uIGFzIElsbHVzdHJhdGVkTWVzc2FnZTtcblx0XHRcdC8vIFdlIG92ZXJyaWRlIHRoZSBjdXJyZW50IHZhbHVlcyBvZiB0aGUgSWxsdXN0cmF0ZWRNZXNzYWdlXG5cdFx0XHRjdXJyZW50SWxsdXN0cmF0ZWRNZXNzYWdlLnNldFRpdGxlKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLnRpdGxlKTtcblx0XHRcdGN1cnJlbnRJbGx1c3RyYXRlZE1lc3NhZ2Uuc2V0RGVzY3JpcHRpb24oaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXRJbGx1c3RyYXRpb25UeXBlKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblR5cGUpO1xuXHRcdFx0Y3VycmVudElsbHVzdHJhdGVkTWVzc2FnZS5zZXRJbGx1c3RyYXRpb25TaXplKGlsbHVzdHJhdGVkTWVzc2FnZUluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBpbGx1c3RyYXRlZE1lc3NhZ2UgPSBuZXcgSWxsdXN0cmF0ZWRNZXNzYWdlKHtcblx0XHRcdFx0Li4uaWxsdXN0cmF0ZWRNZXNzYWdlSW5mb3JtYXRpb25cblx0XHRcdH0pO1xuXHRcdFx0dGFibGUuc2V0Tm9EYXRhKGlsbHVzdHJhdGVkTWVzc2FnZSk7XG5cdFx0fVxuXHR9LFxuXG5cdHNldFRhYmxlTm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBiaW5kaW5nSW5mbzogQ29sbGVjdGlvbkJpbmRpbmdJbmZvKSB7XG5cdFx0Y29uc3QgdGFibGVGaWx0ZXJJbmZvID0gVGFibGVVdGlscy5nZXRBbGxGaWx0ZXJJbmZvKHRhYmxlKTtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSk7XG5cdFx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBiaW5kaW5nSW5mby5wYXRoPy5zdGFydHNXaXRoKFwiL1wiKSA/IGJpbmRpbmdJbmZvLnBhdGguc3Vic3RyaW5nKDEpIDogYmluZGluZ0luZm8ucGF0aDtcblx0XHRsZXQgaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbjogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzO1xuXG5cdFx0Y29uc3QgZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMgPSBmdW5jdGlvbiAoKTogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIHtcblx0XHRcdGlmICh0YWJsZS5kYXRhKFwiaGlkZGVuRmlsdGVyc1wiKSB8fCB0YWJsZS5nZXRRdWlja0ZpbHRlcigpKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9NVUxUSV9WSUVXXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9TZWFyY2hSZXN1bHRzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiKSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9XSVRIX0ZJTFRFUlwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob1NlYXJjaFJlc3VsdHNcblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdGNvbnN0IGZpbHRlckFzc29jaWF0aW9uID0gdGFibGUuZ2V0RmlsdGVyKCk7XG5cdFx0Y29uc3QgaGFzRmlsdGVyT3JTZWFyY2ggPSB0YWJsZUZpbHRlckluZm8uc2VhcmNoIHx8IHRhYmxlRmlsdGVySW5mby5maWx0ZXJzPy5sZW5ndGg7XG5cdFx0aWYgKGZpbHRlckFzc29jaWF0aW9uICYmICEvQmFzaWNTZWFyY2gkLy50ZXN0KGZpbHRlckFzc29jaWF0aW9uKSkge1xuXHRcdFx0Ly8gY2hlY2sgaWYgYSBGaWx0ZXJCYXIgaXMgYXNzb2NpYXRlZCB0byB0aGUgVGFibGUgKGJhc2ljIHNlYXJjaCBvbiB0b29sQmFyIGlzIGV4Y2x1ZGVkKVxuXHRcdFx0aWYgKGhhc0ZpbHRlck9yU2VhcmNoKSB7XG5cdFx0XHRcdC8vIGNoZWNrIGlmIHRhYmxlIGhhcyBhbnkgRmlsdGVyYmFyIGZpbHRlcnMgb3IgcGVyc29uYWxpemF0aW9uIGZpbHRlcnNcblx0XHRcdFx0aWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiA9IGdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0ge1xuXHRcdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9TRUFSQ0hSRVNVTFRTXCIpLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob1NlYXJjaFJlc3VsdHNcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGhhc0ZpbHRlck9yU2VhcmNoKSB7XG5cdFx0XHQvL2NoZWNrIGlmIHRhYmxlIGhhcyBhbnkgcGVyc29uYWxpemF0aW9uIGZpbHRlcnNcblx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0ge1xuXHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PREFUQVwiKSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0ZJTFRFUlNfTk9fREFUQV9URVhUXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRGF0YVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpLmdldFZpZXdEYXRhKCkubGl2ZU1vZGUpIHtcblx0XHRcdGlmIChoYXNGaWx0ZXJPclNlYXJjaCkge1xuXHRcdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0gZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSB7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0ZJTFRFUlNfTk9fREFUQV9URVhUXCIpLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9TZWFyY2hSZXN1bHRzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24uaWxsdXN0cmF0aW9uU2l6ZSA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0Tm9EYXRhTWVzc2FnZU1vZGUoKTtcblxuXHRcdGlmIChpbGx1c3RyYXRlZEluZm9ybWF0aW9uLmlsbHVzdHJhdGlvblNpemUgPT09IFwidGV4dFwiKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50Tm9EYXRhID0gdGFibGUuZ2V0Tm9EYXRhKCk7XG5cdFx0XHRpZiAodHlwZW9mIGN1cnJlbnROb0RhdGEgPT09IFwic3RyaW5nXCIgJiYgY3VycmVudE5vRGF0YSA9PT0gaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbikge1xuXHRcdFx0XHQvLyBXZSBkb24ndCBjaGFuZ2UgdGhlIG5vRGF0YSBhZ2dyZWdhdGlvbiB1bm5lY2Vzc2FyeS5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGFibGUuc2V0Tm9EYXRhKGlsbHVzdHJhdGVkSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE5vRGF0YUluZm9ybWF0aW9uKHRhYmxlLCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uKTtcblx0XHR9XG5cdH0sXG5cblx0aGFuZGxlVGFibGVEYXRhUmVjZWl2ZWQ6IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0JpbmRpbmcgPSBvVGFibGUgJiYgb1RhYmxlLmdldFJvd0JpbmRpbmcoKSxcblx0XHRcdGJEYXRhUmVjZWl2ZWRBdHRhY2hlZCA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiKTtcblxuXHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQgJiYgIWJEYXRhUmVjZWl2ZWRBdHRhY2hlZCkge1xuXHRcdFx0b0JpbmRpbmcuYXR0YWNoRGF0YVJlY2VpdmVkKCgpID0+IHtcblx0XHRcdFx0Ly8gYXMgdGhlIGRhdGFSZWNlaXZlZCBldmVudCBpcyBmaXJlZCBtdWx0aXBsZSB0aW1lcywgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZXZlbnQgaXMgb25seSBoYW5kbGVkIG9uY2Vcblx0XHRcdFx0aWYgKCFvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRUaW1lb3V0U2V0XCIpKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGF0YVJlY2VpdmVkVGltZW91dFNldFwiLCB0cnVlKTtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRhdGFSZWNlaXZlZFRpbWVvdXRTZXRcIiwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0Ly8gUmVmcmVzaCB0aGUgc2VsZWN0ZWQgY29udGV4dHMgdG8gdHJpZ2dlciByZS1jYWxjdWxhdGlvbiBvZiBlbmFibGVkIHN0YXRlIG9mIGFjdGlvbnMuXG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIFtdKTtcblx0XHRcdFx0XHRcdGNvbnN0IGFTZWxlY3RlZENvbnRleHRzID0gb1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKSBhcyBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiLCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IEpTT04ucGFyc2UodGFibGVBUEkudGFibGVEZWZpbml0aW9uLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG5cdFx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhU2VsZWN0ZWRDb250ZXh0cywgXCJ0YWJsZVwiKTtcblx0XHRcdFx0XHRcdC8vIFJlZnJlc2ggZW5hYmxlbWVudCBvZiBkZWxldGUgYnV0dG9uXG5cdFx0XHRcdFx0XHREZWxldGVIZWxwZXIudXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRcdFx0XHRjb25zdCBvVGFibGVBUEkgPSBvVGFibGUgPyBvVGFibGUuZ2V0UGFyZW50KCkgOiBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKG9UYWJsZUFQSSkge1xuXHRcdFx0XHRcdFx0XHQob1RhYmxlQVBJIGFzIFRhYmxlQVBJKS5zZXRVcEVtcHR5Um93cyhvVGFibGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlQXZhaWxhYmxlQ2FyZHMob1RhYmxlKTtcblx0XHRcdFx0XHR9LCAwKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiLCB0cnVlKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNldCB0aGUgb3B0aW1pc3RpYyBiYXRjaCBwcm9taXNlIGZvciB0aGUgZW5hYmxlciBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgVGhlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHRhYmxlQVBJIFRoZSBUYWJsZUFQSVxuXHQgKi9cblx0c2V0T3B0aW1pc3RpY0JhdGNoUHJvbWlzZUZvck1vZGVsOiBmdW5jdGlvbiAoY29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsIHRhYmxlQVBJOiBUYWJsZUFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IG1vZGVsID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRNb2RlbCgpO1xuXHRcdGlmIChtb2RlbCkge1xuXHRcdFx0dGFibGVBUEkuc2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UobmV3IFByb21pc2VLZWVwZXI8Ym9vbGVhbj4oKSk7XG5cdFx0XHR0aGlzLnNldE9wdGltaXN0aWNCYXRjaEZvck1vZGVsKGNvbnRyb2xsZXIsIG1vZGVsLCB0YWJsZUFQSSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBFbmFibGUgdGhlIG9wdGltaXN0aWMgYmF0Y2ggbW9kZSBpZiBhdmFpbGFibGUuXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKi9cblx0ZW5hYmxlT3B0aW1pc3RpY0JhdGNoTW9kZTogZnVuY3Rpb24gKGNvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLCB0YWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJzUHJvcGVydGllc0FzUG90ZW50aWFsbHlTZW5zaXRpdmVEYXRhT3JEYXRlVHlwZSA9XG5cdFx0XHR0YWJsZSAmJiBUYWJsZVV0aWxzLmlzRmlsdGVyRWxpZ2libGVGb3JPcHRpbWlzdGljQmF0Y2godGFibGUsIGNvbnRyb2xsZXIuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBGaWx0ZXJCYXIpO1xuXHRcdCh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2UoKT8ucmVzb2x2ZSghZmlsdGVyc1Byb3BlcnRpZXNBc1BvdGVudGlhbGx5U2Vuc2l0aXZlRGF0YU9yRGF0ZVR5cGUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBTZXR0ZXIgZm9yIHRoZSBvcHRpbWlzdGljIGJhdGNoIGVuYWJsZXIgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWwgVGhlIE9EYXRhIE1vZGVsXG5cdCAqIEBwYXJhbSB0YWJsZUFQSSBUaGUgVGFibGVBUElcblx0ICogQHNlZSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWwjc2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcn0gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG5cdCAqL1xuXHRzZXRPcHRpbWlzdGljQmF0Y2hGb3JNb2RlbDogZnVuY3Rpb24gKGNvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLCBkYXRhTW9kZWw6IE9EYXRhTW9kZWwsIHRhYmxlQVBJOiBUYWJsZUFQSSk6IHZvaWQge1xuXHRcdGNvbnN0IGlzT3B0aW1pc3RpY0JhdGNoSGFzVG9CZUVuYWJsZWQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKS5pc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCgpO1xuXHRcdGlmIChkYXRhTW9kZWwuZ2V0T3B0aW1pc3RpY0JhdGNoRW5hYmxlcigpID09PSBudWxsICYmICF0YWJsZUFQSS5pc09wdGltaXN0aWNCYXRjaERpc2FibGVkKCkgJiYgaXNPcHRpbWlzdGljQmF0Y2hIYXNUb0JlRW5hYmxlZCkge1xuXHRcdFx0Y29uc3Qgb3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2VLZWVwZXIgPSB0YWJsZUFQSS5nZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyUHJvbWlzZSgpO1xuXHRcdFx0ZGF0YU1vZGVsLnNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXIoZnVuY3Rpb24gKCk6IFByb21pc2U8Ym9vbGVhbj4gfCB1bmRlZmluZWQge1xuXHRcdFx0XHRyZXR1cm4gb3B0aW1pc3RpY0JhdGNoRW5hYmxlclByb21pc2VLZWVwZXI/LnByb21pc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0cmViaW5kOiBhc3luYyBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgb0JpbmRpbmdJbmZvOiBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG9UYWJsZUFQSSA9IG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCBiSXNTdXNwZW5kZWQgPSBvVGFibGVBUEk/LmdldFByb3BlcnR5KFwiYmluZGluZ1N1c3BlbmRlZFwiKTtcblx0XHRvVGFibGVBUEk/LnNldFByb3BlcnR5KFwib3V0RGF0ZWRCaW5kaW5nXCIsIGJJc1N1c3BlbmRlZCk7XG5cdFx0aWYgKCFiSXNTdXNwZW5kZWQpIHtcblx0XHRcdFRhYmxlUnVudGltZS5jbGVhclNlbGVjdGlvbihvVGFibGUpO1xuXHRcdFx0VGFibGVEZWxlZ2F0ZUJhc2UucmViaW5kLmFwcGx5KHRoaXMsIFtvVGFibGUsIG9CaW5kaW5nSW5mb10pO1xuXHRcdFx0VGFibGVVdGlscy5vblRhYmxlQm91bmQob1RhYmxlKTtcblx0XHRcdHJldHVybiBUYWJsZVV0aWxzLndoZW5Cb3VuZChvVGFibGUpXG5cdFx0XHRcdC50aGVuKCh0YWJsZTogVGFibGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmhhbmRsZVRhYmxlRGF0YVJlY2VpdmVkKHRhYmxlLCB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRhYmxlIHRvIGJlIGJvdW5kXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBGZXRjaGVzIHRoZSByZWxldmFudCBtZXRhZGF0YSBmb3IgdGhlIHRhYmxlIGFuZCByZXR1cm5zIHByb3BlcnR5IGluZm8gYXJyYXkuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0aGUgTURDdGFibGVcblx0ICogQHJldHVybnMgQXJyYXkgb2YgcHJvcGVydHkgaW5mb1xuXHQgKi9cblx0ZmV0Y2hQcm9wZXJ0aWVzOiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwuZmV0Y2hNb2RlbCh0YWJsZSlcblx0XHRcdC50aGVuKGFzeW5jIChtb2RlbCk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+ID0+IHtcblx0XHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRhYmxlKTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KFxuXHRcdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRcdERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHN0cmluZz4odGFibGUsIFwiZW50aXR5VHlwZVwiKSA/PyBcIlwiLFxuXHRcdFx0XHRcdG1vZGVsLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKChwcm9wZXJ0aWVzKSA9PiB7XG5cdFx0XHRcdCh0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIENvbnRleHQpPy5zZXRQcm9wZXJ0eShcInRhYmxlUHJvcGVydGllc0F2YWlsYWJsZVwiLCB0cnVlKTtcblx0XHRcdFx0cmV0dXJuIHByb3BlcnRpZXM7XG5cdFx0XHR9KTtcblx0fSxcblxuXHRwcmVJbml0OiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIChUYWJsZURlbGVnYXRlQmFzZS5wcmVJbml0IGFzICh0YWJsZTogVGFibGUpID0+IFByb21pc2U8dm9pZD4pLmFwcGx5KHRoaXMsIFt0YWJsZV0pLnRoZW4oKCkgPT4ge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBTZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvdyB0byBhdm9pZCBpbmhlcml0aW5nXG5cdFx0XHQgKiB0aGUgd3JvbmcgY29udGV4dCBhbmQgcmVxdWVzdGluZyB0aGUgdGFibGUgY29sdW1ucyBvbiB0aGUgcGFyZW50IGVudGl0eVxuXHRcdFx0ICogU2V0IHRoZSBjb3JyZWN0IGJpbmRpbmcgY29udGV4dCBpbiBPYmplY3RQYWdlQ29udHJvbGxlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coKVxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBmYXN0Q3JlYXRpb25Sb3cgPSB0YWJsZS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0aWYgKGZhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRmYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQobnVsbCBhcyB1bmtub3duIGFzIENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9LFxuXHR1cGRhdGVCaW5kaW5nSW5mbzogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJID0gbmV3IENvbGxlY3Rpb25CaW5kaW5nSW5mb0FQSShiaW5kaW5nSW5mbyk7XG5cdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoXCJpc0luc2lnaHRzRW5hYmxlZFwiLCB0cnVlKTtcblx0XHRUYWJsZURlbGVnYXRlQmFzZS51cGRhdGVCaW5kaW5nSW5mby5hcHBseSh0aGlzLCBbdGFibGUsIGJpbmRpbmdJbmZvXSk7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMuX2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTSh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5faW50ZXJuYWxVcGRhdGVCaW5kaW5nSW5mbyh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5zZXRUYWJsZU5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZSh0YWJsZSwgYmluZGluZ0luZm8pO1xuXHRcdFx0dGhpcy5faGFuZGxlUmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHModGFibGUsIGJpbmRpbmdJbmZvKTtcblx0XHRcdHRoaXMuX2hhbmRsZUZpbHRlcnNGb3JFeHRlcm5hbElEKHRhYmxlLCBiaW5kaW5nSW5mbyk7XG5cblx0XHRcdHRhYmxlLmdldFBhcmVudCgpPy5maXJlRXZlbnQoXCJiZWZvcmVSZWJpbmRUYWJsZVwiLCB7IGNvbGxlY3Rpb25CaW5kaW5nSW5mbzogY29sbGVjdGlvbkJpbmRpbmdJbmZvQVBJIH0pO1xuXHRcdFx0Y29uc3QgYXR0YWNoZWRFdmVudHMgPSBjb2xsZWN0aW9uQmluZGluZ0luZm9BUEkuZ2V0QXR0YWNoZWRFdmVudHMoKTtcblx0XHRcdC8qKlxuXHRcdFx0ICogV2UgaGF2ZSB0byBzZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvdyB0byBhdm9pZCBpdCBpbmhlcml0aW5nXG5cdFx0XHQgKiB0aGUgd3JvbmcgY29udGV4dCBhbmQgcmVxdWVzdGluZyB0aGUgdGFibGUgY29sdW1ucyBmb3IgdGhlIHBhcmVudCBlbnRpdHlcblx0XHRcdCAqIFRoZSBjb3JyZWN0IGJpbmRpbmcgY29udGV4dCBpcyBzZXQgaW4gT2JqZWN0UGFnZUNvbnRyb2xsZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KClcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3QgY29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cblx0XHRcdGlmICh0YWJsZS5nZXRDcmVhdGlvblJvdygpPy5nZXRCaW5kaW5nQ29udGV4dCgpID09PSBudWxsICYmIGJpbmRpbmdJbmZvLnBhdGggJiYgY29udGV4dCkge1xuXHRcdFx0XHRUYWJsZUhlbHBlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5cdFx0XHRcdFx0dGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0XHRiaW5kaW5nSW5mby5wYXRoLFxuXHRcdFx0XHRcdGNvbnRleHQgYXMgdjRDb250ZXh0LFxuXHRcdFx0XHRcdHRhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCxcblx0XHRcdFx0XHRQcm9taXNlLnJlc29sdmUoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0dGFibGVBUEkuc2V0QXR0YWNoRXZlbnRzKGF0dGFjaGVkRXZlbnRzKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB1cGRhdGluZyB0aGUgYmluZGluZyBpbmZvXCIsIGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH0sXG5cblx0X2hhbmRsZVNvcnRlcnNPbkN1cnJlbmNpZXNPclVvTTogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IHNvcnRlcnM6IFNvcnRlcltdIHwgdW5kZWZpbmVkID0gYmluZGluZ0luZm8uc29ydGVyO1xuXHRcdGNvbnN0IG5ld1NvcnRlcnNUb0JlQXBwbGllZDogU29ydGVyW10gPSBbXTtcblx0XHRpZiAoc29ydGVycz8ubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0Y29uc3QgdGFibGVQcm9wZXJ0aWVzID0gdGFibGVBUEkuZ2V0Q2FjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdFx0Zm9yIChjb25zdCBzb3J0ZXIgb2Ygc29ydGVycykge1xuXHRcdFx0XHRjb25zdCB0YWJsZVByb3BlcnR5ID0gdGFibGVQcm9wZXJ0aWVzPy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkucGF0aCA9PT0gc29ydGVyLmdldFBhdGgoKSk7XG5cdFx0XHRcdGlmICh0YWJsZVByb3BlcnR5Py51bml0KSB7XG5cdFx0XHRcdFx0Y29uc3QgdW5pdFByb3BlcnR5ID0gdGFibGVQcm9wZXJ0aWVzPy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkua2V5ID09PSB0YWJsZVByb3BlcnR5Py51bml0KTtcblx0XHRcdFx0XHRjb25zdCB1bml0U29ydGVyQXZhaWxhYmxlID0gdW5pdFByb3BlcnR5Py5wYXRoICYmIHNvcnRlcnMuc29tZSgoc29ydCkgPT4gc29ydC5nZXRQYXRoKCkgPT09IHVuaXRQcm9wZXJ0eS5wYXRoKTtcblx0XHRcdFx0XHRpZiAoIXVuaXRTb3J0ZXJBdmFpbGFibGUgJiYgdW5pdFByb3BlcnR5Py5zb3J0YWJsZSAhPT0gZmFsc2UgJiYgdW5pdFByb3BlcnR5Py5wYXRoKSB7XG5cdFx0XHRcdFx0XHRuZXdTb3J0ZXJzVG9CZUFwcGxpZWQucHVzaChuZXcgU29ydGVyKHVuaXRQcm9wZXJ0eS5wYXRoLCBmYWxzZSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRuZXdTb3J0ZXJzVG9CZUFwcGxpZWQucHVzaChzb3J0ZXIpO1xuXHRcdFx0fVxuXHRcdFx0YmluZGluZ0luZm8uc29ydGVyID0gbmV3U29ydGVyc1RvQmVBcHBsaWVkO1xuXHRcdH1cblx0fSxcblxuXHRfaGFuZGxlRmlsdGVyc0ZvckV4dGVybmFsSUQ6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSAodGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKT8uZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBiaW5kaW5nSW5mby5wYXRoICsgXCIvXCI7XG5cdFx0Y29uc3QgZmlsdGVycyA9IGJpbmRpbmdJbmZvLmZpbHRlcnM/LmdldEZpbHRlcnMoKTtcblx0XHRpZiAoZmlsdGVycyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRUYWJsZVV0aWxzLnVwZGF0ZUZpbHRlcnNGb3JFeHRlcm5hbElEKG1ldGFNb2RlbCwgZmlsdGVycyBhcyB1bmtub3duIGFzIENvbmRpdGlvbk9iamVjdFtdLCBlbnRpdHlUeXBlUGF0aCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9oYW5kbGVSZWNvbW1lbmRhdGlvbk91dHB1dEZpZWxkczogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgb0JpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0YWJsZUFQST8uZ2V0UGFnZUNvbnRyb2xsZXIoKTtcblx0XHRpZiAoY29udHJvbGxlcj8ucmVjb21tZW5kYXRpb25zLmlzUmVjb21tZW5kYXRpb25FbmFibGVkKCkpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0XHRjb25zdCB0YWJsZURlZiA9IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzID0gYXBwQ29tcG9uZW50XG5cdFx0XHRcdC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKVxuXHRcdFx0XHQuZ2V0UmVjb21tZW5kYXRpb25PdXRwdXRGaWVsZHModGFibGVEZWYuYW5ub3RhdGlvbi5lbnRpdHlUeXBlTmFtZSk7XG5cdFx0XHRpZiAocmVjb21tZW5kYXRpb25PdXRwdXRQcm9wZXJ0aWVzICYmIHJlY29tbWVuZGF0aW9uT3V0cHV0UHJvcGVydGllcy5sZW5ndGggPiAwICYmIG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWxlY3QgPSBvQmluZGluZ0luZm8ucGFyYW1ldGVycz8uJHNlbGVjdD8uY29uY2F0KFwiLFwiLCByZWNvbW1lbmRhdGlvbk91dHB1dFByb3BlcnRpZXMuam9pbigpKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0aGUgY2FyZHMgd2hlbiB0aGUgYmluZGluZyBpcyByZWZyZXNoZWQuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgbWRjIHRhYmxlIGNvbnRyb2wuXG5cdCAqL1xuXHRfdXBkYXRlQXZhaWxhYmxlQ2FyZHM6IGFzeW5jIGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICh0YWJsZUFQSS5nZXRQYWdlQ29udHJvbGxlcigpLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpPy5jb252ZXJ0ZXJUeXBlID09PSBcIkxpc3RSZXBvcnRcIikge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGFibGVBUEk/LmdldFBhZ2VDb250cm9sbGVyKCk/LmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0Y29uc3QgY2FyZHM6IFdyYXBwZWRDYXJkW10gPSBbXTtcblx0XHRcdGF3YWl0IHRhYmxlQVBJLmNvbGxlY3RBdmFpbGFibGVDYXJkcyhjYXJkcyk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aW9uTWFuYWdlciA9IG5ldyBDb2xsYWJvcmF0aW9uTWFuYWdlcigpO1xuXHRcdFx0Y29uc3QgY2FyZE9iamVjdCA9IGNvbGxhYm9yYXRpb25NYW5hZ2VyLnVwZGF0ZUNhcmRzKGNhcmRzKTtcblx0XHRcdGNvbnN0IHBhcmVudEFwcElkID0gYXBwQ29tcG9uZW50LmdldElkKCk7XG5cdFx0XHRhcHBDb21wb25lbnQuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCkuYWRkQ2FyZHNUb0NvbGxhYm9yYXRpb25NYW5hZ2VyKGNhcmRPYmplY3QsIHBhcmVudEFwcElkKTtcblx0XHRcdGFwcENvbXBvbmVudC5nZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UoKS5zaGFyZUF2YWlsYWJsZUNhcmRzKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGUgaG9vayBpbXBsZW1lbnRlZCBieSBNREMgdGhhdCB3ZSBjYW4gb3ZlcnJpZGUuXG5cdCAqIFRoaXMgYWxsb3dzIHVzIHRvIGRlZmluZSBwcm9wZXJ0aWVzIHRvIGJlIHJlcXVlc3RlZCBpbiB0aGUgTURDIHRhYmxlIChNYWluIGNhc2UgaXMgZm9yIHRoZSBhbmFseXRpY2FsIHRhYmxlKS5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSBtZGMgdGFibGUgY29udHJvbC5cblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZSB0byBiZSByZXF1ZXN0ZWQuXG5cdCAqL1xuXHRnZXRJblJlc3VsdFByb3BlcnR5S2V5czogZnVuY3Rpb24gKHRhYmxlOiBNRENUYWJsZSk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICh0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCkge1xuXHRcdFx0Y29uc3QgYWxsS2tleXNSZXF1ZXN0ZWQgPSB0aGlzLmNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZCh0YWJsZUFQSSk7XG5cdFx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdC8vIGlmIGEgcm93cHJlc3MgaXMgb3ZlcnJpZGRlbiwgd2UgIHNob3VsZCBlbmFibGUgdGhlIG5hdmlnYXRpb24gYXQgdGhlIG5vZGUgbGV2ZWxcblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFwiaXNOb2RlTGV2ZWxOYXZpZ2FibGVcIiwgdGFibGVBUEkub3ZlcnJpZGVSb3dQcmVzcyA/IHRydWUgOiBhbGxLa2V5c1JlcXVlc3RlZCk7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRPYmplY3Qua2V5cyh0YWJsZUFQSS50YWJsZURlZmluaXRpb24ucmVxdWVzdEF0TGVhc3QpXG5cdFx0XHRcdFx0Ly8gZm9yIGFuYWx5dGljIHRhYmxlcyB3aXRoIGFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwgd2Ugc2hvdWxkIG5vdCByZXF1ZXN0IHRoZSBzZW1hbnRpY0tleSBleHBlY3RlZCB3aGVuIGFsbCBrZXlzIGFyZSByZXF1ZXN0ZWQgLT4gIGl0IHdpbGwgcGVybWl0cyB0byBuYXZpZ2F0ZSBmcm9tIGEgbm9kZSBsZXZlbCB3aGVuIHNlbWFudGljS2V5IGFyZSBlbmFibGVkXG5cdFx0XHRcdFx0Ly8gcmVzdHJpY3Rpb24gYXJlIGFsc28gZXhjbHVkZWQgYXMgd2UgY2Fubm90IGRlc3Rpbmd1aXNoIGJldHdlZW4gYSBub2RlIGFuZCBhIGFnZ3JlZ2F0aW9uIGxldmVsXG5cblx0XHRcdFx0XHQuZmlsdGVyKChmaWVsZE5hbWU6IHN0cmluZykgPT5cblx0XHRcdFx0XHRcdCFhbGxLa2V5c1JlcXVlc3RlZFxuXHRcdFx0XHRcdFx0XHQ/IHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5yZXF1ZXN0QXRMZWFzdFtmaWVsZE5hbWVdLnNvbWUoXG5cdFx0XHRcdFx0XHRcdFx0XHQob3JpZ2luKSA9PiBvcmlnaW4gIT09IFwicmVzdHJpY3Rpb25cIiAmJiBvcmlnaW4gIT09IFwic2VtYW50aWNLZXlcIlxuXHRcdFx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHRcdFx0OiB0cnVlXG5cdFx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5yZXF1ZXN0QXRMZWFzdCA/PyB7fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGFsbCBrZXlzKCkgZXhjZXB0ZWQgSXNBY3RpdmVFbnRpdHkpIGFyZSByZXF1ZXN0ZWQgaW4gdGhlIHRhYmxlLlxuXHQgKiBAcGFyYW0gdGFibGVBUEkgVGhlIHRhYmxlIEFQSVxuXHQgKiBAcmV0dXJucyAgVHJ1ZSBpZiBhbGwga2V5cyBhcmUgcmVxdWVzdGVkLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdGNoZWNrQWxsS2V5c0FyZVJlcXVlc3RlZDogZnVuY3Rpb24gKHRhYmxlQVBJOiBUYWJsZUFQSSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHRhYmxlID0gdGFibGVBUEkuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IGFsbENvbHVtbnMgPSB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zIGFzIChUYWJsZUNvbHVtbiAmIHsgaXNLZXk6IGJvb2xlYW47IHJlbGF0aXZlUGF0aDogc3RyaW5nIH0pW107XG5cdFx0Y29uc3Qga2V5UHJvcGVydHlOYW1lcyA9IGFsbENvbHVtbnNcblx0XHRcdC5maWx0ZXIoKGMpID0+IGMuaXNLZXkgJiYgYy5yZWxhdGl2ZVBhdGggJiYgYy5yZWxhdGl2ZVBhdGggIT09IFwiSXNBY3RpdmVFbnRpdHlcIilcblx0XHRcdC5tYXAoKGMpID0+IGMucmVsYXRpdmVQYXRoKTtcblxuXHRcdGNvbnN0IGRpc3BsYXllZENvbHVtbnMgPSB0YWJsZVxuXHRcdFx0LmdldENvbHVtbnMoKVxuXHRcdFx0Lm1hcCgoY29sdW1uKSA9PiB0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gY29sdW1uLmdldFByb3BlcnR5S2V5KCkpKTtcblxuXHRcdC8vIFN0b3JlIGFsbCBwcm9wZXJ0aWVzIHJlZmVyZW5jZWQgYnkgZGlzcGxheWVkIGNvbHVtbnMgaW4gYSBTZXRcblx0XHRjb25zdCByZWZlcmVuY2VkUHJvcGVydHlQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGZ1bmN0aW9uIHByb2Nlc3NDb2x1bW4oY29sOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0XHRcdC8vIEFkZCB0aGUgcHJvcGVydHkgbmFtZSBmcm9tIGNvbHVtbiBpdHNlbGYgaWYgaXQncyBub3QgYSBjb21wbGV4IHByb3BlcnR5SW5mb1xuXHRcdFx0aWYgKGNvbC5yZWxhdGl2ZVBhdGggJiYgY29sLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZWZlcmVuY2VkUHJvcGVydHlQYXRocy5hZGQoY29sLnJlbGF0aXZlUGF0aCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0aGUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHJlZmVyZW5jZWQgYnkgdGhlIGNvbHVtblxuXHRcdFx0Y29sLmV4dGVuc2lvbj8uYWRkaXRpb25hbFByb3BlcnRpZXM/LmZvckVhY2goKGFkZGl0aW9uYWxDb2x1bW5OYW1lKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFkZGl0aW9uYWxDb2x1bW4gPSBhbGxDb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gYWRkaXRpb25hbENvbHVtbk5hbWUpO1xuXHRcdFx0XHRpZiAoYWRkaXRpb25hbENvbHVtbj8ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRcdFx0cmVmZXJlbmNlZFByb3BlcnR5UGF0aHMuYWRkKGFkZGl0aW9uYWxDb2x1bW4ucmVsYXRpdmVQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGRpc3BsYXllZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0XHRpZiAoIWNvbHVtbikge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBQcm9jZXNzIHRoZSBjb2x1bW4gaXRzZWxmXG5cdFx0XHRwcm9jZXNzQ29sdW1uKGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pO1xuXG5cdFx0XHQvLyBQcm9jZXNzIHRoZSBjb2x1bW5zIHJlZmVyZW5jZWQgYnkgdGhlIGNvbHVtblxuXHRcdFx0Y29sdW1uLnByb3BlcnR5SW5mb3M/LmZvckVhY2goKHJlbGF0ZWRDb2x1bW5OYW1lKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlbGF0ZWRDb2x1bW4gPSBhbGxDb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gcmVsYXRlZENvbHVtbk5hbWUpO1xuXHRcdFx0XHRpZiAocmVsYXRlZENvbHVtbikge1xuXHRcdFx0XHRcdHByb2Nlc3NDb2x1bW4ocmVsYXRlZENvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBrZXlQcm9wZXJ0eU5hbWVzLmV2ZXJ5KChwcm9wTmFtZSkgPT4gcHJvcE5hbWUgJiYgcmVmZXJlbmNlZFByb3BlcnR5UGF0aHMuaGFzKHByb3BOYW1lKSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzZWFyY2ggcXVlcnkgZm9yIGFuYWx5dGljYWwgYW5kIG5vbiBhbmFseXRpY2FsIG9kYXRhTGlzdEJpbmRpbmcuXG5cdCAqIEBwYXJhbSBiaW5kaW5nIFRoZSBvRGF0YUxpc3RCaW5kaW5nIGluc3RhbmNlLlxuXHQgKiBAcmV0dXJucyBUaGUgc2VhcmNoIHF1ZXJ5IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cblx0ICovXG5cdGdldFNlYXJjaFF1ZXJ5OiBmdW5jdGlvbiAoYmluZGluZzogT0RhdGFMaXN0QmluZGluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgYWdncmVnYXRpb24gPSBiaW5kaW5nLmdldEFnZ3JlZ2F0aW9uPy4oKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYWdncmVnYXRpb24/LnNlYXJjaCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBGb3IgYW5hbHl0aWNhbCB0YWJsZXMsIHRoZSBzZWFyY2ggcXVlcnkgaXMgc3RvcmVkIGluIHRoZSBhZ2dyZWdhdGlvblxuXHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uLnNlYXJjaCBhcyBzdHJpbmc7XG5cdFx0fVxuXHRcdC8vIElmIG5vdCBmb3VuZCBpbiBhZ2dyZWdhdGlvbiwgY2hlY2sgdGhlIHF1ZXJ5IG9wdGlvbnNcblx0XHRyZXR1cm4gYmluZGluZy5nZXRRdWVyeU9wdGlvbnNGcm9tUGFyYW1ldGVycygpLiRzZWFyY2g7XG5cdH0sXG5cdHVwZGF0ZUJpbmRpbmc6IGZ1bmN0aW9uICh0YWJsZTogTURDVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8sIGJpbmRpbmc/OiBPRGF0YUxpc3RCaW5kaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRjb25zdCBiSXNTdXNwZW5kZWQgPSB0YWJsZUFQST8uZ2V0UHJvcGVydHkoXCJiaW5kaW5nU3VzcGVuZGVkXCIpO1xuXHRcdGlmICghYklzU3VzcGVuZGVkKSB7XG5cdFx0XHQvLyBpZiB0aGUgcm93QmluZGluZ0luZm8gaGFzIGEgJCRnZXRLZWVwQWxpdmVDb250ZXh0IHBhcmFtZXRlciB3ZSBuZWVkIHRvIGNoZWNrIGl0IGlzIHRoZSBvbmx5IFRhYmxlIHdpdGggc3VjaCBhXG5cdFx0XHQvLyBwYXJhbWV0ZXIgZm9yIHRoZSBjb2xsZWN0aW9uTWV0YVBhdGhcblx0XHRcdGlmIChiaW5kaW5nSW5mby5wYXJhbWV0ZXJzPy4kJGdldEtlZXBBbGl2ZUNvbnRleHQgPT09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvblBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KHRhYmxlLCBcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpID8/IFwiXCI7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0YWJsZS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdFx0Y29uc3Qga2VwdEFsaXZlTGlzdHMgPSBpbnRlcm5hbE1vZGVsPy5nZXRPYmplY3QoXCIva2VwdEFsaXZlTGlzdHNcIikgPz8ge307XG5cdFx0XHRcdGlmICgha2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdKSB7XG5cdFx0XHRcdFx0a2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdID0gdGFibGUuZ2V0SWQoKTtcblx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsPy5zZXRQcm9wZXJ0eShcIi9rZXB0QWxpdmVMaXN0c1wiLCBrZXB0QWxpdmVMaXN0cyk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoa2VwdEFsaXZlTGlzdHNbY29sbGVjdGlvblBhdGhdICE9PSB0YWJsZS5nZXRJZCgpKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCRnZXRLZWVwQWxpdmVDb250ZXh0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGxldCBuZWVkTWFudWFsUmVmcmVzaCA9IGZhbHNlO1xuXHRcdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRjb25zdCBtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSA9IFwicGVuZGluZ01hbnVhbEJpbmRpbmdVcGRhdGVcIjtcblx0XHRcdGNvbnN0IHBlbmRpbmdNYW51YWxVcGRhdGUgPSBpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShtYW51YWxVcGRhdGVQcm9wZXJ0eUtleSkgYXMgYm9vbGVhbjtcblx0XHRcdGNvbnN0IG5ld1NvcnRlcnMgPSBKU09OLnN0cmluZ2lmeShiaW5kaW5nSW5mby5zb3J0ZXIgPz8gW10pO1xuXG5cdFx0XHRpZiAoYmluZGluZykge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogTWFudWFsIHJlZnJlc2ggaWYgZmlsdGVycyBhcmUgbm90IGNoYW5nZWQgYnkgYmluZGluZy5yZWZyZXNoKCkgc2luY2UgdXBkYXRpbmcgdGhlIGJpbmRpbmdJbmZvXG5cdFx0XHRcdCAqIGlzIG5vdCBlbm91Z2ggdG8gdHJpZ2dlciBhIGJhdGNoIHJlcXVlc3QuXG5cdFx0XHRcdCAqIFJlbW92aW5nIGNvbHVtbnMgY3JlYXRlcyBvbmUgYmF0Y2ggcmVxdWVzdCB0aGF0IHdhcyBub3QgZXhlY3V0ZWQgYmVmb3JlXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXc/LmdldFZpZXdEYXRhKCkgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3M7XG5cdFx0XHRcdGNvbnN0IG9sZEZpbHRlcnMgPSBiaW5kaW5nLmdldEZpbHRlcnMoXCJBcHBsaWNhdGlvblwiKTtcblx0XHRcdFx0Y29uc3QgcHJldmlvdXNTb3J0ZXJzID0gaW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoUFJFVklPVVNfU09SVEVSUykgPz8gXCJbXVwiO1xuXG5cdFx0XHRcdGNvbnN0IGZpbHRlck5vdENoYW5nZWQgPVxuXHRcdFx0XHRcdCgoYmluZGluZ0luZm8uZmlsdGVycyA9PT0gbnVsbCAmJiBvbGRGaWx0ZXJzLmxlbmd0aCA9PT0gMCkgfHwgLy8gb24gYW5hbHl0aWNhbCB0YWJsZXMsIHRoZSBmaWx0ZXJzIGFyZSBzZXQgdG8gbnVsbCB3aGVuIG5vIGZpbHRlcnNcblx0XHRcdFx0XHRcdGRlZXBFcXVhbChiaW5kaW5nSW5mby5maWx0ZXJzLCBvbGRGaWx0ZXJzWzBdKSkgJiZcblx0XHRcdFx0XHRuZXdTb3J0ZXJzID09PSBwcmV2aW91c1NvcnRlcnMgJiZcblx0XHRcdFx0XHRiaW5kaW5nSW5mby5wYXRoID09PSBiaW5kaW5nLmdldFBhdGgoKSAmJiAvLyBUaGUgcGF0aCBjYW4gYmUgY2hhbmdlZCBpbiBjYXNlIG9mIGEgcGFyYW1ldHJpemVkIGVudGl0eVxuXHRcdFx0XHRcdHRoaXMuZ2V0U2VhcmNoUXVlcnkoYmluZGluZykgPT09IGJpbmRpbmdJbmZvPy5wYXJhbWV0ZXJzPy4kc2VhcmNoO1xuXHRcdFx0XHRjb25zdCBMUk11bHRpVmlld0VuYWJsZWQgPSAhIXZpZXdEYXRhLnZpZXdzO1xuXG5cdFx0XHRcdG5lZWRNYW51YWxSZWZyZXNoID1cblx0XHRcdFx0XHRmaWx0ZXJOb3RDaGFuZ2VkICYmXG5cdFx0XHRcdFx0KGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KFNFQVJDSF9IQVNfQkVFTl9GSVJFRCkgfHwgLy8gY2hlY2sgaWYgdGhlIHNlYXJjaCBoYXMgYmVlbiB0cmlnZ2VyZWRcblx0XHRcdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCkgfHwgLy8gY2hlY2sgaWYgYSBjb2x1bW4gaGFzIGJlZW4gYWRkZWRcblx0XHRcdFx0XHRcdExSTXVsdGlWaWV3RW5hYmxlZCkgJiYgLy8gaWYgdGhlIG11bHRpIHZpZXcgaXMgZW5hYmxlZCB0aGUgcmVxdWVzdCBzaG91bGQgYmUgcmVmcmVzaGVkIGFzIHdlIGRvbid0IGtub3duIGlmIHRoZSBjb250ZW50IG9mIHRoZSB0YWJsZSBpcyBvdXRkYXRlZCBkdWUgdG8gYW4gYWN0aW9uIG9uIGFub3RoZXIgdGFibGVcblx0XHRcdFx0XHQhcGVuZGluZ01hbnVhbFVwZGF0ZTtcblx0XHRcdH1cblx0XHRcdC8vIENsZWFudXAgZ3JvdXBDb25kaXRpb25zIGFuZCBhZ2dyZWdhdGVDb25kaXRpb25zIGlmIHRoZXkgZG9uJ3QgbWFrZSBzZW5zZVxuXHRcdFx0aWYgKHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUFuYWx5dGljcyAhPT0gdHJ1ZSkge1xuXHRcdFx0XHQvLyBBZ2dyZWdhdGUgY29uZGl0aW9ucyBuZXZlciBtYWtlIHNlbnNlIG91dHNpZGUgb2YgYW4gYW5hbHl0aWNhbCB0YWJsZVxuXHRcdFx0XHR0YWJsZS5zZXRBZ2dyZWdhdGVDb25kaXRpb25zKCk7XG5cblx0XHRcdFx0Ly8gR3JvdXAgY29uZGl0aW9ucyBkb24ndCBtYWtlIHNlbnNlIGluIGEgVHJlZSBvciBHcmlkIHRhYmxlXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiR3JpZFRhYmxlXCIgfHxcblx0XHRcdFx0XHR0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGFibGUuc2V0R3JvdXBDb25kaXRpb25zKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdFRhYmxlRGVsZWdhdGVCYXNlLnVwZGF0ZUJpbmRpbmcuYXBwbHkodGhpcywgW3RhYmxlLCBiaW5kaW5nSW5mbywgYmluZGluZ10pO1xuXHRcdFx0Ly8gd2Ugc3RvcmUgdGhlIHRhYmxlIGJpbmRpbmcgaW5mbyB0aGF0IHdhcyB1c2VkIHRvIGJpbmQgdGhlIHRhYmxlIGluIHRoZSB0YWJsZSBBUElcblx0XHRcdC8vIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhZnRlciB0aGUgY2FsbCB0byBUYWJsZURlbGVnYXRlQmFzZS51cGRhdGVCaW5kaW5nIG90aGVyIHdpc2Ugd2UgZG9uJ3QgZ2V0IHRoZSBhZ2dyZWdhdGUgcGFyYW1ldGVyc1xuXHRcdFx0Ly8gb3RoZXJ3aXNlIHRoZXJlIGlzIG5vIHdheSB0byByZXRyaWV2ZSBzb3J0ZXJzIGFkZGVkIGluIHRoZSBvbkJlZm9yZVJlYmluZFRhYmxlIGV2ZW50XG5cdFx0XHR0YWJsZUFQSS5zZXRUYWJsZUJpbmRpbmdJbmZvKGJpbmRpbmdJbmZvKTtcblx0XHRcdC8vIHdlIG1ha2UgdGhlIGNhbGwgdG8gdXBkYXRlIHRoZSBkb3dubG9hZCB1cmwgYnV0IGRvIG5vdCBhd2FpdCBpdFxuXHRcdFx0dGFibGVBUEkuc2V0RG93bmxvYWRVcmwoKTtcblxuXHRcdFx0dGFibGUuZmlyZUV2ZW50KFwiYmluZGluZ1VwZGF0ZWRcIik7XG5cdFx0XHRpZiAobmVlZE1hbnVhbFJlZnJlc2ggJiYgdGFibGUuZ2V0RmlsdGVyKCkgJiYgYmluZGluZykge1xuXHRcdFx0XHRiaW5kaW5nXG5cdFx0XHRcdFx0LnJlcXVlc3RSZWZyZXNoKGJpbmRpbmcuZ2V0R3JvdXBJZCgpKVxuXHRcdFx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCBmYWxzZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVmcmVzaGluZyB0aGUgdGFibGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KG1hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCB0cnVlKTtcblx0XHRcdH1cblx0XHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KFNFQVJDSF9IQVNfQkVFTl9GSVJFRCwgZmFsc2UpO1xuXHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoQ09MVU1OX0hBU19CRUVOX0FEREVELCBmYWxzZSk7XG5cdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShQUkVWSU9VU19TT1JURVJTLCBuZXdTb3J0ZXJzKTtcblxuXHRcdFx0Ly9mb3IgVHJlZXRhYmxlLCBpdCdzIG5lY2Vzc2FyeSB0byBjbGVhciB0aGUgcGFzdGFibGVDb250ZXh0cyBzaW5jZSB0aGUgYmluZGluZyBkZXN0cm95cyBwcmV2aW91cyBjb250ZXh0cy5cblx0XHRcdGlmICh0YWJsZUFQSS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdFx0aW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoXCJwYXN0YWJsZUNvbnRleHRzXCIsIFtdKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYXR0YWNoZWRFdmVudHMgPSB0YWJsZUFQSS5zdG9yZWRFdmVudHMgPz8gW107XG5cdFx0XHRhdHRhY2hlZEV2ZW50cy5mb3JFYWNoKCh7IGV2ZW50SWQsIGNhbGxiYWNrLCBsaXN0ZW5lciwgZGF0YSB9KSA9PiB7XG5cdFx0XHRcdHRhYmxlLmdldFJvd0JpbmRpbmcoKT8uYXR0YWNoRXZlbnQoZXZlbnRJZCwgZGF0YSwgY2FsbGJhY2ssIGxpc3RlbmVyKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0YWJsZUFQST8uc2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIiwgYklzU3VzcGVuZGVkKTtcblx0fSxcblxuXHRfY29tcHV0ZVJvd0JpbmRpbmdJbmZvRnJvbVRlbXBsYXRlOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSk6IENvbGxlY3Rpb25CaW5kaW5nSW5mbyB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSBvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3Qgcm93QmluZGluZ0luZm8gPSB0YWJsZUFQSS5nZXRUYWJsZVRlbXBsYXRlQmluZGluZ0luZm8oKTtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGxldCB0YWJsZUNhbkJlSW5JbmxpbmVFZGl0ID0gZmFsc2U7XG5cdFx0aWYgKFxuXHRcdFx0YmluZGluZ0NvbnRleHQgPT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0b1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwidWlcIik/LmdldFByb3BlcnR5KFwiaXNFZGl0YWJsZVwiKSA9PT0gZmFsc2UgJiZcblx0XHRcdG9UYWJsZS5nZXRNb2RlbChcInZpZXdEYXRhXCIpPy5nZXRQcm9wZXJ0eShcIi9pc0lubGluZUVkaXRFbmFibGVkXCIpXG5cdFx0KSB7XG5cdFx0XHR0YWJsZUNhbkJlSW5JbmxpbmVFZGl0ID0gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0KGJpbmRpbmdDb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKT8uZ2V0QmluZGluZygpLmdldFVwZGF0ZUdyb3VwSWQoKSA9PSBDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSURcblx0XHQpIHtcblx0XHRcdHRhYmxlQ2FuQmVJbklubGluZUVkaXQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh0YWJsZUNhbkJlSW5JbmxpbmVFZGl0KSB7XG5cdFx0XHRyb3dCaW5kaW5nSW5mby5wYXJhbWV0ZXJzID8/PSB7fTtcblx0XHRcdHJvd0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJCR1cGRhdGVHcm91cElkID0gQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEO1xuXHRcdH1cblxuXHRcdHJldHVybiByb3dCaW5kaW5nSW5mbztcblx0fSxcblx0X2ludGVybmFsVXBkYXRlQmluZGluZ0luZm86IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBvQmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbykge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdE9iamVjdC5hc3NpZ24ob0JpbmRpbmdJbmZvLCB0aGlzLl9jb21wdXRlUm93QmluZGluZ0luZm9Gcm9tVGVtcGxhdGUob1RhYmxlKSk7XG5cdFx0LyoqXG5cdFx0ICogQmluZGluZyBpbmZvIG1pZ2h0IGJlIHN1c3BlbmRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlIGZpcnN0IGJpbmRSb3dzIGlzIGNhbGxlZDpcblx0XHQgKiBUbyBhdm9pZCBkdXBsaWNhdGUgcmVxdWVzdHMgYnV0IHN0aWxsIGhhdmUgYSBiaW5kaW5nIHRvIGNyZWF0ZSBuZXcgZW50cmllcy5cdFx0XHRcdCAqXG5cdFx0ICogQWZ0ZXIgdGhlIGluaXRpYWwgYmluZGluZyBzdGVwLCBmb2xsb3cgdXAgYmluZGluZ3Mgc2hvdWxkIG5vIGxvbmdlciBiZSBzdXNwZW5kZWQuXG5cdFx0ICovXG5cdFx0aWYgKG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5zdXNwZW5kZWQgPSBmYWxzZTtcblx0XHR9XG5cdFx0Ly8gVGhlIHByZXZpb3VzbHkgYWRkZWQgaGFuZGxlciBmb3IgdGhlIGV2ZW50ICdkYXRhUmVjZWl2ZWQnIGlzIG5vdCBhbnltb3JlIHRoZXJlXG5cdFx0Ly8gc2luY2UgdGhlIGJpbmRpbmdJbmZvIGlzIHJlY3JlYXRlZCBmcm9tIHNjcmF0Y2ggc28gd2UgbmVlZCB0byBzZXQgdGhlIGZsYWcgdG8gZmFsc2UgaW4gb3JkZXJcblx0XHQvLyB0byBhZ2FpbiBhZGQgdGhlIGhhbmRsZXIgb24gdGhpcyBldmVudCBpZiBuZWVkZWRcblx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkYXRhUmVjZWl2ZWRBdHRhY2hlZFwiLCBmYWxzZSk7XG5cdFx0fVxuXG5cdFx0bGV0IG9GaWx0ZXI7XG5cdFx0Y29uc3Qgb0ZpbHRlckluZm8gPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8ob1RhYmxlKTtcblx0XHQvLyBQcmVwYXJlIGJpbmRpbmcgaW5mbyB3aXRoIGZpbHRlci9zZWFyY2ggcGFyYW1ldGVyc1xuXHRcdGlmIChvRmlsdGVySW5mby5maWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdG9GaWx0ZXIgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogb0ZpbHRlckluZm8uZmlsdGVycywgYW5kOiB0cnVlIH0pO1xuXHRcdH1cblx0XHRpZiAob0ZpbHRlckluZm8uYmluZGluZ1BhdGgpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5wYXRoID0gb0ZpbHRlckluZm8uYmluZGluZ1BhdGg7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0RhdGFTdGF0ZUluZGljYXRvciA9IG9UYWJsZS5nZXREYXRhU3RhdGVJbmRpY2F0b3IoKTtcblx0XHRpZiAob0RhdGFTdGF0ZUluZGljYXRvciAmJiBvRGF0YVN0YXRlSW5kaWNhdG9yLmlzRmlsdGVyaW5nKCkpIHtcblx0XHRcdC8vIEluY2x1ZGUgZmlsdGVycyBvbiBtZXNzYWdlU3RyaXBcblx0XHRcdGlmICgob0JpbmRpbmdJbmZvLmZpbHRlcnMgYXMgdW5rbm93biBhcyBGaWx0ZXJbXSkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRvRmlsdGVyID0gbmV3IEZpbHRlcih7IGZpbHRlcnM6IChvQmluZGluZ0luZm8uZmlsdGVycyBhcyB1bmtub3duIGFzIEZpbHRlcltdKS5jb25jYXQob0ZpbHRlckluZm8uZmlsdGVycyksIGFuZDogdHJ1ZSB9KTtcblx0XHRcdFx0dGhpcy51cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeShvQmluZGluZ0luZm8sIG9GaWx0ZXJJbmZvLCBvRmlsdGVyKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy51cGRhdGVCaW5kaW5nSW5mb1dpdGhTZWFyY2hRdWVyeShvQmluZGluZ0luZm8sIG9GaWx0ZXJJbmZvLCBvRmlsdGVyKTtcblx0XHR9XG5cblx0XHR0aGlzLmFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXMob1RhYmxlLCBvQmluZGluZ0luZm8pO1xuXHR9LFxuXG5cdHVwZGF0ZUJpbmRpbmdJbmZvV2l0aFNlYXJjaFF1ZXJ5OiBmdW5jdGlvbiAoYmluZGluZ0luZm86IENvbGxlY3Rpb25CaW5kaW5nSW5mbywgZmlsdGVySW5mbzogSW50ZXJuYWxCaW5kaW5nSW5mbywgZmlsdGVyPzogRmlsdGVyKSB7XG5cdFx0YmluZGluZ0luZm8uZmlsdGVycyA9IGZpbHRlcjtcblx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzID8/PSB7fTtcblx0XHRpZiAoZmlsdGVySW5mby5zZWFyY2gpIHtcblx0XHRcdGJpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCA9IENvbW1vblV0aWxzLm5vcm1hbGl6ZVNlYXJjaFRlcm0oZmlsdGVySW5mby5zZWFyY2gpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRiaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2ggPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogSWYgc3BlY2lmaWVkIGluIHRoZSBwYXlsb2FkLCBhZGRzIGEgZmlsdGVyIHRvIGRpc3BsYXkgb25seSBhY3RpdmUgZW50aXRpZXMuXG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcGFyYW0gYmluZGluZ0luZm9cblx0ICovXG5cdGFkZEZpbHRlck9uQWN0aXZlRW50aXRpZXM6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGJpbmRpbmdJbmZvOiBDb2xsZWN0aW9uQmluZGluZ0luZm8pIHtcblx0XHRjb25zdCBwYXlsb2FkID0gdGFibGUuZ2V0UGF5bG9hZCgpIGFzIHsgZmlsdGVyT25BY3RpdmVFbnRpdGllcz86IGJvb2xlYW4gfTtcblxuXHRcdGlmIChwYXlsb2FkPy5maWx0ZXJPbkFjdGl2ZUVudGl0aWVzID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJPbkFjdGl2ZSA9IG5ldyBGaWx0ZXIoeyBwYXRoOiBcIklzQWN0aXZlRW50aXR5XCIsIG9wZXJhdG9yOiBcIkVRXCIsIHZhbHVlMTogdHJ1ZSB9KTtcblx0XHRcdGlmIChiaW5kaW5nSW5mby5maWx0ZXJzKSB7XG5cdFx0XHRcdGJpbmRpbmdJbmZvLmZpbHRlcnMgPSBuZXcgRmlsdGVyKHsgZmlsdGVyczogW2ZpbHRlck9uQWN0aXZlLCBiaW5kaW5nSW5mby5maWx0ZXJzXSwgYW5kOiB0cnVlIH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YmluZGluZ0luZm8uZmlsdGVycyA9IGZpbHRlck9uQWN0aXZlO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIHRlbXBsYXRlIGZyb20gdGhlIGZyYWdtZW50IG9mIGEgc2xvdCBjb2x1bW4uXG5cdCAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjdXN0b20gdGFibGUgY29sdW1uXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSBjdXJyZW50IHZpZXdcblx0ICogQHBhcmFtIG1vZGlmaWVyIFRoZSBjb250cm9sIHRyZWUgbW9kaWZpZXJcblx0ICogQHBhcmFtIHRhYmxlSWQgVGhlIGlkIG9mIHRoZSB1bmRlcmx5aW5nIHRhYmxlXG5cdCAqIEByZXR1cm5zIFRoZSBsb2FkZWQgZnJhZ21lbnRcblx0ICovXG5cdF90ZW1wbGF0ZVNsb3RDb2x1bW5GcmFnbWVudDogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdGNvbHVtbkluZm86IEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4sXG5cdFx0dmlldzogVmlldyxcblx0XHRtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB8IEpzQ29udHJvbFRyZWVNb2RpZmllcixcblx0XHR0YWJsZUlkOiBzdHJpbmdcblx0KTogUHJvbWlzZTxudWxsIHwgQ29udHJvbCB8IENvbnRyb2xbXSB8IEVsZW1lbnQ+IHtcblx0XHRjb25zdCBzbG90Q29sdW1uc1hNTCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoXG5cdFx0XHRqc3gucmVuZGVyQXNYTUwoKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZ2V0U2xvdENvbHVtbih0YWJsZUlkLCBjb2x1bW5JbmZvLCBmYWxzZSkgYXMgdW5rbm93biBhcyBzdHJpbmc7XG5cdFx0XHR9KSxcblx0XHRcdFwidGV4dC94bWxcIlxuXHRcdCk7XG5cdFx0aWYgKCFzbG90Q29sdW1uc1hNTCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3Qgc2xvdFhNTCA9IHNsb3RDb2x1bW5zWE1MLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2xvdFwiKVswXTtcblxuXHRcdGlmIChjb2x1bW5JbmZvLnRlbXBsYXRlKSB7XG5cdFx0XHRpZiAoc2xvdFhNTCkge1xuXHRcdFx0XHRjb25zdCBvVGVtcGxhdGUgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGNvbHVtbkluZm8udGVtcGxhdGUgYXMgc3RyaW5nLCBcInRleHQveG1sXCIpO1xuXHRcdFx0XHRpZiAob1RlbXBsYXRlLmZpcnN0RWxlbWVudENoaWxkICYmIG9UZW1wbGF0ZS5maXJzdEVsZW1lbnRDaGlsZC5ub2RlTmFtZSAhPT0gXCJodG1sXCIpIHtcblx0XHRcdFx0XHRzbG90WE1MLnJlcGxhY2VXaXRoKG9UZW1wbGF0ZS5maXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2xvdFhNTC5yZW1vdmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuZXJyb3IoYFBsZWFzZSBwcm92aWRlIGNvbnRlbnQgaW5zaWRlIHRoaXMgQnVpbGRpbmcgQmxvY2sgQ29sdW1uOiAke2NvbHVtbkluZm8uaGVhZGVyfWApO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3QgcmVzdWx0WE1MID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRzbG90Q29sdW1uc1hNTC5maXJzdEVsZW1lbnRDaGlsZCxcblx0XHRcdHsgbW9kZWxzOiB7fSB9LFxuXHRcdFx0KHZpZXcuZ2V0Q29udHJvbGxlcigpLmdldE93bmVyQ29tcG9uZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8VGVtcGxhdGVDb21wb25lbnQ+KS5nZXRQcmVwcm9jZXNzb3JDb250ZXh0KClcblx0XHQpO1xuXHRcdGlmIChtb2RpZmllcj8udGFyZ2V0cyAhPT0gXCJqc0NvbnRyb2xUcmVlXCIpIHtcblx0XHRcdHJldHVybiByZXN1bHRYTUwuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0fVxuXHRcdHJldHVybiBGcmFnbWVudC5sb2FkKHtcblx0XHRcdHR5cGU6IFwiWE1MXCIsXG5cdFx0XHRkZWZpbml0aW9uOiByZXN1bHRYTUwsXG5cdFx0XHRjb250cm9sbGVyOiB2aWV3LmdldENvbnRyb2xsZXIoKVxuXHRcdH0pIGFzIFByb21pc2U8Q29udHJvbCB8IENvbnRyb2xbXT47XG5cdH0sXG5cblx0X2dldEV4cG9ydEZvcm1hdDogZnVuY3Rpb24gKGRhdGFUeXBlPzogc3RyaW5nKSB7XG5cdFx0c3dpdGNoIChkYXRhVHlwZSkge1xuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlXCI6XG5cdFx0XHRcdHJldHVybiBFeGNlbEZvcm1hdC5nZXRFeGNlbERhdGVmcm9tSlNEYXRlKCk7XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6XG5cdFx0XHRcdHJldHVybiBFeGNlbEZvcm1hdC5nZXRFeGNlbERhdGVUaW1lZnJvbUpTRGF0ZVRpbWUoKTtcblx0XHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRcdHJldHVybiBFeGNlbEZvcm1hdC5nZXRFeGNlbFRpbWVmcm9tSlNUaW1lKCk7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSxcblxuXHRfZ2V0VkhSZWxldmFudEZpZWxkczogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzTWV0YWRhdGFQYXRoOiBzdHJpbmcsIHNCaW5kaW5nUGF0aD86IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0XHRsZXQgYUZpZWxkczogc3RyaW5nW10gPSBbXSxcblx0XHRcdG9EYXRhRmllbGREYXRhID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc01ldGFkYXRhUGF0aCk7XG5cblx0XHRpZiAob0RhdGFGaWVsZERhdGEuJGtpbmQgJiYgb0RhdGFGaWVsZERhdGEuJGtpbmQgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdFx0b0RhdGFGaWVsZERhdGEgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGREZWZhdWx0YCk7XG5cdFx0XHRzTWV0YWRhdGFQYXRoID0gYCR7c01ldGFkYXRhUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdGA7XG5cdFx0fVxuXHRcdHN3aXRjaCAob0RhdGFGaWVsZERhdGEuJFR5cGUpIHtcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCI6XG5cdFx0XHRcdGlmIChvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YWRhdGFQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoYCkuaW5jbHVkZXMoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCIpKSB7XG5cdFx0XHRcdFx0b01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFkYXRhUGF0aH0vVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhYCkuZm9yRWFjaCgob1ZhbHVlOiB1bmtub3duLCBpSW5kZXg6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRcdFx0YUZpZWxkcyA9IGFGaWVsZHMuY29uY2F0KFxuXHRcdFx0XHRcdFx0XHR0aGlzLl9nZXRWSFJlbGV2YW50RmllbGRzKG9NZXRhTW9kZWwsIGAke3NNZXRhZGF0YVBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YS8ke2lJbmRleH1gKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGhcIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoVXJsXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvblwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhBY3Rpb25cIjpcblx0XHRcdFx0YUZpZWxkcy5wdXNoKG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhZGF0YVBhdGh9L1ZhbHVlLyRQYXRoYCkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHQvLyBwcm9wZXJ0eVxuXHRcdFx0XHQvLyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB0byBtYWtlIHN1cmUgVkggcmVsZXZhbnQgZmllbGQgcGF0aCBkbyBub3QgY29udGFpbiB0aGUgYmluZGluZ3BhdGhcblx0XHRcdFx0aWYgKHNCaW5kaW5nUGF0aCAmJiBzTWV0YWRhdGFQYXRoLmluZGV4T2Yoc0JpbmRpbmdQYXRoKSA9PT0gMCkge1xuXHRcdFx0XHRcdGFGaWVsZHMucHVzaChzTWV0YWRhdGFQYXRoLnN1YnN0cmluZyhzQmluZGluZ1BhdGgubGVuZ3RoICsgMSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFGaWVsZHMucHVzaChDb21tb25IZWxwZXIuZ2V0TmF2aWdhdGlvblBhdGgoc01ldGFkYXRhUGF0aCwgdHJ1ZSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGFGaWVsZHM7XG5cdH0sXG5cdF9zZXREcmFmdEluZGljYXRvck9uVmlzaWJsZUNvbHVtbjogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIGFDb2x1bW5zOiBUYWJsZUNvbHVtbltdLCBvQ29sdW1uSW5mbz86IFRhYmxlQ29sdW1uKSB7XG5cdFx0Y29uc3Qgb0ludGVybmFsQmluZGluZ0NvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpZiAoIW9JbnRlcm5hbEJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHNJbnRlcm5hbFBhdGggPSBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgYUNvbHVtbnNXaXRoRHJhZnRJbmRpY2F0b3IgPSBhQ29sdW1ucy5maWx0ZXIoKG9Db2x1bW46IFRhYmxlQ29sdW1uKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fYkNvbHVtbkhhc1Byb3BlcnR5V2l0aERyYWZ0SW5kaWNhdG9yKG9Db2x1bW4pO1xuXHRcdH0pO1xuXHRcdGNvbnN0IGFWaXNpYmxlQ29sdW1ucyA9IG9UYWJsZS5nZXRDb2x1bW5zKCk7XG5cdFx0bGV0IHNBZGRWaXNpYmxlQ29sdW1uTmFtZSwgc1Zpc2libGVDb2x1bW5OYW1lLCBiRm91bmRDb2x1bW5WaXNpYmxlV2l0aERyYWZ0LCBzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvcjtcblx0XHRmb3IgKGNvbnN0IGkgaW4gYVZpc2libGVDb2x1bW5zKSB7XG5cdFx0XHRzVmlzaWJsZUNvbHVtbk5hbWUgPSBhVmlzaWJsZUNvbHVtbnNbaV0uZ2V0UHJvcGVydHlLZXkoKTtcblx0XHRcdGZvciAoY29uc3QgaiBpbiBhQ29sdW1uc1dpdGhEcmFmdEluZGljYXRvcikge1xuXHRcdFx0XHRzQ29sdW1uTmFtZVdpdGhEcmFmdEluZGljYXRvciA9IGFDb2x1bW5zV2l0aERyYWZ0SW5kaWNhdG9yW2pdLm5hbWU7XG5cdFx0XHRcdGlmIChzVmlzaWJsZUNvbHVtbk5hbWUgPT09IHNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0XHRcdFx0YkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9Db2x1bW5JbmZvICYmIG9Db2x1bW5JbmZvLm5hbWUgPT09IHNDb2x1bW5OYW1lV2l0aERyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0XHRcdFx0c0FkZFZpc2libGVDb2x1bW5OYW1lID0gb0NvbHVtbkluZm8ubmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGJGb3VuZENvbHVtblZpc2libGVXaXRoRHJhZnQpIHtcblx0XHRcdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoc0ludGVybmFsUGF0aCArIFNFTUFOVElDS0VZX0hBU19EUkFGVElORElDQVRPUiwgc1Zpc2libGVDb2x1bW5OYW1lKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghYkZvdW5kQ29sdW1uVmlzaWJsZVdpdGhEcmFmdCAmJiBzQWRkVmlzaWJsZUNvbHVtbk5hbWUpIHtcblx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KHNJbnRlcm5hbFBhdGggKyBTRU1BTlRJQ0tFWV9IQVNfRFJBRlRJTkRJQ0FUT1IsIHNBZGRWaXNpYmxlQ29sdW1uTmFtZSk7XG5cdFx0fVxuXHR9LFxuXHRyZW1vdmVJdGVtOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b1RhYmxlOiBVSTVFbGVtZW50IHwgRWxlbWVudCxcblx0XHRvUHJvcGVydHlJbmZvTmFtZTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdFx0bVByb3BlcnR5QmFnOiB7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyOyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9XG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGxldCBkb1JlbW92ZUl0ZW0gPSB0cnVlO1xuXHRcdGlmICghb1Byb3BlcnR5SW5mb05hbWUpIHtcblx0XHRcdC8vIDEuIEFwcGxpY2F0aW9uIHJlbW92ZWQgdGhlIHByb3BlcnR5IGZyb20gdGhlaXIgZGF0YSBtb2RlbFxuXHRcdFx0Ly8gMi4gYWRkSXRlbSBmYWlsZWQgYmVmb3JlIHJldmVydERhdGEgY3JlYXRlZFxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkb1JlbW92ZUl0ZW0pO1xuXHRcdH1cblx0XHRjb25zdCBvTW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXI7XG5cdFx0Y29uc3Qgc0RhdGFQcm9wZXJ0eSA9IGF3YWl0IG9Nb2RpZmllci5nZXRQcm9wZXJ0eTxzdHJpbmc+KG9Qcm9wZXJ0eUluZm9OYW1lLCBcImRhdGFQcm9wZXJ0eVwiKTtcblx0XHRpZiAoc0RhdGFQcm9wZXJ0eSAmJiBzRGF0YVByb3BlcnR5LmluY2x1ZGVzICYmIHNEYXRhUHJvcGVydHkuaW5jbHVkZXMoXCJJbmxpbmVYTUxcIikpIHtcblx0XHRcdG9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvVGFibGUsIFwiZGVwZW5kZW50c1wiLCBvUHJvcGVydHlJbmZvTmFtZSk7XG5cdFx0XHRkb1JlbW92ZUl0ZW0gPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKChvVGFibGUgYXMgVUk1RWxlbWVudCkuaXNBICYmIG9Nb2RpZmllci50YXJnZXRzID09PSBcImpzQ29udHJvbFRyZWVcIikge1xuXHRcdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMob01vZGlmaWVyLCBvVGFibGUsIHRoaXMuZ2V0Q29sdW1uc0ZvcihvVGFibGUgYXMgVGFibGUpKTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkb1JlbW92ZUl0ZW0pO1xuXHR9LFxuXHRfZ2V0TWV0YU1vZGVsOiBmdW5jdGlvbiAobVByb3BlcnR5QmFnOiB7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50IH0pIHtcblx0XHRyZXR1cm4gbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdH0sXG5cdF9zZXREcmFmdEluZGljYXRvclN0YXR1czogZnVuY3Rpb24gKFxuXHRcdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcixcblx0XHRvVGFibGU6IFVJNUVsZW1lbnQgfCBFbGVtZW50LFxuXHRcdGFDb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRcdG9Db2x1bW5JbmZvPzogVGFibGVDb2x1bW5cblx0KSB7XG5cdFx0aWYgKG9Nb2RpZmllci50YXJnZXRzID09PSBcImpzQ29udHJvbFRyZWVcIikge1xuXHRcdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JPblZpc2libGVDb2x1bW4ob1RhYmxlIGFzIFRhYmxlLCBhQ29sdW1ucywgb0NvbHVtbkluZm8pO1xuXHRcdH1cblx0fSxcblx0X2dldEdyb3VwSWQ6IGZ1bmN0aW9uIChzUmV0cmlldmVkR3JvdXBJZDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHNSZXRyaWV2ZWRHcm91cElkIHx8IHVuZGVmaW5lZDtcblx0fSxcblx0X2luc2VydEFnZ3JlZ2F0aW9uOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b1ZhbHVlSGVscDogRWxlbWVudCB8IFVJNUVsZW1lbnQgfCBFbGVtZW50W10gfCBVSTVFbGVtZW50W10sXG5cdFx0b01vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyLFxuXHRcdG9UYWJsZTogRWxlbWVudCB8IFVJNUVsZW1lbnRcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKG9WYWx1ZUhlbHApIHtcblx0XHRcdHJldHVybiBvTW9kaWZpZXIuaW5zZXJ0QWdncmVnYXRpb24ob1RhYmxlLCBcImRlcGVuZGVudHNcIiwgb1ZhbHVlSGVscCwgMCk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fSxcblxuXHQvKipcblx0ICogSW52b2tlZCB3aGVuIGEgY29sdW1uIGlzIGFkZGVkIHVzaW5nIHRoZSB0YWJsZSBwZXJzb25hbGl6YXRpb24gZGlhbG9nLlxuXHQgKiBAcGFyYW0gb1RhYmxlIEluc3RhbmNlIG9mIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIHNQcm9wZXJ0eUluZm9OYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5IGZvciB3aGljaCB0aGUgY29sdW1uIGlzIGFkZGVkXG5cdCAqIEBwYXJhbSBtUHJvcGVydHlCYWcgSW5zdGFuY2Ugb2YgcHJvcGVydHkgYmFnIGZyb20gdGhlIGZsZXhpYmlsaXR5IEFQSVxuXHQgKiBAcGFyYW0gbVByb3BlcnR5QmFnLm1vZGlmaWVyIEluc3RhbmNlIG9mIHRoZSBjb250cm9sIHRyZWUgbW9kaWZpZXJcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgSW5zdGFuY2Ugb2YgdGhlIGFwcCBjb21wb25lbnRcblx0ICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy52aWV3IEluc3RhbmNlIG9mIHRoZSB2aWV3XG5cdCAqIEByZXR1cm5zIE9uY2UgcmVzb2x2ZWQsIGEgdGFibGUgY29sdW1uIGRlZmluaXRpb24gaXMgcmV0dXJuZWRcblx0ICovXG5cdGFkZEl0ZW06IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR0YWJsZTogRWxlbWVudCB8IFVJNUVsZW1lbnQsXG5cdFx0cHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRcdG1Qcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IHZpZXc/OiBGRVZpZXcgfVxuXHQpIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5fZ2V0TWV0YU1vZGVsKG1Qcm9wZXJ0eUJhZyksXG5cdFx0XHRvTW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXIsXG5cdFx0XHRzVGFibGVJZCA9IG9Nb2RpZmllci5nZXRJZCh0YWJsZSksXG5cdFx0XHRhQ29sdW1ucyA9ICh0YWJsZSBhcyBVSTVFbGVtZW50KS5pc0EgPyB0aGlzLmdldENvbHVtbnNGb3IodGFibGUgYXMgVGFibGUpIDogbnVsbCxcblx0XHRcdHRhYmxlQVBJID0gKHRhYmxlIGFzIFRhYmxlKS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRpZiAoIWFDb2x1bW5zKSB7XG5cdFx0XHQvLyBXZSByZXR1cm4gbnVsbCBoZXJlIGJlY2F1c2UgZXZlcnl0aGluZyBzaG91bGQgYXBwbHkgYXQgcnVudGltZVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cblx0XHRjb25zdCBjb2x1bW5JbmZvID0gYUNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbikge1xuXHRcdFx0cmV0dXJuIG9Db2x1bW4ubmFtZSA9PT0gcHJvcGVydHlJbmZvTmFtZTtcblx0XHR9KTtcblx0XHRpZiAoIWNvbHVtbkluZm8pIHtcblx0XHRcdExvZy5lcnJvcihgJHtwcm9wZXJ0eUluZm9OYW1lfSBub3QgZm91bmQgd2hpbGUgYWRkaW5nIGNvbHVtbmApO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0aWYgKGNvbHVtbkluZm8uYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRMb2cud2FybmluZyhgQ29sdW1uIGZvciAke3Byb3BlcnR5SW5mb05hbWV9IG5vdCBhZGRlZCBiZWNhdXNlIGl0J3MgaGlkZGVuYCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRjb25zdCBpbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gKHRhYmxlIGFzIFRhYmxlKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KENPTFVNTl9IQVNfQkVFTl9BRERFRCwgdHJ1ZSk7XG5cdFx0dGhpcy5fc2V0RHJhZnRJbmRpY2F0b3JTdGF0dXMob01vZGlmaWVyLCB0YWJsZSwgYUNvbHVtbnMsIGNvbHVtbkluZm8pO1xuXHRcdGNvbnN0IHNQYXRoID0gYXdhaXQgRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJtZXRhUGF0aFwiLCBvTW9kaWZpZXIpO1xuXHRcdGNvbnN0IG9UYWJsZUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQYXRoISkhO1xuXHRcdC8vIElmIHZpZXcgaXMgbm90IHByb3ZpZGVkIHRyeSB0byBnZXQgaXQgYnkgYWNjZXNzaW5nIHRvIHRoZSBwYXJlbnRhbCBoaWVyYXJjaHlcblx0XHQvLyBJZiBpdCBkb2Vzbid0IHdvcmsgKHRhYmxlIGludG8gYW4gdW5hdHRhY2hlZCBPUCBzZWN0aW9uKSBnZXQgdGhlIHZpZXcgdmlhIHRoZSBBcHBDb21wb25lbnRcblx0XHRjb25zdCB2aWV3ID1cblx0XHRcdG1Qcm9wZXJ0eUJhZy52aWV3IHx8XG5cdFx0XHRDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlIGFzIFVJNUVsZW1lbnQpIHx8XG5cdFx0XHQobVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCA/IENvbW1vblV0aWxzLmdldEN1cnJlbnRQYWdlVmlldyhtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50KSA6IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAoY29sdW1uSW5mby50eXBlID09PSBcIkRlZmF1bHRcIikge1xuXHRcdFx0TG9nLmVycm9yKFwiQ3VzdG9tIGNvbHVtbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgYXJlIG5vdCBzdXBwb3J0ZWQgd2hlbiB1c2luZyBhIHRhYmxlIGJ1aWxkaW5nIGJsb2NrLlwiKTtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkN1c3RvbSBjb2x1bW5zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGFyZSBub3Qgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYSB0YWJsZSBidWlsZGluZyBibG9jay5cIik7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbkluZm8udHlwZSA9PT0gXCJTbG90XCIpIHtcblx0XHRcdHJldHVybiB0aGlzLl90ZW1wbGF0ZVNsb3RDb2x1bW5GcmFnbWVudChjb2x1bW5JbmZvIGFzIEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4sIHZpZXcsIG9Nb2RpZmllciwgc1RhYmxlSWQpO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IFwiQ29tcHV0ZWRcIikge1xuXHRcdFx0Y29uc3QgZW5hYmxlQW5hbHl0aWNzID0gKCh0YWJsZSBhcyBNRENUYWJsZSkuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUFuYWx5dGljcztcblx0XHRcdHJldHVybiBnZXRDb21wdXRlZENvbHVtbihzVGFibGVJZCwgY29sdW1uSW5mbyBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLCBvVGFibGVDb250ZXh0LCBlbmFibGVBbmFseXRpY3MpO1xuXHRcdH1cblxuXHRcdC8vIGZhbGwtYmFja1xuXHRcdGlmICghb01ldGFNb2RlbCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cblx0XHRsZXQgcHJvcGVydHlJbmZvcyA9IHRhYmxlQVBJLmdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MoKTtcblx0XHRpZiAoIXByb3BlcnR5SW5mb3MubGVuZ3RoKSB7XG5cdFx0XHQvLyBJZiB0aGUgcHJvcGVydHlJbmZvcyBhcmUgbm90IGZldGNoZWQgeWV0LCB3ZSBuZWVkIHRvIGZldGNoIHRoZW1cblx0XHRcdC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGUgdGFibGUgaXMgbm90IGNyZWF0ZWQgeWV0XG5cdFx0XHRhd2FpdCB0aGlzLmZldGNoUHJvcGVydGllcyh0YWJsZSBhcyBNRENUYWJsZSk7XG5cdFx0XHRwcm9wZXJ0eUluZm9zID0gdGFibGVBUEkuZ2V0RW5oYW5jZWRGZXRjaGVkUHJvcGVydHlJbmZvcygpO1xuXHRcdH1cblx0XHRjb25zdCBwcm9wZXJ0eUluZm8gPSBwcm9wZXJ0eUluZm9zLmZpbmQoZnVuY3Rpb24gKHByb3BJbmZvOiBFbmhhbmNlZEZFUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRyZXR1cm4gcHJvcEluZm8ubmFtZSA9PT0gcHJvcGVydHlJbmZvTmFtZTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IG9Qcm9wZXJ0eUNvbnRleHQ6IENvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHByb3BlcnR5SW5mbyEuYW5ub3RhdGlvblBhdGgpITtcblxuXHRcdGNvbnN0IGZuVGVtcGxhdGVGcmFnbWVudCA9IGFzeW5jIChcblx0XHRcdG9JblByb3BlcnR5SW5mbzogdW5rbm93bixcblx0XHRcdG9WaWV3OiBGRVZpZXdcblx0XHQpOiBQcm9taXNlPFVJNUVsZW1lbnQgfCBFbGVtZW50IHwgVUk1RWxlbWVudFtdIHwgRWxlbWVudFtdPiA9PiB7XG5cdFx0XHRsZXQgYkRpc3BsYXlNb2RlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IHNUYWJsZVR5cGVDdXN0b21EYXRhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRsZXQgc0NyZWF0aW9uTW9kZUN1c3RvbURhdGE6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nIHwgYm9vbGVhbj4odGFibGUsIFwiZGlzcGxheU1vZGVQcm9wZXJ0eUJpbmRpbmdcIiwgb01vZGlmaWVyKSxcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJ0YWJsZVR5cGVcIiwgb01vZGlmaWVyKSxcblx0XHRcdFx0RGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPih0YWJsZSwgXCJjcmVhdGlvbk1vZGVcIiwgb01vZGlmaWVyKVxuXHRcdFx0XSkudGhlbihhc3luYyAoYUN1c3RvbURhdGE6IChzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKVtdKSA9PiB7XG5cdFx0XHRcdGJEaXNwbGF5TW9kZSA9IGFDdXN0b21EYXRhWzBdIGFzIGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdHNUYWJsZVR5cGVDdXN0b21EYXRhID0gYUN1c3RvbURhdGFbMV0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YSA9IGFDdXN0b21EYXRhWzJdIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gUmVhZCBPbmx5IGFuZCBDb2x1bW4gRWRpdCBNb2RlIGNhbiBib3RoIGhhdmUgdGhyZWUgc3RhdGVcblx0XHRcdFx0Ly8gVW5kZWZpbmVkIG1lYW5zIHRoYXQgdGhlIGZyYW1ld29yayBkZWNpZGVzIHdoYXQgdG8gZG9cblx0XHRcdFx0Ly8gVHJ1ZSAvIERpc3BsYXkgbWVhbnMgYWx3YXlzIHJlYWQgb25seVxuXHRcdFx0XHQvLyBGYWxzZSAvIEVkaXRhYmxlIG1lYW5zIGVkaXRhYmxlIGJ1dCB3aGlsZSBzdGlsbCByZXNwZWN0aW5nIHRoZSBsb3cgbGV2ZWwgcHJpbmNpcGxlIChpbW11dGFibGUgcHJvcGVydHkgd2lsbCBub3QgYmUgZWRpdGFibGUpXG5cdFx0XHRcdGlmIChiRGlzcGxheU1vZGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgYkRpc3BsYXlNb2RlICE9PSBcImJvb2xlYW5cIikge1xuXHRcdFx0XHRcdGJEaXNwbGF5TW9kZSA9IGJEaXNwbGF5TW9kZSA9PT0gXCJ0cnVlXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9ICh0YWJsZSBhcyBUYWJsZSkuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0XHRcdGNvbnN0IG9UaGlzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRcdFx0XHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuZW5hYmxlQXV0b0NvbHVtbldpZHRoLFxuXHRcdFx0XHRcdFx0cmVhZE9ubHk6IGJEaXNwbGF5TW9kZSxcblx0XHRcdFx0XHRcdHRhYmxlVHlwZTogc1RhYmxlVHlwZUN1c3RvbURhdGEsXG5cdFx0XHRcdFx0XHRpZDogc1RhYmxlSWQsXG5cdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBwcm9wZXJ0eUluZm9OYW1lLFxuXHRcdFx0XHRcdFx0Y29sdW1uSW5mbzogY29sdW1uSW5mbyxcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGghKSxcblx0XHRcdFx0XHRcdGNyZWF0aW9uTW9kZTogeyBuYW1lOiBzQ3JlYXRpb25Nb2RlQ3VzdG9tRGF0YSB9LFxuXHRcdFx0XHRcdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IHRhYmxlQVBJLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXJcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBvVGFibGVDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBvVGFibGVDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRkYXRhRmllbGQ6IG9Qcm9wZXJ0eUNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHRoaXM6IG9UaGlzLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9jb2x1bW5JbmZvXCIpXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdHRoaXM6IG9UaGlzLFxuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW46IG9UaGlzXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCB0YWJsZUNvbGxlY3Rpb24gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5Pihcblx0XHRcdFx0XHRvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb24pIVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBoYW5kbGVyUHJvdmlkZXIgPSBuZXcgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcihcblx0XHRcdFx0XHR0YWJsZUFQSSxcblx0XHRcdFx0XHR7IGNvbGxlY3Rpb25FbnRpdHk6IHRhYmxlQ29sbGVjdGlvbi50YXJnZXRPYmplY3QhLCBtZXRhTW9kZWw6IG9NZXRhTW9kZWwgfSxcblx0XHRcdFx0XHR0YWJsZUFQSVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBjb21wdXRlZENvbHVtblhNTCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoXG5cdFx0XHRcdFx0anN4LnJlbmRlckFzWE1MKCgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiAoZ2V0Q29sdW1uVGVtcGxhdGUoXG5cdFx0XHRcdFx0XHRcdHNUYWJsZUlkLFxuXHRcdFx0XHRcdFx0XHR0YWJsZUFQSSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uSW5mbyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0XHRcdFx0XHRcdG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGghKSEsXG5cdFx0XHRcdFx0XHRcdGhhbmRsZXJQcm92aWRlclxuXHRcdFx0XHRcdFx0KSA/PyBcIlwiKSBhcyB1bmtub3duIGFzIHN0cmluZztcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcInRleHQveG1sXCJcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIERlbGVnYXRlVXRpbC50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChcblx0XHRcdFx0XHRjb21wdXRlZENvbHVtblhNTC5maXJzdEVsZW1lbnRDaGlsZCxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MsXG5cdFx0XHRcdFx0eyB2aWV3OiBvVmlldyB9LFxuXHRcdFx0XHRcdG9Nb2RpZmllclxuXHRcdFx0XHQpLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdG9UaGlzLmRlc3Ryb3koKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIGZuVGVtcGxhdGVGcmFnbWVudChwcm9wZXJ0eUluZm8sIHZpZXcpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBQcm92aWRlIHRoZSBUYWJsZSdzIGZpbHRlciBkZWxlZ2F0ZSB0byBwcm92aWRlIGJhc2ljIGZpbHRlciBmdW5jdGlvbmFsaXR5IHN1Y2ggYXMgYWRkaW5nIEZpbHRlckZpZWxkcy5cblx0ICogQHJldHVybnMgT2JqZWN0IGZvciB0aGUgVGFibGVzIGZpbHRlciBwZXJzb25hbGl6YXRpb24uXG5cdCAqL1xuXHRnZXRGaWx0ZXJEZWxlZ2F0ZTogZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e1xuXHRcdFx0XHRhcGlWZXJzaW9uOiAyXG5cdFx0XHR9LFxuXHRcdFx0RmlsdGVyQmFyRGVsZWdhdGUsXG5cdFx0XHR7XG5cdFx0XHRcdGFkZEl0ZW06IGFzeW5jIGZ1bmN0aW9uIChvUGFyZW50Q29udHJvbDogQ29udHJvbCwgc1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZykge1xuXHRcdFx0XHRcdGlmIChzUHJvcGVydHlJbmZvTmFtZS5pbmRleE9mKFwiUHJvcGVydHk6OlwiKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0Ly8gQ29ycmVjdCB0aGUgbmFtZSBvZiBjb21wbGV4IHByb3BlcnR5IGluZm8gcmVmZXJlbmNlcy5cblx0XHRcdFx0XHRcdHNQcm9wZXJ0eUluZm9OYW1lID0gc1Byb3BlcnR5SW5mb05hbWUucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBGaWx0ZXJCYXJEZWxlZ2F0ZS5hZGRJdGVtKG9QYXJlbnRDb250cm9sIGFzIEZpbHRlckJhciwgc1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgVHlwZU1hcCBhdHRhY2hlZCB0byB0aGlzIGRlbGVnYXRlLlxuXHQgKiBAcmV0dXJucyBBbnkgaW5zdGFuY2Ugb2YgVHlwZU1hcFxuXHQgKi9cblx0Z2V0VHlwZU1hcDogZnVuY3Rpb24gKC8qb1BheWxvYWQ6IG9iamVjdCovKSB7XG5cdFx0cmV0dXJuIFR5cGVNYXA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZvcm1hdCB0aGUgdGl0bGUgb2YgdGhlIGdyb3VwIGhlYWRlciAuXG5cdCAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0YWJsZSBjb250cm9sXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICogQHBhcmFtIHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIEZvcm1hdHRlZCB0aXRsZSBvZiB0aGUgZ3JvdXAgaGVhZGVyLlxuXHQgKi9cblx0Zm9ybWF0R3JvdXBIZWFkZXIodGFibGU6IE1EQ1RhYmxlLCBjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgcHJvcGVydHk6IHN0cmluZykge1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb3MgPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldEVuaGFuY2VkRmV0Y2hlZFByb3BlcnR5SW5mb3MoKTtcblx0XHRjb25zdCBwcm9wZXJ0eUluZm8gPSBwcm9wZXJ0eUluZm9zPy5maW5kKChvYmopID0+IHtcblx0XHRcdHJldHVybiBvYmoubmFtZSA9PT0gcHJvcGVydHk7XG5cdFx0fSk7XG5cdFx0LypGb3IgYSBEYXRlLCBEYXRlVGltZSwgQm9vbGVhbiBvciBEZWNpbWFsIHByb3BlcnR5LCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgaW4gZXh0ZXJuYWwgZm9ybWF0IHVzaW5nIGEgVUk1IHR5cGUgZm9yIHRoZVxuXHQgICAgICAgIGdpdmVuIHByb3BlcnR5IHBhdGggdGhhdCBmb3JtYXRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5J3MgRURNIHR5cGUgYW5kIGNvbnN0cmFpbnRzKi9cblx0XHRjb25zdCBkYXRhQmFzZVR5cGUgPSBUeXBlTWFwLmdldFR5cGVDb25maWcocHJvcGVydHlJbmZvPy5kYXRhVHlwZSkuYmFzZVR5cGU7XG5cdFx0Y29uc3QgZXh0ZXJuYWxGb3JtYXQgPVxuXHRcdFx0ZGF0YUJhc2VUeXBlID09PSBcIkRhdGVUaW1lXCIgfHwgZGF0YUJhc2VUeXBlID09PSBcIkRhdGVcIiB8fCBkYXRhQmFzZVR5cGUgPT09IFwiQm9vbGVhblwiIHx8IGRhdGFCYXNlVHlwZSA9PT0gXCJOdW1lcmljXCI7XG5cdFx0bGV0IHZhbHVlO1xuXHRcdGlmICghY29udGV4dCkge1xuXHRcdFx0dmFsdWUgPSBnZXRSZXNvdXJjZU1vZGVsKENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVfVkFMVUVcIik7XG5cdFx0XHRyZXR1cm4gZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fVEFCTEVfR1JPVVBfSEVBREVSX1RJVExFXCIsIFtwcm9wZXJ0eUluZm8/LmxhYmVsLCB2YWx1ZV0pO1xuXHRcdH1cblx0XHRpZiAocHJvcGVydHlJbmZvPy5tb2RlKSB7XG5cdFx0XHRzd2l0Y2ggKHByb3BlcnR5SW5mby5tb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHZhbHVlID0gcHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHkgPyBjb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5SW5mby5kZXNjcmlwdGlvblByb3BlcnR5LCBleHRlcm5hbEZvcm1hdCkgOiBudWxsO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBWYWx1ZUZvcm1hdHRlci5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBWYWx1ZUZvcm1hdHRlci5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8udmFsdWVQcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnZhbHVlUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGwsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8uZGVzY3JpcHRpb25Qcm9wZXJ0eSA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLmRlc2NyaXB0aW9uUHJvcGVydHksIGV4dGVybmFsRm9ybWF0KSA6IG51bGxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YWx1ZSA9IHByb3BlcnR5SW5mbz8ucGF0aCA/IGNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlJbmZvLnBhdGgsIGV4dGVybmFsRm9ybWF0KSA6IG51bGw7XG5cdFx0fVxuXHRcdGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0dmFsdWUgPSBnZXRSZXNvdXJjZU1vZGVsKENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGUpKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVfVkFMVUVcIik7XG5cdFx0fVxuXHRcdHJldHVybiBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKS5nZXRUZXh0KFwiTV9UQUJMRV9HUk9VUF9IRUFERVJfVElUTEVcIiwgW3Byb3BlcnR5SW5mbz8ubGFiZWwsIHZhbHVlXSk7XG5cdH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztFQWlGQSxNQUFNQSw4QkFBOEIsR0FBRywrQkFBK0I7RUFDdEUsTUFBTUMscUJBQXFCLEdBQUcsYUFBYTtFQUMzQyxNQUFNQyxxQkFBcUIsR0FBRyxhQUFhO0VBQzNDLE1BQU1DLGdCQUFnQixHQUFHLGlCQUFpQjs7RUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBUkEsT0FTZUMsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVDLGlCQUFpQixFQUFFO0lBQ25EQyxVQUFVLEVBQUUsQ0FBQztJQUNiO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLG1DQUFtQyxFQUFFLFNBQUFBLENBQ3BDQyxLQUFZLEVBQ1pDLFlBQW9DLEVBQ3BDQyxhQUF1QyxFQUN0QztNQUNELElBQUlELFlBQVksQ0FBQ0UsR0FBRyxDQUFDQyxPQUFPLENBQUMsc0NBQXNDLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDM0UsTUFBTUMsTUFBTSxHQUFHTCxLQUFLLENBQUNNLFVBQVUsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBRUMsR0FBRyxJQUFLO1VBQy9DLE9BQU9BLEdBQUcsQ0FBQ0MsY0FBYyxDQUFDLENBQUMsS0FBS1IsWUFBWSxDQUFDRSxHQUFHO1FBQ2pELENBQUMsQ0FBQztRQUNGLE1BQU1PLG1CQUFtQixHQUFHTCxNQUFNLEdBQUdBLE1BQU0sQ0FBQ00sSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssTUFBTSxHQUFHLEtBQUs7UUFDMUYsTUFBTUMsVUFBVSxHQUFJWixLQUFLLENBQUNhLFFBQVEsQ0FBQyxDQUFDLENBQWdCQyxZQUFZLENBQUMsQ0FBQztRQUNsRSxNQUFNQyx3QkFBd0IsR0FBR0MsMkJBQTJCLENBQUNKLFVBQVUsQ0FBQ0ssVUFBVSxDQUFDaEIsWUFBWSxDQUFDaUIsY0FBYyxDQUFDLENBQUM7UUFDaEgsTUFBTUMsaUJBQWlCLEdBQUdKLHdCQUF3QixDQUFDSyxjQUFjO1FBQ2pFLE1BQU1DLFVBQVUsR0FBR04sd0JBQXdCLENBQUNPLFlBQXNDO1FBQ2xGLE1BQU1DLFdBQVcsR0FBR0YsVUFBVSxDQUFDRyxNQUFNLENBQUNDLE9BQXlCO1FBQy9ELE1BQU1DLFdBQXFCLEdBQUcsRUFBRTtRQUNoQ0gsV0FBVyxDQUFDSSxJQUFJLENBQUNDLE9BQU8sQ0FBQyxVQUFVQyxLQUE2QixFQUFFO1VBQ2pFLElBQUlDLGVBQThEO1VBQ2xFLFFBQVFELEtBQUssQ0FBQ0UsS0FBSztZQUNsQixLQUFLLG1EQUFtRDtjQUN2REQsZUFBZSxHQUFHRSxlQUFlLENBQUNDLGlDQUFpQyxDQUNsRUosS0FBSyxFQUNMLEtBQUssRUFDTDNCLGFBQWEsRUFDYmlCLGlCQUFpQixFQUNqQlQsbUJBQ0QsQ0FBQztjQUNEO1lBQ0QsS0FBSyxzQ0FBc0M7Y0FDMUNvQixlQUFlLEdBQUdFLGVBQWUsQ0FBQ0Usb0JBQW9CLENBQ3JETCxLQUFLLEVBQ0xuQixtQkFBbUIsRUFDbkJSLGFBQWEsRUFDYmlCLGlCQUFpQixFQUNqQixLQUNELENBQUM7Y0FDRDtZQUNELEtBQUssK0NBQStDO2NBQ25EVyxlQUFlLEdBQUc7Z0JBQ2pCSyxVQUFVLEVBQUUsQ0FBQztnQkFDYkMsYUFBYSxFQUFFQyxVQUFVLENBQUNDLGNBQWMsQ0FBQ1QsS0FBSyxDQUFDVSxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxDQUFDO2NBQ2pFLENBQUM7Y0FDRDtZQUNEO1VBQ0Q7VUFDQSxJQUFJVixlQUFlLEVBQUc7WUFDckJKLFdBQVcsQ0FBQ2UsSUFBSSxDQUFDWCxlQUFlLENBQUNLLFVBQVUsR0FBR0wsZUFBZSxDQUFDTSxhQUFhLENBQUM7VUFDN0U7UUFDRCxDQUFDLENBQUM7UUFDRixNQUFNTSxPQUFPLEdBQUdoQixXQUFXLENBQUNpQixNQUFNLENBQUMsVUFBVUMsR0FBVyxFQUFFQyxLQUFhLEVBQUU7VUFDeEUsT0FBT0MsSUFBSSxDQUFDQyxHQUFHLENBQUNILEdBQUcsRUFBRUMsS0FBSyxDQUFDO1FBQzVCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDTDVDLFlBQVksQ0FBQytDLGNBQWMsR0FBR0MsVUFBVSxDQUFDaEQsWUFBWSxDQUFDK0MsY0FBYyxFQUFZO1VBQy9FRSxnQkFBZ0IsRUFBRTtZQUNqQkMsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QkMsUUFBUSxFQUFFTixJQUFJLENBQUNPLElBQUksQ0FBQ1gsT0FBTztVQUM1QjtRQUNELENBQUMsQ0FBQztNQUNIO0lBQ0QsQ0FBQztJQUVEWSw4Q0FBOEMsRUFBRSxTQUFBQSxDQUFVdEQsS0FBWSxFQUFFdUQsUUFBZ0MsRUFBRTtNQUN6RyxNQUFNQyxRQUFRLEdBQUd4RCxLQUFLLENBQUN5RCxTQUFTLENBQUMsQ0FBYTtNQUM5QyxJQUFJLENBQUNGLFFBQVEsQ0FBQ3JELGFBQWEsRUFBRTtRQUM1QixNQUFNd0QsU0FBUyxHQUFJMUQsS0FBSyxDQUFDYSxRQUFRLENBQUMsQ0FBQyxDQUFnQkMsWUFBWSxDQUFDLENBQUM7UUFDakUsSUFBSXlDLFFBQVEsQ0FBQ3JDLGNBQWMsSUFBSXdDLFNBQVMsRUFBRTtVQUN6QyxNQUFNQyxTQUFTLEdBQUdELFNBQVMsQ0FBQ0UsU0FBUyxDQUFDLEdBQUdMLFFBQVEsQ0FBQ3JDLGNBQWMsR0FBRyxDQUFDO1VBQ3BFLElBQUl5QyxTQUFTLElBQUlBLFNBQVMsQ0FBQywyQ0FBMkMsQ0FBQyxFQUFFO1lBQ3hFSixRQUFRLENBQUNQLGNBQWMsR0FBR0MsVUFBVSxDQUFDTSxRQUFRLENBQUNQLGNBQWMsSUFBSSxDQUFDLENBQUMsRUFBRTtjQUNuRUUsZ0JBQWdCLEVBQUU7Z0JBQ2pCVyxHQUFHLEVBQUVMLFFBQVEsQ0FBQ00sV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRztjQUM3QztZQUNELENBQUMsQ0FBQztVQUNIO1FBQ0Q7TUFDRDtJQUNELENBQUM7SUFFREMseUNBQXlDLEVBQUUsU0FBQUEsQ0FDMUMvRCxLQUFZLEVBQ1pDLFlBQTBCLEVBQzFCK0QsSUFBYSxFQUNiQyxRQUFpQixFQUNqQkMsWUFBcUIsRUFDcEI7TUFDRCxNQUFNQyxTQUEwQyxHQUFHbkUsS0FBSyxHQUFJQSxLQUFLLENBQUN5RCxTQUFTLENBQUMsQ0FBQyxHQUFnQyxJQUFJO01BQ2pIO01BQ0EsTUFBTVcsSUFBSSxHQUFHSCxRQUFRLElBQUlDLFlBQVk7TUFDckMsSUFBSUUsSUFBSSxFQUFFO1FBQ1RuRSxZQUFZLENBQUMrQyxjQUFjLEdBQUdDLFVBQVUsQ0FBQ2hELFlBQVksQ0FBQytDLGNBQWMsRUFBb0I7VUFDdkZFLGdCQUFnQixFQUFFO1lBQ2pCVyxHQUFHLEVBQUVmLElBQUksQ0FBQ08sSUFBSSxDQUFDaEIsVUFBVSxDQUFDQyxjQUFjLENBQUM4QixJQUFJLENBQUM7VUFDL0M7UUFDRCxDQUFDLENBQUM7TUFDSDtNQUNBLElBQUlKLElBQUksRUFBRTtRQUNUL0QsWUFBWSxDQUFDK0MsY0FBYyxHQUFHQyxVQUFVLENBQUNoRCxZQUFZLENBQUMrQyxjQUFjLEVBQW9CO1VBQ3ZGRSxnQkFBZ0IsRUFBRTtZQUNqQjtZQUNBVyxHQUFHLEVBQUVNLFNBQVMsSUFBSUEsU0FBUyxDQUFDRSxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRztVQUNqRDtRQUNELENBQUMsQ0FBQztNQUNIO0lBQ0QsQ0FBQztJQUVEQyxhQUFhLEVBQUUsU0FBQUEsQ0FBVWYsUUFBZ0MsRUFBRWdCLFFBQXVELEVBQUU7TUFDbkgsSUFBSWhCLFFBQVEsQ0FBQ2lCLEtBQUssRUFBRTtRQUNuQixNQUFNQyx1QkFBdUIsR0FBR0YsUUFBUSxDQUFDaEIsUUFBUSxDQUFDaUIsS0FBSyxDQUFDO1FBQ3hEO1FBQ0E7UUFDQTtRQUNBLE1BQU1FLGdDQUFnQyxHQUFHRCx1QkFBdUIsRUFBRUUsSUFBSSxDQUNwRUMsSUFBSSxJQUFLQSxJQUFJLENBQUNSLElBQUksS0FBS2IsUUFBUSxDQUFDc0IsSUFBSSxJQUFJRCxJQUFJLEVBQUVFLElBQUksS0FBSyxhQUN6RCxDQUFDO1FBQ0QsSUFDQ0wsdUJBQXVCLEVBQUVNLE1BQU0sR0FBRyxDQUFDLElBQ25DeEIsUUFBUSxDQUFDc0IsSUFBSSxFQUFFRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQzVCekIsUUFBUSxDQUFDMEIsZ0JBQWdCLElBQ3pCLENBQUNQLGdDQUFnQyxJQUNqQyxFQUFFbkIsUUFBUSxFQUFFdUIsSUFBSSxLQUFLLGFBQWEsSUFBSXZCLFFBQVEsQ0FBQzJCLFVBQVUsQ0FBQyxFQUN6RDtVQUNEM0IsUUFBUSxDQUFDaUIsS0FBSyxHQUFHakIsUUFBUSxDQUFDaUIsS0FBSyxHQUFHLElBQUksR0FBR2pCLFFBQVEsQ0FBQzBCLGdCQUFnQixDQUFDRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRztRQUNyRjtRQUNBLE9BQU81QixRQUFRLENBQUMwQixnQkFBZ0I7TUFDakM7SUFDRCxDQUFDO0lBQ0Q7SUFDQUcsbUJBQW1CLEVBQUUsU0FBQUEsQ0FBVXBGLEtBQVksRUFBRXFGLFVBQW9DLEVBQUU7TUFDbEYsTUFBTWQsUUFBdUQsR0FBRyxDQUFDLENBQUM7TUFDbEU7TUFDQSxNQUFNZSxRQUFRLEdBQUd0RixLQUFLLENBQUN1RixXQUFXLENBQUMsQ0FBQztNQUNwQ0YsVUFBVSxDQUFDekQsT0FBTyxDQUFFMkIsUUFBUSxJQUFLO1FBQ2hDLElBQUksQ0FBQ0EsUUFBUSxDQUFDckQsYUFBYSxJQUFJcUQsUUFBUSxDQUFDaUIsS0FBSyxFQUFFO1VBQzlDO1VBQ0EsSUFDRWMsUUFBUSxFQUFFTixRQUFRLENBQUMsTUFBTSxDQUFDLElBQUl6QixRQUFRLENBQUNpQyxRQUFRLElBQy9DRixRQUFRLEVBQUVOLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSXpCLFFBQVEsQ0FBQzJCLFVBQVcsSUFDcERJLFFBQVEsRUFBRU4sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJekIsUUFBUSxDQUFDa0MsU0FBVSxFQUNsRDtZQUNEbEIsUUFBUSxDQUFDaEIsUUFBUSxDQUFDaUIsS0FBSyxDQUFDLEdBQ3ZCRCxRQUFRLENBQUNoQixRQUFRLENBQUNpQixLQUFLLENBQUMsS0FBS2tCLFNBQVMsR0FBR25CLFFBQVEsQ0FBQ2hCLFFBQVEsQ0FBQ2lCLEtBQUssQ0FBQyxDQUFDbUIsTUFBTSxDQUFDLENBQUNwQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUNBLFFBQVEsQ0FBQztVQUNuRztRQUNEO01BQ0QsQ0FBQyxDQUFDO01BQ0Y4QixVQUFVLENBQUN6RCxPQUFPLENBQUUyQixRQUFRLElBQUs7UUFDaEMsSUFBSSxDQUFDeEQsbUNBQW1DLENBQUNDLEtBQUssRUFBRXVELFFBQVEsRUFBRThCLFVBQVUsQ0FBQztRQUNyRSxJQUFJLENBQUMvQiw4Q0FBOEMsQ0FBQ3RELEtBQUssRUFBRXVELFFBQVEsQ0FBQztRQUNwRSxJQUFJLENBQUNlLGFBQWEsQ0FBQ2YsUUFBUSxFQUFFZ0IsUUFBUSxDQUFDO01BQ3ZDLENBQUMsQ0FBQztNQUNGO01BQ0FjLFVBQVUsQ0FBQzVDLElBQUksQ0FBQztRQUNmdEMsR0FBRyxFQUFFLFlBQVk7UUFDakIwRSxJQUFJLEVBQUUsWUFBWTtRQUNsQmUsVUFBVSxFQUFFLEVBQUU7UUFDZEMsS0FBSyxFQUFFLEVBQUU7UUFDVHJCLEtBQUssRUFBRSxFQUFFO1FBQ1RzQixRQUFRLEVBQUUsZ0NBQWdDO1FBQzFDQyxPQUFPLEVBQUUsS0FBSztRQUNkTixTQUFTLEVBQUUsS0FBSztRQUNoQkQsUUFBUSxFQUFFLEtBQUs7UUFDZk4sVUFBVSxFQUFFO01BQ2IsQ0FBMkIsQ0FBQztNQUM1QixPQUFPRyxVQUFVO0lBQ2xCLENBQUM7SUFFRFcsYUFBYSxFQUFFLFNBQUFBLENBQVVoRyxLQUFZLEVBQWlCO01BQ3JELE9BQVFBLEtBQUssQ0FBQ3lELFNBQVMsQ0FBQyxDQUFDLENBQWN3QyxrQkFBa0IsQ0FBQyxDQUFDLENBQUNDLE9BQU87SUFDcEUsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MsdUJBQXVCLEVBQUUsZUFBQUEsQ0FBZ0JDLE1BQWEsRUFBOEM7TUFDbkcsTUFBTUMsYUFBZ0QsR0FBRztRQUFFQyxJQUFJLEVBQUUsQ0FBQztNQUFFLENBQUM7TUFDckUsSUFBSUMsTUFBbUI7TUFDdkIsT0FBT0MsWUFBWSxDQUFDQyxVQUFVLENBQUNMLE1BQU0sQ0FBQyxDQUNwQ00sSUFBSSxDQUFDLFVBQVVDLEtBQVksRUFBRTtRQUM3QkosTUFBTSxHQUFHSSxLQUFtQjtRQUM1QixPQUFPSixNQUFNLENBQUN6RixZQUFZLENBQUMsQ0FBQyxDQUFDOEMsU0FBUyxDQUFDLDhEQUE4RCxDQUFDO01BQ3ZHLENBQUMsQ0FBQyxDQUNEOEMsSUFBSSxDQUFDLFVBQVVFLGlCQUF1QyxFQUFFO1FBQ3hELE1BQU1DLGFBQWEsR0FBRyxDQUFDRCxpQkFBaUIsSUFBSSxFQUFFLEVBQUVFLEdBQUcsQ0FBRUMsT0FBTyxJQUFLO1VBQ2hFLE9BQU9BLE9BQU8sQ0FBQ0MsV0FBVyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1FBQ0YsSUFBSUgsYUFBYSxDQUFDN0IsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7VUFDOUMsT0FBT3VCLE1BQU0sQ0FBQ3pGLFlBQVksQ0FBQyxDQUFDLENBQUM4QyxTQUFTLENBQUMsd0RBQXdELENBQUM7UUFDakc7UUFDQSxPQUFPOEIsU0FBUztNQUNqQixDQUFDLENBQUMsQ0FDRGdCLElBQUksQ0FBQyxVQUFVTyxXQUFvQixFQUFFO1FBQ3JDLElBQUlBLFdBQVcsRUFBRTtVQUNoQlosYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHMUcsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVxSCxXQUFXLENBQUM7UUFDdEQ7UUFDQTtNQUNELENBQUMsQ0FBQyxDQUNEQyxLQUFLLENBQUMsVUFBVUMsR0FBRyxFQUFFO1FBQ3JCQyxHQUFHLENBQUNDLEtBQUssQ0FBQyx3REFBd0RGLEdBQUcsRUFBRSxDQUFDO01BQ3pFLENBQUMsQ0FBQyxDQUNEVCxJQUFJLENBQUMsWUFBWTtRQUNqQixPQUFPTCxhQUFhO01BQ3JCLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ2lCLCtCQUErQixFQUFFLFNBQUFBLENBQ2hDQyxVQUFpQyxFQUNqQ0MseUJBQXVELEVBQzdDO01BQ1YsTUFBTUMsWUFBWSxHQUFHQyxnQkFBZ0IsQ0FBQ0YseUJBQXlCLENBQUM7TUFDaEUsT0FDQyxDQUFDRCxVQUFVLENBQUNJLFlBQVksQ0FBQzNDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFDckMsQ0FBQ3VDLFVBQVUsQ0FBQ0ssZ0JBQWdCLEtBQUssSUFBSSxJQUFJTCxVQUFVLENBQUNNLG9CQUFvQixLQUFLLElBQUksS0FDakYsRUFBRUMsVUFBVSxDQUFDTCxZQUFZLENBQUMsSUFBSUEsWUFBWSxDQUFDNUUsS0FBSyxLQUFLLEtBQUssQ0FBRTtJQUUvRCxDQUFDO0lBRURrRixrQkFBa0IsRUFBRSxTQUFBQSxDQUNuQnJFLFNBQW9CLEVBQ3BCNkQsVUFBaUMsRUFDakN2SCxLQUFZLEVBQ1pnSSxZQUEwQixFQUNEO01BQ3pCLE1BQU1DLHVCQUF1QixHQUFHVixVQUFVLENBQUNyRyxjQUFjO1FBQ3hERyxVQUFVLEdBQUdxQyxTQUFTLENBQUNFLFNBQVMsQ0FBQ3FFLHVCQUF1QixDQUFDO1FBQ3pEQyxrQkFBa0IsR0FBR3hFLFNBQVMsQ0FBQ3lFLG9CQUFvQixDQUFDRix1QkFBdUIsQ0FBWTtRQUN2RkcsYUFBYSxHQUFHYixVQUFVLENBQUNjLFVBQVUsRUFBRUMsU0FBUyxJQUFJZixVQUFVLENBQUNjLFVBQVUsQ0FBQ0MsU0FBUyxFQUFFbEksT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDMUdtSSxXQUFXLEdBQUdDLFlBQVksQ0FBQ0Msb0JBQW9CLENBQUNQLGtCQUFrQixFQUFFN0csVUFBVSxDQUFDO1FBQy9FcUgsa0JBQWtCLEdBQUdsQyxZQUFZLENBQUNtQyxhQUFhLENBQUMzSSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxNQUFNO1FBQ3BGd0UsS0FBSyxHQUFHb0UsZ0JBQWdCLENBQUNyQixVQUFVLENBQUMvQyxLQUFLLElBQUksRUFBRSxFQUFFd0QsWUFBWSxJQUFJaEksS0FBSyxDQUFDO1FBQ3ZFNkksT0FBTyxHQUFHRCxnQkFBZ0IsQ0FBQ3JCLFVBQVUsQ0FBQ3NCLE9BQU8sSUFBSSxFQUFFLEVBQUViLFlBQVksSUFBSWhJLEtBQUssQ0FBQztRQUMzRXFJLFVBQVUsR0FBRyxJQUFJLENBQUNTLGNBQWMsQ0FBQ3ZCLFVBQVUsRUFBRWEsYUFBYSxDQUFDO1FBQzNEbkksWUFBb0MsR0FBRztVQUN0QzhJLElBQUksRUFBRXhCLFVBQVUsQ0FBQ3dCLElBQUk7VUFDckI1SSxHQUFHLEVBQUVvSCxVQUFVLENBQUN3QixJQUFJO1VBQ3BCN0gsY0FBYyxFQUFFK0csdUJBQXVCO1VBQ3ZDckMsVUFBVSxFQUFFMkIsVUFBVSxDQUFDM0IsVUFBVTtVQUNqQ0MsS0FBSyxFQUFFMEIsVUFBVSxDQUFDMUIsS0FBSztVQUN2QnJCLEtBQUssRUFBRUEsS0FBSztVQUNacUUsT0FBTyxFQUFFQSxPQUFPO1VBQ2hCL0MsUUFBUSxFQUFFdUMsVUFBVSxDQUFDQyxTQUFTO1VBQzlCRCxVQUFVLEVBQUVBLFVBQVU7VUFDdEJXLGFBQWEsRUFDWnpCLFVBQVUsQ0FBQ2MsVUFBVSxFQUFFWSxRQUFRLEtBQUssb0JBQW9CLEdBQ3JEO1lBQUVDLEtBQUssRUFBRTtVQUFlLENBQUMsQ0FBQywrREFDMUIzQixVQUFVLENBQUNjLFVBQVUsRUFBRVcsYUFBYTtVQUN4Q0csV0FBVyxFQUFFNUIsVUFBVSxDQUFDYyxVQUFVLEVBQUVjLFdBQVc7VUFDL0NwRCxPQUFPLEVBQUV3QixVQUFVLENBQUM2QixZQUFZLEtBQUssUUFBUSxJQUFJLENBQUNoQixhQUFhO1VBQy9EaUIsY0FBYyxFQUFFLElBQUksQ0FBQ0MsOEJBQThCLENBQUMvQixVQUFVLENBQUM4QixjQUFjLEVBQUU5QixVQUFVLENBQUM7VUFDMUZ2RCxJQUFJLEVBQUV1RCxVQUFVLENBQUN2RCxJQUFJO1VBQ3JCdUYsSUFBSSxFQUFFQyxVQUFVLENBQUNDLFVBQVU7VUFDM0I5QixZQUFZLEVBQUVKLFVBQVUsQ0FBQ0k7UUFDMUIsQ0FBQztNQUNGLElBQUkxSCxZQUFZLENBQUNvSixjQUFjLEVBQUVLLFFBQVEsRUFBRTtRQUMxQ3pKLFlBQVksQ0FBQzBKLGlCQUFpQixHQUFHO1VBQUVELFFBQVEsRUFBRXpKLFlBQVksQ0FBQ29KLGNBQWMsQ0FBQ0s7UUFBUyxDQUFDO1FBQ25GO1FBQ0E7TUFDRDs7TUFFQTtNQUNBLElBQUluQyxVQUFVLENBQUN2RSxjQUFjLElBQUlyRCxNQUFNLENBQUNpSyxJQUFJLENBQUNyQyxVQUFVLENBQUN2RSxjQUFjLENBQUMsQ0FBQytCLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDbkY5RSxZQUFZLENBQUMrQyxjQUFjLEdBQUd1RSxVQUFVLENBQUN2RSxjQUFjO01BQ3hEO01BRUEsSUFBSXVFLFVBQVUsQ0FBQ3NDLDBCQUEwQixFQUFFO1FBQzFDNUosWUFBWSxDQUFDNEosMEJBQTBCLEdBQUd0QyxVQUFVLENBQUNzQywwQkFBMEI7TUFDaEY7O01BRUE7TUFDQTtNQUNBLElBQUl0QyxVQUFVLENBQUNySCxhQUFhLEVBQUU2RSxNQUFNLEVBQUU7UUFDckM5RSxZQUFZLENBQUNDLGFBQWEsR0FBR3FILFVBQVUsQ0FBQ3JILGFBQWE7TUFDdEQsQ0FBQyxNQUFNO1FBQ047O1FBRUE7UUFDQSxNQUFNc0gseUJBQXlCLEdBQUd4RywyQkFBMkIsQ0FDNUQwQyxTQUFTLENBQUN6QyxVQUFVLENBQUNzRyxVQUFVLENBQUNyRyxjQUFjLENBQUMsRUFDL0N3QyxTQUFTLENBQUN6QyxVQUFVLENBQUN1RixZQUFZLENBQUNtQyxhQUFhLENBQUMzSSxLQUFLLEVBQUUsVUFBVSxDQUFFLENBQ3BFLENBQUM7UUFDREMsWUFBWSxDQUFDNEUsSUFBSSxHQUFHMEMsVUFBVSxDQUFDSSxZQUFZO1FBQzNDO1FBQ0ExSCxZQUFZLENBQUN1RixRQUFRLEdBQUcrQixVQUFVLENBQUMvQixRQUFRO1FBQzNDLElBQUlrRCxrQkFBa0IsRUFBRTtVQUN2QixJQUFJLENBQUNvQix1Q0FBdUMsQ0FBQzdKLFlBQVksRUFBRXNILFVBQVUsQ0FBQztRQUN2RTtRQUNBdEgsWUFBWSxDQUFDaUYsVUFBVSxHQUN0QnFDLFVBQVUsQ0FBQ3JDLFVBQVUsS0FBSyxLQUFLLElBQy9CLENBQUMsQ0FBQ3FELFdBQVcsSUFDYixJQUFJLENBQUNqQiwrQkFBK0IsQ0FBQ0MsVUFBVSxFQUFFQyx5QkFBeUIsQ0FBQztRQUM1RXZILFlBQVksQ0FBQzhKLEtBQUssR0FBR3hDLFVBQVUsQ0FBQ3dDLEtBQUs7UUFDckM5SixZQUFZLENBQUN3RixTQUFTLEdBQUc4QixVQUFVLENBQUN5QyxXQUFXO1FBQy9DLElBQUl6QyxVQUFVLENBQUMwQyxlQUFlLEVBQUU7VUFDL0IsSUFBSSxDQUFDQyx1QkFBdUIsQ0FBQ2pLLFlBQVksRUFBRXNILFVBQVUsRUFBRXZILEtBQUssQ0FBQztRQUM5RDtRQUNBLElBQUlDLFlBQVksQ0FBQzhKLEtBQUssRUFBRTtVQUN2QjlKLFlBQVksQ0FBQ2tLLFNBQVMsR0FBRztZQUN4QjtZQUNBQyxvQkFBb0IsRUFBRTtVQUN2QixDQUFDO1FBQ0Y7UUFDQW5LLFlBQVksQ0FBQ29LLGFBQWEsR0FBRzlDLFVBQVUsQ0FBQzhDLGFBQWE7UUFDckQsSUFBSTlDLFVBQVUsQ0FBQ3RDLGdCQUFnQixFQUFFO1VBQ2hDaEYsWUFBWSxDQUFDZ0YsZ0JBQWdCLEdBQUdzQyxVQUFVLENBQUN0QyxnQkFBZ0IsQ0FBQzZCLEdBQUcsQ0FBRXdELGVBQXVCLElBQUs7WUFDNUYsT0FBTzFCLGdCQUFnQixDQUFDMEIsZUFBZSxFQUFFdEMsWUFBWSxJQUFJaEksS0FBSyxDQUFDO1VBQ2hFLENBQUMsQ0FBQztRQUNIO01BQ0Q7TUFFQSxJQUFJLENBQUMrRCx5Q0FBeUMsQ0FBQy9ELEtBQUssRUFBRUMsWUFBWSxFQUFFc0gsVUFBVSxDQUFDdkQsSUFBSSxFQUFFdUQsVUFBVSxDQUFDdEQsUUFBUSxFQUFFc0QsVUFBVSxDQUFDckQsWUFBWSxDQUFDO01BRWxJLE9BQU9qRSxZQUFZO0lBQ3BCLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ3FKLDhCQUE4QixFQUFFLFNBQUFBLENBQy9CRCxjQUF1RCxFQUN2RDlCLFVBQWlDLEVBQ1M7TUFDMUMsTUFBTWdELFlBQVksR0FBRyxJQUFJLENBQUNDLGdCQUFnQixDQUFDakQsVUFBVSxDQUFDYyxVQUFVLEVBQUVDLFNBQVMsQ0FBQztNQUM1RSxJQUFJaUMsWUFBWSxJQUFJbEIsY0FBYyxFQUFFO1FBQ25DQSxjQUFjLENBQUNvQixNQUFNLEdBQUdGLFlBQVk7TUFDckM7TUFDQSxPQUFPbEIsY0FBYztJQUN0QixDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NQLGNBQWNBLENBQUN2QixVQUFpQyxFQUFFYSxhQUF1QixFQUFjO01BQ3RGLElBQUlDLFVBQVUsR0FBR3FDLE9BQU8sQ0FBQ0MsYUFBYSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQztNQUMxRSxJQUFJcEQsVUFBVSxDQUFDYyxVQUFVLEVBQUVDLFNBQVMsSUFBSXNDLGdCQUFnQixDQUFDckQsVUFBVSxDQUFDYyxVQUFVLENBQUNDLFNBQVMsQ0FBQyxFQUFFO1FBQzFGRCxVQUFVLEdBQUdxQyxPQUFPLENBQUNDLGFBQWEsQ0FDakNwRCxVQUFVLENBQUNjLFVBQVUsQ0FBQ0MsU0FBUyxFQUMvQmYsVUFBVSxDQUFDYyxVQUFVLENBQUNXLGFBQWEsRUFDbkN6QixVQUFVLENBQUNjLFVBQVUsQ0FBQ2MsV0FDdkIsQ0FBQztNQUNGLENBQUMsTUFBTSxJQUFJNUIsVUFBVSxDQUFDYyxVQUFVLEVBQUVDLFNBQVMsSUFBSSxDQUFDRixhQUFhLEVBQUU7UUFDOURDLFVBQVUsR0FBR3FDLE9BQU8sQ0FBQ0MsYUFBYSxDQUFDcEQsVUFBVSxDQUFDYyxVQUFVLENBQUNDLFNBQVMsQ0FBQztNQUNwRTtNQUNBLE9BQU9ELFVBQVU7SUFDbEIsQ0FBQztJQUNEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDNkIsdUJBQXVCLEVBQUUsU0FBQUEsQ0FBVWpLLFlBQW9DLEVBQUVzSCxVQUFpQyxFQUFFdkgsS0FBWSxFQUFRO01BQy9ILE1BQU02SyxpQkFBaUIsR0FBRyxJQUFJLENBQUM3RSxhQUFhLENBQUNoRyxLQUFLLENBQUMsQ0FBQ08sSUFBSSxDQUFDLFVBQVV1SyxJQUFJLEVBQUU7UUFDeEUsT0FBT0EsSUFBSSxDQUFDL0IsSUFBSSxLQUFLeEIsVUFBVSxDQUFDMEMsZUFBZSxFQUFFYyxZQUFZO01BQzlELENBQUMsQ0FBQztNQUNGLElBQUlGLGlCQUFpQixFQUFFO1FBQ3RCNUssWUFBWSxDQUFDNkUsSUFBSSxHQUFHeUMsVUFBVSxDQUFDMEMsZUFBZSxDQUFFbkYsSUFBSTtRQUNwRDdFLFlBQVksQ0FBQytLLGFBQWEsR0FBR3pELFVBQVUsQ0FBQ0ksWUFBWTtRQUNwRDFILFlBQVksQ0FBQ2dMLG1CQUFtQixHQUFJSixpQkFBaUIsQ0FBNEJsRCxZQUFZO01BQzlGO01BQ0ExSCxZQUFZLENBQUNtRSxJQUFJLEdBQUdtRCxVQUFVLENBQUMwQyxlQUFlLEVBQUVjLFlBQVk7SUFDN0QsQ0FBQztJQUVEakIsdUNBQXVDQSxDQUFDN0osWUFBMEIsRUFBRXNILFVBQWlDLEVBQUU7TUFDdEcsSUFBSUEsVUFBVSxDQUFDMkQsWUFBWSxFQUFFO1FBQzVCakwsWUFBWSxDQUFDaUwsWUFBWSxHQUFHM0QsVUFBVSxDQUFDMkQsWUFBWTtNQUNwRDtNQUNBLElBQUkzRCxVQUFVLENBQUM0QyxTQUFTLEVBQUU7UUFDekJsSyxZQUFZLENBQUNrSyxTQUFTLEdBQUc1QyxVQUFVLENBQUM0QyxTQUFTO01BQzlDO0lBQ0QsQ0FBQztJQUVEZ0IsMEJBQTBCLEVBQUUsU0FBQUEsQ0FBVTVELFVBQStCLEVBQUV2SCxLQUFZLEVBQUU7TUFDcEYsTUFBTXdFLEtBQUssR0FBR29FLGdCQUFnQixDQUFDckIsVUFBVSxDQUFDL0MsS0FBSyxFQUFFeEUsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUN6RCxNQUFNQyxZQUEwQixHQUFHO1FBQ2xDRSxHQUFHLEVBQUVvSCxVQUFVLENBQUN3QixJQUFJO1FBQ3BCdkUsS0FBSyxFQUFFQSxLQUFLLENBQUNoQyxRQUFRLENBQUMsQ0FBQztRQUN2QnNELFFBQVEsRUFBRSxnQ0FBZ0M7UUFDMUNDLE9BQU8sRUFBRXdCLFVBQVUsQ0FBQzZCLFlBQVksS0FBSyxRQUFRO1FBQzdDbEUsVUFBVSxFQUFFLEtBQUs7UUFDakJNLFFBQVEsRUFBRSxLQUFLO1FBQ2ZDLFNBQVMsRUFBRSxLQUFLO1FBQ2hCNEQsY0FBYyxFQUFFOUIsVUFBVSxDQUFDOEIsY0FBYztRQUN6Q00saUJBQWlCLEVBQUVwQyxVQUFVLENBQUNvQztNQUMvQixDQUFDO01BQ0QsSUFBSXBDLFVBQVUsQ0FBQ3JILGFBQWEsS0FBS3dGLFNBQVMsSUFBSTZCLFVBQVUsQ0FBQ3JILGFBQWEsQ0FBQzZFLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDbEY5RSxZQUFZLENBQUNDLGFBQWEsR0FBR3FILFVBQVUsQ0FBQ3JILGFBQWE7TUFDdEQ7TUFDQSxPQUFPRCxZQUFZO0lBQ3BCLENBQUM7SUFFRG1MLHdCQUF3QixFQUFFLFNBQUFBLENBQVU3RCxVQUFrQyxFQUFFdkgsS0FBWSxFQUFFZ0ksWUFBMEIsRUFBRTtNQUNqSCxJQUFJeEQsS0FBSztNQUNULElBQUkrQyxVQUFVLENBQUM4RCxNQUFNLEVBQUU7UUFDdEIsSUFBSTlELFVBQVUsQ0FBQzhELE1BQU0sQ0FBQ0MsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1VBQ2hEOUcsS0FBSyxHQUFHK0csV0FBVyxDQUFDQyxzQkFBc0IsQ0FBQ2pFLFVBQVUsQ0FBQzhELE1BQU0sRUFBRTNGLFNBQVMsRUFBRzFGLEtBQUssQ0FBQ2EsUUFBUSxDQUFDLENBQUMsQ0FBZ0JDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDMUgsQ0FBQyxNQUFNO1VBQ04wRCxLQUFLLEdBQUdvRSxnQkFBZ0IsQ0FBQ3JCLFVBQVUsQ0FBQzhELE1BQU0sRUFBRXJELFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDNUQ7TUFDRDtNQUNBLE1BQU0vSCxZQUEwQixHQUFHO1FBQ2xDRSxHQUFHLEVBQUVvSCxVQUFVLENBQUN3QixJQUFJO1FBQ3BCbkQsVUFBVSxFQUFFRixTQUFTO1FBQ3JCRyxLQUFLLEVBQUVILFNBQVM7UUFDaEJsQixLQUFLLEVBQUVBLEtBQUssSUFBSSxFQUFFO1FBQ2xCc0IsUUFBUSxFQUFFLGdDQUFnQztRQUMxQ0MsT0FBTyxFQUFFd0IsVUFBVSxDQUFDNkIsWUFBWSxLQUFLLFFBQVE7UUFDN0NDLGNBQWMsRUFBRTlCLFVBQVUsQ0FBQzhCLGNBQWM7UUFDekNyRyxjQUFjLEVBQUV1RSxVQUFVLENBQUN2RTtNQUM1QixDQUFDOztNQUVEO01BQ0E7TUFDQSxJQUFJdUUsVUFBVSxDQUFDckgsYUFBYSxJQUFJcUgsVUFBVSxDQUFDckgsYUFBYSxDQUFDNkUsTUFBTSxFQUFFO1FBQ2hFOUUsWUFBWSxDQUFDQyxhQUFhLEdBQUdxSCxVQUFVLENBQUNySCxhQUFhO01BQ3RELENBQUMsTUFBTTtRQUNOO1FBQ0FELFlBQVksQ0FBQzRFLElBQUksR0FBRzBDLFVBQVUsQ0FBQ3dCLElBQUk7UUFDbkM5SSxZQUFZLENBQUN1RixRQUFRLEdBQUcsS0FBSztRQUM3QnZGLFlBQVksQ0FBQ2lGLFVBQVUsR0FBRyxLQUFLO01BQ2hDO01BQ0EsT0FBT2pGLFlBQVk7SUFDcEIsQ0FBQztJQUNEd0wscUNBQXFDLEVBQUUsU0FBQUEsQ0FBVUMsV0FBd0IsRUFBVztNQUNuRixPQUFPLENBQUMsRUFDTkEsV0FBVyxDQUFDMUMsYUFBYSxJQUFJMEMsV0FBVyxDQUFDMUMsYUFBYSxDQUFDMkMsaUJBQWlCLElBQ3hFRCxXQUFXLENBQUMxQyxhQUFhLElBQUkwQyxXQUFXLENBQUMxQyxhQUFhLENBQUM0QyxvQ0FBcUMsQ0FDN0Y7SUFDRixDQUFDO0lBQ0RDLDBCQUEwQixFQUFFLFNBQUFBLENBQVVDLE9BQWMsRUFBRUMsWUFBeUIsRUFBUTtNQUN0RixNQUFNQyxlQUFlLEdBQUdGLE9BQU8sQ0FBQ3hMLFVBQVUsQ0FBQyxDQUFDO01BQzVDLE1BQU0yTCx1QkFBdUIsR0FBR0gsT0FBTyxDQUFDSSxpQkFBaUIsQ0FBQyxVQUFVLENBQUM7TUFDckUsTUFBTUMsYUFBYSxHQUFHRix1QkFBdUIsSUFBSUEsdUJBQXVCLENBQUNHLE9BQU8sQ0FBQyxDQUFDO01BQ2xGLElBQUlKLGVBQWUsSUFBSUMsdUJBQXVCLEVBQUU7UUFDL0MsS0FBSyxNQUFNSSxLQUFLLElBQUlMLGVBQWUsRUFBRTtVQUNwQyxJQUNDLElBQUksQ0FBQ1AscUNBQXFDLENBQUNNLFlBQVksQ0FBQyxJQUN4REEsWUFBWSxDQUFDaEQsSUFBSSxLQUFLaUQsZUFBZSxDQUFDSyxLQUFLLENBQUMsQ0FBQzVMLGNBQWMsQ0FBQyxDQUFDLEVBQzVEO1lBQ0QsSUFBSXdMLHVCQUF1QixDQUFDbkksV0FBVyxDQUFDcUksYUFBYSxHQUFHNU0sOEJBQThCLENBQUMsS0FBS21HLFNBQVMsRUFBRTtjQUN0R3VHLHVCQUF1QixDQUFDSyxXQUFXLENBQUNILGFBQWEsR0FBRzVNLDhCQUE4QixFQUFFd00sWUFBWSxDQUFDaEQsSUFBSSxDQUFDO2NBQ3RHO1lBQ0Q7VUFDRDtRQUNEO01BQ0Q7SUFDRCxDQUFDO0lBQ0R3RCx5QkFBeUIsRUFBRSxlQUFBQSxDQUMxQnZNLEtBQVksRUFDWndNLGNBQXNCLEVBQ3RCOUksU0FBeUIsRUFDekJzRSxZQUEwQixFQUNBO01BQzFCO01BQ0EsTUFBTXlFLFdBQVcsR0FBR2xCLFdBQVcsQ0FBQ21CLGdCQUFnQixDQUFDRixjQUFjLENBQUM7TUFDaEUsSUFBSUcsaUJBQWlDLEdBQUcsRUFBRTtNQUMxQyxNQUFNQyx1QkFBdUIsR0FBR0MsV0FBVyxDQUFDQywyQkFBMkIsQ0FBQ0wsV0FBVyxFQUFFL0ksU0FBUyxDQUFDLENBQUNxSix1QkFBdUI7TUFDdkgsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDakgsYUFBYSxDQUFDaEcsS0FBSyxDQUFDLENBQUMsQ0FDL0MwRyxJQUFJLENBQUVSLE9BQXNCLElBQUs7UUFDakM7UUFDQSxJQUFJQSxPQUFPLEVBQUU7VUFDWixJQUFJakcsWUFBWTtVQUNoQmlHLE9BQU8sQ0FBQ3RFLE9BQU8sQ0FBRTJGLFVBQVUsSUFBSztZQUMvQixJQUFJLENBQUNzRSwwQkFBMEIsQ0FBQzdMLEtBQUssRUFBRXVILFVBQVUsQ0FBQztZQUNsRCxRQUFRQSxVQUFVLENBQUNnQyxJQUFJO2NBQ3RCLEtBQUssWUFBWTtnQkFDaEJ0SixZQUFZLEdBQUcsSUFBSSxDQUFDOEgsa0JBQWtCLENBQUNyRSxTQUFTLEVBQUU2RCxVQUFVLEVBQTJCdkgsS0FBSyxFQUFFZ0ksWUFBWSxDQUFDO2dCQUMzRyxJQUFJL0gsWUFBWSxJQUFJLENBQUMyTSx1QkFBdUIsQ0FBQzVILFFBQVEsQ0FBRS9FLFlBQVksQ0FBMkI4SSxJQUFJLENBQUMsRUFBRTtrQkFDcEc5SSxZQUFZLENBQUNpTixhQUFhLEdBQUcxRyxZQUFZLENBQUMyRyxZQUFZLENBQUNsTixZQUFxQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDdkc7Z0JBQ0E7Y0FDRCxLQUFLLFVBQVU7Z0JBQ2RBLFlBQVksR0FBRyxJQUFJLENBQUNrTCwwQkFBMEIsQ0FBQzVELFVBQVUsRUFBeUJ2SCxLQUFLLENBQUM7Z0JBQ3hGO2NBQ0QsS0FBSyxNQUFNO2NBQ1gsS0FBSyxTQUFTO2dCQUNiQyxZQUFZLEdBQUcsSUFBSSxDQUFDbUwsd0JBQXdCLENBQUM3RCxVQUFVLEVBQTRCdkgsS0FBSyxFQUFFZ0ksWUFBWSxDQUFDO2dCQUN2RztjQUNEO2dCQUNDLE1BQU0sSUFBSW9GLEtBQUssQ0FBQyx5QkFBeUI3RixVQUFVLENBQUNnQyxJQUFJLEVBQUUsQ0FBQztZQUM3RDtZQUNBb0QsaUJBQWlCLENBQUNsSyxJQUFJLENBQUN4QyxZQUFzQyxDQUFDO1VBQy9ELENBQUMsQ0FBQztRQUNIO1FBQ0E7TUFDRCxDQUFDLENBQUMsQ0FDRHlHLElBQUksQ0FBQyxNQUFNO1FBQ1hpRyxpQkFBaUIsR0FBRyxJQUFJLENBQUN2SCxtQkFBbUIsQ0FBQ3BGLEtBQUssRUFBRTJNLGlCQUE2QyxDQUFDO1FBQ2xHLE1BQU1uSixRQUFRLEdBQUd4RCxLQUFLLENBQUN5RCxTQUFTLENBQUMsQ0FBYTtRQUM5Q0QsUUFBUSxDQUFDNkosK0JBQStCLENBQUNWLGlCQUE2QyxDQUFDO1FBQ3ZGQSxpQkFBaUIsR0FBR25KLFFBQVEsQ0FBQzhKLGdCQUFnQixDQUFDLENBQUM7UUFDL0M7TUFDRCxDQUFDLENBQUMsQ0FDRHBHLEtBQUssQ0FBQyxVQUFVQyxHQUFHLEVBQUU7UUFDckJDLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLHNEQUFzREYsR0FBRyxFQUFZLENBQUM7TUFDakYsQ0FBQyxDQUFDLENBQ0RULElBQUksQ0FBQyxZQUFZO1FBQ2pCLE9BQU9pRyxpQkFBaUI7TUFDekIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVEWSxvQ0FBb0MsRUFBRSxlQUFBQSxDQUNyQ3ZOLEtBQVksRUFDWndNLGNBQXNCLEVBQ3RCOUksU0FBeUIsRUFDekJzRSxZQUEwQixFQUNBO01BQzFCLE1BQU14RSxRQUFRLEdBQUd4RCxLQUFLLENBQUN5RCxTQUFTLENBQUMsQ0FBYTtNQUM5QyxNQUFNa0osaUJBQWlCLEdBQUduSixRQUFRLENBQUNnSyxzQkFBc0IsQ0FBQyxDQUFDO01BQzNELElBQUliLGlCQUFpQixDQUFDNUgsTUFBTSxFQUFFO1FBQzdCLE9BQU9pSSxPQUFPLENBQUNDLE9BQU8sQ0FBQ04saUJBQWlCLENBQUM7TUFDMUM7TUFDQSxPQUFPLElBQUksQ0FBQ0oseUJBQXlCLENBQUN2TSxLQUFLLEVBQUV3TSxjQUFjLEVBQUU5SSxTQUFTLEVBQUVzRSxZQUFZLENBQUMsQ0FBQ3RCLElBQUksQ0FBQyxVQUMxRitHLG9CQUFvQyxFQUNuQztRQUNEakssUUFBUSxDQUFDa0ssc0JBQXNCLENBQUNELG9CQUFvQixDQUFDO1FBQ3JELE9BQU9BLG9CQUFvQjtNQUM1QixDQUFDLENBQUM7SUFDSCxDQUFDO0lBQ0RFLG9CQUFvQixFQUFFLFNBQUFBLENBQVUzTixLQUFZLEVBQUU0Tiw2QkFBMEQsRUFBUTtNQUMvRyxNQUFNQyxpQkFBaUIsR0FBRzdOLEtBQUssQ0FBQzhOLFNBQVMsQ0FBQyxDQUFDO01BQzNDLElBQUksT0FBT0QsaUJBQWlCLElBQUksUUFBUSxJQUFLQSxpQkFBaUIsRUFBY0UsR0FBRyxDQUFDLDBCQUEwQixDQUFDLEVBQUU7UUFDNUcsTUFBTUMseUJBQXlCLEdBQUdILGlCQUF1QztRQUN6RTtRQUNBRyx5QkFBeUIsQ0FBQ0MsUUFBUSxDQUFDTCw2QkFBNkIsQ0FBQ00sS0FBSyxDQUFDO1FBQ3ZFRix5QkFBeUIsQ0FBQ0csY0FBYyxDQUFDUCw2QkFBNkIsQ0FBQ1EsV0FBVyxDQUFDO1FBQ25GSix5QkFBeUIsQ0FBQ0ssbUJBQW1CLENBQUNULDZCQUE2QixDQUFDVSxnQkFBZ0IsQ0FBQztRQUM3Rk4seUJBQXlCLENBQUNPLG1CQUFtQixDQUFDWCw2QkFBNkIsQ0FBQ1ksZ0JBQWdCLENBQUM7TUFDOUYsQ0FBQyxNQUFNO1FBQ04sTUFBTUMsa0JBQWtCLEdBQUcsSUFBSUMsa0JBQWtCLENBQUM7VUFDakQsR0FBR2Q7UUFDSixDQUFDLENBQUM7UUFDRjVOLEtBQUssQ0FBQzJPLFNBQVMsQ0FBQ0Ysa0JBQWtCLENBQUM7TUFDcEM7SUFDRCxDQUFDO0lBRURHLGdDQUFnQyxFQUFFLFNBQUFBLENBQVU1TyxLQUFZLEVBQUU2TyxXQUFrQyxFQUFFO01BQzdGLE1BQU1DLGVBQWUsR0FBR0MsVUFBVSxDQUFDQyxnQkFBZ0IsQ0FBQ2hQLEtBQUssQ0FBQztNQUMxRCxNQUFNaVAsYUFBYSxHQUFHQyxnQkFBZ0IsQ0FBQ2xQLEtBQUssQ0FBQztNQUM3QyxNQUFNbVAsaUJBQWlCLEdBQUdOLFdBQVcsQ0FBQ2hLLElBQUksRUFBRXlHLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBR3VELFdBQVcsQ0FBQ2hLLElBQUksQ0FBQ3VLLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBR1AsV0FBVyxDQUFDaEssSUFBSTtNQUM5RyxJQUFJd0ssc0JBQW1EO01BRXZELE1BQU1DLHNDQUFzQyxHQUFHLFNBQUFBLENBQUEsRUFBeUM7UUFDdkYsSUFBSXRQLEtBQUssQ0FBQ1csSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJWCxLQUFLLENBQUN1UCxjQUFjLENBQUMsQ0FBQyxFQUFFO1VBQzFELE9BQU87WUFDTnJCLEtBQUssRUFBRWUsYUFBYSxDQUFDTyxPQUFPLENBQUMsNkNBQTZDLENBQUM7WUFDM0VwQixXQUFXLEVBQUVhLGFBQWEsQ0FBQ08sT0FBTyxDQUFDLDJDQUEyQyxFQUFFOUosU0FBUyxFQUFFeUosaUJBQWlCLENBQUM7WUFDN0diLGdCQUFnQixFQUFFbUIsc0JBQXNCLENBQUNDO1VBQzFDLENBQUM7UUFDRjtRQUNBLE9BQU87VUFDTnhCLEtBQUssRUFBRWUsYUFBYSxDQUFDTyxPQUFPLENBQUMsNkNBQTZDLENBQUM7VUFDM0VwQixXQUFXLEVBQUVhLGFBQWEsQ0FBQ08sT0FBTyxDQUFDLDRDQUE0QyxFQUFFOUosU0FBUyxFQUFFeUosaUJBQWlCLENBQUM7VUFDOUdiLGdCQUFnQixFQUFFbUIsc0JBQXNCLENBQUNDO1FBQzFDLENBQUM7TUFDRixDQUFDO01BRUQsTUFBTUMsaUJBQWlCLEdBQUczUCxLQUFLLENBQUM0UCxTQUFTLENBQUMsQ0FBQztNQUMzQyxNQUFNQyxpQkFBaUIsR0FBR2YsZUFBZSxDQUFDZ0IsTUFBTSxJQUFJaEIsZUFBZSxDQUFDaUIsT0FBTyxFQUFFaEwsTUFBTTtNQUNuRixJQUFJNEssaUJBQWlCLElBQUksQ0FBQyxjQUFjLENBQUNLLElBQUksQ0FBQ0wsaUJBQWlCLENBQUMsRUFBRTtRQUNqRTtRQUNBLElBQUlFLGlCQUFpQixFQUFFO1VBQ3RCO1VBQ0FSLHNCQUFzQixHQUFHQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsTUFBTTtVQUNORCxzQkFBc0IsR0FBRztZQUN4Qm5CLEtBQUssRUFBRWUsYUFBYSxDQUFDTyxPQUFPLENBQUMsNkNBQTZDLENBQUM7WUFDM0VwQixXQUFXLEVBQUVhLGFBQWEsQ0FBQ08sT0FBTyxDQUFDLGdDQUFnQyxFQUFFOUosU0FBUyxFQUFFeUosaUJBQWlCLENBQUM7WUFDbEdiLGdCQUFnQixFQUFFbUIsc0JBQXNCLENBQUNDO1VBQzFDLENBQUM7UUFDRjtNQUNELENBQUMsTUFBTSxJQUFJRyxpQkFBaUIsRUFBRTtRQUM3QjtRQUNBUixzQkFBc0IsR0FBR0Msc0NBQXNDLENBQUMsQ0FBQztNQUNsRSxDQUFDLE1BQU07UUFDTkQsc0JBQXNCLEdBQUc7VUFDeEJuQixLQUFLLEVBQUVlLGFBQWEsQ0FBQ08sT0FBTyxDQUFDLG9DQUFvQyxDQUFDO1VBQ2xFcEIsV0FBVyxFQUFFYSxhQUFhLENBQUNPLE9BQU8sQ0FBQywyQ0FBMkMsRUFBRTlKLFNBQVMsRUFBRXlKLGlCQUFpQixDQUFDO1VBQzdHYixnQkFBZ0IsRUFBRW1CLHNCQUFzQixDQUFDUTtRQUMxQyxDQUFDO01BQ0Y7TUFDQSxJQUFJcEQsV0FBVyxDQUFDcUQsYUFBYSxDQUFDbFEsS0FBSyxDQUFDLENBQUNtUSxXQUFXLENBQUMsQ0FBQyxDQUFDQyxRQUFRLEVBQUU7UUFDNUQsSUFBSVAsaUJBQWlCLEVBQUU7VUFDdEJSLHNCQUFzQixHQUFHQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsTUFBTTtVQUNORCxzQkFBc0IsR0FBRztZQUN4Qm5CLEtBQUssRUFBRWUsYUFBYSxDQUFDTyxPQUFPLENBQUMsNkNBQTZDLENBQUM7WUFDM0VwQixXQUFXLEVBQUVhLGFBQWEsQ0FBQ08sT0FBTyxDQUFDLDJDQUEyQyxDQUFDO1lBQy9FbEIsZ0JBQWdCLEVBQUVtQixzQkFBc0IsQ0FBQ0M7VUFDMUMsQ0FBQztRQUNGO01BQ0Q7TUFDQUwsc0JBQXNCLENBQUNiLGdCQUFnQixHQUFJeE8sS0FBSyxDQUFDeUQsU0FBUyxDQUFDLENBQUMsQ0FBYzRNLG9CQUFvQixDQUFDLENBQUM7TUFFaEcsSUFBSWhCLHNCQUFzQixDQUFDYixnQkFBZ0IsS0FBSyxNQUFNLEVBQUU7UUFDdkQsTUFBTThCLGFBQWEsR0FBR3RRLEtBQUssQ0FBQzhOLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksT0FBT3dDLGFBQWEsS0FBSyxRQUFRLElBQUlBLGFBQWEsS0FBS2pCLHNCQUFzQixDQUFDakIsV0FBVyxFQUFFO1VBQzlGO1VBQ0E7UUFDRDtRQUNBcE8sS0FBSyxDQUFDMk8sU0FBUyxDQUFDVSxzQkFBc0IsQ0FBQ2pCLFdBQVcsQ0FBQztNQUNwRCxDQUFDLE1BQU07UUFDTixJQUFJLENBQUNULG9CQUFvQixDQUFDM04sS0FBSyxFQUFFcVAsc0JBQXNCLENBQUM7TUFDekQ7SUFDRCxDQUFDO0lBRURrQix1QkFBdUIsRUFBRSxTQUFBQSxDQUFVbkssTUFBYSxFQUFFb0sscUJBQTJDLEVBQVE7TUFDcEcsTUFBTUMsUUFBUSxHQUFHckssTUFBTSxJQUFJQSxNQUFNLENBQUNzSyxhQUFhLENBQUMsQ0FBQztRQUNoREMscUJBQXFCLEdBQUdILHFCQUFxQixJQUFJQSxxQkFBcUIsQ0FBQzFNLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQztNQUUzRyxJQUFJME0scUJBQXFCLElBQUksQ0FBQ0cscUJBQXFCLEVBQUU7UUFDcERGLFFBQVEsQ0FBQ0csa0JBQWtCLENBQUMsTUFBTTtVQUNqQztVQUNBLElBQUksQ0FBQ0oscUJBQXFCLENBQUMxTSxXQUFXLENBQUMsd0JBQXdCLENBQUMsRUFBRTtZQUNqRTBNLHFCQUFxQixDQUFDbEUsV0FBVyxDQUFDLHdCQUF3QixFQUFFLElBQUksQ0FBQztZQUNqRXVFLFVBQVUsQ0FBQyxNQUFNO2NBQ2hCTCxxQkFBcUIsQ0FBQ2xFLFdBQVcsQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUM7Y0FDbEU7Y0FDQWtFLHFCQUFxQixDQUFDbEUsV0FBVyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztjQUN6RCxNQUFNd0UsaUJBQWlCLEdBQUcxSyxNQUFNLENBQUMySyxtQkFBbUIsQ0FBQyxDQUFxQjtjQUMxRVAscUJBQXFCLENBQUNsRSxXQUFXLENBQUMsa0JBQWtCLEVBQUV3RSxpQkFBaUIsQ0FBQztjQUN4RU4scUJBQXFCLENBQUNsRSxXQUFXLENBQUMsMEJBQTBCLEVBQUV3RSxpQkFBaUIsQ0FBQy9MLE1BQU0sQ0FBQztjQUN2RixNQUFNdkIsUUFBUSxHQUFHNEMsTUFBTSxDQUFDM0MsU0FBUyxDQUFDLENBQWE7Y0FDL0MsTUFBTXVOLDRCQUE0QixHQUFHQyxJQUFJLENBQUNDLEtBQUssQ0FBQzFOLFFBQVEsQ0FBQzJOLGVBQWUsQ0FBQ0MscUJBQXFCLENBQUM7Y0FDL0ZDLGFBQWEsQ0FBQ0MsbUJBQW1CLENBQUNkLHFCQUFxQixFQUFFUSw0QkFBNEIsRUFBRUYsaUJBQWlCLEVBQUUsT0FBTyxDQUFDO2NBQ2xIO2NBQ0FTLFlBQVksQ0FBQ0MsbUNBQW1DLENBQUNoQixxQkFBcUIsRUFBRU0saUJBQWlCLENBQUM7Y0FDMUYsTUFBTTNNLFNBQVMsR0FBR2lDLE1BQU0sR0FBR0EsTUFBTSxDQUFDM0MsU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJO2NBQ3BELElBQUlVLFNBQVMsRUFBRTtnQkFDYkEsU0FBUyxDQUFjc04sY0FBYyxDQUFDckwsTUFBTSxDQUFDO2NBQy9DO2NBQ0EsSUFBSSxDQUFDc0wscUJBQXFCLENBQUN0TCxNQUFNLENBQUM7WUFDbkMsQ0FBQyxFQUFFLENBQUMsQ0FBQztVQUNOO1FBQ0QsQ0FBQyxDQUFDO1FBQ0ZvSyxxQkFBcUIsQ0FBQ2xFLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUM7TUFDaEU7SUFDRCxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUNDcUYsaUNBQWlDLEVBQUUsU0FBQUEsQ0FBVUMsVUFBZ0MsRUFBRXBPLFFBQWtCLEVBQVE7TUFDeEcsTUFBTW1ELEtBQUssR0FBR2lMLFVBQVUsQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FBQ2hSLFFBQVEsQ0FBQyxDQUFDO01BQ3JELElBQUk4RixLQUFLLEVBQUU7UUFDVm5ELFFBQVEsQ0FBQ3NPLGdDQUFnQyxDQUFDLElBQUlDLGFBQWEsQ0FBVSxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDQywwQkFBMEIsQ0FBQ0osVUFBVSxFQUFFakwsS0FBSyxFQUFFbkQsUUFBUSxDQUFDO01BQzdEO0lBQ0QsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7SUFDQ3lPLHlCQUF5QixFQUFFLFNBQUFBLENBQVVMLFVBQWdDLEVBQUU1UixLQUFZLEVBQVE7TUFDMUYsTUFBTWtTLHFEQUFxRCxHQUMxRGxTLEtBQUssSUFBSStPLFVBQVUsQ0FBQ29ELGtDQUFrQyxDQUFDblMsS0FBSyxFQUFFNFIsVUFBVSxDQUFDUSxvQkFBb0IsQ0FBQyxDQUFjLENBQUM7TUFDN0dwUyxLQUFLLENBQUN5RCxTQUFTLENBQUMsQ0FBQyxDQUFjNE8sZ0NBQWdDLENBQUMsQ0FBQyxFQUFFcEYsT0FBTyxDQUFDLENBQUNpRixxREFBcUQsQ0FBQztJQUNwSSxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0YsMEJBQTBCLEVBQUUsU0FBQUEsQ0FBVUosVUFBZ0MsRUFBRVUsU0FBcUIsRUFBRTlPLFFBQWtCLEVBQVE7TUFDeEgsTUFBTStPLCtCQUErQixHQUFHWCxVQUFVLENBQUNDLGVBQWUsQ0FBQyxDQUFDLENBQUNXLGdCQUFnQixDQUFDLENBQUMsQ0FBQ0MsZ0NBQWdDLENBQUMsQ0FBQztNQUMxSCxJQUFJSCxTQUFTLENBQUNJLHlCQUF5QixDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQ2xQLFFBQVEsQ0FBQ21QLHlCQUF5QixDQUFDLENBQUMsSUFBSUosK0JBQStCLEVBQUU7UUFDL0gsTUFBTUssbUNBQW1DLEdBQUdwUCxRQUFRLENBQUM2TyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3ZGQyxTQUFTLENBQUNPLHlCQUF5QixDQUFDLFlBQTBDO1VBQzdFLE9BQU9ELG1DQUFtQyxFQUFFRSxPQUFPO1FBQ3BELENBQUMsQ0FBQztNQUNIO0lBQ0QsQ0FBQztJQUVEQyxNQUFNLEVBQUUsZUFBQUEsQ0FBZ0IzTSxNQUFhLEVBQUU0TSxZQUF3QyxFQUFpQjtNQUMvRixNQUFNN08sU0FBUyxHQUFHaUMsTUFBTSxDQUFDM0MsU0FBUyxDQUFDLENBQWE7TUFDaEQsTUFBTXdQLFlBQVksR0FBRzlPLFNBQVMsRUFBRUwsV0FBVyxDQUFDLGtCQUFrQixDQUFDO01BQy9ESyxTQUFTLEVBQUVtSSxXQUFXLENBQUMsaUJBQWlCLEVBQUUyRyxZQUFZLENBQUM7TUFDdkQsSUFBSSxDQUFDQSxZQUFZLEVBQUU7UUFDbEJDLFlBQVksQ0FBQ0MsY0FBYyxDQUFDL00sTUFBTSxDQUFDO1FBQ25DdkcsaUJBQWlCLENBQUNrVCxNQUFNLENBQUNLLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQ2hOLE1BQU0sRUFBRTRNLFlBQVksQ0FBQyxDQUFDO1FBQzVEakUsVUFBVSxDQUFDc0UsWUFBWSxDQUFDak4sTUFBTSxDQUFDO1FBQy9CLE9BQU8ySSxVQUFVLENBQUN1RSxTQUFTLENBQUNsTixNQUFNLENBQUMsQ0FDakNNLElBQUksQ0FBRTFHLEtBQVksSUFBVztVQUM3QixJQUFJLENBQUN1USx1QkFBdUIsQ0FBQ3ZRLEtBQUssRUFBRUEsS0FBSyxDQUFDa00saUJBQWlCLENBQUMsVUFBVSxDQUF5QixDQUFDO1VBQ2hHO1FBQ0QsQ0FBQyxDQUFDLENBQ0RoRixLQUFLLENBQUMsVUFBVXFNLE1BQU0sRUFBRTtVQUN4Qm5NLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLCtDQUErQyxFQUFFa00sTUFBZ0IsQ0FBQztRQUM3RSxDQUFDLENBQUM7TUFDSjtNQUNBLE9BQU92RyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0lBQ0N1RyxlQUFlLEVBQUUsZUFBQUEsQ0FBZ0J4VCxLQUFZLEVBQTJCO01BQ3ZFLE9BQU93RyxZQUFZLENBQUNDLFVBQVUsQ0FBQ3pHLEtBQUssQ0FBQyxDQUNuQzBHLElBQUksQ0FBQyxNQUFPQyxLQUFLLElBQThCO1FBQy9DLE1BQU1xQixZQUFZLEdBQUc2RSxXQUFXLENBQUNnRixlQUFlLENBQUM3UixLQUFLLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUN1TixvQ0FBb0MsQ0FDL0N2TixLQUFLLEVBQ0x3RyxZQUFZLENBQUNtQyxhQUFhLENBQVMzSSxLQUFLLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxFQUM3RDJHLEtBQUssQ0FBQzdGLFlBQVksQ0FBQyxDQUFDLEVBQ3BCa0gsWUFDRCxDQUFDO01BQ0YsQ0FBQyxDQUFDLENBQ0R0QixJQUFJLENBQUVyQixVQUFVLElBQUs7UUFDcEJyRixLQUFLLENBQUNrTSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsRUFBY0ksV0FBVyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQztRQUMvRixPQUFPakgsVUFBVTtNQUNsQixDQUFDLENBQUM7SUFDSixDQUFDO0lBRURvTyxPQUFPLEVBQUUsZUFBQUEsQ0FBZ0J6VCxLQUFZLEVBQWlCO01BQ3JELE9BQVFILGlCQUFpQixDQUFDNFQsT0FBTyxDQUFxQ0wsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDcFQsS0FBSyxDQUFDLENBQUMsQ0FBQzBHLElBQUksQ0FBQyxNQUFNO1FBQ3JHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7UUFDRyxNQUFNZ04sZUFBZSxHQUFHMVQsS0FBSyxDQUFDMlQsY0FBYyxDQUFDLENBQUM7UUFDOUMsSUFBSUQsZUFBZSxFQUFFO1VBQ3BCQSxlQUFlLENBQUNFLGlCQUFpQixDQUFDLElBQTBCLENBQUM7UUFDOUQ7UUFDQTtNQUNELENBQUMsQ0FBQztJQUNILENBQUM7SUFDREMsaUJBQWlCLEVBQUUsU0FBQUEsQ0FBVTdULEtBQVksRUFBRTZPLFdBQWtDLEVBQUU7TUFDOUUsTUFBTWlGLHNCQUFzQixHQUFHOVQsS0FBSyxDQUFDa00saUJBQWlCLENBQUMsVUFBVSxDQUFxQztNQUN0RyxNQUFNMUksUUFBUSxHQUFHeEQsS0FBSyxDQUFDeUQsU0FBUyxDQUFDLENBQWE7TUFDOUMsTUFBTXNRLHdCQUF3QixHQUFHLElBQUlDLHdCQUF3QixDQUFDbkYsV0FBVyxDQUFDO01BQzFFaUYsc0JBQXNCLEVBQUV4SCxXQUFXLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDO01BQzlEek0saUJBQWlCLENBQUNnVSxpQkFBaUIsQ0FBQ1QsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDcFQsS0FBSyxFQUFFNk8sV0FBVyxDQUFDLENBQUM7TUFDckUsSUFBSTtRQUNILElBQUksQ0FBQ29GLCtCQUErQixDQUFDalUsS0FBSyxFQUFFNk8sV0FBVyxDQUFDO1FBQ3hELElBQUksQ0FBQ3FGLDBCQUEwQixDQUFDbFUsS0FBSyxFQUFFNk8sV0FBVyxDQUFDO1FBQ25ELElBQUksQ0FBQ0QsZ0NBQWdDLENBQUM1TyxLQUFLLEVBQUU2TyxXQUFXLENBQUM7UUFDekQsSUFBSSxDQUFDc0YsaUNBQWlDLENBQUNuVSxLQUFLLEVBQUU2TyxXQUFXLENBQUM7UUFDMUQsSUFBSSxDQUFDdUYsMkJBQTJCLENBQUNwVSxLQUFLLEVBQUU2TyxXQUFXLENBQUM7UUFFcEQ3TyxLQUFLLENBQUN5RCxTQUFTLENBQUMsQ0FBQyxFQUFFNFEsU0FBUyxDQUFDLG1CQUFtQixFQUFFO1VBQUVDLHFCQUFxQixFQUFFUDtRQUF5QixDQUFDLENBQUM7UUFDdEcsTUFBTVEsY0FBYyxHQUFHUix3QkFBd0IsQ0FBQ1MsaUJBQWlCLENBQUMsQ0FBQztRQUNuRTtBQUNIO0FBQ0E7QUFDQTtBQUNBO1FBQ0csTUFBTUMsT0FBTyxHQUFHelUsS0FBSyxDQUFDa00saUJBQWlCLENBQUMsQ0FBQztRQUN6QztRQUNBLElBQUlsTSxLQUFLLENBQUMyVCxjQUFjLENBQUMsQ0FBQyxFQUFFekgsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSTJDLFdBQVcsQ0FBQ2hLLElBQUksSUFBSTRQLE9BQU8sRUFBRTtVQUN4RkMsV0FBVyxDQUFDQyxxQkFBcUI7VUFDaEM7VUFDQTNVLEtBQUssQ0FBQzJULGNBQWMsQ0FBQyxDQUFDLEVBQ3RCOUUsV0FBVyxDQUFDaEssSUFBSSxFQUNoQjRQLE9BQU8sRUFDUHpVLEtBQUssQ0FBQ2EsUUFBUSxDQUFDLENBQUMsRUFDaEJtTSxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUNqQixDQUFDO1FBQ0Y7UUFDQXpKLFFBQVEsQ0FBQ29SLGVBQWUsQ0FBQ0wsY0FBYyxDQUFDO01BQ3pDLENBQUMsQ0FBQyxPQUFPTSxDQUFDLEVBQUU7UUFDWHpOLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLHVDQUF1QyxFQUFFd04sQ0FBVyxDQUFDO01BQ2hFO0lBQ0QsQ0FBQztJQUVEWiwrQkFBK0IsRUFBRSxTQUFBQSxDQUFValUsS0FBWSxFQUFFNk8sV0FBa0MsRUFBRTtNQUM1RixNQUFNaUcsT0FBNkIsR0FBR2pHLFdBQVcsQ0FBQ2tHLE1BQU07TUFDeEQsTUFBTUMscUJBQStCLEdBQUcsRUFBRTtNQUMxQyxJQUFJRixPQUFPLEVBQUUvUCxNQUFNLEVBQUU7UUFDcEIsTUFBTXZCLFFBQVEsR0FBR3hELEtBQUssQ0FBQ3lELFNBQVMsQ0FBQyxDQUFhO1FBQzlDLE1BQU13UixlQUFlLEdBQUd6UixRQUFRLENBQUNnSyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3pELEtBQUssTUFBTXVILE1BQU0sSUFBSUQsT0FBTyxFQUFFO1VBQzdCLE1BQU1JLGFBQWEsR0FBR0QsZUFBZSxFQUFFMVUsSUFBSSxDQUFFZ0QsUUFBUSxJQUFLQSxRQUFRLENBQUNzQixJQUFJLEtBQUtrUSxNQUFNLENBQUMzSSxPQUFPLENBQUMsQ0FBQyxDQUFDO1VBQzdGLElBQUk4SSxhQUFhLEVBQUVsUixJQUFJLEVBQUU7WUFDeEIsTUFBTW1SLFlBQVksR0FBR0YsZUFBZSxFQUFFMVUsSUFBSSxDQUFFZ0QsUUFBUSxJQUFLQSxRQUFRLENBQUNwRCxHQUFHLEtBQUsrVSxhQUFhLEVBQUVsUixJQUFJLENBQUM7WUFDOUYsTUFBTW9SLG1CQUFtQixHQUFHRCxZQUFZLEVBQUV0USxJQUFJLElBQUlpUSxPQUFPLENBQUNuUSxJQUFJLENBQUUwUSxJQUFJLElBQUtBLElBQUksQ0FBQ2pKLE9BQU8sQ0FBQyxDQUFDLEtBQUsrSSxZQUFZLENBQUN0USxJQUFJLENBQUM7WUFDOUcsSUFBSSxDQUFDdVEsbUJBQW1CLElBQUlELFlBQVksRUFBRTNQLFFBQVEsS0FBSyxLQUFLLElBQUkyUCxZQUFZLEVBQUV0USxJQUFJLEVBQUU7Y0FDbkZtUSxxQkFBcUIsQ0FBQ3ZTLElBQUksQ0FBQyxJQUFJNlMsTUFBTSxDQUFDSCxZQUFZLENBQUN0USxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakU7VUFDRDtVQUNBbVEscUJBQXFCLENBQUN2UyxJQUFJLENBQUNzUyxNQUFNLENBQUM7UUFDbkM7UUFDQWxHLFdBQVcsQ0FBQ2tHLE1BQU0sR0FBR0MscUJBQXFCO01BQzNDO0lBQ0QsQ0FBQztJQUVEWiwyQkFBMkIsRUFBRSxTQUFBQSxDQUFVcFUsS0FBWSxFQUFFNk8sV0FBa0MsRUFBRTtNQUN4RixNQUFNbkwsU0FBUyxHQUFJMUQsS0FBSyxDQUFDYSxRQUFRLENBQUMsQ0FBQyxFQUFpQkMsWUFBWSxDQUFDLENBQUM7TUFDbEUsTUFBTTBMLGNBQWMsR0FBR3FDLFdBQVcsQ0FBQ2hLLElBQUksR0FBRyxHQUFHO01BQzdDLE1BQU1rTCxPQUFPLEdBQUdsQixXQUFXLENBQUNrQixPQUFPLEVBQUV3RixVQUFVLENBQUMsQ0FBQztNQUNqRCxJQUFJeEYsT0FBTyxLQUFLckssU0FBUyxFQUFFO1FBQzFCcUosVUFBVSxDQUFDeUcsMEJBQTBCLENBQUM5UixTQUFTLEVBQUVxTSxPQUFPLEVBQWtDdkQsY0FBYyxDQUFDO01BQzFHO0lBQ0QsQ0FBQztJQUVEMkgsaUNBQWlDLEVBQUUsU0FBQUEsQ0FBVW5VLEtBQVksRUFBRWdULFlBQW1DLEVBQUU7TUFDL0YsTUFBTXhQLFFBQVEsR0FBR3hELEtBQUssQ0FBQ3lELFNBQVMsQ0FBQyxDQUFhO01BQzlDLE1BQU1tTyxVQUFVLEdBQUdwTyxRQUFRLEVBQUVpUyxpQkFBaUIsQ0FBQyxDQUFDO01BQ2hELElBQUk3RCxVQUFVLEVBQUU4RCxlQUFlLENBQUNDLHVCQUF1QixDQUFDLENBQUMsRUFBRTtRQUMxRCxNQUFNM04sWUFBWSxHQUFHNEosVUFBVSxDQUFDQyxlQUFlLENBQUMsQ0FBQztRQUNqRCxNQUFNK0QsUUFBUSxHQUFHcFMsUUFBUSxDQUFDeUMsa0JBQWtCLENBQUMsQ0FBQztRQUM5QyxNQUFNNFAsOEJBQThCLEdBQUc3TixZQUFZLENBQ2pEOE4scUJBQXFCLENBQUMsQ0FBQyxDQUN2QkMsNkJBQTZCLENBQUNILFFBQVEsQ0FBQ0ksVUFBVSxDQUFDQyxjQUFjLENBQUM7UUFDbkUsSUFBSUosOEJBQThCLElBQUlBLDhCQUE4QixDQUFDOVEsTUFBTSxHQUFHLENBQUMsSUFBSWlPLFlBQVksQ0FBQ2tELFVBQVUsRUFBRTtVQUMzR2xELFlBQVksQ0FBQ2tELFVBQVUsQ0FBQ0MsT0FBTyxHQUFHbkQsWUFBWSxDQUFDa0QsVUFBVSxFQUFFQyxPQUFPLEVBQUV4USxNQUFNLENBQUMsR0FBRyxFQUFFa1EsOEJBQThCLENBQUMxUSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3ZIO01BQ0Q7SUFDRCxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7SUFDQ3VNLHFCQUFxQixFQUFFLGVBQUFBLENBQWdCMVIsS0FBWSxFQUFpQjtNQUNuRSxNQUFNd0QsUUFBUSxHQUFHeEQsS0FBSyxDQUFDeUQsU0FBUyxDQUFDLENBQWE7TUFDOUMsSUFBSUQsUUFBUSxDQUFDaVMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDVyxPQUFPLENBQUMsQ0FBQyxDQUFDakcsV0FBVyxDQUFDLENBQUMsRUFBRWtHLGFBQWEsS0FBSyxZQUFZLEVBQUU7UUFDekYsTUFBTXJPLFlBQVksR0FBR3hFLFFBQVEsRUFBRWlTLGlCQUFpQixDQUFDLENBQUMsRUFBRTVELGVBQWUsQ0FBQyxDQUFDO1FBQ3JFLE1BQU15RSxLQUFvQixHQUFHLEVBQUU7UUFDL0IsTUFBTTlTLFFBQVEsQ0FBQytTLHFCQUFxQixDQUFDRCxLQUFLLENBQUM7UUFDM0MsTUFBTUUsb0JBQW9CLEdBQUcsSUFBSUMsb0JBQW9CLENBQUMsQ0FBQztRQUN2RCxNQUFNQyxVQUFVLEdBQUdGLG9CQUFvQixDQUFDRyxXQUFXLENBQUNMLEtBQUssQ0FBQztRQUMxRCxNQUFNTSxXQUFXLEdBQUc1TyxZQUFZLENBQUM2TyxLQUFLLENBQUMsQ0FBQztRQUN4QzdPLFlBQVksQ0FBQzhPLDhCQUE4QixDQUFDLENBQUMsQ0FBQ0MsOEJBQThCLENBQUNMLFVBQVUsRUFBRUUsV0FBVyxDQUFDO1FBQ3JHNU8sWUFBWSxDQUFDOE8sOEJBQThCLENBQUMsQ0FBQyxDQUFDRSxtQkFBbUIsQ0FBQyxDQUFDO01BQ3BFO0lBQ0QsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyx1QkFBdUIsRUFBRSxTQUFBQSxDQUFValgsS0FBZSxFQUFZO01BQzdELE1BQU13RCxRQUFRLEdBQUd4RCxLQUFLLENBQUN5RCxTQUFTLENBQUMsQ0FBYTtNQUM5QyxJQUFJRCxRQUFRLENBQUMyTixlQUFlLENBQUMrRixPQUFPLENBQUNDLHVCQUF1QixFQUFFQyxzQkFBc0IsRUFBRTtRQUNyRixNQUFNQyxpQkFBaUIsR0FBRyxJQUFJLENBQUNDLHdCQUF3QixDQUFDOVQsUUFBUSxDQUFDO1FBQ2pFLE1BQU1zUSxzQkFBc0IsR0FBRzlULEtBQUssQ0FBQ2tNLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztRQUNsRTtRQUNBNEgsc0JBQXNCLEVBQUV4SCxXQUFXLENBQUMsc0JBQXNCLEVBQUU5SSxRQUFRLENBQUMrVCxnQkFBZ0IsR0FBRyxJQUFJLEdBQUdGLGlCQUFpQixDQUFDO1FBQ2pILE9BQ0MxWCxNQUFNLENBQUNpSyxJQUFJLENBQUNwRyxRQUFRLENBQUMyTixlQUFlLENBQUNxRyxjQUFjO1FBQ2xEO1FBQ0E7UUFBQSxDQUVDQyxNQUFNLENBQUVDLFNBQWlCLElBQ3pCLENBQUNMLGlCQUFpQixHQUNmN1QsUUFBUSxDQUFDMk4sZUFBZSxDQUFDcUcsY0FBYyxDQUFDRSxTQUFTLENBQUMsQ0FBQy9TLElBQUksQ0FDdERnVCxNQUFNLElBQUtBLE1BQU0sS0FBSyxhQUFhLElBQUlBLE1BQU0sS0FBSyxhQUNuRCxDQUFDLEdBQ0QsSUFDSixDQUFDO01BRUo7TUFDQSxPQUFPaFksTUFBTSxDQUFDaUssSUFBSSxDQUFDcEcsUUFBUSxDQUFDMk4sZUFBZSxDQUFDcUcsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0lBQ0NGLHdCQUF3QixFQUFFLFNBQUFBLENBQVU5VCxRQUFrQixFQUFXO01BQ2hFLE1BQU14RCxLQUFLLEdBQUd3RCxRQUFRLENBQUNvVSxVQUFVLENBQUMsQ0FBQztNQUNuQyxNQUFNQyxVQUFVLEdBQUdyVSxRQUFRLENBQUN5QyxrQkFBa0IsQ0FBQyxDQUFDLENBQUNDLE9BQXFFO01BQ3RILE1BQU00UixnQkFBZ0IsR0FBR0QsVUFBVSxDQUNqQ0osTUFBTSxDQUFFTSxDQUFDLElBQUtBLENBQUMsQ0FBQ2hPLEtBQUssSUFBSWdPLENBQUMsQ0FBQ3BRLFlBQVksSUFBSW9RLENBQUMsQ0FBQ3BRLFlBQVksS0FBSyxnQkFBZ0IsQ0FBQyxDQUMvRWIsR0FBRyxDQUFFaVIsQ0FBQyxJQUFLQSxDQUFDLENBQUNwUSxZQUFZLENBQUM7TUFFNUIsTUFBTXFRLGdCQUFnQixHQUFHaFksS0FBSyxDQUM1Qk0sVUFBVSxDQUFDLENBQUMsQ0FDWndHLEdBQUcsQ0FBRXpHLE1BQU0sSUFBS21ELFFBQVEsQ0FBQ3lDLGtCQUFrQixDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDM0YsSUFBSSxDQUFFd1gsQ0FBQyxJQUFLQSxDQUFDLENBQUNoUCxJQUFJLEtBQUsxSSxNQUFNLENBQUNJLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7TUFFeEc7TUFDQSxNQUFNd1gsdUJBQXVCLEdBQUcsSUFBSUMsR0FBRyxDQUFTLENBQUM7TUFDakQsU0FBU0MsYUFBYUEsQ0FBQzNYLEdBQTBCLEVBQVE7UUFDeEQ7UUFDQSxJQUFJQSxHQUFHLENBQUNtSCxZQUFZLElBQUluSCxHQUFHLENBQUNOLGFBQWEsS0FBS3dGLFNBQVMsRUFBRTtVQUN4RHVTLHVCQUF1QixDQUFDRyxHQUFHLENBQUM1WCxHQUFHLENBQUNtSCxZQUFZLENBQUM7UUFDOUM7O1FBRUE7UUFDQW5ILEdBQUcsQ0FBQzJKLFNBQVMsRUFBRWtPLG9CQUFvQixFQUFFelcsT0FBTyxDQUFFMFcsb0JBQW9CLElBQUs7VUFDdEUsTUFBTUMsZ0JBQWdCLEdBQUdWLFVBQVUsQ0FBQ3RYLElBQUksQ0FBRXdYLENBQUMsSUFBS0EsQ0FBQyxDQUFDaFAsSUFBSSxLQUFLdVAsb0JBQW9CLENBQUM7VUFDaEYsSUFBSUMsZ0JBQWdCLEVBQUU1USxZQUFZLEVBQUU7WUFDbkNzUSx1QkFBdUIsQ0FBQ0csR0FBRyxDQUFDRyxnQkFBZ0IsQ0FBQzVRLFlBQVksQ0FBQztVQUMzRDtRQUNELENBQUMsQ0FBQztNQUNIO01BQ0FxUSxnQkFBZ0IsQ0FBQ3BXLE9BQU8sQ0FBRXZCLE1BQU0sSUFBSztRQUNwQyxJQUFJLENBQUNBLE1BQU0sRUFBRTtVQUNaO1FBQ0Q7UUFDQTtRQUNBOFgsYUFBYSxDQUFDOVgsTUFBK0IsQ0FBQzs7UUFFOUM7UUFDQUEsTUFBTSxDQUFDSCxhQUFhLEVBQUUwQixPQUFPLENBQUU0VyxpQkFBaUIsSUFBSztVQUNwRCxNQUFNQyxhQUFhLEdBQUdaLFVBQVUsQ0FBQ3RYLElBQUksQ0FBRXdYLENBQUMsSUFBS0EsQ0FBQyxDQUFDaFAsSUFBSSxLQUFLeVAsaUJBQWlCLENBQUM7VUFDMUUsSUFBSUMsYUFBYSxFQUFFO1lBQ2xCTixhQUFhLENBQUNNLGFBQXNDLENBQUM7VUFDdEQ7UUFDRCxDQUFDLENBQUM7TUFDSCxDQUFDLENBQUM7TUFFRixPQUFPWCxnQkFBZ0IsQ0FBQ1ksS0FBSyxDQUFFQyxRQUFRLElBQUtBLFFBQVEsSUFBSVYsdUJBQXVCLENBQUNXLEdBQUcsQ0FBQ0QsUUFBUSxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUNEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7SUFDQ0UsY0FBYyxFQUFFLFNBQUFBLENBQVVDLE9BQXlCLEVBQXNCO01BQ3hFLE1BQU1DLFdBQVcsR0FBR0QsT0FBTyxDQUFDRSxjQUFjLEdBQUcsQ0FBd0M7TUFDckYsSUFBSUQsV0FBVyxFQUFFakosTUFBTSxLQUFLcEssU0FBUyxFQUFFO1FBQ3RDO1FBQ0EsT0FBT3FULFdBQVcsQ0FBQ2pKLE1BQU07TUFDMUI7TUFDQTtNQUNBLE9BQU9nSixPQUFPLENBQUNHLDZCQUE2QixDQUFDLENBQUMsQ0FBQ0MsT0FBTztJQUN2RCxDQUFDO0lBQ0RDLGFBQWEsRUFBRSxTQUFBQSxDQUFVblosS0FBZSxFQUFFNk8sV0FBa0MsRUFBRWlLLE9BQTBCLEVBQVE7TUFDL0csTUFBTXRWLFFBQVEsR0FBR3hELEtBQUssQ0FBQ3lELFNBQVMsQ0FBQyxDQUFhO01BQzlDLE1BQU13UCxZQUFZLEdBQUd6UCxRQUFRLEVBQUVNLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQztNQUM5RCxJQUFJLENBQUNtUCxZQUFZLEVBQUU7UUFDbEI7UUFDQTtRQUNBLElBQUlwRSxXQUFXLENBQUNxSCxVQUFVLEVBQUVrRCxxQkFBcUIsS0FBSyxJQUFJLEVBQUU7VUFDM0QsTUFBTUMsY0FBYyxHQUFHN1MsWUFBWSxDQUFDbUMsYUFBYSxDQUFTM0ksS0FBSyxFQUFFLHNCQUFzQixDQUFDLElBQUksRUFBRTtVQUM5RixNQUFNc1osYUFBYSxHQUFHdFosS0FBSyxDQUFDYSxRQUFRLENBQUMsVUFBVSxDQUFjO1VBQzdELE1BQU0wWSxjQUFjLEdBQUdELGFBQWEsRUFBRTFWLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUN4RSxJQUFJLENBQUMyVixjQUFjLENBQUNGLGNBQWMsQ0FBQyxFQUFFO1lBQ3BDRSxjQUFjLENBQUNGLGNBQWMsQ0FBQyxHQUFHclosS0FBSyxDQUFDNlcsS0FBSyxDQUFDLENBQUM7WUFDOUN5QyxhQUFhLEVBQUVoTixXQUFXLENBQUMsaUJBQWlCLEVBQUVpTixjQUFjLENBQUM7VUFDOUQsQ0FBQyxNQUFNLElBQUlBLGNBQWMsQ0FBQ0YsY0FBYyxDQUFDLEtBQUtyWixLQUFLLENBQUM2VyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzVELE9BQU9oSSxXQUFXLENBQUNxSCxVQUFVLENBQUNrRCxxQkFBcUI7VUFDcEQ7UUFDRDtRQUVBLElBQUlJLGlCQUFpQixHQUFHLEtBQUs7UUFDN0IsTUFBTUMsSUFBSSxHQUFHNU0sV0FBVyxDQUFDcUQsYUFBYSxDQUFDbFEsS0FBSyxDQUFDO1FBQzdDLE1BQU04VCxzQkFBc0IsR0FBRzlULEtBQUssQ0FBQ2tNLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztRQUNsRSxNQUFNd04sdUJBQXVCLEdBQUcsNEJBQTRCO1FBQzVELE1BQU1DLG1CQUFtQixHQUFHN0Ysc0JBQXNCLEVBQUVoUSxXQUFXLENBQUM0Vix1QkFBdUIsQ0FBWTtRQUNuRyxNQUFNRSxVQUFVLEdBQUczSSxJQUFJLENBQUM0SSxTQUFTLENBQUNoTCxXQUFXLENBQUNrRyxNQUFNLElBQUksRUFBRSxDQUFDO1FBRTNELElBQUkrRCxPQUFPLEVBQUU7VUFDWjtBQUNKO0FBQ0E7QUFDQTtBQUNBO1VBQ0ksTUFBTWdCLFFBQVEsR0FBR0wsSUFBSSxFQUFFdEosV0FBVyxDQUFDLENBQStCO1VBQ2xFLE1BQU00SixVQUFVLEdBQUdqQixPQUFPLENBQUN2RCxVQUFVLENBQUMsYUFBYSxDQUFDO1VBQ3BELE1BQU15RSxlQUFlLEdBQUdsRyxzQkFBc0IsRUFBRWhRLFdBQVcsQ0FBQ3BFLGdCQUFnQixDQUFDLElBQUksSUFBSTtVQUVyRixNQUFNdWEsZ0JBQWdCLEdBQ3JCLENBQUVwTCxXQUFXLENBQUNrQixPQUFPLEtBQUssSUFBSSxJQUFJZ0ssVUFBVSxDQUFDaFYsTUFBTSxLQUFLLENBQUM7VUFBSztVQUM3RG1WLFNBQVMsQ0FBQ3JMLFdBQVcsQ0FBQ2tCLE9BQU8sRUFBRWdLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUM5Q0gsVUFBVSxLQUFLSSxlQUFlLElBQzlCbkwsV0FBVyxDQUFDaEssSUFBSSxLQUFLaVUsT0FBTyxDQUFDMU0sT0FBTyxDQUFDLENBQUM7VUFBSTtVQUMxQyxJQUFJLENBQUN5TSxjQUFjLENBQUNDLE9BQU8sQ0FBQyxLQUFLakssV0FBVyxFQUFFcUgsVUFBVSxFQUFFZ0QsT0FBTztVQUNsRSxNQUFNaUIsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDTCxRQUFRLENBQUNNLEtBQUs7VUFFM0NaLGlCQUFpQixHQUNoQlMsZ0JBQWdCLEtBQ2ZuRyxzQkFBc0IsRUFBRWhRLFdBQVcsQ0FBQ3RFLHFCQUFxQixDQUFDO1VBQUk7VUFDOURzVSxzQkFBc0IsRUFBRWhRLFdBQVcsQ0FBQ3JFLHFCQUFxQixDQUFDO1VBQUk7VUFDOUQwYSxrQkFBa0IsQ0FBQztVQUFJO1VBQ3hCLENBQUNSLG1CQUFtQjtRQUN0QjtRQUNBO1FBQ0EsSUFBSW5XLFFBQVEsQ0FBQ3lDLGtCQUFrQixDQUFDLENBQUMsQ0FBQ29VLGVBQWUsS0FBSyxJQUFJLEVBQUU7VUFDM0Q7VUFDQXJhLEtBQUssQ0FBQ3NhLHNCQUFzQixDQUFDLENBQUM7O1VBRTlCO1VBQ0EsSUFDQzlXLFFBQVEsQ0FBQ3lDLGtCQUFrQixDQUFDLENBQUMsQ0FBQ2lSLE9BQU8sQ0FBQzNOLElBQUksS0FBSyxXQUFXLElBQzFEL0YsUUFBUSxDQUFDeUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDaVIsT0FBTyxDQUFDM04sSUFBSSxLQUFLLFdBQVcsRUFDekQ7WUFDRHZKLEtBQUssQ0FBQ3VhLGtCQUFrQixDQUFDLENBQUM7VUFDM0I7UUFDRDtRQUNBMWEsaUJBQWlCLENBQUNzWixhQUFhLENBQUMvRixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUNwVCxLQUFLLEVBQUU2TyxXQUFXLEVBQUVpSyxPQUFPLENBQUMsQ0FBQztRQUMxRTtRQUNBO1FBQ0E7UUFDQXRWLFFBQVEsQ0FBQ2dYLG1CQUFtQixDQUFDM0wsV0FBVyxDQUFDO1FBQ3pDO1FBQ0FyTCxRQUFRLENBQUNpWCxjQUFjLENBQUMsQ0FBQztRQUV6QnphLEtBQUssQ0FBQ3FVLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNqQyxJQUFJbUYsaUJBQWlCLElBQUl4WixLQUFLLENBQUM0UCxTQUFTLENBQUMsQ0FBQyxJQUFJa0osT0FBTyxFQUFFO1VBQ3REQSxPQUFPLENBQ0w0QixjQUFjLENBQUM1QixPQUFPLENBQUM2QixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQ3BDQyxPQUFPLENBQUMsTUFBTTtZQUNkOUcsc0JBQXNCLEVBQUV4SCxXQUFXLENBQUNvTix1QkFBdUIsRUFBRSxLQUFLLENBQUM7VUFDcEUsQ0FBQyxDQUFDLENBQ0R4UyxLQUFLLENBQUMsVUFBVXFNLE1BQU0sRUFBRTtZQUN4Qm5NLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLGtDQUFrQyxFQUFFa00sTUFBZ0IsQ0FBQztVQUNoRSxDQUFDLENBQUM7VUFDSE8sc0JBQXNCLEVBQUV4SCxXQUFXLENBQUNvTix1QkFBdUIsRUFBRSxJQUFJLENBQUM7UUFDbkU7UUFDQTVGLHNCQUFzQixFQUFFeEgsV0FBVyxDQUFDOU0scUJBQXFCLEVBQUUsS0FBSyxDQUFDO1FBQ2pFc1Usc0JBQXNCLEVBQUV4SCxXQUFXLENBQUM3TSxxQkFBcUIsRUFBRSxLQUFLLENBQUM7UUFDakVxVSxzQkFBc0IsRUFBRXhILFdBQVcsQ0FBQzVNLGdCQUFnQixFQUFFa2EsVUFBVSxDQUFDOztRQUVqRTtRQUNBLElBQUlwVyxRQUFRLENBQUN5QyxrQkFBa0IsQ0FBQyxDQUFDLENBQUNpUixPQUFPLENBQUMzTixJQUFJLEtBQUssV0FBVyxFQUFFO1VBQy9EdUssc0JBQXNCLEVBQUV4SCxXQUFXLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO1FBQzVEO1FBRUEsTUFBTWlJLGNBQWMsR0FBRy9RLFFBQVEsQ0FBQ3FYLFlBQVksSUFBSSxFQUFFO1FBQ2xEdEcsY0FBYyxDQUFDM1MsT0FBTyxDQUFDa1osSUFBQSxJQUEyQztVQUFBLElBQTFDO1lBQUVDLE9BQU87WUFBRUMsUUFBUTtZQUFFQyxRQUFRO1lBQUV0YTtVQUFLLENBQUMsR0FBQW1hLElBQUE7VUFDNUQ5YSxLQUFLLENBQUMwUSxhQUFhLENBQUMsQ0FBQyxFQUFFd0ssV0FBVyxDQUFDSCxPQUFPLEVBQUVwYSxJQUFJLEVBQUVxYSxRQUFRLEVBQUVDLFFBQVEsQ0FBQztRQUN0RSxDQUFDLENBQUM7TUFDSDtNQUNBelgsUUFBUSxFQUFFOEksV0FBVyxDQUFDLGlCQUFpQixFQUFFMkcsWUFBWSxDQUFDO0lBQ3ZELENBQUM7SUFFRGtJLGtDQUFrQyxFQUFFLFNBQUFBLENBQVUvVSxNQUFhLEVBQXlCO01BQ25GLE1BQU01QyxRQUFRLEdBQUc0QyxNQUFNLENBQUMzQyxTQUFTLENBQUMsQ0FBYTtNQUMvQyxNQUFNMlgsY0FBYyxHQUFHNVgsUUFBUSxDQUFDNlgsMkJBQTJCLENBQUMsQ0FBQztNQUM3RCxNQUFNQyxjQUFjLEdBQUdsVixNQUFNLENBQUM4RixpQkFBaUIsQ0FBQyxDQUFDO01BQ2pELElBQUlxUCxzQkFBc0IsR0FBRyxLQUFLO01BQ2xDLElBQ0NELGNBQWMsS0FBSzVWLFNBQVMsSUFDNUJVLE1BQU0sQ0FBQzhGLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFcEksV0FBVyxDQUFDLFlBQVksQ0FBQyxLQUFLLEtBQUssSUFDbkVzQyxNQUFNLENBQUN2RixRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUVpRCxXQUFXLENBQUMsc0JBQXNCLENBQUMsRUFDL0Q7UUFDRHlYLHNCQUFzQixHQUFHLElBQUk7TUFDOUIsQ0FBQyxNQUFNLElBQ0xELGNBQWMsRUFBaUNFLFVBQVUsQ0FBQyxDQUFDLENBQUNDLGdCQUFnQixDQUFDLENBQUMsSUFBSTVPLFdBQVcsQ0FBQzZPLHdCQUF3QixFQUN0SDtRQUNESCxzQkFBc0IsR0FBRyxJQUFJO01BQzlCO01BRUEsSUFBSUEsc0JBQXNCLEVBQUU7UUFDM0JILGNBQWMsQ0FBQ2xGLFVBQVUsS0FBSyxDQUFDLENBQUM7UUFDaENrRixjQUFjLENBQUNsRixVQUFVLENBQUN5RixlQUFlLEdBQUc5TyxXQUFXLENBQUM2Tyx3QkFBd0I7TUFDakY7TUFFQSxPQUFPTixjQUFjO0lBQ3RCLENBQUM7SUFDRGxILDBCQUEwQixFQUFFLFNBQUFBLENBQVU5TixNQUFhLEVBQUU0TSxZQUFtQyxFQUFFO01BQ3pGLE1BQU14QyxxQkFBcUIsR0FBR3BLLE1BQU0sQ0FBQzhGLGlCQUFpQixDQUFDLFVBQVUsQ0FBcUM7TUFDdEd2TSxNQUFNLENBQUNDLE1BQU0sQ0FBQ29ULFlBQVksRUFBRSxJQUFJLENBQUNtSSxrQ0FBa0MsQ0FBQy9VLE1BQU0sQ0FBQyxDQUFDO01BQzVFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7TUFDRSxJQUFJQSxNQUFNLENBQUNzSyxhQUFhLENBQUMsQ0FBQyxFQUFFO1FBQzNCc0MsWUFBWSxDQUFDNEksU0FBUyxHQUFHLEtBQUs7TUFDL0I7TUFDQTtNQUNBO01BQ0E7TUFDQSxJQUFJcEwscUJBQXFCLEVBQUU7UUFDMUJBLHFCQUFxQixDQUFDbEUsV0FBVyxDQUFDLHNCQUFzQixFQUFFLEtBQUssQ0FBQztNQUNqRTtNQUVBLElBQUl1UCxPQUFPO01BQ1gsTUFBTUMsV0FBVyxHQUFHL00sVUFBVSxDQUFDQyxnQkFBZ0IsQ0FBQzVJLE1BQU0sQ0FBQztNQUN2RDtNQUNBLElBQUkwVixXQUFXLENBQUMvTCxPQUFPLENBQUNoTCxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ25DOFcsT0FBTyxHQUFHLElBQUlFLE1BQU0sQ0FBQztVQUFFaE0sT0FBTyxFQUFFK0wsV0FBVyxDQUFDL0wsT0FBTztVQUFFaU0sR0FBRyxFQUFFO1FBQUssQ0FBQyxDQUFDO01BQ2xFO01BQ0EsSUFBSUYsV0FBVyxDQUFDclAsV0FBVyxFQUFFO1FBQzVCdUcsWUFBWSxDQUFDbk8sSUFBSSxHQUFHaVgsV0FBVyxDQUFDclAsV0FBVztNQUM1QztNQUVBLE1BQU13UCxtQkFBbUIsR0FBRzdWLE1BQU0sQ0FBQzhWLHFCQUFxQixDQUFDLENBQUM7TUFDMUQsSUFBSUQsbUJBQW1CLElBQUlBLG1CQUFtQixDQUFDRSxXQUFXLENBQUMsQ0FBQyxFQUFFO1FBQzdEO1FBQ0EsSUFBS25KLFlBQVksQ0FBQ2pELE9BQU8sQ0FBeUJoTCxNQUFNLEdBQUcsQ0FBQyxFQUFFO1VBQzdEOFcsT0FBTyxHQUFHLElBQUlFLE1BQU0sQ0FBQztZQUFFaE0sT0FBTyxFQUFHaUQsWUFBWSxDQUFDakQsT0FBTyxDQUF5QnBLLE1BQU0sQ0FBQ21XLFdBQVcsQ0FBQy9MLE9BQU8sQ0FBQztZQUFFaU0sR0FBRyxFQUFFO1VBQUssQ0FBQyxDQUFDO1VBQ3ZILElBQUksQ0FBQ0ksZ0NBQWdDLENBQUNwSixZQUFZLEVBQUU4SSxXQUFXLEVBQUVELE9BQU8sQ0FBQztRQUMxRTtNQUNELENBQUMsTUFBTTtRQUNOLElBQUksQ0FBQ08sZ0NBQWdDLENBQUNwSixZQUFZLEVBQUU4SSxXQUFXLEVBQUVELE9BQU8sQ0FBQztNQUMxRTtNQUVBLElBQUksQ0FBQ1EseUJBQXlCLENBQUNqVyxNQUFNLEVBQUU0TSxZQUFZLENBQUM7SUFDckQsQ0FBQztJQUVEb0osZ0NBQWdDLEVBQUUsU0FBQUEsQ0FBVXZOLFdBQWtDLEVBQUV5TixVQUErQixFQUFFN0UsTUFBZSxFQUFFO01BQ2pJNUksV0FBVyxDQUFDa0IsT0FBTyxHQUFHMEgsTUFBTTtNQUM1QjVJLFdBQVcsQ0FBQ3FILFVBQVUsS0FBSyxDQUFDLENBQUM7TUFDN0IsSUFBSW9HLFVBQVUsQ0FBQ3hNLE1BQU0sRUFBRTtRQUN0QmpCLFdBQVcsQ0FBQ3FILFVBQVUsQ0FBQ2dELE9BQU8sR0FBR3JNLFdBQVcsQ0FBQzBQLG1CQUFtQixDQUFDRCxVQUFVLENBQUN4TSxNQUFNLENBQUM7TUFDcEYsQ0FBQyxNQUFNO1FBQ05qQixXQUFXLENBQUNxSCxVQUFVLENBQUNnRCxPQUFPLEdBQUd4VCxTQUFTO01BQzNDO0lBQ0QsQ0FBQztJQUNEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7SUFDQzJXLHlCQUF5QixFQUFFLFNBQUFBLENBQVVyYyxLQUFZLEVBQUU2TyxXQUFrQyxFQUFFO01BQ3RGLE1BQU0yTixPQUFPLEdBQUd4YyxLQUFLLENBQUN5YyxVQUFVLENBQUMsQ0FBeUM7TUFFMUUsSUFBSUQsT0FBTyxFQUFFRSxzQkFBc0IsS0FBSyxJQUFJLEVBQUU7UUFDN0MsTUFBTUMsY0FBYyxHQUFHLElBQUlaLE1BQU0sQ0FBQztVQUFFbFgsSUFBSSxFQUFFLGdCQUFnQjtVQUFFK1gsUUFBUSxFQUFFLElBQUk7VUFBRUMsTUFBTSxFQUFFO1FBQUssQ0FBQyxDQUFDO1FBQzNGLElBQUloTyxXQUFXLENBQUNrQixPQUFPLEVBQUU7VUFDeEJsQixXQUFXLENBQUNrQixPQUFPLEdBQUcsSUFBSWdNLE1BQU0sQ0FBQztZQUFFaE0sT0FBTyxFQUFFLENBQUM0TSxjQUFjLEVBQUU5TixXQUFXLENBQUNrQixPQUFPLENBQUM7WUFBRWlNLEdBQUcsRUFBRTtVQUFLLENBQUMsQ0FBQztRQUNoRyxDQUFDLE1BQU07VUFDTm5OLFdBQVcsQ0FBQ2tCLE9BQU8sR0FBRzRNLGNBQWM7UUFDckM7TUFDRDtJQUNELENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NHLDJCQUEyQixFQUFFLGVBQUFBLENBQzVCdlYsVUFBaUQsRUFDakRrUyxJQUFVLEVBQ1ZzRCxRQUFrRCxFQUNsREMsT0FBZSxFQUNpQztNQUNoRCxNQUFNQyxjQUFjLEdBQUcsSUFBSUMsU0FBUyxDQUFDLENBQUMsQ0FBQ0MsZUFBZSxDQUNyREMsR0FBRyxDQUFDQyxXQUFXLENBQUMsTUFBTTtRQUNyQixPQUFPQyxhQUFhLENBQUNOLE9BQU8sRUFBRXpWLFVBQVUsRUFBRSxLQUFLLENBQUM7TUFDakQsQ0FBQyxDQUFDLEVBQ0YsVUFDRCxDQUFDO01BQ0QsSUFBSSxDQUFDMFYsY0FBYyxFQUFFO1FBQ3BCLE9BQU9qUSxPQUFPLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUM7TUFDN0I7TUFDQSxNQUFNc1EsT0FBTyxHQUFHTixjQUFjLENBQUNPLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUU5RCxJQUFJalcsVUFBVSxDQUFDbUMsUUFBUSxFQUFFO1FBQ3hCLElBQUk2VCxPQUFPLEVBQUU7VUFDWixNQUFNRSxTQUFTLEdBQUcsSUFBSVAsU0FBUyxDQUFDLENBQUMsQ0FBQ0MsZUFBZSxDQUFDNVYsVUFBVSxDQUFDbUMsUUFBUSxFQUFZLFVBQVUsQ0FBQztVQUM1RixJQUFJK1QsU0FBUyxDQUFDQyxpQkFBaUIsSUFBSUQsU0FBUyxDQUFDQyxpQkFBaUIsQ0FBQ0MsUUFBUSxLQUFLLE1BQU0sRUFBRTtZQUNuRkosT0FBTyxDQUFDSyxXQUFXLENBQUNILFNBQVMsQ0FBQ0MsaUJBQWlCLENBQUM7VUFDakQsQ0FBQyxNQUFNO1lBQ05ILE9BQU8sQ0FBQ00sTUFBTSxDQUFDLENBQUM7VUFDakI7UUFDRDtNQUNELENBQUMsTUFBTTtRQUNOelcsR0FBRyxDQUFDQyxLQUFLLENBQUMsNkRBQTZERSxVQUFVLENBQUM4RCxNQUFNLEVBQUUsQ0FBQztRQUMzRixPQUFPMkIsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO01BQzdCO01BQ0EsTUFBTTZRLFNBQVMsR0FBRyxNQUFNQyxlQUFlLENBQUNDLE9BQU8sQ0FDOUNmLGNBQWMsQ0FBQ1MsaUJBQWlCLEVBQ2hDO1FBQUVPLE1BQU0sRUFBRSxDQUFDO01BQUUsQ0FBQyxFQUNieEUsSUFBSSxDQUFDeUUsYUFBYSxDQUFDLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQyxDQUF1Q0Msc0JBQXNCLENBQUMsQ0FDeEcsQ0FBQztNQUNELElBQUlyQixRQUFRLEVBQUVzQixPQUFPLEtBQUssZUFBZSxFQUFFO1FBQzFDLE9BQU9QLFNBQVMsQ0FBQ0osaUJBQWlCO01BQ25DO01BQ0EsT0FBT1ksUUFBUSxDQUFDQyxJQUFJLENBQUM7UUFDcEJoVixJQUFJLEVBQUUsS0FBSztRQUNYaVYsVUFBVSxFQUFFVixTQUFTO1FBQ3JCbE0sVUFBVSxFQUFFNkgsSUFBSSxDQUFDeUUsYUFBYSxDQUFDO01BQ2hDLENBQUMsQ0FBQztJQUNILENBQUM7SUFFRDFULGdCQUFnQixFQUFFLFNBQUFBLENBQVUxRSxRQUFpQixFQUFFO01BQzlDLFFBQVFBLFFBQVE7UUFDZixLQUFLLFVBQVU7VUFDZCxPQUFPMlksV0FBVyxDQUFDQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzVDLEtBQUssb0JBQW9CO1VBQ3hCLE9BQU9ELFdBQVcsQ0FBQ0UsOEJBQThCLENBQUMsQ0FBQztRQUNwRCxLQUFLLGVBQWU7VUFDbkIsT0FBT0YsV0FBVyxDQUFDRyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzVDO1VBQ0MsT0FBT2xaLFNBQVM7TUFDbEI7SUFDRCxDQUFDO0lBRURtWixvQkFBb0IsRUFBRSxTQUFBQSxDQUFVamUsVUFBMEIsRUFBRWtlLGFBQXFCLEVBQUVDLFlBQXFCLEVBQVk7TUFDbkgsSUFBSUMsT0FBaUIsR0FBRyxFQUFFO1FBQ3pCQyxjQUFjLEdBQUdyZSxVQUFVLENBQUNnRCxTQUFTLENBQUNrYixhQUFhLENBQUM7TUFFckQsSUFBSUcsY0FBYyxDQUFDQyxLQUFLLElBQUlELGNBQWMsQ0FBQ0MsS0FBSyxLQUFLLFVBQVUsRUFBRTtRQUNoRUQsY0FBYyxHQUFHcmUsVUFBVSxDQUFDZ0QsU0FBUyxDQUFDLEdBQUdrYixhQUFhLDhDQUE4QyxDQUFDO1FBQ3JHQSxhQUFhLEdBQUcsR0FBR0EsYUFBYSw4Q0FBOEM7TUFDL0U7TUFDQSxRQUFRRyxjQUFjLENBQUNsZCxLQUFLO1FBQzNCLEtBQUssbURBQW1EO1VBQ3ZELElBQUluQixVQUFVLENBQUNnRCxTQUFTLENBQUMsR0FBR2tiLGFBQWEseUJBQXlCLENBQUMsQ0FBQzlaLFFBQVEsQ0FBQyx1Q0FBdUMsQ0FBQyxFQUFFO1lBQ3RIcEUsVUFBVSxDQUFDZ0QsU0FBUyxDQUFDLEdBQUdrYixhQUFhLDhCQUE4QixDQUFDLENBQUNsZCxPQUFPLENBQUMsQ0FBQ3VkLE1BQWUsRUFBRUMsTUFBYyxLQUFLO2NBQ2pISixPQUFPLEdBQUdBLE9BQU8sQ0FBQ3JaLE1BQU0sQ0FDdkIsSUFBSSxDQUFDa1osb0JBQW9CLENBQUNqZSxVQUFVLEVBQUUsR0FBR2tlLGFBQWEsZ0NBQWdDTSxNQUFNLEVBQUUsQ0FDL0YsQ0FBQztZQUNGLENBQUMsQ0FBQztVQUNIO1VBQ0E7UUFDRCxLQUFLLHdEQUF3RDtRQUM3RCxLQUFLLDZDQUE2QztRQUNsRCxLQUFLLHNDQUFzQztRQUMzQyxLQUFLLCtEQUErRDtRQUNwRSxLQUFLLGdEQUFnRDtVQUNwREosT0FBTyxDQUFDdmMsSUFBSSxDQUFDN0IsVUFBVSxDQUFDZ0QsU0FBUyxDQUFDLEdBQUdrYixhQUFhLGNBQWMsQ0FBQyxDQUFDO1VBQ2xFO1FBQ0QsS0FBSywrQ0FBK0M7UUFDcEQsS0FBSyw4REFBOEQ7VUFDbEU7UUFDRDtVQUNDO1VBQ0E7VUFDQSxJQUFJQyxZQUFZLElBQUlELGFBQWEsQ0FBQzFlLE9BQU8sQ0FBQzJlLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5REMsT0FBTyxDQUFDdmMsSUFBSSxDQUFDcWMsYUFBYSxDQUFDMVAsU0FBUyxDQUFDMlAsWUFBWSxDQUFDaGEsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzlEO1VBQ0Q7VUFDQWlhLE9BQU8sQ0FBQ3ZjLElBQUksQ0FBQytGLFlBQVksQ0FBQzZXLGlCQUFpQixDQUFDUCxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7VUFDakU7TUFDRjtNQUNBLE9BQU9FLE9BQU87SUFDZixDQUFDO0lBQ0RNLGlDQUFpQyxFQUFFLFNBQUFBLENBQVVsWixNQUFhLEVBQUVtWixRQUF1QixFQUFFN1QsV0FBeUIsRUFBRTtNQUMvRyxNQUFNTyx1QkFBdUIsR0FBRzdGLE1BQU0sQ0FBQzhGLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztNQUNwRSxJQUFJLENBQUNELHVCQUF1QixFQUFFO1FBQzdCO01BQ0Q7TUFDQSxNQUFNRSxhQUFhLEdBQUdGLHVCQUF1QixDQUFDRyxPQUFPLENBQUMsQ0FBQztNQUN2RCxNQUFNb1QsMEJBQTBCLEdBQUdELFFBQVEsQ0FBQzlILE1BQU0sQ0FBRWdJLE9BQW9CLElBQUs7UUFDNUUsT0FBTyxJQUFJLENBQUNoVSxxQ0FBcUMsQ0FBQ2dVLE9BQU8sQ0FBQztNQUMzRCxDQUFDLENBQUM7TUFDRixNQUFNelQsZUFBZSxHQUFHNUYsTUFBTSxDQUFDOUYsVUFBVSxDQUFDLENBQUM7TUFDM0MsSUFBSW9mLHFCQUFxQixFQUFFQyxrQkFBa0IsRUFBRUMsNEJBQTRCLEVBQUVDLDZCQUE2QjtNQUMxRyxLQUFLLE1BQU1DLENBQUMsSUFBSTlULGVBQWUsRUFBRTtRQUNoQzJULGtCQUFrQixHQUFHM1QsZUFBZSxDQUFDOFQsQ0FBQyxDQUFDLENBQUNyZixjQUFjLENBQUMsQ0FBQztRQUN4RCxLQUFLLE1BQU1zZixDQUFDLElBQUlQLDBCQUEwQixFQUFFO1VBQzNDSyw2QkFBNkIsR0FBR0wsMEJBQTBCLENBQUNPLENBQUMsQ0FBQyxDQUFDaFgsSUFBSTtVQUNsRSxJQUFJNFcsa0JBQWtCLEtBQUtFLDZCQUE2QixFQUFFO1lBQ3pERCw0QkFBNEIsR0FBRyxJQUFJO1lBQ25DO1VBQ0Q7VUFDQSxJQUFJbFUsV0FBVyxJQUFJQSxXQUFXLENBQUMzQyxJQUFJLEtBQUs4Vyw2QkFBNkIsRUFBRTtZQUN0RUgscUJBQXFCLEdBQUdoVSxXQUFXLENBQUMzQyxJQUFJO1VBQ3pDO1FBQ0Q7UUFDQSxJQUFJNlcsNEJBQTRCLEVBQUU7VUFDakMzVCx1QkFBdUIsQ0FBQ0ssV0FBVyxDQUFDSCxhQUFhLEdBQUc1TSw4QkFBOEIsRUFBRW9nQixrQkFBa0IsQ0FBQztVQUN2RztRQUNEO01BQ0Q7TUFDQSxJQUFJLENBQUNDLDRCQUE0QixJQUFJRixxQkFBcUIsRUFBRTtRQUMzRHpULHVCQUF1QixDQUFDSyxXQUFXLENBQUNILGFBQWEsR0FBRzVNLDhCQUE4QixFQUFFbWdCLHFCQUFxQixDQUFDO01BQzNHO0lBQ0QsQ0FBQztJQUNETSxVQUFVLEVBQUUsZUFBQUEsQ0FDWDVaLE1BQTRCLEVBQzVCNlosaUJBQXVDLEVBQ3ZDQyxZQUF3RSxFQUNyRDtNQUNuQixJQUFJQyxZQUFZLEdBQUcsSUFBSTtNQUN2QixJQUFJLENBQUNGLGlCQUFpQixFQUFFO1FBQ3ZCO1FBQ0E7UUFDQSxPQUFPalQsT0FBTyxDQUFDQyxPQUFPLENBQUNrVCxZQUFZLENBQUM7TUFDckM7TUFDQSxNQUFNQyxTQUFTLEdBQUdGLFlBQVksQ0FBQ25ELFFBQVE7TUFDdkMsTUFBTXNELGFBQWEsR0FBRyxNQUFNRCxTQUFTLENBQUN0YyxXQUFXLENBQVNtYyxpQkFBaUIsRUFBRSxjQUFjLENBQUM7TUFDNUYsSUFBSUksYUFBYSxJQUFJQSxhQUFhLENBQUNyYixRQUFRLElBQUlxYixhQUFhLENBQUNyYixRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7UUFDbkZvYixTQUFTLENBQUNFLGlCQUFpQixDQUFDbGEsTUFBTSxFQUFFLFlBQVksRUFBRTZaLGlCQUFpQixDQUFDO1FBQ3BFRSxZQUFZLEdBQUcsS0FBSztNQUNyQjtNQUNBLElBQUsvWixNQUFNLENBQWdCMkgsR0FBRyxJQUFJcVMsU0FBUyxDQUFDL0IsT0FBTyxLQUFLLGVBQWUsRUFBRTtRQUN4RSxJQUFJLENBQUNrQyx3QkFBd0IsQ0FBQ0gsU0FBUyxFQUFFaGEsTUFBTSxFQUFFLElBQUksQ0FBQ0osYUFBYSxDQUFDSSxNQUFlLENBQUMsQ0FBQztNQUN0RjtNQUNBLE9BQU80RyxPQUFPLENBQUNDLE9BQU8sQ0FBQ2tULFlBQVksQ0FBQztJQUNyQyxDQUFDO0lBQ0RLLGFBQWEsRUFBRSxTQUFBQSxDQUFVTixZQUE0QyxFQUFFO01BQ3RFLE9BQU9BLFlBQVksQ0FBQ2xZLFlBQVksSUFBSWtZLFlBQVksQ0FBQ2xZLFlBQVksQ0FBQ25ILFFBQVEsQ0FBQyxDQUFDLENBQUNDLFlBQVksQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFDRHlmLHdCQUF3QixFQUFFLFNBQUFBLENBQ3pCSCxTQUEyQixFQUMzQmhhLE1BQTRCLEVBQzVCbVosUUFBdUIsRUFDdkI3VCxXQUF5QixFQUN4QjtNQUNELElBQUkwVSxTQUFTLENBQUMvQixPQUFPLEtBQUssZUFBZSxFQUFFO1FBQzFDLElBQUksQ0FBQ2lCLGlDQUFpQyxDQUFDbFosTUFBTSxFQUFXbVosUUFBUSxFQUFFN1QsV0FBVyxDQUFDO01BQy9FO0lBQ0QsQ0FBQztJQUNEK1UsV0FBVyxFQUFFLFNBQUFBLENBQVVDLGlCQUF5QixFQUFFO01BQ2pELE9BQU9BLGlCQUFpQixJQUFJaGIsU0FBUztJQUN0QyxDQUFDO0lBQ0RpYixrQkFBa0IsRUFBRSxlQUFBQSxDQUNuQkMsVUFBMkQsRUFDM0RSLFNBQTJCLEVBQzNCaGEsTUFBNEIsRUFDWjtNQUNoQixJQUFJd2EsVUFBVSxFQUFFO1FBQ2YsT0FBT1IsU0FBUyxDQUFDRSxpQkFBaUIsQ0FBQ2xhLE1BQU0sRUFBRSxZQUFZLEVBQUV3YSxVQUFVLEVBQUUsQ0FBQyxDQUFDO01BQ3hFO01BQ0E7SUFDRCxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MsT0FBTyxFQUFFLGVBQUFBLENBQ1I3Z0IsS0FBMkIsRUFDM0I4Z0IsZ0JBQXdCLEVBQ3hCWixZQUF1RixFQUN0RjtNQUNELE1BQU10ZixVQUFVLEdBQUcsSUFBSSxDQUFDNGYsYUFBYSxDQUFDTixZQUFZLENBQUM7UUFDbERFLFNBQVMsR0FBR0YsWUFBWSxDQUFDbkQsUUFBUTtRQUNqQ2dFLFFBQVEsR0FBR1gsU0FBUyxDQUFDdkosS0FBSyxDQUFDN1csS0FBSyxDQUFDO1FBQ2pDdWYsUUFBUSxHQUFJdmYsS0FBSyxDQUFnQitOLEdBQUcsR0FBRyxJQUFJLENBQUMvSCxhQUFhLENBQUNoRyxLQUFjLENBQUMsR0FBRyxJQUFJO1FBQ2hGd0QsUUFBUSxHQUFJeEQsS0FBSyxDQUFXeUQsU0FBUyxDQUFDLENBQWE7TUFDcEQsSUFBSSxDQUFDOGIsUUFBUSxFQUFFO1FBQ2Q7UUFDQSxPQUFPdlMsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO01BQzdCO01BRUEsTUFBTTFGLFVBQVUsR0FBR2dZLFFBQVEsQ0FBQ2hmLElBQUksQ0FBQyxVQUFVa2YsT0FBTyxFQUFFO1FBQ25ELE9BQU9BLE9BQU8sQ0FBQzFXLElBQUksS0FBSytYLGdCQUFnQjtNQUN6QyxDQUFDLENBQUM7TUFDRixJQUFJLENBQUN2WixVQUFVLEVBQUU7UUFDaEJILEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLEdBQUd5WixnQkFBZ0IsZ0NBQWdDLENBQUM7UUFDOUQsT0FBTzlULE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQztNQUM3QjtNQUNBLElBQUkxRixVQUFVLENBQUM2QixZQUFZLEtBQUssUUFBUSxFQUFFO1FBQ3pDaEMsR0FBRyxDQUFDNFosT0FBTyxDQUFDLGNBQWNGLGdCQUFnQixnQ0FBZ0MsQ0FBQztRQUMzRSxPQUFPOVQsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO01BQzdCO01BQ0EsTUFBTTZHLHNCQUFzQixHQUFJOVQsS0FBSyxDQUFXa00saUJBQWlCLENBQUMsVUFBVSxDQUFDO01BQzdFNEgsc0JBQXNCLEVBQUV4SCxXQUFXLENBQUM3TSxxQkFBcUIsRUFBRSxJQUFJLENBQUM7TUFDaEUsSUFBSSxDQUFDOGdCLHdCQUF3QixDQUFDSCxTQUFTLEVBQUVwZ0IsS0FBSyxFQUFFdWYsUUFBUSxFQUFFaFksVUFBVSxDQUFDO01BQ3JFLE1BQU0wWixLQUFLLEdBQUcsTUFBTXphLFlBQVksQ0FBQzBhLHlCQUF5QixDQUFTbGhCLEtBQUssRUFBRSxVQUFVLEVBQUVvZ0IsU0FBUyxDQUFDO01BQ2hHLE1BQU1lLGFBQXNCLEdBQUd2Z0IsVUFBVSxDQUFDdUgsb0JBQW9CLENBQUM4WSxLQUFNLENBQUU7TUFDdkU7TUFDQTtNQUNBLE1BQU14SCxJQUFJLEdBQ1R5RyxZQUFZLENBQUN6RyxJQUFJLElBQ2pCNU0sV0FBVyxDQUFDcUQsYUFBYSxDQUFDbFEsS0FBbUIsQ0FBQyxLQUM3Q2tnQixZQUFZLENBQUNsWSxZQUFZLEdBQUc2RSxXQUFXLENBQUN1VSxrQkFBa0IsQ0FBQ2xCLFlBQVksQ0FBQ2xZLFlBQVksQ0FBQyxHQUFHdEMsU0FBUyxDQUFDO01BRXBHLElBQUk2QixVQUFVLENBQUNnQyxJQUFJLEtBQUssU0FBUyxFQUFFO1FBQ2xDbkMsR0FBRyxDQUFDQyxLQUFLLENBQUMsNkZBQTZGLENBQUM7UUFDeEcsTUFBTSxJQUFJK0YsS0FBSyxDQUFDLDZGQUE2RixDQUFDO01BQy9HO01BRUEsSUFBSTdGLFVBQVUsQ0FBQ2dDLElBQUksS0FBSyxNQUFNLEVBQUU7UUFDL0IsT0FBTyxJQUFJLENBQUN1VCwyQkFBMkIsQ0FBQ3ZWLFVBQVUsRUFBMkNrUyxJQUFJLEVBQUUyRyxTQUFTLEVBQUVXLFFBQVEsQ0FBQztNQUN4SDtNQUVBLElBQUl4WixVQUFVLENBQUNnQyxJQUFJLEtBQUssVUFBVSxFQUFFO1FBQ25DLE1BQU04USxlQUFlLEdBQUtyYSxLQUFLLENBQWN5RCxTQUFTLENBQUMsQ0FBQyxDQUFjd0Msa0JBQWtCLENBQUMsQ0FBQyxDQUFDb1UsZUFBZTtRQUMxRyxPQUFPZ0gsaUJBQWlCLENBQUNOLFFBQVEsRUFBRXhaLFVBQVUsRUFBeUI0WixhQUFhLEVBQUU5RyxlQUFlLENBQUM7TUFDdEc7O01BRUE7TUFDQSxJQUFJLENBQUN6WixVQUFVLEVBQUU7UUFDaEIsT0FBT29NLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQztNQUM3QjtNQUVBLElBQUkvTSxhQUFhLEdBQUdzRCxRQUFRLENBQUM4ZCwrQkFBK0IsQ0FBQyxDQUFDO01BQzlELElBQUksQ0FBQ3BoQixhQUFhLENBQUM2RSxNQUFNLEVBQUU7UUFDMUI7UUFDQTtRQUNBLE1BQU0sSUFBSSxDQUFDeU8sZUFBZSxDQUFDeFQsS0FBaUIsQ0FBQztRQUM3Q0UsYUFBYSxHQUFHc0QsUUFBUSxDQUFDOGQsK0JBQStCLENBQUMsQ0FBQztNQUMzRDtNQUNBLE1BQU1yaEIsWUFBWSxHQUFHQyxhQUFhLENBQUNLLElBQUksQ0FBQyxVQUFVZ2hCLFFBQWdDLEVBQUU7UUFDbkYsT0FBT0EsUUFBUSxDQUFDeFksSUFBSSxLQUFLK1gsZ0JBQWdCO01BQzFDLENBQUMsQ0FBQztNQUVGLE1BQU1VLGdCQUF5QixHQUFHNWdCLFVBQVUsQ0FBQ3VILG9CQUFvQixDQUFDbEksWUFBWSxDQUFFaUIsY0FBYyxDQUFFO01BRWhHLE1BQU11Z0Isa0JBQWtCLEdBQUcsTUFBQUEsQ0FDMUJDLGVBQXdCLEVBQ3hCQyxLQUFhLEtBQ2lEO1FBQzlELElBQUlDLFlBQWlDO1FBQ3JDLElBQUlDLG9CQUF3QztRQUM1QyxJQUFJQyx1QkFBMkM7UUFFL0MsT0FBTzlVLE9BQU8sQ0FBQytVLEdBQUcsQ0FBQyxDQUNsQnZiLFlBQVksQ0FBQzBhLHlCQUF5QixDQUFtQmxoQixLQUFLLEVBQUUsNEJBQTRCLEVBQUVvZ0IsU0FBUyxDQUFDLEVBQ3hHNVosWUFBWSxDQUFDMGEseUJBQXlCLENBQVNsaEIsS0FBSyxFQUFFLFdBQVcsRUFBRW9nQixTQUFTLENBQUMsRUFDN0U1WixZQUFZLENBQUMwYSx5QkFBeUIsQ0FBU2xoQixLQUFLLEVBQUUsY0FBYyxFQUFFb2dCLFNBQVMsQ0FBQyxDQUNoRixDQUFDLENBQUMxWixJQUFJLENBQUMsTUFBT3NiLFdBQTZDLElBQUs7VUFDaEVKLFlBQVksR0FBR0ksV0FBVyxDQUFDLENBQUMsQ0FBd0I7VUFDcERILG9CQUFvQixHQUFHRyxXQUFXLENBQUMsQ0FBQyxDQUF1QjtVQUMzREYsdUJBQXVCLEdBQUdFLFdBQVcsQ0FBQyxDQUFDLENBQXVCO1VBQzlEO1VBQ0E7VUFDQTtVQUNBO1VBQ0EsSUFBSUosWUFBWSxLQUFLbGMsU0FBUyxJQUFJLE9BQU9rYyxZQUFZLEtBQUssU0FBUyxFQUFFO1lBQ3BFQSxZQUFZLEdBQUdBLFlBQVksS0FBSyxNQUFNO1VBQ3ZDO1VBRUEsTUFBTXBlLFFBQVEsR0FBSXhELEtBQUssQ0FBV3lELFNBQVMsQ0FBQyxDQUFhO1VBQ3pELE1BQU13ZSxLQUFLLEdBQUcsSUFBSUMsU0FBUyxDQUFDO2NBQzFCQyxxQkFBcUIsRUFBRTNlLFFBQVEsQ0FBQ3lDLGtCQUFrQixDQUFDLENBQUMsQ0FBQ2lSLE9BQU8sQ0FBQ2lMLHFCQUFxQjtjQUNsRkMsUUFBUSxFQUFFUixZQUFZO2NBQ3RCUyxTQUFTLEVBQUVSLG9CQUFvQjtjQUMvQlMsRUFBRSxFQUFFdkIsUUFBUTtjQUNad0Isc0JBQXNCLEVBQUV6QixnQkFBZ0I7Y0FDeEN2WixVQUFVLEVBQUVBLFVBQVU7Y0FDdEJpYixVQUFVLEVBQUU1aEIsVUFBVSxDQUFDdUgsb0JBQW9CLENBQUM4WSxLQUFNLENBQUM7Y0FDbkR3QixZQUFZLEVBQUU7Z0JBQUUxWixJQUFJLEVBQUUrWTtjQUF3QixDQUFDO2NBQy9DWSwwQkFBMEIsRUFBRWxmLFFBQVEsQ0FBQ3lDLGtCQUFrQixDQUFDLENBQUMsQ0FBQ2lSLE9BQU8sQ0FBQ3dMO1lBQ25FLENBQUMsQ0FBQztZQUNGQyxxQkFBcUIsR0FBRztjQUN2QkMsZUFBZSxFQUFFO2dCQUNoQkMsU0FBUyxFQUFFMUIsYUFBYTtnQkFDeEJxQixVQUFVLEVBQUVyQixhQUFhO2dCQUN6QnhkLFNBQVMsRUFBRTZkLGdCQUFnQjtnQkFDM0JzQixJQUFJLEVBQUViLEtBQUssQ0FBQzlaLG9CQUFvQixDQUFDLEdBQUcsQ0FBQztnQkFDckM5SCxNQUFNLEVBQUU0aEIsS0FBSyxDQUFDOVosb0JBQW9CLENBQUMsYUFBYTtjQUNqRCxDQUFDO2NBQ0Q4VixNQUFNLEVBQUU7Z0JBQ1A2RSxJQUFJLEVBQUViLEtBQUs7Z0JBQ1hZLFNBQVMsRUFBRWppQixVQUFVO2dCQUNyQjRoQixVQUFVLEVBQUU1aEIsVUFBVTtnQkFDdEIrQyxTQUFTLEVBQUUvQyxVQUFVO2dCQUNyQjhDLFNBQVMsRUFBRTlDLFVBQVU7Z0JBQ3JCUCxNQUFNLEVBQUU0aEI7Y0FDVCxDQUFDO2NBQ0RqYSxZQUFZLEVBQUVrWSxZQUFZLENBQUNsWTtZQUM1QixDQUFDO1VBRUYsTUFBTSthLGVBQWUsR0FBRy9oQiwyQkFBMkIsQ0FDbERKLFVBQVUsQ0FBQ3VILG9CQUFvQixDQUFDM0UsUUFBUSxDQUFDMk4sZUFBZSxDQUFDNkUsVUFBVSxDQUFDd00sVUFBVSxDQUMvRSxDQUFDO1VBQ0QsTUFBTVEsZUFBZSxHQUFHLElBQUlDLHlCQUF5QixDQUNwRHpmLFFBQVEsRUFDUjtZQUFFMGYsZ0JBQWdCLEVBQUVILGVBQWUsQ0FBQ3poQixZQUFhO1lBQUVvQyxTQUFTLEVBQUU5QztVQUFXLENBQUMsRUFDMUU0QyxRQUNELENBQUM7VUFDRCxNQUFNMmYsaUJBQWlCLEdBQUcsSUFBSWpHLFNBQVMsQ0FBQyxDQUFDLENBQUNDLGVBQWUsQ0FDeERDLEdBQUcsQ0FBQ0MsV0FBVyxDQUFDLE1BQU07WUFDckIsT0FBUStGLGlCQUFpQixDQUN4QnJDLFFBQVEsRUFDUnZkLFFBQVEsRUFDUitELFVBQVUsRUFDVjNHLFVBQVUsQ0FBQ3VILG9CQUFvQixDQUFDOFksS0FBTSxDQUFDLEVBQ3ZDK0IsZUFDRCxDQUFDLElBQUksRUFBRTtVQUNSLENBQUMsQ0FBQyxFQUNGLFVBQ0QsQ0FBQztVQUNELE9BQU94YyxZQUFZLENBQUM2Yyx1QkFBdUIsQ0FDMUNGLGlCQUFpQixDQUFDekYsaUJBQWlCLEVBQ25DaUYscUJBQXFCLEVBQ3JCO1lBQUVsSixJQUFJLEVBQUVrSTtVQUFNLENBQUMsRUFDZnZCLFNBQ0QsQ0FBQyxDQUFDeEYsT0FBTyxDQUFDLFlBQVk7WUFDckJxSCxLQUFLLENBQUNxQixPQUFPLENBQUMsQ0FBQztVQUNoQixDQUFDLENBQUM7UUFDSCxDQUFDLENBQUM7TUFDSCxDQUFDO01BRUQsT0FBTzdCLGtCQUFrQixDQUFDeGhCLFlBQVksRUFBRXdaLElBQUksQ0FBQztJQUM5QyxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7SUFDQzhKLGlCQUFpQixFQUFFLFNBQUFBLENBQUEsRUFBWTtNQUM5QixPQUFPNWpCLE1BQU0sQ0FBQ0MsTUFBTSxDQUNuQjtRQUNDRSxVQUFVLEVBQUU7TUFDYixDQUFDLEVBQ0QwakIsaUJBQWlCLEVBQ2pCO1FBQ0MzQyxPQUFPLEVBQUUsZUFBQUEsQ0FBZ0I0QyxjQUF1QixFQUFFQyxpQkFBeUIsRUFBRTtVQUM1RSxJQUFJQSxpQkFBaUIsQ0FBQ3RqQixPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xEO1lBQ0FzakIsaUJBQWlCLEdBQUdBLGlCQUFpQixDQUFDQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztVQUNoRTtVQUNBLE9BQU9ILGlCQUFpQixDQUFDM0MsT0FBTyxDQUFDNEMsY0FBYyxFQUFlQyxpQkFBaUIsQ0FBQztRQUNqRjtNQUNELENBQ0QsQ0FBQztJQUNGLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtJQUNDRSxVQUFVLEVBQUUsU0FBVUE7SUFBQSxHQUFzQjtNQUMzQyxPQUFPbFosT0FBTztJQUNmLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDbVosaUJBQWlCQSxDQUFDN2pCLEtBQWUsRUFBRXlVLE9BQXVCLEVBQUVsUixRQUFnQixFQUFFO01BQzdFLE1BQU1yRCxhQUFhLEdBQUlGLEtBQUssQ0FBQ3lELFNBQVMsQ0FBQyxDQUFDLENBQWM2ZCwrQkFBK0IsQ0FBQyxDQUFDO01BQ3ZGLE1BQU1yaEIsWUFBWSxHQUFHQyxhQUFhLEVBQUVLLElBQUksQ0FBRXVqQixHQUFHLElBQUs7UUFDakQsT0FBT0EsR0FBRyxDQUFDL2EsSUFBSSxLQUFLeEYsUUFBUTtNQUM3QixDQUFDLENBQUM7TUFDRjtBQUNGO01BQ0UsTUFBTXdnQixZQUFZLEdBQUdyWixPQUFPLENBQUNDLGFBQWEsQ0FBQzFLLFlBQVksRUFBRTZGLFFBQVEsQ0FBQyxDQUFDbUQsUUFBUTtNQUMzRSxNQUFNK2EsY0FBYyxHQUNuQkQsWUFBWSxLQUFLLFVBQVUsSUFBSUEsWUFBWSxLQUFLLE1BQU0sSUFBSUEsWUFBWSxLQUFLLFNBQVMsSUFBSUEsWUFBWSxLQUFLLFNBQVM7TUFDbkgsSUFBSWxoQixLQUFLO01BQ1QsSUFBSSxDQUFDNFIsT0FBTyxFQUFFO1FBQ2I1UixLQUFLLEdBQUdxTSxnQkFBZ0IsQ0FBQ3JDLFdBQVcsQ0FBQ3FELGFBQWEsQ0FBQ2xRLEtBQUssQ0FBQyxDQUFDLENBQUN3UCxPQUFPLENBQUMsa0NBQWtDLENBQUM7UUFDdEcsT0FBT04sZ0JBQWdCLENBQUNsUCxLQUFLLENBQUMsQ0FBQ3dQLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRSxDQUFDdlAsWUFBWSxFQUFFdUUsS0FBSyxFQUFFM0IsS0FBSyxDQUFDLENBQUM7TUFDbkc7TUFDQSxJQUFJNUMsWUFBWSxFQUFFNkUsSUFBSSxFQUFFO1FBQ3ZCLFFBQVE3RSxZQUFZLENBQUM2RSxJQUFJO1VBQ3hCLEtBQUssYUFBYTtZQUNqQmpDLEtBQUssR0FBRzVDLFlBQVksQ0FBQ2dMLG1CQUFtQixHQUFHd0osT0FBTyxDQUFDM1EsV0FBVyxDQUFDN0QsWUFBWSxDQUFDZ0wsbUJBQW1CLEVBQUUrWSxjQUFjLENBQUMsR0FBRyxJQUFJO1lBQ3ZIO1VBRUQsS0FBSyxrQkFBa0I7WUFDdEJuaEIsS0FBSyxHQUFHb2hCLGNBQWMsQ0FBQ0Msa0JBQWtCLENBQ3hDamtCLFlBQVksQ0FBQ2dMLG1CQUFtQixHQUFHd0osT0FBTyxDQUFDM1EsV0FBVyxDQUFDN0QsWUFBWSxDQUFDZ0wsbUJBQW1CLEVBQUUrWSxjQUFjLENBQUMsR0FBRyxJQUFJLEVBQy9HL2pCLFlBQVksQ0FBQytLLGFBQWEsR0FBR3lKLE9BQU8sQ0FBQzNRLFdBQVcsQ0FBQzdELFlBQVksQ0FBQytLLGFBQWEsRUFBRWdaLGNBQWMsQ0FBQyxHQUFHLElBQ2hHLENBQUM7WUFDRDtVQUVELEtBQUssa0JBQWtCO1lBQ3RCbmhCLEtBQUssR0FBR29oQixjQUFjLENBQUNDLGtCQUFrQixDQUN4Q2prQixZQUFZLENBQUMrSyxhQUFhLEdBQUd5SixPQUFPLENBQUMzUSxXQUFXLENBQUM3RCxZQUFZLENBQUMrSyxhQUFhLEVBQUVnWixjQUFjLENBQUMsR0FBRyxJQUFJLEVBQ25HL2pCLFlBQVksQ0FBQ2dMLG1CQUFtQixHQUFHd0osT0FBTyxDQUFDM1EsV0FBVyxDQUFDN0QsWUFBWSxDQUFDZ0wsbUJBQW1CLEVBQUUrWSxjQUFjLENBQUMsR0FBRyxJQUM1RyxDQUFDO1lBQ0Q7VUFDRDtZQUNDO1FBQ0Y7TUFDRCxDQUFDLE1BQU07UUFDTm5oQixLQUFLLEdBQUc1QyxZQUFZLEVBQUU0RSxJQUFJLEdBQUc0UCxPQUFPLENBQUMzUSxXQUFXLENBQUM3RCxZQUFZLENBQUM0RSxJQUFJLEVBQUVtZixjQUFjLENBQUMsR0FBRyxJQUFJO01BQzNGO01BQ0EsSUFBSW5oQixLQUFLLEtBQUssSUFBSSxJQUFJQSxLQUFLLEtBQUssRUFBRSxFQUFFO1FBQ25DQSxLQUFLLEdBQUdxTSxnQkFBZ0IsQ0FBQ3JDLFdBQVcsQ0FBQ3FELGFBQWEsQ0FBQ2xRLEtBQUssQ0FBQyxDQUFDLENBQUN3UCxPQUFPLENBQUMsa0NBQWtDLENBQUM7TUFDdkc7TUFDQSxPQUFPTixnQkFBZ0IsQ0FBQ2xQLEtBQUssQ0FBQyxDQUFDd1AsT0FBTyxDQUFDLDRCQUE0QixFQUFFLENBQUN2UCxZQUFZLEVBQUV1RSxLQUFLLEVBQUUzQixLQUFLLENBQUMsQ0FBQztJQUNuRztFQUNELENBQUMsQ0FBQztBQUFBIiwiaWdub3JlTGlzdCI6W119