@testgorilla/tgo-coding-test 0.0.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. package/README.md +49 -2
  2. package/esm2022/index.mjs +12 -0
  3. package/esm2022/lib/components/code-editor/code-editor.component.mjs +335 -0
  4. package/esm2022/lib/components/code-editor/code-editor.service.mjs +72 -0
  5. package/esm2022/lib/components/code-editor/helpers/c-helper.mjs +40 -0
  6. package/esm2022/lib/components/code-editor/helpers/code-editor-helper.base.mjs +11 -0
  7. package/esm2022/lib/components/code-editor/helpers/code-editor-helper.model.mjs +2 -0
  8. package/esm2022/lib/components/code-editor/helpers/cpp-helper.mjs +41 -0
  9. package/esm2022/lib/components/code-editor/helpers/csharp-helper.mjs +42 -0
  10. package/esm2022/lib/components/code-editor/helpers/go-helper.mjs +42 -0
  11. package/esm2022/lib/components/code-editor/helpers/index.mjs +16 -0
  12. package/esm2022/lib/components/code-editor/helpers/java-helper.mjs +42 -0
  13. package/esm2022/lib/components/code-editor/helpers/javascript-helper.mjs +26 -0
  14. package/esm2022/lib/components/code-editor/helpers/kotlin-helper.mjs +42 -0
  15. package/esm2022/lib/components/code-editor/helpers/php-helper.mjs +26 -0
  16. package/esm2022/lib/components/code-editor/helpers/python-helper.mjs +26 -0
  17. package/esm2022/lib/components/code-editor/helpers/r-helper.mjs +26 -0
  18. package/esm2022/lib/components/code-editor/helpers/ruby-helper.mjs +26 -0
  19. package/esm2022/lib/components/code-editor/helpers/scala-helper.mjs +41 -0
  20. package/esm2022/lib/components/code-editor/helpers/sql-helper.mjs +34 -0
  21. package/esm2022/lib/components/code-editor/helpers/swift-helper.mjs +40 -0
  22. package/esm2022/lib/components/code-editor/helpers/typescript-helper.mjs +41 -0
  23. package/esm2022/lib/components/code-editor/models/code-editor.model.mjs +2 -0
  24. package/esm2022/lib/components/code-editor/models/coding-snapshot.model.mjs +2 -0
  25. package/esm2022/lib/components/coding-question/coding-question.component.mjs +126 -0
  26. package/esm2022/lib/components/coding-section/coding-section.component.mjs +188 -0
  27. package/esm2022/lib/components/common/truncated-text/truncated-text.component.mjs +38 -0
  28. package/esm2022/lib/components/configurations/configurations.component.mjs +97 -0
  29. package/esm2022/lib/components/instructions/instructions.component.mjs +139 -0
  30. package/esm2022/lib/components/panel/panel.component.mjs +34 -0
  31. package/esm2022/lib/components/runnable-editor/runnable-editor.component.mjs +169 -0
  32. package/esm2022/lib/components/tests/test-cases/test-cases.component.mjs +198 -0
  33. package/esm2022/lib/components/tests/test-cases-content/test-cases-content.component.mjs +96 -0
  34. package/esm2022/lib/components/tests/test-cases-status/test-cases-status.component.mjs +21 -0
  35. package/esm2022/lib/components/tests/test-results.component.mjs +127 -0
  36. package/esm2022/lib/components/tgo-coding-test/tgo-coding-test.component.mjs +280 -0
  37. package/esm2022/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.mjs +476 -0
  38. package/esm2022/lib/config/index.mjs +2 -0
  39. package/esm2022/lib/config/tgo-coding-test.config.mjs +2 -0
  40. package/esm2022/lib/config/tgo-coding-test.provider.mjs +34 -0
  41. package/esm2022/lib/config/tgo-coding-test.token.mjs +14 -0
  42. package/esm2022/lib/models/auto-saved-data.mjs +2 -0
  43. package/esm2022/lib/models/code-event.mjs +2 -0
  44. package/esm2022/lib/models/coderunner-execution-results.mjs +2 -0
  45. package/esm2022/lib/models/configs.mjs +2 -0
  46. package/esm2022/lib/models/language-change-action.mjs +2 -0
  47. package/esm2022/lib/models/lat-languages.mjs +3 -0
  48. package/esm2022/lib/models/mixpanel-events.mjs +2 -0
  49. package/esm2022/lib/models/mode.mjs +2 -0
  50. package/esm2022/lib/models/paste-data.mjs +2 -0
  51. package/esm2022/lib/models/programming-language.mjs +2 -0
  52. package/esm2022/lib/models/test-cases.mjs +7 -0
  53. package/esm2022/lib/models/theme.mjs +2 -0
  54. package/esm2022/lib/models/translations.mjs +2 -0
  55. package/esm2022/lib/models/view-mode.mjs +8 -0
  56. package/esm2022/lib/pipes/memoize-func.pipe.mjs +39 -0
  57. package/esm2022/lib/services/candidate-coding-test-services/candidature-api.service.mjs +19 -0
  58. package/esm2022/lib/services/candidate-coding-test-services/coderunner-api.service.mjs +58 -0
  59. package/esm2022/lib/services/candidate-coding-test-services/coding-test-tour.service.mjs +89 -0
  60. package/esm2022/lib/services/candidate-coding-test-services/coding-test.service.mjs +490 -0
  61. package/esm2022/lib/services/candidate-coding-test-services/index.mjs +5 -0
  62. package/esm2022/lib/services/coding-test-config.service.mjs +51 -0
  63. package/esm2022/lib/services/configurations.service.mjs +89 -0
  64. package/esm2022/lib/services/lib-coding-test.service.mjs +106 -0
  65. package/esm2022/lib/services/storage.service.mjs +624 -0
  66. package/esm2022/lib/services/test-cases.service.mjs +30 -0
  67. package/esm2022/lib/services/theme.service.mjs +36 -0
  68. package/esm2022/lib/utils/additional-languages/erlang.mjs +103 -0
  69. package/esm2022/lib/utils/resize-element.mjs +13 -0
  70. package/esm2022/lib/utils/time-to-ms.util.mjs +11 -0
  71. package/esm2022/shared/index.mjs +5 -0
  72. package/esm2022/shared/lib/components/audio-animation/audio-animation.component.mjs +114 -0
  73. package/esm2022/shared/lib/components/audio-animation/index.mjs +2 -0
  74. package/esm2022/shared/lib/components/index.mjs +3 -0
  75. package/esm2022/shared/lib/components/vimeo-video/index.mjs +2 -0
  76. package/esm2022/shared/lib/components/vimeo-video/vimeo-video.component.mjs +101 -0
  77. package/esm2022/shared/lib/models/answer.mjs +2 -0
  78. package/esm2022/shared/lib/models/assessment.mjs +2 -0
  79. package/esm2022/shared/lib/models/environment.mjs +2 -0
  80. package/esm2022/shared/lib/models/index.mjs +9 -0
  81. package/esm2022/shared/lib/models/question-component.mjs +2 -0
  82. package/esm2022/shared/lib/models/question.mjs +2 -0
  83. package/esm2022/shared/lib/models/test.mjs +2 -0
  84. package/esm2022/shared/lib/models/translations.mjs +2 -0
  85. package/esm2022/shared/lib/models/window.mjs +2 -0
  86. package/esm2022/shared/lib/services/api/api.service.mjs +97 -0
  87. package/esm2022/shared/lib/services/api/mocked-api.service.mjs +131 -0
  88. package/esm2022/shared/lib/services/environment/environment.service.mjs +13 -0
  89. package/esm2022/shared/lib/services/index.mjs +10 -0
  90. package/esm2022/shared/lib/services/localization/languages.model.mjs +19 -0
  91. package/esm2022/shared/lib/services/localization/transloco-lazy-module-utils.mjs +27 -0
  92. package/esm2022/shared/lib/services/localization/transloco-testing.module.mjs +11 -0
  93. package/esm2022/shared/lib/services/media/media.service.mjs +129 -0
  94. package/esm2022/shared/lib/services/mixpanel/mixpanel.service.mjs +30 -0
  95. package/esm2022/shared/lib/services/theme/theme.service.mjs +24 -0
  96. package/esm2022/shared/test-mocks/assessment-test.mock.mjs +112 -0
  97. package/esm2022/shared/test-mocks/index.mjs +3 -0
  98. package/esm2022/shared/test-mocks/tgo-ui.mock.mjs +39 -0
  99. package/esm2022/testgorilla-tgo-coding-test.mjs +5 -0
  100. package/fesm2022/testgorilla-tgo-coding-test.mjs +4526 -0
  101. package/fesm2022/testgorilla-tgo-coding-test.mjs.map +1 -0
  102. package/{src/index.ts → index.d.ts} +2 -19
  103. package/lib/components/code-editor/code-editor.component.d.ts +54 -0
  104. package/lib/components/code-editor/code-editor.service.d.ts +12 -0
  105. package/lib/components/code-editor/helpers/c-helper.d.ts +11 -0
  106. package/lib/components/code-editor/helpers/code-editor-helper.base.d.ts +8 -0
  107. package/lib/components/code-editor/helpers/code-editor-helper.model.d.ts +62 -0
  108. package/lib/components/code-editor/helpers/cpp-helper.d.ts +11 -0
  109. package/lib/components/code-editor/helpers/csharp-helper.d.ts +12 -0
  110. package/lib/components/code-editor/helpers/go-helper.d.ts +12 -0
  111. package/lib/components/code-editor/helpers/java-helper.d.ts +12 -0
  112. package/lib/components/code-editor/helpers/javascript-helper.d.ts +10 -0
  113. package/lib/components/code-editor/helpers/kotlin-helper.d.ts +12 -0
  114. package/lib/components/code-editor/helpers/php-helper.d.ts +10 -0
  115. package/lib/components/code-editor/helpers/python-helper.d.ts +10 -0
  116. package/lib/components/code-editor/helpers/r-helper.d.ts +10 -0
  117. package/lib/components/code-editor/helpers/ruby-helper.d.ts +10 -0
  118. package/lib/components/code-editor/helpers/scala-helper.d.ts +12 -0
  119. package/lib/components/code-editor/helpers/sql-helper.d.ts +10 -0
  120. package/lib/components/code-editor/helpers/swift-helper.d.ts +11 -0
  121. package/lib/components/code-editor/helpers/typescript-helper.d.ts +11 -0
  122. package/lib/components/code-editor/models/code-editor.model.d.ts +8 -0
  123. package/lib/components/code-editor/models/coding-snapshot.model.d.ts +4 -0
  124. package/lib/components/coding-question/coding-question.component.d.ts +45 -0
  125. package/lib/components/coding-section/coding-section.component.d.ts +52 -0
  126. package/lib/components/common/truncated-text/truncated-text.component.d.ts +13 -0
  127. package/lib/components/configurations/configurations.component.d.ts +40 -0
  128. package/lib/components/instructions/instructions.component.d.ts +48 -0
  129. package/lib/components/panel/panel.component.d.ts +12 -0
  130. package/lib/components/runnable-editor/runnable-editor.component.d.ts +53 -0
  131. package/lib/components/tests/test-cases/test-cases.component.d.ts +46 -0
  132. package/lib/components/tests/test-cases-content/test-cases-content.component.d.ts +26 -0
  133. package/lib/components/tests/test-cases-status/test-cases-status.component.d.ts +9 -0
  134. package/lib/components/tests/test-results.component.d.ts +33 -0
  135. package/lib/components/tgo-coding-test/tgo-coding-test.component.d.ts +69 -0
  136. package/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.d.ts +101 -0
  137. package/{src/lib/config/index.ts → lib/config/index.d.ts} +0 -1
  138. package/lib/config/tgo-coding-test.config.d.ts +24 -0
  139. package/{src/lib/config/tgo-coding-test.provider.ts → lib/config/tgo-coding-test.provider.d.ts} +6 -18
  140. package/lib/config/tgo-coding-test.token.d.ts +9 -0
  141. package/lib/models/auto-saved-data.d.ts +42 -0
  142. package/lib/models/code-event.d.ts +15 -0
  143. package/lib/models/coderunner-execution-results.d.ts +51 -0
  144. package/lib/models/configs.d.ts +15 -0
  145. package/lib/models/language-change-action.d.ts +4 -0
  146. package/lib/models/lat-languages.d.ts +8 -0
  147. package/lib/models/mixpanel-events.d.ts +3 -0
  148. package/lib/models/mode.d.ts +5 -0
  149. package/lib/models/paste-data.d.ts +4 -0
  150. package/lib/models/programming-language.d.ts +8 -0
  151. package/lib/models/test-cases.d.ts +67 -0
  152. package/lib/models/theme.d.ts +4 -0
  153. package/lib/models/translations.d.ts +1 -0
  154. package/lib/models/view-mode.d.ts +6 -0
  155. package/{src/lib/pipes/memoize-func.pipe.ts → lib/pipes/memoize-func.pipe.d.ts} +6 -14
  156. package/lib/services/candidate-coding-test-services/candidature-api.service.d.ts +10 -0
  157. package/lib/services/candidate-coding-test-services/coderunner-api.service.d.ts +18 -0
  158. package/lib/services/candidate-coding-test-services/coding-test-tour.service.d.ts +22 -0
  159. package/lib/services/candidate-coding-test-services/coding-test.service.d.ts +68 -0
  160. package/{src/lib/services/candidate-coding-test-services/index.ts → lib/services/candidate-coding-test-services/index.d.ts} +1 -1
  161. package/lib/services/coding-test-config.service.d.ts +38 -0
  162. package/lib/services/configurations.service.d.ts +37 -0
  163. package/lib/services/lib-coding-test.service.d.ts +69 -0
  164. package/lib/services/storage.service.d.ts +83 -0
  165. package/lib/services/test-cases.service.d.ts +12 -0
  166. package/lib/services/theme.service.d.ts +17 -0
  167. package/lib/utils/additional-languages/erlang.d.ts +37 -0
  168. package/lib/utils/resize-element.d.ts +2 -0
  169. package/lib/utils/time-to-ms.util.d.ts +1 -0
  170. package/package.json +18 -7
  171. package/shared/index.d.ts +4 -0
  172. package/shared/lib/components/audio-animation/audio-animation.component.d.ts +27 -0
  173. package/shared/lib/components/audio-animation/index.d.ts +1 -0
  174. package/shared/lib/components/index.d.ts +2 -0
  175. package/shared/lib/components/vimeo-video/index.d.ts +1 -0
  176. package/shared/lib/components/vimeo-video/vimeo-video.component.d.ts +24 -0
  177. package/shared/lib/models/answer.d.ts +17 -0
  178. package/shared/lib/models/assessment.d.ts +80 -0
  179. package/shared/lib/models/environment.d.ts +1 -0
  180. package/shared/lib/models/index.d.ts +8 -0
  181. package/shared/lib/models/question-component.d.ts +54 -0
  182. package/shared/lib/models/question.d.ts +102 -0
  183. package/shared/lib/models/test.d.ts +81 -0
  184. package/shared/lib/models/translations.d.ts +1 -0
  185. package/shared/lib/models/window.d.ts +6 -0
  186. package/shared/lib/services/api/api.service.d.ts +25 -0
  187. package/shared/lib/services/api/mocked-api.service.d.ts +35 -0
  188. package/shared/lib/services/environment/environment.service.d.ts +6 -0
  189. package/shared/lib/services/index.d.ts +9 -0
  190. package/shared/lib/services/localization/languages.model.d.ts +15 -0
  191. package/shared/lib/services/localization/transloco-lazy-module-utils.d.ts +11 -0
  192. package/shared/lib/services/localization/transloco-testing.module.d.ts +2 -0
  193. package/shared/lib/services/media/media.service.d.ts +29 -0
  194. package/shared/lib/services/mixpanel/mixpanel.service.d.ts +10 -0
  195. package/shared/lib/services/theme/theme.service.d.ts +8 -0
  196. package/shared/test-mocks/assessment-test.mock.d.ts +21 -0
  197. package/shared/test-mocks/index.d.ts +2 -0
  198. package/shared/test-mocks/tgo-ui.mock.d.ts +21 -0
  199. package/.eslintrc.json +0 -45
  200. package/jest.config.ts +0 -21
  201. package/ng-package.json +0 -14
  202. package/project.json +0 -36
  203. package/src/lib/components/.gitkeep +0 -0
  204. package/src/lib/components/code-editor/code-editor.component.html +0 -10
  205. package/src/lib/components/code-editor/code-editor.component.scss +0 -21
  206. package/src/lib/components/code-editor/code-editor.component.spec.ts +0 -136
  207. package/src/lib/components/code-editor/code-editor.component.ts +0 -369
  208. package/src/lib/components/code-editor/code-editor.mocks.ts +0 -28
  209. package/src/lib/components/code-editor/code-editor.service.spec.ts +0 -160
  210. package/src/lib/components/code-editor/code-editor.service.ts +0 -94
  211. package/src/lib/components/code-editor/helpers/c-helper.spec.ts +0 -39
  212. package/src/lib/components/code-editor/helpers/c-helper.ts +0 -51
  213. package/src/lib/components/code-editor/helpers/code-editor-helper.base.spec.ts +0 -30
  214. package/src/lib/components/code-editor/helpers/code-editor-helper.base.ts +0 -16
  215. package/src/lib/components/code-editor/helpers/code-editor-helper.mocks.ts +0 -24
  216. package/src/lib/components/code-editor/helpers/code-editor-helper.model.ts +0 -67
  217. package/src/lib/components/code-editor/helpers/cpp-helper.spec.ts +0 -40
  218. package/src/lib/components/code-editor/helpers/cpp-helper.ts +0 -52
  219. package/src/lib/components/code-editor/helpers/csharp-helper.spec.ts +0 -42
  220. package/src/lib/components/code-editor/helpers/csharp-helper.ts +0 -55
  221. package/src/lib/components/code-editor/helpers/go-helper.spec.ts +0 -41
  222. package/src/lib/components/code-editor/helpers/go-helper.ts +0 -54
  223. package/src/lib/components/code-editor/helpers/java-helper.spec.ts +0 -41
  224. package/src/lib/components/code-editor/helpers/java-helper.ts +0 -54
  225. package/src/lib/components/code-editor/helpers/javascript-helper.spec.ts +0 -39
  226. package/src/lib/components/code-editor/helpers/javascript-helper.ts +0 -32
  227. package/src/lib/components/code-editor/helpers/kotlin-helper.spec.ts +0 -41
  228. package/src/lib/components/code-editor/helpers/kotlin-helper.ts +0 -54
  229. package/src/lib/components/code-editor/helpers/php-helper.spec.ts +0 -39
  230. package/src/lib/components/code-editor/helpers/php-helper.ts +0 -32
  231. package/src/lib/components/code-editor/helpers/python-helper.spec.ts +0 -39
  232. package/src/lib/components/code-editor/helpers/python-helper.ts +0 -32
  233. package/src/lib/components/code-editor/helpers/r-helper.spec.ts +0 -39
  234. package/src/lib/components/code-editor/helpers/r-helper.ts +0 -32
  235. package/src/lib/components/code-editor/helpers/ruby-helper.spec.ts +0 -39
  236. package/src/lib/components/code-editor/helpers/ruby-helper.ts +0 -32
  237. package/src/lib/components/code-editor/helpers/scala-helper.spec.ts +0 -41
  238. package/src/lib/components/code-editor/helpers/scala-helper.ts +0 -53
  239. package/src/lib/components/code-editor/helpers/sql-helper.spec.ts +0 -87
  240. package/src/lib/components/code-editor/helpers/sql-helper.ts +0 -44
  241. package/src/lib/components/code-editor/helpers/swift-helper.spec.ts +0 -40
  242. package/src/lib/components/code-editor/helpers/swift-helper.ts +0 -51
  243. package/src/lib/components/code-editor/helpers/typescript-helper.spec.ts +0 -40
  244. package/src/lib/components/code-editor/helpers/typescript-helper.ts +0 -52
  245. package/src/lib/components/code-editor/models/code-editor.model.ts +0 -9
  246. package/src/lib/components/code-editor/models/coding-snapshot.model.ts +0 -4
  247. package/src/lib/components/coding-question/coding-question.component.html +0 -78
  248. package/src/lib/components/coding-question/coding-question.component.scss +0 -76
  249. package/src/lib/components/coding-question/coding-question.component.spec.ts +0 -85
  250. package/src/lib/components/coding-question/coding-question.component.ts +0 -102
  251. package/src/lib/components/coding-section/coding-section.component.html +0 -82
  252. package/src/lib/components/coding-section/coding-section.component.scss +0 -64
  253. package/src/lib/components/coding-section/coding-section.component.spec.ts +0 -257
  254. package/src/lib/components/coding-section/coding-section.component.ts +0 -187
  255. package/src/lib/components/coding-test.module.ts +0 -124
  256. package/src/lib/components/common/truncated-text/truncated-text.component.html +0 -6
  257. package/src/lib/components/common/truncated-text/truncated-text.component.scss +0 -18
  258. package/src/lib/components/common/truncated-text/truncated-text.component.spec.ts +0 -84
  259. package/src/lib/components/common/truncated-text/truncated-text.component.ts +0 -37
  260. package/src/lib/components/configurations/configurations.component.html +0 -57
  261. package/src/lib/components/configurations/configurations.component.scss +0 -42
  262. package/src/lib/components/configurations/configurations.component.spec.ts +0 -186
  263. package/src/lib/components/configurations/configurations.component.ts +0 -98
  264. package/src/lib/components/instructions/instructions.component.html +0 -41
  265. package/src/lib/components/instructions/instructions.component.scss +0 -167
  266. package/src/lib/components/instructions/instructions.component.spec.ts +0 -106
  267. package/src/lib/components/instructions/instructions.component.ts +0 -138
  268. package/src/lib/components/panel/panel.component.html +0 -19
  269. package/src/lib/components/panel/panel.component.scss +0 -41
  270. package/src/lib/components/panel/panel.component.spec.ts +0 -40
  271. package/src/lib/components/panel/panel.component.ts +0 -34
  272. package/src/lib/components/runnable-editor/runnable-editor.component.html +0 -75
  273. package/src/lib/components/runnable-editor/runnable-editor.component.scss +0 -55
  274. package/src/lib/components/runnable-editor/runnable-editor.component.spec.ts +0 -124
  275. package/src/lib/components/runnable-editor/runnable-editor.component.ts +0 -155
  276. package/src/lib/components/tests/test-cases/test-cases.component.html +0 -135
  277. package/src/lib/components/tests/test-cases/test-cases.component.scss +0 -220
  278. package/src/lib/components/tests/test-cases/test-cases.component.spec.ts +0 -401
  279. package/src/lib/components/tests/test-cases/test-cases.component.ts +0 -205
  280. package/src/lib/components/tests/test-cases-content/test-cases-content.component.html +0 -94
  281. package/src/lib/components/tests/test-cases-content/test-cases-content.component.scss +0 -103
  282. package/src/lib/components/tests/test-cases-content/test-cases-content.component.spec.ts +0 -122
  283. package/src/lib/components/tests/test-cases-content/test-cases-content.component.ts +0 -102
  284. package/src/lib/components/tests/test-cases-status/test-cases-status.component.html +0 -16
  285. package/src/lib/components/tests/test-cases-status/test-cases-status.component.scss +0 -49
  286. package/src/lib/components/tests/test-cases-status/test-cases-status.component.spec.ts +0 -22
  287. package/src/lib/components/tests/test-cases-status/test-cases-status.component.ts +0 -18
  288. package/src/lib/components/tests/test-results.component.html +0 -119
  289. package/src/lib/components/tests/test-results.component.scss +0 -189
  290. package/src/lib/components/tests/test-results.component.spec.ts +0 -140
  291. package/src/lib/components/tests/test-results.component.ts +0 -98
  292. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.html +0 -96
  293. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.scss +0 -6
  294. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.spec.ts +0 -599
  295. package/src/lib/components/tgo-coding-test/tgo-coding-test.component.ts +0 -279
  296. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.html +0 -36
  297. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.scss +0 -183
  298. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.spec.ts +0 -883
  299. package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.ts +0 -575
  300. package/src/lib/config/tgo-coding-test.config.ts +0 -26
  301. package/src/lib/config/tgo-coding-test.token.ts +0 -21
  302. package/src/lib/models/.gitkeep +0 -0
  303. package/src/lib/models/auto-saved-data.ts +0 -51
  304. package/src/lib/models/code-event.ts +0 -17
  305. package/src/lib/models/coderunner-execution-results.ts +0 -58
  306. package/src/lib/models/coding-lib.mocks.ts +0 -246
  307. package/src/lib/models/configs.ts +0 -18
  308. package/src/lib/models/language-change-action.ts +0 -4
  309. package/src/lib/models/lat-languages.ts +0 -12
  310. package/src/lib/models/mixpanel-events.ts +0 -3
  311. package/src/lib/models/mode.ts +0 -5
  312. package/src/lib/models/paste-data.ts +0 -4
  313. package/src/lib/models/programming-language.ts +0 -9
  314. package/src/lib/models/test-cases.ts +0 -74
  315. package/src/lib/models/theme.ts +0 -5
  316. package/src/lib/models/translations.ts +0 -1
  317. package/src/lib/models/view-mode.ts +0 -6
  318. package/src/lib/services/.gitkeep +0 -0
  319. package/src/lib/services/candidate-coding-test-services/candidature-api.service.spec.ts +0 -40
  320. package/src/lib/services/candidate-coding-test-services/candidature-api.service.ts +0 -15
  321. package/src/lib/services/candidate-coding-test-services/coderunner-api.service.spec.ts +0 -134
  322. package/src/lib/services/candidate-coding-test-services/coderunner-api.service.ts +0 -105
  323. package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.spec.ts +0 -161
  324. package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.ts +0 -100
  325. package/src/lib/services/candidate-coding-test-services/coding-test.service.spec.ts +0 -1524
  326. package/src/lib/services/candidate-coding-test-services/coding-test.service.ts +0 -843
  327. package/src/lib/services/coding-test-config.service.ts +0 -48
  328. package/src/lib/services/configurations.service.mocks.ts +0 -77
  329. package/src/lib/services/configurations.service.spec.ts +0 -79
  330. package/src/lib/services/configurations.service.ts +0 -111
  331. package/src/lib/services/index.ts +0 -0
  332. package/src/lib/services/lib-coding-test.service.spec.ts +0 -265
  333. package/src/lib/services/lib-coding-test.service.ts +0 -157
  334. package/src/lib/services/local-storage.service.mocks.ts +0 -22
  335. package/src/lib/services/storage.service.spec.ts +0 -1120
  336. package/src/lib/services/storage.service.ts +0 -729
  337. package/src/lib/services/test-cases.service.spec.ts +0 -53
  338. package/src/lib/services/test-cases.service.ts +0 -29
  339. package/src/lib/services/theme.service.spec.ts +0 -76
  340. package/src/lib/services/theme.service.ts +0 -34
  341. package/src/lib/styles/mixins.scss +0 -86
  342. package/src/lib/styles/styles.scss +0 -112
  343. package/src/lib/styles/variables.scss +0 -105
  344. package/src/lib/utils/.gitkeep +0 -0
  345. package/src/lib/utils/additional-languages/erlang.ts +0 -115
  346. package/src/lib/utils/resize-element.ts +0 -15
  347. package/src/lib/utils/time-to-ms.util.ts +0 -10
  348. package/src/test-setup.ts +0 -1
  349. package/tsconfig.json +0 -16
  350. package/tsconfig.lib.json +0 -12
  351. package/tsconfig.lib.prod.json +0 -9
  352. package/tsconfig.spec.json +0 -13
  353. /package/{src/assets → assets}/i18n/en.json +0 -0
  354. /package/{src/lib/components/code-editor/helpers/index.ts → lib/components/code-editor/helpers/index.d.ts} +0 -0
