@netgrif/components-core 6.3.0 → 6.4.0-beta.1

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 (207) hide show
  1. package/esm2020/assets/i18n/de.json +1 -0
  2. package/esm2020/assets/i18n/en.json +1 -0
  3. package/esm2020/assets/i18n/sk.json +1 -0
  4. package/esm2020/lib/data-fields/base-component/abstract-base-data-field.component.mjs +51 -0
  5. package/esm2020/lib/data-fields/boolean-field/abstract-boolean-field.component.mjs +7 -26
  6. package/esm2020/lib/data-fields/boolean-field/boolean-default-field/abstract-boolean-default-field.component.mjs +46 -0
  7. package/esm2020/lib/data-fields/boolean-field/models/boolean-field.mjs +9 -1
  8. package/esm2020/lib/data-fields/button-field/abstract-button-field.component.mjs +7 -39
  9. package/esm2020/lib/data-fields/button-field/button-default-field/abstract-button-default-field.component.mjs +58 -0
  10. package/esm2020/lib/data-fields/button-field/models/button-field.mjs +5 -1
  11. package/esm2020/lib/data-fields/case-ref-field/case-ref-default/case-ref-default.component.mjs +67 -0
  12. package/esm2020/lib/data-fields/case-ref-field/model/case-ref-field.mjs +11 -0
  13. package/esm2020/lib/data-fields/case-ref-field/model/case-ref-injection-tokens.mjs +4 -0
  14. package/esm2020/lib/data-fields/data-field-template/abstract-data-field-template.component.mjs +51 -6
  15. package/esm2020/lib/data-fields/date-field/abstract-date-field.component.mjs +10 -12
  16. package/esm2020/lib/data-fields/date-field/date-default-field/abstract-date-default-field.component.mjs +29 -0
  17. package/esm2020/lib/data-fields/date-field/models/date-field.mjs +5 -1
  18. package/esm2020/lib/data-fields/date-time-field/abstract-date-time-field.component.mjs +10 -12
  19. package/esm2020/lib/data-fields/date-time-field/date-time-default-field/abstract-date-time-default-field.component.mjs +29 -0
  20. package/esm2020/lib/data-fields/date-time-field/models/date-time-field.mjs +5 -1
  21. package/esm2020/lib/data-fields/enumeration-field/abstract-enumeration-field.component.mjs +4 -1
  22. package/esm2020/lib/data-fields/enumeration-field/enumeration-autocomplete-dynamic-field/abstract-enumeration-autocomplete-dynamic-field.component.mjs +23 -20
  23. package/esm2020/lib/data-fields/enumeration-field/enumeration-autocomplete-select-field/abstract-enumeration-autocomplete-select-field.component.mjs +20 -21
  24. package/esm2020/lib/data-fields/enumeration-field/enumeration-icon-field/abstract-enumeration-icon-field.component.mjs +26 -19
  25. package/esm2020/lib/data-fields/enumeration-field/enumeration-list-field/abstract-enumeration-list-field.component.mjs +16 -12
  26. package/esm2020/lib/data-fields/enumeration-field/enumeration-select-field/abstract-enumeration-select-field.component.mjs +16 -12
  27. package/esm2020/lib/data-fields/enumeration-field/enumeration-stepper-field/abstract-enumeration-stepper-field.component.mjs +26 -21
  28. package/esm2020/lib/data-fields/enumeration-field/models/enumeration-field.mjs +9 -1
  29. package/esm2020/lib/data-fields/file-field/abstract-file-field.component.mjs +11 -420
  30. package/esm2020/lib/data-fields/file-field/file-default-field/abstract-file-default-field.component.mjs +456 -0
  31. package/esm2020/lib/data-fields/file-field/models/file-field-constants.mjs +5 -0
  32. package/esm2020/lib/data-fields/file-field/models/file-field.mjs +6 -1
  33. package/esm2020/lib/data-fields/file-list-field/abstract-file-list-field.component.mjs +11 -278
  34. package/esm2020/lib/data-fields/file-list-field/file-list-default-field/abstract-file-list-default-field.component.mjs +304 -0
  35. package/esm2020/lib/data-fields/file-list-field/models/file-list-field.mjs +6 -1
  36. package/esm2020/lib/data-fields/filter-field/abstract-filter-field-tab-view-content.component.mjs +4 -4
  37. package/esm2020/lib/data-fields/filter-field/abstract-filter-field-tab-view.component.mjs +4 -4
  38. package/esm2020/lib/data-fields/filter-field/abstract-filter-field.component.mjs +8 -20
  39. package/esm2020/lib/data-fields/filter-field/filter-default-field/abstract-filter-default-field.component.mjs +38 -0
  40. package/esm2020/lib/data-fields/filter-field/models/filter-field.mjs +5 -1
  41. package/esm2020/lib/data-fields/i18n-field/abstract-i18n-errors.component.mjs +18 -16
  42. package/esm2020/lib/data-fields/i18n-field/abstract-i18n-field.component.mjs +4 -1
  43. package/esm2020/lib/data-fields/i18n-field/i18n-divider-field/abstract-i18n-divider-field.component.mjs +24 -20
  44. package/esm2020/lib/data-fields/i18n-field/i18n-text-field/abstract-i18n-text-field.component.mjs +35 -32
  45. package/esm2020/lib/data-fields/i18n-field/models/i18n-field.mjs +6 -2
  46. package/esm2020/lib/data-fields/models/abstract-data-field-component.mjs +4 -1
  47. package/esm2020/lib/data-fields/models/abstract-data-field.mjs +14 -2
  48. package/esm2020/lib/data-fields/models/component.mjs +21 -2
  49. package/esm2020/lib/data-fields/models/data-field-portal-data-injection-token.mjs +3 -0
  50. package/esm2020/lib/data-fields/models/update-strategy.mjs +7 -0
  51. package/esm2020/lib/data-fields/multichoice-field/abstract-multichoice-field.component.mjs +4 -1
  52. package/esm2020/lib/data-fields/multichoice-field/models/multichoice-field.mjs +9 -1
  53. package/esm2020/lib/data-fields/multichoice-field/multichoice-autocomplete-field/abstract-multichoice-autocomplete-field-component.component.mjs +30 -30
  54. package/esm2020/lib/data-fields/multichoice-field/multichoice-list-field/abstract-multichoice-list-field.component.mjs +16 -12
  55. package/esm2020/lib/data-fields/multichoice-field/multichoice-select-field/abstract-multichoice-select-field.component.mjs +16 -12
  56. package/esm2020/lib/data-fields/number-field/abstract-number-errors.component.mjs +17 -15
  57. package/esm2020/lib/data-fields/number-field/abstract-number-field.component.mjs +4 -1
  58. package/esm2020/lib/data-fields/number-field/currency-number-field/abstract-currency-number-field.component.mjs +21 -15
  59. package/esm2020/lib/data-fields/number-field/models/number-field.mjs +5 -1
  60. package/esm2020/lib/data-fields/number-field/number-default-field/abstract-default-number-field.component.mjs +12 -6
  61. package/esm2020/lib/data-fields/public-api.mjs +17 -2
  62. package/esm2020/lib/data-fields/task-ref-field/abstract-task-ref-field.component.mjs +10 -116
  63. package/esm2020/lib/data-fields/task-ref-field/model/task-ref-field.mjs +5 -1
  64. package/esm2020/lib/data-fields/task-ref-field/task-ref-dashboard-field/abstract-task-ref-dashboard-field.component.mjs +130 -0
  65. package/esm2020/lib/data-fields/task-ref-field/task-ref-list-field/abstract-task-ref-list-field.component.mjs +54 -0
  66. package/esm2020/lib/data-fields/text-field/abstract-dashboard-text-field.component.mjs +14 -14
  67. package/esm2020/lib/data-fields/text-field/abstract-text-errors.component.mjs +23 -3
  68. package/esm2020/lib/data-fields/text-field/dashboard-bar-chart-text-field/abstract-dashboard-bar-chart-text-field.component.mjs +12 -6
  69. package/esm2020/lib/data-fields/text-field/dashboard-iframe-text-field/abstract-dashboard-iframe-text-field.component.mjs +12 -6
  70. package/esm2020/lib/data-fields/text-field/dashboard-line-chart-text-field/abstract-dashboard-line-chart-text-field.component.mjs +12 -6
  71. package/esm2020/lib/data-fields/text-field/dashboard-pie-chart-text-field/abstract-dashboard-pie-chart-text-field.component.mjs +12 -6
  72. package/esm2020/lib/data-fields/text-field/dashboard-portal-text-field/abstract-dashboard-portal-text-field.component.mjs +12 -6
  73. package/esm2020/lib/data-fields/text-field/html-textarea-field/abstract-html-textarea-field.component.mjs +16 -16
  74. package/esm2020/lib/data-fields/text-field/models/text-field.mjs +8 -4
  75. package/esm2020/lib/data-fields/text-field/password-text-field/abstract-password-text-field.component.mjs +14 -14
  76. package/esm2020/lib/data-fields/text-field/rich-textarea-field/abstract-rich-textarea-field.component.mjs +14 -14
  77. package/esm2020/lib/data-fields/text-field/simple-text-field/abstract-simple-text-field.component.mjs +14 -14
  78. package/esm2020/lib/data-fields/text-field/textarea-field/abstract-textarea-field.component.mjs +17 -17
  79. package/esm2020/lib/data-fields/time-instance-abstract-field/abstract-time-instance-field.component.mjs +12 -12
  80. package/esm2020/lib/data-fields/user-field/abstract-user-field.component.mjs +7 -39
  81. package/esm2020/lib/data-fields/user-field/models/user-field.mjs +5 -1
  82. package/esm2020/lib/data-fields/user-field/user-default-field/abstract-user-default-field.component.mjs +70 -0
  83. package/esm2020/lib/data-fields/user-list-field/abstract-user-list-field.component.mjs +7 -45
  84. package/esm2020/lib/data-fields/user-list-field/models/user-list-field.mjs +5 -1
  85. package/esm2020/lib/data-fields/user-list-field/user-list-default-field/abstract-user-list-default-field.component.mjs +60 -0
  86. package/esm2020/lib/dialog/injection-tokens.mjs +10 -0
  87. package/esm2020/lib/dialog/public-api.mjs +2 -1
  88. package/esm2020/lib/filter/models/task-search-request-body.mjs +1 -1
  89. package/esm2020/lib/filter/user-filters.service.mjs +22 -15
  90. package/esm2020/lib/impersonation/services/impersonation-user-select.service.mjs +24 -17
  91. package/esm2020/lib/panel/workflow-panel/abstract-workflow-panel.component.mjs +6 -2
  92. package/esm2020/lib/registry/component-registry.service.mjs +38 -0
  93. package/esm2020/lib/registry/public-api.mjs +2 -0
  94. package/esm2020/lib/side-menu/content-components/public-api.mjs +2 -1
  95. package/esm2020/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.mjs +24 -5
  96. package/esm2020/lib/task-content/model/field-type-resource.mjs +2 -1
  97. package/esm2020/lib/task-content/services/field-converter.service.mjs +4 -1
  98. package/esm2020/lib/task-content/task-content/abstract-task-content.component.mjs +20 -7
  99. package/esm2020/lib/view/case-view/service/case-view-service.mjs +20 -15
  100. package/esm2020/lib/view/workflow-view/abstract-workflow-view.component.mjs +12 -7
  101. package/esm2020/public-api.mjs +2 -1
  102. package/fesm2015/netgrif-components-core.mjs +1771 -961
  103. package/fesm2015/netgrif-components-core.mjs.map +1 -1
  104. package/fesm2020/netgrif-components-core.mjs +1675 -957
  105. package/fesm2020/netgrif-components-core.mjs.map +1 -1
  106. package/lib/data-fields/base-component/abstract-base-data-field.component.d.ts +18 -0
  107. package/lib/data-fields/boolean-field/abstract-boolean-field.component.d.ts +5 -7
  108. package/lib/data-fields/boolean-field/boolean-default-field/abstract-boolean-default-field.component.d.ts +14 -0
  109. package/lib/data-fields/boolean-field/models/boolean-field.d.ts +3 -0
  110. package/lib/data-fields/button-field/abstract-button-field.component.d.ts +5 -16
  111. package/lib/data-fields/button-field/button-default-field/abstract-button-default-field.component.d.ts +23 -0
  112. package/lib/data-fields/button-field/models/button-field.d.ts +1 -0
  113. package/lib/data-fields/case-ref-field/case-ref-default/case-ref-default.component.d.ts +16 -0
  114. package/lib/data-fields/case-ref-field/model/case-ref-field.d.ts +9 -0
  115. package/lib/data-fields/case-ref-field/model/case-ref-injection-tokens.d.ts +3 -0
  116. package/lib/data-fields/data-field-template/abstract-data-field-template.component.d.ts +22 -3
  117. package/lib/data-fields/date-field/abstract-date-field.component.d.ts +7 -7
  118. package/lib/data-fields/date-field/date-default-field/abstract-date-default-field.component.d.ts +12 -0
  119. package/lib/data-fields/date-field/models/date-field.d.ts +1 -0
  120. package/lib/data-fields/date-time-field/abstract-date-time-field.component.d.ts +7 -7
  121. package/lib/data-fields/date-time-field/date-time-default-field/abstract-date-time-default-field.component.d.ts +12 -0
  122. package/lib/data-fields/date-time-field/models/date-time-field.d.ts +1 -0
  123. package/lib/data-fields/enumeration-field/abstract-enumeration-field.component.d.ts +3 -0
  124. package/lib/data-fields/enumeration-field/enumeration-autocomplete-dynamic-field/abstract-enumeration-autocomplete-dynamic-field.component.d.ts +8 -10
  125. package/lib/data-fields/enumeration-field/enumeration-autocomplete-select-field/abstract-enumeration-autocomplete-select-field.component.d.ts +6 -10
  126. package/lib/data-fields/enumeration-field/enumeration-icon-field/abstract-enumeration-icon-field.component.d.ts +9 -9
  127. package/lib/data-fields/enumeration-field/enumeration-list-field/abstract-enumeration-list-field.component.d.ts +6 -8
  128. package/lib/data-fields/enumeration-field/enumeration-select-field/abstract-enumeration-select-field.component.d.ts +6 -8
  129. package/lib/data-fields/enumeration-field/enumeration-stepper-field/abstract-enumeration-stepper-field.component.d.ts +8 -9
  130. package/lib/data-fields/enumeration-field/models/enumeration-field.d.ts +3 -0
  131. package/lib/data-fields/file-field/abstract-file-field.component.d.ts +9 -147
  132. package/lib/data-fields/file-field/file-default-field/abstract-file-default-field.component.d.ts +151 -0
  133. package/lib/data-fields/file-field/models/file-field-constants.d.ts +4 -0
  134. package/lib/data-fields/file-field/models/file-field.d.ts +1 -0
  135. package/lib/data-fields/file-list-field/abstract-file-list-field.component.d.ts +8 -71
  136. package/lib/data-fields/file-list-field/file-list-default-field/abstract-file-list-default-field.component.d.ts +76 -0
  137. package/lib/data-fields/file-list-field/models/file-list-field.d.ts +1 -0
  138. package/lib/data-fields/filter-field/abstract-filter-field-tab-view-content.component.d.ts +3 -3
  139. package/lib/data-fields/filter-field/abstract-filter-field-tab-view.component.d.ts +3 -3
  140. package/lib/data-fields/filter-field/abstract-filter-field.component.d.ts +6 -11
  141. package/lib/data-fields/filter-field/filter-default-field/abstract-filter-default-field.component.d.ts +18 -0
  142. package/lib/data-fields/filter-field/models/filter-field.d.ts +1 -0
  143. package/lib/data-fields/i18n-field/abstract-i18n-errors.component.d.ts +6 -9
  144. package/lib/data-fields/i18n-field/abstract-i18n-field.component.d.ts +3 -0
  145. package/lib/data-fields/i18n-field/i18n-divider-field/abstract-i18n-divider-field.component.d.ts +6 -8
  146. package/lib/data-fields/i18n-field/i18n-text-field/abstract-i18n-text-field.component.d.ts +5 -8
  147. package/lib/data-fields/i18n-field/models/i18n-field.d.ts +1 -0
  148. package/lib/data-fields/models/abstract-data-field-component.d.ts +1 -0
  149. package/lib/data-fields/models/abstract-data-field.d.ts +9 -0
  150. package/lib/data-fields/models/component.d.ts +19 -0
  151. package/lib/data-fields/models/data-field-portal-data-injection-token.d.ts +13 -0
  152. package/lib/data-fields/models/update-strategy.d.ts +6 -0
  153. package/lib/data-fields/multichoice-field/abstract-multichoice-field.component.d.ts +3 -0
  154. package/lib/data-fields/multichoice-field/models/multichoice-field.d.ts +3 -0
  155. package/lib/data-fields/multichoice-field/multichoice-autocomplete-field/abstract-multichoice-autocomplete-field-component.component.d.ts +6 -9
  156. package/lib/data-fields/multichoice-field/multichoice-list-field/abstract-multichoice-list-field.component.d.ts +6 -7
  157. package/lib/data-fields/multichoice-field/multichoice-select-field/abstract-multichoice-select-field.component.d.ts +6 -8
  158. package/lib/data-fields/number-field/abstract-number-errors.component.d.ts +6 -9
  159. package/lib/data-fields/number-field/abstract-number-field.component.d.ts +3 -0
  160. package/lib/data-fields/number-field/currency-number-field/abstract-currency-number-field.component.d.ts +4 -2
  161. package/lib/data-fields/number-field/models/number-field.d.ts +1 -0
  162. package/lib/data-fields/number-field/number-default-field/abstract-default-number-field.component.d.ts +4 -2
  163. package/lib/data-fields/public-api.d.ts +16 -1
  164. package/lib/data-fields/task-ref-field/abstract-task-ref-field.component.d.ts +6 -13
  165. package/lib/data-fields/task-ref-field/model/task-ref-field.d.ts +1 -0
  166. package/lib/data-fields/task-ref-field/task-ref-dashboard-field/abstract-task-ref-dashboard-field.component.d.ts +20 -0
  167. package/lib/data-fields/task-ref-field/task-ref-list-field/abstract-task-ref-list-field.component.d.ts +16 -0
  168. package/lib/data-fields/text-field/abstract-dashboard-text-field.component.d.ts +5 -9
  169. package/lib/data-fields/text-field/abstract-text-errors.component.d.ts +7 -2
  170. package/lib/data-fields/text-field/dashboard-bar-chart-text-field/abstract-dashboard-bar-chart-text-field.component.d.ts +4 -2
  171. package/lib/data-fields/text-field/dashboard-iframe-text-field/abstract-dashboard-iframe-text-field.component.d.ts +4 -2
  172. package/lib/data-fields/text-field/dashboard-line-chart-text-field/abstract-dashboard-line-chart-text-field.component.d.ts +4 -2
  173. package/lib/data-fields/text-field/dashboard-pie-chart-text-field/abstract-dashboard-pie-chart-text-field.component.d.ts +4 -2
  174. package/lib/data-fields/text-field/dashboard-portal-text-field/abstract-dashboard-portal-text-field.component.d.ts +4 -2
  175. package/lib/data-fields/text-field/html-textarea-field/abstract-html-textarea-field.component.d.ts +5 -9
  176. package/lib/data-fields/text-field/models/text-field.d.ts +3 -2
  177. package/lib/data-fields/text-field/password-text-field/abstract-password-text-field.component.d.ts +5 -9
  178. package/lib/data-fields/text-field/rich-textarea-field/abstract-rich-textarea-field.component.d.ts +5 -9
  179. package/lib/data-fields/text-field/simple-text-field/abstract-simple-text-field.component.d.ts +5 -9
  180. package/lib/data-fields/text-field/textarea-field/abstract-textarea-field.component.d.ts +6 -9
  181. package/lib/data-fields/time-instance-abstract-field/abstract-time-instance-field.component.d.ts +6 -5
  182. package/lib/data-fields/user-field/abstract-user-field.component.d.ts +5 -27
  183. package/lib/data-fields/user-field/models/user-field.d.ts +1 -0
  184. package/lib/data-fields/user-field/user-default-field/abstract-user-default-field.component.d.ts +34 -0
  185. package/lib/data-fields/user-list-field/abstract-user-list-field.component.d.ts +5 -25
  186. package/lib/data-fields/user-list-field/models/user-list-field.d.ts +1 -0
  187. package/lib/data-fields/user-list-field/user-list-default-field/abstract-user-list-default-field.component.d.ts +24 -0
  188. package/lib/dialog/injection-tokens.d.ts +10 -0
  189. package/lib/dialog/public-api.d.ts +1 -0
  190. package/lib/filter/models/task-search-request-body.d.ts +6 -0
  191. package/lib/filter/user-filters.service.d.ts +4 -2
  192. package/lib/impersonation/services/impersonation-user-select.service.d.ts +3 -3
  193. package/lib/panel/workflow-panel/abstract-workflow-panel.component.d.ts +3 -1
  194. package/lib/{data-fields/text-field/dashboard-portal-text-field/dashboard-portal-component-registry.service.d.ts → registry/component-registry.service.d.ts} +6 -5
  195. package/lib/registry/public-api.d.ts +1 -0
  196. package/lib/side-menu/content-components/public-api.d.ts +1 -0
  197. package/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.d.ts +7 -3
  198. package/lib/task-content/model/field-type-resource.d.ts +1 -0
  199. package/lib/task-content/task-content/abstract-task-content.component.d.ts +5 -1
  200. package/lib/view/case-view/service/case-view-service.d.ts +3 -3
  201. package/lib/view/workflow-view/abstract-workflow-view.component.d.ts +3 -3
  202. package/package.json +1 -1
  203. package/public-api.d.ts +1 -0
  204. package/src/assets/i18n/de.json +1 -0
  205. package/src/assets/i18n/en.json +1 -0
  206. package/src/assets/i18n/sk.json +1 -0
  207. package/esm2020/lib/data-fields/text-field/dashboard-portal-text-field/dashboard-portal-component-registry.service.mjs +0 -35
