vcomply-workflow-engine 0.2.2 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (507) hide show
  1. package/bundles/vcomply-workflow-engine.umd.js +6561 -171
  2. package/bundles/vcomply-workflow-engine.umd.js.map +1 -1
  3. package/esm2015/lib/add-multiple-responsibility/add-multiple-responsibility.component.js +18 -25
  4. package/esm2015/lib/add-multiple-responsibility/add-multiple-responsibility.component.ngfactory.js +2 -2
  5. package/esm2015/lib/add-multiple-risk/add-multiple-risk.component.js +1 -1
  6. package/esm2015/lib/log-an-issue/log-an-issue.component.js +1 -1
  7. package/esm2015/lib/sharedComponents/assessment-editor/components/add-logic/add-logic.component.js +333 -0
  8. package/esm2015/lib/sharedComponents/assessment-editor/components/add-logic/add-logic.component.ngfactory.js +160 -0
  9. package/esm2015/lib/sharedComponents/assessment-editor/components/add-logic/add-logic.component.ngsummary.json +1 -0
  10. package/esm2015/lib/sharedComponents/assessment-editor/components/add-page-details/add-page-details.component.js +73 -0
  11. package/esm2015/lib/sharedComponents/assessment-editor/components/add-page-details/add-page-details.component.ngfactory.js +39 -0
  12. package/esm2015/lib/sharedComponents/assessment-editor/components/add-page-details/add-page-details.component.ngsummary.json +1 -0
  13. package/esm2015/lib/sharedComponents/assessment-editor/components/add-response-set-popup/add-response-set-popup.component.js +27 -0
  14. package/esm2015/lib/sharedComponents/assessment-editor/components/add-response-set-popup/add-response-set-popup.component.ngfactory.js +153 -0
  15. package/esm2015/lib/sharedComponents/assessment-editor/components/add-response-set-popup/add-response-set-popup.component.ngsummary.json +1 -0
  16. package/esm2015/lib/sharedComponents/assessment-editor/components/add-segment-popup/add-segment-popup.component.js +116 -0
  17. package/esm2015/lib/sharedComponents/assessment-editor/components/add-segment-popup/add-segment-popup.component.ngfactory.js +116 -0
  18. package/esm2015/lib/sharedComponents/assessment-editor/components/add-segment-popup/add-segment-popup.component.ngsummary.json +1 -0
  19. package/esm2015/lib/sharedComponents/assessment-editor/components/assessment-settings/assessment-settings.component.js +165 -0
  20. package/esm2015/lib/sharedComponents/assessment-editor/components/assessment-settings/assessment-settings.component.ngfactory.js +85 -0
  21. package/esm2015/lib/sharedComponents/assessment-editor/components/assessment-settings/assessment-settings.component.ngsummary.json +1 -0
  22. package/esm2015/lib/sharedComponents/assessment-editor/components/build/build.module.js +71 -0
  23. package/esm2015/lib/sharedComponents/assessment-editor/components/build/build.module.ngfactory.js +17 -0
  24. package/esm2015/lib/sharedComponents/assessment-editor/components/build/build.module.ngsummary.json +1 -0
  25. package/esm2015/lib/sharedComponents/assessment-editor/components/build/checkbox/checkbox.component.js +35 -0
  26. package/esm2015/lib/sharedComponents/assessment-editor/components/build/checkbox/checkbox.component.ngfactory.js +89 -0
  27. package/esm2015/lib/sharedComponents/assessment-editor/components/build/checkbox/checkbox.component.ngsummary.json +1 -0
  28. package/esm2015/lib/sharedComponents/assessment-editor/components/build/choice-settings-panel/choice-settings-panel.component.js +66 -0
  29. package/esm2015/lib/sharedComponents/assessment-editor/components/build/choice-settings-panel/choice-settings-panel.component.ngfactory.js +72 -0
  30. package/esm2015/lib/sharedComponents/assessment-editor/components/build/choice-settings-panel/choice-settings-panel.component.ngsummary.json +1 -0
  31. package/esm2015/lib/sharedComponents/assessment-editor/components/build/date-time/date-time.component.js +18 -0
  32. package/esm2015/lib/sharedComponents/assessment-editor/components/build/date-time/date-time.component.ngfactory.js +51 -0
  33. package/esm2015/lib/sharedComponents/assessment-editor/components/build/date-time/date-time.component.ngsummary.json +1 -0
  34. package/esm2015/lib/sharedComponents/assessment-editor/components/build/dropdown/dropdown.component.js +35 -0
  35. package/esm2015/lib/sharedComponents/assessment-editor/components/build/dropdown/dropdown.component.ngfactory.js +104 -0
  36. package/esm2015/lib/sharedComponents/assessment-editor/components/build/dropdown/dropdown.component.ngsummary.json +1 -0
  37. package/esm2015/lib/sharedComponents/assessment-editor/components/build/image-choice/image-choice.component.js +15 -0
  38. package/esm2015/lib/sharedComponents/assessment-editor/components/build/image-choice/image-choice.component.ngfactory.js +20 -0
  39. package/esm2015/lib/sharedComponents/assessment-editor/components/build/image-choice/image-choice.component.ngsummary.json +1 -0
  40. package/esm2015/lib/sharedComponents/assessment-editor/components/build/matrix-dropdown/matrix-dropdown.component.js +15 -0
  41. package/esm2015/lib/sharedComponents/assessment-editor/components/build/matrix-dropdown/matrix-dropdown.component.ngfactory.js +17 -0
  42. package/esm2015/lib/sharedComponents/assessment-editor/components/build/matrix-dropdown/matrix-dropdown.component.ngsummary.json +1 -0
  43. package/esm2015/lib/sharedComponents/assessment-editor/components/build/matrix-rating-scale/matrix-rating-scale.component.js +15 -0
  44. package/esm2015/lib/sharedComponents/assessment-editor/components/build/matrix-rating-scale/matrix-rating-scale.component.ngfactory.js +17 -0
  45. package/esm2015/lib/sharedComponents/assessment-editor/components/build/matrix-rating-scale/matrix-rating-scale.component.ngsummary.json +1 -0
  46. package/esm2015/lib/sharedComponents/assessment-editor/components/build/multiple-choice/multiple-choice.component.js +35 -0
  47. package/esm2015/lib/sharedComponents/assessment-editor/components/build/multiple-choice/multiple-choice.component.ngfactory.js +104 -0
  48. package/esm2015/lib/sharedComponents/assessment-editor/components/build/multiple-choice/multiple-choice.component.ngsummary.json +1 -0
  49. package/esm2015/lib/sharedComponents/assessment-editor/components/build/multiple-textbox/multiple-textbox.component.js +15 -0
  50. package/esm2015/lib/sharedComponents/assessment-editor/components/build/multiple-textbox/multiple-textbox.component.ngfactory.js +17 -0
  51. package/esm2015/lib/sharedComponents/assessment-editor/components/build/multiple-textbox/multiple-textbox.component.ngsummary.json +1 -0
  52. package/esm2015/lib/sharedComponents/assessment-editor/components/build/ranking/ranking.component.js +15 -0
  53. package/esm2015/lib/sharedComponents/assessment-editor/components/build/ranking/ranking.component.ngfactory.js +17 -0
  54. package/esm2015/lib/sharedComponents/assessment-editor/components/build/ranking/ranking.component.ngsummary.json +1 -0
  55. package/esm2015/lib/sharedComponents/assessment-editor/components/build/slider/slider.component.js +15 -0
  56. package/esm2015/lib/sharedComponents/assessment-editor/components/build/slider/slider.component.ngfactory.js +17 -0
  57. package/esm2015/lib/sharedComponents/assessment-editor/components/build/slider/slider.component.ngsummary.json +1 -0
  58. package/esm2015/lib/sharedComponents/assessment-editor/components/build/star-rating/star-rating.component.js +26 -0
  59. package/esm2015/lib/sharedComponents/assessment-editor/components/build/star-rating/star-rating.component.ngfactory.js +60 -0
  60. package/esm2015/lib/sharedComponents/assessment-editor/components/build/star-rating/star-rating.component.ngsummary.json +1 -0
  61. package/esm2015/lib/sharedComponents/assessment-editor/components/build/thank-you/thank-you.component.js +15 -0
  62. package/esm2015/lib/sharedComponents/assessment-editor/components/build/thank-you/thank-you.component.ngfactory.js +17 -0
  63. package/esm2015/lib/sharedComponents/assessment-editor/components/build/thank-you/thank-you.component.ngsummary.json +1 -0
  64. package/esm2015/lib/sharedComponents/assessment-editor/components/build/weightage-selector/weightage-selector.component.js +55 -0
  65. package/esm2015/lib/sharedComponents/assessment-editor/components/build/weightage-selector/weightage-selector.component.ngfactory.js +51 -0
  66. package/esm2015/lib/sharedComponents/assessment-editor/components/build/weightage-selector/weightage-selector.component.ngsummary.json +1 -0
  67. package/esm2015/lib/sharedComponents/assessment-editor/components/build/welcome/welcome.component.js +15 -0
  68. package/esm2015/lib/sharedComponents/assessment-editor/components/build/welcome/welcome.component.ngfactory.js +17 -0
  69. package/esm2015/lib/sharedComponents/assessment-editor/components/build/welcome/welcome.component.ngsummary.json +1 -0
  70. package/esm2015/lib/sharedComponents/assessment-editor/components/editor-wrapper/editor-wrapper.component.js +152 -0
  71. package/esm2015/lib/sharedComponents/assessment-editor/components/editor-wrapper/editor-wrapper.component.ngfactory.js +205 -0
  72. package/esm2015/lib/sharedComponents/assessment-editor/components/editor-wrapper/editor-wrapper.component.ngsummary.json +1 -0
  73. package/esm2015/lib/sharedComponents/assessment-editor/components/errorInterface/error.js +2 -0
  74. package/esm2015/lib/sharedComponents/assessment-editor/components/errorInterface/error.ngsummary.json +1 -0
  75. package/esm2015/lib/sharedComponents/assessment-editor/components/errorInterface/question.js +2 -0
  76. package/esm2015/lib/sharedComponents/assessment-editor/components/errorInterface/question.ngsummary.json +1 -0
  77. package/esm2015/lib/sharedComponents/assessment-editor/components/errorInterface/validateStructure.js +2 -0
  78. package/esm2015/lib/sharedComponents/assessment-editor/components/errorInterface/validateStructure.ngsummary.json +1 -0
  79. package/esm2015/lib/sharedComponents/assessment-editor/components/logic/logic.component.js +100 -0
  80. package/esm2015/lib/sharedComponents/assessment-editor/components/logic/logic.component.ngfactory.js +119 -0
  81. package/esm2015/lib/sharedComponents/assessment-editor/components/logic/logic.component.ngsummary.json +1 -0
  82. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-checkbox/logic-checkbox.component.js +24 -0
  83. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-checkbox/logic-checkbox.component.ngfactory.js +59 -0
  84. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-checkbox/logic-checkbox.component.ngsummary.json +1 -0
  85. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-comment-box/logic-comment-box.component.js +15 -0
  86. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-comment-box/logic-comment-box.component.ngfactory.js +17 -0
  87. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-comment-box/logic-comment-box.component.ngsummary.json +1 -0
  88. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-date-time/logic-date-time.component.js +37 -0
  89. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-date-time/logic-date-time.component.ngfactory.js +105 -0
  90. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-date-time/logic-date-time.component.ngsummary.json +1 -0
  91. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-dropdown/logic-dropdown.component.js +31 -0
  92. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-dropdown/logic-dropdown.component.ngfactory.js +22 -0
  93. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-dropdown/logic-dropdown.component.ngsummary.json +1 -0
  94. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-image-choice/logic-image-choice.component.js +15 -0
  95. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-image-choice/logic-image-choice.component.ngfactory.js +37 -0
  96. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-image-choice/logic-image-choice.component.ngsummary.json +1 -0
  97. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-multiple-choice/logic-multiple-choice.component.js +24 -0
  98. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-multiple-choice/logic-multiple-choice.component.ngfactory.js +59 -0
  99. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-multiple-choice/logic-multiple-choice.component.ngsummary.json +1 -0
  100. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-multiple-textbox/logic-multiple-textbox.component.js +15 -0
  101. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-multiple-textbox/logic-multiple-textbox.component.ngfactory.js +35 -0
  102. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-multiple-textbox/logic-multiple-textbox.component.ngsummary.json +1 -0
  103. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-questions.module.js +64 -0
  104. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-questions.module.ngfactory.js +21 -0
  105. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-questions.module.ngsummary.json +1 -0
  106. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-ranking/logic-ranking.component.js +15 -0
  107. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-ranking/logic-ranking.component.ngfactory.js +36 -0
  108. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-ranking/logic-ranking.component.ngsummary.json +1 -0
  109. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-single-textbox/logic-single-textbox.component.js +24 -0
  110. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-single-textbox/logic-single-textbox.component.ngfactory.js +36 -0
  111. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-single-textbox/logic-single-textbox.component.ngsummary.json +1 -0
  112. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-slider/logic-slider.component.js +15 -0
  113. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-slider/logic-slider.component.ngfactory.js +17 -0
  114. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-slider/logic-slider.component.ngsummary.json +1 -0
  115. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-star-rating/logic-star-rating.component.js +15 -0
  116. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-star-rating/logic-star-rating.component.ngfactory.js +40 -0
  117. package/esm2015/lib/sharedComponents/assessment-editor/components/logic-questions/logic-star-rating/logic-star-rating.component.ngsummary.json +1 -0
  118. package/esm2015/lib/sharedComponents/assessment-editor/components/move/move.component.js +95 -0
  119. package/esm2015/lib/sharedComponents/assessment-editor/components/move/move.component.ngfactory.js +102 -0
  120. package/esm2015/lib/sharedComponents/assessment-editor/components/move/move.component.ngsummary.json +1 -0
  121. package/esm2015/lib/sharedComponents/assessment-editor/components/page-header/page-header.component.js +22 -0
  122. package/esm2015/lib/sharedComponents/assessment-editor/components/page-header/page-header.component.ngfactory.js +23 -0
  123. package/esm2015/lib/sharedComponents/assessment-editor/components/page-header/page-header.component.ngsummary.json +1 -0
  124. package/esm2015/lib/sharedComponents/assessment-editor/components/pipes/current-page-question.pipe.js +18 -0
  125. package/esm2015/lib/sharedComponents/assessment-editor/components/pipes/current-page-question.pipe.ngsummary.json +1 -0
  126. package/esm2015/lib/sharedComponents/assessment-editor/components/pipes/error-message.pipe.js +23 -0
  127. package/esm2015/lib/sharedComponents/assessment-editor/components/pipes/error-message.pipe.ngsummary.json +1 -0
  128. package/esm2015/lib/sharedComponents/assessment-editor/components/pipes/formatter.pipe.js +17 -0
  129. package/esm2015/lib/sharedComponents/assessment-editor/components/pipes/formatter.pipe.ngsummary.json +1 -0
  130. package/esm2015/lib/sharedComponents/assessment-editor/components/pipes/question-filter.pipe.js +13 -0
  131. package/esm2015/lib/sharedComponents/assessment-editor/components/pipes/question-filter.pipe.ngsummary.json +1 -0
  132. package/esm2015/lib/sharedComponents/assessment-editor/components/pipes/question-page-filter.pipe.js +12 -0
  133. package/esm2015/lib/sharedComponents/assessment-editor/components/pipes/question-page-filter.pipe.ngsummary.json +1 -0
  134. package/esm2015/lib/sharedComponents/assessment-editor/components/pipes/question-parser.pipe.js +17 -0
  135. package/esm2015/lib/sharedComponents/assessment-editor/components/pipes/question-parser.pipe.ngsummary.json +1 -0
  136. package/esm2015/lib/sharedComponents/assessment-editor/components/pipes/type-of.pipe.js +12 -0
  137. package/esm2015/lib/sharedComponents/assessment-editor/components/pipes/type-of.pipe.ngsummary.json +1 -0
  138. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-checkbox/preview-checkbox.component.js +28 -0
  139. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-checkbox/preview-checkbox.component.ngfactory.js +22 -0
  140. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-checkbox/preview-checkbox.component.ngsummary.json +1 -0
  141. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-comment-box/preview-comment-box.component.js +15 -0
  142. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-comment-box/preview-comment-box.component.ngfactory.js +17 -0
  143. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-comment-box/preview-comment-box.component.ngsummary.json +1 -0
  144. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-date-time/preview-date-time.component.js +31 -0
  145. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-date-time/preview-date-time.component.ngfactory.js +81 -0
  146. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-date-time/preview-date-time.component.ngsummary.json +1 -0
  147. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-dropdown/preview-dropdown.component.js +31 -0
  148. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-dropdown/preview-dropdown.component.ngfactory.js +19 -0
  149. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-dropdown/preview-dropdown.component.ngsummary.json +1 -0
  150. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-file-upload/preview-file-upload.component.js +23 -0
  151. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-file-upload/preview-file-upload.component.ngfactory.js +20 -0
  152. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-file-upload/preview-file-upload.component.ngsummary.json +1 -0
  153. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-image-choice/preview-image-choice.component.js +15 -0
  154. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-image-choice/preview-image-choice.component.ngfactory.js +37 -0
  155. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-image-choice/preview-image-choice.component.ngsummary.json +1 -0
  156. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-matrix-dropdown/preview-matrix-dropdown.component.js +24 -0
  157. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-matrix-dropdown/preview-matrix-dropdown.component.ngfactory.js +60 -0
  158. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-matrix-dropdown/preview-matrix-dropdown.component.ngsummary.json +1 -0
  159. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-matrix-rating-scale/preview-matrix-rating-scale.component.js +24 -0
  160. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-matrix-rating-scale/preview-matrix-rating-scale.component.ngfactory.js +60 -0
  161. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-matrix-rating-scale/preview-matrix-rating-scale.component.ngsummary.json +1 -0
  162. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-multiple-choice/preview-multiple-choice.component.js +28 -0
  163. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-multiple-choice/preview-multiple-choice.component.ngfactory.js +22 -0
  164. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-multiple-choice/preview-multiple-choice.component.ngsummary.json +1 -0
  165. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-multiple-textbox/preview-multiple-textbox.component.js +15 -0
  166. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-multiple-textbox/preview-multiple-textbox.component.ngfactory.js +35 -0
  167. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-multiple-textbox/preview-multiple-textbox.component.ngsummary.json +1 -0
  168. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-ranking/preview-ranking.component.js +15 -0
  169. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-ranking/preview-ranking.component.ngfactory.js +36 -0
  170. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-ranking/preview-ranking.component.ngsummary.json +1 -0
  171. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-single-textbox/preview-single-textbox.component.js +18 -0
  172. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-single-textbox/preview-single-textbox.component.ngfactory.js +17 -0
  173. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-single-textbox/preview-single-textbox.component.ngsummary.json +1 -0
  174. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-slider/preview-slider.component.js +15 -0
  175. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-slider/preview-slider.component.ngfactory.js +17 -0
  176. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-slider/preview-slider.component.ngsummary.json +1 -0
  177. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-star-rating/preview-star-rating.component.js +15 -0
  178. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-star-rating/preview-star-rating.component.ngfactory.js +40 -0
  179. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-star-rating/preview-star-rating.component.ngsummary.json +1 -0
  180. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-wrapper/preview-wrapper.component.js +67 -0
  181. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-wrapper/preview-wrapper.component.ngfactory.js +90 -0
  182. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview-wrapper/preview-wrapper.component.ngsummary.json +1 -0
  183. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview.module.js +90 -0
  184. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview.module.ngfactory.js +29 -0
  185. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/preview.module.ngsummary.json +1 -0
  186. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/thank-you/thank-you.component.js +15 -0
  187. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/thank-you/thank-you.component.ngfactory.js +17 -0
  188. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/thank-you/thank-you.component.ngsummary.json +1 -0
  189. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/welcome/welcome.component.js +15 -0
  190. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/welcome/welcome.component.ngfactory.js +17 -0
  191. package/esm2015/lib/sharedComponents/assessment-editor/components/preview/welcome/welcome.component.ngsummary.json +1 -0
  192. package/esm2015/lib/sharedComponents/assessment-editor/components/question-type/question-type.component.js +20 -0
  193. package/esm2015/lib/sharedComponents/assessment-editor/components/question-type/question-type.component.ngfactory.js +76 -0
  194. package/esm2015/lib/sharedComponents/assessment-editor/components/question-type/question-type.component.ngsummary.json +1 -0
  195. package/esm2015/lib/sharedComponents/assessment-editor/components/quick-settings/quick-settings.component.js +248 -0
  196. package/esm2015/lib/sharedComponents/assessment-editor/components/quick-settings/quick-settings.component.ngfactory.js +109 -0
  197. package/esm2015/lib/sharedComponents/assessment-editor/components/quick-settings/quick-settings.component.ngsummary.json +1 -0
  198. package/esm2015/lib/sharedComponents/assessment-editor/components/response-selector/response-selector.component.js +35 -0
  199. package/esm2015/lib/sharedComponents/assessment-editor/components/response-selector/response-selector.component.ngfactory.js +95 -0
  200. package/esm2015/lib/sharedComponents/assessment-editor/components/response-selector/response-selector.component.ngsummary.json +1 -0
  201. package/esm2015/lib/sharedComponents/assessment-editor/components/setting-anonymous/setting-anonymous.component.js +56 -0
  202. package/esm2015/lib/sharedComponents/assessment-editor/components/setting-anonymous/setting-anonymous.component.ngfactory.js +108 -0
  203. package/esm2015/lib/sharedComponents/assessment-editor/components/setting-anonymous/setting-anonymous.component.ngsummary.json +1 -0
  204. package/esm2015/lib/sharedComponents/assessment-editor/components/setting-response-segment/setting-response-segment.component.js +153 -0
  205. package/esm2015/lib/sharedComponents/assessment-editor/components/setting-response-segment/setting-response-segment.component.ngfactory.js +130 -0
  206. package/esm2015/lib/sharedComponents/assessment-editor/components/setting-response-segment/setting-response-segment.component.ngsummary.json +1 -0
  207. package/esm2015/lib/sharedComponents/assessment-editor/components/single-line-editor/single-line-editor.component.js +123 -0
  208. package/esm2015/lib/sharedComponents/assessment-editor/components/single-line-editor/single-line-editor.component.ngfactory.js +47 -0
  209. package/esm2015/lib/sharedComponents/assessment-editor/components/single-line-editor/single-line-editor.component.ngsummary.json +1 -0
  210. package/esm2015/lib/sharedComponents/assessment-editor/components/toolkit/toolkit.component.js +24 -0
  211. package/esm2015/lib/sharedComponents/assessment-editor/components/toolkit/toolkit.component.ngfactory.js +97 -0
  212. package/esm2015/lib/sharedComponents/assessment-editor/components/toolkit/toolkit.component.ngsummary.json +1 -0
  213. package/esm2015/lib/sharedComponents/assessment-editor/components/welcome-thankyou/welcome-thankyou.component.js +50 -0
  214. package/esm2015/lib/sharedComponents/assessment-editor/components/welcome-thankyou/welcome-thankyou.component.ngfactory.js +47 -0
  215. package/esm2015/lib/sharedComponents/assessment-editor/components/welcome-thankyou/welcome-thankyou.component.ngsummary.json +1 -0
  216. package/esm2015/lib/sharedComponents/assessment-editor/create-assessment-container/create-assessment-container.component.js +424 -0
  217. package/esm2015/lib/sharedComponents/assessment-editor/create-assessment-container/create-assessment-container.component.ngfactory.js +222 -0
  218. package/esm2015/lib/sharedComponents/assessment-editor/create-assessment-container/create-assessment-container.component.ngsummary.json +1 -0
  219. package/esm2015/lib/sharedComponents/assessment-editor/create-assessment.module.js +86 -0
  220. package/esm2015/lib/sharedComponents/assessment-editor/create-assessment.module.ngfactory.js +37 -0
  221. package/esm2015/lib/sharedComponents/assessment-editor/create-assessment.module.ngsummary.json +1 -0
  222. package/esm2015/lib/sharedComponents/assessment-editor/services/editor.service.js +636 -0
  223. package/esm2015/lib/sharedComponents/assessment-editor/services/editor.service.ngsummary.json +1 -0
  224. package/esm2015/lib/sharedComponents/assessment-editor/services/result-criteria.service.js +48 -0
  225. package/esm2015/lib/sharedComponents/assessment-editor/services/result-criteria.service.ngsummary.json +1 -0
  226. package/esm2015/lib/sharedComponents/assessment-editor/services/validator.service.js +543 -0
  227. package/esm2015/lib/sharedComponents/assessment-editor/services/validator.service.ngsummary.json +1 -0
  228. package/esm2015/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.js +2 -2
  229. package/esm2015/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.ngfactory.js +29 -363
  230. package/esm2015/lib/sharedComponents/format-and-evidence/format-and-evidence.component.js +1 -1
  231. package/esm2015/lib/sharedComponents/risk-classification/risk-classification.component.js +1 -1
  232. package/esm2015/lib/ui-kit/action-dialog/action-dialog.module.js +16 -0
  233. package/esm2015/lib/ui-kit/action-dialog/action-dialog.module.ngfactory.js +12 -0
  234. package/esm2015/lib/ui-kit/action-dialog/action-dialog.module.ngsummary.json +1 -0
  235. package/esm2015/lib/ui-kit/action-dialog/active/active.component.js +36 -0
  236. package/esm2015/lib/ui-kit/action-dialog/active/active.component.ngfactory.js +25 -0
  237. package/esm2015/lib/ui-kit/action-dialog/active/active.component.ngsummary.json +1 -0
  238. package/esm2015/lib/ui-kit/action-dialog/deactivate/deactivate.component.js +38 -0
  239. package/esm2015/lib/ui-kit/action-dialog/deactivate/deactivate.component.ngfactory.js +25 -0
  240. package/esm2015/lib/ui-kit/action-dialog/deactivate/deactivate.component.ngsummary.json +1 -0
  241. package/esm2015/lib/ui-kit/action-dialog/delete/delete.component.js +30 -0
  242. package/esm2015/lib/ui-kit/action-dialog/delete/delete.component.ngfactory.js +25 -0
  243. package/esm2015/lib/ui-kit/action-dialog/delete/delete.component.ngsummary.json +1 -0
  244. package/esm2015/lib/ui-kit/action-dialog/duplicate/duplicate.component.js +32 -0
  245. package/esm2015/lib/ui-kit/action-dialog/duplicate/duplicate.component.ngfactory.js +25 -0
  246. package/esm2015/lib/ui-kit/action-dialog/duplicate/duplicate.component.ngsummary.json +1 -0
  247. package/esm2015/lib/ui-kit/dialog/dialog-config.js +3 -0
  248. package/esm2015/lib/ui-kit/dialog/dialog-config.ngsummary.json +1 -0
  249. package/esm2015/lib/ui-kit/dialog/dialog-injector.js +15 -0
  250. package/esm2015/lib/ui-kit/dialog/dialog-injector.ngsummary.json +1 -0
  251. package/esm2015/lib/ui-kit/dialog/dialog-ref.js +11 -0
  252. package/esm2015/lib/ui-kit/dialog/dialog-ref.ngsummary.json +1 -0
  253. package/esm2015/lib/ui-kit/dialog/dialog.component.js +90 -0
  254. package/esm2015/lib/ui-kit/dialog/dialog.component.ngfactory.js +29 -0
  255. package/esm2015/lib/ui-kit/dialog/dialog.component.ngsummary.json +1 -0
  256. package/esm2015/lib/ui-kit/dialog/dialog.module.js +16 -0
  257. package/esm2015/lib/ui-kit/dialog/dialog.module.ngfactory.js +14 -0
  258. package/esm2015/lib/ui-kit/dialog/dialog.module.ngsummary.json +1 -0
  259. package/esm2015/lib/ui-kit/dialog/dialog.service.js +60 -0
  260. package/esm2015/lib/ui-kit/dialog/dialog.service.ngsummary.json +1 -0
  261. package/esm2015/lib/ui-kit/dialog/insertion.directive.js +15 -0
  262. package/esm2015/lib/ui-kit/dialog/insertion.directive.ngsummary.json +1 -0
  263. package/esm2015/lib/ui-kit/editor-loader/editor-loader/editor-loader.component.js +15 -0
  264. package/esm2015/lib/ui-kit/editor-loader/editor-loader/editor-loader.component.ngfactory.js +23 -0
  265. package/esm2015/lib/ui-kit/editor-loader/editor-loader/editor-loader.component.ngsummary.json +1 -0
  266. package/esm2015/lib/ui-kit/editor-loader/editor-loader.module.js +17 -0
  267. package/esm2015/lib/ui-kit/editor-loader/editor-loader.module.ngfactory.js +12 -0
  268. package/esm2015/lib/ui-kit/editor-loader/editor-loader.module.ngsummary.json +1 -0
  269. package/esm2015/lib/ui-kit/formgroup/click-outside.directive.js +26 -0
  270. package/esm2015/lib/ui-kit/formgroup/click-outside.directive.ngsummary.json +1 -0
  271. package/esm2015/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.js +26 -0
  272. package/esm2015/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.ngfactory.js +30 -0
  273. package/esm2015/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.ngsummary.json +1 -0
  274. package/esm2015/lib/ui-kit/formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component.js +30 -0
  275. package/esm2015/lib/ui-kit/formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component.ngfactory.js +30 -0
  276. package/esm2015/lib/ui-kit/formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component.ngsummary.json +1 -0
  277. package/esm2015/lib/ui-kit/formgroup/cs-radio/cs-radio.component.js +27 -0
  278. package/esm2015/lib/ui-kit/formgroup/cs-radio/cs-radio.component.ngfactory.js +20 -0
  279. package/esm2015/lib/ui-kit/formgroup/cs-radio/cs-radio.component.ngsummary.json +1 -0
  280. package/esm2015/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.js +14 -0
  281. package/esm2015/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.ngfactory.js +19 -0
  282. package/esm2015/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.ngsummary.json +1 -0
  283. package/esm2015/lib/ui-kit/formgroup/cs-select/cs-select.component.js +80 -0
  284. package/esm2015/lib/ui-kit/formgroup/cs-select/cs-select.component.ngfactory.js +89 -0
  285. package/esm2015/lib/ui-kit/formgroup/cs-select/cs-select.component.ngsummary.json +1 -0
  286. package/esm2015/lib/ui-kit/formgroup/cs-switch/cs-switch.component.js +29 -0
  287. package/esm2015/lib/ui-kit/formgroup/cs-switch/cs-switch.component.ngfactory.js +62 -0
  288. package/esm2015/lib/ui-kit/formgroup/cs-switch/cs-switch.component.ngsummary.json +1 -0
  289. package/esm2015/lib/ui-kit/formgroup/formgroup.module.js +41 -0
  290. package/esm2015/lib/ui-kit/formgroup/formgroup.module.ngfactory.js +14 -0
  291. package/esm2015/lib/ui-kit/formgroup/formgroup.module.ngsummary.json +1 -0
  292. package/esm2015/lib/ui-kit/formgroup/pipes/pascal.pipe.js +15 -0
  293. package/esm2015/lib/ui-kit/formgroup/pipes/pascal.pipe.ngsummary.json +1 -0
  294. package/esm2015/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.js +20 -0
  295. package/esm2015/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.ngsummary.json +1 -0
  296. package/esm2015/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.js +557 -0
  297. package/esm2015/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.ngfactory.js +82 -0
  298. package/esm2015/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.ngsummary.json +1 -0
  299. package/esm2015/lib/workflow-assessment/workflow-assessment.component.js +3 -3
  300. package/esm2015/lib/workflow-assessment/workflow-assessment.component.ngfactory.js +1 -1
  301. package/esm2015/lib/workflow-compliance/workflow-compliance.component.js +4 -1521
  302. package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.js +20 -8
  303. package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngfactory.js +62 -34
  304. package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngsummary.json +1 -1
  305. package/esm2015/lib/workflow-engine.module.js +8 -1
  306. package/esm2015/lib/workflow-engine.module.ngfactory.js +36 -24
  307. package/esm2015/lib/workflow-engine.module.ngsummary.json +1 -1
  308. package/esm2015/lib/workflow-policy/workflow-policy.component.js +1 -1
  309. package/esm2015/lib/workflow-risk/workflow-risk.component.js +3 -2
  310. package/esm2015/lib/workflow-services/add-risk.service.js +2 -1
  311. package/esm2015/lib/workflow-services/assessment.service.js +47 -1
  312. package/esm2015/lib/workflow-services/assessment.service.ngsummary.json +1 -1
  313. package/esm2015/lib/workflow-survey-form/workflow-survey-form.component.js +1 -1
  314. package/esm2015/vcomply-workflow-engine.js +160 -61
  315. package/esm2015/vcomply-workflow-engine.ngsummary.json +1 -1
  316. package/fesm2015/vcomply-workflow-engine.js +6007 -112
  317. package/fesm2015/vcomply-workflow-engine.js.map +1 -1
  318. package/lib/sharedComponents/assessment-editor/components/add-logic/add-logic.component.d.ts +117 -0
  319. package/lib/sharedComponents/assessment-editor/components/add-logic/add-logic.component.ngfactory.d.ts +1 -0
  320. package/lib/sharedComponents/assessment-editor/components/add-page-details/add-page-details.component.d.ts +18 -0
  321. package/lib/sharedComponents/assessment-editor/components/add-page-details/add-page-details.component.ngfactory.d.ts +1 -0
  322. package/lib/sharedComponents/assessment-editor/components/add-response-set-popup/add-response-set-popup.component.d.ts +10 -0
  323. package/lib/sharedComponents/assessment-editor/components/add-response-set-popup/add-response-set-popup.component.ngfactory.d.ts +1 -0
  324. package/lib/sharedComponents/assessment-editor/components/add-segment-popup/add-segment-popup.component.d.ts +22 -0
  325. package/lib/sharedComponents/assessment-editor/components/add-segment-popup/add-segment-popup.component.ngfactory.d.ts +1 -0
  326. package/lib/sharedComponents/assessment-editor/components/assessment-settings/assessment-settings.component.d.ts +47 -0
  327. package/lib/sharedComponents/assessment-editor/components/assessment-settings/assessment-settings.component.ngfactory.d.ts +1 -0
  328. package/lib/sharedComponents/assessment-editor/components/build/build.module.d.ts +2 -0
  329. package/lib/sharedComponents/assessment-editor/components/build/build.module.ngfactory.d.ts +3 -0
  330. package/lib/sharedComponents/assessment-editor/components/build/checkbox/checkbox.component.d.ts +11 -0
  331. package/lib/sharedComponents/assessment-editor/components/build/checkbox/checkbox.component.ngfactory.d.ts +1 -0
  332. package/lib/sharedComponents/assessment-editor/components/build/choice-settings-panel/choice-settings-panel.component.d.ts +16 -0
  333. package/lib/sharedComponents/assessment-editor/components/build/choice-settings-panel/choice-settings-panel.component.ngfactory.d.ts +1 -0
  334. package/lib/sharedComponents/assessment-editor/components/build/date-time/date-time.component.d.ts +6 -0
  335. package/lib/sharedComponents/assessment-editor/components/build/date-time/date-time.component.ngfactory.d.ts +1 -0
  336. package/lib/sharedComponents/assessment-editor/components/build/dropdown/dropdown.component.d.ts +11 -0
  337. package/lib/sharedComponents/assessment-editor/components/build/dropdown/dropdown.component.ngfactory.d.ts +1 -0
  338. package/lib/sharedComponents/assessment-editor/components/build/image-choice/image-choice.component.d.ts +5 -0
  339. package/lib/sharedComponents/assessment-editor/components/build/image-choice/image-choice.component.ngfactory.d.ts +1 -0
  340. package/lib/sharedComponents/assessment-editor/components/build/matrix-dropdown/matrix-dropdown.component.d.ts +5 -0
  341. package/lib/sharedComponents/assessment-editor/components/build/matrix-dropdown/matrix-dropdown.component.ngfactory.d.ts +1 -0
  342. package/lib/sharedComponents/assessment-editor/components/build/matrix-rating-scale/matrix-rating-scale.component.d.ts +5 -0
  343. package/lib/sharedComponents/assessment-editor/components/build/matrix-rating-scale/matrix-rating-scale.component.ngfactory.d.ts +1 -0
  344. package/lib/sharedComponents/assessment-editor/components/build/multiple-choice/multiple-choice.component.d.ts +11 -0
  345. package/lib/sharedComponents/assessment-editor/components/build/multiple-choice/multiple-choice.component.ngfactory.d.ts +1 -0
  346. package/lib/sharedComponents/assessment-editor/components/build/multiple-textbox/multiple-textbox.component.d.ts +5 -0
  347. package/lib/sharedComponents/assessment-editor/components/build/multiple-textbox/multiple-textbox.component.ngfactory.d.ts +1 -0
  348. package/lib/sharedComponents/assessment-editor/components/build/ranking/ranking.component.d.ts +5 -0
  349. package/lib/sharedComponents/assessment-editor/components/build/ranking/ranking.component.ngfactory.d.ts +1 -0
  350. package/lib/sharedComponents/assessment-editor/components/build/slider/slider.component.d.ts +5 -0
  351. package/lib/sharedComponents/assessment-editor/components/build/slider/slider.component.ngfactory.d.ts +1 -0
  352. package/lib/sharedComponents/assessment-editor/components/build/star-rating/star-rating.component.d.ts +9 -0
  353. package/lib/sharedComponents/assessment-editor/components/build/star-rating/star-rating.component.ngfactory.d.ts +1 -0
  354. package/lib/sharedComponents/assessment-editor/components/build/thank-you/thank-you.component.d.ts +5 -0
  355. package/lib/sharedComponents/assessment-editor/components/build/thank-you/thank-you.component.ngfactory.d.ts +1 -0
  356. package/lib/sharedComponents/assessment-editor/components/build/weightage-selector/weightage-selector.component.d.ts +12 -0
  357. package/lib/sharedComponents/assessment-editor/components/build/weightage-selector/weightage-selector.component.ngfactory.d.ts +1 -0
  358. package/lib/sharedComponents/assessment-editor/components/build/welcome/welcome.component.d.ts +5 -0
  359. package/lib/sharedComponents/assessment-editor/components/build/welcome/welcome.component.ngfactory.d.ts +1 -0
  360. package/lib/sharedComponents/assessment-editor/components/editor-wrapper/editor-wrapper.component.d.ts +56 -0
  361. package/lib/sharedComponents/assessment-editor/components/editor-wrapper/editor-wrapper.component.ngfactory.d.ts +1 -0
  362. package/lib/sharedComponents/assessment-editor/components/errorInterface/error.d.ts +14 -0
  363. package/lib/sharedComponents/assessment-editor/components/errorInterface/question.d.ts +5 -0
  364. package/lib/sharedComponents/assessment-editor/components/errorInterface/validateStructure.d.ts +6 -0
  365. package/lib/sharedComponents/assessment-editor/components/logic/logic.component.d.ts +24 -0
  366. package/lib/sharedComponents/assessment-editor/components/logic/logic.component.ngfactory.d.ts +1 -0
  367. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-checkbox/logic-checkbox.component.d.ts +8 -0
  368. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-checkbox/logic-checkbox.component.ngfactory.d.ts +1 -0
  369. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-comment-box/logic-comment-box.component.d.ts +5 -0
  370. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-comment-box/logic-comment-box.component.ngfactory.d.ts +1 -0
  371. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-date-time/logic-date-time.component.d.ts +14 -0
  372. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-date-time/logic-date-time.component.ngfactory.d.ts +1 -0
  373. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-dropdown/logic-dropdown.component.d.ts +9 -0
  374. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-dropdown/logic-dropdown.component.ngfactory.d.ts +1 -0
  375. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-image-choice/logic-image-choice.component.d.ts +5 -0
  376. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-image-choice/logic-image-choice.component.ngfactory.d.ts +1 -0
  377. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-multiple-choice/logic-multiple-choice.component.d.ts +8 -0
  378. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-multiple-choice/logic-multiple-choice.component.ngfactory.d.ts +1 -0
  379. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-multiple-textbox/logic-multiple-textbox.component.d.ts +5 -0
  380. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-multiple-textbox/logic-multiple-textbox.component.ngfactory.d.ts +1 -0
  381. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-questions.module.d.ts +2 -0
  382. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-questions.module.ngfactory.d.ts +3 -0
  383. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-ranking/logic-ranking.component.d.ts +5 -0
  384. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-ranking/logic-ranking.component.ngfactory.d.ts +1 -0
  385. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-single-textbox/logic-single-textbox.component.d.ts +9 -0
  386. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-single-textbox/logic-single-textbox.component.ngfactory.d.ts +1 -0
  387. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-slider/logic-slider.component.d.ts +5 -0
  388. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-slider/logic-slider.component.ngfactory.d.ts +1 -0
  389. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-star-rating/logic-star-rating.component.d.ts +5 -0
  390. package/lib/sharedComponents/assessment-editor/components/logic-questions/logic-star-rating/logic-star-rating.component.ngfactory.d.ts +1 -0
  391. package/lib/sharedComponents/assessment-editor/components/move/move.component.d.ts +22 -0
  392. package/lib/sharedComponents/assessment-editor/components/move/move.component.ngfactory.d.ts +1 -0
  393. package/lib/sharedComponents/assessment-editor/components/page-header/page-header.component.d.ts +8 -0
  394. package/lib/sharedComponents/assessment-editor/components/page-header/page-header.component.ngfactory.d.ts +1 -0
  395. package/lib/sharedComponents/assessment-editor/components/pipes/current-page-question.pipe.d.ts +4 -0
  396. package/lib/sharedComponents/assessment-editor/components/pipes/error-message.pipe.d.ts +4 -0
  397. package/lib/sharedComponents/assessment-editor/components/pipes/formatter.pipe.d.ts +4 -0
  398. package/lib/sharedComponents/assessment-editor/components/pipes/question-filter.pipe.d.ts +4 -0
  399. package/lib/sharedComponents/assessment-editor/components/pipes/question-page-filter.pipe.d.ts +4 -0
  400. package/lib/sharedComponents/assessment-editor/components/pipes/question-parser.pipe.d.ts +4 -0
  401. package/lib/sharedComponents/assessment-editor/components/pipes/type-of.pipe.d.ts +4 -0
  402. package/lib/sharedComponents/assessment-editor/components/preview/preview-checkbox/preview-checkbox.component.d.ts +8 -0
  403. package/lib/sharedComponents/assessment-editor/components/preview/preview-checkbox/preview-checkbox.component.ngfactory.d.ts +1 -0
  404. package/lib/sharedComponents/assessment-editor/components/preview/preview-comment-box/preview-comment-box.component.d.ts +5 -0
  405. package/lib/sharedComponents/assessment-editor/components/preview/preview-comment-box/preview-comment-box.component.ngfactory.d.ts +1 -0
  406. package/lib/sharedComponents/assessment-editor/components/preview/preview-date-time/preview-date-time.component.d.ts +11 -0
  407. package/lib/sharedComponents/assessment-editor/components/preview/preview-date-time/preview-date-time.component.ngfactory.d.ts +1 -0
  408. package/lib/sharedComponents/assessment-editor/components/preview/preview-dropdown/preview-dropdown.component.d.ts +8 -0
  409. package/lib/sharedComponents/assessment-editor/components/preview/preview-dropdown/preview-dropdown.component.ngfactory.d.ts +1 -0
  410. package/lib/sharedComponents/assessment-editor/components/preview/preview-file-upload/preview-file-upload.component.d.ts +8 -0
  411. package/lib/sharedComponents/assessment-editor/components/preview/preview-file-upload/preview-file-upload.component.ngfactory.d.ts +1 -0
  412. package/lib/sharedComponents/assessment-editor/components/preview/preview-image-choice/preview-image-choice.component.d.ts +5 -0
  413. package/lib/sharedComponents/assessment-editor/components/preview/preview-image-choice/preview-image-choice.component.ngfactory.d.ts +1 -0
  414. package/lib/sharedComponents/assessment-editor/components/preview/preview-matrix-dropdown/preview-matrix-dropdown.component.d.ts +7 -0
  415. package/lib/sharedComponents/assessment-editor/components/preview/preview-matrix-dropdown/preview-matrix-dropdown.component.ngfactory.d.ts +1 -0
  416. package/lib/sharedComponents/assessment-editor/components/preview/preview-matrix-rating-scale/preview-matrix-rating-scale.component.d.ts +7 -0
  417. package/lib/sharedComponents/assessment-editor/components/preview/preview-matrix-rating-scale/preview-matrix-rating-scale.component.ngfactory.d.ts +1 -0
  418. package/lib/sharedComponents/assessment-editor/components/preview/preview-multiple-choice/preview-multiple-choice.component.d.ts +8 -0
  419. package/lib/sharedComponents/assessment-editor/components/preview/preview-multiple-choice/preview-multiple-choice.component.ngfactory.d.ts +1 -0
  420. package/lib/sharedComponents/assessment-editor/components/preview/preview-multiple-textbox/preview-multiple-textbox.component.d.ts +5 -0
  421. package/lib/sharedComponents/assessment-editor/components/preview/preview-multiple-textbox/preview-multiple-textbox.component.ngfactory.d.ts +1 -0
  422. package/lib/sharedComponents/assessment-editor/components/preview/preview-ranking/preview-ranking.component.d.ts +5 -0
  423. package/lib/sharedComponents/assessment-editor/components/preview/preview-ranking/preview-ranking.component.ngfactory.d.ts +1 -0
  424. package/lib/sharedComponents/assessment-editor/components/preview/preview-single-textbox/preview-single-textbox.component.d.ts +6 -0
  425. package/lib/sharedComponents/assessment-editor/components/preview/preview-single-textbox/preview-single-textbox.component.ngfactory.d.ts +1 -0
  426. package/lib/sharedComponents/assessment-editor/components/preview/preview-slider/preview-slider.component.d.ts +5 -0
  427. package/lib/sharedComponents/assessment-editor/components/preview/preview-slider/preview-slider.component.ngfactory.d.ts +1 -0
  428. package/lib/sharedComponents/assessment-editor/components/preview/preview-star-rating/preview-star-rating.component.d.ts +5 -0
  429. package/lib/sharedComponents/assessment-editor/components/preview/preview-star-rating/preview-star-rating.component.ngfactory.d.ts +1 -0
  430. package/lib/sharedComponents/assessment-editor/components/preview/preview-wrapper/preview-wrapper.component.d.ts +27 -0
  431. package/lib/sharedComponents/assessment-editor/components/preview/preview-wrapper/preview-wrapper.component.ngfactory.d.ts +1 -0
  432. package/lib/sharedComponents/assessment-editor/components/preview/preview.module.d.ts +2 -0
  433. package/lib/sharedComponents/assessment-editor/components/preview/preview.module.ngfactory.d.ts +3 -0
  434. package/lib/sharedComponents/assessment-editor/components/preview/thank-you/thank-you.component.d.ts +5 -0
  435. package/lib/sharedComponents/assessment-editor/components/preview/thank-you/thank-you.component.ngfactory.d.ts +1 -0
  436. package/lib/sharedComponents/assessment-editor/components/preview/welcome/welcome.component.d.ts +5 -0
  437. package/lib/sharedComponents/assessment-editor/components/preview/welcome/welcome.component.ngfactory.d.ts +1 -0
  438. package/lib/sharedComponents/assessment-editor/components/question-type/question-type.component.d.ts +6 -0
  439. package/lib/sharedComponents/assessment-editor/components/question-type/question-type.component.ngfactory.d.ts +1 -0
  440. package/lib/sharedComponents/assessment-editor/components/quick-settings/quick-settings.component.d.ts +28 -0
  441. package/lib/sharedComponents/assessment-editor/components/quick-settings/quick-settings.component.ngfactory.d.ts +1 -0
  442. package/lib/sharedComponents/assessment-editor/components/response-selector/response-selector.component.d.ts +11 -0
  443. package/lib/sharedComponents/assessment-editor/components/response-selector/response-selector.component.ngfactory.d.ts +1 -0
  444. package/lib/sharedComponents/assessment-editor/components/setting-anonymous/setting-anonymous.component.d.ts +16 -0
  445. package/lib/sharedComponents/assessment-editor/components/setting-anonymous/setting-anonymous.component.ngfactory.d.ts +1 -0
  446. package/lib/sharedComponents/assessment-editor/components/setting-response-segment/setting-response-segment.component.d.ts +47 -0
  447. package/lib/sharedComponents/assessment-editor/components/setting-response-segment/setting-response-segment.component.ngfactory.d.ts +1 -0
  448. package/lib/sharedComponents/assessment-editor/components/single-line-editor/single-line-editor.component.d.ts +35 -0
  449. package/lib/sharedComponents/assessment-editor/components/single-line-editor/single-line-editor.component.ngfactory.d.ts +1 -0
  450. package/lib/sharedComponents/assessment-editor/components/toolkit/toolkit.component.d.ts +8 -0
  451. package/lib/sharedComponents/assessment-editor/components/toolkit/toolkit.component.ngfactory.d.ts +1 -0
  452. package/lib/sharedComponents/assessment-editor/components/welcome-thankyou/welcome-thankyou.component.d.ts +12 -0
  453. package/lib/sharedComponents/assessment-editor/components/welcome-thankyou/welcome-thankyou.component.ngfactory.d.ts +1 -0
  454. package/lib/sharedComponents/assessment-editor/create-assessment-container/create-assessment-container.component.d.ts +64 -0
  455. package/lib/sharedComponents/assessment-editor/create-assessment-container/create-assessment-container.component.ngfactory.d.ts +1 -0
  456. package/lib/sharedComponents/assessment-editor/create-assessment.module.d.ts +2 -0
  457. package/lib/sharedComponents/assessment-editor/create-assessment.module.ngfactory.d.ts +3 -0
  458. package/lib/sharedComponents/assessment-editor/services/editor.service.d.ts +185 -0
  459. package/lib/sharedComponents/assessment-editor/services/result-criteria.service.d.ts +4 -0
  460. package/lib/sharedComponents/assessment-editor/services/validator.service.d.ts +31 -0
  461. package/lib/ui-kit/action-dialog/action-dialog.module.d.ts +2 -0
  462. package/lib/ui-kit/action-dialog/action-dialog.module.ngfactory.d.ts +3 -0
  463. package/lib/ui-kit/action-dialog/active/active.component.d.ts +12 -0
  464. package/lib/ui-kit/action-dialog/active/active.component.ngfactory.d.ts +1 -0
  465. package/lib/ui-kit/action-dialog/deactivate/deactivate.component.d.ts +12 -0
  466. package/lib/ui-kit/action-dialog/deactivate/deactivate.component.ngfactory.d.ts +1 -0
  467. package/lib/ui-kit/action-dialog/delete/delete.component.d.ts +11 -0
  468. package/lib/ui-kit/action-dialog/delete/delete.component.ngfactory.d.ts +1 -0
  469. package/lib/ui-kit/action-dialog/duplicate/duplicate.component.d.ts +12 -0
  470. package/lib/ui-kit/action-dialog/duplicate/duplicate.component.ngfactory.d.ts +1 -0
  471. package/lib/ui-kit/dialog/dialog-config.d.ts +5 -0
  472. package/lib/ui-kit/dialog/dialog-injector.d.ts +7 -0
  473. package/lib/ui-kit/dialog/dialog-ref.d.ts +7 -0
  474. package/lib/ui-kit/dialog/dialog.component.d.ts +29 -0
  475. package/lib/ui-kit/dialog/dialog.component.ngfactory.d.ts +1 -0
  476. package/lib/ui-kit/dialog/dialog.module.d.ts +2 -0
  477. package/lib/ui-kit/dialog/dialog.module.ngfactory.d.ts +3 -0
  478. package/lib/ui-kit/dialog/dialog.service.d.ts +15 -0
  479. package/lib/ui-kit/dialog/insertion.directive.d.ts +5 -0
  480. package/lib/ui-kit/editor-loader/editor-loader/editor-loader.component.d.ts +5 -0
  481. package/lib/ui-kit/editor-loader/editor-loader/editor-loader.component.ngfactory.d.ts +1 -0
  482. package/lib/ui-kit/editor-loader/editor-loader.module.d.ts +2 -0
  483. package/lib/ui-kit/editor-loader/editor-loader.module.ngfactory.d.ts +3 -0
  484. package/lib/ui-kit/formgroup/click-outside.directive.d.ts +7 -0
  485. package/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.d.ts +10 -0
  486. package/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.ngfactory.d.ts +1 -0
  487. package/lib/ui-kit/formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component.d.ts +10 -0
  488. package/lib/ui-kit/formgroup/cs-checkbox-indeterminate/cs-checkbox-indeterminate.component.ngfactory.d.ts +1 -0
  489. package/lib/ui-kit/formgroup/cs-radio/cs-radio.component.d.ts +12 -0
  490. package/lib/ui-kit/formgroup/cs-radio/cs-radio.component.ngfactory.d.ts +1 -0
  491. package/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.d.ts +5 -0
  492. package/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.ngfactory.d.ts +1 -0
  493. package/lib/ui-kit/formgroup/cs-select/cs-select.component.d.ts +33 -0
  494. package/lib/ui-kit/formgroup/cs-select/cs-select.component.ngfactory.d.ts +1 -0
  495. package/lib/ui-kit/formgroup/cs-switch/cs-switch.component.d.ts +12 -0
  496. package/lib/ui-kit/formgroup/cs-switch/cs-switch.component.ngfactory.d.ts +1 -0
  497. package/lib/ui-kit/formgroup/formgroup.module.d.ts +2 -0
  498. package/lib/ui-kit/formgroup/formgroup.module.ngfactory.d.ts +3 -0
  499. package/lib/ui-kit/formgroup/pipes/pascal.pipe.d.ts +4 -0
  500. package/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.d.ts +4 -0
  501. package/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.d.ts +231 -0
  502. package/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.ngfactory.d.ts +1 -0
  503. package/lib/workflow-engine-container/workflow-engine-container.component.d.ts +2 -0
  504. package/lib/workflow-services/assessment.service.d.ts +10 -1
  505. package/package.json +1 -1
  506. package/vcomply-workflow-engine.d.ts +159 -60
  507. package/vcomply-workflow-engine.metadata.json +1 -1