@@ -0,0 +1,476 @@
1
+ import { __decorate } from "tslib";
2
+ import { CommonModule } from '@angular/common';
3
+ import { Component, computed, EventEmitter, HostBinding, inject, Input, Output, signal, ViewEncapsulation, } from '@angular/core';
4
+ import { ActivatedRoute, RouterModule } from '@angular/router';
5
+ import { translate, TRANSLOCO_SCOPE, TranslocoModule, TranslocoService } from '@ngneat/transloco';
6
+ import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
7
+ import { ApiService, EnvironmentService, getAvailableLangs, MixpanelService, ThemeService, TranslocoLazyModuleUtils, } from '../../../shared/index.mjs';
8
+ import { ConfirmDialogComponent, DialogComponentModule, DialogService, SnackbarComponentModule, } from '@testgorilla/tgo-ui';
9
+ import { GuidedTourModule, GuidedTourService } from 'ngx-guided-tour';
10
+ import { interval, Observable, Subscription } from 'rxjs';
11
+ import { switchMap, take, tap } from 'rxjs/operators';
12
+ import { ROOT_TRANSLATIONS_SCOPE } from '../../models/translations';
13
+ import { ViewMode } from '../../models/view-mode';
14
+ import { CandidatureApiService, CoderunnerApiService, CodingTestService, CodingTestTourService, } from '../../services/candidate-coding-test-services';
15
+ import { CodingTestConfigService } from '../../services/coding-test-config.service';
16
+ import { LibCodingTestService } from '../../services/lib-coding-test.service';
17
+ import { TgoCodingTestComponent } from '../tgo-coding-test/tgo-coding-test.component';
18
+ import * as i0 from "@angular/core";
19
+ import * as i1 from "@ngneat/transloco";
20
+ import * as i2 from "ngx-guided-tour";
21
+ import * as i3 from "@angular/common";
22
+ let TgoCodingTestCandidateViewComponent = class TgoCodingTestCandidateViewComponent {
23
+ dialogService = inject(DialogService);
24
+ translationScope = inject(TRANSLOCO_SCOPE);
25
+ candidatureApiService = inject(CandidatureApiService);
26
+ codingTestTourService = inject(CodingTestTourService);
27
+ libCodingTestService = inject(LibCodingTestService);
28
+ environmentService = inject(EnvironmentService);
29
+ codingTestService = inject(CodingTestService);
30
+ translocoService = inject(TranslocoService);
31
+ themeService = inject(ThemeService);
32
+ apiService = inject(ApiService);
33
+ route = inject(ActivatedRoute);
34
+ codingTestConfigService = inject(CodingTestConfigService);
35
+ assessment;
36
+ question;
37
+ test;
38
+ expirationObservable;
39
+ completeObservable;
40
+ isDemo;
41
+ validationStatusChanged = new EventEmitter(); // eslint-disable-line @typescript-eslint/no-explicit-any
42
+ antiCheatingConfigurationChanged = new EventEmitter();
43
+ fullscreenChanged = new EventEmitter();
44
+ themeChanged = new EventEmitter();
45
+ codingFullscreenChanged = new EventEmitter();
46
+ navigationButtonStateChanged = new EventEmitter();
47
+ configurationStateChanged = new EventEmitter();
48
+ submissionStateChanged = new EventEmitter();
49
+ loadingStateChanged = new EventEmitter();
50
+ hostClass = 'micro-question-code';
51
+ subscription = new Subscription();
52
+ initCode = '';
53
+ viewModes = ViewMode;
54
+ mode = "running" /* Modes.Running */;
55
+ companyColor = this.themeService.getCompanyColor();
56
+ initCodesMap = new Map();
57
+ languages = signal([]);
58
+ codingLibTranslations = signal({});
59
+ rawLanguages = [];
60
+ currentLanguage;
61
+ isSQL = false;
62
+ isLAT = true;
63
+ code = '';
64
+ codingTestResults;
65
+ testResultsLoading = computed(() => this.codingTestService.isTestResultsLoading());
66
+ exampleTestCases = [];
67
+ activeGuidedTourId$ = this.codingTestTourService.activeGuidedTourId$;
68
+ firstTestRunComplete = false;
69
+ canopyUiTheme = 'light';
70
+ wasTourShown = false;
71
+ ngOnDestroy() {
72
+ if (!this.test?.is_preview_mode) {
73
+ this.antiCheatingConfigurationChanged.emit({
74
+ fullscreenTracking: false,
75
+ mouseEventTracking: false,
76
+ snapshotsTracking: false,
77
+ });
78
+ }
79
+ this.subscription.unsubscribe();
80
+ }
81
+ ngOnInit() {
82
+ this.setupState();
83
+ this.handleGuidedTour();
84
+ if (!this.test?.is_preview_mode) {
85
+ this.antiCheatingConfigurationChanged.emit({
86
+ fullscreenTracking: true,
87
+ mouseEventTracking: true,
88
+ snapshotsTracking: true,
89
+ });
90
+ this.setupAutosaveEvent();
91
+ }
92
+ const isNextQuestionDisabled = !this.test?.is_preview_mode;
93
+ this.configurationStateChanged.emit({
94
+ isSavingQuestionDisabled: isNextQuestionDisabled,
95
+ });
96
+ this.navigationButtonStateChanged.emit({
97
+ disabled: isNextQuestionDisabled,
98
+ });
99
+ this.subscription.add(this.expirationObservable?.subscribe(() => {
100
+ this.clearSavedCode();
101
+ if (!this.test?.is_preview_mode) {
102
+ this.clearLastLanguageSelected();
103
+ this.submitCode();
104
+ this.enableNextButton();
105
+ }
106
+ }));
107
+ this.subscription.add(this.completeObservable?.subscribe(() => {
108
+ if (!this.test?.is_preview_mode) {
109
+ this.openSaveDialog();
110
+ }
111
+ else {
112
+ this.clearSavedCode();
113
+ }
114
+ }));
115
+ if (!this.isSQL) {
116
+ this.loadAvailableLanguages();
117
+ this.setTestCases();
118
+ }
119
+ else {
120
+ this.setSqlTestCases();
121
+ this.setSqlLang();
122
+ this.setSqlInitCode();
123
+ this.loadingStateChanged.emit(false);
124
+ }
125
+ this.setListeners();
126
+ }
127
+ openSaveDialog() {
128
+ const dialogRef = this.dialogService.open(ConfirmDialogComponent, {
129
+ applicationTheme: this.canopyUiTheme,
130
+ size: 'small',
131
+ panelClass: '',
132
+ extraData: {
133
+ title: translate('CODING_QUESTION.MODALS.FINISH_TEST.TITLE') ?? '',
134
+ message: translate('CODING_QUESTION.MODALS.FINISH_TEST.MESSAGE') ?? '',
135
+ confirmButtonText: translate('CODING_QUESTION.MODALS.FINISH_TEST.SUBMIT') ?? '',
136
+ cancelButtonText: translate('CODING_QUESTION.MODALS.FINISH_TEST.CANCEL') ?? '',
137
+ color: this.companyColor,
138
+ },
139
+ });
140
+ dialogRef.afterClosed().subscribe(result => {
141
+ if (!result) {
142
+ return;
143
+ }
144
+ this.clearSavedCode();
145
+ this.clearLastLanguageSelected();
146
+ this.submitCode();
147
+ this.enableNextButton();
148
+ });
149
+ }
150
+ clearLastLanguageSelected() {
151
+ this.libCodingTestService.clearLastLanguageSelected();
152
+ }
153
+ clearSavedCode() {
154
+ this.libCodingTestService.triggerClearSavedCode();
155
+ }
156
+ submitCode() {
157
+ if (this.code) {
158
+ this.submissionStateChanged?.emit({
159
+ text: this.code,
160
+ language: this.getVersionedLanguage(),
161
+ });
162
+ }
163
+ }
164
+ getVersionedLanguage() {
165
+ const language = this.currentLanguage;
166
+ if (!language) {
167
+ return;
168
+ }
169
+ if (this.isSQL) {
170
+ return "sqlite3-3.36.0" /* ProgrammingLanguageVersioned.SQLite */;
171
+ }
172
+ return `${language}-${this.libCodingTestService.getVersion()}`;
173
+ }
174
+ enableNextButton() {
175
+ this.configurationStateChanged.emit({
176
+ isSavingQuestionDisabled: false,
177
+ });
178
+ }
179
+ languageChange(selectedLangName) {
180
+ const selectedLang = this.rawLanguages.filter(language => language.name === selectedLangName)[0];
181
+ this.codingTestService.handleLanguageChangeModal(this.question.id, selectedLang, this.canopyUiTheme, this.companyColor);
182
+ }
183
+ updateCode(code) {
184
+ this.code = code;
185
+ }
186
+ runTest() {
187
+ this.codingTestService.runTest(this.question.id, this.code, this.isLAT, this.isSQL, false, !!this.test.is_preview_mode, this.question.question_id, this.test.id, this.test);
188
+ if (!this.firstTestRunComplete) {
189
+ this.navigationButtonStateChanged.emit({
190
+ disabled: false,
191
+ });
192
+ this.firstTestRunComplete = true;
193
+ }
194
+ }
195
+ screenshotPaste(event) {
196
+ if (event.type !== 'paste') {
197
+ return;
198
+ }
199
+ this.codingTestService
200
+ .sendCopypasteEvent$(this.code, event.data, this.question.id)
201
+ .pipe(take(1))
202
+ .subscribe();
203
+ }
204
+ setupAutosaveEvent() {
205
+ this.subscription.add(interval(5000)
206
+ .pipe(untilDestroyed(this), switchMap(() => this.codingTestService.sendAutosaveEvent$(this.code, this.question.id)))
207
+ .subscribe());
208
+ }
209
+ setupState() {
210
+ this.setApiParams();
211
+ this.setCodingLibTranslations();
212
+ this.setIsSQL();
213
+ this.setIsLat();
214
+ this.setMode();
215
+ }
216
+ setCodingLibTranslations() {
217
+ // TRANSLOCO_SCOPE is passed here to make sure that translation scope is resolved by the library
218
+ this.translocoService
219
+ .selectTranslateObject(`CODING_LIB`, {}, this.translationScope)
220
+ .pipe(take(1))
221
+ .subscribe(translations => {
222
+ this.codingLibTranslations.set(translations);
223
+ });
224
+ }
225
+ setApiParams() {
226
+ const invitationUuid = this.route.snapshot.firstChild?.url[0].path || '';
227
+ const contentLanguage = this.assessment?.locale ?? 'en';
228
+ const apiUrl = this.codingTestConfigService.getApiUrl();
229
+ this.apiService.setParams(invitationUuid, contentLanguage, ROOT_TRANSLATIONS_SCOPE, apiUrl);
230
+ }
231
+ setIsSQL() {
232
+ this.isSQL = this.question?.context.code_language === 'sql';
233
+ this.codingTestService.setIsSQLTest(this.isSQL);
234
+ }
235
+ setSqlInitCode() {
236
+ this.initCode = this.question?.context.initial_code;
237
+ }
238
+ setSqlLang() {
239
+ const sqlLanguage = this.question?.context.code_language;
240
+ this.languages.set([
241
+ {
242
+ label: 'nonLAT',
243
+ value: sqlLanguage,
244
+ },
245
+ ]);
246
+ this.currentLanguage = sqlLanguage;
247
+ }
248
+ setIsLat() {
249
+ // todo: add response field if possible ?
250
+ // this.isLAT = this.test?.is_language_agnostic_test ?? false;
251
+ this.isLAT = !this.isSQL;
252
+ }
253
+ setMode() {
254
+ this.mode = this.test?.is_preview_mode ? "preview" /* Modes.Preview */ : "running" /* Modes.Running */;
255
+ }
256
+ listenGuidedTourStart() {
257
+ this.libCodingTestService.startGuidedTour$.pipe(untilDestroyed(this)).subscribe(() => {
258
+ const guidedTourMode = this.test?.is_preview_mode
259
+ ? "practice" /* CodingTestTourMode.PracticeQuestion */
260
+ : "real" /* CodingTestTourMode.RealQuestion */;
261
+ this.codingTestTourService.init(guidedTourMode);
262
+ });
263
+ }
264
+ handleGuidedTour() {
265
+ if (!this.environmentService.isMobile && !this.wasTourShown && this.test?.is_preview_mode) {
266
+ const delayForGuidedTour = 1500;
267
+ setTimeout(() => {
268
+ this.codingTestTourService.init("practice" /* CodingTestTourMode.PracticeQuestion */);
269
+ this.wasTourShown = true;
270
+ }, delayForGuidedTour);
271
+ }
272
+ }
273
+ getAllLanguages() {
274
+ const boilerplates = this.question?.context.boilerplates ?? [];
275
+ return boilerplates.map(({ programming_language }) => programming_language);
276
+ }
277
+ loadAvailableLanguages() {
278
+ this.candidatureApiService
279
+ .getAvailableLanguages$()
280
+ .pipe(take(1), tap(availableLangsIds => {
281
+ const languages = this.getAllLanguages();
282
+ const areAllLangsAvailable = availableLangsIds.length === 0;
283
+ this.rawLanguages = areAllLangsAvailable
284
+ ? languages
285
+ : languages.filter(({ id }) => id !== undefined && availableLangsIds.includes(id));
286
+ this.languages.set(this.rawLanguages.map(language => ({
287
+ label: typeof language.name === 'string' && language.name.length > 0
288
+ ? language.name.charAt(0).toUpperCase() + language.name.slice(1)
289
+ : 'Unknown',
290
+ value: language.name,
291
+ version: language.version,
292
+ })));
293
+ }), tap(() => {
294
+ this.loadingStateChanged.emit(false);
295
+ }), tap(() => {
296
+ const boilerplates = this.question?.context.boilerplates ?? [];
297
+ boilerplates.forEach(boilerplate => {
298
+ if (boilerplate.programming_language.name) {
299
+ this.initCodesMap.set(boilerplate.programming_language.name, boilerplate.code);
300
+ }
301
+ });
302
+ }), switchMap(() => this.libCodingTestService.currentLanguage$), tap((language) => {
303
+ const currentLang = this.rawLanguages.find(x => x.name === language);
304
+ if (currentLang) {
305
+ this.codingTestService.setCurrentLanguageLAT(currentLang);
306
+ }
307
+ const initCode = this.initCodesMap.get(language);
308
+ if (initCode) {
309
+ this.initCode = initCode;
310
+ this.updateCode(this.initCode);
311
+ }
312
+ }))
313
+ .subscribe(() => {
314
+ this.libCodingTestService.setBoilerplateLoadingStatus(false);
315
+ });
316
+ }
317
+ listenThemeChange() {
318
+ this.libCodingTestService.themeChanged$.pipe(untilDestroyed(this)).subscribe(theme => {
319
+ this.canopyUiTheme = theme === "theme-dark" /* Themes.Dark */ ? 'dark' : 'light';
320
+ this.themeChanged.emit(this.canopyUiTheme);
321
+ });
322
+ }
323
+ listenFullscreenChange() {
324
+ this.libCodingTestService.isFullscreen$
325
+ .pipe(untilDestroyed(this))
326
+ .subscribe(isFullscreen => this.fullscreenChanged.emit(isFullscreen));
327
+ }
328
+ listenDeleteCustomTestCases() {
329
+ this.codingTestService
330
+ .listenDeleteCustomTestCases()
331
+ .pipe(untilDestroyed(this))
332
+ .subscribe(({ index }) => {
333
+ this.codingTestService.handleDeleteTestCaseModal(index, this.canopyUiTheme, this.companyColor);
334
+ });
335
+ }
336
+ listenLanguageChange() {
337
+ this.libCodingTestService.currentLanguage$
338
+ .pipe(untilDestroyed(this))
339
+ .subscribe((language) => {
340
+ this.currentLanguage = language;
341
+ const code = this.initCodesMap.get(language);
342
+ if (code) {
343
+ this.initCode = code;
344
+ }
345
+ else {
346
+ this.initCode = '';
347
+ console.warn(`No initial code found for language: ${language}`);
348
+ }
349
+ });
350
+ }
351
+ listenResetCode() {
352
+ this.codingTestService
353
+ .listenCodingTestChanges()
354
+ .pipe(untilDestroyed(this))
355
+ .subscribe(() => {
356
+ this.codingTestService.handleResetCodeModal(this.canopyUiTheme, this.companyColor);
357
+ });
358
+ }
359
+ listenTestResults() {
360
+ this.codingTestService.codingTestResults$.pipe(untilDestroyed(this)).subscribe(results => {
361
+ this.codingTestResults = results;
362
+ });
363
+ }
364
+ setSqlTestCases() {
365
+ const testCases = this.question?.context?.sql_testcases.map(testCase => ({
366
+ ...testCase,
367
+ post_sql: testCase.post_sql || '',
368
+ initial_sql: this.question?.context?.initial_sql || '',
369
+ }));
370
+ this.codingTestService.setSqlTestCases(testCases);
371
+ this.exampleTestCases = testCases.map(this.codingTestService.transformToExampleSQLTestCase);
372
+ }
373
+ setTestCases() {
374
+ this.exampleTestCases = this.question?.context?.testcases?.map(this.codingTestService.transformToExampleLATtestCase);
375
+ }
376
+ setListeners() {
377
+ this.listenGuidedTourStart();
378
+ this.listenFullscreenChange();
379
+ this.listenThemeChange();
380
+ this.listenResetCode();
381
+ this.codingTestService.trackConfigChanged(!!this.test?.is_preview_mode);
382
+ this.listenTestResults();
383
+ if (this.isLAT) {
384
+ this.listenDeleteCustomTestCases();
385
+ this.listenLanguageChange();
386
+ }
387
+ }
388
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TgoCodingTestCandidateViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
389
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TgoCodingTestCandidateViewComponent, isStandalone: true, selector: "tgo-coding-test-candidate-view", inputs: { assessment: "assessment", question: "question", test: "test", expirationObservable: "expirationObservable", completeObservable: "completeObservable", isDemo: "isDemo" }, outputs: { validationStatusChanged: "validationStatusChanged", antiCheatingConfigurationChanged: "antiCheatingConfigurationChanged", fullscreenChanged: "fullscreenChanged", themeChanged: "themeChanged", codingFullscreenChanged: "codingFullscreenChanged", navigationButtonStateChanged: "navigationButtonStateChanged", configurationStateChanged: "configurationStateChanged", submissionStateChanged: "submissionStateChanged", loadingStateChanged: "loadingStateChanged" }, host: { properties: { "class": "this.hostClass" } }, providers: [
390
+ TranslocoLazyModuleUtils.getScopeProvider('tgo-coding-test', getAvailableLangs(), ROOT_TRANSLATIONS_SCOPE, (lang) => {
391
+ // Fetch from app assets; demo app copies the library assets to
392
+ // /assets/tgo-coding-test via project.json.
393
+ const url = new URL(`assets/tgo-coding-test/i18n/${lang}.json`, document.baseURI).href;
394
+ return fetch(url).then(res => res.json());
395
+ }),
396
+ EnvironmentService,
397
+ CoderunnerApiService,
398
+ CodingTestService,
399
+ CodingTestTourService,
400
+ GuidedTourService,
401
+ ThemeService,
402
+ CandidatureApiService,
403
+ MixpanelService,
404
+ // use MockedApiService for local demo ONLY
405
+ ApiService, //{ provide: ApiService, useClass: MockedApiService },
406
+ ], ngImport: i0, template: "<ng-container *transloco=\"let t; read: 'CODING_QUESTION'\">\n @if (languages()?.length && codingLibTranslations()) {\n <tgo-coding-test\n class=\"coding-lib\"\n [assessmentId]=\"assessment!.uuid!\"\n [questionId]=\"question!.question_id!\"\n [isLAT]=\"isLAT\"\n [canAddCustomTestCases]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [languages]=\"languages()\"\n [initCode]=\"initCode\"\n [mode]=\"mode\"\n [viewMode]=\"viewModes.Full\"\n [loading]=\"testResultsLoading()\"\n [companyColor]=\"companyColor\"\n [questionText]=\"question.text\"\n [testCasesStatus]=\"codingTestResults?.resume\"\n [runTestResponse]=\"codingTestResults?.listResponse!\"\n [exampleTestCases]=\"exampleTestCases\"\n [applicationTheme]=\"canopyUiTheme\"\n [translations]=\"codingLibTranslations()\"\n (codeChange)=\"updateCode($event)\"\n (runTestClick)=\"runTest()\"\n (languageChange)=\"languageChange($event)\"\n (pasteEvent)=\"screenshotPaste($event)\"\n >\n </tgo-coding-test>\n }\n</ng-container>\n\n<ngx-guided-tour\n [ngClass]=\"activeGuidedTourId$ | async\"\n [ngStyle]=\"{ '--company-color': companyColor }\"\n [class.dark]=\"canopyUiTheme === 'dark'\"\n></ngx-guided-tour>\n\n", styles: ["body.tour-open{overflow:hidden}ngx-guided-tour .guided-tour-user-input-mask{z-index:1081}ngx-guided-tour .guided-tour-spotlight-overlay{z-index:1082}ngx-guided-tour .tour-orb{z-index:1079;background-color:#625aff;box-shadow:0 0 .3rem .1rem #625aff}ngx-guided-tour .tour-orb .tour-orb-ring:after{border:1rem solid #625aff;box-shadow:0 0 .1rem .1rem #625aff}ngx-guided-tour .tour-step{z-index:1083}ngx-guided-tour .tour-step.tour-bottom .tour-arrow:before,ngx-guided-tour .tour-step.tour-bottom-right .tour-arrow:before,ngx-guided-tour .tour-step.tour-bottom-left .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-bottom:1rem solid #ffffff;border-left:1rem solid transparent;border-right:1rem solid transparent}ngx-guided-tour .tour-step.tour-top .tour-arrow:before,ngx-guided-tour .tour-step.tour-top-right .tour-arrow:before,ngx-guided-tour .tour-step.tour-top-left .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-top:1rem solid #ffffff;border-left:1rem solid transparent;border-right:1rem solid transparent}ngx-guided-tour .tour-step.tour-left .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-left:1rem solid #ffffff;border-bottom:1rem solid transparent;border-top:1rem solid transparent}ngx-guided-tour .tour-step.tour-right .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-right:1rem solid #ffffff;border-bottom:1rem solid transparent;border-top:1rem solid transparent}ngx-guided-tour .tour-step .tour-block{color:#231f1f;background-color:#fff;box-shadow:0 .4rem .6rem #4c4c4c}ngx-guided-tour .tour-step .tour-buttons button.skip-button{color:#5e5e5e}ngx-guided-tour .tour-step .tour-buttons .back-button{color:#007bff}ngx-guided-tour .tour-step .tour-buttons .next-button{background-color:#007bff;color:#fff}ngx-guided-tour .tour-step .tour-buttons .next-button:hover{background-color:#0069d9;color:#fff}.bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}body.tour-open ngx-guided-tour{--guided-tour-background-color: #ffffff;--guided-tour-text-color: #000000}body.tour-open ngx-guided-tour.dark{--guided-tour-background-color: #2d2d2d;--guided-tour-text-color: #ffffff}body.tour-open ngx-guided-tour .tour-step.hidden{display:none}body.tour-open ngx-guided-tour .tour-step h2.tour-title,body.tour-open ngx-guided-tour .tour-step h3.tour-title{font-size:20px;padding-bottom:0;margin-top:0}body.tour-open ngx-guided-tour .tour-step .tour-block{color:var(--guided-tour-text-color);background-color:var(--guided-tour-background-color);border-radius:5px;padding:37px;box-shadow:0 0 13px #bbb}body.tour-open ngx-guided-tour .tour-step .tour-buttons button{text-align:center;border-radius:5px;width:45%;height:48px;padding:0;font-weight:600}body.tour-open ngx-guided-tour .tour-step .tour-buttons button.skip-button{background:#e2e2e2}body.tour-open ngx-guided-tour .tour-step .tour-buttons button.next-button{color:#fff;background-color:#46a997}body.tour-open ngx-guided-tour .tour-step .tour-buttons button.back-button{display:none}body.tour-open ngx-guided-tour .tour-step.tour-bottom .tour-arrow:before{border-bottom:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-top .tour-arrow:before{border-top:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-left .tour-arrow:before{border-left:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-right .tour-arrow:before{border-right:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-bottom-right .tour-arrow:before{border-bottom-color:var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step .tour-content{text-align:center;font-size:14px}body.tour-open ngx-guided-tour .tour-step h2.tour-title{text-align:center}body.tour-open ngx-guided-tour .tour-step h3.tour-title{text-align:center}body.tour-open ngx-guided-tour .guided-tour-spotlight-overlay{box-shadow:0 0 0 9999px #0000004d,0 0 1.5rem #00000026;border-radius:5px}body.tour-open ngx-guided-tour.lat-coding-tour h3.tour-title,body.tour-open ngx-guided-tour.lat-coding-tour h2.tour-title,body.tour-open ngx-guided-tour.lat-coding-tour .tour-content{text-align:left}body.tour-open ngx-guided-tour.lat-coding-tour .tour-content{padding-bottom:24px}body.tour-open ngx-guided-tour.lat-coding-tour .tour-buttons button.skip-button{background:#fff;border:1px solid #000000}body.tour-open ngx-guided-tour.lat-coding-tour .tour-buttons button.next-button{background-color:var(--company-color, #D410AA)}body.tour-open[theme=dark] ngx-guided-tour .tour-step .tour-block{box-shadow:none}body.tour-open[theme=dark] ngx-guided-tour .guided-tour-spotlight-overlay{box-shadow:0 0 0 9999px #000000a6,0 0 1.5rem #00000080;border-radius:5px}body.theme-dark ngx-guided-tour .tour-step .tour-block{box-shadow:none}body.theme-dark ngx-guided-tour .guided-tour-spotlight-overlay{box-shadow:0 0 0 9999px #000000a6,0 0 1.5rem #00000080;border-radius:5px}body .tgo-test-code{display:flex;flex:1;justify-content:center}body .tgo-test-code tgo-question,body .tgo-test-code tgo-micro-test-library-shell-container{display:flex}body[theme=dark] .micro-question-code .coding-lib ui-dropdown .mat-mdc-text-field-wrapper,body[theme=dark] .micro-question-code .coding-lib ui-field .mat-mdc-text-field-wrapper{background-color:transparent}.micro-question-code{display:flex}.micro-question-code .coding-lib{display:block;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: DialogComponentModule }, { kind: "ngmodule", type: SnackbarComponentModule }, { kind: "component", type: TgoCodingTestComponent, selector: "tgo-coding-test[languages]", inputs: ["initCode", "snapshot", "functionParams", "functionName", "returnType", "isLAT", "isSQL", "shouldGenerateInitCode", "canAddCustomTestCases", "selectedProgrammingLanguage", "languages", "isReadonly", "autoHeight", "translations", "questionText", "mode", "assessmentId", "companyColor", "testCasesStatus", "loading", "runTestResponse", "viewMode", "exampleTestCases", "hideTestCases", "applicationTheme", "questionId"], outputs: ["pasteEvent", "codeChange", "runTestClick", "languageChange"] }, { kind: "ngmodule", type: GuidedTourModule }, { kind: "component", type: i2.GuidedTourComponent, selector: "ngx-guided-tour", inputs: ["topOfPageAdjustment", "tourStepWidth", "minimalTourStepWidth", "skipText", "nextText", "doneText", "closeText", "backText", "progressIndicatorLocation", "progressIndicator"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }], encapsulation: i0.ViewEncapsulation.None });
407
+ };
408
+ TgoCodingTestCandidateViewComponent = __decorate([
409
+ UntilDestroy()
410
+ ], TgoCodingTestCandidateViewComponent);
411
+ export { TgoCodingTestCandidateViewComponent };
412
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TgoCodingTestCandidateViewComponent, decorators: [{
413
+ type: Component,
414
+ args: [{ standalone: true, selector: 'tgo-coding-test-candidate-view', encapsulation: ViewEncapsulation.None, imports: [
415
+ TranslocoModule,
416
+ DialogComponentModule,
417
+ SnackbarComponentModule,
418
+ TgoCodingTestComponent,
419
+ GuidedTourModule,
420
+ CommonModule,
421
+ RouterModule,
422
+ ], providers: [
423
+ TranslocoLazyModuleUtils.getScopeProvider('tgo-coding-test', getAvailableLangs(), ROOT_TRANSLATIONS_SCOPE, (lang) => {
424
+ // Fetch from app assets; demo app copies the library assets to
425
+ // /assets/tgo-coding-test via project.json.
426
+ const url = new URL(`assets/tgo-coding-test/i18n/${lang}.json`, document.baseURI).href;
427
+ return fetch(url).then(res => res.json());
428
+ }),
429
+ EnvironmentService,
430
+ CoderunnerApiService,
431
+ CodingTestService,
432
+ CodingTestTourService,
433
+ GuidedTourService,
434
+ ThemeService,
435
+ CandidatureApiService,
436
+ MixpanelService,
437
+ // use MockedApiService for local demo ONLY
438
+ ApiService, //{ provide: ApiService, useClass: MockedApiService },
439
+ ], template: "<ng-container *transloco=\"let t; read: 'CODING_QUESTION'\">\n @if (languages()?.length && codingLibTranslations()) {\n <tgo-coding-test\n class=\"coding-lib\"\n [assessmentId]=\"assessment!.uuid!\"\n [questionId]=\"question!.question_id!\"\n [isLAT]=\"isLAT\"\n [canAddCustomTestCases]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [languages]=\"languages()\"\n [initCode]=\"initCode\"\n [mode]=\"mode\"\n [viewMode]=\"viewModes.Full\"\n [loading]=\"testResultsLoading()\"\n [companyColor]=\"companyColor\"\n [questionText]=\"question.text\"\n [testCasesStatus]=\"codingTestResults?.resume\"\n [runTestResponse]=\"codingTestResults?.listResponse!\"\n [exampleTestCases]=\"exampleTestCases\"\n [applicationTheme]=\"canopyUiTheme\"\n [translations]=\"codingLibTranslations()\"\n (codeChange)=\"updateCode($event)\"\n (runTestClick)=\"runTest()\"\n (languageChange)=\"languageChange($event)\"\n (pasteEvent)=\"screenshotPaste($event)\"\n >\n </tgo-coding-test>\n }\n</ng-container>\n\n<ngx-guided-tour\n [ngClass]=\"activeGuidedTourId$ | async\"\n [ngStyle]=\"{ '--company-color': companyColor }\"\n [class.dark]=\"canopyUiTheme === 'dark'\"\n></ngx-guided-tour>\n\n", styles: ["body.tour-open{overflow:hidden}ngx-guided-tour .guided-tour-user-input-mask{z-index:1081}ngx-guided-tour .guided-tour-spotlight-overlay{z-index:1082}ngx-guided-tour .tour-orb{z-index:1079;background-color:#625aff;box-shadow:0 0 .3rem .1rem #625aff}ngx-guided-tour .tour-orb .tour-orb-ring:after{border:1rem solid #625aff;box-shadow:0 0 .1rem .1rem #625aff}ngx-guided-tour .tour-step{z-index:1083}ngx-guided-tour .tour-step.tour-bottom .tour-arrow:before,ngx-guided-tour .tour-step.tour-bottom-right .tour-arrow:before,ngx-guided-tour .tour-step.tour-bottom-left .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-bottom:1rem solid #ffffff;border-left:1rem solid transparent;border-right:1rem solid transparent}ngx-guided-tour .tour-step.tour-top .tour-arrow:before,ngx-guided-tour .tour-step.tour-top-right .tour-arrow:before,ngx-guided-tour .tour-step.tour-top-left .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-top:1rem solid #ffffff;border-left:1rem solid transparent;border-right:1rem solid transparent}ngx-guided-tour .tour-step.tour-left .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-left:1rem solid #ffffff;border-bottom:1rem solid transparent;border-top:1rem solid transparent}ngx-guided-tour .tour-step.tour-right .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-right:1rem solid #ffffff;border-bottom:1rem solid transparent;border-top:1rem solid transparent}ngx-guided-tour .tour-step .tour-block{color:#231f1f;background-color:#fff;box-shadow:0 .4rem .6rem #4c4c4c}ngx-guided-tour .tour-step .tour-buttons button.skip-button{color:#5e5e5e}ngx-guided-tour .tour-step .tour-buttons .back-button{color:#007bff}ngx-guided-tour .tour-step .tour-buttons .next-button{background-color:#007bff;color:#fff}ngx-guided-tour .tour-step .tour-buttons .next-button:hover{background-color:#0069d9;color:#fff}.bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}body.tour-open ngx-guided-tour{--guided-tour-background-color: #ffffff;--guided-tour-text-color: #000000}body.tour-open ngx-guided-tour.dark{--guided-tour-background-color: #2d2d2d;--guided-tour-text-color: #ffffff}body.tour-open ngx-guided-tour .tour-step.hidden{display:none}body.tour-open ngx-guided-tour .tour-step h2.tour-title,body.tour-open ngx-guided-tour .tour-step h3.tour-title{font-size:20px;padding-bottom:0;margin-top:0}body.tour-open ngx-guided-tour .tour-step .tour-block{color:var(--guided-tour-text-color);background-color:var(--guided-tour-background-color);border-radius:5px;padding:37px;box-shadow:0 0 13px #bbb}body.tour-open ngx-guided-tour .tour-step .tour-buttons button{text-align:center;border-radius:5px;width:45%;height:48px;padding:0;font-weight:600}body.tour-open ngx-guided-tour .tour-step .tour-buttons button.skip-button{background:#e2e2e2}body.tour-open ngx-guided-tour .tour-step .tour-buttons button.next-button{color:#fff;background-color:#46a997}body.tour-open ngx-guided-tour .tour-step .tour-buttons button.back-button{display:none}body.tour-open ngx-guided-tour .tour-step.tour-bottom .tour-arrow:before{border-bottom:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-top .tour-arrow:before{border-top:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-left .tour-arrow:before{border-left:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-right .tour-arrow:before{border-right:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-bottom-right .tour-arrow:before{border-bottom-color:var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step .tour-content{text-align:center;font-size:14px}body.tour-open ngx-guided-tour .tour-step h2.tour-title{text-align:center}body.tour-open ngx-guided-tour .tour-step h3.tour-title{text-align:center}body.tour-open ngx-guided-tour .guided-tour-spotlight-overlay{box-shadow:0 0 0 9999px #0000004d,0 0 1.5rem #00000026;border-radius:5px}body.tour-open ngx-guided-tour.lat-coding-tour h3.tour-title,body.tour-open ngx-guided-tour.lat-coding-tour h2.tour-title,body.tour-open ngx-guided-tour.lat-coding-tour .tour-content{text-align:left}body.tour-open ngx-guided-tour.lat-coding-tour .tour-content{padding-bottom:24px}body.tour-open ngx-guided-tour.lat-coding-tour .tour-buttons button.skip-button{background:#fff;border:1px solid #000000}body.tour-open ngx-guided-tour.lat-coding-tour .tour-buttons button.next-button{background-color:var(--company-color, #D410AA)}body.tour-open[theme=dark] ngx-guided-tour .tour-step .tour-block{box-shadow:none}body.tour-open[theme=dark] ngx-guided-tour .guided-tour-spotlight-overlay{box-shadow:0 0 0 9999px #000000a6,0 0 1.5rem #00000080;border-radius:5px}body.theme-dark ngx-guided-tour .tour-step .tour-block{box-shadow:none}body.theme-dark ngx-guided-tour .guided-tour-spotlight-overlay{box-shadow:0 0 0 9999px #000000a6,0 0 1.5rem #00000080;border-radius:5px}body .tgo-test-code{display:flex;flex:1;justify-content:center}body .tgo-test-code tgo-question,body .tgo-test-code tgo-micro-test-library-shell-container{display:flex}body[theme=dark] .micro-question-code .coding-lib ui-dropdown .mat-mdc-text-field-wrapper,body[theme=dark] .micro-question-code .coding-lib ui-field .mat-mdc-text-field-wrapper{background-color:transparent}.micro-question-code{display:flex}.micro-question-code .coding-lib{display:block;height:100%}\n"] }]
440
+ }], propDecorators: { assessment: [{
441
+ type: Input
442
+ }], question: [{
443
+ type: Input,
444
+ args: [{ required: true }]
445
+ }], test: [{
446
+ type: Input,
447
+ args: [{ required: true }]
448
+ }], expirationObservable: [{
449
+ type: Input
450
+ }], completeObservable: [{
451
+ type: Input
452
+ }], isDemo: [{
453
+ type: Input
454
+ }], validationStatusChanged: [{
455
+ type: Output
456
+ }], antiCheatingConfigurationChanged: [{
457
+ type: Output
458
+ }], fullscreenChanged: [{
459
+ type: Output
460
+ }], themeChanged: [{
461
+ type: Output
462
+ }], codingFullscreenChanged: [{
463
+ type: Output
464
+ }], navigationButtonStateChanged: [{
465
+ type: Output
466
+ }], configurationStateChanged: [{
467
+ type: Output
468
+ }], submissionStateChanged: [{
469
+ type: Output
470
+ }], loadingStateChanged: [{
471
+ type: Output
472
+ }], hostClass: [{
473
+ type: HostBinding,
474
+ args: ['class']
475
+ }] } });
476
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGdvLWNvZGluZy10ZXN0LWNhbmRpZGF0ZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Rnby1jb2RpbmctdGVzdC9zcmMvbGliL2NvbXBvbmVudHMvdGdvLWNvZGluZy10ZXN0LWNhbmRpZGF0ZS12aWV3L3Rnby1jb2RpbmctdGVzdC1jYW5kaWRhdGUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL3Rnby1jb2RpbmctdGVzdC1jYW5kaWRhdGUtdmlldy90Z28tY29kaW5nLXRlc3QtY2FuZGlkYXRlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLE1BQU0sRUFDTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFDTCxVQUFVLEVBRVYsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQU1qQixlQUFlLEVBR2YsWUFBWSxFQUNaLHdCQUF3QixHQUN6QixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFFTCxzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLGFBQWEs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WixxQkFBcUI7d0JBQ3JCLGVBQWU7d0JBRWYsMkNBQTJDO3dCQUMzQyxVQUFVLEVBQUUsc0RBQXNEO3FCQUNuRTs4QkFrQlEsVUFBVTtzQkFBbEIsS0FBSztnQkFDcUIsUUFBUTtzQkFBbEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsSUFBSTtzQkFBOUIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2hCLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUVJLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFDRyxnQ0FBZ0M7c0JBQXpDLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csdUJBQXVCO3NCQUFoQyxNQUFNO2dCQUNHLDRCQUE0QjtzQkFBckMsTUFBTTtnQkFDRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFFZSxTQUFTO3NCQUE5QixXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgc2lnbmFsLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IHRyYW5zbGF0ZSwgVFJBTlNMT0NPX1NDT1BFLCBUcmFuc2xvY29Nb2R1bGUsIFRyYW5zbG9jb1NlcnZpY2UgfSBmcm9tICdAbmduZWF0L3RyYW5zbG9jbyc7XG5pbXBvcnQgeyBVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7XG4gIEFwaVNlcnZpY2UsXG4gIEFzc2Vzc21lbnQsXG4gIEVudmlyb25tZW50U2VydmljZSxcbiAgZ2V0QXZhaWxhYmxlTGFuZ3MsXG4gIElBbnRpQ2hlYXRpbmdTdGF0ZSxcbiAgSUNvbmZpZ3VyYXRpb25TdGF0ZSxcbiAgSU5hdmlnYXRpb25CdXR0b25TdGF0ZSxcbiAgSVF1ZXN0aW9uRGF0YUNvbnRyYWN0LFxuICBJU3VibWlzc2lvblN0YXRlLFxuICBNaXhwYW5lbFNlcnZpY2UsXG4gIFF1ZXN0aW9uLFxuICBUZXN0UmVzdWx0UmVhZCxcbiAgVGhlbWVTZXJ2aWNlLFxuICBUcmFuc2xvY29MYXp5TW9kdWxlVXRpbHMsXG59IGZyb20gJ0B0ZXN0Z29yaWxsYS90Z28tdGVzdC1zaGFyZWQnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25UaGVtZSxcbiAgQ29uZmlybURpYWxvZ0NvbXBvbmVudCxcbiAgRGlhbG9nQ29tcG9uZW50TW9kdWxlLFxuICBEaWFsb2dTZXJ2aWNlLFxuICBTbmFja2JhckNvbXBvbmVudE1vZHVsZSxcbn0gZnJvbSAnQHRlc3Rnb3JpbGxhL3Rnby11aSc7XG5pbXBvcnQgeyBHdWlkZWRUb3VyTW9kdWxlLCBHdWlkZWRUb3VyU2VydmljZSB9IGZyb20gJ25neC1ndWlkZWQtdG91cic7XG5pbXBvcnQgeyBpbnRlcnZhbCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ29kaW5nVGVzdHNSZXN1bHRzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29kZXJ1bm5lci1leGVjdXRpb24tcmVzdWx0cyc7XG5pbXBvcnQgeyBMQVRMYW5ndWFnZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvbGF0LWxhbmd1YWdlcyc7XG5pbXBvcnQgeyBNb2RlcyB9IGZyb20gJy4uLy4uL21vZGVscy9tb2RlJztcbmltcG9ydCB7IFBhc3RlRGF0YSB9IGZyb20gJy4uLy4uL21vZGVscy9wYXN0ZS1kYXRhJztcbmltcG9ydCB7XG4gIFByb2dyYW1taW5nTGFuZ3VhZ2UsXG4gIFByb2dyYW1taW5nTGFuZ3VhZ2VWZXJzaW9uZWQsXG59IGZyb20gJy4uLy4uL21vZGVscy9wcm9ncmFtbWluZy1sYW5ndWFnZSc7XG5pbXBvcnQgeyBFeGFtcGxlVGVzdENhc2UsIFNxbFRlc3RDYXNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Rlc3QtY2FzZXMnO1xuaW1wb3J0IHsgVGhlbWVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RoZW1lJztcbmltcG9ydCB7IFJPT1RfVFJBTlNMQVRJT05TX1NDT1BFIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RyYW5zbGF0aW9ucyc7XG5pbXBvcnQgeyBWaWV3TW9kZSB9IGZyb20gJy4uLy4uL21vZGVscy92aWV3LW1vZGUnO1xuaW1wb3J0IHtcbiAgQ2FuZGlkYXR1cmVBcGlTZXJ2aWNlLFxuICBDb2RlcnVubmVyQXBpU2VydmljZSxcbiAgQ29kaW5nVGVzdFNlcnZpY2UsXG4gIENvZGluZ1Rlc3RUb3VyTW9kZSxcbiAgQ29kaW5nVGVzdFRvdXJTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYW5kaWRhdGUtY29kaW5nLXRlc3Qtc2VydmljZXMnO1xuaW1wb3J0IHsgQ29kaW5nVGVzdENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb2RpbmctdGVzdC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBMaWJDb2RpbmdUZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xpYi1jb2RpbmctdGVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENvZGVFZGl0b3JMYW5ndWFnZXMgfSBmcm9tICcuLi9jb2RlLWVkaXRvci9oZWxwZXJzL2NvZGUtZWRpdG9yLWhlbHBlci5tb2RlbCc7XG5pbXBvcnQgeyBUZ29Db2RpbmdUZXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vdGdvLWNvZGluZy10ZXN0L3Rnby1jb2RpbmctdGVzdC5jb21wb25lbnQnO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3Rnby1jb2RpbmctdGVzdC1jYW5kaWRhdGUtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi90Z28tY29kaW5nLXRlc3QtY2FuZGlkYXRlLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90Z28tY29kaW5nLXRlc3QtY2FuZGlkYXRlLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbG9jb01vZHVsZSxcbiAgICBEaWFsb2dDb21wb25lbnRNb2R1bGUsXG4gICAgU25hY2tiYXJDb21wb25lbnRNb2R1bGUsXG4gICAgVGdvQ29kaW5nVGVzdENvbXBvbmVudCxcbiAgICBHdWlkZWRUb3VyTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSb3V0ZXJNb2R1bGUsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIFRyYW5zbG9jb0xhenlNb2R1bGVVdGlscy5nZXRTY29wZVByb3ZpZGVyKFxuICAgICAgJ3Rnby1jb2RpbmctdGVzdCcsXG4gICAgICBnZXRBdmFpbGFibGVMYW5ncygpLFxuICAgICAgUk9PVF9UUkFOU0xBVElPTlNfU0NPUEUsXG4gICAgICAobGFuZzogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vIEZldGNoIGZyb20gYXBwIGFzc2V0czsgZGVtbyBhcHAgY29waWVzIHRoZSBsaWJyYXJ5IGFzc2V0cyB0b1xuICAgICAgICAvLyAvYXNzZXRzL3Rnby1jb2RpbmctdGVzdCB2aWEgcHJvamVjdC5qc29uLlxuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGBhc3NldHMvdGdvLWNvZGluZy10ZXN0L2kxOG4vJHtsYW5nfS5qc29uYCwgZG9jdW1lbnQuYmFzZVVSSSkuaHJlZjtcbiAgICAgICAgcmV0dXJuIGZldGNoKHVybCkudGhlbihyZXMgPT4gcmVzLmpzb24oKSk7XG4gICAgICB9XG4gICAgKSxcbiAgICBFbnZpcm9ubWVudFNlcnZpY2UsXG4gICAgQ29kZXJ1bm5lckFwaVNlcnZpY2UsXG4gICAgQ29kaW5nVGVzdFNlcnZpY2UsXG4gICAgQ29kaW5nVGVzdFRvdXJTZXJ2aWNlLFxuICAgIEd1aWRlZFRvdXJTZXJ2aWNlLFxuICAgIFRoZW1lU2VydmljZSxcbiAgICBDYW5kaWRhdHVyZUFwaVNlcnZpY2UsXG4gICAgTWl4cGFuZWxTZXJ2aWNlLFxuXG4gICAgLy8gdXNlIE1vY2tlZEFwaVNlcnZpY2UgZm9yIGxvY2FsIGRlbW8gT05MWVxuICAgIEFwaVNlcnZpY2UsIC8veyBwcm92aWRlOiBBcGlTZXJ2aWNlLCB1c2VDbGFzczogTW9ja2VkQXBpU2VydmljZSB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUZ29Db2RpbmdUZXN0Q2FuZGlkYXRlVmlld0NvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgSVF1ZXN0aW9uRGF0YUNvbnRyYWN0LCBPbkRlc3Ryb3lcbntcbiAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0aW9uU2NvcGUgPSBpbmplY3QoVFJBTlNMT0NPX1NDT1BFKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjYW5kaWRhdHVyZUFwaVNlcnZpY2UgPSBpbmplY3QoQ2FuZGlkYXR1cmVBcGlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb2RpbmdUZXN0VG91clNlcnZpY2UgPSBpbmplY3QoQ29kaW5nVGVzdFRvdXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsaWJDb2RpbmdUZXN0U2VydmljZSA9IGluamVjdChMaWJDb2RpbmdUZXN0U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW52aXJvbm1lbnRTZXJ2aWNlID0gaW5qZWN0KEVudmlyb25tZW50U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29kaW5nVGVzdFNlcnZpY2UgPSBpbmplY3QoQ29kaW5nVGVzdFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbG9jb1NlcnZpY2UgPSBpbmplY3QoVHJhbnNsb2NvU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGhlbWVTZXJ2aWNlID0gaW5qZWN0KFRoZW1lU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpU2VydmljZSA9IGluamVjdChBcGlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29kaW5nVGVzdENvbmZpZ1NlcnZpY2UgPSBpbmplY3QoQ29kaW5nVGVzdENvbmZpZ1NlcnZpY2UpO1xuXG4gIEBJbnB1dCgpIGFzc2Vzc21lbnQ/OiBBc3Nlc3NtZW50O1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBxdWVzdGlvbiE6IFF1ZXN0aW9uO1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSB0ZXN0ITogVGVzdFJlc3VsdFJlYWQ7XG4gIEBJbnB1dCgpIGV4cGlyYXRpb25PYnNlcnZhYmxlPzogT2JzZXJ2YWJsZTx2b2lkPjtcbiAgQElucHV0KCkgY29tcGxldGVPYnNlcnZhYmxlPzogT2JzZXJ2YWJsZTx2b2lkPjtcbiAgQElucHV0KCkgaXNEZW1vPzogYm9vbGVhbjtcblxuICBAT3V0cHV0KCkgdmFsaWRhdGlvblN0YXR1c0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIEBPdXRwdXQoKSBhbnRpQ2hlYXRpbmdDb25maWd1cmF0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUFudGlDaGVhdGluZ1N0YXRlIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIGZ1bGxzY3JlZW5DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgdGhlbWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxBcHBsaWNhdGlvblRoZW1lPigpO1xuICBAT3V0cHV0KCkgY29kaW5nRnVsbHNjcmVlbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBuYXZpZ2F0aW9uQnV0dG9uU3RhdGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJTmF2aWdhdGlvbkJ1dHRvblN0YXRlIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIGNvbmZpZ3VyYXRpb25TdGF0ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElDb25maWd1cmF0aW9uU3RhdGUgfCBudWxsPigpO1xuICBAT3V0cHV0KCkgc3VibWlzc2lvblN0YXRlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVN1Ym1pc3Npb25TdGF0ZSB8IG51bGw+KCk7XG4gIEBPdXRwdXQoKSBsb2FkaW5nU3RhdGVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGhvc3RDbGFzcyA9ICdtaWNyby1xdWVzdGlvbi1jb2RlJztcblxuICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGluaXRDb2RlID0gJyc7XG4gIHZpZXdNb2RlcyA9IFZpZXdNb2RlO1xuICBtb2RlOiBNb2RlcyA9IE1vZGVzLlJ1bm5pbmc7XG4gIGNvbXBhbnlDb2xvciA9IHRoaXMudGhlbWVTZXJ2aWNlLmdldENvbXBhbnlDb2xvcigpO1xuICBpbml0Q29kZXNNYXAgPSBuZXcgTWFwPENvZGVFZGl0b3JMYW5ndWFnZXMsIHN0cmluZz4oKTtcbiAgbGFuZ3VhZ2VzID0gc2lnbmFsPExBVExhbmd1YWdlcz4oW10pO1xuICBjb2RpbmdMaWJUcmFuc2xhdGlvbnMgPSBzaWduYWw8eyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfT4oe30pO1xuICByYXdMYW5ndWFnZXM6IFByb2dyYW1taW5nTGFuZ3VhZ2VbXSA9IFtdO1xuICBjdXJyZW50TGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIGlzU1FMID0gZmFsc2U7XG4gIGlzTEFUID0gdHJ1ZTtcbiAgY29kZSA9ICcnO1xuICBjb2RpbmdUZXN0UmVzdWx0cz86IENvZGluZ1Rlc3RzUmVzdWx0c01vZGVsO1xuICB0ZXN0UmVzdWx0c0xvYWRpbmcgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvZGluZ1Rlc3RTZXJ2aWNlLmlzVGVzdFJlc3VsdHNMb2FkaW5nKCkpO1xuICBleGFtcGxlVGVzdENhc2VzOiBFeGFtcGxlVGVzdENhc2VbXSA9IFtdO1xuICBhY3RpdmVHdWlkZWRUb3VySWQkID0gdGhpcy5jb2RpbmdUZXN0VG91clNlcnZpY2UuYWN0aXZlR3VpZGVkVG91cklkJDtcbiAgZmlyc3RUZXN0UnVuQ29tcGxldGUgPSBmYWxzZTtcbiAgY2Fub3B5VWlUaGVtZTogQXBwbGljYXRpb25UaGVtZSA9ICdsaWdodCc7XG5cbiAgcHJpdmF0ZSB3YXNUb3VyU2hvd24gPSBmYWxzZTtcblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGVzdD8uaXNfcHJldmlld19tb2RlKSB7XG4gICAgICB0aGlzLmFudGlDaGVhdGluZ0NvbmZpZ3VyYXRpb25DaGFuZ2VkLmVtaXQoe1xuICAgICAgICBmdWxsc2NyZWVuVHJhY2tpbmc6IGZhbHNlLFxuICAgICAgICBtb3VzZUV2ZW50VHJhY2tpbmc6IGZhbHNlLFxuICAgICAgICBzbmFwc2hvdHNUcmFja2luZzogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXR1cFN0YXRlKCk7XG4gICAgdGhpcy5oYW5kbGVHdWlkZWRUb3VyKCk7XG5cbiAgICBpZiAoIXRoaXMudGVzdD8uaXNfcHJldmlld19tb2RlKSB7XG4gICAgICB0aGlzLmFudGlDaGVhdGluZ0NvbmZpZ3VyYXRpb25DaGFuZ2VkLmVtaXQoe1xuICAgICAgICBmdWxsc2NyZWVuVHJhY2tpbmc6IHRydWUsXG4gICAgICAgIG1vdXNlRXZlbnRUcmFja2luZzogdHJ1ZSxcbiAgICAgICAgc25hcHNob3RzVHJhY2tpbmc6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZXR1cEF1dG9zYXZlRXZlbnQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc05leHRRdWVzdGlvbkRpc2FibGVkID0gIXRoaXMudGVzdD8uaXNfcHJldmlld19tb2RlO1xuXG4gICAgdGhpcy5jb25maWd1cmF0aW9uU3RhdGVDaGFuZ2VkLmVtaXQoe1xuICAgICAgaXNTYXZpbmdRdWVzdGlvbkRpc2FibGVkOiBpc05leHRRdWVzdGlvbkRpc2FibGVkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYXZpZ2F0aW9uQnV0dG9uU3RhdGVDaGFuZ2VkLmVtaXQoe1xuICAgICAgZGlzYWJsZWQ6IGlzTmV4dFF1ZXN0aW9uRGlzYWJsZWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmV4cGlyYXRpb25PYnNlcnZhYmxlPy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNsZWFyU2F2ZWRDb2RlKCk7XG4gICAgICAgIGlmICghdGhpcy50ZXN0Py5pc19wcmV2aWV3X21vZGUpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyTGFzdExhbmd1YWdlU2VsZWN0ZWQoKTtcbiAgICAgICAgICB0aGlzLnN1Ym1pdENvZGUoKTtcbiAgICAgICAgICB0aGlzLmVuYWJsZU5leHRCdXR0b24oKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5jb21wbGV0ZU9ic2VydmFibGU/LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy50ZXN0Py5pc19wcmV2aWV3X21vZGUpIHtcbiAgICAgICAgICB0aGlzLm9wZW5TYXZlRGlhbG9nKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jbGVhclNhdmVkQ29kZSgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAoIXRoaXMuaXNTUUwpIHtcbiAgICAgIHRoaXMubG9hZEF2YWlsYWJsZUxhbmd1YWdlcygpO1xuICAgICAgdGhpcy5zZXRUZXN0Q2FzZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTcWxUZXN0Q2FzZXMoKTtcbiAgICAgIHRoaXMuc2V0U3FsTGFuZygpO1xuICAgICAgdGhpcy5zZXRTcWxJbml0Q29kZSgpO1xuICAgICAgdGhpcy5sb2FkaW5nU3RhdGVDaGFuZ2VkLmVtaXQoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLnNldExpc3RlbmVycygpO1xuICB9XG5cbiAgb3BlblNhdmVEaWFsb2coKTogdm9pZCB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQ29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgYXBwbGljYXRpb25UaGVtZTogdGhpcy5jYW5vcHlVaVRoZW1lLFxuICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgIHBhbmVsQ2xhc3M6ICcnLFxuICAgICAgZXh0cmFEYXRhOiB7XG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0NPRElOR19RVUVTVElPTi5NT0RBTFMuRklOSVNIX1RFU1QuVElUTEUnKSA/PyAnJyxcbiAgICAgICAgbWVzc2FnZTogdHJhbnNsYXRlKCdDT0RJTkdfUVVFU1RJT04uTU9EQUxTLkZJTklTSF9URVNULk1FU1NBR0UnKSA/PyAnJyxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IHRyYW5zbGF0ZSgnQ09ESU5HX1FVRVNUSU9OLk1PREFMUy5GSU5JU0hfVEVTVC5TVUJNSVQnKSA/PyAnJyxcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogdHJhbnNsYXRlKCdDT0RJTkdfUVVFU1RJT04uTU9EQUxTLkZJTklTSF9URVNULkNBTkNFTCcpID8/ICcnLFxuICAgICAgICBjb2xvcjogdGhpcy5jb21wYW55Q29sb3IsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2xlYXJTYXZlZENvZGUoKTtcbiAgICAgIHRoaXMuY2xlYXJMYXN0TGFuZ3VhZ2VTZWxlY3RlZCgpO1xuICAgICAgdGhpcy5zdWJtaXRDb2RlKCk7XG4gICAgICB0aGlzLmVuYWJsZU5leHRCdXR0b24oKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJMYXN0TGFuZ3VhZ2VTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmxpYkNvZGluZ1Rlc3RTZXJ2aWNlLmNsZWFyTGFzdExhbmd1YWdlU2VsZWN0ZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJTYXZlZENvZGUoKSB7XG4gICAgdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS50cmlnZ2VyQ2xlYXJTYXZlZENvZGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3VibWl0Q29kZSgpIHtcbiAgICBpZiAodGhpcy5jb2RlKSB7XG4gICAgICB0aGlzLnN1Ym1pc3Npb25TdGF0ZUNoYW5nZWQ/LmVtaXQoe1xuICAgICAgICB0ZXh0OiB0aGlzLmNvZGUsXG4gICAgICAgIGxhbmd1YWdlOiB0aGlzLmdldFZlcnNpb25lZExhbmd1YWdlKCksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFZlcnNpb25lZExhbmd1YWdlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmN1cnJlbnRMYW5ndWFnZTtcblxuICAgIGlmICghbGFuZ3VhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NRTCkge1xuICAgICAgcmV0dXJuIFByb2dyYW1taW5nTGFuZ3VhZ2VWZXJzaW9uZWQuU1FMaXRlO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtsYW5ndWFnZX0tJHt0aGlzLmxpYkNvZGluZ1Rlc3RTZXJ2aWNlLmdldFZlcnNpb24oKX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVOZXh0QnV0dG9uKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlndXJhdGlvblN0YXRlQ2hhbmdlZC5lbWl0KHtcbiAgICAgIGlzU2F2aW5nUXVlc3Rpb25EaXNhYmxlZDogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBsYW5ndWFnZUNoYW5nZShzZWxlY3RlZExhbmdOYW1lOiBDb2RlRWRpdG9yTGFuZ3VhZ2VzKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRMYW5nID0gdGhpcy5yYXdMYW5ndWFnZXMuZmlsdGVyKFxuICAgICAgbGFuZ3VhZ2UgPT4gbGFuZ3VhZ2UubmFtZSA9PT0gc2VsZWN0ZWRMYW5nTmFtZVxuICAgIClbMF07XG4gICAgdGhpcy5jb2RpbmdUZXN0U2VydmljZS5oYW5kbGVMYW5ndWFnZUNoYW5nZU1vZGFsKFxuICAgICAgdGhpcy5xdWVzdGlvbi5pZCxcbiAgICAgIHNlbGVjdGVkTGFuZyxcbiAgICAgIHRoaXMuY2Fub3B5VWlUaGVtZSxcbiAgICAgIHRoaXMuY29tcGFueUNvbG9yXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUNvZGUoY29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgfVxuXG4gIHJ1blRlc3QoKTogdm9pZCB7XG4gICAgdGhpcy5jb2RpbmdUZXN0U2VydmljZS5ydW5UZXN0KFxuICAgICAgdGhpcy5xdWVzdGlvbi5pZCxcbiAgICAgIHRoaXMuY29kZSxcbiAgICAgIHRoaXMuaXNMQVQsXG4gICAgICB0aGlzLmlzU1FMLFxuICAgICAgZmFsc2UsXG4gICAgICAhIXRoaXMudGVzdC5pc19wcmV2aWV3X21vZGUsXG4gICAgICB0aGlzLnF1ZXN0aW9uLnF1ZXN0aW9uX2lkLFxuICAgICAgdGhpcy50ZXN0LmlkLFxuICAgICAgdGhpcy50ZXN0XG4gICAgKTtcblxuICAgIGlmICghdGhpcy5maXJzdFRlc3RSdW5Db21wbGV0ZSkge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uQnV0dG9uU3RhdGVDaGFuZ2VkLmVtaXQoe1xuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5maXJzdFRlc3RSdW5Db21wbGV0ZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgc2NyZWVuc2hvdFBhc3RlKGV2ZW50OiBQYXN0ZURhdGEpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQudHlwZSAhPT0gJ3Bhc3RlJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2VcbiAgICAgIC5zZW5kQ29weXBhc3RlRXZlbnQkKHRoaXMuY29kZSwgZXZlbnQuZGF0YSwgdGhpcy5xdWVzdGlvbi5pZClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQXV0b3NhdmVFdmVudCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBpbnRlcnZhbCg1MDAwKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5jb2RpbmdUZXN0U2VydmljZS5zZW5kQXV0b3NhdmVFdmVudCQodGhpcy5jb2RlLCB0aGlzLnF1ZXN0aW9uLmlkKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0QXBpUGFyYW1zKCk7XG4gICAgdGhpcy5zZXRDb2RpbmdMaWJUcmFuc2xhdGlvbnMoKTtcbiAgICB0aGlzLnNldElzU1FMKCk7XG4gICAgdGhpcy5zZXRJc0xhdCgpO1xuICAgIHRoaXMuc2V0TW9kZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb2RpbmdMaWJUcmFuc2xhdGlvbnMoKSB7XG4gICAgLy8gVFJBTlNMT0NPX1NDT1BFIGlzIHBhc3NlZCBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRyYW5zbGF0aW9uIHNjb3BlIGlzIHJlc29sdmVkIGJ5IHRoZSBsaWJyYXJ5XG4gICAgdGhpcy50cmFuc2xvY29TZXJ2aWNlXG4gICAgICAuc2VsZWN0VHJhbnNsYXRlT2JqZWN0KGBDT0RJTkdfTElCYCwge30sIHRoaXMudHJhbnNsYXRpb25TY29wZSBhcyBzdHJpbmcpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSh0cmFuc2xhdGlvbnMgPT4ge1xuICAgICAgICB0aGlzLmNvZGluZ0xpYlRyYW5zbGF0aW9ucy5zZXQodHJhbnNsYXRpb25zKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBcGlQYXJhbXMoKTogdm9pZCB7XG4gICAgY29uc3QgaW52aXRhdGlvblV1aWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmZpcnN0Q2hpbGQ/LnVybFswXS5wYXRoIHx8ICcnO1xuICAgIGNvbnN0IGNvbnRlbnRMYW5ndWFnZSA9IHRoaXMuYXNzZXNzbWVudD8ubG9jYWxlID8/ICdlbic7XG4gICAgY29uc3QgYXBpVXJsID0gdGhpcy5jb2RpbmdUZXN0Q29uZmlnU2VydmljZS5nZXRBcGlVcmwoKTtcblxuICAgIHRoaXMuYXBpU2VydmljZS5zZXRQYXJhbXMoaW52aXRhdGlvblV1aWQsIGNvbnRlbnRMYW5ndWFnZSwgUk9PVF9UUkFOU0xBVElPTlNfU0NPUEUsIGFwaVVybCk7XG4gIH1cblxuICBwcml2YXRlIHNldElzU1FMKCk6IHZvaWQge1xuICAgIHRoaXMuaXNTUUwgPSB0aGlzLnF1ZXN0aW9uPy5jb250ZXh0LmNvZGVfbGFuZ3VhZ2UgPT09ICdzcWwnO1xuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2Uuc2V0SXNTUUxUZXN0KHRoaXMuaXNTUUwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTcWxJbml0Q29kZSgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRDb2RlID0gdGhpcy5xdWVzdGlvbj8uY29udGV4dC5pbml0aWFsX2NvZGU7XG4gIH1cblxuICBwcml2YXRlIHNldFNxbExhbmcoKTogdm9pZCB7XG4gICAgY29uc3Qgc3FsTGFuZ3VhZ2UgPSB0aGlzLnF1ZXN0aW9uPy5jb250ZXh0LmNvZGVfbGFuZ3VhZ2UgYXMgQ29kZUVkaXRvckxhbmd1YWdlcztcbiAgICB0aGlzLmxhbmd1YWdlcy5zZXQoW1xuICAgICAge1xuICAgICAgICBsYWJlbDogJ25vbkxBVCcsXG4gICAgICAgIHZhbHVlOiBzcWxMYW5ndWFnZSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBzcWxMYW5ndWFnZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SXNMYXQoKTogdm9pZCB7XG4gICAgLy8gdG9kbzogYWRkIHJlc3BvbnNlIGZpZWxkIGlmIHBvc3NpYmxlID9cbiAgICAvLyB0aGlzLmlzTEFUID0gdGhpcy50ZXN0Py5pc19sYW5ndWFnZV9hZ25vc3RpY190ZXN0ID8/IGZhbHNlO1xuICAgIHRoaXMuaXNMQVQgPSAhdGhpcy5pc1NRTDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGUgPSB0aGlzLnRlc3Q/LmlzX3ByZXZpZXdfbW9kZSA/IE1vZGVzLlByZXZpZXcgOiBNb2Rlcy5SdW5uaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5HdWlkZWRUb3VyU3RhcnQoKTogdm9pZCB7XG4gICAgdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5zdGFydEd1aWRlZFRvdXIkLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBndWlkZWRUb3VyTW9kZSA9IHRoaXMudGVzdD8uaXNfcHJldmlld19tb2RlXG4gICAgICAgID8gQ29kaW5nVGVzdFRvdXJNb2RlLlByYWN0aWNlUXVlc3Rpb25cbiAgICAgICAgOiBDb2RpbmdUZXN0VG91ck1vZGUuUmVhbFF1ZXN0aW9uO1xuXG4gICAgICB0aGlzLmNvZGluZ1Rlc3RUb3VyU2VydmljZS5pbml0KGd1aWRlZFRvdXJNb2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlR3VpZGVkVG91cigpIHtcbiAgICBpZiAoIXRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmlzTW9iaWxlICYmICF0aGlzLndhc1RvdXJTaG93biAmJiB0aGlzLnRlc3Q/LmlzX3ByZXZpZXdfbW9kZSkge1xuICAgICAgY29uc3QgZGVsYXlGb3JHdWlkZWRUb3VyID0gMTUwMDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvZGluZ1Rlc3RUb3VyU2VydmljZS5pbml0KENvZGluZ1Rlc3RUb3VyTW9kZS5QcmFjdGljZVF1ZXN0aW9uKTtcbiAgICAgICAgdGhpcy53YXNUb3VyU2hvd24gPSB0cnVlO1xuICAgICAgfSwgZGVsYXlGb3JHdWlkZWRUb3VyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEFsbExhbmd1YWdlcygpOiBQcm9ncmFtbWluZ0xhbmd1YWdlW10ge1xuICAgIGNvbnN0IGJvaWxlcnBsYXRlcyA9IHRoaXMucXVlc3Rpb24/LmNvbnRleHQuYm9pbGVycGxhdGVzID8/IFtdO1xuICAgIHJldHVybiBib2lsZXJwbGF0ZXMubWFwKCh7IHByb2dyYW1taW5nX2xhbmd1YWdlIH0pID0+IHByb2dyYW1taW5nX2xhbmd1YWdlKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZEF2YWlsYWJsZUxhbmd1YWdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmRpZGF0dXJlQXBpU2VydmljZVxuICAgICAgLmdldEF2YWlsYWJsZUxhbmd1YWdlcyQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRhcChhdmFpbGFibGVMYW5nc0lkcyA9PiB7XG4gICAgICAgICAgY29uc3QgbGFuZ3VhZ2VzID0gdGhpcy5nZXRBbGxMYW5ndWFnZXMoKTtcbiAgICAgICAgICBjb25zdCBhcmVBbGxMYW5nc0F2YWlsYWJsZSA9IGF2YWlsYWJsZUxhbmdzSWRzLmxlbmd0aCA9PT0gMDtcblxuICAgICAgICAgIHRoaXMucmF3TGFuZ3VhZ2VzID0gYXJlQWxsTGFuZ3NBdmFpbGFibGVcbiAgICAgICAgICAgID8gbGFuZ3VhZ2VzXG4gICAgICAgICAgICA6IGxhbmd1YWdlcy5maWx0ZXIoKHsgaWQgfSkgPT4gaWQgIT09IHVuZGVmaW5lZCAmJiBhdmFpbGFibGVMYW5nc0lkcy5pbmNsdWRlcyhpZCkpO1xuICAgICAgICAgIHRoaXMubGFuZ3VhZ2VzLnNldChcbiAgICAgICAgICAgIHRoaXMucmF3TGFuZ3VhZ2VzLm1hcChsYW5ndWFnZSA9PiAoe1xuICAgICAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgICAgICB0eXBlb2YgbGFuZ3VhZ2UubmFtZSA9PT0gJ3N0cmluZycgJiYgbGFuZ3VhZ2UubmFtZS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICA/IGxhbmd1YWdlLm5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBsYW5ndWFnZS5uYW1lLnNsaWNlKDEpXG4gICAgICAgICAgICAgICAgICA6ICdVbmtub3duJyxcbiAgICAgICAgICAgICAgdmFsdWU6IGxhbmd1YWdlLm5hbWUgYXMgQ29kZUVkaXRvckxhbmd1YWdlcyxcbiAgICAgICAgICAgICAgdmVyc2lvbjogbGFuZ3VhZ2UudmVyc2lvbixcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlQ2hhbmdlZC5lbWl0KGZhbHNlKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYm9pbGVycGxhdGVzID0gdGhpcy5xdWVzdGlvbj8uY29udGV4dC5ib2lsZXJwbGF0ZXMgPz8gW107XG4gICAgICAgICAgYm9pbGVycGxhdGVzLmZvckVhY2goYm9pbGVycGxhdGUgPT4ge1xuICAgICAgICAgICAgaWYgKGJvaWxlcnBsYXRlLnByb2dyYW1taW5nX2xhbmd1YWdlLm5hbWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbml0Q29kZXNNYXAuc2V0KFxuICAgICAgICAgICAgICAgIGJvaWxlcnBsYXRlLnByb2dyYW1taW5nX2xhbmd1YWdlLm5hbWUgYXMgQ29kZUVkaXRvckxhbmd1YWdlcyxcbiAgICAgICAgICAgICAgICBib2lsZXJwbGF0ZS5jb2RlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5jdXJyZW50TGFuZ3VhZ2UkKSxcbiAgICAgICAgdGFwKChsYW5ndWFnZTogQ29kZUVkaXRvckxhbmd1YWdlcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRMYW5nID0gdGhpcy5yYXdMYW5ndWFnZXMuZmluZCh4ID0+IHgubmFtZSA9PT0gbGFuZ3VhZ2UpO1xuICAgICAgICAgIGlmIChjdXJyZW50TGFuZykge1xuICAgICAgICAgICAgdGhpcy5jb2RpbmdUZXN0U2VydmljZS5zZXRDdXJyZW50TGFuZ3VhZ2VMQVQoY3VycmVudExhbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpbml0Q29kZSA9IHRoaXMuaW5pdENvZGVzTWFwLmdldChsYW5ndWFnZSk7XG4gICAgICAgICAgaWYgKGluaXRDb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRDb2RlID0gaW5pdENvZGU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvZGUodGhpcy5pbml0Q29kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubGliQ29kaW5nVGVzdFNlcnZpY2Uuc2V0Qm9pbGVycGxhdGVMb2FkaW5nU3RhdHVzKGZhbHNlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5UaGVtZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxpYkNvZGluZ1Rlc3RTZXJ2aWNlLnRoZW1lQ2hhbmdlZCQucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKHRoZW1lID0+IHtcbiAgICAgIHRoaXMuY2Fub3B5VWlUaGVtZSA9IHRoZW1lID09PSBUaGVtZXMuRGFyayA/ICdkYXJrJyA6ICdsaWdodCc7XG4gICAgICB0aGlzLnRoZW1lQ2hhbmdlZC5lbWl0KHRoaXMuY2Fub3B5VWlUaGVtZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZ1bGxzY3JlZW5DaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5pc0Z1bGxzY3JlZW4kXG4gICAgICAucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSlcbiAgICAgIC5zdWJzY3JpYmUoaXNGdWxsc2NyZWVuID0+IHRoaXMuZnVsbHNjcmVlbkNoYW5nZWQuZW1pdChpc0Z1bGxzY3JlZW4pKTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRGVsZXRlQ3VzdG9tVGVzdENhc2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2VcbiAgICAgIC5saXN0ZW5EZWxldGVDdXN0b21UZXN0Q2FzZXMoKVxuICAgICAgLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpXG4gICAgICAuc3Vic2NyaWJlKCh7IGluZGV4IH0pID0+IHtcbiAgICAgICAgdGhpcy5jb2RpbmdUZXN0U2VydmljZS5oYW5kbGVEZWxldGVUZXN0Q2FzZU1vZGFsKFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIHRoaXMuY2Fub3B5VWlUaGVtZSxcbiAgICAgICAgICB0aGlzLmNvbXBhbnlDb2xvclxuICAgICAgICApO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3Rlbkxhbmd1YWdlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMubGliQ29kaW5nVGVzdFNlcnZpY2UuY3VycmVudExhbmd1YWdlJFxuICAgICAgLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpXG4gICAgICAuc3Vic2NyaWJlKChsYW5ndWFnZTogQ29kZUVkaXRvckxhbmd1YWdlcykgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSA9IGxhbmd1YWdlO1xuICAgICAgICBjb25zdCBjb2RlID0gdGhpcy5pbml0Q29kZXNNYXAuZ2V0KGxhbmd1YWdlKTtcbiAgICAgICAgaWYgKGNvZGUpIHtcbiAgICAgICAgICB0aGlzLmluaXRDb2RlID0gY29kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmluaXRDb2RlID0gJyc7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBObyBpbml0aWFsIGNvZGUgZm91bmQgZm9yIGxhbmd1YWdlOiAke2xhbmd1YWdlfWApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuUmVzZXRDb2RlKCk6IHZvaWQge1xuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2VcbiAgICAgIC5saXN0ZW5Db2RpbmdUZXN0Q2hhbmdlcygpXG4gICAgICAucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvZGluZ1Rlc3RTZXJ2aWNlLmhhbmRsZVJlc2V0Q29kZU1vZGFsKHRoaXMuY2Fub3B5VWlUaGVtZSwgdGhpcy5jb21wYW55Q29sb3IpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlblRlc3RSZXN1bHRzKCk6IHZvaWQge1xuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2UuY29kaW5nVGVzdFJlc3VsdHMkLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgIHRoaXMuY29kaW5nVGVzdFJlc3VsdHMgPSByZXN1bHRzO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTcWxUZXN0Q2FzZXMoKTogdm9pZCB7XG4gICAgY29uc3QgdGVzdENhc2VzID0gdGhpcy5xdWVzdGlvbj8uY29udGV4dD8uc3FsX3Rlc3RjYXNlcy5tYXAodGVzdENhc2UgPT4gKHtcbiAgICAgIC4uLnRlc3RDYXNlLFxuICAgICAgcG9zdF9zcWw6IHRlc3RDYXNlLnBvc3Rfc3FsIHx8ICcnLFxuICAgICAgaW5pdGlhbF9zcWw6IHRoaXMucXVlc3Rpb24/LmNvbnRleHQ/LmluaXRpYWxfc3FsIHx8ICcnLFxuICAgIH0pKSBhcyBTcWxUZXN0Q2FzZVtdO1xuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2Uuc2V0U3FsVGVzdENhc2VzKHRlc3RDYXNlcyk7XG4gICAgdGhpcy5leGFtcGxlVGVzdENhc2VzID0gdGVzdENhc2VzLm1hcCh0aGlzLmNvZGluZ1Rlc3RTZXJ2aWNlLnRyYW5zZm9ybVRvRXhhbXBsZVNRTFRlc3RDYXNlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VGVzdENhc2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZXhhbXBsZVRlc3RDYXNlcyA9IHRoaXMucXVlc3Rpb24/LmNvbnRleHQ/LnRlc3RjYXNlcz8ubWFwKFxuICAgICAgdGhpcy5jb2RpbmdUZXN0U2VydmljZS50cmFuc2Zvcm1Ub0V4YW1wbGVMQVR0ZXN0Q2FzZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldExpc3RlbmVycygpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3Rlbkd1aWRlZFRvdXJTdGFydCgpO1xuICAgIHRoaXMubGlzdGVuRnVsbHNjcmVlbkNoYW5nZSgpO1xuICAgIHRoaXMubGlzdGVuVGhlbWVDaGFuZ2UoKTtcbiAgICB0aGlzLmxpc3RlblJlc2V0Q29kZSgpO1xuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2UudHJhY2tDb25maWdDaGFuZ2VkKCEhdGhpcy50ZXN0Py5pc19wcmV2aWV3X21vZGUpO1xuICAgIHRoaXMubGlzdGVuVGVzdFJlc3VsdHMoKTtcbiAgICBpZiAodGhpcy5pc0xBVCkge1xuICAgICAgdGhpcy5saXN0ZW5EZWxldGVDdXN0b21UZXN0Q2FzZXMoKTtcbiAgICAgIHRoaXMubGlzdGVuTGFuZ3VhZ2VDaGFuZ2UoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKnRyYW5zbG9jbz1cImxldCB0OyByZWFkOiAnQ09ESU5HX1FVRVNUSU9OJ1wiPlxuICBAaWYgKGxhbmd1YWdlcygpPy5sZW5ndGggJiYgY29kaW5nTGliVHJhbnNsYXRpb25zKCkpIHtcbiAgICA8dGdvLWNvZGluZy10ZXN0XG4gICAgICBjbGFzcz1cImNvZGluZy1saWJcIlxuICAgICAgW2Fzc2Vzc21lbnRJZF09XCJhc3Nlc3NtZW50IS51dWlkIVwiXG4gICAgICBbcXVlc3Rpb25JZF09XCJxdWVzdGlvbiEucXVlc3Rpb25faWQhXCJcbiAgICAgIFtpc0xBVF09XCJpc0xBVFwiXG4gICAgICBbY2FuQWRkQ3VzdG9tVGVzdENhc2VzXT1cImlzTEFUXCJcbiAgICAgIFtpc1NRTF09XCJpc1NRTFwiXG4gICAgICBbbGFuZ3VhZ2VzXT1cImxhbmd1YWdlcygpXCJcbiAgICAgIFtpbml0Q29kZV09XCJpbml0Q29kZVwiXG4gICAgICBbbW9kZV09XCJtb2RlXCJcbiAgICAgIFt2aWV3TW9kZV09XCJ2aWV3TW9kZXMuRnVsbFwiXG4gICAgICBbbG9hZGluZ109XCJ0ZXN0UmVzdWx0c0xvYWRpbmcoKVwiXG4gICAgICBbY29tcGFueUNvbG9yXT1cImNvbXBhbnlDb2xvclwiXG4gICAgICBbcXVlc3Rpb25UZXh0XT1cInF1ZXN0aW9uLnRleHRcIlxuICAgICAgW3Rlc3RDYXNlc1N0YXR1c109XCJjb2RpbmdUZXN0UmVzdWx0cz8ucmVzdW1lXCJcbiAgICAgIFtydW5UZXN0UmVzcG9uc2VdPVwiY29kaW5nVGVzdFJlc3VsdHM/Lmxpc3RSZXNwb25zZSFcIlxuICAgICAgW2V4YW1wbGVUZXN0Q2FzZXNdPVwiZXhhbXBsZVRlc3RDYXNlc1wiXG4gICAgICBbYXBwbGljYXRpb25UaGVtZV09XCJjYW5vcHlVaVRoZW1lXCJcbiAgICAgIFt0cmFuc2xhdGlvbnNdPVwiY29kaW5nTGliVHJhbnNsYXRpb25zKClcIlxuICAgICAgKGNvZGVDaGFuZ2UpPVwidXBkYXRlQ29kZSgkZXZlbnQpXCJcbiAgICAgIChydW5UZXN0Q2xpY2spPVwicnVuVGVzdCgpXCJcbiAgICAgIChsYW5ndWFnZUNoYW5nZSk9XCJsYW5ndWFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChwYXN0ZUV2ZW50KT1cInNjcmVlbnNob3RQYXN0ZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgPC90Z28tY29kaW5nLXRlc3Q+XG4gIH1cbjwvbmctY29udGFpbmVyPlxuXG48bmd4LWd1aWRlZC10b3VyXG4gIFtuZ0NsYXNzXT1cImFjdGl2ZUd1aWRlZFRvdXJJZCQgfCBhc3luY1wiXG4gIFtuZ1N0eWxlXT1cInsgJy0tY29tcGFueS1jb2xvcic6IGNvbXBhbnlDb2xvciB9XCJcbiAgW2NsYXNzLmRhcmtdPVwiY2Fub3B5VWlUaGVtZSA9PT0gJ2RhcmsnXCJcbj48L25neC1ndWlkZWQtdG91cj5cblxuIl19
@@ -0,0 +1,2 @@
1
+ export { provideTgoCodingTest } from './tgo-coding-test.provider';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb25maWcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBUZ29Db2RpbmdUZXN0Q29uZmlnIH0gZnJvbSAnLi90Z28tY29kaW5nLXRlc3QuY29uZmlnJztcbmV4cG9ydCB7IHByb3ZpZGVUZ29Db2RpbmdUZXN0IH0gZnJvbSAnLi90Z28tY29kaW5nLXRlc3QucHJvdmlkZXInO1xuXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGdvLWNvZGluZy10ZXN0LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Rnby1jb2RpbmctdGVzdC9zcmMvbGliL2NvbmZpZy90Z28tY29kaW5nLXRlc3QuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGZvciB0aGUgVEdPIENvZGluZyBUZXN0IGxpYnJhcnkuXG4gKiBcbiAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgdGhlIHJ1bnRpbWUgY29uZmlndXJhdGlvbiB0aGF0IG11c3QgYmUgcHJvdmlkZWRcbiAqIGJ5IHRoZSBjb25zdW1pbmcgYXBwbGljYXRpb24uIFRoZSBsaWJyYXJ5IGRvZXMgbm90IGhvbGQgZW52aXJvbm1lbnRcbiAqIHZhcmlhYmxlcyBpdHNlbGY7IGluc3RlYWQsIGl0IHJlY2VpdmVzIHRoZW0gZnJvbSB0aGUgaG9zdCBhcHBsaWNhdGlvblxuICogdGhyb3VnaCBkZXBlbmRlbmN5IGluamVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZ29Db2RpbmdUZXN0Q29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBiYXNlIFVSTCBmb3IgdGhlIG1haW4gQVBJIGVuZHBvaW50LlxuICAgKiBUaGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgbGlicmFyeSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBtYWluIEFQSSBzZXJ2aWNlLlxuICAgKiBcbiAgICogRXhhbXBsZTogJ2h0dHBzOi8vYXBpLXRhbGVudC1zdGFnaW5nLnRlc3Rnb3JpbGxhLmNvbS9hcGkvJ1xuICAgKi9cbiAgYXBpVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIFVSTCBmb3IgdGhlIENvZGVSdW5uZXIgVjIgQVBJIGVuZHBvaW50LlxuICAgKiBUaGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgbGlicmFyeSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBjb2RlIGV4ZWN1dGlvbiBzZXJ2aWNlLlxuICAgKiBcbiAgICogRXhhbXBsZTogJ2h0dHBzOi8vY3ItdjItc3RhZ2luZy50ZXN0Z29yaWxsYS5jb20nXG4gICAqL1xuICBjb2RlcnVubmVyVjJFbmRwb2ludDogc3RyaW5nO1xufVxuXG4iXX0=