vcomply-workflow-engine 2.7.3 → 2.7.4

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 (630) hide show
  1. package/bundles/vcomply-workflow-engine.umd.js +159 -18
  2. package/bundles/vcomply-workflow-engine.umd.js.map +1 -1
  3. package/esm2015/lib/sharedComponents/group-users-list/group-users-list.component.js +2 -2
  4. package/esm2015/lib/sharedComponents/group-users-list/group-users-list.component.ngfactory.js +3 -3
  5. package/esm2015/lib/workflow-compliance/workflow-compliance.component.js +66 -8
  6. package/esm2015/lib/workflow-compliance/workflow-compliance.component.ngfactory.js +3 -3
  7. package/esm2015/lib/workflow-compliance/workflow-compliance.component.ngsummary.json +1 -1
  8. package/esm2015/lib/workflow-engine.module.ngfactory.js +1 -1
  9. package/esm2015/lib/workflow-program/create-program-ui/define-framework-listing/pipes/tooltip-message.pipe.js +6 -5
  10. package/esm2015/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.js +5 -2
  11. package/esm2015/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.ngfactory.js +37 -35
  12. package/esm2015/lib/workflow-program/workflow-program.component.js +79 -5
  13. package/esm2015/lib/workflow-program/workflow-program.component.ngfactory.js +9 -9
  14. package/esm2015/lib/workflow-program/workflow-program.component.ngsummary.json +1 -1
  15. package/fesm2015/vcomply-workflow-engine.js +153 -17
  16. package/fesm2015/vcomply-workflow-engine.js.map +1 -1
  17. package/lib/add-multiple-responsibility/add-multiple-responsibility.component.d.ts.__ivy_ngcc_bak +87 -0
  18. package/lib/add-multiple-responsibility/add-multiple-responsibility.component.d.ts.map +1 -0
  19. package/lib/add-multiple-responsibility-container/add-multiple-responsibility-container.component.d.ts.__ivy_ngcc_bak +37 -0
  20. package/lib/add-multiple-responsibility-container/add-multiple-responsibility-container.component.d.ts.map +1 -0
  21. package/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.d.ts.__ivy_ngcc_bak +186 -0
  22. package/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.d.ts.map +1 -0
  23. package/lib/add-multiple-risk/add-multiple-risk.component.d.ts.__ivy_ngcc_bak +108 -0
  24. package/lib/add-multiple-risk/add-multiple-risk.component.d.ts.map +1 -0
  25. package/lib/confirmation-alert/confirmation-alert.component.d.ts.__ivy_ngcc_bak +10 -0
  26. package/lib/confirmation-alert/confirmation-alert.component.d.ts.map +1 -0
  27. package/lib/create-documents/create-documents.component.d.ts.__ivy_ngcc_bak +36 -0
  28. package/lib/create-documents/create-documents.component.d.ts.map +1 -0
  29. package/lib/formgroup/cs-checkbox/cs-checkbox.component.d.ts.__ivy_ngcc_bak +14 -0
  30. package/lib/formgroup/cs-checkbox/cs-checkbox.component.d.ts.map +1 -0
  31. package/lib/formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component.d.ts.__ivy_ngcc_bak +11 -0
  32. package/lib/formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component.d.ts.map +1 -0
  33. package/lib/formgroup/cs-radio/cs-radio.component.d.ts.__ivy_ngcc_bak +13 -0
  34. package/lib/formgroup/cs-radio/cs-radio.component.d.ts.map +1 -0
  35. package/lib/formgroup/cs-radio-group/cs-radio-group.component.d.ts.__ivy_ngcc_bak +5 -0
  36. package/lib/formgroup/cs-radio-group/cs-radio-group.component.d.ts.map +1 -0
  37. package/lib/formgroup/cs-select/cs-select.component.d.ts.__ivy_ngcc_bak +31 -0
  38. package/lib/formgroup/cs-select/cs-select.component.d.ts.map +1 -0
  39. package/lib/formgroup/cs-switch/cs-switch.component.d.ts.__ivy_ngcc_bak +12 -0
  40. package/lib/formgroup/cs-switch/cs-switch.component.d.ts.map +1 -0
  41. package/lib/formgroup/formgroup.module.d.ts.__ivy_ngcc_bak +2 -0
  42. package/lib/formgroup/formgroup.module.d.ts.map +1 -0
  43. package/lib/formgroup/pipes/pascal.pipe.d.ts.__ivy_ngcc_bak +4 -0
  44. package/lib/formgroup/pipes/pascal.pipe.d.ts.map +1 -0
  45. package/lib/formgroup/select/cs-option/cs-option.component.d.ts.__ivy_ngcc_bak +15 -0
  46. package/lib/formgroup/select/cs-option/cs-option.component.d.ts.map +1 -0
  47. package/lib/formgroup/select/cs-select/cs-select.component.d.ts.__ivy_ngcc_bak +34 -0
  48. package/lib/formgroup/select/cs-select/cs-select.component.d.ts.map +1 -0
  49. package/lib/formgroup/select/select.module.d.ts.__ivy_ngcc_bak +2 -0
  50. package/lib/formgroup/select/select.module.d.ts.map +1 -0
  51. package/lib/formgroup/select/select.service.d.ts.__ivy_ngcc_bak +15 -0
  52. package/lib/formgroup/select/select.service.d.ts.map +1 -0
  53. package/lib/log-an-issue/log-an-issue.component.d.ts.__ivy_ngcc_bak +218 -0
  54. package/lib/log-an-issue/log-an-issue.component.d.ts.map +1 -0
  55. package/lib/more-option/more-option.component.d.ts.__ivy_ngcc_bak +25 -0
  56. package/lib/more-option/more-option.component.d.ts.map +1 -0
  57. package/lib/pipes/data-type.pipe.d.ts.__ivy_ngcc_bak +4 -0
  58. package/lib/pipes/data-type.pipe.d.ts.map +1 -0
  59. package/lib/pipes/list-mapper.pipe.d.ts.__ivy_ngcc_bak +4 -0
  60. package/lib/pipes/list-mapper.pipe.d.ts.map +1 -0
  61. package/lib/pipes/search.pipe.d.ts.__ivy_ngcc_bak +4 -0
  62. package/lib/pipes/search.pipe.d.ts.map +1 -0
  63. package/lib/pipes/space-breaker.pipe.d.ts.__ivy_ngcc_bak +4 -0
  64. package/lib/pipes/space-breaker.pipe.d.ts.map +1 -0
  65. package/lib/pipes/uncategorized-filter.pipe.d.ts.__ivy_ngcc_bak +4 -0
  66. package/lib/pipes/uncategorized-filter.pipe.d.ts.map +1 -0
  67. package/lib/pipes/user-filter.pipe.d.ts.__ivy_ngcc_bak +4 -0
  68. package/lib/pipes/user-filter.pipe.d.ts.map +1 -0
  69. package/lib/services/bulk-upload.service.d.ts.__ivy_ngcc_bak +6 -0
  70. package/lib/services/bulk-upload.service.d.ts.map +1 -0
  71. package/lib/sharedComponents/assessment-editor/components/add-logic/add-logic.component.d.ts.__ivy_ngcc_bak +117 -0
  72. package/lib/sharedComponents/assessment-editor/components/add-logic/add-logic.component.d.ts.map +1 -0
  73. package/lib/sharedComponents/assessment-editor/components/add-page-details/add-page-details.component.d.ts.__ivy_ngcc_bak +19 -0
  74. package/lib/sharedComponents/assessment-editor/components/add-page-details/add-page-details.component.d.ts.map +1 -0
  75. package/lib/sharedComponents/assessment-editor/components/add-response-set-popup/add-response-set-popup.component.d.ts.__ivy_ngcc_bak +10 -0
  76. package/lib/sharedComponents/assessment-editor/components/add-response-set-popup/add-response-set-popup.component.d.ts.map +1 -0
  77. package/lib/sharedComponents/assessment-editor/components/add-segment-popup/add-segment-popup.component.d.ts.__ivy_ngcc_bak +22 -0
  78. package/lib/sharedComponents/assessment-editor/components/add-segment-popup/add-segment-popup.component.d.ts.map +1 -0
  79. package/lib/sharedComponents/assessment-editor/components/assessment-settings/assessment-settings.component.d.ts.__ivy_ngcc_bak +46 -0
  80. package/lib/sharedComponents/assessment-editor/components/assessment-settings/assessment-settings.component.d.ts.map +1 -0
  81. package/lib/sharedComponents/assessment-editor/components/build/build.module.d.ts.__ivy_ngcc_bak +2 -0
  82. package/lib/sharedComponents/assessment-editor/components/build/build.module.d.ts.map +1 -0
  83. package/lib/sharedComponents/assessment-editor/components/build/checkbox/checkbox.component.d.ts.__ivy_ngcc_bak +11 -0
  84. package/lib/sharedComponents/assessment-editor/components/build/checkbox/checkbox.component.d.ts.map +1 -0
  85. package/lib/sharedComponents/assessment-editor/components/build/choice-settings-panel/choice-settings-panel.component.d.ts.__ivy_ngcc_bak +16 -0
  86. package/lib/sharedComponents/assessment-editor/components/build/choice-settings-panel/choice-settings-panel.component.d.ts.map +1 -0
  87. package/lib/sharedComponents/assessment-editor/components/build/date-time/date-time.component.d.ts.__ivy_ngcc_bak +6 -0
  88. package/lib/sharedComponents/assessment-editor/components/build/date-time/date-time.component.d.ts.map +1 -0
  89. package/lib/sharedComponents/assessment-editor/components/build/dropdown/dropdown.component.d.ts.__ivy_ngcc_bak +11 -0
  90. package/lib/sharedComponents/assessment-editor/components/build/dropdown/dropdown.component.d.ts.map +1 -0
  91. package/lib/sharedComponents/assessment-editor/components/build/image-choice/image-choice.component.d.ts.__ivy_ngcc_bak +5 -0
  92. package/lib/sharedComponents/assessment-editor/components/build/image-choice/image-choice.component.d.ts.map +1 -0
  93. package/lib/sharedComponents/assessment-editor/components/build/matrix-dropdown/matrix-dropdown.component.d.ts.__ivy_ngcc_bak +5 -0
  94. package/lib/sharedComponents/assessment-editor/components/build/matrix-dropdown/matrix-dropdown.component.d.ts.map +1 -0
  95. package/lib/sharedComponents/assessment-editor/components/build/matrix-rating-scale/matrix-rating-scale.component.d.ts.__ivy_ngcc_bak +5 -0
  96. package/lib/sharedComponents/assessment-editor/components/build/matrix-rating-scale/matrix-rating-scale.component.d.ts.map +1 -0
  97. package/lib/sharedComponents/assessment-editor/components/build/multiple-choice/multiple-choice.component.d.ts.__ivy_ngcc_bak +11 -0
  98. package/lib/sharedComponents/assessment-editor/components/build/multiple-choice/multiple-choice.component.d.ts.map +1 -0
  99. package/lib/sharedComponents/assessment-editor/components/build/multiple-textbox/multiple-textbox.component.d.ts.__ivy_ngcc_bak +5 -0
  100. package/lib/sharedComponents/assessment-editor/components/build/multiple-textbox/multiple-textbox.component.d.ts.map +1 -0
  101. package/lib/sharedComponents/assessment-editor/components/build/ranking/ranking.component.d.ts.__ivy_ngcc_bak +5 -0
  102. package/lib/sharedComponents/assessment-editor/components/build/ranking/ranking.component.d.ts.map +1 -0
  103. package/lib/sharedComponents/assessment-editor/components/build/slider/slider.component.d.ts.__ivy_ngcc_bak +5 -0
  104. package/lib/sharedComponents/assessment-editor/components/build/slider/slider.component.d.ts.map +1 -0
  105. package/lib/sharedComponents/assessment-editor/components/build/star-rating/star-rating.component.d.ts.__ivy_ngcc_bak +9 -0
  106. package/lib/sharedComponents/assessment-editor/components/build/star-rating/star-rating.component.d.ts.map +1 -0
  107. package/lib/sharedComponents/assessment-editor/components/build/thank-you/thank-you.component.d.ts.__ivy_ngcc_bak +5 -0
  108. package/lib/sharedComponents/assessment-editor/components/build/thank-you/thank-you.component.d.ts.map +1 -0
  109. package/lib/sharedComponents/assessment-editor/components/build/weightage-selector/weightage-selector.component.d.ts.__ivy_ngcc_bak +12 -0
  110. package/lib/sharedComponents/assessment-editor/components/build/weightage-selector/weightage-selector.component.d.ts.map +1 -0
  111. package/lib/sharedComponents/assessment-editor/components/build/welcome/welcome.component.d.ts.__ivy_ngcc_bak +5 -0
  112. package/lib/sharedComponents/assessment-editor/components/build/welcome/welcome.component.d.ts.map +1 -0
  113. package/lib/sharedComponents/assessment-editor/components/editor-wrapper/editor-wrapper.component.d.ts.__ivy_ngcc_bak +57 -0
  114. package/lib/sharedComponents/assessment-editor/components/editor-wrapper/editor-wrapper.component.d.ts.map +1 -0
  115. package/lib/sharedComponents/assessment-editor/components/logic/logic.component.d.ts.__ivy_ngcc_bak +24 -0
  116. package/lib/sharedComponents/assessment-editor/components/logic/logic.component.d.ts.map +1 -0
  117. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-checkbox/logic-checkbox.component.d.ts.__ivy_ngcc_bak +8 -0
  118. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-checkbox/logic-checkbox.component.d.ts.map +1 -0
  119. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-comment-box/logic-comment-box.component.d.ts.__ivy_ngcc_bak +5 -0
  120. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-comment-box/logic-comment-box.component.d.ts.map +1 -0
  121. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-date-time/logic-date-time.component.d.ts.__ivy_ngcc_bak +14 -0
  122. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-date-time/logic-date-time.component.d.ts.map +1 -0
  123. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-dropdown/logic-dropdown.component.d.ts.__ivy_ngcc_bak +9 -0
  124. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-dropdown/logic-dropdown.component.d.ts.map +1 -0
  125. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-image-choice/logic-image-choice.component.d.ts.__ivy_ngcc_bak +5 -0
  126. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-image-choice/logic-image-choice.component.d.ts.map +1 -0
  127. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-multiple-choice/logic-multiple-choice.component.d.ts.__ivy_ngcc_bak +8 -0
  128. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-multiple-choice/logic-multiple-choice.component.d.ts.map +1 -0
  129. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-multiple-textbox/logic-multiple-textbox.component.d.ts.__ivy_ngcc_bak +5 -0
  130. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-multiple-textbox/logic-multiple-textbox.component.d.ts.map +1 -0
  131. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-questions.module.d.ts.__ivy_ngcc_bak +2 -0
  132. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-questions.module.d.ts.map +1 -0
  133. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-ranking/logic-ranking.component.d.ts.__ivy_ngcc_bak +5 -0
  134. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-ranking/logic-ranking.component.d.ts.map +1 -0
  135. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-single-textbox/logic-single-textbox.component.d.ts.__ivy_ngcc_bak +9 -0
  136. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-single-textbox/logic-single-textbox.component.d.ts.map +1 -0
  137. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-slider/logic-slider.component.d.ts.__ivy_ngcc_bak +5 -0
  138. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-slider/logic-slider.component.d.ts.map +1 -0
  139. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-star-rating/logic-star-rating.component.d.ts.__ivy_ngcc_bak +5 -0
  140. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-star-rating/logic-star-rating.component.d.ts.map +1 -0
  141. package/lib/sharedComponents/assessment-editor/components/move/move.component.d.ts.__ivy_ngcc_bak +23 -0
  142. package/lib/sharedComponents/assessment-editor/components/move/move.component.d.ts.map +1 -0
  143. package/lib/sharedComponents/assessment-editor/components/page-header/page-header.component.d.ts.__ivy_ngcc_bak +8 -0
  144. package/lib/sharedComponents/assessment-editor/components/page-header/page-header.component.d.ts.map +1 -0
  145. package/lib/sharedComponents/assessment-editor/components/pipes/current-page-question.pipe.d.ts.__ivy_ngcc_bak +4 -0
  146. package/lib/sharedComponents/assessment-editor/components/pipes/current-page-question.pipe.d.ts.map +1 -0
  147. package/lib/sharedComponents/assessment-editor/components/pipes/error-message.pipe.d.ts.__ivy_ngcc_bak +4 -0
  148. package/lib/sharedComponents/assessment-editor/components/pipes/error-message.pipe.d.ts.map +1 -0
  149. package/lib/sharedComponents/assessment-editor/components/pipes/formatter.pipe.d.ts.__ivy_ngcc_bak +4 -0
  150. package/lib/sharedComponents/assessment-editor/components/pipes/formatter.pipe.d.ts.map +1 -0
  151. package/lib/sharedComponents/assessment-editor/components/pipes/question-filter.pipe.d.ts.__ivy_ngcc_bak +4 -0
  152. package/lib/sharedComponents/assessment-editor/components/pipes/question-filter.pipe.d.ts.map +1 -0
  153. package/lib/sharedComponents/assessment-editor/components/pipes/question-page-filter.pipe.d.ts.__ivy_ngcc_bak +4 -0
  154. package/lib/sharedComponents/assessment-editor/components/pipes/question-page-filter.pipe.d.ts.map +1 -0
  155. package/lib/sharedComponents/assessment-editor/components/pipes/question-parser.pipe.d.ts.__ivy_ngcc_bak +4 -0
  156. package/lib/sharedComponents/assessment-editor/components/pipes/question-parser.pipe.d.ts.map +1 -0
  157. package/lib/sharedComponents/assessment-editor/components/pipes/type-of.pipe.d.ts.__ivy_ngcc_bak +4 -0
  158. package/lib/sharedComponents/assessment-editor/components/pipes/type-of.pipe.d.ts.map +1 -0
  159. package/lib/sharedComponents/assessment-editor/components/preview/preview-checkbox/preview-checkbox.component.d.ts.__ivy_ngcc_bak +8 -0
  160. package/lib/sharedComponents/assessment-editor/components/preview/preview-checkbox/preview-checkbox.component.d.ts.map +1 -0
  161. package/lib/sharedComponents/assessment-editor/components/preview/preview-comment-box/preview-comment-box.component.d.ts.__ivy_ngcc_bak +5 -0
  162. package/lib/sharedComponents/assessment-editor/components/preview/preview-comment-box/preview-comment-box.component.d.ts.map +1 -0
  163. package/lib/sharedComponents/assessment-editor/components/preview/preview-date-time/preview-date-time.component.d.ts.__ivy_ngcc_bak +11 -0
  164. package/lib/sharedComponents/assessment-editor/components/preview/preview-date-time/preview-date-time.component.d.ts.map +1 -0
  165. package/lib/sharedComponents/assessment-editor/components/preview/preview-dropdown/preview-dropdown.component.d.ts.__ivy_ngcc_bak +8 -0
  166. package/lib/sharedComponents/assessment-editor/components/preview/preview-dropdown/preview-dropdown.component.d.ts.map +1 -0
  167. package/lib/sharedComponents/assessment-editor/components/preview/preview-file-upload/preview-file-upload.component.d.ts.__ivy_ngcc_bak +8 -0
  168. package/lib/sharedComponents/assessment-editor/components/preview/preview-file-upload/preview-file-upload.component.d.ts.map +1 -0
  169. package/lib/sharedComponents/assessment-editor/components/preview/preview-image-choice/preview-image-choice.component.d.ts.__ivy_ngcc_bak +5 -0
  170. package/lib/sharedComponents/assessment-editor/components/preview/preview-image-choice/preview-image-choice.component.d.ts.map +1 -0
  171. package/lib/sharedComponents/assessment-editor/components/preview/preview-matrix-dropdown/preview-matrix-dropdown.component.d.ts.__ivy_ngcc_bak +7 -0
  172. package/lib/sharedComponents/assessment-editor/components/preview/preview-matrix-dropdown/preview-matrix-dropdown.component.d.ts.map +1 -0
  173. package/lib/sharedComponents/assessment-editor/components/preview/preview-matrix-rating-scale/preview-matrix-rating-scale.component.d.ts.__ivy_ngcc_bak +7 -0
  174. package/lib/sharedComponents/assessment-editor/components/preview/preview-matrix-rating-scale/preview-matrix-rating-scale.component.d.ts.map +1 -0
  175. package/lib/sharedComponents/assessment-editor/components/preview/preview-multiple-choice/preview-multiple-choice.component.d.ts.__ivy_ngcc_bak +8 -0
  176. package/lib/sharedComponents/assessment-editor/components/preview/preview-multiple-choice/preview-multiple-choice.component.d.ts.map +1 -0
  177. package/lib/sharedComponents/assessment-editor/components/preview/preview-multiple-textbox/preview-multiple-textbox.component.d.ts.__ivy_ngcc_bak +5 -0
  178. package/lib/sharedComponents/assessment-editor/components/preview/preview-multiple-textbox/preview-multiple-textbox.component.d.ts.map +1 -0
  179. package/lib/sharedComponents/assessment-editor/components/preview/preview-ranking/preview-ranking.component.d.ts.__ivy_ngcc_bak +5 -0
  180. package/lib/sharedComponents/assessment-editor/components/preview/preview-ranking/preview-ranking.component.d.ts.map +1 -0
  181. package/lib/sharedComponents/assessment-editor/components/preview/preview-single-textbox/preview-single-textbox.component.d.ts.__ivy_ngcc_bak +6 -0
  182. package/lib/sharedComponents/assessment-editor/components/preview/preview-single-textbox/preview-single-textbox.component.d.ts.map +1 -0
  183. package/lib/sharedComponents/assessment-editor/components/preview/preview-slider/preview-slider.component.d.ts.__ivy_ngcc_bak +5 -0
  184. package/lib/sharedComponents/assessment-editor/components/preview/preview-slider/preview-slider.component.d.ts.map +1 -0
  185. package/lib/sharedComponents/assessment-editor/components/preview/preview-star-rating/preview-star-rating.component.d.ts.__ivy_ngcc_bak +5 -0
  186. package/lib/sharedComponents/assessment-editor/components/preview/preview-star-rating/preview-star-rating.component.d.ts.map +1 -0
  187. package/lib/sharedComponents/assessment-editor/components/preview/preview-wrapper/preview-wrapper.component.d.ts.__ivy_ngcc_bak +27 -0
  188. package/lib/sharedComponents/assessment-editor/components/preview/preview-wrapper/preview-wrapper.component.d.ts.map +1 -0
  189. package/lib/sharedComponents/assessment-editor/components/preview/preview.module.d.ts.__ivy_ngcc_bak +2 -0
  190. package/lib/sharedComponents/assessment-editor/components/preview/preview.module.d.ts.map +1 -0
  191. package/lib/sharedComponents/assessment-editor/components/preview/thank-you/thank-you.component.d.ts.__ivy_ngcc_bak +5 -0
  192. package/lib/sharedComponents/assessment-editor/components/preview/thank-you/thank-you.component.d.ts.map +1 -0
  193. package/lib/sharedComponents/assessment-editor/components/preview/welcome/welcome.component.d.ts.__ivy_ngcc_bak +5 -0
  194. package/lib/sharedComponents/assessment-editor/components/preview/welcome/welcome.component.d.ts.map +1 -0
  195. package/lib/sharedComponents/assessment-editor/components/question-type/question-type.component.d.ts.__ivy_ngcc_bak +6 -0
  196. package/lib/sharedComponents/assessment-editor/components/question-type/question-type.component.d.ts.map +1 -0
  197. package/lib/sharedComponents/assessment-editor/components/quick-settings/quick-settings.component.d.ts.__ivy_ngcc_bak +28 -0
  198. package/lib/sharedComponents/assessment-editor/components/quick-settings/quick-settings.component.d.ts.map +1 -0
  199. package/lib/sharedComponents/assessment-editor/components/response-selector/response-selector.component.d.ts.__ivy_ngcc_bak +11 -0
  200. package/lib/sharedComponents/assessment-editor/components/response-selector/response-selector.component.d.ts.map +1 -0
  201. package/lib/sharedComponents/assessment-editor/components/setting-anonymous/setting-anonymous.component.d.ts.__ivy_ngcc_bak +16 -0
  202. package/lib/sharedComponents/assessment-editor/components/setting-anonymous/setting-anonymous.component.d.ts.map +1 -0
  203. package/lib/sharedComponents/assessment-editor/components/setting-response-segment/setting-response-segment.component.d.ts.__ivy_ngcc_bak +47 -0
  204. package/lib/sharedComponents/assessment-editor/components/setting-response-segment/setting-response-segment.component.d.ts.map +1 -0
  205. package/lib/sharedComponents/assessment-editor/components/single-line-editor/single-line-editor.component.d.ts.__ivy_ngcc_bak +35 -0
  206. package/lib/sharedComponents/assessment-editor/components/single-line-editor/single-line-editor.component.d.ts.map +1 -0
  207. package/lib/sharedComponents/assessment-editor/components/toolkit/toolkit.component.d.ts.__ivy_ngcc_bak +8 -0
  208. package/lib/sharedComponents/assessment-editor/components/toolkit/toolkit.component.d.ts.map +1 -0
  209. package/lib/sharedComponents/assessment-editor/components/welcome-thankyou/welcome-thankyou.component.d.ts.__ivy_ngcc_bak +15 -0
  210. package/lib/sharedComponents/assessment-editor/components/welcome-thankyou/welcome-thankyou.component.d.ts.map +1 -0
  211. package/lib/sharedComponents/assessment-editor/create-assessment-container/create-assessment-container.component.d.ts.__ivy_ngcc_bak +66 -0
  212. package/lib/sharedComponents/assessment-editor/create-assessment-container/create-assessment-container.component.d.ts.map +1 -0
  213. package/lib/sharedComponents/assessment-editor/create-assessment.module.d.ts.__ivy_ngcc_bak +2 -0
  214. package/lib/sharedComponents/assessment-editor/create-assessment.module.d.ts.map +1 -0
  215. package/lib/sharedComponents/assessment-editor/services/editor.service.d.ts.__ivy_ngcc_bak +185 -0
  216. package/lib/sharedComponents/assessment-editor/services/editor.service.d.ts.map +1 -0
  217. package/lib/sharedComponents/assessment-editor/services/result-criteria.service.d.ts.__ivy_ngcc_bak +4 -0
  218. package/lib/sharedComponents/assessment-editor/services/result-criteria.service.d.ts.map +1 -0
  219. package/lib/sharedComponents/assessment-editor/services/validator.service.d.ts.__ivy_ngcc_bak +32 -0
  220. package/lib/sharedComponents/assessment-editor/services/validator.service.d.ts.map +1 -0
  221. package/lib/sharedComponents/assessment-list/assessment-list-loader/assessment-list-loader.component.d.ts.__ivy_ngcc_bak +5 -0
  222. package/lib/sharedComponents/assessment-list/assessment-list-loader/assessment-list-loader.component.d.ts.map +1 -0
  223. package/lib/sharedComponents/assessment-list/assessment-list-sub-loader/assessment-list-sub-loader.component.d.ts.__ivy_ngcc_bak +5 -0
  224. package/lib/sharedComponents/assessment-list/assessment-list-sub-loader/assessment-list-sub-loader.component.d.ts.map +1 -0
  225. package/lib/sharedComponents/assessment-list/assessment-list.component.d.ts.__ivy_ngcc_bak +81 -0
  226. package/lib/sharedComponents/assessment-list/assessment-list.component.d.ts.map +1 -0
  227. package/lib/sharedComponents/assessment-list/service/assessment.service.d.ts.__ivy_ngcc_bak +10 -0
  228. package/lib/sharedComponents/assessment-list/service/assessment.service.d.ts.map +1 -0
  229. package/lib/sharedComponents/assessment-preview/assessment-preview.module.d.ts.__ivy_ngcc_bak +2 -0
  230. package/lib/sharedComponents/assessment-preview/assessment-preview.module.d.ts.map +1 -0
  231. package/lib/sharedComponents/assessment-preview/checkbox-question/checkbox-question.component.d.ts.__ivy_ngcc_bak +9 -0
  232. package/lib/sharedComponents/assessment-preview/checkbox-question/checkbox-question.component.d.ts.map +1 -0
  233. package/lib/sharedComponents/assessment-preview/date-time/date-time.component.d.ts.__ivy_ngcc_bak +12 -0
  234. package/lib/sharedComponents/assessment-preview/date-time/date-time.component.d.ts.map +1 -0
  235. package/lib/sharedComponents/assessment-preview/device/device.component.d.ts.__ivy_ngcc_bak +7 -0
  236. package/lib/sharedComponents/assessment-preview/device/device.component.d.ts.map +1 -0
  237. package/lib/sharedComponents/assessment-preview/file-upload/file-upload.component.d.ts.__ivy_ngcc_bak +7 -0
  238. package/lib/sharedComponents/assessment-preview/file-upload/file-upload.component.d.ts.map +1 -0
  239. package/lib/sharedComponents/assessment-preview/page-header/page-header.component.d.ts.__ivy_ngcc_bak +7 -0
  240. package/lib/sharedComponents/assessment-preview/page-header/page-header.component.d.ts.map +1 -0
  241. package/lib/sharedComponents/assessment-preview/preview/preview.component.d.ts.__ivy_ngcc_bak +11 -0
  242. package/lib/sharedComponents/assessment-preview/preview/preview.component.d.ts.map +1 -0
  243. package/lib/sharedComponents/assessment-preview/preview-container/preview-container.component.d.ts.__ivy_ngcc_bak +5 -0
  244. package/lib/sharedComponents/assessment-preview/preview-container/preview-container.component.d.ts.map +1 -0
  245. package/lib/sharedComponents/assessment-preview/quick-settings/quick-settings.component.d.ts.__ivy_ngcc_bak +6 -0
  246. package/lib/sharedComponents/assessment-preview/quick-settings/quick-settings.component.d.ts.map +1 -0
  247. package/lib/sharedComponents/assessment-preview/radio-question/radio-question.component.d.ts.__ivy_ngcc_bak +9 -0
  248. package/lib/sharedComponents/assessment-preview/radio-question/radio-question.component.d.ts.map +1 -0
  249. package/lib/sharedComponents/assessment-preview/select-question/select-question.component.d.ts.__ivy_ngcc_bak +9 -0
  250. package/lib/sharedComponents/assessment-preview/select-question/select-question.component.d.ts.map +1 -0
  251. package/lib/sharedComponents/assessment-preview/single-textbox/single-textbox.component.d.ts.__ivy_ngcc_bak +7 -0
  252. package/lib/sharedComponents/assessment-preview/single-textbox/single-textbox.component.d.ts.map +1 -0
  253. package/lib/sharedComponents/assessment-preview/welcome/welcome.component.d.ts.__ivy_ngcc_bak +6 -0
  254. package/lib/sharedComponents/assessment-preview/welcome/welcome.component.d.ts.map +1 -0
  255. package/lib/sharedComponents/audit-category-list/audit-category-list.component.d.ts.__ivy_ngcc_bak +19 -0
  256. package/lib/sharedComponents/audit-category-list/audit-category-list.component.d.ts.map +1 -0
  257. package/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.d.ts.__ivy_ngcc_bak +20 -0
  258. package/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.d.ts.map +1 -0
  259. package/lib/sharedComponents/bulk-view/bulk-view.component.d.ts.__ivy_ngcc_bak +17 -0
  260. package/lib/sharedComponents/bulk-view/bulk-view.component.d.ts.map +1 -0
  261. package/lib/sharedComponents/category-list/category-list.component.d.ts.__ivy_ngcc_bak +19 -0
  262. package/lib/sharedComponents/category-list/category-list.component.d.ts.map +1 -0
  263. package/lib/sharedComponents/category-multiselect/category-multi-select.component.d.ts.__ivy_ngcc_bak +28 -0
  264. package/lib/sharedComponents/category-multiselect/category-multi-select.component.d.ts.map +1 -0
  265. package/lib/sharedComponents/checkbox-list/checkbox-list.component.d.ts.__ivy_ngcc_bak +22 -0
  266. package/lib/sharedComponents/checkbox-list/checkbox-list.component.d.ts.map +1 -0
  267. package/lib/sharedComponents/checkpoint/checkpoints/checkpoints.component.d.ts.__ivy_ngcc_bak +35 -0
  268. package/lib/sharedComponents/checkpoint/checkpoints/checkpoints.component.d.ts.map +1 -0
  269. package/lib/sharedComponents/checkpoint/checkpoints-list/checkpoints-list.component.d.ts.__ivy_ngcc_bak +8 -0
  270. package/lib/sharedComponents/checkpoint/checkpoints-list/checkpoints-list.component.d.ts.map +1 -0
  271. package/lib/sharedComponents/checkpoint/checkpoints-questions/checkpoints-questions.component.d.ts.__ivy_ngcc_bak +38 -0
  272. package/lib/sharedComponents/checkpoint/checkpoints-questions/checkpoints-questions.component.d.ts.map +1 -0
  273. package/lib/sharedComponents/checkpoint-floating-bar/checkpoint-floating-bar.component.d.ts.__ivy_ngcc_bak +15 -0
  274. package/lib/sharedComponents/checkpoint-floating-bar/checkpoint-floating-bar.component.d.ts.map +1 -0
  275. package/lib/sharedComponents/checkpoint-policy/checkpoints-policy-container/checkpoints-policy-container.component.d.ts.__ivy_ngcc_bak +16 -0
  276. package/lib/sharedComponents/checkpoint-policy/checkpoints-policy-container/checkpoints-policy-container.component.d.ts.map +1 -0
  277. package/lib/sharedComponents/checkpoint-policy/checkpoints-policy-list/checkpoints-policy-list.component.d.ts.__ivy_ngcc_bak +5 -0
  278. package/lib/sharedComponents/checkpoint-policy/checkpoints-policy-list/checkpoints-policy-list.component.d.ts.map +1 -0
  279. package/lib/sharedComponents/checkpoint-policy/checkpoints-policy-questions/checkpoints-policy-questions.component.d.ts.__ivy_ngcc_bak +33 -0
  280. package/lib/sharedComponents/checkpoint-policy/checkpoints-policy-questions/checkpoints-policy-questions.component.d.ts.map +1 -0
  281. package/lib/sharedComponents/directive/autofocus.directive.d.ts.__ivy_ngcc_bak +6 -0
  282. package/lib/sharedComponents/directive/autofocus.directive.d.ts.map +1 -0
  283. package/lib/sharedComponents/directive/conditional-focus.directive.d.ts.__ivy_ngcc_bak +9 -0
  284. package/lib/sharedComponents/directive/conditional-focus.directive.d.ts.map +1 -0
  285. package/lib/sharedComponents/directive/drag-drop.directive.d.ts.__ivy_ngcc_bak +8 -0
  286. package/lib/sharedComponents/directive/drag-drop.directive.d.ts.map +1 -0
  287. package/lib/sharedComponents/directive/input-trim.directive.d.ts.__ivy_ngcc_bak +3 -0
  288. package/lib/sharedComponents/directive/input-trim.directive.d.ts.map +1 -0
  289. package/lib/sharedComponents/directive/scroll-in-view.directive.d.ts.__ivy_ngcc_bak +9 -0
  290. package/lib/sharedComponents/directive/scroll-in-view.directive.d.ts.map +1 -0
  291. package/lib/sharedComponents/document-section/document-section.component.d.ts.__ivy_ngcc_bak +43 -0
  292. package/lib/sharedComponents/document-section/document-section.component.d.ts.map +1 -0
  293. package/lib/sharedComponents/floating-bar/floating-bar.component.d.ts.__ivy_ngcc_bak +38 -0
  294. package/lib/sharedComponents/floating-bar/floating-bar.component.d.ts.map +1 -0
  295. package/lib/sharedComponents/format-and-evidence/format-and-evidence.component.d.ts.__ivy_ngcc_bak +41 -0
  296. package/lib/sharedComponents/format-and-evidence/format-and-evidence.component.d.ts.map +1 -0
  297. package/lib/sharedComponents/framework-list/framework-list-table/framework-list-table.component.d.ts.__ivy_ngcc_bak +13 -0
  298. package/lib/sharedComponents/framework-list/framework-list-table/framework-list-table.component.d.ts.map +1 -0
  299. package/lib/sharedComponents/framework-list/framework-list.component.d.ts.__ivy_ngcc_bak +108 -0
  300. package/lib/sharedComponents/framework-list/framework-list.component.d.ts.map +1 -0
  301. package/lib/sharedComponents/framework-list/framework-responsibility-table/framework-responsibility-table.component.d.ts.__ivy_ngcc_bak +14 -0
  302. package/lib/sharedComponents/framework-list/framework-responsibility-table/framework-responsibility-table.component.d.ts.map +1 -0
  303. package/lib/sharedComponents/framework-list/framework-table-loader/framework-table-loader.component.d.ts.__ivy_ngcc_bak +5 -0
  304. package/lib/sharedComponents/framework-list/framework-table-loader/framework-table-loader.component.d.ts.map +1 -0
  305. package/lib/sharedComponents/framework-list/parent-table/parent-table.component.d.ts.__ivy_ngcc_bak +26 -0
  306. package/lib/sharedComponents/framework-list/parent-table/parent-table.component.d.ts.map +1 -0
  307. package/lib/sharedComponents/frequency/frequency-annual/frequency-annual.component.d.ts.__ivy_ngcc_bak +37 -0
  308. package/lib/sharedComponents/frequency/frequency-annual/frequency-annual.component.d.ts.map +1 -0
  309. package/lib/sharedComponents/frequency/frequency-biannual/frequency-biannual.component.d.ts.__ivy_ngcc_bak +35 -0
  310. package/lib/sharedComponents/frequency/frequency-biannual/frequency-biannual.component.d.ts.map +1 -0
  311. package/lib/sharedComponents/frequency/frequency-checkbox-list/frequency-checkbox-list.component.d.ts.__ivy_ngcc_bak +11 -0
  312. package/lib/sharedComponents/frequency/frequency-checkbox-list/frequency-checkbox-list.component.d.ts.map +1 -0
  313. package/lib/sharedComponents/frequency/frequency-container/frequency-container.component.d.ts.__ivy_ngcc_bak +33 -0
  314. package/lib/sharedComponents/frequency/frequency-container/frequency-container.component.d.ts.map +1 -0
  315. package/lib/sharedComponents/frequency/frequency-daily/frequency-daily.component.d.ts.__ivy_ngcc_bak +30 -0
  316. package/lib/sharedComponents/frequency/frequency-daily/frequency-daily.component.d.ts.map +1 -0
  317. package/lib/sharedComponents/frequency/frequency-due-date/frequency-due-date.component.d.ts.__ivy_ngcc_bak +19 -0
  318. package/lib/sharedComponents/frequency/frequency-due-date/frequency-due-date.component.d.ts.map +1 -0
  319. package/lib/sharedComponents/frequency/frequency-lifecycle/frequency-lifecycle.component.d.ts.__ivy_ngcc_bak +37 -0
  320. package/lib/sharedComponents/frequency/frequency-lifecycle/frequency-lifecycle.component.d.ts.map +1 -0
  321. package/lib/sharedComponents/frequency/frequency-monthly/frequency-monthly.component.d.ts.__ivy_ngcc_bak +33 -0
  322. package/lib/sharedComponents/frequency/frequency-monthly/frequency-monthly.component.d.ts.map +1 -0
  323. package/lib/sharedComponents/frequency/frequency-on-completion-of/frequency-on-completion-of.component.d.ts.__ivy_ngcc_bak +37 -0
  324. package/lib/sharedComponents/frequency/frequency-on-completion-of/frequency-on-completion-of.component.d.ts.map +1 -0
  325. package/lib/sharedComponents/frequency/frequency-one-time/frequency-one-time.component.d.ts.__ivy_ngcc_bak +32 -0
  326. package/lib/sharedComponents/frequency/frequency-one-time/frequency-one-time.component.d.ts.map +1 -0
  327. package/lib/sharedComponents/frequency/frequency-ongoing/frequency-ongoing.component.d.ts.__ivy_ngcc_bak +19 -0
  328. package/lib/sharedComponents/frequency/frequency-ongoing/frequency-ongoing.component.d.ts.map +1 -0
  329. package/lib/sharedComponents/frequency/frequency-quarterly/frequency-quarterly.component.d.ts.__ivy_ngcc_bak +32 -0
  330. package/lib/sharedComponents/frequency/frequency-quarterly/frequency-quarterly.component.d.ts.map +1 -0
  331. package/lib/sharedComponents/frequency/frequency-radio-list/frequency-radio-list.component.d.ts.__ivy_ngcc_bak +11 -0
  332. package/lib/sharedComponents/frequency/frequency-radio-list/frequency-radio-list.component.d.ts.map +1 -0
  333. package/lib/sharedComponents/frequency/frequency-random/frequency-random.component.d.ts.__ivy_ngcc_bak +59 -0
  334. package/lib/sharedComponents/frequency/frequency-random/frequency-random.component.d.ts.map +1 -0
  335. package/lib/sharedComponents/frequency/frequency-responsibility-list/frequency-responsibility-list.component.d.ts.__ivy_ngcc_bak +60 -0
  336. package/lib/sharedComponents/frequency/frequency-responsibility-list/frequency-responsibility-list.component.d.ts.map +1 -0
  337. package/lib/sharedComponents/frequency/frequency-top/frequency-top.component.d.ts.__ivy_ngcc_bak +23 -0
  338. package/lib/sharedComponents/frequency/frequency-top/frequency-top.component.d.ts.map +1 -0
  339. package/lib/sharedComponents/frequency/frequency-weekly/frequency-weekly.component.d.ts.__ivy_ngcc_bak +32 -0
  340. package/lib/sharedComponents/frequency/frequency-weekly/frequency-weekly.component.d.ts.map +1 -0
  341. package/lib/sharedComponents/frequency/frequency.service.d.ts.__ivy_ngcc_bak +48 -0
  342. package/lib/sharedComponents/frequency/frequency.service.d.ts.map +1 -0
  343. package/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.d.ts.__ivy_ngcc_bak +37 -0
  344. package/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.d.ts.map +1 -0
  345. package/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.d.ts.__ivy_ngcc_bak +35 -0
  346. package/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.d.ts.map +1 -0
  347. package/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.d.ts.__ivy_ngcc_bak +9 -0
  348. package/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.d.ts.map +1 -0
  349. package/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.d.ts.__ivy_ngcc_bak +31 -0
  350. package/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.d.ts.map +1 -0
  351. package/lib/sharedComponents/frequency-dialog/frequency-dialog-due-date/frequency-dialog-due-date.component.d.ts.__ivy_ngcc_bak +16 -0
  352. package/lib/sharedComponents/frequency-dialog/frequency-dialog-due-date/frequency-dialog-due-date.component.d.ts.map +1 -0
  353. package/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.d.ts.__ivy_ngcc_bak +33 -0
  354. package/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.d.ts.map +1 -0
  355. package/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.d.ts.__ivy_ngcc_bak +32 -0
  356. package/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.d.ts.map +1 -0
  357. package/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.d.ts.__ivy_ngcc_bak +32 -0
  358. package/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.d.ts.map +1 -0
  359. package/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.d.ts.__ivy_ngcc_bak +10 -0
  360. package/lib/sharedComponents/frequency-dialog/frequency-dialog-radio-list/frequency-dialog-radio-list.component.d.ts.map +1 -0
  361. package/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.d.ts.__ivy_ngcc_bak +22 -0
  362. package/lib/sharedComponents/frequency-dialog/frequency-dialog-top/frequency-dialog-top.component.d.ts.map +1 -0
  363. package/lib/sharedComponents/frequency-dialog/frequency-dialog-weekly/frequency-dialog-weekly.component.d.ts.__ivy_ngcc_bak +30 -0
  364. package/lib/sharedComponents/frequency-dialog/frequency-dialog-weekly/frequency-dialog-weekly.component.d.ts.map +1 -0
  365. package/lib/sharedComponents/group-users-list/group-users-list.component.d.ts.__ivy_ngcc_bak +47 -0
  366. package/lib/sharedComponents/group-users-list/group-users-list.component.d.ts.map +1 -0
  367. package/lib/sharedComponents/list-loader/list-loader.component.d.ts.__ivy_ngcc_bak +5 -0
  368. package/lib/sharedComponents/list-loader/list-loader.component.d.ts.map +1 -0
  369. package/lib/sharedComponents/no-data/no-data.component.d.ts.__ivy_ngcc_bak +14 -0
  370. package/lib/sharedComponents/no-data/no-data.component.d.ts.map +1 -0
  371. package/lib/sharedComponents/no-data/no-data.module.d.ts.__ivy_ngcc_bak +2 -0
  372. package/lib/sharedComponents/no-data/no-data.module.d.ts.map +1 -0
  373. package/lib/sharedComponents/owner-list/owner-list.component.d.ts.__ivy_ngcc_bak +42 -0
  374. package/lib/sharedComponents/owner-list/owner-list.component.d.ts.map +1 -0
  375. package/lib/sharedComponents/pipes/array-filter.pipe.d.ts.__ivy_ngcc_bak +4 -0
  376. package/lib/sharedComponents/pipes/array-filter.pipe.d.ts.map +1 -0
  377. package/lib/sharedComponents/pipes/filterPipe.d.ts.__ivy_ngcc_bak +4 -0
  378. package/lib/sharedComponents/pipes/filterPipe.d.ts.map +1 -0
  379. package/lib/sharedComponents/pipes/short-merge.pipe.d.ts.__ivy_ngcc_bak +4 -0
  380. package/lib/sharedComponents/pipes/short-merge.pipe.d.ts.map +1 -0
  381. package/lib/sharedComponents/pipes/spaceTrim.pipe.d.ts.__ivy_ngcc_bak +4 -0
  382. package/lib/sharedComponents/pipes/spaceTrim.pipe.d.ts.map +1 -0
  383. package/lib/sharedComponents/pipes/within-data.pipe.d.ts.__ivy_ngcc_bak +4 -0
  384. package/lib/sharedComponents/pipes/within-data.pipe.d.ts.map +1 -0
  385. package/lib/sharedComponents/program-listing/program-listing.component.d.ts.__ivy_ngcc_bak +119 -0
  386. package/lib/sharedComponents/program-listing/program-listing.component.d.ts.map +1 -0
  387. package/lib/sharedComponents/radio-list/radio-list.component.d.ts.__ivy_ngcc_bak +24 -0
  388. package/lib/sharedComponents/radio-list/radio-list.component.d.ts.map +1 -0
  389. package/lib/sharedComponents/radio-list-with-pagination/link-treatment-loader/link-treatment-loader.component.d.ts.__ivy_ngcc_bak +5 -0
  390. package/lib/sharedComponents/radio-list-with-pagination/link-treatment-loader/link-treatment-loader.component.d.ts.map +1 -0
  391. package/lib/sharedComponents/radio-list-with-pagination/radio-list.component.d.ts.__ivy_ngcc_bak +47 -0
  392. package/lib/sharedComponents/radio-list-with-pagination/radio-list.component.d.ts.map +1 -0
  393. package/lib/sharedComponents/responsibility-centers-list/responsibility-centers-list.component.d.ts.__ivy_ngcc_bak +26 -0
  394. package/lib/sharedComponents/responsibility-centers-list/responsibility-centers-list.component.d.ts.map +1 -0
  395. package/lib/sharedComponents/responsibility-risk-selector/responsibility-risk-selector.component.d.ts.__ivy_ngcc_bak +23 -0
  396. package/lib/sharedComponents/responsibility-risk-selector/responsibility-risk-selector.component.d.ts.map +1 -0
  397. package/lib/sharedComponents/review-frequency/review-frequency.component.d.ts.__ivy_ngcc_bak +15 -0
  398. package/lib/sharedComponents/review-frequency/review-frequency.component.d.ts.map +1 -0
  399. package/lib/sharedComponents/risk-classification/risk-classification.component.d.ts.__ivy_ngcc_bak +35 -0
  400. package/lib/sharedComponents/risk-classification/risk-classification.component.d.ts.map +1 -0
  401. package/lib/sharedComponents/roles-list/roles-list.component.d.ts.__ivy_ngcc_bak +8 -0
  402. package/lib/sharedComponents/roles-list/roles-list.component.d.ts.map +1 -0
  403. package/lib/sharedComponents/users-radio-list/users-radio-list.component.d.ts.__ivy_ngcc_bak +26 -0
  404. package/lib/sharedComponents/users-radio-list/users-radio-list.component.d.ts.map +1 -0
  405. package/lib/sharedComponents/v-loader/loader/loader.component.d.ts.__ivy_ngcc_bak +5 -0
  406. package/lib/sharedComponents/v-loader/loader/loader.component.d.ts.map +1 -0
  407. package/lib/sharedComponents/v-loader/loader-inline/loader-inline.component.d.ts.__ivy_ngcc_bak +5 -0
  408. package/lib/sharedComponents/v-loader/loader-inline/loader-inline.component.d.ts.map +1 -0
  409. package/lib/sharedComponents/v-loader/v-loader.module.d.ts.__ivy_ngcc_bak +2 -0
  410. package/lib/sharedComponents/v-loader/v-loader.module.d.ts.map +1 -0
  411. package/lib/ui-kit/action-dialog/action-dialog.module.d.ts.__ivy_ngcc_bak +2 -0
  412. package/lib/ui-kit/action-dialog/action-dialog.module.d.ts.map +1 -0
  413. package/lib/ui-kit/action-dialog/active/active.component.d.ts.__ivy_ngcc_bak +12 -0
  414. package/lib/ui-kit/action-dialog/active/active.component.d.ts.map +1 -0
  415. package/lib/ui-kit/action-dialog/deactivate/deactivate.component.d.ts.__ivy_ngcc_bak +12 -0
  416. package/lib/ui-kit/action-dialog/deactivate/deactivate.component.d.ts.map +1 -0
  417. package/lib/ui-kit/action-dialog/delete/delete.component.d.ts.__ivy_ngcc_bak +11 -0
  418. package/lib/ui-kit/action-dialog/delete/delete.component.d.ts.map +1 -0
  419. package/lib/ui-kit/action-dialog/duplicate/duplicate.component.d.ts.__ivy_ngcc_bak +12 -0
  420. package/lib/ui-kit/action-dialog/duplicate/duplicate.component.d.ts.map +1 -0
  421. package/lib/ui-kit/click-outside/click-outside.directive.d.ts.__ivy_ngcc_bak +7 -0
  422. package/lib/ui-kit/click-outside/click-outside.directive.d.ts.map +1 -0
  423. package/lib/ui-kit/click-outside/click-outside.module.d.ts.__ivy_ngcc_bak +2 -0
  424. package/lib/ui-kit/click-outside/click-outside.module.d.ts.map +1 -0
  425. package/lib/ui-kit/dialog/dialog-ref.d.ts.__ivy_ngcc_bak +7 -0
  426. package/lib/ui-kit/dialog/dialog-ref.d.ts.map +1 -0
  427. package/lib/ui-kit/dialog/dialog.component.d.ts.__ivy_ngcc_bak +29 -0
  428. package/lib/ui-kit/dialog/dialog.component.d.ts.map +1 -0
  429. package/lib/ui-kit/dialog/dialog.module.d.ts.__ivy_ngcc_bak +2 -0
  430. package/lib/ui-kit/dialog/dialog.module.d.ts.map +1 -0
  431. package/lib/ui-kit/dialog/dialog.service.d.ts.__ivy_ngcc_bak +15 -0
  432. package/lib/ui-kit/dialog/dialog.service.d.ts.map +1 -0
  433. package/lib/ui-kit/dialog/insertion.directive.d.ts.__ivy_ngcc_bak +5 -0
  434. package/lib/ui-kit/dialog/insertion.directive.d.ts.map +1 -0
  435. package/lib/ui-kit/editor-loader/editor-loader/editor-loader.component.d.ts.__ivy_ngcc_bak +5 -0
  436. package/lib/ui-kit/editor-loader/editor-loader/editor-loader.component.d.ts.map +1 -0
  437. package/lib/ui-kit/editor-loader/editor-loader.module.d.ts.__ivy_ngcc_bak +2 -0
  438. package/lib/ui-kit/editor-loader/editor-loader.module.d.ts.map +1 -0
  439. package/lib/ui-kit/format-html.pipe.d.ts.__ivy_ngcc_bak +7 -0
  440. package/lib/ui-kit/format-html.pipe.d.ts.map +1 -0
  441. package/lib/ui-kit/formgroup/click-outside.directive.d.ts.__ivy_ngcc_bak +7 -0
  442. package/lib/ui-kit/formgroup/click-outside.directive.d.ts.map +1 -0
  443. package/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.d.ts.__ivy_ngcc_bak +11 -0
  444. package/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.d.ts.map +1 -0
  445. package/lib/ui-kit/formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component.d.ts.__ivy_ngcc_bak +11 -0
  446. package/lib/ui-kit/formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component.d.ts.map +1 -0
  447. package/lib/ui-kit/formgroup/cs-radio/cs-radio.component.d.ts.__ivy_ngcc_bak +12 -0
  448. package/lib/ui-kit/formgroup/cs-radio/cs-radio.component.d.ts.map +1 -0
  449. package/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.d.ts.__ivy_ngcc_bak +5 -0
  450. package/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.d.ts.map +1 -0
  451. package/lib/ui-kit/formgroup/cs-select/cs-select.component.d.ts.__ivy_ngcc_bak +33 -0
  452. package/lib/ui-kit/formgroup/cs-select/cs-select.component.d.ts.map +1 -0
  453. package/lib/ui-kit/formgroup/cs-switch/cs-switch.component.d.ts.__ivy_ngcc_bak +12 -0
  454. package/lib/ui-kit/formgroup/cs-switch/cs-switch.component.d.ts.map +1 -0
  455. package/lib/ui-kit/formgroup/formgroup.module.d.ts.__ivy_ngcc_bak +2 -0
  456. package/lib/ui-kit/formgroup/formgroup.module.d.ts.map +1 -0
  457. package/lib/ui-kit/formgroup/pipes/pascal.pipe.d.ts.__ivy_ngcc_bak +4 -0
  458. package/lib/ui-kit/formgroup/pipes/pascal.pipe.d.ts.map +1 -0
  459. package/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.d.ts.__ivy_ngcc_bak +4 -0
  460. package/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.d.ts.map +1 -0
  461. package/lib/ui-kit/line-loader/line-loader.component.d.ts.__ivy_ngcc_bak +6 -0
  462. package/lib/ui-kit/line-loader/line-loader.component.d.ts.map +1 -0
  463. package/lib/ui-kit/line-loader/line-loader.module.d.ts.__ivy_ngcc_bak +2 -0
  464. package/lib/ui-kit/line-loader/line-loader.module.d.ts.map +1 -0
  465. package/lib/ui-kit/no-data/no-data.component.d.ts.__ivy_ngcc_bak +18 -0
  466. package/lib/ui-kit/no-data/no-data.component.d.ts.map +1 -0
  467. package/lib/ui-kit/no-data/no-data.module.d.ts.__ivy_ngcc_bak +2 -0
  468. package/lib/ui-kit/no-data/no-data.module.d.ts.map +1 -0
  469. package/lib/ui-kit/pagination/pagination/pagination.component.d.ts.__ivy_ngcc_bak +23 -0
  470. package/lib/ui-kit/pagination/pagination/pagination.component.d.ts.map +1 -0
  471. package/lib/ui-kit/pagination/pagination.module.d.ts.__ivy_ngcc_bak +2 -0
  472. package/lib/ui-kit/pagination/pagination.module.d.ts.map +1 -0
  473. package/lib/ui-kit/popover/popover-event.directive.d.ts.__ivy_ngcc_bak +7 -0
  474. package/lib/ui-kit/popover/popover-event.directive.d.ts.map +1 -0
  475. package/lib/ui-kit/popover/popover-longpress.directive.d.ts.__ivy_ngcc_bak +13 -0
  476. package/lib/ui-kit/popover/popover-longpress.directive.d.ts.map +1 -0
  477. package/lib/ui-kit/popover/popover.component.d.ts.__ivy_ngcc_bak +24 -0
  478. package/lib/ui-kit/popover/popover.component.d.ts.map +1 -0
  479. package/lib/ui-kit/popover/popover.directive.d.ts.__ivy_ngcc_bak +16 -0
  480. package/lib/ui-kit/popover/popover.directive.d.ts.map +1 -0
  481. package/lib/ui-kit/popover/popover.module.d.ts.__ivy_ngcc_bak +2 -0
  482. package/lib/ui-kit/popover/popover.module.d.ts.map +1 -0
  483. package/lib/ui-kit/popover/popover.service.d.ts.__ivy_ngcc_bak +9 -0
  484. package/lib/ui-kit/popover/popover.service.d.ts.map +1 -0
  485. package/lib/ui-kit/popover-hover/popover-hover.component.d.ts.__ivy_ngcc_bak +22 -0
  486. package/lib/ui-kit/popover-hover/popover-hover.component.d.ts.map +1 -0
  487. package/lib/ui-kit/popover-hover/popover-hover.directive.d.ts.__ivy_ngcc_bak +12 -0
  488. package/lib/ui-kit/popover-hover/popover-hover.directive.d.ts.map +1 -0
  489. package/lib/ui-kit/popover-hover/popover-hover.module.d.ts.__ivy_ngcc_bak +2 -0
  490. package/lib/ui-kit/popover-hover/popover-hover.module.d.ts.map +1 -0
  491. package/lib/ui-kit/popover-hover/popover-hover.service.d.ts.__ivy_ngcc_bak +9 -0
  492. package/lib/ui-kit/popover-hover/popover-hover.service.d.ts.map +1 -0
  493. package/lib/ui-kit/smiley-dialog/smiley-dialog.component.d.ts.__ivy_ngcc_bak +12 -0
  494. package/lib/ui-kit/smiley-dialog/smiley-dialog.component.d.ts.map +1 -0
  495. package/lib/ui-kit/smiley-dialog/smiley-dialog.module.d.ts.__ivy_ngcc_bak +2 -0
  496. package/lib/ui-kit/smiley-dialog/smiley-dialog.module.d.ts.map +1 -0
  497. package/lib/ui-kit/smiley-dialog-inline/smiley-dialog-inline.component.d.ts.__ivy_ngcc_bak +12 -0
  498. package/lib/ui-kit/smiley-dialog-inline/smiley-dialog-inline.component.d.ts.map +1 -0
  499. package/lib/ui-kit/smiley-dialog-inline/smiley-dialog-inline.module.d.ts.__ivy_ngcc_bak +2 -0
  500. package/lib/ui-kit/smiley-dialog-inline/smiley-dialog-inline.module.d.ts.map +1 -0
  501. package/lib/ui-kit/snack-bar/snack-bar.component.d.ts.__ivy_ngcc_bak +17 -0
  502. package/lib/ui-kit/snack-bar/snack-bar.component.d.ts.map +1 -0
  503. package/lib/ui-kit/snack-bar/snack-bar.module.d.ts.__ivy_ngcc_bak +2 -0
  504. package/lib/ui-kit/snack-bar/snack-bar.module.d.ts.map +1 -0
  505. package/lib/ui-kit/snack-bar/snack-bar.service.d.ts.__ivy_ngcc_bak +8 -0
  506. package/lib/ui-kit/snack-bar/snack-bar.service.d.ts.map +1 -0
  507. package/lib/ui-kit/tooltip/tooltip.directive.d.ts.__ivy_ngcc_bak +24 -0
  508. package/lib/ui-kit/tooltip/tooltip.directive.d.ts.map +1 -0
  509. package/lib/ui-kit/tooltip/tooltip.module.d.ts.__ivy_ngcc_bak +2 -0
  510. package/lib/ui-kit/tooltip/tooltip.module.d.ts.map +1 -0
  511. package/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.d.ts.__ivy_ngcc_bak +231 -0
  512. package/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.d.ts.map +1 -0
  513. package/lib/workflow-assessment/workflow-assessment.component.d.ts.__ivy_ngcc_bak +63 -0
  514. package/lib/workflow-assessment/workflow-assessment.component.d.ts.map +1 -0
  515. package/lib/workflow-compliance/workflow-compliance.component.d.ts +2 -0
  516. package/lib/workflow-compliance/workflow-compliance.component.d.ts.__ivy_ngcc_bak +373 -0
  517. package/lib/workflow-compliance/workflow-compliance.component.d.ts.map +1 -0
  518. package/lib/workflow-engine-container/workflow-engine-container.component.d.ts.__ivy_ngcc_bak +132 -0
  519. package/lib/workflow-engine-container/workflow-engine-container.component.d.ts.map +1 -0
  520. package/lib/workflow-engine.module.d.ts.__ivy_ngcc_bak +5 -0
  521. package/lib/workflow-engine.module.d.ts.map +1 -0
  522. package/lib/workflow-engine.service.d.ts.__ivy_ngcc_bak +3 -0
  523. package/lib/workflow-engine.service.d.ts.map +1 -0
  524. package/lib/workflow-pagination/workflow-pagination.component.d.ts.__ivy_ngcc_bak +24 -0
  525. package/lib/workflow-pagination/workflow-pagination.component.d.ts.map +1 -0
  526. package/lib/workflow-policy/workflow-policy.component.d.ts.__ivy_ngcc_bak +292 -0
  527. package/lib/workflow-policy/workflow-policy.component.d.ts.map +1 -0
  528. package/lib/workflow-program/create-program-ui/assessment-picker/assessment-loader/assessment-loader.component.d.ts.__ivy_ngcc_bak +5 -0
  529. package/lib/workflow-program/create-program-ui/assessment-picker/assessment-loader/assessment-loader.component.d.ts.map +1 -0
  530. package/lib/workflow-program/create-program-ui/assessment-picker/assessment-picker.component.d.ts.__ivy_ngcc_bak +87 -0
  531. package/lib/workflow-program/create-program-ui/assessment-picker/assessment-picker.component.d.ts.map +1 -0
  532. package/lib/workflow-program/create-program-ui/assessment-picker/assessment-sub-loader/assessment-sub-loader.component.d.ts.__ivy_ngcc_bak +5 -0
  533. package/lib/workflow-program/create-program-ui/assessment-picker/assessment-sub-loader/assessment-sub-loader.component.d.ts.map +1 -0
  534. package/lib/workflow-program/create-program-ui/assessment-picker/assessment.service.d.ts.__ivy_ngcc_bak +13 -0
  535. package/lib/workflow-program/create-program-ui/assessment-picker/assessment.service.d.ts.map +1 -0
  536. package/lib/workflow-program/create-program-ui/assessment-picker/selected-assessment.pipe.d.ts.__ivy_ngcc_bak +4 -0
  537. package/lib/workflow-program/create-program-ui/assessment-picker/selected-assessment.pipe.d.ts.map +1 -0
  538. package/lib/workflow-program/create-program-ui/assessment-picker/workflow-pagination/workflow-pagination.component.d.ts.__ivy_ngcc_bak +24 -0
  539. package/lib/workflow-program/create-program-ui/assessment-picker/workflow-pagination/workflow-pagination.component.d.ts.map +1 -0
  540. package/lib/workflow-program/create-program-ui/checkbox/checkbox.component.d.ts.__ivy_ngcc_bak +13 -0
  541. package/lib/workflow-program/create-program-ui/checkbox/checkbox.component.d.ts.map +1 -0
  542. package/lib/workflow-program/create-program-ui/create-program-ui.module.d.ts.__ivy_ngcc_bak +2 -0
  543. package/lib/workflow-program/create-program-ui/create-program-ui.module.d.ts.map +1 -0
  544. package/lib/workflow-program/create-program-ui/cs-switch/cs-switch.component.d.ts.__ivy_ngcc_bak +17 -0
  545. package/lib/workflow-program/create-program-ui/cs-switch/cs-switch.component.d.ts.map +1 -0
  546. package/lib/workflow-program/create-program-ui/custom-field/custom-field.component.d.ts.__ivy_ngcc_bak +19 -0
  547. package/lib/workflow-program/create-program-ui/custom-field/custom-field.component.d.ts.map +1 -0
  548. package/lib/workflow-program/create-program-ui/define-framework-listing/define-framework-listing.component.d.ts.__ivy_ngcc_bak +63 -0
  549. package/lib/workflow-program/create-program-ui/define-framework-listing/define-framework-listing.component.d.ts.map +1 -0
  550. package/lib/workflow-program/create-program-ui/define-framework-listing/framework.service.d.ts.__ivy_ngcc_bak +12 -0
  551. package/lib/workflow-program/create-program-ui/define-framework-listing/framework.service.d.ts.map +1 -0
  552. package/lib/workflow-program/create-program-ui/define-framework-listing/loader/loader.component.d.ts.__ivy_ngcc_bak +5 -0
  553. package/lib/workflow-program/create-program-ui/define-framework-listing/loader/loader.component.d.ts.map +1 -0
  554. package/lib/workflow-program/create-program-ui/define-framework-listing/pipes/category-all-select.pipe.d.ts.__ivy_ngcc_bak +4 -0
  555. package/lib/workflow-program/create-program-ui/define-framework-listing/pipes/category-all-select.pipe.d.ts.map +1 -0
  556. package/lib/workflow-program/create-program-ui/define-framework-listing/pipes/search.pipe.d.ts.__ivy_ngcc_bak +4 -0
  557. package/lib/workflow-program/create-program-ui/define-framework-listing/pipes/search.pipe.d.ts.map +1 -0
  558. package/lib/workflow-program/create-program-ui/define-framework-listing/pipes/sub-cat-indeter.pipe.d.ts.__ivy_ngcc_bak +4 -0
  559. package/lib/workflow-program/create-program-ui/define-framework-listing/pipes/sub-cat-indeter.pipe.d.ts.map +1 -0
  560. package/lib/workflow-program/create-program-ui/define-framework-listing/pipes/tooltip-message.pipe.d.ts.__ivy_ngcc_bak +4 -0
  561. package/lib/workflow-program/create-program-ui/define-framework-listing/pipes/tooltip-message.pipe.d.ts.map +1 -0
  562. package/lib/workflow-program/create-program-ui/directives/input-trim.directive.d.ts.__ivy_ngcc_bak +3 -0
  563. package/lib/workflow-program/create-program-ui/directives/input-trim.directive.d.ts.map +1 -0
  564. package/lib/workflow-program/create-program-ui/file-pill/file-pill.component.d.ts.__ivy_ngcc_bak +9 -0
  565. package/lib/workflow-program/create-program-ui/file-pill/file-pill.component.d.ts.map +1 -0
  566. package/lib/workflow-program/create-program-ui/floating-bar/floating-bar.component.d.ts.__ivy_ngcc_bak +34 -0
  567. package/lib/workflow-program/create-program-ui/floating-bar/floating-bar.component.d.ts.map +1 -0
  568. package/lib/workflow-program/create-program-ui/form-field/form-field.component.d.ts.__ivy_ngcc_bak +9 -0
  569. package/lib/workflow-program/create-program-ui/form-field/form-field.component.d.ts.map +1 -0
  570. package/lib/workflow-program/create-program-ui/input-with-pill/input-with-pill.component.d.ts.__ivy_ngcc_bak +10 -0
  571. package/lib/workflow-program/create-program-ui/input-with-pill/input-with-pill.component.d.ts.map +1 -0
  572. package/lib/workflow-program/create-program-ui/pagination/pagination/pagination.component.d.ts.__ivy_ngcc_bak +25 -0
  573. package/lib/workflow-program/create-program-ui/pagination/pagination/pagination.component.d.ts.map +1 -0
  574. package/lib/workflow-program/create-program-ui/pagination/pagination.module.d.ts.__ivy_ngcc_bak +2 -0
  575. package/lib/workflow-program/create-program-ui/pagination/pagination.module.d.ts.map +1 -0
  576. package/lib/workflow-program/create-program-ui/pipes/array-concat.pipe.d.ts.__ivy_ngcc_bak +4 -0
  577. package/lib/workflow-program/create-program-ui/pipes/array-concat.pipe.d.ts.map +1 -0
  578. package/lib/workflow-program/create-program-ui/pipes/assessment-resolver.pipe.d.ts.__ivy_ngcc_bak +4 -0
  579. package/lib/workflow-program/create-program-ui/pipes/assessment-resolver.pipe.d.ts.map +1 -0
  580. package/lib/workflow-program/create-program-ui/pipes/filter.pipe.d.ts.__ivy_ngcc_bak +4 -0
  581. package/lib/workflow-program/create-program-ui/pipes/filter.pipe.d.ts.map +1 -0
  582. package/lib/workflow-program/create-program-ui/pipes/list-to-id.pipe.d.ts.__ivy_ngcc_bak +4 -0
  583. package/lib/workflow-program/create-program-ui/pipes/list-to-id.pipe.d.ts.map +1 -0
  584. package/lib/workflow-program/create-program-ui/pipes/pager.pipe.d.ts.__ivy_ngcc_bak +4 -0
  585. package/lib/workflow-program/create-program-ui/pipes/pager.pipe.d.ts.map +1 -0
  586. package/lib/workflow-program/create-program-ui/pipes/ref-disconnect.pipe.d.ts.__ivy_ngcc_bak +4 -0
  587. package/lib/workflow-program/create-program-ui/pipes/ref-disconnect.pipe.d.ts.map +1 -0
  588. package/lib/workflow-program/create-program-ui/pipes/search.pipe.d.ts.__ivy_ngcc_bak +4 -0
  589. package/lib/workflow-program/create-program-ui/pipes/search.pipe.d.ts.map +1 -0
  590. package/lib/workflow-program/create-program-ui/role-list/loader/loader.component.d.ts.__ivy_ngcc_bak +5 -0
  591. package/lib/workflow-program/create-program-ui/role-list/loader/loader.component.d.ts.map +1 -0
  592. package/lib/workflow-program/create-program-ui/role-list/role-list.component.d.ts.__ivy_ngcc_bak +68 -0
  593. package/lib/workflow-program/create-program-ui/role-list/role-list.component.d.ts.map +1 -0
  594. package/lib/workflow-program/create-program-ui/tab-selector/tab-selector.component.d.ts.__ivy_ngcc_bak +17 -0
  595. package/lib/workflow-program/create-program-ui/tab-selector/tab-selector.component.d.ts.map +1 -0
  596. package/lib/workflow-program/create-program-ui/tick-mark/tick-mark.component.d.ts.__ivy_ngcc_bak +5 -0
  597. package/lib/workflow-program/create-program-ui/tick-mark/tick-mark.component.d.ts.map +1 -0
  598. package/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.d.ts.__ivy_ngcc_bak +112 -0
  599. package/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.d.ts.map +1 -0
  600. package/lib/workflow-program/workflow-program.component.d.ts +9 -0
  601. package/lib/workflow-program/workflow-program.component.d.ts.__ivy_ngcc_bak +201 -0
  602. package/lib/workflow-program/workflow-program.component.d.ts.map +1 -0
  603. package/lib/workflow-risk/workflow-risk.component.d.ts.__ivy_ngcc_bak +188 -0
  604. package/lib/workflow-risk/workflow-risk.component.d.ts.map +1 -0
  605. package/lib/workflow-services/add-risk.service.d.ts.__ivy_ngcc_bak +23 -0
  606. package/lib/workflow-services/add-risk.service.d.ts.map +1 -0
  607. package/lib/workflow-services/assessment.service.d.ts.__ivy_ngcc_bak +29 -0
  608. package/lib/workflow-services/assessment.service.d.ts.map +1 -0
  609. package/lib/workflow-services/auth.service.d.ts.__ivy_ngcc_bak +30 -0
  610. package/lib/workflow-services/auth.service.d.ts.map +1 -0
  611. package/lib/workflow-services/frequency.service.d.ts.__ivy_ngcc_bak +5 -0
  612. package/lib/workflow-services/frequency.service.d.ts.map +1 -0
  613. package/lib/workflow-services/log-issue.service.d.ts.__ivy_ngcc_bak +31 -0
  614. package/lib/workflow-services/log-issue.service.d.ts.map +1 -0
  615. package/lib/workflow-services/policy.service.d.ts.__ivy_ngcc_bak +24 -0
  616. package/lib/workflow-services/policy.service.d.ts.map +1 -0
  617. package/lib/workflow-services/programs.service.d.ts.__ivy_ngcc_bak +111 -0
  618. package/lib/workflow-services/programs.service.d.ts.map +1 -0
  619. package/lib/workflow-services/responsibility.service.d.ts.__ivy_ngcc_bak +42 -0
  620. package/lib/workflow-services/responsibility.service.d.ts.map +1 -0
  621. package/lib/workflow-services/token-decoder.service.d.ts.__ivy_ngcc_bak +4 -0
  622. package/lib/workflow-services/token-decoder.service.d.ts.map +1 -0
  623. package/lib/workflow-services/ui-kit.service.d.ts.__ivy_ngcc_bak +5 -0
  624. package/lib/workflow-services/ui-kit.service.d.ts.map +1 -0
  625. package/lib/workflow-survey-form/workflow-survey-form.component.d.ts.__ivy_ngcc_bak +7 -0
  626. package/lib/workflow-survey-form/workflow-survey-form.component.d.ts.map +1 -0
  627. package/package.json +1 -1
  628. package/vcomply-workflow-engine.d.ts.__ivy_ngcc_bak +307 -0
  629. package/vcomply-workflow-engine.d.ts.map +1 -0
  630. package/vcomply-workflow-engine.metadata.json +1 -1
@@ -669,6 +669,9 @@ export class WorkflowComplianceComponent {
669
669
  this.responsibilityForm.overseers.list = [];
670
670
  this.responsibilityForm.overseers.notifyList = [];
671
671
  }
672
+ if (this.featureFlag_groups) {
673
+ this.populateProgramOverseerGroup();
674
+ }
672
675
  for (const key in this.moreOptions) {
673
676
  if (this.moreOptions[key]) {
674
677
  checkedMoreOptions.push(key);
@@ -687,7 +690,9 @@ export class WorkflowComplianceComponent {
687
690
  this.responsibilityService.getOrganizationGroups(params).pipe(takeUntil(this.unSubscribeProgram)).subscribe((res) => {
688
691
  var _a, _b, _c, _d, _e;
689
692
  const data = res !== null && res !== void 0 ? res : [];
690
- this.OrgGroup = data;
693
+ if (!program_id) {
694
+ this.OrgGroup = data;
695
+ }
691
696
  const groups = [];
692
697
  if (data === null || data === void 0 ? void 0 : data.length) {
693
698
  data === null || data === void 0 ? void 0 : data.forEach((element) => {
@@ -925,6 +930,49 @@ export class WorkflowComplianceComponent {
925
930
  this.responsibilityForm.assigneeGroups.list = [];
926
931
  }
927
932
  }
933
+ populateProgramOverseerGroup() {
934
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2;
935
+ if (((_c = (_b = (_a = this.responsibilityForm) === null || _a === void 0 ? void 0 : _a.program[0]) === null || _b === void 0 ? void 0 : _b.default_overseers) === null || _c === void 0 ? void 0 : _c.cc_email_groups) || ((_f = (_e = (_d = this.responsibilityForm) === null || _d === void 0 ? void 0 : _d.overseersGroups) === null || _e === void 0 ? void 0 : _e.notifyList) === null || _f === void 0 ? void 0 : _f.length) || ((_j = (_h = (_g = this.responsibilityForm) === null || _g === void 0 ? void 0 : _g.overseersGroups) === null || _h === void 0 ? void 0 : _h.list) === null || _j === void 0 ? void 0 : _j.length) || ((_m = (_l = (_k = this.responsibilityForm) === null || _k === void 0 ? void 0 : _k.program[0]) === null || _l === void 0 ? void 0 : _l.default_overseers) === null || _m === void 0 ? void 0 : _m.failure_cc_email_groups)) {
936
+ if ((_q = (_p = (_o = this.responsibilityForm) === null || _o === void 0 ? void 0 : _o.overseersGroups) === null || _p === void 0 ? void 0 : _p.list) === null || _q === void 0 ? void 0 : _q.length) {
937
+ const ids = this.returnIds((_s = (_r = this.responsibilityForm) === null || _r === void 0 ? void 0 : _r.overseersGroups) === null || _s === void 0 ? void 0 : _s.list, 'group_id');
938
+ const allDefaultCCGroupIds = [...new Set(ids), ...new Set((_v = (_u = (_t = this.responsibilityForm) === null || _t === void 0 ? void 0 : _t.program[0]) === null || _u === void 0 ? void 0 : _u.default_overseers) === null || _v === void 0 ? void 0 : _v.cc_email_groups)];
939
+ const overseersCCGroup = (_w = this.groupOverseerList) === null || _w === void 0 ? void 0 : _w.filter((element) => allDefaultCCGroupIds === null || allDefaultCCGroupIds === void 0 ? void 0 : allDefaultCCGroupIds.includes(element === null || element === void 0 ? void 0 : element.group_id));
940
+ const notifyListIds = this.returnIds(this.responsibilityForm.overseersGroups.notifyList, 'group_id');
941
+ const allDefaultCCFailureGroupIds = [...new Set(notifyListIds), ...new Set((_z = (_y = (_x = this.responsibilityForm) === null || _x === void 0 ? void 0 : _x.program[0]) === null || _y === void 0 ? void 0 : _y.default_overseers) === null || _z === void 0 ? void 0 : _z.failure_cc_email_groups)];
942
+ const overseersCCFailureGroup = (_0 = this.groupOverseerList) === null || _0 === void 0 ? void 0 : _0.filter((element) => allDefaultCCFailureGroupIds === null || allDefaultCCFailureGroupIds === void 0 ? void 0 : allDefaultCCFailureGroupIds.includes(element === null || element === void 0 ? void 0 : element.group_id));
943
+ if (overseersCCGroup === null || overseersCCGroup === void 0 ? void 0 : overseersCCGroup.length) {
944
+ this.responsibilityForm.overseersGroups.list = overseersCCGroup;
945
+ this.moreOptions.OVERSEER = true;
946
+ }
947
+ else {
948
+ this.responsibilityForm.overseersGroups.list = [];
949
+ }
950
+ if (overseersCCFailureGroup === null || overseersCCFailureGroup === void 0 ? void 0 : overseersCCFailureGroup.length) {
951
+ this.responsibilityForm.overseersGroups.notifyList = overseersCCFailureGroup;
952
+ this.moreOptions.OVERSEER = true;
953
+ }
954
+ else {
955
+ this.responsibilityForm.overseersGroups.notifyList = [];
956
+ }
957
+ }
958
+ else {
959
+ const overseersCCGroup = (_1 = this.groupOverseerList) === null || _1 === void 0 ? void 0 : _1.filter((element) => { var _a, _b, _c, _d; return (_d = (_c = (_b = (_a = this.responsibilityForm) === null || _a === void 0 ? void 0 : _a.program[0]) === null || _b === void 0 ? void 0 : _b.default_overseers) === null || _c === void 0 ? void 0 : _c.cc_email_groups) === null || _d === void 0 ? void 0 : _d.includes(element === null || element === void 0 ? void 0 : element.group_id); });
960
+ const overseersCCFailureGroup = (_2 = this.groupOverseerList) === null || _2 === void 0 ? void 0 : _2.filter((element) => { var _a, _b, _c, _d; return (_d = (_c = (_b = (_a = this.responsibilityForm) === null || _a === void 0 ? void 0 : _a.program[0]) === null || _b === void 0 ? void 0 : _b.default_overseers) === null || _c === void 0 ? void 0 : _c.failure_cc_email_groups) === null || _d === void 0 ? void 0 : _d.includes(element === null || element === void 0 ? void 0 : element.group_id); });
961
+ if (overseersCCGroup === null || overseersCCGroup === void 0 ? void 0 : overseersCCGroup.length) {
962
+ this.responsibilityForm.overseersGroups.list = overseersCCGroup;
963
+ this.moreOptions.OVERSEER = true;
964
+ }
965
+ if (overseersCCFailureGroup.length) {
966
+ this.responsibilityForm.overseersGroups.notifyList = overseersCCFailureGroup;
967
+ this.moreOptions.OVERSEER = true;
968
+ }
969
+ }
970
+ }
971
+ else {
972
+ this.responsibilityForm.overseersGroups.list = [];
973
+ this.responsibilityForm.overseersGroups.notifyList = [];
974
+ }
975
+ }
928
976
  populateOverseerData(res) {
929
977
  var _a, _b, _c, _d, _e, _f, _g, _h;
930
978
  let overseerUserList = [];
@@ -1647,7 +1695,7 @@ export class WorkflowComplianceComponent {
1647
1695
  groupReviewerIds = [...new Set(groupReviewerIds)];
1648
1696
  groupOverseerIds = [...new Set(groupOverseerIds)];
1649
1697
  this.assignorsList = behalfUsers.filter((user) => !(overseerIds === null || overseerIds === void 0 ? void 0 : overseerIds.includes(user.member_id)));
1650
- this.assigneesList = allUsers.filter((user) => !((reviewersIds === null || reviewersIds === void 0 ? void 0 : reviewersIds.includes(user === null || user === void 0 ? void 0 : user.my_member_id)) || (overseerIds === null || overseerIds === void 0 ? void 0 : overseerIds.includes(user === null || user === void 0 ? void 0 : user.my_member_id))));
1698
+ this.assigneesList = allUsers;
1651
1699
  this.reviewersList = allUsers.filter((user) => !((overseerIds === null || overseerIds === void 0 ? void 0 : overseerIds.includes(user === null || user === void 0 ? void 0 : user.my_member_id)) || (assigneeIds === null || assigneeIds === void 0 ? void 0 : assigneeIds.includes(user === null || user === void 0 ? void 0 : user.my_member_id))));
1652
1700
  this.overseersList = allUsers.filter((user) => !((assignorAndAssigneesIds === null || assignorAndAssigneesIds === void 0 ? void 0 : assignorAndAssigneesIds.includes(user === null || user === void 0 ? void 0 : user.my_member_id)) || (reviewersIds === null || reviewersIds === void 0 ? void 0 : reviewersIds.includes(user === null || user === void 0 ? void 0 : user.my_member_id))));
1653
1701
  this.disableList(allUsers, assignorAndAssigneesIds, assigneeIds, reviewersIds, overseerIds);
@@ -1675,7 +1723,7 @@ export class WorkflowComplianceComponent {
1675
1723
  }
1676
1724
  }
1677
1725
  refreshListsWhileProgramSelected() {
1678
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
1726
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5;
1679
1727
  let assignorAndAssigneesIds = [];
1680
1728
  let reviewersIds = [];
1681
1729
  let overseerIds = [];
@@ -1747,18 +1795,28 @@ export class WorkflowComplianceComponent {
1747
1795
  this.reviewerIds = [...new Set(this.reviewerIds)];
1748
1796
  this.overseerIds = [...new Set(this.overseerIds)];
1749
1797
  this.assignorsList = behalfUsers.filter((user) => !(overseerIds === null || overseerIds === void 0 ? void 0 : overseerIds.includes(user.member_id)));
1750
- this.assigneesList = (_v = this.programPeopleList) === null || _v === void 0 ? void 0 : _v.assigneesList.filter((user) => !((reviewersIds === null || reviewersIds === void 0 ? void 0 : reviewersIds.includes(user === null || user === void 0 ? void 0 : user.my_member_id)) || (overseerIds === null || overseerIds === void 0 ? void 0 : overseerIds.includes(user === null || user === void 0 ? void 0 : user.my_member_id))));
1798
+ this.assigneesList = (_v = this.programPeopleList) === null || _v === void 0 ? void 0 : _v.assigneesList;
1751
1799
  this.reviewersList = (_w = this.programPeopleList) === null || _w === void 0 ? void 0 : _w.reviewersList.filter((user) => !((overseerIds === null || overseerIds === void 0 ? void 0 : overseerIds.includes(user === null || user === void 0 ? void 0 : user.my_member_id)) || (assigneeIds === null || assigneeIds === void 0 ? void 0 : assigneeIds.includes(user === null || user === void 0 ? void 0 : user.my_member_id))));
1752
1800
  this.overseersList = (_x = this.programPeopleList) === null || _x === void 0 ? void 0 : _x.overseersList.filter((user) => !((assignorAndAssigneesIds === null || assignorAndAssigneesIds === void 0 ? void 0 : assignorAndAssigneesIds.includes(user === null || user === void 0 ? void 0 : user.my_member_id)) || (reviewersIds === null || reviewersIds === void 0 ? void 0 : reviewersIds.includes(user === null || user === void 0 ? void 0 : user.my_member_id))));
1753
1801
  if (this.featureFlag_groups) {
1754
- this.groupAssigneeList = allGroups.filter((group) => !((groupReviewerIds === null || groupReviewerIds === void 0 ? void 0 : groupReviewerIds.includes(group === null || group === void 0 ? void 0 : group.group_id)) || (groupOverseerIds === null || groupOverseerIds === void 0 ? void 0 : groupOverseerIds.includes(group === null || group === void 0 ? void 0 : group.group_id))));
1802
+ this.groupAssigneeList = this.selectedProgram && ((_z = (_y = this.selectedProgram) === null || _y === void 0 ? void 0 : _y.assignee_group_ids) === null || _z === void 0 ? void 0 : _z.length) > 0 ? this.programGroupList(allGroups, (_0 = this.selectedProgram) === null || _0 === void 0 ? void 0 : _0.assignee_group_ids) : allGroups.filter((group) => !((groupReviewerIds === null || groupReviewerIds === void 0 ? void 0 : groupReviewerIds.includes(group === null || group === void 0 ? void 0 : group.group_id)) || (groupOverseerIds === null || groupOverseerIds === void 0 ? void 0 : groupOverseerIds.includes(group === null || group === void 0 ? void 0 : group.group_id))));
1755
1803
  this.reviewerMemberIdsList = this.assignUserMemberId(this.programPeopleList.reviewersList);
1756
1804
  this.groupReviewerList = allGroups.filter((group) => !((groupOverseerIds === null || groupOverseerIds === void 0 ? void 0 : groupOverseerIds.includes(group === null || group === void 0 ? void 0 : group.group_id)) || (assigneeGroupIds === null || assigneeGroupIds === void 0 ? void 0 : assigneeGroupIds.includes(group === null || group === void 0 ? void 0 : group.group_id))));
1757
1805
  this.overseersList = this.assignUserMemberId(this.programPeopleList.overseersList);
1758
- this.groupOverseerList = allGroups.filter((group) => !((assigneeGroupIds === null || assigneeGroupIds === void 0 ? void 0 : assigneeGroupIds.includes(group === null || group === void 0 ? void 0 : group.group_id)) || (groupReviewerIds === null || groupReviewerIds === void 0 ? void 0 : groupReviewerIds.includes(group === null || group === void 0 ? void 0 : group.group_id))));
1806
+ this.groupOverseerList = this.selectedProgram && ((_3 = (_2 = (_1 = this.selectedProgram) === null || _1 === void 0 ? void 0 : _1.overseers) === null || _2 === void 0 ? void 0 : _2.cc_email_groups) === null || _3 === void 0 ? void 0 : _3.length) > 0 ? this.programGroupList(allGroups, (_5 = (_4 = this.selectedProgram) === null || _4 === void 0 ? void 0 : _4.overseers) === null || _5 === void 0 ? void 0 : _5.cc_email_groups) : allGroups.filter((group) => !((assigneeGroupIds === null || assigneeGroupIds === void 0 ? void 0 : assigneeGroupIds.includes(group === null || group === void 0 ? void 0 : group.group_id)) || (groupReviewerIds === null || groupReviewerIds === void 0 ? void 0 : groupReviewerIds.includes(group === null || group === void 0 ? void 0 : group.group_id))));
1759
1807
  }
1760
1808
  this.disableProgramList(assignorAndAssigneesIds, assigneeIds, reviewersIds, overseerIds);
1761
1809
  }
1810
+ programGroupList(allGroups, ...args) {
1811
+ var _a;
1812
+ // args[0]
1813
+ let assigneeProgram = [];
1814
+ let groupIds = args[0];
1815
+ if (this.selectedProgram && ((_a = this.selectedProgram) === null || _a === void 0 ? void 0 : _a.assignee_group_ids)) {
1816
+ assigneeProgram = allGroups.filter((group) => (groupIds.includes(group.group_id)));
1817
+ }
1818
+ return assigneeProgram;
1819
+ }
1762
1820
  disableProgramList(assignorAndAssigneesIds, assigneeIds, reviewersIds, overseerIds) {
1763
1821
  var _a, _b, _c;
1764
1822
  let disableAssigneeList = (_a = this.programPeopleList) === null || _a === void 0 ? void 0 : _a.assigneesList.filter((user) => ((reviewersIds === null || reviewersIds === void 0 ? void 0 : reviewersIds.includes(user === null || user === void 0 ? void 0 : user.my_member_id)) || (overseerIds === null || overseerIds === void 0 ? void 0 : overseerIds.includes(user === null || user === void 0 ? void 0 : user.my_member_id))));
@@ -2826,7 +2884,7 @@ export class WorkflowComplianceComponent {
2826
2884
  WorkflowComplianceComponent.decorators = [
2827
2885
  { type: Component, args: [{
2828
2886
  selector: 'app-workflow-compliance',
2829
- template: "<div class=\"workflw-compliance\" *ngIf=\"!showSmiley\">\r\n\r\n <div *ngIf=\"mode !== 'EDIT'\" class=\"form-group-row \" [class.active]=\"activeSelector === 'assignors'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'assignors' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\"\r\n [class.checked]=\"responsibilityForm?.assignors?.list?.length>0 && activeSelector !== 'assignors'\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/im-creating.svg\" alt=\"im\"\r\n *ngIf=\"responsibilityForm?.assignors?.list?.length==0 || activeSelector === 'assignors'\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"responsibilityForm?.assignors?.list?.length>0 && activeSelector !== 'assignors'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n I am creating this responsibility on behalf of someone else\r\n <app-cs-switch [ngValue]=\"responsibilityForm.assignors.enable\"\r\n (ngValueChange)=\"responsibilityForm.assignors.enable = $event; responsibilityForm.assignors.list = [];\">\r\n </app-cs-switch>\r\n </label>\r\n <div class=\"select\"\r\n *ngIf=\"responsibilityForm?.assignors?.list?.length === 0 || activeSelector === 'assignors'\">\r\n <input type=\"text\" (click)=\"activateSelector('assignors',true)\"\r\n placeholder=\"Who is responsible for managing this responsibility?\" readonly\r\n [disabled]=\"!responsibilityForm?.assignors?.enable\">\r\n </div>\r\n <div class=\"selected\"\r\n *ngIf=\"responsibilityForm?.assignors?.list?.length > 0 && activeSelector !== 'assignors'\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\" *ngFor=\"let b_user of responsibilityForm?.assignors?.list?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('assignors',b_user)\">&#xe90d;</i>\r\n {{b_user.member_name}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm?.assignors?.list?.length > 2\" type=\"button\"\r\n appPopover (click)=\"behalf.popover()\" placement=\"right\">+\r\n {{responsibilityForm?.assignors?.list?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'assignors'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('assignors',true)\"><i class=\"icons\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n <app-popover #behalf [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let b_user of responsibilityForm?.assignors?.list | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('assignors',b_user)\">&#xe90d;</i>\r\n {{ b_user.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <p *ngIf=\"invalidType === 'whom'\" [appScrollInView]=\"true\" class=\"error-message\">Please select the\r\n person responsible for managing this responsibility.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- What -->\r\n\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'framework'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'responsibilityName' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\"\r\n [class.checked]=\"responsibilityForm?.responsibility?.name.trim() !== '' && !focus.responsibilityName\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg\" alt=\"im\"\r\n *ngIf=\"(responsibilityForm?.responsibility?.name.trim() === '') || focus.responsibilityName\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"responsibilityForm?.responsibility?.name.trim() !== '' && !focus.responsibilityName\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n What? <span class=\"required\">*</span>\r\n <button *ngIf=\"isFrameworkAvailable && mode !== 'EDIT' && openedFrom !=='RISK_TREATMENT'\"\r\n (click)=\"activateSelector('framework',true)\" class=\"button\">Select From A framework</button>\r\n </label>\r\n <span *ngIf=\"responsibilityForm?.responsibility?.keyResponsibility\" class=\"indicator\"\r\n [appTooltip]=\"'This responsibility is marked as key responsibility.'\" placement=\"bottom\"\r\n type=\"black\" delay=\"0\" [tooltipMandatory]=\"true\">\r\n <i class=\"icons\">&#xea70;</i>\r\n </span>\r\n <input *ngIf=\"responsibilityForm?.responsibility?.name.trim() =='' || !isEditWhat\" type=\"text\"\r\n [ngModel]=\"responsibilityForm.responsibility.name\" placeholder=\"What is the responsibility?\"\r\n (change)=\"whatChanged($event)\" (focusin)=\"activateSelector('responsibilityName',true)\"\r\n (focusout)=\"activeDeselector()\" (clickOutside)=\"testFunction()\" #what>\r\n <div class=\"selected\" *ngIf=\"responsibilityForm?.responsibility?.name.trim() !='' && isEditWhat\">\r\n <div class=\"chip-container\">\r\n <span class=\"value\">{{responsibilityForm.responsibility?.name}}</span>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"onEditWhat($event)\"><i class=\"icons\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n <p *ngIf=\"invalidType === 'what'\" [appScrollInView]=\"true\" class=\"error-message\">Please enter a name for\r\n this responsibility.</p>\r\n <div class=\"switch-row align-right\">\r\n <app-cs-switch [ngValue]=\"responsibilityForm.responsibility?.keyResponsibility\"\r\n (ngValueChange)=\"responsibilityForm.responsibility.keyResponsibility = $event\">Key\r\n Responsibility\r\n </app-cs-switch>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Who -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'assignees'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'assignees' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\"\r\n [class.checked]=\"responsibilityForm?.assignees?.list?.length>0 && activeSelector !== 'assignees'\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/who.svg\" alt=\"im\"\r\n *ngIf=\"responsibilityForm?.assignees?.list?.length==0 || activeSelector === 'assignees'\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"responsibilityForm?.assignees?.list?.length>0 && activeSelector !== 'assignees'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Who? <span class=\"required\">*</span></label>\r\n\r\n <div class=\"select\" *ngIf=\"(responsibilityForm?.assignees?.list?.length == 0 && (!featureFlag_groups||(responsibilityForm?.assigneeGroups?.list?.length == 0 && featureFlag_groups)))\">\r\n <input type=\"text\" (click)=\"activateSelector('assignees',true)\"\r\n placeholder=\"Who is responsible for completing the responsibility?\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"((responsibilityForm?.assignees?.list?.length > 0 && !featureFlag_groups)||((responsibilityForm?.assignees?.list?.length > 0 || responsibilityForm?.assigneeGroups?.list?.length > 0 ) && featureFlag_groups))\">\r\n <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.assignees?.length>1\"\r\n [class.plus]=\"responsibilityForm?.assignees?.length>2\" *ngIf=\"!featureFlag_groups\">\r\n <span class=\"chip\" *ngFor=\"let e_user of responsibilityForm?.assignees?.list?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('assignees',e_user)\">&#xe90d;</i>\r\n {{e_user.member_name}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm?.assignees?.list?.length > 2\" type=\"button\"\r\n appPopover (click)=\"assignees.popover()\" placement=\"right\">+\r\n {{responsibilityForm?.assignees?.list?.slice(2).length}}</button>\r\n </div>\r\n <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\r\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.assignees?.list?.length > 0\" >\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"user.popover()\" placement=\"left\"> {{responsibilityForm?.assignees?.list?.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.assignees?.list?.length > 0 && responsibilityForm?.assigneeGroups?.list?.length > 0\" >&</span>\r\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.assigneeGroups?.list?.length\" >\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\" >USER GROUP(S)</span></span>\r\n <button class=\"count\" appPopover (click)=\"group.popover()\" placement=\"right\">{{responsibilityForm?.assigneeGroups?.list?.length}}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'assignees' && (!featureFlag_groups || (featureFlag_groups && (!allGroupAssignee || mode !== 'EDIT')))\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('assignees',true)\"><i class=\"icons\">&#xe9ba;</i>\r\n Edit</button>\r\n <app-popover #user [dontCloseonClick]=\"true\" >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let e_user of responsibilityForm?.assignees?.list\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('assignees',e_user)\" >&#xe90d;</i>\r\n {{ e_user.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #group [dontCloseonClick]=\"true\" >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of responsibilityForm?.assigneeGroups?.list\" >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i *ngIf=\"(!featureFlag_groups || (featureFlag_groups && (!allGroupAssignee || mode !== 'EDIT')))\" class=\"icons\" (click)=\"remove('groupassignees',group)\" >&#xe90d;</i>\r\n {{group.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n <p *ngIf=\"invalidType === 'who'\" [appScrollInView]=\"true\" class=\"error-message\">Please select the person\r\n responsible for completing this responsibility.</p>\r\n <ng-container *ngIf=\"!isGroupAssigned\">\r\n <app-cs-radio *ngIf=\"mode !== 'EDIT'\"\r\n (checkedEvent)=\"responsibilityForm.assignees.whoCanComplete = 'ALL'\"\r\n [checked]=\"responsibilityForm.assignees.whoCanComplete == 'ALL'\" [name]=\"'what'\">ALL SELECTED\r\n PERSONS NEED TO\r\n COMPLETE THIS<i class=\"icons\"\r\n [appTooltip]=\"'If selected, separate responsibilities will be created for each person.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\">&#xe91f;</i>\r\n </app-cs-radio>\r\n <app-cs-radio *ngIf=\"mode !== 'EDIT'\"\r\n (checkedEvent)=\"responsibilityForm.assignees.whoCanComplete = 'ANY_ONE'\"\r\n [checked]=\"responsibilityForm.assignees.whoCanComplete == 'ANY_ONE'\" [name]=\"'what'\">ANY SELECTED\r\n PERSON CAN COMPLETE\r\n THIS <i class=\"icons\" [appTooltip]=\"'If selected, only one responsibility will be created.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\">&#xe91f;</i>\r\n </app-cs-radio>\r\n\r\n <div class=\"switch-row align-right\" *ngIf=\"(mode == 'EDIT' && (!featureFlag_groups || (responsibilityForm?.assigneeGroups?.list.length === 0 && featureFlag_groups)))\">\r\n <app-cs-switch\r\n (ngValueChange)=\"openAssigneeChangeConfirmation($event)\" [ngValue]=\"responsibilityForm.assignees.whoCanComplete == 'ANY_ONE'\"> ANY SELECTED\r\n PERSON CAN COMPLETE\r\n THIS\r\n </app-cs-switch>\r\n </div>\r\n </ng-container>\r\n <app-popover #assignees [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let e_user of responsibilityForm?.assignees?.list | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('assignees',e_user)\">&#xe90d;</i>\r\n {{ e_user.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- When? -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'frequency'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'frequency' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"(!responsibilityForm?.frequency || activeSelector === 'frequency')\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/when.svg\" alt=\"im\"\r\n *ngIf=\"!responsibilityForm?.frequency || activeSelector === 'frequency'\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"responsibilityForm?.frequency && activeSelector !== 'frequency' && responsibilityForm?.frequency != '' && responsibilityForm?.frequency != '5~0~0~0'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">When? <span class=\"required\">*</span></label>\r\n <div *ngIf=\"responsibilityForm?.frequency == '' || responsibilityForm?.frequency == '5~0~0~0'\"\r\n class=\"select button-sec\">\r\n <input type=\"text\" (click)=\"activateSelector('frequency',true)\" [placeholder]=\"frequencyPlaceholder\"\r\n readonly>\r\n <button (click)=\"activateSelector('frequency',true)\" type=\"button\">Set A frequency</button>\r\n </div>\r\n <div *ngIf=\"responsibilityForm?.frequency != '' && responsibilityForm?.frequency !== '5~0~0~0'\"\r\n class=\"selected button-sec\">\r\n <span class=\"chip\">{{frequencyPlaceholder}}</span>\r\n <button *ngIf=\"activeSelector !== 'frequency'\" type=\"button\" class=\"edit\"\r\n (click)=\"activateSelector('frequency',true)\">\r\n <i class=\"icons\">&#xe9ba;</i>Edit\r\n </button>\r\n </div>\r\n <p *ngIf=\"invalidType === 'when'\" [appScrollInView]=\"true\" class=\"error-message\">Please select the\r\n frequency of occurrence for this responsibility.</p>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Notes -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'notes'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'notes' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\"\r\n [class.checked]=\"checkBlank(responsibilityForm?.description).trim() !== '' && !focus.description\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/notes.svg\" alt=\"im\"\r\n *ngIf=\"(checkBlank(responsibilityForm?.description).trim() === '') || focus.description\">\r\n\r\n <svg class=\"checkIcon\"\r\n *ngIf=\"checkBlank(responsibilityForm?.description).trim() !== '' && !focus.description\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Notes</label>\r\n <marx-editor [(ngModel)]=\"responsibilityForm.description\" [editorConfig]=\"{mode: 'prime',\r\n colorPalette: true,\r\n link: true,\r\n id:'notes',\r\n placeholder: 'Add more information about completing the responsibility'}\"></marx-editor>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Objective -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.OBJECTIVE\"\r\n [attr.id]=\"'OBJECTIVE'\" [class.active]=\"activeSelector === 'objective'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'objective' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"checkBlank(responsibilityForm?.objective).trim() !=='' && !focus.objective\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/objectives.svg\" alt=\"im\"\r\n *ngIf=\"(checkBlank(responsibilityForm?.objective).trim() === '') || focus.objective\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"(checkBlank(responsibilityForm?.objective).trim() !== '') && !focus.objective\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Objective</label>\r\n <marx-editor [(ngModel)]=\"responsibilityForm.objective\" [editorConfig]=\"{mode: 'prime',\r\n colorPalette: true,\r\n id:'objective',\r\n link: true,\r\n placeholder: 'This option lets you specify an objective for the responsibility.'}\"></marx-editor>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Responsibility Center -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.RC\" [attr.id]=\"'RC'\"\r\n [class.active]=\"activeSelector === 'rc'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'rc' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"responsibilityForm?.rc?.length>0 && activeSelector !== 'rc'\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/responsibility-center.svg\"\r\n alt=\"\" *ngIf=\"responsibilityForm?.rc?.length==0 || activeSelector === 'rc'\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"responsibilityForm?.rc?.length>0 && activeSelector !== 'rc'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Responsibility Center </label>\r\n <div class=\"select\" *ngIf=\"responsibilityForm?.rc?.length === 0\">\r\n <div class=\"custom-input\" (click)=\"activateSelector('rc',true)\"\r\n aria-placeholder=\"Select the responsibility center or the responsibility centers for this responsibility.\">\r\n </div>\r\n <!-- <input type=\"text\" (click)=\"activateSelector('rc',true)\" placeholder=\"Select Responsibility Center(s)\" readonly> -->\r\n </div>\r\n <div class=\"selected\" *ngIf=\"responsibilityForm?.rc?.length > 0\"\r\n [class.readOnly]=\"openedFrom === 'RISK_TREATMENT'\">\r\n <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.rc?.length>1\"\r\n [class.plus]=\"responsibilityForm?.rc?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let rc of responsibilityForm?.rc?.slice(0,2)\"><i class=\"icons\"\r\n (click)=\"remove('rc',rc)\" *ngIf=\"openedFrom !== 'RISK_TREATMENT'\">&#xe90d;</i>\r\n {{rc?.item_name}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm?.rc?.length > 2\" type=\"button\" appPopover\r\n (click)=\"rc.popover()\" placement=\"right\" placement=\"right\">+\r\n {{responsibilityForm?.rc?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'rc' && openedFrom !== 'RISK_TREATMENT'\" class=\"edit\"\r\n type=\"button\" (click)=\"activateSelector('rc',true)\"><i class=\"icons\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n <app-popover #rc [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let rc of responsibilityForm?.rc | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('rc',rc)\">&#xe90d;</i>\r\n {{ rc.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Program -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.PROGRAM\" [attr.id]=\"'PROGRAM'\" [class.active]=\"activeSelector === 'program'\" [class.disabled]=\"activeSelector && activeSelector !== 'program' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"responsibilityForm?.program?.length>0 && activeSelector !== 'program'\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg\" alt=\"\" *ngIf=\"responsibilityForm?.program?.length==0 || activeSelector === 'program'\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"responsibilityForm?.program?.length>0 && activeSelector !== 'program'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Program</label>\r\n <div class=\"select\" *ngIf=\"responsibilityForm?.program?.length ==0\">\r\n <div class=\"custom-input\" (click)=\"activateSelector('program',true)\" aria-placeholder=\"Select the Program or Program Categories that this responsibility relates to.\"></div>\r\n <!-- <input type=\"text\" (click)=\"activateSelector('program',true)\" placeholder=\"Select Responsibility program(s)\" readonly> -->\r\n </div>\r\n <div class=\"selected\" *ngIf=\"responsibilityForm?.program?.length > 0\">\r\n <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.program?.length>1\" [class.plus]=\"responsibilityForm?.program?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let program of responsibilityForm?.program\"><i class=\"icons\" *ngIf=\"false\" (click)=\"remove('program',program)\">&#xe90d;</i> {{program?.name??'--'}}</span>\r\n <!-- <button *ngIf=\"responsibilityForm?.program?.length > 2\" class=\"count\" type=\"button\" appPopover (click)=\"program.popover()\" placement=\"right\">+ {{responsibilityForm?.program?.slice(2).length}}</button> -->\r\n <button *ngIf=\"responsibilityForm?.linkedProgram?.length > 1\" class=\"count\" type=\"button\" appPopover (click)=\"program.popover()\" placement=\"right\">+ {{responsibilityForm?.linkedProgram?.length - 1}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'program' && !hiddenList.includes('PROGRAM')\" class=\"edit\" type=\"button\" (click)=\"activateSelector('program',true)\"><i class=\"icons\">&#xe9ba;</i> Edit</button>\r\n </div>\r\n <app-popover #program [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li class=\"multiple-program\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"responsibilityForm?.program[0]?.name\" placement=\"bottom\"\r\n type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <!-- <i class=\"icons\">&#xe90d;</i> -->\r\n {{responsibilityForm?.program[0]?.name}}\r\n </span>\r\n <div class=\"primary-label\">PRIMARY</div>\r\n </div>\r\n </li>\r\n <li *ngFor=\"let program of responsibilityForm?.linkedProgram; let j = index\">\r\n <div class=\"avatar-card\" *ngIf=\"program?.category_id !== responsibilityForm?.program[0]?.category_id\">\r\n <span class=\"value\" [appTooltip]=\"program?.name\" placement=\"bottom\"\r\n type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <i *ngIf=\"!hiddenList?.includes('PROGRAM') && !program?.isViewOnlyProgram\" class=\"icons\" (click)=\"remove('program',program)\">&#xe90d;</i>\r\n {{ program?.name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <div *ngIf=\"responsibilityForm?.customTags?.length >0\">\r\n <ng-container *ngFor=\" let tag of responsibilityForm?.customTags\">\r\n <label class=\"vx-control-panel\">{{tag.tag_name}}</label>\r\n <input type=\"text\" [(ngModel)]=\"tag.value\" placeholder=\"{{tag.tag_name}}\">\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Responsibility Category -->\r\n <!-- <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.CATEGORY\" [attr.id]=\"'CATEGORY'\"\r\n [class.active]=\"activeSelector === 'category'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'category' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"responsibilityForm?.category?.length>0 && activeSelector !== 'category'\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg\" alt=\"\"\r\n *ngIf=\"responsibilityForm?.category?.length==0 || activeSelector === 'category'\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"responsibilityForm?.category?.length>0 && activeSelector !== 'category'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Responsibility Category </label>\r\n <div class=\"select\" *ngIf=\"responsibilityForm?.category?.length ==0\">\r\n <div class=\"custom-input\" (click)=\"activateSelector('category',true)\"\r\n aria-placeholder=\"Select the responsibility category or categories that this responsibility relates to.\">\r\n </div>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"responsibilityForm?.category?.length > 0\">\r\n <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.category?.length>1\"\r\n [class.plus]=\"responsibilityForm?.category?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let category of responsibilityForm?.category?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('category',category)\">&#xe90d;</i>\r\n {{category.item_name}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm?.category?.length > 2\" type=\"button\" appPopover\r\n (click)=\"category.popover()\" placement=\"right\">+\r\n {{responsibilityForm?.category?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'category'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('category',true)\"><i class=\"icons\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n <app-popover #category [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let category of responsibilityForm?.category | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('category',category)\">&#xe90d;</i>\r\n {{ category.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <div *ngIf=\"responsibilityForm?.customTags?.length >0\">\r\n <ng-container *ngFor=\" let tag of responsibilityForm?.customTags\">\r\n <label class=\"vx-control-panel\">{{tag.tag_name}}</label>\r\n <input type=\"text\" [(ngModel)]=\"tag.value\" placeholder=\"{{tag.tag_name}}\">\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Format & Evidence -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.FORMATE_EVIDENCE\"\r\n [attr.id]=\"'FORMATE_EVIDENCE'\" [class.active]=\"activeSelector === 'formate_evidence'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'formate_evidence' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <img *ngIf=\"this.responsibilityForm.formatAndEvidence.evidenceRequired == false && this.responsibilityForm.formatAndEvidence.formatFiles.length == 0 && this.responsibilityForm.formatAndEvidence.formatLinks?.length == 0\"\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/format-evidence.svg\" alt=\"im\">\r\n\r\n <svg *ngIf=\"this.responsibilityForm.formatAndEvidence.evidenceRequired || this.responsibilityForm.formatAndEvidence.formatFiles.length || this.responsibilityForm.formatAndEvidence.formatLinks?.length\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <app-format-and-evidence (updateFiles)=\"saveSelectedList('formate_evidence',$event)\"\r\n [mode]=\"'responsibility'\" [formatEvidanceData]=\"responsibilityForm?.formatAndEvidence\">\r\n </app-format-and-evidence>\r\n </div>\r\n\r\n </div>\r\n <!-- Assessment -->\r\n <div *ngIf=\"moreOptions?.ASSESSMENT\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\r\n [attr.id]=\"'ASSESSMENT'\" [class.active]=\"false\" [class.disabled]=\"false\">\r\n <div class=\"left\" [class.checked]=\"responsibilityForm.assessment?.assessment_id\">\r\n <img *ngIf=\"!responsibilityForm.assessment?.assessment_id\"\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/assessments.svg\" alt=\"im\">\r\n\r\n <svg *ngIf=\"responsibilityForm.assessment?.assessment_id\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">ASSESSMENTS</label>\r\n <div *ngIf=\"!responsibilityForm.assessment?.assessment_id\" class=\"select\">\r\n <input type=\"text\" (click)=\"activateSelector('isAssessment',true);isAssessment = true\"\r\n placeholder=\"Select an assessment for this responsibility\"\r\n [disabled]=\"responsibilityForm.checkpoints?.length\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"responsibilityForm.assessment?.assessment_id\">\r\n <div class=\"chip-container\" [class.more-one]=\"false\" [class.plus]=\"false\">\r\n <span class=\"chip with-question\">\r\n <span class=\"value\"\r\n [appTooltip]=\"responsibilityForm.assessment?.assessmentDetails?.assessment_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\"><i\r\n class=\"icons\"\r\n (click)=\"remove('assessment',category)\">&#xe90d;</i>{{responsibilityForm.assessment?.assessmentDetails?.assessment_name}}</span>\r\n <span class=\"label\">{{responsibilityForm.assessment?.assessmentDetails?.questions}}\r\n {{responsibilityForm.assessment?.assessmentDetails?.questions > 1 ? 'Questions':\r\n 'Question'}}</span>\r\n </span>\r\n </div>\r\n <button (click)=\"activateSelector('isAssessment',true);isAssessment = true\" class=\"edit\"\r\n type=\"button\">\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <!-- Checkpoints -->\r\n <!-- *ngIf=\"moreOptions.checkpoints\" -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.CHECKPOINTS\"\r\n [attr.id]=\"'CHECKPOINTS'\" [class.active]=\"activeSelector === 'checkpoints'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'checkpoints' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/checkpoints.svg\" alt=\"im\"\r\n *ngIf=\"responsibilityForm?.checkpoints?.length==0 || activeSelector === 'checkpoints'\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"responsibilityForm?.checkpoints?.length>0 && activeSelector !== 'checkpoints'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n <!-- {{responsibilityForm.checkpoints|json}}\r\n {{responsibilityForm.checkpointInstruction}} -->\r\n\r\n Checkpoints\r\n <!-- <button *ngIf=\"responsibilityForm?.checkpoints?.length === 0\" class=\"button\"\r\n (click)=\"activateSelector('checkpoints',true)\">+ Add Checkpoints</button> -->\r\n </label>\r\n <div class=\"select button-sec\" *ngIf=\"responsibilityForm?.checkpoints?.length === 0\">\r\n <input [disabled]=\"!responsibilityForm.checkpoints?.length\" type=\"text\"\r\n (click)=\"activateSelector('checkpoints',true)\"\r\n placeholder=\"Add checkpoints for this responsibility\" readonly>\r\n <button [disabled]=\"!responsibilityForm.checkpoints?.length\"\r\n (click)=\"activateSelector('checkpoints',true)\" type=\"button\">Add Checkpoints</button>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"responsibilityForm.checkpoints?.length > 0\">\r\n <div class=\"chip-container checkpoints\" [class.more-one]=\"responsibilityForm.checkpoints?.length>1\"\r\n [class.plus]=\"responsibilityForm.checkpoints?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let checkpoint of responsibilityForm.checkpoints?.slice(0,1)\">\r\n {{checkpoint?.label}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm.checkpoints?.length > 1\" type=\"button\"\r\n appPopover (click)=\"checkpoint.popover()\" placement=\"right\">+\r\n {{responsibilityForm.checkpoints?.length- 1}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'checkpoints'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('checkpoints',true)\">\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"this.responsibilityForm.checkpoints?.length\" class=\"assessment-text\">\r\n <i class=\"icons alert-icon\">&#xe930;</i>\r\n <span>You can now use the new <strong>Checkpoints </strong>or <strong>Assessments</strong> feature\r\n instead of the old checkpoints functionality to create analytical questions. <button\r\n class=\"remove-btn\" (click)=\"onRemoveCheckpoints('checkpoint')\">Remove Checkpoints</button> to\r\n continue.</span>\r\n </div>\r\n <app-popover #checkpoint [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let checkpoint of responsibilityForm.checkpoints | slice: 1; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n {{ checkpoint?.label }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n <!-- New Checkpoints -->\r\n <!-- *ngIf=\"moreOptions.checkpoints\" -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.CHECKPOINTS_NEW\"\r\n [attr.id]=\"'CHECKPOINTS-NEW'\" [class.active]=\"activeSelector === 'checkpoints-new'\">\r\n <div class=\"left\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/checkpoints.svg\" alt=\"im\"\r\n *ngIf=\"responsibilityForm?.checkpoints?.length==0 || activeSelector === 'checkpoints'\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"checkpointCount > 0 && activeSelector !== 'checkpoints'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n <!-- {{responsibilityForm.checkpoints|json}}\r\n {{responsibilityForm.checkpointInstruction}} -->\r\n\r\n Checkpoints\r\n <!-- <span class=\"checkpoint-version\"> V2.0</span> -->\r\n <!-- <button class=\"button\"\r\n (click)=\"activateSelector('checkpoints-new',true)\">+ Add Checkpoints</button> -->\r\n </label>\r\n <div class=\"select button-sec\" *ngIf=\"checkpointCount === 0\">\r\n <input type=\"text\" (click)=\"activateSelector('checkpoints-new',true)\"\r\n placeholder=\"Add checkpoints for this responsibility\" readonly>\r\n <button (click)=\"activateSelector('checkpoints-new',true)\" type=\"button\">Add Checkpoints</button>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"checkpointCount > 0\">\r\n <div class=\"chip-container checkpoints\" [class.more-one]=\"checkpointCount > 0\">\r\n <span class=\"chip\">\r\n <i class=\"icons\" (click)=\"onRemoveCheckpoints('new-checkpoints')\">&#xe90d;</i>\r\n {{checkpointCount}} {{checkpointCount > 1 ? 'Questions': 'Question'}}</span>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'checkpoints-new'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('checkpoints-new',true)\">\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </div>\r\n <app-popover #checkpoint [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let checkpoint of responsibilityForm.checkpoints | slice: 1; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n {{ checkpoint?.label }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n <!-- Risk Classification -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.RISK_CLASSIFICATION\"\r\n [attr.id]=\"'RISK_CLASSIFICATION'\" [class.active]=\"activeSelector === 'riskCalculator'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'riskCalculator' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/risks.svg\" alt=\"im\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Risk Classification\r\n <button (click)=\"activateSelector('riskCalculator',true)\" class=\"button\">+ Risk Calculator</button>\r\n </label>\r\n\r\n <div class=\"classification\">\r\n <label class=\"low\" *ngFor=\"let risk of riskClassification\" [ngClass]=\"[risk.class]\">\r\n <input type=\"radio\" name=\"classification\" [(ngModel)]=\"responsibilityForm.riskClass\"\r\n [value]=\"risk?.value\">\r\n <span>{{risk?.name}}</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Reviewer -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.REVIEWER\" [attr.id]=\"'REVIEWER'\"\r\n [class.active]=\"activeSelector === 'reviewerFrequency'|| activeSelector === 'reviewer'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'reviewer' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/reviewer.svg\" alt=\"\"\r\n *ngIf=\"responsibilityForm?.reviewers?.list?.length==0 || activeSelector === 'reviewer'\">\r\n\r\n <svg *ngIf=\"responsibilityForm?.reviewers?.list?.length>0 && activeSelector !== 'reviewer'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Reviewer</label>\r\n <div class=\"select\" *ngIf=\"((responsibilityForm?.reviewers?.list?.length == 0 && !featureFlag_groups)||((responsibilityForm?.reviewers?.list?.length == 0 && responsibilityForm?.groupReviewers?.list?.length == 0) && featureFlag_groups))\">\r\n <input type=\"text\" (click)=\"activateSelector('reviewer',true)\" placeholder=\"Select Reviewer\"\r\n readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"((responsibilityForm?.reviewers?.list?.length > 0 && !featureFlag_groups)||((responsibilityForm?.reviewers?.list?.length > 0 || responsibilityForm?.groupReviewers?.list?.length > 0 ) && featureFlag_groups))\">\r\n <div class=\"chip-container\" *ngIf=\"!featureFlag_groups\" [class.more-one]=\"responsibilityForm?.reviewers?.list?.length>1\"\r\n [class.plus]=\"responsibilityForm?.reviewers?.list?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let reviewer of responsibilityForm?.reviewers?.list?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('reviewer',reviewer)\">&#xe90d;</i>\r\n {{reviewer.member_name}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm?.reviewers?.list?.length > 2\" type=\"button\"\r\n appPopover (click)=\"reviewer.popover()\" placement=\"right\">+\r\n {{responsibilityForm?.reviewers?.list?.slice(2).length}}</button>\r\n </div>\r\n <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\r\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.reviewers?.list.length > 0 \">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"user.popover()\" placement=\"left\"> {{responsibilityForm?.reviewers?.list?.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.reviewers?.list.length > 0 && responsibilityForm?.groupReviewers?.list?.length > 0\" >&</span>\r\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.groupReviewers?.list.length > 0 \" >\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\" >USER GROUP(S)</span></span>\r\n <button class=\"count\" appPopover (click)=\"group.popover()\" placement=\"right\">{{responsibilityForm?.groupReviewers?.list?.length}}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'reviewer'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('reviewer',true)\"><i class=\"icons\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n <app-cs-radio\r\n [checked]=\"responsibilityForm.reviewers.sequentialWorkflow\" [name]=\"'reviewer'\" (checkedEvent)=\"onReviewerWorkflowChange('sequential')\" [class.disabled]=\"responsibilityForm?.groupReviewers?.list?.length > 0\">\r\n SEQUENTIAL<i class=\"icons\"\r\n [appTooltip]=\"'The responsibility will be sent for review one at a time in the sequence defined by you.'\"\r\n placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\">&#xe91f;</i>\r\n </app-cs-radio>\r\n <app-cs-radio\r\n [checked]=\"!responsibilityForm.reviewers.sequentialWorkflow\" [name]=\"'reviewer'\" (checkedEvent)=\"onReviewerWorkflowChange('anyReviewer')\">\r\n ANY REVIEWER CAN MARK THIS AS REVIEWED<i class=\"icons\"\r\n [appTooltip]=\"'The responsibility will be sent for review to all reviewers at the same time. If anyone of the reviewer reviews the responsibility, it will be considered as reviewed.'\"\r\n placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\">&#xe91f;</i>\r\n </app-cs-radio>\r\n <app-popover #reviewer [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let reviewer of responsibilityForm?.reviewers?.list | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('reviewer',reviewer)\">&#xe90d;</i>\r\n {{ reviewer.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #user [dontCloseonClick]=\"true\" >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let reviewer of responsibilityForm?.reviewers?.list ; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('reviewer',reviewer)\" >&#xe90d;</i>\r\n {{ reviewer.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #group [dontCloseonClick]=\"true\" >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of responsibilityForm?.groupReviewers?.list; let i = index\" >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('groupReviewer',group)\" >&#xe90d;</i>\r\n {{group.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Overseer -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.OVERSEER\" [attr.id]=\"'OVERSEER'\"\r\n [class.active]=\" activeSelector === 'overseerNotify' || activeSelector === 'overseer'\"\r\n [class.disabled]=\"activeSelector && !['overseerNotify','overseerNotify'].includes(activeSelector) && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/oversight.svg\" alt=\"\"\r\n *ngIf=\"(responsibilityForm?.overseers?.list?.length==0 && responsibilityForm?.overseers?.notifyList?.length == 0)|| activeSelector === 'overseerNotify' || activeSelector === 'overseer'\">\r\n <svg class=\"checkIcon\" *ngIf=\"(responsibilityForm?.overseers?.list?.length>0 || responsibilityForm?.overseers?.notifyList?.length>0)\r\n && !( activeSelector === 'overseerNotify' || activeSelector === 'overseer')\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Overseer </label>\r\n <div class=\"select\" *ngIf=\"((responsibilityForm?.overseers?.list?.length == 0 && !featureFlag_groups)||((responsibilityForm?.overseers?.list?.length == 0 && responsibilityForm?.overseersGroups?.list?.length == 0) && featureFlag_groups))\">\r\n <input type=\"text\" (click)=\"activateSelector('overseer',true)\"\r\n placeholder=\"Who should have oversight of the responsibility?\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"((responsibilityForm?.overseers?.list?.length > 0 && !featureFlag_groups)||((responsibilityForm?.overseers?.list?.length > 0 || responsibilityForm?.overseersGroups?.list?.length > 0 ) && featureFlag_groups))\">\r\n <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.overseers?.list?.length>1\"\r\n [class.plus]=\"responsibilityForm?.overseers?.list?.length>2\" *ngIf=\"!featureFlag_groups\" >\r\n <span class=\"chip\" *ngFor=\"let overseer of responsibilityForm?.overseers?.list?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('overseer',overseer)\">&#xe90d;</i>\r\n {{overseer.member_name}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm?.overseers?.list?.length > 2\" type=\"button\"\r\n appPopover (click)=\"overseers.popover()\" placement=\"right\">+\r\n {{responsibilityForm?.overseers?.list?.slice(2).length}}</button>\r\n </div>\r\n <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\r\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseers?.list.length > 0\" >\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"overseerUser.popover()\" placement=\"left\"> {{responsibilityForm?.overseers?.list?.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.overseers?.list.length > 0 && responsibilityForm?.overseersGroups?.list?.length > 0\" >&</span>\r\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseersGroups?.list?.length > 0 \" >\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\" >USER GROUP(S)</span></span>\r\n <button class=\"count\" appPopover (click)=\"overseerGroup.popover()\" placement=\"right\">{{responsibilityForm?.overseersGroups?.list?.length}}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'overseer'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('overseer',true)\"><i class=\"icons\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n\r\n <div class=\"select\" *ngIf=\"((responsibilityForm?.overseers?.notifyList?.length == 0 && !featureFlag_groups)||((responsibilityForm?.overseers?.notifyList?.length == 0 && responsibilityForm?.overseersGroups?.notifyList?.length == 0) && featureFlag_groups))\">\r\n <input type=\"text\" (click)=\"activateSelector('overseerNotify',true)\"\r\n placeholder=\"Who should be notified if the responsibility is not complet...\" readonly\r\n [appTooltip]=\"'Who should be notified if the responsibility is not completed?'\"\r\n placement=\"bottom\" delay=\"0\" [tooltipMandatory]=\"true\">\r\n </div>\r\n <div class=\"selected\" *ngIf=\"((responsibilityForm?.overseers?.notifyList?.length > 0 && !featureFlag_groups)||((responsibilityForm?.overseers?.notifyList?.length > 0 || responsibilityForm?.overseersGroups?.notifyList?.length > 0 ) && featureFlag_groups))\">\r\n <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.overseers?.notifyList?.length>1\"\r\n [class.plus]=\"responsibilityForm?.overseers?.notifyList?.length>2\" *ngIf=\"!featureFlag_groups\">\r\n <span class=\"chip\"\r\n *ngFor=\"let overseer of responsibilityForm?.overseers?.notifyList?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('overseerNotifyList',overseer)\">&#xe90d;</i>\r\n {{overseer.member_name}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm?.overseers?.notifyList?.length > 2\"\r\n type=\"button\" appPopover (click)=\"notify.popover()\" placement=\"right\">+\r\n {{responsibilityForm?.overseers?.notifyList?.slice(2).length}}</button>\r\n </div>\r\n <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\r\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseers?.notifyList.length > 0\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"notifyUser.popover()\" placement=\"left\"> {{responsibilityForm?.overseers?.notifyList?.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.overseers?.notifyList.length > 0 && responsibilityForm?.overseersGroups?.notifyList?.length > 0\" >&</span>\r\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseersGroups?.notifyList?.length > 0 \" >\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\" >USER GROUP(S)</span></span>\r\n <button class=\"count\" appPopover (click)=\"notifyGroup.popover()\" placement=\"right\">{{responsibilityForm?.overseersGroups?.notifyList?.length}}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'overseerNotify'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('overseerNotify',true)\"><i class=\"icons\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n <app-popover #overseers [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let overseer of responsibilityForm?.overseers?.list | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('overseer',overseer)\">&#xe90d;</i>\r\n {{ overseer?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerUser [dontCloseonClick]=\"true\" >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let overseers of responsibilityForm?.overseers?.list ; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('overseer',overseers)\" >&#xe90d;</i>\r\n {{ overseers?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerGroup [dontCloseonClick]=\"true\" >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let overseer of responsibilityForm?.overseersGroups?.list; let i = index\" >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('overseerGroup',overseer)\" >&#xe90d;</i>\r\n {{overseer?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #notify [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let overseer of responsibilityForm?.overseers?.notifyList | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('overseerNotifyList',overseer)\">&#xe90d;</i>\r\n {{ overseer?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #notifyUser [dontCloseonClick]=\"true\" >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let overseer of responsibilityForm?.overseers?.notifyList ; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('overseerNotifyList',overseer)\" >&#xe90d;</i>\r\n {{ overseer?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #notifyGroup [dontCloseonClick]=\"true\" >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of responsibilityForm?.overseersGroups?.notifyList; let i = index\" >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('overseerGroupNotifyList',group)\" >&#xe90d;</i>\r\n {{group?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Assurance -->\r\n\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.ASSURANCE\"\r\n [attr.id]=\"'ASSURANCE'\" [class.active]=\"activeSelector === 'assurance'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'assurance' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/reviewer.svg\" alt=\"\"\r\n *ngIf=\"responsibilityForm?.assuranceList?.length==0 || activeSelector === 'assurance'\">\r\n\r\n <svg *ngIf=\"responsibilityForm?.assuranceList?.length>0 && activeSelector !== 'assurance'\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Assurance</label>\r\n <div class=\"select\" *ngIf=\"responsibilityForm?.assuranceList?.length ==0\">\r\n <div class=\"custom-input\" (click)=\"activateSelector('assurance',true)\"\r\n aria-placeholder=\"Select the test plan categories that you would like to add this responsibility to.\">\r\n </div>\r\n <!-- <input type=\"text\" (click)=\"activateSelector('assurance',true)\"\r\n placeholder=\"Select the test plan categories that you would like to add...\"\r\n readonly [appTooltip]=\"'Select the test plan categories that you would like to add this responsibility to.'\" placement=\"bottom\" delay=\"0\" [tooltipMandatory]=\"true\"> -->\r\n </div>\r\n <div class=\"selected\" *ngIf=\"responsibilityForm?.assuranceList?.length > 0\">\r\n <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.assuranceList?.length>1\"\r\n [class.plus]=\"responsibilityForm?.assuranceList?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let assurance of responsibilityForm?.assuranceList?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('assurance',assurance)\">&#xe90d;</i>\r\n {{assurance.category_name}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm?.assuranceList?.length > 2\" type=\"button\"\r\n appPopover (click)=\"assurance.popover()\" placement=\"right\">+\r\n {{responsibilityForm?.assuranceList?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'assurance'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('assurance',true)\"><i class=\"icons\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n <app-popover #assurance [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let assurance of responsibilityForm?.assuranceList | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('assurance',assurance)\">&#xe90d;</i>\r\n {{ assurance.category_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\r\n *ngIf=\"moreOptions?.REQUIRES_AUDIT && responsibilityForm.rc.length > 0\" [attr.id]=\"'REQUIRES_AUDIT'\"\r\n [class.active]=\"activeSelector === 'requires_audit'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'requires_audit' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/audit.svg\" alt=\"\"\r\n *ngIf=\"responsibilityForm?.requiresAuditList?.length==0 || activeSelector === 'requires_audit'\">\r\n\r\n <svg *ngIf=\"responsibilityForm?.requiresAuditList?.length>0 && activeSelector !== 'requires_audit'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">REQUIRES AUDIT?</label>\r\n <div class=\"select\" *ngIf=\"responsibilityForm?.requiresAuditList?.length ==0\">\r\n <!-- <div class=\"custom-input\" (click)=\"activateSelector('assurance',true)\" aria-placeholder=\"Select the test plan categories that you would like to add this responsibility to.\"></div> -->\r\n <!-- <input type=\"text\" (click)=\"activateSelector('assurance',true)\"\r\n placeholder=\"Select the test plan categories that you would like to add...\"\r\n readonly [appTooltip]=\"'Select the test plan categories that you would like to add this responsibility to.'\" placement=\"bottom\" delay=\"0\" [tooltipMandatory]=\"true\"> -->\r\n\r\n <input type=\"text\" placeholder=\"If yes, select an Audit Category.\" readonly\r\n (click)=\"activateSelector('requires_audit',true)\">\r\n </div>\r\n <div class=\"selected\" *ngIf=\"responsibilityForm?.requiresAuditList?.length > 0\">\r\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.assuranceList?.length>1\" [class.plus]=\"responsibilityForm?.assuranceList?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let assurance of responsibilityForm?.assuranceList?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('assurance',assurance)\">&#xe90d;</i>\r\n {{assurance.category_name}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm?.assuranceList?.length > 2\" type=\"button\"\r\n appPopover (click)=\"assurance.popover()\" placement=\"right\">+\r\n {{responsibilityForm?.assuranceList?.slice(2).length}}</button>\r\n </div> -->\r\n <!-- <button *ngIf=\"activeSelector !== 'assurance'\" class=\"edit\" type=\"button\" (click)=\"activateSelector('assurance',true)\"><i\r\n class=\"icons\">&#xe90c;</i>\r\n Edit</button> -->\r\n\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"><i class=\"icons\" (click)=\"remove('requires_audit',overseer)\">&#xe90d;</i>\r\n {{responsibilityForm?.requiresAuditList[0]?.category_name}}</span>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('requires_audit',true)\"><i\r\n class=\"icons\">&#xe90c;</i> Edit</button>\r\n <!-- class=\"icons\">&#xe9ba;</i>\r\n Edit</button> -->\r\n </div>\r\n <ng-container *ngIf=\"responsibilityForm?.requiresAuditList?.length\">\r\n <label class=\"vx-control-panel vx-mt-8\">\r\n SAMPLE SIZE\r\n <app-cs-switch [(ngValue)]=\"isSample\" (ngValueChange)=\"switchEnable($event)\"></app-cs-switch>\r\n </label>\r\n <div class=\"sample-part\" [class.disabled]=\"!isSample\">\r\n <app-cs-radio value=\"0\" class=\"sample-radio\" (click)=\"selectedSampleData(0)\"\r\n [checked]=\"selectedSample === 0\">\r\n <div class=\"name\">COUNT</div>\r\n <input type=\"number\" placeholder=\"--\" (keypress)=\"checkInputValue($event)\"\r\n [(ngModel)]=\"sampleValue\">\r\n </app-cs-radio>\r\n <div class=\"or\">OR</div>\r\n <app-cs-radio value=\"1\" class=\"sample-radio\" (click)=\"selectedSampleData(1)\"\r\n [checked]=\"selectedSample === 1\">\r\n <div class=\"name\">PERCENTAGE</div>\r\n <input type=\"number\" (keypress)=\"checkInputValue($event)\" [(ngModel)]=\"samplePercentage\"\r\n placeholder=\"--\">\r\n </app-cs-radio>\r\n </div>\r\n <label class=\"vx-control-panel vx-mt-8\">SET A REMINDER IF THE AUDIT PLAN IS NOT CREATED.</label>\r\n <div class=\"reminder-part\">\r\n Send reminder every <input type=\"number\" value=\"2\" [(ngModel)]=\"sendAuditRemindersValue\"> Day by\r\n <div class=\"picker-group\">\r\n <input class=\"time\" aria-label=\"12hr format\" [(ngModel)]=\"auditTime\"\r\n [ngxTimepicker]=\"dailyTime\" placeholder=\"auditTime.toUpperCase()\" type=\"text\"\r\n [min]=\"currentTime\" readonly>\r\n <i class=\"icons\">&#xe955;</i>\r\n <ngx-material-timepicker #dailyTime [defaultTime]=\"auditTime\">\r\n </ngx-material-timepicker>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- <app-popover #assurance [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let assurance of responsibilityForm?.assuranceList | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('assurance',assurance)\">&#xe90d;</i>\r\n {{ assurance.category_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover> -->\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<app-users-radio-list *ngIf=\"activeSelector === 'assignors'\" [usersList]=\"assignorsList\"\r\n [selectedUsers]=\"responsibilityForm.assignors.list\" [itemEmailKey]=\"'member_email'\" [userIdKey]=\"'member_id'\"\r\n [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"saveSelectedList('assignors',$event)\"\r\n (closeUsersList)=\"activeDeselector()\">\r\n</app-users-radio-list>\r\n\r\n<ng-container *ngIf=\"activeSelector === 'assignees'\">\r\n <app-group-users-list *ngIf=\"isEntrust || responsibilityForm?.assignees?.whoCanComplete === 'ANY_ONE'\" [openedFrom]=\"openedFrom\" [usersList]=\"allUsersList\" [disabledId]=\"disableAssigneeIds\" [fromResponsibility] = \"'Assignee'\" [reviewerIds]=\"reviewerIds\" [overseerIds]=\"overseerIds\" [assignorId]=\"assignorId\"\r\n [groupsList]=\"groupsList\" [assigneeGroupsList] =\"groupAssigneeList\" [selectedUsers]=\"responsibilityForm?.assignees?.list\" [selectedGroups]=\"responsibilityForm?.assigneeGroups?.list\" [userIdKey]=\"'my_member_id'\" [groupIdKey]=\"'group_id'\"\r\n (saveSelectedList)=\"saveSelectedList('assignees',$event)\" (closeUsersList)=\"activeDeselector()\" [groupsEnabled]=\"featureFlag_groups\" >\r\n </app-group-users-list>\r\n <app-users-radio-list *ngIf=\"!isEntrust && responsibilityForm.assignees.whoCanComplete !== 'ANY_ONE'\" [itemEmailKey]=\"'employee_email'\" [usersList]=\"allUsersList\"\r\n [selectedUsers]=\"responsibilityForm.assignees.list\" [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'employee_name'\" [disabledId]=\"disableRadioAssignee\" [fromResponsibility] = \"'Assignee'\" [reviewerIds]=\"reviewerIds\" [overseerIds]=\"overseerIds\" [assignorId]=\"assignorId\"\r\n (saveSelectedList)=\"saveSelectedList('assignees',$event)\" (closeUsersList)=\"activeDeselector()\">\r\n </app-users-radio-list>\r\n</ng-container>\r\n\r\n\r\n\r\n<app-checkpoints *ngIf=\"activeSelector === 'checkpoints'\"\r\n [checkpointInstruction]=\"responsibilityForm?.checkpointInstruction\"\r\n [checkpointData]=\"responsibilityForm?.checkpoints\" (saveCheckPoint)=\"saveSelectedList('checkpoints',$event)\"\r\n (closeCheckPoint)=\"activeDeselector()\"></app-checkpoints>\r\n<app-frequency-container *ngIf=\"activeSelector === 'frequency'\" [frequencyDetails]=\"frequencyDetails\" [feature]=\"feature\"\r\n (selectedFrequency)=\"frequencyData($event)\" [mode]=\"'responsibility'\" (closeFrequency)=\"activeDeselector()\">\r\n</app-frequency-container>\r\n\r\n<app-responsibility-centers-list *ngIf=\"activeSelector === 'rc'\" [responsibilityCentersList]=\"responsibilityCentersList\"\r\n [radioSelection]=\"(mode == 'EDIT')?true:false\" [selectedResponsibilityCenters]=\"responsibilityForm.rc\"\r\n [rcIdKey]=\"'item_id'\" (saveSelectedList)=\"saveSelectedList('rc',$event)\" (closeRcList)=\"activeDeselector()\">\r\n</app-responsibility-centers-list>\r\n\r\n<app-category-multi-select *ngIf=\"activeSelector === 'category'\" [categoryList]=\"categories\"\r\n [allCategories]=\"allCategories\" [categoryIdKey]=\"'category_id'\" [selectedCategories]=\"responsibilityForm.category\"\r\n (saveSelectedCategory)=\"saveSelectedList('category',$event)\" (closeCategoriesList)=\"activeDeselector()\">\r\n</app-category-multi-select>\r\n\r\n<!-- [hideProgramsList]=\"(selectedProgram && !(this.selectedProgram?.programType === 0 && this.selectedProgram?.name?.toLowerCase() === 'uncategorized' )) ? true : false\" -->\r\n<app-program-listing *ngIf=\"activeSelector === 'program'\" [programsList]=\"programsList\"\r\n [selectedCategories]=\"responsibilityForm.category | refDisconnect\" [selectedProgram]=\"responsibilityForm.program | refDisconnect\"\r\n (saveSelectedProgram)=\"saveSelectedList('program',$event)\" (closeEvent)=\"activeDeselector()\" [linkedProgram]=\"responsibilityForm?.linkedProgram\" [mode]=\"(this.selectedProgram?.programType === 0 && this.selectedProgram?.name?.toLowerCase() === 'uncategorized' ) ? '' : mode\"\r\n [openedFrom]=\"openedFrom\" [responsibilityId]=\"responsibilityId\"></app-program-listing>\r\n\r\n<app-owner-list *ngIf=\"activeSelector === 'reviewer' && !featureFlag_groups\" [listHeading]=\"'Select a Reviewer'\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [usersList]=\"allUsersList\" [showWorkflow]=\"true\"\r\n [selectedUsers]=\"responsibilityForm.reviewers.list\" [userIdKey]=\"'employee_id'\" [itemEmailKey]=\"'employee_email'\"\r\n [itemNameKey]=\"'member_name'\" [disabledIds]=\"disableReviewerIds\"\r\n (saveSelectedList)=\"saveSelectedList('reviewer',$event);activateSelector('reviewerFrequency',true)\"\r\n (closeUsersList)=\"activeDeselector()\" [mode]=\"mode\" [fromResponsibility] = \"'Reviewer'\" [assignorId]=\"assignorId\" [assigneeIds]=\"assigneeIds\" [overseerIds]=\"overseerIds\"\r\n [reviewerWorkflowType]=\"(responsibilityForm?.reviewers?.sequentialWorkflow) ? 'SEQUENTIAL' : 'ANY REVIEWER CAN MARK THIS AS REVIEWED'\"\r\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\">\r\n</app-owner-list>\r\n<user-group-list *ngIf=\"activeSelector === 'reviewer' && featureFlag_groups\" [selectedReviewer]=\"true\" [userlist]=\"reviewerMemberIdsList\" [groupEnabled]=\"true\" [groupList]=\"groupReviewerList\" [selectedGroups]=\"responsibilityForm?.groupReviewers?.list\"\r\n [selectedUsers] =\"responsibilityForm?.reviewers?.list\" (cancel)=\"activeDeselector()\" (save) = \"saveSelectedList('reviewer',$event);activateSelector('reviewerFrequency',true)\" [mode]=\"mode\" [disabledIds]=\"disableReviewerIds\" [fromResponsibility] = \"'Reviewer'\" [assignorId]=\"assignorId\" [assigneeIds]=\"assigneeIds\" [overseerIds]=\"overseerIds\"\r\n (reviewerWorkflowTypeChange) = \"reviewerTypeChange($event)\" [reviewerWorkflowType]=\"(responsibilityForm?.reviewers?.sequentialWorkflow) ? 'SEQUENTIAL' : 'ANY REVIEWER CAN MARK THIS AS REVIEWED'\" [featureflag]=\"featureFlag_groups\">\r\n </user-group-list>\r\n<app-owner-list *ngIf=\"activeSelector === 'overseer' && !featureFlag_groups\" [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\"\r\n [usersList]=\"allUsersList\" [selectedUsers]=\"responsibilityForm.overseers.list\" [userIdKey]=\"'employee_id'\" [fromResponsibility] = \"'Overseer'\" [assignorId]=\"assignorId\" [assigneeIds]=\"assigneeIds\" [reviewerIds]=\"reviewerIds\"\r\n [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"saveSelectedList('overseer',$event)\" [disabledIds]=\"disableOverseerIds\"\r\n (closeUsersList)=\"activeDeselector()\" [itemEmailKey]=\"'employee_email'\" >\r\n</app-owner-list >\r\n<user-group-list *ngIf=\"activeSelector === 'overseer' && featureFlag_groups\" [groupEnabled]=\"true\" [groupList]=\"groupOverseerList\" [selectedGroups]=\"responsibilityForm?.overseersGroups?.list\"\r\n[userlist]=\"overseersList\" [selectedUsers]=\"responsibilityForm.overseers.list\" [disabledIds]=\"disableOverseerIds\" [fromResponsibility] = \"'Overseer'\" [assignorId]=\"assignorId\" [assigneeIds]=\"assigneeIds\" [reviewerIds]=\"reviewerIds\"\r\n (save)=\"saveSelectedList('overseer',$event)\" (cancel)=\"activeDeselector()\" [featureflag]=\"featureFlag_groups\">\r\n</user-group-list>\r\n\r\n<app-owner-list *ngIf=\"activeSelector ==='overseerNotify'&& !featureFlag_groups\" [singularText]=\"'User selected'\"\r\n [pluralText]=\"'Users selected'\" [usersList]=\"allUsersList\" [disabledIds]=\"disableOverseerIds\" [fromResponsibility] = \"'Overseer'\" [assignorId]=\"assignorId\" [assigneeIds]=\"assigneeIds\" [reviewerIds]=\"reviewerIds\"\r\n [selectedUsers]=\"responsibilityForm.overseers.notifyList\" [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'member_name'\"\r\n (saveSelectedList)=\"saveSelectedList('overseerNotify',$event)\" (closeUsersList)=\"activeDeselector()\"\r\n [itemEmailKey]=\"'employee_email'\"></app-owner-list>\r\n <user-group-list *ngIf=\"activeSelector ==='overseerNotify' && featureFlag_groups\" [userlist]=\"overseersList\" [groupEnabled]=\"true\" [groupList]=\"groupOverseerList\" [selectedGroups]=\"responsibilityForm?.overseersGroups?.notifyList\"\r\n [selectedUsers]=\"responsibilityForm.overseers.notifyList\" [disabledIds]=\"disableOverseerIds\" [fromResponsibility] = \"'Overseer'\" [assignorId]=\"assignorId\" [assigneeIds]=\"assigneeIds\" [reviewerIds]=\"reviewerIds\"\r\n (save)=\"saveSelectedList('overseerNotify',$event)\" (cancel)=\"activeDeselector()\" [featureflag]=\"featureFlag_groups\">\r\n </user-group-list>\r\n\r\n<app-owner-list *ngIf=\"activeSelector === 'assurance'\" [singularText]=\"'Test Category selected'\"\r\n [pluralText]=\"'Test Categories selected'\" [searchPlaceholder]=\"'Search Test Category...'\"\r\n [listHeading]=\"'Select Test Categories'\" [usersList]=\"assuranceCategoriesList\"\r\n [noDataText]=\"'No Test Categories Found'\" [selectedUsers]=\"responsibilityForm.assuranceList\"\r\n [userIdKey]=\"'category_id'\" [itemEmailKey]=\"'category_name'\" [itemNameKey]=\"'category_name'\"\r\n (saveSelectedList)=\"saveSelectedList('assurance',$event)\" (closeUsersList)=\"activeDeselector()\"\r\n [searchPlaceholder]=\"'Search Category'\">\r\n</app-owner-list>\r\n\r\n<app-audit-category-list *ngIf=\"activeSelector === 'requires_audit'\" (closeList)=\"activeDeselector()\"\r\n [auditCategory]=\"assuranceRequiresAuditList\" (saveSelectedList)=\"saveSelectedList('requires_audit',$event)\"\r\n [selectedData]=\"responsibilityForm?.requiresAuditList[0]\"></app-audit-category-list>\r\n\r\n<app-loader-inline *ngIf=\"loader\"></app-loader-inline>\r\n<app-framework-list *ngIf=\"activeSelector === 'framework'\" (assignControl)=\"assignFromFramework($event)\"\r\n[previousSelectedValues]=\"selectedFrameworkValues\"\r\n (closeFramework)=\"activeDeselector()\" (entrustFramework)=\"entrustFramework($event)\"></app-framework-list>\r\n\r\n<!-- risk-calculator here -->\r\n<app-risk-classification *ngIf=\"activeSelector === 'riskCalculator' \" [currentRiskValue]=\"responsibilityForm.riskClass\"\r\n (saveList)=\"saveSelectedList('calculatedrisk',$event)\" (closeList)=\"activeDeselector()\">\r\n</app-risk-classification>\r\n\r\n<app-review-frequency *ngIf=\"activeSelector === 'reviewerFrequency'\"\r\n [reviewCompleteDays]=\"responsibilityForm.reviewers.reviewFrequency.reviewCompleteDays\"\r\n [reviewNOtCompletedDays]=\"responsibilityForm.reviewers.reviewFrequency.reviewNOtCompletedDays\"\r\n (saveReviewFrequency)=\"saveSelectedList('reviewFrequency',$event)\"\r\n (closeReviewFrequency)=\"activeDeselector();activateSelector('reviewer',false);responsibilityForm.reviewers.list = [];responsibilityForm.groupReviewers.list = []\"\r\n (backToUserList)=\"activeDeselector();activateSelector('reviewer',true)\">\r\n</app-review-frequency>\r\n\r\n\r\n<app-assessment-list *ngIf=\"isAssessment\" [program_ids]=\"responsibilityForm.program[0]?._id\"\r\n (cancelAssessment)=\"isAssessment = false; activateSelector('isAssessment', false)\"\r\n [isEdit]=\"responsibilityForm?.assessment?.assessment_id ? true : false\"\r\n [selectedAssessment]=\"responsibilityForm?.assessment\"\r\n (onAssessmentSelect)=\"onAssessmentSelect($event);activateSelector('isAssessment', false)\"></app-assessment-list>\r\n\r\n<app-smiley-dialog-inline *ngIf=\"showSmiley\" [message]=\"smileyMessage\" [actionButtons]=\"actionButtons\"\r\n (action)=\"action($event)\" (closeSmiley)=\"closeSmiley($event)\"></app-smiley-dialog-inline>\r\n\r\n<div class=\"import\" *ngIf=\"activeSelector === 'checkpoints-new'\">\r\n <app-create-assessment-container #editor [openPortal]=\"'RESPONSIBILITY_CHECKPOINT'\"\r\n (postAssessment)=\"postAssessment($event)\" (setIsUploaded)=\"setIsUploaded($event)\"\r\n [checkpointJSON]=\"responsibilityForm.new_checkpoints\">\r\n </app-create-assessment-container>\r\n</div>\r\n",
2887
+ template: "<div class=\"workflw-compliance\" *ngIf=\"!showSmiley\">\r\n\r\n <div *ngIf=\"mode !== 'EDIT'\" class=\"form-group-row \" [class.active]=\"activeSelector === 'assignors'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'assignors' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\"\r\n [class.checked]=\"responsibilityForm?.assignors?.list?.length>0 && activeSelector !== 'assignors'\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/im-creating.svg\" alt=\"im\"\r\n *ngIf=\"responsibilityForm?.assignors?.list?.length==0 || activeSelector === 'assignors'\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"responsibilityForm?.assignors?.list?.length>0 && activeSelector !== 'assignors'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n I am creating this responsibility on behalf of someone else\r\n <app-cs-switch [ngValue]=\"responsibilityForm.assignors.enable\"\r\n (ngValueChange)=\"responsibilityForm.assignors.enable = $event; responsibilityForm.assignors.list = [];\">\r\n </app-cs-switch>\r\n </label>\r\n <div class=\"select\"\r\n *ngIf=\"responsibilityForm?.assignors?.list?.length === 0 || activeSelector === 'assignors'\">\r\n <input type=\"text\" (click)=\"activateSelector('assignors',true)\"\r\n placeholder=\"Who is responsible for managing this responsibility?\" readonly\r\n [disabled]=\"!responsibilityForm?.assignors?.enable\">\r\n </div>\r\n <div class=\"selected\"\r\n *ngIf=\"responsibilityForm?.assignors?.list?.length > 0 && activeSelector !== 'assignors'\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\" *ngFor=\"let b_user of responsibilityForm?.assignors?.list?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('assignors',b_user)\">&#xe90d;</i>\r\n {{b_user.member_name}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm?.assignors?.list?.length > 2\" type=\"button\"\r\n appPopover (click)=\"behalf.popover()\" placement=\"right\">+\r\n {{responsibilityForm?.assignors?.list?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'assignors'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('assignors',true)\"><i class=\"icons\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n <app-popover #behalf [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let b_user of responsibilityForm?.assignors?.list | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('assignors',b_user)\">&#xe90d;</i>\r\n {{ b_user.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <p *ngIf=\"invalidType === 'whom'\" [appScrollInView]=\"true\" class=\"error-message\">Please select the\r\n person responsible for managing this responsibility.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- What -->\r\n\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'framework'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'responsibilityName' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\"\r\n [class.checked]=\"responsibilityForm?.responsibility?.name.trim() !== '' && !focus.responsibilityName\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg\" alt=\"im\"\r\n *ngIf=\"(responsibilityForm?.responsibility?.name.trim() === '') || focus.responsibilityName\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"responsibilityForm?.responsibility?.name.trim() !== '' && !focus.responsibilityName\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n What? <span class=\"required\">*</span>\r\n <button *ngIf=\"isFrameworkAvailable && mode !== 'EDIT' && openedFrom !=='RISK_TREATMENT'\"\r\n (click)=\"activateSelector('framework',true)\" class=\"button\">Select From A framework</button>\r\n </label>\r\n <span *ngIf=\"responsibilityForm?.responsibility?.keyResponsibility\" class=\"indicator\"\r\n [appTooltip]=\"'This responsibility is marked as key responsibility.'\" placement=\"bottom\"\r\n type=\"black\" delay=\"0\" [tooltipMandatory]=\"true\">\r\n <i class=\"icons\">&#xea70;</i>\r\n </span>\r\n <input *ngIf=\"responsibilityForm?.responsibility?.name.trim() =='' || !isEditWhat\" type=\"text\"\r\n [ngModel]=\"responsibilityForm.responsibility.name\" placeholder=\"What is the responsibility?\"\r\n (change)=\"whatChanged($event)\" (focusin)=\"activateSelector('responsibilityName',true)\"\r\n (focusout)=\"activeDeselector()\" (clickOutside)=\"testFunction()\" #what>\r\n <div class=\"selected\" *ngIf=\"responsibilityForm?.responsibility?.name.trim() !='' && isEditWhat\">\r\n <div class=\"chip-container\">\r\n <span class=\"value\">{{responsibilityForm.responsibility?.name}}</span>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"onEditWhat($event)\"><i class=\"icons\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n <p *ngIf=\"invalidType === 'what'\" [appScrollInView]=\"true\" class=\"error-message\">Please enter a name for\r\n this responsibility.</p>\r\n <div class=\"switch-row align-right\">\r\n <app-cs-switch [ngValue]=\"responsibilityForm.responsibility?.keyResponsibility\"\r\n (ngValueChange)=\"responsibilityForm.responsibility.keyResponsibility = $event\">Key\r\n Responsibility\r\n </app-cs-switch>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Who -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'assignees'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'assignees' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\"\r\n [class.checked]=\"responsibilityForm?.assignees?.list?.length>0 && activeSelector !== 'assignees'\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/who.svg\" alt=\"im\"\r\n *ngIf=\"responsibilityForm?.assignees?.list?.length==0 || activeSelector === 'assignees'\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"responsibilityForm?.assignees?.list?.length>0 && activeSelector !== 'assignees'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Who? <span class=\"required\">*</span></label>\r\n\r\n <div class=\"select\" *ngIf=\"(responsibilityForm?.assignees?.list?.length == 0 && (!featureFlag_groups||(responsibilityForm?.assigneeGroups?.list?.length == 0 && featureFlag_groups)))\">\r\n <input type=\"text\" (click)=\"activateSelector('assignees',true)\"\r\n placeholder=\"Who is responsible for completing the responsibility?\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"((responsibilityForm?.assignees?.list?.length > 0 && !featureFlag_groups)||((responsibilityForm?.assignees?.list?.length > 0 || responsibilityForm?.assigneeGroups?.list?.length > 0 ) && featureFlag_groups))\">\r\n <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.assignees?.length>1\"\r\n [class.plus]=\"responsibilityForm?.assignees?.length>2\" *ngIf=\"!featureFlag_groups\">\r\n <span class=\"chip\" *ngFor=\"let e_user of responsibilityForm?.assignees?.list?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('assignees',e_user)\">&#xe90d;</i>\r\n {{e_user.member_name}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm?.assignees?.list?.length > 2\" type=\"button\"\r\n appPopover (click)=\"assignees.popover()\" placement=\"right\">+\r\n {{responsibilityForm?.assignees?.list?.slice(2).length}}</button>\r\n </div>\r\n <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\r\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.assignees?.list?.length > 0\" >\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"user.popover()\" placement=\"left\"> {{responsibilityForm?.assignees?.list?.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.assignees?.list?.length > 0 && responsibilityForm?.assigneeGroups?.list?.length > 0\" >&</span>\r\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.assigneeGroups?.list?.length\" >\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\" >USER GROUP(S)</span></span>\r\n <button class=\"count\" appPopover (click)=\"group.popover()\" placement=\"right\">{{responsibilityForm?.assigneeGroups?.list?.length}}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'assignees' && (!featureFlag_groups || (featureFlag_groups && (!allGroupAssignee || mode !== 'EDIT')))\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('assignees',true)\"><i class=\"icons\">&#xe9ba;</i>\r\n Edit</button>\r\n <app-popover #user [dontCloseonClick]=\"true\" >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let e_user of responsibilityForm?.assignees?.list\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('assignees',e_user)\" >&#xe90d;</i>\r\n {{ e_user.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #group [dontCloseonClick]=\"true\" >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of responsibilityForm?.assigneeGroups?.list\" >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i *ngIf=\"(!featureFlag_groups || (featureFlag_groups && (!allGroupAssignee || mode !== 'EDIT')))\" class=\"icons\" (click)=\"remove('groupassignees',group)\" >&#xe90d;</i>\r\n {{group.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n <p *ngIf=\"invalidType === 'who'\" [appScrollInView]=\"true\" class=\"error-message\">Please select the person\r\n responsible for completing this responsibility.</p>\r\n <ng-container *ngIf=\"!isGroupAssigned\">\r\n <app-cs-radio *ngIf=\"mode !== 'EDIT'\"\r\n (checkedEvent)=\"responsibilityForm.assignees.whoCanComplete = 'ALL'\"\r\n [checked]=\"responsibilityForm.assignees.whoCanComplete == 'ALL'\" [name]=\"'what'\">ALL SELECTED\r\n PERSONS NEED TO\r\n COMPLETE THIS<i class=\"icons\"\r\n [appTooltip]=\"'If selected, separate responsibilities will be created for each person.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\">&#xe91f;</i>\r\n </app-cs-radio>\r\n <app-cs-radio *ngIf=\"mode !== 'EDIT'\"\r\n (checkedEvent)=\"responsibilityForm.assignees.whoCanComplete = 'ANY_ONE'\"\r\n [checked]=\"responsibilityForm.assignees.whoCanComplete == 'ANY_ONE'\" [name]=\"'what'\">ANY SELECTED\r\n PERSON CAN COMPLETE\r\n THIS <i class=\"icons\" [appTooltip]=\"'If selected, only one responsibility will be created.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\">&#xe91f;</i>\r\n </app-cs-radio>\r\n\r\n <div class=\"switch-row align-right\" *ngIf=\"(mode == 'EDIT' && (!featureFlag_groups || (responsibilityForm?.assigneeGroups?.list.length === 0 && featureFlag_groups)))\">\r\n <app-cs-switch\r\n (ngValueChange)=\"openAssigneeChangeConfirmation($event)\" [ngValue]=\"responsibilityForm.assignees.whoCanComplete == 'ANY_ONE'\"> ANY SELECTED\r\n PERSON CAN COMPLETE\r\n THIS\r\n </app-cs-switch>\r\n </div>\r\n </ng-container>\r\n <app-popover #assignees [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let e_user of responsibilityForm?.assignees?.list | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('assignees',e_user)\">&#xe90d;</i>\r\n {{ e_user.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- When? -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'frequency'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'frequency' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"(!responsibilityForm?.frequency || activeSelector === 'frequency')\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/when.svg\" alt=\"im\"\r\n *ngIf=\"!responsibilityForm?.frequency || activeSelector === 'frequency'\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"responsibilityForm?.frequency && activeSelector !== 'frequency' && responsibilityForm?.frequency != '' && responsibilityForm?.frequency != '5~0~0~0'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">When? <span class=\"required\">*</span></label>\r\n <div *ngIf=\"responsibilityForm?.frequency == '' || responsibilityForm?.frequency == '5~0~0~0'\"\r\n class=\"select button-sec\">\r\n <input type=\"text\" (click)=\"activateSelector('frequency',true)\" [placeholder]=\"frequencyPlaceholder\"\r\n readonly>\r\n <button (click)=\"activateSelector('frequency',true)\" type=\"button\">Set A frequency</button>\r\n </div>\r\n <div *ngIf=\"responsibilityForm?.frequency != '' && responsibilityForm?.frequency !== '5~0~0~0'\"\r\n class=\"selected button-sec\">\r\n <span class=\"chip\">{{frequencyPlaceholder}}</span>\r\n <button *ngIf=\"activeSelector !== 'frequency'\" type=\"button\" class=\"edit\"\r\n (click)=\"activateSelector('frequency',true)\">\r\n <i class=\"icons\">&#xe9ba;</i>Edit\r\n </button>\r\n </div>\r\n <p *ngIf=\"invalidType === 'when'\" [appScrollInView]=\"true\" class=\"error-message\">Please select the\r\n frequency of occurrence for this responsibility.</p>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Notes -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'notes'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'notes' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\"\r\n [class.checked]=\"checkBlank(responsibilityForm?.description).trim() !== '' && !focus.description\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/notes.svg\" alt=\"im\"\r\n *ngIf=\"(checkBlank(responsibilityForm?.description).trim() === '') || focus.description\">\r\n\r\n <svg class=\"checkIcon\"\r\n *ngIf=\"checkBlank(responsibilityForm?.description).trim() !== '' && !focus.description\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Notes</label>\r\n <marx-editor [(ngModel)]=\"responsibilityForm.description\" [editorConfig]=\"{mode: 'prime',\r\n colorPalette: true,\r\n link: true,\r\n id:'notes',\r\n placeholder: 'Add more information about completing the responsibility'}\"></marx-editor>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Objective -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.OBJECTIVE\"\r\n [attr.id]=\"'OBJECTIVE'\" [class.active]=\"activeSelector === 'objective'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'objective' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"checkBlank(responsibilityForm?.objective).trim() !=='' && !focus.objective\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/objectives.svg\" alt=\"im\"\r\n *ngIf=\"(checkBlank(responsibilityForm?.objective).trim() === '') || focus.objective\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"(checkBlank(responsibilityForm?.objective).trim() !== '') && !focus.objective\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Objective</label>\r\n <marx-editor [(ngModel)]=\"responsibilityForm.objective\" [editorConfig]=\"{mode: 'prime',\r\n colorPalette: true,\r\n id:'objective',\r\n link: true,\r\n placeholder: 'This option lets you specify an objective for the responsibility.'}\"></marx-editor>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Responsibility Center -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.RC\" [attr.id]=\"'RC'\"\r\n [class.active]=\"activeSelector === 'rc'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'rc' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"responsibilityForm?.rc?.length>0 && activeSelector !== 'rc'\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/responsibility-center.svg\"\r\n alt=\"\" *ngIf=\"responsibilityForm?.rc?.length==0 || activeSelector === 'rc'\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"responsibilityForm?.rc?.length>0 && activeSelector !== 'rc'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Responsibility Center </label>\r\n <div class=\"select\" *ngIf=\"responsibilityForm?.rc?.length === 0\">\r\n <div class=\"custom-input\" (click)=\"activateSelector('rc',true)\"\r\n aria-placeholder=\"Select the responsibility center or the responsibility centers for this responsibility.\">\r\n </div>\r\n <!-- <input type=\"text\" (click)=\"activateSelector('rc',true)\" placeholder=\"Select Responsibility Center(s)\" readonly> -->\r\n </div>\r\n <div class=\"selected\" *ngIf=\"responsibilityForm?.rc?.length > 0\"\r\n [class.readOnly]=\"openedFrom === 'RISK_TREATMENT'\">\r\n <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.rc?.length>1\"\r\n [class.plus]=\"responsibilityForm?.rc?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let rc of responsibilityForm?.rc?.slice(0,2)\"><i class=\"icons\"\r\n (click)=\"remove('rc',rc)\" *ngIf=\"openedFrom !== 'RISK_TREATMENT'\">&#xe90d;</i>\r\n {{rc?.item_name}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm?.rc?.length > 2\" type=\"button\" appPopover\r\n (click)=\"rc.popover()\" placement=\"right\" placement=\"right\">+\r\n {{responsibilityForm?.rc?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'rc' && openedFrom !== 'RISK_TREATMENT'\" class=\"edit\"\r\n type=\"button\" (click)=\"activateSelector('rc',true)\"><i class=\"icons\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n <app-popover #rc [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let rc of responsibilityForm?.rc | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('rc',rc)\">&#xe90d;</i>\r\n {{ rc.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Program -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.PROGRAM\" [attr.id]=\"'PROGRAM'\" [class.active]=\"activeSelector === 'program'\" [class.disabled]=\"activeSelector && activeSelector !== 'program' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"responsibilityForm?.program?.length>0 && activeSelector !== 'program'\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg\" alt=\"\" *ngIf=\"responsibilityForm?.program?.length==0 || activeSelector === 'program'\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"responsibilityForm?.program?.length>0 && activeSelector !== 'program'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Program</label>\r\n <div class=\"select\" *ngIf=\"responsibilityForm?.program?.length ==0\">\r\n <div class=\"custom-input\" (click)=\"activateSelector('program',true)\" aria-placeholder=\"Select the Program or Program Categories that this responsibility relates to.\"></div>\r\n <!-- <input type=\"text\" (click)=\"activateSelector('program',true)\" placeholder=\"Select Responsibility program(s)\" readonly> -->\r\n </div>\r\n <div class=\"selected\" *ngIf=\"responsibilityForm?.program?.length > 0\">\r\n <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.program?.length>1\" [class.plus]=\"responsibilityForm?.program?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let program of responsibilityForm?.program\"><i class=\"icons\" *ngIf=\"false\" (click)=\"remove('program',program)\">&#xe90d;</i> {{program?.name??'--'}}</span>\r\n <!-- <button *ngIf=\"responsibilityForm?.program?.length > 2\" class=\"count\" type=\"button\" appPopover (click)=\"program.popover()\" placement=\"right\">+ {{responsibilityForm?.program?.slice(2).length}}</button> -->\r\n <button *ngIf=\"responsibilityForm?.linkedProgram?.length > 1\" class=\"count\" type=\"button\" appPopover (click)=\"program.popover()\" placement=\"right\">+ {{responsibilityForm?.linkedProgram?.length - 1}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'program' && !hiddenList.includes('PROGRAM')\" class=\"edit\" type=\"button\" (click)=\"activateSelector('program',true)\"><i class=\"icons\">&#xe9ba;</i> Edit</button>\r\n </div>\r\n <app-popover #program [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li class=\"multiple-program\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"responsibilityForm?.program[0]?.name\" placement=\"bottom\"\r\n type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <!-- <i class=\"icons\">&#xe90d;</i> -->\r\n {{responsibilityForm?.program[0]?.name}}\r\n </span>\r\n <div class=\"primary-label\">PRIMARY</div>\r\n </div>\r\n </li>\r\n <li *ngFor=\"let program of responsibilityForm?.linkedProgram; let j = index\">\r\n <div class=\"avatar-card\" *ngIf=\"program?.category_id !== responsibilityForm?.program[0]?.category_id\">\r\n <span class=\"value\" [appTooltip]=\"program?.name\" placement=\"bottom\"\r\n type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">\r\n <i *ngIf=\"!hiddenList?.includes('PROGRAM') && !program?.isViewOnlyProgram\" class=\"icons\" (click)=\"remove('program',program)\">&#xe90d;</i>\r\n {{ program?.name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <div *ngIf=\"responsibilityForm?.customTags?.length >0\">\r\n <ng-container *ngFor=\" let tag of responsibilityForm?.customTags\">\r\n <label class=\"vx-control-panel\">{{tag.tag_name}}</label>\r\n <input type=\"text\" [(ngModel)]=\"tag.value\" placeholder=\"{{tag.tag_name}}\">\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Responsibility Category -->\r\n <!-- <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.CATEGORY\" [attr.id]=\"'CATEGORY'\"\r\n [class.active]=\"activeSelector === 'category'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'category' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"responsibilityForm?.category?.length>0 && activeSelector !== 'category'\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg\" alt=\"\"\r\n *ngIf=\"responsibilityForm?.category?.length==0 || activeSelector === 'category'\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"responsibilityForm?.category?.length>0 && activeSelector !== 'category'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Responsibility Category </label>\r\n <div class=\"select\" *ngIf=\"responsibilityForm?.category?.length ==0\">\r\n <div class=\"custom-input\" (click)=\"activateSelector('category',true)\"\r\n aria-placeholder=\"Select the responsibility category or categories that this responsibility relates to.\">\r\n </div>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"responsibilityForm?.category?.length > 0\">\r\n <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.category?.length>1\"\r\n [class.plus]=\"responsibilityForm?.category?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let category of responsibilityForm?.category?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('category',category)\">&#xe90d;</i>\r\n {{category.item_name}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm?.category?.length > 2\" type=\"button\" appPopover\r\n (click)=\"category.popover()\" placement=\"right\">+\r\n {{responsibilityForm?.category?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'category'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('category',true)\"><i class=\"icons\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n <app-popover #category [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let category of responsibilityForm?.category | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('category',category)\">&#xe90d;</i>\r\n {{ category.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <div *ngIf=\"responsibilityForm?.customTags?.length >0\">\r\n <ng-container *ngFor=\" let tag of responsibilityForm?.customTags\">\r\n <label class=\"vx-control-panel\">{{tag.tag_name}}</label>\r\n <input type=\"text\" [(ngModel)]=\"tag.value\" placeholder=\"{{tag.tag_name}}\">\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Format & Evidence -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.FORMATE_EVIDENCE\"\r\n [attr.id]=\"'FORMATE_EVIDENCE'\" [class.active]=\"activeSelector === 'formate_evidence'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'formate_evidence' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <img *ngIf=\"this.responsibilityForm.formatAndEvidence.evidenceRequired == false && this.responsibilityForm.formatAndEvidence.formatFiles.length == 0 && this.responsibilityForm.formatAndEvidence.formatLinks?.length == 0\"\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/format-evidence.svg\" alt=\"im\">\r\n\r\n <svg *ngIf=\"this.responsibilityForm.formatAndEvidence.evidenceRequired || this.responsibilityForm.formatAndEvidence.formatFiles.length || this.responsibilityForm.formatAndEvidence.formatLinks?.length\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <app-format-and-evidence (updateFiles)=\"saveSelectedList('formate_evidence',$event)\"\r\n [mode]=\"'responsibility'\" [formatEvidanceData]=\"responsibilityForm?.formatAndEvidence\">\r\n </app-format-and-evidence>\r\n </div>\r\n\r\n </div>\r\n <!-- Assessment -->\r\n <div *ngIf=\"moreOptions?.ASSESSMENT\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\r\n [attr.id]=\"'ASSESSMENT'\" [class.active]=\"false\" [class.disabled]=\"false\">\r\n <div class=\"left\" [class.checked]=\"responsibilityForm.assessment?.assessment_id\">\r\n <img *ngIf=\"!responsibilityForm.assessment?.assessment_id\"\r\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/assessments.svg\" alt=\"im\">\r\n\r\n <svg *ngIf=\"responsibilityForm.assessment?.assessment_id\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">ASSESSMENTS</label>\r\n <div *ngIf=\"!responsibilityForm.assessment?.assessment_id\" class=\"select\">\r\n <input type=\"text\" (click)=\"activateSelector('isAssessment',true);isAssessment = true\"\r\n placeholder=\"Select an assessment for this responsibility\"\r\n [disabled]=\"responsibilityForm.checkpoints?.length\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"responsibilityForm.assessment?.assessment_id\">\r\n <div class=\"chip-container\" [class.more-one]=\"false\" [class.plus]=\"false\">\r\n <span class=\"chip with-question\">\r\n <span class=\"value\"\r\n [appTooltip]=\"responsibilityForm.assessment?.assessmentDetails?.assessment_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\"><i\r\n class=\"icons\"\r\n (click)=\"remove('assessment',category)\">&#xe90d;</i>{{responsibilityForm.assessment?.assessmentDetails?.assessment_name}}</span>\r\n <span class=\"label\">{{responsibilityForm.assessment?.assessmentDetails?.questions}}\r\n {{responsibilityForm.assessment?.assessmentDetails?.questions > 1 ? 'Questions':\r\n 'Question'}}</span>\r\n </span>\r\n </div>\r\n <button (click)=\"activateSelector('isAssessment',true);isAssessment = true\" class=\"edit\"\r\n type=\"button\">\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <!-- Checkpoints -->\r\n <!-- *ngIf=\"moreOptions.checkpoints\" -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.CHECKPOINTS\"\r\n [attr.id]=\"'CHECKPOINTS'\" [class.active]=\"activeSelector === 'checkpoints'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'checkpoints' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/checkpoints.svg\" alt=\"im\"\r\n *ngIf=\"responsibilityForm?.checkpoints?.length==0 || activeSelector === 'checkpoints'\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"responsibilityForm?.checkpoints?.length>0 && activeSelector !== 'checkpoints'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n <!-- {{responsibilityForm.checkpoints|json}}\r\n {{responsibilityForm.checkpointInstruction}} -->\r\n\r\n Checkpoints\r\n <!-- <button *ngIf=\"responsibilityForm?.checkpoints?.length === 0\" class=\"button\"\r\n (click)=\"activateSelector('checkpoints',true)\">+ Add Checkpoints</button> -->\r\n </label>\r\n <div class=\"select button-sec\" *ngIf=\"responsibilityForm?.checkpoints?.length === 0\">\r\n <input [disabled]=\"!responsibilityForm.checkpoints?.length\" type=\"text\"\r\n (click)=\"activateSelector('checkpoints',true)\"\r\n placeholder=\"Add checkpoints for this responsibility\" readonly>\r\n <button [disabled]=\"!responsibilityForm.checkpoints?.length\"\r\n (click)=\"activateSelector('checkpoints',true)\" type=\"button\">Add Checkpoints</button>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"responsibilityForm.checkpoints?.length > 0\">\r\n <div class=\"chip-container checkpoints\" [class.more-one]=\"responsibilityForm.checkpoints?.length>1\"\r\n [class.plus]=\"responsibilityForm.checkpoints?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let checkpoint of responsibilityForm.checkpoints?.slice(0,1)\">\r\n {{checkpoint?.label}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm.checkpoints?.length > 1\" type=\"button\"\r\n appPopover (click)=\"checkpoint.popover()\" placement=\"right\">+\r\n {{responsibilityForm.checkpoints?.length- 1}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'checkpoints'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('checkpoints',true)\">\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"this.responsibilityForm.checkpoints?.length\" class=\"assessment-text\">\r\n <i class=\"icons alert-icon\">&#xe930;</i>\r\n <span>You can now use the new <strong>Checkpoints </strong>or <strong>Assessments</strong> feature\r\n instead of the old checkpoints functionality to create analytical questions. <button\r\n class=\"remove-btn\" (click)=\"onRemoveCheckpoints('checkpoint')\">Remove Checkpoints</button> to\r\n continue.</span>\r\n </div>\r\n <app-popover #checkpoint [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let checkpoint of responsibilityForm.checkpoints | slice: 1; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n {{ checkpoint?.label }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n <!-- New Checkpoints -->\r\n <!-- *ngIf=\"moreOptions.checkpoints\" -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.CHECKPOINTS_NEW\"\r\n [attr.id]=\"'CHECKPOINTS-NEW'\" [class.active]=\"activeSelector === 'checkpoints-new'\">\r\n <div class=\"left\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/checkpoints.svg\" alt=\"im\"\r\n *ngIf=\"responsibilityForm?.checkpoints?.length==0 || activeSelector === 'checkpoints'\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\r\n *ngIf=\"checkpointCount > 0 && activeSelector !== 'checkpoints'\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n <!-- {{responsibilityForm.checkpoints|json}}\r\n {{responsibilityForm.checkpointInstruction}} -->\r\n\r\n Checkpoints\r\n <!-- <span class=\"checkpoint-version\"> V2.0</span> -->\r\n <!-- <button class=\"button\"\r\n (click)=\"activateSelector('checkpoints-new',true)\">+ Add Checkpoints</button> -->\r\n </label>\r\n <div class=\"select button-sec\" *ngIf=\"checkpointCount === 0\">\r\n <input type=\"text\" (click)=\"activateSelector('checkpoints-new',true)\"\r\n placeholder=\"Add checkpoints for this responsibility\" readonly>\r\n <button (click)=\"activateSelector('checkpoints-new',true)\" type=\"button\">Add Checkpoints</button>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"checkpointCount > 0\">\r\n <div class=\"chip-container checkpoints\" [class.more-one]=\"checkpointCount > 0\">\r\n <span class=\"chip\">\r\n <i class=\"icons\" (click)=\"onRemoveCheckpoints('new-checkpoints')\">&#xe90d;</i>\r\n {{checkpointCount}} {{checkpointCount > 1 ? 'Questions': 'Question'}}</span>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'checkpoints-new'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('checkpoints-new',true)\">\r\n <i class=\"icons\">&#xe9ba;</i> Edit\r\n </button>\r\n </div>\r\n </div>\r\n <app-popover #checkpoint [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let checkpoint of responsibilityForm.checkpoints | slice: 1; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n {{ checkpoint?.label }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n <!-- Risk Classification -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.RISK_CLASSIFICATION\"\r\n [attr.id]=\"'RISK_CLASSIFICATION'\" [class.active]=\"activeSelector === 'riskCalculator'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'riskCalculator' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/risks.svg\" alt=\"im\">\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Risk Classification\r\n <button (click)=\"activateSelector('riskCalculator',true)\" class=\"button\">+ Risk Calculator</button>\r\n </label>\r\n\r\n <div class=\"classification\">\r\n <label class=\"low\" *ngFor=\"let risk of riskClassification\" [ngClass]=\"[risk.class]\">\r\n <input type=\"radio\" name=\"classification\" [(ngModel)]=\"responsibilityForm.riskClass\"\r\n [value]=\"risk?.value\">\r\n <span>{{risk?.name}}</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Reviewer -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.REVIEWER\" [attr.id]=\"'REVIEWER'\"\r\n [class.active]=\"activeSelector === 'reviewerFrequency'|| activeSelector === 'reviewer'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'reviewer' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/reviewer.svg\" alt=\"\"\r\n *ngIf=\"responsibilityForm?.reviewers?.list?.length==0 || activeSelector === 'reviewer'\">\r\n\r\n <svg *ngIf=\"responsibilityForm?.reviewers?.list?.length>0 && activeSelector !== 'reviewer'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Reviewer</label>\r\n <div class=\"select\" *ngIf=\"((responsibilityForm?.reviewers?.list?.length == 0 && !featureFlag_groups)||((responsibilityForm?.reviewers?.list?.length == 0 && responsibilityForm?.groupReviewers?.list?.length == 0) && featureFlag_groups))\">\r\n <input type=\"text\" (click)=\"activateSelector('reviewer',true)\" placeholder=\"Select Reviewer\"\r\n readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"((responsibilityForm?.reviewers?.list?.length > 0 && !featureFlag_groups)||((responsibilityForm?.reviewers?.list?.length > 0 || responsibilityForm?.groupReviewers?.list?.length > 0 ) && featureFlag_groups))\">\r\n <div class=\"chip-container\" *ngIf=\"!featureFlag_groups\" [class.more-one]=\"responsibilityForm?.reviewers?.list?.length>1\"\r\n [class.plus]=\"responsibilityForm?.reviewers?.list?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let reviewer of responsibilityForm?.reviewers?.list?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('reviewer',reviewer)\">&#xe90d;</i>\r\n {{reviewer.member_name}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm?.reviewers?.list?.length > 2\" type=\"button\"\r\n appPopover (click)=\"reviewer.popover()\" placement=\"right\">+\r\n {{responsibilityForm?.reviewers?.list?.slice(2).length}}</button>\r\n </div>\r\n <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\r\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.reviewers?.list.length > 0 \">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"user.popover()\" placement=\"left\"> {{responsibilityForm?.reviewers?.list?.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.reviewers?.list.length > 0 && responsibilityForm?.groupReviewers?.list?.length > 0\" >&</span>\r\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.groupReviewers?.list.length > 0 \" >\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\" >USER GROUP(S)</span></span>\r\n <button class=\"count\" appPopover (click)=\"group.popover()\" placement=\"right\">{{responsibilityForm?.groupReviewers?.list?.length}}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'reviewer'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('reviewer',true)\"><i class=\"icons\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n <app-cs-radio\r\n [checked]=\"responsibilityForm.reviewers.sequentialWorkflow\" [name]=\"'reviewer'\" (checkedEvent)=\"onReviewerWorkflowChange('sequential')\" [class.disabled]=\"responsibilityForm?.groupReviewers?.list?.length > 0\">\r\n SEQUENTIAL<i class=\"icons\"\r\n [appTooltip]=\"'The responsibility will be sent for review one at a time in the sequence defined by you.'\"\r\n placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\">&#xe91f;</i>\r\n </app-cs-radio>\r\n <app-cs-radio\r\n [checked]=\"!responsibilityForm.reviewers.sequentialWorkflow\" [name]=\"'reviewer'\" (checkedEvent)=\"onReviewerWorkflowChange('anyReviewer')\">\r\n ANY REVIEWER CAN MARK THIS AS REVIEWED<i class=\"icons\"\r\n [appTooltip]=\"'The responsibility will be sent for review to all reviewers at the same time. If anyone of the reviewer reviews the responsibility, it will be considered as reviewed.'\"\r\n placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\">&#xe91f;</i>\r\n </app-cs-radio>\r\n <app-popover #reviewer [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let reviewer of responsibilityForm?.reviewers?.list | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('reviewer',reviewer)\">&#xe90d;</i>\r\n {{ reviewer.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #user [dontCloseonClick]=\"true\" >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let reviewer of responsibilityForm?.reviewers?.list ; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('reviewer',reviewer)\" >&#xe90d;</i>\r\n {{ reviewer.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #group [dontCloseonClick]=\"true\" >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of responsibilityForm?.groupReviewers?.list; let i = index\" >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('groupReviewer',group)\" >&#xe90d;</i>\r\n {{group.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Overseer -->\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.OVERSEER\" [attr.id]=\"'OVERSEER'\"\r\n [class.active]=\" activeSelector === 'overseerNotify' || activeSelector === 'overseer'\"\r\n [class.disabled]=\"activeSelector && !['overseerNotify','overseerNotify'].includes(activeSelector) && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/oversight.svg\" alt=\"\"\r\n *ngIf=\"(responsibilityForm?.overseers?.list?.length==0 && responsibilityForm?.overseers?.notifyList?.length == 0)|| activeSelector === 'overseerNotify' || activeSelector === 'overseer'\">\r\n <svg class=\"checkIcon\" *ngIf=\"(responsibilityForm?.overseers?.list?.length>0 || responsibilityForm?.overseers?.notifyList?.length>0)\r\n && !( activeSelector === 'overseerNotify' || activeSelector === 'overseer')\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Overseer </label>\r\n <div class=\"select\" *ngIf=\"((responsibilityForm?.overseers?.list?.length == 0 && !featureFlag_groups)||((responsibilityForm?.overseers?.list?.length == 0 && responsibilityForm?.overseersGroups?.list?.length == 0) && featureFlag_groups))\">\r\n <input type=\"text\" (click)=\"activateSelector('overseer',true)\"\r\n placeholder=\"Who should have oversight of the responsibility?\" readonly>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"((responsibilityForm?.overseers?.list?.length > 0 && !featureFlag_groups)||((responsibilityForm?.overseers?.list?.length > 0 || responsibilityForm?.overseersGroups?.list?.length > 0 ) && featureFlag_groups))\">\r\n <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.overseers?.list?.length>1\"\r\n [class.plus]=\"responsibilityForm?.overseers?.list?.length>2\" *ngIf=\"!featureFlag_groups\" >\r\n <span class=\"chip\" *ngFor=\"let overseer of responsibilityForm?.overseers?.list?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('overseer',overseer)\">&#xe90d;</i>\r\n {{overseer.member_name}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm?.overseers?.list?.length > 2\" type=\"button\"\r\n appPopover (click)=\"overseers.popover()\" placement=\"right\">+\r\n {{responsibilityForm?.overseers?.list?.slice(2).length}}</button>\r\n </div>\r\n <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\r\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseers?.list.length > 0\" >\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"overseerUser.popover()\" placement=\"left\"> {{responsibilityForm?.overseers?.list?.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.overseers?.list.length > 0 && responsibilityForm?.overseersGroups?.list?.length > 0\" >&</span>\r\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseersGroups?.list?.length > 0 \" >\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\" >USER GROUP(S)</span></span>\r\n <button class=\"count\" appPopover (click)=\"overseerGroup.popover()\" placement=\"right\">{{responsibilityForm?.overseersGroups?.list?.length}}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'overseer'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('overseer',true)\"><i class=\"icons\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n\r\n <div class=\"select\" *ngIf=\"((responsibilityForm?.overseers?.notifyList?.length == 0 && !featureFlag_groups)||((responsibilityForm?.overseers?.notifyList?.length == 0 && responsibilityForm?.overseersGroups?.notifyList?.length == 0) && featureFlag_groups))\">\r\n <input type=\"text\" (click)=\"activateSelector('overseerNotify',true)\"\r\n placeholder=\"Who should be notified if the responsibility is not complet...\" readonly\r\n [appTooltip]=\"'Who should be notified if the responsibility is not completed?'\"\r\n placement=\"bottom\" delay=\"0\" [tooltipMandatory]=\"true\">\r\n </div>\r\n <div class=\"selected\" *ngIf=\"((responsibilityForm?.overseers?.notifyList?.length > 0 && !featureFlag_groups)||((responsibilityForm?.overseers?.notifyList?.length > 0 || responsibilityForm?.overseersGroups?.notifyList?.length > 0 ) && featureFlag_groups))\">\r\n <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.overseers?.notifyList?.length>1\"\r\n [class.plus]=\"responsibilityForm?.overseers?.notifyList?.length>2\" *ngIf=\"!featureFlag_groups\">\r\n <span class=\"chip\"\r\n *ngFor=\"let overseer of responsibilityForm?.overseers?.notifyList?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('overseerNotifyList',overseer)\">&#xe90d;</i>\r\n {{overseer.member_name}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm?.overseers?.notifyList?.length > 2\"\r\n type=\"button\" appPopover (click)=\"notify.popover()\" placement=\"right\">+\r\n {{responsibilityForm?.overseers?.notifyList?.slice(2).length}}</button>\r\n </div>\r\n <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\r\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseers?.notifyList.length > 0\">\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\">USER(S)</span></span>\r\n <button class=\"count user\" appPopover (click)=\"notifyUser.popover()\" placement=\"left\"> {{responsibilityForm?.overseers?.notifyList?.length}}</button>\r\n </div>\r\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.overseers?.notifyList.length > 0 && responsibilityForm?.overseersGroups?.notifyList?.length > 0\" >&</span>\r\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseersGroups?.notifyList?.length > 0 \" >\r\n <span class=\"chip\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500 vx-tt-uppercase\" >USER GROUP(S)</span></span>\r\n <button class=\"count\" appPopover (click)=\"notifyGroup.popover()\" placement=\"right\">{{responsibilityForm?.overseersGroups?.notifyList?.length}}</button>\r\n </div>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'overseerNotify'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('overseerNotify',true)\"><i class=\"icons\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n <app-popover #overseers [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let overseer of responsibilityForm?.overseers?.list | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('overseer',overseer)\">&#xe90d;</i>\r\n {{ overseer?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerUser [dontCloseonClick]=\"true\" >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let overseers of responsibilityForm?.overseers?.list ; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('overseer',overseers)\" >&#xe90d;</i>\r\n {{ overseers?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerGroup [dontCloseonClick]=\"true\" >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let overseer of responsibilityForm?.overseersGroups?.list; let i = index\" >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('overseerGroup',overseer)\" >&#xe90d;</i>\r\n {{overseer?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #notify [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let overseer of responsibilityForm?.overseers?.notifyList | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('overseerNotifyList',overseer)\">&#xe90d;</i>\r\n {{ overseer?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #notifyUser [dontCloseonClick]=\"true\" >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let overseer of responsibilityForm?.overseers?.notifyList ; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('overseerNotifyList',overseer)\" >&#xe90d;</i>\r\n {{ overseer?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #notifyGroup [dontCloseonClick]=\"true\" >\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let group of responsibilityForm?.overseersGroups?.notifyList; let i = index\" >\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('overseerGroupNotifyList',group)\" >&#xe90d;</i>\r\n {{group?.group_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Assurance -->\r\n\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.ASSURANCE\"\r\n [attr.id]=\"'ASSURANCE'\" [class.active]=\"activeSelector === 'assurance'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'assurance' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/reviewer.svg\" alt=\"\"\r\n *ngIf=\"responsibilityForm?.assuranceList?.length==0 || activeSelector === 'assurance'\">\r\n\r\n <svg *ngIf=\"responsibilityForm?.assuranceList?.length>0 && activeSelector !== 'assurance'\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Assurance</label>\r\n <div class=\"select\" *ngIf=\"responsibilityForm?.assuranceList?.length ==0\">\r\n <div class=\"custom-input\" (click)=\"activateSelector('assurance',true)\"\r\n aria-placeholder=\"Select the test plan categories that you would like to add this responsibility to.\">\r\n </div>\r\n <!-- <input type=\"text\" (click)=\"activateSelector('assurance',true)\"\r\n placeholder=\"Select the test plan categories that you would like to add...\"\r\n readonly [appTooltip]=\"'Select the test plan categories that you would like to add this responsibility to.'\" placement=\"bottom\" delay=\"0\" [tooltipMandatory]=\"true\"> -->\r\n </div>\r\n <div class=\"selected\" *ngIf=\"responsibilityForm?.assuranceList?.length > 0\">\r\n <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.assuranceList?.length>1\"\r\n [class.plus]=\"responsibilityForm?.assuranceList?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let assurance of responsibilityForm?.assuranceList?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('assurance',assurance)\">&#xe90d;</i>\r\n {{assurance.category_name}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm?.assuranceList?.length > 2\" type=\"button\"\r\n appPopover (click)=\"assurance.popover()\" placement=\"right\">+\r\n {{responsibilityForm?.assuranceList?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'assurance'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('assurance',true)\"><i class=\"icons\">&#xe9ba;</i>\r\n Edit</button>\r\n </div>\r\n <app-popover #assurance [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let assurance of responsibilityForm?.assuranceList | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('assurance',assurance)\">&#xe90d;</i>\r\n {{ assurance.category_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\r\n *ngIf=\"moreOptions?.REQUIRES_AUDIT && responsibilityForm.rc.length > 0\" [attr.id]=\"'REQUIRES_AUDIT'\"\r\n [class.active]=\"activeSelector === 'requires_audit'\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'requires_audit' && sideSelectorElements.includes(activeSelector)\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <img src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/audit.svg\" alt=\"\"\r\n *ngIf=\"responsibilityForm?.requiresAuditList?.length==0 || activeSelector === 'requires_audit'\">\r\n\r\n <svg *ngIf=\"responsibilityForm?.requiresAuditList?.length>0 && activeSelector !== 'requires_audit'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">REQUIRES AUDIT?</label>\r\n <div class=\"select\" *ngIf=\"responsibilityForm?.requiresAuditList?.length ==0\">\r\n <!-- <div class=\"custom-input\" (click)=\"activateSelector('assurance',true)\" aria-placeholder=\"Select the test plan categories that you would like to add this responsibility to.\"></div> -->\r\n <!-- <input type=\"text\" (click)=\"activateSelector('assurance',true)\"\r\n placeholder=\"Select the test plan categories that you would like to add...\"\r\n readonly [appTooltip]=\"'Select the test plan categories that you would like to add this responsibility to.'\" placement=\"bottom\" delay=\"0\" [tooltipMandatory]=\"true\"> -->\r\n\r\n <input type=\"text\" placeholder=\"If yes, select an Audit Category.\" readonly\r\n (click)=\"activateSelector('requires_audit',true)\">\r\n </div>\r\n <div class=\"selected\" *ngIf=\"responsibilityForm?.requiresAuditList?.length > 0\">\r\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.assuranceList?.length>1\" [class.plus]=\"responsibilityForm?.assuranceList?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let assurance of responsibilityForm?.assuranceList?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('assurance',assurance)\">&#xe90d;</i>\r\n {{assurance.category_name}}</span>\r\n <button class=\"count\" *ngIf=\"responsibilityForm?.assuranceList?.length > 2\" type=\"button\"\r\n appPopover (click)=\"assurance.popover()\" placement=\"right\">+\r\n {{responsibilityForm?.assuranceList?.slice(2).length}}</button>\r\n </div> -->\r\n <!-- <button *ngIf=\"activeSelector !== 'assurance'\" class=\"edit\" type=\"button\" (click)=\"activateSelector('assurance',true)\"><i\r\n class=\"icons\">&#xe90c;</i>\r\n Edit</button> -->\r\n\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"><i class=\"icons\" (click)=\"remove('requires_audit',overseer)\">&#xe90d;</i>\r\n {{responsibilityForm?.requiresAuditList[0]?.category_name}}</span>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('requires_audit',true)\"><i\r\n class=\"icons\">&#xe90c;</i> Edit</button>\r\n <!-- class=\"icons\">&#xe9ba;</i>\r\n Edit</button> -->\r\n </div>\r\n <ng-container *ngIf=\"responsibilityForm?.requiresAuditList?.length\">\r\n <label class=\"vx-control-panel vx-mt-8\">\r\n SAMPLE SIZE\r\n <app-cs-switch [(ngValue)]=\"isSample\" (ngValueChange)=\"switchEnable($event)\"></app-cs-switch>\r\n </label>\r\n <div class=\"sample-part\" [class.disabled]=\"!isSample\">\r\n <app-cs-radio value=\"0\" class=\"sample-radio\" (click)=\"selectedSampleData(0)\"\r\n [checked]=\"selectedSample === 0\">\r\n <div class=\"name\">COUNT</div>\r\n <input type=\"number\" placeholder=\"--\" (keypress)=\"checkInputValue($event)\"\r\n [(ngModel)]=\"sampleValue\">\r\n </app-cs-radio>\r\n <div class=\"or\">OR</div>\r\n <app-cs-radio value=\"1\" class=\"sample-radio\" (click)=\"selectedSampleData(1)\"\r\n [checked]=\"selectedSample === 1\">\r\n <div class=\"name\">PERCENTAGE</div>\r\n <input type=\"number\" (keypress)=\"checkInputValue($event)\" [(ngModel)]=\"samplePercentage\"\r\n placeholder=\"--\">\r\n </app-cs-radio>\r\n </div>\r\n <label class=\"vx-control-panel vx-mt-8\">SET A REMINDER IF THE AUDIT PLAN IS NOT CREATED.</label>\r\n <div class=\"reminder-part\">\r\n Send reminder every <input type=\"number\" value=\"2\" [(ngModel)]=\"sendAuditRemindersValue\"> Day by\r\n <div class=\"picker-group\">\r\n <input class=\"time\" aria-label=\"12hr format\" [(ngModel)]=\"auditTime\"\r\n [ngxTimepicker]=\"dailyTime\" placeholder=\"auditTime.toUpperCase()\" type=\"text\"\r\n [min]=\"currentTime\" readonly>\r\n <i class=\"icons\">&#xe955;</i>\r\n <ngx-material-timepicker #dailyTime [defaultTime]=\"auditTime\">\r\n </ngx-material-timepicker>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- <app-popover #assurance [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let assurance of responsibilityForm?.assuranceList | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('assurance',assurance)\">&#xe90d;</i>\r\n {{ assurance.category_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover> -->\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<app-users-radio-list *ngIf=\"activeSelector === 'assignors'\" [usersList]=\"assignorsList\"\r\n [selectedUsers]=\"responsibilityForm.assignors.list\" [itemEmailKey]=\"'member_email'\" [userIdKey]=\"'member_id'\"\r\n [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"saveSelectedList('assignors',$event)\"\r\n (closeUsersList)=\"activeDeselector()\">\r\n</app-users-radio-list>\r\n\r\n<ng-container *ngIf=\"activeSelector === 'assignees'\">\r\n <app-group-users-list *ngIf=\"isEntrust || responsibilityForm?.assignees?.whoCanComplete === 'ANY_ONE'\" [openedFrom]=\"openedFrom\" [usersList]=\"assigneesList\" [disabledId]=\"disableAssigneeIds\" [fromResponsibility] = \"'Assignee'\" [reviewerIds]=\"reviewerIds\" [overseerIds]=\"overseerIds\" [assignorId]=\"assignorId\"\r\n [groupsList]=\"groupsList\" [assigneeGroupsList] =\"groupAssigneeList\" [selectedUsers]=\"responsibilityForm?.assignees?.list\" [selectedGroups]=\"responsibilityForm?.assigneeGroups?.list\" [userIdKey]=\"'my_member_id'\" [groupIdKey]=\"'group_id'\"\r\n (saveSelectedList)=\"saveSelectedList('assignees',$event)\" (closeUsersList)=\"activeDeselector()\" [groupsEnabled]=\"featureFlag_groups\" >\r\n </app-group-users-list>\r\n <app-users-radio-list *ngIf=\"!isEntrust && responsibilityForm.assignees.whoCanComplete !== 'ANY_ONE'\" [itemEmailKey]=\"'employee_email'\" [usersList]=\"assigneesList\"\r\n [selectedUsers]=\"responsibilityForm.assignees.list\" [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'employee_name'\" [disabledId]=\"disableRadioAssignee\" [fromResponsibility] = \"'Assignee'\" [reviewerIds]=\"reviewerIds\" [overseerIds]=\"overseerIds\" [assignorId]=\"assignorId\"\r\n (saveSelectedList)=\"saveSelectedList('assignees',$event)\" (closeUsersList)=\"activeDeselector()\">\r\n </app-users-radio-list>\r\n</ng-container>\r\n\r\n\r\n\r\n<app-checkpoints *ngIf=\"activeSelector === 'checkpoints'\"\r\n [checkpointInstruction]=\"responsibilityForm?.checkpointInstruction\"\r\n [checkpointData]=\"responsibilityForm?.checkpoints\" (saveCheckPoint)=\"saveSelectedList('checkpoints',$event)\"\r\n (closeCheckPoint)=\"activeDeselector()\"></app-checkpoints>\r\n<app-frequency-container *ngIf=\"activeSelector === 'frequency'\" [frequencyDetails]=\"frequencyDetails\" [feature]=\"feature\"\r\n (selectedFrequency)=\"frequencyData($event)\" [mode]=\"'responsibility'\" (closeFrequency)=\"activeDeselector()\">\r\n</app-frequency-container>\r\n\r\n<app-responsibility-centers-list *ngIf=\"activeSelector === 'rc'\" [responsibilityCentersList]=\"responsibilityCentersList\"\r\n [radioSelection]=\"(mode == 'EDIT')?true:false\" [selectedResponsibilityCenters]=\"responsibilityForm.rc\"\r\n [rcIdKey]=\"'item_id'\" (saveSelectedList)=\"saveSelectedList('rc',$event)\" (closeRcList)=\"activeDeselector()\">\r\n</app-responsibility-centers-list>\r\n\r\n<app-category-multi-select *ngIf=\"activeSelector === 'category'\" [categoryList]=\"categories\"\r\n [allCategories]=\"allCategories\" [categoryIdKey]=\"'category_id'\" [selectedCategories]=\"responsibilityForm.category\"\r\n (saveSelectedCategory)=\"saveSelectedList('category',$event)\" (closeCategoriesList)=\"activeDeselector()\">\r\n</app-category-multi-select>\r\n\r\n<!-- [hideProgramsList]=\"(selectedProgram && !(this.selectedProgram?.programType === 0 && this.selectedProgram?.name?.toLowerCase() === 'uncategorized' )) ? true : false\" -->\r\n<app-program-listing *ngIf=\"activeSelector === 'program'\" [programsList]=\"programsList\"\r\n [selectedCategories]=\"responsibilityForm.category | refDisconnect\" [selectedProgram]=\"responsibilityForm.program | refDisconnect\"\r\n (saveSelectedProgram)=\"saveSelectedList('program',$event)\" (closeEvent)=\"activeDeselector()\" [linkedProgram]=\"responsibilityForm?.linkedProgram\" [mode]=\"(this.selectedProgram?.programType === 0 && this.selectedProgram?.name?.toLowerCase() === 'uncategorized' ) ? '' : mode\"\r\n [openedFrom]=\"openedFrom\" [responsibilityId]=\"responsibilityId\"></app-program-listing>\r\n\r\n<app-owner-list *ngIf=\"activeSelector === 'reviewer' && !featureFlag_groups\" [listHeading]=\"'Select a Reviewer'\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [usersList]=\"allUsersList\" [showWorkflow]=\"true\"\r\n [selectedUsers]=\"responsibilityForm.reviewers.list\" [userIdKey]=\"'employee_id'\" [itemEmailKey]=\"'employee_email'\"\r\n [itemNameKey]=\"'member_name'\" [disabledIds]=\"disableReviewerIds\"\r\n (saveSelectedList)=\"saveSelectedList('reviewer',$event);activateSelector('reviewerFrequency',true)\"\r\n (closeUsersList)=\"activeDeselector()\" [mode]=\"mode\" [fromResponsibility] = \"'Reviewer'\" [assignorId]=\"assignorId\" [assigneeIds]=\"assigneeIds\" [overseerIds]=\"overseerIds\"\r\n [reviewerWorkflowType]=\"(responsibilityForm?.reviewers?.sequentialWorkflow) ? 'SEQUENTIAL' : 'ANY REVIEWER CAN MARK THIS AS REVIEWED'\"\r\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\">\r\n</app-owner-list>\r\n<user-group-list *ngIf=\"activeSelector === 'reviewer' && featureFlag_groups\" [selectedReviewer]=\"true\" [userlist]=\"reviewerMemberIdsList\" [groupEnabled]=\"true\" [groupList]=\"groupReviewerList\" [selectedGroups]=\"responsibilityForm?.groupReviewers?.list\"\r\n [selectedUsers] =\"responsibilityForm?.reviewers?.list\" (cancel)=\"activeDeselector()\" (save) = \"saveSelectedList('reviewer',$event);activateSelector('reviewerFrequency',true)\" [mode]=\"mode\" [disabledIds]=\"disableReviewerIds\" [fromResponsibility] = \"'Reviewer'\" [assignorId]=\"assignorId\" [assigneeIds]=\"assigneeIds\" [overseerIds]=\"overseerIds\"\r\n (reviewerWorkflowTypeChange) = \"reviewerTypeChange($event)\" [reviewerWorkflowType]=\"(responsibilityForm?.reviewers?.sequentialWorkflow) ? 'SEQUENTIAL' : 'ANY REVIEWER CAN MARK THIS AS REVIEWED'\" [featureflag]=\"featureFlag_groups\">\r\n </user-group-list>\r\n<app-owner-list *ngIf=\"activeSelector === 'overseer' && !featureFlag_groups\" [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\"\r\n [usersList]=\"allUsersList\" [selectedUsers]=\"responsibilityForm.overseers.list\" [userIdKey]=\"'employee_id'\" [fromResponsibility] = \"'Overseer'\" [assignorId]=\"assignorId\" [assigneeIds]=\"assigneeIds\" [reviewerIds]=\"reviewerIds\"\r\n [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"saveSelectedList('overseer',$event)\" [disabledIds]=\"disableOverseerIds\"\r\n (closeUsersList)=\"activeDeselector()\" [itemEmailKey]=\"'employee_email'\" >\r\n</app-owner-list >\r\n<user-group-list *ngIf=\"activeSelector === 'overseer' && featureFlag_groups\" [groupEnabled]=\"true\" [groupList]=\"groupOverseerList\" [selectedGroups]=\"responsibilityForm?.overseersGroups?.list\"\r\n[userlist]=\"overseersList\" [selectedUsers]=\"responsibilityForm.overseers.list\" [disabledIds]=\"disableOverseerIds\" [fromResponsibility] = \"'Overseer'\" [assignorId]=\"assignorId\" [assigneeIds]=\"assigneeIds\" [reviewerIds]=\"reviewerIds\"\r\n (save)=\"saveSelectedList('overseer',$event)\" (cancel)=\"activeDeselector()\" [featureflag]=\"featureFlag_groups\">\r\n</user-group-list>\r\n\r\n<app-owner-list *ngIf=\"activeSelector ==='overseerNotify'&& !featureFlag_groups\" [singularText]=\"'User selected'\"\r\n [pluralText]=\"'Users selected'\" [usersList]=\"allUsersList\" [disabledIds]=\"disableOverseerIds\" [fromResponsibility] = \"'Overseer'\" [assignorId]=\"assignorId\" [assigneeIds]=\"assigneeIds\" [reviewerIds]=\"reviewerIds\"\r\n [selectedUsers]=\"responsibilityForm.overseers.notifyList\" [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'member_name'\"\r\n (saveSelectedList)=\"saveSelectedList('overseerNotify',$event)\" (closeUsersList)=\"activeDeselector()\"\r\n [itemEmailKey]=\"'employee_email'\"></app-owner-list>\r\n <user-group-list *ngIf=\"activeSelector ==='overseerNotify' && featureFlag_groups\" [userlist]=\"overseersList\" [groupEnabled]=\"true\" [groupList]=\"groupOverseerList\" [selectedGroups]=\"responsibilityForm?.overseersGroups?.notifyList\"\r\n [selectedUsers]=\"responsibilityForm.overseers.notifyList\" [disabledIds]=\"disableOverseerIds\" [fromResponsibility] = \"'Overseer'\" [assignorId]=\"assignorId\" [assigneeIds]=\"assigneeIds\" [reviewerIds]=\"reviewerIds\"\r\n (save)=\"saveSelectedList('overseerNotify',$event)\" (cancel)=\"activeDeselector()\" [featureflag]=\"featureFlag_groups\">\r\n </user-group-list>\r\n\r\n<app-owner-list *ngIf=\"activeSelector === 'assurance'\" [singularText]=\"'Test Category selected'\"\r\n [pluralText]=\"'Test Categories selected'\" [searchPlaceholder]=\"'Search Test Category...'\"\r\n [listHeading]=\"'Select Test Categories'\" [usersList]=\"assuranceCategoriesList\"\r\n [noDataText]=\"'No Test Categories Found'\" [selectedUsers]=\"responsibilityForm.assuranceList\"\r\n [userIdKey]=\"'category_id'\" [itemEmailKey]=\"'category_name'\" [itemNameKey]=\"'category_name'\"\r\n (saveSelectedList)=\"saveSelectedList('assurance',$event)\" (closeUsersList)=\"activeDeselector()\"\r\n [searchPlaceholder]=\"'Search Category'\">\r\n</app-owner-list>\r\n\r\n<app-audit-category-list *ngIf=\"activeSelector === 'requires_audit'\" (closeList)=\"activeDeselector()\"\r\n [auditCategory]=\"assuranceRequiresAuditList\" (saveSelectedList)=\"saveSelectedList('requires_audit',$event)\"\r\n [selectedData]=\"responsibilityForm?.requiresAuditList[0]\"></app-audit-category-list>\r\n\r\n<app-loader-inline *ngIf=\"loader\"></app-loader-inline>\r\n<app-framework-list *ngIf=\"activeSelector === 'framework'\" (assignControl)=\"assignFromFramework($event)\"\r\n[previousSelectedValues]=\"selectedFrameworkValues\"\r\n (closeFramework)=\"activeDeselector()\" (entrustFramework)=\"entrustFramework($event)\"></app-framework-list>\r\n\r\n<!-- risk-calculator here -->\r\n<app-risk-classification *ngIf=\"activeSelector === 'riskCalculator' \" [currentRiskValue]=\"responsibilityForm.riskClass\"\r\n (saveList)=\"saveSelectedList('calculatedrisk',$event)\" (closeList)=\"activeDeselector()\">\r\n</app-risk-classification>\r\n\r\n<app-review-frequency *ngIf=\"activeSelector === 'reviewerFrequency'\"\r\n [reviewCompleteDays]=\"responsibilityForm.reviewers.reviewFrequency.reviewCompleteDays\"\r\n [reviewNOtCompletedDays]=\"responsibilityForm.reviewers.reviewFrequency.reviewNOtCompletedDays\"\r\n (saveReviewFrequency)=\"saveSelectedList('reviewFrequency',$event)\"\r\n (closeReviewFrequency)=\"activeDeselector();activateSelector('reviewer',false);responsibilityForm.reviewers.list = [];responsibilityForm.groupReviewers.list = []\"\r\n (backToUserList)=\"activeDeselector();activateSelector('reviewer',true)\">\r\n</app-review-frequency>\r\n\r\n\r\n<app-assessment-list *ngIf=\"isAssessment\" [program_ids]=\"responsibilityForm.program[0]?._id\"\r\n (cancelAssessment)=\"isAssessment = false; activateSelector('isAssessment', false)\"\r\n [isEdit]=\"responsibilityForm?.assessment?.assessment_id ? true : false\"\r\n [selectedAssessment]=\"responsibilityForm?.assessment\"\r\n (onAssessmentSelect)=\"onAssessmentSelect($event);activateSelector('isAssessment', false)\"></app-assessment-list>\r\n\r\n<app-smiley-dialog-inline *ngIf=\"showSmiley\" [message]=\"smileyMessage\" [actionButtons]=\"actionButtons\"\r\n (action)=\"action($event)\" (closeSmiley)=\"closeSmiley($event)\"></app-smiley-dialog-inline>\r\n\r\n<div class=\"import\" *ngIf=\"activeSelector === 'checkpoints-new'\">\r\n <app-create-assessment-container #editor [openPortal]=\"'RESPONSIBILITY_CHECKPOINT'\"\r\n (postAssessment)=\"postAssessment($event)\" (setIsUploaded)=\"setIsUploaded($event)\"\r\n [checkpointJSON]=\"responsibilityForm.new_checkpoints\">\r\n </app-create-assessment-container>\r\n</div>\r\n",
2830
2888
  styles: ["@import url(\"https://cdn.v-comply.com/design-system/css/icons/icons.css\");::ng-deep .workflw-compliance{display:block;position:relative}::ng-deep .workflw-compliance marx-editor .editor-container{border-radius:4px}::ng-deep .workflw-compliance marx-editor .editor-container .editable-block{min-height:72px;padding:11px 15px;line-height:20px;font-size:14px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}@media not all and (min-resolution:0.001dpcm){@supports (-webkit-appearance:none){::ng-deep .workflw-compliance marx-editor .editor-container .editable-block:before{opacity:.72}}}::ng-deep .workflw-compliance marx-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .workflw-compliance marx-editor .editor-container .editable-block ul li{list-style:unset}::ng-deep .workflw-compliance marx-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .workflw-compliance marx-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .workflw-compliance marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .workflw-compliance marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:22px}::ng-deep .workflw-compliance marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .workflw-compliance marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .workflw-compliance .sample-part{display:flex;align-items:center;margin-bottom:4px}::ng-deep .workflw-compliance .sample-part .sample-radio{width:100%}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item{position:relative;width:100%}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .radio{position:absolute;left:12px;top:12px}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value{border:1px solid #dbdbdb;border-radius:4px;height:40px;padding:8px 8px 8px 36px;margin:0;max-width:100%;width:100%;display:flex;align-items:center;justify-content:space-between;pointer-events:none}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value .name{color:#747576;font-size:11px;font-weight:500;text-transform:uppercase}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value input{border:1px solid #dcdcdc;background:#fff;border-radius:4px;height:24px;width:64px;text-align:center;padding:4px;color:#747576;font-size:13px}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value input:focus{outline:none;box-shadow:none}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item input:checked~svg{position:absolute;left:12px;top:12px}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item input:checked~.value{border:1px solid #34aa44;background:#eefcf0;pointer-events:auto}::ng-deep .workflw-compliance .sample-part .or{color:#161b2f;font-size:9px;font-weight:500;text-transform:uppercase;margin:0 10px}::ng-deep .workflw-compliance .sample-part.disabled{pointer-events:none}::ng-deep .workflw-compliance .sample-part.disabled .sample-radio .radio-item .value{background:#fbfbfb;border:1px solid #f1f1f1}::ng-deep .workflw-compliance .reminder-part{border:1px solid #dbdbdb;border-radius:4px;height:40px;padding:4px 12px;color:#747576;font-size:12px;display:flex;align-items:center}::ng-deep .workflw-compliance .reminder-part input{width:30px;border-radius:0;border:none;border-bottom:1px solid #dbdbdb;text-align:center;color:#747576;font-size:13px;font-weight:500;margin:0 4px}::ng-deep .workflw-compliance .reminder-part input:focus{outline:none!important;box-shadow:none!important}::ng-deep .workflw-compliance .reminder-part .picker-group{position:relative}::ng-deep .workflw-compliance .reminder-part .picker-group input{border:1px solid #f1f1f1!important;border-radius:4px!important;width:104px!important;height:28px!important;margin-left:8px!important;padding:6px 8px!important;cursor:pointer;color:#747576!important;font-size:12px!important;font-weight:500!important;text-align:left!important}::ng-deep .workflw-compliance .reminder-part .picker-group input:focus,::ng-deep .workflw-compliance .reminder-part .picker-group input:hover{outline:none!important;box-shadow:none!important}::ng-deep .workflw-compliance .reminder-part .picker-group i{color:#1e5dd3;position:absolute;top:6px;right:10px;font-size:16px}.assessment-text{color:#747576;font-size:11px;display:flex;align-items:center;padding:0 8px;margin:-16px 0 20px}.assessment-text i.alert-icon{color:#f2bf19;font-size:16px;margin-right:8px}.assessment-text strong{font-weight:600}.assessment-text button.remove-btn{background:transparent;border-radius:0;border:none;color:#1e5dd3;font-size:10px;font-weight:600;padding:0;margin:0}.import{position:fixed;top:0;right:30px;bottom:0;left:0;z-index:-1;width:calc(100vw - 30px)}.action-list ul.action-item li.multiple-program{background:#f8f8f8}.action-list ul.action-item li.multiple-program .avatar-card{padding:2px 7.5px}.action-list ul.action-item li.multiple-program .avatar-card span.value{color:#747576;font-size:11px;font-weight:600;width:unset}.action-list ul.action-item li.multiple-program .avatar-card .primary-label{background:#7aa7f7;border-radius:2px;color:#fff;font-size:9px;font-weight:500;text-transform:uppercase;padding:0 4px;line-height:12px;margin:0 4px}", "@import url(\"https://cdn.v-comply.com/design-system/css/icons/icons.css\");::-webkit-scrollbar-track{background-color:#f1f1f1;position:absolute}::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}input::-webkit-inner-spin-button,input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}button{font-family:Poppins,sans-serif}::ng-deep .vx-form-group{display:block;position:relative;margin-bottom:20px}::ng-deep .vx-form-group:after{content:\"\";display:block;clear:both}::ng-deep .vx-form-group .select{position:relative}::ng-deep .vx-form-group .select:after{border-left-color:#707070;border-bottom:1px solid #707070;border-right:1px solid #707070;border-top-color:#707070;content:\"\";display:inline-block;right:15px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .vx-form-group .select input{cursor:pointer;padding-right:30px!important}::ng-deep .vx-form-group .select .custom-input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:3px 12px;line-height:16px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .vx-form-group .select .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:13px;width:94%;display:block;pointer-events:none;opacity:.8}::ng-deep .vx-form-group .select .custom-input:hover{border-color:#1e5dd3;box-shadow:0 0 5px rgba(30,93,211,.27)}::ng-deep .vx-form-group .select .custom-input.frequency-custom-input{padding-right:116px}::ng-deep .vx-form-group .select+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .select+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .select+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .select~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .select.button-sec:after{display:none}::ng-deep .vx-form-group .select.button-sec button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;position:absolute;top:12px;right:8px;padding:0;margin:0}::ng-deep .vx-form-group .select+.vx-control-panel{margin-top:8px}::ng-deep .vx-form-group .select+.selected{margin-top:8px}::ng-deep .vx-form-group .select.select{margin-top:8px}::ng-deep .vx-form-group .upload-format{border:1px solid #dbdbdb;border-radius:4px;padding:8px 12px;display:block}::ng-deep .vx-form-group .upload-format span.text{line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:block;margin-bottom:6px}::ng-deep .vx-form-group .upload-format .radio-group{display:flex}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio{display:inline-block}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;margin-left:8px}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio+app-cs-radio{margin-left:12px}::ng-deep .vx-form-group .upload-format~.upload-format{margin-top:4px}::ng-deep .vx-form-group .form-tab{display:flex;justify-content:flex-start}::ng-deep .vx-form-group .form-tab button{background:transparent;color:#161b2f;font-size:11px;line-height:16px;text-transform:uppercase;cursor:pointer;padding:8px 8px 8px 0;border:none;outline:none;font-weight:500}::ng-deep .vx-form-group .form-tab button:disabled{opacity:.5;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}::ng-deep .vx-form-group .form-tab button+button{padding:8px}::ng-deep .vx-form-group .form-tab button.active{color:#1e5dd3}::ng-deep .vx-form-group .tab-group{border:1px solid #dbdbdb;border-radius:4px;padding:0;display:block;position:relative}::ng-deep .vx-form-group .tab-group .upload-file{padding:16px 24px;display:flex;align-items:center}::ng-deep .vx-form-group .tab-group .upload-file .image{width:80px;margin-right:20px}::ng-deep .vx-form-group .tab-group .upload-file .browse{display:flex;align-items:center;justify-content:center;width:calc(100% - 100px);text-align:center}::ng-deep .vx-form-group .tab-group .upload-file .browse span{display:inline-block;font-size:12px;color:#747576;line-height:16px;padding:0 4px}::ng-deep .vx-form-group .tab-group .upload-file .browse .label{font-size:11px;color:#1e5dd3;line-height:16px;font-weight:600;text-transform:uppercase;margin:0;padding:0}::ng-deep .vx-form-group .tab-group .upload-file .browse .label input{opacity:0;position:absolute;top:0;margin:0;padding:0;right:0;bottom:0;left:0;cursor:pointer;width:100%}::ng-deep .vx-form-group .tab-group.active{border-color:#1e5dd3}::ng-deep .vx-form-group .tab-group.uploaded{margin-top:4px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file{padding:12px \u200B24px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .image{display:none}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .browse{width:100%}::ng-deep .vx-form-group .tab-group+label.vx-form-group{margin-top:8px;margin-bottom:4px}::ng-deep .vx-form-group .file-list{background:#fbfbfb;border:1px solid #f1f1f1;border-radius:4px;padding:12px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;position:relative}::ng-deep .vx-form-group .file-list span.file-name{color:#747576;line-height:16px;font-size:11px;font-weight:400;cursor:pointer;max-width:calc(100% - 20px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .vx-form-group .file-list .button-group{display:flex}::ng-deep .vx-form-group .file-list button{font-size:12px;color:#eb2424;cursor:pointer;display:flex;padding:0;border:none;outline:none;background:transparent}::ng-deep .vx-form-group .file-list button.edit{color:#1e5dd3}::ng-deep .vx-form-group .file-list button+button{margin-left:16px}::ng-deep .vx-form-group .file-list+.file-list{margin-top:4px}::ng-deep .vx-form-group .file-list .file-container{display:flex;justify-content:space-between;width:100%}::ng-deep .vx-form-group .file-list.policy{background:#fff}::ng-deep .vx-form-group .file-list cs-select{position:relative;margin-top:8px;width:100%}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group input.value{height:32px!important;font-size:11px!important}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group i{right:12px!important;top:12px!important}::ng-deep .vx-form-group .file-list app-line-loader{display:block;position:absolute;left:10px;right:10px;bottom:0}::ng-deep .vx-form-group label.vx-control-panel{color:#161b2f;font-size:11px;font-weight:500;line-height:16px;margin-bottom:8px;display:block;text-transform:uppercase;width:100%;margin-top:4px;text-align:left}::ng-deep .vx-form-group label.vx-control-panel.custom-tag{font-size:10px}::ng-deep .vx-form-group label.vx-control-panel.vx-mt-8{margin-top:8px}::ng-deep .vx-form-group label.vx-control-panel span.required{color:#eb2424;font-size:16px;font-weight:400;position:relative;top:-2px}::ng-deep .vx-form-group label.vx-control-panel .button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;padding:0;margin:0}::ng-deep .vx-form-group label.vx-control-panel app-cs-switch{float:right;display:block}::ng-deep .vx-form-group label.vx-control-panel i{margin-left:8px;font-size:12px;color:#1e5dd3;cursor:pointer;position:relative;top:1px}::ng-deep .vx-form-group label.vx-control-panel i.depreciation-icon{color:#e4b700;font-size:16px;position:relative;top:3px}::ng-deep .vx-form-group label.vx-control-panel .checkpoint-version{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:10px;font-weight:600;line-height:14px;margin-left:4px;padding:0 2px}::ng-deep .vx-form-group .input,::ng-deep .vx-form-group input[type=text]{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400}::ng-deep .vx-form-group .input::-moz-placeholder,::ng-deep .vx-form-group input[type=text]::-moz-placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group .input:-ms-input-placeholder,::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group .input::placeholder,::ng-deep .vx-form-group input[type=text]::placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group .input:focus,::ng-deep .vx-form-group .input:hover,::ng-deep .vx-form-group input[type=text]:focus,::ng-deep .vx-form-group input[type=text]:hover{border-color:#1e5dd3;box-shadow:0 0 5px rgba(30,93,211,.27)}::ng-deep .vx-form-group .input.error,::ng-deep .vx-form-group input[type=text].error{border-color:#eb2424;color:#eb2424;margin-bottom:4px}::ng-deep .vx-form-group .input.error:focus,::ng-deep .vx-form-group input[type=text].error:focus{box-shadow:0 0 5px rgba(211,30,30,.27)}::ng-deep .vx-form-group .input:disabled,::ng-deep .vx-form-group input[type=text]:disabled{background:#f1f1f1;cursor:not-allowed;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}::ng-deep .vx-form-group .input:disabled:hover,::ng-deep .vx-form-group input[type=text]:disabled:hover{border-color:#dbdbdb;box-shadow:none}::ng-deep .vx-form-group .input span.text,::ng-deep .vx-form-group input[type=text] span.text{font-size:13px;color:#747576;font-weight:400;display:block;width:100%}::ng-deep .vx-form-group .input .input-group,::ng-deep .vx-form-group input[type=text] .input-group{display:flex;align-items:center}::ng-deep .vx-form-group .input .input-group.counter,::ng-deep .vx-form-group input[type=text] .input-group.counter{min-width:96px;width:96px}::ng-deep .vx-form-group .input .input-group.counter button,::ng-deep .vx-form-group input[type=text] .input-group.counter button{height:24px;width:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#747576;font-size:8px;cursor:pointer;outline:none}::ng-deep .vx-form-group .input .input-group.counter input,::ng-deep .vx-form-group input[type=text] .input-group.counter input{-webkit-appearance:textfield;-moz-appearance:textfield;height:24px;width:calc(100% - 48px);border:1px solid #f1f1f1;outline:none;padding:0 6px;text-align:center}::ng-deep .vx-form-group .input .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-outer-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-outer-spin-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:0}::ng-deep .vx-form-group .input+.file-list,::ng-deep .vx-form-group input[type=text]+.file-list{margin-top:8px}::ng-deep .vx-form-group .input::-moz-placeholder,::ng-deep .vx-form-group input[type=text]::-moz-placeholder{font-size:13px}::ng-deep .vx-form-group .input::placeholder,::ng-deep .vx-form-group input[type=text]::placeholder{font-size:13px}::ng-deep .vx-form-group .input:-ms-input-placeholder,::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .input::-ms-input-placeholder,::ng-deep .vx-form-group input[type=text]::-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .classification{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;padding:8px 12px;display:flex;justify-content:space-between}::ng-deep .vx-form-group .classification label{width:100%;position:relative;z-index:1;margin:0 4px 0 0}::ng-deep .vx-form-group .classification label span{display:block;width:100%;height:24px;border:1px solid #f1f1f1;border-radius:2px;line-height:24px;font-size:10px;text-align:center;color:#747576;font-weight:500;position:relative;text-transform:uppercase}::ng-deep .vx-form-group .classification label span:before{height:2px;content:\"\";top:0;right:0;left:0;border-radius:2px;position:absolute;transition:all .2s ease-in-out}::ng-deep .vx-form-group .classification label input{opacity:0;position:absolute;top:0;right:0;bottom:0;left:0;margin:0;padding:0;width:100%;height:100%;cursor:pointer;z-index:1}::ng-deep .vx-form-group .classification label input:checked+span{color:#fff}::ng-deep .vx-form-group .classification label input:checked+span:before{bottom:0;height:100%;z-index:-1}::ng-deep .vx-form-group .classification label.low span:before{background:#34aa44}::ng-deep .vx-form-group .classification label.low-med span:before{background:#f2bf19}::ng-deep .vx-form-group .classification label.med-high span:before{background:#f29619}::ng-deep .vx-form-group .classification label.high span:before{background:#eb2424}::ng-deep .vx-form-group .classification label:last-of-type{margin-right:0}::ng-deep .vx-form-group .input{display:flex;align-items:center}::ng-deep .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;padding:8px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:flex;align-items:center;position:relative;justify-content:space-between}::ng-deep .vx-form-group .selected.first-field{z-index:2}::ng-deep .vx-form-group .selected .chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .vx-form-group .selected .chip-container.checkpoints{width:calc(100% - 120px)}::ng-deep .vx-form-group .selected .chip-container span.chip{background:#fff;border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;padding:0 8px;color:#1e5dd3;font-size:12px;display:block;width:auto;max-width:100%;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .vx-form-group .selected .chip-container span.chip.disabled{background:#f1f1f1;box-shadow:none;color:#747576;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}::ng-deep .vx-form-group .selected .chip-container span.chip i{font-weight:400;margin-right:8px;cursor:pointer;font-size:10px;position:relative;top:1px}::ng-deep .vx-form-group .selected .chip-container span.chip span.step{background:#1e5dd3;border-radius:2px;color:#fff;font-size:9px;line-height:14px;padding:0 4px;font-weight:400;text-align:center;min-width:auto;margin-right:4px}::ng-deep .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question{display:flex;align-items:center;justify-content:space-between;width:100%}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.value{color:#1e5dd3;font-size:12px;font-weight:400;line-height:24px;padding:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 80px)}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.label{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding-left:4px;padding-right:4px;line-height:12px;margin-left:8px}::ng-deep .vx-form-group .selected .chip-container span.value{color:#747576;font-size:13px;line-height:20px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 52px);padding:0 4px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text{color:#747576;font-size:10px;font-weight:500;padding:0 8px;width:122px;line-height:14px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first{position:relative;min-width:162px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first:before{background:#f1f1f1;content:\"\";position:absolute;top:0;right:0;height:calc(100% + 12px);width:1px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text .no{color:#1e5dd3}::ng-deep .vx-form-group .selected .chip-container.plus span.chip{max-width:calc(50% - 35px)}::ng-deep .vx-form-group .selected .chip-container.more-one span.chip{max-width:50%}::ng-deep .vx-form-group .selected .chip-container .chip-inner{background:#fff;border-radius:2px;box-shadow:0 2px 4px #1e5dd31a;line-height:24px;padding:0 4px 0 8px;display:flex;align-items:center}::ng-deep .vx-form-group .selected .chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:300px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count{border-radius:20px;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .vx-form-group .selected .chip-container .chip-inner i.cross{cursor:pointer}::ng-deep .vx-form-group .selected button.count{background:#1e5dd3;border-radius:2px;height:24px;padding:0 8px;border:1px solid #1e5dd3;cursor:pointer;outline:none;color:#fff;font:13px;font-weight:500;line-height:20px;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit{border:1px solid #f1f1f1;border-radius:2px;background:#fff;outline:none;cursor:pointer;display:block;height:24px;padding:0 5px 0 4px;font-size:11px;font-weight:500;color:#1e5dd3;text-transform:uppercase;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit i{font-weight:400;font-size:8px;margin-right:4px}::ng-deep .vx-form-group .selected button.close-btn{background:transparent;border:none;padding:0;margin-left:8px;font-size:10px;color:#c7381b;display:flex;align-items:center}::ng-deep .vx-form-group .selected .workflow-label{min-width:92px;padding:4px;text-align:center;margin-left:-8px;margin-right:8px;border-right:1px solid #f1f1f1}::ng-deep .vx-form-group .selected .workflow-label p{margin:0;display:block;text-transform:uppercase}::ng-deep .vx-form-group .selected .workflow-label p.title{font-size:9px;line-height:12px;color:#161b2f;font-weight:500}::ng-deep .vx-form-group .selected .workflow-label p.description{font-size:11px;line-height:16px;color:#161b2f;font-weight:600}::ng-deep .vx-form-group .selected .workflow-label+.chip-container{width:calc(100% - 148px)}::ng-deep .vx-form-group .selected+.selected{margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .selected+app-cs-switch.who-toggle label.cs-switch span.value{color:#747576}::ng-deep .vx-form-group .selected+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .selected~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .selected.readOnly{pointer-events:none}::ng-deep .vx-form-group .selected span.chip{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .vx-form-group .select-list{position:absolute;background:#fff;box-shadow:0 0 5px #1e5dd3;top:100%;right:0;left:0;z-index:2}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item{width:100%;padding:12px 16px}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item:hover{background:#f8f8f8}::ng-deep .vx-form-group marx-editor{margin-top:8px;display:block}::ng-deep .vx-form-group marx-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb}::ng-deep .vx-form-group marx-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;max-height:100px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep .vx-form-group marx-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group marx-editor .editor-container .editable-block ul li{list-style:disc}::ng-deep .vx-form-group marx-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group marx-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .vx-form-group marx-editor .editor-container .editor-tools{z-index:1;border-top:1px solid #dbdbdb;transition:none;border-radius:0 0 3px 3px;position:static}::ng-deep .vx-form-group marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .vx-form-group marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .vx-form-group marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .vx-form-group marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .vx-form-group marx-editor .editor-container:focus-within{border-color:#1e5dd3!important}::ng-deep .vx-form-group marx-editor .editor-container:focus-within .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group marx-editor .editor-container:hover{border-color:#1e5dd3!important}::ng-deep .vx-form-group marx-editor .editor-container:hover .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group marx-editor+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group app-cs-switch label.cs-switch span.value{font-size:11px;color:#747576;text-transform:uppercase}::ng-deep .vx-form-group app-cs-switch+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group .date-time-picker{display:flex;justify-content:space-between;height:40px;border-radius:4px;border:1px solid #dbdbdb;padding:11px 0}::ng-deep .vx-form-group .date-time-picker:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px rgba(30,93,211,.27)}::ng-deep .vx-form-group .date-time-picker .picker-group{width:50%;position:relative;display:flex;align-items:center}::ng-deep .vx-form-group .date-time-picker .picker-group:first-of-type{border-right:1px solid #dbdbdb}::ng-deep .vx-form-group .date-time-picker .picker-group:only-of-type{border:none;width:100%}::ng-deep .vx-form-group .date-time-picker .picker-group input{height:38px;background:#fff;line-height:38px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400;border:none;padding:0 12px 0 34px;outline:none}::ng-deep .vx-form-group .date-time-picker .picker-group input:focus,::ng-deep .vx-form-group .date-time-picker .picker-group input:hover{box-shadow:none;border:none}::ng-deep .vx-form-group .date-time-picker .picker-group input::-moz-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input:-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group i{display:flex;justify-content:center;align-items:center;height:16px;width:16px;position:absolute;left:12px;top:0;color:#bcbcbc;font-size:16px;pointer-events:none}::ng-deep .vx-form-group app-cs-radio.main-filed{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;color:#707070}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group app-cs-radio.disabled{pointer-events:none;opacity:.5;filter:grayscale(1);background:#f1f1f1}::ng-deep .vx-form-group .switch-row{display:flex}::ng-deep .vx-form-group .switch-row app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:0;text-transform:uppercase;color:#747576!important}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:11px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 4px}::ng-deep .vx-form-group .switch-row app-cs-switch+app-cs-switch{margin-left:8px}::ng-deep .vx-form-group .switch-row.align-right{justify-content:flex-end}::ng-deep .vx-form-group .switch-row.align-right label.cs-switch span.value{margin-right:8px}::ng-deep .vx-form-group .risk-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;padding:4px;position:relative;z-index:1}::ng-deep .vx-form-group .risk-type-field .type-item{width:50%;position:relative}::ng-deep .vx-form-group .risk-type-field .type-item button{background:transparent;border:none;border-radius:0;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase;width:100%;height:32px;padding:0 12px;text-align:left}::ng-deep .vx-form-group .risk-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .vx-form-group .risk-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .vx-form-group .risk-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(100%)}::ng-deep .vx-form-group .risk-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:208px;height:32px;z-index:-1;transition:.25s ease-out}.left{width:36px;height:36px;margin-top:30px;margin-left:-58px;margin-right:20px;display:flex;justify-content:center;align-items:center;position:relative;z-index:10;border-radius:50%}.left.deadline-completed{margin-top:18px}.left.checked{background:transparent}.left img{width:36px}.left .checkIcon{width:32px;height:32px;background:#fff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 0 #34aa44;-webkit-animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}.left .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;-webkit-animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}.left .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;-webkit-animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}.right{width:100%}.right span.indicator{position:absolute;top:36px;left:-16px;font-size:12px;color:#f0b819;cursor:pointer}.form-group-row{display:flex;position:relative;transition:all .2s ease-in-out}.form-group-row.disabled{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;filter:grayscale(1);z-index:2}.form-group-row.disabled .left{position:relative}.form-group-row.disabled .left:before{content:\"\";position:absolute;top:2px;right:0;bottom:0;left:2px;background:#fff;opacity:.7;border-radius:50%;width:32px;height:32px}.form-group-row.disabled .right{opacity:.3}.form-group-row.active{pointer-events:none;filter:grayscale(0);z-index:2;opacity:1}.form-group-row.active .right .vx-form-group .custom-input,.form-group-row.active .right .vx-form-group input{border-color:#1e5dd3;box-shadow:0 0 5px rgba(30,93,211,.27)}::ng-deep .radio-group-selector app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .radio-group-selector app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .radio-group-selector app-cs-radio label.radio-item .radio,::ng-deep .radio-group-selector app-cs-radio label.radio-item .radiomark{position:absolute!important;top:9px;left:12px}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value{font-size:11px!important;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0!important;max-width:100%!important;font-weight:500!important;color:#707070!important}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value i{font-size:12px;color:#1e5dd3}::ng-deep .radio-group-selector app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}@-webkit-keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes strokeCheck{to{stroke-dashoffset:0}}@-webkit-keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}.action-list{width:220px}.action-list ul{padding:0;margin:0;-webkit-animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}.action-list ul.action-item{display:block}.action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}.action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}.action-list ul.action-item li button i{font-size:17px;margin-right:10px;color:#1c5bd1}.action-list ul.action-item li button:hover{background:#f3f3f3}.action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.action-list ul.action-item li .avatar-card.within-con{display:block}.action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;overflow:hidden;background:#4681ef;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.action-list ul.action-item li .avatar-card .avatar img{width:100%}.action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;-moz-text-align-last:left;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}.action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#1c5bd1;cursor:pointer;margin-right:5px}.action-list ul.action-item li .avatar-card.no-image{display:block}.action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.action-list ul.action-item li .chip-item i{margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}.action-list ul.action-item li .chip-item span{display:block;width:auto;max-width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.action-list ul.action-item li .chip-item span.id{font-size:9px}.action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}.action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}.action-list ul.action-item li:first-child{-webkit-animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(2){-webkit-animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(3){-webkit-animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(4){-webkit-animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(5){-webkit-animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(6){-webkit-animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(7){-webkit-animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(8){-webkit-animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(9){-webkit-animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(10){-webkit-animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}@-webkit-keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}@keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}@-webkit-keyframes scale-up-center{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}@keyframes scale-up-center{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}p.error-message{font-size:11px;font-weight:400;color:#eb2424;line-height:16px;margin-top:8px;margin-bottom:0}.edit-loader{position:absolute;top:-3px;left:-3px;width:46px;height:46px;transform:rotate(180deg)}.circular-loader{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;height:100%;transform-origin:center center;width:100%;position:absolute;top:0;left:0;margin:auto}.loader-path{stroke-dasharray:150,200;stroke-dashoffset:-10;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite;stroke-linecap:round}@-webkit-keyframes rotate{to{transform:rotate(1turn)}}@keyframes rotate{to{transform:rotate(1turn)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}to{stroke-dasharray:89,200;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}to{stroke-dasharray:89,200;stroke-dashoffset:-124}}::ng-deep .dropdown{position:fixed;background:#fff;box-shadow:0 3px 6px #00000029;padding:24px 0;z-index:9;max-height:calc(100vh - 200px);overflow:auto}::ng-deep .dropdown ul.dropdown-list{padding:0 20px;margin:0;display:block}::ng-deep .dropdown ul.dropdown-list li{list-style:none}::ng-deep .dropdown ul.dropdown-list li app-cs-radio{display:flex}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.radio{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.value{padding:11px 12px 11px 32px;width:100%;border:1px solid #bcbcbc;border-radius:4px;margin-left:0;max-width:100%}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item svg{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item input[type=radio]:checked~span.value{background:#e8feeb;border-color:#34aa44}::ng-deep .dropdown ul.dropdown-list li+li{margin-top:8px}app-smiley-dialog{position:relative;z-index:10}app-smiley-dialog-inline{position:absolute;top:-3px;right:0;bottom:0;z-index:999;width:520px;height:calc(100vh + 3px)}::ng-deep .vx-overlay{position:fixed;z-index:3;top:0;right:0;bottom:0;left:0}dp-date-picker{width:100%;position:fixed!important;z-index:14;top:-40px;left:0}dp-date-picker input{width:100%;border:none;opacity:0;pointer-events:none}dp-date-picker input:focus{outline:none}dp-date-picker .dp-popup{width:412px;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;-webkit-animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}dp-date-picker .dp-popup dp-day-calendar,dp-date-picker .dp-popup dp-month-calendar{width:100%;pointer-events:auto}dp-date-picker .dp-popup dp-day-calendar button,dp-date-picker .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left,dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right,dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left,dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right,dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:hover,dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover,dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:hover{background-color:#f3f3f3}dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:before,dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week,dp-date-picker .dp-popup dp-day-calendar .dp-weekdays,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week,dp-date-picker .dp-popup dp-month-calendar .dp-weekdays{display:flex;justify-content:space-around}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,dp-date-picker .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday,dp-date-picker .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button,dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button,dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button:hover,dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button:hover,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button:hover,dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button:hover{background-color:#f3f3f3}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected,dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-selected{background:#1e5dd3}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day,dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}dp-date-picker .dp-popup dp-day-calendar .dp-day-calendar-container,dp-date-picker .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container,dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}dp-date-picker .dp-popup dp-day-calendar .dp-calendar-wrapper,dp-date-picker .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}dp-date-picker .dp-open+div{position:fixed!important;top:0!important;right:0!important;bottom:0!important;left:0!important;display:flex;justify-content:center;align-items:center;z-index:99;pointer-events:none;background:rgba(0,0,0,.3)}@-webkit-keyframes slide-bottom{0%{transform:translateY(-100px)}to{transform:translateY(0)}}@keyframes slide-bottom{0%{transform:translateY(-100px)}to{transform:translateY(0)}}::ng-deep span.file{display:block;width:20px;min-width:20px;border-radius:0 0 2px 2px;position:relative;margin-right:5px;border:1px solid #747576;border-top:none;margin-top:5px;background:#fff}::ng-deep span.file.table{margin-right:8px;width:18px;min-width:18px}::ng-deep span.file.table i{font-size:8px}::ng-deep span.file.table .format{height:8px;font-size:7px;line-height:8px;font-weight:400}::ng-deep span.file:before{position:absolute;border-radius:0;top:-4px;right:-1px;content:\"\";height:4px;width:4px;display:block;background:linear-gradient(45deg,#747576,#747576 1%,#747576 50%,rgba(41,137,216,0) 51%,rgba(125,185,232,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file:after{height:4px;left:-1px;right:3px;border-top:1px solid;border-right:none;border-left:1px solid;content:\"\";top:-4px;position:absolute;border-radius:2px 0 0 0;background:#fff}::ng-deep span.file .format{height:10px;font-size:6px;text-transform:uppercase;background:transparent;font-weight:600;text-align:center;display:block;line-height:10px}::ng-deep span.file i{font-size:10px;height:10px;display:flex;align-items:center;justify-content:center;color:#dbdbdb}::ng-deep span.file.docx{width:22px!important}::ng-deep span.file.pdf,::ng-deep span.file.template{border-color:#f31c39}::ng-deep span.file.pdf:before,::ng-deep span.file.template:before{background:linear-gradient(45deg,#f31c39,#f31c39 50%,rgba(41,137,216,0) 51%,rgba(125,185,232,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#f31c39\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.pdf:after,::ng-deep span.file.template:after{border-color:#f31c39}::ng-deep span.file.pdf .format,::ng-deep span.file.template .format{color:#f31c39}::ng-deep span.file.css,::ng-deep span.file.less,::ng-deep span.file.scss,::ng-deep span.file.xls,::ng-deep span.file.xlsx{border-color:#34aa44}::ng-deep span.file.css:before,::ng-deep span.file.less:before,::ng-deep span.file.scss:before,::ng-deep span.file.xls:before,::ng-deep span.file.xlsx:before{background:linear-gradient(45deg,#34aa44,#34aa44 1%,#34aa44 50%,rgba(41,137,216,0) 51%,rgba(125,185,232,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.css:after,::ng-deep span.file.less:after,::ng-deep span.file.scss:after,::ng-deep span.file.xls:after,::ng-deep span.file.xlsx:after{border-color:#34aa44;color:#34aa44}::ng-deep span.file.css .format,::ng-deep span.file.less .format,::ng-deep span.file.scss .format,::ng-deep span.file.xls .format,::ng-deep span.file.xlsx .format{color:#34aa44}::ng-deep span.file.doc,::ng-deep span.file.docx,::ng-deep span.file.psd{border-color:#1e5dd3}::ng-deep span.file.doc:before,::ng-deep span.file.docx:before,::ng-deep span.file.psd:before{background:linear-gradient(45deg,#1e5dd3,#1e5dd3 1%,#1e5dd3 50%,rgba(41,137,216,0) 51%,rgba(125,185,232,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.doc:after,::ng-deep span.file.docx:after,::ng-deep span.file.psd:after{border-color:#1e5dd3}::ng-deep span.file.doc .format,::ng-deep span.file.docx .format,::ng-deep span.file.psd .format{color:#1e5dd3}::ng-deep span.file.ai,::ng-deep span.file.html,::ng-deep span.file.jpeg,::ng-deep span.file.jpg,::ng-deep span.file.png,::ng-deep span.file.ppt{border-color:#f6882f}::ng-deep span.file.ai:before,::ng-deep span.file.html:before,::ng-deep span.file.jpeg:before,::ng-deep span.file.jpg:before,::ng-deep span.file.png:before,::ng-deep span.file.ppt:before{background:linear-gradient(45deg,#f6882f,#f6882f 1%,#f6882f 50%,rgba(41,137,216,0) 51%,rgba(125,185,232,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.ai:after,::ng-deep span.file.html:after,::ng-deep span.file.jpeg:after,::ng-deep span.file.jpg:after,::ng-deep span.file.png:after,::ng-deep span.file.ppt:after{border-color:#f6882f}::ng-deep span.file.ai .format,::ng-deep span.file.html .format,::ng-deep span.file.jpeg .format,::ng-deep span.file.jpg .format,::ng-deep span.file.png .format,::ng-deep span.file.ppt .format{color:#f6882f}::ng-deep span.file.php{border-color:#7aa6f7}::ng-deep span.file.php:before{background:linear-gradient(45deg,#7aa6f7,#7aa6f7 1%,#7aa6f7 50%,rgba(41,137,216,0) 51%,rgba(125,185,232,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.php:after{border-color:#7aa6f7}::ng-deep span.file.php .format{color:#7aa6f7}::ng-deep ngx-material-timepicker-container .timepicker-backdrop-overlay{background-color:rgba(0,0,0,.05)!important;z-index:9999999999!important}::ng-deep ngx-material-timepicker-container .timepicker-overlay{z-index:9999999999!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker{width:232px!important;border-radius:2px!important;box-shadow:0 4px 30px #161b2f26!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header{background-color:#fff!important;padding:0!important;border-radius:2px 2px 0 0}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container{display:block!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time{color:#000!important;width:150px!important;margin:0 auto;line-height:60px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control{font-size:40px;background-color:transparent!important;color:#000!important;font-weight:600;text-align:right;caret-color:transparent;outline:none;font-family:Poppins;line-height:56px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:focus,::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:hover{background-color:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control:last-of-type .timepicker-dial__control{text-align:left}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time span{padding:0 8px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period{display:flex!important;width:182px;margin:0 auto!important;background:#f1f1f1;padding:4px 10px;border-radius:20px;position:relative}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period:before{background:#f1f1f1;content:\"\";position:absolute;top:15px;left:-25px;width:calc(100% + 50px);height:2px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period{flex-direction:unset!important;position:relative;z-index:1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:after{content:\"\";position:absolute;right:-12px;top:0;border-left:14px solid #f1f1f1;border-bottom:12px solid transparent;border-top:12px solid transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:before{content:\"\";position:absolute;left:-18px;top:0;border-right:14px solid #f1f1f1;border-bottom:12px solid transparent;border-top:12px solid transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button{font-size:11px;background-color:transparent;padding:0;border-radius:20px;color:#747576;font-weight:600;font-family:Poppins;width:84px;height:24px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button.timepicker-dial__item_active{background:#fff!important;color:#1e5dd3!important;box-shadow:0 1px 2px #dbdbdb}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button+button{margin-left:0!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face{width:200px!important;height:200px!important;padding:10px!important;background:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer{height:calc(224px / 2 - 20px)!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span{color:#000}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span.active{color:#fff}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand{height:80px!important;top:calc(50% - 80px)!important;background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number>span.active{background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand_minute:before{border:4px solid #1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions{display:flex!important;padding:10px 0 0!important;background:#fff!important;justify-content:space-around!important;border-radius:0 0 2px 2px!important;overflow:hidden}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div:first-child ngx-material-timepicker-button button.timepicker-button{background:#f8f8f8;color:#1e5dd3}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button{line-height:28px!important;width:100%;background:#1e5dd3;color:#fff;border-radius:0!important;height:32px!important;width:116px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button span{font-weight:500!important;font-size:11px;font-family:Poppins}::ng-deep marx-modal .popup-modal-background{background-color:#161b2fcc!important}::ng-deep .within-box{background:#f1f1f1;border-radius:.125rem;color:#042e7d}::ng-deep .within-value{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;word-break:break-word}"]
2831
2889
  },] }
2832
2890
  ];
@@ -2864,4 +2922,4 @@ WorkflowComplianceComponent.propDecorators = {
2864
2922
  onReviewerTypeChange: [{ type: Output }],
2865
2923
  whatInput: [{ type: ViewChild, args: ['what',] }]
2866
2924
  };
2867
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctY29tcGxpYW5jZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi93b3JrZmxvdy1jb21wbGlhbmNlL3dvcmtmbG93LWNvbXBsaWFuY2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFbkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ25GLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQVV4RSxNQUFNLE9BQU8sMkJBQTJCO0lBeVN0QyxZQUNVLFdBQXdCLEVBQ3hCLHFCQUE0QyxFQUM1QyxnQkFBa0MsRUFDbEMsWUFBMEIsRUFDMUIsUUFBeUIsRUFDekIsVUFBdUIsRUFDdkIsY0FBK0I7UUFOL0IsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtR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QixJQUFJLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztRQUMvQixJQUFJLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztRQUMvQixJQUFJLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdEQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRSxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsU0FBUywwQ0FBRSxJQUFJLENBQUMsQ0FBQztRQUN0RSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLGNBQWMsMENBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsSCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsU0FBUywwQ0FBRSxJQUFJLENBQUMsQ0FBQztRQUN0RSxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLGNBQWMsMENBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztR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O0lBRUwsQ0FBQzs7O1lBejRGRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtnQkFDbkMsa3M4RkFBbUQ7O2FBSXBEOzs7WUFqQlEsV0FBVztZQUNYLHFCQUFxQjtZQUNyQixnQkFBZ0I7WUFFaEIsWUFBWTtZQUNaLGVBQWU7WUFMZixXQUFXO1lBUVgsZUFBZTs7O21CQWNyQixLQUFLOytCQUNMLEtBQUs7K0JBQ0wsS0FBSzt3QkFDTCxLQUFLO3NCQUNMLEtBQUs7eUJBVUwsS0FBSyxTQUFDLFlBQVk7eUJBS2xCLEtBQUs7NEJBR0wsTUFBTTs2QkFDTixNQUFNOzBDQUNOLE1BQU07NEJBQ04sTUFBTTt3QkFDTixNQUFNO2dDQUNOLE1BQU07cUNBQ04sTUFBTTt5QkFDTixNQUFNO3lCQUNOLEtBQUs7eUJBQ0wsS0FBSztpQ0FLTCxLQUFLLFNBQUMsaUJBQWlCO21DQVd0QixNQUFNO21DQUNOLE1BQU07aUNBQ04sTUFBTTttQ0FDTixNQUFNO3dCQWlQUCxTQUFTLFNBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBFZGl0b3JDb25maWcgfSBmcm9tICd2Y29tcGx5LWVkaXRvcic7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzcG9uc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvcmVzcG9uc2liaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IEZyZXF1ZW5jeVNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWRDb21wb25lbnRzL2ZyZXF1ZW5jeS9mcmVxdWVuY3kuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBVaUtpdFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy91aS1raXQuc2VydmljZSc7XHJcbmltcG9ydCB7IFNuYWNrQmFyU2VydmljZSB9IGZyb20gJy4uL3VpLWtpdC9zbmFjay1iYXIvc25hY2stYmFyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUHJvZ3JhbXNTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvcHJvZ3JhbXMuc2VydmljZSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtd29ya2Zsb3ctY29tcGxpYW5jZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3dvcmtmbG93LWNvbXBsaWFuY2UuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3dvcmtmbG93LWNvbXBsaWFuY2UuY29tcG9uZW50Lmxlc3MnLCAnLi4vZm9ybXMubGVzcyddLFxyXG4gIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG5cclxufSlcclxuZXhwb3J0IGNsYXNzIFdvcmtmbG93Q29tcGxpYW5jZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cclxuLyogRGVmaW5pbmcgdGhlIGlucHV0IHBhcmFtZXRlcnMgZm9yIHRoZSBjb21wb25lbnQuICovXHJcbiAgQElucHV0KCkgbW9kZSA9ICdDUkVBVEUnO1xyXG4gIEBJbnB1dCgpIHJlc3BvbnNpYmlsaXR5SWQgPSAnJztcclxuICBASW5wdXQoKSBmcmFtZXdvcmtEZXRhaWxzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgQElucHV0KCkgaXNFbnRydXN0OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBmZWF0dXJlOmFueTtcclxuICBhbGxHcm91cEFzc2lnbmVlOiBib29sZWFuID0gdHJ1ZTtcclxuICBhc3NpZ25vcklkOiBhbnlbXT1bXTtcclxuICBhc3NpZ25lZUlkczogYW55W109IFtdO1xyXG4gIHJldmlld2VySWRzOiBhbnlbXSA9IFtdO1xyXG4gIG92ZXJzZWVySWRzOiBhbnlbXSA9IFtdO1xyXG4gIGRpc2FibGVSYWRpb0Fzc2lnbmVlOiBhbnlbXSA9IFtdO1xyXG4gIGlzUmVzcG9uc2liaWxpdHlTaW1wbGlmaWVkOiBib29sZWFuID1mYWxzZTtcclxuICBxdWVyeVBhcmFtOiBzdHJpbmcgPSAnJztcclxuICByZWNlbnRSZXNwb25zaWJpbGl0eVVybDogYW55ID0ge1wiYnlSZXNwb25zaWJpbGl0aWVzXCI6e1widHlwZVwiOltcInJlY2VudF9yZXNwb25zaWJpbGl0aWVzXCJdLFwic3ViVHlwZVwiOltcIkNDXCJdfSxcImJ5U3RhdHVzXCI6e1widHlwZVwiOltdLFwic3ViVHlwZVwiOltdfSxcImZpbHRlck9iamVjdFwiOntcInJlc3BvbnNpYmlsaXR5Q2VudGVyXCI6W10sXCJlbnRydXN0ZWRCeVwiOltdLFwiZW50cnVzdGVkVG9cIjpbXSxcInJpc2tJZHNcIjpbXSxcInJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnlcIjpbXX0sXCJ0aW1lUGVyaW9kRGV0YWlsc1wiOntcInR5cGVcIjpcIlwiLFwic2VsZWN0ZWRQZXJpb2RcIjpcIlwiLFwic2VsZWN0ZWRZZWFyXCI6XCJcIn0sXCJzdGF0dXNcIjpcIlwifTtcclxuICBASW5wdXQoJ2Nsb3NlT25Fc2MnKSBzZXQgY2xvc2VPbkVzYyhlc2NhcGVDb25kaXRpb246IGJvb2xlYW4pIHtcclxuICAgIGlmIChlc2NhcGVDb25kaXRpb24pIHtcclxuICAgICAgdGhpcy5hY3RpdmVEZXNlbGVjdG9yKClcclxuICAgIH1cclxuICB9XHJcbiAgQElucHV0KCkgb3JnRGV0YWlsczogYW55O1xyXG5cclxuICB1cmwgPSdxPXtcImJ5UmVzcG9uc2liaWxpdGllc1wiOntcInR5cGVcIjpbXCJyZXNwb25zaWJpbGl0aWVzX2luX3F1ZXVlXCJdLFwic3ViVHlwZVwiOltcIkNDXCJdfSxcImJ5U3RhdHVzXCI6e1widHlwZVwiOltcInJlc3BvbnNpYmlsaXRpZXNfaW5fcXVldWVcIl0sXCJzdWJUeXBlXCI6W119LFwiZmlsdGVyT2JqZWN0XCI6e1wicmVzcG9uc2liaWxpdHlDZW50ZXJcIjpbXSxcImVudHJ1c3RlZEJ5XCI6W10sXCJlbnRydXN0ZWRUb1wiOltdLFwicmlza0lkc1wiOltdLFwicmVzcG9uc2liaWxpdHlDYXRlZ29yeVwiOltdfSxcInRpbWVQZXJpb2REZXRhaWxzXCI6e1widHlwZVwiOlwiXCIsXCJzZWxlY3RlZFBlcmlvZFwiOlwiXCIsXCJzZWxlY3RlZFllYXJcIjpcIlwifSxcInN0YXR1c1wiOlwiXCJ9J1xyXG4gIEBPdXRwdXQoKSBwaWNrZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwb3B1bGF0ZU9wdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaGlkZUVsZW1lbnRzRnJvbU1vcmVPcHRpb25zID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZVdvcmtmbG93ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSByZXNldEZvcm0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGRpc2Nvbm5lY3RSZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjaGVja3BvaW50Q291bnRVcGRhdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSByY1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBJbnB1dCgpIG9wZW5lZEZyb20gITogYW55OyAvL3doZW4gb3BlbmVkIGZyb20gcmlzayB0cmVhdG1lbnQgaXQgd2lsbCBiZSAnUklTS19UUkVBVE1FTlQnXHJcbiAgQElucHV0KCkgc2VsZWN0ZWRSQzogbnVtYmVyID0gMDsgLy8gNC01IGRpZ2l0IGlkIG9mIHNlbGVjdGVkIHJjIGJ5IGRlZmF1bHQgd2hlbiBvcGVuZWQgZnJvbSByaXNrIHRyZWF0bWVudFxyXG4gIC8vIEBJbnB1dCgpIHNlbGVjdGVkUHJvZ3JhbTogYW55ID0gbnVsbDtcclxuICBmZWF0dXJlRmxhZ19ncm91cHMgOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRQcm9ncmFtIDogYW55ID0gbnVsbDtcclxuICBzZWxlY3RlZFJldmlld2VyIDpib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoJ3NlbGVjdGVkUHJvZ3JhbScpIHNldCBzZXRTZWxlY3RlZFByb2dyYW0ocHJvZ3JhbTogYW55KSB7XHJcbiAgICBpZihwcm9ncmFtICYmIE9iamVjdC5rZXlzKHByb2dyYW0pPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW0gPSBwcm9ncmFtO1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtID0gW107XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmxpbmtlZFByb2dyYW0gPSBbXTtcclxuICAgICAgLy8gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbS5wdXNoKHByb2dyYW0pO1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5saW5rZWRQcm9ncmFtLnB1c2gocHJvZ3JhbSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAgLyogQ3JlYXRpbmcgYW4gZXZlbnQgZW1pdHRlci4gKi9cclxuICAgQE91dHB1dCgpIG9uUmVtb3ZpbmdDaGVja3BvaW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgQE91dHB1dCgpIGlzQXNzZXNzbWVudERpc2FibGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICBAT3V0cHV0KCkgYXNzaWduZWVUeXBlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvLyBpdCB3aWxsIGVtaXQgd2hlbiBhc3NpZ25lZSB0eXBlIGNoYW5nZVxyXG4gICBAT3V0cHV0KCkgb25SZXZpZXdlclR5cGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vIGl0IHdpbGwgZW1pdCB3aGVuIHJldmlld2VyIHR5cGUgY2hhbmdlXHJcblxyXG4gIHNjcm9sbFRvQm90dG9tID0gZmFsc2U7XHJcbiAgZGVzY3JpcHRpb246IEVkaXRvckNvbmZpZyA9IHtcclxuICAgIG1vZGU6ICdwcmltZScsXHJcbiAgICBjb2xvclBhbGV0dGU6IHRydWUsXHJcbiAgICBsaW5rOiB0cnVlLFxyXG4gICAgcGxhY2Vob2xkZXI6ICdBZGQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjb21wbGV0aW5nIHRoZSByZXNwb25zaWJpbGl0eScsXHJcbiAgfTtcclxuICBwcm9ncmFtUGVvcGxlTGlzdDogYW55ID0ge1xyXG4gICAgYXNzaWduZWVzTGlzdDogW10sXHJcbiAgICByZXZpZXdlcnNMaXN0OiBbXSxcclxuICAgIG92ZXJzZWVyc0xpc3Q6IFtdLFxyXG4gIH1cclxuICBsb2FkZXIgPSBmYWxzZTtcclxuICBzdWJtaXR0ZWQgPSBmYWxzZTtcclxuICBlZGl0RGV0YWlscyE6IGFueTtcclxuICBzbWlsZXlNZXNzYWdlID0gYERvbmUhYDtcclxuICBhY3Rpb25CdXR0b25zID0gW1xyXG4gICAgeyBidXR0b25UZXh0OiAnRW50cnVzdCBNb3JlIFJlc3BvbnNpYmlsaXRpZXMnLCBjbGFzczogJ3doaXRlLWJ0bicsIGlkOiAnYWRkTW9yZScgfSxcclxuICAgIHsgYnV0dG9uVGV4dDogJ1ZpZXcgUmVzcG9uc2liaWxpdGllcycsIGNsYXNzOiAnYmx1ZS1idG4nLCBpZDogJ3ZpZXcnIH0sXHJcbiAgXTtcclxuICBzaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgbWVtYmVySWQgPSAwO1xyXG4gIG9yZ2FuaXphdGlvbklkID0gMDtcclxuICByY0xpc3RMb2FkZWQgPSBmYWxzZTtcclxuICBhc3NpZ25vcnNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgYXNzaWduZWVzTGlzdExvYWRlZCA9IGZhbHNlO1xyXG4gIGNhdGVnb3JpZXNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgZ3JvdXBzTGlzdExvYWRlZCA9IGZhbHNlO1xyXG4gIGFzc3VyYW5jZUNhdGVnb3J5TGlzdExvYWRlZCA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkRnJhbWV3b3JrVmFsdWVzITogYW55O1xyXG4gIGhhc1Jldmlld2VyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICAvLyB1c2Vyc0xpc3Q6IGFueVtdID0gW107XHJcbiAgYXNzaWdub3JzTGlzdDogYW55W10gPSBbXTtcclxuICBhc3NpZ25lZXNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHJldmlld2Vyc0xpc3Q6IGFueVtdID0gW107XHJcbiAgZGlzYWJsZUFzc2lnbmVlSWRzOiBhbnlbXSA9IFtdO1xyXG4gIGRpc2FibGVSZXZpZXdlcklkczogYW55W10gPSBbXTtcclxuICBkaXNhYmxlT3ZlcnNlZXJJZHM6IGFueVtdID0gW107XHJcbiAgcmV2aWV3ZXJNZW1iZXJJZHNMaXN0IDogYW55W10gPSBbXTtcclxuICBncm91cE92ZXJzZWVyTGlzdDogYW55W10gPSBbXTtcclxuICBncm91cFJldmlld2VyTGlzdDogYW55W10gPSBbXTtcclxuICBncm91cEFzc2lnbmVlTGlzdDogYW55W10gPSBbXTtcclxuICBvdmVyc2VlcnNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGFsbFVzZXJzTGlzdDogYW55W10gPSBbXTtcclxuICBiZWhhbGZPZlVzZXJzTGlzdDogYW55W10gPSBbXTtcclxuICBhc3NpZ25lZVVzZXJMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHJldmlld2VyVXNlckxpc3Q6IGFueVtdID0gW107XHJcbiAgb3ZlcnNlZXJVc2VyTGlzdDogYW55W10gPSBbXTtcclxuICBvdmVyc2VlclVzZXJOb3RpZnlMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGFsbENhdGVnb3JpZXM6IGFueVtdID0gW107XHJcbiAgYXNzdXJhbmNlQ2F0ZWdvcmllc0xpc3Q6IGFueVtdID0gW107XHJcbiAgYXNzdXJhbmNlUmVxdWlyZXNBdWRpdExpc3Q6IGFueVtdID0gW107XHJcbiAgZ3JvdXBzTGlzdDogYW55W10gPSBbXTtcclxuICBPcmdHcm91cCA6YW55W10gPSBbXTtcclxuICBhZG1pbnNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3Q6IGFueVtdID0gW107XHJcbiAgY2F0ZWdvcnlMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIG5vblJlbW92YWJsZVVzZXJzTGlzdDogYW55W10gPSBbXTtcclxuXHJcbiAgcmVzcG9uc2liaWxpdHlGb3JtOiBhbnkgPSB7XHJcbiAgICBhc3NpZ25vcnM6IHtcclxuICAgICAgZW5hYmxlOiBmYWxzZSxcclxuICAgICAgbGlzdDogW11cclxuICAgIH0sXHJcbiAgICByZXNwb25zaWJpbGl0eToge1xyXG4gICAgICBuYW1lOiAnJyxcclxuICAgICAga2V5UmVzcG9uc2liaWxpdHk6IGZhbHNlLFxyXG4gICAgfSxcclxuICAgIGFzc2lnbmVlR3JvdXBzOntcclxuICAgICAgd2hvQ2FuQ29tcGxldGU6ICdBTllPTkUnLFxyXG4gICAgICBsaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIGFzc2lnbmVlczoge1xyXG4gICAgICB3aG9DYW5Db21wbGV0ZTogJ0FMTCcsXHJcbiAgICAgIGxpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgZnJlcXVlbmN5OiAnJyxcclxuICAgIGRlc2NyaXB0aW9uOiAnJyxcclxuICAgIG9iamVjdGl2ZTogJycsXHJcbiAgICByYzogW10sXHJcbiAgICBjYXRlZ29yeTogW10sXHJcbiAgICBwcm9ncmFtOiBbXSxcclxuICAgIHByb2dyYW1fc2VsZWN0ZWRfaWRzOiBbXSxcclxuICAgIGNoZWNrcG9pbnRJbnN0cnVjdGlvbjogJycsXHJcbiAgICBjdXN0b21UYWdzOiBbXSxcclxuICAgIGNoZWNrcG9pbnRzOiBbXSxcclxuICAgIHJldmlld2Vyczoge1xyXG4gICAgICBzZXF1ZW50aWFsV29ya2Zsb3c6IHRydWUsXHJcbiAgICAgIHJldmlld0ZyZXF1ZW5jeToge1xyXG4gICAgICAgIHJldmlld0NvbXBsZXRlRGF5czogMixcclxuICAgICAgICByZXZpZXdOT3RDb21wbGV0ZWREYXlzOiAyXHJcbiAgICAgIH0sXHJcbiAgICAgIGxpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgZ3JvdXBSZXZpZXdlcnM6IHtcclxuICAgICAgc2VxdWVudGlhbFdvcmtmbG93OiB0cnVlLFxyXG4gICAgICByZXZpZXdGcmVxdWVuY3k6IHtcclxuICAgICAgICByZXZpZXdDb21wbGV0ZURheXM6IDIsXHJcbiAgICAgICAgcmV2aWV3Tk90Q29tcGxldGVkRGF5czogMlxyXG4gICAgICB9LFxyXG4gICAgICBsaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIG92ZXJzZWVyczoge1xyXG4gICAgICBub3RpZnlMaXN0OiBbXSxcclxuICAgICAgbGlzdDogW11cclxuICAgIH0sXHJcbiAgICBvdmVyc2VlcnNHcm91cHM6IHtcclxuICAgICAgbm90aWZ5TGlzdDogW10sXHJcbiAgICAgIGxpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgZm9ybWF0QW5kRXZpZGVuY2U6IHtcclxuICAgICAgZm9ybWF0UmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBmb3JtYXRGaWxlczogW10sXHJcbiAgICAgIGZvcm1hdExpbmtzOiBbXSxcclxuICAgICAgZXZpZGVuY2VSZXF1aXJlZDogZmFsc2UsXHJcbiAgICB9LFxyXG4gICAgYXNzdXJhbmNlTGlzdDogW10sXHJcbiAgICByZXF1aXJlc0F1ZGl0TGlzdDogW10sXHJcbiAgICByaXNrQ2xhc3M6IDEsXHJcbiAgICByaXNrTWF0cml4OiAnMCwwLDAsMCwwLDAnLFxyXG4gICAgYXVkaXRfY2F0ZWdvcnlfZGV0YWlsczoge1xyXG4gICAgICBjYXRlZ29yeV9pZDogMCxcclxuICAgICAgc2FtcGxlOiA1LFxyXG4gICAgICBwZXJjZW50YWdlOiAzMCxcclxuICAgICAgZnJlcXVlbmN5X3BhdHRlcm46ICcxfjB+M34xJyxcclxuICAgICAgZnJlcXVlbmN5X3RpbWU6ICcyMzo1OTowMCdcclxuICAgIH0sXHJcbiAgICBhc3Nlc3NtZW50OiB7XHJcbiAgICAgIGNhdGVnb3J5X2lkOiAnJywgYXNzZXNzbWVudF9pZDogJydcclxuICAgIH0sXHJcbiAgICBuZXdfY2hlY2twb2ludHM6IHt9LFxyXG4gICAgbGlua2VkUHJvZ3JhbTogW10sXHJcbiAgfTtcclxuICBtb3JlT3B0aW9uczogYW55ID0ge1xyXG4gICAgT0JKRUNUSVZFOiBmYWxzZSxcclxuICAgIFJDOiBmYWxzZSxcclxuICAgIENBVEVHT1JZOiBmYWxzZSxcclxuICAgIFBST0dSQU06IGZhbHNlLFxyXG4gICAgRk9STUFURV9FVklERU5DRTogZmFsc2UsXHJcbiAgICBDSEVDS1BPSU5UUzogZmFsc2UsXHJcbiAgICBBU1NFU1NNRU5UOiBmYWxzZSxcclxuICAgIFJJU0tfQ0xBU1NJRklDQVRJT046IGZhbHNlLFxyXG4gICAgUkVWSUVXRVI6IGZhbHNlLFxyXG4gICAgT1ZFUlNFRVI6IGZhbHNlLFxyXG4gICAgQVNTVVJBTkNFOiBmYWxzZSxcclxuICAgIEFQUFM6IGZhbHNlLFxyXG4gICAgUkVRVUlSRVNfQVVESVQ6IGZhbHNlLFxyXG4gICAgQ0hFQ0tQT0lOVFNfTkVXOiBmYWxzZVxyXG4gIH07XHJcbiAgYWN0aXZlU2VsZWN0b3IgPSAnJztcclxuICBzaWRlU2VsZWN0b3JFbGVtZW50czogYW55ID0gWydhc3N1cmFuY2UnLCAnZnJhbWV3b3JrJywgJ2Fzc2lnbm9ycycsICdhc3NpZ25lZXMnLCAnY2F0ZWdvcnknLCAncHJvZ3JhbScsICdyYycsICdjaGVja3BvaW50cycsICdmcmVxdWVuY3knLCAncmV2aWV3ZXInLCAncmV2aWV3ZXJGcmVxdWVuY3knLCAnb3ZlcnNlZXInLCAnb3ZlcnNlZXJOb3RpZnknLCAncmlza0NhbGN1bGF0b3InLCAnaXNBc3Nlc3NtZW50JywgJ3JlcXVpcmVzX2F1ZGl0JywgJ2NoZWNrcG9pbnRzLW5ldyddO1xyXG5cclxuICBmb2N1cyA9IHtcclxuICAgIHJlc3BvbnNpYmlsaXR5TmFtZTogZmFsc2UsXHJcbiAgICBkZXNjcmlwdGlvbjogZmFsc2UsXHJcbiAgICBvYmplY3RpdmU6IGZhbHNlLFxyXG4gIH07XHJcblxyXG4gIGNhdGVnb3JpZXM6IGFueSA9IHtcclxuICAgIHJlZ3VsYXRpb25zOiB7XHJcbiAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgc3RhbmRhcmRzOiB7XHJcbiAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgaW50ZXJuYWxDb250cm9sczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIG90aGVyczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGFsbFByb2dyYW1zOiBhbnlbXSA9IFtdO1xyXG5cclxuICByaXNrQ2xhc3NpZmljYXRpb24gPSBbXHJcbiAgICB7IG5hbWU6ICdMb3cnLCB2YWx1ZTogMSwgY2xhc3M6ICdsb3cnIH0sXHJcbiAgICB7IG5hbWU6ICdMb3ctTWVkaXVtJywgdmFsdWU6IDIsIGNsYXNzOiAnbG93LW1lZCcgfSxcclxuICAgIHsgbmFtZTogJ01lZGl1bS1IaWdoJywgdmFsdWU6IDMsIGNsYXNzOiAnbWVkLWhpZ2gnIH0sXHJcbiAgICB7IG5hbWU6ICdIaWdoJywgdmFsdWU6IDQsIGNsYXNzOiAnaGlnaCcgfVxyXG4gIF07XHJcblxyXG4gIGFzc2lnbm9yTW9kZSA9ICdjaGVja2JveCc7XHJcbiAgcmNNb2RlID0gJ2NoZWNrYm94JztcclxuICBpbnZhbGlkVHlwZSA9ICcnO1xyXG4gIHJlc3BvbnNpYmlsaXR5UGF5bG9hZCE6IGFueTtcclxuICBhc3NpZ25lZVJhZGlvU2VsZWN0ID0gZmFsc2U7XHJcbiAgcHJvZ3JhbXNMaXN0OiBhbnlbXSA9IFtdO1xyXG5cclxuICAvLyBmcmVxdWVuY3kgdmFyaWFibGUgZGVjbGFyYXRpb25cclxuICBmcmVxdWVuY3lEZXRhaWxzID0ge1xyXG4gICAgcGF0dGVybjogJycsXHJcbiAgICBub3RpZmljYXRpb25QZW5kaW5nOiAwLFxyXG4gICAgZGF0ZU9mTW9kaWZpZWQ6IDAsXHJcbiAgICBkZWFjdGl2YXRpb25WYWx1ZTogMCxcclxuICAgIHNlbGVjdGVkUmVwb3J0OiAwLFxyXG4gICAgbGlmZWN5Y2xlOiAnMDAwMC0wMC0wMH5+MCcsXHJcbiAgICBzdGFydERhdGU6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcclxuICAgIHN0YXJ0T25UaGVEYXk6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcclxuICAgIHdpbmRvdzogMCxcclxuICAgIGZhaWxlZDogMCxcclxuICAgIHRpbWU6ICcxMTo1OSBwbScsXHJcbiAgICBmYWlsZWRUaW1lOiAnJyxcclxuICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDBcclxuICB9O1xyXG4gIGZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ0hvdyBvZnRlbiBkb2VzIHRoZSByZXNwb25zaWJpbGl0eSBvY2N1cj8nO1xyXG4gIHNob3J0TW9udGg6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICBpc0VkaXRXaGF0OiBCb29sZWFuID0gdHJ1ZTtcclxuICBpc0ZyYW1ld29ya0F2YWlsYWJsZSA9IDE7XHJcbiAgaXNOb3RpZmljYXRpb25QZW5kaW5nID0gMDtcclxuXHJcbiAgYXNzdXJhbmNlRmxhZyE6IGFueTtcclxuICByaXNrQ2xhc3NpZmljYXRpb25GbGFnITogYW55O1xyXG4gIGhpZGRlbkxpc3Q6IGFueVtdID0gW107XHJcbiAgc3Vic2NyaXB0aW9uRGV0YWlscyE6IGFueTtcclxuICBpc1Jpc2tFbmFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzRHVwbGljYXRlRW50cnVzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGF1ZGl0VGltZTogc3RyaW5nID0gJzExOjU5IHBtJztcclxuICBzZW5kQXVkaXRSZW1pbmRlcnNWYWx1ZTogbnVtYmVyID0gMjtcclxuICBzYW1wbGVWYWx1ZTogYW55O1xyXG4gIHNhbXBsZVBlcmNlbnRhZ2U6IGFueTtcclxuICBzZWxlY3RlZFNhbXBsZSE6IG51bWJlcjtcclxuICBpc1NhbXBsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRlbXBDaGVja1ZhbHVlOiBudW1iZXIgPSAtMTtcclxuICBpc0Fzc2Vzc21lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtYW5hZ2VQZXJtaXNzaW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2hlY2twb2ludENvdW50OiBudW1iZXIgPSAwO1xyXG4gIHJvbGVCYXNlZFBlcm1pc3Npb25zICE6IGFueTtcclxuICBpc0dyb3VwQXNzaWduZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICByZXNwb25zaWJpbGl0eURhdGEgITogYW55O1xyXG4gIG9yaWdpbmFsQXNzaWduZWUgITogYW55O1xyXG5cclxuXHJcbiAgQFZpZXdDaGlsZCgnd2hhdCcpIHdoYXRJbnB1dCE6IEVsZW1lbnRSZWY7XHJcbiAgdW5TdWJzY3JpYmVQcm9ncmFtID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNwb25zaWJpbGl0eVNlcnZpY2U6IFJlc3BvbnNpYmlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgZnJlcXVlbmN5U2VydmljZTogRnJlcXVlbmN5U2VydmljZSxcclxuICAgIHByaXZhdGUgdWlLaXRTZXJ2aWNlOiBVaUtpdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBTbmFja0JhclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBlcm1pc3Npb246IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwcm9ncmFtU2VydmljZTogUHJvZ3JhbXNTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJJbmZvKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBjb21wbGlhbmNlU3VibW9kdWxlID0gcmVzLnJvbGVBY3Rpb25zW3Jlcy5yb2xlQWN0aW9ucy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUubW9kdWxlTmFtZSA9PSAnY29tcGxpYW5jZScpXS5zdWJNb2R1bGU7XHJcbiAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gY29tcGxpYW5jZVN1Ym1vZHVsZVtjb21wbGlhbmNlU3VibW9kdWxlLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS5zdWJNb2R1bGVOYW1lID09ICdQcm9ncmFtcycpXS5wZXJtaXNzaW9ucztcclxuICAgICAgdGhpcy5tYW5hZ2VQZXJtaXNzaW9uID0gKHBlcm1pc3Npb25zW3Blcm1pc3Npb25zLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS5uYW1lID09ICdtYW5hZ2UgcHJvZ3JhbXMnKV0uZW5hYmxlKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgaWYgKHRoaXMubWFuYWdlUGVybWlzc2lvbikge1xyXG4gICAgICAgIHRoaXMuaGlkZGVuTGlzdC5wdXNoKCdDQVRFR09SWScpO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaGlkZGVuTGlzdC5wdXNoKCdQUk9HUkFNJyk7XHJcbiAgICAgICAgdGhpcy5nZXRDYXRlZ29yeUxpc3QoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmhpZGVFbGVtZW50c0Zyb21Nb3JlT3B0aW9ucy5lbWl0KHRoaXMuaGlkZGVuTGlzdCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgPSB0aGlzLmZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZCgnZmZfcmVzcG9uc2liaWxpdHlfZ3JvdXBzJyk7XHJcbiAgICB0aGlzLmlzUmVzcG9uc2liaWxpdHlTaW1wbGlmaWVkID0gdGhpcy5mZWF0dXJlLmlzRmVhdHVyZUVuYWJsZWQoJ2ZmX3Jlc3BvbnNpYmlsaXR5X3NpbXBsaWZpY2F0aW9uJyk7XHJcbiAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChmYWxzZSk7XHJcbiAgICAvLyAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlc3BvbnNpYmlsaXR5Lm5hbWUgPSBcImFiY2RlZlwiXHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnQVNTRVNTTUVOVCcpO1xyXG4gICAgdGhpcy5nZXRSQ0xpc3QoKTtcclxuICAgIHRoaXMuZ2V0QXNzaWdub3JzTGlzdCgpO1xyXG4gICAgdGhpcy5nZXRBc3NpZ25lZXNMaXN0KCk7XHJcbiAgICB0aGlzLmdldEFzc3VyYW5jZSgpO1xyXG4gICAgdGhpcy5nZXRHcm91cHNMaXN0KCk7XHJcbiAgICB0aGlzLmdldEFzc3VyYW5jZUZvclJlcXVpcmVzQXVkaXQoKTtcclxuICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcclxuICAgIHRoaXMuZ2V0T3JnYW5pemF0aW9uRGV0YWlscygpO1xyXG4gICAgdGhpcy5nZXRVc2VyRGV0YWlscygpO1xyXG4gICAgdGhpcy5zaG9ydE1vbnRoID0gdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLm1vbnRoQXJyYXkubWFwKG1vbnRoID0+IG1vbnRoLnN1YnN0cmluZygwLCAzKSk7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAnQ1JFQVRFJykge1xyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvbklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25JZCgpO1xyXG4gICAgICB0aGlzLm1lbWJlcklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRNZW1iZXJJZCgpO1xyXG4gICAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnQ0hFQ0tQT0lOVFMnKTtcclxuICAgIH1cclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uRGV0YWlscygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5pc1Jpc2tFbmFibGUgPSByZXMuZW5hYmxlX3Jpc2tjbGFzcyA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgaWYgKCFyZXMuZW5hYmxlX3Jpc2tjbGFzcykge1xyXG4gICAgICAgIHRoaXMuaGlkZGVuTGlzdC5wdXNoKCdSSVNLX0NMQVNTSUZJQ0FUSU9OJyk7XHJcbiAgICAgICAgdGhpcy5oaWRlRWxlbWVudHNGcm9tTW9yZU9wdGlvbnMuZW1pdCh0aGlzLmhpZGRlbkxpc3QpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0U3Vic2NyaXB0aW9uRGV0YWlscygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25EZXRhaWxzID0gcmVzO1xyXG4gICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25EZXRhaWxzWzBdLmFzc2Vzc21lbnRfZmxhZykge1xyXG4gICAgICAgIHRoaXMuaGlkZGVuTGlzdCA9IHRoaXMuaGlkZGVuTGlzdC5maWx0ZXIoZWxlID0+IGVsZSAhPT0gJ0FTU0VTU01FTlQnKVxyXG4gICAgICAgIHRoaXMuaGlkZUVsZW1lbnRzRnJvbU1vcmVPcHRpb25zLmVtaXQodGhpcy5oaWRkZW5MaXN0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmhpZGVFbGVtZW50c0Zyb21Nb3JlT3B0aW9ucy5lbWl0KHRoaXMuaGlkZGVuTGlzdCk7XHJcbiAgfVxyXG4gIGFjdGl2YXRlU2VsZWN0b3IodHlwZTogYW55LCBldmVudDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5hY3RpdmVTZWxlY3RvciA9IGV2ZW50ID8gdHlwZSA6ICcnO1xyXG4gICAgaWYgKHR5cGUgPT09ICdjaGVja3BvaW50cy1uZXcnKSB0aGlzLmF1dGhTZXJ2aWNlLnByZXZpZXdQYW5lbC5uZXh0KGV2ZW50KTtcclxuICAgIGlmICh0aGlzLnNpZGVTZWxlY3RvckVsZW1lbnRzPy5pbmNsdWRlcyh0eXBlKSkge1xyXG4gICAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB3aGF0Q2hhbmdlZChldmVudDogYW55KSB7XHJcblxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZSA9IGV2ZW50Py50YXJnZXQ/LnZhbHVlO1xyXG4gICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZS50cmltKCkgIT09ICcnKSB7XHJcbiAgICAgIHRoaXMuaXNFZGl0V2hhdCA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLmludmFsaWRUeXBlID09PSAnd2hhdCcpIHtcclxuICAgICAgICB0aGlzLmludmFsaWRUeXBlID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNFZGl0V2hhdCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGFjdGl2ZURlc2VsZWN0b3IoKSB7XHJcbiAgICB0aGlzLmFjdGl2ZVNlbGVjdG9yID0gJyc7XHJcbiAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBhZGRNb3JlSW5mbyhldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tID0gdHJ1ZTtcclxuICAgIGlmIChldmVudC5jb2RlID09PSAnQ0hFQ0tQT0lOVFNfTkVXJyAmJiBldmVudC5jaGVja3BvaW50X25ldyAmJiB0aGlzLmNoZWNrcG9pbnRDb3VudCkge1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnNbZXZlbnQuY29kZV0gPSBldmVudC5jaGVja2VkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UkNMaXN0KHByb2dyYW1faWQ/OiBzdHJpbmcpIHtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgaWYgKHByb2dyYW1faWQpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZHMnLCBwcm9ncmFtX2lkKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlPy5nZXRSZXNwb25zaWJpbGl0eUNlbnRlckxpc3QocGFyYW1zKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnJjTGlzdExvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgICBjb25zdCBpZHMgPSB0aGlzLnJldHVybklkcyh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYywgJ2l0ZW1faWQnKTtcclxuICAgICAgY29uc3QgUkMgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IGlkcz8uaW5jbHVkZXMoZWxlbWVudC5pdGVtX2lkKSk7XHJcbiAgICAgIGlmIChSQz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmMgPSBSQztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYyA9IFtdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5vcGVuZWRGcm9tID09PSAnUklTS19UUkVBVE1FTlQnKSB7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmMgPSB0aGlzLnNldExpc3QodGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LCBbdGhpcy5zZWxlY3RlZFJDXSwgJ2l0ZW1faWQnKTtcclxuICAgICAgICB0aGlzLm1vcmVPcHRpb25zLlJDID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbnMgPSBbXHJcbiAgICAgICAgICB7IGJ1dHRvblRleHQ6ICdHbyB0byByaXNrIHRyZWF0bWVudCcsIGNsYXNzOiAnYmx1ZS1idG4nLCBpZDogJ3ZpZXcnIH0sXHJcbiAgICAgICAgXVxyXG4gICAgICAgIC8vIFByZXZpb3VzbHkgdGhlcmUgd2FzIG9ubHkgUkMgd2FzIGVtaXR0aW5nIHdoaWNoIG1hZGUgdGhlIGNoZWNrZWQgb3B0aW9ucyB0byBkZSBjaGVjayBub3cgY2hlY2tpbmcgdGhlIGNvbmRpdGlvbiBhbmQgc2VuZGluZyBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnMgXHJcbiAgICAgICAgbGV0IGNoZWNrZWRNb3JlT3B0aW9ucyA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMubW9yZU9wdGlvbnMpIHtcclxuICAgICAgICAgIGlmICh0aGlzLm1vcmVPcHRpb25zW2tleV0pIHtcclxuICAgICAgICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goa2V5KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uLmVtaXQoY2hlY2tlZE1vcmVPcHRpb25zKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0sIGVyciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgdGhpcy5yY0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyRGV0YWlscygpIHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlckluZm8oKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nID0gcmVzLm5vdGlmaWNhdGlvbl9wZW5kaW5nX2ZsYWc7XHJcbiAgICAgIHRoaXMuYWN0aW9uQnV0dG9uc1sxXS5idXR0b25UZXh0ID0gdGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmcgPyAnVmlldyBSZXNwb25zaWJpbGl0aWVzIGluIFF1ZXVlJyA6ICdWaWV3IFJlc3BvbnNpYmlsaXRpZXMnO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldEFzc3VyYW5jZSgpIHtcclxuICAgIHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcnlMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldEFzc3VyYW5jZSgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5hc3N1cmFuY2VDYXRlZ29yaWVzTGlzdCA9IHJlcztcclxuICAgICAgaWYgKCh0aGlzLnN1YnNjcmlwdGlvbkRldGFpbHMgJiYgIXRoaXMuc3Vic2NyaXB0aW9uRGV0YWlsc1swXS5hc3N1cmFuY2VfZmxhZykgfHwgdGhpcy5hc3N1cmFuY2VDYXRlZ29yaWVzTGlzdD8ubGVuZ3RoID09IDApIHtcclxuICAgICAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnQVNTVVJBTkNFJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5oaWRlRWxlbWVudHNGcm9tTW9yZU9wdGlvbnMuZW1pdCh0aGlzLmhpZGRlbkxpc3QpO1xyXG4gICAgICB0aGlzLmFzc3VyYW5jZUNhdGVnb3J5TGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcnlMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXNzdXJhbmNlRm9yUmVxdWlyZXNBdWRpdCgpIHtcclxuICAgIC8vIHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcnlMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldEFzc3VyYW5jZUZvclJlcXVpcmVzQXVkaXQoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuYXNzdXJhbmNlUmVxdWlyZXNBdWRpdExpc3QgPSByZXM7XHJcbiAgICAgIGlmICgodGhpcy5zdWJzY3JpcHRpb25EZXRhaWxzICYmICF0aGlzLnN1YnNjcmlwdGlvbkRldGFpbHNbMF0uYXVkaXRfZmxhZykgfHwgdGhpcy5hc3N1cmFuY2VSZXF1aXJlc0F1ZGl0TGlzdD8ubGVuZ3RoID09IDApIHtcclxuICAgICAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnUkVRVUlSRVNfQVVESVQnKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmhpZGVFbGVtZW50c0Zyb21Nb3JlT3B0aW9ucy5lbWl0KHRoaXMuaGlkZGVuTGlzdCk7XHJcbiAgICAgIC8vIHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcnlMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0sIGVyciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgLy8gdGhpcy5hc3N1cmFuY2VDYXRlZ29yeUxpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRPcmdhbml6YXRpb25EZXRhaWxzKCkge1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25EZXRhaWxzKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmlzRnJhbWV3b3JrQXZhaWxhYmxlID0gcmVzPy5lbmFibGVfcmVzcG9uc2liaWxpdHlfZnJhbWV3b3JrO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldENhdGVnb3J5TGlzdCgpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldENhdGVnb3JpZXNMaXN0KCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSByZXM7XHJcbiAgICAgIHRoaXMuYWxsQ2F0ZWdvcmllcyA9IGNsb25lRGVlcChyZXMpO1xyXG4gICAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuY29tcGxpYW5jZV90eXBlID09IDApIHtcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcy5vdGhlcnMubGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmNvbXBsaWFuY2VfdHlwZSA9PSAxKSB7XHJcbiAgICAgICAgICB0aGlzLmNhdGVnb3JpZXMucmVndWxhdGlvbnMubGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmNvbXBsaWFuY2VfdHlwZSA9PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLmNhdGVnb3JpZXMuc3RhbmRhcmRzLmxpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jb21wbGlhbmNlX3R5cGUgPT0gMykge1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yaWVzLmludGVybmFsQ29udHJvbHMubGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNhdGVnb3JpZXNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0sIGVyciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgZmlsdGVyTGlzdHNBY2NvcmRpbmdUb1Byb2dyYW0ocHJvZ3JhbV9pZD86IHN0cmluZykge1xyXG4gICAgdGhpcy51blN1YnNjcmliZVByb2dyYW0ubmV4dCgpO1xyXG4gICAgdGhpcy51blN1YnNjcmliZVByb2dyYW0uY29tcGxldGUoKTtcclxuICAgIGlmIChwcm9ncmFtX2lkICYmIHRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKSB7XHJcbiAgICAgIHRoaXMuZ2V0UGVvcGxlTGlzdEFnYWluc3RQSUQocHJvZ3JhbV9pZCk7XHJcbiAgICAgIHRoaXMuZ2V0UkNMaXN0KHByb2dyYW1faWQpXHJcbiAgICAgIHRoaXMuZ2V0R3JvdXBzTGlzdChwcm9ncmFtX2lkKTtcclxuICAgICAgdGhpcy5nZXRBc3NpZ25vcnNMaXN0KHByb2dyYW1faWQpO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2V0QXNzaWduZWVzTGlzdCgpO1xyXG4gICAgICB0aGlzLmdldFJDTGlzdCgpO1xyXG4gICAgICB0aGlzLmdldEdyb3Vwc0xpc3QoKTtcclxuICAgICAgdGhpcy5nZXRBc3NpZ25vcnNMaXN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQcm9ncmFtRGV0YWlscyhwcm9ncmFtSWQ/OiBzdHJpbmcpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMucHJvZ3JhbVNlcnZpY2UuZ2V0UHJvZ3JhbShwcm9ncmFtSWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYocmVzPy5hc3Nlc3NtZW50ICYmIHJlcz8uYXNzZXNzbWVudD8ubGVuZ3RoICYmIE9iamVjdC5rZXlzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3Nlc3NtZW50KT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlBc3Nlc3NtZW50ID0gcmVzPy5hc3Nlc3NtZW50LmZpbHRlcigoYXNzZXNzbWVudDogYW55KSA9PiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzZXNzbWVudD8uY2F0ZWdvcnlfaWQgPT09IGFzc2Vzc21lbnQ/LmNhdGVnb3J5X2lkKTtcclxuICAgICAgICBpZihjYXRlZ29yeUFzc2Vzc21lbnQ/Lmxlbmd0aCAmJiBjYXRlZ29yeUFzc2Vzc21lbnRbMF0/LmFzc2Vzc21lbnRJZHM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc3QgaXNFeGlzdCA9IGNhdGVnb3J5QXNzZXNzbWVudFswXT8uYXNzZXNzbWVudElkcz8uaW5jbHVkZXModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnRfaWQpO1xyXG4gICAgICAgICAgaWYoIWlzRXhpc3Qpe1xyXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3Nlc3NtZW50ID0geyBhc3Nlc3NtZW50X2lkOiBcIlwiLCBjYXRlZ29yeV9pZDogXCJcIiB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQgPSB7IGFzc2Vzc21lbnRfaWQ6IFwiXCIsIGNhdGVnb3J5X2lkOiBcIlwiIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRMaXN0c0FjY29yZGluZ1RvUHJvZ3JhbShwcm9ncmFtX2lkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZ2V0UGVvcGxlTGlzdEFnYWluc3RQSUQocHJvZ3JhbV9pZCk7XHJcbiAgICB0aGlzLmdldFJDTGlzdChwcm9ncmFtX2lkKVxyXG4gICAgdGhpcy5nZXRHcm91cHNMaXN0KHByb2dyYW1faWQpO1xyXG4gICAgdGhpcy5nZXRBc3NpZ25vcnNMaXN0KHByb2dyYW1faWQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXNzaWdub3JzTGlzdChwcm9ncmFtX2lkPzogc3RyaW5nKSB7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIGlmIChwcm9ncmFtX2lkKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1faWRzJywgcHJvZ3JhbV9pZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRBc3NpZ25vcnNMaXN0KHBhcmFtcykuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmJlaGFsZk9mVXNlcnNMaXN0ID0gcmVzO1xyXG4gICAgICBpZiAocHJvZ3JhbV9pZCkge1xyXG4gICAgICAgIHRoaXMucmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYXNzaWdub3JzTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIHRoaXMuYXNzaWdub3JzTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEFzc2lnbmVlc0xpc3QocHJvZ3JhbV9pZD86IHN0cmluZykge1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBpZiAocHJvZ3JhbV9pZCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwcm9ncmFtX2lkcycsIHByb2dyYW1faWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uUGVvcGxlKHBhcmFtcykuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5hbGxVc2Vyc0xpc3QgPSByZXMubWFwKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgICB1c2VyLm1lbWJlcl9uYW1lID0gdXNlci5lbXBsb3llZV9uYW1lO1xyXG4gICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHByb2dyYW1faWQpIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFzc2lnbmVlc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLmFzc2lnbmVlc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRQZW9wbGVMaXN0QWdhaW5zdFBJRChwcm9ncmFtX2lkOiBzdHJpbmcpIHtcclxuXHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIGlmIChwcm9ncmFtX2lkKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1faWRzJywgcHJvZ3JhbV9pZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRPcmdhbml6YXRpb25QZW9wbGUocGFyYW1zKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuYXNzaWduZWVzTGlzdCA9IHJlcy5hc3NpZ25lZS5tYXAoKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIHVzZXIubWVtYmVyX25hbWUgPSB1c2VyLmVtcGxveWVlX25hbWU7XHJcbiAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLm92ZXJzZWVyc0xpc3QgPSByZXMub3ZlcnNlZXIubWFwKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgICB1c2VyLm1lbWJlcl9uYW1lID0gdXNlci5lbXBsb3llZV9uYW1lO1xyXG4gICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5yZXZpZXdlcnNMaXN0ID0gcmVzLnJldmlld2VyLm1hcCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgICAgdXNlci5tZW1iZXJfbmFtZSA9IHVzZXIuZW1wbG95ZWVfbmFtZTtcclxuICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucHJvZ3JhbVBlb3BsZUxpc3QgPSB7XHJcbiAgICAgICAgYXNzaWduZWVzTGlzdDogWy4uLiBuZXcgU2V0KHRoaXMuYXNzaWduZWVzTGlzdCldLFxyXG4gICAgICAgIHJldmlld2Vyc0xpc3Q6IFsuLi4gbmV3IFNldCh0aGlzLnJldmlld2Vyc0xpc3QpXSxcclxuICAgICAgICBvdmVyc2VlcnNMaXN0OiBbLi4uIG5ldyBTZXQodGhpcy5vdmVyc2VlcnNMaXN0KV0sXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X2Fzc2lnbmVlX2lkcyB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IGlkcyA9IHRoaXMucmV0dXJuSWRzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0LCAnbXlfbWVtYmVyX2lkJyk7XHJcbiAgICAgICAgICBjb25zdCBhbGxJZHMgPSBbLi4ubmV3IFNldChpZHMpLCAuLi5uZXcgU2V0KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X2Fzc2lnbmVlX2lkcyldXHJcbiAgICAgICAgICBjb25zdCBhc3NpZ25vcnMgPSB0aGlzLmFzc2lnbmVlc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IGFsbElkcz8uaW5jbHVkZXMoZWxlbWVudD8ubXlfbWVtYmVyX2lkKSk7XHJcbiAgICAgICAgICBpZiAoYXNzaWdub3JzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QgPSBhc3NpZ25vcnM7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCA9IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBhc3NpZ25vcnMgPSB0aGlzLmFzc2lnbmVlc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X2Fzc2lnbmVlX2lkcz8uaW5jbHVkZXMoZWxlbWVudD8ubXlfbWVtYmVyX2lkKSk7XHJcbiAgICAgICAgICBpZiAoYXNzaWdub3JzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QgPSBhc3NpZ25vcnM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0ID0gW107XHJcbiAgICAgIH1cclxuICAgICAgaWYodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpe1xyXG4gICAgICAgIHRoaXMucG9wdWxhdGVQcm9ncmFtQXNzaWduZWVHcm91cCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGNoZWNrZWRNb3JlT3B0aW9ucyA9IFtdO1xyXG5cclxuICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X3Jldmlld2VycyB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0Py5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBpZHMgPSB0aGlzLnJldHVybklkcyh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdCwgJ215X21lbWJlcl9pZCcpO1xyXG4gICAgICAgIGNvbnN0IGFsbElkcyA9IFsuLi5uZXcgU2V0KGlkcyksIC4uLm5ldyBTZXQodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbVswXS5kZWZhdWx0X3Jldmlld2VycyldXHJcbiAgICAgICAgY29uc3QgcmV2aWV3ZXJzID0gdGhpcy5yZXZpZXdlcnNMaXN0LmZpbHRlcigoZWxlbWVudDogYW55KSA9PiBhbGxJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm15X21lbWJlcl9pZCkpO1xyXG4gICAgICAgIC8vIGNvbnN0IHJldmlld2VycyA9IHRoaXMucmV2aWV3ZXJzTGlzdC5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbVswXS5kZWZhdWx0X3Jldmlld2Vycz8uaW5jbHVkZXMoZWxlbWVudD8ubXlfbWVtYmVyX2lkKSk7XHJcbiAgICAgICAgaWYgKChyZXZpZXdlcnM/Lmxlbmd0aCB8fCAodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgJiYgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggPiAwKSkpIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0ID0gcmV2aWV3ZXJzO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QgPSByZXZpZXdlcnM7XHJcbiAgICAgICAgICBpZiAodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QgPSB0aGlzLmFzc2lnblVzZXJNZW1iZXJJZCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdClcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLlJFVklFV0VSID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QgPSBbXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW1bMF0uZGVmYXVsdF9vdmVyc2VlcnMgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8ubGVuZ3RoIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGlkcyA9IHRoaXMucmV0dXJuSWRzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3QsICdteV9tZW1iZXJfaWQnKTtcclxuICAgICAgICBjb25zdCBhbGxEZWZhdWx0Q0NJZHMgPSBbLi4ubmV3IFNldChpZHMpLCAuLi5uZXcgU2V0KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X292ZXJzZWVycz8uY2NfZW1haWwpXVxyXG4gICAgICAgIGNvbnN0IG92ZXJzZWVyc0NDID0gdGhpcy5vdmVyc2VlcnNMaXN0Py5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4gYWxsRGVmYXVsdENDSWRzPy5pbmNsdWRlcyhlbGVtZW50Py5teV9tZW1iZXJfaWQpKTtcclxuICAgICAgICAvLyBjb25zdCBvdmVyc2VlcnMgPSB0aGlzLm92ZXJzZWVyc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW1bMF0uZGVmYXVsdF9vdmVyc2VlcnMuY2NfZW1haWwuaW5jbHVkZXMoZWxlbWVudC5teV9tZW1iZXJfaWQpKTtcclxuICAgICAgICBjb25zdCBub3RpZnlMaXN0SWRzID0gdGhpcy5yZXR1cm5JZHModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QsICdteV9tZW1iZXJfaWQnKTtcclxuICAgICAgICBjb25zdCBhbGxEZWZhdWx0Q0NGYWlsdXJlSWRzID0gWy4uLm5ldyBTZXQobm90aWZ5TGlzdElkcyksIC4uLm5ldyBTZXQodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfb3ZlcnNlZXJzPy5mYWlsdXJlX2NjX2VtYWlsKV1cclxuICAgICAgICBjb25zdCBvdmVyc2VlcnNDQ0ZhaWx1cmUgPSB0aGlzLm92ZXJzZWVyc0xpc3Q/LmZpbHRlcigoZWxlbWVudDogYW55KSA9PiBhbGxEZWZhdWx0Q0NGYWlsdXJlSWRzPy5pbmNsdWRlcyhlbGVtZW50Py5teV9tZW1iZXJfaWQpKTtcclxuICAgICAgICAvLyBjb25zdCBub3RpZnlPdmVyc2VlcnMgPSB0aGlzLm92ZXJzZWVyc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW1bMF0uZGVmYXVsdF9vdmVyc2VlcnMuZmFpbHVyZV9jY19lbWFpbC5pbmNsdWRlcyhlbGVtZW50Lm15X21lbWJlcl9pZCkpO1xyXG4gICAgICAgIC8vIGlmIChvdmVyc2VlcnM/Lmxlbmd0aCkge1xyXG4gICAgICAgIC8vICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3QgPSBvdmVyc2VlcnM7XHJcbiAgICAgICAgLy8gICB0aGlzLm1vcmVPcHRpb25zLk9WRVJTRUVSID0gdHJ1ZTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8gaWYgKG5vdGlmeU92ZXJzZWVycz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgLy8gICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCA9IG5vdGlmeU92ZXJzZWVycztcclxuICAgICAgICAvLyAgIHRoaXMubW9yZU9wdGlvbnMuT1ZFUlNFRVIgPSB0cnVlO1xyXG4gICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgaWYgKG92ZXJzZWVyc0NDPy5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0ID0gb3ZlcnNlZXJzQ0M7XHJcbiAgICAgICAgICBpZiAodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0ID0gdGhpcy5hc3NpZ25Vc2VyTWVtYmVySWQodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3QpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLk9WRVJTRUVSID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3QgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG92ZXJzZWVyc0NDRmFpbHVyZT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCA9IG92ZXJzZWVyc0NDRmFpbHVyZTtcclxuICAgICAgICAgIGlmICh0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcykge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QgPSB0aGlzLmFzc2lnblVzZXJNZW1iZXJJZCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuT1ZFUlNFRVIgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5ub3RpZnlMaXN0ID0gW107XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMubW9yZU9wdGlvbnMpIHtcclxuICAgICAgICBpZiAodGhpcy5tb3JlT3B0aW9uc1trZXldKSB7XHJcbiAgICAgICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaChrZXkpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucG9wdWxhdGVPcHRpb24uZW1pdChjaGVja2VkTW9yZU9wdGlvbnMpO1xyXG5cclxuXHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0R3JvdXBzTGlzdChwcm9ncmFtX2lkPzogc3RyaW5nKSB7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIGlmIChwcm9ncmFtX2lkKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1faWRzJywgcHJvZ3JhbV9pZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRPcmdhbml6YXRpb25Hcm91cHMocGFyYW1zKS5waXBlKHRha2VVbnRpbCh0aGlzLnVuU3Vic2NyaWJlUHJvZ3JhbSkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgZGF0YSA9IHJlcyA/PyBbXTtcclxuICAgICAgdGhpcy5PcmdHcm91cCA9IGRhdGFcclxuICAgICAgY29uc3QgZ3JvdXBzOiBhbnkgPSBbXTtcclxuICAgICAgaWYoZGF0YT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgZGF0YT8uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBvYmogPSB7XHJcbiAgICAgICAgICAgIGdyb3VwTmFtZTogZWxlbWVudC5ncm91cF9uYW1lLFxyXG4gICAgICAgICAgICB1c2VySWRzOiBlbGVtZW50Lm1lbWJlcl9pZHMsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgZ3JvdXBzLnB1c2gob2JqKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdyb3Vwc0xpc3QgPSBncm91cHM7XHJcbiAgICAgIHRoaXMuZ3JvdXBzTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICAgIGlmKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzICYmIHRoaXMuT3JnR3JvdXA/Lmxlbmd0aCAmJiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtPy5sZW5ndGgpe1xyXG4gICAgICB0aGlzLnJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgfVxyXG4gICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfYXNzaWduZWVfZ3JvdXBfaWRzICYmIHByb2dyYW1faWQpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEdyb3VwcyA9IGRhdGEuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW1bMF0uZGVmYXVsdF9hc3NpZ25lZV9ncm91cF9pZHM/LmluY2x1ZGVzKGVsZW1lbnQuZ3JvdXBfaWQpKTtcclxuICAgICAgICBpZiAoZ3JvdXBzPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGxldCBtZW1iZXJJZHM6IGFueVtdID0gW107XHJcbiAgICAgICAgICBzZWxlY3RlZEdyb3Vwcy5mb3JFYWNoKChlYWNoR3JvdXA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZWFjaEdyb3VwPy5tZW1iZXJfaWRzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBtZW1iZXJJZHMgPSBbLi4ubmV3IFNldChtZW1iZXJJZHMuY29uY2F0KGVhY2hHcm91cD8ubWVtYmVyX2lkcykpXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgaWRzID0gdGhpcy5yZXR1cm5JZHModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QsICdteV9tZW1iZXJfaWQnKTtcclxuICAgICAgICAgICAgY29uc3QgYWxsSWRzID0gWy4uLm5ldyBTZXQoaWRzKSwgLi4ubmV3IFNldChtZW1iZXJJZHMpXVxyXG4gICAgICAgICAgICBjb25zdCBhc3NpZ25vcnMgPSB0aGlzLmFzc2lnbmVlc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IGFsbElkcz8uaW5jbHVkZXMoZWxlbWVudD8ubXlfbWVtYmVyX2lkKSk7XHJcbiAgICAgICAgICAgIGlmIChhc3NpZ25vcnM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0ID0gYXNzaWdub3JzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBhc3NpZ25vcnMgPSB0aGlzLmFzc2lnbmVlc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IG1lbWJlcklkcz8uaW5jbHVkZXMoZWxlbWVudD8ubXlfbWVtYmVyX2lkKSk7XHJcbiAgICAgICAgICAgIGlmIChhc3NpZ25vcnM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0ID0gYXNzaWdub3JzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLmdyb3Vwc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0RWRpdFJlc3BvbnNpYmlsaXR5RGV0YWlscyhpZDogYW55KSB7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5lZGl0UmVzcG9uc2liaWxpdHkoaWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5pc0R1cGxpY2F0ZUVudHJ1c3QgPSB0cnVlO1xyXG4gICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbEFzc2lnbmVlID0gW051bWJlcihyZXMuYXNzaWduZWRfdG8pXTtcclxuICAgICAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlckRldGFpbHMoKT8udXNlcjtcclxuICAgICAgICB0aGlzLmlzR3JvdXBBc3NpZ25lZCA9IHJlcz8uaXNHcm91cEFzc2lnblRvID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRzVWVySW5mbyA9IHtcclxuICAgICAgICAgIG1lbWJlcl9lbWFpbDogY3VycmVudFVzZXI/LmVtYWlsLFxyXG4gICAgICAgICAgbWVtYmVyX2lkOiBjdXJyZW50VXNlci5pZCxcclxuICAgICAgICAgIG1lbWJlcl9uYW1lOiBjdXJyZW50VXNlci5uYW1lLFxyXG4gICAgICAgICAgb3JnYW5pc2F0aW9uX2lkOiBjdXJyZW50VXNlci5vcmdhbmlzYXRpb25faWQsXHJcbiAgICAgICAgICBfaWQ6IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlckRldGFpbHMoKS5faWRcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGVzdFBsYW5DYXRlZ29yeSA9IHR5cGVvZiAocmVzPy50ZXN0cGxhbl9jYXRlZ29yeV9pZCkgPT09ICdzdHJpbmcnID8gW10gOiByZXM/LnRlc3RwbGFuX2NhdGVnb3J5X2lkO1xyXG4gICAgICAgIGNvbnN0IHJlcXVpcmVkQXVkaXRDYXRlZ29yeUlkID0gcmVzPy5hdWRpdF9jYXRlZ29yeV9kZXRhaWxzPy5jYXRlZ29yeV9pZCA/IFtyZXM/LmF1ZGl0X2NhdGVnb3J5X2RldGFpbHM/LmNhdGVnb3J5X2lkXSA6IFtdO1xyXG4gICAgICAgIGNvbnN0IHJldmlld2VyRGV0YWlscyA9IE9iamVjdC5rZXlzKHJlcz8ucmV2aWV3ZXJfYXJyKTtcclxuICAgICAgICB0aGlzLmhhc1Jldmlld2VyID0gcmV2aWV3ZXJEZXRhaWxzPy5sZW5ndGggPiAwXHJcbiAgICAgICAgdGhpcy5hc3NpZ25lZVJhZGlvU2VsZWN0ID0gKHJlcz8uYXNzaWduZWRfdG9fbWVtYmVyX2lkPy5sZW5ndGggPT0gMCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0VudHJ1c3QgPSByZXMuaXNHcm91cEFzc2lnblRvID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgIGxldCBsaW5rYWdlID0gcmVzPy5saW5rZWRQcm9ncmFtRGV0YWlscztcclxuICAgICAgICBsaW5rYWdlLnB1c2gocmVzPy5wcm9ncmFtRGV0YWlscyk7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0gPSB7XHJcbiAgICAgICAgICBhc3NpZ25vcnM6IHtcclxuICAgICAgICAgICAgZW5hYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgbGlzdDogdGhpcy5zZXRMaXN0KHRoaXMuYXNzaWdub3JzTGlzdCwgW3Jlcy5tZW1iZXJfaWRdLCAnbWVtYmVyX2lkJyk/Lmxlbmd0aCA+IDAgPyB0aGlzLnNldExpc3QodGhpcy5hc3NpZ25vcnNMaXN0LCBbcmVzLm1lbWJlcl9pZF0sICdtZW1iZXJfaWQnKSA6IFtjdXJyZW50c1VlckluZm9dLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5OiB7XHJcbiAgICAgICAgICAgIG5hbWU6IHJlcz8ucmVwb3J0X25hbWUsXHJcbiAgICAgICAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiByZXM/LmtleV9jb21wbGlhbmNlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGFzc2lnbmVlczoge1xyXG4gICAgICAgICAgICB3aG9DYW5Db21wbGV0ZTogKHJlcy5pc0dyb3VwQXNzaWduVG8pID8gJ0FOWV9PTkUnIDogJ0FMTCcsXHJcbiAgICAgICAgICAgIGxpc3Q6IChyZXMuYXNzaWduZWRfdG9fbWVtYmVyX2lkPy5sZW5ndGggPT0gMCkgPyB0aGlzLnNldExpc3QodGhpcy5hc3NpZ25lZXNMaXN0LCBbTnVtYmVyKHJlcy5hc3NpZ25lZF90byldLCAnZW1wbG95ZWVfaWQnKSA6XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRMaXN0KHRoaXMuYXNzaWduZWVzTGlzdCwgcmVzLmFzc2lnbmVkX3RvX21lbWJlcl9pZCwgJ215X21lbWJlcl9pZCcpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZyZXF1ZW5jeTogcmVzPy5mcmVxdWVuY3lfZGV0YWlscyxcclxuICAgICAgICAgIGRlc2NyaXB0aW9uOiByZXM/LnJlbWFya3MsXHJcbiAgICAgICAgICBvYmplY3RpdmU6IHJlcz8ub2JqZWN0aXZlLFxyXG4gICAgICAgICAgcmM6IHRoaXMuc2V0TGlzdCh0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QsIFtOdW1iZXIocmVzPy5yY19pZCldLCAncmNfaWQnKSxcclxuICAgICAgICAgIGNhdGVnb3J5OiAocmVzPy5wcm9ncmFtX2NhdF9pZHM/Lmxlbmd0aCkgPyByZXM/LmNhdGVnb3J5X2lkc19hcnJheS5maWx0ZXIoKGVsZTogYW55KSA9PiAhcmVzLnByb2dyYW1fY2F0X2lkcz8uaW5jbHVkZXMoZWxlKSkgOiByZXM/LmNhdGVnb3J5X2lkc19hcnJheSxcclxuICAgICAgICAgIHByb2dyYW1fc2VsZWN0ZWRfaWRzOiByZXM/LmNhdGVnb3J5X2lkLnNwbGl0KCcsJykgPz8gW10sXHJcbiAgICAgICAgICBjYXRlZ29yeV9pZDogcmVzPy5jYXRlZ29yeV9pZCA/PyAnJyxcclxuXHJcbiAgICAgICAgICBsaW5rZWRQcm9ncmFtOiBsaW5rYWdlID8/IHJlcz8ubGlua2VkUHJvZ3JhbURldGFpbHMsXHJcbiAgICAgICAgICBwcm9ncmFtOiAocmVzPy5wcm9ncmFtRGV0YWlscz8uY2F0ZWdvcnlfaWQpID8gW3Jlcz8ucHJvZ3JhbURldGFpbHNdIDogW10sXHJcbiAgICAgICAgICBjaGVja3BvaW50SW5zdHJ1Y3Rpb246IHJlcz8uY2hlY2twb2ludF9kZXNjcmlwdGlvbixcclxuICAgICAgICAgIGN1c3RvbVRhZ3M6IChyZXM/LmN1c3RvbV90YWdzKSA/IEpTT04ucGFyc2UocmVzPy5jdXN0b21fdGFncykgOiAnJyxcclxuICAgICAgICAgIGNoZWNrcG9pbnRzOiAocmVzPy5jaGVja3BvaW50X2RldGFpbHMpID8gSlNPTi5wYXJzZShyZXM/LmNoZWNrcG9pbnRfZGV0YWlscykgOiAnJyxcclxuICAgICAgICAgIHJldmlld2Vyczoge1xyXG4gICAgICAgICAgICBzZXF1ZW50aWFsV29ya2Zsb3c6IChyZXM/LnJldmlld2VyX2Fycj8ubGV2ZWwxPy50eXBlID09ICdTRVFVRU5USUFMJykgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJldmlld0ZyZXF1ZW5jeToge1xyXG4gICAgICAgICAgICAgIHJldmlld0NvbXBsZXRlRGF5czogKHJldmlld2VyRGV0YWlscz8ubGVuZ3RoID4gMCkgPyByZXM/LnJldmlld19hZnRlcl9kYXlzIDogMixcclxuICAgICAgICAgICAgICByZXZpZXdOT3RDb21wbGV0ZWREYXlzOiAocmV2aWV3ZXJEZXRhaWxzPy5sZW5ndGggPiAwKSA/IHJlcz8ucmV2aWV3X2ZhaWxlZF9hZnRlcl9kYXlzIDogMlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhY2NlcHRlZERhdGE6IHJldmlld2VyRGV0YWlscz8ubGVuZ3RoID4gMCA/IHJlcz8ucmV2aWV3ZXJfYXJyPy5sZXZlbDE/LnJldmlld2VycyA6IFtdLFxyXG4gICAgICAgICAgICBsaXN0OiByZXZpZXdlckRldGFpbHM/Lmxlbmd0aCA+IDAgPyB0aGlzLnNldFJldmlld2VyUGF5bG9hZChyZXM/LnJldmlld2VyX2Fycj8ubGV2ZWwxPy5yZXZpZXdlcnMsICdvYmplY3QnLCByZXM/LnJldmlld2VyX2Fycj8ubGV2ZWwxPy50eXBlKSA6IFtdXHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgIG92ZXJzZWVyczoge1xyXG4gICAgICAgICAgICAgbGlzdDogKHJlcz8uY2NfZW1haWwpID8gdGhpcy5zZXRMaXN0KHRoaXMub3ZlcnNlZXJzTGlzdCwgT2JqZWN0LmtleXMocmVzPy5jY19lbWFpbCkubWFwKE51bWJlciksICdlbXBsb3llZV9pZCcpIDogW10sXHJcbiAgICAgICAgICAgIG5vdGlmeUxpc3Q6IChyZXM/LmZhaWx1cmVfY2NfZW1haWwpID8gdGhpcy5zZXRMaXN0KHRoaXMub3ZlcnNlZXJzTGlzdCwgT2JqZWN0LmtleXMocmVzPy5mYWlsdXJlX2NjX2VtYWlsKS5tYXAoTnVtYmVyKSwgJ2VtcGxveWVlX2lkJykgOiBbXSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmb3JtYXRBbmRFdmlkZW5jZToge1xyXG4gICAgICAgICAgICBmb3JtYXRSZXF1aXJlZDogKHJlcz8ucmVwb3J0X2Zvcm1hdD8ubGVuZ3RoID4gMCB8fCByZXM/LmxpbmtfZm9yX2RldGFpbHM/Lmxlbmd0aCA+IDApID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICBmb3JtYXRGaWxlczogcmVzPy5yZXBvcnRfZm9ybWF0LFxyXG4gICAgICAgICAgICBmb3JtYXRMaW5rczogcmVzPy5saW5rX2Zvcl9kZXRhaWxzLFxyXG4gICAgICAgICAgICBldmlkZW5jZVJlcXVpcmVkOiAocmVzPy5yZXBvcnRfdXBsb2FkX2ZsYWcpID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGFzc3VyYW5jZUxpc3Q6IHRoaXMuc2V0TGlzdCh0aGlzLmFzc3VyYW5jZUNhdGVnb3JpZXNMaXN0LCB0ZXN0UGxhbkNhdGVnb3J5LCAnY2F0ZWdvcnlfaWQnKSxcclxuICAgICAgICAgIHJlcXVpcmVzQXVkaXRMaXN0OiB0aGlzLnNldExpc3QodGhpcy5hc3N1cmFuY2VSZXF1aXJlc0F1ZGl0TGlzdCwgcmVxdWlyZWRBdWRpdENhdGVnb3J5SWQsICdjYXRlZ29yeV9pZCcpLFxyXG4gICAgICAgICAgcmlza0NsYXNzOiByZXM/LnJpc2tfY2xhc3MsXHJcbiAgICAgICAgICByaXNrTWF0cml4OiByZXM/LnJpc2tfbWF0cml4X2RhdGFcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKXtcclxuICAgICAgICAgIHRoaXMucG9wdWxhdGVBc3NpZ25lZURhdGEocmVzKTtcclxuICAgICAgICAgIHRoaXMucG9wdWxhdGVPdmVyc2VlckRhdGEocmVzKTtcclxuICAgICAgICAgIHRoaXMucG9wdWxhdGVSZXZpZXdlckRhdGEocmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW0gPSByZXM/LnByb2dyYW1EZXRhaWxzPy5jYXRlZ29yeV9pZCA/IHJlcy5wcm9ncmFtRGV0YWlscyA6IHVuZGVmaW5lZDtcclxuICAgICAgICBpZih0aGlzLnNlbGVjdGVkUHJvZ3JhbT8uX2lkICYmICB0aGlzLm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbil7dGhpcy5nZXRMaXN0c0FjY29yZGluZ1RvUHJvZ3JhbSh0aGlzLnNlbGVjdGVkUHJvZ3JhbT8uX2lkKTt9XHJcbiAgICAgICAgdGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmcgPSByZXMubm90aWZpY2F0aW9uX3BlbmRpbmc7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nKSB7XHJcbiAgICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbnNbMV0uYnV0dG9uVGV4dCA9ICdWaWV3IFJlc3BvbnNpYmlsaXRpZXMgaW4gUXVldWUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbnNbMV0uYnV0dG9uVGV4dCA9ICdWaWV3IFJlc3BvbnNpYmlsaXRpZXMnO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyA1fjB+MH4wIHRoaXMgaXMgZm9yIG90aGVyIGZyZXF1ZW5jeVxyXG4gICAgICAgIGlmIChyZXMuZnJlcXVlbmN5X2RldGFpbHMgIT09ICcnICYmIHJlcy5mcmVxdWVuY3lfZGV0YWlscyAhPT0gJzV+MH4wfjAnKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeURhdGFQb3B1bGF0aW9uKHJlcyk7XHJcbiAgICAgICAgICB0aGlzLmdldEZyZXF1ZW5jeVBsYWNlaG9sZGVyKHJlcyk7XHJcbiAgICAgICAgICByZXMucGxhY2Vob2xkZXIgPSB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmlzRW50cnVzdCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLm1vZGUgPSAnQ1JFQVRFJztcclxuICAgICAgICAgIHRoaXMuYXNzaWduZWVSYWRpb1NlbGVjdCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWdub3JzLmVuYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWdub3JzLmxpc3QgPSBbXTtcclxuICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9uSWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbklkKCk7XHJcbiAgICAgICAgICB0aGlzLm1lbWJlcklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRNZW1iZXJJZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdD8ubGVuZ3RoID09PSAwICYmICghdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgfHwgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcy5saXN0Py5sZW5ndGggPT09IDAgJiYgdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpKSkpIHtcclxuICAgICAgICAgIHRoaXMuaXNFbnRydXN0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubW9kZSA9ICdDUkVBVEUnO1xyXG4gICAgICAgICAgdGhpcy5hc3NpZ25lZVJhZGlvU2VsZWN0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMuZW5hYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMubGlzdCA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5vcmdhbml6YXRpb25JZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSWQoKTtcclxuICAgICAgICAgIHRoaXMubWVtYmVySWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE1lbWJlcklkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgaWYgKHJlcy5mcmVxdWVuY3lfZGV0YWlscy5zcGxpdCgnficpWzBdICE9PSA2KSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXM/LnJjX2lkID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5yY1NlbGVjdGVkLmVtaXQodHJ1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcz8uYXVkaXRfY2F0ZWdvcnlfZGV0YWlscykge1xyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZUFzc3VyYW5jZUxpc3QocmVzPy5hdWRpdF9jYXRlZ29yeV9kZXRhaWxzKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hdWRpdF9jYXRlZ29yeV9kZXRhaWxzID0ge1xyXG4gICAgICAgICAgICBjYXRlZ29yeV9pZDogMCxcclxuICAgICAgICAgICAgc2FtcGxlOiAwLFxyXG4gICAgICAgICAgICBwZXJjZW50YWdlOiAwLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3lfcGF0dGVybjogJycsXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeV90aW1lOiAnJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlcy5hc3Nlc3NtZW50Py5hc3Nlc3NtZW50X2lkKSB7XHJcbiAgICAgICAgICB0aGlzLmdldEFzc2Vzc21lbnREZXRhaWxzKHJlcy5hc3Nlc3NtZW50LCByZXMucXVlc3Rpb25uYWlyZV90eXBlKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cykge1xyXG4gICAgICAgICAgdGhpcy5oaWRkZW5MaXN0LnB1c2goJ0NIRUNLUE9JTlRTJyk7XHJcbiAgICAgICAgICB0aGlzLmhpZGVFbGVtZW50c0Zyb21Nb3JlT3B0aW9ucy5lbWl0KHRoaXMuaGlkZGVuTGlzdCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuaXNBc3Nlc3NtZW50RGlzYWJsZWQuZW1pdCh0cnVlKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0RWRpdE1vcmVPcHRpb25zKHJlcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG5cclxuICBzZXRMaXN0KGxpc3Q6IGFueVtdLCBpZHM6IGFueVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGF0YTogYW55ID0gW107XHJcbiAgICBpZHM/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBpbmRleCA9IGxpc3QuZmluZEluZGV4KChsaXN0RWxlbWVudDogYW55KSA9PiBsaXN0RWxlbWVudFtrZXldID09IGVsZW1lbnQpO1xyXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgZGF0YS5wdXNoKGxpc3RbaW5kZXhdKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIHJldHVybklkcyhsaXN0OiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBsaXN0Py5tYXAoZWxlID0+IHsgaWYgKGVsZVtrZXldKSB7IHJldHVybiBlbGVba2V5XTsgfSB9KS5maWx0ZXIoZWxlID0+IGVsZSk7XHJcbiAgfVxyXG5cclxuICBwb3B1bGF0ZVByb2dyYW1Bc3NpZ25lZUdyb3VwKCl7XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfYXNzaWduZWVfZ3JvdXBfaWRzIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGlkcyA9IHRoaXMucmV0dXJuSWRzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdCwgJ2dyb3VwX2lkJyk7XHJcbiAgICAgICAgY29uc3QgYWxsSWRzID0gWy4uLm5ldyBTZXQoaWRzKSwgLi4ubmV3IFNldCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9hc3NpZ25lZV9ncm91cF9pZHMpXVxyXG4gICAgICAgIGNvbnN0IGFzc2lnbmVlR3JvdXBzID0gdGhpcy5ncm91cEFzc2lnbmVlTGlzdD8uZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IGFsbElkcz8uaW5jbHVkZXMoZWxlbWVudD8uZ3JvdXBfaWQpKTtcclxuICAgICAgICBpZiAoYXNzaWduZWVHcm91cHM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVHcm91cHMubGlzdCA9IGFzc2lnbmVlR3JvdXBzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZUdyb3Vwcy5saXN0ID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGFzc2lnbmVlR3JvdXBzID0gdGhpcy5ncm91cEFzc2lnbmVlTGlzdD8uZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwX2lkcz8uaW5jbHVkZXMoZWxlbWVudD8uZ3JvdXBfaWQpKTtcclxuICAgICAgICBpZiAoYXNzaWduZWVHcm91cHM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVHcm91cHMubGlzdCA9IGFzc2lnbmVlR3JvdXBzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVHcm91cHMubGlzdCA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9wdWxhdGVPdmVyc2VlckRhdGEocmVzOiBhbnkpIHtcclxuICAgIGxldCBvdmVyc2VlclVzZXJMaXN0OiBudW1iZXJbXSA9IFtdO1xyXG4gICAgbGV0IG92ZXJzZWVyVXNlck5vdGlmeUxpc3Q6IG51bWJlcltdID0gW107XHJcbiAgICAgIGxldCBvdmVyc2VlckVtcGxveWVlc0xpc3QgPSByZXM/LmNjX2VtYWlsID8gT2JqZWN0LmtleXMocmVzPy5jY19lbWFpbCkubWFwKE51bWJlcikgOiBbXTtcclxuICAgICAgb3ZlcnNlZXJVc2VyTGlzdCA9IChvdmVyc2VlckVtcGxveWVlc0xpc3Q/Lmxlbmd0aD4wICYmIHJlcz8udXNlckdyb3VwSWRzPy5jY0VtYWlsR3JvdXBJZHM/Lmxlbmd0aCA+IDAgKSA/IG92ZXJzZWVyRW1wbG95ZWVzTGlzdC5maWx0ZXIoKGVtcGxveWVlSWRzOiBudW1iZXIpID0+IHJlcz8uZXhpc3RpbmdVc2VySWRzPy5jY0VtYWlsRW1wSWRzPy5pbmNsdWRlcyhlbXBsb3llZUlkcykpIDogWy4uLm92ZXJzZWVyRW1wbG95ZWVzTGlzdF07XHJcbiAgICAgIGxldCBvdmVyc2VlckVtcGxveWVlTm90aWZ5TGlzdCA9IHJlcz8uZmFpbHVyZV9jY19lbWFpbCA/IE9iamVjdC5rZXlzKHJlcz8uZmFpbHVyZV9jY19lbWFpbCkubWFwKE51bWJlcikgOiBbXTtcclxuICAgICAgb3ZlcnNlZXJVc2VyTm90aWZ5TGlzdCA9IChvdmVyc2VlckVtcGxveWVlTm90aWZ5TGlzdD8ubGVuZ3RoID4gMCAmJiByZXM/LnVzZXJHcm91cElkcz8uZmFpbHVyZUNDRW1haWxHcm91cElkcz8ubGVuZ3RoID4gMCkgPyBvdmVyc2VlckVtcGxveWVlTm90aWZ5TGlzdC5maWx0ZXIoKGVtcGxveWVlSWRzOiBudW1iZXIpID0+IHJlcz8uZXhpc3RpbmdVc2VySWRzPy5mYWlsdXJlQ0NFbWFpbEVtcElkcz8uaW5jbHVkZXMoZW1wbG95ZWVJZHMpKSA6IFsuLi5vdmVyc2VlckVtcGxveWVlTm90aWZ5TGlzdF07XHJcblxyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybVtcIm92ZXJzZWVyc1wiXSA9IHtcclxuXHJcbiAgICAgIGxpc3Q6IChyZXM/LmNjX2VtYWlsKSA/IHRoaXMuc2V0TGlzdCh0aGlzLm92ZXJzZWVyc0xpc3QsIG92ZXJzZWVyVXNlckxpc3QsICdlbXBsb3llZV9pZCcpIDogW10sXHJcbiAgICAgIG5vdGlmeUxpc3Q6IChyZXM/LmZhaWx1cmVfY2NfZW1haWwpID8gdGhpcy5zZXRMaXN0KHRoaXMub3ZlcnNlZXJzTGlzdCwgb3ZlcnNlZXJVc2VyTm90aWZ5TGlzdCwgJ2VtcGxveWVlX2lkJykgOiBbXSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm1bXCJvdmVyc2VlcnNHcm91cHNcIl0gPSB7XHJcblxyXG4gICAgICBsaXN0OiAocmVzPy51c2VyR3JvdXBJZHM/LmNjRW1haWxHcm91cElkcykgPyB0aGlzLnNldExpc3QodGhpcy5PcmdHcm91cCwgcmVzPy51c2VyR3JvdXBJZHM/LmNjRW1haWxHcm91cElkcywgJ2dyb3VwX2lkJykgOiBbXSxcclxuICAgICAgbm90aWZ5TGlzdDogKHJlcz8udXNlckdyb3VwSWRzPy5mYWlsdXJlQ0NFbWFpbEdyb3VwSWRzKSA/IHRoaXMuc2V0TGlzdCh0aGlzLk9yZ0dyb3VwLCByZXM/LnVzZXJHcm91cElkcz8uZmFpbHVyZUNDRW1haWxHcm91cElkcywgJ2dyb3VwX2lkJykgOiBbXVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHBvcHVsYXRlUmV2aWV3ZXJEYXRhKHJlczogYW55KSB7XHJcbiAgICBjb25zdCByZXZpZXdlckRldGFpbHMgPSBPYmplY3Qua2V5cyhyZXM/LnJldmlld2VyX2Fycik7XHJcbiAgICB0aGlzLmhhc1Jldmlld2VyID0gcmV2aWV3ZXJEZXRhaWxzPy5sZW5ndGggPiAwXHJcbiAgICBjb25zdCBncm91cFJldmlld2VyRGV0YWlscyA9IHJlcz8udXNlckdyb3VwSWRzPy5yZXZpZXdlckdyb3VwSWRzPy5sZW5ndGggPyBPYmplY3QuYXNzaWduKHJlcz8udXNlckdyb3VwSWRzPy5yZXZpZXdlckdyb3VwSWRzKTogW107XHJcbiAgICBsZXQgcmV2aWV3ZXJfdXNlcnM6IGFueVtdID0gW11cclxuICAgICAgcmV2aWV3ZXJfdXNlcnMgPSAocmVzPy5yZXZpZXdlcl9hcnI/LmxldmVsMT8ucmV2aWV3ZXJzPy5sZW5ndGggPiAwICYmIHJlcz8udXNlckdyb3VwSWRzPy5yZXZpZXdlckdyb3VwSWRzPy5sZW5ndGggPiAwKSA/IHJlcz8ucmV2aWV3ZXJfYXJyPy5sZXZlbDE/LnJldmlld2Vycy5maWx0ZXIoKG1lbWJlcklkOiBhbnkpID0+IHJlcz8uZXhpc3RpbmdVc2VySWRzPy5yZXZpZXdlcklkcz8uaW5jbHVkZXMobWVtYmVySWQ/Lm1lbWJlcl9pZCkpIDogcmVzPy5yZXZpZXdlcl9hcnI/LmxldmVsMT8ucmV2aWV3ZXJzO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm1bXCJyZXZpZXdlcnNcIl0gPSB7XHJcbiAgICAgIHNlcXVlbnRpYWxXb3JrZmxvdzogKHJlcz8ucmV2aWV3ZXJfYXJyPy5sZXZlbDE/LnR5cGUgPT0gJ1NFUVVFTlRJQUwnKSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgcmV2aWV3RnJlcXVlbmN5OiB7XHJcbiAgICAgICAgcmV2aWV3Q29tcGxldGVEYXlzOiAocmV2aWV3ZXJEZXRhaWxzPy5sZW5ndGggPiAwKSA/IHJlcz8ucmV2aWV3X2FmdGVyX2RheXMgOiAyLFxyXG4gICAgICAgIHJldmlld05PdENvbXBsZXRlZERheXM6IChyZXZpZXdlckRldGFpbHM/Lmxlbmd0aCA+IDApID8gcmVzPy5yZXZpZXdfZmFpbGVkX2FmdGVyX2RheXMgOiAyXHJcbiAgICAgIH0sXHJcbiAgICAgIGFjY2VwdGVkRGF0YTogcmV2aWV3ZXJEZXRhaWxzPy5sZW5ndGggPiAwID8gcmV2aWV3ZXJfdXNlcnMgOiBbXSxcclxuICAgICAgbGlzdDogcmV2aWV3ZXJEZXRhaWxzPy5sZW5ndGggPiAwID8gdGhpcy5zZXRSZXZpZXdlclBheWxvYWQocmV2aWV3ZXJfdXNlcnMsICdvYmplY3QnLCByZXM/LnJldmlld2VyX2Fycj8ubGV2ZWwxPy50eXBlKSA6IFtdXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybVtcImdyb3VwUmV2aWV3ZXJzXCJdID0ge1xyXG4gICAgICBzZXF1ZW50aWFsV29ya2Zsb3c6IChyZXM/LnJldmlld2VyX2Fycj8ubGV2ZWwxPy50eXBlID09ICdTRVFVRU5USUFMJykgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgIHJldmlld0ZyZXF1ZW5jeToge1xyXG4gICAgICAgIHJldmlld0NvbXBsZXRlRGF5czogKHJldmlld2VyRGV0YWlscz8ubGVuZ3RoID4gMCkgPyByZXM/LnJldmlld19hZnRlcl9kYXlzIDogMixcclxuICAgICAgICByZXZpZXdOT3RDb21wbGV0ZWREYXlzOiAocmV2aWV3ZXJEZXRhaWxzPy5sZW5ndGggPiAwKSA/IHJlcz8ucmV2aWV3X2ZhaWxlZF9hZnRlcl9kYXlzIDogMlxyXG4gICAgICB9LFxyXG4gICAgICBsaXN0OiBncm91cFJldmlld2VyRGV0YWlscz8ubGVuZ3RoID4gMCA/IHRoaXMuc2V0TGlzdCh0aGlzLk9yZ0dyb3VwLCBncm91cFJldmlld2VyRGV0YWlscywgJ2dyb3VwX2lkJykgOiBbXVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9wdWxhdGVBc3NpZ25lZURhdGEocmVzOmFueSl7XHJcbiAgICBsZXQgQXNzaWduZWVBbnlVc2VyTGlzdDogbnVtYmVyW10gPSBbXTtcclxuICAgIGxldCBBc3NpZ25lZUFsbFVzZXJMaXN0IDogbnVtYmVyW10gPSBbXTtcclxuICAgICAgbGV0IGFzc2lnbmVlQW55T25lTGlzdCA9IChyZXM/LmFzc2lnbmVkX3RvX21lbWJlcl9pZCAmJiB0aGlzLmlzRW50cnVzdCkgPyByZXM/LmFzc2lnbmVkX3RvX21lbWJlcl9pZCA6IFtdO1xyXG4gICAgICBBc3NpZ25lZUFueVVzZXJMaXN0ID0gKHJlcz8uYXNzaWduZWRfdG9fbWVtYmVyX2lkPy5sZW5ndGggPiAwICYmIHJlcz8udXNlckdyb3VwSWRzPy5hc3NpZ25lZUFueW9uZUdyb3VwSWRzPy5sZW5ndGggPiAwKSA/IGFzc2lnbmVlQW55T25lTGlzdC5maWx0ZXIoKGVtcGxveWVlSWRzOiBudW1iZXIpID0+IHJlcz8uZXhpc3RpbmdVc2VySWRzPy5hc3NpZ25lZUFueW9uZUlkcz8uaW5jbHVkZXMoZW1wbG95ZWVJZHMpKSA6IFsuLi4gYXNzaWduZWVBbnlPbmVMaXN0XTtcclxuXHJcbiAgICAgIEFzc2lnbmVlQWxsVXNlckxpc3QgPSAocmVzPy5hc3NpZ25lZF90byAmJiAhdGhpcy5pc0VudHJ1c3QpID8gcmVzPy5hc3NpZ25lZF90byA6IFtdO1xyXG4gICAgICBjb25zdCBhc3NpZ25lZFRvVXNlckRldGFpbHMgPSB0aGlzLnNldExpc3QodGhpcy5hc3NpZ25lZXNMaXN0LCBbTnVtYmVyKHJlcz8uYXNzaWduZWRfdG8pXSAsICdlbXBsb3llZV9pZCcpO1xyXG4gICAgICBpZihhc3NpZ25lZFRvVXNlckRldGFpbHM/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IG1lbWJlcl9pZCA9IGFzc2lnbmVkVG9Vc2VyRGV0YWlsc1swXT8ubXlfbWVtYmVyX2lkO1xyXG4gICAgICAgIGlmKHJlcz8uZXhpc3RpbmdVc2VySWRzPy5hc3NpZ25lZUFsbElkcz8ubGVuZ3RoICYmIHJlcz8uZXhpc3RpbmdVc2VySWRzPy5hc3NpZ25lZUFsbElkcz8uaW5jbHVkZXMobWVtYmVyX2lkKSkge1xyXG4gICAgICAgICAgQXNzaWduZWVBbGxVc2VyTGlzdCA9IHJlcz8uYXNzaWduZWRfdG87XHJcbiAgICAgICAgICByZXMudXNlckdyb3VwSWRzW1wiYXNzaWduZWVBbGxHcm91cElkc1wiXSA9IFtdO1xyXG4gICAgICAgIH1lbHNlIGlmKHJlcz8udXNlckdyb3VwSWRzPy5hc3NpZ25lZUFsbEdyb3VwSWRzPy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgIEFzc2lnbmVlQWxsVXNlckxpc3QgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtW1wiYXNzaWduZWVzXCJdID0ge1xyXG4gICAgICB3aG9DYW5Db21wbGV0ZTogKHJlcy5pc0dyb3VwQXNzaWduVG8pID8gJ0FOWV9PTkUnIDogJ0FMTCcsXHJcbiAgICAgIGxpc3Q6IChyZXM/LmFzc2lnbmVkX3RvX21lbWJlcl9pZD8ubGVuZ3RoID09IDApID8gdGhpcy5zZXRMaXN0KHRoaXMuYXNzaWduZWVzTGlzdCwgW051bWJlcihBc3NpZ25lZUFsbFVzZXJMaXN0KV0gLCAnZW1wbG95ZWVfaWQnKSA6XHJcbiAgICAgICAgdGhpcy5zZXRMaXN0KHRoaXMuYXNzaWduZWVzTGlzdCwgQXNzaWduZWVBbnlVc2VyTGlzdCwgJ215X21lbWJlcl9pZCcpLFxyXG4gICAgfVxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm1bXCJhc3NpZ25lZUdyb3Vwc1wiXSA9e1xyXG4gICAgICB3aG9DYW5Db21wbGV0ZTogKHJlcz8uaXNHcm91cEFzc2lnblRvKSA/ICdBTllfT05FJyA6ICdBTEwnLFxyXG4gICAgICBsaXN0OiAocmVzPy51c2VyR3JvdXBJZHM/LmFzc2lnbmVlQW55b25lR3JvdXBJZHM/Lmxlbmd0aCA9PSAwKSA/IHJlcz8udXNlckdyb3VwSWRzPy5hc3NpZ25lZUFsbEdyb3VwSWRzPy5sZW5ndGggPiAwID8gdGhpcy5zZXRMaXN0KHRoaXMuT3JnR3JvdXAsIHJlcz8udXNlckdyb3VwSWRzPy5hc3NpZ25lZUFsbEdyb3VwSWRzLCAnZ3JvdXBfaWQnKTogW10gOlxyXG4gICAgICAgIHRoaXMuc2V0TGlzdCh0aGlzLk9yZ0dyb3VwLCByZXM/LnVzZXJHcm91cElkcz8uYXNzaWduZWVBbnlvbmVHcm91cElkcywgJ2dyb3VwX2lkJyksXHJcbiAgICB9XHJcbiAgICAgIHRoaXMuYWxsR3JvdXBBc3NpZ25lZSA9ICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3Q/Lmxlbmd0aCA+IDAgJiYgIXRoaXMuaXNFbnRydXN0KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIHRoaXMgZnVuY3Rpb24gaXMgZm9yIGdldHRpbmcgdGhlIHVzZXJzIGRhdGEgYmFzZWQgb24gbWVtYmVyX2lkIG9mIHVzZXJzIG9mIHNlbGVjdGVkIFVzZXIgR3JvdXBcclxuICogQHBhcmFtIHVzZXJsaXN0IGNvbnRhaW5zIHVzZXJzIGRhdGFcclxuICogQHBhcmFtIHNlbGVjdGVkZ3JvdXBzIGNvbnRhaW5zIHNlbGVjdGVkIFVzZXIgR3JvdXAgZGF0YVxyXG4gKiBAcmV0dXJucyB1c2VyIGRhdGEgb2YgU2VsZWN0ZWQgdXNlciBncm91cC5cclxuICovXHJcbiAgZ2V0R3JvdXBzVXNlckVtcGxveWVlc0lkKHVzZXJMaXN0OiBhbnksIHNlbGVjdGVkR3JvdXBzOiBhbnkpIHtcclxuICAgIGxldCBncm91cE1lbWJlcklkczogYW55ID0gW107XHJcbiAgICBsZXQgZ3JvdXBVc2VyRW1wbG95ZWU6IGFueSA9IFtdO1xyXG4gICAgc2VsZWN0ZWRHcm91cHM/LmZvckVhY2goKGdyb3VwOiBhbnkpID0+IHtcclxuICAgICAgZ3JvdXBNZW1iZXJJZHMgPSBbLi4ubmV3IFNldChbLi4uZ3JvdXBNZW1iZXJJZHMsIC4uLmdyb3VwPy5tZW1iZXJfaWRzXSldXHJcbiAgICB9KVxyXG4gICAgdXNlckxpc3Q/LmZvckVhY2goKGVsZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChncm91cE1lbWJlcklkcz8uaW5jbHVkZXMoZWxlPy5teV9tZW1iZXJfaWQpKSB7XHJcbiAgICAgICAgZ3JvdXBVc2VyRW1wbG95ZWUucHVzaChlbGUpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICByZXR1cm4gZ3JvdXBVc2VyRW1wbG95ZWVcclxuICB9XHJcblxyXG4gIHNldFJldmlld2VyUGF5bG9hZChpZHM6IGFueVtdLCB0eXBlOiBzdHJpbmcsIGFjY2VwdGVkRGF0YT86IEFycmF5PGFueT4sIHJldmlld2VyVHlwZT86IHN0cmluZykge1xyXG4gICAgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGNvbnN0IGlkT2JqQXJyYXkgPSB0aGlzLnJldHVybklkcyhpZHMsICdtZW1iZXJfaWQnKTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2V0TGlzdCh0aGlzLmFsbFVzZXJzTGlzdCwgaWRPYmpBcnJheSwgJ215X21lbWJlcl9pZCcpO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnbGlzdCcpIHtcclxuICAgICAgY29uc3QgcGF5TG9hZDogYW55ID0gW107XHJcbiAgICAgIGNvbnN0IGlkc0xpc3QgPSB0aGlzLnJldHVybklkcyhpZHMsICdteV9tZW1iZXJfaWQnKTtcclxuICAgICAgaWRzTGlzdC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgaW5kZXggPSAtMTtcclxuICAgICAgICBpZiAoKGFjY2VwdGVkRGF0YSA/PyBbXSk/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGluZGV4ID0gYWNjZXB0ZWREYXRhPy5maW5kSW5kZXgoZWxlID0+IGVsZS5tZW1iZXJfaWQgPT09IGVsZW1lbnQpID8/IC0xXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBhY2NlcHRTdGF0dXMgPSAoaW5kZXggPiAtMSAmJiBhY2NlcHRlZERhdGEpID8gYWNjZXB0ZWREYXRhW2luZGV4XS5yZXZpZXdlcl9hY2NlcHQgOiAwXHJcbiAgICAgICAgaWYgKGFjY2VwdFN0YXR1cyA9PT0gMCAmJiByZXZpZXdlclR5cGUgPT09ICdBTllPTkUnKSB7XHJcbiAgICAgICAgICBhY2NlcHRTdGF0dXMgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYXlMb2FkLnB1c2goeyBtZW1iZXJfaWQ6IGVsZW1lbnQsIHJldmlld2VyX2FjY2VwdDogYWNjZXB0U3RhdHVzIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHBheUxvYWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja1doZXRoZXJBbGxMaXN0c0xvYWRlZCgpIHtcclxuICAgIGlmICh0aGlzLnJjTGlzdExvYWRlZCAmJiB0aGlzLmFzc2lnbmVlc0xpc3RMb2FkZWQgJiYgdGhpcy5hc3NpZ25vcnNMaXN0TG9hZGVkICYmXHJcbiAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RMb2FkZWQgJiYgdGhpcy5hc3N1cmFuY2VDYXRlZ29yeUxpc3RMb2FkZWQgJiYgdGhpcy5ncm91cHNMaXN0TG9hZGVkKSB7XHJcblxyXG4gICAgICBpZiAodGhpcy5mcmFtZXdvcmtEZXRhaWxzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5lbnRydXN0RnJhbWV3b3JrKHRoaXMuZnJhbWV3b3JrRGV0YWlsc1swXSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdFRElUJykge1xyXG4gICAgICAgIHRoaXMuZ2V0RWRpdFJlc3BvbnNpYmlsaXR5RGV0YWlscyh0aGlzLnJlc3BvbnNpYmlsaXR5SWQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRQcm9ncmFtKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtLnB1c2godGhpcy5zZWxlY3RlZFByb2dyYW0pO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbV9zZWxlY3RlZF9pZHMucHVzaCh0aGlzLnNlbGVjdGVkUHJvZ3JhbS5jYXRlZ29yeV9pZCk7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeV9pZCA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5jYXRlZ29yeV9pZD8udG9TdHJpbmcoKTtcclxuICAgICAgICAgIGlmKHRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy53aG9DYW5Db21wbGV0ZSA9ICh0aGlzLnNlbGVjdGVkUHJvZ3JhbT8uZGVmYXVsdF9hc3NpZ25lZV90eXBlID09ICdBTllPTkUnKSA/ICdBTllfT05FJyA6ICdBTEwnO1xyXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93ID0gKHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5kZWZhdWx0X3Jldmlld2Vyc190eXBlID09ICdTRVFVRU5USUFMJykgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmV2aWRlbmNlUmVxdWlyZWQgPSAodGhpcy5zZWxlY3RlZFByb2dyYW0/LmV2aWRlbmNlX3VwbG9hZF9mbGFnKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IHByb2dyYW1DdXN0b21UYWdzID0gdGhpcy5zZWxlY3RlZFByb2dyYW0/LmN1c3RvbV90YWdzID8gSlNPTi5wYXJzZSh0aGlzLnNlbGVjdGVkUHJvZ3JhbS5jdXN0b21fdGFncykgOiBbXTtcclxuICAgICAgICAgIHByb2dyYW1DdXN0b21UYWdzLmZvckVhY2goKHRhZzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhZ0RhdGEgPSBKU09OLnBhcnNlKHRhZyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncy5maW5kSW5kZXgoKHRhZ0VsZW1lbnQ6IGFueSkgPT4gdGFnRWxlbWVudC50YWdfbmFtZSA9PSB0YWdEYXRhLnRhZ19uYW1lKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncy5wdXNoKHRhZ0RhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGNvbnN0IGNoZWNrZWRNb3JlT3B0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5QUk9HUkFNID0gdHJ1ZTtcclxuICAgICAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdQUk9HUkFNJyk7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFByb2dyYW0/LmV2aWRlbmNlX3VwbG9hZF9mbGFnICYmIHRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdGT1JNQVRFX0VWSURFTkNFJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuRk9STUFURV9FVklERU5DRSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmZpbHRlckxpc3RzQWNjb3JkaW5nVG9Qcm9ncmFtKHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5faWQpO1xyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbi5lbWl0KGNoZWNrZWRNb3JlT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmNoZWNrV2hldGhlckFsbExpc3RzTG9hZGVkKCk7XHJcbiAgICAgIH0sIDMwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHNhdmVTZWxlY3RlZExpc3QodHlwZTogc3RyaW5nLCBzZWxlY3RlZEl0ZW1zOiBhbnkpIHtcclxuXHJcblxyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2Fzc2lnbm9ycyc6XHJcbiAgICAgICAgaWYgKHRoaXMuaW52YWxpZFR5cGUgPT09ICd3aG9tJykge1xyXG4gICAgICAgICAgdGhpcy5pbnZhbGlkVHlwZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMubGlzdCA9IHRoaXMuc2V0TGlzdCh0aGlzLmFzc2lnbm9yc0xpc3QsIFtzZWxlY3RlZEl0ZW1zLm1lbWJlcl9pZF0sICdtZW1iZXJfaWQnKTtcclxuICAgICAgICB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhc3NpZ25lZXMnOlxyXG4gICAgICAgIGlmICh0aGlzLmludmFsaWRUeXBlID09PSAnd2hvJykge1xyXG4gICAgICAgICAgdGhpcy5pbnZhbGlkVHlwZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaXNFbnRydXN0ICYmIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy53aG9DYW5Db21wbGV0ZSAhPT0gJ0FOWV9PTkUnKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCA9IHRoaXMuc2V0TGlzdCh0aGlzLmFzc2lnbmVlc0xpc3QsIFtzZWxlY3RlZEl0ZW1zLmVtcGxveWVlX2lkXSwgJ2VtcGxveWVlX2lkJyk7XHJcbiAgICAgICAgICB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpe1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVHcm91cEFzc2lnbmVlRGF0YShzZWxlY3RlZEl0ZW1zKTtcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCA9IHRoaXMuc2V0TGlzdCh0aGlzLmFzc2lnbmVlc0xpc3QsIHNlbGVjdGVkSXRlbXMsICdteV9tZW1iZXJfaWQnKTtcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3JjJzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYyA9IHRoaXMuc2V0TGlzdCh0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QsIHNlbGVjdGVkSXRlbXMsICdpdGVtX2lkJyk7XHJcbiAgICAgICAgdGhpcy5yY1NlbGVjdGVkLmVtaXQodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmM/Lmxlbmd0aCA+IDApXHJcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjPy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlcXVpcmVzQXVkaXRMaXN0ID0gW107XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybVsnYXVkaXRfY2F0ZWdvcnlfZGV0YWlscyddWydjYXRlZ29yeV9pZCddID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeSA9IHNlbGVjdGVkSXRlbXM7XHJcbiAgICAgICAgc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRhZyA9IGVsZW1lbnQuY3VzdG9tX3RhZ3MgIT09ICcnICYmIGVsZW1lbnQuY3VzdG9tX3RhZ3MgIT09IFwibnVsbFwiICYmIGVsZW1lbnQuY3VzdG9tX3RhZ3MgIT0gXCJbXVwiID8gSlNPTi5wYXJzZShlbGVtZW50LmN1c3RvbV90YWdzKSA6IFtdO1xyXG4gICAgICAgICAgaWYgKHRhZz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0YWcuZm9yRWFjaCgodGFnRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLmZpbmRJbmRleCgodGFnRWxlbWVudDogYW55KSA9PiB0YWdFbGVtZW50LnRhZ19uYW1lID09IHRhZ0RhdGEudGFnX25hbWUpO1xyXG4gICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncy5wdXNoKHRhZ0RhdGEpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Byb2dyYW0nOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmxpbmtlZFByb2dyYW0gPSBzZWxlY3RlZEl0ZW1zPy5saW5rZWRQcm9ncmFtO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUHJvZ3JhbSAmJiAhKHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5wcm9ncmFtVHlwZSA9PT0gMCAmJiB0aGlzLnNlbGVjdGVkUHJvZ3JhbT8ubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3VuY2F0ZWdvcml6ZWQnIHx8ICEodGhpcy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb24pKSkge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkgPSAoc2VsZWN0ZWRJdGVtcy5jYXRlZ29yaWVzKSA/IHNlbGVjdGVkSXRlbXMuY2F0ZWdvcmllcyA6IFtdO1xyXG4gICAgICAgICAgbGV0IGNhdGVnb3J5SWQgPSBzZWxlY3RlZEl0ZW1zPy5jYXRlZ29yaWVzPy50b1N0cmluZygpO1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGVkSXRlbXM/LmNhdGVnb3JpZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeV9pZCA9IHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkICsgJywnICsgY2F0ZWdvcnlJZDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5X2lkID0gc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY2F0ZWdvcnlfaWQ/LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtX3NlbGVjdGVkX2lkcyA9IFsuLi5uZXcgU2V0KHNlbGVjdGVkSXRlbXM/LmNhdGVnb3JpZXMpLCAuLi5uZXcgU2V0KFtzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5jYXRlZ29yeV9pZF0pXTtcclxuICAgICAgICAgIGNvbnN0IHByb2dyYW1DdXN0b21UYWdzID0gc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY3VzdG9tX3RhZ3MgPyBKU09OLnBhcnNlKHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmN1c3RvbV90YWdzKSA6IFtdO1xyXG4gICAgICAgICAgcHJvZ3JhbUN1c3RvbVRhZ3M/LmZvckVhY2goKHRhZzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhZ0RhdGEgPSB0eXBlb2YgdGFnID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh0YWcpIDogdGFnO1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KCh0YWdFbGVtZW50OiBhbnkpID0+IHRhZ0VsZW1lbnQudGFnX25hbWUgPT0gdGFnRGF0YS50YWdfbmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MucHVzaCh0YWdEYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2Vzc21lbnQpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2Vzc21lbnQpPy5sZW5ndGggPyB0aGlzLmdldFByb2dyYW1EZXRhaWxzKHNlbGVjdGVkSXRlbXM/LnByb2dyYW0uX2lkKSA6IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeSA9IChzZWxlY3RlZEl0ZW1zLmNhdGVnb3JpZXMpID8gc2VsZWN0ZWRJdGVtcy5jYXRlZ29yaWVzIDogW107XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtID0gW107XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeV9pZCA9ICcnO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbV9zZWxlY3RlZF9pZHMgPSBbXTtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MgPSBbXTtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0gPSAoc2VsZWN0ZWRJdGVtcy5wcm9ncmFtKSA/IFtzZWxlY3RlZEl0ZW1zLnByb2dyYW1dIDogW107XHJcbiAgICAgICAgICBsZXQgY2F0ZWdvcnlJZCA9IHNlbGVjdGVkSXRlbXM/LmNhdGVnb3JpZXM/LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcz8uY2F0ZWdvcmllcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5X2lkID0gc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY2F0ZWdvcnlfaWQgKyAnLCcgKyBjYXRlZ29yeUlkO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnlfaWQgPSBzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5jYXRlZ29yeV9pZD8udG9TdHJpbmcoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW1fc2VsZWN0ZWRfaWRzID0gWy4uLm5ldyBTZXQoc2VsZWN0ZWRJdGVtcz8uY2F0ZWdvcmllcyksIC4uLm5ldyBTZXQoW3NlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkXSldO1xyXG4gICAgICAgICAgY29uc3QgcHJvZ3JhbUN1c3RvbVRhZ3MgPSBzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5jdXN0b21fdGFncyA/IEpTT04ucGFyc2Uoc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY3VzdG9tX3RhZ3MpIDogW107XHJcbiAgICAgICAgICBwcm9ncmFtQ3VzdG9tVGFncz8uZm9yRWFjaCgodGFnOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdGFnRGF0YSA9IHR5cGVvZiB0YWcgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHRhZykgOiB0YWc7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncy5maW5kSW5kZXgoKHRhZ0VsZW1lbnQ6IGFueSkgPT4gdGFnRWxlbWVudC50YWdfbmFtZSA9PSB0YWdEYXRhLnRhZ19uYW1lKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncy5wdXNoKHRhZ0RhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmKHRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy53aG9DYW5Db21wbGV0ZSA9IChzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5kZWZhdWx0X2Fzc2lnbmVlX3R5cGUgPT0gJ0FOWU9ORScpID8gJ0FOWV9PTkUnIDogJ0FMTCc7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5zZXF1ZW50aWFsV29ya2Zsb3cgPSAoc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uZGVmYXVsdF9yZXZpZXdlcnNfdHlwZSA9PSAnU0VRVUVOVElBTCcpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5ldmlkZW5jZVJlcXVpcmVkID0gKHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmV2aWRlbmNlX3VwbG9hZF9mbGFnKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmV2aWRlbmNlX3VwbG9hZF9mbGFnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5GT1JNQVRFX0VWSURFTkNFID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmKCEodGhpcy5zZWxlY3RlZFByb2dyYW0/LnByb2dyYW1UeXBlID09PSAwICYmIHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSAndW5jYXRlZ29yaXplZCcgKSl7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5faWQgJiYgdGhpcy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb24pIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlckxpc3RzQWNjb3JkaW5nVG9Qcm9ncmFtKHNlbGVjdGVkSXRlbXMucHJvZ3JhbS5faWQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyTGlzdHNBY2NvcmRpbmdUb1Byb2dyYW0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jldmlld2VyJzpcclxuICAgICAgICBpZih0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcyl7XHJcbiAgICAgICAgICB0aGlzLnNhdmVHcm91cFJldmlld2VyRGF0YShzZWxlY3RlZEl0ZW1zKVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QgPSB0aGlzLnNldExpc3QodGhpcy5yZXZpZXdlcnNMaXN0LCBzZWxlY3RlZEl0ZW1zLCAnZW1wbG95ZWVfaWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYWxsUmVmcmVzaExpc3QoKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ292ZXJzZWVyJzpcclxuICAgICAgICBpZih0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcyl7XHJcbiAgICAgICAgdGhpcy5zYXZlT3ZlcnNlZXJEYXRhKHNlbGVjdGVkSXRlbXMsJ292ZXJzZWVyTGlzdCcpXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3QgPSB0aGlzLnNldExpc3QodGhpcy5hbGxVc2Vyc0xpc3QsIHNlbGVjdGVkSXRlbXMsICdlbXBsb3llZV9pZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnb3ZlcnNlZXJOb3RpZnknOlxyXG4gICAgICAgIGlmKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKXtcclxuICAgICAgICAgIHRoaXMuc2F2ZU92ZXJzZWVyRGF0YShzZWxlY3RlZEl0ZW1zLCdvdmVyc2Vlck5vdGlmeUxpc3QnKVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QgPSB0aGlzLnNldExpc3QodGhpcy5hbGxVc2Vyc0xpc3QsIHNlbGVjdGVkSXRlbXMsICdlbXBsb3llZV9pZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYXNzdXJhbmNlJzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3N1cmFuY2VMaXN0ID0gdGhpcy5zZXRMaXN0KHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcmllc0xpc3QsIHNlbGVjdGVkSXRlbXMsICdjYXRlZ29yeV9pZCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXF1aXJlc19hdWRpdCc6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVxdWlyZXNBdWRpdExpc3QgPSB0aGlzLnNldExpc3QodGhpcy5hc3N1cmFuY2VSZXF1aXJlc0F1ZGl0TGlzdCwgW3NlbGVjdGVkSXRlbXM/LmNhdGVnb3J5X2lkXSwgJ2NhdGVnb3J5X2lkJyk7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm1bJ2F1ZGl0X2NhdGVnb3J5X2RldGFpbHMnXVsnY2F0ZWdvcnlfaWQnXSA9IHNlbGVjdGVkSXRlbXM/LmNhdGVnb3J5X2lkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjaGVja3BvaW50cyc6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHMgPSBzZWxlY3RlZEl0ZW1zPy5jaGVja3BvaW50RGV0YWlscztcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50SW5zdHJ1Y3Rpb24gPSBzZWxlY3RlZEl0ZW1zPy5jaGVja3BvaW50SW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhbGN1bGF0ZWRyaXNrJzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yaXNrQ2xhc3MgPSBzZWxlY3RlZEl0ZW1zPy5yaXNrQ2xhc3M7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmlza01hdHJpeCA9IHNlbGVjdGVkSXRlbXM/LnJpc2tNYXRyaXg7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Zvcm1hdGVfZXZpZGVuY2UnOlxyXG5cclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5mb3JtYXRSZXF1aXJlZCA9IHNlbGVjdGVkSXRlbXM/LmlzRm9ybWF0ZVVwbG9hZGVkID8/IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmZvcm1hdEZpbGVzID0gc2VsZWN0ZWRJdGVtcz8uZmlsZXMgPz8gW107XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZm9ybWF0TGlua3MgPSBzZWxlY3RlZEl0ZW1zPy5saW5rcyA/PyBbXTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5ldmlkZW5jZVJlcXVpcmVkID0gc2VsZWN0ZWRJdGVtcz8uaXNFdmlkZW5jZVJlcXVpcmVkID8/IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXZpZXdGcmVxdWVuY3knOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5yZXZpZXdGcmVxdWVuY3kgPSB7XHJcbiAgICAgICAgICByZXZpZXdDb21wbGV0ZURheXM6IHNlbGVjdGVkSXRlbXMuY29tcGxldGVEYXlzLFxyXG4gICAgICAgICAgcmV2aWV3Tk90Q29tcGxldGVkRGF5czogc2VsZWN0ZWRJdGVtcy5ub3RDb21wbGV0ZWQsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLmFjdGl2ZURlc2VsZWN0b3IoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBwcm9ncmFtIGlzIHNlbGVjdGVkIGFuZCB0aGUgdXNlciBoYXMgZnVsbCBwZXJtaXNzaW9uLCByZWZyZXNoIHRoZSBsaXN0cyB3aGlsZSB0aGUgcHJvZ3JhbVxyXG4gICAqIGlzIHNlbGVjdGVkLiBPdGhlcndpc2UsIHJlZnJlc2ggYWxsIGxpc3RzLlxyXG4gICAqIDwvY29kZT5cclxuICAgKi9cclxuICBjYWxsUmVmcmVzaExpc3QoKSB7XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbT8ubGVuZ3RoICYmIHRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKSB7XHJcbiAgICAgIHRoaXMucmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcmVtb3ZlKHR5cGU6IGFueSwgZXZlbnQ/OiBhbnkpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdyYyc6XHJcbiAgICAgICAgY29uc3QgcmNJbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjLmZpbmRJbmRleCgocmM6IGFueSkgPT4gcmMucmNfaWQgPT0gZXZlbnQucmNfaWQpO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjLnNwbGljZShyY0luZGV4LCAxKTtcclxuICAgICAgICB0aGlzLnJjU2VsZWN0ZWQuZW1pdCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYz8ubGVuZ3RoID4gMClcclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmM/Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVxdWlyZXNBdWRpdExpc3QgPSBbXTtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtWydhdWRpdF9jYXRlZ29yeV9kZXRhaWxzJ11bJ2NhdGVnb3J5X2lkJ10gPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYXNzaWdub3JzJzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMubGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Fzc2lnbmVlcyc6XHJcbiAgICAgICAgY29uc3QgZW50cnVzdEluZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdC5maW5kSW5kZXgoKG93bmVyOiBhbnkpID0+IG93bmVyLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdC5zcGxpY2UoZW50cnVzdEluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZ3JvdXBhc3NpZ25lZXMnOlxyXG4gICAgICAgICAgY29uc3QgZ3JvdXBJbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdC5maW5kSW5kZXgoKGdyb3VwOiBhbnkpID0+IGdyb3VwLmdyb3VwX2lkID09IGV2ZW50Lmdyb3VwX2lkKTtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlR3JvdXBzLmxpc3Quc3BsaWNlKGdyb3VwSW5kZXgsIDEpO1xyXG4gICAgICAgICAgdGhpcy5jYWxsUmVmcmVzaExpc3QoKTtcclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ3Jldmlld2VyJzpcclxuICAgICAgICBjb25zdCByZXZpZXdlckluZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QuZmluZEluZGV4KChyZXZpZXdlcjogYW55KSA9PiByZXZpZXdlci5lbXBsb3llZV9pZCA9PSBldmVudC5lbXBsb3llZV9pZCk7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3Quc3BsaWNlKHJldmlld2VySW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2dyb3VwUmV2aWV3ZXInOlxyXG4gICAgICAgIGNvbnN0IGdyb3VwUmV2aWV3ZXJJbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdC5maW5kSW5kZXgoKHJldmlld2VyOiBhbnkpID0+IHJldmlld2VyLmdyb3VwX2lkID09IGV2ZW50Lmdyb3VwX2lkKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5ncm91cFJldmlld2Vycy5saXN0LnNwbGljZShncm91cFJldmlld2VySW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ292ZXJzZWVyJzpcclxuICAgICAgICBjb25zdCBvdmVyc2VlckluZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdC5maW5kSW5kZXgoKG92ZXJzZWVyOiBhbnkpID0+IG92ZXJzZWVyLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdC5zcGxpY2Uob3ZlcnNlZXJJbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5jYWxsUmVmcmVzaExpc3QoKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnb3ZlcnNlZXJHcm91cCc6XHJcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJHcm91cEluZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdC5maW5kSW5kZXgoKG92ZXJzZWVyOiBhbnkpID0+IG92ZXJzZWVyLmdyb3VwX2lkID09IGV2ZW50Lmdyb3VwX2lkKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnNHcm91cHMubGlzdC5zcGxpY2Uob3ZlcnNlZXJHcm91cEluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvdmVyc2Vlck5vdGlmeUxpc3QnOlxyXG4gICAgICAgIGNvbnN0IG92ZXJzZWVyTm90aWZ5SW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0LmZpbmRJbmRleCgob3ZlcnNlZXJOOiBhbnkpID0+IG92ZXJzZWVyTi5lbXBsb3llZV9pZCA9PSBldmVudC5lbXBsb3llZV9pZCk7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3Quc3BsaWNlKG92ZXJzZWVyTm90aWZ5SW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ292ZXJzZWVyR3JvdXBOb3RpZnlMaXN0JzpcclxuICAgICAgICAgIGNvbnN0IG92ZXJzZWVyR3JvdXBOb3RpZnlJbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3QuZmluZEluZGV4KChvdmVyc2Vlck46IGFueSkgPT4gb3ZlcnNlZXJOLmdyb3VwX2lkID09IGV2ZW50Lmdyb3VwX2lkKTtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVyc0dyb3Vwcy5ub3RpZnlMaXN0LnNwbGljZShvdmVyc2Vlckdyb3VwTm90aWZ5SW5kZXgsIDEpO1xyXG4gICAgICAgICAgdGhpcy5jYWxsUmVmcmVzaExpc3QoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjYXRlZ29yeSc6XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlJbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5LmZpbmRJbmRleCgoY2F0ZWdvcnk6IGFueSkgPT4gY2F0ZWdvcnkuY2F0ZWdvcnlfaWQgPT0gZXZlbnQuY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5LnNwbGljZShjYXRlZ29yeUluZGV4LCAxKTtcclxuICAgICAgICBjb25zdCB0YWcgPSBKU09OLnBhcnNlKGV2ZW50LmN1c3RvbV90YWdzKTtcclxuICAgICAgICBpZiAodGFnPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0YWcuZm9yRWFjaCgodGFnRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4Q1QgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLmZpbmRJbmRleCgodGFnRWxlbWVudDogYW55KSA9PiB0YWdFbGVtZW50LnRhZ19uYW1lID09IHRhZ0RhdGEudGFnX25hbWUpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXhDVCAhPSAtMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3Muc3BsaWNlKGluZGV4Q1QsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5Py5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeS5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdGFnID0gSlNPTi5wYXJzZShlbGVtZW50LmN1c3RvbV90YWdzKTtcclxuICAgICAgICAgICAgaWYgKHRhZz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIHRhZy5mb3JFYWNoKCh0YWdEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncy5maW5kSW5kZXgoKHRhZ0VsZW1lbnQ6IGFueSkgPT4gdGFnRWxlbWVudC50YWdfbmFtZSA9PSB0YWdEYXRhLnRhZ19uYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLnB1c2godGFnRGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncHJvZ3JhbSc6XHJcbiAgICAgICAgdGhpcy5jaGVja0RlZmF1bHRQcm9ncmFtT25SZW1vdmUoZXZlbnQpO1xyXG4gICAgICAgIC8vIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5ID0gW107XHJcbiAgICAgICAgLy8gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbSA9IFtdO1xyXG5cclxuICAgICAgICAvLyB0aGlzLmZpbHRlckxpc3RzQWNjb3JkaW5nVG9Qcm9ncmFtKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3JlcXVpcmVzX2F1ZGl0JzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXF1aXJlc0F1ZGl0TGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmF1ZGl0X2NhdGVnb3J5X2RldGFpbHMgPSB7XHJcbiAgICAgICAgICBjYXRlZ29yeV9pZDogMCxcclxuICAgICAgICAgIHNhbXBsZTogMCxcclxuICAgICAgICAgIHBlcmNlbnRhZ2U6IDAsXHJcbiAgICAgICAgICBmcmVxdWVuY3lfcGF0dGVybjogJycsXHJcbiAgICAgICAgICBmcmVxdWVuY3lfdGltZTogJydcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Fzc3VyYW5jZSc6XHJcbiAgICAgICAgY29uc3QgYXNzdXJhbmNlSW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3N1cmFuY2VMaXN0LmZpbmRJbmRleCgoYXNzdXJhbmNlOiBhbnkpID0+IGFzc3VyYW5jZS5jYXRlZ29yeV9pZCA9PSBhc3N1cmFuY2UuY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc3VyYW5jZUxpc3Quc3BsaWNlKGFzc3VyYW5jZUluZGV4LCAxKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2hlY2twb2ludCc6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHMuc3BsaWNlKGV2ZW50LCAxKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYXNzZXNzbWVudCc6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzZXNzbWVudCA9IHtcclxuICAgICAgICAgIGNhdGVnb3J5X2lkOiBcIlwiLFxyXG4gICAgICAgICAgYXNzZXNzbWVudF9pZDogXCJcIixcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICduZXctY2hlY2twb2ludHMnOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm5ld19jaGVja3BvaW50cyA9IHt9O1xyXG4gICAgICAgIHRoaXMuY2hlY2twb2ludENvdW50ID0gMDtcclxuICAgICAgICB0aGlzLmNoZWNrcG9pbnRDb3VudFVwZGF0ZWQuZW1pdCh0aGlzLmNoZWNrcG9pbnRDb3VudCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlR3JvdXBBc3NpZ25lZURhdGEoc2VsZWN0ZWRJdGVtczphbnkpe1xyXG4gICAgbGV0IHVzZXJPYmo6YW55O1xyXG4gICAgdXNlck9iaiA9IHNlbGVjdGVkSXRlbXM/Lmxlbmd0aCA/IHNlbGVjdGVkSXRlbXMgOiBzZWxlY3RlZEl0ZW1zPy51c2Vyc1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QgPSB0aGlzLnNldExpc3QodGhpcy5hc3NpZ25lZXNMaXN0LCB1c2VyT2JqLCAnbXlfbWVtYmVyX2lkJyk7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZUdyb3Vwcy5saXN0ID0gdGhpcy5zZXRMaXN0KHRoaXMuT3JnR3JvdXAsc2VsZWN0ZWRJdGVtcz8uZ3JvdXBzLCdncm91cF9pZCcpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZUdyb3VwUmV2aWV3ZXJEYXRhKHNlbGVjdGVkSXRlbXM6IGFueSkge1xyXG4gICAgbGV0IHVzZXJPYmo6IGFueSA9IFtdO1xyXG4gICAgc2VsZWN0ZWRJdGVtcy51c2Vycy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICB1c2VyT2JqLnB1c2goZWxlLmVtcGxveWVlX2lkKVxyXG4gICAgfSlcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0ID0gdGhpcy5zZXRMaXN0KHRoaXMucmV2aWV3ZXJzTGlzdCwgdXNlck9iaiwgJ2VtcGxveWVlX2lkJyk7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5ncm91cFJldmlld2VycyA9IHsgbGlzdDogKHNlbGVjdGVkSXRlbXM/Lmdyb3Vwcz8ubGVuZ3RoID4gMCkgPyBzZWxlY3RlZEl0ZW1zPy5ncm91cHMgOiBbXSB9O1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLnNlcXVlbnRpYWxXb3JrZmxvdyA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID4gMCA/IGZhbHNlIDogdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLnNlcXVlbnRpYWxXb3JrZmxvdztcclxuICB9XHJcblxyXG4gIHNhdmVPdmVyc2VlckRhdGEoc2VsZWN0ZWRJdGVtczogYW55LCB0eXBlOiBhbnkpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdvdmVyc2Vlckxpc3QnOlxyXG4gICAgICAgIGxldCBvdmVyc2VlcnNlbGVjdGVkbGlzdCA9IHRoaXMucmV0dXJuSWRzKHNlbGVjdGVkSXRlbXMudXNlcnMsICdlbXBsb3llZV9pZCcpXHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3QgPSB0aGlzLnNldExpc3QodGhpcy5vdmVyc2VlcnNMaXN0LCBvdmVyc2VlcnNlbGVjdGVkbGlzdCwgJ2VtcGxveWVlX2lkJyk7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzR3JvdXBzWydsaXN0J10gPSAoc2VsZWN0ZWRJdGVtcz8uZ3JvdXBzPy5sZW5ndGggPiAwKSA/IHNlbGVjdGVkSXRlbXM/Lmdyb3VwcyA6IFtdXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ292ZXJzZWVyTm90aWZ5TGlzdCc6XHJcbiAgICAgICAgbGV0IG92ZXJzZWVyc2VsZWN0ZWROb3RpZnlsaXN0ID0gdGhpcy5yZXR1cm5JZHMoc2VsZWN0ZWRJdGVtcy51c2VycywgJ2VtcGxveWVlX2lkJylcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCA9IHRoaXMuc2V0TGlzdCh0aGlzLm92ZXJzZWVyc0xpc3QsIG92ZXJzZWVyc2VsZWN0ZWROb3RpZnlsaXN0LCAnZW1wbG95ZWVfaWQnKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnNHcm91cHNbJ25vdGlmeUxpc3QnXSA9IChzZWxlY3RlZEl0ZW1zPy5ncm91cHM/Lmxlbmd0aCA+IDApID8gc2VsZWN0ZWRJdGVtcz8uZ3JvdXBzIDogW107XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBlbnRydXN0RnJhbWV3b3JrKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucmVzZXQoKTtcclxuICAgIHRoaXMuYWN0aXZlRGVzZWxlY3RvcigpO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkgPSB7XHJcbiAgICAgIG5hbWU6IGV2ZW50LnJlcG9ydF9uYW1lLFxyXG4gICAgICBrZXlSZXNwb25zaWJpbGl0eTogKGV2ZW50LmtleV9jb21wbGlhbmNlKSA/IHRydWUgOiBmYWxzZSxcclxuICAgIH07XHJcbiAgICBjb25zdCBuZXdTdGFydERhdGUgPSBldmVudC5zdGFydF9kYXRlIHx8IGV2ZW50LnN0YXJ0X2RhdGUgIT0gbnVsbCB8fCBldmVudC5zdGFydF9kYXRlICE9PSAnJyA/IG5ldyBEYXRlKGV2ZW50LnN0YXJ0X2RhdGUgKiAxMDAwKSA6IG5ldyBEYXRlKCk7XHJcbiAgICBjb25zdCBwdnRUZW1wbGF0ZSA9IGV2ZW50LmZyZXF1ZW5jeV90ZW1wbGF0ZSAmJiBldmVudC5mcmVxdWVuY3lfdGVtcGxhdGUgIT09ICcnID8gZXZlbnQuZnJlcXVlbmN5X3RlbXBsYXRlIDogZXZlbnQuZnJlcXVlbmN5O1xyXG4gICAgY29uc3QgZnJlcXVlbmN5RGV0YWlsc09iamVjdDogYW55ID0gdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLnNob3J0SGFuZF9mcmVxQ2FsKFxyXG4gICAgICBwdnRUZW1wbGF0ZSxcclxuICAgICAgbmV3U3RhcnREYXRlLmdldERhdGUoKSxcclxuICAgICAgbmV3U3RhcnREYXRlLmdldE1vbnRoKCksXHJcbiAgICAgIG5ld1N0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpXHJcbiAgICApO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5X2RldGFpbHMgPSBmcmVxdWVuY3lEZXRhaWxzT2JqZWN0Py5wYXR0ZXJuO1xyXG4gICAgZXZlbnQuZnJlcXVlbmN5X2RldGFpbHMgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscztcclxuICAgIGV2ZW50LmZyZXF1ZW5jeV90aW1lID0gJzIzOjU5OjAwJztcclxuICAgIGV2ZW50LnJlbWluZGVyX2JlZm9yZV9kYXlzID0gZXZlbnQucmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlID8gZXZlbnQucmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlIDogMjs7XHJcbiAgICBldmVudC5mYWlsZWRfYWZ0ZXJfZGF5cyA9IGV2ZW50Lm1hcmtfZmFpbGVkX2FmdGVyID8gZXZlbnQubWFya19mYWlsZWRfYWZ0ZXIgOiAyO1xyXG4gICAgZXZlbnQubGlmZWN5Y2xlX2RldGFpbHMgPSAnMDAwMC0wMC0wMH5+MCc7XHJcbiAgICBldmVudC5zdGFydF9vZl9kYXlfdXRjID0gdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLmZyYW1ld29ya1N0YXJ0RGF0ZShldmVudCk7XHJcbiAgICBldmVudC5vbl9jb21wbGV0aW9uX29mID0gW107XHJcbiAgICBldmVudC5kb21fdXRjID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICBldmVudC5jb250aW51b3VzX2ZhaWxlZF9kYXlzID0gZnJlcXVlbmN5RGV0YWlsc09iamVjdC5jb250aW51b3VzX2ZhaWxlZF9kYXlzXHJcblxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5X2RldGFpbHM7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3lfdGltZSA9ICcyMzo1OTowMCc7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZW1pbmRlcl9iZWZvcmVfZGF5cyA9IGV2ZW50LnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSA/IGV2ZW50LnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSA6IDI7O1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZmFpbGVkX2FmdGVyX2RheXMgPSBldmVudC5tYXJrX2ZhaWxlZF9hZnRlciA/IGV2ZW50Lm1hcmtfZmFpbGVkX2FmdGVyIDogMjtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmxpZmVjeWNsZURldGFpbHMgPSAnMDAwMC0wMC0wMH5+MCc7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5zdGFydF9vZl9kYXlfdXRjID0gdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLmZyYW1ld29ya1N0YXJ0RGF0ZShldmVudCkudG9GaXhlZCgpLnRvU3RyaW5nKCk7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vbl9jb21wbGV0aW9uX29mID0gW107XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5kb21fdXRjID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5kZXNjcmlwdGlvbiA9IGV2ZW50LnJlbWFya3MudHJpbSgpICE9ICcnID8gZXZlbnQucmVtYXJrcyA6ICcnO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncyA9IGV2ZW50LmN1c3RvbV90YWdzICYmIGV2ZW50LmN1c3RvbV90YWdzICE9PSBudWxsICYmIGV2ZW50LmN1c3RvbV90YWdzICE9PSAnbnVsbCcgJiYgZXZlbnQuY3VzdG9tX3RhZ3MgIT09ICcnID8gSlNPTi5wYXJzZShldmVudC5jdXN0b21fdGFncykgOiBbXTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm9iamVjdGl2ZSA9IGV2ZW50LmNvbnRyb2xfb2JqZWN0aXZlID8gZXZlbnQuY29udHJvbF9vYmplY3RpdmUgOiAnJztcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5ID0gdGhpcy5zZXRMaXN0KHRoaXMuYWxsQ2F0ZWdvcmllcywgW2V2ZW50LmNhdGVnb3J5X2lkXSwgJ2NhdGVnb3J5X2lkJyk7IC8vXHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMucmV2aWV3RnJlcXVlbmN5LnJldmlld0NvbXBsZXRlRGF5cyA9IDI7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMucmV2aWV3RnJlcXVlbmN5LnJldmlld05PdENvbXBsZXRlZERheXMgPSAyO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmMgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QuZmluZCgocmM6IGFueSkgPT4gcmMucmNfaWQgPT09IGV2ZW50LmVudGl0eV9pZCkgPyBbdGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LmZpbmQoKHJjOiBhbnkpID0+IHJjLnJjX2lkID09PSBldmVudC5lbnRpdHlfaWQpXSA6IFtdO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmlza0NsYXNzID0gdGhpcy5pc1Jpc2tFbmFibGUgPyAxIDogMjtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByaXZhdGVfbGlicmFyeV9pZCA9IGV2ZW50LnJlcG9ydF9pZDtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeV9kZXRhaWxzO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2xhc3NpZmljYXRpb24gPSB0aGlzLmlzUmlza0VuYWJsZSA/IDEgOiAyO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY29udGludW91c19mYWlsZWRfZGF5cyA9IGZyZXF1ZW5jeURldGFpbHNPYmplY3QuY29udGludW91c19mYWlsZWRfZGF5c1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uc3RhcnREYXRlID0gdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLmZyYW1ld29ya1N0YXJ0RGF0ZShldmVudCk7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZSA9IHtcclxuICAgICAgZXZpZGVuY2VSZXF1aXJlZDogZXZlbnQucmVwb3J0X3VwbG9hZF9mbGFnID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICBmb3JtYXRGaWxlczogZXZlbnQucmVwb3J0X2Zvcm1hdCxcclxuICAgICAgZm9ybWF0TGlua3M6ICEoZXZlbnQucmVwb3J0X2Zvcm1hdF9saW5rKSB8fCBldmVudC5yZXBvcnRfZm9ybWF0X2xpbmsgPT0gJycgPyBbXSA6IFtldmVudC5yZXBvcnRfZm9ybWF0X2xpbmtdLFxyXG4gICAgICBmb3JtYXRSZXF1aXJlZDogKGV2ZW50LnJlcG9ydF9mb3JtYXQ/Lmxlbmd0aCA+IDAgfHwgKChldmVudC5yZXBvcnRfZm9ybWF0X2xpbmspICYmIGV2ZW50LnJlcG9ydF9mb3JtYXRfbGluayAhPSAnJykpID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hdWRpdF9jYXRlZ29yeV9kZXRhaWxzID0ge1xyXG4gICAgICBjYXRlZ29yeV9pZDogMCxcclxuICAgICAgc2FtcGxlOiA1LFxyXG4gICAgICBwZXJjZW50YWdlOiAzMCxcclxuICAgICAgZnJlcXVlbmN5X3BhdHRlcm46ICcxfjB+M34xJyxcclxuICAgICAgZnJlcXVlbmN5X3RpbWU6ICcyMzo1OTowMCdcclxuICAgIH1cclxuXHJcbiAgICBldmVudC5mcmVxdWVuY3lfdGltZSA9ICcxMTo1OSBwbSc7XHJcbiAgICBpZiAoZXZlbnQuZnJlcXVlbmN5X2RldGFpbHMgIT09ICcnICYmIGV2ZW50LmZyZXF1ZW5jeV9kZXRhaWxzICE9PSAnNX4wfjB+MCcpIHtcclxuICAgICAgdGhpcy5mcmVxdWVuY3lQb3B1bGF0aW9uKGV2ZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGV2ZW50LmZyZXF1ZW5jeV90aW1lID0gJzIzOjU5OjAwJztcclxuICAgIGV2ZW50LnBsYWNlaG9sZGVyID0gdGhpcy5nZXRGcmVxdWVuY3lQbGFjZWhvbGRlcihldmVudCk7XHJcbiAgICBjb25zdCBjaGVja2VkTW9yZU9wdGlvbnMgPSBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub2JqZWN0aXZlICE9PSAnJykge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnT0JKRUNUSVZFJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuT0JKRUNUSVZFID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdSSVNLX0NMQVNTSUZJQ0FUSU9OJyk7XHJcbiAgICB0aGlzLm1vcmVPcHRpb25zLlJJU0tfQ0xBU1NJRklDQVRJT04gPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5Py5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdDQVRFR09SWScpO1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zLkNBVEVHT1JZID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmZvcm1hdEFuZEV2aWRlbmNlPy5ldmlkZW5jZVJlcXVpcmVkIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5mb3JtYXRBbmRFdmlkZW5jZT8uZm9ybWF0UmVxdWlyZWQpIHtcclxuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ0ZPUk1BVEVfRVZJREVOQ0UnKTtcclxuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5GT1JNQVRFX0VWSURFTkNFID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChldmVudC5lbnRpdHlfaWQgPiAwKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdSQycpO1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zLlJDID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBvcHVsYXRlT3B0aW9uLmVtaXQoY2hlY2tlZE1vcmVPcHRpb25zKTtcclxuICAgIC8vICBldmVudC5wbGFjZWhvbGRlclxyXG4gIH1cclxuXHJcbiAgYXNzaWduRnJvbUZyYW1ld29yayhmcmVxT2JqOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiZnJlcXV1dXV1XCIsZnJlcU9iailcclxuICAgIGlmIChmcmVxT2JqLmRhdGEpIHtcclxuICAgICAgLy8gdGhpcy5yZXNldCgpO1xyXG4gICAgICB0aGlzLmFjdGl2ZURlc2VsZWN0b3IoKTtcclxuICAgICAgY29uc3QgbmV3U3RhcnREYXRlID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICAgIGNvbnN0IGZyZXF1ZW5jeURldGFpbHNPYmplY3Q6IGFueSA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5zaG9ydEhhbmRfZnJlcUNhbChcclxuICAgICAgICBmcmVxT2JqLmRhdGEuZnJlcXVlbmN5LFxyXG4gICAgICAgIG5ld1N0YXJ0RGF0ZS5nZXREYXRlKCksXHJcbiAgICAgICAgbmV3U3RhcnREYXRlLmdldE1vbnRoKCksXHJcbiAgICAgICAgbmV3U3RhcnREYXRlLmdldEZ1bGxZZWFyKClcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGxldCBldmVudDogYW55ID0ge307XHJcbiAgICAgIGV2ZW50LmZyZXF1ZW5jeV9kZXRhaWxzID0gZnJlcXVlbmN5RGV0YWlsc09iamVjdD8ucGF0dGVybjtcclxuICAgICAgZXZlbnQuZnJlcXVlbmN5X3RpbWUgPSAnMjM6NTk6MDAnO1xyXG4gICAgICBldmVudC5yZW1pbmRlcl9iZWZvcmVfZGF5cyA9IDI7XHJcbiAgICAgIGV2ZW50LmZhaWxlZF9hZnRlcl9kYXlzID0gMjtcclxuICAgICAgZXZlbnQubGlmZWN5Y2xlX2RldGFpbHMgPSAnMDAwMC0wMC0wMH5+MCc7XHJcbiAgICAgIGV2ZW50LnN0YXJ0X29mX2RheV91dGMgPSBEYXRlLm5vdygpIC8gMTAwMDtcclxuICAgICAgZXZlbnQub25fY29tcGxldGlvbl9vZiA9IFtdO1xyXG4gICAgICBldmVudC5kb21fdXRjID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgIGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSBmcmVxdWVuY3lEZXRhaWxzT2JqZWN0LmNvbnRpbnVvdXNfZmFpbGVkX2RheXNcclxuICAgICAgdGhpcy5nZXRGcmVxdWVuY3lQbGFjZWhvbGRlcihldmVudClcclxuICAgICAgZXZlbnQucGxhY2Vob2xkZXIgPSB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyXHJcbiAgICAgIGV2ZW50LmZyZXF1ZW5jeV90aW1lID0gJzExOjU5IHBtJztcclxuICAgICAgdGhpcy5mcmVxdWVuY3lQb3B1bGF0aW9uKGV2ZW50KTtcclxuXHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlc3BvbnNpYmlsaXR5Lm5hbWUgPSBmcmVxT2JqLmRhdGEubmFtZSA/PyAnJztcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub2JqZWN0aXZlID0gZnJlcU9iai5kYXRhLm9iamVjdGl2ZXMgPz8gJyc7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9ZnJlcXVlbmN5RGV0YWlsc09iamVjdD8ucGF0dGVybiA/PycnO1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5zdGFydERhdGUgPSBldmVudC5zdGFydF9vZl9kYXlfdXRjO1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZW1pbmRlcl9iZWZvcmVfZGF5cz0gZXZlbnQucmVtaW5kZXJfYmVmb3JlX2RheXM7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNvbnRpbnVvdXNfZmFpbGVkX2RheXM9IGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXM7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZhaWxlZF9hZnRlcl9kYXlzPSBldmVudC5mYWlsZWRfYWZ0ZXJfZGF5cztcclxuICAgICAgdGhpcy5zZWxlY3RlZEZyYW1ld29ya1ZhbHVlcyA9IGZyZXFPYmouc2VsZWN0ZWRGcmFtZXdvcmtEYXRhID8/IHVuZGVmaW5lZDtcclxuICAgICAgaWYoZnJlcU9iaj8uZGF0YT8uZGVzY3JpcHRpb24pe1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmRlc2NyaXB0aW9uID0gZnJlcU9iaj8uZGF0YT8uZGVzY3JpcHRpb247XHJcbiAgICAgIH1cclxuICAgICAgaWYoZnJlcU9iaj8uZGF0YT8ub2JqZWN0aXZlcyl7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub2JqZWN0aXZlID0gZnJlcU9iai5kYXRhLm9iamVjdGl2ZXMgPz8gJyc7XHJcbiAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5PQkpFQ1RJVkUgPSB0cnVlO1xyXG4gICAgICAgIGxldCBjaGVja2VkTW9yZU9wdGlvbnMgPVtdO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMubW9yZU9wdGlvbnMpIHtcclxuICAgICAgICAgIGlmICh0aGlzLm1vcmVPcHRpb25zW2tleV0pIHtcclxuICAgICAgICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goa2V5KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uLmVtaXQoY2hlY2tlZE1vcmVPcHRpb25zKTtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gIH1cclxuLyoqXHJcbiAqXHJcbiAqIEBwYXJhbSBsaXN0IHVzZXJsaXN0IGZvciBsaXN0aW5nIHVzZXJzXHJcbiAqIEByZXR1cm5zIGFzc2lnbiB1c2VyJ3MgbXlfbWVtYmVyX2lkICB0byBtZW1iZXJfaWQgZGF0YVxyXG4gKi9cclxuICBhc3NpZ25Vc2VyTWVtYmVySWQobGlzdDphbnkpe1xyXG4gICAgY29uc3QgdXNlck9iaiA9IFsuLi4gbGlzdF1cclxuICAgICAgdXNlck9iaj8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgICAgdXNlci5tZW1iZXJfaWQgPSB1c2VyPy5teV9tZW1iZXJfaWRcclxuICAgICAgfSlcclxuICAgICAgbGlzdCA9IFsuLi4gdXNlck9ial1cclxuICAgICAgcmV0dXJuIGxpc3Q7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoQWxsTGlzdHMoKSB7XHJcblxyXG4gICAgbGV0IGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzOiBhbnkgPSBbXTtcclxuICAgIGxldCBhbGxVc2Vyc0lkczphbnkgPSBbXTtcclxuICAgIGxldCBhc3NpZ25lZUdyb3VwSWRzOiBhbnkgPSBbXTtcclxuICAgIGxldCByZXZpZXdlcnNJZHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IG92ZXJzZWVySWRzOiBhbnkgPSBbXTtcclxuICAgIGxldCBhc3NpZ25lZUlkczogYW55ID0gW107XHJcbiAgICAgbGV0IGdyb3VwUmV2aWV3ZXJJZHM6IGFueSA9IFtdO1xyXG4gIGxldCBncm91cE92ZXJzZWVySWRzOiBhbnkgPSBbXTtcclxuICB0aGlzLnJldmlld2VySWRzID0gW107XHJcbiAgdGhpcy5hc3NpZ25vcklkID0gW107XHJcbiAgdGhpcy5vdmVyc2VlcklkcyA9IFtdO1xyXG4gIHRoaXMuYXNzaWduZWVJZHMgPSBbXTtcclxuXHJcbiAgICBjb25zdCBhbGxVc2VycyA9IGNsb25lRGVlcCh0aGlzLmFsbFVzZXJzTGlzdCk7XHJcbiAgICBjb25zdCBhbGxHcm91cHMgPSBjbG9uZURlZXAodGhpcy5PcmdHcm91cCk7XHJcbiAgICBjb25zdCBiZWhhbGZVc2VycyA9IGNsb25lRGVlcCh0aGlzLmJlaGFsZk9mVXNlcnNMaXN0KTtcclxuXHJcbiAgICBjb25zdCBhc3NpZ25vcnMgPSBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbm9ycz8ubGlzdCk7XHJcbiAgICBjb25zdCBhc3NpZ25lZXMgPSBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdCk7XHJcblxyXG4gICAgY29uc3QgYXNzaWduZWVHcm91cExpc3QgPSBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0KVxyXG4gICAgY29uc3QgcmV2aWV3ZXJzID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0KTtcclxuICAgICBjb25zdCBncm91cFJldmlld2Vyc0xpc3QgPSB0aGlzLmZlYXR1cmVGbGFnX2dyb3VwcyA/IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3QpIDogW107XHJcbiAgICBjb25zdCBvdmVyc2Vlckxpc3QgPSBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdCk7XHJcbiAgICBjb25zdCBncm91cE92ZXJzZWVyTGlzdCA9IHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzID8gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lmxpc3QpIDogW107XHJcbiAgICBjb25zdCBub3RpZnlPdmVyc2VlcnMgPSBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdCk7XHJcbiAgICBjb25zdCBncm91cE5vdGlmeU92ZXJzZWVycyA9IHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzID8gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3QpIDogW107XHJcbiAgICBhc3NpZ25vcnM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICBhc3NpZ25vckFuZEFzc2lnbmVlc0lkcy5wdXNoKHVzZXIubWVtYmVyX2lkKTtcclxuICAgICAgdGhpcy5hc3NpZ25vcklkLnB1c2godXNlci5tZW1iZXJfaWQpXHJcbiAgICB9KTtcclxuICAgIGFzc2lnbmVlcz8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzLnB1c2godXNlcj8ubXlfbWVtYmVyX2lkKTtcclxuICAgICAgYXNzaWduZWVJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xyXG4gICAgICB0aGlzLmFzc2lnbmVlSWRzLnB1c2godXNlcj8ubXlfbWVtYmVyX2lkKTtcclxuXHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMubGlzdD8ubGVuZ3RoID09IDApIHtcclxuICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMucHVzaCh0aGlzLm1lbWJlcklkKTtcclxuICAgICAgdGhpcy5hc3NpZ25vcklkLnB1c2godGhpcy5tZW1iZXJJZCk7XHJcbiAgICB9XHJcbiAgICBhbGxVc2Vycz8uZm9yRWFjaCgodXNlcjphbnkpPT57XHJcbiAgICAgIGFsbFVzZXJzSWRzLnB1c2goKHVzZXI/Lm15X21lbWJlcl9pZCkpXHJcbiAgICB9KVxyXG4gICAgYXNzaWduZWVHcm91cExpc3Q/LmZvckVhY2goKGdyb3VwOmFueSk9PntcclxuICAgICAgYXNzaWduZWVHcm91cElkcy5wdXNoKGdyb3VwPy5ncm91cF9pZClcclxuICAgIH0pXHJcblxyXG4gICAgcmV2aWV3ZXJzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgcmV2aWV3ZXJzSWRzLnB1c2godXNlcj8ubXlfbWVtYmVyX2lkKTtcclxuICAgICAgdGhpcy5yZXZpZXdlcklkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZClcclxuICAgIH0pO1xyXG4gICAgZ3JvdXBSZXZpZXdlcnNMaXN0Py5mb3JFYWNoKChncm91cDphbnkpPT57XHJcbiAgICAgIGdyb3VwUmV2aWV3ZXJJZHMucHVzaChncm91cD8uZ3JvdXBfaWQpO1xyXG4gICAgfSlcclxuICAgIGdyb3VwT3ZlcnNlZXJMaXN0Py5mb3JFYWNoKChncm91cDogYW55KSA9PntcclxuICAgICAgZ3JvdXBPdmVyc2Vlcklkcy5wdXNoKGdyb3VwPy5ncm91cF9pZCk7XHJcbiAgICB9KTtcclxuICAgIGdyb3VwTm90aWZ5T3ZlcnNlZXJzPy5mb3JFYWNoKChncm91cDogYW55KSA9PntcclxuICAgICAgZ3JvdXBPdmVyc2Vlcklkcy5wdXNoKGdyb3VwPy5ncm91cF9pZCk7XHJcbiAgICB9KVxyXG4gICAgb3ZlcnNlZXJMaXN0Py5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgb3ZlcnNlZXJJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xyXG4gICAgICB0aGlzLm92ZXJzZWVySWRzLnB1c2godXNlcj8ubXlfbWVtYmVyX2lkKTtcclxuICAgIH0pO1xyXG4gICAgbm90aWZ5T3ZlcnNlZXJzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgb3ZlcnNlZXJJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xyXG4gICAgICB0aGlzLm92ZXJzZWVySWRzLnB1c2godXNlcj8ubXlfbWVtYmVyX2lkKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzID0gWy4uLm5ldyBTZXQoYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMpXTtcclxuICAgIGFsbFVzZXJzSWRzID0gWy4uLm5ldyBTZXQoYWxsVXNlcnNJZHMpXTtcclxuICAgIGFzc2lnbmVlSWRzID0gWy4uLm5ldyBTZXQoYXNzaWduZWVJZHMpXTtcclxuICAgIHJldmlld2Vyc0lkcyA9IFsuLi5uZXcgU2V0KHJldmlld2Vyc0lkcyldO1xyXG4gICAgb3ZlcnNlZXJJZHMgPSBbLi4ubmV3IFNldChvdmVyc2VlcklkcyldO1xyXG4gICAgdGhpcy5hc3NpZ25vcklkID0gWy4uLm5ldyBTZXQodGhpcy5hc3NpZ25vcklkKV07XHJcbiAgICB0aGlzLmFzc2lnbmVlSWRzID0gWy4uLm5ldyBTZXQodGhpcy5hc3NpZ25lZUlkcyldO1xyXG4gICAgdGhpcy5yZXZpZXdlcklkcyA9IFsuLi5uZXcgU2V0KHRoaXMucmV2aWV3ZXJJZHMpXTtcclxuICAgIHRoaXMub3ZlcnNlZXJJZHMgPSBbLi4ubmV3IFNldCh0aGlzLm92ZXJzZWVySWRzKV07XHJcblxyXG4gICAgYXNzaWduZWVHcm91cElkcyA9IFsuLi4gbmV3IFNldChhc3NpZ25lZUdyb3VwSWRzKV1cclxuICAgIGdyb3VwUmV2aWV3ZXJJZHMgPSBbLi4uIG5ldyBTZXQoZ3JvdXBSZXZpZXdlcklkcyldO1xyXG4gICAgZ3JvdXBPdmVyc2VlcklkcyA9IFsuLi4gbmV3IFNldChncm91cE92ZXJzZWVySWRzKV07XHJcbiAgICB0aGlzLmFzc2lnbm9yc0xpc3QgPSBiZWhhbGZVc2Vycy5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIShvdmVyc2Vlcklkcz8uaW5jbHVkZXModXNlci5tZW1iZXJfaWQpKSk7XHJcbiAgICB0aGlzLmFzc2lnbmVlc0xpc3QgPSBhbGxVc2Vycy5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIShyZXZpZXdlcnNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkgfHwgb3ZlcnNlZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkpKTtcclxuICAgIHRoaXMucmV2aWV3ZXJzTGlzdCA9IGFsbFVzZXJzLmZpbHRlcigodXNlcjogYW55KSA9PiAhKG92ZXJzZWVySWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpIHx8IGFzc2lnbmVlSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpKSk7XHJcbiAgICB0aGlzLm92ZXJzZWVyc0xpc3QgPSBhbGxVc2Vycy5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIShhc3NpZ25vckFuZEFzc2lnbmVlc0lkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSB8fCByZXZpZXdlcnNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkpKTtcclxuICAgIFxyXG4gICB0aGlzLmRpc2FibGVMaXN0KGFsbFVzZXJzLGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzLGFzc2lnbmVlSWRzLHJldmlld2Vyc0lkcyxvdmVyc2VlcklkcylcclxuICAgIGlmICh0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcykge1xyXG4gICAgICB0aGlzLmdyb3VwQXNzaWduZWVMaXN0ID0gYWxsR3JvdXBzLmZpbHRlcigoZ3JvdXA6YW55KT0+IShncm91cFJldmlld2VySWRzPy5pbmNsdWRlcyhncm91cD8uZ3JvdXBfaWQpIHx8IGdyb3VwT3ZlcnNlZXJJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZCkpKVxyXG4gICAgICB0aGlzLnJldmlld2VyTWVtYmVySWRzTGlzdCA9IHRoaXMuYXNzaWduVXNlck1lbWJlcklkKHRoaXMuYWxsVXNlcnNMaXN0KVxyXG4gICAgICB0aGlzLm92ZXJzZWVyc0xpc3QgPSB0aGlzLmFzc2lnblVzZXJNZW1iZXJJZCh0aGlzLmFsbFVzZXJzTGlzdClcclxuICAgICAgdGhpcy5ncm91cFJldmlld2VyTGlzdCA9IGFsbEdyb3Vwcy5maWx0ZXIoKGdyb3VwOmFueSk9PiAhKGdyb3VwT3ZlcnNlZXJJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZCkgfHwgYXNzaWduZWVHcm91cElkcz8uaW5jbHVkZXMoZ3JvdXA/Lmdyb3VwX2lkKSkpO1xyXG4gICAgICB0aGlzLmdyb3VwT3ZlcnNlZXJMaXN0ID0gYWxsR3JvdXBzLmZpbHRlcigoZ3JvdXA6YW55KT0+IShhc3NpZ25lZUdyb3VwSWRzPy5pbmNsdWRlcyhncm91cD8uZ3JvdXBfaWQpIHx8IGdyb3VwUmV2aWV3ZXJJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZCkpKTtcclxuICAgICAgXHJcbiAgICAgIFxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGRpc2FibGVMaXN0KGFsbFVzZXJzOmFueSxhc3NpZ25vckFuZEFzc2lnbmVlc0lkczphbnksYXNzaWduZWVJZHM6YW55LHJldmlld2Vyc0lkczphbnksb3ZlcnNlZXJJZHM6YW55KXtcclxuICAgIGxldCBkaXNhYmxlQXNzaWduZWVMaXN0ID0gYWxsVXNlcnMuZmlsdGVyKCh1c2VyOiBhbnkpID0+IChyZXZpZXdlcnNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkgfHwgb3ZlcnNlZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkpKTtcclxuICAgIHRoaXMuZGlzYWJsZUFzc2lnbmVlSWRzID0gdGhpcy5yZXR1cm5JZHMoZGlzYWJsZUFzc2lnbmVlTGlzdCwnbXlfbWVtYmVyX2lkJyk7ICBcclxuICAgIHRoaXMuZGlzYWJsZVJhZGlvQXNzaWduZWUgPSB0aGlzLnJldHVybklkcyhkaXNhYmxlQXNzaWduZWVMaXN0LCdlbXBsb3llZV9pZCcpXHJcbiAgICBsZXQgZGlzYWJsZVJldmlld2VyTGlzdCA9ICBhbGxVc2Vycy5maWx0ZXIoKHVzZXI6IGFueSkgPT4gKG92ZXJzZWVySWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpIHx8IGFzc2lnbmVlSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpKSk7XHJcbiAgICB0aGlzLmRpc2FibGVSZXZpZXdlcklkcyA9IHRoaXMucmV0dXJuSWRzKGRpc2FibGVSZXZpZXdlckxpc3QsJ2VtcGxveWVlX2lkJykgICAgXHJcbiAgICBsZXQgZGlzYWJsZU92ZXJzZWVyTGlzdCA9IGFsbFVzZXJzLmZpbHRlcigodXNlcjogYW55KSA9PiAoYXNzaWdub3JBbmRBc3NpZ25lZXNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkgfHwgcmV2aWV3ZXJzSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpKSk7XHJcbiAgICB0aGlzLmRpc2FibGVPdmVyc2VlcklkcyA9IHRoaXMucmV0dXJuSWRzKGRpc2FibGVPdmVyc2Vlckxpc3QsJ2VtcGxveWVlX2lkJykgICAgXHJcbiAgICBpZih0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcyl7XHJcbiAgICAgIGxldCBkaXNhYmxlUmV2aWV3ZXJMaXN0ID0gYWxsVXNlcnMuZmlsdGVyKCh1c2VyOiBhbnkpID0+IChvdmVyc2Vlcklkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSB8fCBhc3NpZ25lZUlkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSkpO1xyXG4gICAgICB0aGlzLmRpc2FibGVSZXZpZXdlcklkcyA9IHRoaXMucmV0dXJuSWRzKGRpc2FibGVSZXZpZXdlckxpc3QsJ21lbWJlcl9pZCcpXHJcbiAgICAgIGxldCBkaXNhYmxlT3ZlcnNlZXJzTGlzdCA9IGFsbFVzZXJzLmZpbHRlcigodXNlcjogYW55KSA9PiAoYXNzaWdub3JBbmRBc3NpZ25lZXNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkgfHwgcmV2aWV3ZXJzSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpKSk7XHJcbiAgICAgIHRoaXMuZGlzYWJsZU92ZXJzZWVySWRzID0gdGhpcy5yZXR1cm5JZHMoZGlzYWJsZU92ZXJzZWVyc0xpc3QsJ21lbWJlcl9pZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCkge1xyXG4gICAgbGV0IGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzOiBhbnkgPSBbXTtcclxuICAgIGxldCByZXZpZXdlcnNJZHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IG92ZXJzZWVySWRzOiBhbnkgPSBbXTtcclxuICAgIGxldCBhc3NpZ25lZUlkczogYW55ID0gW107XHJcbiAgICBsZXQgYXNzaWduZWVHcm91cElkczogYW55ID0gW107XHJcbiAgICBsZXQgZ3JvdXBSZXZpZXdlcklkczogYW55ID0gW107XHJcbiAgICBsZXQgZ3JvdXBPdmVyc2VlcklkczogYW55ID0gW107XHJcbiAgICB0aGlzLnJldmlld2VySWRzID0gW107XHJcbiAgICB0aGlzLmFzc2lnbm9ySWQgPSBbXTtcclxuICAgIHRoaXMub3ZlcnNlZXJJZHMgPSBbXTtcclxuICAgIHRoaXMuYXNzaWduZWVJZHMgPSBbXTtcclxuICAgIGNvbnN0IGJlaGFsZlVzZXJzID0gY2xvbmVEZWVwKHRoaXMuYmVoYWxmT2ZVc2Vyc0xpc3QpO1xyXG4gICAgY29uc3QgYWxsR3JvdXBzID0gY2xvbmVEZWVwKHRoaXMuT3JnR3JvdXApO1xyXG4gICAgY29uc3QgYXNzaWdub3JzID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5saXN0KTtcclxuICAgIGNvbnN0IGFzc2lnbmVlcyA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0KTtcclxuICAgIGNvbnN0IGFzc2lnbmVlR3JvdXBMaXN0ID0gdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgPyBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0KSA6IFtdO1xyXG4gICAgY29uc3QgcmV2aWV3ZXJzID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3QpO1xyXG4gICAgY29uc3QgZ3JvdXBSZXZpZXdlcnNMaXN0ID0gdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgPyBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0KSA6IFtdO1xyXG4gICAgY29uc3Qgb3ZlcnNlZXJMaXN0ID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3QpO1xyXG4gICAgIGNvbnN0IGdyb3VwT3ZlcnNlZXJMaXN0ID0gdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgPyBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdCkgOiBbXTtcclxuICAgIGNvbnN0IG5vdGlmeU92ZXJzZWVycyA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0KTtcclxuICAgICBjb25zdCBncm91cE5vdGlmeU92ZXJzZWVycyA9IHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzID8gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3QpIDogW107XHJcbiAgICBhc3NpZ25vcnM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmFzc2lnbm9ySWQucHVzaCh1c2VyPy5tZW1iZXJfaWQpXHJcbiAgICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzLnB1c2godXNlcj8ubWVtYmVyX2lkKTtcclxuICAgIH0pO1xyXG4gICAgYXNzaWduZWVzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xyXG4gICAgICBhc3NpZ25lZUlkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XHJcbiAgICAgIHRoaXMuYXNzaWduZWVJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbm9ycz8ubGlzdD8ubGVuZ3RoID09IDApIHtcclxuICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMucHVzaCh0aGlzLm1lbWJlcklkKTtcclxuICAgICAgdGhpcy5hc3NpZ25vcklkLnB1c2godGhpcy5tZW1iZXJJZClcclxuICAgIH1cclxuXHJcbiAgICBhc3NpZ25lZUdyb3VwTGlzdD8uZm9yRWFjaCgoZ3JvdXA6YW55KT0+e1xyXG4gICAgICBhc3NpZ25lZUdyb3VwSWRzLnB1c2goZ3JvdXA/Lmdyb3VwX2lkKVxyXG4gICAgfSlcclxuICAgIHJldmlld2Vycz8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgIHJldmlld2Vyc0lkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XHJcbiAgICAgIHRoaXMucmV2aWV3ZXJJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpXHJcbiAgICB9KTtcclxuICAgIGdyb3VwUmV2aWV3ZXJzTGlzdD8uZm9yRWFjaCgoZ3JvdXA6YW55KT0+e1xyXG4gICAgICBncm91cFJldmlld2VySWRzLnB1c2goZ3JvdXA/Lmdyb3VwX2lkKTtcclxuICAgIH0pXHJcbiAgICBvdmVyc2Vlckxpc3Q/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICBvdmVyc2Vlcklkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XHJcbiAgICAgIHRoaXMub3ZlcnNlZXJJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xyXG4gICAgfSk7XHJcbiAgICBub3RpZnlPdmVyc2VlcnM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICBvdmVyc2Vlcklkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XHJcbiAgICAgIHRoaXMub3ZlcnNlZXJJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xyXG4gICAgfSk7XHJcbiAgICAgZ3JvdXBPdmVyc2Vlckxpc3Q/LmZvckVhY2goKGdyb3VwOiBhbnkpID0+e1xyXG4gICAgICBncm91cE92ZXJzZWVySWRzLnB1c2goZ3JvdXA/Lmdyb3VwX2lkKTtcclxuICAgIH0pO1xyXG4gICAgZ3JvdXBOb3RpZnlPdmVyc2VlcnM/LmZvckVhY2goKGdyb3VwOiBhbnkpID0+e1xyXG4gICAgICBncm91cE92ZXJzZWVySWRzLnB1c2goZ3JvdXA/Lmdyb3VwX2lkKTtcclxuICAgIH0pXHJcbiAgICBhc3NpZ25vckFuZEFzc2lnbmVlc0lkcyA9IFsuLi5uZXcgU2V0KGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzKV07XHJcbiAgICBhc3NpZ25lZUlkcyA9IFsuLi5uZXcgU2V0KGFzc2lnbmVlSWRzKV07XHJcbiAgICByZXZpZXdlcnNJZHMgPSBbLi4ubmV3IFNldChyZXZpZXdlcnNJZHMpXTtcclxuICAgIG92ZXJzZWVySWRzID0gWy4uLm5ldyBTZXQob3ZlcnNlZXJJZHMpXTtcclxuICAgIGFzc2lnbmVlR3JvdXBJZHMgPSBbLi4uIG5ldyBTZXQoYXNzaWduZWVHcm91cElkcyldXHJcbiBncm91cFJldmlld2VySWRzID0gWy4uLiBuZXcgU2V0KGdyb3VwUmV2aWV3ZXJJZHMpXTtcclxuICBncm91cE92ZXJzZWVySWRzID0gWy4uLiBuZXcgU2V0KGdyb3VwT3ZlcnNlZXJJZHMpXTtcclxuICB0aGlzLmFzc2lnbm9ySWQgPSBbLi4ubmV3IFNldCh0aGlzLmFzc2lnbm9ySWQpXTtcclxuICB0aGlzLmFzc2lnbmVlSWRzID0gWy4uLm5ldyBTZXQodGhpcy5hc3NpZ25lZUlkcyldO1xyXG4gIHRoaXMucmV2aWV3ZXJJZHMgPSBbLi4ubmV3IFNldCh0aGlzLnJldmlld2VySWRzKV07XHJcbiAgdGhpcy5vdmVyc2VlcklkcyA9IFsuLi5uZXcgU2V0KHRoaXMub3ZlcnNlZXJJZHMpXTtcclxuXHJcbiAgICB0aGlzLmFzc2lnbm9yc0xpc3QgPSBiZWhhbGZVc2Vycy5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIShvdmVyc2Vlcklkcz8uaW5jbHVkZXModXNlci5tZW1iZXJfaWQpKSk7XHJcbiAgICB0aGlzLmFzc2lnbmVlc0xpc3QgPSB0aGlzLnByb2dyYW1QZW9wbGVMaXN0Py5hc3NpZ25lZXNMaXN0LmZpbHRlcigodXNlcjogYW55KSA9PiAhKHJldmlld2Vyc0lkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSB8fCBvdmVyc2Vlcklkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSkpO1xyXG4gICAgdGhpcy5yZXZpZXdlcnNMaXN0ID0gdGhpcy5wcm9ncmFtUGVvcGxlTGlzdD8ucmV2aWV3ZXJzTGlzdC5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIShvdmVyc2Vlcklkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSB8fCBhc3NpZ25lZUlkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSkpO1xyXG4gICAgdGhpcy5vdmVyc2VlcnNMaXN0ID0gdGhpcy5wcm9ncmFtUGVvcGxlTGlzdD8ub3ZlcnNlZXJzTGlzdC5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIShhc3NpZ25vckFuZEFzc2lnbmVlc0lkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSB8fCByZXZpZXdlcnNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkpKTtcclxuXHJcbiAgICBpZiAodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpIHtcclxuICAgICAgdGhpcy5ncm91cEFzc2lnbmVlTGlzdCA9IGFsbEdyb3Vwcy5maWx0ZXIoKGdyb3VwOmFueSk9PiEoZ3JvdXBSZXZpZXdlcklkcz8uaW5jbHVkZXMoZ3JvdXA/Lmdyb3VwX2lkKSB8fCBncm91cE92ZXJzZWVySWRzPy5pbmNsdWRlcyhncm91cD8uZ3JvdXBfaWQpKSlcclxuICAgICAgdGhpcy5yZXZpZXdlck1lbWJlcklkc0xpc3QgPSB0aGlzLmFzc2lnblVzZXJNZW1iZXJJZCh0aGlzLnByb2dyYW1QZW9wbGVMaXN0LnJldmlld2Vyc0xpc3QpXHJcbiAgICAgIHRoaXMuZ3JvdXBSZXZpZXdlckxpc3QgPSBhbGxHcm91cHMuZmlsdGVyKChncm91cDphbnkpPT4gIShncm91cE92ZXJzZWVySWRzPy5pbmNsdWRlcyhncm91cD8uZ3JvdXBfaWQpIHx8IGFzc2lnbmVlR3JvdXBJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZCkpKTtcclxuICAgICAgdGhpcy5vdmVyc2VlcnNMaXN0ID0gdGhpcy5hc3NpZ25Vc2VyTWVtYmVySWQodGhpcy5wcm9ncmFtUGVvcGxlTGlzdC5vdmVyc2VlcnNMaXN0KVxyXG4gICAgICB0aGlzLmdyb3VwT3ZlcnNlZXJMaXN0ID0gYWxsR3JvdXBzLmZpbHRlcigoZ3JvdXA6YW55KT0+IShhc3NpZ25lZUdyb3VwSWRzPy5pbmNsdWRlcyhncm91cD8uZ3JvdXBfaWQpIHx8IGdyb3VwUmV2aWV3ZXJJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZCkpKTsgXHJcbiAgICB9XHJcbiAgICB0aGlzLmRpc2FibGVQcm9ncmFtTGlzdChhc3NpZ25vckFuZEFzc2lnbmVlc0lkcyxhc3NpZ25lZUlkcyxyZXZpZXdlcnNJZHMsb3ZlcnNlZXJJZHMpO1xyXG4gIH1cclxuXHJcbiAgZGlzYWJsZVByb2dyYW1MaXN0KGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzOmFueSxhc3NpZ25lZUlkczphbnkscmV2aWV3ZXJzSWRzOmFueSxvdmVyc2Vlcklkczphbnkpe1xyXG4gICAgbGV0IGRpc2FibGVBc3NpZ25lZUxpc3QgPSB0aGlzLnByb2dyYW1QZW9wbGVMaXN0Py5hc3NpZ25lZXNMaXN0LmZpbHRlcigodXNlcjogYW55KSA9PiAocmV2aWV3ZXJzSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpIHx8IG92ZXJzZWVySWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpKSk7XHJcbiAgICB0aGlzLmRpc2FibGVBc3NpZ25lZUlkcyA9IHRoaXMucmV0dXJuSWRzKGRpc2FibGVBc3NpZ25lZUxpc3QsJ215X21lbWJlcl9pZCcpXHJcbiAgICB0aGlzLmRpc2FibGVSYWRpb0Fzc2lnbmVlID0gdGhpcy5yZXR1cm5JZHMoZGlzYWJsZUFzc2lnbmVlTGlzdCwnZW1wbG95ZWVfaWQnKTsgICAgXHJcbiAgICBsZXQgZGlzYWJsZVJldmlld2VyTGlzdCA9ICB0aGlzLnByb2dyYW1QZW9wbGVMaXN0Py5yZXZpZXdlcnNMaXN0LmZpbHRlcigodXNlcjogYW55KSA9PiAob3ZlcnNlZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkgfHwgYXNzaWduZWVJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkpKTtcclxuICAgIHRoaXMuZGlzYWJsZVJldmlld2VySWRzID0gdGhpcy5yZXR1cm5JZHMoZGlzYWJsZVJldmlld2VyTGlzdCwnZW1wbG95ZWVfaWQnKVxyXG4gICAgbGV0IGRpc2FibGVPdmVyc2Vlckxpc3QgPSB0aGlzLnByb2dyYW1QZW9wbGVMaXN0Py5vdmVyc2VlcnNMaXN0LmZpbHRlcigodXNlcjogYW55KSA9PiAoYXNzaWdub3JBbmRBc3NpZ25lZXNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkgfHwgcmV2aWV3ZXJzSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpKSk7XHJcbiAgICB0aGlzLmRpc2FibGVPdmVyc2VlcklkcyA9IHRoaXMucmV0dXJuSWRzKGRpc2FibGVPdmVyc2Vlckxpc3QsJ2VtcGxveWVlX2lkJylcclxuICAgIGlmKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKXtcclxuICAgICAgbGV0IGRpc2FibGVSZXZpZXdlckxpc3QgPSB0aGlzLnJldmlld2VyTWVtYmVySWRzTGlzdC5maWx0ZXIoKHVzZXI6IGFueSkgPT4gKG92ZXJzZWVySWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpIHx8IGFzc2lnbmVlSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpKSk7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVJldmlld2VySWRzID0gdGhpcy5yZXR1cm5JZHMoZGlzYWJsZVJldmlld2VyTGlzdCwnbWVtYmVyX2lkJylcclxuICAgICAgbGV0IGRpc2FibGVPdmVyc2Vlckxpc3QgPSB0aGlzLm92ZXJzZWVyc0xpc3QuZmlsdGVyKCh1c2VyOiBhbnkpID0+IChhc3NpZ25vckFuZEFzc2lnbmVlc0lkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSB8fCByZXZpZXdlcnNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkpKTtcclxuICAgICAgdGhpcy5kaXNhYmxlT3ZlcnNlZXJJZHMgPSB0aGlzLnJldHVybklkcyhkaXNhYmxlT3ZlcnNlZXJMaXN0LCdtZW1iZXJfaWQnKVxyXG4gICAgfSAgICBcclxuICB9XHJcblxyXG4gLyoqXHJcbiAgKiBJZiB0aGUgZm9ybSBpcyB2YWxpZCwgdGhlbiBpZiB0aGUgbW9kZSBpcyBFRElULCB0aGVuIHNldCB0aGUgb3JnYW5pemF0aW9uSWQgYW5kIG1lbWJlcklkIHRvIHRoZVxyXG4gICogYXV0aFNlcnZpY2UgdmFsdWVzLCBhbmQgdGhlbiBjYWxsIHRoZSBlbnRydXN0UmVzcG9uc2liaWxpdHkgZnVuY3Rpb24gd2l0aCB0aGUgcmVzcG9uc2liaWxpdHlGb3JtIGFzXHJcbiAgKiBhIHBhcmFtZXRlci5cclxuICAqXHJcbiAgKiBJZiB0aGUgbW9kZSBpcyBub3QgRURJVCwgdGhlbiBjYWxsIHRoZSBlbnRydXN0UmVzcG9uc2liaWxpdHkgZnVuY3Rpb24gd2l0aCB0aGUgcmVzcG9uc2liaWxpdHlGb3JtXHJcbiAgKiBhcyBhIHBhcmFtZXRlci5cclxuICAqIEByZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZS5cclxuICAqL1xyXG4gIHN1Ym1pdFJlc3BvbnNpYmlsaXR5KCkge1xyXG4gICAgY29uc3QgdmFsaWQgPSB0aGlzLnZhbGlkYXRlUmVzcG9uc2liaWxpdHkoKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT0gJ0VESVQnKSB7XHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uSWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbklkKCk7XHJcbiAgICAgIHRoaXMubWVtYmVySWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE1lbWJlcklkKCk7XHJcbiAgICAgIHRoaXMuZW50cnVzdFJlc3BvbnNpYmlsaXR5KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtKTtcclxuICAgICAgLy8gZWRpdCBjb25kaXRpb25zXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVudHJ1c3RSZXNwb25zaWJpbGl0eSh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAvKipcclxuICAqIElmIHRoZSByZXNwb25zaWJpbGl0eSBuYW1lIGlzIGVtcHR5LCBvciB0aGUgZnJlcXVlbmN5IGlzIGVtcHR5LCBvciB0aGUgYXNzaWduZWVzIGxpc3QgaXMgZW1wdHksXHJcbiAgKiB0aGVuIHJldHVybiBmYWxzZS4gT3RoZXJ3aXNlLCByZXR1cm4gdHJ1ZS5cclxuICAqL1xyXG4gIHZhbGlkYXRlUmVzcG9uc2liaWxpdHkoKSB7XHJcbiAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWdub3JzLmVuYWJsZSAmJiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMubGlzdD8ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZFR5cGUgPSBcIndob21cIjtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXNwb25zaWJpbGl0eS5uYW1lIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlc3BvbnNpYmlsaXR5Lm5hbWUudHJpbSgpID09ICcnKSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZFR5cGUgPSAnd2hhdCc7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0IHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/Lmxlbmd0aCA9PSAwICYmICghdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgfHwoKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3QgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0Py5sZW5ndGggPT0gMCkgJiYgdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpKSkge1xyXG4gICAgICB0aGlzLmludmFsaWRUeXBlID0gJ3dobyc7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5ID09ICcnIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9PT0gJycgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5ID09PSAnNX4wfjB+MCcpIHtcclxuICAgICAgdGhpcy5pbnZhbGlkVHlwZSA9ICd3aGVuJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZFR5cGUgPSAnJztcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGlmICghdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZSB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXNwb25zaWJpbGl0eS5uYW1lLnRyaW0oKSA9PSAnJ1xyXG4gICAgICB8fCAoIXRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgPT09ICcnIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9PT0gJzV+MH4wfjAnKSB8fCAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3Q/Lmxlbmd0aCA9PSAwICYmICghdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgfHwoKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZUdyb3Vwcy5saXN0IHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlR3JvdXBzLmxpc3Q/Lmxlbmd0aCA9PSAwKSAmJiB0aGlzLmZlYXR1cmVGbGFnX2dyb3VwcykpKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVudHJ1c3RSZXNwb25zaWJpbGl0eShlbnRydXN0Rm9ybTogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IHRydWU7XHJcbiAgICBsZXQgc3RhcnREYXRlID0gbW9tZW50KHBhcnNlSW50KGVudHJ1c3RGb3JtLnN0YXJ0RGF0ZSkgKiAxMDAwKS5mb3JtYXQoXCJZWVlZLU1NLUREIEhIOm1tOnNzXCIpO1xyXG4gICAgc3RhcnREYXRlID0gbW9tZW50KHN0YXJ0RGF0ZS5zcGxpdCgnICcpWzBdICsgXCIgMDA6MDA6MDBcIikuZm9ybWF0KFwiWVlZWS1NTS1ERCBISDptbTpzc1wiKTtcclxuICAgIGNvbnN0IHJjRGV0YWlscyA9IGVudHJ1c3RGb3JtLnJjPy5sZW5ndGggPiAwID8gZW50cnVzdEZvcm0ucmMubWFwKChyYzogYW55KTogYW55ID0+IHtcclxuICAgICAgaWYgKHJjKSB7XHJcbiAgICAgICAgY29uc3QgcmNEZXRhaWxzQXJyID0ge1xyXG4gICAgICAgICAgcGFyZW50X3JjX2lkczogcmMucGFyZW50X3JjX2lkcyxcclxuICAgICAgICAgIHJjX2lkOiByYy5yY19pZFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHJjRGV0YWlsc0FycjtcclxuICAgICAgfVxyXG4gICAgfSkgOiBbXTtcclxuICAgIGNvbnN0IG1vcmVPcHRpb25zID0gdGhpcy5tb3JlT3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBjaGVja0NvbnRpbnVvdXNGYWlsZWRWYWx1ZSA9IChkZXRhaWxzOiBzdHJpbmcpID0+IHtcclxuICAgICAgY29uc3QgZnJlcXVlbmN5VHlwZSA9IHBhcnNlSW50KGRldGFpbHMuc3BsaXQoJ34nKVswXSk7XHJcbiAgICAgIGlmIChmcmVxdWVuY3lUeXBlID09PSAxIHx8IGZyZXF1ZW5jeVR5cGUgPT09IDIgfHwgZnJlcXVlbmN5VHlwZSA9PT0gMykge1xyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGxpbmtlZFByb2dyYW1JZHM6IGFueVtdID0gW107XHJcbiAgICBsZXQgbGlua2VkQ2F0ZWdvcnlJZHM6IGFueVtdID0gW107XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ubGlua2VkUHJvZ3JhbT8uZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgaWYodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmNhdGVnb3J5X2lkICE9PSBlbGU/LmNhdGVnb3J5X2lkKXtcclxuICAgICAgICBjb25zdCBwcm9ncmFtID0ge1xyXG4gICAgICAgICAgcHJvZ3JhbUlkOiBlbGU/LmNhdGVnb3J5X2lkLFxyXG4gICAgICAgICAgcHJvZ3JhbU9iamVjdElkOiBlbGU/Ll9pZCxcclxuICAgICAgICAgIHN1YlByb2dyYW1JZHM6IGVsZT8uY2hpbGRfaWQ/LmZpbHRlciggKGVsOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5Py5pbmNsdWRlcyhlbCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBsaW5rZWRQcm9ncmFtSWRzPy5wdXNoKHByb2dyYW0pO1xyXG4gICAgICAgIGxpbmtlZENhdGVnb3J5SWRzPy5wdXNoKGVsZT8uY2F0ZWdvcnlfaWQpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGxldCBjYXRlZ29yeUlkc0V4Y2VwdERlZmF1bHQ6YW55ID0gW11cclxuICAgIGNhdGVnb3J5SWRzRXhjZXB0RGVmYXVsdCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5jYXRlZ29yeT8uZmlsdGVyKCAoZWw6IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gKGVsICE9PSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uY2F0ZWdvcnlfaWQgICYmICF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uY2hpbGRfaWQ/LmluY2x1ZGVzKGVsKSlcclxuICAgIH0pXHJcbiAgICB0aGlzLmNvbWJpbmVVc2VyQW5kVXNlckdyb3VwTWVtYmVycygpO1xyXG5cclxuICAgIGNvbnN0IHJlbWFya3MgPSAoZW50cnVzdEZvcm0uZGVzY3JpcHRpb24ucmVwbGFjZSgvXFwmbmJzcDsvZywgJycpLnRyaW0oKSAhPT0gJycpID8gZW50cnVzdEZvcm0uZGVzY3JpcHRpb24gOiAnJ1xyXG4gICAgY29uc3Qgb2JqZWN0aXZlID0gKGVudHJ1c3RGb3JtLm9iamVjdGl2ZS5yZXBsYWNlKC9cXCZuYnNwOy9nLCAnJykudHJpbSgpICE9PSAnJykgPyBlbnRydXN0Rm9ybS5vYmplY3RpdmUgOiAnJ1xyXG4gICAgbGV0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgYXBwX2Fzc29jaWF0aW9uOiBbXSxcclxuICAgICAgYXNzaWduZWRfdG86IHRoaXMucmV0dXJuSWRzKHRoaXMuYXNzaWduZWVVc2VyTGlzdCwgJ2VtcGxveWVlX2lkJykudG9TdHJpbmcoKSxcclxuICAgICAgcHJvZ3JhbV9jYXRfaWRzOiBtb3JlT3B0aW9ucz8uUFJPR1JBTSA/ICgoZW50cnVzdEZvcm0/LnByb2dyYW0/Lmxlbmd0aCkgPyBbZW50cnVzdEZvcm0ucHJvZ3JhbVswXS5jYXRlZ29yeV9pZF0gOiBbXSk6W10sXHJcbiAgICAgIGxpbmtlZF9wcm9ncmFtX2lkczogbGlua2VkUHJvZ3JhbUlkcyxcclxuICAgICAgbGlua2VkX2NhdGVnb3J5X2lkczogdGhpcy5nZXRVbmlxdWVJZHMoWy4uLmNhdGVnb3J5SWRzRXhjZXB0RGVmYXVsdCwgLi4ubGlua2VkQ2F0ZWdvcnlJZHNdICksXHJcbiAgICAgIC8vIGNhdGVnb3J5X2lkOiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1fc2VsZWN0ZWRfaWRzPy5sZW5ndGggPiAwKSA/IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5jYXRlZ29yeV9pZCA6ICcnLFxyXG4gICAgICBjYXRlZ29yeV9pZDogKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtX3NlbGVjdGVkX2lkcz8ubGVuZ3RoID4gMCkgPyB0aGlzLmdldFVuaXF1ZUlkcyhbLi4udGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmNhdGVnb3J5LCAuLi5saW5rZWRDYXRlZ29yeUlkcyAsIC4uLltlbnRydXN0Rm9ybS5wcm9ncmFtWzBdLmNhdGVnb3J5X2lkXV0gKT8udG9TdHJpbmcoKSA6ICcnLFxyXG4gICAgICBjY19lbWFpbDogKG1vcmVPcHRpb25zLk9WRVJTRUVSKSA/IHRoaXMucmV0dXJuSWRzKHRoaXMub3ZlcnNlZXJVc2VyTGlzdCwgJ2VtcGxveWVlX2lkJykudG9TdHJpbmcoKSA6ICcnLFxyXG4gICAgICBjaGVja3BvaW50X2Rlc2NyaXB0aW9uOiAobW9yZU9wdGlvbnMuQ0hFQ0tQT0lOVFMpID8gZW50cnVzdEZvcm0uY2hlY2twb2ludEluc3RydWN0aW9uIDogJycsXHJcbiAgICAgIGNoZWNrcG9pbnRfZGV0YWlsczogKG1vcmVPcHRpb25zLkNIRUNLUE9JTlRTKSA/IEpTT04uc3RyaW5naWZ5KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzKSA6ICcnLFxyXG4gICAgICBjaGVja3BvaW50X2ZsYWc6IDAsXHJcbiAgICAgIGNvbGxhYm9yYXRvcl9tYXJrX2RvbmU6IDAsXHJcbiAgICAgIGNvbW1lbnQ6ICcnLFxyXG4gICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiBjaGVja0NvbnRpbnVvdXNGYWlsZWRWYWx1ZShlbnRydXN0Rm9ybS5mcmVxdWVuY3kpID8gZW50cnVzdEZvcm0uY29udGludW91c19mYWlsZWRfZGF5cyA6IDAsXHJcbiAgICAgIGNvc3Rfb2ZfY29tcGxpYW5jZTogJycsXHJcbiAgICAgIGNyZWF0ZWRfYnk6IGVudHJ1c3RGb3JtLmFzc2lnbm9ycy5saXN0Py5sZW5ndGggPCAxID8gMCA6IHRoaXMubWVtYmVySWQsXHJcbiAgICAgIGNyZWF0aW9uX3dpbmRvdzogMCxcclxuICAgICAgY3VzdG9tX3RhZ3M6IEpTT04uc3RyaW5naWZ5KGVudHJ1c3RGb3JtLmN1c3RvbVRhZ3MpLFxyXG4gICAgICBlbnRpdHlfdHJlZTogKG1vcmVPcHRpb25zLlJDKSA/IHJjRGV0YWlscyA6IFtdLFxyXG4gICAgICBlbnRydXN0X2Zyb21fcmlzazogdGhpcy5vcGVuZWRGcm9tID09PSAnUklTS19UUkVBVE1FTlQnID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICBmYWlsZWRfYWZ0ZXJfZGF5czogZW50cnVzdEZvcm0uZmFpbGVkX2FmdGVyX2RheXMsXHJcbiAgICAgIGZhaWxlZF90aW1lX3V0YzogZW50cnVzdEZvcm0uZmFpbGVkX3RpbWVfdXRjLFxyXG4gICAgICBmYWlsdXJlX2NjX2VtYWlsOiAobW9yZU9wdGlvbnMuT1ZFUlNFRVIpID8gdGhpcy5yZXR1cm5JZHModGhpcy5vdmVyc2VlclVzZXJOb3RpZnlMaXN0LCAnZW1wbG95ZWVfaWQnKS50b1N0cmluZygpIDogJycsXHJcbiAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzOiBlbnRydXN0Rm9ybS5mcmVxdWVuY3ksXHJcbiAgICAgIGZyZXF1ZW5jeV90aW1lOiBlbnRydXN0Rm9ybS50aW1lSW4yNEhyID8/IFwiMjM6NTk6MDBcIixcclxuICAgICAgZ3JjX29iamVjdF9pZDogMCxcclxuICAgICAgZ3JjX3JlbGF0aW9uc2hpcDogJycsXHJcbiAgICAgIGlmX3Rlc3RwbGFuX2ZhaWxlZDogMCxcclxuICAgICAgaW1wYWN0OiAnJyxcclxuICAgICAgaXNHcm91cEFzc2lnblRvOiAoZW50cnVzdEZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID09ICdBTllfT05FJykgPyAxIDogMCxcclxuICAgICAgaXNfa2V5X2NvbXBsaWFuY2U6IGVudHJ1c3RGb3JtLnJlc3BvbnNpYmlsaXR5LmtleVJlc3BvbnNpYmlsaXR5ID8gMSA6IDAsXHJcbiAgICAgIGxpYnJhcnlfcmVwb3J0X2lkOiAwLFxyXG4gICAgICBsaWZlY3ljbGVfZGV0YWlsczogZW50cnVzdEZvcm0ubGlmZWN5Y2xlRGV0YWlscyA/PyAnMDAwMC0wMC0wMH5+MCcsXHJcbiAgICAgIGxpbmtfZm9yX2RldGFpbHM6IChtb3JlT3B0aW9ucy5GT1JNQVRFX0VWSURFTkNFKSA/IGVudHJ1c3RGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmZvcm1hdExpbmtzIDogW10sXHJcbiAgICAgIGxpbmthZ2VzOiB7IGNvbXBsaWFuY2U6IFtdIH0sXHJcbiAgICAgIG1lbWJlcl9pZDogdGhpcy5yZXR1cm5JZHMoZW50cnVzdEZvcm0uYXNzaWdub3JzLmxpc3QsICdtZW1iZXJfaWQnKT8ubGVuZ3RoID4gMCA/IHRoaXMucmV0dXJuSWRzKGVudHJ1c3RGb3JtLmFzc2lnbm9ycy5saXN0LCAnbWVtYmVyX2lkJylbMF0gOiB0aGlzLm1lbWJlcklkLFxyXG4gICAgICBvYmplY3RpdmU6IChtb3JlT3B0aW9ucy5PQkpFQ1RJVkUpID8gb2JqZWN0aXZlIDogJycsXHJcbiAgICAgIG9uX2NvbXBsZXRpb25fb2Y6IGVudHJ1c3RGb3JtLnJlcG9ydElkID8gW2VudHJ1c3RGb3JtLnJlcG9ydElkXSA6IFtdLFxyXG4gICAgICBvbl9jb21wbGV0aW9uX29mX3R5cGU6IDEsXHJcbiAgICAgIG9yZ2FuaXNhdGlvbl9pZDogdGhpcy5vcmdhbml6YXRpb25JZCxcclxuICAgICAgb3ZlcnJpZGVfd2Vla2x5OiAwLFxyXG4gICAgICBwYXJlbnRfaWQ6IDAsXHJcbiAgICAgIHBlbmFsdHk6ICcnLFxyXG4gICAgICBwcml2YXRlX2xpYnJhcnlfaWQ6IDAsXHJcbiAgICAgIHJlbWFya3M6IHJlbWFya3MsXHJcbiAgICAgIHJlbWluZGVyX2JlZm9yZV9kYXlzOiBlbnRydXN0Rm9ybS5yZW1pbmRlcl9iZWZvcmVfZGF5cyxcclxuICAgICAgcmVwb3J0X2Zvcm1hdDogKG1vcmVPcHRpb25zLkZPUk1BVEVfRVZJREVOQ0UpID8gZW50cnVzdEZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZm9ybWF0RmlsZXMgOiBbXSxcclxuICAgICAgcmVwb3J0X2Zvcm1hdF9saW5rOiAnJyxcclxuICAgICAgcmVwb3J0X25hbWU6IGVudHJ1c3RGb3JtLnJlc3BvbnNpYmlsaXR5Lm5hbWUsXHJcbiAgICAgIHJlcG9ydF91cGxvYWRfZmxhZzogZW50cnVzdEZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZXZpZGVuY2VSZXF1aXJlZCA/IDEgOiAwLFxyXG4gICAgICByZXZpZXdfYWZ0ZXJfZGF5czogKG1vcmVPcHRpb25zLlJFVklFV0VSKSA/IGVudHJ1c3RGb3JtLnJldmlld2Vycy5yZXZpZXdGcmVxdWVuY3kucmV2aWV3Q29tcGxldGVEYXlzID09PSAnJyA/IDAgOiBOdW1iZXIoZW50cnVzdEZvcm0ucmV2aWV3ZXJzLnJldmlld0ZyZXF1ZW5jeS5yZXZpZXdDb21wbGV0ZURheXMpIDogMCxcclxuICAgICAgcmV2aWV3X2ZhaWxlZF9hZnRlcl9kYXlzOiAobW9yZU9wdGlvbnMuUkVWSUVXRVIpID8gZW50cnVzdEZvcm0ucmV2aWV3ZXJzLnJldmlld0ZyZXF1ZW5jeS5yZXZpZXdOT3RDb21wbGV0ZWREYXlzID09PSAnJyA/IDAgOiBOdW1iZXIoZW50cnVzdEZvcm0ucmV2aWV3ZXJzLnJldmlld0ZyZXF1ZW5jeS5yZXZpZXdOT3RDb21wbGV0ZWREYXlzKSA6IDAsXHJcbiAgICAgIHJldmlld2VyX2FycjogKG1vcmVPcHRpb25zLlJFVklFV0VSKSA/IHtcclxuICAgICAgICBsZXZlbDE6IHtcclxuICAgICAgICAgIHJldmlld2VyczogdGhpcy5zZXRSZXZpZXdlclBheWxvYWQodGhpcy5yZXZpZXdlclVzZXJMaXN0LCAnbGlzdCcsIGVudHJ1c3RGb3JtLnJldmlld2Vycy5hY2NlcHRlZERhdGEsIChlbnRydXN0Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93KSA/ICdTRVFVRU5USUFMJyA6ICdBTllPTkUnKSxcclxuICAgICAgICAgIHR5cGU6IChlbnRydXN0Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93KSA/ICdTRVFVRU5USUFMJyA6ICdBTllPTkUnXHJcbiAgICAgICAgfSxcclxuICAgICAgfSA6IHt9LFxyXG4gICAgICB1c2VyR3JvdXBJZHM6ICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICBhc3NpZ25lZUFsbEdyb3VwSWRzIDogZW50cnVzdEZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlICE9PSAnQU5ZX09ORScgPyB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3QsJ2dyb3VwX2lkJykgOiBbXSxcclxuICAgICAgICBhc3NpZ25lZUFueW9uZUdyb3VwSWRzIDogZW50cnVzdEZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID09PSAnQU5ZX09ORScgPyB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3QsJ2dyb3VwX2lkJykgOiBbXSxcclxuICAgICAgICBjY0VtYWlsR3JvdXBJZHMgOiAgICAgICAgdGhpcy5yZXR1cm5JZHModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdCwnZ3JvdXBfaWQnKSA/PyBbXSxcclxuICAgICAgICBmYWlsdXJlQ0NFbWFpbEdyb3VwSWRzIDogdGhpcy5yZXR1cm5JZHModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdCwnZ3JvdXBfaWQnKSA/PyBbXSxcclxuICAgICAgICByZXZpZXdlckdyb3VwSWRzICAgICAgIDogdGhpcy5yZXR1cm5JZHModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0LCdncm91cF9pZCcpID8/IFtdXHJcbiAgICB9LFxyXG4gICAgZXhpc3RpbmdVc2VySWRzOiAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgIGFzc2lnbmVlQWxsSWRzOiBlbnRydXN0Rm9ybS5hc3NpZ25lZXMud2hvQ2FuQ29tcGxldGUgIT09ICdBTllfT05FJyA/IHRoaXMucmV0dXJuSWRzKGVudHJ1c3RGb3JtPy5hc3NpZ25lZXM/Lmxpc3QsICdteV9tZW1iZXJfaWQnKSA6IFtdLFxyXG4gICAgICAgIGFzc2lnbmVlQW55b25lSWRzIDogZW50cnVzdEZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID09PSAnQU5ZX09ORScgPyB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybT8uYXNzaWduZWVzPy5saXN0LCAnbXlfbWVtYmVyX2lkJykgOiBbXSxcclxuICAgICAgICBjY0VtYWlsRW1wSWRzIDogdGhpcy5yZXR1cm5JZHMoZW50cnVzdEZvcm0/Lm92ZXJzZWVycz8ubGlzdCwgJ2VtcGxveWVlX2lkJykgPz8gW10sXHJcbiAgICAgICAgZmFpbHVyZUNDRW1haWxFbXBJZHMgOiB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0LCAnZW1wbG95ZWVfaWQnKSA/PyBbXSxcclxuICAgICAgICByZXZpZXdlcklkcyA6dGhpcy5yZXR1cm5JZHMoIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3QsJ21lbWJlcl9pZCcpID8/IFtdXHJcbiAgICB9LFxyXG4gICAgICByZXZpZXdlcl9jaGVja3BvaW50czogW3sgY2hlY2twb2ludHM6IFtdLCBpbnN0cnVjdGlvbjogJycgfV0sXHJcbiAgICAgIHJldmlld2VyX2lkOiAwLFxyXG4gICAgICByaXNrX2NsYXNzOiB0aGlzLmlzUmlza0VuYWJsZSA/IGVudHJ1c3RGb3JtLnJpc2tDbGFzcyA6IDIsXHJcbiAgICAgIHJpc2tfaWRzOiAnJyxcclxuICAgICAgcmlza19tYXRyaXhfZGF0YTogKG1vcmVPcHRpb25zLlJJU0tfQ0xBU1NJRklDQVRJT04pID8gZW50cnVzdEZvcm0ucmlza01hdHJpeCA6ICcwLDAsMCwwLDAsMCcsXHJcbiAgICAgIHNhbXBsZV9zaXplOiAwLFxyXG4gICAgICBzdGFydF9kYXRlX3V0Yzogc3RhcnREYXRlLFxyXG4gICAgICBzdGF0dXRvcnlfZGF5OiAwLFxyXG4gICAgICB0ZXN0X3JlcXVpcmVkX2ZsYWc6IChtb3JlT3B0aW9ucy5BU1NVUkFOQ0UpID8gKGVudHJ1c3RGb3JtLmFzc3VyYW5jZUxpc3Q/Lmxlbmd0aCA+IDAgPyAxIDogMCkgOiAwLFxyXG4gICAgICB0ZXN0cGxhbl9jYXRlZ29yeV9pZDogKG1vcmVPcHRpb25zLkFTU1VSQU5DRSkgPyB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybS5hc3N1cmFuY2VMaXN0LCAnY2F0ZWdvcnlfaWQnKSA6IFtdLFxyXG4gICAgICB0ZXN0cGxhbl9jYXRlZ29yeV9tYW5hZ2VyOiAnJyxcclxuICAgICAgYXVkaXRfY2F0ZWdvcnlfZGV0YWlsczogbW9yZU9wdGlvbnMuUkVRVUlSRVNfQVVESVQgJiYgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmF1ZGl0X2NhdGVnb3J5X2RldGFpbHM/LmNhdGVnb3J5X2lkID8ge1xyXG4gICAgICAgIGNhdGVnb3J5X2lkOiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hdWRpdF9jYXRlZ29yeV9kZXRhaWxzLmNhdGVnb3J5X2lkLFxyXG4gICAgICAgIHNhbXBsZTogdGhpcy5zZWxlY3RlZFNhbXBsZSA9PT0gMCA/IHRoaXMuc2FtcGxlVmFsdWUgOiAwLFxyXG4gICAgICAgIHBlcmNlbnRhZ2U6IHRoaXMuc2VsZWN0ZWRTYW1wbGUgPT09IDEgPyB0aGlzLnNhbXBsZVBlcmNlbnRhZ2UgOiAwLFxyXG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuOiBgMX4wfiR7dGhpcy5zZW5kQXVkaXRSZW1pbmRlcnNWYWx1ZX1+MWAsXHJcbiAgICAgICAgZnJlcXVlbmN5X3RpbWU6IG1vbWVudCh0aGlzLmF1ZGl0VGltZSwgJ0hIOm1tIGEnKS5mb3JtYXQoJ0hIOm1tOnNzJylcclxuICAgICAgfSA6IHtcclxuICAgICAgICBjYXRlZ29yeV9pZDogMCxcclxuICAgICAgICBzYW1wbGU6IDAsXHJcbiAgICAgICAgcGVyY2VudGFnZTogMCxcclxuICAgICAgICBmcmVxdWVuY3lfcGF0dGVybjogYGAsXHJcbiAgICAgICAgZnJlcXVlbmN5X3RpbWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIGFzc2Vzc21lbnQ6IHtcclxuICAgICAgICBjYXRlZ29yeV9pZDogbW9yZU9wdGlvbnMuQVNTRVNTTUVOVCA/IGVudHJ1c3RGb3JtPy5hc3Nlc3NtZW50Py5jYXRlZ29yeV9pZCA6ICcnLFxyXG4gICAgICAgIGFzc2Vzc21lbnRfaWQ6IG1vcmVPcHRpb25zLkFTU0VTU01FTlQgPyBlbnRydXN0Rm9ybT8uYXNzZXNzbWVudD8uYXNzZXNzbWVudF9pZCA6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIGFzc2Vzc21lbnRfY2hlY2twb2ludDogbW9yZU9wdGlvbnMuQ0hFQ0tQT0lOVFNfTkVXID8gKE9iamVjdC5rZXlzKGVudHJ1c3RGb3JtPy5uZXdfY2hlY2twb2ludHMpPy5sZW5ndGggPiAwID8gZW50cnVzdEZvcm0/Lm5ld19jaGVja3BvaW50cyA6IHt9KSA6IHt9LFxyXG4gICAgICBxdWVzdGlvbm5haXJlX3R5cGU6IG1vcmVPcHRpb25zLkNIRUNLUE9JTlRTX05FVyA/IChPYmplY3Qua2V5cyhlbnRydXN0Rm9ybT8ubmV3X2NoZWNrcG9pbnRzKT8ubGVuZ3RoID4gMCA/ICdhc3Nlc3NtZW50X2NoZWNrcG9pbnQnIDogKG1vcmVPcHRpb25zLkFTU0VTU01FTlQgJiYgZW50cnVzdEZvcm0/LmFzc2Vzc21lbnQ/LmNhdGVnb3J5X2lkID8gJ2Fzc2Vzc21lbnQnIDogKEpTT04uc3RyaW5naWZ5KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzKSAhPSAnJyAmJiBtb3JlT3B0aW9ucy5DSEVDS1BPSU5UUyA/ICdjaGVja3BvaW50JyA6ICcnKSkpIDogJydcclxuICAgIH07XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5UGF5bG9hZCA9IHBheWxvYWQ7XHJcbiAgICBpZiAodGhpcy5tb2RlID09ICdDUkVBVEUnICYmICF0aGlzLmlzRHVwbGljYXRlRW50cnVzdCkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5zdWJtaXRFbnRydXN0KHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93U21pbGV5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YSA9IHJlcztcclxuXHJcblxyXG4gICAgICAgIGlmIChyZXMubWVzc2FnZSAmJiByZXMubWVzc2FnZS50b0xvd2VyQ2FzZSgpID09PSAnYnVsayBlbnRydXN0Jykge1xyXG4gICAgICAgICAgdGhpcy5zbWlsZXlNZXNzYWdlID0gYFlvdSBoYXZlIGVudHJ1c3RlZCAke3Jlcy5jYWxjdWxhdGVfbm9fb2ZfcmVzcG9uc2liaWl0aWVzfSByZXNwb25zaWJpbGl0aWVzLiBUaGVzZSB3b3VsZCBiZSByZWZsZWN0ZWQgd2l0aGluIHlvdXIgYWNjb3VudCBpbiBzb21ldGltZS5gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmcgJiYgcGF5bG9hZC5jcmVhdGVkX2J5ID09IDApIHtcclxuICAgICAgICAgIHRoaXMuc21pbGV5TWVzc2FnZSA9ICdUaGlzIHJlc3BvbnNpYmlsaXR5IGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBub3RpZmljYXRpb24gcXVldWUuJ1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAocGF5bG9hZC5jcmVhdGVkX2J5ID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbnNbMV0uYnV0dG9uVGV4dCA9IFwiVmlldyBSZXNwb25zaWJpbGl0aWVzXCI7XHJcbiAgICAgICAgICAgIHRoaXMuc21pbGV5TWVzc2FnZSA9IGBZb3UganVzdCBjcmVhdGVkIGEgcmVzcG9uc2liaWxpdHkgb24gYmVoYWxmICR7ZW50cnVzdEZvcm0uYXNzaWdub3JzLmxpc3QuZmluZCgobWVtYmVyOiBhbnkpID0+IG1lbWJlci5tZW1iZXJfaWQgPT09IHBheWxvYWQubWVtYmVyX2lkKS5tZW1iZXJfbmFtZX1gO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMucmVzZXQoKTtcclxuICAgICAgfSxcclxuICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KCdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLCAnYWxlcnQnKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZSA9PSAnRURJVCcgfHwgdGhpcy5pc0R1cGxpY2F0ZUVudHJ1c3QpIHtcclxuICAgICAgdGhpcy5zbWlsZXlNZXNzYWdlID0gYFRoZSByZXNwb25zaWJpbGl0eSBoYXMgYmVlbiBtb2RpZmllZC5gO1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS51cGRhdGVFbnRydXN0KHBheWxvYWQsIHRoaXMucmVzcG9uc2liaWxpdHlJZCwgdHJ1ZSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlEYXRhID0gcmVzO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dTbWlsZXkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzU21pbGV5T24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNEdXBsaWNhdGVFbnRydXN0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIHRoaXMucmVzZXRGb3JtKCk7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsICdhbGVydCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuIHVuaXF1ZUlkVXNlckdyb3Vwcyh0b3RhbFVzZXJMaXN0OmFueSxzZWxlY3RlZEdyb3VwOmFueSxzZWxlY3RlZFVzZXJzOmFueSl7XHJcbiAgbGV0IGdyb3VwVXNlckxpc3QgPSB0aGlzLmdldEdyb3Vwc1VzZXJFbXBsb3llZXNJZCh0b3RhbFVzZXJMaXN0LHNlbGVjdGVkR3JvdXApXHJcbiAgbGV0IGlkcyA9IG5ldyBTZXQoc2VsZWN0ZWRVc2Vycy5tYXAoICh1c2VyIDphbnkpID0+IHVzZXI/Lm15X21lbWJlcl9pZCkpO1xyXG4gIGxldCB1c2VyTGlzdCA9IFsuLi5zZWxlY3RlZFVzZXJzLCAuLi5ncm91cFVzZXJMaXN0LmZpbHRlcigoZ3JvdXBVc2VyIDphbnkpID0+ICFpZHMuaGFzKGdyb3VwVXNlcj8ubXlfbWVtYmVyX2lkKSldO1xyXG4gIHJldHVybiB1c2VyTGlzdFxyXG4gfVxyXG5cclxuY29tYmluZVVzZXJBbmRVc2VyR3JvdXBNZW1iZXJzKCl7XHJcbiAgaWYodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpe1xyXG4gICAgdGhpcy5hc3NpZ25lZVVzZXJMaXN0ID0gdGhpcy51bmlxdWVJZFVzZXJHcm91cHModGhpcy5hbGxVc2Vyc0xpc3QsdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0LHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3QpXHJcbiAgICB0aGlzLnJldmlld2VyVXNlckxpc3QgPSB0aGlzLnVuaXF1ZUlkVXNlckdyb3Vwcyh0aGlzLmFsbFVzZXJzTGlzdCx0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3QsdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdClcclxuICAgIHRoaXMub3ZlcnNlZXJVc2VyTGlzdCA9IHRoaXMudW5pcXVlSWRVc2VyR3JvdXBzKHRoaXMuYWxsVXNlcnNMaXN0LHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lmxpc3QsdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdClcclxuICAgIHRoaXMub3ZlcnNlZXJVc2VyTm90aWZ5TGlzdCA9IHRoaXMudW5pcXVlSWRVc2VyR3JvdXBzKHRoaXMuYWxsVXNlcnNMaXN0LHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3QsdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdClcclxuXHJcbiAgfWVsc2V7XHJcbiAgICB0aGlzLmFzc2lnbmVlVXNlckxpc3QgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0XHJcbiAgICB0aGlzLnJldmlld2VyVXNlckxpc3QgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0XHJcbiAgICB0aGlzLm92ZXJzZWVyVXNlckxpc3QgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0XHJcbiAgICB0aGlzLm92ZXJzZWVyVXNlck5vdGlmeUxpc3QgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0XHJcbiAgfVxyXG59XHJcblxyXG4gLyoqXHJcbiAgKiBJdCByZXNldHMgdGhlIGZvcm0uXHJcbiAgKi9cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gICAgdGhpcy51aUtpdFNlcnZpY2UuaXNTbWlsZXlPbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0gPSB7XHJcbiAgICAgIGFzc2lnbm9yczoge1xyXG4gICAgICAgIGVuYWJsZTogZmFsc2UsXHJcbiAgICAgICAgbGlzdDogW11cclxuICAgICAgfSxcclxuICAgICAgcmVzcG9uc2liaWxpdHk6IHtcclxuICAgICAgICBuYW1lOiAnJyxcclxuICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIGFzc2lnbmVlR3JvdXBzOntcclxuICAgICAgICB3aG9DYW5Db21wbGV0ZTogJ0FMTCcsXHJcbiAgICAgICAgbGlzdDogW11cclxuICAgICAgfSxcclxuICAgICAgYXNzaWduZWVzOiB7XHJcbiAgICAgICAgd2hvQ2FuQ29tcGxldGU6ICdBTEwnLFxyXG4gICAgICAgIGxpc3Q6IFtdXHJcbiAgICAgIH0sXHJcbiAgICAgIGZyZXF1ZW5jeTogJycsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcclxuICAgICAgb2JqZWN0aXZlOiAnJyxcclxuICAgICAgcmM6IFtdLFxyXG4gICAgICBjYXRlZ29yeTogW10sXHJcbiAgICAgIGNoZWNrcG9pbnRJbnN0cnVjdGlvbjogJycsXHJcbiAgICAgIGN1c3RvbVRhZ3M6IFtdLFxyXG4gICAgICBjaGVja3BvaW50czogW10sXHJcbiAgICAgIHJldmlld2Vyczoge1xyXG4gICAgICAgIHNlcXVlbnRpYWxXb3JrZmxvdzogdHJ1ZSxcclxuICAgICAgICByZXZpZXdGcmVxdWVuY3k6IHtcclxuICAgICAgICAgIHJldmlld0NvbXBsZXRlRGF5czogMixcclxuICAgICAgICAgIHJldmlld05PdENvbXBsZXRlZERheXM6IDJcclxuICAgICAgICB9LFxyXG4gICAgICAgIGxpc3Q6IFtdXHJcbiAgICAgIH0sXHJcbiAgICAgIGdyb3VwUmV2aWV3ZXJzOiB7XHJcbiAgICAgICAgc2VxdWVudGlhbFdvcmtmbG93OiB0cnVlLFxyXG4gICAgICAgIHJldmlld0ZyZXF1ZW5jeToge1xyXG4gICAgICAgICAgcmV2aWV3Q29tcGxldGVEYXlzOiAyLFxyXG4gICAgICAgICAgcmV2aWV3Tk90Q29tcGxldGVkRGF5czogMlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbGlzdDogW11cclxuICAgICAgfSxcclxuICAgICAgb3ZlcnNlZXJzOiB7XHJcbiAgICAgICAgbm90aWZ5TGlzdDogW10sXHJcbiAgICAgICAgbGlzdDogW11cclxuICAgICAgfSxcclxuICAgICAgb3ZlcnNlZXJzR3JvdXBzOiB7XHJcbiAgICAgICAgbm90aWZ5TGlzdDogW10sXHJcbiAgICAgICAgbGlzdDogW11cclxuICAgICAgfSxcclxuICAgICAgZm9ybWF0QW5kRXZpZGVuY2U6IHtcclxuICAgICAgICBmb3JtYXRSZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgICAgZm9ybWF0RmlsZXM6IFtdLFxyXG4gICAgICAgIGZvcm1hdExpbmtzOiBbXSxcclxuICAgICAgICBldmlkZW5jZVJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAgYXNzdXJhbmNlTGlzdDogW10sXHJcbiAgICAgIHJlcXVpcmVzQXVkaXRMaXN0OiBbXSxcclxuICAgICAgcmlza0NsYXNzOiAxLFxyXG4gICAgICByaXNrTWF0cml4OiAnMCwwLDAsMCwwLDAnLFxyXG4gICAgICBwcm9ncmFtOiBbXSxcclxuICAgICAgcHJvZ3JhbV9zZWxlY3RlZF9pZHM6IFtdXHJcbiAgICB9O1xyXG4gICAgdGhpcy5tb3JlT3B0aW9ucyA9IHtcclxuICAgICAgT0JKRUNUSVZFOiBmYWxzZSxcclxuICAgICAgUkM6IGZhbHNlLFxyXG4gICAgICBDQVRFR09SWTogZmFsc2UsXHJcbiAgICAgIEZPUk1BVEVfRVZJREVOQ0U6IGZhbHNlLFxyXG4gICAgICBDSEVDS1BPSU5UUzogZmFsc2UsXHJcbiAgICAgIFJJU0tfQ0xBU1NJRklDQVRJT046IGZhbHNlLFxyXG4gICAgICBSRVZJRVdFUjogZmFsc2UsXHJcbiAgICAgIE9WRVJTRUVSOiBmYWxzZSxcclxuICAgICAgQVNTVVJBTkNFOiBmYWxzZSxcclxuICAgICAgQVBQUzogZmFsc2UsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdIb3cgb2Z0ZW4gZG9lcyB0aGUgcmVzcG9uc2liaWxpdHkgb2NjdXI/JztcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscyA9IHtcclxuICAgICAgcGF0dGVybjogJycsXHJcbiAgICAgIG5vdGlmaWNhdGlvblBlbmRpbmc6IDAsXHJcbiAgICAgIGRhdGVPZk1vZGlmaWVkOiAwLFxyXG4gICAgICBkZWFjdGl2YXRpb25WYWx1ZTogMCxcclxuICAgICAgc2VsZWN0ZWRSZXBvcnQ6IDAsXHJcbiAgICAgIGxpZmVjeWNsZTogJzAwMDAtMDAtMDB+fjAnLFxyXG4gICAgICBzdGFydERhdGU6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcclxuICAgICAgc3RhcnRPblRoZURheTogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxyXG4gICAgICB3aW5kb3c6IDAsXHJcbiAgICAgIGZhaWxlZDogMCxcclxuICAgICAgdGltZTogJzExOjU5IHBtJyxcclxuICAgICAgZmFpbGVkVGltZTogJycsXHJcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDBcclxuICAgIH1cclxuICAgIHRoaXMuc2FtcGxlVmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNhbXBsZVBlcmNlbnRhZ2UgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2FtcGxlID0gLTE7XHJcbiAgICB0aGlzLnNlbmRBdWRpdFJlbWluZGVyc1ZhbHVlID0gMjtcclxuICAgIHRoaXMuYXVkaXRUaW1lID0gJzExOjU5IHBtJ1xyXG4gICAgdGhpcy5tb2RlID0gJ0NSRUFURSdcclxuICAgIHRoaXMuaXNFbnRydXN0ID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzZXRGb3JtLmVtaXQodHJ1ZSk7XHJcbiAgfVxyXG4gIGFjdGlvbihldmVudDogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5vcGVuZWRGcm9tID09PSAnUklTS19UUkVBVE1FTlQnKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VTbWlsZXkoJ2RzJyk7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgc3dpdGNoIChldmVudCkge1xyXG4gICAgICBjYXNlICdhZGRNb3JlJzpcclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3ZpZXcnOlxyXG4gICAgICAgIHRoaXMudmlld1Jlc3BvbnNpYmlsaXRpZXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbiAgdmlld1Jlc3BvbnNpYmlsaXRpZXMoKTogdm9pZCB7XHJcbiAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICBsZXQgdXJsU3Vic3RyaW5nID0gJyc7XHJcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xyXG4gICAgaWYgKHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nICYmIHRoaXMucmVzcG9uc2liaWxpdHlQYXlsb2FkLmNyZWF0ZWRfYnkgPT0gMCkge1xyXG4gICAgICBpZih0aGlzLmlzUmVzcG9uc2liaWxpdHlTaW1wbGlmaWVkKXtcclxuICAgICAgICB1cmxTdWJzdHJpbmcgPSAnY29tcGxpYW5jZS9tYW5hZ2UtcmVzcG9uc2liaWxpdHk/JyArIHRoaXMudXJsIDtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgIHVybFN1YnN0cmluZyA9ICdjb21wbGlhbmNlL21hbmFnZS1yZXNwb25zaWJpbGl0aWVzL3Jlc3BvbnNpYmlsaXRpZXMtcXVldWUnO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlQYXlsb2FkLmNyZWF0ZWRfYnkgPiAwICYmIHRoaXMubW9kZSAhPT0gJ0VESVQnKSB7XHJcbiAgICAgIHVybFN1YnN0cmluZyA9ICdjb21wbGlhbmNlL21hbmFnZS1yZXNwb25zaWJpbGl0aWVzL292ZXJzaWdodC1yZXNwb25zaWJpbGl0aWVzP3RhYj00JnBhZ2U9MSc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZih0aGlzLmlzUmVzcG9uc2liaWxpdHlTaW1wbGlmaWVkKXtcclxuICAgICAgICB0aGlzLnF1ZXJ5UGFyYW0gPSAgSlNPTj8uc3RyaW5naWZ5KHRoaXMucmVjZW50UmVzcG9uc2liaWxpdHlVcmwpXHJcbiAgICAgICAgdXJsU3Vic3RyaW5nID0gJ2NvbXBsaWFuY2UvbWFuYWdlLXJlc3BvbnNpYmlsaXR5P3E9JyArIHRoaXMucXVlcnlQYXJhbTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgIHVybFN1YnN0cmluZyA9ICdjb21wbGlhbmNlL21hbmFnZS1yZXNwb25zaWJpbGl0aWVzJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgIHVybCA9ICdodHRwOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgJy8jLycgKyB1cmxTdWJzdHJpbmc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1cmwgPSAnaHR0cHM6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyAnL2NvbXBsaWFuY2UvIy8nICsgdXJsU3Vic3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm1vZGUgIT09ICdFRElUJykge1xyXG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcclxuICAgIH1cclxuICAgIHRoaXMuY2xvc2VTbWlsZXkoJ2RzJylcclxuICAgIHRoaXMucmVzZXQoKTtcclxuICB9XHJcbiAgY2xvc2VTbWlsZXkoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gZmFsc2U7XHJcbiAgICAvLyB0aGlzLmNsb3NlV29ya2Zsb3cuZW1pdCh0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YSk7XHJcbiAgICB0aGlzLmNsb3NlV29ya2Zsb3cuZW1pdCh7IGV2dDogdGhpcy5yZXNwb25zaWJpbGl0eURhdGEsIGNvbmZpcm06IGZhbHNlIH0pO1xyXG4gIH1cclxuICAvLyBmb3IgZWRpdCByZXNwb25zaWJpbGl0eVxyXG4gIGZyZXF1ZW5jeURhdGFQb3B1bGF0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgIHBhdHRlcm46IGV2ZW50Py5mcmVxdWVuY3lfZGV0YWlscyxcclxuICAgICAgd2luZG93OiBldmVudD8ucmVtaW5kZXJfYmVmb3JlX2RheXMsXHJcbiAgICAgIGZhaWxlZEFmdGVyOiBldmVudD8uZmFpbGVkX2FmdGVyX2RheXMsXHJcbiAgICAgIGZhaWxlZF90aW1lX3V0YzogZXZlbnQuZmFpbGVkX3RpbWVfdXRjLFxyXG4gICAgICBsaWZlY3ljbGVEZXRhaWxzOiBldmVudD8ubGlmZWN5Y2xlX2RldGFpbHMsXHJcbiAgICAgIHN0YXJ0RnJvbTogTnVtYmVyKGV2ZW50Py5zdGFydF9vZl9kYXlfdXRjKSxcclxuICAgICAgdGltZUluMjRIcjogZXZlbnQuZnJlcXVlbmN5X3RpbWUsXHJcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXMsXHJcbiAgICAgIHN0YXJ0RGF0ZTogTnVtYmVyKGV2ZW50Py5zdGFydF9vZl9kYXlfdXRjKSxcclxuICAgICAgcmVwb3J0SWQ6IGV2ZW50Py5vbl9jb21wbGV0aW9uX29mWzBdID8/IDAsXHJcbiAgICAgIHRpbWVJbjEyaHI6IHRoaXMuZnJlcXVlbmN5U2VydmljZS50aW1lSW4xMihldmVudC5mcmVxdWVuY3lfdGltZSAhPSAnJyA/IGV2ZW50LmZyZXF1ZW5jeV90aW1lIDogJzIzOjU5OjAwJylcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZyZXF1ZW5jeURhdGEoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBmcmVxdWVuY3lQb3B1bGF0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5wYXR0ZXJuID0gZXZlbnQ/LmZyZXF1ZW5jeV9kZXRhaWxzO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmZhaWxlZFRpbWUgPSBldmVudD8uZnJlcXVlbmN5X3RpbWU7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMud2luZG93ID0gZXZlbnQ/LnJlbWluZGVyX2JlZm9yZV9kYXlzO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmZhaWxlZCA9IGV2ZW50Py5mYWlsZWRfYWZ0ZXJfZGF5cztcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5saWZlY3ljbGUgPSBldmVudD8ubGlmZWN5Y2xlX2RldGFpbHM7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuc3RhcnREYXRlID0gZXZlbnQ/LnN0YXJ0X29mX2RheV91dGM7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuc2VsZWN0ZWRSZXBvcnQgPSBldmVudD8ub25fY29tcGxldGlvbl9vZlswXSA/PyAwO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmRhdGVPZk1vZGlmaWVkID0gZXZlbnQ/LmRvbV91dGM7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuY29udGludW91c19mYWlsZWRfZGF5cyA9IGV2ZW50Py5jb250aW51b3VzX2ZhaWxlZF9kYXlzO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IGV2ZW50Py5wbGFjZWhvbGRlcjtcclxuICB9XHJcblxyXG4gIGZyZXF1ZW5jeURhdGEoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaW52YWxpZFR5cGUgPT09ICd3aGVuJykge1xyXG4gICAgICB0aGlzLmludmFsaWRUeXBlID0gJyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgPSBldmVudC5wYXR0ZXJuO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVtaW5kZXJfYmVmb3JlX2RheXMgPSAoZXZlbnQuY2FzZSA9PT0gXCJkYWlseVwiKSA/IDAgOiBldmVudC53aW5kb3dcclxuICAgIC8vdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVtaW5kZXJfYmVmb3JlX2RheXMgPSBldmVudC53aW5kb3c7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mYWlsZWRfYWZ0ZXJfZGF5cyA9IGV2ZW50LmZhaWxlZEFmdGVyO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZmFpbGVkX3RpbWVfdXRjID0gZXZlbnQuZmFpbGVkX3RpbWVfdXRjO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ubGlmZWN5Y2xlRGV0YWlscyA9IGV2ZW50LmxpZmVjeWNsZURldGFpbHM7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXBvcnRJZCA9IGV2ZW50LnJlcG9ydElkID8/IDA7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5zdGFydERhdGUgPSBldmVudC5zdGFydEZyb207XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS50aW1lSW4yNEhyID0gZXZlbnQudGltZUluMjRIcjtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSBldmVudC5jb250aW51b3VzX2ZhaWxlZF9kYXlzO1xyXG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdmcmVxdWVuY3knLCBmYWxzZSk7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBmcmVxdWVuY3lfZGV0YWlsczogZXZlbnQucGF0dGVybixcclxuICAgICAgZnJlcXVlbmN5X3RpbWU6IGV2ZW50LnRpbWVJbjEyaHIsXHJcbiAgICAgIHJlbWluZGVyX2JlZm9yZV9kYXlzOiBldmVudC53aW5kb3csXHJcbiAgICAgIGZhaWxlZF9hZnRlcl9kYXlzOiBldmVudC5mYWlsZWRBZnRlcixcclxuICAgICAgbGlmZWN5Y2xlX2RldGFpbHM6IGV2ZW50LmxpZmVjeWNsZURldGFpbHMsXHJcbiAgICAgIHN0YXJ0X29mX2RheV91dGM6IGV2ZW50LnN0YXJ0RnJvbSxcclxuICAgICAgb25fY29tcGxldGlvbl9vZjogW2V2ZW50LnJlcG9ydElkXSxcclxuICAgICAgZG9tX3V0YzogTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCksXHJcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXMsXHJcbiAgICAgIHBsYWNlaG9sZGVyOiBldmVudC5wbGFjZWhvbGRlclxyXG4gICAgfTtcclxuICAgIHRoaXMuZnJlcXVlbmN5UG9wdWxhdGlvbihwYXlsb2FkKTtcclxuICB9XHJcblxyXG4gIGNoZWNrQmxhbmsoZGF0YTogc3RyaW5nKSB7XHJcbiAgICBpZiAoZGF0YSkge1xyXG4gICAgICBsZXQgdGV4dCA9IGRhdGE7XHJcbiAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL1xcJm5ic3A7L2csICcnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gLyoqXHJcbiAgKiBJdCB0YWtlcyBhIHN0cmluZyBhbmQgcmV0dXJucyBhIHN0cmluZy5cclxuICAqIEBwYXJhbSB7YW55fSByZXMgLSBhbnkgPSB7XHJcbiAgKi9cclxuICBnZXRGcmVxdWVuY3lQbGFjZWhvbGRlcihyZXM6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHJlcy5mcmVxdWVuY3lfZGV0YWlscykge1xyXG4gICAgICAgIGNvbnN0IGZyZXF1ZW5jeURldGFpbHMgPSByZXM/LmZyZXF1ZW5jeV9kZXRhaWxzLnNwbGl0KCd+Jyk7XHJcbiAgICAgICAgY29uc3QgZnJlcXVlbmN5VGltZSA9IHJlcz8uZnJlcXVlbmN5X3RpbWUgPT09ICcwMDowMDowMCcgPyAnMTI6MDAgYW0nIDogdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLnRpbWVJbjEyKHJlcz8uZnJlcXVlbmN5X3RpbWUpO1xyXG4gICAgICAgIHN3aXRjaCAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1swXSkpIHtcclxuICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgdGhpcy5nZXREYWlseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHMsIGZyZXF1ZW5jeVRpbWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgdGhpcy5nZXRXZWVrbHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TW9udGhseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHMsIGZyZXF1ZW5jeVRpbWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgNzpcclxuICAgICAgICAgICAgdGhpcy5nZXRRdWFydGVybHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDk6XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Qmlhbm51YWxQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0WWVhcmx5UGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlscywgZnJlcXVlbmN5VGltZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZGF0ZU9iamVjdCA9IG5ldyBEYXRlKG1vbWVudChmcmVxdWVuY3lEZXRhaWxzWzFdICsgJy0nICsgZnJlcXVlbmN5RGV0YWlsc1syXSArICctJyArIGZyZXF1ZW5jeURldGFpbHNbM10gKyAnIDAwOjAwOjAwJywgJ1lZWVktTU0tREQgSEg6bW06c3MnKS51bml4KCkgKiAxMDAwKTtcclxuICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gICAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxyXG4gICAgICAgICAgICAgICAgJ09uZSBUaW1lICcgKyBkYXRlT2JqZWN0LmdldERhdGUoKSArICcgJyArIHRoaXMuc2hvcnRNb250aFtkYXRlT2JqZWN0LmdldE1vbnRoKCldICsgJyAnICsgZGF0ZU9iamVjdC5nZXRGdWxsWWVhcigpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgODpcclxuICAgICAgICAgICAgdGhpcy5nZXRSYW5kb21QbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAxMDpcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnWW91IGhhdmUgc2VsZWN0ZWQgYW4gb25nb2luZyBmcmVxdWVuY3kuJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgdGhpcy5nZXRPbkNvbXBsZXRpb25PZihmcmVxdWVuY3lEZXRhaWxzLCByZXM/Lm9uX2NvbXBsZXRpb25fb2ZbMF0pO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuLyoqXHJcbiAqIEl0IGdldHMgdGhlIGZyZXF1ZW5jeSBkZXRhaWxzIGFuZCByZXBvcnQgaWQsIHRoZW4gaXQgc2V0cyB0aGUgZnJlcXVlbmN5IHBsYWNlaG9sZGVyIHRvIHRoZSBmcmVxdWVuY3lcclxuICogZGV0YWlscyBhbmQgdGhlbiBpdCBnZXRzIHRoZSBvbiBjb21wbGV0aW9uIG9mIHJlc3BvbnNpYmlsaXR5IGFuZCBzZXRzIHRoZSBmcmVxdWVuY3kgcGxhY2Vob2xkZXIgdG9cclxuICogdGhlIGZyZXF1ZW5jeSBkZXRhaWxzIGFuZCB0aGUgcmVwb3J0IG5hbWUuXHJcbiAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lEZXRhaWxzIC0gWzBdID0mZ3Q7IFwiMVwiXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByZXBvcnRJZCAtIG51bWJlclxyXG4gKi9cclxuICBnZXRPbkNvbXBsZXRpb25PZihmcmVxdWVuY3lEZXRhaWxzOiBhbnksIHJlcG9ydElkOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBmcmVxdWVuY3lEZXRhaWxzWzNdICsgJyAnICsgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID4gMSA/ICdkYXlzJyA6ICdkYXknKSArICcgYWZ0ZXIgY29tcGxldGlvbiBvZiAnO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLmdldE9uQ29tcGxldGlvbk9mUmVzcG9uc2liaWxpdHkoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlcG9ydERldGFpbHMgPSByZXMuZmluZCgoZWxlOiBhbnkpID0+IGVsZS5SZXBvcnRJZCA9PSByZXBvcnRJZCk7XHJcbiAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBmcmVxdWVuY3lEZXRhaWxzWzNdICsgJyAnICsgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID4gMSA/ICdkYXlzJyA6ICdkYXknKSArICcgYWZ0ZXIgY29tcGxldGlvbiBvZiAnICsgKHJlcG9ydERldGFpbHMgPyByZXBvcnREZXRhaWxzLnJlcG9ydF9uYW1lIDogJycpO1xyXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIFwiSWYgdGhlIGZyZXF1ZW5jeURldGFpbHNbM10gaXMgMSwgdGhlbiBzZXQgdGhlIGZyZXF1ZW5jeVBsYWNlaG9sZGVyIHRvICdEYWlseSBieSAnICsgZnJlcXVlbmN5VGltZSxcclxuICogb3RoZXJ3aXNlIGlmIGZyZXF1ZW5jeURldGFpbHNbM10gaXMgZ3JlYXRlciB0aGFuIDEsIHRoZW4gc2V0IHRoZSBmcmVxdWVuY3lQbGFjZWhvbGRlciB0byAnRXZlcnkgJyArXHJcbiAqIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pICsgJyBkYXlzIGJ5ICcgKyBmcmVxdWVuY3lUaW1lLlwiXHJcbiAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lEZXRhaWxzIC0gWzAsIDAsIDAsIDFdXHJcbiAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lUaW1lIC0gXCIxMjowMCBBTVwiXHJcbiAqL1xyXG4gIGdldERhaWx5UGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlsczogYW55LCBmcmVxdWVuY3lUaW1lOiBhbnkpIHtcclxuICAgIHtcclxuICAgICAgZnJlcXVlbmN5RGV0YWlscyA9IGZyZXF1ZW5jeURldGFpbHMubWFwKE51bWJlcik7XHJcbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSA9PT0gMSkge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnRGFpbHkgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgPiAxKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdFdmVyeSAnICsgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgKyAnIGRheXMgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4vKipcclxuICogSXQgdGFrZXMgYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIG51bWJlcnMgYW5kIHJldHVybnMgYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzLlxyXG4gKlxyXG4gKiBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIG51bWJlcnMsIGxpa2UgdGhpczpcclxuICpcclxuICogZ2V0V2Vla2x5UGxhY2Vob2xkZXIoW1wiMVwiLFwiMiwzLDQsNSw2LDdcIixcIjFcIixcIjFcIl0sIFwiMTA6MDAgQU1cIilcclxuICpcclxuICogVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzLCBsaWtlIHRoaXM6XHJcbiAqXHJcbiAqIFwiRXZlcnkgTW9uZGF5LFR1ZXNkYXksV2VkbmVzZGF5LFRodXJzZGF5LEZyaWRheSxTYXR1cmRheSBieSAxMDowMCBBTVwiPC9jb2RlPlxyXG4gKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5RGV0YWlscyAtIFtcIjFcIiwgXCIxLDIsMyw0LDVcIiwgXCJcIiwgXCIxXCIsIFwiXCJdXHJcbiAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lUaW1lIC0gXCIxMDowMCBBTVwiXHJcbiAqL1xyXG4gIGdldFdlZWtseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkRGF5ID0gZnJlcXVlbmN5RGV0YWlsc1sxXS5zcGxpdCgnLCcpLm1hcCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLmRheU5hbWVbcGFyc2VJbnQoZWxlKSAtIDFdO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSA9PT0gMSkge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnRXZlcnkgJyArIHNlbGVjdGVkRGF5LmpvaW4oKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID09PSAyKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdFdmVyeSBhbHRlcm5hdGUgJyArIHNlbGVjdGVkRGF5LmpvaW4oKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID09PSAzKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdFdmVyeSAzcmQgJyArIHNlbGVjdGVkRGF5LmpvaW4oKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID4gMykge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnRXZlcnkgJyArIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3RoICcgKyBzZWxlY3RlZERheS5qb2luKCkgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIEl0IHRha2VzIGEgc3RyaW5nIG9mIGNvbW1hIHNlcGFyYXRlZCBudW1iZXJzLCBjb252ZXJ0cyB0aGVtIHRvIG1vbnRoIG5hbWVzLCBhbmQgdGhlbiBhZGRzIHRoZW0gdG8gYVxyXG4gKiBzZW50ZW5jZS5cclxuICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbXCIxXCIsIFwiMVwiLCBcIjEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyXCJdXHJcbiAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lUaW1lIC0gXCIxMDowMCBBTVwiXHJcbiAqL1xyXG4gIGdldE1vbnRobHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzOiBhbnksIGZyZXF1ZW5jeVRpbWU6IGFueSkge1xyXG4gICAge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZE1vbnRoID0gZnJlcXVlbmN5RGV0YWlsc1syXS5zcGxpdCgnLCcpLm1hcCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGVsZSkgLSAxXTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMSkge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnMXN0IG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcybmQgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzNyZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjEgfHwgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMxKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3N0IG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMikge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICduZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAncmQgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPiAzKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3RoIG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuIC8qKlxyXG4gICogSWYgdGhlIGZyZXF1ZW5jeURldGFpbHNbMV0gaXMgMSwgMiwgMywgMjEsIDIyLCAyMywgb3IgZ3JlYXRlciB0aGFuIDMsIHRoZW4gc2V0IHRoZVxyXG4gICogZnJlcXVlbmN5UGxhY2Vob2xkZXIgdG8gYSBzdHJpbmcgdGhhdCBpbmNsdWRlcyB0aGUgZnJlcXVlbmN5RGV0YWlsc1sxXSBhbmQgdGhlIGZyZXF1ZW5jeURldGFpbHNbMl1cclxuICAqIGFuZCB0aGUgZnJlcXVlbmN5VGltZS5cclxuICAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lEZXRhaWxzIC0gW1wiM1wiLCBcIjFcIiwgXCIxLDIsM1wiXVxyXG4gICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeVRpbWUgLSBcIjEwOjAwIEFNXCJcclxuICAqL1xyXG4gIGdldFF1YXJ0ZXJseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHF1YXJ0ZXJseSA9IFsnSmFudWFyeSwgQXByaWwsIEp1bHksIE9jdG9iZXInLCAnRmVicnVhcnksIE1heSwgQXVndXN0LCBOb3ZlbWJlcicsICcgTWFyY2gsIEp1bmUsIFNlcHRlbWJlciwgRGVjZW1iZXInXTtcclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcxc3Qgb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcybmQgb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICczcmQgb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMSB8fCBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMzEpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAnc3Qgb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMikge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICduZCBvZiBldmVyeSAnICsgcXVhcnRlcmx5W3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0uc3BsaXQoJywnKVswXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIzKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3JkIG9mIGV2ZXJ5ICcgKyBxdWFydGVybHlbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXS5zcGxpdCgnLCcpWzBdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA+IDMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAndGggb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBhIHN0cmluZyBvZiBjb21tYSBzZXBhcmF0ZWQgbnVtYmVycyBhbmQgcmV0dXJucyBhIHN0cmluZyBvZiBjb21tYSBzZXBhcmF0ZWQgbW9udGggbmFtZXMuXHJcbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbXCIxXCIsIFwiMVwiLCBcIjEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyXCJdXHJcbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeVRpbWUgLSBcIjEwOjAwIEFNXCJcclxuICAgKi9cclxuICBnZXRCaWFubnVhbFBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkTW9udGggPSBmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJykubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZWxlKSAtIDFdO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcxc3Qgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzJuZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMykge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnM3JkIG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMSB8fCBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMzEpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAnc3Qgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIyKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ25kIG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMykge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICdyZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA+IDMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAndGggb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gLyoqXHJcbiAgKiBJZiB0aGUgZnJlcXVlbmN5RGV0YWlsc1sxXSBpcyBsZXNzIHRoYW4gMiwgdGhlbiB0aGUgZnJlcXVlbmN5UGxhY2Vob2xkZXIgaXMgc2V0IHRvIHRoZSAxc3QsIDJuZCxcclxuICAqIDNyZCwgb3IgbnRoIG9mIGV2ZXJ5IG1vbnRoIGJ5IGZyZXF1ZW5jeVRpbWUuXHJcbiAgKlxyXG4gICogSWYgdGhlIGZyZXF1ZW5jeURldGFpbHNbMV0gaXMgZ3JlYXRlciB0aGFuIDEsIHRoZW4gdGhlIGZyZXF1ZW5jeVBsYWNlaG9sZGVyIGlzIHNldCB0byB0aGUgMXN0LCAybmQsXHJcbiAgKiAzcmQsIG9yIG50aCBvZiBldmVyeSBtb250aCwgSW50ZXJ2YWw6IGV2ZXJ5IHllYXJTZXF1ZW5jZSB5ZWFycyBieSBmcmVxdWVuY3lUaW1lLlxyXG4gICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbXCJZZWFybHlcIiwgXCIxXCIsIFwiMVwiLCBcIjFcIl1cclxuICAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lUaW1lIC0gXCIxMDowMCBBTVwiXHJcbiAgKi9cclxuICBnZXRZZWFybHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzOiBhbnksIGZyZXF1ZW5jeVRpbWU6IGFueSkge1xyXG4gICAge1xyXG4gICAgICBjb25zdCB5ZWFyU2VxdWVuY2UgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSA+IDAgPyBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSA6IDE7XHJcbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA8IDIpIHtcclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDEpIHtcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnMXN0IG9mIGV2ZXJ5ICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMikge1xyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcybmQgb2YgZXZlcnkgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzNyZCBvZiBldmVyeSAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPiAzKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAndGggb2YgZXZlcnkgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzMSB8fCBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjEpIHtcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICdzdCBvZiBldmVyeSAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIyKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAnbmQgb2YgZXZlcnkgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMykge1xyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3JkIG9mIGV2ZXJ5ICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPiAxKSB7XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAxKSB7XHJcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcxc3QgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJywgSW50ZXJ2YWw6IGV2ZXJ5ICcgKyB5ZWFyU2VxdWVuY2UgKyAnIHllYXJzIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIpIHtcclxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzJuZCAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnLCBJbnRlcnZhbDogZXZlcnkgJyArIHllYXJTZXF1ZW5jZSArICcgeWVhcnMgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMykge1xyXG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnM3JkICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcsIEludGVydmFsOiBldmVyeSAnICsgeWVhclNlcXVlbmNlICsgJyB5ZWFycyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID4gMykge1xyXG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxyXG4gICAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICd0aCBvZiAgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJywgSW50ZXJ2YWw6IGV2ZXJ5ICcgKyB5ZWFyU2VxdWVuY2UgKyAnIHllYXJzIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMxIHx8IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMSkge1xyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3N0IG9mIGV2ZXJ5ICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjIpIHtcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICduZCBvZiBldmVyeSAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIzKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAncmQgb2YgZXZlcnkgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4vKipcclxuICogSXQgdGFrZXMgYSBmcmVxdWVuY3lEZXRhaWxzIGFycmF5IGFuZCBhIGZyZXF1ZW5jeVRpbWUgYXJyYXkgYW5kIHJldHVybnMgYSBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lEZXRhaWxzIC0gWzQsMSwxLDFdXHJcbiAqL1xyXG4gIGdldFJhbmRvbVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XHJcbiAgICBjb25zdCBxdWFydGVybHkgPSBbJ0phbnVhcnksIEFwcmlsLCBKdWx5LCBPY3RvYmVyJywgJ0ZlYnJ1YXJ5LCBNYXksIEF1Z3VzdCwgTm92ZW1iZXInLCAnIE1hcmNoLCBKdW5lLCBTZXB0ZW1iZXIsIERlY2VtYmVyJ107XHJcbiAgICB7XHJcbiAgICAgIHN3aXRjaCAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkpIHtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ0V2ZXJ5IHdlZWsgZm9yICcgKyBmcmVxdWVuY3lEZXRhaWxzWzNdICsgJyByYW5kb20gaW5zdGFuY2VzJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxyXG4gICAgICAgICAgICAnIEV2ZXJ5ICcgK1xyXG4gICAgICAgICAgICBmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJykubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZWxlKSAtIDFdO1xyXG4gICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogYWxpZ25cclxuICAgICAgICAgICAgfSkgK1xyXG4gICAgICAgICAgICAnIGZvciAnICtcclxuICAgICAgICAgICAgZnJlcXVlbmN5RGV0YWlsc1szXSArXHJcbiAgICAgICAgICAgICcgcmFuZG9tIGluc3RhbmNlcyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ0V2ZXJ5ICcgKyBxdWFydGVybHlbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXS5zcGxpdCgnLCcpWzBdKSAtIDFdICsgJyBmb3IgJyArIGZyZXF1ZW5jeURldGFpbHNbM10gKyAnIHJhbmRvbSBpbnN0YW5jZXMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdFdmVyeSB5ZWFyIGZvciAnICsgZnJlcXVlbmN5RGV0YWlsc1szXSArICcgcmFuZG9tIGluc3RhbmNlcyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4vKipcclxuICogXCJXaGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgZWRpdCBidXR0b24sIHRoZSBlZGl0IGJ1dHRvbiBpcyBoaWRkZW4gYW5kIHRoZSBpbnB1dCBmaWVsZCBpcyBzaG93bi5cclxuICogV2hlbiB0aGUgdXNlciBjbGlja3MgdGhlIGlucHV0IGZpZWxkLCB0aGUgaW5wdXQgZmllbGQgaXMgaGlkZGVuIGFuZCB0aGUgZWRpdCBidXR0b24gaXMgc2hvd24uXCJcclxuICogQHBhcmFtIHthbnl9IGV2ZW50IC0gYW55IC0gdGhlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBmdW5jdGlvblxyXG4gKi9cclxuICBvbkVkaXRXaGF0KGV2ZW50OiBhbnkpIHtcclxuXHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7IC8vIHRoaXMgd2lsbCBtYWtlIHRoZSBleGVjdXRpb24gYWZ0ZXIgdGhlIGFib3ZlIGJvb2xlYW4gaGFzIGNoYW5nZWRcclxuICAgICAgdGhpcy5pc0VkaXRXaGF0ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMud2hhdElucHV0Py5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuIC8qKlxyXG4gICpcclxuICAqIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIHBhcmFtZXRlciBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBzdHJpbmdzLlxyXG4gICogQHBhcmFtIHthbnl9IFtyZXNdIC0gaXMgdGhlIHJlc3BvbnNlIGZyb20gdGhlIEFQSVxyXG4gICovXHJcbiAgZ2V0RWRpdE1vcmVPcHRpb25zKHJlcz86IGFueSkge1xyXG4gICAgbGV0IGNoZWNrZWRNb3JlT3B0aW9ucyA9IFtdXHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub2JqZWN0aXZlICE9PSAnJykge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnT0JKRUNUSVZFJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuT0JKRUNUSVZFID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdSSVNLX0NMQVNTSUZJQ0FUSU9OJyk7XHJcbiAgICB0aGlzLm1vcmVPcHRpb25zLlJJU0tfQ0xBU1NJRklDQVRJT04gPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdQUk9HUkFNJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuUFJPR1JBTSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZXZpZGVuY2VSZXF1aXJlZCB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5mb3JtYXRSZXF1aXJlZCkge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnRk9STUFURV9FVklERU5DRScpO1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zLkZPUk1BVEVfRVZJREVOQ0UgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdSQycpO1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zLlJDID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ0NIRUNLUE9JTlRTJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuQ0hFQ0tQT0lOVFMgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggPiAwIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2VyPy5saXN0Py5sZW5ndGggPiAwICApIHtcclxuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ1JFVklFV0VSJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuUkVWSUVXRVIgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8ubGVuZ3RoID4gMCB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0Py5sZW5ndGggPiAwIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lmxpc3Q/Lmxlbmd0aCA+IDAgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdD8ubGVuZ3RoID4gMCkge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnT1ZFUlNFRVInKTtcclxuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5PVkVSU0VFUiA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3N1cmFuY2VMaXN0Py5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdBU1NVUkFOQ0UnKTtcclxuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5BU1NVUkFOQ0UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXF1aXJlc0F1ZGl0TGlzdD8ubGVuZ3RoID4gMCkge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnUkVRVUlSRVNfQVVESVQnKTtcclxuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5SRVFVSVJFU19BVURJVCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlcy5xdWVzdGlvbm5haXJlX3R5cGUgPT09ICdhc3Nlc3NtZW50Jykge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnQVNTRVNTTUVOVCcpO1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zLkFTU0VTU01FTlQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXMucXVlc3Rpb25uYWlyZV90eXBlID09PSAnYXNzZXNzbWVudF9jaGVja3BvaW50Jykge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnQ0hFQ0tQT0lOVFNfTkVXJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuQ0hFQ0tQT0lOVFNfTkVXID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBvcHVsYXRlT3B0aW9uLmVtaXQoY2hlY2tlZE1vcmVPcHRpb25zKTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRm9ybWF0ICYgRXZpZGVuY2VcclxuICB0ZXN0RnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZS50cmltKCkgIT09ICcnICYmIHRoaXMuaXNFZGl0V2hhdCA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5pc0VkaXRXaGF0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5kZXNjcmlwdGlvbiA9PSAnPGJyPicpIHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZGVzY3JpcHRpb24gPSAnJztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vYmplY3RpdmUgPT0gJzxicj4nKSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm9iamVjdGl2ZSA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV2aWV3ZXJUeXBlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5zZXF1ZW50aWFsV29ya2Zsb3cgPSBldmVudCA9PT0gJ1NFUVVFTlRJQUwnID8gdHJ1ZSA6IGZhbHNlXHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZFNhbXBsZURhdGEoZXZlbnQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZFNhbXBsZSA9IGV2ZW50O1xyXG4gICAgdGhpcy50ZW1wQ2hlY2tWYWx1ZSA9IGV2ZW50O1xyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBJdCBwb3B1bGF0ZXMgYSBsaXN0IG9mIGFzc3VyYW5jZSBjYXRlZ29yaWVzIGJhc2VkIG9uIHRoZSB0ZXN0IHBsYW4gY2F0ZWdvcnkgc2VsZWN0ZWQuXHJcbiAqIEBwYXJhbSB7YW55fSB0ZXN0UGxhbkNhdGVnb3J5IC0gYW55XHJcbiAqL1xyXG4gIHBvcHVsYXRlQXNzdXJhbmNlTGlzdCh0ZXN0UGxhbkNhdGVnb3J5OiBhbnkpIHtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc3VyYW5jZSA9IHRoaXMuc2V0TGlzdCh0aGlzLmFzc3VyYW5jZUNhdGVnb3JpZXNMaXN0LCBbdGVzdFBsYW5DYXRlZ29yeT8uY2F0ZWdvcnlfaWRdLCAnY2F0ZWdvcnlfaWQnKTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmF1ZGl0X2NhdGVnb3J5X2RldGFpbHMgPSB0ZXN0UGxhbkNhdGVnb3J5O1xyXG4gICAgaWYgKHRlc3RQbGFuQ2F0ZWdvcnkuc2FtcGxlKSB7XHJcbiAgICAgIHRoaXMuaXNTYW1wbGUgPSB0cnVlXHJcbiAgICAgIHRoaXMuc2FtcGxlVmFsdWUgPSB0ZXN0UGxhbkNhdGVnb3J5LnNhbXBsZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNhbXBsZSA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRlc3RQbGFuQ2F0ZWdvcnkucGVyY2VudGFnZSkge1xyXG4gICAgICB0aGlzLmlzU2FtcGxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zYW1wbGVQZXJjZW50YWdlID0gdGVzdFBsYW5DYXRlZ29yeS5wZXJjZW50YWdlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU2FtcGxlID0gMTtcclxuICAgIH1cclxuICAgIHRoaXMudGVtcENoZWNrVmFsdWUgPSB0aGlzLnNlbGVjdGVkU2FtcGxlO1xyXG4gICAgdGhpcy5zZW5kQXVkaXRSZW1pbmRlcnNWYWx1ZSA9IHRlc3RQbGFuQ2F0ZWdvcnkuZnJlcXVlbmN5X3BhdHRlcm4gPyBwYXJzZUludCh0ZXN0UGxhbkNhdGVnb3J5LmZyZXF1ZW5jeV9wYXR0ZXJuLnNwbGl0KCd+JylbMl0pIDogMjtcclxuICAgIHRoaXMuYXVkaXRUaW1lID0gbW9tZW50KHRlc3RQbGFuQ2F0ZWdvcnk/LmZyZXF1ZW5jeV90aW1lLCAnSEg6bW06c3MnKS5mb3JtYXQoJ0hIOm1tIGEnKTtcclxuXHJcbiAgfVxyXG5cclxuICAvL29uIHNhbXBsZSB0b2dnbGUgb24vb2ZmXHJcbiAgY2hlY2tJbnB1dFZhbHVlKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCBrZXkgPSBldmVudC5jaGFyQ29kZTsgIC8vICAgICAgICAga2V5ID0gZXZlbnQua2V5Q29kZTsgIChCb3RoIGNhbiBiZSB1c2VkKVxyXG4gICAgcmV0dXJuICgoa2V5ID4gNDcgJiYga2V5IDwgNTgpIHx8IGtleSA9PSA0NSk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIHN3aXRjaEVuYWJsZShldmVudDogYm9vbGVhbikge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTYW1wbGUgPSB0aGlzLnRlbXBDaGVja1ZhbHVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNhbXBsZSA9IC0xXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUT0RPOiAgc2VsZWN0IEFzc2Vzc21lbnQgbGlzdCBhbmQgc2V0IGlkIHRvIHBheWxvYWRcclxuICBvbkFzc2Vzc21lbnRTZWxlY3QoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5pc0Fzc2Vzc21lbnQgPSBmYWxzZTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQgPSBldmVudDtcclxuICB9XHJcbiAgLy8gVE9ETzogUG9wdWxhdGUgYXNzZXNzbWVudCBkYXRhIGZyb20gYWxyZWFkeSBzZWxlY3RlZCBkYXRhXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYXNzZXNzbWVudERldGFpbHMgOiBzZWxlY3RlZCBhc3Nlc3NtZW50IGRldGFpbHMgbGlrZSBpdCdzIG9iamVjdCBpZCBhbmQgY2F0ZWdvcnlfaWRcclxuICAgKi9cclxuICBnZXRBc3Nlc3NtZW50RGV0YWlscyhhc3Nlc3NtZW50RGV0YWlsczogYW55LCB0eXBlPzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRBc3Nlc3NtZW50RGV0YWlsc0J5SUQoYXNzZXNzbWVudERldGFpbHMuYXNzZXNzbWVudF9pZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09ICdhc3Nlc3NtZW50Jykge1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNhdGVnb3J5RGV0YWlscyA9IHJlc1swXS5jYXRlZ29yeS5maW5kKChlbGU6IGFueSkgPT4gZWxlLl9pZCA9PSBhc3Nlc3NtZW50RGV0YWlscy5jYXRlZ29yeV9pZCk7XHJcbiAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLkFTU0VTU01FTlQgPSB0cnVlO1xyXG4gICAgICAgICAgY29uc3QgYXNzZXNzbWVudERhdGEgPSB7XHJcbiAgICAgICAgICAgIGNhdGVnb3J5X2lkOiBhc3Nlc3NtZW50RGV0YWlscy5jYXRlZ29yeV9pZCxcclxuICAgICAgICAgICAgYXNzZXNzbWVudF9pZDogYXNzZXNzbWVudERldGFpbHMuYXNzZXNzbWVudF9pZCxcclxuICAgICAgICAgICAgYXNzZXNzbWVudERldGFpbHM6IHtcclxuICAgICAgICAgICAgICBpZDogYXNzZXNzbWVudERldGFpbHMuYXNzZXNzbWVudF9pZCxcclxuICAgICAgICAgICAgICBhc3Nlc3NtZW50X25hbWU6IHJlc1swXS5hc3Nlc3NtZW50X25hbWUsXHJcbiAgICAgICAgICAgICAgcXVlc3Rpb25zOiByZXNbMF0ucXVlc3Rpb25zQ291bnRcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2F0ZWdvcnlfZGV0YWlsczogY2F0ZWdvcnlEZXRhaWxzXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3Nlc3NtZW50ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhc3Nlc3NtZW50RGF0YSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLkNIRUNLUE9JTlRTX05FVyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnBvc3RBc3Nlc3NtZW50KHsgYXNzZXNzbWVudERldGFpbHM6IHJlc1swXS5xdWVzdGlvbnMgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgb25SZW1vdmVDaGVja3BvaW50cyh0eXBlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMub25SZW1vdmluZ0NoZWNrcG9pbnQuZW1pdCh0eXBlKVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ2hlY2twb2ludCgpIHtcclxuICAgIHRoaXMubW9yZU9wdGlvbnMuQ0hFQ0tQT0lOVFMgPSBmYWxzZTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzID0gW107XHJcbiAgfVxyXG5cclxuICAvKipcclxuICpcclxuICogQHBhcmFtIGV2ZW50IEFzc2Vzc21lbnQgZGV0YWlsc1xyXG4gKi9cclxuICBwb3N0QXNzZXNzbWVudChldmVudDogYW55KSB7XHJcblxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ubmV3X2NoZWNrcG9pbnRzID0gZXZlbnQuYXNzZXNzbWVudERldGFpbHM7XHJcbiAgICB0aGlzLmNoZWNrcG9pbnRDb3VudCA9IGV2ZW50LmFzc2Vzc21lbnREZXRhaWxzLmVsZW1lbnRzPy5sZW5ndGg7XHJcbiAgICB0aGlzLmNoZWNrcG9pbnRDb3VudFVwZGF0ZWQuZW1pdCh0aGlzLmNoZWNrcG9pbnRDb3VudCk7XHJcbiAgICB0aGlzLnNldElzVXBsb2FkZWQoZmFsc2UpXHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0SXNVcGxvYWRlZChldmVudDogYW55KSB7XHJcbiAgICBpZiAoIWV2ZW50KSB0aGlzLmFjdGl2ZURlc2VsZWN0b3IoKVxyXG4gICAgdGhpcy5hdXRoU2VydmljZS5wcmV2aWV3UGFuZWwubmV4dChldmVudCk7XHJcblxyXG4gIH1cclxuXHJcbiAgY2hlY2tEZWZhdWx0UHJvZ3JhbU9uUmVtb3ZlKHByb2dyYW06IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coJz09PT4xMScsdGhpcy5zZWxlY3RlZFByb2dyYW0sIHByb2dyYW0pXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5saW5rZWRQcm9ncmFtPy5maW5kSW5kZXgoIChlbDogYW55KSA9PiBlbD8uY2F0ZWdvcnlfaWQgPT09IHByb2dyYW0/LmNhdGVnb3J5X2lkKTtcclxuICAgIGlmKGluZGV4ICE9PSAtMSl7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5saW5rZWRQcm9ncmFtPy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICBjb25zdCB1cGRhdGVkQ2F0ZWdvcmllcyA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5jYXRlZ29yeT8uZmlsdGVyKChlbDogYW55KSA9PiAhKGVsID09PSBwcm9ncmFtPy5jYXRlZ29yeV9pZCB8fCBwcm9ncmFtPy5jaGlsZF9pZD8uaW5jbHVkZXMoZWwpKSk7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5ID0gdXBkYXRlZENhdGVnb3JpZXM7XHJcbiAgICB9XHJcbiAgICAvLyBpZih0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbSAmJiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uY2F0ZWdvcnlfaWQgPT09IHByb2dyYW0/LmNhdGVnb3J5X2lkKSB7XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKCc9PT0+Jyx0aGlzLnNlbGVjdGVkUHJvZ3JhbSwgcHJvZ3JhbSlcclxuICAgIC8vICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkgPSBbXTtcclxuICAgIC8vICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbSA9IFtdO1xyXG4gICAgLy8gICB0aGlzLmZpbHRlckxpc3RzQWNjb3JkaW5nVG9Qcm9ncmFtKCk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYW4gYXJyYXkgb2YgbnVtYmVycyBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB1bmlxdWUgbnVtYmVycy5cclxuICAgKiBAcGFyYW0ge2FueX0gYXJyYXkgLSBUaGUgYXJyYXkgeW91IHdhbnQgdG8gZ2V0IHRoZSB1bmlxdWUgdmFsdWVzIGZyb20uXHJcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcy5cclxuICAgKi9cclxuICBnZXRVbmlxdWVJZHMoYXJyYXk6YW55KXtcclxuICAgIGNvbnN0IHVuaXF1ZSA9IFsuLi5uZXcgU2V0KGFycmF5KV07XHJcbiAgICByZXR1cm4gdW5pcXVlO1xyXG4gIH1cclxuXHJcbiAgb3BlbkFzc2lnbmVlQ2hhbmdlQ29uZmlybWF0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy53aG9DYW5Db21wbGV0ZSA9IFwiQU5ZX09ORVwiXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMud2hvQ2FuQ29tcGxldGUgPSAnJztcclxuICAgICAgdGhpcy5hc3NpZ25lZVR5cGVDaGFuZ2UuZW1pdCh0cnVlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBJZiB0aGUgbW9kZSBpcyBFRElULCBlbWl0IHRoZSBldmVudC5cclxuICogQHBhcmFtIHthbnl9IGV2ZW50IC0gYW55IC0gdGhlIGV2ZW50IHRoYXQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBhIHJhZGlvIGJ1dHRvblxyXG4gKi9cclxuICBvblJldmlld2VyV29ya2Zsb3dDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93ID0gIGV2ZW50ID09PSAnc2VxdWVudGlhbCcgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgIGlmKHRoaXMubW9kZSA9PT0gJ0VESVQnICYmIHRoaXMuaGFzUmV2aWV3ZXIpIHtcclxuICAgICAgICB0aGlzLm9uUmV2aWV3ZXJUeXBlQ2hhbmdlLmVtaXQoZXZlbnQpO1xyXG4gICAgICB9XHJcblxyXG4gIH1cclxufVxyXG5cclxuIl19
2925
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctY29tcGxpYW5jZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi93b3JrZmxvdy1jb21wbGlhbmNlL3dvcmtmbG93LWNvbXBsaWFuY2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFbkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ25GLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQVV4RSxNQUFNLE9BQU8sMkJBQTJCO0lBeVN0QyxZQUNVLFdBQXdCLEVBQ3hCLHFCQUE0QyxFQUM1QyxnQkFBa0MsRUFDbEMsWUFBMEIsRUFDMUIsUUFBeUIsRUFDekIsVUFBdUIsRUFDdkIsY0FBK0I7UUFOL0IsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtR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LEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFdEQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLFNBQVMsMENBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEUsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLFNBQVMsMENBQUUsSUFBSSxDQUFDLENBQUM7UUFFdEUsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQUMsTUFBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsY0FBYywwQ0FBRSxJQUFJLENBQUMsQ0FBQTtRQUNsRixNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRSxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLGNBQWMsMENBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwSCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsTUFBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsU0FBUywwQ0FBRSxJQUFJLENBQUMsQ0FBQztRQUN6RSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLGVBQWUsMENBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuSCxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsTUFBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsU0FBUywwQ0FB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RSxDQUFDO1FBQzFCLElBQUksV0FBVyxHQUFRLEVBQUUsQ0FBQztRQUMxQixJQUFJLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztRQUMvQixJQUFJLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztRQUMvQixJQUFJLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdEQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRSxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsU0FBUywwQ0FBRSxJQUFJLENBQUMsQ0FBQztRQUN0RSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLGNBQWMsMENBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsSCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsU0FBUywwQ0FBRSxJQUFJLENBQUMsQ0FBQztRQUN0RSxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLGNBQWMsMENBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuSCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsTUFBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsU0FBUywwQ0FBRSxJQUFJLENBQUMsQ0FBQztRQUN4RSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLGVBQWUsMENBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwSCxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsTUFBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsU0FBUywwQ0FBRSxVQUFVLENBQUMsQ0FBQztRQUNqRixNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLGVBQWUsMENBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM3SCxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFNBQVMsQ0FBQyxDQUFBO1lBQ3JDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsU0FBUyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFDSCxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDL0IsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxZQUFZLENBQUMsQ0FBQztZQUNqRCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxZQUFZLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsWUFBWSxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUEsTUFBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQiwwQ0FBRSxTQUFTLDBDQUFFLElBQUksMENBQUUsTUFBTSxLQUFJLENBQUMsRUFBRTtZQUN6RCx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtTQUNwQztRQUVELGlCQUFpQixhQUFqQixpQkFBaUIsdUJBQWpCLGlCQUFpQixDQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQVMsRUFBQyxFQUFFO1lBQ3RDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsUUFBUSxDQUFDLENBQUE7UUFDeEMsQ0FBQyxDQUFDLENBQUE7UUFDRixTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDL0IsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsWUFBWSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFlBQVksQ0FBQyxDQUFBO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsa0JBQWtCLGFBQWxCLGtCQUFrQix1QkFBbEIsa0JBQWtCLENBQUUsT0FBTyxDQUFDLENBQUMsS0FBUyxFQUFDLEVBQUU7WUFDdkMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxRQUFRLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQTtRQUNGLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNsQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxZQUFZLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsWUFBWSxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFDSCxlQUFlLGFBQWYsZUFBZSx1QkFBZixlQUFlLENBQUUsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDckMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsWUFBWSxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBQ0YsaUJBQWlCLGFBQWpCLGlCQUFpQix1QkFBakIsaUJBQWlCLENBQUUsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDekMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxRQUFRLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUNILG9CQUFvQixhQUFwQixvQkFBb0IsdUJBQXBCLG9CQUFvQixDQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQzNDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsUUFBUSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUE7UUFDRix1QkFBdUIsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN4QyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDMUMsV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLGdCQUFnQixHQUFHLENBQUMsR0FBSSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUE7UUFDckQsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFJLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUNsRCxnQkFBZ0IsR0FBRyxDQUFDLEdBQUksSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRyxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQUEsSUFBSSxDQUFDLGlCQUFpQiwwQ0FBRSxhQUFhLENBQUE7UUFDMUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFBLElBQUksQ0FBQyxpQkFBaUIsMENBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLFFBQVEsQ0FBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsWUFBWSxDQUFDLE1BQUksV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLFFBQVEsQ0FBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsWUFBWSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUM7UUFDNUssSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFBLElBQUksQ0FBQyxpQkFBaUIsMENBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUEsdUJBQXVCLGFBQXZCLHVCQUF1Qix1QkFBdkIsdUJBQXVCLENBQUUsUUFBUSxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxZQUFZLENBQUMsTUFBSSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsUUFBUSxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxZQUFZLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQztRQUV6TCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMzQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsZUFBZSwwQ0FBRSxrQkFBa0IsMENBQUUsTUFBTSxJQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBQyxNQUFBLElBQUksQ0FBQyxlQUFlLDBDQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFTLEVBQUMsRUFBRSxDQUFBLENBQUMsQ0FBQyxDQUFBLGdCQUFnQixhQUFoQixnQkFBZ0IsdUJBQWhCLGdCQUFnQixDQUFFLFFBQVEsQ0FBQyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsUUFBUSxDQUFDLE1BQUksZ0JBQWdCLGFBQWhCLGdCQUFnQix1QkFBaEIsZ0JBQWdCLENBQUUsUUFBUSxDQUFDLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxRQUFRLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQTtZQUNoVCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQTtZQUMxRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQVMsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUEsZ0JBQWdCLGFBQWhCLGdCQUFnQix1QkFBaEIsZ0JBQWdCLENBQUUsUUFBUSxDQUFDLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxRQUFRLENBQUMsTUFBSSxnQkFBZ0IsYUFBaEIsZ0JBQWdCLHVCQUFoQixnQkFBZ0IsQ0FBRSxRQUFRLENBQUMsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFFBQVEsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDO1lBQ3ZKLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQTtZQUNsRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFBLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxlQUFlLDBDQUFFLFNBQVMsMENBQUUsZUFBZSwwQ0FBRSxNQUFNLElBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsZUFBZSwwQ0FBRSxTQUFTLDBDQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBUyxFQUFDLEVBQUUsQ0FBQSxDQUFDLENBQUMsQ0FBQSxnQkFBZ0IsYUFBaEIsZ0JBQWdCLHVCQUFoQixnQkFBZ0IsQ0FBRSxRQUFRLENBQUMsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFFBQVEsQ0FBQyxNQUFJLGdCQUFnQixhQUFoQixnQkFBZ0IsdUJBQWhCLGdCQUFnQixDQUFFLFFBQVEsQ0FBQyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsUUFBUSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUM7U0FDbFU7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsdUJBQXVCLEVBQUMsV0FBVyxFQUFDLFlBQVksRUFBQyxXQUFXLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBYSxFQUFDLEdBQUcsSUFBVzs7UUFDM0MsVUFBVTtRQUNWLElBQUksZUFBZSxHQUFRLEVBQUUsQ0FBQTtRQUM3QixJQUFJLFFBQVEsR0FBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDckIsSUFBRyxJQUFJLENBQUMsZUFBZSxLQUFJLE1BQUEsSUFBSSxDQUFDLGVBQWUsMENBQUUsa0JBQWtCLENBQUEsRUFBRTtZQUNuRSxlQUFlLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQVMsRUFBQyxFQUFFLENBQUEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDckY7UUFDSixPQUFPLGVBQWUsQ0FBQTtJQUN2QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsdUJBQTJCLEVBQUMsV0FBZSxFQUFDLFlBQWdCLEVBQUMsV0FBZTs7UUFDN0YsSUFBSSxtQkFBbUIsR0FBRyxNQUFBLElBQUksQ0FBQyxpQkFBaUIsMENBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxRQUFRLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFlBQVksQ0FBQyxNQUFJLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxRQUFRLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFlBQVksQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDO1FBQ2pMLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixFQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQzVFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixFQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzlFLElBQUksbUJBQW1CLEdBQUksTUFBQSxJQUFJLENBQUMsaUJBQWlCLDBDQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsUUFBUSxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxZQUFZLENBQUMsTUFBSSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsUUFBUSxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxZQUFZLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQztRQUNqTCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBQyxhQUFhLENBQUMsQ0FBQTtRQUMzRSxJQUFJLG1CQUFtQixHQUFHLE1BQUEsSUFBSSxDQUFDLGlCQUFpQiwwQ0FBRSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUEsdUJBQXVCLGFBQXZCLHVCQUF1Qix1QkFBdkIsdUJBQXVCLENBQUUsUUFBUSxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxZQUFZLENBQUMsTUFBSSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsUUFBUSxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxZQUFZLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQztRQUM3TCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBQyxhQUFhLENBQUMsQ0FBQTtRQUMzRSxJQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBQztZQUN6QixJQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsUUFBUSxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxZQUFZLENBQUMsTUFBSSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsUUFBUSxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxZQUFZLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQztZQUNySyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBQyxXQUFXLENBQUMsQ0FBQTtZQUN6RSxJQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUEsdUJBQXVCLGFBQXZCLHVCQUF1Qix1QkFBdkIsdUJBQXVCLENBQUUsUUFBUSxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxZQUFZLENBQUMsTUFBSSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsUUFBUSxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxZQUFZLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQztZQUMxSyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBQyxXQUFXLENBQUMsQ0FBQTtTQUMxRTtJQUNILENBQUM7SUFFRjs7Ozs7Ozs7T0FRRztJQUNGLG9CQUFvQjtRQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUU7WUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNwRCxrQkFBa0I7U0FDbkI7YUFBTTtZQUNMLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUNyRDtJQUVILENBQUM7SUFFRjs7O09BR0c7SUFDRixzQkFBc0I7O1FBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSwwQ0FBRSxNQUFNLE1BQUssQ0FBQyxFQUFFO1lBQ3BHLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1lBQzFCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDNUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7U0FDM0I7YUFBTSxJQUFJLENBQUMsQ0FBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQiwwQ0FBRSxTQUFTLDBDQUFFLElBQUksQ0FBQSxJQUFJLENBQUEsTUFBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQiwwQ0FBRSxTQUFTLDBDQUFFLElBQUksMENBQUUsTUFBTSxLQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFHLENBQUMsQ0FBQyxDQUFDLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsY0FBYywwQ0FBRSxJQUFJLENBQUEsSUFBSSxDQUFBLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsY0FBYywwQ0FBRSxJQUFJLDBDQUFFLE1BQU0sS0FBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFO1lBQ3pSLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQzFCO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDdkwsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7U0FDM0I7YUFBTTtZQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1NBQ3ZCO1FBSUQsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7ZUFDdkcsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksMENBQUUsTUFBTSxLQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLENBQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLElBQUksMENBQUUsTUFBTSxLQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN6VyxPQUFPLEtBQUssQ0FBQztTQUNkO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLFdBQWdCOztRQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDN0YsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3hGLE1BQU0sU0FBUyxHQUFHLENBQUEsTUFBQSxXQUFXLENBQUMsRUFBRSwwQ0FBRSxNQUFNLElBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQU8sRUFBTyxFQUFFO1lBQ2pGLElBQUksRUFBRSxFQUFFO2dCQUNOLE1BQU0sWUFBWSxHQUFHO29CQUNuQixhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWE7b0JBQy9CLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSztpQkFDaEIsQ0FBQztnQkFDRixPQUFPLFlBQVksQ0FBQzthQUNyQjtRQUNILENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBRXJDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxPQUFlLEVBQUUsRUFBRTtZQUNyRCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RELElBQUksYUFBYSxLQUFLLENBQUMsSUFBSSxhQUFhLEtBQUssQ0FBQyxJQUFJLGFBQWEsS0FBSyxDQUFDLEVBQUU7Z0JBQ3JFLE9BQU8sSUFBSSxDQUFBO2FBQ1o7aUJBQU07Z0JBQ0wsT0FBTyxLQUFLLENBQUM7YUFDZDtRQUNILENBQUMsQ0FBQTtRQUVELElBQUksZ0JBQWdCLEdBQVUsRUFBRSxDQUFDO1FBQ2pDLElBQUksaUJBQWlCLEdBQVUsRUFBRSxDQUFDO1FBQ2xDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLGFBQWEsMENBQUUsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7O1lBQzNELElBQUcsQ0FBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQiwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLDBDQUFFLFdBQVcsT0FBSyxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsV0FBVyxDQUFBLEVBQUM7Z0JBQ3ZFLE1BQU0sT0FBTyxHQUFHO29CQUNkLFNBQVMsRUFBRSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsV0FBVztvQkFDM0IsZUFBZSxFQUFFLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxHQUFHO29CQUN6QixhQUFhLEVBQUUsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsUUFBUSwwQ0FBRSxNQUFNLENBQUUsQ0FBQyxFQUFPLEVBQUUsRUFBRTs7d0JBQ2hELE9BQU8sTUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSwwQ0FBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3hELENBQUMsQ0FBQztpQkFDSCxDQUFBO2dCQUNELGdCQUFnQixhQUFoQixnQkFBZ0IsdUJBQWhCLGdCQUFnQixDQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDaEMsaUJBQWlCLGFBQWpCLGlCQUFpQix1QkFBakIsaUJBQWlCLENBQUUsSUFBSSxDQUFDLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxXQUFXLENBQUMsQ0FBQzthQUMzQztRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSx3QkFBd0IsR0FBTyxFQUFFLENBQUE7UUFDckMsd0JBQXdCLEdBQUcsTUFBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsUUFBUSwwQ0FBRSxNQUFNLENBQUUsQ0FBQyxFQUFPLEVBQUUsRUFBRTs7WUFDaEYsT0FBTyxDQUFDLEVBQUUsTUFBSyxNQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQiwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLDBDQUFFLFdBQVcsQ0FBQSxJQUFLLENBQUMsQ0FBQSxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsMENBQUUsUUFBUSwwQ0FBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUEsQ0FBQyxDQUFBO1FBQ25JLENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7UUFFdEMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUM5RyxNQUFNLFNBQVMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQzVHLElBQUksT0FBTyxHQUFRO1lBQ2pCLGVBQWUsRUFBRSxFQUFFO1lBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLENBQUMsQ0FBQyxRQUFRLEVBQUU7WUFDNUUsZUFBZSxFQUFFLENBQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLE9BQU8sRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLE9BQU8sMENBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUEsQ0FBQyxDQUFBLEVBQUU7WUFDdkgsa0JBQWtCLEVBQUUsZ0JBQWdCO1lBQ3BDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLHdCQUF3QixFQUFFLEdBQUcsaUJBQWlCLENBQUMsQ0FBRTtZQUM1Rix3SEFBd0g7WUFDeEgsV0FBVyxFQUFFLENBQUMsQ0FBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQiwwQ0FBRSxvQkFBb0IsMENBQUUsTUFBTSxJQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLE1BQUEsSUFBSSxDQUFDLGtCQUFrQiwwQ0FBRSxRQUFRLEVBQUUsR0FBRyxpQkFBaUIsRUFBRyxHQUFHLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFFLDBDQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3ROLFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdkcsc0JBQXNCLEVBQUUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMxRixrQkFBa0IsRUFBRSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDeEcsZUFBZSxFQUFFLENBQUM7WUFDbEIsc0JBQXNCLEVBQUUsQ0FBQztZQUN6QixPQUFPLEVBQUUsRUFBRTtZQUNYLHNCQUFzQixFQUFFLDBCQUEwQixDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xILGtCQUFrQixFQUFFLEVBQUU7WUFDdEIsVUFBVSxFQUFFLENBQUEsTUFBQSxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksMENBQUUsTUFBTSxJQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUN0RSxlQUFlLEVBQUUsQ0FBQztZQUNsQixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBQ25ELFdBQVcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzlDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxVQUFVLEtBQUssZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztZQUN0RSxpQkFBaUIsRUFBRSxXQUFXLENBQUMsaUJBQWlCO1lBQ2hELGVBQWUsRUFBRSxXQUFXLENBQUMsZUFBZTtZQUM1QyxnQkFBZ0IsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsYUFBYSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDckgsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLFNBQVM7WUFDeEMsY0FBYyxFQUFFLE1BQUEsV0FBVyxDQUFDLFVBQVUsbUNBQUksVUFBVTtZQUNwRCxhQUFhLEVBQUUsQ0FBQztZQUNoQixnQkFBZ0IsRUFBRSxFQUFFO1lBQ3BCLGtCQUFrQixFQUFFLENBQUM7WUFDckIsTUFBTSxFQUFFLEVBQUU7WUFDVixlQUFlLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLGNBQWMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVFLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLGlCQUFpQixFQUFFLE1BQUEsV0FBVyxDQUFDLGdCQUFnQixtQ0FBSSxlQUFlO1lBQ2xFLGdCQUFnQixFQUFFLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDakcsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRTtZQUM1QixTQUFTLEVBQUUsQ0FBQSxNQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLDBDQUFFLE1BQU0sSUFBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQzNKLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ25ELGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3BFLHFCQUFxQixFQUFFLENBQUM7WUFDeEIsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ3BDLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLFNBQVMsRUFBRSxDQUFDO1lBQ1osT0FBTyxFQUFFLEVBQUU7WUFDWCxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLG9CQUFvQixFQUFFLFdBQVcsQ0FBQyxvQkFBb0I7WUFDdEQsYUFBYSxFQUFFLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDOUYsa0JBQWtCLEVBQUUsRUFBRTtZQUN0QixXQUFXLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJO1lBQzVDLGtCQUFrQixFQUFFLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFFLGlCQUFpQixFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEwsd0JBQXdCLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLHNCQUFzQixLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyTSxZQUFZLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLEVBQUU7b0JBQ04sU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztvQkFDM0ssSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVE7aUJBQzNFO2FBQ0YsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLFlBQVksRUFBMEI7Z0JBQ3BDLG1CQUFtQixFQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsY0FBYyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxjQUFjLDBDQUFFLElBQUksRUFBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDNUksc0JBQXNCLEVBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLGNBQWMsMENBQUUsSUFBSSxFQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMvSSxlQUFlLEVBQVUsTUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLGVBQWUsMENBQUUsSUFBSSxFQUFDLFVBQVUsQ0FBQyxtQ0FBSSxFQUFFO2dCQUN4RyxzQkFBc0IsRUFBRyxNQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsZUFBZSwwQ0FBRSxVQUFVLEVBQUMsVUFBVSxDQUFDLG1DQUFJLEVBQUU7Z0JBQzlHLGdCQUFnQixFQUFTLE1BQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQiwwQ0FBRSxjQUFjLDBDQUFFLElBQUksRUFBQyxVQUFVLENBQUMsbUNBQUksRUFBRTthQUMxRztZQUNELGVBQWUsRUFBd0I7Z0JBQ25DLGNBQWMsRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLGNBQWMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBQSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsU0FBUywwQ0FBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3RJLGlCQUFpQixFQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsY0FBYyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxTQUFTLDBDQUFFLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDMUksYUFBYSxFQUFHLE1BQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxTQUFTLDBDQUFFLElBQUksRUFBRSxhQUFhLENBQUMsbUNBQUksRUFBRTtnQkFDakYsb0JBQW9CLEVBQUcsTUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLFNBQVMsMENBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxtQ0FBSSxFQUFFO2dCQUM5RixXQUFXLEVBQUUsTUFBQSxJQUFJLENBQUMsU0FBUyxDQUFFLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLFNBQVMsMENBQUUsSUFBSSxFQUFDLFdBQVcsQ0FBQyxtQ0FBSSxFQUFFO2FBQzNGO1lBQ0Msb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQzVELFdBQVcsRUFBRSxDQUFDO1lBQ2QsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekQsUUFBUSxFQUFFLEVBQUU7WUFDWixnQkFBZ0IsRUFBRSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxhQUFhO1lBQzVGLFdBQVcsRUFBRSxDQUFDO1lBQ2QsY0FBYyxFQUFFLFNBQVM7WUFDekIsYUFBYSxFQUFFLENBQUM7WUFDaEIsa0JBQWtCLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxPQUFBLFdBQVcsQ0FBQyxhQUFhLDRDQUFFLE1BQU0sSUFBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakcsb0JBQW9CLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM3Ryx5QkFBeUIsRUFBRSxFQUFFO1lBQzdCLHNCQUFzQixFQUFFLFdBQVcsQ0FBQyxjQUFjLEtBQUksT0FBQSxPQUFBLElBQUksQ0FBQyxrQkFBa0IsNENBQUUsc0JBQXNCLDRDQUFFLFdBQVcsQ0FBQSxDQUFDLENBQUMsQ0FBQztnQkFDbkgsV0FBVyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXO2dCQUN2RSxNQUFNLEVBQUUsSUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqRSxpQkFBaUIsRUFBRSxPQUFPLElBQUksQ0FBQyx1QkFBdUIsSUFBSTtnQkFDMUQsY0FBYyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7YUFDckUsQ0FBQyxDQUFDLENBQUM7Z0JBQ0YsV0FBVyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxFQUFFLENBQUM7Z0JBQ1QsVUFBVSxFQUFFLENBQUM7Z0JBQ2IsaUJBQWlCLEVBQUUsRUFBRTtnQkFDckIsY0FBYyxFQUFFLEVBQUU7YUFDbkI7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsV0FBVyxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLFVBQVUsNENBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMvRSxhQUFhLEVBQUUsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBQSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsVUFBVSw0Q0FBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUU7YUFDcEY7WUFDRCxxQkFBcUIsRUFBRSxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsT0FBQSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxlQUFlLENBQUMsNENBQUUsTUFBTSxJQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDckosa0JBQWtCLEVBQUUsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLE9BQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsZUFBZSxDQUFDLDRDQUFFLE1BQU0sSUFBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEtBQUksT0FBQSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsVUFBVSw0Q0FBRSxXQUFXLENBQUEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUN4VSxDQUFDO1FBQ0YsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE9BQU8sQ0FBQztRQUNyQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3JELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ3ZFLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLENBQUM7Z0JBRzlCLElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLGNBQWMsRUFBRTtvQkFDL0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxzQkFBc0IsR0FBRyxDQUFDLCtCQUErQiw4RUFBOEUsQ0FBQztpQkFDOUo7Z0JBQ0QsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxDQUFDLEVBQUU7b0JBQ3pELElBQUksQ0FBQyxhQUFhLEdBQUcsK0RBQStELENBQUE7aUJBQ3JGO3FCQUFNO29CQUNMLElBQUksT0FBTyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUU7d0JBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLHVCQUF1QixDQUFDO3dCQUMzRCxJQUFJLENBQUMsYUFBYSxHQUFHLCtDQUErQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO3FCQUM1SztpQkFFRjtnQkFHRCxlQUFlO1lBQ2pCLENBQUMsRUFDQyxHQUFHLENBQUMsRUFBRTtnQkFDSixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrR0FBa0csRUFBRSxPQUFPLENBQUMsQ0FBQztZQUVsSSxDQUFDLENBQ0YsQ0FBQztTQUNIO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDbEQsSUFBSSxDQUFDLGFBQWEsR0FBRyx1Q0FBdUMsQ0FBQztZQUM3RCxJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ3BHLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7Z0JBRWhDLG9CQUFvQjtZQUV0QixDQUFDLEVBQ0MsR0FBRyxDQUFDLEVBQUU7Z0JBQ0osT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0dBQWtHLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbEksQ0FBQyxDQUNGLENBQUM7U0FDSDtJQUVILENBQUM7SUFFRixrQkFBa0IsQ0FBQyxhQUFpQixFQUFDLGFBQWlCLEVBQUMsYUFBaUI7UUFDdkUsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsRUFBQyxhQUFhLENBQUMsQ0FBQTtRQUM5RSxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFFLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUN6RSxJQUFJLFFBQVEsR0FBRyxDQUFDLEdBQUcsYUFBYSxFQUFFLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEgsT0FBTyxRQUFRLENBQUE7SUFDaEIsQ0FBQztJQUVGLDhCQUE4Qjs7UUFDNUIsSUFBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUM7WUFDekIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLGNBQWMsMENBQUUsSUFBSSxFQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLFNBQVMsMENBQUUsSUFBSSxDQUFDLENBQUE7WUFDekosSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLGNBQWMsMENBQUUsSUFBSSxFQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLFNBQVMsMENBQUUsSUFBSSxDQUFDLENBQUE7WUFDekosSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLGVBQWUsMENBQUUsSUFBSSxFQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLFNBQVMsMENBQUUsSUFBSSxDQUFDLENBQUE7WUFDMUosSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLGVBQWUsMENBQUUsVUFBVSxFQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLFNBQVMsMENBQUUsVUFBVSxDQUFDLENBQUE7U0FFN0s7YUFBSTtZQUNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQiwwQ0FBRSxTQUFTLDBDQUFFLElBQUksQ0FBQTtZQUNoRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsU0FBUywwQ0FBRSxJQUFJLENBQUE7WUFDaEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLFNBQVMsMENBQUUsSUFBSSxDQUFBO1lBQ2hFLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxNQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQiwwQ0FBRSxTQUFTLDBDQUFFLFVBQVUsQ0FBQTtTQUM3RTtJQUNILENBQUM7SUFFQTs7T0FFRztJQUNGLEtBQUs7UUFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDckMsSUFBSSxDQUFDLGtCQUFrQixHQUFHO1lBQ3hCLFNBQVMsRUFBRTtnQkFDVCxNQUFNLEVBQUUsS0FBSztnQkFDYixJQUFJLEVBQUUsRUFBRTthQUNUO1lBQ0QsY0FBYyxFQUFFO2dCQUNkLElBQUksRUFBRSxFQUFFO2dCQUNSLGlCQUFpQixFQUFFLEtBQUs7YUFDekI7WUFDRCxjQUFjLEVBQUM7Z0JBQ2IsY0FBYyxFQUFFLEtBQUs7Z0JBQ3JCLElBQUksRUFBRSxFQUFFO2FBQ1Q7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsY0FBYyxFQUFFLEtBQUs7Z0JBQ3JCLElBQUksRUFBRSxFQUFFO2FBQ1Q7WUFDRCxTQUFTLEVBQUUsRUFBRTtZQUNiLFdBQVcsRUFBRSxFQUFFO1lBQ2YsU0FBUyxFQUFFLEVBQUU7WUFDYixFQUFFLEVBQUUsRUFBRTtZQUNOLFFBQVEsRUFBRSxFQUFFO1lBQ1oscUJBQXFCLEVBQUUsRUFBRTtZQUN6QixVQUFVLEVBQUUsRUFBRTtZQUNkLFdBQVcsRUFBRSxFQUFFO1lBQ2YsU0FBUyxFQUFFO2dCQUNULGtCQUFrQixFQUFFLElBQUk7Z0JBQ3hCLGVBQWUsRUFBRTtvQkFDZixrQkFBa0IsRUFBRSxDQUFDO29CQUNyQixzQkFBc0IsRUFBRSxDQUFDO2lCQUMxQjtnQkFDRCxJQUFJLEVBQUUsRUFBRTthQUNUO1lBQ0QsY0FBYyxFQUFFO2dCQUNkLGtCQUFrQixFQUFFLElBQUk7Z0JBQ3hCLGVBQWUsRUFBRTtvQkFDZixrQkFBa0IsRUFBRSxDQUFDO29CQUNyQixzQkFBc0IsRUFBRSxDQUFDO2lCQUMxQjtnQkFDRCxJQUFJLEVBQUUsRUFBRTthQUNUO1lBQ0QsU0FBUyxFQUFFO2dCQUNULFVBQVUsRUFBRSxFQUFFO2dCQUNkLElBQUksRUFBRSxFQUFFO2FBQ1Q7WUFDRCxlQUFlLEVBQUU7Z0JBQ2YsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsSUFBSSxFQUFFLEVBQUU7YUFDVDtZQUNELGlCQUFpQixFQUFFO2dCQUNqQixjQUFjLEVBQUUsS0FBSztnQkFDckIsV0FBVyxFQUFFLEVBQUU7Z0JBQ2YsV0FBVyxFQUFFLEVBQUU7Z0JBQ2YsZ0JBQWdCLEVBQUUsS0FBSzthQUN4QjtZQUNELGFBQWEsRUFBRSxFQUFFO1lBQ2pCLGlCQUFpQixFQUFFLEVBQUU7WUFDckIsU0FBUyxFQUFFLENBQUM7WUFDWixVQUFVLEVBQUUsYUFBYTtZQUN6QixPQUFPLEVBQUUsRUFBRTtZQUNYLG9CQUFvQixFQUFFLEVBQUU7U0FDekIsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLEdBQUc7WUFDakIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsRUFBRSxFQUFFLEtBQUs7WUFDVCxRQUFRLEVBQUUsS0FBSztZQUNmLGdCQUFnQixFQUFFLEtBQUs7WUFDdkIsV0FBVyxFQUFFLEtBQUs7WUFDbEIsbUJBQW1CLEVBQUUsS0FBSztZQUMxQixRQUFRLEVBQUUsS0FBSztZQUNmLFFBQVEsRUFBRSxLQUFLO1lBQ2YsU0FBUyxFQUFFLEtBQUs7WUFDaEIsSUFBSSxFQUFFLEtBQUs7U0FDWixDQUFDO1FBQ0YsSUFBSSxDQUFDLG9CQUFvQixHQUFHLDBDQUEwQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRztZQUN0QixPQUFPLEVBQUUsRUFBRTtZQUNYLG1CQUFtQixFQUFFLENBQUM7WUFDdEIsY0FBYyxFQUFFLENBQUM7WUFDakIsaUJBQWlCLEVBQUUsQ0FBQztZQUNwQixjQUFjLEVBQUUsQ0FBQztZQUNqQixTQUFTLEVBQUUsZUFBZTtZQUMxQixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztZQUNsRCxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztZQUN0RCxNQUFNLEVBQUUsQ0FBQztZQUNULE1BQU0sRUFBRSxDQUFDO1lBQ1QsSUFBSSxFQUFFLFVBQVU7WUFDaEIsVUFBVSxFQUFFLEVBQUU7WUFDZCxzQkFBc0IsRUFBRSxDQUFDO1NBQzFCLENBQUE7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUM3QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLHVCQUF1QixHQUFHLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQTtRQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQTtRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsTUFBTSxDQUFDLEtBQWE7UUFDbEIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGdCQUFnQixFQUFFO1lBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsT0FBTTtTQUNQO1FBQ0QsUUFBUSxLQUFLLEVBQUU7WUFDYixLQUFLLFNBQVM7Z0JBQ1osSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNiLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzVCLE1BQU07U0FDVDtJQUNILENBQUM7SUFDRCxvQkFBb0I7UUFDbEIsSUFBSSxHQUFXLENBQUM7UUFDaEIsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsSUFBSSxDQUFDLEVBQUU7WUFDNUUsSUFBRyxJQUFJLENBQUMsMEJBQTBCLEVBQUM7Z0JBQ2pDLFlBQVksR0FBRyxtQ0FBbUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFFO2FBQ2hFO2lCQUFJO2dCQUNMLFlBQVksR0FBRywyREFBMkQsQ0FBQzthQUMxRTtTQUNGO2FBQU0sSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUM1RSxZQUFZLEdBQUcsNEVBQTRFLENBQUM7U0FDN0Y7YUFBTTtZQUNMLElBQUcsSUFBSSxDQUFDLDBCQUEwQixFQUFDO2dCQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFJLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxTQUFTLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUE7Z0JBQ2hFLFlBQVksR0FBRyxxQ0FBcUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO2FBQ3hFO2lCQUFJO2dCQUNMLFlBQVksR0FBRyxvQ0FBb0MsQ0FBQzthQUNuRDtTQUNGO1FBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDaEQsR0FBRyxHQUFHLFNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxLQUFLLEdBQUcsWUFBWSxDQUFDO1NBQy9EO2FBQU07WUFDTCxHQUFHLEdBQUcsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLGdCQUFnQixHQUFHLFlBQVksQ0FBQztTQUMzRTtRQUVELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7WUFDeEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN0QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBQ0QsV0FBVyxDQUFDLEtBQVU7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUNELDBCQUEwQjtJQUMxQix1QkFBdUIsQ0FBQyxLQUFVOztRQUNoQyxNQUFNLElBQUksR0FBRztZQUNYLE9BQU8sRUFBRSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsaUJBQWlCO1lBQ2pDLE1BQU0sRUFBRSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsb0JBQW9CO1lBQ25DLFdBQVcsRUFBRSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsaUJBQWlCO1lBQ3JDLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZTtZQUN0QyxnQkFBZ0IsRUFBRSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsaUJBQWlCO1lBQzFDLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLGdCQUFnQixDQUFDO1lBQzFDLFVBQVUsRUFBRSxLQUFLLENBQUMsY0FBYztZQUNoQyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsc0JBQXNCO1lBQ3BELFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLGdCQUFnQixDQUFDO1lBQzFDLFFBQVEsRUFBRSxNQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsbUNBQUksQ0FBQztZQUN6QyxVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1NBQzNHLENBQUE7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFVOztRQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxpQkFBaUIsQ0FBQztRQUN6RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxjQUFjLENBQUM7UUFDekQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsb0JBQW9CLENBQUM7UUFDM0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsaUJBQWlCLENBQUM7UUFDeEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsaUJBQWlCLENBQUM7UUFDM0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsZ0JBQWdCLENBQUM7UUFDMUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsR0FBRyxNQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsbUNBQUksQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEdBQUcsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLE9BQU8sQ0FBQztRQUN0RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLHNCQUFzQixDQUFDO1FBQzdFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsV0FBVyxDQUFDO0lBQ2pELENBQUM7SUFFRCxhQUFhLENBQUMsS0FBVTs7UUFDdEIsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLE1BQU0sRUFBRTtZQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztTQUN2QjtRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNsRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUE7UUFDMUYsOERBQThEO1FBQzlELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQzlELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztRQUNoRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1FBQ2xFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEdBQUcsTUFBQSxLQUFLLENBQUMsUUFBUSxtQ0FBSSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3BELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUN0RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDLHNCQUFzQixDQUFDO1FBQzlFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUMsTUFBTSxPQUFPLEdBQUc7WUFDZCxpQkFBaUIsRUFBRSxLQUFLLENBQUMsT0FBTztZQUNoQyxjQUFjLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDaEMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDbEMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDcEMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtZQUN6QyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsU0FBUztZQUNqQyxnQkFBZ0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDbEMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztZQUN0QyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsc0JBQXNCO1lBQ3BELFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztTQUMvQixDQUFDO1FBQ0YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBWTtRQUNyQixJQUFJLElBQUksRUFBRTtZQUNSLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztZQUNoQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3JDO2FBQU07WUFDTCxPQUFPLEVBQUUsQ0FBQztTQUNYO0lBQ0gsQ0FBQztJQUVGOzs7T0FHRztJQUNGLHVCQUF1QixDQUFDLEdBQVE7UUFDOUIsSUFBSTtZQUNGLElBQUksR0FBRyxDQUFDLGlCQUFpQixFQUFFO2dCQUN6QixNQUFNLGdCQUFnQixHQUFHLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNELE1BQU0sYUFBYSxHQUFHLENBQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLGNBQWMsTUFBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQzVILFFBQVEsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3JDLEtBQUssQ0FBQzt3QkFDSixJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLENBQUM7d0JBQzFELE1BQU07b0JBQ1IsS0FBSyxDQUFDO3dCQUNKLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLENBQUMsQ0FBQzt3QkFDM0QsTUFBTTtvQkFDUixLQUFLLENBQUM7d0JBQ0osSUFBSSxDQUFDLHFCQUFxQixDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxDQUFDO3dCQUM1RCxNQUFNO29CQUNSLEtBQUssQ0FBQzt3QkFDSixJQUFJLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLENBQUM7d0JBQzlELE1BQU07b0JBQ1IsS0FBSyxDQUFDO3dCQUNKLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLENBQUMsQ0FBQzt3QkFDN0QsTUFBTTtvQkFDUixLQUFLLENBQUM7d0JBQ0osSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxDQUFDO3dCQUMzRCxNQUFNO29CQUNSLEtBQUssQ0FBQzt3QkFDSjs0QkFDRSxNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQzs0QkFDcEssNENBQTRDOzRCQUM1QyxJQUFJLENBQUMsb0JBQW9CO2dDQUN2QixXQUFXLEdBQUcsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLEdBQUcsTUFBTSxHQUFHLGFBQWEsQ0FBQzt5QkFDL0k7d0JBQ0QsTUFBTTtvQkFDUixLQUFLLENBQUM7d0JBQ0osSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxDQUFDO3dCQUMzRCw0Q0FBNEM7d0JBRTVDLE1BQU07b0JBQ1IsS0FBSyxFQUFFO3dCQUNMOzRCQUNFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyx5Q0FBeUMsQ0FBQzt5QkFDdkU7d0JBQ0QsTUFBTTtvQkFDUixLQUFLLENBQUM7d0JBQ0osSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUV0RTthQUNGO1NBQ0Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLHVDQUF1QztZQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztJQUNIOzs7Ozs7T0FNRztJQUNELGlCQUFpQixDQUFDLGdCQUFxQixFQUFFLFFBQWdCO1FBQ3ZELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsdUJBQXVCLENBQUM7UUFDdkksSUFBSSxDQUFDLGdCQUFnQixDQUFDLCtCQUErQixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDN0UsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLHVCQUF1QixHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxTCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUg7Ozs7OztPQU1HO0lBQ0QsbUJBQW1CLENBQUMsZ0JBQXFCLEVBQUUsYUFBa0I7UUFDM0Q7WUFDRSxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEQsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxXQUFXLEdBQUcsYUFBYSxDQUFDO2FBQ3pEO2lCQUFNLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsR0FBRyxhQUFhLENBQUM7YUFDcEc7U0FDRjtJQUNILENBQUM7SUFFSDs7Ozs7Ozs7Ozs7O09BWUc7SUFDRCxvQkFBb0IsQ0FBQyxnQkFBcUIsRUFBRSxhQUFrQjtRQUM1RDtZQUNFLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDbEUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxRCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLEdBQUcsYUFBYSxDQUFDO2FBQ3BGO1lBQ0QsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxrQkFBa0IsR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxHQUFHLGFBQWEsQ0FBQzthQUM5RjtZQUNELElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsWUFBWSxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLEdBQUcsYUFBYSxDQUFDO2FBQ3hGO1lBQ0QsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxRQUFRLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLEdBQUcsYUFBYSxDQUFDO2FBQzVIO1NBQ0Y7SUFDSCxDQUFDO0lBRUg7Ozs7O09BS0c7SUFDRCxxQkFBcUIsQ0FBQyxnQkFBcUIsRUFBRSxhQUFrQjtRQUM3RDtZQUNFLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDcEUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1QyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsZUFBZSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxHQUFHLGFBQWEsQ0FBQzthQUNqRztpQkFBTSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDOUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGVBQWUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sR0FBRyxhQUFhLENBQUM7YUFDakc7aUJBQU0sSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzlDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxlQUFlLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLEdBQUcsYUFBYSxDQUFDO2FBQ2pHO2lCQUFNLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDdkYsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sR0FBRyxhQUFhLENBQUM7YUFDaEk7aUJBQU0sSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLEdBQUcsYUFBYSxDQUFDO2FBQ2hJO2lCQUFNLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxHQUFHLGFBQWEsQ0FBQzthQUNoSTtpQkFBTSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sR0FBRyxhQUFhLENBQUM7YUFDaEk7U0FDRjtJQUNILENBQUM7SUFFRjs7Ozs7O09BTUc7SUFDRix1QkFBdUIsQ0FBQyxnQkFBcUIsRUFBRSxhQUFrQjtRQUMvRDtZQUNFLE1BQU0sU0FBUyxHQUFHLENBQUMsK0JBQStCLEVBQUUsaUNBQWlDLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztZQUM1SCxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGVBQWUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxhQUFhLENBQUM7YUFDbkk7aUJBQU0sSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzlDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxlQUFlLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsYUFBYSxDQUFDO2FBQ25JO2lCQUFNLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM5QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsZUFBZSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLGFBQWEsQ0FBQzthQUNuSTtpQkFBTSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3ZGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsYUFBYSxDQUFDO2FBQ2xLO2lCQUFNLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLGFBQWEsQ0FBQzthQUNsSztpQkFBTSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDL0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxhQUFhLENBQUM7YUFDbEs7aUJBQU0sSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsYUFBYSxDQUFDO2FBQ2xLO1NBQ0Y7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHNCQUFzQixDQUFDLGdCQUFxQixFQUFFLGFBQWtCO1FBQzlEO1lBQ0UsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNwRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxlQUFlLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLEdBQUcsYUFBYSxDQUFDO2FBQ2pHO2lCQUFNLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM5QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsZUFBZSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxHQUFHLGFBQWEsQ0FBQzthQUNqRztpQkFBTSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDOUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGVBQWUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sR0FBRyxhQUFhLENBQUM7YUFDakc7aUJBQU0sSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUN2RixJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxHQUFHLGFBQWEsQ0FBQzthQUNoSTtpQkFBTSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDL0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sR0FBRyxhQUFhLENBQUM7YUFDaEk7aUJBQU0sSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLEdBQUcsYUFBYSxDQUFDO2FBQ2hJO2lCQUFNLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxHQUFHLGFBQWEsQ0FBQzthQUNoSTtTQUNGO0lBQ0gsQ0FBQztJQUVGOzs7Ozs7OztPQVFHO0lBQ0Ysb0JBQW9CLENBQUMsZ0JBQXFCLEVBQUUsYUFBa0I7UUFDNUQ7WUFDRSxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0YsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3JDLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUN2QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLGFBQWEsQ0FBQztpQkFDM0g7Z0JBQ0QsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ3ZDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsYUFBYSxDQUFDO2lCQUMzSDtnQkFDRCxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDdkMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxhQUFhLENBQUM7aUJBQzNIO2dCQUNELElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNyQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLGFBQWEsQ0FBQztpQkFDMUo7Z0JBQ0QsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNoRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLGFBQWEsQ0FBQztpQkFDMUo7Z0JBQ0QsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ3hDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsYUFBYSxDQUFDO2lCQUMxSjtnQkFDRCxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDeEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxhQUFhLENBQUM7aUJBQzFKO2FBQ0Y7WUFFRCxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDckMsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ3ZDLDRDQUE0QztvQkFDNUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLG9CQUFvQixHQUFHLFlBQVksR0FBRyxZQUFZLEdBQUcsYUFBYSxDQUFDO2lCQUM5SjtnQkFDRCxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDdkMsNENBQTRDO29CQUM1QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsb0JBQW9CLEdBQUcsWUFBWSxHQUFHLFlBQVksR0FBRyxhQUFhLENBQUM7aUJBQzlKO2dCQUNELElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUN2Qyw0Q0FBNEM7b0JBQzVDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxvQkFBb0IsR0FBRyxZQUFZLEdBQUcsWUFBWSxHQUFHLGFBQWEsQ0FBQztpQkFDOUo7Z0JBQ0QsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3JDLDRDQUE0QztvQkFDNUMsSUFBSSxDQUFDLG9CQUFvQjt3QkFDdkIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsb0JBQW9CLEdBQUcsWUFBWSxHQUFHLFlBQVksR0FBRyxhQUFhLENBQUM7aUJBQ3ZLO2dCQUNELElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDaEYsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxhQUFhLENBQUM7aUJBQzFKO2dCQUNELElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUN4QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLGFBQWEsQ0FBQztpQkFDMUo7Z0JBQ0QsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ3hDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsYUFBYSxDQUFDO2lCQUMxSjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUg7OztPQUdHO0lBQ0Qsb0JBQW9CLENBQUMsZ0JBQXFCLEVBQUUsYUFBa0I7UUFDNUQsTUFBTSxTQUFTLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxpQ0FBaUMsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO1FBQzVIO1lBQ0UsUUFBUSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDckMsS0FBSyxDQUFDO29CQUNKLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztvQkFDMUYsTUFBTTtnQkFDUixLQUFLLENBQUM7b0JBQ0osSUFBSSxDQUFDLG9CQUFvQjt3QkFDdkIsU0FBUzs0QkFDVCxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0NBQzlDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0NBQzFDLGtDQUFrQzs0QkFDcEMsQ0FBQyxDQUFDOzRCQUNGLE9BQU87NEJBQ1AsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDOzRCQUNuQixtQkFBbUIsQ0FBQztvQkFDdEIsTUFBTTtnQkFDUixLQUFLLENBQUM7b0JBQ0osSUFBSSxDQUFDLG9CQUFvQixHQUFHLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztvQkFDeEosTUFBTTtnQkFDUixLQUFLLENBQUM7b0JBQ0osSUFBSSxDQUFDLG9CQUFvQixHQUFHLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHLG1CQUFtQixDQUFDO2FBQzdGO1NBQ0Y7SUFDSCxDQUFDO0lBRUg7Ozs7T0FJRztJQUNELFVBQVUsQ0FBQyxLQUFVO1FBR25CLFVBQVUsQ0FBQyxHQUFHLEVBQUU7O1lBQ2QsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDeEIsTUFBQSxNQUFBLElBQUksQ0FBQyxTQUFTLDBDQUFFLGFBQWEsMENBQUUsS0FBSyxFQUFFLENBQUM7UUFDekMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVGOzs7O09BSUc7SUFDRixrQkFBa0IsQ0FBQyxHQUFTOztRQUMxQixJQUFJLGtCQUFrQixHQUFHLEVBQUUsQ0FBQTtRQUMzQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEtBQUssRUFBRSxFQUFFO1lBQzVDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7U0FDbkM7UUFDRCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUU1QyxJQUFJLENBQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTywwQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUFFO1lBQy9DLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7U0FDakM7UUFDRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsY0FBYyxFQUFFO1lBQzFILGtCQUFrQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1NBQzFDO1FBQ0QsSUFBSSxDQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsMENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTtZQUMxQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO1NBQzVCO1FBRUQsSUFBSSxDQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsMENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTtZQUNuRCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3JDO1FBRUQsSUFBSSxDQUFBLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsU0FBUywwQ0FBRSxJQUFJLDBDQUFFLE1BQU0sSUFBRyxDQUFDLElBQUksQ0FBQSxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLGFBQWEsMENBQUUsSUFBSSwwQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUFJO1lBQ3RILGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDbEM7UUFHRCxJQUFJLENBQUEsTUFBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQiwwQ0FBRSxTQUFTLDBDQUFFLElBQUksMENBQUUsTUFBTSxJQUFHLENBQUMsSUFBSSxDQUFBLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsU0FBUywwQ0FBRSxVQUFVLDBDQUFFLE1BQU0sSUFBRyxDQUFDLElBQUksQ0FBQSxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLGVBQWUsMENBQUUsSUFBSSwwQ0FBRSxNQUFNLElBQUcsQ0FBQyxJQUFJLENBQUEsTUFBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQiwwQ0FBRSxlQUFlLDBDQUFFLFVBQVUsMENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTtZQUN4UCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQ2xDO1FBRUQsSUFBSSxDQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLGFBQWEsMENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTtZQUN0RCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQ25DO1FBRUQsSUFBSSxDQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQiwwQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUFFO1lBQ3pELGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztTQUN4QztRQUVELElBQUksR0FBRyxDQUFDLGtCQUFrQixLQUFLLFlBQVksRUFBRTtZQUMzQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQ3BDO1FBRUQsSUFBSSxHQUFHLENBQUMsa0JBQWtCLEtBQUssdUJBQXVCLEVBQUU7WUFDdEQsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1NBQ3pDO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUUvQyxDQUFDO0lBR0Qsb0JBQW9CO0lBQ3BCLFlBQVk7UUFDVixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssRUFBRTtZQUMxRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztTQUN4QjtRQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsSUFBSSxNQUFNLEVBQUU7WUFDakQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7U0FDMUM7UUFDRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLElBQUksTUFBTSxFQUFFO1lBQy9DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQVU7UUFDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtJQUM5RixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBYTtRQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRUg7OztPQUdHO0lBQ0QscUJBQXFCLENBQUMsZ0JBQXFCO1FBQ3pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxnQkFBZ0IsYUFBaEIsZ0JBQWdCLHVCQUFoQixnQkFBZ0IsQ0FBRSxXQUFXLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMvSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLEdBQUcsZ0JBQWdCLENBQUM7UUFDbEUsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7WUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7WUFDM0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7U0FDekI7UUFFRCxJQUFJLGdCQUFnQixDQUFDLFVBQVUsRUFBRTtZQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDO1lBQ3BELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzFDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkksSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLGFBQWhCLGdCQUFnQix1QkFBaEIsZ0JBQWdCLENBQUUsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUUxRixDQUFDO0lBRUQseUJBQXlCO0lBQ3pCLGVBQWUsQ0FBQyxLQUFVO1FBQ3hCLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBRSxtREFBbUQ7UUFDOUUsT0FBTyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRy9DLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYztRQUN6QixJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUMzQzthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQTtTQUN6QjtJQUNILENBQUM7SUFFRCxzREFBc0Q7SUFDdEQsa0JBQWtCLENBQUMsS0FBVTtRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUM3QyxDQUFDO0lBQ0QsNERBQTREO0lBQzVEOzs7T0FHRztJQUNILG9CQUFvQixDQUFDLGlCQUFzQixFQUFFLElBQWE7UUFDeEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHdCQUF3QixDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQzFHLElBQUksQ0FBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTtnQkFDbkIsSUFBSSxJQUFJLEtBQUssWUFBWSxFQUFFO29CQUV6QixNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDckcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUNuQyxNQUFNLGNBQWMsR0FBRzt3QkFDckIsV0FBVyxFQUFFLGlCQUFpQixDQUFDLFdBQVc7d0JBQzFDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxhQUFhO3dCQUM5QyxpQkFBaUIsRUFBRTs0QkFDakIsRUFBRSxFQUFFLGlCQUFpQixDQUFDLGFBQWE7NEJBQ25DLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZTs0QkFDdkMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjO3lCQUNqQzt3QkFDRCxnQkFBZ0IsRUFBRSxlQUFlO3FCQUNsQyxDQUFBO29CQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7aUJBQ2pGO3FCQUFNO29CQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztvQkFDeEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFBO2lCQUM3RDthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBR0QsbUJBQW1CLENBQUMsSUFBWTtRQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7S0FHQztJQUNELGNBQWMsQ0FBQyxLQUFVOztRQUV2QixJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztRQUNsRSxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQUEsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsMENBQUUsTUFBTSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDM0IsQ0FBQztJQUdELGFBQWEsQ0FBQyxLQUFVO1FBQ3RCLElBQUksQ0FBQyxLQUFLO1lBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7UUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTVDLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxPQUFZOztRQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBQyxJQUFJLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ25ELE1BQU0sS0FBSyxHQUFHLE1BQUEsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLGFBQWEsMENBQUUsU0FBUyxDQUFFLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxDQUFBLEVBQUUsYUFBRixFQUFFLHVCQUFGLEVBQUUsQ0FBRSxXQUFXLE9BQUssT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFdBQVcsQ0FBQSxDQUFDLENBQUM7UUFDeEgsSUFBRyxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUM7WUFDZCxNQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQiwwQ0FBRSxhQUFhLDBDQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekQsTUFBTSxpQkFBaUIsR0FBRyxNQUFBLE1BQUEsSUFBSSxDQUFDLGtCQUFrQiwwQ0FBRSxRQUFRLDBDQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLFdBQUMsT0FBQSxDQUFDLENBQUMsRUFBRSxNQUFLLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxXQUFXLENBQUEsS0FBSSxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxRQUFRLDBDQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQSxDQUFDLENBQUEsRUFBQSxDQUFDLENBQUM7WUFDcEosSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQztTQUN0RDtRQUNELHNIQUFzSDtRQUN0SCxzREFBc0Q7UUFDdEQsMkNBQTJDO1FBQzNDLDBDQUEwQztRQUMxQywwQ0FBMEM7UUFDMUMsSUFBSTtJQUNOLENBQUM7SUFHRDs7OztPQUlHO0lBQ0gsWUFBWSxDQUFDLEtBQVM7UUFDcEIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbkMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELDhCQUE4QixDQUFDLEtBQVU7UUFDdkMsSUFBRyxLQUFLLEVBQUU7WUFDUixJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUE7U0FDN0Q7YUFBTTtZQUNMLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQ25DO0lBQ0gsQ0FBQztJQUVIOzs7T0FHRztJQUNELHdCQUF3QixDQUFDLEtBQVU7UUFDL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsR0FBSSxLQUFLLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUM5RixJQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDM0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2QztJQUVMLENBQUM7OztZQTc3RkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSx5QkFBeUI7Z0JBQ25DLG9zOEZBQW1EOzthQUlwRDs7O1lBakJRLFdBQVc7WUFDWCxxQkFBcUI7WUFDckIsZ0JBQWdCO1lBRWhCLFlBQVk7WUFDWixlQUFlO1lBTGYsV0FBVztZQVFYLGVBQWU7OzttQkFjckIsS0FBSzsrQkFDTCxLQUFLOytCQUNMLEtBQUs7d0JBQ0wsS0FBSztzQkFDTCxLQUFLO3lCQVVMLEtBQUssU0FBQyxZQUFZO3lCQUtsQixLQUFLOzRCQUdMLE1BQU07NkJBQ04sTUFBTTswQ0FDTixNQUFNOzRCQUNOLE1BQU07d0JBQ04sTUFBTTtnQ0FDTixNQUFNO3FDQUNOLE1BQU07eUJBQ04sTUFBTTt5QkFDTixLQUFLO3lCQUNMLEtBQUs7aUNBS0wsS0FBSyxTQUFDLGlCQUFpQjttQ0FXdEIsTUFBTTttQ0FDTixNQUFNO2lDQUNOLE1BQU07bUNBQ04sTUFBTTt3QkFpUFAsU0FBUyxTQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgRWRpdG9yQ29uZmlnIH0gZnJvbSAndmNvbXBseS1lZGl0b3InO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IFJlc3BvbnNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3Jlc3BvbnNpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGcmVxdWVuY3lTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkQ29tcG9uZW50cy9mcmVxdWVuY3kvZnJlcXVlbmN5LnNlcnZpY2UnO1xyXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgVWlLaXRTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvdWkta2l0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFByb2dyYW1zU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3Byb2dyYW1zLnNlcnZpY2UnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXdvcmtmbG93LWNvbXBsaWFuY2UnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi93b3JrZmxvdy1jb21wbGlhbmNlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi93b3JrZmxvdy1jb21wbGlhbmNlLmNvbXBvbmVudC5sZXNzJywgJy4uL2Zvcm1zLmxlc3MnXSxcclxuICAvLyBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd0NvbXBsaWFuY2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuXHJcbi8qIERlZmluaW5nIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciB0aGUgY29tcG9uZW50LiAqL1xyXG4gIEBJbnB1dCgpIG1vZGUgPSAnQ1JFQVRFJztcclxuICBASW5wdXQoKSByZXNwb25zaWJpbGl0eUlkID0gJyc7XHJcbiAgQElucHV0KCkgZnJhbWV3b3JrRGV0YWlsczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIEBJbnB1dCgpIGlzRW50cnVzdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZmVhdHVyZTphbnk7XHJcbiAgYWxsR3JvdXBBc3NpZ25lZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgYXNzaWdub3JJZDogYW55W109W107XHJcbiAgYXNzaWduZWVJZHM6IGFueVtdPSBbXTtcclxuICByZXZpZXdlcklkczogYW55W10gPSBbXTtcclxuICBvdmVyc2VlcklkczogYW55W10gPSBbXTtcclxuICBkaXNhYmxlUmFkaW9Bc3NpZ25lZTogYW55W10gPSBbXTtcclxuICBpc1Jlc3BvbnNpYmlsaXR5U2ltcGxpZmllZDogYm9vbGVhbiA9ZmFsc2U7XHJcbiAgcXVlcnlQYXJhbTogc3RyaW5nID0gJyc7XHJcbiAgcmVjZW50UmVzcG9uc2liaWxpdHlVcmw6IGFueSA9IHtcImJ5UmVzcG9uc2liaWxpdGllc1wiOntcInR5cGVcIjpbXCJyZWNlbnRfcmVzcG9uc2liaWxpdGllc1wiXSxcInN1YlR5cGVcIjpbXCJDQ1wiXX0sXCJieVN0YXR1c1wiOntcInR5cGVcIjpbXSxcInN1YlR5cGVcIjpbXX0sXCJmaWx0ZXJPYmplY3RcIjp7XCJyZXNwb25zaWJpbGl0eUNlbnRlclwiOltdLFwiZW50cnVzdGVkQnlcIjpbXSxcImVudHJ1c3RlZFRvXCI6W10sXCJyaXNrSWRzXCI6W10sXCJyZXNwb25zaWJpbGl0eUNhdGVnb3J5XCI6W119LFwidGltZVBlcmlvZERldGFpbHNcIjp7XCJ0eXBlXCI6XCJcIixcInNlbGVjdGVkUGVyaW9kXCI6XCJcIixcInNlbGVjdGVkWWVhclwiOlwiXCJ9LFwic3RhdHVzXCI6XCJcIn07XHJcbiAgQElucHV0KCdjbG9zZU9uRXNjJykgc2V0IGNsb3NlT25Fc2MoZXNjYXBlQ29uZGl0aW9uOiBib29sZWFuKSB7XHJcbiAgICBpZiAoZXNjYXBlQ29uZGl0aW9uKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlRGVzZWxlY3RvcigpXHJcbiAgICB9XHJcbiAgfVxyXG4gIEBJbnB1dCgpIG9yZ0RldGFpbHM6IGFueTtcclxuXHJcbiAgdXJsID0ncT17XCJieVJlc3BvbnNpYmlsaXRpZXNcIjp7XCJ0eXBlXCI6W1wicmVzcG9uc2liaWxpdGllc19pbl9xdWV1ZVwiXSxcInN1YlR5cGVcIjpbXCJDQ1wiXX0sXCJieVN0YXR1c1wiOntcInR5cGVcIjpbXCJyZXNwb25zaWJpbGl0aWVzX2luX3F1ZXVlXCJdLFwic3ViVHlwZVwiOltdfSxcImZpbHRlck9iamVjdFwiOntcInJlc3BvbnNpYmlsaXR5Q2VudGVyXCI6W10sXCJlbnRydXN0ZWRCeVwiOltdLFwiZW50cnVzdGVkVG9cIjpbXSxcInJpc2tJZHNcIjpbXSxcInJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnlcIjpbXX0sXCJ0aW1lUGVyaW9kRGV0YWlsc1wiOntcInR5cGVcIjpcIlwiLFwic2VsZWN0ZWRQZXJpb2RcIjpcIlwiLFwic2VsZWN0ZWRZZWFyXCI6XCJcIn0sXCJzdGF0dXNcIjpcIlwifSdcclxuICBAT3V0cHV0KCkgcGlja2VyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcG9wdWxhdGVPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGhpZGVFbGVtZW50c0Zyb21Nb3JlT3B0aW9ucyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2xvc2VXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcmVzZXRGb3JtID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkaXNjb25uZWN0UmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2hlY2twb2ludENvdW50VXBkYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcmNTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBvcGVuZWRGcm9tICE6IGFueTsgLy93aGVuIG9wZW5lZCBmcm9tIHJpc2sgdHJlYXRtZW50IGl0IHdpbGwgYmUgJ1JJU0tfVFJFQVRNRU5UJ1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkUkM6IG51bWJlciA9IDA7IC8vIDQtNSBkaWdpdCBpZCBvZiBzZWxlY3RlZCByYyBieSBkZWZhdWx0IHdoZW4gb3BlbmVkIGZyb20gcmlzayB0cmVhdG1lbnRcclxuICAvLyBASW5wdXQoKSBzZWxlY3RlZFByb2dyYW06IGFueSA9IG51bGw7XHJcbiAgZmVhdHVyZUZsYWdfZ3JvdXBzIDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkUHJvZ3JhbSA6IGFueSA9IG51bGw7XHJcbiAgc2VsZWN0ZWRSZXZpZXdlciA6Ym9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCdzZWxlY3RlZFByb2dyYW0nKSBzZXQgc2V0U2VsZWN0ZWRQcm9ncmFtKHByb2dyYW06IGFueSkge1xyXG4gICAgaWYocHJvZ3JhbSAmJiBPYmplY3Qua2V5cyhwcm9ncmFtKT8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtID0gcHJvZ3JhbTtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbSA9IFtdO1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5saW5rZWRQcm9ncmFtID0gW107XHJcbiAgICAgIC8vIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0ucHVzaChwcm9ncmFtKTtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ubGlua2VkUHJvZ3JhbS5wdXNoKHByb2dyYW0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgIC8qIENyZWF0aW5nIGFuIGV2ZW50IGVtaXR0ZXIuICovXHJcbiAgIEBPdXRwdXQoKSBvblJlbW92aW5nQ2hlY2twb2ludDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgIEBPdXRwdXQoKSBpc0Fzc2Vzc21lbnREaXNhYmxlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgQE91dHB1dCgpIGFzc2lnbmVlVHlwZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy8gaXQgd2lsbCBlbWl0IHdoZW4gYXNzaWduZWUgdHlwZSBjaGFuZ2VcclxuICAgQE91dHB1dCgpIG9uUmV2aWV3ZXJUeXBlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvLyBpdCB3aWxsIGVtaXQgd2hlbiByZXZpZXdlciB0eXBlIGNoYW5nZVxyXG5cclxuICBzY3JvbGxUb0JvdHRvbSA9IGZhbHNlO1xyXG4gIGRlc2NyaXB0aW9uOiBFZGl0b3JDb25maWcgPSB7XHJcbiAgICBtb2RlOiAncHJpbWUnLFxyXG4gICAgY29sb3JQYWxldHRlOiB0cnVlLFxyXG4gICAgbGluazogdHJ1ZSxcclxuICAgIHBsYWNlaG9sZGVyOiAnQWRkIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY29tcGxldGluZyB0aGUgcmVzcG9uc2liaWxpdHknLFxyXG4gIH07XHJcbiAgcHJvZ3JhbVBlb3BsZUxpc3Q6IGFueSA9IHtcclxuICAgIGFzc2lnbmVlc0xpc3Q6IFtdLFxyXG4gICAgcmV2aWV3ZXJzTGlzdDogW10sXHJcbiAgICBvdmVyc2VlcnNMaXN0OiBbXSxcclxuICB9XHJcbiAgbG9hZGVyID0gZmFsc2U7XHJcbiAgc3VibWl0dGVkID0gZmFsc2U7XHJcbiAgZWRpdERldGFpbHMhOiBhbnk7XHJcbiAgc21pbGV5TWVzc2FnZSA9IGBEb25lIWA7XHJcbiAgYWN0aW9uQnV0dG9ucyA9IFtcclxuICAgIHsgYnV0dG9uVGV4dDogJ0VudHJ1c3QgTW9yZSBSZXNwb25zaWJpbGl0aWVzJywgY2xhc3M6ICd3aGl0ZS1idG4nLCBpZDogJ2FkZE1vcmUnIH0sXHJcbiAgICB7IGJ1dHRvblRleHQ6ICdWaWV3IFJlc3BvbnNpYmlsaXRpZXMnLCBjbGFzczogJ2JsdWUtYnRuJywgaWQ6ICd2aWV3JyB9LFxyXG4gIF07XHJcbiAgc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gIG1lbWJlcklkID0gMDtcclxuICBvcmdhbml6YXRpb25JZCA9IDA7XHJcbiAgcmNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgYXNzaWdub3JzTGlzdExvYWRlZCA9IGZhbHNlO1xyXG4gIGFzc2lnbmVlc0xpc3RMb2FkZWQgPSBmYWxzZTtcclxuICBjYXRlZ29yaWVzTGlzdExvYWRlZCA9IGZhbHNlO1xyXG4gIGdyb3Vwc0xpc3RMb2FkZWQgPSBmYWxzZTtcclxuICBhc3N1cmFuY2VDYXRlZ29yeUxpc3RMb2FkZWQgPSBmYWxzZTtcclxuICBzZWxlY3RlZEZyYW1ld29ya1ZhbHVlcyE6IGFueTtcclxuICBoYXNSZXZpZXdlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgLy8gdXNlcnNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGFzc2lnbm9yc0xpc3Q6IGFueVtdID0gW107XHJcbiAgYXNzaWduZWVzTGlzdDogYW55W10gPSBbXTtcclxuICByZXZpZXdlcnNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGRpc2FibGVBc3NpZ25lZUlkczogYW55W10gPSBbXTtcclxuICBkaXNhYmxlUmV2aWV3ZXJJZHM6IGFueVtdID0gW107XHJcbiAgZGlzYWJsZU92ZXJzZWVySWRzOiBhbnlbXSA9IFtdO1xyXG4gIHJldmlld2VyTWVtYmVySWRzTGlzdCA6IGFueVtdID0gW107XHJcbiAgZ3JvdXBPdmVyc2Vlckxpc3Q6IGFueVtdID0gW107XHJcbiAgZ3JvdXBSZXZpZXdlckxpc3Q6IGFueVtdID0gW107XHJcbiAgZ3JvdXBBc3NpZ25lZUxpc3Q6IGFueVtdID0gW107XHJcbiAgb3ZlcnNlZXJzTGlzdDogYW55W10gPSBbXTtcclxuICBhbGxVc2Vyc0xpc3Q6IGFueVtdID0gW107XHJcbiAgYmVoYWxmT2ZVc2Vyc0xpc3Q6IGFueVtdID0gW107XHJcbiAgYXNzaWduZWVVc2VyTGlzdDogYW55W10gPSBbXTtcclxuICByZXZpZXdlclVzZXJMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIG92ZXJzZWVyVXNlckxpc3Q6IGFueVtdID0gW107XHJcbiAgb3ZlcnNlZXJVc2VyTm90aWZ5TGlzdDogYW55W10gPSBbXTtcclxuICBhbGxDYXRlZ29yaWVzOiBhbnlbXSA9IFtdO1xyXG4gIGFzc3VyYW5jZUNhdGVnb3JpZXNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGFzc3VyYW5jZVJlcXVpcmVzQXVkaXRMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGdyb3Vwc0xpc3Q6IGFueVtdID0gW107XHJcbiAgT3JnR3JvdXAgOmFueVtdID0gW107XHJcbiAgYWRtaW5zTGlzdDogYW55W10gPSBbXTtcclxuICByZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGNhdGVnb3J5TGlzdDogYW55W10gPSBbXTtcclxuICBub25SZW1vdmFibGVVc2Vyc0xpc3Q6IGFueVtdID0gW107XHJcblxyXG4gIHJlc3BvbnNpYmlsaXR5Rm9ybTogYW55ID0ge1xyXG4gICAgYXNzaWdub3JzOiB7XHJcbiAgICAgIGVuYWJsZTogZmFsc2UsXHJcbiAgICAgIGxpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgcmVzcG9uc2liaWxpdHk6IHtcclxuICAgICAgbmFtZTogJycsXHJcbiAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiBmYWxzZSxcclxuICAgIH0sXHJcbiAgICBhc3NpZ25lZUdyb3Vwczp7XHJcbiAgICAgIHdob0NhbkNvbXBsZXRlOiAnQU5ZT05FJyxcclxuICAgICAgbGlzdDogW11cclxuICAgIH0sXHJcbiAgICBhc3NpZ25lZXM6IHtcclxuICAgICAgd2hvQ2FuQ29tcGxldGU6ICdBTEwnLFxyXG4gICAgICBsaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIGZyZXF1ZW5jeTogJycsXHJcbiAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICBvYmplY3RpdmU6ICcnLFxyXG4gICAgcmM6IFtdLFxyXG4gICAgY2F0ZWdvcnk6IFtdLFxyXG4gICAgcHJvZ3JhbTogW10sXHJcbiAgICBwcm9ncmFtX3NlbGVjdGVkX2lkczogW10sXHJcbiAgICBjaGVja3BvaW50SW5zdHJ1Y3Rpb246ICcnLFxyXG4gICAgY3VzdG9tVGFnczogW10sXHJcbiAgICBjaGVja3BvaW50czogW10sXHJcbiAgICByZXZpZXdlcnM6IHtcclxuICAgICAgc2VxdWVudGlhbFdvcmtmbG93OiB0cnVlLFxyXG4gICAgICByZXZpZXdGcmVxdWVuY3k6IHtcclxuICAgICAgICByZXZpZXdDb21wbGV0ZURheXM6IDIsXHJcbiAgICAgICAgcmV2aWV3Tk90Q29tcGxldGVkRGF5czogMlxyXG4gICAgICB9LFxyXG4gICAgICBsaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIGdyb3VwUmV2aWV3ZXJzOiB7XHJcbiAgICAgIHNlcXVlbnRpYWxXb3JrZmxvdzogdHJ1ZSxcclxuICAgICAgcmV2aWV3RnJlcXVlbmN5OiB7XHJcbiAgICAgICAgcmV2aWV3Q29tcGxldGVEYXlzOiAyLFxyXG4gICAgICAgIHJldmlld05PdENvbXBsZXRlZERheXM6IDJcclxuICAgICAgfSxcclxuICAgICAgbGlzdDogW11cclxuICAgIH0sXHJcbiAgICBvdmVyc2VlcnM6IHtcclxuICAgICAgbm90aWZ5TGlzdDogW10sXHJcbiAgICAgIGxpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgb3ZlcnNlZXJzR3JvdXBzOiB7XHJcbiAgICAgIG5vdGlmeUxpc3Q6IFtdLFxyXG4gICAgICBsaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIGZvcm1hdEFuZEV2aWRlbmNlOiB7XHJcbiAgICAgIGZvcm1hdFJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZm9ybWF0RmlsZXM6IFtdLFxyXG4gICAgICBmb3JtYXRMaW5rczogW10sXHJcbiAgICAgIGV2aWRlbmNlUmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgfSxcclxuICAgIGFzc3VyYW5jZUxpc3Q6IFtdLFxyXG4gICAgcmVxdWlyZXNBdWRpdExpc3Q6IFtdLFxyXG4gICAgcmlza0NsYXNzOiAxLFxyXG4gICAgcmlza01hdHJpeDogJzAsMCwwLDAsMCwwJyxcclxuICAgIGF1ZGl0X2NhdGVnb3J5X2RldGFpbHM6IHtcclxuICAgICAgY2F0ZWdvcnlfaWQ6IDAsXHJcbiAgICAgIHNhbXBsZTogNSxcclxuICAgICAgcGVyY2VudGFnZTogMzAsXHJcbiAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuOiAnMX4wfjN+MScsXHJcbiAgICAgIGZyZXF1ZW5jeV90aW1lOiAnMjM6NTk6MDAnXHJcbiAgICB9LFxyXG4gICAgYXNzZXNzbWVudDoge1xyXG4gICAgICBjYXRlZ29yeV9pZDogJycsIGFzc2Vzc21lbnRfaWQ6ICcnXHJcbiAgICB9LFxyXG4gICAgbmV3X2NoZWNrcG9pbnRzOiB7fSxcclxuICAgIGxpbmtlZFByb2dyYW06IFtdLFxyXG4gIH07XHJcbiAgbW9yZU9wdGlvbnM6IGFueSA9IHtcclxuICAgIE9CSkVDVElWRTogZmFsc2UsXHJcbiAgICBSQzogZmFsc2UsXHJcbiAgICBDQVRFR09SWTogZmFsc2UsXHJcbiAgICBQUk9HUkFNOiBmYWxzZSxcclxuICAgIEZPUk1BVEVfRVZJREVOQ0U6IGZhbHNlLFxyXG4gICAgQ0hFQ0tQT0lOVFM6IGZhbHNlLFxyXG4gICAgQVNTRVNTTUVOVDogZmFsc2UsXHJcbiAgICBSSVNLX0NMQVNTSUZJQ0FUSU9OOiBmYWxzZSxcclxuICAgIFJFVklFV0VSOiBmYWxzZSxcclxuICAgIE9WRVJTRUVSOiBmYWxzZSxcclxuICAgIEFTU1VSQU5DRTogZmFsc2UsXHJcbiAgICBBUFBTOiBmYWxzZSxcclxuICAgIFJFUVVJUkVTX0FVRElUOiBmYWxzZSxcclxuICAgIENIRUNLUE9JTlRTX05FVzogZmFsc2VcclxuICB9O1xyXG4gIGFjdGl2ZVNlbGVjdG9yID0gJyc7XHJcbiAgc2lkZVNlbGVjdG9yRWxlbWVudHM6IGFueSA9IFsnYXNzdXJhbmNlJywgJ2ZyYW1ld29yaycsICdhc3NpZ25vcnMnLCAnYXNzaWduZWVzJywgJ2NhdGVnb3J5JywgJ3Byb2dyYW0nLCAncmMnLCAnY2hlY2twb2ludHMnLCAnZnJlcXVlbmN5JywgJ3Jldmlld2VyJywgJ3Jldmlld2VyRnJlcXVlbmN5JywgJ292ZXJzZWVyJywgJ292ZXJzZWVyTm90aWZ5JywgJ3Jpc2tDYWxjdWxhdG9yJywgJ2lzQXNzZXNzbWVudCcsICdyZXF1aXJlc19hdWRpdCcsICdjaGVja3BvaW50cy1uZXcnXTtcclxuXHJcbiAgZm9jdXMgPSB7XHJcbiAgICByZXNwb25zaWJpbGl0eU5hbWU6IGZhbHNlLFxyXG4gICAgZGVzY3JpcHRpb246IGZhbHNlLFxyXG4gICAgb2JqZWN0aXZlOiBmYWxzZSxcclxuICB9O1xyXG5cclxuICBjYXRlZ29yaWVzOiBhbnkgPSB7XHJcbiAgICByZWd1bGF0aW9uczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIHN0YW5kYXJkczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIGludGVybmFsQ29udHJvbHM6IHtcclxuICAgICAgbGlzdDogW10sXHJcbiAgICAgIHNlbGVjdGVkTGlzdDogW11cclxuICAgIH0sXHJcbiAgICBvdGhlcnM6IHtcclxuICAgICAgbGlzdDogW10sXHJcbiAgICAgIHNlbGVjdGVkTGlzdDogW11cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBhbGxQcm9ncmFtczogYW55W10gPSBbXTtcclxuXHJcbiAgcmlza0NsYXNzaWZpY2F0aW9uID0gW1xyXG4gICAgeyBuYW1lOiAnTG93JywgdmFsdWU6IDEsIGNsYXNzOiAnbG93JyB9LFxyXG4gICAgeyBuYW1lOiAnTG93LU1lZGl1bScsIHZhbHVlOiAyLCBjbGFzczogJ2xvdy1tZWQnIH0sXHJcbiAgICB7IG5hbWU6ICdNZWRpdW0tSGlnaCcsIHZhbHVlOiAzLCBjbGFzczogJ21lZC1oaWdoJyB9LFxyXG4gICAgeyBuYW1lOiAnSGlnaCcsIHZhbHVlOiA0LCBjbGFzczogJ2hpZ2gnIH1cclxuICBdO1xyXG5cclxuICBhc3NpZ25vck1vZGUgPSAnY2hlY2tib3gnO1xyXG4gIHJjTW9kZSA9ICdjaGVja2JveCc7XHJcbiAgaW52YWxpZFR5cGUgPSAnJztcclxuICByZXNwb25zaWJpbGl0eVBheWxvYWQhOiBhbnk7XHJcbiAgYXNzaWduZWVSYWRpb1NlbGVjdCA9IGZhbHNlO1xyXG4gIHByb2dyYW1zTGlzdDogYW55W10gPSBbXTtcclxuXHJcbiAgLy8gZnJlcXVlbmN5IHZhcmlhYmxlIGRlY2xhcmF0aW9uXHJcbiAgZnJlcXVlbmN5RGV0YWlscyA9IHtcclxuICAgIHBhdHRlcm46ICcnLFxyXG4gICAgbm90aWZpY2F0aW9uUGVuZGluZzogMCxcclxuICAgIGRhdGVPZk1vZGlmaWVkOiAwLFxyXG4gICAgZGVhY3RpdmF0aW9uVmFsdWU6IDAsXHJcbiAgICBzZWxlY3RlZFJlcG9ydDogMCxcclxuICAgIGxpZmVjeWNsZTogJzAwMDAtMDAtMDB+fjAnLFxyXG4gICAgc3RhcnREYXRlOiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXHJcbiAgICBzdGFydE9uVGhlRGF5OiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXHJcbiAgICB3aW5kb3c6IDAsXHJcbiAgICBmYWlsZWQ6IDAsXHJcbiAgICB0aW1lOiAnMTE6NTkgcG0nLFxyXG4gICAgZmFpbGVkVGltZTogJycsXHJcbiAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiAwXHJcbiAgfTtcclxuICBmcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdIb3cgb2Z0ZW4gZG9lcyB0aGUgcmVzcG9uc2liaWxpdHkgb2NjdXI/JztcclxuICBzaG9ydE1vbnRoOiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgaXNFZGl0V2hhdDogQm9vbGVhbiA9IHRydWU7XHJcbiAgaXNGcmFtZXdvcmtBdmFpbGFibGUgPSAxO1xyXG4gIGlzTm90aWZpY2F0aW9uUGVuZGluZyA9IDA7XHJcblxyXG4gIGFzc3VyYW5jZUZsYWchOiBhbnk7XHJcbiAgcmlza0NsYXNzaWZpY2F0aW9uRmxhZyE6IGFueTtcclxuICBoaWRkZW5MaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHN1YnNjcmlwdGlvbkRldGFpbHMhOiBhbnk7XHJcbiAgaXNSaXNrRW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICBpc0R1cGxpY2F0ZUVudHJ1c3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhdWRpdFRpbWU6IHN0cmluZyA9ICcxMTo1OSBwbSc7XHJcbiAgc2VuZEF1ZGl0UmVtaW5kZXJzVmFsdWU6IG51bWJlciA9IDI7XHJcbiAgc2FtcGxlVmFsdWU6IGFueTtcclxuICBzYW1wbGVQZXJjZW50YWdlOiBhbnk7XHJcbiAgc2VsZWN0ZWRTYW1wbGUhOiBudW1iZXI7XHJcbiAgaXNTYW1wbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0ZW1wQ2hlY2tWYWx1ZTogbnVtYmVyID0gLTE7XHJcbiAgaXNBc3Nlc3NtZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgbWFuYWdlUGVybWlzc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoZWNrcG9pbnRDb3VudDogbnVtYmVyID0gMDtcclxuICByb2xlQmFzZWRQZXJtaXNzaW9ucyAhOiBhbnk7XHJcbiAgaXNHcm91cEFzc2lnbmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcmVzcG9uc2liaWxpdHlEYXRhICE6IGFueTtcclxuICBvcmlnaW5hbEFzc2lnbmVlICE6IGFueTtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3doYXQnKSB3aGF0SW5wdXQhOiBFbGVtZW50UmVmO1xyXG4gIHVuU3Vic2NyaWJlUHJvZ3JhbSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVzcG9uc2liaWxpdHlTZXJ2aWNlOiBSZXNwb25zaWJpbGl0eVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZyZXF1ZW5jeVNlcnZpY2U6IEZyZXF1ZW5jeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVpS2l0U2VydmljZTogVWlLaXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogU25hY2tCYXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgcHJvZ3JhbVNlcnZpY2U6IFByb2dyYW1zU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5nZXRVc2VySW5mbygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgY29tcGxpYW5jZVN1Ym1vZHVsZSA9IHJlcy5yb2xlQWN0aW9uc1tyZXMucm9sZUFjdGlvbnMuZmluZEluZGV4KChlbGU6IGFueSkgPT4gZWxlLm1vZHVsZU5hbWUgPT0gJ2NvbXBsaWFuY2UnKV0uc3ViTW9kdWxlO1xyXG4gICAgICBjb25zdCBwZXJtaXNzaW9ucyA9IGNvbXBsaWFuY2VTdWJtb2R1bGVbY29tcGxpYW5jZVN1Ym1vZHVsZS5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuc3ViTW9kdWxlTmFtZSA9PSAnUHJvZ3JhbXMnKV0ucGVybWlzc2lvbnM7XHJcbiAgICAgIHRoaXMubWFuYWdlUGVybWlzc2lvbiA9IChwZXJtaXNzaW9uc1twZXJtaXNzaW9ucy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUubmFtZSA9PSAnbWFuYWdlIHByb2dyYW1zJyldLmVuYWJsZSkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLm1hbmFnZVBlcm1pc3Npb24pIHtcclxuICAgICAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnQ0FURUdPUlknKTtcclxuICAgICAgICB0aGlzLmNhdGVnb3JpZXNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnUFJPR1JBTScpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q2F0ZWdvcnlMaXN0KCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5oaWRlRWxlbWVudHNGcm9tTW9yZU9wdGlvbnMuZW1pdCh0aGlzLmhpZGRlbkxpc3QpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzID0gdGhpcy5mZWF0dXJlLmlzRmVhdHVyZUVuYWJsZWQoJ2ZmX3Jlc3BvbnNpYmlsaXR5X2dyb3VwcycpO1xyXG4gICAgdGhpcy5pc1Jlc3BvbnNpYmlsaXR5U2ltcGxpZmllZCA9IHRoaXMuZmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKCdmZl9yZXNwb25zaWJpbGl0eV9zaW1wbGlmaWNhdGlvbicpO1xyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gICAgLy8gICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXNwb25zaWJpbGl0eS5uYW1lID0gXCJhYmNkZWZcIlxyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5oaWRkZW5MaXN0LnB1c2goJ0FTU0VTU01FTlQnKTtcclxuICAgIHRoaXMuZ2V0UkNMaXN0KCk7XHJcbiAgICB0aGlzLmdldEFzc2lnbm9yc0xpc3QoKTtcclxuICAgIHRoaXMuZ2V0QXNzaWduZWVzTGlzdCgpO1xyXG4gICAgdGhpcy5nZXRBc3N1cmFuY2UoKTtcclxuICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCgpO1xyXG4gICAgdGhpcy5nZXRBc3N1cmFuY2VGb3JSZXF1aXJlc0F1ZGl0KCk7XHJcbiAgICB0aGlzLmNoZWNrV2hldGhlckFsbExpc3RzTG9hZGVkKCk7XHJcbiAgICB0aGlzLmdldE9yZ2FuaXphdGlvbkRldGFpbHMoKTtcclxuICAgIHRoaXMuZ2V0VXNlckRldGFpbHMoKTtcclxuICAgIHRoaXMuc2hvcnRNb250aCA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5tb250aEFycmF5Lm1hcChtb250aCA9PiBtb250aC5zdWJzdHJpbmcoMCwgMykpO1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ0NSRUFURScpIHtcclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25JZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSWQoKTtcclxuICAgICAgdGhpcy5tZW1iZXJJZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0TWVtYmVySWQoKTtcclxuICAgICAgdGhpcy5oaWRkZW5MaXN0LnB1c2goJ0NIRUNLUE9JTlRTJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbkRldGFpbHMoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuaXNSaXNrRW5hYmxlID0gcmVzLmVuYWJsZV9yaXNrY2xhc3MgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgIGlmICghcmVzLmVuYWJsZV9yaXNrY2xhc3MpIHtcclxuICAgICAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnUklTS19DTEFTU0lGSUNBVElPTicpO1xyXG4gICAgICAgIHRoaXMuaGlkZUVsZW1lbnRzRnJvbU1vcmVPcHRpb25zLmVtaXQodGhpcy5oaWRkZW5MaXN0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldFN1YnNjcmlwdGlvbkRldGFpbHMoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uRGV0YWlscyA9IHJlcztcclxuICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uRGV0YWlsc1swXS5hc3Nlc3NtZW50X2ZsYWcpIHtcclxuICAgICAgICB0aGlzLmhpZGRlbkxpc3QgPSB0aGlzLmhpZGRlbkxpc3QuZmlsdGVyKGVsZSA9PiBlbGUgIT09ICdBU1NFU1NNRU5UJylcclxuICAgICAgICB0aGlzLmhpZGVFbGVtZW50c0Zyb21Nb3JlT3B0aW9ucy5lbWl0KHRoaXMuaGlkZGVuTGlzdCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5oaWRlRWxlbWVudHNGcm9tTW9yZU9wdGlvbnMuZW1pdCh0aGlzLmhpZGRlbkxpc3QpO1xyXG4gIH1cclxuICBhY3RpdmF0ZVNlbGVjdG9yKHR5cGU6IGFueSwgZXZlbnQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuYWN0aXZlU2VsZWN0b3IgPSBldmVudCA/IHR5cGUgOiAnJztcclxuICAgIGlmICh0eXBlID09PSAnY2hlY2twb2ludHMtbmV3JykgdGhpcy5hdXRoU2VydmljZS5wcmV2aWV3UGFuZWwubmV4dChldmVudCk7XHJcbiAgICBpZiAodGhpcy5zaWRlU2VsZWN0b3JFbGVtZW50cz8uaW5jbHVkZXModHlwZSkpIHtcclxuICAgICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgd2hhdENoYW5nZWQoZXZlbnQ6IGFueSkge1xyXG5cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlc3BvbnNpYmlsaXR5Lm5hbWUgPSBldmVudD8udGFyZ2V0Py52YWx1ZTtcclxuICAgIGlmIChldmVudC50YXJnZXQudmFsdWUudHJpbSgpICE9PSAnJykge1xyXG4gICAgICB0aGlzLmlzRWRpdFdoYXQgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5pbnZhbGlkVHlwZSA9PT0gJ3doYXQnKSB7XHJcbiAgICAgICAgdGhpcy5pbnZhbGlkVHlwZSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzRWRpdFdoYXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBhY3RpdmVEZXNlbGVjdG9yKCkge1xyXG4gICAgdGhpcy5hY3RpdmVTZWxlY3RvciA9ICcnO1xyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgYWRkTW9yZUluZm8oZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSA9IHRydWU7XHJcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0NIRUNLUE9JTlRTX05FVycgJiYgZXZlbnQuY2hlY2twb2ludF9uZXcgJiYgdGhpcy5jaGVja3BvaW50Q291bnQpIHtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zW2V2ZW50LmNvZGVdID0gZXZlbnQuY2hlY2tlZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJDTGlzdChwcm9ncmFtX2lkPzogc3RyaW5nKSB7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIGlmIChwcm9ncmFtX2lkKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1faWRzJywgcHJvZ3JhbV9pZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZT8uZ2V0UmVzcG9uc2liaWxpdHlDZW50ZXJMaXN0KHBhcmFtcykuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCA9IHJlcztcclxuICAgICAgdGhpcy5yY0xpc3RMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgICAgY29uc3QgaWRzID0gdGhpcy5yZXR1cm5JZHModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmMsICdpdGVtX2lkJyk7XHJcbiAgICAgIGNvbnN0IFJDID0gdGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LmZpbHRlcigoZWxlbWVudDogYW55KSA9PiBpZHM/LmluY2x1ZGVzKGVsZW1lbnQuaXRlbV9pZCkpO1xyXG4gICAgICBpZiAoUkM/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjID0gUkM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmMgPSBbXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMub3BlbmVkRnJvbSA9PT0gJ1JJU0tfVFJFQVRNRU5UJykge1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjID0gdGhpcy5zZXRMaXN0KHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCwgW3RoaXMuc2VsZWN0ZWRSQ10sICdpdGVtX2lkJyk7XHJcbiAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5SQyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25CdXR0b25zID0gW1xyXG4gICAgICAgICAgeyBidXR0b25UZXh0OiAnR28gdG8gcmlzayB0cmVhdG1lbnQnLCBjbGFzczogJ2JsdWUtYnRuJywgaWQ6ICd2aWV3JyB9LFxyXG4gICAgICAgIF1cclxuICAgICAgICAvLyBQcmV2aW91c2x5IHRoZXJlIHdhcyBvbmx5IFJDIHdhcyBlbWl0dGluZyB3aGljaCBtYWRlIHRoZSBjaGVja2VkIG9wdGlvbnMgdG8gZGUgY2hlY2sgbm93IGNoZWNraW5nIHRoZSBjb25kaXRpb24gYW5kIHNlbmRpbmcgYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zIFxyXG4gICAgICAgIGxldCBjaGVja2VkTW9yZU9wdGlvbnMgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLm1vcmVPcHRpb25zKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5tb3JlT3B0aW9uc1trZXldKSB7XHJcbiAgICAgICAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKGtleSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbi5lbWl0KGNoZWNrZWRNb3JlT3B0aW9ucyk7XHJcblxyXG4gICAgICB9XHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIHRoaXMucmNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlckRldGFpbHMoKSB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJJbmZvKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmlzTm90aWZpY2F0aW9uUGVuZGluZyA9IHJlcy5ub3RpZmljYXRpb25fcGVuZGluZ19mbGFnO1xyXG4gICAgICB0aGlzLmFjdGlvbkJ1dHRvbnNbMV0uYnV0dG9uVGV4dCA9IHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nID8gJ1ZpZXcgUmVzcG9uc2liaWxpdGllcyBpbiBRdWV1ZScgOiAnVmlldyBSZXNwb25zaWJpbGl0aWVzJztcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRBc3N1cmFuY2UoKSB7XHJcbiAgICB0aGlzLmFzc3VyYW5jZUNhdGVnb3J5TGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRBc3N1cmFuY2UoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcmllc0xpc3QgPSByZXM7XHJcbiAgICAgIGlmICgodGhpcy5zdWJzY3JpcHRpb25EZXRhaWxzICYmICF0aGlzLnN1YnNjcmlwdGlvbkRldGFpbHNbMF0uYXNzdXJhbmNlX2ZsYWcpIHx8IHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcmllc0xpc3Q/Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgdGhpcy5oaWRkZW5MaXN0LnB1c2goJ0FTU1VSQU5DRScpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaGlkZUVsZW1lbnRzRnJvbU1vcmVPcHRpb25zLmVtaXQodGhpcy5oaWRkZW5MaXN0KTtcclxuICAgICAgdGhpcy5hc3N1cmFuY2VDYXRlZ29yeUxpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLmFzc3VyYW5jZUNhdGVnb3J5TGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEFzc3VyYW5jZUZvclJlcXVpcmVzQXVkaXQoKSB7XHJcbiAgICAvLyB0aGlzLmFzc3VyYW5jZUNhdGVnb3J5TGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRBc3N1cmFuY2VGb3JSZXF1aXJlc0F1ZGl0KCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmFzc3VyYW5jZVJlcXVpcmVzQXVkaXRMaXN0ID0gcmVzO1xyXG4gICAgICBpZiAoKHRoaXMuc3Vic2NyaXB0aW9uRGV0YWlscyAmJiAhdGhpcy5zdWJzY3JpcHRpb25EZXRhaWxzWzBdLmF1ZGl0X2ZsYWcpIHx8IHRoaXMuYXNzdXJhbmNlUmVxdWlyZXNBdWRpdExpc3Q/Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgdGhpcy5oaWRkZW5MaXN0LnB1c2goJ1JFUVVJUkVTX0FVRElUJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5oaWRlRWxlbWVudHNGcm9tTW9yZU9wdGlvbnMuZW1pdCh0aGlzLmhpZGRlbkxpc3QpO1xyXG4gICAgICAvLyB0aGlzLmFzc3VyYW5jZUNhdGVnb3J5TGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIC8vIHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcnlMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3JnYW5pemF0aW9uRGV0YWlscygpIHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uRGV0YWlscygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5pc0ZyYW1ld29ya0F2YWlsYWJsZSA9IHJlcz8uZW5hYmxlX3Jlc3BvbnNpYmlsaXR5X2ZyYW1ld29yaztcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRDYXRlZ29yeUxpc3QoKSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRDYXRlZ29yaWVzTGlzdCgpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICBjb25zdCBkYXRhID0gcmVzO1xyXG4gICAgICB0aGlzLmFsbENhdGVnb3JpZXMgPSBjbG9uZURlZXAocmVzKTtcclxuICAgICAgZGF0YS5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmNvbXBsaWFuY2VfdHlwZSA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmNhdGVnb3JpZXMub3RoZXJzLmxpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jb21wbGlhbmNlX3R5cGUgPT0gMSkge1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yaWVzLnJlZ3VsYXRpb25zLmxpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jb21wbGlhbmNlX3R5cGUgPT0gMikge1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yaWVzLnN0YW5kYXJkcy5saXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuY29tcGxpYW5jZV90eXBlID09IDMpIHtcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcy5pbnRlcm5hbENvbnRyb2xzLmxpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGZpbHRlckxpc3RzQWNjb3JkaW5nVG9Qcm9ncmFtKHByb2dyYW1faWQ/OiBzdHJpbmcpIHtcclxuICAgIHRoaXMudW5TdWJzY3JpYmVQcm9ncmFtLm5leHQoKTtcclxuICAgIHRoaXMudW5TdWJzY3JpYmVQcm9ncmFtLmNvbXBsZXRlKCk7XHJcbiAgICBpZiAocHJvZ3JhbV9pZCAmJiB0aGlzLm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbikge1xyXG4gICAgICB0aGlzLmdldFBlb3BsZUxpc3RBZ2FpbnN0UElEKHByb2dyYW1faWQpO1xyXG4gICAgICB0aGlzLmdldFJDTGlzdChwcm9ncmFtX2lkKVxyXG4gICAgICB0aGlzLmdldEdyb3Vwc0xpc3QocHJvZ3JhbV9pZCk7XHJcbiAgICAgIHRoaXMuZ2V0QXNzaWdub3JzTGlzdChwcm9ncmFtX2lkKTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdldEFzc2lnbmVlc0xpc3QoKTtcclxuICAgICAgdGhpcy5nZXRSQ0xpc3QoKTtcclxuICAgICAgdGhpcy5nZXRHcm91cHNMaXN0KCk7XHJcbiAgICAgIHRoaXMuZ2V0QXNzaWdub3JzTGlzdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UHJvZ3JhbURldGFpbHMocHJvZ3JhbUlkPzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLnByb2dyYW1TZXJ2aWNlLmdldFByb2dyYW0ocHJvZ3JhbUlkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmKHJlcz8uYXNzZXNzbWVudCAmJiByZXM/LmFzc2Vzc21lbnQ/Lmxlbmd0aCAmJiBPYmplY3Qua2V5cyh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzZXNzbWVudCk/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGNhdGVnb3J5QXNzZXNzbWVudCA9IHJlcz8uYXNzZXNzbWVudC5maWx0ZXIoKGFzc2Vzc21lbnQ6IGFueSkgPT4gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2Vzc21lbnQ/LmNhdGVnb3J5X2lkID09PSBhc3Nlc3NtZW50Py5jYXRlZ29yeV9pZCk7XHJcbiAgICAgICAgaWYoY2F0ZWdvcnlBc3Nlc3NtZW50Py5sZW5ndGggJiYgY2F0ZWdvcnlBc3Nlc3NtZW50WzBdPy5hc3Nlc3NtZW50SWRzPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IGlzRXhpc3QgPSBjYXRlZ29yeUFzc2Vzc21lbnRbMF0/LmFzc2Vzc21lbnRJZHM/LmluY2x1ZGVzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3Nlc3NtZW50Py5hc3Nlc3NtZW50X2lkKTtcclxuICAgICAgICAgIGlmKCFpc0V4aXN0KXtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzZXNzbWVudCA9IHsgYXNzZXNzbWVudF9pZDogXCJcIiwgY2F0ZWdvcnlfaWQ6IFwiXCIgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3Nlc3NtZW50ID0geyBhc3Nlc3NtZW50X2lkOiBcIlwiLCBjYXRlZ29yeV9pZDogXCJcIiB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0TGlzdHNBY2NvcmRpbmdUb1Byb2dyYW0ocHJvZ3JhbV9pZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmdldFBlb3BsZUxpc3RBZ2FpbnN0UElEKHByb2dyYW1faWQpO1xyXG4gICAgdGhpcy5nZXRSQ0xpc3QocHJvZ3JhbV9pZClcclxuICAgIHRoaXMuZ2V0R3JvdXBzTGlzdChwcm9ncmFtX2lkKTtcclxuICAgIHRoaXMuZ2V0QXNzaWdub3JzTGlzdChwcm9ncmFtX2lkKTtcclxuICB9XHJcblxyXG4gIGdldEFzc2lnbm9yc0xpc3QocHJvZ3JhbV9pZD86IHN0cmluZykge1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBpZiAocHJvZ3JhbV9pZCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwcm9ncmFtX2lkcycsIHByb2dyYW1faWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZ2V0QXNzaWdub3JzTGlzdChwYXJhbXMpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5iZWhhbGZPZlVzZXJzTGlzdCA9IHJlcztcclxuICAgICAgaWYgKHByb2dyYW1faWQpIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFzc2lnbm9yc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLmFzc2lnbm9yc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRBc3NpZ25lZXNMaXN0KHByb2dyYW1faWQ/OiBzdHJpbmcpIHtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgaWYgKHByb2dyYW1faWQpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZHMnLCBwcm9ncmFtX2lkKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldE9yZ2FuaXphdGlvblBlb3BsZShwYXJhbXMpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuXHJcbiAgICAgIHRoaXMuYWxsVXNlcnNMaXN0ID0gcmVzLm1hcCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgICAgdXNlci5tZW1iZXJfbmFtZSA9IHVzZXIuZW1wbG95ZWVfbmFtZTtcclxuICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChwcm9ncmFtX2lkKSB7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoTGlzdHNXaGlsZVByb2dyYW1TZWxlY3RlZCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hc3NpZ25lZXNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0sIGVyciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgdGhpcy5hc3NpZ25lZXNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGVvcGxlTGlzdEFnYWluc3RQSUQocHJvZ3JhbV9pZDogc3RyaW5nKSB7XHJcblxyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBpZiAocHJvZ3JhbV9pZCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwcm9ncmFtX2lkcycsIHByb2dyYW1faWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uUGVvcGxlKHBhcmFtcykuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmFzc2lnbmVlc0xpc3QgPSByZXMuYXNzaWduZWUubWFwKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgICB1c2VyLm1lbWJlcl9uYW1lID0gdXNlci5lbXBsb3llZV9uYW1lO1xyXG4gICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5vdmVyc2VlcnNMaXN0ID0gcmVzLm92ZXJzZWVyLm1hcCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgICAgdXNlci5tZW1iZXJfbmFtZSA9IHVzZXIuZW1wbG95ZWVfbmFtZTtcclxuICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucmV2aWV3ZXJzTGlzdCA9IHJlcy5yZXZpZXdlci5tYXAoKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIHVzZXIubWVtYmVyX25hbWUgPSB1c2VyLmVtcGxveWVlX25hbWU7XHJcbiAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnByb2dyYW1QZW9wbGVMaXN0ID0ge1xyXG4gICAgICAgIGFzc2lnbmVlc0xpc3Q6IFsuLi4gbmV3IFNldCh0aGlzLmFzc2lnbmVlc0xpc3QpXSxcclxuICAgICAgICByZXZpZXdlcnNMaXN0OiBbLi4uIG5ldyBTZXQodGhpcy5yZXZpZXdlcnNMaXN0KV0sXHJcbiAgICAgICAgb3ZlcnNlZXJzTGlzdDogWy4uLiBuZXcgU2V0KHRoaXMub3ZlcnNlZXJzTGlzdCldLFxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9hc3NpZ25lZV9pZHMgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb25zdCBpZHMgPSB0aGlzLnJldHVybklkcyh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCwgJ215X21lbWJlcl9pZCcpO1xyXG4gICAgICAgICAgY29uc3QgYWxsSWRzID0gWy4uLm5ldyBTZXQoaWRzKSwgLi4ubmV3IFNldCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9hc3NpZ25lZV9pZHMpXVxyXG4gICAgICAgICAgY29uc3QgYXNzaWdub3JzID0gdGhpcy5hc3NpZ25lZXNMaXN0LmZpbHRlcigoZWxlbWVudDogYW55KSA9PiBhbGxJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm15X21lbWJlcl9pZCkpO1xyXG4gICAgICAgICAgaWYgKGFzc2lnbm9ycz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0ID0gYXNzaWdub3JzO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgYXNzaWdub3JzID0gdGhpcy5hc3NpZ25lZXNMaXN0LmZpbHRlcigoZWxlbWVudDogYW55KSA9PiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9hc3NpZ25lZV9pZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm15X21lbWJlcl9pZCkpO1xyXG4gICAgICAgICAgaWYgKGFzc2lnbm9ycz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0ID0gYXNzaWdub3JzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKXtcclxuICAgICAgICB0aGlzLnBvcHVsYXRlUHJvZ3JhbUFzc2lnbmVlR3JvdXAoKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjaGVja2VkTW9yZU9wdGlvbnMgPSBbXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9yZXZpZXdlcnMgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgaWRzID0gdGhpcy5yZXR1cm5JZHModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QsICdteV9tZW1iZXJfaWQnKTtcclxuICAgICAgICBjb25zdCBhbGxJZHMgPSBbLi4ubmV3IFNldChpZHMpLCAuLi5uZXcgU2V0KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW1bMF0uZGVmYXVsdF9yZXZpZXdlcnMpXVxyXG4gICAgICAgIGNvbnN0IHJldmlld2VycyA9IHRoaXMucmV2aWV3ZXJzTGlzdC5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4gYWxsSWRzPy5pbmNsdWRlcyhlbGVtZW50Py5teV9tZW1iZXJfaWQpKTtcclxuICAgICAgICAvLyBjb25zdCByZXZpZXdlcnMgPSB0aGlzLnJldmlld2Vyc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW1bMF0uZGVmYXVsdF9yZXZpZXdlcnM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm15X21lbWJlcl9pZCkpO1xyXG4gICAgICAgIGlmICgocmV2aWV3ZXJzPy5sZW5ndGggfHwgKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzICYmIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID4gMCkpKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdCA9IHJldmlld2VycztcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0ID0gcmV2aWV3ZXJzO1xyXG4gICAgICAgICAgaWYgKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0ID0gdGhpcy5hc3NpZ25Vc2VyTWVtYmVySWQodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QpXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5SRVZJRVdFUiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0ID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0ID0gW107XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtWzBdLmRlZmF1bHRfb3ZlcnNlZXJzIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q/Lmxlbmd0aCB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBpZHMgPSB0aGlzLnJldHVybklkcyh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0LCAnbXlfbWVtYmVyX2lkJyk7XHJcbiAgICAgICAgY29uc3QgYWxsRGVmYXVsdENDSWRzID0gWy4uLm5ldyBTZXQoaWRzKSwgLi4ubmV3IFNldCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9vdmVyc2VlcnM/LmNjX2VtYWlsKV1cclxuICAgICAgICBjb25zdCBvdmVyc2VlcnNDQyA9IHRoaXMub3ZlcnNlZXJzTGlzdD8uZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IGFsbERlZmF1bHRDQ0lkcz8uaW5jbHVkZXMoZWxlbWVudD8ubXlfbWVtYmVyX2lkKSk7XHJcbiAgICAgICAgLy8gY29uc3Qgb3ZlcnNlZXJzID0gdGhpcy5vdmVyc2VlcnNMaXN0LmZpbHRlcigoZWxlbWVudDogYW55KSA9PiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtWzBdLmRlZmF1bHRfb3ZlcnNlZXJzLmNjX2VtYWlsLmluY2x1ZGVzKGVsZW1lbnQubXlfbWVtYmVyX2lkKSk7XHJcbiAgICAgICAgY29uc3Qgbm90aWZ5TGlzdElkcyA9IHRoaXMucmV0dXJuSWRzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5ub3RpZnlMaXN0LCAnbXlfbWVtYmVyX2lkJyk7XHJcbiAgICAgICAgY29uc3QgYWxsRGVmYXVsdENDRmFpbHVyZUlkcyA9IFsuLi5uZXcgU2V0KG5vdGlmeUxpc3RJZHMpLCAuLi5uZXcgU2V0KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X292ZXJzZWVycz8uZmFpbHVyZV9jY19lbWFpbCldXHJcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJzQ0NGYWlsdXJlID0gdGhpcy5vdmVyc2VlcnNMaXN0Py5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4gYWxsRGVmYXVsdENDRmFpbHVyZUlkcz8uaW5jbHVkZXMoZWxlbWVudD8ubXlfbWVtYmVyX2lkKSk7XHJcbiAgICAgICAgLy8gY29uc3Qgbm90aWZ5T3ZlcnNlZXJzID0gdGhpcy5vdmVyc2VlcnNMaXN0LmZpbHRlcigoZWxlbWVudDogYW55KSA9PiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtWzBdLmRlZmF1bHRfb3ZlcnNlZXJzLmZhaWx1cmVfY2NfZW1haWwuaW5jbHVkZXMoZWxlbWVudC5teV9tZW1iZXJfaWQpKTtcclxuICAgICAgICAvLyBpZiAob3ZlcnNlZXJzPy5sZW5ndGgpIHtcclxuICAgICAgICAvLyAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0ID0gb3ZlcnNlZXJzO1xyXG4gICAgICAgIC8vICAgdGhpcy5tb3JlT3B0aW9ucy5PVkVSU0VFUiA9IHRydWU7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIGlmIChub3RpZnlPdmVyc2VlcnM/Lmxlbmd0aCkge1xyXG4gICAgICAgIC8vICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QgPSBub3RpZnlPdmVyc2VlcnM7XHJcbiAgICAgICAgLy8gICB0aGlzLm1vcmVPcHRpb25zLk9WRVJTRUVSID0gdHJ1ZTtcclxuICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgIGlmIChvdmVyc2VlcnNDQz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdCA9IG92ZXJzZWVyc0NDO1xyXG4gICAgICAgICAgaWYgKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdCA9IHRoaXMuYXNzaWduVXNlck1lbWJlcklkKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5PVkVSU0VFUiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0ID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvdmVyc2VlcnNDQ0ZhaWx1cmU/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QgPSBvdmVyc2VlcnNDQ0ZhaWx1cmU7XHJcbiAgICAgICAgICBpZiAodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5ub3RpZnlMaXN0ID0gdGhpcy5hc3NpZ25Vc2VyTWVtYmVySWQodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLk9WRVJTRUVSID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKXtcclxuICAgICAgdGhpcy5wb3B1bGF0ZVByb2dyYW1PdmVyc2Vlckdyb3VwKCk7XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5tb3JlT3B0aW9ucykge1xyXG4gICAgICAgIGlmICh0aGlzLm1vcmVPcHRpb25zW2tleV0pIHtcclxuICAgICAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKGtleSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbi5lbWl0KGNoZWNrZWRNb3JlT3B0aW9ucyk7XHJcblxyXG5cclxuICAgIH0sIGVyciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICBnZXRHcm91cHNMaXN0KHByb2dyYW1faWQ/OiBzdHJpbmcpIHtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgaWYgKHByb2dyYW1faWQpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZHMnLCBwcm9ncmFtX2lkKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbkdyb3VwcyhwYXJhbXMpLnBpcGUodGFrZVVudGlsKHRoaXMudW5TdWJzY3JpYmVQcm9ncmFtKSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBkYXRhID0gcmVzID8/IFtdO1xyXG4gICAgICBpZighcHJvZ3JhbV9pZCl7XHJcbiAgICAgICAgdGhpcy5PcmdHcm91cCA9IGRhdGFcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBncm91cHM6IGFueSA9IFtdO1xyXG4gICAgICBpZihkYXRhPy5sZW5ndGgpIHtcclxuICAgICAgICBkYXRhPy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgICAgICAgZ3JvdXBOYW1lOiBlbGVtZW50Lmdyb3VwX25hbWUsXHJcbiAgICAgICAgICAgIHVzZXJJZHM6IGVsZW1lbnQubWVtYmVyX2lkcyxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBncm91cHMucHVzaChvYmopO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZ3JvdXBzTGlzdCA9IGdyb3VwcztcclxuICAgICAgdGhpcy5ncm91cHNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgaWYodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgJiYgdGhpcy5PcmdHcm91cD8ubGVuZ3RoICYmIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0/Lmxlbmd0aCl7XHJcbiAgICAgIHRoaXMucmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XHJcbiAgICB9XHJcbiAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9hc3NpZ25lZV9ncm91cF9pZHMgJiYgcHJvZ3JhbV9pZCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBzID0gZGF0YS5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbVswXS5kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwX2lkcz8uaW5jbHVkZXMoZWxlbWVudC5ncm91cF9pZCkpO1xyXG4gICAgICAgIGlmIChncm91cHM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgbGV0IG1lbWJlcklkczogYW55W10gPSBbXTtcclxuICAgICAgICAgIHNlbGVjdGVkR3JvdXBzLmZvckVhY2goKGVhY2hHcm91cDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlYWNoR3JvdXA/Lm1lbWJlcl9pZHM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIG1lbWJlcklkcyA9IFsuLi5uZXcgU2V0KG1lbWJlcklkcy5jb25jYXQoZWFjaEdyb3VwPy5tZW1iZXJfaWRzKSldXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBpZHMgPSB0aGlzLnJldHVybklkcyh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCwgJ215X21lbWJlcl9pZCcpO1xyXG4gICAgICAgICAgICBjb25zdCBhbGxJZHMgPSBbLi4ubmV3IFNldChpZHMpLCAuLi5uZXcgU2V0KG1lbWJlcklkcyldXHJcbiAgICAgICAgICAgIGNvbnN0IGFzc2lnbm9ycyA9IHRoaXMuYXNzaWduZWVzTGlzdC5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4gYWxsSWRzPy5pbmNsdWRlcyhlbGVtZW50Py5teV9tZW1iZXJfaWQpKTtcclxuICAgICAgICAgICAgaWYgKGFzc2lnbm9ycz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QgPSBhc3NpZ25vcnM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFzc2lnbm9ycyA9IHRoaXMuYXNzaWduZWVzTGlzdC5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4gbWVtYmVySWRzPy5pbmNsdWRlcyhlbGVtZW50Py5teV9tZW1iZXJfaWQpKTtcclxuICAgICAgICAgICAgaWYgKGFzc2lnbm9ycz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QgPSBhc3NpZ25vcnM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIHRoaXMuZ3JvdXBzTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBnZXRFZGl0UmVzcG9uc2liaWxpdHlEZXRhaWxzKGlkOiBhbnkpIHtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmVkaXRSZXNwb25zaWJpbGl0eShpZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmlzRHVwbGljYXRlRW50cnVzdCA9IHRydWU7XHJcbiAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsQXNzaWduZWUgPSBbTnVtYmVyKHJlcy5hc3NpZ25lZF90byldO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyRGV0YWlscygpPy51c2VyO1xyXG4gICAgICAgIHRoaXMuaXNHcm91cEFzc2lnbmVkID0gcmVzPy5pc0dyb3VwQXNzaWduVG8gPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgY29uc3QgY3VycmVudHNVZXJJbmZvID0ge1xyXG4gICAgICAgICAgbWVtYmVyX2VtYWlsOiBjdXJyZW50VXNlcj8uZW1haWwsXHJcbiAgICAgICAgICBtZW1iZXJfaWQ6IGN1cnJlbnRVc2VyLmlkLFxyXG4gICAgICAgICAgbWVtYmVyX25hbWU6IGN1cnJlbnRVc2VyLm5hbWUsXHJcbiAgICAgICAgICBvcmdhbmlzYXRpb25faWQ6IGN1cnJlbnRVc2VyLm9yZ2FuaXNhdGlvbl9pZCxcclxuICAgICAgICAgIF9pZDogdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyRGV0YWlscygpLl9pZFxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0ZXN0UGxhbkNhdGVnb3J5ID0gdHlwZW9mIChyZXM/LnRlc3RwbGFuX2NhdGVnb3J5X2lkKSA9PT0gJ3N0cmluZycgPyBbXSA6IHJlcz8udGVzdHBsYW5fY2F0ZWdvcnlfaWQ7XHJcbiAgICAgICAgY29uc3QgcmVxdWlyZWRBdWRpdENhdGVnb3J5SWQgPSByZXM/LmF1ZGl0X2NhdGVnb3J5X2RldGFpbHM/LmNhdGVnb3J5X2lkID8gW3Jlcz8uYXVkaXRfY2F0ZWdvcnlfZGV0YWlscz8uY2F0ZWdvcnlfaWRdIDogW107XHJcbiAgICAgICAgY29uc3QgcmV2aWV3ZXJEZXRhaWxzID0gT2JqZWN0LmtleXMocmVzPy5yZXZpZXdlcl9hcnIpO1xyXG4gICAgICAgIHRoaXMuaGFzUmV2aWV3ZXIgPSByZXZpZXdlckRldGFpbHM/Lmxlbmd0aCA+IDBcclxuICAgICAgICB0aGlzLmFzc2lnbmVlUmFkaW9TZWxlY3QgPSAocmVzPy5hc3NpZ25lZF90b19tZW1iZXJfaWQ/Lmxlbmd0aCA9PSAwKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRW50cnVzdCA9IHJlcy5pc0dyb3VwQXNzaWduVG8gPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgbGV0IGxpbmthZ2UgPSByZXM/LmxpbmtlZFByb2dyYW1EZXRhaWxzO1xyXG4gICAgICAgIGxpbmthZ2UucHVzaChyZXM/LnByb2dyYW1EZXRhaWxzKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybSA9IHtcclxuICAgICAgICAgIGFzc2lnbm9yczoge1xyXG4gICAgICAgICAgICBlbmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBsaXN0OiB0aGlzLnNldExpc3QodGhpcy5hc3NpZ25vcnNMaXN0LCBbcmVzLm1lbWJlcl9pZF0sICdtZW1iZXJfaWQnKT8ubGVuZ3RoID4gMCA/IHRoaXMuc2V0TGlzdCh0aGlzLmFzc2lnbm9yc0xpc3QsIFtyZXMubWVtYmVyX2lkXSwgJ21lbWJlcl9pZCcpIDogW2N1cnJlbnRzVWVySW5mb10sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHk6IHtcclxuICAgICAgICAgICAgbmFtZTogcmVzPy5yZXBvcnRfbmFtZSxcclxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcz8ua2V5X2NvbXBsaWFuY2UsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgYXNzaWduZWVzOiB7XHJcbiAgICAgICAgICAgIHdob0NhbkNvbXBsZXRlOiAocmVzLmlzR3JvdXBBc3NpZ25UbykgPyAnQU5ZX09ORScgOiAnQUxMJyxcclxuICAgICAgICAgICAgbGlzdDogKHJlcy5hc3NpZ25lZF90b19tZW1iZXJfaWQ/Lmxlbmd0aCA9PSAwKSA/IHRoaXMuc2V0TGlzdCh0aGlzLmFzc2lnbmVlc0xpc3QsIFtOdW1iZXIocmVzLmFzc2lnbmVkX3RvKV0sICdlbXBsb3llZV9pZCcpIDpcclxuICAgICAgICAgICAgICB0aGlzLnNldExpc3QodGhpcy5hc3NpZ25lZXNMaXN0LCByZXMuYXNzaWduZWRfdG9fbWVtYmVyX2lkLCAnbXlfbWVtYmVyX2lkJyksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZnJlcXVlbmN5OiByZXM/LmZyZXF1ZW5jeV9kZXRhaWxzLFxyXG4gICAgICAgICAgZGVzY3JpcHRpb246IHJlcz8ucmVtYXJrcyxcclxuICAgICAgICAgIG9iamVjdGl2ZTogcmVzPy5vYmplY3RpdmUsXHJcbiAgICAgICAgICByYzogdGhpcy5zZXRMaXN0KHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCwgW051bWJlcihyZXM/LnJjX2lkKV0sICdyY19pZCcpLFxyXG4gICAgICAgICAgY2F0ZWdvcnk6IChyZXM/LnByb2dyYW1fY2F0X2lkcz8ubGVuZ3RoKSA/IHJlcz8uY2F0ZWdvcnlfaWRzX2FycmF5LmZpbHRlcigoZWxlOiBhbnkpID0+ICFyZXMucHJvZ3JhbV9jYXRfaWRzPy5pbmNsdWRlcyhlbGUpKSA6IHJlcz8uY2F0ZWdvcnlfaWRzX2FycmF5LFxyXG4gICAgICAgICAgcHJvZ3JhbV9zZWxlY3RlZF9pZHM6IHJlcz8uY2F0ZWdvcnlfaWQuc3BsaXQoJywnKSA/PyBbXSxcclxuICAgICAgICAgIGNhdGVnb3J5X2lkOiByZXM/LmNhdGVnb3J5X2lkID8/ICcnLFxyXG5cclxuICAgICAgICAgIGxpbmtlZFByb2dyYW06IGxpbmthZ2UgPz8gcmVzPy5saW5rZWRQcm9ncmFtRGV0YWlscyxcclxuICAgICAgICAgIHByb2dyYW06IChyZXM/LnByb2dyYW1EZXRhaWxzPy5jYXRlZ29yeV9pZCkgPyBbcmVzPy5wcm9ncmFtRGV0YWlsc10gOiBbXSxcclxuICAgICAgICAgIGNoZWNrcG9pbnRJbnN0cnVjdGlvbjogcmVzPy5jaGVja3BvaW50X2Rlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgY3VzdG9tVGFnczogKHJlcz8uY3VzdG9tX3RhZ3MpID8gSlNPTi5wYXJzZShyZXM/LmN1c3RvbV90YWdzKSA6ICcnLFxyXG4gICAgICAgICAgY2hlY2twb2ludHM6IChyZXM/LmNoZWNrcG9pbnRfZGV0YWlscykgPyBKU09OLnBhcnNlKHJlcz8uY2hlY2twb2ludF9kZXRhaWxzKSA6ICcnLFxyXG4gICAgICAgICAgcmV2aWV3ZXJzOiB7XHJcbiAgICAgICAgICAgIHNlcXVlbnRpYWxXb3JrZmxvdzogKHJlcz8ucmV2aWV3ZXJfYXJyPy5sZXZlbDE/LnR5cGUgPT0gJ1NFUVVFTlRJQUwnKSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgcmV2aWV3RnJlcXVlbmN5OiB7XHJcbiAgICAgICAgICAgICAgcmV2aWV3Q29tcGxldGVEYXlzOiAocmV2aWV3ZXJEZXRhaWxzPy5sZW5ndGggPiAwKSA/IHJlcz8ucmV2aWV3X2FmdGVyX2RheXMgOiAyLFxyXG4gICAgICAgICAgICAgIHJldmlld05PdENvbXBsZXRlZERheXM6IChyZXZpZXdlckRldGFpbHM/Lmxlbmd0aCA+IDApID8gcmVzPy5yZXZpZXdfZmFpbGVkX2FmdGVyX2RheXMgOiAyXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFjY2VwdGVkRGF0YTogcmV2aWV3ZXJEZXRhaWxzPy5sZW5ndGggPiAwID8gcmVzPy5yZXZpZXdlcl9hcnI/LmxldmVsMT8ucmV2aWV3ZXJzIDogW10sXHJcbiAgICAgICAgICAgIGxpc3Q6IHJldmlld2VyRGV0YWlscz8ubGVuZ3RoID4gMCA/IHRoaXMuc2V0UmV2aWV3ZXJQYXlsb2FkKHJlcz8ucmV2aWV3ZXJfYXJyPy5sZXZlbDE/LnJldmlld2VycywgJ29iamVjdCcsIHJlcz8ucmV2aWV3ZXJfYXJyPy5sZXZlbDE/LnR5cGUpIDogW11cclxuICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgb3ZlcnNlZXJzOiB7XHJcbiAgICAgICAgICAgICBsaXN0OiAocmVzPy5jY19lbWFpbCkgPyB0aGlzLnNldExpc3QodGhpcy5vdmVyc2VlcnNMaXN0LCBPYmplY3Qua2V5cyhyZXM/LmNjX2VtYWlsKS5tYXAoTnVtYmVyKSwgJ2VtcGxveWVlX2lkJykgOiBbXSxcclxuICAgICAgICAgICAgbm90aWZ5TGlzdDogKHJlcz8uZmFpbHVyZV9jY19lbWFpbCkgPyB0aGlzLnNldExpc3QodGhpcy5vdmVyc2VlcnNMaXN0LCBPYmplY3Qua2V5cyhyZXM/LmZhaWx1cmVfY2NfZW1haWwpLm1hcChOdW1iZXIpLCAnZW1wbG95ZWVfaWQnKSA6IFtdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZvcm1hdEFuZEV2aWRlbmNlOiB7XHJcbiAgICAgICAgICAgIGZvcm1hdFJlcXVpcmVkOiAocmVzPy5yZXBvcnRfZm9ybWF0Py5sZW5ndGggPiAwIHx8IHJlcz8ubGlua19mb3JfZGV0YWlscz8ubGVuZ3RoID4gMCkgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICAgIGZvcm1hdEZpbGVzOiByZXM/LnJlcG9ydF9mb3JtYXQsXHJcbiAgICAgICAgICAgIGZvcm1hdExpbmtzOiByZXM/LmxpbmtfZm9yX2RldGFpbHMsXHJcbiAgICAgICAgICAgIGV2aWRlbmNlUmVxdWlyZWQ6IChyZXM/LnJlcG9ydF91cGxvYWRfZmxhZykgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgYXNzdXJhbmNlTGlzdDogdGhpcy5zZXRMaXN0KHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcmllc0xpc3QsIHRlc3RQbGFuQ2F0ZWdvcnksICdjYXRlZ29yeV9pZCcpLFxyXG4gICAgICAgICAgcmVxdWlyZXNBdWRpdExpc3Q6IHRoaXMuc2V0TGlzdCh0aGlzLmFzc3VyYW5jZVJlcXVpcmVzQXVkaXRMaXN0LCByZXF1aXJlZEF1ZGl0Q2F0ZWdvcnlJZCwgJ2NhdGVnb3J5X2lkJyksXHJcbiAgICAgICAgICByaXNrQ2xhc3M6IHJlcz8ucmlza19jbGFzcyxcclxuICAgICAgICAgIHJpc2tNYXRyaXg6IHJlcz8ucmlza19tYXRyaXhfZGF0YVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpe1xyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZUFzc2lnbmVlRGF0YShyZXMpO1xyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZU92ZXJzZWVyRGF0YShyZXMpO1xyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZVJldmlld2VyRGF0YShyZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbSA9IHJlcz8ucHJvZ3JhbURldGFpbHM/LmNhdGVnb3J5X2lkID8gcmVzLnByb2dyYW1EZXRhaWxzIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5faWQgJiYgIHRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKXt0aGlzLmdldExpc3RzQWNjb3JkaW5nVG9Qcm9ncmFtKHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5faWQpO31cclxuICAgICAgICB0aGlzLmlzTm90aWZpY2F0aW9uUGVuZGluZyA9IHJlcy5ub3RpZmljYXRpb25fcGVuZGluZztcclxuICAgICAgICBpZiAodGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmcpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aW9uQnV0dG9uc1sxXS5idXR0b25UZXh0ID0gJ1ZpZXcgUmVzcG9uc2liaWxpdGllcyBpbiBRdWV1ZSc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWN0aW9uQnV0dG9uc1sxXS5idXR0b25UZXh0ID0gJ1ZpZXcgUmVzcG9uc2liaWxpdGllcyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIDV+MH4wfjAgdGhpcyBpcyBmb3Igb3RoZXIgZnJlcXVlbmN5XHJcbiAgICAgICAgaWYgKHJlcy5mcmVxdWVuY3lfZGV0YWlscyAhPT0gJycgJiYgcmVzLmZyZXF1ZW5jeV9kZXRhaWxzICE9PSAnNX4wfjB+MCcpIHtcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5RGF0YVBvcHVsYXRpb24ocmVzKTtcclxuICAgICAgICAgIHRoaXMuZ2V0RnJlcXVlbmN5UGxhY2Vob2xkZXIocmVzKTtcclxuICAgICAgICAgIHJlcy5wbGFjZWhvbGRlciA9IHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuaXNFbnRydXN0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubW9kZSA9ICdDUkVBVEUnO1xyXG4gICAgICAgICAgdGhpcy5hc3NpZ25lZVJhZGlvU2VsZWN0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMuZW5hYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMubGlzdCA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5vcmdhbml6YXRpb25JZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSWQoKTtcclxuICAgICAgICAgIHRoaXMubWVtYmVySWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE1lbWJlcklkKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0Py5sZW5ndGggPT09IDAgJiYgKCF0aGlzLmZlYXR1cmVGbGFnX2dyb3VwcyB8fCAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzLmxpc3Q/Lmxlbmd0aCA9PT0gMCAmJiB0aGlzLmZlYXR1cmVGbGFnX2dyb3VwcykpKSkge1xyXG4gICAgICAgICAgdGhpcy5pc0VudHJ1c3QgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5tb2RlID0gJ0NSRUFURSc7XHJcbiAgICAgICAgICB0aGlzLmFzc2lnbmVlUmFkaW9TZWxlY3QgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5lbmFibGUgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5saXN0ID0gW107XHJcbiAgICAgICAgICB0aGlzLm9yZ2FuaXphdGlvbklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25JZCgpO1xyXG4gICAgICAgICAgdGhpcy5tZW1iZXJJZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0TWVtYmVySWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy9cclxuICAgICAgICBpZiAocmVzLmZyZXF1ZW5jeV9kZXRhaWxzLnNwbGl0KCd+JylbMF0gIT09IDYpIHtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlcz8ucmNfaWQgPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnJjU2VsZWN0ZWQuZW1pdCh0cnVlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzPy5hdWRpdF9jYXRlZ29yeV9kZXRhaWxzKSB7XHJcbiAgICAgICAgICB0aGlzLnBvcHVsYXRlQXNzdXJhbmNlTGlzdChyZXM/LmF1ZGl0X2NhdGVnb3J5X2RldGFpbHMpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmF1ZGl0X2NhdGVnb3J5X2RldGFpbHMgPSB7XHJcbiAgICAgICAgICAgIGNhdGVnb3J5X2lkOiAwLFxyXG4gICAgICAgICAgICBzYW1wbGU6IDAsXHJcbiAgICAgICAgICAgIHBlcmNlbnRhZ2U6IDAsXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuOiAnJyxcclxuICAgICAgICAgICAgZnJlcXVlbmN5X3RpbWU6ICcnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzLmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnRfaWQpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0QXNzZXNzbWVudERldGFpbHMocmVzLmFzc2Vzc21lbnQsIHJlcy5xdWVzdGlvbm5haXJlX3R5cGUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzKSB7XHJcbiAgICAgICAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnQ0hFQ0tQT0lOVFMnKTtcclxuICAgICAgICAgIHRoaXMuaGlkZUVsZW1lbnRzRnJvbU1vcmVPcHRpb25zLmVtaXQodGhpcy5oaWRkZW5MaXN0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5pc0Fzc2Vzc21lbnREaXNhYmxlZC5lbWl0KHRydWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRFZGl0TW9yZU9wdGlvbnMocmVzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIHNldExpc3QobGlzdDogYW55W10sIGlkczogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkYXRhOiBhbnkgPSBbXTtcclxuICAgIGlkcz8uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gbGlzdC5maW5kSW5kZXgoKGxpc3RFbGVtZW50OiBhbnkpID0+IGxpc3RFbGVtZW50W2tleV0gPT0gZWxlbWVudCk7XHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBkYXRhLnB1c2gobGlzdFtpbmRleF0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuSWRzKGxpc3Q6IGFueVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGxpc3Q/Lm1hcChlbGUgPT4geyBpZiAoZWxlW2tleV0pIHsgcmV0dXJuIGVsZVtrZXldOyB9IH0pLmZpbHRlcihlbGUgPT4gZWxlKTtcclxuICB9XHJcblxyXG4gIHBvcHVsYXRlUHJvZ3JhbUFzc2lnbmVlR3JvdXAoKXtcclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9hc3NpZ25lZV9ncm91cF9pZHMgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0Py5sZW5ndGgpIHtcclxuICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgaWRzID0gdGhpcy5yZXR1cm5JZHModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0LCAnZ3JvdXBfaWQnKTtcclxuICAgICAgICBjb25zdCBhbGxJZHMgPSBbLi4ubmV3IFNldChpZHMpLCAuLi5uZXcgU2V0KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwX2lkcyldXHJcbiAgICAgICAgY29uc3QgYXNzaWduZWVHcm91cHMgPSB0aGlzLmdyb3VwQXNzaWduZWVMaXN0Py5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4gYWxsSWRzPy5pbmNsdWRlcyhlbGVtZW50Py5ncm91cF9pZCkpO1xyXG4gICAgICAgIGlmIChhc3NpZ25lZUdyb3Vwcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZUdyb3Vwcy5saXN0ID0gYXNzaWduZWVHcm91cHM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlR3JvdXBzLmxpc3QgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgYXNzaWduZWVHcm91cHMgPSB0aGlzLmdyb3VwQXNzaWduZWVMaXN0Py5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfYXNzaWduZWVfZ3JvdXBfaWRzPy5pbmNsdWRlcyhlbGVtZW50Py5ncm91cF9pZCkpO1xyXG4gICAgICAgIGlmIChhc3NpZ25lZUdyb3Vwcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZUdyb3Vwcy5saXN0ID0gYXNzaWduZWVHcm91cHM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZUdyb3Vwcy5saXN0ID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwb3B1bGF0ZVByb2dyYW1PdmVyc2Vlckdyb3VwKCl7XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfb3ZlcnNlZXJzPy5jY19lbWFpbF9ncm91cHMgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdD8ubGVuZ3RoIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lmxpc3Q/Lmxlbmd0aCB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9vdmVyc2VlcnM/LmZhaWx1cmVfY2NfZW1haWxfZ3JvdXBzKSB7XHJcbiAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0Py5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBpZHMgPSB0aGlzLnJldHVybklkcyh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0LCAnZ3JvdXBfaWQnKTtcclxuICAgICAgICBjb25zdCBhbGxEZWZhdWx0Q0NHcm91cElkcyA9IFsuLi5uZXcgU2V0KGlkcyksIC4uLm5ldyBTZXQodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfb3ZlcnNlZXJzPy5jY19lbWFpbF9ncm91cHMpXVxyXG4gICAgICAgIGNvbnN0IG92ZXJzZWVyc0NDR3JvdXAgPSB0aGlzLmdyb3VwT3ZlcnNlZXJMaXN0Py5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4gYWxsRGVmYXVsdENDR3JvdXBJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lmdyb3VwX2lkKSk7XHJcbiAgICAgICAgY29uc3Qgbm90aWZ5TGlzdElkcyA9IHRoaXMucmV0dXJuSWRzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVyc0dyb3Vwcy5ub3RpZnlMaXN0LCAnZ3JvdXBfaWQnKTtcclxuICAgICAgICBjb25zdCBhbGxEZWZhdWx0Q0NGYWlsdXJlR3JvdXBJZHMgPSBbLi4ubmV3IFNldChub3RpZnlMaXN0SWRzKSwgLi4ubmV3IFNldCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9vdmVyc2VlcnM/LmZhaWx1cmVfY2NfZW1haWxfZ3JvdXBzKV1cclxuICAgICAgICBjb25zdCBvdmVyc2VlcnNDQ0ZhaWx1cmVHcm91cCA9IHRoaXMuZ3JvdXBPdmVyc2Vlckxpc3Q/LmZpbHRlcigoZWxlbWVudDogYW55KSA9PiBhbGxEZWZhdWx0Q0NGYWlsdXJlR3JvdXBJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lmdyb3VwX2lkKSk7XHJcbiAgICAgICAgaWYgKG92ZXJzZWVyc0NDR3JvdXA/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzR3JvdXBzLmxpc3QgPSBvdmVyc2VlcnNDQ0dyb3VwO1xyXG4gICAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5PVkVSU0VFUiA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVyc0dyb3Vwcy5saXN0ID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvdmVyc2VlcnNDQ0ZhaWx1cmVHcm91cD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVyc0dyb3Vwcy5ub3RpZnlMaXN0ID0gb3ZlcnNlZXJzQ0NGYWlsdXJlR3JvdXA7XHJcbiAgICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuT1ZFUlNFRVIgPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzR3JvdXBzLm5vdGlmeUxpc3QgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBvdmVyc2VlcnNDQ0dyb3VwID0gdGhpcy5ncm91cE92ZXJzZWVyTGlzdD8uZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X292ZXJzZWVycz8uY2NfZW1haWxfZ3JvdXBzPy5pbmNsdWRlcyhlbGVtZW50Py5ncm91cF9pZCkpO1xyXG4gICAgICAgIGNvbnN0IG92ZXJzZWVyc0NDRmFpbHVyZUdyb3VwID0gdGhpcy5ncm91cE92ZXJzZWVyTGlzdD8uZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X292ZXJzZWVycz8uZmFpbHVyZV9jY19lbWFpbF9ncm91cHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lmdyb3VwX2lkKSk7XHJcbiAgICAgICAgaWYgKG92ZXJzZWVyc0NDR3JvdXA/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzR3JvdXBzLmxpc3QgPSBvdmVyc2VlcnNDQ0dyb3VwO1xyXG4gICAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5PVkVSU0VFUiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKG92ZXJzZWVyc0NDRmFpbHVyZUdyb3VwLmxlbmd0aCl7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnNHcm91cHMubm90aWZ5TGlzdCA9IG92ZXJzZWVyc0NDRmFpbHVyZUdyb3VwO1xyXG4gICAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5PVkVSU0VFUiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnNHcm91cHMubGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnNHcm91cHMubm90aWZ5TGlzdCA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuICBwb3B1bGF0ZU92ZXJzZWVyRGF0YShyZXM6IGFueSkge1xyXG4gICAgbGV0IG92ZXJzZWVyVXNlckxpc3Q6IG51bWJlcltdID0gW107XHJcbiAgICBsZXQgb3ZlcnNlZXJVc2VyTm90aWZ5TGlzdDogbnVtYmVyW10gPSBbXTtcclxuICAgICAgbGV0IG92ZXJzZWVyRW1wbG95ZWVzTGlzdCA9IHJlcz8uY2NfZW1haWwgPyBPYmplY3Qua2V5cyhyZXM/LmNjX2VtYWlsKS5tYXAoTnVtYmVyKSA6IFtdO1xyXG4gICAgICBvdmVyc2VlclVzZXJMaXN0ID0gKG92ZXJzZWVyRW1wbG95ZWVzTGlzdD8ubGVuZ3RoPjAgJiYgcmVzPy51c2VyR3JvdXBJZHM/LmNjRW1haWxHcm91cElkcz8ubGVuZ3RoID4gMCApID8gb3ZlcnNlZXJFbXBsb3llZXNMaXN0LmZpbHRlcigoZW1wbG95ZWVJZHM6IG51bWJlcikgPT4gcmVzPy5leGlzdGluZ1VzZXJJZHM/LmNjRW1haWxFbXBJZHM/LmluY2x1ZGVzKGVtcGxveWVlSWRzKSkgOiBbLi4ub3ZlcnNlZXJFbXBsb3llZXNMaXN0XTtcclxuICAgICAgbGV0IG92ZXJzZWVyRW1wbG95ZWVOb3RpZnlMaXN0ID0gcmVzPy5mYWlsdXJlX2NjX2VtYWlsID8gT2JqZWN0LmtleXMocmVzPy5mYWlsdXJlX2NjX2VtYWlsKS5tYXAoTnVtYmVyKSA6IFtdO1xyXG4gICAgICBvdmVyc2VlclVzZXJOb3RpZnlMaXN0ID0gKG92ZXJzZWVyRW1wbG95ZWVOb3RpZnlMaXN0Py5sZW5ndGggPiAwICYmIHJlcz8udXNlckdyb3VwSWRzPy5mYWlsdXJlQ0NFbWFpbEdyb3VwSWRzPy5sZW5ndGggPiAwKSA/IG92ZXJzZWVyRW1wbG95ZWVOb3RpZnlMaXN0LmZpbHRlcigoZW1wbG95ZWVJZHM6IG51bWJlcikgPT4gcmVzPy5leGlzdGluZ1VzZXJJZHM/LmZhaWx1cmVDQ0VtYWlsRW1wSWRzPy5pbmNsdWRlcyhlbXBsb3llZUlkcykpIDogWy4uLm92ZXJzZWVyRW1wbG95ZWVOb3RpZnlMaXN0XTtcclxuXHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtW1wib3ZlcnNlZXJzXCJdID0ge1xyXG5cclxuICAgICAgbGlzdDogKHJlcz8uY2NfZW1haWwpID8gdGhpcy5zZXRMaXN0KHRoaXMub3ZlcnNlZXJzTGlzdCwgb3ZlcnNlZXJVc2VyTGlzdCwgJ2VtcGxveWVlX2lkJykgOiBbXSxcclxuICAgICAgbm90aWZ5TGlzdDogKHJlcz8uZmFpbHVyZV9jY19lbWFpbCkgPyB0aGlzLnNldExpc3QodGhpcy5vdmVyc2VlcnNMaXN0LCBvdmVyc2VlclVzZXJOb3RpZnlMaXN0LCAnZW1wbG95ZWVfaWQnKSA6IFtdLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybVtcIm92ZXJzZWVyc0dyb3Vwc1wiXSA9IHtcclxuXHJcbiAgICAgIGxpc3Q6IChyZXM/LnVzZXJHcm91cElkcz8uY2NFbWFpbEdyb3VwSWRzKSA/IHRoaXMuc2V0TGlzdCh0aGlzLk9yZ0dyb3VwLCByZXM/LnVzZXJHcm91cElkcz8uY2NFbWFpbEdyb3VwSWRzLCAnZ3JvdXBfaWQnKSA6IFtdLFxyXG4gICAgICBub3RpZnlMaXN0OiAocmVzPy51c2VyR3JvdXBJZHM/LmZhaWx1cmVDQ0VtYWlsR3JvdXBJZHMpID8gdGhpcy5zZXRMaXN0KHRoaXMuT3JnR3JvdXAsIHJlcz8udXNlckdyb3VwSWRzPy5mYWlsdXJlQ0NFbWFpbEdyb3VwSWRzLCAnZ3JvdXBfaWQnKSA6IFtdXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcG9wdWxhdGVSZXZpZXdlckRhdGEocmVzOiBhbnkpIHtcclxuICAgIGNvbnN0IHJldmlld2VyRGV0YWlscyA9IE9iamVjdC5rZXlzKHJlcz8ucmV2aWV3ZXJfYXJyKTtcclxuICAgIHRoaXMuaGFzUmV2aWV3ZXIgPSByZXZpZXdlckRldGFpbHM/Lmxlbmd0aCA+IDBcclxuICAgIGNvbnN0IGdyb3VwUmV2aWV3ZXJEZXRhaWxzID0gcmVzPy51c2VyR3JvdXBJZHM/LnJldmlld2VyR3JvdXBJZHM/Lmxlbmd0aCA/IE9iamVjdC5hc3NpZ24ocmVzPy51c2VyR3JvdXBJZHM/LnJldmlld2VyR3JvdXBJZHMpOiBbXTtcclxuICAgIGxldCByZXZpZXdlcl91c2VyczogYW55W10gPSBbXVxyXG4gICAgICByZXZpZXdlcl91c2VycyA9IChyZXM/LnJldmlld2VyX2Fycj8ubGV2ZWwxPy5yZXZpZXdlcnM/Lmxlbmd0aCA+IDAgJiYgcmVzPy51c2VyR3JvdXBJZHM/LnJldmlld2VyR3JvdXBJZHM/Lmxlbmd0aCA+IDApID8gcmVzPy5yZXZpZXdlcl9hcnI/LmxldmVsMT8ucmV2aWV3ZXJzLmZpbHRlcigobWVtYmVySWQ6IGFueSkgPT4gcmVzPy5leGlzdGluZ1VzZXJJZHM/LnJldmlld2VySWRzPy5pbmNsdWRlcyhtZW1iZXJJZD8ubWVtYmVyX2lkKSkgOiByZXM/LnJldmlld2VyX2Fycj8ubGV2ZWwxPy5yZXZpZXdlcnM7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybVtcInJldmlld2Vyc1wiXSA9IHtcclxuICAgICAgc2VxdWVudGlhbFdvcmtmbG93OiAocmVzPy5yZXZpZXdlcl9hcnI/LmxldmVsMT8udHlwZSA9PSAnU0VRVUVOVElBTCcpID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICByZXZpZXdGcmVxdWVuY3k6IHtcclxuICAgICAgICByZXZpZXdDb21wbGV0ZURheXM6IChyZXZpZXdlckRldGFpbHM/Lmxlbmd0aCA+IDApID8gcmVzPy5yZXZpZXdfYWZ0ZXJfZGF5cyA6IDIsXHJcbiAgICAgICAgcmV2aWV3Tk90Q29tcGxldGVkRGF5czogKHJldmlld2VyRGV0YWlscz8ubGVuZ3RoID4gMCkgPyByZXM/LnJldmlld19mYWlsZWRfYWZ0ZXJfZGF5cyA6IDJcclxuICAgICAgfSxcclxuICAgICAgYWNjZXB0ZWREYXRhOiByZXZpZXdlckRldGFpbHM/Lmxlbmd0aCA+IDAgPyByZXZpZXdlcl91c2VycyA6IFtdLFxyXG4gICAgICBsaXN0OiByZXZpZXdlckRldGFpbHM/Lmxlbmd0aCA+IDAgPyB0aGlzLnNldFJldmlld2VyUGF5bG9hZChyZXZpZXdlcl91c2VycywgJ29iamVjdCcsIHJlcz8ucmV2aWV3ZXJfYXJyPy5sZXZlbDE/LnR5cGUpIDogW11cclxuICAgIH1cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtW1wiZ3JvdXBSZXZpZXdlcnNcIl0gPSB7XHJcbiAgICAgIHNlcXVlbnRpYWxXb3JrZmxvdzogKHJlcz8ucmV2aWV3ZXJfYXJyPy5sZXZlbDE/LnR5cGUgPT0gJ1NFUVVFTlRJQUwnKSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgcmV2aWV3RnJlcXVlbmN5OiB7XHJcbiAgICAgICAgcmV2aWV3Q29tcGxldGVEYXlzOiAocmV2aWV3ZXJEZXRhaWxzPy5sZW5ndGggPiAwKSA/IHJlcz8ucmV2aWV3X2FmdGVyX2RheXMgOiAyLFxyXG4gICAgICAgIHJldmlld05PdENvbXBsZXRlZERheXM6IChyZXZpZXdlckRldGFpbHM/Lmxlbmd0aCA+IDApID8gcmVzPy5yZXZpZXdfZmFpbGVkX2FmdGVyX2RheXMgOiAyXHJcbiAgICAgIH0sXHJcbiAgICAgIGxpc3Q6IGdyb3VwUmV2aWV3ZXJEZXRhaWxzPy5sZW5ndGggPiAwID8gdGhpcy5zZXRMaXN0KHRoaXMuT3JnR3JvdXAsIGdyb3VwUmV2aWV3ZXJEZXRhaWxzLCAnZ3JvdXBfaWQnKSA6IFtdXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwb3B1bGF0ZUFzc2lnbmVlRGF0YShyZXM6YW55KXtcclxuICAgIGxldCBBc3NpZ25lZUFueVVzZXJMaXN0OiBudW1iZXJbXSA9IFtdO1xyXG4gICAgbGV0IEFzc2lnbmVlQWxsVXNlckxpc3QgOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgICBsZXQgYXNzaWduZWVBbnlPbmVMaXN0ID0gKHJlcz8uYXNzaWduZWRfdG9fbWVtYmVyX2lkICYmIHRoaXMuaXNFbnRydXN0KSA/IHJlcz8uYXNzaWduZWRfdG9fbWVtYmVyX2lkIDogW107XHJcbiAgICAgIEFzc2lnbmVlQW55VXNlckxpc3QgPSAocmVzPy5hc3NpZ25lZF90b19tZW1iZXJfaWQ/Lmxlbmd0aCA+IDAgJiYgcmVzPy51c2VyR3JvdXBJZHM/LmFzc2lnbmVlQW55b25lR3JvdXBJZHM/Lmxlbmd0aCA+IDApID8gYXNzaWduZWVBbnlPbmVMaXN0LmZpbHRlcigoZW1wbG95ZWVJZHM6IG51bWJlcikgPT4gcmVzPy5leGlzdGluZ1VzZXJJZHM/LmFzc2lnbmVlQW55b25lSWRzPy5pbmNsdWRlcyhlbXBsb3llZUlkcykpIDogWy4uLiBhc3NpZ25lZUFueU9uZUxpc3RdO1xyXG5cclxuICAgICAgQXNzaWduZWVBbGxVc2VyTGlzdCA9IChyZXM/LmFzc2lnbmVkX3RvICYmICF0aGlzLmlzRW50cnVzdCkgPyByZXM/LmFzc2lnbmVkX3RvIDogW107XHJcbiAgICAgIGNvbnN0IGFzc2lnbmVkVG9Vc2VyRGV0YWlscyA9IHRoaXMuc2V0TGlzdCh0aGlzLmFzc2lnbmVlc0xpc3QsIFtOdW1iZXIocmVzPy5hc3NpZ25lZF90byldICwgJ2VtcGxveWVlX2lkJyk7XHJcbiAgICAgIGlmKGFzc2lnbmVkVG9Vc2VyRGV0YWlscz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgbWVtYmVyX2lkID0gYXNzaWduZWRUb1VzZXJEZXRhaWxzWzBdPy5teV9tZW1iZXJfaWQ7XHJcbiAgICAgICAgaWYocmVzPy5leGlzdGluZ1VzZXJJZHM/LmFzc2lnbmVlQWxsSWRzPy5sZW5ndGggJiYgcmVzPy5leGlzdGluZ1VzZXJJZHM/LmFzc2lnbmVlQWxsSWRzPy5pbmNsdWRlcyhtZW1iZXJfaWQpKSB7XHJcbiAgICAgICAgICBBc3NpZ25lZUFsbFVzZXJMaXN0ID0gcmVzPy5hc3NpZ25lZF90bztcclxuICAgICAgICAgIHJlcy51c2VyR3JvdXBJZHNbXCJhc3NpZ25lZUFsbEdyb3VwSWRzXCJdID0gW107XHJcbiAgICAgICAgfWVsc2UgaWYocmVzPy51c2VyR3JvdXBJZHM/LmFzc2lnbmVlQWxsR3JvdXBJZHM/Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgQXNzaWduZWVBbGxVc2VyTGlzdCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm1bXCJhc3NpZ25lZXNcIl0gPSB7XHJcbiAgICAgIHdob0NhbkNvbXBsZXRlOiAocmVzLmlzR3JvdXBBc3NpZ25UbykgPyAnQU5ZX09ORScgOiAnQUxMJyxcclxuICAgICAgbGlzdDogKHJlcz8uYXNzaWduZWRfdG9fbWVtYmVyX2lkPy5sZW5ndGggPT0gMCkgPyB0aGlzLnNldExpc3QodGhpcy5hc3NpZ25lZXNMaXN0LCBbTnVtYmVyKEFzc2lnbmVlQWxsVXNlckxpc3QpXSAsICdlbXBsb3llZV9pZCcpIDpcclxuICAgICAgICB0aGlzLnNldExpc3QodGhpcy5hc3NpZ25lZXNMaXN0LCBBc3NpZ25lZUFueVVzZXJMaXN0LCAnbXlfbWVtYmVyX2lkJyksXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybVtcImFzc2lnbmVlR3JvdXBzXCJdID17XHJcbiAgICAgIHdob0NhbkNvbXBsZXRlOiAocmVzPy5pc0dyb3VwQXNzaWduVG8pID8gJ0FOWV9PTkUnIDogJ0FMTCcsXHJcbiAgICAgIGxpc3Q6IChyZXM/LnVzZXJHcm91cElkcz8uYXNzaWduZWVBbnlvbmVHcm91cElkcz8ubGVuZ3RoID09IDApID8gcmVzPy51c2VyR3JvdXBJZHM/LmFzc2lnbmVlQWxsR3JvdXBJZHM/Lmxlbmd0aCA+IDAgPyB0aGlzLnNldExpc3QodGhpcy5PcmdHcm91cCwgcmVzPy51c2VyR3JvdXBJZHM/LmFzc2lnbmVlQWxsR3JvdXBJZHMsICdncm91cF9pZCcpOiBbXSA6XHJcbiAgICAgICAgdGhpcy5zZXRMaXN0KHRoaXMuT3JnR3JvdXAsIHJlcz8udXNlckdyb3VwSWRzPy5hc3NpZ25lZUFueW9uZUdyb3VwSWRzLCAnZ3JvdXBfaWQnKSxcclxuICAgIH1cclxuICAgICAgdGhpcy5hbGxHcm91cEFzc2lnbmVlID0gKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdD8ubGVuZ3RoID4gMCAmJiAhdGhpcy5pc0VudHJ1c3QpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICogdGhpcyBmdW5jdGlvbiBpcyBmb3IgZ2V0dGluZyB0aGUgdXNlcnMgZGF0YSBiYXNlZCBvbiBtZW1iZXJfaWQgb2YgdXNlcnMgb2Ygc2VsZWN0ZWQgVXNlciBHcm91cFxyXG4gKiBAcGFyYW0gdXNlcmxpc3QgY29udGFpbnMgdXNlcnMgZGF0YVxyXG4gKiBAcGFyYW0gc2VsZWN0ZWRncm91cHMgY29udGFpbnMgc2VsZWN0ZWQgVXNlciBHcm91cCBkYXRhXHJcbiAqIEByZXR1cm5zIHVzZXIgZGF0YSBvZiBTZWxlY3RlZCB1c2VyIGdyb3VwLlxyXG4gKi9cclxuICBnZXRHcm91cHNVc2VyRW1wbG95ZWVzSWQodXNlckxpc3Q6IGFueSwgc2VsZWN0ZWRHcm91cHM6IGFueSkge1xyXG4gICAgbGV0IGdyb3VwTWVtYmVySWRzOiBhbnkgPSBbXTtcclxuICAgIGxldCBncm91cFVzZXJFbXBsb3llZTogYW55ID0gW107XHJcbiAgICBzZWxlY3RlZEdyb3Vwcz8uZm9yRWFjaCgoZ3JvdXA6IGFueSkgPT4ge1xyXG4gICAgICBncm91cE1lbWJlcklkcyA9IFsuLi5uZXcgU2V0KFsuLi5ncm91cE1lbWJlcklkcywgLi4uZ3JvdXA/Lm1lbWJlcl9pZHNdKV1cclxuICAgIH0pXHJcbiAgICB1c2VyTGlzdD8uZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGdyb3VwTWVtYmVySWRzPy5pbmNsdWRlcyhlbGU/Lm15X21lbWJlcl9pZCkpIHtcclxuICAgICAgICBncm91cFVzZXJFbXBsb3llZS5wdXNoKGVsZSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHJldHVybiBncm91cFVzZXJFbXBsb3llZVxyXG4gIH1cclxuXHJcbiAgc2V0UmV2aWV3ZXJQYXlsb2FkKGlkczogYW55W10sIHR5cGU6IHN0cmluZywgYWNjZXB0ZWREYXRhPzogQXJyYXk8YW55PiwgcmV2aWV3ZXJUeXBlPzogc3RyaW5nKSB7XHJcbiAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgY29uc3QgaWRPYmpBcnJheSA9IHRoaXMucmV0dXJuSWRzKGlkcywgJ21lbWJlcl9pZCcpO1xyXG4gICAgICByZXR1cm4gdGhpcy5zZXRMaXN0KHRoaXMuYWxsVXNlcnNMaXN0LCBpZE9iakFycmF5LCAnbXlfbWVtYmVyX2lkJyk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdsaXN0Jykge1xyXG4gICAgICBjb25zdCBwYXlMb2FkOiBhbnkgPSBbXTtcclxuICAgICAgY29uc3QgaWRzTGlzdCA9IHRoaXMucmV0dXJuSWRzKGlkcywgJ215X21lbWJlcl9pZCcpO1xyXG4gICAgICBpZHNMaXN0LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBpbmRleCA9IC0xO1xyXG4gICAgICAgIGlmICgoYWNjZXB0ZWREYXRhID8/IFtdKT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgaW5kZXggPSBhY2NlcHRlZERhdGE/LmZpbmRJbmRleChlbGUgPT4gZWxlLm1lbWJlcl9pZCA9PT0gZWxlbWVudCkgPz8gLTFcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFjY2VwdFN0YXR1cyA9IChpbmRleCA+IC0xICYmIGFjY2VwdGVkRGF0YSkgPyBhY2NlcHRlZERhdGFbaW5kZXhdLnJldmlld2VyX2FjY2VwdCA6IDBcclxuICAgICAgICBpZiAoYWNjZXB0U3RhdHVzID09PSAwICYmIHJldmlld2VyVHlwZSA9PT0gJ0FOWU9ORScpIHtcclxuICAgICAgICAgIGFjY2VwdFN0YXR1cyA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBheUxvYWQucHVzaCh7IG1lbWJlcl9pZDogZWxlbWVudCwgcmV2aWV3ZXJfYWNjZXB0OiBhY2NlcHRTdGF0dXMgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gcGF5TG9hZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrV2hldGhlckFsbExpc3RzTG9hZGVkKCkge1xyXG4gICAgaWYgKHRoaXMucmNMaXN0TG9hZGVkICYmIHRoaXMuYXNzaWduZWVzTGlzdExvYWRlZCAmJiB0aGlzLmFzc2lnbm9yc0xpc3RMb2FkZWQgJiZcclxuICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdExvYWRlZCAmJiB0aGlzLmFzc3VyYW5jZUNhdGVnb3J5TGlzdExvYWRlZCAmJiB0aGlzLmdyb3Vwc0xpc3RMb2FkZWQpIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLmZyYW1ld29ya0RldGFpbHM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmVudHJ1c3RGcmFtZXdvcmsodGhpcy5mcmFtZXdvcmtEZXRhaWxzWzBdKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XHJcbiAgICAgICAgdGhpcy5nZXRFZGl0UmVzcG9uc2liaWxpdHlEZXRhaWxzKHRoaXMucmVzcG9uc2liaWxpdHlJZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFByb2dyYW0pIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0ucHVzaCh0aGlzLnNlbGVjdGVkUHJvZ3JhbSk7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtX3NlbGVjdGVkX2lkcy5wdXNoKHRoaXMuc2VsZWN0ZWRQcm9ncmFtLmNhdGVnb3J5X2lkKTtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5X2lkID0gdGhpcy5zZWxlY3RlZFByb2dyYW0/LmNhdGVnb3J5X2lkPy50b1N0cmluZygpO1xyXG4gICAgICAgICAgaWYodGhpcy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb24pIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID0gKHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5kZWZhdWx0X2Fzc2lnbmVlX3R5cGUgPT0gJ0FOWU9ORScpID8gJ0FOWV9PTkUnIDogJ0FMTCc7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5zZXF1ZW50aWFsV29ya2Zsb3cgPSAodGhpcy5zZWxlY3RlZFByb2dyYW0/LmRlZmF1bHRfcmV2aWV3ZXJzX3R5cGUgPT0gJ1NFUVVFTlRJQUwnKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZXZpZGVuY2VSZXF1aXJlZCA9ICh0aGlzLnNlbGVjdGVkUHJvZ3JhbT8uZXZpZGVuY2VfdXBsb2FkX2ZsYWcpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgcHJvZ3JhbUN1c3RvbVRhZ3MgPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbT8uY3VzdG9tX3RhZ3MgPyBKU09OLnBhcnNlKHRoaXMuc2VsZWN0ZWRQcm9ncmFtLmN1c3RvbV90YWdzKSA6IFtdO1xyXG4gICAgICAgICAgcHJvZ3JhbUN1c3RvbVRhZ3MuZm9yRWFjaCgodGFnOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdGFnRGF0YSA9IEpTT04ucGFyc2UodGFnKTtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLmZpbmRJbmRleCgodGFnRWxlbWVudDogYW55KSA9PiB0YWdFbGVtZW50LnRhZ19uYW1lID09IHRhZ0RhdGEudGFnX25hbWUpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLnB1c2godGFnRGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgY29uc3QgY2hlY2tlZE1vcmVPcHRpb25zID0gW107XHJcbiAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLlBST0dSQU0gPSB0cnVlO1xyXG4gICAgICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ1BST0dSQU0nKTtcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUHJvZ3JhbT8uZXZpZGVuY2VfdXBsb2FkX2ZsYWcgJiYgdGhpcy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb24pIHtcclxuICAgICAgICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ0ZPUk1BVEVfRVZJREVOQ0UnKTtcclxuICAgICAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5GT1JNQVRFX0VWSURFTkNFID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZmlsdGVyTGlzdHNBY2NvcmRpbmdUb1Byb2dyYW0odGhpcy5zZWxlY3RlZFByb2dyYW0/Ll9pZCk7XHJcbiAgICAgICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uLmVtaXQoY2hlY2tlZE1vcmVPcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcclxuICAgICAgfSwgMzAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgc2F2ZVNlbGVjdGVkTGlzdCh0eXBlOiBzdHJpbmcsIHNlbGVjdGVkSXRlbXM6IGFueSkge1xyXG5cclxuXHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnYXNzaWdub3JzJzpcclxuICAgICAgICBpZiAodGhpcy5pbnZhbGlkVHlwZSA9PT0gJ3dob20nKSB7XHJcbiAgICAgICAgICB0aGlzLmludmFsaWRUeXBlID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5saXN0ID0gdGhpcy5zZXRMaXN0KHRoaXMuYXNzaWdub3JzTGlzdCwgW3NlbGVjdGVkSXRlbXMubWVtYmVyX2lkXSwgJ21lbWJlcl9pZCcpO1xyXG4gICAgICAgIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Fzc2lnbmVlcyc6XHJcbiAgICAgICAgaWYgKHRoaXMuaW52YWxpZFR5cGUgPT09ICd3aG8nKSB7XHJcbiAgICAgICAgICB0aGlzLmludmFsaWRUeXBlID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5pc0VudHJ1c3QgJiYgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlICE9PSAnQU5ZX09ORScpIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0ID0gdGhpcy5zZXRMaXN0KHRoaXMuYXNzaWduZWVzTGlzdCwgW3NlbGVjdGVkSXRlbXMuZW1wbG95ZWVfaWRdLCAnZW1wbG95ZWVfaWQnKTtcclxuICAgICAgICAgIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZih0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcyl7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZUdyb3VwQXNzaWduZWVEYXRhKHNlbGVjdGVkSXRlbXMpO1xyXG4gICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0ID0gdGhpcy5zZXRMaXN0KHRoaXMuYXNzaWduZWVzTGlzdCwgc2VsZWN0ZWRJdGVtcywgJ215X21lbWJlcl9pZCcpO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmMnOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjID0gdGhpcy5zZXRMaXN0KHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCwgc2VsZWN0ZWRJdGVtcywgJ2l0ZW1faWQnKTtcclxuICAgICAgICB0aGlzLnJjU2VsZWN0ZWQuZW1pdCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYz8ubGVuZ3RoID4gMClcclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmM/Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVxdWlyZXNBdWRpdExpc3QgPSBbXTtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtWydhdWRpdF9jYXRlZ29yeV9kZXRhaWxzJ11bJ2NhdGVnb3J5X2lkJ10gPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2F0ZWdvcnknOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5ID0gc2VsZWN0ZWRJdGVtcztcclxuICAgICAgICBzZWxlY3RlZEl0ZW1zLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdGFnID0gZWxlbWVudC5jdXN0b21fdGFncyAhPT0gJycgJiYgZWxlbWVudC5jdXN0b21fdGFncyAhPT0gXCJudWxsXCIgJiYgZWxlbWVudC5jdXN0b21fdGFncyAhPSBcIltdXCIgPyBKU09OLnBhcnNlKGVsZW1lbnQuY3VzdG9tX3RhZ3MpIDogW107XHJcbiAgICAgICAgICBpZiAodGFnPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRhZy5mb3JFYWNoKCh0YWdEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KCh0YWdFbGVtZW50OiBhbnkpID0+IHRhZ0VsZW1lbnQudGFnX25hbWUgPT0gdGFnRGF0YS50YWdfbmFtZSk7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLnB1c2godGFnRGF0YSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncHJvZ3JhbSc6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ubGlua2VkUHJvZ3JhbSA9IHNlbGVjdGVkSXRlbXM/LmxpbmtlZFByb2dyYW07XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRQcm9ncmFtICYmICEodGhpcy5zZWxlY3RlZFByb2dyYW0/LnByb2dyYW1UeXBlID09PSAwICYmIHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSAndW5jYXRlZ29yaXplZCcgfHwgISh0aGlzLm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbikpKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeSA9IChzZWxlY3RlZEl0ZW1zLmNhdGVnb3JpZXMpID8gc2VsZWN0ZWRJdGVtcy5jYXRlZ29yaWVzIDogW107XHJcbiAgICAgICAgICBsZXQgY2F0ZWdvcnlJZCA9IHNlbGVjdGVkSXRlbXM/LmNhdGVnb3JpZXM/LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcz8uY2F0ZWdvcmllcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5X2lkID0gc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY2F0ZWdvcnlfaWQgKyAnLCcgKyBjYXRlZ29yeUlkO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnlfaWQgPSBzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5jYXRlZ29yeV9pZD8udG9TdHJpbmcoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW1fc2VsZWN0ZWRfaWRzID0gWy4uLm5ldyBTZXQoc2VsZWN0ZWRJdGVtcz8uY2F0ZWdvcmllcyksIC4uLm5ldyBTZXQoW3NlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkXSldO1xyXG4gICAgICAgICAgY29uc3QgcHJvZ3JhbUN1c3RvbVRhZ3MgPSBzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5jdXN0b21fdGFncyA/IEpTT04ucGFyc2Uoc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY3VzdG9tX3RhZ3MpIDogW107XHJcbiAgICAgICAgICBwcm9ncmFtQ3VzdG9tVGFncz8uZm9yRWFjaCgodGFnOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdGFnRGF0YSA9IHR5cGVvZiB0YWcgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHRhZykgOiB0YWc7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncy5maW5kSW5kZXgoKHRhZ0VsZW1lbnQ6IGFueSkgPT4gdGFnRWxlbWVudC50YWdfbmFtZSA9PSB0YWdEYXRhLnRhZ19uYW1lKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncy5wdXNoKHRhZ0RhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZih0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzZXNzbWVudCkge1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzZXNzbWVudCk/Lmxlbmd0aCA/IHRoaXMuZ2V0UHJvZ3JhbURldGFpbHMoc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbS5faWQpIDogbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5ID0gKHNlbGVjdGVkSXRlbXMuY2F0ZWdvcmllcykgPyBzZWxlY3RlZEl0ZW1zLmNhdGVnb3JpZXMgOiBbXTtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0gPSBbXTtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5X2lkID0gJyc7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtX3NlbGVjdGVkX2lkcyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbSA9IChzZWxlY3RlZEl0ZW1zLnByb2dyYW0pID8gW3NlbGVjdGVkSXRlbXMucHJvZ3JhbV0gOiBbXTtcclxuICAgICAgICAgIGxldCBjYXRlZ29yeUlkID0gc2VsZWN0ZWRJdGVtcz8uY2F0ZWdvcmllcz8udG9TdHJpbmcoKTtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zPy5jYXRlZ29yaWVzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnlfaWQgPSBzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5jYXRlZ29yeV9pZCArICcsJyArIGNhdGVnb3J5SWQ7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeV9pZCA9IHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkPy50b1N0cmluZygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbV9zZWxlY3RlZF9pZHMgPSBbLi4ubmV3IFNldChzZWxlY3RlZEl0ZW1zPy5jYXRlZ29yaWVzKSwgLi4ubmV3IFNldChbc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY2F0ZWdvcnlfaWRdKV07XHJcbiAgICAgICAgICBjb25zdCBwcm9ncmFtQ3VzdG9tVGFncyA9IHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmN1c3RvbV90YWdzID8gSlNPTi5wYXJzZShzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5jdXN0b21fdGFncykgOiBbXTtcclxuICAgICAgICAgIHByb2dyYW1DdXN0b21UYWdzPy5mb3JFYWNoKCh0YWc6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0YWdEYXRhID0gdHlwZW9mIHRhZyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UodGFnKSA6IHRhZztcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLmZpbmRJbmRleCgodGFnRWxlbWVudDogYW55KSA9PiB0YWdFbGVtZW50LnRhZ19uYW1lID09IHRhZ0RhdGEudGFnX25hbWUpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLnB1c2godGFnRGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYodGhpcy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb24pIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID0gKHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmRlZmF1bHRfYXNzaWduZWVfdHlwZSA9PSAnQU5ZT05FJykgPyAnQU5ZX09ORScgOiAnQUxMJztcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLnNlcXVlbnRpYWxXb3JrZmxvdyA9IChzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5kZWZhdWx0X3Jldmlld2Vyc190eXBlID09ICdTRVFVRU5USUFMJykgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmV2aWRlbmNlUmVxdWlyZWQgPSAoc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uZXZpZGVuY2VfdXBsb2FkX2ZsYWcpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uZXZpZGVuY2VfdXBsb2FkX2ZsYWcpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLkZPUk1BVEVfRVZJREVOQ0UgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYoISh0aGlzLnNlbGVjdGVkUHJvZ3JhbT8ucHJvZ3JhbVR5cGUgPT09IDAgJiYgdGhpcy5zZWxlY3RlZFByb2dyYW0/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICd1bmNhdGVnb3JpemVkJyApKXtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/Ll9pZCAmJiB0aGlzLm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbikge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyTGlzdHNBY2NvcmRpbmdUb1Byb2dyYW0oc2VsZWN0ZWRJdGVtcy5wcm9ncmFtLl9pZCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJMaXN0c0FjY29yZGluZ1RvUHJvZ3JhbSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmV2aWV3ZXInOlxyXG4gICAgICAgIGlmKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKXtcclxuICAgICAgICAgIHRoaXMuc2F2ZUdyb3VwUmV2aWV3ZXJEYXRhKHNlbGVjdGVkSXRlbXMpXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdCA9IHRoaXMuc2V0TGlzdCh0aGlzLnJldmlld2Vyc0xpc3QsIHNlbGVjdGVkSXRlbXMsICdlbXBsb3llZV9pZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnb3ZlcnNlZXInOlxyXG4gICAgICAgIGlmKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKXtcclxuICAgICAgICB0aGlzLnNhdmVPdmVyc2VlckRhdGEoc2VsZWN0ZWRJdGVtcywnb3ZlcnNlZXJMaXN0JylcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdCA9IHRoaXMuc2V0TGlzdCh0aGlzLmFsbFVzZXJzTGlzdCwgc2VsZWN0ZWRJdGVtcywgJ2VtcGxveWVlX2lkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvdmVyc2Vlck5vdGlmeSc6XHJcbiAgICAgICAgaWYodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpe1xyXG4gICAgICAgICAgdGhpcy5zYXZlT3ZlcnNlZXJEYXRhKHNlbGVjdGVkSXRlbXMsJ292ZXJzZWVyTm90aWZ5TGlzdCcpXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCA9IHRoaXMuc2V0TGlzdCh0aGlzLmFsbFVzZXJzTGlzdCwgc2VsZWN0ZWRJdGVtcywgJ2VtcGxveWVlX2lkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhc3N1cmFuY2UnOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc3VyYW5jZUxpc3QgPSB0aGlzLnNldExpc3QodGhpcy5hc3N1cmFuY2VDYXRlZ29yaWVzTGlzdCwgc2VsZWN0ZWRJdGVtcywgJ2NhdGVnb3J5X2lkJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3JlcXVpcmVzX2F1ZGl0JzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXF1aXJlc0F1ZGl0TGlzdCA9IHRoaXMuc2V0TGlzdCh0aGlzLmFzc3VyYW5jZVJlcXVpcmVzQXVkaXRMaXN0LCBbc2VsZWN0ZWRJdGVtcz8uY2F0ZWdvcnlfaWRdLCAnY2F0ZWdvcnlfaWQnKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybVsnYXVkaXRfY2F0ZWdvcnlfZGV0YWlscyddWydjYXRlZ29yeV9pZCddID0gc2VsZWN0ZWRJdGVtcz8uY2F0ZWdvcnlfaWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NoZWNrcG9pbnRzJzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cyA9IHNlbGVjdGVkSXRlbXM/LmNoZWNrcG9pbnREZXRhaWxzO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRJbnN0cnVjdGlvbiA9IHNlbGVjdGVkSXRlbXM/LmNoZWNrcG9pbnRJbnN0cnVjdGlvbjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2FsY3VsYXRlZHJpc2snOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJpc2tDbGFzcyA9IHNlbGVjdGVkSXRlbXM/LnJpc2tDbGFzcztcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yaXNrTWF0cml4ID0gc2VsZWN0ZWRJdGVtcz8ucmlza01hdHJpeDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZm9ybWF0ZV9ldmlkZW5jZSc6XHJcblxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmZvcm1hdFJlcXVpcmVkID0gc2VsZWN0ZWRJdGVtcz8uaXNGb3JtYXRlVXBsb2FkZWQgPz8gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZm9ybWF0RmlsZXMgPSBzZWxlY3RlZEl0ZW1zPy5maWxlcyA/PyBbXTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5mb3JtYXRMaW5rcyA9IHNlbGVjdGVkSXRlbXM/LmxpbmtzID8/IFtdO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmV2aWRlbmNlUmVxdWlyZWQgPSBzZWxlY3RlZEl0ZW1zPy5pc0V2aWRlbmNlUmVxdWlyZWQgPz8gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jldmlld0ZyZXF1ZW5jeSc6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLnJldmlld0ZyZXF1ZW5jeSA9IHtcclxuICAgICAgICAgIHJldmlld0NvbXBsZXRlRGF5czogc2VsZWN0ZWRJdGVtcy5jb21wbGV0ZURheXMsXHJcbiAgICAgICAgICByZXZpZXdOT3RDb21wbGV0ZWREYXlzOiBzZWxlY3RlZEl0ZW1zLm5vdENvbXBsZXRlZCxcclxuICAgICAgICB9O1xyXG5cclxuICAgIH1cclxuICAgIHRoaXMuYWN0aXZlRGVzZWxlY3RvcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIHByb2dyYW0gaXMgc2VsZWN0ZWQgYW5kIHRoZSB1c2VyIGhhcyBmdWxsIHBlcm1pc3Npb24sIHJlZnJlc2ggdGhlIGxpc3RzIHdoaWxlIHRoZSBwcm9ncmFtXHJcbiAgICogaXMgc2VsZWN0ZWQuIE90aGVyd2lzZSwgcmVmcmVzaCBhbGwgbGlzdHMuXHJcbiAgICogPC9jb2RlPlxyXG4gICAqL1xyXG4gIGNhbGxSZWZyZXNoTGlzdCgpIHtcclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtPy5sZW5ndGggJiYgdGhpcy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb24pIHtcclxuICAgICAgdGhpcy5yZWZyZXNoTGlzdHNXaGlsZVByb2dyYW1TZWxlY3RlZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICByZW1vdmUodHlwZTogYW55LCBldmVudD86IGFueSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ3JjJzpcclxuICAgICAgICBjb25zdCByY0luZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmMuZmluZEluZGV4KChyYzogYW55KSA9PiByYy5yY19pZCA9PSBldmVudC5yY19pZCk7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmMuc3BsaWNlKHJjSW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMucmNTZWxlY3RlZC5lbWl0KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjPy5sZW5ndGggPiAwKVxyXG4gICAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYz8ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXF1aXJlc0F1ZGl0TGlzdCA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm1bJ2F1ZGl0X2NhdGVnb3J5X2RldGFpbHMnXVsnY2F0ZWdvcnlfaWQnXSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhc3NpZ25vcnMnOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5saXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5jYWxsUmVmcmVzaExpc3QoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYXNzaWduZWVzJzpcclxuICAgICAgICBjb25zdCBlbnRydXN0SW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0LmZpbmRJbmRleCgob3duZXI6IGFueSkgPT4gb3duZXIuZW1wbG95ZWVfaWQgPT0gZXZlbnQuZW1wbG95ZWVfaWQpO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0LnNwbGljZShlbnRydXN0SW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdncm91cGFzc2lnbmVlcyc6XHJcbiAgICAgICAgICBjb25zdCBncm91cEluZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0LmZpbmRJbmRleCgoZ3JvdXA6IGFueSkgPT4gZ3JvdXAuZ3JvdXBfaWQgPT0gZXZlbnQuZ3JvdXBfaWQpO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVHcm91cHMubGlzdC5zcGxpY2UoZ3JvdXBJbmRleCwgMSk7XHJcbiAgICAgICAgICB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAncmV2aWV3ZXInOlxyXG4gICAgICAgIGNvbnN0IHJldmlld2VySW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdC5maW5kSW5kZXgoKHJldmlld2VyOiBhbnkpID0+IHJldmlld2VyLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdC5zcGxpY2UocmV2aWV3ZXJJbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5jYWxsUmVmcmVzaExpc3QoKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnZ3JvdXBSZXZpZXdlcic6XHJcbiAgICAgICAgY29uc3QgZ3JvdXBSZXZpZXdlckluZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0LmZpbmRJbmRleCgocmV2aWV3ZXI6IGFueSkgPT4gcmV2aWV3ZXIuZ3JvdXBfaWQgPT0gZXZlbnQuZ3JvdXBfaWQpO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmdyb3VwUmV2aWV3ZXJzLmxpc3Quc3BsaWNlKGdyb3VwUmV2aWV3ZXJJbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5jYWxsUmVmcmVzaExpc3QoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnb3ZlcnNlZXInOlxyXG4gICAgICAgIGNvbnN0IG92ZXJzZWVySW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0LmZpbmRJbmRleCgob3ZlcnNlZXI6IGFueSkgPT4gb3ZlcnNlZXIuZW1wbG95ZWVfaWQgPT0gZXZlbnQuZW1wbG95ZWVfaWQpO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0LnNwbGljZShvdmVyc2VlckluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdvdmVyc2Vlckdyb3VwJzpcclxuICAgICAgICBjb25zdCBvdmVyc2Vlckdyb3VwSW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0LmZpbmRJbmRleCgob3ZlcnNlZXI6IGFueSkgPT4gb3ZlcnNlZXIuZ3JvdXBfaWQgPT0gZXZlbnQuZ3JvdXBfaWQpO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVyc0dyb3Vwcy5saXN0LnNwbGljZShvdmVyc2Vlckdyb3VwSW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ292ZXJzZWVyTm90aWZ5TGlzdCc6XHJcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJOb3RpZnlJbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3QuZmluZEluZGV4KChvdmVyc2Vlck46IGFueSkgPT4gb3ZlcnNlZXJOLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdC5zcGxpY2Uob3ZlcnNlZXJOb3RpZnlJbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5jYWxsUmVmcmVzaExpc3QoKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnb3ZlcnNlZXJHcm91cE5vdGlmeUxpc3QnOlxyXG4gICAgICAgICAgY29uc3Qgb3ZlcnNlZXJHcm91cE5vdGlmeUluZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdC5maW5kSW5kZXgoKG92ZXJzZWVyTjogYW55KSA9PiBvdmVyc2Vlck4uZ3JvdXBfaWQgPT0gZXZlbnQuZ3JvdXBfaWQpO1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzR3JvdXBzLm5vdGlmeUxpc3Quc3BsaWNlKG92ZXJzZWVyR3JvdXBOb3RpZnlJbmRleCwgMSk7XHJcbiAgICAgICAgICB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcclxuICAgICAgICBjb25zdCBjYXRlZ29yeUluZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkuZmluZEluZGV4KChjYXRlZ29yeTogYW55KSA9PiBjYXRlZ29yeS5jYXRlZ29yeV9pZCA9PSBldmVudC5jYXRlZ29yeV9pZCk7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkuc3BsaWNlKGNhdGVnb3J5SW5kZXgsIDEpO1xyXG4gICAgICAgIGNvbnN0IHRhZyA9IEpTT04ucGFyc2UoZXZlbnQuY3VzdG9tX3RhZ3MpO1xyXG4gICAgICAgIGlmICh0YWc/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRhZy5mb3JFYWNoKCh0YWdEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXhDVCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KCh0YWdFbGVtZW50OiBhbnkpID0+IHRhZ0VsZW1lbnQudGFnX25hbWUgPT0gdGFnRGF0YS50YWdfbmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleENUICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncy5zcGxpY2UoaW5kZXhDVCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnk/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0YWcgPSBKU09OLnBhcnNlKGVsZW1lbnQuY3VzdG9tX3RhZ3MpO1xyXG4gICAgICAgICAgICBpZiAodGFnPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgdGFnLmZvckVhY2goKHRhZ0RhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLmZpbmRJbmRleCgodGFnRWxlbWVudDogYW55KSA9PiB0YWdFbGVtZW50LnRhZ19uYW1lID09IHRhZ0RhdGEudGFnX25hbWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MucHVzaCh0YWdEYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdwcm9ncmFtJzpcclxuICAgICAgICB0aGlzLmNoZWNrRGVmYXVsdFByb2dyYW1PblJlbW92ZShldmVudCk7XHJcbiAgICAgICAgLy8gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkgPSBbXTtcclxuICAgICAgICAvLyB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtID0gW107XHJcblxyXG4gICAgICAgIC8vIHRoaXMuZmlsdGVyTGlzdHNBY2NvcmRpbmdUb1Byb2dyYW0oKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmVxdWlyZXNfYXVkaXQnOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlcXVpcmVzQXVkaXRMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXVkaXRfY2F0ZWdvcnlfZGV0YWlscyA9IHtcclxuICAgICAgICAgIGNhdGVnb3J5X2lkOiAwLFxyXG4gICAgICAgICAgc2FtcGxlOiAwLFxyXG4gICAgICAgICAgcGVyY2VudGFnZTogMCxcclxuICAgICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuOiAnJyxcclxuICAgICAgICAgIGZyZXF1ZW5jeV90aW1lOiAnJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYXNzdXJhbmNlJzpcclxuICAgICAgICBjb25zdCBhc3N1cmFuY2VJbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc3VyYW5jZUxpc3QuZmluZEluZGV4KChhc3N1cmFuY2U6IGFueSkgPT4gYXNzdXJhbmNlLmNhdGVnb3J5X2lkID09IGFzc3VyYW5jZS5jYXRlZ29yeV9pZCk7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzdXJhbmNlTGlzdC5zcGxpY2UoYXNzdXJhbmNlSW5kZXgsIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjaGVja3BvaW50JzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cy5zcGxpY2UoZXZlbnQsIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhc3Nlc3NtZW50JzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3Nlc3NtZW50ID0ge1xyXG4gICAgICAgICAgY2F0ZWdvcnlfaWQ6IFwiXCIsXHJcbiAgICAgICAgICBhc3Nlc3NtZW50X2lkOiBcIlwiLFxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ25ldy1jaGVja3BvaW50cyc6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ubmV3X2NoZWNrcG9pbnRzID0ge307XHJcbiAgICAgICAgdGhpcy5jaGVja3BvaW50Q291bnQgPSAwO1xyXG4gICAgICAgIHRoaXMuY2hlY2twb2ludENvdW50VXBkYXRlZC5lbWl0KHRoaXMuY2hlY2twb2ludENvdW50KTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmVHcm91cEFzc2lnbmVlRGF0YShzZWxlY3RlZEl0ZW1zOmFueSl7XHJcbiAgICBsZXQgdXNlck9iajphbnk7XHJcbiAgICB1c2VyT2JqID0gc2VsZWN0ZWRJdGVtcz8ubGVuZ3RoID8gc2VsZWN0ZWRJdGVtcyA6IHNlbGVjdGVkSXRlbXM/LnVzZXJzXHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCA9IHRoaXMuc2V0TGlzdCh0aGlzLmFzc2lnbmVlc0xpc3QsIHVzZXJPYmosICdteV9tZW1iZXJfaWQnKTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlR3JvdXBzLmxpc3QgPSB0aGlzLnNldExpc3QodGhpcy5PcmdHcm91cCxzZWxlY3RlZEl0ZW1zPy5ncm91cHMsJ2dyb3VwX2lkJyk7XHJcbiAgfVxyXG5cclxuICBzYXZlR3JvdXBSZXZpZXdlckRhdGEoc2VsZWN0ZWRJdGVtczogYW55KSB7XHJcbiAgICBsZXQgdXNlck9iajogYW55ID0gW107XHJcbiAgICBzZWxlY3RlZEl0ZW1zLnVzZXJzLmZvckVhY2goKGVsZTogYW55KSA9PiB7XHJcbiAgICAgIHVzZXJPYmoucHVzaChlbGUuZW1wbG95ZWVfaWQpXHJcbiAgICB9KVxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QgPSB0aGlzLnNldExpc3QodGhpcy5yZXZpZXdlcnNMaXN0LCB1c2VyT2JqLCAnZW1wbG95ZWVfaWQnKTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmdyb3VwUmV2aWV3ZXJzID0geyBsaXN0OiAoc2VsZWN0ZWRJdGVtcz8uZ3JvdXBzPy5sZW5ndGggPiAwKSA/IHNlbGVjdGVkSXRlbXM/Lmdyb3VwcyA6IFtdIH07XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggPiAwID8gZmFsc2UgOiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93O1xyXG4gIH1cclxuXHJcbiAgc2F2ZU92ZXJzZWVyRGF0YShzZWxlY3RlZEl0ZW1zOiBhbnksIHR5cGU6IGFueSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ292ZXJzZWVyTGlzdCc6XHJcbiAgICAgICAgbGV0IG92ZXJzZWVyc2VsZWN0ZWRsaXN0ID0gdGhpcy5yZXR1cm5JZHMoc2VsZWN0ZWRJdGVtcy51c2VycywgJ2VtcGxveWVlX2lkJylcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdCA9IHRoaXMuc2V0TGlzdCh0aGlzLm92ZXJzZWVyc0xpc3QsIG92ZXJzZWVyc2VsZWN0ZWRsaXN0LCAnZW1wbG95ZWVfaWQnKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnNHcm91cHNbJ2xpc3QnXSA9IChzZWxlY3RlZEl0ZW1zPy5ncm91cHM/Lmxlbmd0aCA+IDApID8gc2VsZWN0ZWRJdGVtcz8uZ3JvdXBzIDogW11cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnb3ZlcnNlZXJOb3RpZnlMaXN0JzpcclxuICAgICAgICBsZXQgb3ZlcnNlZXJzZWxlY3RlZE5vdGlmeWxpc3QgPSB0aGlzLnJldHVybklkcyhzZWxlY3RlZEl0ZW1zLnVzZXJzLCAnZW1wbG95ZWVfaWQnKVxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5ub3RpZnlMaXN0ID0gdGhpcy5zZXRMaXN0KHRoaXMub3ZlcnNlZXJzTGlzdCwgb3ZlcnNlZXJzZWxlY3RlZE5vdGlmeWxpc3QsICdlbXBsb3llZV9pZCcpO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVyc0dyb3Vwc1snbm90aWZ5TGlzdCddID0gKHNlbGVjdGVkSXRlbXM/Lmdyb3Vwcz8ubGVuZ3RoID4gMCkgPyBzZWxlY3RlZEl0ZW1zPy5ncm91cHMgOiBbXTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIGVudHJ1c3RGcmFtZXdvcmsoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5yZXNldCgpO1xyXG4gICAgdGhpcy5hY3RpdmVEZXNlbGVjdG9yKCk7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXNwb25zaWJpbGl0eSA9IHtcclxuICAgICAgbmFtZTogZXZlbnQucmVwb3J0X25hbWUsXHJcbiAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiAoZXZlbnQua2V5X2NvbXBsaWFuY2UpID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IG5ld1N0YXJ0RGF0ZSA9IGV2ZW50LnN0YXJ0X2RhdGUgfHwgZXZlbnQuc3RhcnRfZGF0ZSAhPSBudWxsIHx8IGV2ZW50LnN0YXJ0X2RhdGUgIT09ICcnID8gbmV3IERhdGUoZXZlbnQuc3RhcnRfZGF0ZSAqIDEwMDApIDogbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IHB2dFRlbXBsYXRlID0gZXZlbnQuZnJlcXVlbmN5X3RlbXBsYXRlICYmIGV2ZW50LmZyZXF1ZW5jeV90ZW1wbGF0ZSAhPT0gJycgPyBldmVudC5mcmVxdWVuY3lfdGVtcGxhdGUgOiBldmVudC5mcmVxdWVuY3k7XHJcbiAgICBjb25zdCBmcmVxdWVuY3lEZXRhaWxzT2JqZWN0OiBhbnkgPSB0aGlzLmZyZXF1ZW5jeVNlcnZpY2Uuc2hvcnRIYW5kX2ZyZXFDYWwoXHJcbiAgICAgIHB2dFRlbXBsYXRlLFxyXG4gICAgICBuZXdTdGFydERhdGUuZ2V0RGF0ZSgpLFxyXG4gICAgICBuZXdTdGFydERhdGUuZ2V0TW9udGgoKSxcclxuICAgICAgbmV3U3RhcnREYXRlLmdldEZ1bGxZZWFyKClcclxuICAgICk7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscyA9IGZyZXF1ZW5jeURldGFpbHNPYmplY3Q/LnBhdHRlcm47XHJcbiAgICBldmVudC5mcmVxdWVuY3lfZGV0YWlscyA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeV9kZXRhaWxzO1xyXG4gICAgZXZlbnQuZnJlcXVlbmN5X3RpbWUgPSAnMjM6NTk6MDAnO1xyXG4gICAgZXZlbnQucmVtaW5kZXJfYmVmb3JlX2RheXMgPSBldmVudC5yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUgPyBldmVudC5yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUgOiAyOztcclxuICAgIGV2ZW50LmZhaWxlZF9hZnRlcl9kYXlzID0gZXZlbnQubWFya19mYWlsZWRfYWZ0ZXIgPyBldmVudC5tYXJrX2ZhaWxlZF9hZnRlciA6IDI7XHJcbiAgICBldmVudC5saWZlY3ljbGVfZGV0YWlscyA9ICcwMDAwLTAwLTAwfn4wJztcclxuICAgIGV2ZW50LnN0YXJ0X29mX2RheV91dGMgPSB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UuZnJhbWV3b3JrU3RhcnREYXRlKGV2ZW50KTtcclxuICAgIGV2ZW50Lm9uX2NvbXBsZXRpb25fb2YgPSBbXTtcclxuICAgIGV2ZW50LmRvbV91dGMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSBmcmVxdWVuY3lEZXRhaWxzT2JqZWN0LmNvbnRpbnVvdXNfZmFpbGVkX2RheXNcclxuXHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscztcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeV90aW1lID0gJzIzOjU5OjAwJztcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlbWluZGVyX2JlZm9yZV9kYXlzID0gZXZlbnQucmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlID8gZXZlbnQucmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlIDogMjs7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mYWlsZWRfYWZ0ZXJfZGF5cyA9IGV2ZW50Lm1hcmtfZmFpbGVkX2FmdGVyID8gZXZlbnQubWFya19mYWlsZWRfYWZ0ZXIgOiAyO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ubGlmZWN5Y2xlRGV0YWlscyA9ICcwMDAwLTAwLTAwfn4wJztcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnN0YXJ0X29mX2RheV91dGMgPSB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UuZnJhbWV3b3JrU3RhcnREYXRlKGV2ZW50KS50b0ZpeGVkKCkudG9TdHJpbmcoKTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm9uX2NvbXBsZXRpb25fb2YgPSBbXTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmRvbV91dGMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmRlc2NyaXB0aW9uID0gZXZlbnQucmVtYXJrcy50cmltKCkgIT0gJycgPyBldmVudC5yZW1hcmtzIDogJyc7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzID0gZXZlbnQuY3VzdG9tX3RhZ3MgJiYgZXZlbnQuY3VzdG9tX3RhZ3MgIT09IG51bGwgJiYgZXZlbnQuY3VzdG9tX3RhZ3MgIT09ICdudWxsJyAmJiBldmVudC5jdXN0b21fdGFncyAhPT0gJycgPyBKU09OLnBhcnNlKGV2ZW50LmN1c3RvbV90YWdzKSA6IFtdO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub2JqZWN0aXZlID0gZXZlbnQuY29udHJvbF9vYmplY3RpdmUgPyBldmVudC5jb250cm9sX29iamVjdGl2ZSA6ICcnO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkgPSB0aGlzLnNldExpc3QodGhpcy5hbGxDYXRlZ29yaWVzLCBbZXZlbnQuY2F0ZWdvcnlfaWRdLCAnY2F0ZWdvcnlfaWQnKTsgLy9cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5yZXZpZXdGcmVxdWVuY3kucmV2aWV3Q29tcGxldGVEYXlzID0gMjtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5yZXZpZXdGcmVxdWVuY3kucmV2aWV3Tk90Q29tcGxldGVkRGF5cyA9IDI7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYyA9IHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdC5maW5kKChyYzogYW55KSA9PiByYy5yY19pZCA9PT0gZXZlbnQuZW50aXR5X2lkKSA/IFt0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QuZmluZCgocmM6IGFueSkgPT4gcmMucmNfaWQgPT09IGV2ZW50LmVudGl0eV9pZCldIDogW107XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yaXNrQ2xhc3MgPSB0aGlzLmlzUmlza0VuYWJsZSA/IDEgOiAyO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJpdmF0ZV9saWJyYXJ5X2lkID0gZXZlbnQucmVwb3J0X2lkO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5X2RldGFpbHM7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jbGFzc2lmaWNhdGlvbiA9IHRoaXMuaXNSaXNrRW5hYmxlID8gMSA6IDI7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jb250aW51b3VzX2ZhaWxlZF9kYXlzID0gZnJlcXVlbmN5RGV0YWlsc09iamVjdC5jb250aW51b3VzX2ZhaWxlZF9kYXlzXHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5zdGFydERhdGUgPSB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UuZnJhbWV3b3JrU3RhcnREYXRlKGV2ZW50KTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlID0ge1xyXG4gICAgICBldmlkZW5jZVJlcXVpcmVkOiBldmVudC5yZXBvcnRfdXBsb2FkX2ZsYWcgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgIGZvcm1hdEZpbGVzOiBldmVudC5yZXBvcnRfZm9ybWF0LFxyXG4gICAgICBmb3JtYXRMaW5rczogIShldmVudC5yZXBvcnRfZm9ybWF0X2xpbmspIHx8IGV2ZW50LnJlcG9ydF9mb3JtYXRfbGluayA9PSAnJyA/IFtdIDogW2V2ZW50LnJlcG9ydF9mb3JtYXRfbGlua10sXHJcbiAgICAgIGZvcm1hdFJlcXVpcmVkOiAoZXZlbnQucmVwb3J0X2Zvcm1hdD8ubGVuZ3RoID4gMCB8fCAoKGV2ZW50LnJlcG9ydF9mb3JtYXRfbGluaykgJiYgZXZlbnQucmVwb3J0X2Zvcm1hdF9saW5rICE9ICcnKSkgPyB0cnVlIDogZmFsc2VcclxuICAgIH1cclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmF1ZGl0X2NhdGVnb3J5X2RldGFpbHMgPSB7XHJcbiAgICAgIGNhdGVnb3J5X2lkOiAwLFxyXG4gICAgICBzYW1wbGU6IDUsXHJcbiAgICAgIHBlcmNlbnRhZ2U6IDMwLFxyXG4gICAgICBmcmVxdWVuY3lfcGF0dGVybjogJzF+MH4zfjEnLFxyXG4gICAgICBmcmVxdWVuY3lfdGltZTogJzIzOjU5OjAwJ1xyXG4gICAgfVxyXG5cclxuICAgIGV2ZW50LmZyZXF1ZW5jeV90aW1lID0gJzExOjU5IHBtJztcclxuICAgIGlmIChldmVudC5mcmVxdWVuY3lfZGV0YWlscyAhPT0gJycgJiYgZXZlbnQuZnJlcXVlbmN5X2RldGFpbHMgIT09ICc1fjB+MH4wJykge1xyXG4gICAgICB0aGlzLmZyZXF1ZW5jeVBvcHVsYXRpb24oZXZlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5ID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgZXZlbnQuZnJlcXVlbmN5X3RpbWUgPSAnMjM6NTk6MDAnO1xyXG4gICAgZXZlbnQucGxhY2Vob2xkZXIgPSB0aGlzLmdldEZyZXF1ZW5jeVBsYWNlaG9sZGVyKGV2ZW50KTtcclxuICAgIGNvbnN0IGNoZWNrZWRNb3JlT3B0aW9ucyA9IFtdO1xyXG5cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vYmplY3RpdmUgIT09ICcnKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdPQkpFQ1RJVkUnKTtcclxuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5PQkpFQ1RJVkUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ1JJU0tfQ0xBU1NJRklDQVRJT04nKTtcclxuICAgIHRoaXMubW9yZU9wdGlvbnMuUklTS19DTEFTU0lGSUNBVElPTiA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnk/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ0NBVEVHT1JZJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuQ0FURUdPUlkgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uZm9ybWF0QW5kRXZpZGVuY2U/LmV2aWRlbmNlUmVxdWlyZWQgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmZvcm1hdEFuZEV2aWRlbmNlPy5mb3JtYXRSZXF1aXJlZCkge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnRk9STUFURV9FVklERU5DRScpO1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zLkZPUk1BVEVfRVZJREVOQ0UgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKGV2ZW50LmVudGl0eV9pZCA+IDApIHtcclxuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ1JDJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuUkMgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucG9wdWxhdGVPcHRpb24uZW1pdChjaGVja2VkTW9yZU9wdGlvbnMpO1xyXG4gICAgLy8gIGV2ZW50LnBsYWNlaG9sZGVyXHJcbiAgfVxyXG5cclxuICBhc3NpZ25Gcm9tRnJhbWV3b3JrKGZyZXFPYmo6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coXCJmcmVxdXV1dXVcIixmcmVxT2JqKVxyXG4gICAgaWYgKGZyZXFPYmouZGF0YSkge1xyXG4gICAgICAvLyB0aGlzLnJlc2V0KCk7XHJcbiAgICAgIHRoaXMuYWN0aXZlRGVzZWxlY3RvcigpO1xyXG4gICAgICBjb25zdCBuZXdTdGFydERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgY29uc3QgZnJlcXVlbmN5RGV0YWlsc09iamVjdDogYW55ID0gdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLnNob3J0SGFuZF9mcmVxQ2FsKFxyXG4gICAgICAgIGZyZXFPYmouZGF0YS5mcmVxdWVuY3ksXHJcbiAgICAgICAgbmV3U3RhcnREYXRlLmdldERhdGUoKSxcclxuICAgICAgICBuZXdTdGFydERhdGUuZ2V0TW9udGgoKSxcclxuICAgICAgICBuZXdTdGFydERhdGUuZ2V0RnVsbFllYXIoKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgbGV0IGV2ZW50OiBhbnkgPSB7fTtcclxuICAgICAgZXZlbnQuZnJlcXVlbmN5X2RldGFpbHMgPSBmcmVxdWVuY3lEZXRhaWxzT2JqZWN0Py5wYXR0ZXJuO1xyXG4gICAgICBldmVudC5mcmVxdWVuY3lfdGltZSA9ICcyMzo1OTowMCc7XHJcbiAgICAgIGV2ZW50LnJlbWluZGVyX2JlZm9yZV9kYXlzID0gMjtcclxuICAgICAgZXZlbnQuZmFpbGVkX2FmdGVyX2RheXMgPSAyO1xyXG4gICAgICBldmVudC5saWZlY3ljbGVfZGV0YWlscyA9ICcwMDAwLTAwLTAwfn4wJztcclxuICAgICAgZXZlbnQuc3RhcnRfb2ZfZGF5X3V0YyA9IERhdGUubm93KCkgLyAxMDAwO1xyXG4gICAgICBldmVudC5vbl9jb21wbGV0aW9uX29mID0gW107XHJcbiAgICAgIGV2ZW50LmRvbV91dGMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgZXZlbnQuY29udGludW91c19mYWlsZWRfZGF5cyA9IGZyZXF1ZW5jeURldGFpbHNPYmplY3QuY29udGludW91c19mYWlsZWRfZGF5c1xyXG4gICAgICB0aGlzLmdldEZyZXF1ZW5jeVBsYWNlaG9sZGVyKGV2ZW50KVxyXG4gICAgICBldmVudC5wbGFjZWhvbGRlciA9IHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXJcclxuICAgICAgZXZlbnQuZnJlcXVlbmN5X3RpbWUgPSAnMTE6NTkgcG0nO1xyXG4gICAgICB0aGlzLmZyZXF1ZW5jeVBvcHVsYXRpb24oZXZlbnQpO1xyXG5cclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZSA9IGZyZXFPYmouZGF0YS5uYW1lID8/ICcnO1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vYmplY3RpdmUgPSBmcmVxT2JqLmRhdGEub2JqZWN0aXZlcyA/PyAnJztcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5ID1mcmVxdWVuY3lEZXRhaWxzT2JqZWN0Py5wYXR0ZXJuID8/Jyc7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnN0YXJ0RGF0ZSA9IGV2ZW50LnN0YXJ0X29mX2RheV91dGM7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlbWluZGVyX2JlZm9yZV9kYXlzPSBldmVudC5yZW1pbmRlcl9iZWZvcmVfZGF5cztcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY29udGludW91c19mYWlsZWRfZGF5cz0gZXZlbnQuY29udGludW91c19mYWlsZWRfZGF5cztcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZmFpbGVkX2FmdGVyX2RheXM9IGV2ZW50LmZhaWxlZF9hZnRlcl9kYXlzO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRnJhbWV3b3JrVmFsdWVzID0gZnJlcU9iai5zZWxlY3RlZEZyYW1ld29ya0RhdGEgPz8gdW5kZWZpbmVkO1xyXG4gICAgICBpZihmcmVxT2JqPy5kYXRhPy5kZXNjcmlwdGlvbil7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZGVzY3JpcHRpb24gPSBmcmVxT2JqPy5kYXRhPy5kZXNjcmlwdGlvbjtcclxuICAgICAgfVxyXG4gICAgICBpZihmcmVxT2JqPy5kYXRhPy5vYmplY3RpdmVzKXtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vYmplY3RpdmUgPSBmcmVxT2JqLmRhdGEub2JqZWN0aXZlcyA/PyAnJztcclxuICAgICAgICB0aGlzLm1vcmVPcHRpb25zLk9CSkVDVElWRSA9IHRydWU7XHJcbiAgICAgICAgbGV0IGNoZWNrZWRNb3JlT3B0aW9ucyA9W107XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5tb3JlT3B0aW9ucykge1xyXG4gICAgICAgICAgaWYgKHRoaXMubW9yZU9wdGlvbnNba2V5XSkge1xyXG4gICAgICAgICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaChrZXkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9wdWxhdGVPcHRpb24uZW1pdChjaGVja2VkTW9yZU9wdGlvbnMpO1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgfVxyXG4vKipcclxuICpcclxuICogQHBhcmFtIGxpc3QgdXNlcmxpc3QgZm9yIGxpc3RpbmcgdXNlcnNcclxuICogQHJldHVybnMgYXNzaWduIHVzZXIncyBteV9tZW1iZXJfaWQgIHRvIG1lbWJlcl9pZCBkYXRhXHJcbiAqL1xyXG4gIGFzc2lnblVzZXJNZW1iZXJJZChsaXN0OmFueSl7XHJcbiAgICBjb25zdCB1c2VyT2JqID0gWy4uLiBsaXN0XVxyXG4gICAgICB1c2VyT2JqPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgICB1c2VyLm1lbWJlcl9pZCA9IHVzZXI/Lm15X21lbWJlcl9pZFxyXG4gICAgICB9KVxyXG4gICAgICBsaXN0ID0gWy4uLiB1c2VyT2JqXVxyXG4gICAgICByZXR1cm4gbGlzdDtcclxuICB9XHJcblxyXG4gIHJlZnJlc2hBbGxMaXN0cygpIHtcclxuXHJcbiAgICBsZXQgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IGFsbFVzZXJzSWRzOmFueSA9IFtdO1xyXG4gICAgbGV0IGFzc2lnbmVlR3JvdXBJZHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IHJldmlld2Vyc0lkczogYW55ID0gW107XHJcbiAgICBsZXQgb3ZlcnNlZXJJZHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IGFzc2lnbmVlSWRzOiBhbnkgPSBbXTtcclxuICAgICBsZXQgZ3JvdXBSZXZpZXdlcklkczogYW55ID0gW107XHJcbiAgbGV0IGdyb3VwT3ZlcnNlZXJJZHM6IGFueSA9IFtdO1xyXG4gIHRoaXMucmV2aWV3ZXJJZHMgPSBbXTtcclxuICB0aGlzLmFzc2lnbm9ySWQgPSBbXTtcclxuICB0aGlzLm92ZXJzZWVySWRzID0gW107XHJcbiAgdGhpcy5hc3NpZ25lZUlkcyA9IFtdO1xyXG5cclxuICAgIGNvbnN0IGFsbFVzZXJzID0gY2xvbmVEZWVwKHRoaXMuYWxsVXNlcnNMaXN0KTtcclxuICAgIGNvbnN0IGFsbEdyb3VwcyA9IGNsb25lRGVlcCh0aGlzLk9yZ0dyb3VwKTtcclxuICAgIGNvbnN0IGJlaGFsZlVzZXJzID0gY2xvbmVEZWVwKHRoaXMuYmVoYWxmT2ZVc2Vyc0xpc3QpO1xyXG5cclxuICAgIGNvbnN0IGFzc2lnbm9ycyA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWdub3JzPy5saXN0KTtcclxuICAgIGNvbnN0IGFzc2lnbmVlcyA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0KTtcclxuXHJcbiAgICBjb25zdCBhc3NpZ25lZUdyb3VwTGlzdCA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3QpXHJcbiAgICBjb25zdCByZXZpZXdlcnMgPSBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QpO1xyXG4gICAgIGNvbnN0IGdyb3VwUmV2aWV3ZXJzTGlzdCA9IHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzID8gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdCkgOiBbXTtcclxuICAgIGNvbnN0IG92ZXJzZWVyTGlzdCA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0KTtcclxuICAgIGNvbnN0IGdyb3VwT3ZlcnNlZXJMaXN0ID0gdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgPyBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdCkgOiBbXTtcclxuICAgIGNvbnN0IG5vdGlmeU92ZXJzZWVycyA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0KTtcclxuICAgIGNvbnN0IGdyb3VwTm90aWZ5T3ZlcnNlZXJzID0gdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgPyBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdCkgOiBbXTtcclxuICAgIGFzc2lnbm9ycz8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzLnB1c2godXNlci5tZW1iZXJfaWQpO1xyXG4gICAgICB0aGlzLmFzc2lnbm9ySWQucHVzaCh1c2VyLm1lbWJlcl9pZClcclxuICAgIH0pO1xyXG4gICAgYXNzaWduZWVzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xyXG4gICAgICBhc3NpZ25lZUlkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XHJcbiAgICAgIHRoaXMuYXNzaWduZWVJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xyXG5cclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5saXN0Py5sZW5ndGggPT0gMCkge1xyXG4gICAgICBhc3NpZ25vckFuZEFzc2lnbmVlc0lkcy5wdXNoKHRoaXMubWVtYmVySWQpO1xyXG4gICAgICB0aGlzLmFzc2lnbm9ySWQucHVzaCh0aGlzLm1lbWJlcklkKTtcclxuICAgIH1cclxuICAgIGFsbFVzZXJzPy5mb3JFYWNoKCh1c2VyOmFueSk9PntcclxuICAgICAgYWxsVXNlcnNJZHMucHVzaCgodXNlcj8ubXlfbWVtYmVyX2lkKSlcclxuICAgIH0pXHJcbiAgICBhc3NpZ25lZUdyb3VwTGlzdD8uZm9yRWFjaCgoZ3JvdXA6YW55KT0+e1xyXG4gICAgICBhc3NpZ25lZUdyb3VwSWRzLnB1c2goZ3JvdXA/Lmdyb3VwX2lkKVxyXG4gICAgfSlcclxuXHJcbiAgICByZXZpZXdlcnM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICByZXZpZXdlcnNJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xyXG4gICAgICB0aGlzLnJldmlld2VySWRzLnB1c2godXNlcj8ubXlfbWVtYmVyX2lkKVxyXG4gICAgfSk7XHJcbiAgICBncm91cFJldmlld2Vyc0xpc3Q/LmZvckVhY2goKGdyb3VwOmFueSk9PntcclxuICAgICAgZ3JvdXBSZXZpZXdlcklkcy5wdXNoKGdyb3VwPy5ncm91cF9pZCk7XHJcbiAgICB9KVxyXG4gICAgZ3JvdXBPdmVyc2Vlckxpc3Q/LmZvckVhY2goKGdyb3VwOiBhbnkpID0+e1xyXG4gICAgICBncm91cE92ZXJzZWVySWRzLnB1c2goZ3JvdXA/Lmdyb3VwX2lkKTtcclxuICAgIH0pO1xyXG4gICAgZ3JvdXBOb3RpZnlPdmVyc2VlcnM/LmZvckVhY2goKGdyb3VwOiBhbnkpID0+e1xyXG4gICAgICBncm91cE92ZXJzZWVySWRzLnB1c2goZ3JvdXA/Lmdyb3VwX2lkKTtcclxuICAgIH0pXHJcbiAgICBvdmVyc2Vlckxpc3Q/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICBvdmVyc2Vlcklkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XHJcbiAgICAgIHRoaXMub3ZlcnNlZXJJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xyXG4gICAgfSk7XHJcbiAgICBub3RpZnlPdmVyc2VlcnM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICBvdmVyc2Vlcklkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XHJcbiAgICAgIHRoaXMub3ZlcnNlZXJJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMgPSBbLi4ubmV3IFNldChhc3NpZ25vckFuZEFzc2lnbmVlc0lkcyldO1xyXG4gICAgYWxsVXNlcnNJZHMgPSBbLi4ubmV3IFNldChhbGxVc2Vyc0lkcyldO1xyXG4gICAgYXNzaWduZWVJZHMgPSBbLi4ubmV3IFNldChhc3NpZ25lZUlkcyldO1xyXG4gICAgcmV2aWV3ZXJzSWRzID0gWy4uLm5ldyBTZXQocmV2aWV3ZXJzSWRzKV07XHJcbiAgICBvdmVyc2VlcklkcyA9IFsuLi5uZXcgU2V0KG92ZXJzZWVySWRzKV07XHJcbiAgICB0aGlzLmFzc2lnbm9ySWQgPSBbLi4ubmV3IFNldCh0aGlzLmFzc2lnbm9ySWQpXTtcclxuICAgIHRoaXMuYXNzaWduZWVJZHMgPSBbLi4ubmV3IFNldCh0aGlzLmFzc2lnbmVlSWRzKV07XHJcbiAgICB0aGlzLnJldmlld2VySWRzID0gWy4uLm5ldyBTZXQodGhpcy5yZXZpZXdlcklkcyldO1xyXG4gICAgdGhpcy5vdmVyc2VlcklkcyA9IFsuLi5uZXcgU2V0KHRoaXMub3ZlcnNlZXJJZHMpXTtcclxuXHJcbiAgICBhc3NpZ25lZUdyb3VwSWRzID0gWy4uLiBuZXcgU2V0KGFzc2lnbmVlR3JvdXBJZHMpXVxyXG4gICAgZ3JvdXBSZXZpZXdlcklkcyA9IFsuLi4gbmV3IFNldChncm91cFJldmlld2VySWRzKV07XHJcbiAgICBncm91cE92ZXJzZWVySWRzID0gWy4uLiBuZXcgU2V0KGdyb3VwT3ZlcnNlZXJJZHMpXTtcclxuICAgIHRoaXMuYXNzaWdub3JzTGlzdCA9IGJlaGFsZlVzZXJzLmZpbHRlcigodXNlcjogYW55KSA9PiAhKG92ZXJzZWVySWRzPy5pbmNsdWRlcyh1c2VyLm1lbWJlcl9pZCkpKTtcclxuICAgIHRoaXMuYXNzaWduZWVzTGlzdCA9IGFsbFVzZXJzXHJcbiAgICB0aGlzLnJldmlld2Vyc0xpc3QgPSBhbGxVc2Vycy5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIShvdmVyc2Vlcklkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSB8fCBhc3NpZ25lZUlkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSkpO1xyXG4gICAgdGhpcy5vdmVyc2VlcnNMaXN0ID0gYWxsVXNlcnMuZmlsdGVyKCh1c2VyOiBhbnkpID0+ICEoYXNzaWdub3JBbmRBc3NpZ25lZXNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkgfHwgcmV2aWV3ZXJzSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpKSk7XHJcblxyXG4gICB0aGlzLmRpc2FibGVMaXN0KGFsbFVzZXJzLGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzLGFzc2lnbmVlSWRzLHJldmlld2Vyc0lkcyxvdmVyc2VlcklkcylcclxuICAgIGlmICh0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcykge1xyXG4gICAgICB0aGlzLmdyb3VwQXNzaWduZWVMaXN0ID0gYWxsR3JvdXBzLmZpbHRlcigoZ3JvdXA6YW55KT0+IShncm91cFJldmlld2VySWRzPy5pbmNsdWRlcyhncm91cD8uZ3JvdXBfaWQpIHx8IGdyb3VwT3ZlcnNlZXJJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZCkpKVxyXG4gICAgICB0aGlzLnJldmlld2VyTWVtYmVySWRzTGlzdCA9IHRoaXMuYXNzaWduVXNlck1lbWJlcklkKHRoaXMuYWxsVXNlcnNMaXN0KVxyXG4gICAgICB0aGlzLm92ZXJzZWVyc0xpc3QgPSB0aGlzLmFzc2lnblVzZXJNZW1iZXJJZCh0aGlzLmFsbFVzZXJzTGlzdClcclxuICAgICAgdGhpcy5ncm91cFJldmlld2VyTGlzdCA9IGFsbEdyb3Vwcy5maWx0ZXIoKGdyb3VwOmFueSk9PiAhKGdyb3VwT3ZlcnNlZXJJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZCkgfHwgYXNzaWduZWVHcm91cElkcz8uaW5jbHVkZXMoZ3JvdXA/Lmdyb3VwX2lkKSkpO1xyXG4gICAgICB0aGlzLmdyb3VwT3ZlcnNlZXJMaXN0ID0gYWxsR3JvdXBzLmZpbHRlcigoZ3JvdXA6YW55KT0+IShhc3NpZ25lZUdyb3VwSWRzPy5pbmNsdWRlcyhncm91cD8uZ3JvdXBfaWQpIHx8IGdyb3VwUmV2aWV3ZXJJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZCkpKTtcclxuICAgICAgXHJcbiAgICAgIFxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGRpc2FibGVMaXN0KGFsbFVzZXJzOmFueSxhc3NpZ25vckFuZEFzc2lnbmVlc0lkczphbnksYXNzaWduZWVJZHM6YW55LHJldmlld2Vyc0lkczphbnksb3ZlcnNlZXJJZHM6YW55KXtcclxuICAgIGxldCBkaXNhYmxlQXNzaWduZWVMaXN0ID0gYWxsVXNlcnMuZmlsdGVyKCh1c2VyOiBhbnkpID0+IChyZXZpZXdlcnNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkgfHwgb3ZlcnNlZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkpKTtcclxuICAgIHRoaXMuZGlzYWJsZUFzc2lnbmVlSWRzID0gdGhpcy5yZXR1cm5JZHMoZGlzYWJsZUFzc2lnbmVlTGlzdCwnbXlfbWVtYmVyX2lkJyk7ICBcclxuICAgIHRoaXMuZGlzYWJsZVJhZGlvQXNzaWduZWUgPSB0aGlzLnJldHVybklkcyhkaXNhYmxlQXNzaWduZWVMaXN0LCdlbXBsb3llZV9pZCcpXHJcbiAgICBsZXQgZGlzYWJsZVJldmlld2VyTGlzdCA9ICBhbGxVc2Vycy5maWx0ZXIoKHVzZXI6IGFueSkgPT4gKG92ZXJzZWVySWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpIHx8IGFzc2lnbmVlSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpKSk7XHJcbiAgICB0aGlzLmRpc2FibGVSZXZpZXdlcklkcyA9IHRoaXMucmV0dXJuSWRzKGRpc2FibGVSZXZpZXdlckxpc3QsJ2VtcGxveWVlX2lkJykgICAgXHJcbiAgICBsZXQgZGlzYWJsZU92ZXJzZWVyTGlzdCA9IGFsbFVzZXJzLmZpbHRlcigodXNlcjogYW55KSA9PiAoYXNzaWdub3JBbmRBc3NpZ25lZXNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkgfHwgcmV2aWV3ZXJzSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpKSk7XHJcbiAgICB0aGlzLmRpc2FibGVPdmVyc2VlcklkcyA9IHRoaXMucmV0dXJuSWRzKGRpc2FibGVPdmVyc2Vlckxpc3QsJ2VtcGxveWVlX2lkJykgICAgXHJcbiAgICBpZih0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcyl7XHJcbiAgICAgIGxldCBkaXNhYmxlUmV2aWV3ZXJMaXN0ID0gYWxsVXNlcnMuZmlsdGVyKCh1c2VyOiBhbnkpID0+IChvdmVyc2Vlcklkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSB8fCBhc3NpZ25lZUlkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSkpO1xyXG4gICAgICB0aGlzLmRpc2FibGVSZXZpZXdlcklkcyA9IHRoaXMucmV0dXJuSWRzKGRpc2FibGVSZXZpZXdlckxpc3QsJ21lbWJlcl9pZCcpXHJcbiAgICAgIGxldCBkaXNhYmxlT3ZlcnNlZXJzTGlzdCA9IGFsbFVzZXJzLmZpbHRlcigodXNlcjogYW55KSA9PiAoYXNzaWdub3JBbmRBc3NpZ25lZXNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkgfHwgcmV2aWV3ZXJzSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpKSk7XHJcbiAgICAgIHRoaXMuZGlzYWJsZU92ZXJzZWVySWRzID0gdGhpcy5yZXR1cm5JZHMoZGlzYWJsZU92ZXJzZWVyc0xpc3QsJ21lbWJlcl9pZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCkge1xyXG4gICAgbGV0IGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzOiBhbnkgPSBbXTtcclxuICAgIGxldCByZXZpZXdlcnNJZHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IG92ZXJzZWVySWRzOiBhbnkgPSBbXTtcclxuICAgIGxldCBhc3NpZ25lZUlkczogYW55ID0gW107XHJcbiAgICBsZXQgYXNzaWduZWVHcm91cElkczogYW55ID0gW107XHJcbiAgICBsZXQgZ3JvdXBSZXZpZXdlcklkczogYW55ID0gW107XHJcbiAgICBsZXQgZ3JvdXBPdmVyc2VlcklkczogYW55ID0gW107XHJcbiAgICB0aGlzLnJldmlld2VySWRzID0gW107XHJcbiAgICB0aGlzLmFzc2lnbm9ySWQgPSBbXTtcclxuICAgIHRoaXMub3ZlcnNlZXJJZHMgPSBbXTtcclxuICAgIHRoaXMuYXNzaWduZWVJZHMgPSBbXTtcclxuICAgIGNvbnN0IGJlaGFsZlVzZXJzID0gY2xvbmVEZWVwKHRoaXMuYmVoYWxmT2ZVc2Vyc0xpc3QpO1xyXG4gICAgY29uc3QgYWxsR3JvdXBzID0gY2xvbmVEZWVwKHRoaXMuT3JnR3JvdXApO1xyXG4gICAgY29uc3QgYXNzaWdub3JzID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5saXN0KTtcclxuICAgIGNvbnN0IGFzc2lnbmVlcyA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0KTtcclxuICAgIGNvbnN0IGFzc2lnbmVlR3JvdXBMaXN0ID0gdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgPyBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0KSA6IFtdO1xyXG4gICAgY29uc3QgcmV2aWV3ZXJzID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3QpO1xyXG4gICAgY29uc3QgZ3JvdXBSZXZpZXdlcnNMaXN0ID0gdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgPyBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0KSA6IFtdO1xyXG4gICAgY29uc3Qgb3ZlcnNlZXJMaXN0ID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3QpO1xyXG4gICAgIGNvbnN0IGdyb3VwT3ZlcnNlZXJMaXN0ID0gdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgPyBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdCkgOiBbXTtcclxuICAgIGNvbnN0IG5vdGlmeU92ZXJzZWVycyA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0KTtcclxuICAgICBjb25zdCBncm91cE5vdGlmeU92ZXJzZWVycyA9IHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzID8gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3QpIDogW107XHJcbiAgICBhc3NpZ25vcnM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmFzc2lnbm9ySWQucHVzaCh1c2VyPy5tZW1iZXJfaWQpXHJcbiAgICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzLnB1c2godXNlcj8ubWVtYmVyX2lkKTtcclxuICAgIH0pO1xyXG4gICAgYXNzaWduZWVzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xyXG4gICAgICBhc3NpZ25lZUlkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XHJcbiAgICAgIHRoaXMuYXNzaWduZWVJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbm9ycz8ubGlzdD8ubGVuZ3RoID09IDApIHtcclxuICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMucHVzaCh0aGlzLm1lbWJlcklkKTtcclxuICAgICAgdGhpcy5hc3NpZ25vcklkLnB1c2godGhpcy5tZW1iZXJJZClcclxuICAgIH1cclxuXHJcbiAgICBhc3NpZ25lZUdyb3VwTGlzdD8uZm9yRWFjaCgoZ3JvdXA6YW55KT0+e1xyXG4gICAgICBhc3NpZ25lZUdyb3VwSWRzLnB1c2goZ3JvdXA/Lmdyb3VwX2lkKVxyXG4gICAgfSlcclxuICAgIHJldmlld2Vycz8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgIHJldmlld2Vyc0lkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XHJcbiAgICAgIHRoaXMucmV2aWV3ZXJJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpXHJcbiAgICB9KTtcclxuICAgIGdyb3VwUmV2aWV3ZXJzTGlzdD8uZm9yRWFjaCgoZ3JvdXA6YW55KT0+e1xyXG4gICAgICBncm91cFJldmlld2VySWRzLnB1c2goZ3JvdXA/Lmdyb3VwX2lkKTtcclxuICAgIH0pXHJcbiAgICBvdmVyc2Vlckxpc3Q/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICBvdmVyc2Vlcklkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XHJcbiAgICAgIHRoaXMub3ZlcnNlZXJJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xyXG4gICAgfSk7XHJcbiAgICBub3RpZnlPdmVyc2VlcnM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICBvdmVyc2Vlcklkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XHJcbiAgICAgIHRoaXMub3ZlcnNlZXJJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xyXG4gICAgfSk7XHJcbiAgICAgZ3JvdXBPdmVyc2Vlckxpc3Q/LmZvckVhY2goKGdyb3VwOiBhbnkpID0+e1xyXG4gICAgICBncm91cE92ZXJzZWVySWRzLnB1c2goZ3JvdXA/Lmdyb3VwX2lkKTtcclxuICAgIH0pO1xyXG4gICAgZ3JvdXBOb3RpZnlPdmVyc2VlcnM/LmZvckVhY2goKGdyb3VwOiBhbnkpID0+e1xyXG4gICAgICBncm91cE92ZXJzZWVySWRzLnB1c2goZ3JvdXA/Lmdyb3VwX2lkKTtcclxuICAgIH0pXHJcbiAgICBhc3NpZ25vckFuZEFzc2lnbmVlc0lkcyA9IFsuLi5uZXcgU2V0KGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzKV07XHJcbiAgICBhc3NpZ25lZUlkcyA9IFsuLi5uZXcgU2V0KGFzc2lnbmVlSWRzKV07XHJcbiAgICByZXZpZXdlcnNJZHMgPSBbLi4ubmV3IFNldChyZXZpZXdlcnNJZHMpXTtcclxuICAgIG92ZXJzZWVySWRzID0gWy4uLm5ldyBTZXQob3ZlcnNlZXJJZHMpXTtcclxuICAgIGFzc2lnbmVlR3JvdXBJZHMgPSBbLi4uIG5ldyBTZXQoYXNzaWduZWVHcm91cElkcyldXHJcbiBncm91cFJldmlld2VySWRzID0gWy4uLiBuZXcgU2V0KGdyb3VwUmV2aWV3ZXJJZHMpXTtcclxuICBncm91cE92ZXJzZWVySWRzID0gWy4uLiBuZXcgU2V0KGdyb3VwT3ZlcnNlZXJJZHMpXTtcclxuICB0aGlzLmFzc2lnbm9ySWQgPSBbLi4ubmV3IFNldCh0aGlzLmFzc2lnbm9ySWQpXTtcclxuICB0aGlzLmFzc2lnbmVlSWRzID0gWy4uLm5ldyBTZXQodGhpcy5hc3NpZ25lZUlkcyldO1xyXG4gIHRoaXMucmV2aWV3ZXJJZHMgPSBbLi4ubmV3IFNldCh0aGlzLnJldmlld2VySWRzKV07XHJcbiAgdGhpcy5vdmVyc2VlcklkcyA9IFsuLi5uZXcgU2V0KHRoaXMub3ZlcnNlZXJJZHMpXTtcclxuXHJcbiAgICB0aGlzLmFzc2lnbm9yc0xpc3QgPSBiZWhhbGZVc2Vycy5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIShvdmVyc2Vlcklkcz8uaW5jbHVkZXModXNlci5tZW1iZXJfaWQpKSk7XHJcbiAgICB0aGlzLmFzc2lnbmVlc0xpc3QgPSB0aGlzLnByb2dyYW1QZW9wbGVMaXN0Py5hc3NpZ25lZXNMaXN0XHJcbiAgICB0aGlzLnJldmlld2Vyc0xpc3QgPSB0aGlzLnByb2dyYW1QZW9wbGVMaXN0Py5yZXZpZXdlcnNMaXN0LmZpbHRlcigodXNlcjogYW55KSA9PiAhKG92ZXJzZWVySWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpIHx8IGFzc2lnbmVlSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpKSk7XHJcbiAgICB0aGlzLm92ZXJzZWVyc0xpc3QgPSB0aGlzLnByb2dyYW1QZW9wbGVMaXN0Py5vdmVyc2VlcnNMaXN0LmZpbHRlcigodXNlcjogYW55KSA9PiAhKGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpIHx8IHJldmlld2Vyc0lkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSkpO1xyXG5cclxuICAgIGlmICh0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcykge1xyXG4gICAgICB0aGlzLmdyb3VwQXNzaWduZWVMaXN0ID0gdGhpcy5zZWxlY3RlZFByb2dyYW0gJiYgdGhpcy5zZWxlY3RlZFByb2dyYW0/LmFzc2lnbmVlX2dyb3VwX2lkcz8ubGVuZ3RoID4gMCA/IHRoaXMucHJvZ3JhbUdyb3VwTGlzdChhbGxHcm91cHMsdGhpcy5zZWxlY3RlZFByb2dyYW0/LmFzc2lnbmVlX2dyb3VwX2lkcykgOiBhbGxHcm91cHMuZmlsdGVyKChncm91cDphbnkpPT4hKGdyb3VwUmV2aWV3ZXJJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZCkgfHwgZ3JvdXBPdmVyc2Vlcklkcz8uaW5jbHVkZXMoZ3JvdXA/Lmdyb3VwX2lkKSkpXHJcbiAgICAgIHRoaXMucmV2aWV3ZXJNZW1iZXJJZHNMaXN0ID0gdGhpcy5hc3NpZ25Vc2VyTWVtYmVySWQodGhpcy5wcm9ncmFtUGVvcGxlTGlzdC5yZXZpZXdlcnNMaXN0KVxyXG4gICAgICB0aGlzLmdyb3VwUmV2aWV3ZXJMaXN0ID0gYWxsR3JvdXBzLmZpbHRlcigoZ3JvdXA6YW55KT0+ICEoZ3JvdXBPdmVyc2Vlcklkcz8uaW5jbHVkZXMoZ3JvdXA/Lmdyb3VwX2lkKSB8fCBhc3NpZ25lZUdyb3VwSWRzPy5pbmNsdWRlcyhncm91cD8uZ3JvdXBfaWQpKSk7XHJcbiAgICAgIHRoaXMub3ZlcnNlZXJzTGlzdCA9IHRoaXMuYXNzaWduVXNlck1lbWJlcklkKHRoaXMucHJvZ3JhbVBlb3BsZUxpc3Qub3ZlcnNlZXJzTGlzdClcclxuICAgICAgdGhpcy5ncm91cE92ZXJzZWVyTGlzdCA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtICYmIHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5vdmVyc2VlcnM/LmNjX2VtYWlsX2dyb3Vwcz8ubGVuZ3RoID4gMCA/IHRoaXMucHJvZ3JhbUdyb3VwTGlzdChhbGxHcm91cHMsdGhpcy5zZWxlY3RlZFByb2dyYW0/Lm92ZXJzZWVycz8uY2NfZW1haWxfZ3JvdXBzKSA6IGFsbEdyb3Vwcy5maWx0ZXIoKGdyb3VwOmFueSk9PiEoYXNzaWduZWVHcm91cElkcz8uaW5jbHVkZXMoZ3JvdXA/Lmdyb3VwX2lkKSB8fCBncm91cFJldmlld2VySWRzPy5pbmNsdWRlcyhncm91cD8uZ3JvdXBfaWQpKSk7IFxyXG4gICAgfVxyXG4gICAgdGhpcy5kaXNhYmxlUHJvZ3JhbUxpc3QoYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMsYXNzaWduZWVJZHMscmV2aWV3ZXJzSWRzLG92ZXJzZWVySWRzKTtcclxuICB9XHJcblxyXG4gIHByb2dyYW1Hcm91cExpc3QoYWxsR3JvdXBzOmFueSwuLi5hcmdzOiBhbnlbXSl7XHJcbiAgICAvLyBhcmdzWzBdXHJcbiAgICBsZXQgYXNzaWduZWVQcm9ncmFtIDphbnkgPSBbXVxyXG4gICAgbGV0IGdyb3VwSWRzID0gIGFyZ3NbMF1cclxuICAgICAgaWYodGhpcy5zZWxlY3RlZFByb2dyYW0gJiYgdGhpcy5zZWxlY3RlZFByb2dyYW0/LmFzc2lnbmVlX2dyb3VwX2lkcyApe1xyXG4gICAgICAgIGFzc2lnbmVlUHJvZ3JhbSA9IGFsbEdyb3Vwcy5maWx0ZXIoKGdyb3VwOmFueSk9Pihncm91cElkcy5pbmNsdWRlcyhncm91cC5ncm91cF9pZCkpKSAgICAgICAgXHJcbiAgICAgIH1cclxuICAgcmV0dXJuIGFzc2lnbmVlUHJvZ3JhbVxyXG4gIH1cclxuXHJcbiAgZGlzYWJsZVByb2dyYW1MaXN0KGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzOmFueSxhc3NpZ25lZUlkczphbnkscmV2aWV3ZXJzSWRzOmFueSxvdmVyc2Vlcklkczphbnkpe1xyXG4gICAgbGV0IGRpc2FibGVBc3NpZ25lZUxpc3QgPSB0aGlzLnByb2dyYW1QZW9wbGVMaXN0Py5hc3NpZ25lZXNMaXN0LmZpbHRlcigodXNlcjogYW55KSA9PiAocmV2aWV3ZXJzSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpIHx8IG92ZXJzZWVySWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpKSk7XHJcbiAgICB0aGlzLmRpc2FibGVBc3NpZ25lZUlkcyA9IHRoaXMucmV0dXJuSWRzKGRpc2FibGVBc3NpZ25lZUxpc3QsJ215X21lbWJlcl9pZCcpXHJcbiAgICB0aGlzLmRpc2FibGVSYWRpb0Fzc2lnbmVlID0gdGhpcy5yZXR1cm5JZHMoZGlzYWJsZUFzc2lnbmVlTGlzdCwnZW1wbG95ZWVfaWQnKTsgICAgXHJcbiAgICBsZXQgZGlzYWJsZVJldmlld2VyTGlzdCA9ICB0aGlzLnByb2dyYW1QZW9wbGVMaXN0Py5yZXZpZXdlcnNMaXN0LmZpbHRlcigodXNlcjogYW55KSA9PiAob3ZlcnNlZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkgfHwgYXNzaWduZWVJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkpKTtcclxuICAgIHRoaXMuZGlzYWJsZVJldmlld2VySWRzID0gdGhpcy5yZXR1cm5JZHMoZGlzYWJsZVJldmlld2VyTGlzdCwnZW1wbG95ZWVfaWQnKVxyXG4gICAgbGV0IGRpc2FibGVPdmVyc2Vlckxpc3QgPSB0aGlzLnByb2dyYW1QZW9wbGVMaXN0Py5vdmVyc2VlcnNMaXN0LmZpbHRlcigodXNlcjogYW55KSA9PiAoYXNzaWdub3JBbmRBc3NpZ25lZXNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkgfHwgcmV2aWV3ZXJzSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpKSk7XHJcbiAgICB0aGlzLmRpc2FibGVPdmVyc2VlcklkcyA9IHRoaXMucmV0dXJuSWRzKGRpc2FibGVPdmVyc2Vlckxpc3QsJ2VtcGxveWVlX2lkJylcclxuICAgIGlmKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKXtcclxuICAgICAgbGV0IGRpc2FibGVSZXZpZXdlckxpc3QgPSB0aGlzLnJldmlld2VyTWVtYmVySWRzTGlzdC5maWx0ZXIoKHVzZXI6IGFueSkgPT4gKG92ZXJzZWVySWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpIHx8IGFzc2lnbmVlSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpKSk7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVJldmlld2VySWRzID0gdGhpcy5yZXR1cm5JZHMoZGlzYWJsZVJldmlld2VyTGlzdCwnbWVtYmVyX2lkJylcclxuICAgICAgbGV0IGRpc2FibGVPdmVyc2Vlckxpc3QgPSB0aGlzLm92ZXJzZWVyc0xpc3QuZmlsdGVyKCh1c2VyOiBhbnkpID0+IChhc3NpZ25vckFuZEFzc2lnbmVlc0lkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSB8fCByZXZpZXdlcnNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkpKTtcclxuICAgICAgdGhpcy5kaXNhYmxlT3ZlcnNlZXJJZHMgPSB0aGlzLnJldHVybklkcyhkaXNhYmxlT3ZlcnNlZXJMaXN0LCdtZW1iZXJfaWQnKVxyXG4gICAgfSAgICBcclxuICB9XHJcblxyXG4gLyoqXHJcbiAgKiBJZiB0aGUgZm9ybSBpcyB2YWxpZCwgdGhlbiBpZiB0aGUgbW9kZSBpcyBFRElULCB0aGVuIHNldCB0aGUgb3JnYW5pemF0aW9uSWQgYW5kIG1lbWJlcklkIHRvIHRoZVxyXG4gICogYXV0aFNlcnZpY2UgdmFsdWVzLCBhbmQgdGhlbiBjYWxsIHRoZSBlbnRydXN0UmVzcG9uc2liaWxpdHkgZnVuY3Rpb24gd2l0aCB0aGUgcmVzcG9uc2liaWxpdHlGb3JtIGFzXHJcbiAgKiBhIHBhcmFtZXRlci5cclxuICAqXHJcbiAgKiBJZiB0aGUgbW9kZSBpcyBub3QgRURJVCwgdGhlbiBjYWxsIHRoZSBlbnRydXN0UmVzcG9uc2liaWxpdHkgZnVuY3Rpb24gd2l0aCB0aGUgcmVzcG9uc2liaWxpdHlGb3JtXHJcbiAgKiBhcyBhIHBhcmFtZXRlci5cclxuICAqIEByZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZS5cclxuICAqL1xyXG4gIHN1Ym1pdFJlc3BvbnNpYmlsaXR5KCkge1xyXG4gICAgY29uc3QgdmFsaWQgPSB0aGlzLnZhbGlkYXRlUmVzcG9uc2liaWxpdHkoKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT0gJ0VESVQnKSB7XHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uSWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbklkKCk7XHJcbiAgICAgIHRoaXMubWVtYmVySWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE1lbWJlcklkKCk7XHJcbiAgICAgIHRoaXMuZW50cnVzdFJlc3BvbnNpYmlsaXR5KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtKTtcclxuICAgICAgLy8gZWRpdCBjb25kaXRpb25zXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVudHJ1c3RSZXNwb25zaWJpbGl0eSh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAvKipcclxuICAqIElmIHRoZSByZXNwb25zaWJpbGl0eSBuYW1lIGlzIGVtcHR5LCBvciB0aGUgZnJlcXVlbmN5IGlzIGVtcHR5LCBvciB0aGUgYXNzaWduZWVzIGxpc3QgaXMgZW1wdHksXHJcbiAgKiB0aGVuIHJldHVybiBmYWxzZS4gT3RoZXJ3aXNlLCByZXR1cm4gdHJ1ZS5cclxuICAqL1xyXG4gIHZhbGlkYXRlUmVzcG9uc2liaWxpdHkoKSB7XHJcbiAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWdub3JzLmVuYWJsZSAmJiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMubGlzdD8ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZFR5cGUgPSBcIndob21cIjtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXNwb25zaWJpbGl0eS5uYW1lIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlc3BvbnNpYmlsaXR5Lm5hbWUudHJpbSgpID09ICcnKSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZFR5cGUgPSAnd2hhdCc7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0IHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/Lmxlbmd0aCA9PSAwICYmICghdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgfHwoKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3QgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0Py5sZW5ndGggPT0gMCkgJiYgdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpKSkge1xyXG4gICAgICB0aGlzLmludmFsaWRUeXBlID0gJ3dobyc7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5ID09ICcnIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9PT0gJycgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5ID09PSAnNX4wfjB+MCcpIHtcclxuICAgICAgdGhpcy5pbnZhbGlkVHlwZSA9ICd3aGVuJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZFR5cGUgPSAnJztcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGlmICghdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZSB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXNwb25zaWJpbGl0eS5uYW1lLnRyaW0oKSA9PSAnJ1xyXG4gICAgICB8fCAoIXRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgPT09ICcnIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9PT0gJzV+MH4wfjAnKSB8fCAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3Q/Lmxlbmd0aCA9PSAwICYmICghdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgfHwoKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZUdyb3Vwcy5saXN0IHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlR3JvdXBzLmxpc3Q/Lmxlbmd0aCA9PSAwKSAmJiB0aGlzLmZlYXR1cmVGbGFnX2dyb3VwcykpKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVudHJ1c3RSZXNwb25zaWJpbGl0eShlbnRydXN0Rm9ybTogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IHRydWU7XHJcbiAgICBsZXQgc3RhcnREYXRlID0gbW9tZW50KHBhcnNlSW50KGVudHJ1c3RGb3JtLnN0YXJ0RGF0ZSkgKiAxMDAwKS5mb3JtYXQoXCJZWVlZLU1NLUREIEhIOm1tOnNzXCIpO1xyXG4gICAgc3RhcnREYXRlID0gbW9tZW50KHN0YXJ0RGF0ZS5zcGxpdCgnICcpWzBdICsgXCIgMDA6MDA6MDBcIikuZm9ybWF0KFwiWVlZWS1NTS1ERCBISDptbTpzc1wiKTtcclxuICAgIGNvbnN0IHJjRGV0YWlscyA9IGVudHJ1c3RGb3JtLnJjPy5sZW5ndGggPiAwID8gZW50cnVzdEZvcm0ucmMubWFwKChyYzogYW55KTogYW55ID0+IHtcclxuICAgICAgaWYgKHJjKSB7XHJcbiAgICAgICAgY29uc3QgcmNEZXRhaWxzQXJyID0ge1xyXG4gICAgICAgICAgcGFyZW50X3JjX2lkczogcmMucGFyZW50X3JjX2lkcyxcclxuICAgICAgICAgIHJjX2lkOiByYy5yY19pZFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHJjRGV0YWlsc0FycjtcclxuICAgICAgfVxyXG4gICAgfSkgOiBbXTtcclxuICAgIGNvbnN0IG1vcmVPcHRpb25zID0gdGhpcy5tb3JlT3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBjaGVja0NvbnRpbnVvdXNGYWlsZWRWYWx1ZSA9IChkZXRhaWxzOiBzdHJpbmcpID0+IHtcclxuICAgICAgY29uc3QgZnJlcXVlbmN5VHlwZSA9IHBhcnNlSW50KGRldGFpbHMuc3BsaXQoJ34nKVswXSk7XHJcbiAgICAgIGlmIChmcmVxdWVuY3lUeXBlID09PSAxIHx8IGZyZXF1ZW5jeVR5cGUgPT09IDIgfHwgZnJlcXVlbmN5VHlwZSA9PT0gMykge1xyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGxpbmtlZFByb2dyYW1JZHM6IGFueVtdID0gW107XHJcbiAgICBsZXQgbGlua2VkQ2F0ZWdvcnlJZHM6IGFueVtdID0gW107XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ubGlua2VkUHJvZ3JhbT8uZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgaWYodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmNhdGVnb3J5X2lkICE9PSBlbGU/LmNhdGVnb3J5X2lkKXtcclxuICAgICAgICBjb25zdCBwcm9ncmFtID0ge1xyXG4gICAgICAgICAgcHJvZ3JhbUlkOiBlbGU/LmNhdGVnb3J5X2lkLFxyXG4gICAgICAgICAgcHJvZ3JhbU9iamVjdElkOiBlbGU/Ll9pZCxcclxuICAgICAgICAgIHN1YlByb2dyYW1JZHM6IGVsZT8uY2hpbGRfaWQ/LmZpbHRlciggKGVsOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5Py5pbmNsdWRlcyhlbCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBsaW5rZWRQcm9ncmFtSWRzPy5wdXNoKHByb2dyYW0pO1xyXG4gICAgICAgIGxpbmtlZENhdGVnb3J5SWRzPy5wdXNoKGVsZT8uY2F0ZWdvcnlfaWQpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGxldCBjYXRlZ29yeUlkc0V4Y2VwdERlZmF1bHQ6YW55ID0gW11cclxuICAgIGNhdGVnb3J5SWRzRXhjZXB0RGVmYXVsdCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5jYXRlZ29yeT8uZmlsdGVyKCAoZWw6IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gKGVsICE9PSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uY2F0ZWdvcnlfaWQgICYmICF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uY2hpbGRfaWQ/LmluY2x1ZGVzKGVsKSlcclxuICAgIH0pXHJcbiAgICB0aGlzLmNvbWJpbmVVc2VyQW5kVXNlckdyb3VwTWVtYmVycygpO1xyXG5cclxuICAgIGNvbnN0IHJlbWFya3MgPSAoZW50cnVzdEZvcm0uZGVzY3JpcHRpb24ucmVwbGFjZSgvXFwmbmJzcDsvZywgJycpLnRyaW0oKSAhPT0gJycpID8gZW50cnVzdEZvcm0uZGVzY3JpcHRpb24gOiAnJ1xyXG4gICAgY29uc3Qgb2JqZWN0aXZlID0gKGVudHJ1c3RGb3JtLm9iamVjdGl2ZS5yZXBsYWNlKC9cXCZuYnNwOy9nLCAnJykudHJpbSgpICE9PSAnJykgPyBlbnRydXN0Rm9ybS5vYmplY3RpdmUgOiAnJ1xyXG4gICAgbGV0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgYXBwX2Fzc29jaWF0aW9uOiBbXSxcclxuICAgICAgYXNzaWduZWRfdG86IHRoaXMucmV0dXJuSWRzKHRoaXMuYXNzaWduZWVVc2VyTGlzdCwgJ2VtcGxveWVlX2lkJykudG9TdHJpbmcoKSxcclxuICAgICAgcHJvZ3JhbV9jYXRfaWRzOiBtb3JlT3B0aW9ucz8uUFJPR1JBTSA/ICgoZW50cnVzdEZvcm0/LnByb2dyYW0/Lmxlbmd0aCkgPyBbZW50cnVzdEZvcm0ucHJvZ3JhbVswXS5jYXRlZ29yeV9pZF0gOiBbXSk6W10sXHJcbiAgICAgIGxpbmtlZF9wcm9ncmFtX2lkczogbGlua2VkUHJvZ3JhbUlkcyxcclxuICAgICAgbGlua2VkX2NhdGVnb3J5X2lkczogdGhpcy5nZXRVbmlxdWVJZHMoWy4uLmNhdGVnb3J5SWRzRXhjZXB0RGVmYXVsdCwgLi4ubGlua2VkQ2F0ZWdvcnlJZHNdICksXHJcbiAgICAgIC8vIGNhdGVnb3J5X2lkOiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1fc2VsZWN0ZWRfaWRzPy5sZW5ndGggPiAwKSA/IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5jYXRlZ29yeV9pZCA6ICcnLFxyXG4gICAgICBjYXRlZ29yeV9pZDogKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtX3NlbGVjdGVkX2lkcz8ubGVuZ3RoID4gMCkgPyB0aGlzLmdldFVuaXF1ZUlkcyhbLi4udGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmNhdGVnb3J5LCAuLi5saW5rZWRDYXRlZ29yeUlkcyAsIC4uLltlbnRydXN0Rm9ybS5wcm9ncmFtWzBdLmNhdGVnb3J5X2lkXV0gKT8udG9TdHJpbmcoKSA6ICcnLFxyXG4gICAgICBjY19lbWFpbDogKG1vcmVPcHRpb25zLk9WRVJTRUVSKSA/IHRoaXMucmV0dXJuSWRzKHRoaXMub3ZlcnNlZXJVc2VyTGlzdCwgJ2VtcGxveWVlX2lkJykudG9TdHJpbmcoKSA6ICcnLFxyXG4gICAgICBjaGVja3BvaW50X2Rlc2NyaXB0aW9uOiAobW9yZU9wdGlvbnMuQ0hFQ0tQT0lOVFMpID8gZW50cnVzdEZvcm0uY2hlY2twb2ludEluc3RydWN0aW9uIDogJycsXHJcbiAgICAgIGNoZWNrcG9pbnRfZGV0YWlsczogKG1vcmVPcHRpb25zLkNIRUNLUE9JTlRTKSA/IEpTT04uc3RyaW5naWZ5KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzKSA6ICcnLFxyXG4gICAgICBjaGVja3BvaW50X2ZsYWc6IDAsXHJcbiAgICAgIGNvbGxhYm9yYXRvcl9tYXJrX2RvbmU6IDAsXHJcbiAgICAgIGNvbW1lbnQ6ICcnLFxyXG4gICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiBjaGVja0NvbnRpbnVvdXNGYWlsZWRWYWx1ZShlbnRydXN0Rm9ybS5mcmVxdWVuY3kpID8gZW50cnVzdEZvcm0uY29udGludW91c19mYWlsZWRfZGF5cyA6IDAsXHJcbiAgICAgIGNvc3Rfb2ZfY29tcGxpYW5jZTogJycsXHJcbiAgICAgIGNyZWF0ZWRfYnk6IGVudHJ1c3RGb3JtLmFzc2lnbm9ycy5saXN0Py5sZW5ndGggPCAxID8gMCA6IHRoaXMubWVtYmVySWQsXHJcbiAgICAgIGNyZWF0aW9uX3dpbmRvdzogMCxcclxuICAgICAgY3VzdG9tX3RhZ3M6IEpTT04uc3RyaW5naWZ5KGVudHJ1c3RGb3JtLmN1c3RvbVRhZ3MpLFxyXG4gICAgICBlbnRpdHlfdHJlZTogKG1vcmVPcHRpb25zLlJDKSA/IHJjRGV0YWlscyA6IFtdLFxyXG4gICAgICBlbnRydXN0X2Zyb21fcmlzazogdGhpcy5vcGVuZWRGcm9tID09PSAnUklTS19UUkVBVE1FTlQnID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICBmYWlsZWRfYWZ0ZXJfZGF5czogZW50cnVzdEZvcm0uZmFpbGVkX2FmdGVyX2RheXMsXHJcbiAgICAgIGZhaWxlZF90aW1lX3V0YzogZW50cnVzdEZvcm0uZmFpbGVkX3RpbWVfdXRjLFxyXG4gICAgICBmYWlsdXJlX2NjX2VtYWlsOiAobW9yZU9wdGlvbnMuT1ZFUlNFRVIpID8gdGhpcy5yZXR1cm5JZHModGhpcy5vdmVyc2VlclVzZXJOb3RpZnlMaXN0LCAnZW1wbG95ZWVfaWQnKS50b1N0cmluZygpIDogJycsXHJcbiAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzOiBlbnRydXN0Rm9ybS5mcmVxdWVuY3ksXHJcbiAgICAgIGZyZXF1ZW5jeV90aW1lOiBlbnRydXN0Rm9ybS50aW1lSW4yNEhyID8/IFwiMjM6NTk6MDBcIixcclxuICAgICAgZ3JjX29iamVjdF9pZDogMCxcclxuICAgICAgZ3JjX3JlbGF0aW9uc2hpcDogJycsXHJcbiAgICAgIGlmX3Rlc3RwbGFuX2ZhaWxlZDogMCxcclxuICAgICAgaW1wYWN0OiAnJyxcclxuICAgICAgaXNHcm91cEFzc2lnblRvOiAoZW50cnVzdEZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID09ICdBTllfT05FJykgPyAxIDogMCxcclxuICAgICAgaXNfa2V5X2NvbXBsaWFuY2U6IGVudHJ1c3RGb3JtLnJlc3BvbnNpYmlsaXR5LmtleVJlc3BvbnNpYmlsaXR5ID8gMSA6IDAsXHJcbiAgICAgIGxpYnJhcnlfcmVwb3J0X2lkOiAwLFxyXG4gICAgICBsaWZlY3ljbGVfZGV0YWlsczogZW50cnVzdEZvcm0ubGlmZWN5Y2xlRGV0YWlscyA/PyAnMDAwMC0wMC0wMH5+MCcsXHJcbiAgICAgIGxpbmtfZm9yX2RldGFpbHM6IChtb3JlT3B0aW9ucy5GT1JNQVRFX0VWSURFTkNFKSA/IGVudHJ1c3RGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmZvcm1hdExpbmtzIDogW10sXHJcbiAgICAgIGxpbmthZ2VzOiB7IGNvbXBsaWFuY2U6IFtdIH0sXHJcbiAgICAgIG1lbWJlcl9pZDogdGhpcy5yZXR1cm5JZHMoZW50cnVzdEZvcm0uYXNzaWdub3JzLmxpc3QsICdtZW1iZXJfaWQnKT8ubGVuZ3RoID4gMCA/IHRoaXMucmV0dXJuSWRzKGVudHJ1c3RGb3JtLmFzc2lnbm9ycy5saXN0LCAnbWVtYmVyX2lkJylbMF0gOiB0aGlzLm1lbWJlcklkLFxyXG4gICAgICBvYmplY3RpdmU6IChtb3JlT3B0aW9ucy5PQkpFQ1RJVkUpID8gb2JqZWN0aXZlIDogJycsXHJcbiAgICAgIG9uX2NvbXBsZXRpb25fb2Y6IGVudHJ1c3RGb3JtLnJlcG9ydElkID8gW2VudHJ1c3RGb3JtLnJlcG9ydElkXSA6IFtdLFxyXG4gICAgICBvbl9jb21wbGV0aW9uX29mX3R5cGU6IDEsXHJcbiAgICAgIG9yZ2FuaXNhdGlvbl9pZDogdGhpcy5vcmdhbml6YXRpb25JZCxcclxuICAgICAgb3ZlcnJpZGVfd2Vla2x5OiAwLFxyXG4gICAgICBwYXJlbnRfaWQ6IDAsXHJcbiAgICAgIHBlbmFsdHk6ICcnLFxyXG4gICAgICBwcml2YXRlX2xpYnJhcnlfaWQ6IDAsXHJcbiAgICAgIHJlbWFya3M6IHJlbWFya3MsXHJcbiAgICAgIHJlbWluZGVyX2JlZm9yZV9kYXlzOiBlbnRydXN0Rm9ybS5yZW1pbmRlcl9iZWZvcmVfZGF5cyxcclxuICAgICAgcmVwb3J0X2Zvcm1hdDogKG1vcmVPcHRpb25zLkZPUk1BVEVfRVZJREVOQ0UpID8gZW50cnVzdEZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZm9ybWF0RmlsZXMgOiBbXSxcclxuICAgICAgcmVwb3J0X2Zvcm1hdF9saW5rOiAnJyxcclxuICAgICAgcmVwb3J0X25hbWU6IGVudHJ1c3RGb3JtLnJlc3BvbnNpYmlsaXR5Lm5hbWUsXHJcbiAgICAgIHJlcG9ydF91cGxvYWRfZmxhZzogZW50cnVzdEZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZXZpZGVuY2VSZXF1aXJlZCA/IDEgOiAwLFxyXG4gICAgICByZXZpZXdfYWZ0ZXJfZGF5czogKG1vcmVPcHRpb25zLlJFVklFV0VSKSA/IGVudHJ1c3RGb3JtLnJldmlld2Vycy5yZXZpZXdGcmVxdWVuY3kucmV2aWV3Q29tcGxldGVEYXlzID09PSAnJyA/IDAgOiBOdW1iZXIoZW50cnVzdEZvcm0ucmV2aWV3ZXJzLnJldmlld0ZyZXF1ZW5jeS5yZXZpZXdDb21wbGV0ZURheXMpIDogMCxcclxuICAgICAgcmV2aWV3X2ZhaWxlZF9hZnRlcl9kYXlzOiAobW9yZU9wdGlvbnMuUkVWSUVXRVIpID8gZW50cnVzdEZvcm0ucmV2aWV3ZXJzLnJldmlld0ZyZXF1ZW5jeS5yZXZpZXdOT3RDb21wbGV0ZWREYXlzID09PSAnJyA/IDAgOiBOdW1iZXIoZW50cnVzdEZvcm0ucmV2aWV3ZXJzLnJldmlld0ZyZXF1ZW5jeS5yZXZpZXdOT3RDb21wbGV0ZWREYXlzKSA6IDAsXHJcbiAgICAgIHJldmlld2VyX2FycjogKG1vcmVPcHRpb25zLlJFVklFV0VSKSA/IHtcclxuICAgICAgICBsZXZlbDE6IHtcclxuICAgICAgICAgIHJldmlld2VyczogdGhpcy5zZXRSZXZpZXdlclBheWxvYWQodGhpcy5yZXZpZXdlclVzZXJMaXN0LCAnbGlzdCcsIGVudHJ1c3RGb3JtLnJldmlld2Vycy5hY2NlcHRlZERhdGEsIChlbnRydXN0Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93KSA/ICdTRVFVRU5USUFMJyA6ICdBTllPTkUnKSxcclxuICAgICAgICAgIHR5cGU6IChlbnRydXN0Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93KSA/ICdTRVFVRU5USUFMJyA6ICdBTllPTkUnXHJcbiAgICAgICAgfSxcclxuICAgICAgfSA6IHt9LFxyXG4gICAgICB1c2VyR3JvdXBJZHM6ICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICBhc3NpZ25lZUFsbEdyb3VwSWRzIDogZW50cnVzdEZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlICE9PSAnQU5ZX09ORScgPyB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3QsJ2dyb3VwX2lkJykgOiBbXSxcclxuICAgICAgICBhc3NpZ25lZUFueW9uZUdyb3VwSWRzIDogZW50cnVzdEZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID09PSAnQU5ZX09ORScgPyB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3QsJ2dyb3VwX2lkJykgOiBbXSxcclxuICAgICAgICBjY0VtYWlsR3JvdXBJZHMgOiAgICAgICAgdGhpcy5yZXR1cm5JZHModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdCwnZ3JvdXBfaWQnKSA/PyBbXSxcclxuICAgICAgICBmYWlsdXJlQ0NFbWFpbEdyb3VwSWRzIDogdGhpcy5yZXR1cm5JZHModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdCwnZ3JvdXBfaWQnKSA/PyBbXSxcclxuICAgICAgICByZXZpZXdlckdyb3VwSWRzICAgICAgIDogdGhpcy5yZXR1cm5JZHModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0LCdncm91cF9pZCcpID8/IFtdXHJcbiAgICB9LFxyXG4gICAgZXhpc3RpbmdVc2VySWRzOiAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgIGFzc2lnbmVlQWxsSWRzOiBlbnRydXN0Rm9ybS5hc3NpZ25lZXMud2hvQ2FuQ29tcGxldGUgIT09ICdBTllfT05FJyA/IHRoaXMucmV0dXJuSWRzKGVudHJ1c3RGb3JtPy5hc3NpZ25lZXM/Lmxpc3QsICdteV9tZW1iZXJfaWQnKSA6IFtdLFxyXG4gICAgICAgIGFzc2lnbmVlQW55b25lSWRzIDogZW50cnVzdEZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID09PSAnQU5ZX09ORScgPyB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybT8uYXNzaWduZWVzPy5saXN0LCAnbXlfbWVtYmVyX2lkJykgOiBbXSxcclxuICAgICAgICBjY0VtYWlsRW1wSWRzIDogdGhpcy5yZXR1cm5JZHMoZW50cnVzdEZvcm0/Lm92ZXJzZWVycz8ubGlzdCwgJ2VtcGxveWVlX2lkJykgPz8gW10sXHJcbiAgICAgICAgZmFpbHVyZUNDRW1haWxFbXBJZHMgOiB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0LCAnZW1wbG95ZWVfaWQnKSA/PyBbXSxcclxuICAgICAgICByZXZpZXdlcklkcyA6dGhpcy5yZXR1cm5JZHMoIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3QsJ21lbWJlcl9pZCcpID8/IFtdXHJcbiAgICB9LFxyXG4gICAgICByZXZpZXdlcl9jaGVja3BvaW50czogW3sgY2hlY2twb2ludHM6IFtdLCBpbnN0cnVjdGlvbjogJycgfV0sXHJcbiAgICAgIHJldmlld2VyX2lkOiAwLFxyXG4gICAgICByaXNrX2NsYXNzOiB0aGlzLmlzUmlza0VuYWJsZSA/IGVudHJ1c3RGb3JtLnJpc2tDbGFzcyA6IDIsXHJcbiAgICAgIHJpc2tfaWRzOiAnJyxcclxuICAgICAgcmlza19tYXRyaXhfZGF0YTogKG1vcmVPcHRpb25zLlJJU0tfQ0xBU1NJRklDQVRJT04pID8gZW50cnVzdEZvcm0ucmlza01hdHJpeCA6ICcwLDAsMCwwLDAsMCcsXHJcbiAgICAgIHNhbXBsZV9zaXplOiAwLFxyXG4gICAgICBzdGFydF9kYXRlX3V0Yzogc3RhcnREYXRlLFxyXG4gICAgICBzdGF0dXRvcnlfZGF5OiAwLFxyXG4gICAgICB0ZXN0X3JlcXVpcmVkX2ZsYWc6IChtb3JlT3B0aW9ucy5BU1NVUkFOQ0UpID8gKGVudHJ1c3RGb3JtLmFzc3VyYW5jZUxpc3Q/Lmxlbmd0aCA+IDAgPyAxIDogMCkgOiAwLFxyXG4gICAgICB0ZXN0cGxhbl9jYXRlZ29yeV9pZDogKG1vcmVPcHRpb25zLkFTU1VSQU5DRSkgPyB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybS5hc3N1cmFuY2VMaXN0LCAnY2F0ZWdvcnlfaWQnKSA6IFtdLFxyXG4gICAgICB0ZXN0cGxhbl9jYXRlZ29yeV9tYW5hZ2VyOiAnJyxcclxuICAgICAgYXVkaXRfY2F0ZWdvcnlfZGV0YWlsczogbW9yZU9wdGlvbnMuUkVRVUlSRVNfQVVESVQgJiYgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmF1ZGl0X2NhdGVnb3J5X2RldGFpbHM/LmNhdGVnb3J5X2lkID8ge1xyXG4gICAgICAgIGNhdGVnb3J5X2lkOiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hdWRpdF9jYXRlZ29yeV9kZXRhaWxzLmNhdGVnb3J5X2lkLFxyXG4gICAgICAgIHNhbXBsZTogdGhpcy5zZWxlY3RlZFNhbXBsZSA9PT0gMCA/IHRoaXMuc2FtcGxlVmFsdWUgOiAwLFxyXG4gICAgICAgIHBlcmNlbnRhZ2U6IHRoaXMuc2VsZWN0ZWRTYW1wbGUgPT09IDEgPyB0aGlzLnNhbXBsZVBlcmNlbnRhZ2UgOiAwLFxyXG4gICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuOiBgMX4wfiR7dGhpcy5zZW5kQXVkaXRSZW1pbmRlcnNWYWx1ZX1+MWAsXHJcbiAgICAgICAgZnJlcXVlbmN5X3RpbWU6IG1vbWVudCh0aGlzLmF1ZGl0VGltZSwgJ0hIOm1tIGEnKS5mb3JtYXQoJ0hIOm1tOnNzJylcclxuICAgICAgfSA6IHtcclxuICAgICAgICBjYXRlZ29yeV9pZDogMCxcclxuICAgICAgICBzYW1wbGU6IDAsXHJcbiAgICAgICAgcGVyY2VudGFnZTogMCxcclxuICAgICAgICBmcmVxdWVuY3lfcGF0dGVybjogYGAsXHJcbiAgICAgICAgZnJlcXVlbmN5X3RpbWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIGFzc2Vzc21lbnQ6IHtcclxuICAgICAgICBjYXRlZ29yeV9pZDogbW9yZU9wdGlvbnMuQVNTRVNTTUVOVCA/IGVudHJ1c3RGb3JtPy5hc3Nlc3NtZW50Py5jYXRlZ29yeV9pZCA6ICcnLFxyXG4gICAgICAgIGFzc2Vzc21lbnRfaWQ6IG1vcmVPcHRpb25zLkFTU0VTU01FTlQgPyBlbnRydXN0Rm9ybT8uYXNzZXNzbWVudD8uYXNzZXNzbWVudF9pZCA6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIGFzc2Vzc21lbnRfY2hlY2twb2ludDogbW9yZU9wdGlvbnMuQ0hFQ0tQT0lOVFNfTkVXID8gKE9iamVjdC5rZXlzKGVudHJ1c3RGb3JtPy5uZXdfY2hlY2twb2ludHMpPy5sZW5ndGggPiAwID8gZW50cnVzdEZvcm0/Lm5ld19jaGVja3BvaW50cyA6IHt9KSA6IHt9LFxyXG4gICAgICBxdWVzdGlvbm5haXJlX3R5cGU6IG1vcmVPcHRpb25zLkNIRUNLUE9JTlRTX05FVyA/IChPYmplY3Qua2V5cyhlbnRydXN0Rm9ybT8ubmV3X2NoZWNrcG9pbnRzKT8ubGVuZ3RoID4gMCA/ICdhc3Nlc3NtZW50X2NoZWNrcG9pbnQnIDogKG1vcmVPcHRpb25zLkFTU0VTU01FTlQgJiYgZW50cnVzdEZvcm0/LmFzc2Vzc21lbnQ/LmNhdGVnb3J5X2lkID8gJ2Fzc2Vzc21lbnQnIDogKEpTT04uc3RyaW5naWZ5KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzKSAhPSAnJyAmJiBtb3JlT3B0aW9ucy5DSEVDS1BPSU5UUyA/ICdjaGVja3BvaW50JyA6ICcnKSkpIDogJydcclxuICAgIH07XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5UGF5bG9hZCA9IHBheWxvYWQ7XHJcbiAgICBpZiAodGhpcy5tb2RlID09ICdDUkVBVEUnICYmICF0aGlzLmlzRHVwbGljYXRlRW50cnVzdCkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5zdWJtaXRFbnRydXN0KHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93U21pbGV5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YSA9IHJlcztcclxuXHJcblxyXG4gICAgICAgIGlmIChyZXMubWVzc2FnZSAmJiByZXMubWVzc2FnZS50b0xvd2VyQ2FzZSgpID09PSAnYnVsayBlbnRydXN0Jykge1xyXG4gICAgICAgICAgdGhpcy5zbWlsZXlNZXNzYWdlID0gYFlvdSBoYXZlIGVudHJ1c3RlZCAke3Jlcy5jYWxjdWxhdGVfbm9fb2ZfcmVzcG9uc2liaWl0aWVzfSByZXNwb25zaWJpbGl0aWVzLiBUaGVzZSB3b3VsZCBiZSByZWZsZWN0ZWQgd2l0aGluIHlvdXIgYWNjb3VudCBpbiBzb21ldGltZS5gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmcgJiYgcGF5bG9hZC5jcmVhdGVkX2J5ID09IDApIHtcclxuICAgICAgICAgIHRoaXMuc21pbGV5TWVzc2FnZSA9ICdUaGlzIHJlc3BvbnNpYmlsaXR5IGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBub3RpZmljYXRpb24gcXVldWUuJ1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAocGF5bG9hZC5jcmVhdGVkX2J5ID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbnNbMV0uYnV0dG9uVGV4dCA9IFwiVmlldyBSZXNwb25zaWJpbGl0aWVzXCI7XHJcbiAgICAgICAgICAgIHRoaXMuc21pbGV5TWVzc2FnZSA9IGBZb3UganVzdCBjcmVhdGVkIGEgcmVzcG9uc2liaWxpdHkgb24gYmVoYWxmICR7ZW50cnVzdEZvcm0uYXNzaWdub3JzLmxpc3QuZmluZCgobWVtYmVyOiBhbnkpID0+IG1lbWJlci5tZW1iZXJfaWQgPT09IHBheWxvYWQubWVtYmVyX2lkKS5tZW1iZXJfbmFtZX1gO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAvL3RoaXMucmVzZXQoKTtcclxuICAgICAgfSxcclxuICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KCdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLCAnYWxlcnQnKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZSA9PSAnRURJVCcgfHwgdGhpcy5pc0R1cGxpY2F0ZUVudHJ1c3QpIHtcclxuICAgICAgdGhpcy5zbWlsZXlNZXNzYWdlID0gYFRoZSByZXNwb25zaWJpbGl0eSBoYXMgYmVlbiBtb2RpZmllZC5gO1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS51cGRhdGVFbnRydXN0KHBheWxvYWQsIHRoaXMucmVzcG9uc2liaWxpdHlJZCwgdHJ1ZSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlEYXRhID0gcmVzO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dTbWlsZXkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzU21pbGV5T24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNEdXBsaWNhdGVFbnRydXN0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIHRoaXMucmVzZXRGb3JtKCk7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsICdhbGVydCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuIHVuaXF1ZUlkVXNlckdyb3Vwcyh0b3RhbFVzZXJMaXN0OmFueSxzZWxlY3RlZEdyb3VwOmFueSxzZWxlY3RlZFVzZXJzOmFueSl7XHJcbiAgbGV0IGdyb3VwVXNlckxpc3QgPSB0aGlzLmdldEdyb3Vwc1VzZXJFbXBsb3llZXNJZCh0b3RhbFVzZXJMaXN0LHNlbGVjdGVkR3JvdXApXHJcbiAgbGV0IGlkcyA9IG5ldyBTZXQoc2VsZWN0ZWRVc2Vycy5tYXAoICh1c2VyIDphbnkpID0+IHVzZXI/Lm15X21lbWJlcl9pZCkpO1xyXG4gIGxldCB1c2VyTGlzdCA9IFsuLi5zZWxlY3RlZFVzZXJzLCAuLi5ncm91cFVzZXJMaXN0LmZpbHRlcigoZ3JvdXBVc2VyIDphbnkpID0+ICFpZHMuaGFzKGdyb3VwVXNlcj8ubXlfbWVtYmVyX2lkKSldO1xyXG4gIHJldHVybiB1c2VyTGlzdFxyXG4gfVxyXG5cclxuY29tYmluZVVzZXJBbmRVc2VyR3JvdXBNZW1iZXJzKCl7XHJcbiAgaWYodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpe1xyXG4gICAgdGhpcy5hc3NpZ25lZVVzZXJMaXN0ID0gdGhpcy51bmlxdWVJZFVzZXJHcm91cHModGhpcy5hbGxVc2Vyc0xpc3QsdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0LHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3QpXHJcbiAgICB0aGlzLnJldmlld2VyVXNlckxpc3QgPSB0aGlzLnVuaXF1ZUlkVXNlckdyb3Vwcyh0aGlzLmFsbFVzZXJzTGlzdCx0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3QsdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdClcclxuICAgIHRoaXMub3ZlcnNlZXJVc2VyTGlzdCA9IHRoaXMudW5pcXVlSWRVc2VyR3JvdXBzKHRoaXMuYWxsVXNlcnNMaXN0LHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lmxpc3QsdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdClcclxuICAgIHRoaXMub3ZlcnNlZXJVc2VyTm90aWZ5TGlzdCA9IHRoaXMudW5pcXVlSWRVc2VyR3JvdXBzKHRoaXMuYWxsVXNlcnNMaXN0LHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3QsdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdClcclxuXHJcbiAgfWVsc2V7XHJcbiAgICB0aGlzLmFzc2lnbmVlVXNlckxpc3QgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0XHJcbiAgICB0aGlzLnJldmlld2VyVXNlckxpc3QgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0XHJcbiAgICB0aGlzLm92ZXJzZWVyVXNlckxpc3QgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0XHJcbiAgICB0aGlzLm92ZXJzZWVyVXNlck5vdGlmeUxpc3QgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0XHJcbiAgfVxyXG59XHJcblxyXG4gLyoqXHJcbiAgKiBJdCByZXNldHMgdGhlIGZvcm0uXHJcbiAgKi9cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gICAgdGhpcy51aUtpdFNlcnZpY2UuaXNTbWlsZXlPbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0gPSB7XHJcbiAgICAgIGFzc2lnbm9yczoge1xyXG4gICAgICAgIGVuYWJsZTogZmFsc2UsXHJcbiAgICAgICAgbGlzdDogW11cclxuICAgICAgfSxcclxuICAgICAgcmVzcG9uc2liaWxpdHk6IHtcclxuICAgICAgICBuYW1lOiAnJyxcclxuICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIGFzc2lnbmVlR3JvdXBzOntcclxuICAgICAgICB3aG9DYW5Db21wbGV0ZTogJ0FMTCcsXHJcbiAgICAgICAgbGlzdDogW11cclxuICAgICAgfSxcclxuICAgICAgYXNzaWduZWVzOiB7XHJcbiAgICAgICAgd2hvQ2FuQ29tcGxldGU6ICdBTEwnLFxyXG4gICAgICAgIGxpc3Q6IFtdXHJcbiAgICAgIH0sXHJcbiAgICAgIGZyZXF1ZW5jeTogJycsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcclxuICAgICAgb2JqZWN0aXZlOiAnJyxcclxuICAgICAgcmM6IFtdLFxyXG4gICAgICBjYXRlZ29yeTogW10sXHJcbiAgICAgIGNoZWNrcG9pbnRJbnN0cnVjdGlvbjogJycsXHJcbiAgICAgIGN1c3RvbVRhZ3M6IFtdLFxyXG4gICAgICBjaGVja3BvaW50czogW10sXHJcbiAgICAgIHJldmlld2Vyczoge1xyXG4gICAgICAgIHNlcXVlbnRpYWxXb3JrZmxvdzogdHJ1ZSxcclxuICAgICAgICByZXZpZXdGcmVxdWVuY3k6IHtcclxuICAgICAgICAgIHJldmlld0NvbXBsZXRlRGF5czogMixcclxuICAgICAgICAgIHJldmlld05PdENvbXBsZXRlZERheXM6IDJcclxuICAgICAgICB9LFxyXG4gICAgICAgIGxpc3Q6IFtdXHJcbiAgICAgIH0sXHJcbiAgICAgIGdyb3VwUmV2aWV3ZXJzOiB7XHJcbiAgICAgICAgc2VxdWVudGlhbFdvcmtmbG93OiB0cnVlLFxyXG4gICAgICAgIHJldmlld0ZyZXF1ZW5jeToge1xyXG4gICAgICAgICAgcmV2aWV3Q29tcGxldGVEYXlzOiAyLFxyXG4gICAgICAgICAgcmV2aWV3Tk90Q29tcGxldGVkRGF5czogMlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbGlzdDogW11cclxuICAgICAgfSxcclxuICAgICAgb3ZlcnNlZXJzOiB7XHJcbiAgICAgICAgbm90aWZ5TGlzdDogW10sXHJcbiAgICAgICAgbGlzdDogW11cclxuICAgICAgfSxcclxuICAgICAgb3ZlcnNlZXJzR3JvdXBzOiB7XHJcbiAgICAgICAgbm90aWZ5TGlzdDogW10sXHJcbiAgICAgICAgbGlzdDogW11cclxuICAgICAgfSxcclxuICAgICAgZm9ybWF0QW5kRXZpZGVuY2U6IHtcclxuICAgICAgICBmb3JtYXRSZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgICAgZm9ybWF0RmlsZXM6IFtdLFxyXG4gICAgICAgIGZvcm1hdExpbmtzOiBbXSxcclxuICAgICAgICBldmlkZW5jZVJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAgYXNzdXJhbmNlTGlzdDogW10sXHJcbiAgICAgIHJlcXVpcmVzQXVkaXRMaXN0OiBbXSxcclxuICAgICAgcmlza0NsYXNzOiAxLFxyXG4gICAgICByaXNrTWF0cml4OiAnMCwwLDAsMCwwLDAnLFxyXG4gICAgICBwcm9ncmFtOiBbXSxcclxuICAgICAgcHJvZ3JhbV9zZWxlY3RlZF9pZHM6IFtdXHJcbiAgICB9O1xyXG4gICAgdGhpcy5tb3JlT3B0aW9ucyA9IHtcclxuICAgICAgT0JKRUNUSVZFOiBmYWxzZSxcclxuICAgICAgUkM6IGZhbHNlLFxyXG4gICAgICBDQVRFR09SWTogZmFsc2UsXHJcbiAgICAgIEZPUk1BVEVfRVZJREVOQ0U6IGZhbHNlLFxyXG4gICAgICBDSEVDS1BPSU5UUzogZmFsc2UsXHJcbiAgICAgIFJJU0tfQ0xBU1NJRklDQVRJT046IGZhbHNlLFxyXG4gICAgICBSRVZJRVdFUjogZmFsc2UsXHJcbiAgICAgIE9WRVJTRUVSOiBmYWxzZSxcclxuICAgICAgQVNTVVJBTkNFOiBmYWxzZSxcclxuICAgICAgQVBQUzogZmFsc2UsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdIb3cgb2Z0ZW4gZG9lcyB0aGUgcmVzcG9uc2liaWxpdHkgb2NjdXI/JztcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscyA9IHtcclxuICAgICAgcGF0dGVybjogJycsXHJcbiAgICAgIG5vdGlmaWNhdGlvblBlbmRpbmc6IDAsXHJcbiAgICAgIGRhdGVPZk1vZGlmaWVkOiAwLFxyXG4gICAgICBkZWFjdGl2YXRpb25WYWx1ZTogMCxcclxuICAgICAgc2VsZWN0ZWRSZXBvcnQ6IDAsXHJcbiAgICAgIGxpZmVjeWNsZTogJzAwMDAtMDAtMDB+fjAnLFxyXG4gICAgICBzdGFydERhdGU6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcclxuICAgICAgc3RhcnRPblRoZURheTogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxyXG4gICAgICB3aW5kb3c6IDAsXHJcbiAgICAgIGZhaWxlZDogMCxcclxuICAgICAgdGltZTogJzExOjU5IHBtJyxcclxuICAgICAgZmFpbGVkVGltZTogJycsXHJcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDBcclxuICAgIH1cclxuICAgIHRoaXMuc2FtcGxlVmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNhbXBsZVBlcmNlbnRhZ2UgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2FtcGxlID0gLTE7XHJcbiAgICB0aGlzLnNlbmRBdWRpdFJlbWluZGVyc1ZhbHVlID0gMjtcclxuICAgIHRoaXMuYXVkaXRUaW1lID0gJzExOjU5IHBtJ1xyXG4gICAgdGhpcy5tb2RlID0gJ0NSRUFURSdcclxuICAgIHRoaXMuaXNFbnRydXN0ID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzZXRGb3JtLmVtaXQodHJ1ZSk7XHJcbiAgfVxyXG4gIGFjdGlvbihldmVudDogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5vcGVuZWRGcm9tID09PSAnUklTS19UUkVBVE1FTlQnKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VTbWlsZXkoJ2RzJyk7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgc3dpdGNoIChldmVudCkge1xyXG4gICAgICBjYXNlICdhZGRNb3JlJzpcclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3ZpZXcnOlxyXG4gICAgICAgIHRoaXMudmlld1Jlc3BvbnNpYmlsaXRpZXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbiAgdmlld1Jlc3BvbnNpYmlsaXRpZXMoKTogdm9pZCB7XHJcbiAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICBsZXQgdXJsU3Vic3RyaW5nID0gJyc7XHJcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xyXG4gICAgaWYgKHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nICYmIHRoaXMucmVzcG9uc2liaWxpdHlQYXlsb2FkLmNyZWF0ZWRfYnkgPT0gMCkge1xyXG4gICAgICBpZih0aGlzLmlzUmVzcG9uc2liaWxpdHlTaW1wbGlmaWVkKXtcclxuICAgICAgICB1cmxTdWJzdHJpbmcgPSAnY29tcGxpYW5jZS9tYW5hZ2UtcmVzcG9uc2liaWxpdHk/JyArIHRoaXMudXJsIDtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgIHVybFN1YnN0cmluZyA9ICdjb21wbGlhbmNlL21hbmFnZS1yZXNwb25zaWJpbGl0aWVzL3Jlc3BvbnNpYmlsaXRpZXMtcXVldWUnO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlQYXlsb2FkLmNyZWF0ZWRfYnkgPiAwICYmIHRoaXMubW9kZSAhPT0gJ0VESVQnKSB7XHJcbiAgICAgIHVybFN1YnN0cmluZyA9ICdjb21wbGlhbmNlL21hbmFnZS1yZXNwb25zaWJpbGl0aWVzL292ZXJzaWdodC1yZXNwb25zaWJpbGl0aWVzP3RhYj00JnBhZ2U9MSc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZih0aGlzLmlzUmVzcG9uc2liaWxpdHlTaW1wbGlmaWVkKXtcclxuICAgICAgICB0aGlzLnF1ZXJ5UGFyYW0gPSAgSlNPTj8uc3RyaW5naWZ5KHRoaXMucmVjZW50UmVzcG9uc2liaWxpdHlVcmwpXHJcbiAgICAgICAgdXJsU3Vic3RyaW5nID0gJ2NvbXBsaWFuY2UvbWFuYWdlLXJlc3BvbnNpYmlsaXR5P3E9JyArIHRoaXMucXVlcnlQYXJhbTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgIHVybFN1YnN0cmluZyA9ICdjb21wbGlhbmNlL21hbmFnZS1yZXNwb25zaWJpbGl0aWVzJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgIHVybCA9ICdodHRwOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgJy8jLycgKyB1cmxTdWJzdHJpbmc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1cmwgPSAnaHR0cHM6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyAnL2NvbXBsaWFuY2UvIy8nICsgdXJsU3Vic3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm1vZGUgIT09ICdFRElUJykge1xyXG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcclxuICAgIH1cclxuICAgIHRoaXMuY2xvc2VTbWlsZXkoJ2RzJylcclxuICAgIHRoaXMucmVzZXQoKTtcclxuICB9XHJcbiAgY2xvc2VTbWlsZXkoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gZmFsc2U7XHJcbiAgICAvLyB0aGlzLmNsb3NlV29ya2Zsb3cuZW1pdCh0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YSk7XHJcbiAgICB0aGlzLmNsb3NlV29ya2Zsb3cuZW1pdCh7IGV2dDogdGhpcy5yZXNwb25zaWJpbGl0eURhdGEsIGNvbmZpcm06IGZhbHNlIH0pO1xyXG4gIH1cclxuICAvLyBmb3IgZWRpdCByZXNwb25zaWJpbGl0eVxyXG4gIGZyZXF1ZW5jeURhdGFQb3B1bGF0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgIHBhdHRlcm46IGV2ZW50Py5mcmVxdWVuY3lfZGV0YWlscyxcclxuICAgICAgd2luZG93OiBldmVudD8ucmVtaW5kZXJfYmVmb3JlX2RheXMsXHJcbiAgICAgIGZhaWxlZEFmdGVyOiBldmVudD8uZmFpbGVkX2FmdGVyX2RheXMsXHJcbiAgICAgIGZhaWxlZF90aW1lX3V0YzogZXZlbnQuZmFpbGVkX3RpbWVfdXRjLFxyXG4gICAgICBsaWZlY3ljbGVEZXRhaWxzOiBldmVudD8ubGlmZWN5Y2xlX2RldGFpbHMsXHJcbiAgICAgIHN0YXJ0RnJvbTogTnVtYmVyKGV2ZW50Py5zdGFydF9vZl9kYXlfdXRjKSxcclxuICAgICAgdGltZUluMjRIcjogZXZlbnQuZnJlcXVlbmN5X3RpbWUsXHJcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXMsXHJcbiAgICAgIHN0YXJ0RGF0ZTogTnVtYmVyKGV2ZW50Py5zdGFydF9vZl9kYXlfdXRjKSxcclxuICAgICAgcmVwb3J0SWQ6IGV2ZW50Py5vbl9jb21wbGV0aW9uX29mWzBdID8/IDAsXHJcbiAgICAgIHRpbWVJbjEyaHI6IHRoaXMuZnJlcXVlbmN5U2VydmljZS50aW1lSW4xMihldmVudC5mcmVxdWVuY3lfdGltZSAhPSAnJyA/IGV2ZW50LmZyZXF1ZW5jeV90aW1lIDogJzIzOjU5OjAwJylcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZyZXF1ZW5jeURhdGEoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBmcmVxdWVuY3lQb3B1bGF0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5wYXR0ZXJuID0gZXZlbnQ/LmZyZXF1ZW5jeV9kZXRhaWxzO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmZhaWxlZFRpbWUgPSBldmVudD8uZnJlcXVlbmN5X3RpbWU7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMud2luZG93ID0gZXZlbnQ/LnJlbWluZGVyX2JlZm9yZV9kYXlzO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmZhaWxlZCA9IGV2ZW50Py5mYWlsZWRfYWZ0ZXJfZGF5cztcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5saWZlY3ljbGUgPSBldmVudD8ubGlmZWN5Y2xlX2RldGFpbHM7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuc3RhcnREYXRlID0gZXZlbnQ/LnN0YXJ0X29mX2RheV91dGM7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuc2VsZWN0ZWRSZXBvcnQgPSBldmVudD8ub25fY29tcGxldGlvbl9vZlswXSA/PyAwO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmRhdGVPZk1vZGlmaWVkID0gZXZlbnQ/LmRvbV91dGM7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuY29udGludW91c19mYWlsZWRfZGF5cyA9IGV2ZW50Py5jb250aW51b3VzX2ZhaWxlZF9kYXlzO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IGV2ZW50Py5wbGFjZWhvbGRlcjtcclxuICB9XHJcblxyXG4gIGZyZXF1ZW5jeURhdGEoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaW52YWxpZFR5cGUgPT09ICd3aGVuJykge1xyXG4gICAgICB0aGlzLmludmFsaWRUeXBlID0gJyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgPSBldmVudC5wYXR0ZXJuO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVtaW5kZXJfYmVmb3JlX2RheXMgPSAoZXZlbnQuY2FzZSA9PT0gXCJkYWlseVwiKSA/IDAgOiBldmVudC53aW5kb3dcclxuICAgIC8vdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVtaW5kZXJfYmVmb3JlX2RheXMgPSBldmVudC53aW5kb3c7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mYWlsZWRfYWZ0ZXJfZGF5cyA9IGV2ZW50LmZhaWxlZEFmdGVyO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZmFpbGVkX3RpbWVfdXRjID0gZXZlbnQuZmFpbGVkX3RpbWVfdXRjO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ubGlmZWN5Y2xlRGV0YWlscyA9IGV2ZW50LmxpZmVjeWNsZURldGFpbHM7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXBvcnRJZCA9IGV2ZW50LnJlcG9ydElkID8/IDA7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5zdGFydERhdGUgPSBldmVudC5zdGFydEZyb207XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS50aW1lSW4yNEhyID0gZXZlbnQudGltZUluMjRIcjtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSBldmVudC5jb250aW51b3VzX2ZhaWxlZF9kYXlzO1xyXG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdmcmVxdWVuY3knLCBmYWxzZSk7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBmcmVxdWVuY3lfZGV0YWlsczogZXZlbnQucGF0dGVybixcclxuICAgICAgZnJlcXVlbmN5X3RpbWU6IGV2ZW50LnRpbWVJbjEyaHIsXHJcbiAgICAgIHJlbWluZGVyX2JlZm9yZV9kYXlzOiBldmVudC53aW5kb3csXHJcbiAgICAgIGZhaWxlZF9hZnRlcl9kYXlzOiBldmVudC5mYWlsZWRBZnRlcixcclxuICAgICAgbGlmZWN5Y2xlX2RldGFpbHM6IGV2ZW50LmxpZmVjeWNsZURldGFpbHMsXHJcbiAgICAgIHN0YXJ0X29mX2RheV91dGM6IGV2ZW50LnN0YXJ0RnJvbSxcclxuICAgICAgb25fY29tcGxldGlvbl9vZjogW2V2ZW50LnJlcG9ydElkXSxcclxuICAgICAgZG9tX3V0YzogTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCksXHJcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXMsXHJcbiAgICAgIHBsYWNlaG9sZGVyOiBldmVudC5wbGFjZWhvbGRlclxyXG4gICAgfTtcclxuICAgIHRoaXMuZnJlcXVlbmN5UG9wdWxhdGlvbihwYXlsb2FkKTtcclxuICB9XHJcblxyXG4gIGNoZWNrQmxhbmsoZGF0YTogc3RyaW5nKSB7XHJcbiAgICBpZiAoZGF0YSkge1xyXG4gICAgICBsZXQgdGV4dCA9IGRhdGE7XHJcbiAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL1xcJm5ic3A7L2csICcnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gLyoqXHJcbiAgKiBJdCB0YWtlcyBhIHN0cmluZyBhbmQgcmV0dXJucyBhIHN0cmluZy5cclxuICAqIEBwYXJhbSB7YW55fSByZXMgLSBhbnkgPSB7XHJcbiAgKi9cclxuICBnZXRGcmVxdWVuY3lQbGFjZWhvbGRlcihyZXM6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHJlcy5mcmVxdWVuY3lfZGV0YWlscykge1xyXG4gICAgICAgIGNvbnN0IGZyZXF1ZW5jeURldGFpbHMgPSByZXM/LmZyZXF1ZW5jeV9kZXRhaWxzLnNwbGl0KCd+Jyk7XHJcbiAgICAgICAgY29uc3QgZnJlcXVlbmN5VGltZSA9IHJlcz8uZnJlcXVlbmN5X3RpbWUgPT09ICcwMDowMDowMCcgPyAnMTI6MDAgYW0nIDogdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLnRpbWVJbjEyKHJlcz8uZnJlcXVlbmN5X3RpbWUpO1xyXG4gICAgICAgIHN3aXRjaCAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1swXSkpIHtcclxuICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgdGhpcy5nZXREYWlseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHMsIGZyZXF1ZW5jeVRpbWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgdGhpcy5nZXRXZWVrbHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TW9udGhseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHMsIGZyZXF1ZW5jeVRpbWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgNzpcclxuICAgICAgICAgICAgdGhpcy5nZXRRdWFydGVybHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDk6XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Qmlhbm51YWxQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0WWVhcmx5UGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlscywgZnJlcXVlbmN5VGltZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZGF0ZU9iamVjdCA9IG5ldyBEYXRlKG1vbWVudChmcmVxdWVuY3lEZXRhaWxzWzFdICsgJy0nICsgZnJlcXVlbmN5RGV0YWlsc1syXSArICctJyArIGZyZXF1ZW5jeURldGFpbHNbM10gKyAnIDAwOjAwOjAwJywgJ1lZWVktTU0tREQgSEg6bW06c3MnKS51bml4KCkgKiAxMDAwKTtcclxuICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gICAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxyXG4gICAgICAgICAgICAgICAgJ09uZSBUaW1lICcgKyBkYXRlT2JqZWN0LmdldERhdGUoKSArICcgJyArIHRoaXMuc2hvcnRNb250aFtkYXRlT2JqZWN0LmdldE1vbnRoKCldICsgJyAnICsgZGF0ZU9iamVjdC5nZXRGdWxsWWVhcigpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgODpcclxuICAgICAgICAgICAgdGhpcy5nZXRSYW5kb21QbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAxMDpcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnWW91IGhhdmUgc2VsZWN0ZWQgYW4gb25nb2luZyBmcmVxdWVuY3kuJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgdGhpcy5nZXRPbkNvbXBsZXRpb25PZihmcmVxdWVuY3lEZXRhaWxzLCByZXM/Lm9uX2NvbXBsZXRpb25fb2ZbMF0pO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXHJcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuLyoqXHJcbiAqIEl0IGdldHMgdGhlIGZyZXF1ZW5jeSBkZXRhaWxzIGFuZCByZXBvcnQgaWQsIHRoZW4gaXQgc2V0cyB0aGUgZnJlcXVlbmN5IHBsYWNlaG9sZGVyIHRvIHRoZSBmcmVxdWVuY3lcclxuICogZGV0YWlscyBhbmQgdGhlbiBpdCBnZXRzIHRoZSBvbiBjb21wbGV0aW9uIG9mIHJlc3BvbnNpYmlsaXR5IGFuZCBzZXRzIHRoZSBmcmVxdWVuY3kgcGxhY2Vob2xkZXIgdG9cclxuICogdGhlIGZyZXF1ZW5jeSBkZXRhaWxzIGFuZCB0aGUgcmVwb3J0IG5hbWUuXHJcbiAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lEZXRhaWxzIC0gWzBdID0mZ3Q7IFwiMVwiXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByZXBvcnRJZCAtIG51bWJlclxyXG4gKi9cclxuICBnZXRPbkNvbXBsZXRpb25PZihmcmVxdWVuY3lEZXRhaWxzOiBhbnksIHJlcG9ydElkOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBmcmVxdWVuY3lEZXRhaWxzWzNdICsgJyAnICsgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID4gMSA/ICdkYXlzJyA6ICdkYXknKSArICcgYWZ0ZXIgY29tcGxldGlvbiBvZiAnO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLmdldE9uQ29tcGxldGlvbk9mUmVzcG9uc2liaWxpdHkoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlcG9ydERldGFpbHMgPSByZXMuZmluZCgoZWxlOiBhbnkpID0+IGVsZS5SZXBvcnRJZCA9PSByZXBvcnRJZCk7XHJcbiAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBmcmVxdWVuY3lEZXRhaWxzWzNdICsgJyAnICsgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID4gMSA/ICdkYXlzJyA6ICdkYXknKSArICcgYWZ0ZXIgY29tcGxldGlvbiBvZiAnICsgKHJlcG9ydERldGFpbHMgPyByZXBvcnREZXRhaWxzLnJlcG9ydF9uYW1lIDogJycpO1xyXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIFwiSWYgdGhlIGZyZXF1ZW5jeURldGFpbHNbM10gaXMgMSwgdGhlbiBzZXQgdGhlIGZyZXF1ZW5jeVBsYWNlaG9sZGVyIHRvICdEYWlseSBieSAnICsgZnJlcXVlbmN5VGltZSxcclxuICogb3RoZXJ3aXNlIGlmIGZyZXF1ZW5jeURldGFpbHNbM10gaXMgZ3JlYXRlciB0aGFuIDEsIHRoZW4gc2V0IHRoZSBmcmVxdWVuY3lQbGFjZWhvbGRlciB0byAnRXZlcnkgJyArXHJcbiAqIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pICsgJyBkYXlzIGJ5ICcgKyBmcmVxdWVuY3lUaW1lLlwiXHJcbiAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lEZXRhaWxzIC0gWzAsIDAsIDAsIDFdXHJcbiAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lUaW1lIC0gXCIxMjowMCBBTVwiXHJcbiAqL1xyXG4gIGdldERhaWx5UGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlsczogYW55LCBmcmVxdWVuY3lUaW1lOiBhbnkpIHtcclxuICAgIHtcclxuICAgICAgZnJlcXVlbmN5RGV0YWlscyA9IGZyZXF1ZW5jeURldGFpbHMubWFwKE51bWJlcik7XHJcbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSA9PT0gMSkge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnRGFpbHkgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgPiAxKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdFdmVyeSAnICsgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgKyAnIGRheXMgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4vKipcclxuICogSXQgdGFrZXMgYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIG51bWJlcnMgYW5kIHJldHVybnMgYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzLlxyXG4gKlxyXG4gKiBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIG51bWJlcnMsIGxpa2UgdGhpczpcclxuICpcclxuICogZ2V0V2Vla2x5UGxhY2Vob2xkZXIoW1wiMVwiLFwiMiwzLDQsNSw2LDdcIixcIjFcIixcIjFcIl0sIFwiMTA6MDAgQU1cIilcclxuICpcclxuICogVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIHdvcmRzLCBsaWtlIHRoaXM6XHJcbiAqXHJcbiAqIFwiRXZlcnkgTW9uZGF5LFR1ZXNkYXksV2VkbmVzZGF5LFRodXJzZGF5LEZyaWRheSxTYXR1cmRheSBieSAxMDowMCBBTVwiPC9jb2RlPlxyXG4gKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5RGV0YWlscyAtIFtcIjFcIiwgXCIxLDIsMyw0LDVcIiwgXCJcIiwgXCIxXCIsIFwiXCJdXHJcbiAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lUaW1lIC0gXCIxMDowMCBBTVwiXHJcbiAqL1xyXG4gIGdldFdlZWtseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkRGF5ID0gZnJlcXVlbmN5RGV0YWlsc1sxXS5zcGxpdCgnLCcpLm1hcCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLmRheU5hbWVbcGFyc2VJbnQoZWxlKSAtIDFdO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSA9PT0gMSkge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnRXZlcnkgJyArIHNlbGVjdGVkRGF5LmpvaW4oKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID09PSAyKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdFdmVyeSBhbHRlcm5hdGUgJyArIHNlbGVjdGVkRGF5LmpvaW4oKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID09PSAzKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdFdmVyeSAzcmQgJyArIHNlbGVjdGVkRGF5LmpvaW4oKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID4gMykge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnRXZlcnkgJyArIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3RoICcgKyBzZWxlY3RlZERheS5qb2luKCkgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIEl0IHRha2VzIGEgc3RyaW5nIG9mIGNvbW1hIHNlcGFyYXRlZCBudW1iZXJzLCBjb252ZXJ0cyB0aGVtIHRvIG1vbnRoIG5hbWVzLCBhbmQgdGhlbiBhZGRzIHRoZW0gdG8gYVxyXG4gKiBzZW50ZW5jZS5cclxuICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbXCIxXCIsIFwiMVwiLCBcIjEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyXCJdXHJcbiAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lUaW1lIC0gXCIxMDowMCBBTVwiXHJcbiAqL1xyXG4gIGdldE1vbnRobHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzOiBhbnksIGZyZXF1ZW5jeVRpbWU6IGFueSkge1xyXG4gICAge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZE1vbnRoID0gZnJlcXVlbmN5RGV0YWlsc1syXS5zcGxpdCgnLCcpLm1hcCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGVsZSkgLSAxXTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMSkge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnMXN0IG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcybmQgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzNyZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjEgfHwgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMxKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3N0IG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMikge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICduZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAncmQgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPiAzKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3RoIG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuIC8qKlxyXG4gICogSWYgdGhlIGZyZXF1ZW5jeURldGFpbHNbMV0gaXMgMSwgMiwgMywgMjEsIDIyLCAyMywgb3IgZ3JlYXRlciB0aGFuIDMsIHRoZW4gc2V0IHRoZVxyXG4gICogZnJlcXVlbmN5UGxhY2Vob2xkZXIgdG8gYSBzdHJpbmcgdGhhdCBpbmNsdWRlcyB0aGUgZnJlcXVlbmN5RGV0YWlsc1sxXSBhbmQgdGhlIGZyZXF1ZW5jeURldGFpbHNbMl1cclxuICAqIGFuZCB0aGUgZnJlcXVlbmN5VGltZS5cclxuICAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lEZXRhaWxzIC0gW1wiM1wiLCBcIjFcIiwgXCIxLDIsM1wiXVxyXG4gICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeVRpbWUgLSBcIjEwOjAwIEFNXCJcclxuICAqL1xyXG4gIGdldFF1YXJ0ZXJseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHF1YXJ0ZXJseSA9IFsnSmFudWFyeSwgQXByaWwsIEp1bHksIE9jdG9iZXInLCAnRmVicnVhcnksIE1heSwgQXVndXN0LCBOb3ZlbWJlcicsICcgTWFyY2gsIEp1bmUsIFNlcHRlbWJlciwgRGVjZW1iZXInXTtcclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcxc3Qgb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcybmQgb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICczcmQgb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMSB8fCBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMzEpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAnc3Qgb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMikge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICduZCBvZiBldmVyeSAnICsgcXVhcnRlcmx5W3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0uc3BsaXQoJywnKVswXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIzKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3JkIG9mIGV2ZXJ5ICcgKyBxdWFydGVybHlbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXS5zcGxpdCgnLCcpWzBdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA+IDMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAndGggb2YgZXZlcnkgJyArIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBhIHN0cmluZyBvZiBjb21tYSBzZXBhcmF0ZWQgbnVtYmVycyBhbmQgcmV0dXJucyBhIHN0cmluZyBvZiBjb21tYSBzZXBhcmF0ZWQgbW9udGggbmFtZXMuXHJcbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbXCIxXCIsIFwiMVwiLCBcIjEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyXCJdXHJcbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeVRpbWUgLSBcIjEwOjAwIEFNXCJcclxuICAgKi9cclxuICBnZXRCaWFubnVhbFBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkTW9udGggPSBmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJykubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZWxlKSAtIDFdO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcxc3Qgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzJuZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMykge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnM3JkIG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMSB8fCBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMzEpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAnc3Qgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIyKSB7XHJcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ25kIG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMykge1xyXG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICdyZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA+IDMpIHtcclxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAndGggb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gLyoqXHJcbiAgKiBJZiB0aGUgZnJlcXVlbmN5RGV0YWlsc1sxXSBpcyBsZXNzIHRoYW4gMiwgdGhlbiB0aGUgZnJlcXVlbmN5UGxhY2Vob2xkZXIgaXMgc2V0IHRvIHRoZSAxc3QsIDJuZCxcclxuICAqIDNyZCwgb3IgbnRoIG9mIGV2ZXJ5IG1vbnRoIGJ5IGZyZXF1ZW5jeVRpbWUuXHJcbiAgKlxyXG4gICogSWYgdGhlIGZyZXF1ZW5jeURldGFpbHNbMV0gaXMgZ3JlYXRlciB0aGFuIDEsIHRoZW4gdGhlIGZyZXF1ZW5jeVBsYWNlaG9sZGVyIGlzIHNldCB0byB0aGUgMXN0LCAybmQsXHJcbiAgKiAzcmQsIG9yIG50aCBvZiBldmVyeSBtb250aCwgSW50ZXJ2YWw6IGV2ZXJ5IHllYXJTZXF1ZW5jZSB5ZWFycyBieSBmcmVxdWVuY3lUaW1lLlxyXG4gICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbXCJZZWFybHlcIiwgXCIxXCIsIFwiMVwiLCBcIjFcIl1cclxuICAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lUaW1lIC0gXCIxMDowMCBBTVwiXHJcbiAgKi9cclxuICBnZXRZZWFybHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzOiBhbnksIGZyZXF1ZW5jeVRpbWU6IGFueSkge1xyXG4gICAge1xyXG4gICAgICBjb25zdCB5ZWFyU2VxdWVuY2UgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSA+IDAgPyBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSA6IDE7XHJcbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA8IDIpIHtcclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDEpIHtcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnMXN0IG9mIGV2ZXJ5ICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMikge1xyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcybmQgb2YgZXZlcnkgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzNyZCBvZiBldmVyeSAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPiAzKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAndGggb2YgZXZlcnkgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzMSB8fCBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjEpIHtcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICdzdCBvZiBldmVyeSAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIyKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAnbmQgb2YgZXZlcnkgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMykge1xyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3JkIG9mIGV2ZXJ5ICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPiAxKSB7XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAxKSB7XHJcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICcxc3QgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJywgSW50ZXJ2YWw6IGV2ZXJ5ICcgKyB5ZWFyU2VxdWVuY2UgKyAnIHllYXJzIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIpIHtcclxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJzJuZCAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnLCBJbnRlcnZhbDogZXZlcnkgJyArIHllYXJTZXF1ZW5jZSArICcgeWVhcnMgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMykge1xyXG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnM3JkICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcsIEludGVydmFsOiBldmVyeSAnICsgeWVhclNlcXVlbmNlICsgJyB5ZWFycyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID4gMykge1xyXG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxyXG4gICAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICd0aCBvZiAgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJywgSW50ZXJ2YWw6IGV2ZXJ5ICcgKyB5ZWFyU2VxdWVuY2UgKyAnIHllYXJzIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMxIHx8IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMSkge1xyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICsgJ3N0IG9mIGV2ZXJ5ICcgKyB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjIpIHtcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArICduZCBvZiBldmVyeSAnICsgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIzKSB7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgKyAncmQgb2YgZXZlcnkgJyArIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4vKipcclxuICogSXQgdGFrZXMgYSBmcmVxdWVuY3lEZXRhaWxzIGFycmF5IGFuZCBhIGZyZXF1ZW5jeVRpbWUgYXJyYXkgYW5kIHJldHVybnMgYSBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lEZXRhaWxzIC0gWzQsMSwxLDFdXHJcbiAqL1xyXG4gIGdldFJhbmRvbVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XHJcbiAgICBjb25zdCBxdWFydGVybHkgPSBbJ0phbnVhcnksIEFwcmlsLCBKdWx5LCBPY3RvYmVyJywgJ0ZlYnJ1YXJ5LCBNYXksIEF1Z3VzdCwgTm92ZW1iZXInLCAnIE1hcmNoLCBKdW5lLCBTZXB0ZW1iZXIsIERlY2VtYmVyJ107XHJcbiAgICB7XHJcbiAgICAgIHN3aXRjaCAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkpIHtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ0V2ZXJ5IHdlZWsgZm9yICcgKyBmcmVxdWVuY3lEZXRhaWxzWzNdICsgJyByYW5kb20gaW5zdGFuY2VzJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxyXG4gICAgICAgICAgICAnIEV2ZXJ5ICcgK1xyXG4gICAgICAgICAgICBmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJykubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZWxlKSAtIDFdO1xyXG4gICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogYWxpZ25cclxuICAgICAgICAgICAgfSkgK1xyXG4gICAgICAgICAgICAnIGZvciAnICtcclxuICAgICAgICAgICAgZnJlcXVlbmN5RGV0YWlsc1szXSArXHJcbiAgICAgICAgICAgICcgcmFuZG9tIGluc3RhbmNlcyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ0V2ZXJ5ICcgKyBxdWFydGVybHlbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXS5zcGxpdCgnLCcpWzBdKSAtIDFdICsgJyBmb3IgJyArIGZyZXF1ZW5jeURldGFpbHNbM10gKyAnIHJhbmRvbSBpbnN0YW5jZXMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdFdmVyeSB5ZWFyIGZvciAnICsgZnJlcXVlbmN5RGV0YWlsc1szXSArICcgcmFuZG9tIGluc3RhbmNlcyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4vKipcclxuICogXCJXaGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgZWRpdCBidXR0b24sIHRoZSBlZGl0IGJ1dHRvbiBpcyBoaWRkZW4gYW5kIHRoZSBpbnB1dCBmaWVsZCBpcyBzaG93bi5cclxuICogV2hlbiB0aGUgdXNlciBjbGlja3MgdGhlIGlucHV0IGZpZWxkLCB0aGUgaW5wdXQgZmllbGQgaXMgaGlkZGVuIGFuZCB0aGUgZWRpdCBidXR0b24gaXMgc2hvd24uXCJcclxuICogQHBhcmFtIHthbnl9IGV2ZW50IC0gYW55IC0gdGhlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBmdW5jdGlvblxyXG4gKi9cclxuICBvbkVkaXRXaGF0KGV2ZW50OiBhbnkpIHtcclxuXHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7IC8vIHRoaXMgd2lsbCBtYWtlIHRoZSBleGVjdXRpb24gYWZ0ZXIgdGhlIGFib3ZlIGJvb2xlYW4gaGFzIGNoYW5nZWRcclxuICAgICAgdGhpcy5pc0VkaXRXaGF0ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMud2hhdElucHV0Py5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuIC8qKlxyXG4gICpcclxuICAqIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIHBhcmFtZXRlciBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBzdHJpbmdzLlxyXG4gICogQHBhcmFtIHthbnl9IFtyZXNdIC0gaXMgdGhlIHJlc3BvbnNlIGZyb20gdGhlIEFQSVxyXG4gICovXHJcbiAgZ2V0RWRpdE1vcmVPcHRpb25zKHJlcz86IGFueSkge1xyXG4gICAgbGV0IGNoZWNrZWRNb3JlT3B0aW9ucyA9IFtdXHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub2JqZWN0aXZlICE9PSAnJykge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnT0JKRUNUSVZFJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuT0JKRUNUSVZFID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdSSVNLX0NMQVNTSUZJQ0FUSU9OJyk7XHJcbiAgICB0aGlzLm1vcmVPcHRpb25zLlJJU0tfQ0xBU1NJRklDQVRJT04gPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdQUk9HUkFNJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuUFJPR1JBTSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZXZpZGVuY2VSZXF1aXJlZCB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5mb3JtYXRSZXF1aXJlZCkge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnRk9STUFURV9FVklERU5DRScpO1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zLkZPUk1BVEVfRVZJREVOQ0UgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdSQycpO1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zLlJDID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ0NIRUNLUE9JTlRTJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuQ0hFQ0tQT0lOVFMgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggPiAwIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2VyPy5saXN0Py5sZW5ndGggPiAwICApIHtcclxuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ1JFVklFV0VSJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuUkVWSUVXRVIgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8ubGVuZ3RoID4gMCB8fCB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0Py5sZW5ndGggPiAwIHx8IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lmxpc3Q/Lmxlbmd0aCA+IDAgfHwgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdD8ubGVuZ3RoID4gMCkge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnT1ZFUlNFRVInKTtcclxuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5PVkVSU0VFUiA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3N1cmFuY2VMaXN0Py5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdBU1NVUkFOQ0UnKTtcclxuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5BU1NVUkFOQ0UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXF1aXJlc0F1ZGl0TGlzdD8ubGVuZ3RoID4gMCkge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnUkVRVUlSRVNfQVVESVQnKTtcclxuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5SRVFVSVJFU19BVURJVCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlcy5xdWVzdGlvbm5haXJlX3R5cGUgPT09ICdhc3Nlc3NtZW50Jykge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnQVNTRVNTTUVOVCcpO1xyXG4gICAgICB0aGlzLm1vcmVPcHRpb25zLkFTU0VTU01FTlQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXMucXVlc3Rpb25uYWlyZV90eXBlID09PSAnYXNzZXNzbWVudF9jaGVja3BvaW50Jykge1xyXG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnQ0hFQ0tQT0lOVFNfTkVXJyk7XHJcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuQ0hFQ0tQT0lOVFNfTkVXID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBvcHVsYXRlT3B0aW9uLmVtaXQoY2hlY2tlZE1vcmVPcHRpb25zKTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRm9ybWF0ICYgRXZpZGVuY2VcclxuICB0ZXN0RnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZS50cmltKCkgIT09ICcnICYmIHRoaXMuaXNFZGl0V2hhdCA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5pc0VkaXRXaGF0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5kZXNjcmlwdGlvbiA9PSAnPGJyPicpIHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZGVzY3JpcHRpb24gPSAnJztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vYmplY3RpdmUgPT0gJzxicj4nKSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm9iamVjdGl2ZSA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV2aWV3ZXJUeXBlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5zZXF1ZW50aWFsV29ya2Zsb3cgPSBldmVudCA9PT0gJ1NFUVVFTlRJQUwnID8gdHJ1ZSA6IGZhbHNlXHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZFNhbXBsZURhdGEoZXZlbnQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZFNhbXBsZSA9IGV2ZW50O1xyXG4gICAgdGhpcy50ZW1wQ2hlY2tWYWx1ZSA9IGV2ZW50O1xyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBJdCBwb3B1bGF0ZXMgYSBsaXN0IG9mIGFzc3VyYW5jZSBjYXRlZ29yaWVzIGJhc2VkIG9uIHRoZSB0ZXN0IHBsYW4gY2F0ZWdvcnkgc2VsZWN0ZWQuXHJcbiAqIEBwYXJhbSB7YW55fSB0ZXN0UGxhbkNhdGVnb3J5IC0gYW55XHJcbiAqL1xyXG4gIHBvcHVsYXRlQXNzdXJhbmNlTGlzdCh0ZXN0UGxhbkNhdGVnb3J5OiBhbnkpIHtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc3VyYW5jZSA9IHRoaXMuc2V0TGlzdCh0aGlzLmFzc3VyYW5jZUNhdGVnb3JpZXNMaXN0LCBbdGVzdFBsYW5DYXRlZ29yeT8uY2F0ZWdvcnlfaWRdLCAnY2F0ZWdvcnlfaWQnKTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmF1ZGl0X2NhdGVnb3J5X2RldGFpbHMgPSB0ZXN0UGxhbkNhdGVnb3J5O1xyXG4gICAgaWYgKHRlc3RQbGFuQ2F0ZWdvcnkuc2FtcGxlKSB7XHJcbiAgICAgIHRoaXMuaXNTYW1wbGUgPSB0cnVlXHJcbiAgICAgIHRoaXMuc2FtcGxlVmFsdWUgPSB0ZXN0UGxhbkNhdGVnb3J5LnNhbXBsZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNhbXBsZSA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRlc3RQbGFuQ2F0ZWdvcnkucGVyY2VudGFnZSkge1xyXG4gICAgICB0aGlzLmlzU2FtcGxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zYW1wbGVQZXJjZW50YWdlID0gdGVzdFBsYW5DYXRlZ29yeS5wZXJjZW50YWdlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU2FtcGxlID0gMTtcclxuICAgIH1cclxuICAgIHRoaXMudGVtcENoZWNrVmFsdWUgPSB0aGlzLnNlbGVjdGVkU2FtcGxlO1xyXG4gICAgdGhpcy5zZW5kQXVkaXRSZW1pbmRlcnNWYWx1ZSA9IHRlc3RQbGFuQ2F0ZWdvcnkuZnJlcXVlbmN5X3BhdHRlcm4gPyBwYXJzZUludCh0ZXN0UGxhbkNhdGVnb3J5LmZyZXF1ZW5jeV9wYXR0ZXJuLnNwbGl0KCd+JylbMl0pIDogMjtcclxuICAgIHRoaXMuYXVkaXRUaW1lID0gbW9tZW50KHRlc3RQbGFuQ2F0ZWdvcnk/LmZyZXF1ZW5jeV90aW1lLCAnSEg6bW06c3MnKS5mb3JtYXQoJ0hIOm1tIGEnKTtcclxuXHJcbiAgfVxyXG5cclxuICAvL29uIHNhbXBsZSB0b2dnbGUgb24vb2ZmXHJcbiAgY2hlY2tJbnB1dFZhbHVlKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCBrZXkgPSBldmVudC5jaGFyQ29kZTsgIC8vICAgICAgICAga2V5ID0gZXZlbnQua2V5Q29kZTsgIChCb3RoIGNhbiBiZSB1c2VkKVxyXG4gICAgcmV0dXJuICgoa2V5ID4gNDcgJiYga2V5IDwgNTgpIHx8IGtleSA9PSA0NSk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIHN3aXRjaEVuYWJsZShldmVudDogYm9vbGVhbikge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTYW1wbGUgPSB0aGlzLnRlbXBDaGVja1ZhbHVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNhbXBsZSA9IC0xXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUT0RPOiAgc2VsZWN0IEFzc2Vzc21lbnQgbGlzdCBhbmQgc2V0IGlkIHRvIHBheWxvYWRcclxuICBvbkFzc2Vzc21lbnRTZWxlY3QoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5pc0Fzc2Vzc21lbnQgPSBmYWxzZTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQgPSBldmVudDtcclxuICB9XHJcbiAgLy8gVE9ETzogUG9wdWxhdGUgYXNzZXNzbWVudCBkYXRhIGZyb20gYWxyZWFkeSBzZWxlY3RlZCBkYXRhXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYXNzZXNzbWVudERldGFpbHMgOiBzZWxlY3RlZCBhc3Nlc3NtZW50IGRldGFpbHMgbGlrZSBpdCdzIG9iamVjdCBpZCBhbmQgY2F0ZWdvcnlfaWRcclxuICAgKi9cclxuICBnZXRBc3Nlc3NtZW50RGV0YWlscyhhc3Nlc3NtZW50RGV0YWlsczogYW55LCB0eXBlPzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRBc3Nlc3NtZW50RGV0YWlsc0J5SUQoYXNzZXNzbWVudERldGFpbHMuYXNzZXNzbWVudF9pZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09ICdhc3Nlc3NtZW50Jykge1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNhdGVnb3J5RGV0YWlscyA9IHJlc1swXS5jYXRlZ29yeS5maW5kKChlbGU6IGFueSkgPT4gZWxlLl9pZCA9PSBhc3Nlc3NtZW50RGV0YWlscy5jYXRlZ29yeV9pZCk7XHJcbiAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLkFTU0VTU01FTlQgPSB0cnVlO1xyXG4gICAgICAgICAgY29uc3QgYXNzZXNzbWVudERhdGEgPSB7XHJcbiAgICAgICAgICAgIGNhdGVnb3J5X2lkOiBhc3Nlc3NtZW50RGV0YWlscy5jYXRlZ29yeV9pZCxcclxuICAgICAgICAgICAgYXNzZXNzbWVudF9pZDogYXNzZXNzbWVudERldGFpbHMuYXNzZXNzbWVudF9pZCxcclxuICAgICAgICAgICAgYXNzZXNzbWVudERldGFpbHM6IHtcclxuICAgICAgICAgICAgICBpZDogYXNzZXNzbWVudERldGFpbHMuYXNzZXNzbWVudF9pZCxcclxuICAgICAgICAgICAgICBhc3Nlc3NtZW50X25hbWU6IHJlc1swXS5hc3Nlc3NtZW50X25hbWUsXHJcbiAgICAgICAgICAgICAgcXVlc3Rpb25zOiByZXNbMF0ucXVlc3Rpb25zQ291bnRcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2F0ZWdvcnlfZGV0YWlsczogY2F0ZWdvcnlEZXRhaWxzXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3Nlc3NtZW50ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhc3Nlc3NtZW50RGF0YSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLkNIRUNLUE9JTlRTX05FVyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnBvc3RBc3Nlc3NtZW50KHsgYXNzZXNzbWVudERldGFpbHM6IHJlc1swXS5xdWVzdGlvbnMgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgb25SZW1vdmVDaGVja3BvaW50cyh0eXBlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMub25SZW1vdmluZ0NoZWNrcG9pbnQuZW1pdCh0eXBlKVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ2hlY2twb2ludCgpIHtcclxuICAgIHRoaXMubW9yZU9wdGlvbnMuQ0hFQ0tQT0lOVFMgPSBmYWxzZTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzID0gW107XHJcbiAgfVxyXG5cclxuICAvKipcclxuICpcclxuICogQHBhcmFtIGV2ZW50IEFzc2Vzc21lbnQgZGV0YWlsc1xyXG4gKi9cclxuICBwb3N0QXNzZXNzbWVudChldmVudDogYW55KSB7XHJcblxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ubmV3X2NoZWNrcG9pbnRzID0gZXZlbnQuYXNzZXNzbWVudERldGFpbHM7XHJcbiAgICB0aGlzLmNoZWNrcG9pbnRDb3VudCA9IGV2ZW50LmFzc2Vzc21lbnREZXRhaWxzLmVsZW1lbnRzPy5sZW5ndGg7XHJcbiAgICB0aGlzLmNoZWNrcG9pbnRDb3VudFVwZGF0ZWQuZW1pdCh0aGlzLmNoZWNrcG9pbnRDb3VudCk7XHJcbiAgICB0aGlzLnNldElzVXBsb2FkZWQoZmFsc2UpXHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0SXNVcGxvYWRlZChldmVudDogYW55KSB7XHJcbiAgICBpZiAoIWV2ZW50KSB0aGlzLmFjdGl2ZURlc2VsZWN0b3IoKVxyXG4gICAgdGhpcy5hdXRoU2VydmljZS5wcmV2aWV3UGFuZWwubmV4dChldmVudCk7XHJcblxyXG4gIH1cclxuXHJcbiAgY2hlY2tEZWZhdWx0UHJvZ3JhbU9uUmVtb3ZlKHByb2dyYW06IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coJz09PT4xMScsdGhpcy5zZWxlY3RlZFByb2dyYW0sIHByb2dyYW0pXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5saW5rZWRQcm9ncmFtPy5maW5kSW5kZXgoIChlbDogYW55KSA9PiBlbD8uY2F0ZWdvcnlfaWQgPT09IHByb2dyYW0/LmNhdGVnb3J5X2lkKTtcclxuICAgIGlmKGluZGV4ICE9PSAtMSl7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5saW5rZWRQcm9ncmFtPy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICBjb25zdCB1cGRhdGVkQ2F0ZWdvcmllcyA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5jYXRlZ29yeT8uZmlsdGVyKChlbDogYW55KSA9PiAhKGVsID09PSBwcm9ncmFtPy5jYXRlZ29yeV9pZCB8fCBwcm9ncmFtPy5jaGlsZF9pZD8uaW5jbHVkZXMoZWwpKSk7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5ID0gdXBkYXRlZENhdGVnb3JpZXM7XHJcbiAgICB9XHJcbiAgICAvLyBpZih0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbSAmJiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uY2F0ZWdvcnlfaWQgPT09IHByb2dyYW0/LmNhdGVnb3J5X2lkKSB7XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKCc9PT0+Jyx0aGlzLnNlbGVjdGVkUHJvZ3JhbSwgcHJvZ3JhbSlcclxuICAgIC8vICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkgPSBbXTtcclxuICAgIC8vICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbSA9IFtdO1xyXG4gICAgLy8gICB0aGlzLmZpbHRlckxpc3RzQWNjb3JkaW5nVG9Qcm9ncmFtKCk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYW4gYXJyYXkgb2YgbnVtYmVycyBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB1bmlxdWUgbnVtYmVycy5cclxuICAgKiBAcGFyYW0ge2FueX0gYXJyYXkgLSBUaGUgYXJyYXkgeW91IHdhbnQgdG8gZ2V0IHRoZSB1bmlxdWUgdmFsdWVzIGZyb20uXHJcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcy5cclxuICAgKi9cclxuICBnZXRVbmlxdWVJZHMoYXJyYXk6YW55KXtcclxuICAgIGNvbnN0IHVuaXF1ZSA9IFsuLi5uZXcgU2V0KGFycmF5KV07XHJcbiAgICByZXR1cm4gdW5pcXVlO1xyXG4gIH1cclxuXHJcbiAgb3BlbkFzc2lnbmVlQ2hhbmdlQ29uZmlybWF0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy53aG9DYW5Db21wbGV0ZSA9IFwiQU5ZX09ORVwiXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMud2hvQ2FuQ29tcGxldGUgPSAnJztcclxuICAgICAgdGhpcy5hc3NpZ25lZVR5cGVDaGFuZ2UuZW1pdCh0cnVlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBJZiB0aGUgbW9kZSBpcyBFRElULCBlbWl0IHRoZSBldmVudC5cclxuICogQHBhcmFtIHthbnl9IGV2ZW50IC0gYW55IC0gdGhlIGV2ZW50IHRoYXQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBhIHJhZGlvIGJ1dHRvblxyXG4gKi9cclxuICBvblJldmlld2VyV29ya2Zsb3dDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93ID0gIGV2ZW50ID09PSAnc2VxdWVudGlhbCcgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgIGlmKHRoaXMubW9kZSA9PT0gJ0VESVQnICYmIHRoaXMuaGFzUmV2aWV3ZXIpIHtcclxuICAgICAgICB0aGlzLm9uUmV2aWV3ZXJUeXBlQ2hhbmdlLmVtaXQoZXZlbnQpO1xyXG4gICAgICB9XHJcblxyXG4gIH1cclxufVxyXG5cclxuIl19