@@ -21,6 +21,7 @@ import { I18nField } from '../../data-fields/i18n-field/models/i18n-field';
21
21
  import { UserListField } from '../../data-fields/user-list-field/models/user-list-field';
22
22
  import { UserListValue } from '../../data-fields/user-list-field/models/user-list-value';
23
23
  import { decodeBase64, encodeBase64 } from "../../utility/base64";
24
+ import { CaseRefField } from '../../data-fields/case-ref-field/model/case-ref-field';
24
25
  import * as i0 from "@angular/core";
25
26
  export class FieldConverterService {
26
27
  constructor() {
@@ -76,6 +77,8 @@ export class FieldConverterService {
76
77
  return new FileListField(item.stringId, item.name, item.behavior, item.value ? item.value : {}, item.placeholder, item.description, item.layout, item.validations, null, null, item.component, item.parentTaskId);
77
78
  case FieldTypeResource.TASK_REF:
78
79
  return new TaskRefField(item.stringId, item.name, item.value ? item.value : [], item.behavior, item.placeholder, item.description, item.layout, item.validations, item.component, item.parentTaskId);
80
+ case FieldTypeResource.CASE_REF:
81
+ return new CaseRefField(item.stringId, item.name, item.value ? item.value : [], item.behavior, item.placeholder, item.description, item.layout, item.validations, item.component, item.parentTaskId);
79
82
  case FieldTypeResource.FILTER:
80
83
  return new FilterField(item.stringId, item.name, item.value ?? '', item.filterMetadata, item.allowedNets, item.behavior, item.placeholder, item.description, item.layout, item.validations, item.component, item.parentTaskId);
81
84
  case FieldTypeResource.I18N:
@@ -284,4 +287,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
284
287
  providedIn: 'root'
285
288
  }]
286
289
  }], ctorParameters: function () { return []; } });