@@ -0,0 +1,636 @@
1
+ import { moveItemInArray } from '@angular/cdk/drag-drop';
2
+ import { HttpClient, HttpHeaders } from '@angular/common/http';
3
+ import { Injectable, Optional } from '@angular/core';
4
+ import { BehaviorSubject } from 'rxjs';
5
+ import { retry } from 'rxjs/operators';
6
+ import { Configurations } from '../../../configurations';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common/http";
9
+ import * as i2 from "../../../configurations";
10
+ // import { environment } from 'src/environments/environment';
11
+ export class EditorService {
12
+ constructor(http, config) {
13
+ this.http = http;
14
+ this.currentPageDetails = { pageName: '', pageNumber: 1, pageDescription: '' };
15
+ this.prefixForQuestionName = 'Question_';
16
+ this.activeQuestionIndex = new BehaviorSubject(-5);
17
+ this.activeQuestionStream$ = this.activeQuestionIndex.asObservable();
18
+ this.currentPageNumber = 1;
19
+ this.activeQuestion = 0;
20
+ this.showAddPageOption = true;
21
+ this.showPageDetails = false;
22
+ this.score = {
23
+ defaultScore: 1,
24
+ negativeScore: 0
25
+ };
26
+ this.allPages = [];
27
+ this.stepIdentifier = 'pagescreen'; // this value can be "welcomescreen","thankyouscreen","pagescreen" only
28
+ this.settings = {
29
+ assessmentMode: false,
30
+ defaultScore: 1,
31
+ negativeScoreCriteria: 'FAILED',
32
+ negativeScore: 0,
33
+ weightageEnabled: false,
34
+ settingsEnabled: false
35
+ };
36
+ this.formsPage = {
37
+ version: 2,
38
+ questionRandomize: true,
39
+ anonymousResponse: false,
40
+ hasWelcome: false,
41
+ hasWelcomeDescription: true,
42
+ welcomeText: '',
43
+ hasWelcomeImage: true,
44
+ welcomeImage: '',
45
+ welcomeDescription: '',
46
+ hasThanks: false,
47
+ hasThankyouImage: false,
48
+ thankyouText: '',
49
+ thankyouImage: '',
50
+ hasThankyouDescription: true,
51
+ thankyouDescription: '',
52
+ elements: [],
53
+ pageDetailsList: [],
54
+ customResponseSet: [],
55
+ settings: this.settings,
56
+ responseSegment: this.initializeEmptyResponseSegment()
57
+ };
58
+ this.httpOptions = {
59
+ headers: new HttpHeaders({ 'Content-Type': 'application/json', token: this.getAuthorizationToken() })
60
+ };
61
+ if (config) {
62
+ this.env = config.envConfig;
63
+ }
64
+ }
65
+ initializeEmptyResponseSegment() {
66
+ return {
67
+ title: '',
68
+ description: '',
69
+ maxScore: 10,
70
+ segments: []
71
+ };
72
+ }
73
+ uploadHandler(formData, destination) {
74
+ return this.http.post(this.env.fileUploadEndPoint + destination, formData);
75
+ //return this.http.post<any>("env" + destination, formData);
76
+ }
77
+ addQuestion(evt, index) {
78
+ switch (evt.trim()) {
79
+ case 'welcome': {
80
+ this.currentPageNumber = -1;
81
+ this.stepIdentifier = 'welcomescreen';
82
+ this.formsPage.hasWelcome = true;
83
+ break;
84
+ }
85
+ case 'thankyou': {
86
+ this.currentPageNumber = -2;
87
+ this.stepIdentifier = 'thankyouscreen';
88
+ break;
89
+ }
90
+ case 'multiple-choice': {
91
+ this.setToPagefromWelcome();
92
+ this.createMultipleChoice(index);
93
+ break;
94
+ }
95
+ case 'checkbox': {
96
+ this.setToPagefromWelcome();
97
+ this.createCheckbox(index);
98
+ break;
99
+ }
100
+ case 'star-rating': {
101
+ this.setToPagefromWelcome();
102
+ this.createStarRating(index);
103
+ break;
104
+ }
105
+ case 'single-textbox': {
106
+ this.setToPagefromWelcome();
107
+ this.createSingleTextbox(index);
108
+ break;
109
+ }
110
+ case 'comment-box': {
111
+ this.setToPagefromWelcome();
112
+ this.createCommentbox(index);
113
+ break;
114
+ }
115
+ case 'matrix-dropdown': {
116
+ this.setToPagefromWelcome();
117
+ this.createMatrixDropdown(index);
118
+ break;
119
+ }
120
+ case 'dropdown': {
121
+ this.setToPagefromWelcome();
122
+ this.createDropdown(index);
123
+ break;
124
+ }
125
+ case 'slider': {
126
+ this.setToPagefromWelcome();
127
+ this.createSlider(index);
128
+ break;
129
+ }
130
+ case 'rating-scale': {
131
+ this.setToPagefromWelcome();
132
+ this.createRatingScale(index);
133
+ break;
134
+ }
135
+ case 'multiple-textbox': {
136
+ this.setToPagefromWelcome();
137
+ this.createMultipleTextbox(index);
138
+ break;
139
+ }
140
+ case 'date-time': {
141
+ this.setToPagefromWelcome();
142
+ this.createDateTime(index);
143
+ break;
144
+ }
145
+ case 'file-upload': {
146
+ this.setToPagefromWelcome();
147
+ this.createFileUpload(index);
148
+ break;
149
+ }
150
+ case 'ranking': {
151
+ this.setToPagefromWelcome();
152
+ this.createRanking(index);
153
+ break;
154
+ }
155
+ case 'star-rating': {
156
+ this.setToPagefromWelcome();
157
+ this.createStarRating(index);
158
+ break;
159
+ }
160
+ }
161
+ }
162
+ setToPagefromWelcome() {
163
+ if (['thankyouscreen', 'welcomescreen'].includes(this.stepIdentifier)) {
164
+ this.currentPageNumber = this.allPages.length;
165
+ this.stepIdentifier = 'pagescreen';
166
+ }
167
+ }
168
+ /**
169
+ * Check whether to display Page Details or Add Page tilte option
170
+ */
171
+ checkForPageDetails() {
172
+ if (this.currentPageDetails === undefined || this.currentPageDetails.pageName === '') {
173
+ this.showAddPageOption = true;
174
+ this.showPageDetails = false;
175
+ }
176
+ else {
177
+ this.showAddPageOption = false;
178
+ this.showPageDetails = true;
179
+ }
180
+ }
181
+ /**
182
+ * Creates a question of type multiple choice
183
+ * @param index Index at which question needs to be created
184
+ */
185
+ createMultipleChoice(index) {
186
+ const element = {
187
+ type: 'multiple-choice', name: ``, page: this.currentPageNumber, otherConfig: { color: '#000000', isFailed: false, score: this.score.defaultScore },
188
+ isRequired: false, title: '', hasDescription: false, description: '', hasComments: false, comments: '',
189
+ randomize: false, hasOther: false, otherValue: 'Other', alignment: false, reverse: false, visibilityLogic: [], choices: [
190
+ {
191
+ title: '', value: 1, isSelected: false, required: 0, hasHelpingLabel: false,
192
+ helpingLabel: '', isFailed: false, score: this.score.defaultScore, color: this.generateRandomColor()
193
+ }
194
+ ]
195
+ };
196
+ (index === undefined) ? this.operationOnCreateIfIndexUndefined(element) : this.operationOnCreateIfIndexDefined(element, index);
197
+ this.sortQuestion();
198
+ }
199
+ /**
200
+ * Creates a question of type checkbox
201
+ * @param index Index at which question needs to be created
202
+ */
203
+ createCheckbox(index) {
204
+ const element = {
205
+ type: 'checkbox', name: '', page: this.currentPageNumber, otherConfig: { color: '#000000', isFailed: false, score: this.score.defaultScore },
206
+ isRequired: false, title: '', hasDescription: false, description: '', hasComments: false, comments: '',
207
+ randomize: false, hasOther: false, otherValue: 'Other', alignment: false, reverse: false,
208
+ isRespondentAttachment: false, userAttachedFiles: [], isRespondentComment: false, userComments: '', visibilityLogic: [], choices: [{
209
+ title: '', value: 1, isSelected: false, required: 0, hasHelpingLabel: false,
210
+ helpingLabel: '', isFailed: false, score: this.score.defaultScore, color: this.generateRandomColor()
211
+ }
212
+ ]
213
+ };
214
+ (index === undefined) ? this.operationOnCreateIfIndexUndefined(element) : this.operationOnCreateIfIndexDefined(element, index);
215
+ this.sortQuestion();
216
+ }
217
+ /**
218
+ * Creates a question of type star rating
219
+ * @param index Index at which question needs to be created
220
+ * [Note]: Rating label type can take 2 values 'specific'/'scale'
221
+ */
222
+ createStarRating(index) {
223
+ const element = {
224
+ type: 'star-rating', name: '', page: this.currentPageNumber, isRequired: false, title: '', hasDescription: false,
225
+ description: '', hasComments: false, comments: '', randomize: false, hasOther: false, alignment: false, reverse: false,
226
+ isRespondentAttachment: false, userAttachedFiles: [], isRespondentComment: false, userComments: '', cursorType: 'number',
227
+ cursorColor: '#ff8000', scale: 2, starValue: '', hasRatingLabel: false, ratingLabelType: 'specific',
228
+ scaleRangeFrom: 'Not at all likely',
229
+ scaleRangeTo: 'Extreme Likely', visibilityLogic: [],
230
+ choices: [
231
+ { title: '', isVisible: true, value: 0, isSelected: false, required: 0, hasHelpingLabel: true, helpingLabel: '' },
232
+ { title: '', isVisible: true, value: 1, isSelected: false, required: 0, hasHelpingLabel: true, helpingLabel: '' },
233
+ ]
234
+ };
235
+ (index === undefined) ? this.operationOnCreateIfIndexUndefined(element) : this.operationOnCreateIfIndexDefined(element, index);
236
+ this.sortQuestion();
237
+ }
238
+ /**
239
+ * Creates a question of type single textbox
240
+ * @param index Index at which question needs to be created
241
+ */
242
+ createSingleTextbox(index) {
243
+ const element = {
244
+ type: 'single-textbox', name: '', page: this.currentPageNumber,
245
+ hasValidation: false, validationType: '', isRequired: false, hasCharacterLength: false, minCharacterLength: 0,
246
+ maxCharacterLength: 100, title: '', hasDescription: false, description: '', hasComments: false, comments: '',
247
+ randomize: false, hasOther: false, otherValue: 'Other', alignment: false, reverse: false,
248
+ isRespondentAttachment: false, userAttachedFiles: [], isRespondentComment: false, userComments: '', visibilityLogic: [],
249
+ choices: [{ title: '', value: 1, isSelected: false, required: 0, hasHelpingLabel: true, helpingLabel: '' }]
250
+ };
251
+ (index === undefined) ? this.operationOnCreateIfIndexUndefined(element) : this.operationOnCreateIfIndexDefined(element, index);
252
+ this.sortQuestion();
253
+ }
254
+ /**
255
+ * Creates a question of type comment box
256
+ * @param index Index at which question needs to be created
257
+ */
258
+ createCommentbox(index) {
259
+ const element = {
260
+ type: 'comment-box', name: '', page: this.currentPageNumber,
261
+ isRequired: false, title: '', hasDescription: false, description: '', hasComments: false, comments: '',
262
+ hasCharacterLength: false, minCharacterLength: 0, maxCharacterLength: 0, randomize: false, hasOther: false,
263
+ otherValue: 'Other', alignment: false, reverse: false, isRespondentAttachment: false, userAttachedFiles: [],
264
+ isRespondentComment: false, userComments: '', visibilityLogic: [], choices: [
265
+ { title: '', value: 1, isSelected: false, required: 0, hasHelpingLabel: false, helpingLabel: '', imageURL: '' },
266
+ ]
267
+ };
268
+ (index === undefined) ? this.operationOnCreateIfIndexUndefined(element) : this.operationOnCreateIfIndexDefined(element, index);
269
+ this.sortQuestion();
270
+ }
271
+ /**
272
+ * Creates a question of type matrix of dropdown
273
+ * @param index Index at which question needs to be created
274
+ */
275
+ createMatrixDropdown(index) {
276
+ const element = {
277
+ type: 'matrix-dropdown', name: '', page: this.currentPageNumber, otherConfig: { color: '#000000', isFailed: false, score: 1 },
278
+ isRequired: false, title: '', hasDescription: false, description: '', hasComments: false, comments: '',
279
+ randomize: false, hasOther: false, otherValue: 'Other', alignment: false, reverse: false,
280
+ isRespondentAttachment: false, userAttachedFiles: [], isRespondentComment: false, userComments: '', visibilityLogic: [],
281
+ choices: [{ title: '', value: 1, isSelected: false, required: 0, hasHelpingLabel: false, helpingLabel: '' }],
282
+ columns: [{
283
+ title: '', value: 1, weight: 0, isSelected: false, required: 0, hasHelpingLabel: false, helpingLabel: '',
284
+ choices: [{ title: '', value: 1, isSelected: false, required: 0, hasHelpingLabel: false, helpingLabel: '' }]
285
+ }
286
+ ]
287
+ };
288
+ (index === undefined) ? this.operationOnCreateIfIndexUndefined(element) : this.operationOnCreateIfIndexDefined(element, index);
289
+ this.sortQuestion();
290
+ }
291
+ /**
292
+ * Creates a question of type dropdown
293
+ * @param index Index at which question needs to be created
294
+ */
295
+ createDropdown(index) {
296
+ const element = {
297
+ type: 'dropdown', name: '', page: this.currentPageNumber, otherConfig: { color: '#000000', isFailed: false, score: this.score.defaultScore },
298
+ isRequired: false, title: '', hasDescription: false, description: '', hasComments: false, comments: '',
299
+ randomize: false, hasOther: false, otherValue: 'Other', alignment: false, reverse: false,
300
+ isRespondentAttachment: false, userAttachedFiles: [], isRespondentComment: false, userComments: '', visibilityLogic: [],
301
+ choices: [
302
+ {
303
+ title: '', value: 1, isSelected: false, required: 0, hasHelpingLabel: false, helpingLabel: '',
304
+ isFailed: false, score: this.score.defaultScore, color: this.generateRandomColor()
305
+ }
306
+ ]
307
+ };
308
+ (index === undefined) ? this.operationOnCreateIfIndexUndefined(element) : this.operationOnCreateIfIndexDefined(element, index);
309
+ this.sortQuestion();
310
+ }
311
+ /**
312
+ * Creates a question of type slider
313
+ * @param index Index at which question needs to be created
314
+ */
315
+ createSlider(index) {
316
+ const element = {
317
+ type: 'slider', name: '', page: this.currentPageNumber,
318
+ isRequired: false, title: '', hasDescription: false, description: '', hasComments: false, comments: '',
319
+ randomize: false, hasOther: false, otherValue: 'Other', alignment: false, reverse: false,
320
+ isRespondentAttachment: false, userAttachedFiles: [], isRespondentComment: false, userComments: '', visibilityLogic: [],
321
+ choices: [{ title: '', value: 1, isSelected: false, required: 0, hasHelpingLabel: false, helpingLabel: '' }],
322
+ centerRange: false, adjustScale: false, numericBoxEnabled: false, left: 0, center: 0, right: 100,
323
+ scaleRangeMin: 0, scaleRangeMax: 100, stepSize: 10, startPosition: 0, editorValue: 0
324
+ };
325
+ (index === undefined) ? this.operationOnCreateIfIndexUndefined(element) : this.operationOnCreateIfIndexDefined(element, index);
326
+ this.sortQuestion();
327
+ }
328
+ /**
329
+ * Creates a question of type matrix rating scale
330
+ * @param index Index at which question needs to be created
331
+ */
332
+ createRatingScale(index) {
333
+ const element = {
334
+ type: 'rating-scale', name: '', page: this.currentPageNumber,
335
+ isRequired: false, title: '', hasDescription: false, description: '', hasComments: false, comments: '',
336
+ randomize: false, hasOther: false, hasRatingLabel: false, ratingLabelType: '',
337
+ otherValue: 'Other', hasWeight: false, alignment: false, reverse: false,
338
+ isRespondentAttachment: false, userAttachedFiles: [], isRespondentComment: false, userComments: '', visibilityLogic: [],
339
+ choices: [{ title: '', value: 1, isSelected: false, required: 0, hasHelpingLabel: false, helpingLabel: '' }],
340
+ columns: [{ title: '', value: 1, weight: 0, isSelected: false, required: 0, hasHelpingLabel: false, helpingLabel: '' }]
341
+ };
342
+ (index === undefined) ? this.operationOnCreateIfIndexUndefined(element) : this.operationOnCreateIfIndexDefined(element, index);
343
+ this.sortQuestion();
344
+ }
345
+ /**
346
+ * Creates a question of type ranking
347
+ * @param index Index at which question needs to be created
348
+ */
349
+ createRanking(index) {
350
+ const element = {
351
+ type: 'ranking', name: '', page: this.currentPageNumber,
352
+ isRequired: false, title: '', hasDescription: false, description: '', hasComments: false, comments: '',
353
+ randomize: false, hasOther: false, otherValue: 'Other', hasRatingLabel: false, alignment: false,
354
+ reverse: false, onlyNumber: true, isRespondentAttachment: false, userAttachedFiles: [],
355
+ isRespondentComment: false, userComments: '', visibilityLogic: [], choices: [
356
+ { title: '', value: 1, isSelected: false, required: 0, hasHelpingLabel: false, helpingLabel: '' },
357
+ ]
358
+ };
359
+ (index === undefined) ? this.operationOnCreateIfIndexUndefined(element) : this.operationOnCreateIfIndexDefined(element, index);
360
+ this.sortQuestion();
361
+ }
362
+ /**
363
+ * Creates a question of type multiple textbox
364
+ * @param index Index at which question needs to be created
365
+ */
366
+ createMultipleTextbox(index) {
367
+ const element = {
368
+ type: 'multiple-textbox', name: '',
369
+ page: this.currentPageNumber, isRequired: false, title: '', hasDescription: false, description: '',
370
+ randomize: false, hasOther: false, hasComments: false, comments: '', otherValue: 'Other', hasRatingLabel: false,
371
+ alignment: false, reverse: false, onlyNumber: true, isRespondentAttachment: false, userAttachedFiles: [],
372
+ isRespondentComment: false, userComments: '', visibilityLogic: [], choices: [
373
+ { title: '', value: 1, isSelected: false, required: 0, hasHelpingLabel: false, helpingLabel: '' },
374
+ ]
375
+ };
376
+ (index === undefined) ? this.operationOnCreateIfIndexUndefined(element) : this.operationOnCreateIfIndexDefined(element, index);
377
+ this.sortQuestion();
378
+ }
379
+ /**
380
+ * Creates a question of type date/time
381
+ * @param index Index at which question needs to be created
382
+ */
383
+ createDateTime(index) {
384
+ const element = {
385
+ type: 'date-time', name: '', page: this.currentPageNumber,
386
+ isRequired: false, title: '', hasDescription: false, description: '', hasComments: false, comments: '',
387
+ randomize: false, hasOther: false, otherValue: 'Other', hasRatingLabel: false, alignment: false,
388
+ reverse: false, onlyNumber: true, isRespondentAttachment: false, userAttachedFiles: [], isRespondentComment: false,
389
+ userComments: '', visibilityLogic: [], hasDate: true, hasTime: false, dateFormat: 'DD/MM/YYYY', timeFormat: 24,
390
+ choices: [
391
+ { title: '', value: 1, isSelected: false, required: 0, hasHelpingLabel: false, helpingLabel: '' },
392
+ ],
393
+ date: { title: '', value: '' },
394
+ time: { title: '', value: '' }
395
+ };
396
+ (index === undefined) ? this.operationOnCreateIfIndexUndefined(element) : this.operationOnCreateIfIndexDefined(element, index);
397
+ this.sortQuestion();
398
+ }
399
+ /**
400
+ * Creates a question of type file upload
401
+ * @param index Index at which question needs to be created
402
+ */
403
+ createFileUpload(index) {
404
+ const element = {
405
+ type: 'file-upload', name: '', page: this.currentPageNumber,
406
+ isRequired: false, title: '', hasInstruction: false, instruction: '', hasDescription: false, description: '',
407
+ hasComments: false, comments: '', randomize: false, hasOther: false, otherValue: 'Other', alignment: false, reverse: false,
408
+ fileTypeRestrictions: false, isRespondentAttachment: false, userAttachedFiles: [], isRespondentComment: false, userComments: '',
409
+ visibilityLogic: [], choices: [
410
+ { title: '', value: 1, isSelected: false, required: 0, hasHelpingLabel: false, helpingLabel: '' }
411
+ ],
412
+ allowedFileTypes: {
413
+ pdf: true,
414
+ doc: true,
415
+ png: true,
416
+ jpg: true,
417
+ gif: true
418
+ }
419
+ };
420
+ (index === undefined) ? this.operationOnCreateIfIndexUndefined(element) : this.operationOnCreateIfIndexDefined(element, index);
421
+ this.sortQuestion();
422
+ }
423
+ /**
424
+ * Creates a question of type image choice
425
+ * @param index Index at which question needs to be created
426
+ */
427
+ createImageChoice(index) {
428
+ const element = {
429
+ type: 'image-choice', name: '', page: this.currentPageNumber,
430
+ isRequired: false, title: '', hasDescription: false, description: '', hasComments: false, comments: '',
431
+ randomize: false, hasOther: false, otherValue: 'Other', alignment: false, reverse: false,
432
+ isRespondentAttachment: false, userAttachedFiles: [], isRespondentComment: false, userComments: '',
433
+ visibilityLogic: [], choices: [
434
+ { title: '', value: 1, isSelected: false, required: 0, hasHelpingLabel: false, helpingLabel: '', imageURL: '' }
435
+ ]
436
+ };
437
+ (index === undefined) ? this.operationOnCreateIfIndexUndefined(element) : this.operationOnCreateIfIndexDefined(element, index);
438
+ this.sortQuestion();
439
+ }
440
+ /**
441
+ * Creates and adds the question to list of questions if a question's index is undefined
442
+ * @param element Details of question to be created
443
+ */
444
+ operationOnCreateIfIndexUndefined(element) {
445
+ element.name = this.generateQuestionName(this.formsPage.elements.length + 1),
446
+ this.formsPage.elements.push(element);
447
+ this.setActiveQuestionBasedOnPageLength();
448
+ }
449
+ /**
450
+ * Creates and adds the question to list of questions if a question's index is present
451
+ * @param element Details of question to be created
452
+ * @param index Index at which question should be created
453
+ */
454
+ operationOnCreateIfIndexDefined(element, index) {
455
+ element.name = this.generateQuestionName(index + 1);
456
+ this.formsPage.elements.splice(index + 1, 0, element);
457
+ this.activeQuestion = index + 1;
458
+ this.activeQuestionIndex.next(index + 1);
459
+ }
460
+ /**
461
+ * Sets the active question based on particular page
462
+ */
463
+ setActiveQuestionBasedOnPageLength() {
464
+ let count = 0;
465
+ for (let i = 1; i <= this.currentPageNumber; i++) {
466
+ count += [...this.formsPage.elements].reduce((counter, currentElement) => (i === currentElement.page ? counter + 1 : counter), 0) - 1;
467
+ }
468
+ this.activeQuestion = count + this.currentPageNumber - 1;
469
+ this.activeQuestionIndex.next(count + this.currentPageNumber - 1);
470
+ // setTimeout(() => {
471
+ // }, 150);
472
+ // this.cdr.detectChanges();
473
+ }
474
+ /**
475
+ * Sorts the questions based on page number
476
+ */
477
+ sortQuestion() {
478
+ this.formsPage.elements.sort((a, b) => {
479
+ return a.page - b.page;
480
+ });
481
+ }
482
+ /**
483
+ * Generates a unique question name for newly added question
484
+ * @param questionIndex Index of question to be created
485
+ */
486
+ generateQuestionName(questionIndex) {
487
+ const questionNames = this.formsPage.elements.map((a) => a.name);
488
+ if (questionNames.includes(`${this.prefixForQuestionName}${questionIndex}`)) {
489
+ return this.generateQuestionName(questionIndex + 1);
490
+ }
491
+ else {
492
+ const name = 'Question_' + questionIndex.toString();
493
+ return name;
494
+ }
495
+ }
496
+ generateRandomColor() {
497
+ //return '#' + Math.floor(Math.random() * 16777215).toString(16);
498
+ return '#000000';
499
+ }
500
+ /**
501
+ * Sets the question as active based on the particular index
502
+ * @param index Index of the question to be marked as active question
503
+ */
504
+ setactiveQuestion(index) {
505
+ this.activeQuestion = index;
506
+ this.activeQuestionIndex.next(index);
507
+ }
508
+ /**
509
+ * Duplicates a question with particular index
510
+ * @param index Index of question to be duplicated
511
+ */
512
+ copyQuestion(index) {
513
+ this.setactiveQuestion(index + 1);
514
+ const COPY_ELEMENT = JSON.parse(JSON.stringify(this.formsPage.elements[index]));
515
+ if (COPY_ELEMENT.errorArray) {
516
+ delete COPY_ELEMENT.errorArray;
517
+ }
518
+ COPY_ELEMENT.visibilityLogic = [];
519
+ const elementsNames = [];
520
+ this.formsPage.elements.forEach((element) => {
521
+ elementsNames.push(element.name);
522
+ });
523
+ this.checkForSameName(elementsNames, COPY_ELEMENT);
524
+ this.formsPage.elements.splice(index + 1, 0, COPY_ELEMENT);
525
+ }
526
+ /**
527
+ * Assigns a unique name to the duplicated question
528
+ * @param elementsNames List of question names
529
+ * @param COPY_ELEMENT Details of question duplicated
530
+ */
531
+ checkForSameName(elementsNames, COPY_ELEMENT) {
532
+ if (elementsNames.includes(COPY_ELEMENT.name)) {
533
+ const COPY_ELEMENT_NAME = COPY_ELEMENT.name.split('_');
534
+ COPY_ELEMENT_NAME[COPY_ELEMENT_NAME.length - 1] = (parseInt(COPY_ELEMENT_NAME[COPY_ELEMENT_NAME.length - 1], 10) + 1).toString();
535
+ COPY_ELEMENT.name = COPY_ELEMENT_NAME.join('_');
536
+ this.checkForSameName(elementsNames, COPY_ELEMENT);
537
+ }
538
+ }
539
+ /**
540
+ * Deletes the question on click of delete button
541
+ * @param index Index of question to be deleted
542
+ */
543
+ deleteQuestion(index) {
544
+ this.removeLogicFromDependentQuestion(index);
545
+ this.formsPage.elements.splice(index, 1);
546
+ }
547
+ /**
548
+ * Removes the logic data for a particular question from other questions
549
+ * @param index Index of question whose logic data needs to be removed from other questions
550
+ */
551
+ removeLogicFromDependentQuestion(index) {
552
+ this.formsPage.elements.forEach((questionElement) => {
553
+ if (questionElement.visibilityLogic.length > 0) {
554
+ questionElement.visibilityLogic = questionElement.visibilityLogic.filter((logic) => logic.questionName !== this.formsPage.elements[index].name);
555
+ }
556
+ });
557
+ }
558
+ /**
559
+ * Adds a new page
560
+ */
561
+ addPage() {
562
+ if (this.currentPageNumber === -1 || this.currentPageNumber === -2) {
563
+ //this.currentPageNumber = this.numberOfPages() + 1;
564
+ this.currentPageNumber = this.allPages.length + 1;
565
+ this.allPages.push(this.currentPageNumber);
566
+ this.numberOfPages();
567
+ }
568
+ else {
569
+ this.currentPageNumber = this.allPages.length + 1;
570
+ this.allPages.push(this.currentPageNumber);
571
+ }
572
+ this.stepIdentifier = 'pagescreen';
573
+ this.activeQuestionIndex.next(-10);
574
+ }
575
+ /**
576
+ * Counts the number of pages in a survey/form
577
+ */
578
+ numberOfPages() {
579
+ const PAGE_ARRAY = [];
580
+ if (this.formsPage.elements.length !== 0) {
581
+ this.formsPage.elements.forEach((element) => {
582
+ PAGE_ARRAY.push(element.page);
583
+ this.currentPageDetails.pageNumber = element.page;
584
+ if (this.formsPage.pageDetailsList.length === 0) {
585
+ this.formsPage.pageDetailsList.push(this.currentPageDetails);
586
+ }
587
+ });
588
+ this.allPages = [...new Set(PAGE_ARRAY)];
589
+ }
590
+ else {
591
+ return 0;
592
+ }
593
+ }
594
+ fetchAssessmentData(id) {
595
+ //mode=assessment/fetchQuestionsByAssessmentId&id=61f3f7871c60020009a20543
596
+ return this.http.get("env" + 'assessment/fetchQuestionsByAssessmentId&id=' + id, this.httpOptions).pipe(retry(2));
597
+ }
598
+ saveAssessment(id, payload) {
599
+ return this.http.post("env" + 'assessment/update&id=' + id, payload, this.httpOptions);
600
+ //?mode=assessment/update&id=61f3f7871c60020009a20543
601
+ }
602
+ getAuthorizationToken() {
603
+ const TOKEN = localStorage.getItem('currentUser');
604
+ let currentUser;
605
+ TOKEN !== null ? (currentUser = JSON.parse(TOKEN)) : (currentUser = {});
606
+ return currentUser.token;
607
+ }
608
+ /**
609
+ * Extracts the text from a particular html content
610
+ * @param s html content from which text needs to be extracted
611
+ */
612
+ extract(s) {
613
+ const span = document.createElement('span');
614
+ span.innerHTML = s;
615
+ return span.textContent || span.innerText;
616
+ }
617
+ /**
618
+ * Moves Question to a particular index in an array
619
+ * @param previous Index from which Question should be moved
620
+ * @param next Index before which Question should be moved
621
+ */
622
+ moveQuestion(previous, next) {
623
+ moveItemInArray(this.formsPage.elements, previous, next);
624
+ }
625
+ }
626
+ EditorService.ɵprov = i0.ɵɵdefineInjectable({ factory: function EditorService_Factory() { return new EditorService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.Configurations, 8)); }, token: EditorService, providedIn: "root" });
627
+ EditorService.decorators = [
628
+ { type: Injectable, args: [{
629
+ providedIn: 'root'
630
+ },] }
631
+ ];
632
+ EditorService.ctorParameters = () => [
633
+ { type: HttpClient },
634
+ { type: Configurations, decorators: [{ type: Optional }] }
635
+ ];
636
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi9zaGFyZWRDb21wb25lbnRzL2Fzc2Vzc21lbnQtZWRpdG9yL3NlcnZpY2VzL2VkaXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQUN6RCw4REFBOEQ7QUFJOUQsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBb0IsSUFBZ0IsRUFBYSxNQUF1QjtRQUFwRCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBS3BDLHVCQUFrQixHQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUMvRSwwQkFBcUIsR0FBRyxXQUFXLENBQUM7UUFDN0Isd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RCwwQkFBcUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekQsc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBQzlCLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLHNCQUFpQixHQUFHLElBQUksQ0FBQztRQUN6QixvQkFBZSxHQUFH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QyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDeEUsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7O01BR0U7SUFDRixPQUFPLENBQUMsQ0FBUztRQUNmLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDNUMsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxZQUFZLENBQUMsUUFBYSxFQUFFLElBQVM7UUFDbkMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzRCxDQUFDOzs7O1lBL29CRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQVRRLFVBQVU7WUFLVixjQUFjLHVCQU9pQixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgcmV0cnkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zIH0gZnJvbSAnLi4vLi4vLi4vY29uZmlndXJhdGlvbnMnO1xyXG4vLyBpbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJ3NyYy9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFZGl0b3JTZXJ2aWNlIHtcclxuICAgZW52ICE6YW55O1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxAT3B0aW9uYWwoKSBjb25maWc/OiBDb25maWd1cmF0aW9ucykgeyBcclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgdGhpcy5lbnYgPSBjb25maWcuZW52Q29uZmlnO1xyXG4gICAgfVxyXG4gIH1cclxuICBjdXJyZW50UGFnZURldGFpbHM6IGFueSA9IHsgcGFnZU5hbWU6ICcnLCBwYWdlTnVtYmVyOiAxLCBwYWdlRGVzY3JpcHRpb246ICcnIH07XHJcbiAgcHJlZml4Rm9yUXVlc3Rpb25OYW1lID0gJ1F1ZXN0aW9uXyc7XHJcbiAgcHVibGljIGFjdGl2ZVF1ZXN0aW9uSW5kZXggPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oLTUpO1xyXG4gIGFjdGl2ZVF1ZXN0aW9uU3RyZWFtJCA9IHRoaXMuYWN0aXZlUXVlc3Rpb25JbmRleC5hc09ic2VydmFibGUoKTtcclxuICBwdWJsaWMgY3VycmVudFBhZ2VOdW1iZXI6IG51bWJlciA9IDE7XHJcbiAgcHVibGljIGFjdGl2ZVF1ZXN0aW9uID0gMDtcclxuICBzaG93QWRkUGFnZU9wdGlvbiA9IHRydWU7XHJcbiAgc2hvd1BhZ2VEZXRhaWxzID0gZmFsc2U7XHJcbiAgcHVibGljIHNjb3JlID0ge1xyXG4gICAgZGVmYXVsdFNjb3JlOiAxLFxyXG4gICAgbmVnYXRpdmVTY29yZTogMFxyXG4gIH1cclxuICBwdWJsaWMgYWxsUGFnZXM6IGFueSA9IFtdO1xyXG4gIHN0ZXBJZGVudGlmaWVyID0gJ3BhZ2VzY3JlZW4nOyAvLyB0aGlzIHZhbHVlIGNhbiBiZSBcIndlbGNvbWVzY3JlZW5cIixcInRoYW5reW91c2NyZWVuXCIsXCJwYWdlc2NyZWVuXCIgb25seVxyXG4gIGFzc2Vzc21lbnRJZCAhOiBhbnk7XHJcbiAgcHVibGljIHNldHRpbmdzOiBhbnkgPSB7XHJcbiAgICBhc3Nlc3NtZW50TW9kZTogZmFsc2UsXHJcbiAgICBkZWZhdWx0U2NvcmU6IDEsXHJcbiAgICBuZWdhdGl2ZVNjb3JlQ3JpdGVyaWE6ICdGQUlMRUQnLFxyXG4gICAgbmVnYXRpdmVTY29yZTogMCxcclxuICAgIHdlaWdodGFnZUVuYWJsZWQ6IGZhbHNlLFxyXG4gICAgc2V0dGluZ3NFbmFibGVkOiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgZm9ybXNQYWdlOiBhbnkgPSB7XHJcbiAgICB2ZXJzaW9uOiAyLFxyXG4gICAgcXVlc3Rpb25SYW5kb21pemU6IHRydWUsXHJcbiAgICBhbm9ueW1vdXNSZXNwb25zZTogZmFsc2UsXHJcbiAgICBoYXNXZWxjb21lOiBmYWxzZSxcclxuICAgIGhhc1dlbGNvbWVEZXNjcmlwdGlvbjogdHJ1ZSxcclxuICAgIHdlbGNvbWVUZXh0OiAnJyxcclxuICAgIGhhc1dlbGNvbWVJbWFnZTogdHJ1ZSxcclxuICAgIHdlbGNvbWVJbWFnZTogJycsXHJcbiAgICB3ZWxjb21lRGVzY3JpcHRpb246ICcnLFxyXG4gICAgaGFzVGhhbmtzOiBmYWxzZSxcclxuICAgIGhhc1RoYW5reW91SW1hZ2U6IGZhbHNlLFxyXG4gICAgdGhhbmt5b3VUZXh0OiAnJyxcclxuICAgIHRoYW5reW91SW1hZ2U6ICcnLFxyXG4gICAgaGFzVGhhbmt5b3VEZXNjcmlwdGlvbjogdHJ1ZSxcclxuICAgIHRoYW5reW91RGVzY3JpcHRpb246ICcnLFxyXG4gICAgZWxlbWVudHM6IFtdLFxyXG4gICAgcGFnZURldGFpbHNMaXN0OiBbXSxcclxuICAgIGN1c3RvbVJlc3BvbnNlU2V0OiBbXSxcclxuICAgIHNldHRpbmdzOiB0aGlzLnNldHRpbmdzLFxyXG4gICAgcmVzcG9uc2VTZWdtZW50OiB0aGlzLmluaXRpYWxpemVFbXB0eVJlc3BvbnNlU2VnbWVudCgpXHJcbiAgfTtcclxuXHJcbiAgaW5pdGlhbGl6ZUVtcHR5UmVzcG9uc2VTZWdtZW50KCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgIG1heFNjb3JlOiAxMCxcclxuICAgICAgc2VnbWVudHM6IFtcclxuXHJcbiAgICAgIF1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwbG9hZEhhbmRsZXIoZm9ybURhdGE6IGFueSwgZGVzdGluYXRpb246IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4odGhpcy5lbnYuZmlsZVVwbG9hZEVuZFBvaW50ICsgZGVzdGluYXRpb24sIGZvcm1EYXRhKTtcclxuICAgIC8vcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oXCJlbnZcIiArIGRlc3RpbmF0aW9uLCBmb3JtRGF0YSk7XHJcbiAgfVxyXG5cclxuICBhZGRRdWVzdGlvbihldnQ6IGFueSwgaW5kZXg/OiBudW1iZXIpIHtcclxuICAgIHN3aXRjaCAoZXZ0LnRyaW0oKSkge1xyXG4gICAgICBjYXNlICd3ZWxjb21lJzoge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2VOdW1iZXIgPSAtMTtcclxuICAgICAgICB0aGlzLnN0ZXBJZGVudGlmaWVyID0gJ3dlbGNvbWVzY3JlZW4nO1xyXG4gICAgICAgIHRoaXMuZm9ybXNQYWdlLmhhc1dlbGNvbWUgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ3RoYW5reW91Jzoge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2VOdW1iZXIgPSAtMjtcclxuICAgICAgICB0aGlzLnN0ZXBJZGVudGlmaWVyID0gJ3RoYW5reW91c2NyZWVuJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdtdWx0aXBsZS1jaG9pY2UnOiB7XHJcbiAgICAgICAgdGhpcy5zZXRUb1BhZ2Vmcm9tV2VsY29tZSgpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlTXVsdGlwbGVDaG9pY2UoaW5kZXgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2NoZWNrYm94Jzoge1xyXG4gICAgICAgIHRoaXMuc2V0VG9QYWdlZnJvbVdlbGNvbWUoKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZUNoZWNrYm94KGluZGV4KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdzdGFyLXJhdGluZyc6IHtcclxuICAgICAgICB0aGlzLnNldFRvUGFnZWZyb21XZWxjb21lKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVTdGFyUmF0aW5nKGluZGV4KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdzaW5nbGUtdGV4dGJveCc6IHtcclxuICAgICAgICB0aGlzLnNldFRvUGFnZWZyb21XZWxjb21lKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVTaW5nbGVUZXh0Ym94KGluZGV4KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdjb21tZW50LWJveCc6IHtcclxuICAgICAgICB0aGlzLnNldFRvUGFnZWZyb21XZWxjb21lKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVDb21tZW50Ym94KGluZGV4KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdtYXRyaXgtZHJvcGRvd24nOiB7XHJcbiAgICAgICAgdGhpcy5zZXRUb1BhZ2Vmcm9tV2VsY29tZSgpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlTWF0cml4RHJvcGRvd24oaW5kZXgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2Ryb3Bkb3duJzoge1xyXG4gICAgICAgIHRoaXMuc2V0VG9QYWdlZnJvbVdlbGNvbWUoKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZURyb3Bkb3duKGluZGV4KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdzbGlkZXInOiB7XHJcbiAgICAgICAgdGhpcy5zZXRUb1BhZ2Vmcm9tV2VsY29tZSgpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlU2xpZGVyKGluZGV4KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdyYXRpbmctc2NhbGUnOiB7XHJcbiAgICAgICAgdGhpcy5zZXRUb1BhZ2Vmcm9tV2VsY29tZSgpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlUmF0aW5nU2NhbGUoaW5kZXgpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnbXVsdGlwbGUtdGV4dGJveCc6IHtcclxuICAgICAgICB0aGlzLnNldFRvUGFnZWZyb21XZWxjb21lKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVNdWx0aXBsZVRleHRib3goaW5kZXgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2RhdGUtdGltZSc6IHtcclxuICAgICAgICB0aGlzLnNldFRvUGFnZWZyb21XZWxjb21lKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVEYXRlVGltZShpbmRleCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnZmlsZS11cGxvYWQnOiB7XHJcbiAgICAgICAgdGhpcy5zZXRUb1BhZ2Vmcm9tV2VsY29tZSgpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRmlsZVVwbG9hZChpbmRleCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAncmFua2luZyc6IHtcclxuICAgICAgICB0aGlzLnNldFRvUGFnZWZyb21XZWxjb21lKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVSYW5raW5nKGluZGV4KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdzdGFyLXJhdGluZyc6IHtcclxuICAgICAgICB0aGlzLnNldFRvUGFnZWZyb21XZWxjb21lKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVTdGFyUmF0aW5nKGluZGV4KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VG9QYWdlZnJvbVdlbGNvbWUoKSB7XHJcbiAgICBpZiAoWyd0aGFua3lvdXNjcmVlbicsICd3ZWxjb21lc2NyZWVuJ10uaW5jbHVkZXModGhpcy5zdGVwSWRlbnRpZmllcikpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZU51bWJlciA9IHRoaXMuYWxsUGFnZXMubGVuZ3RoO1xyXG4gICAgICB0aGlzLnN0ZXBJZGVudGlmaWVyID0gJ3BhZ2VzY3JlZW4nO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgd2hldGhlciB0byBkaXNwbGF5IFBhZ2UgRGV0YWlscyBvciBBZGQgUGFnZSB0aWx0ZSBvcHRpb25cclxuICAgKi9cclxuICBjaGVja0ZvclBhZ2VEZXRhaWxzKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2VEZXRhaWxzID09PSB1bmRlZmluZWQgfHwgdGhpcy5jdXJyZW50UGFnZURldGFpbHMucGFnZU5hbWUgPT09ICcnKSB7XHJcbiAgICAgIHRoaXMuc2hvd0FkZFBhZ2VPcHRpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLnNob3dQYWdlRGV0YWlscyA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93QWRkUGFnZU9wdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNob3dQYWdlRGV0YWlscyA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBxdWVzdGlvbiBvZiB0eXBlIG11bHRpcGxlIGNob2ljZVxyXG4gICAqIEBwYXJhbSBpbmRleCBJbmRleCBhdCB3aGljaCBxdWVzdGlvbiBuZWVkcyB0byBiZSBjcmVhdGVkXHJcbiAgICovXHJcbiAgY3JlYXRlTXVsdGlwbGVDaG9pY2UoaW5kZXg/OiBhbnkpIHtcclxuXHJcbiAgICBjb25zdCBlbGVtZW50ID0ge1xyXG4gICAgICB0eXBlOiAnbXVsdGlwbGUtY2hvaWNlJywgbmFtZTogYGAsIHBhZ2U6IHRoaXMuY3VycmVudFBhZ2VOdW1iZXIsIG90aGVyQ29uZmlnOiB7IGNvbG9yOiAnIzAwMDAwMCcsIGlzRmFpbGVkOiBmYWxzZSwgc2NvcmU6IHRoaXMuc2NvcmUuZGVmYXVsdFNjb3JlIH0sXHJcbiAgICAgIGlzUmVxdWlyZWQ6IGZhbHNlLCB0aXRsZTogJycsIGhhc0Rlc2NyaXB0aW9uOiBmYWxzZSwgZGVzY3JpcHRpb246ICcnLCBoYXNDb21tZW50czogZmFsc2UsIGNvbW1lbnRzOiAnJyxcclxuICAgICAgcmFuZG9taXplOiBmYWxzZSwgaGFzT3RoZXI6IGZhbHNlLCBvdGhlclZhbHVlOiAnT3RoZXInLCBhbGlnbm1lbnQ6IGZhbHNlLCByZXZlcnNlOiBmYWxzZSwgdmlzaWJpbGl0eUxvZ2ljOiBbXSwgY2hvaWNlczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiAnJywgdmFsdWU6IDEsIGlzU2VsZWN0ZWQ6IGZhbHNlLCByZXF1aXJlZDogMCwgaGFzSGVscGluZ0xhYmVsOiBmYWxzZSxcclxuICAgICAgICAgIGhlbHBpbmdMYWJlbDogJycsIGlzRmFpbGVkOiBmYWxzZSwgc2NvcmU6IHRoaXMuc2NvcmUuZGVmYXVsdFNjb3JlLCBjb2xvcjogdGhpcy5nZW5lcmF0ZVJhbmRvbUNvbG9yKClcclxuICAgICAgICB9XVxyXG4gICAgfTtcclxuICAgIChpbmRleCA9PT0gdW5kZWZpbmVkKSA/IHRoaXMub3BlcmF0aW9uT25DcmVhdGVJZkluZGV4VW5kZWZpbmVkKGVsZW1lbnQpIDogdGhpcy5vcGVyYXRpb25PbkNyZWF0ZUlmSW5kZXhEZWZpbmVkKGVsZW1lbnQsIGluZGV4KTtcclxuICAgIHRoaXMuc29ydFF1ZXN0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgcXVlc3Rpb24gb2YgdHlwZSBjaGVja2JveFxyXG4gICAqIEBwYXJhbSBpbmRleCBJbmRleCBhdCB3aGljaCBxdWVzdGlvbiBuZWVkcyB0byBiZSBjcmVhdGVkXHJcbiAgICovXHJcbiAgY3JlYXRlQ2hlY2tib3goaW5kZXg/OiBhbnkpIHtcclxuXHJcbiAgICBjb25zdCBlbGVtZW50ID0ge1xyXG4gICAgICB0eXBlOiAnY2hlY2tib3gnLCBuYW1lOiAnJywgcGFnZTogdGhpcy5jdXJyZW50UGFnZU51bWJlciwgb3RoZXJDb25maWc6IHsgY29sb3I6ICcjMDAwMDAwJywgaXNGYWlsZWQ6IGZhbHNlLCBzY29yZTogdGhpcy5zY29yZS5kZWZhdWx0U2NvcmUgfSxcclxuICAgICAgaXNSZXF1aXJlZDogZmFsc2UsIHRpdGxlOiAnJywgaGFzRGVzY3JpcHRpb246IGZhbHNlLCBkZXNjcmlwdGlvbjogJycsIGhhc0NvbW1lbnRzOiBmYWxzZSwgY29tbWVudHM6ICcnLFxyXG4gICAgICByYW5kb21pemU6IGZhbHNlLCBoYXNPdGhlcjogZmFsc2UsIG90aGVyVmFsdWU6ICdPdGhlcicsIGFsaWdubWVudDogZmFsc2UsIHJldmVyc2U6IGZhbHNlLFxyXG4gICAgICBpc1Jlc3BvbmRlbnRBdHRhY2htZW50OiBmYWxzZSwgdXNlckF0dGFjaGVkRmlsZXM6IFtdLCBpc1Jlc3BvbmRlbnRDb21tZW50OiBmYWxzZSwgdXNlckNvbW1lbnRzOiAnJywgdmlzaWJpbGl0eUxvZ2ljOiBbXSwgY2hvaWNlczpcclxuICAgICAgICBbe1xyXG4gICAgICAgICAgdGl0bGU6ICcnLCB2YWx1ZTogMSwgaXNTZWxlY3RlZDogZmFsc2UsIHJlcXVpcmVkOiAwLCBoYXNIZWxwaW5nTGFiZWw6IGZhbHNlLFxyXG4gICAgICAgICAgaGVscGluZ0xhYmVsOiAnJywgaXNGYWlsZWQ6IGZhbHNlLCBzY29yZTogdGhpcy5zY29yZS5kZWZhdWx0U2NvcmUsIGNvbG9yOiB0aGlzLmdlbmVyYXRlUmFuZG9tQ29sb3IoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICB9O1xyXG4gICAgKGluZGV4ID09PSB1bmRlZmluZWQpID8gdGhpcy5vcGVyYXRpb25PbkNyZWF0ZUlmSW5kZXhVbmRlZmluZWQoZWxlbWVudCkgOiB0aGlzLm9wZXJhdGlvbk9uQ3JlYXRlSWZJbmRleERlZmluZWQoZWxlbWVudCwgaW5kZXgpO1xyXG4gICAgdGhpcy5zb3J0UXVlc3Rpb24oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBxdWVzdGlvbiBvZiB0eXBlIHN0YXIgcmF0aW5nXHJcbiAgICogQHBhcmFtIGluZGV4IEluZGV4IGF0IHdoaWNoIHF1ZXN0aW9uIG5lZWRzIHRvIGJlIGNyZWF0ZWRcclxuICAgKiBbTm90ZV06IFJhdGluZyBsYWJlbCB0eXBlIGNhbiB0YWtlIDIgdmFsdWVzICdzcGVjaWZpYycvJ3NjYWxlJ1xyXG4gICAqL1xyXG4gIGNyZWF0ZVN0YXJSYXRpbmcoaW5kZXg/OiBhbnkpIHtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSB7XHJcbiAgICAgIHR5cGU6ICdzdGFyLXJhdGluZycsIG5hbWU6ICcnLCBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlTnVtYmVyLCBpc1JlcXVpcmVkOiBmYWxzZSwgdGl0bGU6ICcnLCBoYXNEZXNjcmlwdGlvbjogZmFsc2UsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiAnJywgaGFzQ29tbWVudHM6IGZhbHNlLCBjb21tZW50czogJycsIHJhbmRvbWl6ZTogZmFsc2UsIGhhc090aGVyOiBmYWxzZSwgYWxpZ25tZW50OiBmYWxzZSwgcmV2ZXJzZTogZmFsc2UsXHJcbiAgICAgIGlzUmVzcG9uZGVudEF0dGFjaG1lbnQ6IGZhbHNlLCB1c2VyQXR0YWNoZWRGaWxlczogW10sIGlzUmVzcG9uZGVudENvbW1lbnQ6IGZhbHNlLCB1c2VyQ29tbWVudHM6ICcnLCBjdXJzb3JUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgY3Vyc29yQ29sb3I6ICcjZmY4MDAwJywgc2NhbGU6IDIsIHN0YXJWYWx1ZTogJycsIGhhc1JhdGluZ0xhYmVsOiBmYWxzZSwgcmF0aW5nTGFiZWxUeXBlOiAnc3BlY2lmaWMnLFxyXG4gICAgICBzY2FsZVJhbmdlRnJvbTogJ05vdCBhdCBhbGwgbGlrZWx5JyxcclxuICAgICAgc2NhbGVSYW5nZVRvOiAnRXh0cmVtZSBMaWtlbHknLCB2aXNpYmlsaXR5TG9naWM6IFtdLFxyXG4gICAgICBjaG9pY2VzOiBbXHJcbiAgICAgICAgeyB0aXRsZTogJycsIGlzVmlzaWJsZTogdHJ1ZSwgdmFsdWU6IDAsIGlzU2VsZWN0ZWQ6IGZhbHNlLCByZXF1aXJlZDogMCwgaGFzSGVscGluZ0xhYmVsOiB0cnVlLCBoZWxwaW5nTGFiZWw6ICcnIH0sXHJcbiAgICAgICAgeyB0aXRsZTogJycsIGlzVmlzaWJsZTogdHJ1ZSwgdmFsdWU6IDEsIGlzU2VsZWN0ZWQ6IGZhbHNlLCByZXF1aXJlZDogMCwgaGFzSGVscGluZ0xhYmVsOiB0cnVlLCBoZWxwaW5nTGFiZWw6ICcnIH0sXHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgICAoaW5kZXggPT09IHVuZGVmaW5lZCkgPyB0aGlzLm9wZXJhdGlvbk9uQ3JlYXRlSWZJbmRleFVuZGVmaW5lZChlbGVtZW50KSA6IHRoaXMub3BlcmF0aW9uT25DcmVhdGVJZkluZGV4RGVmaW5lZChlbGVtZW50LCBpbmRleCk7XHJcbiAgICB0aGlzLnNvcnRRdWVzdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIHF1ZXN0aW9uIG9mIHR5cGUgc2luZ2xlIHRleHRib3hcclxuICAgKiBAcGFyYW0gaW5kZXggSW5kZXggYXQgd2hpY2ggcXVlc3Rpb24gbmVlZHMgdG8gYmUgY3JlYXRlZFxyXG4gICAqL1xyXG4gIGNyZWF0ZVNpbmdsZVRleHRib3goaW5kZXg/OiBhbnkpIHtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSB7XHJcbiAgICAgIHR5cGU6ICdzaW5nbGUtdGV4dGJveCcsIG5hbWU6ICcnLCBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlTnVtYmVyLFxyXG4gICAgICBoYXNWYWxpZGF0aW9uOiBmYWxzZSwgdmFsaWRhdGlvblR5cGU6ICcnLCBpc1JlcXVpcmVkOiBmYWxzZSwgaGFzQ2hhcmFjdGVyTGVuZ3RoOiBmYWxzZSwgbWluQ2hhcmFjdGVyTGVuZ3RoOiAwLFxyXG4gICAgICBtYXhDaGFyYWN0ZXJMZW5ndGg6IDEwMCwgdGl0bGU6ICcnLCBoYXNEZXNjcmlwdGlvbjogZmFsc2UsIGRlc2NyaXB0aW9uOiAnJywgaGFzQ29tbWVudHM6IGZhbHNlLCBjb21tZW50czogJycsXHJcbiAgICAgIHJhbmRvbWl6ZTogZmFsc2UsIGhhc090aGVyOiBmYWxzZSwgb3RoZXJWYWx1ZTogJ090aGVyJywgYWxpZ25tZW50OiBmYWxzZSwgcmV2ZXJzZTogZmFsc2UsXHJcbiAgICAgIGlzUmVzcG9uZGVudEF0dGFjaG1lbnQ6IGZhbHNlLCB1c2VyQXR0YWNoZWRGaWxlczogW10sIGlzUmVzcG9uZGVudENvbW1lbnQ6IGZhbHNlLCB1c2VyQ29tbWVudHM6ICcnLCB2aXNpYmlsaXR5TG9naWM6IFtdLFxyXG4gICAgICBjaG9pY2VzOiBbeyB0aXRsZTogJycsIHZhbHVlOiAxLCBpc1NlbGVjdGVkOiBmYWxzZSwgcmVxdWlyZWQ6IDAsIGhhc0hlbHBpbmdMYWJlbDogdHJ1ZSwgaGVscGluZ0xhYmVsOiAnJyB9XVxyXG4gICAgfTtcclxuXHJcbiAgICAoaW5kZXggPT09IHVuZGVmaW5lZCkgPyB0aGlzLm9wZXJhdGlvbk9uQ3JlYXRlSWZJbmRleFVuZGVmaW5lZChlbGVtZW50KSA6IHRoaXMub3BlcmF0aW9uT25DcmVhdGVJZkluZGV4RGVmaW5lZChlbGVtZW50LCBpbmRleCk7XHJcblxyXG4gICAgdGhpcy5zb3J0UXVlc3Rpb24oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBxdWVzdGlvbiBvZiB0eXBlIGNvbW1lbnQgYm94XHJcbiAgICogQHBhcmFtIGluZGV4IEluZGV4IGF0IHdoaWNoIHF1ZXN0aW9uIG5lZWRzIHRvIGJlIGNyZWF0ZWRcclxuICAgKi9cclxuICBjcmVhdGVDb21tZW50Ym94KGluZGV4PzogYW55KSB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0ge1xyXG4gICAgICB0eXBlOiAnY29tbWVudC1ib3gnLCBuYW1lOiAnJywgcGFnZTogdGhpcy5jdXJyZW50UGFnZU51bWJlcixcclxuICAgICAgaXNSZXF1aXJlZDogZmFsc2UsIHRpdGxlOiAnJywgaGFzRGVzY3JpcHRpb246IGZhbHNlLCBkZXNjcmlwdGlvbjogJycsIGhhc0NvbW1lbnRzOiBmYWxzZSwgY29tbWVudHM6ICcnLFxyXG4gICAgICBoYXNDaGFyYWN0ZXJMZW5ndGg6IGZhbHNlLCBtaW5DaGFyYWN0ZXJMZW5ndGg6IDAsIG1heENoYXJhY3Rlckxlbmd0aDogMCwgcmFuZG9taXplOiBmYWxzZSwgaGFzT3RoZXI6IGZhbHNlLFxyXG4gICAgICBvdGhlclZhbHVlOiAnT3RoZXInLCBhbGlnbm1lbnQ6IGZhbHNlLCByZXZlcnNlOiBmYWxzZSwgaXNSZXNwb25kZW50QXR0YWNobWVudDogZmFsc2UsIHVzZXJBdHRhY2hlZEZpbGVzOiBbXSxcclxuICAgICAgaXNSZXNwb25kZW50Q29tbWVudDogZmFsc2UsIHVzZXJDb21tZW50czogJycsIHZpc2liaWxpdHlMb2dpYzogW10sIGNob2ljZXM6IFtcclxuICAgICAgICB7IHRpdGxlOiAnJywgdmFsdWU6IDEsIGlzU2VsZWN0ZWQ6IGZhbHNlLCByZXF1aXJlZDogMCwgaGFzSGVscGluZ0xhYmVsOiBmYWxzZSwgaGVscGluZ0xhYmVsOiAnJywgaW1hZ2VVUkw6ICcnIH0sXHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgICAoaW5kZXggPT09IHVuZGVmaW5lZCkgPyB0aGlzLm9wZXJhdGlvbk9uQ3JlYXRlSWZJbmRleFVuZGVmaW5lZChlbGVtZW50KSA6IHRoaXMub3BlcmF0aW9uT25DcmVhdGVJZkluZGV4RGVmaW5lZChlbGVtZW50LCBpbmRleCk7XHJcbiAgICB0aGlzLnNvcnRRdWVzdGlvbigpO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBxdWVzdGlvbiBvZiB0eXBlIG1hdHJpeCBvZiBkcm9wZG93blxyXG4gICAqIEBwYXJhbSBpbmRleCBJbmRleCBhdCB3aGljaCBxdWVzdGlvbiBuZWVkcyB0byBiZSBjcmVhdGVkXHJcbiAgICovXHJcbiAgY3JlYXRlTWF0cml4RHJvcGRvd24oaW5kZXg/OiBhbnkpIHtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSB7XHJcbiAgICAgIHR5cGU6ICdtYXRyaXgtZHJvcGRvd24nLCBuYW1lOiAnJywgcGFnZTogdGhpcy5jdXJyZW50UGFnZU51bWJlciwgb3RoZXJDb25maWc6IHsgY29sb3I6ICcjMDAwMDAwJywgaXNGYWlsZWQ6IGZhbHNlLCBzY29yZTogMSB9LFxyXG4gICAgICBpc1JlcXVpcmVkOiBmYWxzZSwgdGl0bGU6ICcnLCBoYXNEZXNjcmlwdGlvbjogZmFsc2UsIGRlc2NyaXB0aW9uOiAnJywgaGFzQ29tbWVudHM6IGZhbHNlLCBjb21tZW50czogJycsXHJcbiAgICAgIHJhbmRvbWl6ZTogZmFsc2UsIGhhc090aGVyOiBmYWxzZSwgb3RoZXJWYWx1ZTogJ090aGVyJywgYWxpZ25tZW50OiBmYWxzZSwgcmV2ZXJzZTogZmFsc2UsXHJcbiAgICAgIGlzUmVzcG9uZGVudEF0dGFjaG1lbnQ6IGZhbHNlLCB1c2VyQXR0YWNoZWRGaWxlczogW10sIGlzUmVzcG9uZGVudENvbW1lbnQ6IGZhbHNlLCB1c2VyQ29tbWVudHM6ICcnLCB2aXNpYmlsaXR5TG9naWM6IFtdLFxyXG4gICAgICBjaG9pY2VzOiBbeyB0aXRsZTogJycsIHZhbHVlOiAxLCBpc1NlbGVjdGVkOiBmYWxzZSwgcmVxdWlyZWQ6IDAsIGhhc0hlbHBpbmdMYWJlbDogZmFsc2UsIGhlbHBpbmdMYWJlbDogJycgfV0sXHJcbiAgICAgIGNvbHVtbnM6IFt7XHJcbiAgICAgICAgdGl0bGU6ICcnLCB2YWx1ZTogMSwgd2VpZ2h0OiAwLCBpc1NlbGVjdGVkOiBmYWxzZSwgcmVxdWlyZWQ6IDAsIGhhc0hlbHBpbmdMYWJlbDogZmFsc2UsIGhlbHBpbmdMYWJlbDogJycsXHJcbiAgICAgICAgY2hvaWNlczogW3sgdGl0bGU6ICcnLCB2YWx1ZTogMSwgaXNTZWxlY3RlZDogZmFsc2UsIHJlcXVpcmVkOiAwLCBoYXNIZWxwaW5nTGFiZWw6IGZhbHNlLCBoZWxwaW5nTGFiZWw6ICcnIH1dXHJcbiAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfTtcclxuICAgIChpbmRleCA9PT0gdW5kZWZpbmVkKSA/IHRoaXMub3BlcmF0aW9uT25DcmVhdGVJZkluZGV4VW5kZWZpbmVkKGVsZW1lbnQpIDogdGhpcy5vcGVyYXRpb25PbkNyZWF0ZUlmSW5kZXhEZWZpbmVkKGVsZW1lbnQsIGluZGV4KTtcclxuICAgIHRoaXMuc29ydFF1ZXN0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgcXVlc3Rpb24gb2YgdHlwZSBkcm9wZG93blxyXG4gICAqIEBwYXJhbSBpbmRleCBJbmRleCBhdCB3aGljaCBxdWVzdGlvbiBuZWVkcyB0byBiZSBjcmVhdGVkXHJcbiAgICovXHJcbiAgY3JlYXRlRHJvcGRvd24oaW5kZXg/OiBhbnkpIHtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSB7XHJcbiAgICAgIHR5cGU6ICdkcm9wZG93bicsIG5hbWU6ICcnLCBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlTnVtYmVyLCBvdGhlckNvbmZpZzogeyBjb2xvcjogJyMwMDAwMDAnLCBpc0ZhaWxlZDogZmFsc2UsIHNjb3JlOiB0aGlzLnNjb3JlLmRlZmF1bHRTY29yZSB9LFxyXG4gICAgICBpc1JlcXVpcmVkOiBmYWxzZSwgdGl0bGU6ICcnLCBoYXNEZXNjcmlwdGlvbjogZmFsc2UsIGRlc2NyaXB0aW9uOiAnJywgaGFzQ29tbWVudHM6IGZhbHNlLCBjb21tZW50czogJycsXHJcbiAgICAgIHJhbmRvbWl6ZTogZmFsc2UsIGhhc090aGVyOiBmYWxzZSwgb3RoZXJWYWx1ZTogJ090aGVyJywgYWxpZ25tZW50OiBmYWxzZSwgcmV2ZXJzZTogZmFsc2UsXHJcbiAgICAgIGlzUmVzcG9uZGVudEF0dGFjaG1lbnQ6IGZhbHNlLCB1c2VyQXR0YWNoZWRGaWxlczogW10sIGlzUmVzcG9uZGVudENvbW1lbnQ6IGZhbHNlLCB1c2VyQ29tbWVudHM6ICcnLCB2aXNpYmlsaXR5TG9naWM6IFtdLFxyXG4gICAgICBjaG9pY2VzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGl0bGU6ICcnLCB2YWx1ZTogMSwgaXNTZWxlY3RlZDogZmFsc2UsIHJlcXVpcmVkOiAwLCBoYXNIZWxwaW5nTGFiZWw6IGZhbHNlLCBoZWxwaW5nTGFiZWw6ICcnLFxyXG4gICAgICAgICAgaXNGYWlsZWQ6IGZhbHNlLCBzY29yZTogdGhpcy5zY29yZS5kZWZhdWx0U2NvcmUsIGNvbG9yOiB0aGlzLmdlbmVyYXRlUmFuZG9tQ29sb3IoKVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfTtcclxuICAgIChpbmRleCA9PT0gdW5kZWZpbmVkKSA/IHRoaXMub3BlcmF0aW9uT25DcmVhdGVJZkluZGV4VW5kZWZpbmVkKGVsZW1lbnQpIDogdGhpcy5vcGVyYXRpb25PbkNyZWF0ZUlmSW5kZXhEZWZpbmVkKGVsZW1lbnQsIGluZGV4KTtcclxuICAgIHRoaXMuc29ydFF1ZXN0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgcXVlc3Rpb24gb2YgdHlwZSBzbGlkZXJcclxuICAgKiBAcGFyYW0gaW5kZXggSW5kZXggYXQgd2hpY2ggcXVlc3Rpb24gbmVlZHMgdG8gYmUgY3JlYXRlZFxyXG4gICAqL1xyXG4gIGNyZWF0ZVNsaWRlcihpbmRleD86IGFueSkge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IHtcclxuICAgICAgdHlwZTogJ3NsaWRlcicsIG5hbWU6ICcnLCBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlTnVtYmVyLFxyXG4gICAgICBpc1JlcXVpcmVkOiBmYWxzZSwgdGl0bGU6ICcnLCBoYXNEZXNjcmlwdGlvbjogZmFsc2UsIGRlc2NyaXB0aW9uOiAnJywgaGFzQ29tbWVudHM6IGZhbHNlLCBjb21tZW50czogJycsXHJcbiAgICAgIHJhbmRvbWl6ZTogZmFsc2UsIGhhc090aGVyOiBmYWxzZSwgb3RoZXJWYWx1ZTogJ090aGVyJywgYWxpZ25tZW50OiBmYWxzZSwgcmV2ZXJzZTogZmFsc2UsXHJcbiAgICAgIGlzUmVzcG9uZGVudEF0dGFjaG1lbnQ6IGZhbHNlLCB1c2VyQXR0YWNoZWRGaWxlczogW10sIGlzUmVzcG9uZGVudENvbW1lbnQ6IGZhbHNlLCB1c2VyQ29tbWVudHM6ICcnLCB2aXNpYmlsaXR5TG9naWM6IFtdLFxyXG4gICAgICBjaG9pY2VzOiBbeyB0aXRsZTogJycsIHZhbHVlOiAxLCBpc1NlbGVjdGVkOiBmYWxzZSwgcmVxdWlyZWQ6IDAsIGhhc0hlbHBpbmdMYWJlbDogZmFsc2UsIGhlbHBpbmdMYWJlbDogJycgfV0sXHJcbiAgICAgIGNlbnRlclJhbmdlOiBmYWxzZSwgYWRqdXN0U2NhbGU6IGZhbHNlLCBudW1lcmljQm94RW5hYmxlZDogZmFsc2UsIGxlZnQ6IDAsIGNlbnRlcjogMCwgcmlnaHQ6IDEwMCxcclxuICAgICAgc2NhbGVSYW5nZU1pbjogMCwgc2NhbGVSYW5nZU1heDogMTAwLCBzdGVwU2l6ZTogMTAsIHN0YXJ0UG9zaXRpb246IDAsIGVkaXRvclZhbHVlOiAwXHJcbiAgICB9O1xyXG4gICAgKGluZGV4ID09PSB1bmRlZmluZWQpID8gdGhpcy5vcGVyYXRpb25PbkNyZWF0ZUlmSW5kZXhVbmRlZmluZWQoZWxlbWVudCkgOiB0aGlzLm9wZXJhdGlvbk9uQ3JlYXRlSWZJbmRleERlZmluZWQoZWxlbWVudCwgaW5kZXgpO1xyXG4gICAgdGhpcy5zb3J0UXVlc3Rpb24oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBxdWVzdGlvbiBvZiB0eXBlIG1hdHJpeCByYXRpbmcgc2NhbGVcclxuICAgKiBAcGFyYW0gaW5kZXggSW5kZXggYXQgd2hpY2ggcXVlc3Rpb24gbmVlZHMgdG8gYmUgY3JlYXRlZFxyXG4gICAqL1xyXG4gIGNyZWF0ZVJhdGluZ1NjYWxlKGluZGV4PzogYW55KSB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0ge1xyXG4gICAgICB0eXBlOiAncmF0aW5nLXNjYWxlJywgbmFtZTogJycsIHBhZ2U6IHRoaXMuY3VycmVudFBhZ2VOdW1iZXIsXHJcbiAgICAgIGlzUmVxdWlyZWQ6IGZhbHNlLCB0aXRsZTogJycsIGhhc0Rlc2NyaXB0aW9uOiBmYWxzZSwgZGVzY3JpcHRpb246ICcnLCBoYXNDb21tZW50czogZmFsc2UsIGNvbW1lbnRzOiAnJyxcclxuICAgICAgcmFuZG9taXplOiBmYWxzZSwgaGFzT3RoZXI6IGZhbHNlLCBoYXNSYXRpbmdMYWJlbDogZmFsc2UsIHJhdGluZ0xhYmVsVHlwZTogJycsXHJcbiAgICAgIG90aGVyVmFsdWU6ICdPdGhlcicsIGhhc1dlaWdodDogZmFsc2UsIGFsaWdubWVudDogZmFsc2UsIHJldmVyc2U6IGZhbHNlLFxyXG4gICAgICBpc1Jlc3BvbmRlbnRBdHRhY2htZW50OiBmYWxzZSwgdXNlckF0dGFjaGVkRmlsZXM6IFtdLCBpc1Jlc3BvbmRlbnRDb21tZW50OiBmYWxzZSwgdXNlckNvbW1lbnRzOiAnJywgdmlzaWJpbGl0eUxvZ2ljOiBbXSxcclxuICAgICAgY2hvaWNlczogW3sgdGl0bGU6ICcnLCB2YWx1ZTogMSwgaXNTZWxlY3RlZDogZmFsc2UsIHJlcXVpcmVkOiAwLCBoYXNIZWxwaW5nTGFiZWw6IGZhbHNlLCBoZWxwaW5nTGFiZWw6ICcnIH1dLFxyXG4gICAgICBjb2x1bW5zOiBbeyB0aXRsZTogJycsIHZhbHVlOiAxLCB3ZWlnaHQ6IDAsIGlzU2VsZWN0ZWQ6IGZhbHNlLCByZXF1aXJlZDogMCwgaGFzSGVscGluZ0xhYmVsOiBmYWxzZSwgaGVscGluZ0xhYmVsOiAnJyB9XVxyXG4gICAgfTtcclxuICAgIChpbmRleCA9PT0gdW5kZWZpbmVkKSA/IHRoaXMub3BlcmF0aW9uT25DcmVhdGVJZkluZGV4VW5kZWZpbmVkKGVsZW1lbnQpIDogdGhpcy5vcGVyYXRpb25PbkNyZWF0ZUlmSW5kZXhEZWZpbmVkKGVsZW1lbnQsIGluZGV4KTtcclxuICAgIHRoaXMuc29ydFF1ZXN0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgcXVlc3Rpb24gb2YgdHlwZSByYW5raW5nXHJcbiAgICogQHBhcmFtIGluZGV4IEluZGV4IGF0IHdoaWNoIHF1ZXN0aW9uIG5lZWRzIHRvIGJlIGNyZWF0ZWRcclxuICAgKi9cclxuICBjcmVhdGVSYW5raW5nKGluZGV4PzogYW55KSB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0ge1xyXG4gICAgICB0eXBlOiAncmFua2luZycsIG5hbWU6ICcnLCBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlTnVtYmVyLFxyXG4gICAgICBpc1JlcXVpcmVkOiBmYWxzZSwgdGl0bGU6ICcnLCBoYXNEZXNjcmlwdGlvbjogZmFsc2UsIGRlc2NyaXB0aW9uOiAnJywgaGFzQ29tbWVudHM6IGZhbHNlLCBjb21tZW50czogJycsXHJcbiAgICAgIHJhbmRvbWl6ZTogZmFsc2UsIGhhc090aGVyOiBmYWxzZSwgb3RoZXJWYWx1ZTogJ090aGVyJywgaGFzUmF0aW5nTGFiZWw6IGZhbHNlLCBhbGlnbm1lbnQ6IGZhbHNlLFxyXG4gICAgICByZXZlcnNlOiBmYWxzZSwgb25seU51bWJlcjogdHJ1ZSwgaXNSZXNwb25kZW50QXR0YWNobWVudDogZmFsc2UsIHVzZXJBdHRhY2hlZEZpbGVzOiBbXSxcclxuICAgICAgaXNSZXNwb25kZW50Q29tbWVudDogZmFsc2UsIHVzZXJDb21tZW50czogJycsIHZpc2liaWxpdHlMb2dpYzogW10sIGNob2ljZXM6IFtcclxuICAgICAgICB7IHRpdGxlOiAnJywgdmFsdWU6IDEsIGlzU2VsZWN0ZWQ6IGZhbHNlLCByZXF1aXJlZDogMCwgaGFzSGVscGluZ0xhYmVsOiBmYWxzZSwgaGVscGluZ0xhYmVsOiAnJyB9LFxyXG4gICAgICBdXHJcbiAgICB9O1xyXG4gICAgKGluZGV4ID09PSB1bmRlZmluZWQpID8gdGhpcy5vcGVyYXRpb25PbkNyZWF0ZUlmSW5kZXhVbmRlZmluZWQoZWxlbWVudCkgOiB0aGlzLm9wZXJhdGlvbk9uQ3JlYXRlSWZJbmRleERlZmluZWQoZWxlbWVudCwgaW5kZXgpO1xyXG4gICAgdGhpcy5zb3J0UXVlc3Rpb24oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBxdWVzdGlvbiBvZiB0eXBlIG11bHRpcGxlIHRleHRib3hcclxuICAgKiBAcGFyYW0gaW5kZXggSW5kZXggYXQgd2hpY2ggcXVlc3Rpb24gbmVlZHMgdG8gYmUgY3JlYXRlZFxyXG4gICAqL1xyXG4gIGNyZWF0ZU11bHRpcGxlVGV4dGJveChpbmRleD86IGFueSkge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IHtcclxuICAgICAgdHlwZTogJ211bHRpcGxlLXRleHRib3gnLCBuYW1lOiAnJyxcclxuICAgICAgcGFnZTogdGhpcy5jdXJyZW50UGFnZU51bWJlciwgaXNSZXF1aXJlZDogZmFsc2UsIHRpdGxlOiAnJywgaGFzRGVzY3JpcHRpb246IGZhbHNlLCBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgIHJhbmRvbWl6ZTogZmFsc2UsIGhhc090aGVyOiBmYWxzZSwgaGFzQ29tbWVudHM6IGZhbHNlLCBjb21tZW50czogJycsIG90aGVyVmFsdWU6ICdPdGhlcicsIGhhc1JhdGluZ0xhYmVsOiBmYWxzZSxcclxuICAgICAgYWxpZ25tZW50OiBmYWxzZSwgcmV2ZXJzZTogZmFsc2UsIG9ubHlOdW1iZXI6IHRydWUsIGlzUmVzcG9uZGVudEF0dGFjaG1lbnQ6IGZhbHNlLCB1c2VyQXR0YWNoZWRGaWxlczogW10sXHJcbiAgICAgIGlzUmVzcG9uZGVudENvbW1lbnQ6IGZhbHNlLCB1c2VyQ29tbWVudHM6ICcnLCB2aXNpYmlsaXR5TG9naWM6IFtdLCBjaG9pY2VzOiBbXHJcbiAgICAgICAgeyB0aXRsZTogJycsIHZhbHVlOiAxLCBpc1NlbGVjdGVkOiBmYWxzZSwgcmVxdWlyZWQ6IDAsIGhhc0hlbHBpbmdMYWJlbDogZmFsc2UsIGhlbHBpbmdMYWJlbDogJycgfSxcclxuICAgICAgXVxyXG4gICAgfTtcclxuICAgIChpbmRleCA9PT0gdW5kZWZpbmVkKSA/IHRoaXMub3BlcmF0aW9uT25DcmVhdGVJZkluZGV4VW5kZWZpbmVkKGVsZW1lbnQpIDogdGhpcy5vcGVyYXRpb25PbkNyZWF0ZUlmSW5kZXhEZWZpbmVkKGVsZW1lbnQsIGluZGV4KTtcclxuICAgIHRoaXMuc29ydFF1ZXN0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgcXVlc3Rpb24gb2YgdHlwZSBkYXRlL3RpbWVcclxuICAgKiBAcGFyYW0gaW5kZXggSW5kZXggYXQgd2hpY2ggcXVlc3Rpb24gbmVlZHMgdG8gYmUgY3JlYXRlZFxyXG4gICAqL1xyXG4gIGNyZWF0ZURhdGVUaW1lKGluZGV4PzogYW55KSB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0ge1xyXG4gICAgICB0eXBlOiAnZGF0ZS10aW1lJywgbmFtZTogJycsIHBhZ2U6IHRoaXMuY3VycmVudFBhZ2VOdW1iZXIsXHJcbiAgICAgIGlzUmVxdWlyZWQ6IGZhbHNlLCB0aXRsZTogJycsIGhhc0Rlc2NyaXB0aW9uOiBmYWxzZSwgZGVzY3JpcHRpb246ICcnLCBoYXNDb21tZW50czogZmFsc2UsIGNvbW1lbnRzOiAnJyxcclxuICAgICAgcmFuZG9taXplOiBmYWxzZSwgaGFzT3RoZXI6IGZhbHNlLCBvdGhlclZhbHVlOiAnT3RoZXInLCBoYXNSYXRpbmdMYWJlbDogZmFsc2UsIGFsaWdubWVudDogZmFsc2UsXHJcbiAgICAgIHJldmVyc2U6IGZhbHNlLCBvbmx5TnVtYmVyOiB0cnVlLCBpc1Jlc3BvbmRlbnRBdHRhY2htZW50OiBmYWxzZSwgdXNlckF0dGFjaGVkRmlsZXM6IFtdLCBpc1Jlc3BvbmRlbnRDb21tZW50OiBmYWxzZSxcclxuICAgICAgdXNlckNvbW1lbnRzOiAnJywgdmlzaWJpbGl0eUxvZ2ljOiBbXSwgaGFzRGF0ZTogdHJ1ZSwgaGFzVGltZTogZmFsc2UsIGRhdGVGb3JtYXQ6ICdERC9NTS9ZWVlZJywgdGltZUZvcm1hdDogMjQsXHJcbiAgICAgIGNob2ljZXM6IFtcclxuICAgICAgICB7IHRpdGxlOiAnJywgdmFsdWU6IDEsIGlzU2VsZWN0ZWQ6IGZhbHNlLCByZXF1aXJlZDogMCwgaGFzSGVscGluZ0xhYmVsOiBmYWxzZSwgaGVscGluZ0xhYmVsOiAnJyB9LFxyXG5cclxuICAgICAgXSxcclxuICAgICAgZGF0ZTogeyB0aXRsZTogJycsIHZhbHVlOiAnJyB9LFxyXG4gICAgICB0aW1lOiB7IHRpdGxlOiAnJywgdmFsdWU6ICcnIH1cclxuICAgIH07XHJcbiAgICAoaW5kZXggPT09IHVuZGVmaW5lZCkgPyB0aGlzLm9wZXJhdGlvbk9uQ3JlYXRlSWZJbmRleFVuZGVmaW5lZChlbGVtZW50KSA6IHRoaXMub3BlcmF0aW9uT25DcmVhdGVJZkluZGV4RGVmaW5lZChlbGVtZW50LCBpbmRleCk7XHJcbiAgICB0aGlzLnNvcnRRdWVzdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIHF1ZXN0aW9uIG9mIHR5cGUgZmlsZSB1cGxvYWRcclxuICAgKiBAcGFyYW0gaW5kZXggSW5kZXggYXQgd2hpY2ggcXVlc3Rpb24gbmVlZHMgdG8gYmUgY3JlYXRlZFxyXG4gICAqL1xyXG4gIGNyZWF0ZUZpbGVVcGxvYWQoaW5kZXg/OiBhbnkpIHtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSB7XHJcbiAgICAgIHR5cGU6ICdmaWxlLXVwbG9hZCcsIG5hbWU6ICcnLCBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlTnVtYmVyLFxyXG4gICAgICBpc1JlcXVpcmVkOiBmYWxzZSwgdGl0bGU6ICcnLCBoYXNJbnN0cnVjdGlvbjogZmFsc2UsIGluc3RydWN0aW9uOiAnJywgaGFzRGVzY3JpcHRpb246IGZhbHNlLCBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgIGhhc0NvbW1lbnRzOiBmYWxzZSwgY29tbWVudHM6ICcnLCByYW5kb21pemU6IGZhbHNlLCBoYXNPdGhlcjogZmFsc2UsIG90aGVyVmFsdWU6ICdPdGhlcicsIGFsaWdubWVudDogZmFsc2UsIHJldmVyc2U6IGZhbHNlLFxyXG4gICAgICBmaWxlVHlwZVJlc3RyaWN0aW9uczogZmFsc2UsIGlzUmVzcG9uZGVudEF0dGFjaG1lbnQ6IGZhbHNlLCB1c2VyQXR0YWNoZWRGaWxlczogW10sIGlzUmVzcG9uZGVudENvbW1lbnQ6IGZhbHNlLCB1c2VyQ29tbWVudHM6ICcnLFxyXG4gICAgICB2aXNpYmlsaXR5TG9naWM6IFtdLCBjaG9pY2VzOiBbXHJcbiAgICAgICAgeyB0aXRsZTogJycsIHZhbHVlOiAxLCBpc1NlbGVjdGVkOiBmYWxzZSwgcmVxdWlyZWQ6IDAsIGhhc0hlbHBpbmdMYWJlbDogZmFsc2UsIGhlbHBpbmdMYWJlbDogJycgfV0sXHJcbiAgICAgIGFsbG93ZWRGaWxlVHlwZXM6IHtcclxuICAgICAgICBwZGY6IHRydWUsXHJcbiAgICAgICAgZG9jOiB0cnVlLFxyXG4gICAgICAgIHBuZzogdHJ1ZSxcclxuICAgICAgICBqcGc6IHRydWUsXHJcbiAgICAgICAgZ2lmOiB0cnVlXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICAoaW5kZXggPT09IHVuZGVmaW5lZCkgPyB0aGlzLm9wZXJhdGlvbk9uQ3JlYXRlSWZJbmRleFVuZGVmaW5lZChlbGVtZW50KSA6IHRoaXMub3BlcmF0aW9uT25DcmVhdGVJZkluZGV4RGVmaW5lZChlbGVtZW50LCBpbmRleCk7XHJcbiAgICB0aGlzLnNvcnRRdWVzdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIHF1ZXN0aW9uIG9mIHR5cGUgaW1hZ2UgY2hvaWNlXHJcbiAgICogQHBhcmFtIGluZGV4IEluZGV4IGF0IHdoaWNoIHF1ZXN0aW9uIG5lZWRzIHRvIGJlIGNyZWF0ZWRcclxuICAgKi9cclxuICBjcmVhdGVJbWFnZUNob2ljZShpbmRleD86IGFueSkge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IHtcclxuICAgICAgdHlwZTogJ2ltYWdlLWNob2ljZScsIG5hbWU6ICcnLCBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlTnVtYmVyLFxyXG4gICAgICBpc1JlcXVpcmVkOiBmYWxzZSwgdGl0bGU6ICcnLCBoYXNEZXNjcmlwdGlvbjogZmFsc2UsIGRlc2NyaXB0aW9uOiAnJywgaGFzQ29tbWVudHM6IGZhbHNlLCBjb21tZW50czogJycsXHJcbiAgICAgIHJhbmRvbWl6ZTogZmFsc2UsIGhhc090aGVyOiBmYWxzZSwgb3RoZXJWYWx1ZTogJ090aGVyJywgYWxpZ25tZW50OiBmYWxzZSwgcmV2ZXJzZTogZmFsc2UsXHJcbiAgICAgIGlzUmVzcG9uZGVudEF0dGFjaG1lbnQ6IGZhbHNlLCB1c2VyQXR0YWNoZWRGaWxlczogW10sIGlzUmVzcG9uZGVudENvbW1lbnQ6IGZhbHNlLCB1c2VyQ29tbWVudHM6ICcnLFxyXG4gICAgICB2aXNpYmlsaXR5TG9naWM6IFtdLCBjaG9pY2VzOiBbXHJcbiAgICAgICAgeyB0aXRsZTogJycsIHZhbHVlOiAxLCBpc1NlbGVjdGVkOiBmYWxzZSwgcmVxdWlyZWQ6IDAsIGhhc0hlbHBpbmdMYWJlbDogZmFsc2UsIGhlbHBpbmdMYWJlbDogJycsIGltYWdlVVJMOiAnJyB9XHJcblxyXG4gICAgICBdXHJcbiAgICB9O1xyXG4gICAgKGluZGV4ID09PSB1bmRlZmluZWQpID8gdGhpcy5vcGVyYXRpb25PbkNyZWF0ZUlmSW5kZXhVbmRlZmluZWQoZWxlbWVudCkgOiB0aGlzLm9wZXJhdGlvbk9uQ3JlYXRlSWZJbmRleERlZmluZWQoZWxlbWVudCwgaW5kZXgpO1xyXG4gICAgdGhpcy5zb3J0UXVlc3Rpb24oKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICogQ3JlYXRlcyBhbmQgYWRkcyB0aGUgcXVlc3Rpb24gdG8gbGlzdCBvZiBxdWVzdGlvbnMgaWYgYSBxdWVzdGlvbidzIGluZGV4IGlzIHVuZGVmaW5lZFxyXG4gKiBAcGFyYW0gZWxlbWVudCBEZXRhaWxzIG9mIHF1ZXN0aW9uIHRvIGJlIGNyZWF0ZWRcclxuICovXHJcbiAgb3BlcmF0aW9uT25DcmVhdGVJZkluZGV4VW5kZWZpbmVkKGVsZW1lbnQ6IGFueSkge1xyXG5cclxuICAgIGVsZW1lbnQubmFtZSA9IHRoaXMuZ2VuZXJhdGVRdWVzdGlvbk5hbWUodGhpcy5mb3Jtc1BhZ2UuZWxlbWVudHMubGVuZ3RoICsgMSksXHJcbiAgICAgIHRoaXMuZm9ybXNQYWdlLmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XHJcbiAgICB0aGlzLnNldEFjdGl2ZVF1ZXN0aW9uQmFzZWRPblBhZ2VMZW5ndGgoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW5kIGFkZHMgdGhlIHF1ZXN0aW9uIHRvIGxpc3Qgb2YgcXVlc3Rpb25zIGlmIGEgcXVlc3Rpb24ncyBpbmRleCBpcyBwcmVzZW50XHJcbiAgICogQHBhcmFtIGVsZW1lbnQgRGV0YWlscyBvZiBxdWVzdGlvbiB0byBiZSBjcmVhdGVkXHJcbiAgICogQHBhcmFtIGluZGV4IEluZGV4IGF0IHdoaWNoIHF1ZXN0aW9uIHNob3VsZCBiZSBjcmVhdGVkXHJcbiAgICovXHJcbiAgb3BlcmF0aW9uT25DcmVhdGVJZkluZGV4RGVmaW5lZChlbGVtZW50OiBhbnksIGluZGV4OiBhbnkpIHtcclxuXHJcbiAgICBlbGVtZW50Lm5hbWUgPSB0aGlzLmdlbmVyYXRlUXVlc3Rpb25OYW1lKGluZGV4ICsgMSk7XHJcbiAgICB0aGlzLmZvcm1zUGFnZS5lbGVtZW50cy5zcGxpY2UoaW5kZXggKyAxLCAwLCBlbGVtZW50KTtcclxuICAgIHRoaXMuYWN0aXZlUXVlc3Rpb24gPSBpbmRleCArIDE7XHJcbiAgICB0aGlzLmFjdGl2ZVF1ZXN0aW9uSW5kZXgubmV4dChpbmRleCArIDEpO1xyXG4gIH1cclxuICAvKipcclxuICAgICogU2V0cyB0aGUgYWN0aXZlIHF1ZXN0aW9uIGJhc2VkIG9uIHBhcnRpY3VsYXIgcGFnZVxyXG4gICAgKi9cclxuICBzZXRBY3RpdmVRdWVzdGlvbkJhc2VkT25QYWdlTGVuZ3RoKCkge1xyXG4gICAgbGV0IGNvdW50ID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRoaXMuY3VycmVudFBhZ2VOdW1iZXI7IGkrKykge1xyXG4gICAgICBjb3VudCArPSBbLi4udGhpcy5mb3Jtc1BhZ2UuZWxlbWVudHNdLnJlZHVjZShcclxuICAgICAgICAoY291bnRlcjogYW55LCBjdXJyZW50RWxlbWVudDogYW55KSA9PiAoaSA9PT0gY3VycmVudEVsZW1lbnQucGFnZSA/IGNvdW50ZXIgKyAxIDogY291bnRlciksIDApIC0gMTtcclxuICAgIH1cclxuICAgIHRoaXMuYWN0aXZlUXVlc3Rpb24gPSBjb3VudCArIHRoaXMuY3VycmVudFBhZ2VOdW1iZXIgLSAxO1xyXG4gICAgdGhpcy5hY3RpdmVRdWVzdGlvbkluZGV4Lm5leHQoY291bnQgKyB0aGlzLmN1cnJlbnRQYWdlTnVtYmVyIC0gMSk7XHJcblxyXG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgLy8gfSwgMTUwKTtcclxuICAgIC8vIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgLyoqXHJcbiogU29ydHMgdGhlIHF1ZXN0aW9ucyBiYXNlZCBvbiBwYWdlIG51bWJlclxyXG4qL1xyXG4gIHNvcnRRdWVzdGlvbigpIHtcclxuICAgIHRoaXMuZm9ybXNQYWdlLmVsZW1lbnRzLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBhLnBhZ2UgLSBiLnBhZ2U7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGVzIGEgdW5pcXVlIHF1ZXN0aW9uIG5hbWUgZm9yIG5ld2x5IGFkZGVkIHF1ZXN0aW9uXHJcbiAgICogQHBhcmFtIHF1ZXN0aW9uSW5kZXggSW5kZXggb2YgcXVlc3Rpb24gdG8gYmUgY3JlYXRlZFxyXG4gICAqL1xyXG4gIGdlbmVyYXRlUXVlc3Rpb25OYW1lKHF1ZXN0aW9uSW5kZXg6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBxdWVzdGlvbk5hbWVzID0gdGhpcy5mb3Jtc1BhZ2UuZWxlbWVudHMubWFwKChhOiBhbnkpID0+IGEubmFtZSk7XHJcbiAgICBpZiAocXVlc3Rpb25OYW1lcy5pbmNsdWRlcyhgJHt0aGlzLnByZWZpeEZvclF1ZXN0aW9uTmFtZX0ke3F1ZXN0aW9uSW5kZXh9YCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVRdWVzdGlvbk5hbWUocXVlc3Rpb25JbmRleCArIDEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgbmFtZSA9ICdRdWVzdGlvbl8nICsgcXVlc3Rpb25JbmRleC50b1N0cmluZygpO1xyXG4gICAgICByZXR1cm4gbmFtZTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2VuZXJhdGVSYW5kb21Db2xvcigpIHtcclxuICAgIC8vcmV0dXJuICcjJyArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDE2Nzc3MjE1KS50b1N0cmluZygxNik7XHJcbiAgICByZXR1cm4gJyMwMDAwMDAnXHJcbiAgfVxyXG5cclxuICAvKipcclxuICogU2V0cyB0aGUgcXVlc3Rpb24gYXMgYWN0aXZlIGJhc2VkIG9uIHRoZSBwYXJ0aWN1bGFyIGluZGV4XHJcbiAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiB0aGUgcXVlc3Rpb24gdG8gYmUgbWFya2VkIGFzIGFjdGl2ZSBxdWVzdGlvblxyXG4gKi9cclxuICBzZXRhY3RpdmVRdWVzdGlvbihpbmRleD86IGFueSkge1xyXG4gICAgdGhpcy5hY3RpdmVRdWVzdGlvbiA9IGluZGV4O1xyXG4gICAgdGhpcy5hY3RpdmVRdWVzdGlvbkluZGV4Lm5leHQoaW5kZXgpO1xyXG4gIH1cclxuICAvKipcclxuICogRHVwbGljYXRlcyBhIHF1ZXN0aW9uIHdpdGggcGFydGljdWxhciBpbmRleFxyXG4gKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgcXVlc3Rpb24gdG8gYmUgZHVwbGljYXRlZFxyXG4gKi9cclxuICBjb3B5UXVlc3Rpb24oaW5kZXg6IGFueSkge1xyXG4gICAgdGhpcy5zZXRhY3RpdmVRdWVzdGlvbihpbmRleCArIDEpO1xyXG4gICAgY29uc3QgQ09QWV9FTEVNRU5UID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZvcm1zUGFnZS5lbGVtZW50c1tpbmRleF0pKTtcclxuICAgIGlmIChDT1BZX0VMRU1FTlQuZXJyb3JBcnJheSkge1xyXG4gICAgICBkZWxldGUgQ09QWV9FTEVNRU5ULmVycm9yQXJyYXk7XHJcbiAgICB9XHJcbiAgICBDT1BZX0VMRU1FTlQudmlzaWJpbGl0eUxvZ2ljID0gW107XHJcbiAgICBjb25zdCBlbGVtZW50c05hbWVzOiBhbnkgPSBbXTtcclxuICAgIHRoaXMuZm9ybXNQYWdlLmVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBlbGVtZW50c05hbWVzLnB1c2goZWxlbWVudC5uYW1lKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jaGVja0ZvclNhbWVOYW1lKGVsZW1lbnRzTmFtZXMsIENPUFlfRUxFTUVOVCk7XHJcbiAgICB0aGlzLmZvcm1zUGFnZS5lbGVtZW50cy5zcGxpY2UoaW5kZXggKyAxLCAwLCBDT1BZX0VMRU1FTlQpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBBc3NpZ25zIGEgdW5pcXVlIG5hbWUgdG8gdGhlIGR1cGxpY2F0ZWQgcXVlc3Rpb25cclxuICAgKiBAcGFyYW0gZWxlbWVudHNOYW1lcyBMaXN0IG9mIHF1ZXN0aW9uIG5hbWVzXHJcbiAgICogQHBhcmFtIENPUFlfRUxFTUVOVCBEZXRhaWxzIG9mIHF1ZXN0aW9uIGR1cGxpY2F0ZWRcclxuICAgKi9cclxuICBjaGVja0ZvclNhbWVOYW1lKGVsZW1lbnRzTmFtZXM6IGFueSwgQ09QWV9FTEVNRU5UOiBhbnkpIHtcclxuICAgIGlmIChlbGVtZW50c05hbWVzLmluY2x1ZGVzKENPUFlfRUxFTUVOVC5uYW1lKSkge1xyXG4gICAgICBjb25zdCBDT1BZX0VMRU1FTlRfTkFNRSA9IENPUFlfRUxFTUVOVC5uYW1lLnNwbGl0KCdfJyk7XHJcbiAgICAgIENPUFlfRUxFTUVOVF9OQU1FW0NPUFlfRUxFTUVOVF9OQU1FLmxlbmd0aCAtIDFdID0gKHBhcnNlSW50KENPUFlfRUxFTUVOVF9OQU1FW0NPUFlfRUxFTUVOVF9OQU1FLmxlbmd0aCAtIDFdLCAxMCkgKyAxKS50b1N0cmluZygpO1xyXG4gICAgICBDT1BZX0VMRU1FTlQubmFtZSA9IENPUFlfRUxFTUVOVF9OQU1FLmpvaW4oJ18nKTtcclxuICAgICAgdGhpcy5jaGVja0ZvclNhbWVOYW1lKGVsZW1lbnRzTmFtZXMsIENPUFlfRUxFTUVOVCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gKiBEZWxldGVzIHRoZSBxdWVzdGlvbiBvbiBjbGljayBvZiBkZWxldGUgYnV0dG9uXHJcbiAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBxdWVzdGlvbiB0byBiZSBkZWxldGVkXHJcbiAqL1xyXG4gIGRlbGV0ZVF1ZXN0aW9uKGluZGV4OiBhbnkpIHtcclxuICAgIHRoaXMucmVtb3ZlTG9naWNGcm9tRGVwZW5kZW50UXVlc3Rpb24oaW5kZXgpO1xyXG4gICAgdGhpcy5mb3Jtc1BhZ2UuZWxlbWVudHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICB9XHJcbiAgLyoqXHJcbiAqIFJlbW92ZXMgdGhlIGxvZ2ljIGRhdGEgZm9yIGEgcGFydGljdWxhciBxdWVzdGlvbiBmcm9tIG90aGVyIHF1ZXN0aW9uc1xyXG4gKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgcXVlc3Rpb24gd2hvc2UgbG9naWMgZGF0YSBuZWVkcyB0byBiZSByZW1vdmVkIGZyb20gb3RoZXIgcXVlc3Rpb25zXHJcbiAqL1xyXG4gIHJlbW92ZUxvZ2ljRnJvbURlcGVuZGVudFF1ZXN0aW9uKGluZGV4OiBhbnkpIHtcclxuICAgIHRoaXMuZm9ybXNQYWdlLmVsZW1lbnRzLmZvckVhY2goKHF1ZXN0aW9uRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChxdWVzdGlvbkVsZW1lbnQudmlzaWJpbGl0eUxvZ2ljLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBxdWVzdGlvbkVsZW1lbnQudmlzaWJpbGl0eUxvZ2ljID0gcXVlc3Rpb25FbGVtZW50LnZpc2liaWxpdHlMb2dpYy5maWx0ZXIoKGxvZ2ljOiBhbnkpID0+XHJcbiAgICAgICAgICBsb2dpYy5xdWVzdGlvbk5hbWUgIT09IHRoaXMuZm9ybXNQYWdlLmVsZW1lbnRzW2luZGV4XS5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4qIEFkZHMgYSBuZXcgcGFnZVxyXG4qL1xyXG4gIGFkZFBhZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZU51bWJlciA9PT0gLTEgfHwgdGhpcy5jdXJyZW50UGFnZU51bWJlciA9PT0gLTIpIHtcclxuICAgICAgLy90aGlzLmN1cnJlbnRQYWdlTnVtYmVyID0gdGhpcy5udW1iZXJPZlBhZ2VzKCkgKyAxO1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlTnVtYmVyID0gdGhpcy5hbGxQYWdlcy5sZW5ndGggKyAxO1xyXG4gICAgICB0aGlzLmFsbFBhZ2VzLnB1c2godGhpcy5jdXJyZW50UGFnZU51bWJlcik7XHJcbiAgICAgIHRoaXMubnVtYmVyT2ZQYWdlcygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZU51bWJlciA9IHRoaXMuYWxsUGFnZXMubGVuZ3RoICsgMTtcclxuICAgICAgdGhpcy5hbGxQYWdlcy5wdXNoKHRoaXMuY3VycmVudFBhZ2VOdW1iZXIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGVwSWRlbnRpZmllciA9ICdwYWdlc2NyZWVuJztcclxuICAgIHRoaXMuYWN0aXZlUXVlc3Rpb25JbmRleC5uZXh0KC0xMCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICogQ291bnRzIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gYSBzdXJ2ZXkvZm9ybVxyXG4gICovXHJcbiAgbnVtYmVyT2ZQYWdlcygpOiBhbnkge1xyXG4gICAgY29uc3QgUEFHRV9BUlJBWTogYW55ID0gW107XHJcbiAgICBpZiAodGhpcy5mb3Jtc1BhZ2UuZWxlbWVudHMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybXNQYWdlLmVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIFBBR0VfQVJSQVkucHVzaChlbGVtZW50LnBhZ2UpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2VEZXRhaWxzLnBhZ2VOdW1iZXIgPSBlbGVtZW50LnBhZ2U7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybXNQYWdlLnBhZ2VEZXRhaWxzTGlzdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuZm9ybXNQYWdlLnBhZ2VEZXRhaWxzTGlzdC5wdXNoKHRoaXMuY3VycmVudFBhZ2VEZXRhaWxzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmFsbFBhZ2VzID0gWy4uLm5ldyBTZXQoUEFHRV9BUlJBWSldO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBodHRwT3B0aW9ucyA9IHtcclxuICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsIHRva2VuOiB0aGlzLmdldEF1dGhvcml6YXRpb25Ub2tlbigpIH0pXHJcbiAgfTtcclxuXHJcbiAgZmV0Y2hBc3Nlc3NtZW50RGF0YShpZDogc3RyaW5nKSB7XHJcbiAgICAvL21vZGU9YXNzZXNzbWVudC9mZXRjaFF1ZXN0aW9uc0J5QXNzZXNzbWVudElkJmlkPTYxZjNmNzg3MWM2MDAyMDAwOWEyMDU0M1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXCJlbnZcIiArICdhc3Nlc3NtZW50L2ZldGNoUXVlc3Rpb25zQnlBc3Nlc3NtZW50SWQmaWQ9JyArIGlkLCB0aGlzLmh0dHBPcHRpb25zKS5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcblxyXG4gIHNhdmVBc3Nlc3NtZW50KGlkOiBhbnksIHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFwiZW52XCIgKyAnYXNzZXNzbWVudC91cGRhdGUmaWQ9JyArIGlkLCBwYXlsb2FkLCB0aGlzLmh0dHBPcHRpb25zKVxyXG4gICAgLy8/bW9kZT1hc3Nlc3NtZW50L3VwZGF0ZSZpZD02MWYzZjc4NzFjNjAwMjAwMDlhMjA1NDNcclxuICB9XHJcblxyXG4gIGdldEF1dGhvcml6YXRpb25Ub2tlbigpIHtcclxuICAgIGNvbnN0IFRPS0VOID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2N1cnJlbnRVc2VyJyk7XHJcbiAgICBsZXQgY3VycmVudFVzZXI7XHJcbiAgICBUT0tFTiAhPT0gbnVsbCA/IChjdXJyZW50VXNlciA9IEpTT04ucGFyc2UoVE9LRU4pKSA6IChjdXJyZW50VXNlciA9IHt9KTtcclxuICAgIHJldHVybiBjdXJyZW50VXNlci50b2tlbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogRXh0cmFjdHMgdGhlIHRleHQgZnJvbSBhIHBhcnRpY3VsYXIgaHRtbCBjb250ZW50XHJcbiAgKiBAcGFyYW0gcyBodG1sIGNvbnRlbnQgZnJvbSB3aGljaCB0ZXh0IG5lZWRzIHRvIGJlIGV4dHJhY3RlZFxyXG4gICovXHJcbiAgZXh0cmFjdChzOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICBzcGFuLmlubmVySFRNTCA9IHM7XHJcbiAgICByZXR1cm4gc3Bhbi50ZXh0Q29udGVudCB8fCBzcGFuLmlubmVyVGV4dDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogTW92ZXMgUXVlc3Rpb24gdG8gYSBwYXJ0aWN1bGFyIGluZGV4IGluIGFuIGFycmF5XHJcbiAgICogQHBhcmFtIHByZXZpb3VzIEluZGV4IGZyb20gd2hpY2ggUXVlc3Rpb24gc2hvdWxkIGJlIG1vdmVkXHJcbiAgICogQHBhcmFtIG5leHQgIEluZGV4IGJlZm9yZSB3aGljaCBRdWVzdGlvbiBzaG91bGQgYmUgbW92ZWRcclxuICAgKi9cclxuICBtb3ZlUXVlc3Rpb24ocHJldmlvdXM6IGFueSwgbmV4dDogYW55KSB7XHJcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5mb3Jtc1BhZ2UuZWxlbWVudHMsIHByZXZpb3VzLCBuZXh0KTtcclxuICB9XHJcbn1cclxuIl19