287
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtY29udmVydGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3Rhc2stY29udGVudC9zZXJ2aWNlcy9maWVsZC1jb252ZXJ0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3pDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUNsRixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDekUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBQy9FLE9BQU8sRUFBQyxnQkFBZ0IsRUFBd0IsTUFBTSw4REFBOEQsQ0FBQztBQUNySCxPQUFPLEVBQUMsZ0JBQWdCLEVBQXdCLE1BQU0sOERBQThELENBQUM7QUFDckgsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUN2RixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDekUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBQy9FLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUN2RixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFFbEYsT0FB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SyxLQUFLLEVBQUUsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQzdHLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlCO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzs7bUhBL1FRLHFCQUFxQjt1SEFBckIscUJBQXFCLGNBRmxCLE1BQU07NEZBRVQscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RhdGFGaWVsZFJlc291cmNlfSBmcm9tICcuLi9tb2RlbC9yZXNvdXJjZS1pbnRlcmZhY2UnO1xuaW1wb3J0IHtEYXRhRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL21vZGVscy9hYnN0cmFjdC1kYXRhLWZpZWxkJztcbmltcG9ydCB7Qm9vbGVhbkZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9ib29sZWFuLWZpZWxkL21vZGVscy9ib29sZWFuLWZpZWxkJztcbmltcG9ydCB7VGV4dEZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy90ZXh0LWZpZWxkL21vZGVscy90ZXh0LWZpZWxkJztcbmltcG9ydCB7TnVtYmVyRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL251bWJlci1maWVsZC9tb2RlbHMvbnVtYmVyLWZpZWxkJztcbmltcG9ydCB7RW51bWVyYXRpb25GaWVsZCwgRW51bWVyYXRpb25GaWVsZFZhbHVlfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9lbnVtZXJhdGlvbi1maWVsZC9tb2RlbHMvZW51bWVyYXRpb24tZmllbGQnO1xuaW1wb3J0IHtNdWx0aWNob2ljZUZpZWxkLCBNdWx0aWNob2ljZUZpZWxkVmFsdWV9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL211bHRpY2hvaWNlLWZpZWxkL21vZGVscy9tdWx0aWNob2ljZS1maWVsZCc7XG5pbXBvcnQge0RhdGVGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZGF0ZS1maWVsZC9tb2RlbHMvZGF0ZS1maWVsZCc7XG5pbXBvcnQge0RhdGVUaW1lRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2RhdGUtdGltZS1maWVsZC9tb2RlbHMvZGF0ZS10aW1lLWZpZWxkJztcbmltcG9ydCB7VXNlckZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy91c2VyLWZpZWxkL21vZGVscy91c2VyLWZpZWxkJztcbmltcG9ydCB7QnV0dG9uRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2J1dHRvbi1maWVsZC9tb2RlbHMvYnV0dG9uLWZpZWxkJztcbmltcG9ydCB7RmlsZUZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9maWxlLWZpZWxkL21vZGVscy9maWxlLWZpZWxkJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7VXNlclZhbHVlfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy91c2VyLWZpZWxkL21vZGVscy91c2VyLXZhbHVlJztcbmltcG9ydCB7RmllbGRUeXBlUmVzb3VyY2V9IGZyb20gJy4uL21vZGVsL2ZpZWxkLXR5cGUtcmVzb3VyY2UnO1xuaW1wb3J0IHtGaWxlTGlzdEZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9maWxlLWxpc3QtZmllbGQvbW9kZWxzL2ZpbGUtbGlzdC1maWVsZCc7XG5pbXBvcnQge1RleHRBcmVhRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL3RleHQtZmllbGQvbW9kZWxzL3RleHQtYXJlYS1maWVsZCc7XG5pbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL2NvbXBvbmVudCc7XG5pbXBvcnQge1Rhc2tSZWZGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvdGFzay1yZWYtZmllbGQvbW9kZWwvdGFzay1yZWYtZmllbGQnO1xuaW1wb3J0IHtEeW5hbWljRW51bWVyYXRpb25GaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZW51bWVyYXRpb24tZmllbGQvbW9kZWxzL2R5bmFtaWMtZW51bWVyYXRpb24tZmllbGQnO1xuaW1wb3J0IHtGaWx0ZXJGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZmlsdGVyLWZpZWxkL21vZGVscy9maWx0ZXItZmllbGQnO1xuaW1wb3J0IHtJMThuRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2kxOG4tZmllbGQvbW9kZWxzL2kxOG4tZmllbGQnO1xuaW1wb3J0IHtVc2VyTGlzdEZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy91c2VyLWxpc3QtZmllbGQvbW9kZWxzL3VzZXItbGlzdC1maWVsZCc7XG5pbXBvcnQge1VzZXJMaXN0VmFsdWV9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL3VzZXItbGlzdC1maWVsZC9tb2RlbHMvdXNlci1saXN0LXZhbHVlJztcbmltcG9ydCB7ZGVjb2RlQmFzZTY0LCBlbmNvZGVCYXNlNjR9IGZyb20gXCIuLi8uLi91dGlsaXR5L2Jhc2U2NFwiO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRmllbGRDb252ZXJ0ZXJTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHRleHRGaWVsZE5hbWVzID0gWyd0ZXh0YXJlYScsICdyaWNodGV4dGFyZWEnLCAnaHRtbHRleHRhcmVhJywgJ2VkaXRvcicsICdodG1sRWRpdG9yJywgJ2FyZWEnXVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgfVxuXG4gICAgcHVibGljIHRvQ2xhc3MoaXRlbTogRGF0YUZpZWxkUmVzb3VyY2UpOiBEYXRhRmllbGQ8YW55PiB7XG4gICAgICAgIHN3aXRjaCAoaXRlbS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLkJPT0xFQU46XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCb29sZWFuRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBpdGVtLnZhbHVlIGFzIGJvb2xlYW4sIGl0ZW0uYmVoYXZpb3IsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucGxhY2Vob2xkZXIsIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LCBpdGVtLnZhbGlkYXRpb25zLCBpdGVtLmNvbXBvbmVudCwgaXRlbS5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5URVhUOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRleHRGaWVsZE5hbWVzLmluY2x1ZGVzKGl0ZW0uY29tcG9uZW50Py5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRleHRBcmVhRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCB0aGlzLnJlc29sdmVUZXh0VmFsdWUoaXRlbSwgaXRlbS52YWx1ZSksIGl0ZW0uYmVoYXZpb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnBsYWNlaG9sZGVyLCBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5jb21wb25lbnQsIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0RmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCB0aGlzLnJlc29sdmVUZXh0VmFsdWUoaXRlbSwgaXRlbS52YWx1ZSksIGl0ZW0uYmVoYXZpb3IsIGl0ZW0ucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LCBpdGVtLnZhbGlkYXRpb25zLCBpdGVtLmNvbXBvbmVudCwgaXRlbS5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5OVU1CRVI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJGaWVsZChpdGVtLnN0cmluZ0lkLCBpdGVtLm5hbWUsIGl0ZW0udmFsdWUgYXMgbnVtYmVyLCBpdGVtLmJlaGF2aW9yLCBpdGVtLnZhbGlkYXRpb25zLCBpdGVtLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgaXRlbS5mb3JtYXRGaWx0ZXIsIHRoaXMucmVzb2x2ZU51bWJlckNvbXBvbmVudChpdGVtKSwgaXRlbS5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5FTlVNRVJBVElPTjpcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuRU5VTUVSQVRJT05fTUFQOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVFbnVtRmllbGQoaXRlbSk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLk1VTFRJQ0hPSUNFOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTXVsdGljaG9pY2VGaWVsZChpdGVtLnN0cmluZ0lkLCBpdGVtLm5hbWUsIGl0ZW0udmFsdWUsIHRoaXMucmVzb2x2ZU11bHRpY2hvaWNlQ2hvaWNlcyhpdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5iZWhhdmlvciwgaXRlbS5wbGFjZWhvbGRlciwgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udHlwZSwgaXRlbS52YWxpZGF0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jb21wb25lbnQsIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuTVVMVElDSE9JQ0VfTUFQOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTXVsdGljaG9pY2VGaWVsZChpdGVtLnN0cmluZ0lkLCBpdGVtLm5hbWUsIGl0ZW0udmFsdWUsIHRoaXMucmVzb2x2ZU11bHRpY2hvaWNlT3B0aW9ucyhpdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5iZWhhdmlvciwgaXRlbS5wbGFjZWhvbGRlciwgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0udHlwZSwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5jb21wb25lbnQsIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuREFURTpcbiAgICAgICAgICAgICAgICBsZXQgZGF0ZTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlID0gbW9tZW50KG5ldyBEYXRlKGl0ZW0udmFsdWVbMF0sIGl0ZW0udmFsdWVbMV0gLSAxLCBpdGVtLnZhbHVlWzJdKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZUZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgZGF0ZSwgaXRlbS5iZWhhdmlvciwgaXRlbS5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udmFsaWRhdGlvbnMsIGl0ZW0uY29tcG9uZW50LCBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLkRBVEVfVElNRTpcbiAgICAgICAgICAgICAgICBsZXQgZGF0ZVRpbWU7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVRpbWUgPSBtb21lbnQobmV3IERhdGUoaXRlbS52YWx1ZVswXSwgaXRlbS52YWx1ZVsxXSAtIDEsIGl0ZW0udmFsdWVbMl0sIGl0ZW0udmFsdWVbM10sIGl0ZW0udmFsdWVbNF0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlVGltZUZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgZGF0ZVRpbWUsIGl0ZW0uYmVoYXZpb3IsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucGxhY2Vob2xkZXIsIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LCBpdGVtLnZhbGlkYXRpb25zLCBpdGVtLmNvbXBvbmVudCwgaXRlbS5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5VU0VSOlxuICAgICAgICAgICAgICAgIGxldCB1c2VyO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHVzZXIgPSBuZXcgVXNlclZhbHVlKGl0ZW0udmFsdWUuaWQsIGl0ZW0udmFsdWUubmFtZSwgaXRlbS52YWx1ZS5zdXJuYW1lLCBpdGVtLnZhbHVlLmVtYWlsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVc2VyRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBpdGVtLmJlaGF2aW9yLCB1c2VyLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLnJvbGVzLCBpdGVtLnBsYWNlaG9sZGVyLCBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5jb21wb25lbnQsIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuVVNFUl9MSVNUOlxuICAgICAgICAgICAgICAgIGxldCB1c2VyTGlzdFZhbHVlID0gbmV3IFVzZXJMaXN0VmFsdWUobmV3IE1hcDxzdHJpbmcsIFVzZXJWYWx1ZT4oKSk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS52YWx1ZS51c2VyVmFsdWVzLmZvckVhY2godSA9PiB1c2VyTGlzdFZhbHVlLmFkZFVzZXJWYWx1ZShuZXcgVXNlclZhbHVlKHUuaWQsIHUubmFtZSwgdS5zdXJuYW1lLCB1LmVtYWlsKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVzZXJMaXN0RmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBpdGVtLmJlaGF2aW9yLCB1c2VyTGlzdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLnJvbGVzLCBpdGVtLnBsYWNlaG9sZGVyLCBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5jb21wb25lbnQsIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuQlVUVE9OOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnV0dG9uRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBpdGVtLmJlaGF2aW9yLCBpdGVtLnZhbHVlIGFzIG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5wbGFjZWhvbGRlciwgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udmFsaWRhdGlvbnMsIGl0ZW0uY29tcG9uZW50LCBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLkZJTEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxlRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBpdGVtLmJlaGF2aW9yLCBpdGVtLnZhbHVlID8gaXRlbS52YWx1ZSA6IHt9LFxuICAgICAgICAgICAgICAgICAgICBpdGVtLnBsYWNlaG9sZGVyLCBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgbnVsbCwgbnVsbCwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5jb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuRklMRV9MSVNUOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZUxpc3RGaWVsZChpdGVtLnN0cmluZ0lkLCBpdGVtLm5hbWUsIGl0ZW0uYmVoYXZpb3IsIGl0ZW0udmFsdWUgPyBpdGVtLnZhbHVlIDoge30sXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucGxhY2Vob2xkZXIsIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LCBpdGVtLnZhbGlkYXRpb25zLCBudWxsLCBudWxsLCBpdGVtLmNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5UQVNLX1JFRjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRhc2tSZWZGaWVsZChpdGVtLnN0cmluZ0lkLCBpdGVtLm5hbWUsIGl0ZW0udmFsdWUgPyBpdGVtLnZhbHVlIDogW10sIGl0ZW0uYmVoYXZpb3IsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucGxhY2Vob2xkZXIsIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LCBpdGVtLnZhbGlkYXRpb25zLCBpdGVtLmNvbXBvbmVudCwgaXRlbS5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5GSUxURVI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXJGaWVsZChpdGVtLnN0cmluZ0lkLCBpdGVtLm5hbWUsIGl0ZW0udmFsdWUgPz8gJycsIGl0ZW0uZmlsdGVyTWV0YWRhdGEsIGl0ZW0uYWxsb3dlZE5ldHMsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uYmVoYXZpb3IsIGl0ZW0ucGxhY2Vob2xkZXIsIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LCBpdGVtLnZhbGlkYXRpb25zLCBpdGVtLmNvbXBvbmVudCwgaXRlbS5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5JMThOOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSTE4bkZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgaXRlbS52YWx1ZSA/PyB7ZGVmYXVsdFZhbHVlOiAnJ30sIGl0ZW0uYmVoYXZpb3IsIGl0ZW0ucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LCBpdGVtLnZhbGlkYXRpb25zLCBpdGVtLmNvbXBvbmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzb2x2ZVR5cGUoaXRlbTogRGF0YUZpZWxkPGFueT4pOiBGaWVsZFR5cGVSZXNvdXJjZSB7XG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgQm9vbGVhbkZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gRmllbGRUeXBlUmVzb3VyY2UuQk9PTEVBTjtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgQnV0dG9uRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGVSZXNvdXJjZS5CVVRUT047XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIFRleHRGaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZVJlc291cmNlLlRFWFQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIE51bWJlckZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gRmllbGRUeXBlUmVzb3VyY2UuTlVNQkVSO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBEYXRlRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGVSZXNvdXJjZS5EQVRFO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBEYXRlVGltZUZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gRmllbGRUeXBlUmVzb3VyY2UuREFURV9USU1FO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBGaWxlRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGVSZXNvdXJjZS5GSUxFO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBGaWxlTGlzdEZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gRmllbGRUeXBlUmVzb3VyY2UuRklMRV9MSVNUO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBVc2VyRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGVSZXNvdXJjZS5VU0VSO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBVc2VyTGlzdEZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gRmllbGRUeXBlUmVzb3VyY2UuVVNFUl9MSVNUO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBUYXNrUmVmRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGVSZXNvdXJjZS5UQVNLX1JFRjtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgRW51bWVyYXRpb25GaWVsZCB8fCBpdGVtIGluc3RhbmNlb2YgTXVsdGljaG9pY2VGaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZmllbGRUeXBlO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBGaWx0ZXJGaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZVJlc291cmNlLkZJTFRFUjtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgSTE4bkZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gRmllbGRUeXBlUmVzb3VyY2UuSTE4TjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBmb3JtYXRWYWx1ZUZvckJhY2tlbmQoZmllbGQ6IERhdGFGaWVsZDxhbnk+LCB2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMucmVzb2x2ZVR5cGUoZmllbGQpID09PSBGaWVsZFR5cGVSZXNvdXJjZS5URVhUICYmIHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZXNvbHZlVHlwZShmaWVsZCkgPT09IEZpZWxkVHlwZVJlc291cmNlLlRFWFQgJiYgZmllbGQuY29tcG9uZW50ICYmIGZpZWxkLmNvbXBvbmVudC5uYW1lID09PSAncGFzc3dvcmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlQmFzZTY0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuREFURSkge1xuICAgICAgICAgICAgaWYgKG1vbWVudC5pc01vbWVudCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzb2x2ZVR5cGUoZmllbGQpID09PSBGaWVsZFR5cGVSZXNvdXJjZS5VU0VSKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzb2x2ZVR5cGUoZmllbGQpID09PSBGaWVsZFR5cGVSZXNvdXJjZS5VU0VSX0xJU1QpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4udmFsdWUudXNlclZhbHVlcy5rZXlzKCldO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuREFURV9USU1FKSB7XG4gICAgICAgICAgICBpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5mb3JtYXQoJ0RELk1NLllZWVkgSEg6bW06c3MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVOdW1iZXJDb21wb25lbnQobnVtYmVyRmllbGQ6IERhdGFGaWVsZFJlc291cmNlKTogQ29tcG9uZW50IHtcbiAgICAgICAgbGV0IG51bWJlckNvbXBvbmVudCA9IHtuYW1lOiAnZGVmYXVsdCcsIHByb3BlcnRpZXM6IHVuZGVmaW5lZH07XG4gICAgICAgIGlmIChudW1iZXJGaWVsZC5jb21wb25lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbnVtYmVyQ29tcG9uZW50ID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IG51bWJlckZpZWxkLmNvbXBvbmVudC5uYW1lLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IG51bWJlckZpZWxkLmNvbXBvbmVudC5wcm9wZXJ0aWVzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudW1iZXJDb21wb25lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZXMgYGVudW1lcmF0aW9uYCBhbmQgYGV1bnVtZXJhdGlvbl9tYXBgIGZpZWxkcyBpbnRvIHRoZWlyIGFwcHJvcHJpYXRlIGNsYXNzIGluc3RhbmNlc1xuICAgICAqIEBwYXJhbSBlbnVtRmllbGQgZW51bWVyYXRpb24gZmllbGQgcmVzb3VyY2VcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUVudW1GaWVsZChlbnVtRmllbGQ6IERhdGFGaWVsZFJlc291cmNlKTogRW51bWVyYXRpb25GaWVsZCB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBlbnVtRmllbGQudHlwZSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuRU5VTUVSQVRJT05cbiAgICAgICAgICAgID8gdGhpcy5yZXNvbHZlRW51bUNob2ljZXMoZW51bUZpZWxkKVxuICAgICAgICAgICAgOiB0aGlzLnJlc29sdmVFbnVtT3B0aW9ucyhlbnVtRmllbGQpO1xuICAgICAgICBpZiAoZW51bUZpZWxkLmNvbXBvbmVudCAmJiBlbnVtRmllbGQuY29tcG9uZW50Lm5hbWUgPT09ICdhdXRvY29tcGxldGVfZHluYW1pYycpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRHluYW1pY0VudW1lcmF0aW9uRmllbGQoZW51bUZpZWxkLnN0cmluZ0lkLCBlbnVtRmllbGQubmFtZSwgZW51bUZpZWxkLnZhbHVlLCBvcHRpb25zLFxuICAgICAgICAgICAgICAgIGVudW1GaWVsZC5iZWhhdmlvciwgZW51bUZpZWxkLnBsYWNlaG9sZGVyLCBlbnVtRmllbGQuZGVzY3JpcHRpb24sIGVudW1GaWVsZC5sYXlvdXQsXG4gICAgICAgICAgICAgICAgZW51bUZpZWxkLnR5cGUsIGVudW1GaWVsZC52YWxpZGF0aW9ucywgZW51bUZpZWxkLmNvbXBvbmVudCwgZW51bUZpZWxkLnBhcmVudFRhc2tJZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVudW1lcmF0aW9uRmllbGQoZW51bUZpZWxkLnN0cmluZ0lkLCBlbnVtRmllbGQubmFtZSwgZW51bUZpZWxkLnZhbHVlLCBvcHRpb25zLFxuICAgICAgICAgICAgICAgIGVudW1GaWVsZC5iZWhhdmlvciwgZW51bUZpZWxkLnBsYWNlaG9sZGVyLCBlbnVtRmllbGQuZGVzY3JpcHRpb24sIGVudW1GaWVsZC5sYXlvdXQsXG4gICAgICAgICAgICAgICAgZW51bUZpZWxkLnR5cGUsIGVudW1GaWVsZC52YWxpZGF0aW9ucywgZW51bUZpZWxkLmNvbXBvbmVudCwgZW51bUZpZWxkLnBhcmVudFRhc2tJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgZW51bWVyYXRpb24gb3B0aW9ucyBmcm9tIHRoZSBgY2hvaWNlc2AgYXR0cmlidXRlXG4gICAgICogQHBhcmFtIGVudW1GaWVsZCBlbnVtZXJhdGlvbiBmaWVsZCByZXNvdXJjZSBvYmplY3Qgd2hvJ3MgY2hvaWNlcyB3ZSB3YW50IHRvIHJlc29sdmVcbiAgICAgKiBAcmV0dXJucyB0aGUgb3B0aW9ucyBmb3IgdGhlIGVudW1lcmF0aW9uIGZpZWxkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlc29sdmVFbnVtQ2hvaWNlcyhlbnVtRmllbGQ6IERhdGFGaWVsZFJlc291cmNlKTogQXJyYXk8RW51bWVyYXRpb25GaWVsZFZhbHVlPiB7XG4gICAgICAgIGNvbnN0IGVudW1DaG9pY2VzID0gW107XG4gICAgICAgIGlmIChlbnVtRmllbGQuY2hvaWNlcyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICBlbnVtRmllbGQuY2hvaWNlcy5mb3JFYWNoKGl0ID0+IHtcbiAgICAgICAgICAgICAgICBlbnVtQ2hvaWNlcy5wdXNoKHtrZXk6IGl0LCB2YWx1ZTogaXR9IGFzIEVudW1lcmF0aW9uRmllbGRWYWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGVudW1GaWVsZC5jaG9pY2VzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgZW51bUNob2ljZXMucHVzaCh7a2V5LCB2YWx1ZTogZW51bUZpZWxkLmNob2ljZXNba2V5XX0gYXMgRW51bWVyYXRpb25GaWVsZFZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnVtQ2hvaWNlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgZW51bWVyYXRpb24gb3B0aW9ucyBmcm9tIHRoZSBgb3B0aW9uc2AgYXR0cmlidXRlXG4gICAgICogQHBhcmFtIGVudW1GaWVsZCBlbnVtZXJhdGlvbiBmaWVsZCByZXNvdXJjZSBvYmplY3Qgd2hvJ3Mgb3B0aW9ucyB3ZSB3YW50IHRvIHJlc29sdmVcbiAgICAgKiBAcmV0dXJucyB0aGUgb3B0aW9ucyBmb3IgdGhlIGVudW1lcmF0aW9uIGZpZWxkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlc29sdmVFbnVtT3B0aW9ucyhlbnVtRmllbGQ6IERhdGFGaWVsZFJlc291cmNlKTogQXJyYXk8RW51bWVyYXRpb25GaWVsZFZhbHVlPiB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhlbnVtRmllbGQub3B0aW9ucykubWFwKGVudHJ5ID0+ICh7a2V5OiBlbnRyeVswXSwgdmFsdWU6IGVudHJ5WzFdfSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBtdWx0aWNob2ljZSBvcHRpb25zIGZyb20gdGhlIGBjaG9pY2VzYCBhdHRyaWJ1dGVcbiAgICAgKiBAcGFyYW0gbXVsdGlGaWVsZCBtdWx0aWNob2ljZSBmaWVsZCByZXNvdXJjZSBvYmplY3Qgd2hvJ3Mgb3B0aW9ucyB3ZSB3YW50IHRvIHJlc29sdmVcbiAgICAgKiBAcmV0dXJucyB0aGUgb3B0aW9ucyBmb3IgdGhlIG11bHRpY2hvaWNlIGZpZWxkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlc29sdmVNdWx0aWNob2ljZUNob2ljZXMobXVsdGlGaWVsZDogRGF0YUZpZWxkUmVzb3VyY2UpOiBBcnJheTxNdWx0aWNob2ljZUZpZWxkVmFsdWU+IHtcbiAgICAgICAgY29uc3QgY2hvaWNlc011bHRpOiBBcnJheTxNdWx0aWNob2ljZUZpZWxkVmFsdWU+ID0gW107XG4gICAgICAgIGlmIChtdWx0aUZpZWxkLmNob2ljZXMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgbXVsdGlGaWVsZC5jaG9pY2VzLmZvckVhY2goaXQgPT4ge1xuICAgICAgICAgICAgICAgIGNob2ljZXNNdWx0aS5wdXNoKHtrZXk6IGl0LCB2YWx1ZTogaXR9IGFzIE11bHRpY2hvaWNlRmllbGRWYWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG11bHRpRmllbGQuY2hvaWNlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNob2ljZXNNdWx0aS5wdXNoKHtrZXksIHZhbHVlOiBtdWx0aUZpZWxkLmNob2ljZXNba2V5XX0gYXMgTXVsdGljaG9pY2VGaWVsZFZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaG9pY2VzTXVsdGk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIGVudW1lcmF0aW9uIG9wdGlvbnMgZnJvbSB0aGUgYG9wdGlvbnNgIGF0dHJpYnV0ZVxuICAgICAqIEBwYXJhbSBtdWx0aUZpZWxkIG11bHRpY2hvaWNlIGZpZWxkIHJlc291cmNlIG9iamVjdCB3aG8ncyBvcHRpb25zIHdlIHdhbnQgdG8gcmVzb2x2ZVxuICAgICAqIEByZXR1cm5zIHRoZSBvcHRpb25zIGZvciB0aGUgbXVsdGljaG9pY2UgZmllbGRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZU11bHRpY2hvaWNlT3B0aW9ucyhtdWx0aUZpZWxkOiBEYXRhRmllbGRSZXNvdXJjZSk6IEFycmF5PE11bHRpY2hvaWNlRmllbGRWYWx1ZT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMobXVsdGlGaWVsZC5vcHRpb25zKS5tYXAoZW50cnkgPT4gKHtrZXk6IGVudHJ5WzBdLCB2YWx1ZTogZW50cnlbMV19KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGZvcm1hdFZhbHVlRnJvbUJhY2tlbmQoZmllbGQ6IERhdGFGaWVsZDxhbnk+LCB2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuVEVYVCAmJiBmaWVsZC5jb21wb25lbnQgJiYgZmllbGQuY29tcG9uZW50Lm5hbWUgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWNvZGVCYXNlNjQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuREFURSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChuZXcgRGF0ZSh2YWx1ZVswXSwgdmFsdWVbMV0gLSAxLCB2YWx1ZVsyXSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuVVNFUikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVc2VyVmFsdWUodmFsdWUuaWQsIHZhbHVlLm5hbWUsIHZhbHVlLnN1cm5hbWUsIHZhbHVlLmVtYWlsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZXNvbHZlVHlwZShmaWVsZCkgPT09IEZpZWxkVHlwZVJlc291cmNlLkRBVEVfVElNRSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChuZXcgRGF0ZSh2YWx1ZVswXSwgdmFsdWVbMV0gLSAxLCB2YWx1ZVsyXSwgdmFsdWVbM10sIHZhbHVlWzRdKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzb2x2ZVR5cGUoZmllbGQpID09PSBGaWVsZFR5cGVSZXNvdXJjZS5NVUxUSUNIT0lDRSkge1xuICAgICAgICAgICAgY29uc3QgYXJyYXkgPSBbXTtcbiAgICAgICAgICAgIHZhbHVlLmZvckVhY2godiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHYuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2godi5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2godik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzb2x2ZVR5cGUoZmllbGQpID09PSBGaWVsZFR5cGVSZXNvdXJjZS5VU0VSX0xJU1QgJiYgISF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVc2VyTGlzdFZhbHVlKG5ldyBNYXAodmFsdWUudXNlclZhbHVlcy5tYXAodiA9PiBbdi5pZCwgdl0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlVGV4dFZhbHVlKGZpZWxkOiBEYXRhRmllbGRSZXNvdXJjZSwgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmIChmaWVsZC5jb21wb25lbnQgIT09IHVuZGVmaW5lZCAmJiBmaWVsZC5jb21wb25lbnQubmFtZSA9PT0gJ3Bhc3N3b3JkJyAmJiB2YWx1ZSAhPT0gJycgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlY29kZUJhc2U2NCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn1cbiJdfQ==
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtY29udmVydGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3Rhc2stY29udGVudC9zZXJ2aWNlcy9maWVsZC1jb252ZXJ0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3pDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUNsRixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDekUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBQy9FLE9BQU8sRUFBQyxnQkFBZ0IsRUFBd0IsTUFBTSw4REFBOEQsQ0FBQztBQUNySCxPQUFPLEVBQUMsZ0JBQWdCLEVBQXdCLE1BQU0sOERBQThELENBQUM7QUFDckgsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUN2RixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDekUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBQy9FLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUN2RixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFFbEYsT0FB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SyxDQUFDLEtBQUssaUJBQWlCLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7WUFDcEUsT0FBTyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzRTtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFUyxnQkFBZ0IsQ0FBQyxLQUF3QixFQUFFLEtBQWE7UUFDOUQsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksS0FBSyxLQUFLLEVBQUUsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQzdHLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlCO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzs7bUhBbFJRLHFCQUFxQjt1SEFBckIscUJBQXFCLGNBRmxCLE1BQU07NEZBRVQscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RhdGFGaWVsZFJlc291cmNlfSBmcm9tICcuLi9tb2RlbC9yZXNvdXJjZS1pbnRlcmZhY2UnO1xuaW1wb3J0IHtEYXRhRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL21vZGVscy9hYnN0cmFjdC1kYXRhLWZpZWxkJztcbmltcG9ydCB7Qm9vbGVhbkZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9ib29sZWFuLWZpZWxkL21vZGVscy9ib29sZWFuLWZpZWxkJztcbmltcG9ydCB7VGV4dEZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy90ZXh0LWZpZWxkL21vZGVscy90ZXh0LWZpZWxkJztcbmltcG9ydCB7TnVtYmVyRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL251bWJlci1maWVsZC9tb2RlbHMvbnVtYmVyLWZpZWxkJztcbmltcG9ydCB7RW51bWVyYXRpb25GaWVsZCwgRW51bWVyYXRpb25GaWVsZFZhbHVlfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9lbnVtZXJhdGlvbi1maWVsZC9tb2RlbHMvZW51bWVyYXRpb24tZmllbGQnO1xuaW1wb3J0IHtNdWx0aWNob2ljZUZpZWxkLCBNdWx0aWNob2ljZUZpZWxkVmFsdWV9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL211bHRpY2hvaWNlLWZpZWxkL21vZGVscy9tdWx0aWNob2ljZS1maWVsZCc7XG5pbXBvcnQge0RhdGVGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZGF0ZS1maWVsZC9tb2RlbHMvZGF0ZS1maWVsZCc7XG5pbXBvcnQge0RhdGVUaW1lRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2RhdGUtdGltZS1maWVsZC9tb2RlbHMvZGF0ZS10aW1lLWZpZWxkJztcbmltcG9ydCB7VXNlckZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy91c2VyLWZpZWxkL21vZGVscy91c2VyLWZpZWxkJztcbmltcG9ydCB7QnV0dG9uRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2J1dHRvbi1maWVsZC9tb2RlbHMvYnV0dG9uLWZpZWxkJztcbmltcG9ydCB7RmlsZUZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9maWxlLWZpZWxkL21vZGVscy9maWxlLWZpZWxkJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7VXNlclZhbHVlfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy91c2VyLWZpZWxkL21vZGVscy91c2VyLXZhbHVlJztcbmltcG9ydCB7RmllbGRUeXBlUmVzb3VyY2V9IGZyb20gJy4uL21vZGVsL2ZpZWxkLXR5cGUtcmVzb3VyY2UnO1xuaW1wb3J0IHtGaWxlTGlzdEZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9maWxlLWxpc3QtZmllbGQvbW9kZWxzL2ZpbGUtbGlzdC1maWVsZCc7XG5pbXBvcnQge1RleHRBcmVhRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL3RleHQtZmllbGQvbW9kZWxzL3RleHQtYXJlYS1maWVsZCc7XG5pbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL2NvbXBvbmVudCc7XG5pbXBvcnQge1Rhc2tSZWZGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvdGFzay1yZWYtZmllbGQvbW9kZWwvdGFzay1yZWYtZmllbGQnO1xuaW1wb3J0IHtEeW5hbWljRW51bWVyYXRpb25GaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZW51bWVyYXRpb24tZmllbGQvbW9kZWxzL2R5bmFtaWMtZW51bWVyYXRpb24tZmllbGQnO1xuaW1wb3J0IHtGaWx0ZXJGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZmlsdGVyLWZpZWxkL21vZGVscy9maWx0ZXItZmllbGQnO1xuaW1wb3J0IHtJMThuRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2kxOG4tZmllbGQvbW9kZWxzL2kxOG4tZmllbGQnO1xuaW1wb3J0IHtVc2VyTGlzdEZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy91c2VyLWxpc3QtZmllbGQvbW9kZWxzL3VzZXItbGlzdC1maWVsZCc7XG5pbXBvcnQge1VzZXJMaXN0VmFsdWV9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL3VzZXItbGlzdC1maWVsZC9tb2RlbHMvdXNlci1saXN0LXZhbHVlJztcbmltcG9ydCB7ZGVjb2RlQmFzZTY0LCBlbmNvZGVCYXNlNjR9IGZyb20gXCIuLi8uLi91dGlsaXR5L2Jhc2U2NFwiO1xuaW1wb3J0IHtDYXNlUmVmRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2Nhc2UtcmVmLWZpZWxkL21vZGVsL2Nhc2UtcmVmLWZpZWxkJztcblxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkQ29udmVydGVyU2VydmljZSB7XG4gICAgcHJpdmF0ZSB0ZXh0RmllbGROYW1lcyA9IFsndGV4dGFyZWEnLCAncmljaHRleHRhcmVhJywgJ2h0bWx0ZXh0YXJlYScsICdlZGl0b3InLCAnaHRtbEVkaXRvcicsICdhcmVhJ11cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgIH1cblxuICAgIHB1YmxpYyB0b0NsYXNzKGl0ZW06IERhdGFGaWVsZFJlc291cmNlKTogRGF0YUZpZWxkPGFueT4ge1xuICAgICAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5CT09MRUFOOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQm9vbGVhbkZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgaXRlbS52YWx1ZSBhcyBib29sZWFuLCBpdGVtLmJlaGF2aW9yLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLnBsYWNlaG9sZGVyLCBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5jb21wb25lbnQsIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuVEVYVDpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50ZXh0RmllbGROYW1lcy5pbmNsdWRlcyhpdGVtLmNvbXBvbmVudD8ubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0QXJlYUZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgdGhpcy5yZXNvbHZlVGV4dFZhbHVlKGl0ZW0sIGl0ZW0udmFsdWUpLCBpdGVtLmJlaGF2aW9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5wbGFjZWhvbGRlciwgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udmFsaWRhdGlvbnMsIGl0ZW0uY29tcG9uZW50LCBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dEZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgdGhpcy5yZXNvbHZlVGV4dFZhbHVlKGl0ZW0sIGl0ZW0udmFsdWUpLCBpdGVtLmJlaGF2aW9yLCBpdGVtLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5jb21wb25lbnQsIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuTlVNQkVSOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTnVtYmVyRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBpdGVtLnZhbHVlIGFzIG51bWJlciwgaXRlbS5iZWhhdmlvciwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0uZm9ybWF0RmlsdGVyLCB0aGlzLnJlc29sdmVOdW1iZXJDb21wb25lbnQoaXRlbSksIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuRU5VTUVSQVRJT046XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLkVOVU1FUkFUSU9OX01BUDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlRW51bUZpZWxkKGl0ZW0pO1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5NVUxUSUNIT0lDRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE11bHRpY2hvaWNlRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBpdGVtLnZhbHVlLCB0aGlzLnJlc29sdmVNdWx0aWNob2ljZUNob2ljZXMoaXRlbSksXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uYmVoYXZpb3IsIGl0ZW0ucGxhY2Vob2xkZXIsIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LCBpdGVtLnR5cGUsIGl0ZW0udmFsaWRhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uY29tcG9uZW50LCBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLk1VTFRJQ0hPSUNFX01BUDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE11bHRpY2hvaWNlRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBpdGVtLnZhbHVlLCB0aGlzLnJlc29sdmVNdWx0aWNob2ljZU9wdGlvbnMoaXRlbSksXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uYmVoYXZpb3IsIGl0ZW0ucGxhY2Vob2xkZXIsIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LFxuICAgICAgICAgICAgICAgICAgICBpdGVtLnR5cGUsIGl0ZW0udmFsaWRhdGlvbnMsIGl0ZW0uY29tcG9uZW50LCBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLkRBVEU6XG4gICAgICAgICAgICAgICAgbGV0IGRhdGU7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IG1vbWVudChuZXcgRGF0ZShpdGVtLnZhbHVlWzBdLCBpdGVtLnZhbHVlWzFdIC0gMSwgaXRlbS52YWx1ZVsyXSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGVGaWVsZChpdGVtLnN0cmluZ0lkLCBpdGVtLm5hbWUsIGRhdGUsIGl0ZW0uYmVoYXZpb3IsIGl0ZW0ucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LCBpdGVtLnZhbGlkYXRpb25zLCBpdGVtLmNvbXBvbmVudCwgaXRlbS5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5EQVRFX1RJTUU6XG4gICAgICAgICAgICAgICAgbGV0IGRhdGVUaW1lO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVUaW1lID0gbW9tZW50KG5ldyBEYXRlKGl0ZW0udmFsdWVbMF0sIGl0ZW0udmFsdWVbMV0gLSAxLCBpdGVtLnZhbHVlWzJdLCBpdGVtLnZhbHVlWzNdLCBpdGVtLnZhbHVlWzRdKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWVGaWVsZChpdGVtLnN0cmluZ0lkLCBpdGVtLm5hbWUsIGRhdGVUaW1lLCBpdGVtLmJlaGF2aW9yLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLnBsYWNlaG9sZGVyLCBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5jb21wb25lbnQsIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuVVNFUjpcbiAgICAgICAgICAgICAgICBsZXQgdXNlcjtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB1c2VyID0gbmV3IFVzZXJWYWx1ZShpdGVtLnZhbHVlLmlkLCBpdGVtLnZhbHVlLm5hbWUsIGl0ZW0udmFsdWUuc3VybmFtZSwgaXRlbS52YWx1ZS5lbWFpbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVXNlckZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgaXRlbS5iZWhhdmlvciwgdXNlcixcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5yb2xlcywgaXRlbS5wbGFjZWhvbGRlciwgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udmFsaWRhdGlvbnMsIGl0ZW0uY29tcG9uZW50LCBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLlVTRVJfTElTVDpcbiAgICAgICAgICAgICAgICBsZXQgdXNlckxpc3RWYWx1ZSA9IG5ldyBVc2VyTGlzdFZhbHVlKG5ldyBNYXA8c3RyaW5nLCBVc2VyVmFsdWU+KCkpO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0udmFsdWUudXNlclZhbHVlcy5mb3JFYWNoKHUgPT4gdXNlckxpc3RWYWx1ZS5hZGRVc2VyVmFsdWUobmV3IFVzZXJWYWx1ZSh1LmlkLCB1Lm5hbWUsIHUuc3VybmFtZSwgdS5lbWFpbCkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVc2VyTGlzdEZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgaXRlbS5iZWhhdmlvciwgdXNlckxpc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5yb2xlcywgaXRlbS5wbGFjZWhvbGRlciwgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIGl0ZW0udmFsaWRhdGlvbnMsIGl0ZW0uY29tcG9uZW50LCBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLkJVVFRPTjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ1dHRvbkZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgaXRlbS5iZWhhdmlvciwgaXRlbS52YWx1ZSBhcyBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucGxhY2Vob2xkZXIsIGl0ZW0uZGVzY3JpcHRpb24sIGl0ZW0ubGF5b3V0LCBpdGVtLnZhbGlkYXRpb25zLCBpdGVtLmNvbXBvbmVudCwgaXRlbS5wYXJlbnRUYXNrSWQpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVSZXNvdXJjZS5GSUxFOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZUZpZWxkKGl0ZW0uc3RyaW5nSWQsIGl0ZW0ubmFtZSwgaXRlbS5iZWhhdmlvciwgaXRlbS52YWx1ZSA/IGl0ZW0udmFsdWUgOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5wbGFjZWhvbGRlciwgaXRlbS5kZXNjcmlwdGlvbiwgaXRlbS5sYXlvdXQsIG51bGwsIG51bGwsIGl0ZW0udmFsaWRhdGlvbnMsIGl0ZW0uY29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBpdGVtLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZVJlc291cmNlLkZJTEVfTElTVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVMaXN0RmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBpdGVtLmJlaGF2aW9yLCBpdGVtLnZhbHVlID8gaXRlbS52YWx1ZSA6IHt9LFxuICAgICAgICAgICAgICAgICAgICBpdGVtLnBsYWNlaG9sZGVyLCBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgaXRlbS52YWxpZGF0aW9ucywgbnVsbCwgbnVsbCwgaXRlbS5jb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuVEFTS19SRUY6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUYXNrUmVmRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBpdGVtLnZhbHVlID8gaXRlbS52YWx1ZSA6IFtdLCBpdGVtLmJlaGF2aW9yLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLnBsYWNlaG9sZGVyLCBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5jb21wb25lbnQsIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuQ0FTRV9SRUY6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDYXNlUmVmRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBpdGVtLnZhbHVlID8gaXRlbS52YWx1ZSA6IFtdLCBpdGVtLmJlaGF2aW9yLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLnBsYWNlaG9sZGVyLCBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5jb21wb25lbnQsIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuRklMVEVSOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsdGVyRmllbGQoaXRlbS5zdHJpbmdJZCwgaXRlbS5uYW1lLCBpdGVtLnZhbHVlID8/ICcnLCBpdGVtLmZpbHRlck1ldGFkYXRhLCBpdGVtLmFsbG93ZWROZXRzLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLmJlaGF2aW9yLCBpdGVtLnBsYWNlaG9sZGVyLCBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5jb21wb25lbnQsIGl0ZW0ucGFyZW50VGFza0lkKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlUmVzb3VyY2UuSTE4TjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEkxOG5GaWVsZChpdGVtLnN0cmluZ0lkLCBpdGVtLm5hbWUsIGl0ZW0udmFsdWUgPz8ge2RlZmF1bHRWYWx1ZTogJyd9LCBpdGVtLmJlaGF2aW9yLCBpdGVtLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLmRlc2NyaXB0aW9uLCBpdGVtLmxheW91dCwgaXRlbS52YWxpZGF0aW9ucywgaXRlbS5jb21wb25lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlc29sdmVUeXBlKGl0ZW06IERhdGFGaWVsZDxhbnk+KTogRmllbGRUeXBlUmVzb3VyY2Uge1xuICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEJvb2xlYW5GaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZVJlc291cmNlLkJPT0xFQU47XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIEJ1dHRvbkZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gRmllbGRUeXBlUmVzb3VyY2UuQlVUVE9OO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBUZXh0RmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGVSZXNvdXJjZS5URVhUO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBOdW1iZXJGaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZVJlc291cmNlLk5VTUJFUjtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgRGF0ZUZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gRmllbGRUeXBlUmVzb3VyY2UuREFURTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgRGF0ZVRpbWVGaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZVJlc291cmNlLkRBVEVfVElNRTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgRmlsZUZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gRmllbGRUeXBlUmVzb3VyY2UuRklMRTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgRmlsZUxpc3RGaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZVJlc291cmNlLkZJTEVfTElTVDtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgVXNlckZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gRmllbGRUeXBlUmVzb3VyY2UuVVNFUjtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgVXNlckxpc3RGaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZVJlc291cmNlLlVTRVJfTElTVDtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgVGFza1JlZkZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gRmllbGRUeXBlUmVzb3VyY2UuVEFTS19SRUY7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIEVudW1lcmF0aW9uRmllbGQgfHwgaXRlbSBpbnN0YW5jZW9mIE11bHRpY2hvaWNlRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmZpZWxkVHlwZTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgRmlsdGVyRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBGaWVsZFR5cGVSZXNvdXJjZS5GSUxURVI7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIEkxOG5GaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIEZpZWxkVHlwZVJlc291cmNlLkkxOE47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZm9ybWF0VmFsdWVGb3JCYWNrZW5kKGZpZWxkOiBEYXRhRmllbGQ8YW55PiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuVEVYVCAmJiB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzb2x2ZVR5cGUoZmllbGQpID09PSBGaWVsZFR5cGVSZXNvdXJjZS5URVhUICYmIGZpZWxkLmNvbXBvbmVudCAmJiBmaWVsZC5jb21wb25lbnQubmFtZSA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZUJhc2U2NCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZXNvbHZlVHlwZShmaWVsZCkgPT09IEZpZWxkVHlwZVJlc291cmNlLkRBVEUpIHtcbiAgICAgICAgICAgIGlmIChtb21lbnQuaXNNb21lbnQodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuVVNFUikge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmlkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuVVNFUl9MSVNUKSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLnZhbHVlLnVzZXJWYWx1ZXMua2V5cygpXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZXNvbHZlVHlwZShmaWVsZCkgPT09IEZpZWxkVHlwZVJlc291cmNlLkRBVEVfVElNRSkge1xuICAgICAgICAgICAgaWYgKG1vbWVudC5pc01vbWVudCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuZm9ybWF0KCdERC5NTS5ZWVlZIEhIOm1tOnNzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlTnVtYmVyQ29tcG9uZW50KG51bWJlckZpZWxkOiBEYXRhRmllbGRSZXNvdXJjZSk6IENvbXBvbmVudCB7XG4gICAgICAgIGxldCBudW1iZXJDb21wb25lbnQgPSB7bmFtZTogJ2RlZmF1bHQnLCBwcm9wZXJ0aWVzOiB1bmRlZmluZWR9O1xuICAgICAgICBpZiAobnVtYmVyRmllbGQuY29tcG9uZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG51bWJlckNvbXBvbmVudCA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBudW1iZXJGaWVsZC5jb21wb25lbnQubmFtZSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBudW1iZXJGaWVsZC5jb21wb25lbnQucHJvcGVydGllc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVtYmVyQ29tcG9uZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc29sdmVzIGBlbnVtZXJhdGlvbmAgYW5kIGBldW51bWVyYXRpb25fbWFwYCBmaWVsZHMgaW50byB0aGVpciBhcHByb3ByaWF0ZSBjbGFzcyBpbnN0YW5jZXNcbiAgICAgKiBAcGFyYW0gZW51bUZpZWxkIGVudW1lcmF0aW9uIGZpZWxkIHJlc291cmNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlc29sdmVFbnVtRmllbGQoZW51bUZpZWxkOiBEYXRhRmllbGRSZXNvdXJjZSk6IEVudW1lcmF0aW9uRmllbGQge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gZW51bUZpZWxkLnR5cGUgPT09IEZpZWxkVHlwZVJlc291cmNlLkVOVU1FUkFUSU9OXG4gICAgICAgICAgICA/IHRoaXMucmVzb2x2ZUVudW1DaG9pY2VzKGVudW1GaWVsZClcbiAgICAgICAgICAgIDogdGhpcy5yZXNvbHZlRW51bU9wdGlvbnMoZW51bUZpZWxkKTtcbiAgICAgICAgaWYgKGVudW1GaWVsZC5jb21wb25lbnQgJiYgZW51bUZpZWxkLmNvbXBvbmVudC5uYW1lID09PSAnYXV0b2NvbXBsZXRlX2R5bmFtaWMnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IER5bmFtaWNFbnVtZXJhdGlvbkZpZWxkKGVudW1GaWVsZC5zdHJpbmdJZCwgZW51bUZpZWxkLm5hbWUsIGVudW1GaWVsZC52YWx1ZSwgb3B0aW9ucyxcbiAgICAgICAgICAgICAgICBlbnVtRmllbGQuYmVoYXZpb3IsIGVudW1GaWVsZC5wbGFjZWhvbGRlciwgZW51bUZpZWxkLmRlc2NyaXB0aW9uLCBlbnVtRmllbGQubGF5b3V0LFxuICAgICAgICAgICAgICAgIGVudW1GaWVsZC50eXBlLCBlbnVtRmllbGQudmFsaWRhdGlvbnMsIGVudW1GaWVsZC5jb21wb25lbnQsIGVudW1GaWVsZC5wYXJlbnRUYXNrSWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFbnVtZXJhdGlvbkZpZWxkKGVudW1GaWVsZC5zdHJpbmdJZCwgZW51bUZpZWxkLm5hbWUsIGVudW1GaWVsZC52YWx1ZSwgb3B0aW9ucyxcbiAgICAgICAgICAgICAgICBlbnVtRmllbGQuYmVoYXZpb3IsIGVudW1GaWVsZC5wbGFjZWhvbGRlciwgZW51bUZpZWxkLmRlc2NyaXB0aW9uLCBlbnVtRmllbGQubGF5b3V0LFxuICAgICAgICAgICAgICAgIGVudW1GaWVsZC50eXBlLCBlbnVtRmllbGQudmFsaWRhdGlvbnMsIGVudW1GaWVsZC5jb21wb25lbnQsIGVudW1GaWVsZC5wYXJlbnRUYXNrSWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIGVudW1lcmF0aW9uIG9wdGlvbnMgZnJvbSB0aGUgYGNob2ljZXNgIGF0dHJpYnV0ZVxuICAgICAqIEBwYXJhbSBlbnVtRmllbGQgZW51bWVyYXRpb24gZmllbGQgcmVzb3VyY2Ugb2JqZWN0IHdobydzIGNob2ljZXMgd2Ugd2FudCB0byByZXNvbHZlXG4gICAgICogQHJldHVybnMgdGhlIG9wdGlvbnMgZm9yIHRoZSBlbnVtZXJhdGlvbiBmaWVsZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZXNvbHZlRW51bUNob2ljZXMoZW51bUZpZWxkOiBEYXRhRmllbGRSZXNvdXJjZSk6IEFycmF5PEVudW1lcmF0aW9uRmllbGRWYWx1ZT4ge1xuICAgICAgICBjb25zdCBlbnVtQ2hvaWNlcyA9IFtdO1xuICAgICAgICBpZiAoZW51bUZpZWxkLmNob2ljZXMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgZW51bUZpZWxkLmNob2ljZXMuZm9yRWFjaChpdCA9PiB7XG4gICAgICAgICAgICAgICAgZW51bUNob2ljZXMucHVzaCh7a2V5OiBpdCwgdmFsdWU6IGl0fSBhcyBFbnVtZXJhdGlvbkZpZWxkVmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhlbnVtRmllbGQuY2hvaWNlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGVudW1DaG9pY2VzLnB1c2goe2tleSwgdmFsdWU6IGVudW1GaWVsZC5jaG9pY2VzW2tleV19IGFzIEVudW1lcmF0aW9uRmllbGRWYWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW51bUNob2ljZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIGVudW1lcmF0aW9uIG9wdGlvbnMgZnJvbSB0aGUgYG9wdGlvbnNgIGF0dHJpYnV0ZVxuICAgICAqIEBwYXJhbSBlbnVtRmllbGQgZW51bWVyYXRpb24gZmllbGQgcmVzb3VyY2Ugb2JqZWN0IHdobydzIG9wdGlvbnMgd2Ugd2FudCB0byByZXNvbHZlXG4gICAgICogQHJldHVybnMgdGhlIG9wdGlvbnMgZm9yIHRoZSBlbnVtZXJhdGlvbiBmaWVsZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZXNvbHZlRW51bU9wdGlvbnMoZW51bUZpZWxkOiBEYXRhRmllbGRSZXNvdXJjZSk6IEFycmF5PEVudW1lcmF0aW9uRmllbGRWYWx1ZT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZW51bUZpZWxkLm9wdGlvbnMpLm1hcChlbnRyeSA9PiAoe2tleTogZW50cnlbMF0sIHZhbHVlOiBlbnRyeVsxXX0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgbXVsdGljaG9pY2Ugb3B0aW9ucyBmcm9tIHRoZSBgY2hvaWNlc2AgYXR0cmlidXRlXG4gICAgICogQHBhcmFtIG11bHRpRmllbGQgbXVsdGljaG9pY2UgZmllbGQgcmVzb3VyY2Ugb2JqZWN0IHdobydzIG9wdGlvbnMgd2Ugd2FudCB0byByZXNvbHZlXG4gICAgICogQHJldHVybnMgdGhlIG9wdGlvbnMgZm9yIHRoZSBtdWx0aWNob2ljZSBmaWVsZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZXNvbHZlTXVsdGljaG9pY2VDaG9pY2VzKG11bHRpRmllbGQ6IERhdGFGaWVsZFJlc291cmNlKTogQXJyYXk8TXVsdGljaG9pY2VGaWVsZFZhbHVlPiB7XG4gICAgICAgIGNvbnN0IGNob2ljZXNNdWx0aTogQXJyYXk8TXVsdGljaG9pY2VGaWVsZFZhbHVlPiA9IFtdO1xuICAgICAgICBpZiAobXVsdGlGaWVsZC5jaG9pY2VzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIG11bHRpRmllbGQuY2hvaWNlcy5mb3JFYWNoKGl0ID0+IHtcbiAgICAgICAgICAgICAgICBjaG9pY2VzTXVsdGkucHVzaCh7a2V5OiBpdCwgdmFsdWU6IGl0fSBhcyBNdWx0aWNob2ljZUZpZWxkVmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhtdWx0aUZpZWxkLmNob2ljZXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjaG9pY2VzTXVsdGkucHVzaCh7a2V5LCB2YWx1ZTogbXVsdGlGaWVsZC5jaG9pY2VzW2tleV19IGFzIE11bHRpY2hvaWNlRmllbGRWYWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hvaWNlc011bHRpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBlbnVtZXJhdGlvbiBvcHRpb25zIGZyb20gdGhlIGBvcHRpb25zYCBhdHRyaWJ1dGVcbiAgICAgKiBAcGFyYW0gbXVsdGlGaWVsZCBtdWx0aWNob2ljZSBmaWVsZCByZXNvdXJjZSBvYmplY3Qgd2hvJ3Mgb3B0aW9ucyB3ZSB3YW50IHRvIHJlc29sdmVcbiAgICAgKiBAcmV0dXJucyB0aGUgb3B0aW9ucyBmb3IgdGhlIG11bHRpY2hvaWNlIGZpZWxkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlc29sdmVNdWx0aWNob2ljZU9wdGlvbnMobXVsdGlGaWVsZDogRGF0YUZpZWxkUmVzb3VyY2UpOiBBcnJheTxNdWx0aWNob2ljZUZpZWxkVmFsdWU+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG11bHRpRmllbGQub3B0aW9ucykubWFwKGVudHJ5ID0+ICh7a2V5OiBlbnRyeVswXSwgdmFsdWU6IGVudHJ5WzFdfSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JtYXRWYWx1ZUZyb21CYWNrZW5kKGZpZWxkOiBEYXRhRmllbGQ8YW55PiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZXNvbHZlVHlwZShmaWVsZCkgPT09IEZpZWxkVHlwZVJlc291cmNlLlRFWFQgJiYgZmllbGQuY29tcG9uZW50ICYmIGZpZWxkLmNvbXBvbmVudC5uYW1lID09PSAncGFzc3dvcmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVjb2RlQmFzZTY0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZXNvbHZlVHlwZShmaWVsZCkgPT09IEZpZWxkVHlwZVJlc291cmNlLkRBVEUpIHtcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQobmV3IERhdGUodmFsdWVbMF0sIHZhbHVlWzFdIC0gMSwgdmFsdWVbMl0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZXNvbHZlVHlwZShmaWVsZCkgPT09IEZpZWxkVHlwZVJlc291cmNlLlVTRVIpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVXNlclZhbHVlKHZhbHVlLmlkLCB2YWx1ZS5uYW1lLCB2YWx1ZS5zdXJuYW1lLCB2YWx1ZS5lbWFpbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzb2x2ZVR5cGUoZmllbGQpID09PSBGaWVsZFR5cGVSZXNvdXJjZS5EQVRFX1RJTUUpIHtcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQobmV3IERhdGUodmFsdWVbMF0sIHZhbHVlWzFdIC0gMSwgdmFsdWVbMl0sIHZhbHVlWzNdLCB2YWx1ZVs0XSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuTVVMVElDSE9JQ0UpIHtcbiAgICAgICAgICAgIGNvbnN0IGFycmF5ID0gW107XG4gICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKHYgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2LmRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHYuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmVUeXBlKGZpZWxkKSA9PT0gRmllbGRUeXBlUmVzb3VyY2UuVVNFUl9MSVNUICYmICEhdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVXNlckxpc3RWYWx1ZShuZXcgTWFwKHZhbHVlLnVzZXJWYWx1ZXMubWFwKHYgPT4gW3YuaWQsIHZdKSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZVRleHRWYWx1ZShmaWVsZDogRGF0YUZpZWxkUmVzb3VyY2UsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZmllbGQuY29tcG9uZW50ICE9PSB1bmRlZmluZWQgJiYgZmllbGQuY29tcG9uZW50Lm5hbWUgPT09ICdwYXNzd29yZCcgJiYgdmFsdWUgIT09ICcnICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWNvZGVCYXNlNjQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG4iXX0=