@angular/compiler-cli 13.0.0-next.1 → 13.0.0-next.10

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 (600) hide show
  1. package/bundles/index.js +20414 -0
  2. package/bundles/index.js.map +6 -0
  3. package/bundles/linker/babel/index.js +2384 -0
  4. package/bundles/linker/babel/index.js.map +6 -0
  5. package/bundles/linker/index.js +1849 -0
  6. package/bundles/linker/index.js.map +6 -0
  7. package/bundles/ngcc/index.js +16043 -0
  8. package/bundles/ngcc/index.js.map +6 -0
  9. package/bundles/ngcc/main-ngcc.js +16131 -0
  10. package/bundles/ngcc/main-ngcc.js.map +6 -0
  11. package/bundles/ngcc/src/execution/cluster/ngcc_cluster_worker.js +13855 -0
  12. package/bundles/ngcc/src/execution/cluster/ngcc_cluster_worker.js.map +6 -0
  13. package/bundles/ngcc/src/locking/lock_file_with_child_process/ngcc_lock_unlocker.js +334 -0
  14. package/bundles/ngcc/src/locking/lock_file_with_child_process/ngcc_lock_unlocker.js.map +6 -0
  15. package/bundles/private/bazel.js +97 -0
  16. package/bundles/private/bazel.js.map +6 -0
  17. package/bundles/private/localize.js +911 -0
  18. package/bundles/private/localize.js.map +6 -0
  19. package/bundles/private/migrations.js +2181 -0
  20. package/bundles/private/migrations.js.map +6 -0
  21. package/bundles/private/tooling.js +942 -0
  22. package/bundles/private/tooling.js.map +6 -0
  23. package/bundles/src/bin/ng_xi18n.js +20466 -0
  24. package/bundles/src/bin/ng_xi18n.js.map +6 -0
  25. package/bundles/src/bin/ngc.js +20468 -0
  26. package/bundles/src/bin/ngc.js.map +6 -0
  27. package/bundles_metadata.json +1 -0
  28. package/import_meta_url.d.ts +14 -0
  29. package/index.d.ts +4 -1
  30. package/linker/babel/src/ast/babel_ast_factory.d.ts +1 -8
  31. package/linker/babel/src/ast/babel_ast_host.d.ts +1 -1
  32. package/linker/babel/src/babel_core.d.ts +36 -0
  33. package/linker/babel/src/babel_declaration_scope.d.ts +1 -1
  34. package/linker/babel/src/babel_plugin.d.ts +1 -8
  35. package/linker/babel/src/es2015_linker_plugin.d.ts +2 -2
  36. package/linker/src/ast/typescript/typescript_ast_host.d.ts +1 -1
  37. package/linker/src/file_linker/emit_scopes/emit_scope.d.ts +1 -2
  38. package/linker/src/file_linker/emit_scopes/iife_emit_scope.d.ts +1 -1
  39. package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.d.ts +1 -2
  40. package/linker/src/file_linker/partial_linkers/partial_component_linker_1.d.ts +1 -2
  41. package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.d.ts +1 -2
  42. package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.d.ts +1 -2
  43. package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.d.ts +1 -2
  44. package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.d.ts +1 -2
  45. package/linker/src/file_linker/partial_linkers/partial_linker.d.ts +1 -2
  46. package/linker/src/file_linker/partial_linkers/partial_linker_selector.d.ts +2 -2
  47. package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.d.ts +1 -2
  48. package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.d.ts +1 -2
  49. package/linker/src/file_linker/partial_linkers/util.d.ts +1 -2
  50. package/ngcc/index.d.ts +15 -0
  51. package/ngcc/src/analysis/decoration_analyzer.d.ts +1 -1
  52. package/ngcc/src/analysis/module_with_providers_analyzer.d.ts +1 -1
  53. package/ngcc/src/analysis/ngcc_references_registry.d.ts +1 -1
  54. package/ngcc/src/analysis/ngcc_trait_compiler.d.ts +1 -1
  55. package/ngcc/src/analysis/private_declarations_analyzer.d.ts +1 -1
  56. package/ngcc/src/analysis/switch_marker_analyzer.d.ts +1 -1
  57. package/ngcc/src/analysis/types.d.ts +1 -1
  58. package/ngcc/src/dependencies/esm_dependency_host.d.ts +1 -1
  59. package/ngcc/src/execution/cluster/api.d.ts +5 -1
  60. package/ngcc/src/execution/cluster/master.d.ts +5 -3
  61. package/{src/ngtsc/logging/testing/index.d.ts → ngcc/src/execution/cluster/ngcc_cluster_worker.d.ts} +2 -2
  62. package/ngcc/src/host/commonjs_host.d.ts +1 -1
  63. package/ngcc/src/host/commonjs_umd_utils.d.ts +1 -1
  64. package/ngcc/src/host/delegating_host.d.ts +2 -2
  65. package/ngcc/src/host/esm2015_host.d.ts +1 -1
  66. package/ngcc/src/host/esm5_host.d.ts +2 -1
  67. package/ngcc/src/host/ngcc_host.d.ts +1 -1
  68. package/ngcc/src/host/umd_host.d.ts +1 -1
  69. package/ngcc/src/host/utils.d.ts +1 -1
  70. package/ngcc/src/locking/lock_file.d.ts +1 -1
  71. package/ngcc/src/locking/lock_file_with_child_process/index.d.ts +2 -0
  72. package/ngcc/src/locking/lock_file_with_child_process/{unlocker.d.ts → ngcc_lock_unlocker.d.ts} +1 -1
  73. package/ngcc/src/migrations/migration.d.ts +1 -1
  74. package/ngcc/src/migrations/missing_injectable_migration.d.ts +1 -1
  75. package/ngcc/src/migrations/undecorated_child_migration.d.ts +1 -1
  76. package/ngcc/src/migrations/undecorated_parent_migration.d.ts +1 -1
  77. package/ngcc/src/migrations/utils.d.ts +1 -1
  78. package/ngcc/src/packages/build_marker.d.ts +1 -1
  79. package/ngcc/src/packages/bundle_program.d.ts +1 -1
  80. package/ngcc/src/packages/configuration.d.ts +41 -4
  81. package/ngcc/src/packages/entry_point_bundle.d.ts +1 -1
  82. package/ngcc/src/packages/ngcc_compiler_host.d.ts +1 -1
  83. package/ngcc/src/packages/source_file_cache.d.ts +1 -1
  84. package/ngcc/src/packages/transformer.d.ts +1 -1
  85. package/ngcc/src/rendering/commonjs_rendering_formatter.d.ts +1 -1
  86. package/ngcc/src/rendering/dts_renderer.d.ts +1 -1
  87. package/ngcc/src/rendering/esm5_rendering_formatter.d.ts +1 -1
  88. package/ngcc/src/rendering/esm_rendering_formatter.d.ts +1 -1
  89. package/ngcc/src/rendering/renderer.d.ts +1 -1
  90. package/ngcc/src/rendering/rendering_formatter.d.ts +1 -1
  91. package/ngcc/src/rendering/source_maps.d.ts +3 -3
  92. package/ngcc/src/rendering/umd_rendering_formatter.d.ts +1 -1
  93. package/ngcc/src/rendering/utils.d.ts +1 -1
  94. package/ngcc/src/utils.d.ts +1 -1
  95. package/package.json +52 -11
  96. package/private/bazel.d.ts +13 -0
  97. package/private/localize.d.ts +15 -0
  98. package/private/migrations.d.ts +16 -0
  99. package/{src → private}/tooling.d.ts +2 -2
  100. package/src/{ngtsc/core/src/config.d.ts → bin/ng_xi18n.d.ts} +3 -2
  101. package/{ngcc/main-ivy-ngcc.d.ts → src/bin/ngc.d.ts} +2 -1
  102. package/src/diagnostics/translate_diagnostics.d.ts +1 -1
  103. package/src/extract_i18n.d.ts +0 -5
  104. package/src/main.d.ts +6 -6
  105. package/src/metadata/bundle_index_host.d.ts +1 -1
  106. package/src/metadata/bundler.d.ts +1 -1
  107. package/src/metadata/collector.d.ts +1 -1
  108. package/src/metadata/evaluator.d.ts +1 -1
  109. package/src/metadata/symbols.d.ts +1 -1
  110. package/src/ngtsc/annotations/src/component.d.ts +16 -1
  111. package/src/ngtsc/annotations/src/diagnostics.d.ts +1 -1
  112. package/src/ngtsc/annotations/src/directive.d.ts +1 -1
  113. package/src/ngtsc/annotations/src/metadata.d.ts +2 -2
  114. package/src/ngtsc/annotations/src/ng_module.d.ts +2 -4
  115. package/src/ngtsc/annotations/src/pipe.d.ts +1 -1
  116. package/src/ngtsc/annotations/src/util.d.ts +2 -4
  117. package/src/ngtsc/core/api/src/adapter.d.ts +1 -1
  118. package/src/ngtsc/core/api/src/interfaces.d.ts +2 -13
  119. package/src/ngtsc/core/api/src/options.d.ts +11 -2
  120. package/src/ngtsc/core/src/compiler.d.ts +13 -8
  121. package/src/ngtsc/core/src/host.d.ts +1 -1
  122. package/src/ngtsc/cycles/src/analyzer.d.ts +1 -1
  123. package/src/ngtsc/cycles/src/imports.d.ts +1 -1
  124. package/src/ngtsc/diagnostics/src/error.d.ts +1 -1
  125. package/src/ngtsc/diagnostics/src/error_code.d.ts +9 -0
  126. package/src/ngtsc/entry_point/src/generator.d.ts +1 -1
  127. package/src/ngtsc/entry_point/src/private_export_checker.d.ts +1 -1
  128. package/src/ngtsc/file_system/src/compiler_host.d.ts +1 -1
  129. package/src/ngtsc/file_system/src/logical.d.ts +1 -1
  130. package/src/ngtsc/file_system/src/util.d.ts +1 -1
  131. package/src/ngtsc/imports/src/alias.d.ts +1 -1
  132. package/src/ngtsc/imports/src/default.d.ts +1 -1
  133. package/src/ngtsc/imports/src/emitter.d.ts +1 -1
  134. package/src/ngtsc/imports/src/find_export.d.ts +1 -1
  135. package/src/ngtsc/imports/src/references.d.ts +1 -1
  136. package/src/ngtsc/imports/src/resolver.d.ts +1 -1
  137. package/src/ngtsc/incremental/api.d.ts +1 -1
  138. package/src/ngtsc/incremental/src/dependency_tracking.d.ts +1 -1
  139. package/src/ngtsc/incremental/src/incremental.d.ts +1 -1
  140. package/src/ngtsc/incremental/src/state.d.ts +1 -1
  141. package/src/ngtsc/incremental/src/strategy.d.ts +1 -1
  142. package/src/ngtsc/indexer/src/api.d.ts +5 -2
  143. package/src/ngtsc/metadata/src/api.d.ts +1 -1
  144. package/src/ngtsc/metadata/src/dts.d.ts +1 -1
  145. package/src/ngtsc/metadata/src/resource_registry.d.ts +1 -1
  146. package/src/ngtsc/metadata/src/util.d.ts +1 -1
  147. package/src/ngtsc/partial_evaluator/index.d.ts +1 -0
  148. package/src/ngtsc/partial_evaluator/src/builtin.d.ts +1 -1
  149. package/src/ngtsc/partial_evaluator/src/diagnostics.d.ts +1 -1
  150. package/src/ngtsc/partial_evaluator/src/dynamic.d.ts +1 -1
  151. package/src/ngtsc/partial_evaluator/src/interface.d.ts +1 -1
  152. package/src/ngtsc/partial_evaluator/src/interpreter.d.ts +1 -1
  153. package/src/ngtsc/partial_evaluator/src/result.d.ts +1 -1
  154. package/src/ngtsc/partial_evaluator/src/ts_helpers.d.ts +1 -1
  155. package/src/ngtsc/program.d.ts +1 -2
  156. package/src/ngtsc/program_driver/src/api.d.ts +1 -1
  157. package/src/ngtsc/program_driver/src/ts_create_program_driver.d.ts +1 -1
  158. package/src/ngtsc/reflection/src/host.d.ts +7 -7
  159. package/src/ngtsc/reflection/src/type_to_value.d.ts +1 -1
  160. package/src/ngtsc/reflection/src/typescript.d.ts +4 -4
  161. package/src/ngtsc/reflection/src/util.d.ts +1 -1
  162. package/src/ngtsc/resource/src/loader.d.ts +1 -1
  163. package/src/ngtsc/scope/src/local.d.ts +1 -1
  164. package/src/ngtsc/scope/src/typecheck.d.ts +1 -1
  165. package/src/ngtsc/shims/api.d.ts +1 -1
  166. package/src/ngtsc/shims/src/adapter.d.ts +1 -1
  167. package/src/ngtsc/shims/src/expando.d.ts +1 -1
  168. package/src/ngtsc/shims/src/factory_generator.d.ts +1 -1
  169. package/src/ngtsc/shims/src/reference_tagger.d.ts +1 -1
  170. package/src/ngtsc/shims/src/summary_generator.d.ts +1 -1
  171. package/src/ngtsc/switch/src/switch.d.ts +1 -1
  172. package/src/ngtsc/transform/src/alias.d.ts +1 -1
  173. package/src/ngtsc/transform/src/api.d.ts +3 -1
  174. package/src/ngtsc/transform/src/compilation.d.ts +3 -1
  175. package/src/ngtsc/transform/src/declaration.d.ts +1 -1
  176. package/src/ngtsc/transform/src/trait.d.ts +1 -1
  177. package/src/ngtsc/transform/src/transform.d.ts +1 -1
  178. package/src/ngtsc/transform/src/utils.d.ts +1 -1
  179. package/src/ngtsc/translator/src/import_manager.d.ts +1 -1
  180. package/src/ngtsc/translator/src/translator.d.ts +0 -1
  181. package/src/ngtsc/translator/src/type_translator.d.ts +1 -2
  182. package/src/ngtsc/translator/src/typescript_ast_factory.d.ts +1 -1
  183. package/src/ngtsc/translator/src/typescript_translator.d.ts +1 -1
  184. package/src/ngtsc/tsc_plugin.d.ts +1 -1
  185. package/src/ngtsc/typecheck/api/api.d.ts +22 -1
  186. package/src/ngtsc/typecheck/api/checker.d.ts +10 -7
  187. package/src/ngtsc/typecheck/api/context.d.ts +1 -1
  188. package/src/ngtsc/typecheck/api/scope.d.ts +1 -1
  189. package/src/ngtsc/typecheck/api/symbols.d.ts +1 -1
  190. package/src/ngtsc/typecheck/diagnostics/src/diagnostic.d.ts +2 -16
  191. package/src/ngtsc/typecheck/extended/api/api.d.ts +50 -0
  192. package/src/ngtsc/typecheck/extended/api/extended_template_checker.d.ts +19 -0
  193. package/src/ngtsc/{routing → typecheck/extended/api}/index.d.ts +3 -3
  194. package/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box/index.d.ts +22 -0
  195. package/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable/index.d.ts +23 -0
  196. package/src/ngtsc/typecheck/extended/index.d.ts +9 -0
  197. package/src/ngtsc/typecheck/extended/src/extended_template_checker.d.ts +18 -0
  198. package/src/ngtsc/typecheck/src/checker.d.ts +7 -8
  199. package/src/ngtsc/typecheck/src/comments.d.ts +1 -1
  200. package/src/ngtsc/typecheck/src/completion.d.ts +4 -6
  201. package/src/ngtsc/typecheck/src/context.d.ts +2 -3
  202. package/src/ngtsc/typecheck/src/diagnostics.d.ts +2 -3
  203. package/src/ngtsc/typecheck/src/dom.d.ts +1 -2
  204. package/src/ngtsc/typecheck/src/environment.d.ts +1 -1
  205. package/src/ngtsc/typecheck/src/expression.d.ts +1 -1
  206. package/src/ngtsc/typecheck/src/oob.d.ts +4 -6
  207. package/src/ngtsc/typecheck/src/shim.d.ts +1 -1
  208. package/src/ngtsc/typecheck/src/source.d.ts +1 -1
  209. package/src/ngtsc/typecheck/src/tcb_util.d.ts +1 -1
  210. package/src/ngtsc/typecheck/src/template_symbol_builder.d.ts +1 -1
  211. package/src/ngtsc/typecheck/src/ts_util.d.ts +1 -1
  212. package/src/ngtsc/typecheck/src/type_check_block.d.ts +1 -1
  213. package/src/ngtsc/typecheck/src/type_check_file.d.ts +1 -1
  214. package/src/ngtsc/typecheck/src/type_constructor.d.ts +1 -1
  215. package/src/ngtsc/typecheck/src/type_emitter.d.ts +1 -1
  216. package/src/ngtsc/typecheck/src/type_parameter_emitter.d.ts +2 -2
  217. package/src/ngtsc/util/src/typescript.d.ts +1 -1
  218. package/src/ngtsc/util/src/visitor.d.ts +1 -1
  219. package/src/perform_compile.d.ts +1 -1
  220. package/src/perform_watch.d.ts +1 -1
  221. package/src/transformers/api.d.ts +2 -5
  222. package/src/transformers/compiler_host.d.ts +1 -1
  223. package/src/transformers/{downlevel_decorators_transform.d.ts → downlevel_decorators_transform/downlevel_decorators_transform.d.ts} +3 -3
  224. package/src/transformers/downlevel_decorators_transform/index.d.ts +9 -0
  225. package/src/transformers/{patch_alias_reference_resolution.d.ts → downlevel_decorators_transform/patch_alias_reference_resolution.d.ts} +2 -2
  226. package/src/transformers/i18n.d.ts +1 -1
  227. package/src/transformers/inline_resources.d.ts +1 -1
  228. package/src/transformers/lower_expressions.d.ts +1 -1
  229. package/src/transformers/metadata_cache.d.ts +1 -1
  230. package/src/transformers/node_emitter.d.ts +2 -3
  231. package/src/transformers/node_emitter_transform.d.ts +1 -1
  232. package/src/transformers/program.d.ts +1 -1
  233. package/src/transformers/r3_metadata_transform.d.ts +1 -1
  234. package/src/transformers/r3_transform.d.ts +1 -1
  235. package/src/transformers/util.d.ts +1 -1
  236. package/index.js +0 -40
  237. package/linker/babel/index.js +0 -25
  238. package/linker/babel/src/ast/babel_ast_factory.js +0 -153
  239. package/linker/babel/src/ast/babel_ast_host.js +0 -181
  240. package/linker/babel/src/babel_declaration_scope.js +0 -67
  241. package/linker/babel/src/babel_plugin.js +0 -38
  242. package/linker/babel/src/es2015_linker_plugin.js +0 -183
  243. package/linker/babel/src/linker_plugin_options.js +0 -13
  244. package/linker/index.js +0 -27
  245. package/linker/src/ast/ast_host.js +0 -20
  246. package/linker/src/ast/ast_value.js +0 -299
  247. package/linker/src/ast/typescript/typescript_ast_host.js +0 -183
  248. package/linker/src/ast/utils.js +0 -31
  249. package/linker/src/fatal_linker_error.js +0 -49
  250. package/linker/src/file_linker/declaration_scope.js +0 -20
  251. package/linker/src/file_linker/emit_scopes/emit_scope.js +0 -57
  252. package/linker/src/file_linker/emit_scopes/iife_emit_scope.js +0 -51
  253. package/linker/src/file_linker/file_linker.js +0 -97
  254. package/linker/src/file_linker/get_source_file.js +0 -42
  255. package/linker/src/file_linker/linker_environment.js +0 -38
  256. package/linker/src/file_linker/linker_options.js +0 -29
  257. package/linker/src/file_linker/needs_linking.js +0 -41
  258. package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.js +0 -47
  259. package/linker/src/file_linker/partial_linkers/partial_component_linker_1.js +0 -210
  260. package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.js +0 -154
  261. package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.js +0 -70
  262. package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.js +0 -74
  263. package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.js +0 -56
  264. package/linker/src/file_linker/partial_linkers/partial_linker.js +0 -13
  265. package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +0 -194
  266. package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.js +0 -126
  267. package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.js +0 -59
  268. package/linker/src/file_linker/partial_linkers/util.js +0 -95
  269. package/linker/src/file_linker/translator.js +0 -40
  270. package/linker/src/linker_import_generator.js +0 -43
  271. package/ngcc/index.js +0 -33
  272. package/ngcc/main-ivy-ngcc.js +0 -12
  273. package/ngcc/main-ngcc.js +0 -54
  274. package/ngcc/src/analysis/decoration_analyzer.js +0 -268
  275. package/ngcc/src/analysis/migration_host.js +0 -108
  276. package/ngcc/src/analysis/module_with_providers_analyzer.js +0 -197
  277. package/ngcc/src/analysis/ngcc_references_registry.js +0 -65
  278. package/ngcc/src/analysis/ngcc_trait_compiler.js +0 -117
  279. package/ngcc/src/analysis/private_declarations_analyzer.js +0 -63
  280. package/ngcc/src/analysis/switch_marker_analyzer.js +0 -50
  281. package/ngcc/src/analysis/types.js +0 -15
  282. package/ngcc/src/analysis/util.js +0 -36
  283. package/ngcc/src/command_line_options.js +0 -156
  284. package/ngcc/src/constants.js +0 -23
  285. package/ngcc/src/dependencies/commonjs_dependency_host.js +0 -129
  286. package/ngcc/src/dependencies/dependency_host.js +0 -143
  287. package/ngcc/src/dependencies/dependency_resolver.js +0 -180
  288. package/ngcc/src/dependencies/dts_dependency_host.js +0 -35
  289. package/ngcc/src/dependencies/esm_dependency_host.js +0 -307
  290. package/ngcc/src/dependencies/module_resolver.js +0 -269
  291. package/ngcc/src/dependencies/umd_dependency_host.js +0 -53
  292. package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.js +0 -70
  293. package/ngcc/src/entry_point_finder/entry_point_collector.js +0 -157
  294. package/ngcc/src/entry_point_finder/interface.js +0 -13
  295. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.js +0 -132
  296. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +0 -268
  297. package/ngcc/src/entry_point_finder/tracing_entry_point_finder.js +0 -78
  298. package/ngcc/src/entry_point_finder/utils.js +0 -234
  299. package/ngcc/src/execution/analyze_entry_points.js +0 -197
  300. package/ngcc/src/execution/api.js +0 -13
  301. package/ngcc/src/execution/cluster/api.js +0 -20
  302. package/ngcc/src/execution/cluster/executor.js +0 -52
  303. package/ngcc/src/execution/cluster/master.js +0 -311
  304. package/ngcc/src/execution/cluster/package_json_updater.js +0 -79
  305. package/ngcc/src/execution/cluster/utils.js +0 -77
  306. package/ngcc/src/execution/cluster/worker.js +0 -123
  307. package/ngcc/src/execution/create_compile_function.js +0 -76
  308. package/ngcc/src/execution/single_process_executor.js +0 -91
  309. package/ngcc/src/execution/tasks/api.js +0 -35
  310. package/ngcc/src/execution/tasks/completion.js +0 -79
  311. package/ngcc/src/execution/tasks/queues/base_task_queue.js +0 -120
  312. package/ngcc/src/execution/tasks/queues/parallel_task_queue.js +0 -87
  313. package/ngcc/src/execution/tasks/queues/serial_task_queue.js +0 -49
  314. package/ngcc/src/execution/tasks/utils.js +0 -167
  315. package/ngcc/src/host/commonjs_host.js +0 -261
  316. package/ngcc/src/host/commonjs_umd_utils.js +0 -210
  317. package/ngcc/src/host/delegating_host.js +0 -156
  318. package/ngcc/src/host/esm2015_host.js +0 -2441
  319. package/ngcc/src/host/esm5_host.js +0 -744
  320. package/ngcc/src/host/ngcc_host.js +0 -29
  321. package/ngcc/src/host/umd_host.js +0 -539
  322. package/ngcc/src/host/utils.js +0 -26
  323. package/ngcc/src/locking/async_locker.js +0 -121
  324. package/ngcc/src/locking/lock_file.js +0 -18
  325. package/ngcc/src/locking/lock_file_with_child_process/index.js +0 -93
  326. package/ngcc/src/locking/lock_file_with_child_process/unlocker.js +0 -46
  327. package/ngcc/src/locking/lock_file_with_child_process/util.js +0 -43
  328. package/ngcc/src/locking/sync_locker.js +0 -67
  329. package/ngcc/src/main.js +0 -163
  330. package/ngcc/src/migrations/migration.js +0 -13
  331. package/ngcc/src/migrations/missing_injectable_migration.js +0 -227
  332. package/ngcc/src/migrations/undecorated_child_migration.js +0 -90
  333. package/ngcc/src/migrations/undecorated_parent_migration.js +0 -103
  334. package/ngcc/src/migrations/utils.js +0 -137
  335. package/ngcc/src/ngcc_options.js +0 -135
  336. package/ngcc/src/packages/build_marker.js +0 -124
  337. package/ngcc/src/packages/bundle_program.js +0 -80
  338. package/ngcc/src/packages/configuration.js +0 -277
  339. package/ngcc/src/packages/entry_point.js +0 -267
  340. package/ngcc/src/packages/entry_point_bundle.js +0 -96
  341. package/ngcc/src/packages/entry_point_manifest.js +0 -207
  342. package/ngcc/src/packages/ngcc_compiler_host.js +0 -101
  343. package/ngcc/src/packages/patch_ts_expando_initializer.js +0 -174
  344. package/ngcc/src/packages/source_file_cache.js +0 -207
  345. package/ngcc/src/packages/transformer.js +0 -157
  346. package/ngcc/src/path_mappings.js +0 -27
  347. package/ngcc/src/rendering/commonjs_rendering_formatter.js +0 -106
  348. package/ngcc/src/rendering/dts_renderer.js +0 -170
  349. package/ngcc/src/rendering/esm5_rendering_formatter.js +0 -70
  350. package/ngcc/src/rendering/esm_rendering_formatter.js +0 -291
  351. package/ngcc/src/rendering/ngcc_import_rewriter.js +0 -49
  352. package/ngcc/src/rendering/renderer.js +0 -204
  353. package/ngcc/src/rendering/rendering_formatter.js +0 -15
  354. package/ngcc/src/rendering/source_maps.js +0 -68
  355. package/ngcc/src/rendering/umd_rendering_formatter.js +0 -326
  356. package/ngcc/src/rendering/utils.js +0 -35
  357. package/ngcc/src/utils.js +0 -182
  358. package/ngcc/src/writing/cleaning/cleaning_strategies.js +0 -80
  359. package/ngcc/src/writing/cleaning/package_cleaner.js +0 -126
  360. package/ngcc/src/writing/cleaning/utils.js +0 -30
  361. package/ngcc/src/writing/file_writer.js +0 -13
  362. package/ngcc/src/writing/in_place_file_writer.js +0 -90
  363. package/ngcc/src/writing/new_entry_point_file_writer.js +0 -214
  364. package/ngcc/src/writing/package_json_updater.js +0 -182
  365. package/src/diagnostics/translate_diagnostics.js +0 -61
  366. package/src/diagnostics/typescript_version.js +0 -96
  367. package/src/extract_i18n.js +0 -62
  368. package/src/language_services.js +0 -34
  369. package/src/main.js +0 -210
  370. package/src/metadata/bundle_index_host.js +0 -133
  371. package/src/metadata/bundler.js +0 -624
  372. package/src/metadata/collector.js +0 -799
  373. package/src/metadata/evaluator.js +0 -677
  374. package/src/metadata/index.js +0 -24
  375. package/src/metadata/index_writer.js +0 -80
  376. package/src/metadata/schema.js +0 -136
  377. package/src/metadata/symbols.js +0 -149
  378. package/src/ngtsc/annotations/index.js +0 -35
  379. package/src/ngtsc/annotations/src/api.js +0 -20
  380. package/src/ngtsc/annotations/src/component.js +0 -1283
  381. package/src/ngtsc/annotations/src/diagnostics.js +0 -174
  382. package/src/ngtsc/annotations/src/directive.js +0 -724
  383. package/src/ngtsc/annotations/src/factory.js +0 -32
  384. package/src/ngtsc/annotations/src/injectable.js +0 -277
  385. package/src/ngtsc/annotations/src/metadata.js +0 -159
  386. package/src/ngtsc/annotations/src/ng_module.js +0 -677
  387. package/src/ngtsc/annotations/src/pipe.js +0 -171
  388. package/src/ngtsc/annotations/src/references_registry.js +0 -38
  389. package/src/ngtsc/annotations/src/util.js +0 -566
  390. package/src/ngtsc/core/api/index.js +0 -25
  391. package/src/ngtsc/core/api/src/adapter.js +0 -20
  392. package/src/ngtsc/core/api/src/interfaces.js +0 -20
  393. package/src/ngtsc/core/api/src/options.js +0 -20
  394. package/src/ngtsc/core/api/src/public_options.js +0 -20
  395. package/src/ngtsc/core/index.js +0 -25
  396. package/src/ngtsc/core/src/compiler.js +0 -1077
  397. package/src/ngtsc/core/src/config.js +0 -28
  398. package/src/ngtsc/core/src/host.js +0 -273
  399. package/src/ngtsc/cycles/index.js +0 -26
  400. package/src/ngtsc/cycles/src/analyzer.js +0 -163
  401. package/src/ngtsc/cycles/src/imports.js +0 -175
  402. package/src/ngtsc/diagnostics/index.js +0 -33
  403. package/src/ngtsc/diagnostics/src/error.js +0 -69
  404. package/src/ngtsc/diagnostics/src/error_code.js +0 -226
  405. package/src/ngtsc/diagnostics/src/util.js +0 -35
  406. package/src/ngtsc/entry_point/index.js +0 -29
  407. package/src/ngtsc/entry_point/src/generator.js +0 -45
  408. package/src/ngtsc/entry_point/src/logic.js +0 -61
  409. package/src/ngtsc/entry_point/src/private_export_checker.js +0 -137
  410. package/src/ngtsc/entry_point/src/reference_graph.js +0 -91
  411. package/src/ngtsc/file_system/index.js +0 -45
  412. package/src/ngtsc/file_system/src/compiler_host.js +0 -80
  413. package/src/ngtsc/file_system/src/helpers.js +0 -135
  414. package/src/ngtsc/file_system/src/invalid_file_system.js +0 -120
  415. package/src/ngtsc/file_system/src/logical.js +0 -100
  416. package/src/ngtsc/file_system/src/node_js_file_system.js +0 -179
  417. package/src/ngtsc/file_system/src/types.js +0 -20
  418. package/src/ngtsc/file_system/src/util.js +0 -38
  419. package/src/ngtsc/file_system/testing/index.d.ts +0 -13
  420. package/src/ngtsc/file_system/testing/index.js +0 -32
  421. package/src/ngtsc/file_system/testing/src/mock_file_system.d.ts +0 -72
  422. package/src/ngtsc/file_system/testing/src/mock_file_system.js +0 -333
  423. package/src/ngtsc/file_system/testing/src/mock_file_system_native.d.ts +0 -16
  424. package/src/ngtsc/file_system/testing/src/mock_file_system_native.js +0 -85
  425. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.d.ts +0 -13
  426. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.js +0 -68
  427. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.d.ts +0 -13
  428. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.js +0 -68
  429. package/src/ngtsc/file_system/testing/src/test_helper.d.ts +0 -17
  430. package/src/ngtsc/file_system/testing/src/test_helper.js +0 -142
  431. package/src/ngtsc/imports/index.js +0 -43
  432. package/src/ngtsc/imports/src/alias.js +0 -158
  433. package/src/ngtsc/imports/src/core.js +0 -98
  434. package/src/ngtsc/imports/src/default.js +0 -153
  435. package/src/ngtsc/imports/src/emitter.js +0 -317
  436. package/src/ngtsc/imports/src/find_export.js +0 -82
  437. package/src/ngtsc/imports/src/reexport.js +0 -20
  438. package/src/ngtsc/imports/src/references.js +0 -171
  439. package/src/ngtsc/imports/src/resolver.js +0 -39
  440. package/src/ngtsc/incremental/api.js +0 -20
  441. package/src/ngtsc/incremental/index.js +0 -29
  442. package/src/ngtsc/incremental/semantic_graph/index.js +0 -34
  443. package/src/ngtsc/incremental/semantic_graph/src/api.js +0 -51
  444. package/src/ngtsc/incremental/semantic_graph/src/graph.js +0 -302
  445. package/src/ngtsc/incremental/semantic_graph/src/type_parameters.js +0 -55
  446. package/src/ngtsc/incremental/semantic_graph/src/util.js +0 -111
  447. package/src/ngtsc/incremental/src/dependency_tracking.js +0 -165
  448. package/src/ngtsc/incremental/src/incremental.js +0 -393
  449. package/src/ngtsc/incremental/src/noop.js +0 -26
  450. package/src/ngtsc/incremental/src/state.js +0 -30
  451. package/src/ngtsc/incremental/src/strategy.js +0 -99
  452. package/src/ngtsc/indexer/index.js +0 -27
  453. package/src/ngtsc/indexer/src/api.js +0 -45
  454. package/src/ngtsc/indexer/src/context.js +0 -40
  455. package/src/ngtsc/indexer/src/template.js +0 -328
  456. package/src/ngtsc/indexer/src/transform.js +0 -66
  457. package/src/ngtsc/logging/index.js +0 -25
  458. package/src/ngtsc/logging/src/console_logger.js +0 -75
  459. package/src/ngtsc/logging/src/logger.js +0 -28
  460. package/src/ngtsc/logging/testing/index.js +0 -23
  461. package/src/ngtsc/logging/testing/src/mock_logger.d.ts +0 -20
  462. package/src/ngtsc/logging/testing/src/mock_logger.js +0 -64
  463. package/src/ngtsc/metadata/index.js +0 -39
  464. package/src/ngtsc/metadata/src/api.js +0 -26
  465. package/src/ngtsc/metadata/src/dts.js +0 -168
  466. package/src/ngtsc/metadata/src/inheritance.js +0 -122
  467. package/src/ngtsc/metadata/src/property_mapping.js +0 -244
  468. package/src/ngtsc/metadata/src/registry.js +0 -133
  469. package/src/ngtsc/metadata/src/resource_registry.js +0 -109
  470. package/src/ngtsc/metadata/src/util.js +0 -275
  471. package/src/ngtsc/partial_evaluator/index.js +0 -31
  472. package/src/ngtsc/partial_evaluator/src/builtin.js +0 -125
  473. package/src/ngtsc/partial_evaluator/src/diagnostics.js +0 -193
  474. package/src/ngtsc/partial_evaluator/src/dynamic.js +0 -109
  475. package/src/ngtsc/partial_evaluator/src/interface.js +0 -42
  476. package/src/ngtsc/partial_evaluator/src/interpreter.js +0 -780
  477. package/src/ngtsc/partial_evaluator/src/known_declaration.js +0 -57
  478. package/src/ngtsc/partial_evaluator/src/result.js +0 -72
  479. package/src/ngtsc/partial_evaluator/src/ts_helpers.js +0 -121
  480. package/src/ngtsc/perf/index.js +0 -28
  481. package/src/ngtsc/perf/src/api.js +0 -291
  482. package/src/ngtsc/perf/src/clock.js +0 -30
  483. package/src/ngtsc/perf/src/noop.js +0 -37
  484. package/src/ngtsc/perf/src/recorder.js +0 -143
  485. package/src/ngtsc/program.js +0 -361
  486. package/src/ngtsc/program_driver/index.js +0 -25
  487. package/src/ngtsc/program_driver/src/api.js +0 -36
  488. package/src/ngtsc/program_driver/src/ts_create_program_driver.js +0 -200
  489. package/src/ngtsc/reflection/index.js +0 -36
  490. package/src/ngtsc/reflection/src/host.js +0 -88
  491. package/src/ngtsc/reflection/src/type_to_value.js +0 -259
  492. package/src/ngtsc/reflection/src/typescript.js +0 -641
  493. package/src/ngtsc/reflection/src/util.js +0 -37
  494. package/src/ngtsc/resource/index.js +0 -23
  495. package/src/ngtsc/resource/src/loader.js +0 -285
  496. package/src/ngtsc/routing/index.js +0 -26
  497. package/src/ngtsc/routing/src/analyzer.d.ts +0 -37
  498. package/src/ngtsc/routing/src/analyzer.js +0 -82
  499. package/src/ngtsc/routing/src/lazy.d.ts +0 -19
  500. package/src/ngtsc/routing/src/lazy.js +0 -239
  501. package/src/ngtsc/routing/src/route.d.ts +0 -23
  502. package/src/ngtsc/routing/src/route.js +0 -77
  503. package/src/ngtsc/scope/index.js +0 -29
  504. package/src/ngtsc/scope/src/api.js +0 -20
  505. package/src/ngtsc/scope/src/component_scope.js +0 -69
  506. package/src/ngtsc/scope/src/dependency.js +0 -201
  507. package/src/ngtsc/scope/src/local.js +0 -665
  508. package/src/ngtsc/scope/src/typecheck.js +0 -120
  509. package/src/ngtsc/shims/api.js +0 -13
  510. package/src/ngtsc/shims/index.js +0 -39
  511. package/src/ngtsc/shims/src/adapter.js +0 -266
  512. package/src/ngtsc/shims/src/expando.js +0 -147
  513. package/src/ngtsc/shims/src/factory_generator.js +0 -292
  514. package/src/ngtsc/shims/src/reference_tagger.js +0 -94
  515. package/src/ngtsc/shims/src/summary_generator.js +0 -101
  516. package/src/ngtsc/shims/src/util.js +0 -41
  517. package/src/ngtsc/sourcemaps/index.js +0 -27
  518. package/src/ngtsc/sourcemaps/src/content_origin.js +0 -48
  519. package/src/ngtsc/sourcemaps/src/raw_source_map.js +0 -13
  520. package/src/ngtsc/sourcemaps/src/segment_marker.js +0 -55
  521. package/src/ngtsc/sourcemaps/src/source_file.js +0 -519
  522. package/src/ngtsc/sourcemaps/src/source_file_loader.js +0 -234
  523. package/src/ngtsc/switch/index.js +0 -23
  524. package/src/ngtsc/switch/src/switch.js +0 -141
  525. package/src/ngtsc/transform/index.js +0 -36
  526. package/src/ngtsc/transform/src/alias.js +0 -46
  527. package/src/ngtsc/transform/src/api.js +0 -76
  528. package/src/ngtsc/transform/src/compilation.js +0 -820
  529. package/src/ngtsc/transform/src/declaration.js +0 -234
  530. package/src/ngtsc/transform/src/trait.js +0 -111
  531. package/src/ngtsc/transform/src/transform.js +0 -333
  532. package/src/ngtsc/transform/src/utils.js +0 -73
  533. package/src/ngtsc/translator/index.js +0 -37
  534. package/src/ngtsc/translator/src/api/ast_factory.js +0 -20
  535. package/src/ngtsc/translator/src/api/import_generator.js +0 -20
  536. package/src/ngtsc/translator/src/context.js +0 -47
  537. package/src/ngtsc/translator/src/import_manager.js +0 -77
  538. package/src/ngtsc/translator/src/translator.js +0 -353
  539. package/src/ngtsc/translator/src/type_translator.js +0 -223
  540. package/src/ngtsc/translator/src/typescript_ast_factory.js +0 -251
  541. package/src/ngtsc/translator/src/typescript_translator.js +0 -34
  542. package/src/ngtsc/tsc_plugin.js +0 -129
  543. package/src/ngtsc/typecheck/api/api.js +0 -20
  544. package/src/ngtsc/typecheck/api/checker.js +0 -44
  545. package/src/ngtsc/typecheck/api/completion.js +0 -29
  546. package/src/ngtsc/typecheck/api/context.js +0 -20
  547. package/src/ngtsc/typecheck/api/index.js +0 -27
  548. package/src/ngtsc/typecheck/api/scope.js +0 -20
  549. package/src/ngtsc/typecheck/api/symbols.js +0 -35
  550. package/src/ngtsc/typecheck/diagnostics/index.js +0 -23
  551. package/src/ngtsc/typecheck/diagnostics/src/diagnostic.js +0 -141
  552. package/src/ngtsc/typecheck/diagnostics/src/id.js +0 -37
  553. package/src/ngtsc/typecheck/index.js +0 -29
  554. package/src/ngtsc/typecheck/src/checker.js +0 -763
  555. package/src/ngtsc/typecheck/src/comments.js +0 -181
  556. package/src/ngtsc/typecheck/src/completion.js +0 -232
  557. package/src/ngtsc/typecheck/src/context.js +0 -424
  558. package/src/ngtsc/typecheck/src/diagnostics.js +0 -114
  559. package/src/ngtsc/typecheck/src/dom.js +0 -87
  560. package/src/ngtsc/typecheck/src/environment.js +0 -160
  561. package/src/ngtsc/typecheck/src/expression.js +0 -441
  562. package/src/ngtsc/typecheck/src/line_mappings.js +0 -77
  563. package/src/ngtsc/typecheck/src/oob.js +0 -181
  564. package/src/ngtsc/typecheck/src/shim.js +0 -52
  565. package/src/ngtsc/typecheck/src/source.js +0 -91
  566. package/src/ngtsc/typecheck/src/tcb_util.js +0 -165
  567. package/src/ngtsc/typecheck/src/template_semantics.js +0 -52
  568. package/src/ngtsc/typecheck/src/template_symbol_builder.js +0 -546
  569. package/src/ngtsc/typecheck/src/ts_util.js +0 -202
  570. package/src/ngtsc/typecheck/src/type_check_block.js +0 -2210
  571. package/src/ngtsc/typecheck/src/type_check_file.js +0 -115
  572. package/src/ngtsc/typecheck/src/type_constructor.js +0 -255
  573. package/src/ngtsc/typecheck/src/type_emitter.js +0 -164
  574. package/src/ngtsc/typecheck/src/type_parameter_emitter.js +0 -111
  575. package/src/ngtsc/util/src/path.js +0 -33
  576. package/src/ngtsc/util/src/typescript.js +0 -176
  577. package/src/ngtsc/util/src/visitor.js +0 -119
  578. package/src/ngtsc/xi18n/index.js +0 -22
  579. package/src/ngtsc/xi18n/src/context.js +0 -20
  580. package/src/perform_compile.js +0 -322
  581. package/src/perform_watch.js +0 -263
  582. package/src/tooling.js +0 -47
  583. package/src/transformers/api.js +0 -42
  584. package/src/transformers/compiler_host.js +0 -623
  585. package/src/transformers/downlevel_decorators_transform.js +0 -618
  586. package/src/transformers/entry_points.js +0 -25
  587. package/src/transformers/i18n.js +0 -76
  588. package/src/transformers/inline_resources.js +0 -287
  589. package/src/transformers/lower_expressions.js +0 -365
  590. package/src/transformers/metadata_cache.js +0 -96
  591. package/src/transformers/metadata_reader.js +0 -120
  592. package/src/transformers/node_emitter.js +0 -643
  593. package/src/transformers/node_emitter_transform.js +0 -88
  594. package/src/transformers/patch_alias_reference_resolution.js +0 -129
  595. package/src/transformers/program.js +0 -1000
  596. package/src/transformers/r3_metadata_transform.js +0 -73
  597. package/src/transformers/r3_transform.js +0 -44
  598. package/src/transformers/util.js +0 -122
  599. package/src/typescript_support.js +0 -74
  600. package/src/version.js +0 -28
@@ -1,665 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- (function (factory) {
9
- if (typeof module === "object" && typeof module.exports === "object") {
10
- var v = factory(require, exports);
11
- if (v !== undefined) module.exports = v;
12
- }
13
- else if (typeof define === "function" && define.amd) {
14
- define("@angular/compiler-cli/src/ngtsc/scope/src/local", ["require", "exports", "tslib", "@angular/compiler", "typescript", "@angular/compiler-cli/src/ngtsc/diagnostics", "@angular/compiler-cli/src/ngtsc/util/src/typescript"], factory);
15
- }
16
- })(function (require, exports) {
17
- "use strict";
18
- Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.LocalModuleScopeRegistry = void 0;
20
- var tslib_1 = require("tslib");
21
- var compiler_1 = require("@angular/compiler");
22
- var ts = require("typescript");
23
- var diagnostics_1 = require("@angular/compiler-cli/src/ngtsc/diagnostics");
24
- var typescript_1 = require("@angular/compiler-cli/src/ngtsc/util/src/typescript");
25
- /**
26
- * A registry which collects information about NgModules, Directives, Components, and Pipes which
27
- * are local (declared in the ts.Program being compiled), and can produce `LocalModuleScope`s
28
- * which summarize the compilation scope of a component.
29
- *
30
- * This class implements the logic of NgModule declarations, imports, and exports and can produce,
31
- * for a given component, the set of directives and pipes which are "visible" in that component's
32
- * template.
33
- *
34
- * The `LocalModuleScopeRegistry` has two "modes" of operation. During analysis, data for each
35
- * individual NgModule, Directive, Component, and Pipe is added to the registry. No attempt is made
36
- * to traverse or validate the NgModule graph (imports, exports, etc). After analysis, one of
37
- * `getScopeOfModule` or `getScopeForComponent` can be called, which traverses the NgModule graph
38
- * and applies the NgModule logic to generate a `LocalModuleScope`, the full scope for the given
39
- * module or component.
40
- *
41
- * The `LocalModuleScopeRegistry` is also capable of producing `ts.Diagnostic` errors when Angular
42
- * semantics are violated.
43
- */
44
- var LocalModuleScopeRegistry = /** @class */ (function () {
45
- function LocalModuleScopeRegistry(localReader, dependencyScopeReader, refEmitter, aliasingHost) {
46
- this.localReader = localReader;
47
- this.dependencyScopeReader = dependencyScopeReader;
48
- this.refEmitter = refEmitter;
49
- this.aliasingHost = aliasingHost;
50
- /**
51
- * Tracks whether the registry has been asked to produce scopes for a module or component. Once
52
- * this is true, the registry cannot accept registrations of new directives/pipes/modules as it
53
- * would invalidate the cached scope data.
54
- */
55
- this.sealed = false;
56
- /**
57
- * A map of components from the current compilation unit to the NgModule which declared them.
58
- *
59
- * As components and directives are not distinguished at the NgModule level, this map may also
60
- * contain directives. This doesn't cause any problems but isn't useful as there is no concept of
61
- * a directive's compilation scope.
62
- */
63
- this.declarationToModule = new Map();
64
- /**
65
- * This maps from the directive/pipe class to a map of data for each NgModule that declares the
66
- * directive/pipe. This data is needed to produce an error for the given class.
67
- */
68
- this.duplicateDeclarations = new Map();
69
- this.moduleToRef = new Map();
70
- /**
71
- * A cache of calculated `LocalModuleScope`s for each NgModule declared in the current program.
72
-
73
- */
74
- this.cache = new Map();
75
- /**
76
- * Tracks the `RemoteScope` for components requiring "remote scoping".
77
- *
78
- * Remote scoping is when the set of directives which apply to a given component is set in the
79
- * NgModule's file instead of directly on the component def (which is sometimes needed to get
80
- * around cyclic import issues). This is not used in calculation of `LocalModuleScope`s, but is
81
- * tracked here for convenience.
82
- */
83
- this.remoteScoping = new Map();
84
- /**
85
- * Tracks errors accumulated in the processing of scopes for each module declaration.
86
- */
87
- this.scopeErrors = new Map();
88
- /**
89
- * Tracks which NgModules have directives/pipes that are declared in more than one module.
90
- */
91
- this.modulesWithStructuralErrors = new Set();
92
- }
93
- /**
94
- * Add an NgModule's data to the registry.
95
- */
96
- LocalModuleScopeRegistry.prototype.registerNgModuleMetadata = function (data) {
97
- var e_1, _a;
98
- this.assertCollecting();
99
- var ngModule = data.ref.node;
100
- this.moduleToRef.set(data.ref.node, data.ref);
101
- try {
102
- // Iterate over the module's declarations, and add them to declarationToModule. If duplicates
103
- // are found, they're instead tracked in duplicateDeclarations.
104
- for (var _b = tslib_1.__values(data.declarations), _c = _b.next(); !_c.done; _c = _b.next()) {
105
- var decl = _c.value;
106
- this.registerDeclarationOfModule(ngModule, decl, data.rawDeclarations);
107
- }
108
- }
109
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
110
- finally {
111
- try {
112
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
113
- }
114
- finally { if (e_1) throw e_1.error; }
115
- }
116
- };
117
- LocalModuleScopeRegistry.prototype.registerDirectiveMetadata = function (directive) { };
118
- LocalModuleScopeRegistry.prototype.registerPipeMetadata = function (pipe) { };
119
- LocalModuleScopeRegistry.prototype.getScopeForComponent = function (clazz) {
120
- var scope = !this.declarationToModule.has(clazz) ?
121
- null :
122
- this.getScopeOfModule(this.declarationToModule.get(clazz).ngModule);
123
- return scope;
124
- };
125
- /**
126
- * If `node` is declared in more than one NgModule (duplicate declaration), then get the
127
- * `DeclarationData` for each offending declaration.
128
- *
129
- * Ordinarily a class is only declared in one NgModule, in which case this function returns
130
- * `null`.
131
- */
132
- LocalModuleScopeRegistry.prototype.getDuplicateDeclarations = function (node) {
133
- if (!this.duplicateDeclarations.has(node)) {
134
- return null;
135
- }
136
- return Array.from(this.duplicateDeclarations.get(node).values());
137
- };
138
- /**
139
- * Collects registered data for a module and its directives/pipes and convert it into a full
140
- * `LocalModuleScope`.
141
- *
142
- * This method implements the logic of NgModule imports and exports. It returns the
143
- * `LocalModuleScope` for the given NgModule if one can be produced, `null` if no scope was ever
144
- * defined, or the string `'error'` if the scope contained errors.
145
- */
146
- LocalModuleScopeRegistry.prototype.getScopeOfModule = function (clazz) {
147
- return this.moduleToRef.has(clazz) ?
148
- this.getScopeOfModuleReference(this.moduleToRef.get(clazz)) :
149
- null;
150
- };
151
- /**
152
- * Retrieves any `ts.Diagnostic`s produced during the calculation of the `LocalModuleScope` for
153
- * the given NgModule, or `null` if no errors were present.
154
- */
155
- LocalModuleScopeRegistry.prototype.getDiagnosticsOfModule = function (clazz) {
156
- // Required to ensure the errors are populated for the given class. If it has been processed
157
- // before, this will be a no-op due to the scope cache.
158
- this.getScopeOfModule(clazz);
159
- if (this.scopeErrors.has(clazz)) {
160
- return this.scopeErrors.get(clazz);
161
- }
162
- else {
163
- return null;
164
- }
165
- };
166
- LocalModuleScopeRegistry.prototype.registerDeclarationOfModule = function (ngModule, decl, rawDeclarations) {
167
- var declData = {
168
- ngModule: ngModule,
169
- ref: decl,
170
- rawDeclarations: rawDeclarations,
171
- };
172
- // First, check for duplicate declarations of the same directive/pipe.
173
- if (this.duplicateDeclarations.has(decl.node)) {
174
- // This directive/pipe has already been identified as being duplicated. Add this module to the
175
- // map of modules for which a duplicate declaration exists.
176
- this.duplicateDeclarations.get(decl.node).set(ngModule, declData);
177
- }
178
- else if (this.declarationToModule.has(decl.node) &&
179
- this.declarationToModule.get(decl.node).ngModule !== ngModule) {
180
- // This directive/pipe is already registered as declared in another module. Mark it as a
181
- // duplicate instead.
182
- var duplicateDeclMap = new Map();
183
- var firstDeclData = this.declarationToModule.get(decl.node);
184
- // Mark both modules as having duplicate declarations.
185
- this.modulesWithStructuralErrors.add(firstDeclData.ngModule);
186
- this.modulesWithStructuralErrors.add(ngModule);
187
- // Being detected as a duplicate means there are two NgModules (for now) which declare this
188
- // directive/pipe. Add both of them to the duplicate tracking map.
189
- duplicateDeclMap.set(firstDeclData.ngModule, firstDeclData);
190
- duplicateDeclMap.set(ngModule, declData);
191
- this.duplicateDeclarations.set(decl.node, duplicateDeclMap);
192
- // Remove the directive/pipe from `declarationToModule` as it's a duplicate declaration, and
193
- // therefore not valid.
194
- this.declarationToModule.delete(decl.node);
195
- }
196
- else {
197
- // This is the first declaration of this directive/pipe, so map it.
198
- this.declarationToModule.set(decl.node, declData);
199
- }
200
- };
201
- /**
202
- * Implementation of `getScopeOfModule` which accepts a reference to a class.
203
- */
204
- LocalModuleScopeRegistry.prototype.getScopeOfModuleReference = function (ref) {
205
- var e_2, _a, e_3, _b, e_4, _c, e_5, _d, e_6, _e, e_7, _f, e_8, _g, e_9, _h, e_10, _j;
206
- if (this.cache.has(ref.node)) {
207
- return this.cache.get(ref.node);
208
- }
209
- // Seal the registry to protect the integrity of the `LocalModuleScope` cache.
210
- this.sealed = true;
211
- // `ref` should be an NgModule previously added to the registry. If not, a scope for it
212
- // cannot be produced.
213
- var ngModule = this.localReader.getNgModuleMetadata(ref);
214
- if (ngModule === null) {
215
- this.cache.set(ref.node, null);
216
- return null;
217
- }
218
- // Modules which contributed to the compilation scope of this module.
219
- var compilationModules = new Set([ngModule.ref.node]);
220
- // Modules which contributed to the export scope of this module.
221
- var exportedModules = new Set([ngModule.ref.node]);
222
- // Errors produced during computation of the scope are recorded here. At the end, if this array
223
- // isn't empty then `undefined` will be cached and returned to indicate this scope is invalid.
224
- var diagnostics = [];
225
- // At this point, the goal is to produce two distinct transitive sets:
226
- // - the directives and pipes which are visible to components declared in the NgModule.
227
- // - the directives and pipes which are exported to any NgModules which import this one.
228
- // Directives and pipes in the compilation scope.
229
- var compilationDirectives = new Map();
230
- var compilationPipes = new Map();
231
- var declared = new Set();
232
- // Directives and pipes exported to any importing NgModules.
233
- var exportDirectives = new Map();
234
- var exportPipes = new Map();
235
- // The algorithm is as follows:
236
- // 1) Add all of the directives/pipes from each NgModule imported into the current one to the
237
- // compilation scope.
238
- // 2) Add directives/pipes declared in the NgModule to the compilation scope. At this point, the
239
- // compilation scope is complete.
240
- // 3) For each entry in the NgModule's exports:
241
- // a) Attempt to resolve it as an NgModule with its own exported directives/pipes. If it is
242
- // one, add them to the export scope of this NgModule.
243
- // b) Otherwise, it should be a class in the compilation scope of this NgModule. If it is,
244
- // add it to the export scope.
245
- // c) If it's neither an NgModule nor a directive/pipe in the compilation scope, then this
246
- // is an error.
247
- //
248
- var isPoisoned = false;
249
- if (this.modulesWithStructuralErrors.has(ngModule.ref.node)) {
250
- // If the module contains declarations that are duplicates, then it's considered poisoned.
251
- isPoisoned = true;
252
- }
253
- try {
254
- // 1) process imports.
255
- for (var _k = tslib_1.__values(ngModule.imports), _l = _k.next(); !_l.done; _l = _k.next()) {
256
- var decl = _l.value;
257
- var importScope = this.getExportedScope(decl, diagnostics, ref.node, 'import');
258
- if (importScope === null) {
259
- // An import wasn't an NgModule, so record an error.
260
- diagnostics.push(invalidRef(ref.node, decl, 'import'));
261
- isPoisoned = true;
262
- continue;
263
- }
264
- else if (importScope === 'invalid' || importScope.exported.isPoisoned) {
265
- // An import was an NgModule but contained errors of its own. Record this as an error too,
266
- // because this scope is always going to be incorrect if one of its imports could not be
267
- // read.
268
- diagnostics.push(invalidTransitiveNgModuleRef(ref.node, decl, 'import'));
269
- isPoisoned = true;
270
- if (importScope === 'invalid') {
271
- continue;
272
- }
273
- }
274
- try {
275
- for (var _m = (e_3 = void 0, tslib_1.__values(importScope.exported.directives)), _o = _m.next(); !_o.done; _o = _m.next()) {
276
- var directive = _o.value;
277
- compilationDirectives.set(directive.ref.node, directive);
278
- }
279
- }
280
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
281
- finally {
282
- try {
283
- if (_o && !_o.done && (_b = _m.return)) _b.call(_m);
284
- }
285
- finally { if (e_3) throw e_3.error; }
286
- }
287
- try {
288
- for (var _p = (e_4 = void 0, tslib_1.__values(importScope.exported.pipes)), _q = _p.next(); !_q.done; _q = _p.next()) {
289
- var pipe = _q.value;
290
- compilationPipes.set(pipe.ref.node, pipe);
291
- }
292
- }
293
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
294
- finally {
295
- try {
296
- if (_q && !_q.done && (_c = _p.return)) _c.call(_p);
297
- }
298
- finally { if (e_4) throw e_4.error; }
299
- }
300
- try {
301
- for (var _r = (e_5 = void 0, tslib_1.__values(importScope.exported.ngModules)), _s = _r.next(); !_s.done; _s = _r.next()) {
302
- var importedModule = _s.value;
303
- compilationModules.add(importedModule);
304
- }
305
- }
306
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
307
- finally {
308
- try {
309
- if (_s && !_s.done && (_d = _r.return)) _d.call(_r);
310
- }
311
- finally { if (e_5) throw e_5.error; }
312
- }
313
- }
314
- }
315
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
316
- finally {
317
- try {
318
- if (_l && !_l.done && (_a = _k.return)) _a.call(_k);
319
- }
320
- finally { if (e_2) throw e_2.error; }
321
- }
322
- try {
323
- // 2) add declarations.
324
- for (var _t = tslib_1.__values(ngModule.declarations), _u = _t.next(); !_u.done; _u = _t.next()) {
325
- var decl = _u.value;
326
- var directive = this.localReader.getDirectiveMetadata(decl);
327
- var pipe = this.localReader.getPipeMetadata(decl);
328
- if (directive !== null) {
329
- compilationDirectives.set(decl.node, tslib_1.__assign(tslib_1.__assign({}, directive), { ref: decl }));
330
- if (directive.isPoisoned) {
331
- isPoisoned = true;
332
- }
333
- }
334
- else if (pipe !== null) {
335
- compilationPipes.set(decl.node, tslib_1.__assign(tslib_1.__assign({}, pipe), { ref: decl }));
336
- }
337
- else {
338
- var errorNode = decl.getOriginForDiagnostics(ngModule.rawDeclarations);
339
- diagnostics.push(diagnostics_1.makeDiagnostic(diagnostics_1.ErrorCode.NGMODULE_INVALID_DECLARATION, errorNode, "The class '" + decl.node.name.text + "' is listed in the declarations " +
340
- ("of the NgModule '" + ngModule.ref.node.name
341
- .text + "', but is not a directive, a component, or a pipe. ") +
342
- "Either remove it from the NgModule's declarations, or add an appropriate Angular decorator.", [diagnostics_1.makeRelatedInformation(decl.node.name, "'" + decl.node.name.text + "' is declared here.")]));
343
- isPoisoned = true;
344
- continue;
345
- }
346
- declared.add(decl.node);
347
- }
348
- }
349
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
350
- finally {
351
- try {
352
- if (_u && !_u.done && (_e = _t.return)) _e.call(_t);
353
- }
354
- finally { if (e_6) throw e_6.error; }
355
- }
356
- try {
357
- // 3) process exports.
358
- // Exports can contain modules, components, or directives. They're processed differently.
359
- // Modules are straightforward. Directives and pipes from exported modules are added to the
360
- // export maps. Directives/pipes are different - they might be exports of declared types or
361
- // imported types.
362
- for (var _v = tslib_1.__values(ngModule.exports), _w = _v.next(); !_w.done; _w = _v.next()) {
363
- var decl = _w.value;
364
- // Attempt to resolve decl as an NgModule.
365
- var exportScope = this.getExportedScope(decl, diagnostics, ref.node, 'export');
366
- if (exportScope === 'invalid' || (exportScope !== null && exportScope.exported.isPoisoned)) {
367
- // An export was an NgModule but contained errors of its own. Record this as an error too,
368
- // because this scope is always going to be incorrect if one of its exports could not be
369
- // read.
370
- diagnostics.push(invalidTransitiveNgModuleRef(ref.node, decl, 'export'));
371
- isPoisoned = true;
372
- if (exportScope === 'invalid') {
373
- continue;
374
- }
375
- }
376
- else if (exportScope !== null) {
377
- try {
378
- // decl is an NgModule.
379
- for (var _x = (e_8 = void 0, tslib_1.__values(exportScope.exported.directives)), _y = _x.next(); !_y.done; _y = _x.next()) {
380
- var directive = _y.value;
381
- exportDirectives.set(directive.ref.node, directive);
382
- }
383
- }
384
- catch (e_8_1) { e_8 = { error: e_8_1 }; }
385
- finally {
386
- try {
387
- if (_y && !_y.done && (_g = _x.return)) _g.call(_x);
388
- }
389
- finally { if (e_8) throw e_8.error; }
390
- }
391
- try {
392
- for (var _z = (e_9 = void 0, tslib_1.__values(exportScope.exported.pipes)), _0 = _z.next(); !_0.done; _0 = _z.next()) {
393
- var pipe = _0.value;
394
- exportPipes.set(pipe.ref.node, pipe);
395
- }
396
- }
397
- catch (e_9_1) { e_9 = { error: e_9_1 }; }
398
- finally {
399
- try {
400
- if (_0 && !_0.done && (_h = _z.return)) _h.call(_z);
401
- }
402
- finally { if (e_9) throw e_9.error; }
403
- }
404
- try {
405
- for (var _1 = (e_10 = void 0, tslib_1.__values(exportScope.exported.ngModules)), _2 = _1.next(); !_2.done; _2 = _1.next()) {
406
- var exportedModule = _2.value;
407
- exportedModules.add(exportedModule);
408
- }
409
- }
410
- catch (e_10_1) { e_10 = { error: e_10_1 }; }
411
- finally {
412
- try {
413
- if (_2 && !_2.done && (_j = _1.return)) _j.call(_1);
414
- }
415
- finally { if (e_10) throw e_10.error; }
416
- }
417
- }
418
- else if (compilationDirectives.has(decl.node)) {
419
- // decl is a directive or component in the compilation scope of this NgModule.
420
- var directive = compilationDirectives.get(decl.node);
421
- exportDirectives.set(decl.node, directive);
422
- }
423
- else if (compilationPipes.has(decl.node)) {
424
- // decl is a pipe in the compilation scope of this NgModule.
425
- var pipe = compilationPipes.get(decl.node);
426
- exportPipes.set(decl.node, pipe);
427
- }
428
- else {
429
- // decl is an unknown export.
430
- if (this.localReader.getDirectiveMetadata(decl) !== null ||
431
- this.localReader.getPipeMetadata(decl) !== null) {
432
- diagnostics.push(invalidReexport(ref.node, decl));
433
- }
434
- else {
435
- diagnostics.push(invalidRef(ref.node, decl, 'export'));
436
- }
437
- isPoisoned = true;
438
- continue;
439
- }
440
- }
441
- }
442
- catch (e_7_1) { e_7 = { error: e_7_1 }; }
443
- finally {
444
- try {
445
- if (_w && !_w.done && (_f = _v.return)) _f.call(_v);
446
- }
447
- finally { if (e_7) throw e_7.error; }
448
- }
449
- var exported = {
450
- directives: Array.from(exportDirectives.values()),
451
- pipes: Array.from(exportPipes.values()),
452
- ngModules: Array.from(exportedModules),
453
- isPoisoned: isPoisoned,
454
- };
455
- var reexports = this.getReexports(ngModule, ref, declared, exported, diagnostics);
456
- // Finally, produce the `LocalModuleScope` with both the compilation and export scopes.
457
- var scope = {
458
- ngModule: ngModule.ref.node,
459
- compilation: {
460
- directives: Array.from(compilationDirectives.values()),
461
- pipes: Array.from(compilationPipes.values()),
462
- ngModules: Array.from(compilationModules),
463
- isPoisoned: isPoisoned,
464
- },
465
- exported: exported,
466
- reexports: reexports,
467
- schemas: ngModule.schemas,
468
- };
469
- // Check if this scope had any errors during production.
470
- if (diagnostics.length > 0) {
471
- // Save the errors for retrieval.
472
- this.scopeErrors.set(ref.node, diagnostics);
473
- // Mark this module as being tainted.
474
- this.modulesWithStructuralErrors.add(ref.node);
475
- }
476
- this.cache.set(ref.node, scope);
477
- return scope;
478
- };
479
- /**
480
- * Check whether a component requires remote scoping.
481
- */
482
- LocalModuleScopeRegistry.prototype.getRemoteScope = function (node) {
483
- return this.remoteScoping.has(node) ? this.remoteScoping.get(node) : null;
484
- };
485
- /**
486
- * Set a component as requiring remote scoping, with the given directives and pipes to be
487
- * registered remotely.
488
- */
489
- LocalModuleScopeRegistry.prototype.setComponentRemoteScope = function (node, directives, pipes) {
490
- this.remoteScoping.set(node, { directives: directives, pipes: pipes });
491
- };
492
- /**
493
- * Look up the `ExportScope` of a given `Reference` to an NgModule.
494
- *
495
- * The NgModule in question may be declared locally in the current ts.Program, or it may be
496
- * declared in a .d.ts file.
497
- *
498
- * @returns `null` if no scope could be found, or `'invalid'` if the `Reference` is not a valid
499
- * NgModule.
500
- *
501
- * May also contribute diagnostics of its own by adding to the given `diagnostics`
502
- * array parameter.
503
- */
504
- LocalModuleScopeRegistry.prototype.getExportedScope = function (ref, diagnostics, ownerForErrors, type) {
505
- if (ref.node.getSourceFile().isDeclarationFile) {
506
- // The NgModule is declared in a .d.ts file. Resolve it with the `DependencyScopeReader`.
507
- if (!ts.isClassDeclaration(ref.node)) {
508
- // The NgModule is in a .d.ts file but is not declared as a ts.ClassDeclaration. This is an
509
- // error in the .d.ts metadata.
510
- var code = type === 'import' ? diagnostics_1.ErrorCode.NGMODULE_INVALID_IMPORT :
511
- diagnostics_1.ErrorCode.NGMODULE_INVALID_EXPORT;
512
- diagnostics.push(diagnostics_1.makeDiagnostic(code, typescript_1.identifierOfNode(ref.node) || ref.node, "Appears in the NgModule." + type + "s of " + typescript_1.nodeNameForError(ownerForErrors) + ", but could not be resolved to an NgModule"));
513
- return 'invalid';
514
- }
515
- return this.dependencyScopeReader.resolve(ref);
516
- }
517
- else {
518
- // The NgModule is declared locally in the current program. Resolve it from the registry.
519
- return this.getScopeOfModuleReference(ref);
520
- }
521
- };
522
- LocalModuleScopeRegistry.prototype.getReexports = function (ngModule, ref, declared, exported, diagnostics) {
523
- var e_11, _a, e_12, _b;
524
- var _this = this;
525
- var reexports = null;
526
- var sourceFile = ref.node.getSourceFile();
527
- if (this.aliasingHost === null) {
528
- return null;
529
- }
530
- reexports = [];
531
- // Track re-exports by symbol name, to produce diagnostics if two alias re-exports would share
532
- // the same name.
533
- var reexportMap = new Map();
534
- // Alias ngModuleRef added for readability below.
535
- var ngModuleRef = ref;
536
- var addReexport = function (exportRef) {
537
- if (exportRef.node.getSourceFile() === sourceFile) {
538
- return;
539
- }
540
- var isReExport = !declared.has(exportRef.node);
541
- var exportName = _this.aliasingHost.maybeAliasSymbolAs(exportRef, sourceFile, ngModule.ref.node.name.text, isReExport);
542
- if (exportName === null) {
543
- return;
544
- }
545
- if (!reexportMap.has(exportName)) {
546
- if (exportRef.alias && exportRef.alias instanceof compiler_1.ExternalExpr) {
547
- reexports.push({
548
- fromModule: exportRef.alias.value.moduleName,
549
- symbolName: exportRef.alias.value.name,
550
- asAlias: exportName,
551
- });
552
- }
553
- else {
554
- var expr = _this.refEmitter.emit(exportRef.cloneWithNoIdentifiers(), sourceFile).expression;
555
- if (!(expr instanceof compiler_1.ExternalExpr) || expr.value.moduleName === null ||
556
- expr.value.name === null) {
557
- throw new Error('Expected ExternalExpr');
558
- }
559
- reexports.push({
560
- fromModule: expr.value.moduleName,
561
- symbolName: expr.value.name,
562
- asAlias: exportName,
563
- });
564
- }
565
- reexportMap.set(exportName, exportRef);
566
- }
567
- else {
568
- // Another re-export already used this name. Produce a diagnostic.
569
- var prevRef = reexportMap.get(exportName);
570
- diagnostics.push(reexportCollision(ngModuleRef.node, prevRef, exportRef));
571
- }
572
- };
573
- try {
574
- for (var _c = tslib_1.__values(exported.directives), _d = _c.next(); !_d.done; _d = _c.next()) {
575
- var ref_1 = _d.value.ref;
576
- addReexport(ref_1);
577
- }
578
- }
579
- catch (e_11_1) { e_11 = { error: e_11_1 }; }
580
- finally {
581
- try {
582
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
583
- }
584
- finally { if (e_11) throw e_11.error; }
585
- }
586
- try {
587
- for (var _e = tslib_1.__values(exported.pipes), _f = _e.next(); !_f.done; _f = _e.next()) {
588
- var ref_2 = _f.value.ref;
589
- addReexport(ref_2);
590
- }
591
- }
592
- catch (e_12_1) { e_12 = { error: e_12_1 }; }
593
- finally {
594
- try {
595
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
596
- }
597
- finally { if (e_12) throw e_12.error; }
598
- }
599
- return reexports;
600
- };
601
- LocalModuleScopeRegistry.prototype.assertCollecting = function () {
602
- if (this.sealed) {
603
- throw new Error("Assertion: LocalModuleScopeRegistry is not COLLECTING");
604
- }
605
- };
606
- return LocalModuleScopeRegistry;
607
- }());
608
- exports.LocalModuleScopeRegistry = LocalModuleScopeRegistry;
609
- /**
610
- * Produce a `ts.Diagnostic` for an invalid import or export from an NgModule.
611
- */
612
- function invalidRef(clazz, decl, type) {
613
- var code = type === 'import' ? diagnostics_1.ErrorCode.NGMODULE_INVALID_IMPORT : diagnostics_1.ErrorCode.NGMODULE_INVALID_EXPORT;
614
- var resolveTarget = type === 'import' ? 'NgModule' : 'NgModule, Component, Directive, or Pipe';
615
- var message = "Appears in the NgModule." + type + "s of " + typescript_1.nodeNameForError(clazz) + ", but could not be resolved to an " + resolveTarget + " class." +
616
- '\n\n';
617
- var library = decl.ownedByModuleGuess !== null ? " (" + decl.ownedByModuleGuess + ")" : '';
618
- var sf = decl.node.getSourceFile();
619
- // Provide extra context to the error for the user.
620
- if (!sf.isDeclarationFile) {
621
- // This is a file in the user's program.
622
- var annotationType = type === 'import' ? '@NgModule' : 'Angular';
623
- message += "Is it missing an " + annotationType + " annotation?";
624
- }
625
- else if (sf.fileName.indexOf('node_modules') !== -1) {
626
- // This file comes from a third-party library in node_modules.
627
- message +=
628
- "This likely means that the library" + library + " which declares " + decl.debugName + " has not " +
629
- 'been processed correctly by ngcc, or is not compatible with Angular Ivy. Check if a ' +
630
- 'newer version of the library is available, and update if so. Also consider checking ' +
631
- 'with the library\'s authors to see if the library is expected to be compatible with Ivy.';
632
- }
633
- else {
634
- // This is a monorepo style local dependency. Unfortunately these are too different to really
635
- // offer much more advice than this.
636
- message += "This likely means that the dependency" + library + " which declares " + decl.debugName + " has not been processed correctly by ngcc.";
637
- }
638
- return diagnostics_1.makeDiagnostic(code, typescript_1.identifierOfNode(decl.node) || decl.node, message);
639
- }
640
- /**
641
- * Produce a `ts.Diagnostic` for an import or export which itself has errors.
642
- */
643
- function invalidTransitiveNgModuleRef(clazz, decl, type) {
644
- var code = type === 'import' ? diagnostics_1.ErrorCode.NGMODULE_INVALID_IMPORT : diagnostics_1.ErrorCode.NGMODULE_INVALID_EXPORT;
645
- return diagnostics_1.makeDiagnostic(code, typescript_1.identifierOfNode(decl.node) || decl.node, "Appears in the NgModule." + type + "s of " + typescript_1.nodeNameForError(clazz) + ", but itself has errors");
646
- }
647
- /**
648
- * Produce a `ts.Diagnostic` for an exported directive or pipe which was not declared or imported
649
- * by the NgModule in question.
650
- */
651
- function invalidReexport(clazz, decl) {
652
- return diagnostics_1.makeDiagnostic(diagnostics_1.ErrorCode.NGMODULE_INVALID_REEXPORT, typescript_1.identifierOfNode(decl.node) || decl.node, "Present in the NgModule.exports of " + typescript_1.nodeNameForError(clazz) + " but neither declared nor imported");
653
- }
654
- /**
655
- * Produce a `ts.Diagnostic` for a collision in re-export names between two directives/pipes.
656
- */
657
- function reexportCollision(module, refA, refB) {
658
- var childMessageText = "This directive/pipe is part of the exports of '" + module.name.text + "' and shares the same name as another exported directive/pipe.";
659
- return diagnostics_1.makeDiagnostic(diagnostics_1.ErrorCode.NGMODULE_REEXPORT_NAME_COLLISION, module.name, ("\n There was a name collision between two classes named '" + refA.node.name.text + "', which are both part of the exports of '" + module.name.text + "'.\n\n Angular generates re-exports of an NgModule's exported directives/pipes from the module's source file in certain cases, using the declared name of the class. If two classes of the same name are exported, this automatic naming does not work.\n\n To fix this problem please re-export one or both classes directly from this file.\n ").trim(), [
660
- diagnostics_1.makeRelatedInformation(refA.node.name, childMessageText),
661
- diagnostics_1.makeRelatedInformation(refB.node.name, childMessageText),
662
- ]);
663
- }
664
- });
665
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3Njb3BlL3NyYy9sb2NhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBRUgsOENBQStEO0lBQy9ELCtCQUFpQztJQUVqQywyRUFBb0Y7SUFJcEYsa0ZBQTZFO0lBbUI3RTs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0JHO0lBQ0g7UUFvREUsa0NBQ1ksV0FBMkIsRUFBVSxxQkFBNkMsRUFDbEYsVUFBNEIsRUFBVSxZQUErQjtZQURyRSxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7WUFBVSwwQkFBcUIsR0FBckIscUJBQXFCLENBQXdCO1lBQ2xGLGVBQVUsR0FBVixVQUFVLENBQWtCO1lBQVUsaUJBQVksR0FBWixZQUFZLENBQW1CO1lBckRqRjs7OztlQUlHO1lBQ0ssV0FBTSxHQUFHLEtBQUssQ0FBQztZQUV2Qjs7Ozs7O2VBTUc7WUFDSyx3QkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBcUMsQ0FBQztZQUUzRTs7O2VBR0c7WUFDSywwQkFBcUIsR0FDekIsSUFBSSxHQUFHLEVBQTRELENBQUM7WUFFaEUsZ0JBQVcsR0FBRyxJQUFJLEdBQUcsRUFBaUQsQ0FBQztZQUUvRTs7O2VBR0c7WUFDSyxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQTJDLENBQUM7WUFFbkU7Ozs7Ozs7ZUFPRztZQUNLLGtCQUFhLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7WUFFakU7O2VBRUc7WUFDSyxnQkFBVyxHQUFHLElBQUksR0FBRyxFQUFxQyxDQUFDO1lBRW5FOztlQUVHO1lBQ0ssZ0NBQTJCLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7UUFJa0IsQ0FBQztRQUVyRjs7V0FFRztRQUNILDJEQUF3QixHQUF4QixVQUF5QixJQUFrQjs7WUFDekMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztnQkFDOUMsNkZBQTZGO2dCQUM3RiwrREFBK0Q7Z0JBQy9ELEtBQW1CLElBQUEsS0FBQSxpQkFBQSxJQUFJLENBQUMsWUFBWSxDQUFBLGdCQUFBLDRCQUFFO29CQUFqQyxJQUFNLElBQUksV0FBQTtvQkFDYixJQUFJLENBQUMsMkJBQTJCLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7aUJBQ3hFOzs7Ozs7Ozs7UUFDSCxDQUFDO1FBRUQsNERBQXlCLEdBQXpCLFVBQTBCLFNBQXdCLElBQVMsQ0FBQztRQUU1RCx1REFBb0IsR0FBcEIsVUFBcUIsSUFBYyxJQUFTLENBQUM7UUFFN0MsdURBQW9CLEdBQXBCLFVBQXFCLEtBQXVCO1lBQzFDLElBQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsQ0FBQztnQkFDTixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6RSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRDs7Ozs7O1dBTUc7UUFDSCwyREFBd0IsR0FBeEIsVUFBeUIsSUFBc0I7WUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3pDLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFFRDs7Ozs7OztXQU9HO1FBQ0gsbURBQWdCLEdBQWhCLFVBQWlCLEtBQXVCO1lBQ3RDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBRSxDQUFDLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxDQUFDO1FBQ1gsQ0FBQztRQUVEOzs7V0FHRztRQUNILHlEQUFzQixHQUF0QixVQUF1QixLQUF1QjtZQUM1Qyw0RkFBNEY7WUFDNUYsdURBQXVEO1lBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU3QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMvQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBRSxDQUFDO2FBQ3JDO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDO2FBQ2I7UUFDSCxDQUFDO1FBRU8sOERBQTJCLEdBQW5DLFVBQ0ksUUFBMEIsRUFBRSxJQUFpQyxFQUM3RCxlQUFtQztZQUNyQyxJQUFNLFFBQVEsR0FBb0I7Z0JBQ2hDLFFBQVEsVUFBQTtnQkFDUixHQUFHLEVBQUUsSUFBSTtnQkFDVCxlQUFlLGlCQUFBO2FBQ2hCLENBQUM7WUFFRixzRUFBc0U7WUFDdEUsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDN0MsOEZBQThGO2dCQUM5RiwyREFBMkQ7Z0JBQzNELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDcEU7aUJBQU0sSUFDSCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBRSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUU7Z0JBQ2xFLHdGQUF3RjtnQkFDeEYscUJBQXFCO2dCQUNyQixJQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFxQyxDQUFDO2dCQUN0RSxJQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUUsQ0FBQztnQkFFL0Qsc0RBQXNEO2dCQUN0RCxJQUFJLENBQUMsMkJBQTJCLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFL0MsMkZBQTJGO2dCQUMzRixrRUFBa0U7Z0JBQ2xFLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO2dCQUM1RCxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztnQkFFNUQsNEZBQTRGO2dCQUM1Rix1QkFBdUI7Z0JBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVDO2lCQUFNO2dCQUNMLG1FQUFtRTtnQkFDbkUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQ25EO1FBQ0gsQ0FBQztRQUVEOztXQUVHO1FBQ0ssNERBQXlCLEdBQWpDLFVBQWtDLEdBQWdDOztZQUNoRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDNUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFLENBQUM7YUFDbEM7WUFFRCw4RUFBOEU7WUFDOUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFFbkIsdUZBQXVGO1lBQ3ZGLHNCQUFzQjtZQUN0QixJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNELElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtnQkFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELHFFQUFxRTtZQUNyRSxJQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxDQUFtQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMxRSxnRUFBZ0U7WUFDaEUsSUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQW1CLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRXZFLCtGQUErRjtZQUMvRiw4RkFBOEY7WUFDOUYsSUFBTSxXQUFXLEdBQW9CLEVBQUUsQ0FBQztZQUV4QyxzRUFBc0U7WUFDdEUsdUZBQXVGO1lBQ3ZGLHdGQUF3RjtZQUV4RixpREFBaUQ7WUFDakQsSUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsRUFBa0MsQ0FBQztZQUN4RSxJQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUE2QixDQUFDO1lBRTlELElBQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO1lBRTVDLDREQUE0RDtZQUM1RCxJQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFrQyxDQUFDO1lBQ25FLElBQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUE2QixDQUFDO1lBRXpELCtCQUErQjtZQUMvQiw2RkFBNkY7WUFDN0Ysd0JBQXdCO1lBQ3hCLGdHQUFnRztZQUNoRyxvQ0FBb0M7WUFDcEMsK0NBQStDO1lBQy9DLDhGQUE4RjtZQUM5Riw0REFBNEQ7WUFDNUQsNkZBQTZGO1lBQzdGLG9DQUFvQztZQUNwQyw2RkFBNkY7WUFDN0YscUJBQXFCO1lBRXJCLEVBQUU7WUFDRixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxJQUFJLENBQUMsMkJBQTJCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzNELDBGQUEwRjtnQkFDMUYsVUFBVSxHQUFHLElBQUksQ0FBQzthQUNuQjs7Z0JBRUQsc0JBQXNCO2dCQUN0QixLQUFtQixJQUFBLEtBQUEsaUJBQUEsUUFBUSxDQUFDLE9BQU8sQ0FBQSxnQkFBQSw0QkFBRTtvQkFBaEMsSUFBTSxJQUFJLFdBQUE7b0JBQ2IsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDakYsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFO3dCQUN4QixvREFBb0Q7d0JBQ3BELFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZELFVBQVUsR0FBRyxJQUFJLENBQUM7d0JBQ2xCLFNBQVM7cUJBQ1Y7eUJBQU0sSUFBSSxXQUFXLEtBQUssU0FBUyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO3dCQUN2RSwwRkFBMEY7d0JBQzFGLHdGQUF3Rjt3QkFDeEYsUUFBUTt3QkFDUixXQUFXLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQ3pFLFVBQVUsR0FBRyxJQUFJLENBQUM7d0JBRWxCLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTs0QkFDN0IsU0FBUzt5QkFDVjtxQkFDRjs7d0JBRUQsS0FBd0IsSUFBQSxvQkFBQSxpQkFBQSxXQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQSxDQUFBLGdCQUFBLDRCQUFFOzRCQUFwRCxJQUFNLFNBQVMsV0FBQTs0QkFDbEIscUJBQXFCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO3lCQUMxRDs7Ozs7Ozs7Ozt3QkFDRCxLQUFtQixJQUFBLG9CQUFBLGlCQUFBLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFBLENBQUEsZ0JBQUEsNEJBQUU7NEJBQTFDLElBQU0sSUFBSSxXQUFBOzRCQUNiLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzt5QkFDM0M7Ozs7Ozs7Ozs7d0JBQ0QsS0FBNkIsSUFBQSxvQkFBQSxpQkFBQSxXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQSxDQUFBLGdCQUFBLDRCQUFFOzRCQUF4RCxJQUFNLGNBQWMsV0FBQTs0QkFDdkIsa0JBQWtCLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO3lCQUN4Qzs7Ozs7Ozs7O2lCQUNGOzs7Ozs7Ozs7O2dCQUVELHVCQUF1QjtnQkFDdkIsS0FBbUIsSUFBQSxLQUFBLGlCQUFBLFFBQVEsQ0FBQyxZQUFZLENBQUEsZ0JBQUEsNEJBQUU7b0JBQXJDLElBQU0sSUFBSSxXQUFBO29CQUNiLElBQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzlELElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNwRCxJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUU7d0JBQ3RCLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSx3Q0FBTSxTQUFTLEtBQUUsR0FBRyxFQUFFLElBQUksSUFBRSxDQUFDO3dCQUNoRSxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUU7NEJBQ3hCLFVBQVUsR0FBRyxJQUFJLENBQUM7eUJBQ25CO3FCQUNGO3lCQUFNLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTt3QkFDeEIsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLHdDQUFNLElBQUksS0FBRSxHQUFHLEVBQUUsSUFBSSxJQUFFLENBQUM7cUJBQ3ZEO3lCQUFNO3dCQUNMLElBQU0sU0FBUyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsZUFBZ0IsQ0FBQyxDQUFDO3dCQUMxRSxXQUFXLENBQUMsSUFBSSxDQUFDLDRCQUFjLENBQzNCLHVCQUFTLENBQUMsNEJBQTRCLEVBQUUsU0FBUyxFQUNqRCxnQkFBYyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLHFDQUFrQzs2QkFDL0Qsc0JBQ0ksUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSTtpQ0FDakIsSUFBSSx3REFBcUQsQ0FBQTs0QkFDbEUsNkZBQTZGLEVBQ2pHLENBQUMsb0NBQXNCLENBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSx3QkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN6RSxVQUFVLEdBQUcsSUFBSSxDQUFDO3dCQUNsQixTQUFTO3FCQUNWO29CQUVELFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN6Qjs7Ozs7Ozs7OztnQkFFRCxzQkFBc0I7Z0JBQ3RCLHlGQUF5RjtnQkFDekYsMkZBQTJGO2dCQUMzRiwyRkFBMkY7Z0JBQzNGLGtCQUFrQjtnQkFDbEIsS0FBbUIsSUFBQSxLQUFBLGlCQUFBLFFBQVEsQ0FBQyxPQUFPLENBQUEsZ0JBQUEsNEJBQUU7b0JBQWhDLElBQU0sSUFBSSxXQUFBO29CQUNiLDBDQUEwQztvQkFDMUMsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDakYsSUFBSSxXQUFXLEtBQUssU0FBUyxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO3dCQUMxRiwwRkFBMEY7d0JBQzFGLHdGQUF3Rjt3QkFDeEYsUUFBUTt3QkFDUixXQUFXLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQ3pFLFVBQVUsR0FBRyxJQUFJLENBQUM7d0JBRWxCLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTs0QkFDN0IsU0FBUzt5QkFDVjtxQkFDRjt5QkFBTSxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7OzRCQUMvQix1QkFBdUI7NEJBQ3ZCLEtBQXdCLElBQUEsb0JBQUEsaUJBQUEsV0FBVyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUEsQ0FBQSxnQkFBQSw0QkFBRTtnQ0FBcEQsSUFBTSxTQUFTLFdBQUE7Z0NBQ2xCLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQzs2QkFDckQ7Ozs7Ozs7Ozs7NEJBQ0QsS0FBbUIsSUFBQSxvQkFBQSxpQkFBQSxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQSxDQUFBLGdCQUFBLDRCQUFFO2dDQUExQyxJQUFNLElBQUksV0FBQTtnQ0FDYixXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDOzZCQUN0Qzs7Ozs7Ozs7Ozs0QkFDRCxLQUE2QixJQUFBLHFCQUFBLGlCQUFBLFdBQVcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFBLENBQUEsZ0JBQUEsNEJBQUU7Z0NBQXhELElBQU0sY0FBYyxXQUFBO2dDQUN2QixlQUFlLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDOzZCQUNyQzs7Ozs7Ozs7O3FCQUNGO3lCQUFNLElBQUkscUJBQXFCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDL0MsOEVBQThFO3dCQUM5RSxJQUFNLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBRSxDQUFDO3dCQUN4RCxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztxQkFDNUM7eUJBQU0sSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUMxQyw0REFBNEQ7d0JBQzVELElBQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFFLENBQUM7d0JBQzlDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDbEM7eUJBQU07d0JBQ0wsNkJBQTZCO3dCQUM3QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSTs0QkFDcEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFOzRCQUNuRCxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7eUJBQ25EOzZCQUFNOzRCQUNMLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7eUJBQ3hEO3dCQUNELFVBQVUsR0FBRyxJQUFJLENBQUM7d0JBQ2xCLFNBQVM7cUJBQ1Y7aUJBQ0Y7Ozs7Ozs7OztZQUVELElBQU0sUUFBUSxHQUFjO2dCQUMxQixVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakQsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN2QyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7Z0JBQ3RDLFVBQVUsWUFBQTthQUNYLENBQUM7WUFFRixJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUdwRix1RkFBdUY7WUFDdkYsSUFBTSxLQUFLLEdBQXFCO2dCQUM5QixRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJO2dCQUMzQixXQUFXLEVBQUU7b0JBQ1gsVUFBVSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3RELEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUM1QyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztvQkFDekMsVUFBVSxZQUFBO2lCQUNYO2dCQUNELFFBQVEsVUFBQTtnQkFDUixTQUFTLFdBQUE7Z0JBQ1QsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO2FBQzFCLENBQUM7WUFFRix3REFBd0Q7WUFDeEQsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDMUIsaUNBQWlDO2dCQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUU1QyxxQ0FBcUM7Z0JBQ3JDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2hEO1lBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNoQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRDs7V0FFRztRQUNILGlEQUFjLEdBQWQsVUFBZSxJQUFzQjtZQUNuQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzdFLENBQUM7UUFFRDs7O1dBR0c7UUFDSCwwREFBdUIsR0FBdkIsVUFBd0IsSUFBc0IsRUFBRSxVQUF1QixFQUFFLEtBQWtCO1lBRXpGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFDLFVBQVUsWUFBQSxFQUFFLEtBQUssT0FBQSxFQUFDLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRUQ7Ozs7Ozs7Ozs7O1dBV0c7UUFDSyxtREFBZ0IsR0FBeEIsVUFDSSxHQUFnQyxFQUFFLFdBQTRCLEVBQzlELGNBQStCLEVBQUUsSUFBdUI7WUFDMUQsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLGlCQUFpQixFQUFFO2dCQUM5Qyx5RkFBeUY7Z0JBQ3pGLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNwQywyRkFBMkY7b0JBQzNGLCtCQUErQjtvQkFDL0IsSUFBTSxJQUFJLEdBQUcsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsdUJBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO3dCQUNuQyx1QkFBUyxDQUFDLHVCQUF1QixDQUFDO29CQUNuRSxXQUFXLENBQUMsSUFBSSxDQUFDLDRCQUFjLENBQzNCLElBQUksRUFBRSw2QkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksRUFDNUMsNkJBQTJCLElBQUksYUFDM0IsNkJBQWdCLENBQUMsY0FBYyxDQUFDLCtDQUE0QyxDQUFDLENBQUMsQ0FBQztvQkFDdkYsT0FBTyxTQUFTLENBQUM7aUJBQ2xCO2dCQUNELE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNoRDtpQkFBTTtnQkFDTCx5RkFBeUY7Z0JBQ3pGLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzVDO1FBQ0gsQ0FBQztRQUVPLCtDQUFZLEdBQXBCLFVBQ0ksUUFBc0IsRUFBRSxHQUFnQyxFQUFFLFFBQThCLEVBQ3hGLFFBQTBELEVBQzFELFdBQTRCOztZQUhoQyxpQkEyREM7WUF2REMsSUFBSSxTQUFTLEdBQW9CLElBQUksQ0FBQztZQUN0QyxJQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzVDLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLEVBQUU7Z0JBQzlCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ2YsOEZBQThGO1lBQzlGLGlCQUFpQjtZQUNqQixJQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBdUMsQ0FBQztZQUNuRSxpREFBaUQ7WUFDakQsSUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDO1lBQ3hCLElBQU0sV0FBVyxHQUFHLFVBQUMsU0FBc0M7Z0JBQ3pELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxVQUFVLEVBQUU7b0JBQ2pELE9BQU87aUJBQ1I7Z0JBQ0QsSUFBTSxVQUFVLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakQsSUFBTSxVQUFVLEdBQUcsS0FBSSxDQUFDLFlBQWEsQ0FBQyxrQkFBa0IsQ0FDcEQsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUNwRSxJQUFJLFVBQVUsS0FBSyxJQUFJLEVBQUU7b0JBQ3ZCLE9BQU87aUJBQ1I7Z0JBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQ2hDLElBQUksU0FBUyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsS0FBSyxZQUFZLHVCQUFZLEVBQUU7d0JBQzlELFNBQVUsQ0FBQyxJQUFJLENBQUM7NEJBQ2QsVUFBVSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVc7NEJBQzdDLFVBQVUsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFLOzRCQUN2QyxPQUFPLEVBQUUsVUFBVTt5QkFDcEIsQ0FBQyxDQUFDO3FCQUNKO3lCQUFNO3dCQUNMLElBQU0sSUFBSSxHQUNOLEtBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQzt3QkFDcEYsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLHVCQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBSyxJQUFJOzRCQUNqRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7NEJBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQzt5QkFDMUM7d0JBQ0QsU0FBVSxDQUFDLElBQUksQ0FBQzs0QkFDZCxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVOzRCQUNqQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJOzRCQUMzQixPQUFPLEVBQUUsVUFBVTt5QkFDcEIsQ0FBQyxDQUFDO3FCQUNKO29CQUNELFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2lCQUN4QztxQkFBTTtvQkFDTCxrRUFBa0U7b0JBQ2xFLElBQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFFLENBQUM7b0JBQzdDLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztpQkFDM0U7WUFDSCxDQUFDLENBQUM7O2dCQUNGLEtBQW9CLElBQUEsS0FBQSxpQkFBQSxRQUFRLENBQUMsVUFBVSxDQUFBLGdCQUFBLDRCQUFFO29CQUE3QixJQUFBLEtBQUcsZUFBQTtvQkFDYixXQUFXLENBQUMsS0FBRyxDQUFDLENBQUM7aUJBQ2xCOzs7Ozs7Ozs7O2dCQUNELEtBQW9CLElBQUEsS0FBQSxpQkFBQSxRQUFRLENBQUMsS0FBSyxDQUFBLGdCQUFBLDRCQUFFO29CQUF4QixJQUFBLEtBQUcsZUFBQTtvQkFDYixXQUFXLENBQUMsS0FBRyxDQUFDLENBQUM7aUJBQ2xCOzs7Ozs7Ozs7WUFDRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRU8sbURBQWdCLEdBQXhCO1lBQ0UsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQzthQUMxRTtRQUNILENBQUM7UUFDSCwrQkFBQztJQUFELENBQUMsQUE3ZUQsSUE2ZUM7SUE3ZVksNERBQXdCO0lBK2VyQzs7T0FFRztJQUNILFNBQVMsVUFBVSxDQUNmLEtBQXNCLEVBQUUsSUFBZ0MsRUFDeEQsSUFBdUI7UUFDekIsSUFBTSxJQUFJLEdBQ04sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsdUJBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsdUJBQVMsQ0FBQyx1QkFBdUIsQ0FBQztRQUM5RixJQUFNLGFBQWEsR0FBRyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLHlDQUF5QyxDQUFDO1FBQ2pHLElBQUksT0FBTyxHQUNQLDZCQUEyQixJQUFJLGFBQzNCLDZCQUFnQixDQUFDLEtBQUssQ0FBQywwQ0FBcUMsYUFBYSxZQUFTO1lBQ3RGLE1BQU0sQ0FBQztRQUNYLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQUssSUFBSSxDQUFDLGtCQUFrQixNQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RixJQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXJDLG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFO1lBQ3pCLHdDQUF3QztZQUN4QyxJQUFNLGNBQWMsR0FBRyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNuRSxPQUFPLElBQUksc0JBQW9CLGNBQWMsaUJBQWMsQ0FBQztTQUM3RDthQUFNLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDckQsOERBQThEO1lBQzlELE9BQU87Z0JBQ0gsdUNBQXFDLE9BQU8sd0JBQW1CLElBQUksQ0FBQyxTQUFTLGNBQVc7b0JBQ3hGLHNGQUFzRjtvQkFDdEYsc0ZBQXNGO29CQUN0RiwwRkFBMEYsQ0FBQztTQUNoRzthQUFNO1lBQ0wsNkZBQTZGO1lBQzdGLG9DQUFvQztZQUNwQyxPQUFPLElBQUksMENBQXdDLE9BQU8sd0JBQ3RELElBQUksQ0FBQyxTQUFTLCtDQUE0QyxDQUFDO1NBQ2hFO1FBRUQsT0FBTyw0QkFBYyxDQUFDLElBQUksRUFBRSw2QkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLDRCQUE0QixDQUNqQyxLQUFzQixFQUFFLElBQWdDLEVBQ3hELElBQXVCO1FBQ3pCLElBQU0sSUFBSSxHQUNOLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLHVCQUFTLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLHVCQUFTLENBQUMsdUJBQXVCLENBQUM7UUFDOUYsT0FBTyw0QkFBYyxDQUNqQixJQUFJLEVBQUUsNkJBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQzlDLDZCQUEyQixJQUFJLGFBQVEsNkJBQWdCLENBQUMsS0FBSyxDQUFDLDRCQUF5QixDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsZUFBZSxDQUFDLEtBQXNCLEVBQUUsSUFBZ0M7UUFDL0UsT0FBTyw0QkFBYyxDQUNqQix1QkFBUyxDQUFDLHlCQUF5QixFQUFFLDZCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUM3RSx3Q0FDSSw2QkFBZ0IsQ0FBQyxLQUFLLENBQUMsdUNBQW9DLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLGlCQUFpQixDQUN0QixNQUF3QixFQUFFLElBQWlDLEVBQzNELElBQWlDO1FBQ25DLElBQU0sZ0JBQWdCLEdBQUcsb0RBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxtRUFBZ0UsQ0FBQztRQUNyRixPQUFPLDRCQUFjLENBQ2pCLHVCQUFTLENBQUMsZ0NBQWdDLEVBQUUsTUFBTSxDQUFDLElBQUksRUFDdkQsQ0FBQSxpRUFFSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLGtEQUE2QyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksNFZBS3ZGLENBQUEsQ0FBQyxJQUFJLEVBQUUsRUFDSjtZQUNFLG9DQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDO1lBQ3hELG9DQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDO1NBQ3pELENBQUMsQ0FBQztJQUNULENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtFeHRlcm5hbEV4cHIsIFNjaGVtYU1ldGFkYXRhfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtFcnJvckNvZGUsIG1ha2VEaWFnbm9zdGljLCBtYWtlUmVsYXRlZEluZm9ybWF0aW9ufSBmcm9tICcuLi8uLi9kaWFnbm9zdGljcyc7XG5pbXBvcnQge0FsaWFzaW5nSG9zdCwgUmVleHBvcnQsIFJlZmVyZW5jZSwgUmVmZXJlbmNlRW1pdHRlcn0gZnJvbSAnLi4vLi4vaW1wb3J0cyc7XG5pbXBvcnQge0RpcmVjdGl2ZU1ldGEsIE1ldGFkYXRhUmVhZGVyLCBNZXRhZGF0YVJlZ2lzdHJ5LCBOZ01vZHVsZU1ldGEsIFBpcGVNZXRhfSBmcm9tICcuLi8uLi9tZXRhZGF0YSc7XG5pbXBvcnQge0NsYXNzRGVjbGFyYXRpb24sIERlY2xhcmF0aW9uTm9kZX0gZnJvbSAnLi4vLi4vcmVmbGVjdGlvbic7XG5pbXBvcnQge2lkZW50aWZpZXJPZk5vZGUsIG5vZGVOYW1lRm9yRXJyb3J9IGZyb20gJy4uLy4uL3V0aWwvc3JjL3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0V4cG9ydFNjb3BlLCBSZW1vdGVTY29wZSwgU2NvcGVEYXRhfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQge0NvbXBvbmVudFNjb3BlUmVhZGVyfSBmcm9tICcuL2NvbXBvbmVudF9zY29wZSc7XG5pbXBvcnQge0R0c01vZHVsZVNjb3BlUmVzb2x2ZXJ9IGZyb20gJy4vZGVwZW5kZW5jeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxOZ01vZHVsZURhdGEge1xuICBkZWNsYXJhdGlvbnM6IFJlZmVyZW5jZTxDbGFzc0RlY2xhcmF0aW9uPltdO1xuICBpbXBvcnRzOiBSZWZlcmVuY2U8Q2xhc3NEZWNsYXJhdGlvbj5bXTtcbiAgZXhwb3J0czogUmVmZXJlbmNlPENsYXNzRGVjbGFyYXRpb24+W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxNb2R1bGVTY29wZSBleHRlbmRzIEV4cG9ydFNjb3BlIHtcbiAgbmdNb2R1bGU6IENsYXNzRGVjbGFyYXRpb247XG4gIGNvbXBpbGF0aW9uOiBTY29wZURhdGE7XG4gIHJlZXhwb3J0czogUmVleHBvcnRbXXxudWxsO1xuICBzY2hlbWFzOiBTY2hlbWFNZXRhZGF0YVtdO1xufVxuXG4vKipcbiAqIEEgcmVnaXN0cnkgd2hpY2ggY29sbGVjdHMgaW5mb3JtYXRpb24gYWJvdXQgTmdNb2R1bGVzLCBEaXJlY3RpdmVzLCBDb21wb25lbnRzLCBhbmQgUGlwZXMgd2hpY2hcbiAqIGFyZSBsb2NhbCAoZGVjbGFyZWQgaW4gdGhlIHRzLlByb2dyYW0gYmVpbmcgY29tcGlsZWQpLCBhbmQgY2FuIHByb2R1Y2UgYExvY2FsTW9kdWxlU2NvcGVgc1xuICogd2hpY2ggc3VtbWFyaXplIHRoZSBjb21waWxhdGlvbiBzY29wZSBvZiBhIGNvbXBvbmVudC5cbiAqXG4gKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIGxvZ2ljIG9mIE5nTW9kdWxlIGRlY2xhcmF0aW9ucywgaW1wb3J0cywgYW5kIGV4cG9ydHMgYW5kIGNhbiBwcm9kdWNlLFxuICogZm9yIGEgZ2l2ZW4gY29tcG9uZW50LCB0aGUgc2V0IG9mIGRpcmVjdGl2ZXMgYW5kIHBpcGVzIHdoaWNoIGFyZSBcInZpc2libGVcIiBpbiB0aGF0IGNvbXBvbmVudCdzXG4gKiB0ZW1wbGF0ZS5cbiAqXG4gKiBUaGUgYExvY2FsTW9kdWxlU2NvcGVSZWdpc3RyeWAgaGFzIHR3byBcIm1vZGVzXCIgb2Ygb3BlcmF0aW9uLiBEdXJpbmcgYW5hbHlzaXMsIGRhdGEgZm9yIGVhY2hcbiAqIGluZGl2aWR1YWwgTmdNb2R1bGUsIERpcmVjdGl2ZSwgQ29tcG9uZW50LCBhbmQgUGlwZSBpcyBhZGRlZCB0byB0aGUgcmVnaXN0cnkuIE5vIGF0dGVtcHQgaXMgbWFkZVxuICogdG8gdHJhdmVyc2Ugb3IgdmFsaWRhdGUgdGhlIE5nTW9kdWxlIGdyYXBoIChpbXBvcnRzLCBleHBvcnRzLCBldGMpLiBBZnRlciBhbmFseXNpcywgb25lIG9mXG4gKiBgZ2V0U2NvcGVPZk1vZHVsZWAgb3IgYGdldFNjb3BlRm9yQ29tcG9uZW50YCBjYW4gYmUgY2FsbGVkLCB3aGljaCB0cmF2ZXJzZXMgdGhlIE5nTW9kdWxlIGdyYXBoXG4gKiBhbmQgYXBwbGllcyB0aGUgTmdNb2R1bGUgbG9naWMgdG8gZ2VuZXJhdGUgYSBgTG9jYWxNb2R1bGVTY29wZWAsIHRoZSBmdWxsIHNjb3BlIGZvciB0aGUgZ2l2ZW5cbiAqIG1vZHVsZSBvciBjb21wb25lbnQuXG4gKlxuICogVGhlIGBMb2NhbE1vZHVsZVNjb3BlUmVnaXN0cnlgIGlzIGFsc28gY2FwYWJsZSBvZiBwcm9kdWNpbmcgYHRzLkRpYWdub3N0aWNgIGVycm9ycyB3aGVuIEFuZ3VsYXJcbiAqIHNlbWFudGljcyBhcmUgdmlvbGF0ZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2NhbE1vZHVsZVNjb3BlUmVnaXN0cnkgaW1wbGVtZW50cyBNZXRhZGF0YVJlZ2lzdHJ5LCBDb21wb25lbnRTY29wZVJlYWRlciB7XG4gIC8qKlxuICAgKiBUcmFja3Mgd2hldGhlciB0aGUgcmVnaXN0cnkgaGFzIGJlZW4gYXNrZWQgdG8gcHJvZHVjZSBzY29wZXMgZm9yIGEgbW9kdWxlIG9yIGNvbXBvbmVudC4gT25jZVxuICAgKiB0aGlzIGlzIHRydWUsIHRoZSByZWdpc3RyeSBjYW5ub3QgYWNjZXB0IHJlZ2lzdHJhdGlvbnMgb2YgbmV3IGRpcmVjdGl2ZXMvcGlwZXMvbW9kdWxlcyBhcyBpdFxuICAgKiB3b3VsZCBpbnZhbGlkYXRlIHRoZSBjYWNoZWQgc2NvcGUgZGF0YS5cbiAgICovXG4gIHByaXZhdGUgc2VhbGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEEgbWFwIG9mIGNvbXBvbmVudHMgZnJvbSB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0IHRvIHRoZSBOZ01vZHVsZSB3aGljaCBkZWNsYXJlZCB0aGVtLlxuICAgKlxuICAgKiBBcyBjb21wb25lbnRzIGFuZCBkaXJlY3RpdmVzIGFyZSBub3QgZGlzdGluZ3Vpc2hlZCBhdCB0aGUgTmdNb2R1bGUgbGV2ZWwsIHRoaXMgbWFwIG1heSBhbHNvXG4gICAqIGNvbnRhaW4gZGlyZWN0aXZlcy4gVGhpcyBkb2Vzbid0IGNhdXNlIGFueSBwcm9ibGVtcyBidXQgaXNuJ3QgdXNlZnVsIGFzIHRoZXJlIGlzIG5vIGNvbmNlcHQgb2ZcbiAgICogYSBkaXJlY3RpdmUncyBjb21waWxhdGlvbiBzY29wZS5cbiAgICovXG4gIHByaXZhdGUgZGVjbGFyYXRpb25Ub01vZHVsZSA9IG5ldyBNYXA8Q2xhc3NEZWNsYXJhdGlvbiwgRGVjbGFyYXRpb25EYXRhPigpO1xuXG4gIC8qKlxuICAgKiBUaGlzIG1hcHMgZnJvbSB0aGUgZGlyZWN0aXZlL3BpcGUgY2xhc3MgdG8gYSBtYXAgb2YgZGF0YSBmb3IgZWFjaCBOZ01vZHVsZSB0aGF0IGRlY2xhcmVzIHRoZVxuICAgKiBkaXJlY3RpdmUvcGlwZS4gVGhpcyBkYXRhIGlzIG5lZWRlZCB0byBwcm9kdWNlIGFuIGVycm9yIGZvciB0aGUgZ2l2ZW4gY2xhc3MuXG4gICAqL1xuICBwcml2YXRlIGR1cGxpY2F0ZURlY2xhcmF0aW9ucyA9XG4gICAgICBuZXcgTWFwPENsYXNzRGVjbGFyYXRpb24sIE1hcDxDbGFzc0RlY2xhcmF0aW9uLCBEZWNsYXJhdGlvbkRhdGE+PigpO1xuXG4gIHByaXZhdGUgbW9kdWxlVG9SZWYgPSBuZXcgTWFwPENsYXNzRGVjbGFyYXRpb24sIFJlZmVyZW5jZTxDbGFzc0RlY2xhcmF0aW9uPj4oKTtcblxuICAvKipcbiAgICogQSBjYWNoZSBvZiBjYWxjdWxhdGVkIGBMb2NhbE1vZHVsZVNjb3BlYHMgZm9yIGVhY2ggTmdNb2R1bGUgZGVjbGFyZWQgaW4gdGhlIGN1cnJlbnQgcHJvZ3JhbS5cblxuICAgKi9cbiAgcHJpdmF0ZSBjYWNoZSA9IG5ldyBNYXA8Q2xhc3NEZWNsYXJhdGlvbiwgTG9jYWxNb2R1bGVTY29wZXxudWxsPigpO1xuXG4gIC8qKlxuICAgKiBUcmFja3MgdGhlIGBSZW1vdGVTY29wZWAgZm9yIGNvbXBvbmVudHMgcmVxdWlyaW5nIFwicmVtb3RlIHNjb3BpbmdcIi5cbiAgICpcbiAgICogUmVtb3RlIHNjb3BpbmcgaXMgd2hlbiB0aGUgc2V0IG9mIGRpcmVjdGl2ZXMgd2hpY2ggYXBwbHkgdG8gYSBnaXZlbiBjb21wb25lbnQgaXMgc2V0IGluIHRoZVxuICAgKiBOZ01vZHVsZSdzIGZpbGUgaW5zdGVhZCBvZiBkaXJlY3RseSBvbiB0aGUgY29tcG9uZW50IGRlZiAod2hpY2ggaXMgc29tZXRpbWVzIG5lZWRlZCB0byBnZXRcbiAgICogYXJvdW5kIGN5Y2xpYyBpbXBvcnQgaXNzdWVzKS4gVGhpcyBpcyBub3QgdXNlZCBpbiBjYWxjdWxhdGlvbiBvZiBgTG9jYWxNb2R1bGVTY29wZWBzLCBidXQgaXNcbiAgICogdHJhY2tlZCBoZXJlIGZvciBjb252ZW5pZW5jZS5cbiAgICovXG4gIHByaXZhdGUgcmVtb3RlU2NvcGluZyA9IG5ldyBNYXA8Q2xhc3NEZWNsYXJhdGlvbiwgUmVtb3RlU2NvcGU+KCk7XG5cbiAgLyoqXG4gICAqIFRyYWNrcyBlcnJvcnMgYWNjdW11bGF0ZWQgaW4gdGhlIHByb2Nlc3Npbmcgb2Ygc2NvcGVzIGZvciBlYWNoIG1vZHVsZSBkZWNsYXJhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgc2NvcGVFcnJvcnMgPSBuZXcgTWFwPENsYXNzRGVjbGFyYXRpb24sIHRzLkRpYWdub3N0aWNbXT4oKTtcblxuICAvKipcbiAgICogVHJhY2tzIHdoaWNoIE5nTW9kdWxlcyBoYXZlIGRpcmVjdGl2ZXMvcGlwZXMgdGhhdCBhcmUgZGVjbGFyZWQgaW4gbW9yZSB0aGFuIG9uZSBtb2R1bGUuXG4gICAqL1xuICBwcml2YXRlIG1vZHVsZXNXaXRoU3RydWN0dXJhbEVycm9ycyA9IG5ldyBTZXQ8Q2xhc3NEZWNsYXJhdGlvbj4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgbG9jYWxSZWFkZXI6IE1ldGFkYXRhUmVhZGVyLCBwcml2YXRlIGRlcGVuZGVuY3lTY29wZVJlYWRlcjogRHRzTW9kdWxlU2NvcGVSZXNvbHZlcixcbiAgICAgIHByaXZhdGUgcmVmRW1pdHRlcjogUmVmZXJlbmNlRW1pdHRlciwgcHJpdmF0ZSBhbGlhc2luZ0hvc3Q6IEFsaWFzaW5nSG9zdHxudWxsKSB7fVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gTmdNb2R1bGUncyBkYXRhIHRvIHRoZSByZWdpc3RyeS5cbiAgICovXG4gIHJlZ2lzdGVyTmdNb2R1bGVNZXRhZGF0YShkYXRhOiBOZ01vZHVsZU1ldGEpOiB2b2lkIHtcbiAgICB0aGlzLmFzc2VydENvbGxlY3RpbmcoKTtcbiAgICBjb25zdCBuZ01vZHVsZSA9IGRhdGEucmVmLm5vZGU7XG4gICAgdGhpcy5tb2R1bGVUb1JlZi5zZXQoZGF0YS5yZWYubm9kZSwgZGF0YS5yZWYpO1xuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgbW9kdWxlJ3MgZGVjbGFyYXRpb25zLCBhbmQgYWRkIHRoZW0gdG8gZGVjbGFyYXRpb25Ub01vZHVsZS4gSWYgZHVwbGljYXRlc1xuICAgIC8vIGFyZSBmb3VuZCwgdGhleSdyZSBpbnN0ZWFkIHRyYWNrZWQgaW4gZHVwbGljYXRlRGVjbGFyYXRpb25zLlxuICAgIGZvciAoY29uc3QgZGVjbCBvZiBkYXRhLmRlY2xhcmF0aW9ucykge1xuICAgICAgdGhpcy5yZWdpc3RlckRlY2xhcmF0aW9uT2ZNb2R1bGUobmdNb2R1bGUsIGRlY2wsIGRhdGEucmF3RGVjbGFyYXRpb25zKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3RlckRpcmVjdGl2ZU1ldGFkYXRhKGRpcmVjdGl2ZTogRGlyZWN0aXZlTWV0YSk6IHZvaWQge31cblxuICByZWdpc3RlclBpcGVNZXRhZGF0YShwaXBlOiBQaXBlTWV0YSk6IHZvaWQge31cblxuICBnZXRTY29wZUZvckNvbXBvbmVudChjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IExvY2FsTW9kdWxlU2NvcGV8bnVsbCB7XG4gICAgY29uc3Qgc2NvcGUgPSAhdGhpcy5kZWNsYXJhdGlvblRvTW9kdWxlLmhhcyhjbGF6eikgP1xuICAgICAgICBudWxsIDpcbiAgICAgICAgdGhpcy5nZXRTY29wZU9mTW9kdWxlKHRoaXMuZGVjbGFyYXRpb25Ub01vZHVsZS5nZXQoY2xhenopIS5uZ01vZHVsZSk7XG4gICAgcmV0dXJuIHNjb3BlO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGBub2RlYCBpcyBkZWNsYXJlZCBpbiBtb3JlIHRoYW4gb25lIE5nTW9kdWxlIChkdXBsaWNhdGUgZGVjbGFyYXRpb24pLCB0aGVuIGdldCB0aGVcbiAgICogYERlY2xhcmF0aW9uRGF0YWAgZm9yIGVhY2ggb2ZmZW5kaW5nIGRlY2xhcmF0aW9uLlxuICAgKlxuICAgKiBPcmRpbmFyaWx5IGEgY2xhc3MgaXMgb25seSBkZWNsYXJlZCBpbiBvbmUgTmdNb2R1bGUsIGluIHdoaWNoIGNhc2UgdGhpcyBmdW5jdGlvbiByZXR1cm5zXG4gICAqIGBudWxsYC5cbiAgICovXG4gIGdldER1cGxpY2F0ZURlY2xhcmF0aW9ucyhub2RlOiBDbGFzc0RlY2xhcmF0aW9uKTogRGVjbGFyYXRpb25EYXRhW118bnVsbCB7XG4gICAgaWYgKCF0aGlzLmR1cGxpY2F0ZURlY2xhcmF0aW9ucy5oYXMobm9kZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZHVwbGljYXRlRGVjbGFyYXRpb25zLmdldChub2RlKSEudmFsdWVzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3RzIHJlZ2lzdGVyZWQgZGF0YSBmb3IgYSBtb2R1bGUgYW5kIGl0cyBkaXJlY3RpdmVzL3BpcGVzIGFuZCBjb252ZXJ0IGl0IGludG8gYSBmdWxsXG4gICAqIGBMb2NhbE1vZHVsZVNjb3BlYC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaW1wbGVtZW50cyB0aGUgbG9naWMgb2YgTmdNb2R1bGUgaW1wb3J0cyBhbmQgZXhwb3J0cy4gSXQgcmV0dXJucyB0aGVcbiAgICogYExvY2FsTW9kdWxlU2NvcGVgIGZvciB0aGUgZ2l2ZW4gTmdNb2R1bGUgaWYgb25lIGNhbiBiZSBwcm9kdWNlZCwgYG51bGxgIGlmIG5vIHNjb3BlIHdhcyBldmVyXG4gICAqIGRlZmluZWQsIG9yIHRoZSBzdHJpbmcgYCdlcnJvcidgIGlmIHRoZSBzY29wZSBjb250YWluZWQgZXJyb3JzLlxuICAgKi9cbiAgZ2V0U2NvcGVPZk1vZHVsZShjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IExvY2FsTW9kdWxlU2NvcGV8bnVsbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kdWxlVG9SZWYuaGFzKGNsYXp6KSA/XG4gICAgICAgIHRoaXMuZ2V0U2NvcGVPZk1vZHVsZVJlZmVyZW5jZSh0aGlzLm1vZHVsZVRvUmVmLmdldChjbGF6eikhKSA6XG4gICAgICAgIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFueSBgdHMuRGlhZ25vc3RpY2BzIHByb2R1Y2VkIGR1cmluZyB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGBMb2NhbE1vZHVsZVNjb3BlYCBmb3JcbiAgICogdGhlIGdpdmVuIE5nTW9kdWxlLCBvciBgbnVsbGAgaWYgbm8gZXJyb3JzIHdlcmUgcHJlc2VudC5cbiAgICovXG4gIGdldERpYWdub3N0aWNzT2ZNb2R1bGUoY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiB0cy5EaWFnbm9zdGljW118bnVsbCB7XG4gICAgLy8gUmVxdWlyZWQgdG8gZW5zdXJlIHRoZSBlcnJvcnMgYXJlIHBvcHVsYXRlZCBmb3IgdGhlIGdpdmVuIGNsYXNzLiBJZiBpdCBoYXMgYmVlbiBwcm9jZXNzZWRcbiAgICAvLyBiZWZvcmUsIHRoaXMgd2lsbCBiZSBhIG5vLW9wIGR1ZSB0byB0aGUgc2NvcGUgY2FjaGUuXG4gICAgdGhpcy5nZXRTY29wZU9mTW9kdWxlKGNsYXp6KTtcblxuICAgIGlmICh0aGlzLnNjb3BlRXJyb3JzLmhhcyhjbGF6eikpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjb3BlRXJyb3JzLmdldChjbGF6eikhO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyRGVjbGFyYXRpb25PZk1vZHVsZShcbiAgICAgIG5nTW9kdWxlOiBDbGFzc0RlY2xhcmF0aW9uLCBkZWNsOiBSZWZlcmVuY2U8Q2xhc3NEZWNsYXJhdGlvbj4sXG4gICAgICByYXdEZWNsYXJhdGlvbnM6IHRzLkV4cHJlc3Npb258bnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IGRlY2xEYXRhOiBEZWNsYXJhdGlvbkRhdGEgPSB7XG4gICAgICBuZ01vZHVsZSxcbiAgICAgIHJlZjogZGVjbCxcbiAgICAgIHJhd0RlY2xhcmF0aW9ucyxcbiAgICB9O1xuXG4gICAgLy8gRmlyc3QsIGNoZWNrIGZvciBkdXBsaWNhdGUgZGVjbGFyYXRpb25zIG9mIHRoZSBzYW1lIGRpcmVjdGl2ZS9waXBlLlxuICAgIGlmICh0aGlzLmR1cGxpY2F0ZURlY2xhcmF0aW9ucy5oYXMoZGVjbC5ub2RlKSkge1xuICAgICAgLy8gVGhpcyBkaXJlY3RpdmUvcGlwZSBoYXMgYWxyZWFkeSBiZWVuIGlkZW50aWZpZWQgYXMgYmVpbmcgZHVwbGljYXRlZC4gQWRkIHRoaXMgbW9kdWxlIHRvIHRoZVxuICAgICAgLy8gbWFwIG9mIG1vZHVsZXMgZm9yIHdoaWNoIGEgZHVwbGljYXRlIGRlY2xhcmF0aW9uIGV4aXN0cy5cbiAgICAgIHRoaXMuZHVwbGljYXRlRGVjbGFyYXRpb25zLmdldChkZWNsLm5vZGUpIS5zZXQobmdNb2R1bGUsIGRlY2xEYXRhKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmRlY2xhcmF0aW9uVG9Nb2R1bGUuaGFzKGRlY2wubm9kZSkgJiZcbiAgICAgICAgdGhpcy5kZWNsYXJhdGlvblRvTW9kdWxlLmdldChkZWNsLm5vZGUpIS5uZ01vZHVsZSAhPT0gbmdNb2R1bGUpIHtcbiAgICAgIC8vIFRoaXMgZGlyZWN0aXZlL3BpcGUgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGFzIGRlY2xhcmVkIGluIGFub3RoZXIgbW9kdWxlLiBNYXJrIGl0IGFzIGFcbiAgICAgIC8vIGR1cGxpY2F0ZSBpbnN0ZWFkLlxuICAgICAgY29uc3QgZHVwbGljYXRlRGVjbE1hcCA9IG5ldyBNYXA8Q2xhc3NEZWNsYXJhdGlvbiwgRGVjbGFyYXRpb25EYXRhPigpO1xuICAgICAgY29uc3QgZmlyc3REZWNsRGF0YSA9IHRoaXMuZGVjbGFyYXRpb25Ub01vZHVsZS5nZXQoZGVjbC5ub2RlKSE7XG5cbiAgICAgIC8vIE1hcmsgYm90aCBtb2R1bGVzIGFzIGhhdmluZyBkdXBsaWNhdGUgZGVjbGFyYXRpb25zLlxuICAgICAgdGhpcy5tb2R1bGVzV2l0aFN0cnVjdHVyYWxFcnJvcnMuYWRkKGZpcnN0RGVjbERhdGEubmdNb2R1bGUpO1xuICAgICAgdGhpcy5tb2R1bGVzV2l0aFN0cnVjdHVyYWxFcnJvcnMuYWRkKG5nTW9kdWxlKTtcblxuICAgICAgLy8gQmVpbmcgZGV0ZWN0ZWQgYXMgYSBkdXBsaWNhdGUgbWVhbnMgdGhlcmUgYXJlIHR3byBOZ01vZHVsZXMgKGZvciBub3cpIHdoaWNoIGRlY2xhcmUgdGhpc1xuICAgICAgLy8gZGlyZWN0aXZlL3BpcGUuIEFkZCBib3RoIG9mIHRoZW0gdG8gdGhlIGR1cGxpY2F0ZSB0cmFja2luZyBtYXAuXG4gICAgICBkdXBsaWNhdGVEZWNsTWFwLnNldChmaXJzdERlY2xEYXRhLm5nTW9kdWxlLCBmaXJzdERlY2xEYXRhKTtcbiAgICAgIGR1cGxpY2F0ZURlY2xNYXAuc2V0KG5nTW9kdWxlLCBkZWNsRGF0YSk7XG4gICAgICB0aGlzLmR1cGxpY2F0ZURlY2xhcmF0aW9ucy5zZXQoZGVjbC5ub2RlLCBkdXBsaWNhdGVEZWNsTWFwKTtcblxuICAgICAgLy8gUmVtb3ZlIHRoZSBkaXJlY3RpdmUvcGlwZSBmcm9tIGBkZWNsYXJhdGlvblRvTW9kdWxlYCBhcyBpdCdzIGEgZHVwbGljYXRlIGRlY2xhcmF0aW9uLCBhbmRcbiAgICAgIC8vIHRoZXJlZm9yZSBub3QgdmFsaWQuXG4gICAgICB0aGlzLmRlY2xhcmF0aW9uVG9Nb2R1bGUuZGVsZXRlKGRlY2wubm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGRlY2xhcmF0aW9uIG9mIHRoaXMgZGlyZWN0aXZlL3BpcGUsIHNvIG1hcCBpdC5cbiAgICAgIHRoaXMuZGVjbGFyYXRpb25Ub01vZHVsZS5zZXQoZGVjbC5ub2RlLCBkZWNsRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGF0aW9uIG9mIGBnZXRTY29wZU9mTW9kdWxlYCB3aGljaCBhY2NlcHRzIGEgcmVmZXJlbmNlIHRvIGEgY2xhc3MuXG4gICAqL1xuICBwcml2YXRlIGdldFNjb3BlT2ZNb2R1bGVSZWZlcmVuY2UocmVmOiBSZWZlcmVuY2U8Q2xhc3NEZWNsYXJhdGlvbj4pOiBMb2NhbE1vZHVsZVNjb3BlfG51bGwge1xuICAgIGlmICh0aGlzLmNhY2hlLmhhcyhyZWYubm9kZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlLmdldChyZWYubm9kZSkhO1xuICAgIH1cblxuICAgIC8vIFNlYWwgdGhlIHJlZ2lzdHJ5IHRvIHByb3RlY3QgdGhlIGludGVncml0eSBvZiB0aGUgYExvY2FsTW9kdWxlU2NvcGVgIGNhY2hlLlxuICAgIHRoaXMuc2VhbGVkID0gdHJ1ZTtcblxuICAgIC8vIGByZWZgIHNob3VsZCBiZSBhbiBOZ01vZHVsZSBwcmV2aW91c2x5IGFkZGVkIHRvIHRoZSByZWdpc3RyeS4gSWYgbm90LCBhIHNjb3BlIGZvciBpdFxuICAgIC8vIGNhbm5vdCBiZSBwcm9kdWNlZC5cbiAgICBjb25zdCBuZ01vZHVsZSA9IHRoaXMubG9jYWxSZWFkZXIuZ2V0TmdNb2R1bGVNZXRhZGF0YShyZWYpO1xuICAgIGlmIChuZ01vZHVsZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5jYWNoZS5zZXQocmVmLm5vZGUsIG51bGwpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gTW9kdWxlcyB3aGljaCBjb250cmlidXRlZCB0byB0aGUgY29tcGlsYXRpb24gc2NvcGUgb2YgdGhpcyBtb2R1bGUuXG4gICAgY29uc3QgY29tcGlsYXRpb25Nb2R1bGVzID0gbmV3IFNldDxDbGFzc0RlY2xhcmF0aW9uPihbbmdNb2R1bGUucmVmLm5vZGVdKTtcbiAgICAvLyBNb2R1bGVzIHdoaWNoIGNvbnRyaWJ1dGVkIHRvIHRoZSBleHBvcnQgc2NvcGUgb2YgdGhpcyBtb2R1bGUuXG4gICAgY29uc3QgZXhwb3J0ZWRNb2R1bGVzID0gbmV3IFNldDxDbGFzc0RlY2xhcmF0aW9uPihbbmdNb2R1bGUucmVmLm5vZGVdKTtcblxuICAgIC8vIEVycm9ycyBwcm9kdWNlZCBkdXJpbmcgY29tcHV0YXRpb24gb2YgdGhlIHNjb3BlIGFyZSByZWNvcmRlZCBoZXJlLiBBdCB0aGUgZW5kLCBpZiB0aGlzIGFycmF5XG4gICAgLy8gaXNuJ3QgZW1wdHkgdGhlbiBgdW5kZWZpbmVkYCB3aWxsIGJlIGNhY2hlZCBhbmQgcmV0dXJuZWQgdG8gaW5kaWNhdGUgdGhpcyBzY29wZSBpcyBpbnZhbGlkLlxuICAgIGNvbnN0IGRpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10gPSBbXTtcblxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSBnb2FsIGlzIHRvIHByb2R1Y2UgdHdvIGRpc3RpbmN0IHRyYW5zaXRpdmUgc2V0czpcbiAgICAvLyAtIHRoZSBkaXJlY3RpdmVzIGFuZCBwaXBlcyB3aGljaCBhcmUgdmlzaWJsZSB0byBjb21wb25lbnRzIGRlY2xhcmVkIGluIHRoZSBOZ01vZHVsZS5cbiAgICAvLyAtIHRoZSBkaXJlY3RpdmVzIGFuZCBwaXBlcyB3aGljaCBhcmUgZXhwb3J0ZWQgdG8gYW55IE5nTW9kdWxlcyB3aGljaCBpbXBvcnQgdGhpcyBvbmUuXG5cbiAgICAvLyBEaXJlY3RpdmVzIGFuZCBwaXBlcyBpbiB0aGUgY29tcGlsYXRpb24gc2NvcGUuXG4gICAgY29uc3QgY29tcGlsYXRpb25EaXJlY3RpdmVzID0gbmV3IE1hcDxEZWNsYXJhdGlvbk5vZGUsIERpcmVjdGl2ZU1ldGE+KCk7XG4gICAgY29uc3QgY29tcGlsYXRpb25QaXBlcyA9IG5ldyBNYXA8RGVjbGFyYXRpb25Ob2RlLCBQaXBlTWV0YT4oKTtcblxuICAgIGNvbnN0IGRlY2xhcmVkID0gbmV3IFNldDxEZWNsYXJhdGlvbk5vZGU+KCk7XG5cbiAgICAvLyBEaXJlY3RpdmVzIGFuZCBwaXBlcyBleHBvcnRlZCB0byBhbnkgaW1wb3J0aW5nIE5nTW9kdWxlcy5cbiAgICBjb25zdCBleHBvcnREaXJlY3RpdmVzID0gbmV3IE1hcDxEZWNsYXJhdGlvbk5vZGUsIERpcmVjdGl2ZU1ldGE+KCk7XG4gICAgY29uc3QgZXhwb3J0UGlwZXMgPSBuZXcgTWFwPERlY2xhcmF0aW9uTm9kZSwgUGlwZU1ldGE+KCk7XG5cbiAgICAvLyBUaGUgYWxnb3JpdGhtIGlzIGFzIGZvbGxvd3M6XG4gICAgLy8gMSkgQWRkIGFsbCBvZiB0aGUgZGlyZWN0aXZlcy9waXBlcyBmcm9tIGVhY2ggTmdNb2R1bGUgaW1wb3J0ZWQgaW50byB0aGUgY3VycmVudCBvbmUgdG8gdGhlXG4gICAgLy8gICAgY29tcGlsYXRpb24gc2NvcGUuXG4gICAgLy8gMikgQWRkIGRpcmVjdGl2ZXMvcGlwZXMgZGVjbGFyZWQgaW4gdGhlIE5nTW9kdWxlIHRvIHRoZSBjb21waWxhdGlvbiBzY29wZS4gQXQgdGhpcyBwb2ludCwgdGhlXG4gICAgLy8gICAgY29tcGlsYXRpb24gc2NvcGUgaXMgY29tcGxldGUuXG4gICAgLy8gMykgRm9yIGVhY2ggZW50cnkgaW4gdGhlIE5nTW9kdWxlJ3MgZXhwb3J0czpcbiAgICAvLyAgICBhKSBBdHRlbXB0IHRvIHJlc29sdmUgaXQgYXMgYW4gTmdNb2R1bGUgd2l0aCBpdHMgb3duIGV4cG9ydGVkIGRpcmVjdGl2ZXMvcGlwZXMuIElmIGl0IGlzXG4gICAgLy8gICAgICAgb25lLCBhZGQgdGhlbSB0byB0aGUgZXhwb3J0IHNjb3BlIG9mIHRoaXMgTmdNb2R1bGUuXG4gICAgLy8gICAgYikgT3RoZXJ3aXNlLCBpdCBzaG91bGQgYmUgYSBjbGFzcyBpbiB0aGUgY29tcGlsYXRpb24gc2NvcGUgb2YgdGhpcyBOZ01vZHVsZS4gSWYgaXQgaXMsXG4gICAgLy8gICAgICAgYWRkIGl0IHRvIHRoZSBleHBvcnQgc2NvcGUuXG4gICAgLy8gICAgYykgSWYgaXQncyBuZWl0aGVyIGFuIE5nTW9kdWxlIG5vciBhIGRpcmVjdGl2ZS9waXBlIGluIHRoZSBjb21waWxhdGlvbiBzY29wZSwgdGhlbiB0aGlzXG4gICAgLy8gICAgICAgaXMgYW4gZXJyb3IuXG5cbiAgICAvL1xuICAgIGxldCBpc1BvaXNvbmVkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMubW9kdWxlc1dpdGhTdHJ1Y3R1cmFsRXJyb3JzLmhhcyhuZ01vZHVsZS5yZWYubm9kZSkpIHtcbiAgICAgIC8vIElmIHRoZSBtb2R1bGUgY29udGFpbnMgZGVjbGFyYXRpb25zIHRoYXQgYXJlIGR1cGxpY2F0ZXMsIHRoZW4gaXQncyBjb25zaWRlcmVkIHBvaXNvbmVkLlxuICAgICAgaXNQb2lzb25lZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gMSkgcHJvY2VzcyBpbXBvcnRzLlxuICAgIGZvciAoY29uc3QgZGVjbCBvZiBuZ01vZHVsZS5pbXBvcnRzKSB7XG4gICAgICBjb25zdCBpbXBvcnRTY29wZSA9IHRoaXMuZ2V0RXhwb3J0ZWRTY29wZShkZWNsLCBkaWFnbm9zdGljcywgcmVmLm5vZGUsICdpbXBvcnQnKTtcbiAgICAgIGlmIChpbXBvcnRTY29wZSA9PT0gbnVsbCkge1xuICAgICAgICAvLyBBbiBpbXBvcnQgd2Fzbid0IGFuIE5nTW9kdWxlLCBzbyByZWNvcmQgYW4gZXJyb3IuXG4gICAgICAgIGRpYWdub3N0aWNzLnB1c2goaW52YWxpZFJlZihyZWYubm9kZSwgZGVjbCwgJ2ltcG9ydCcpKTtcbiAgICAgICAgaXNQb2lzb25lZCA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmIChpbXBvcnRTY29wZSA9PT0gJ2ludmFsaWQnIHx8IGltcG9ydFNjb3BlLmV4cG9ydGVkLmlzUG9pc29uZWQpIHtcbiAgICAgICAgLy8gQW4gaW1wb3J0IHdhcyBhbiBOZ01vZHVsZSBidXQgY29udGFpbmVkIGVycm9ycyBvZiBpdHMgb3duLiBSZWNvcmQgdGhpcyBhcyBhbiBlcnJvciB0b28sXG4gICAgICAgIC8vIGJlY2F1c2UgdGhpcyBzY29wZSBpcyBhbHdheXMgZ29pbmcgdG8gYmUgaW5jb3JyZWN0IGlmIG9uZSBvZiBpdHMgaW1wb3J0cyBjb3VsZCBub3QgYmVcbiAgICAgICAgLy8gcmVhZC5cbiAgICAgICAgZGlhZ25vc3RpY3MucHVzaChpbnZhbGlkVHJhbnNpdGl2ZU5nTW9kdWxlUmVmKHJlZi5ub2RlLCBkZWNsLCAnaW1wb3J0JykpO1xuICAgICAgICBpc1BvaXNvbmVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAoaW1wb3J0U2NvcGUgPT09ICdpbnZhbGlkJykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZGlyZWN0aXZlIG9mIGltcG9ydFNjb3BlLmV4cG9ydGVkLmRpcmVjdGl2ZXMpIHtcbiAgICAgICAgY29tcGlsYXRpb25EaXJlY3RpdmVzLnNldChkaXJlY3RpdmUucmVmLm5vZGUsIGRpcmVjdGl2ZSk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHBpcGUgb2YgaW1wb3J0U2NvcGUuZXhwb3J0ZWQucGlwZXMpIHtcbiAgICAgICAgY29tcGlsYXRpb25QaXBlcy5zZXQocGlwZS5yZWYubm9kZSwgcGlwZSk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGltcG9ydGVkTW9kdWxlIG9mIGltcG9ydFNjb3BlLmV4cG9ydGVkLm5nTW9kdWxlcykge1xuICAgICAgICBjb21waWxhdGlvbk1vZHVsZXMuYWRkKGltcG9ydGVkTW9kdWxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyKSBhZGQgZGVjbGFyYXRpb25zLlxuICAgIGZvciAoY29uc3QgZGVjbCBvZiBuZ01vZHVsZS5kZWNsYXJhdGlvbnMpIHtcbiAgICAgIGNvbnN0IGRpcmVjdGl2ZSA9IHRoaXMubG9jYWxSZWFkZXIuZ2V0RGlyZWN0aXZlTWV0YWRhdGEoZGVjbCk7XG4gICAgICBjb25zdCBwaXBlID0gdGhpcy5sb2NhbFJlYWRlci5nZXRQaXBlTWV0YWRhdGEoZGVjbCk7XG4gICAgICBpZiAoZGlyZWN0aXZlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbXBpbGF0aW9uRGlyZWN0aXZlcy5zZXQoZGVjbC5ub2RlLCB7Li4uZGlyZWN0aXZlLCByZWY6IGRlY2x9KTtcbiAgICAgICAgaWYgKGRpcmVjdGl2ZS5pc1BvaXNvbmVkKSB7XG4gICAgICAgICAgaXNQb2lzb25lZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocGlwZSAhPT0gbnVsbCkge1xuICAgICAgICBjb21waWxhdGlvblBpcGVzLnNldChkZWNsLm5vZGUsIHsuLi5waXBlLCByZWY6IGRlY2x9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yTm9kZSA9IGRlY2wuZ2V0T3JpZ2luRm9yRGlhZ25vc3RpY3MobmdNb2R1bGUucmF3RGVjbGFyYXRpb25zISk7XG4gICAgICAgIGRpYWdub3N0aWNzLnB1c2gobWFrZURpYWdub3N0aWMoXG4gICAgICAgICAgICBFcnJvckNvZGUuTkdNT0RVTEVfSU5WQUxJRF9ERUNMQVJBVElPTiwgZXJyb3JOb2RlLFxuICAgICAgICAgICAgYFRoZSBjbGFzcyAnJHtkZWNsLm5vZGUubmFtZS50ZXh0fScgaXMgbGlzdGVkIGluIHRoZSBkZWNsYXJhdGlvbnMgYCArXG4gICAgICAgICAgICAgICAgYG9mIHRoZSBOZ01vZHVsZSAnJHtcbiAgICAgICAgICAgICAgICAgICAgbmdNb2R1bGUucmVmLm5vZGUubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRleHR9JywgYnV0IGlzIG5vdCBhIGRpcmVjdGl2ZSwgYSBjb21wb25lbnQsIG9yIGEgcGlwZS4gYCArXG4gICAgICAgICAgICAgICAgYEVpdGhlciByZW1vdmUgaXQgZnJvbSB0aGUgTmdNb2R1bGUncyBkZWNsYXJhdGlvbnMsIG9yIGFkZCBhbiBhcHByb3ByaWF0ZSBBbmd1bGFyIGRlY29yYXRvci5gLFxuICAgICAgICAgICAgW21ha2VSZWxhdGVkSW5mb3JtYXRpb24oXG4gICAgICAgICAgICAgICAgZGVjbC5ub2RlLm5hbWUsIGAnJHtkZWNsLm5vZGUubmFtZS50ZXh0fScgaXMgZGVjbGFyZWQgaGVyZS5gKV0pKTtcbiAgICAgICAgaXNQb2lzb25lZCA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBkZWNsYXJlZC5hZGQoZGVjbC5ub2RlKTtcbiAgICB9XG5cbiAgICAvLyAzKSBwcm9jZXNzIGV4cG9ydHMuXG4gICAgLy8gRXhwb3J0cyBjYW4gY29udGFpbiBtb2R1bGVzLCBjb21wb25lbnRzLCBvciBkaXJlY3RpdmVzLiBUaGV5J3JlIHByb2Nlc3NlZCBkaWZmZXJlbnRseS5cbiAgICAvLyBNb2R1bGVzIGFyZSBzdHJhaWdodGZvcndhcmQuIERpcmVjdGl2ZXMgYW5kIHBpcGVzIGZyb20gZXhwb3J0ZWQgbW9kdWxlcyBhcmUgYWRkZWQgdG8gdGhlXG4gICAgLy8gZXhwb3J0IG1hcHMuIERpcmVjdGl2ZXMvcGlwZXMgYXJlIGRpZmZlcmVudCAtIHRoZXkgbWlnaHQgYmUgZXhwb3J0cyBvZiBkZWNsYXJlZCB0eXBlcyBvclxuICAgIC8vIGltcG9ydGVkIHR5cGVzLlxuICAgIGZvciAoY29uc3QgZGVjbCBvZiBuZ01vZHVsZS5leHBvcnRzKSB7XG4gICAgICAvLyBBdHRlbXB0IHRvIHJlc29sdmUgZGVjbCBhcyBhbiBOZ01vZHVsZS5cbiAgICAgIGNvbnN0IGV4cG9ydFNjb3BlID0gdGhpcy5nZXRFeHBvcnRlZFNjb3BlKGRlY2wsIGRpYWdub3N0aWNzLCByZWYubm9kZSwgJ2V4cG9ydCcpO1xuICAgICAgaWYgKGV4cG9ydFNjb3BlID09PSAnaW52YWxpZCcgfHwgKGV4cG9ydFNjb3BlICE9PSBudWxsICYmIGV4cG9ydFNjb3BlLmV4cG9ydGVkLmlzUG9pc29uZWQpKSB7XG4gICAgICAgIC8vIEFuIGV4cG9ydCB3YXMgYW4gTmdNb2R1bGUgYnV0IGNvbnRhaW5lZCBlcnJvcnMgb2YgaXRzIG93bi4gUmVjb3JkIHRoaXMgYXMgYW4gZXJyb3IgdG9vLFxuICAgICAgICAvLyBiZWNhdXNlIHRoaXMgc2NvcGUgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIGluY29ycmVjdCBpZiBvbmUgb2YgaXRzIGV4cG9ydHMgY291bGQgbm90IGJlXG4gICAgICAgIC8vIHJlYWQuXG4gICAgICAgIGRpYWdub3N0aWNzLnB1c2goaW52YWxpZFRyYW5zaXRpdmVOZ01vZHVsZVJlZihyZWYubm9kZSwgZGVjbCwgJ2V4cG9ydCcpKTtcbiAgICAgICAgaXNQb2lzb25lZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKGV4cG9ydFNjb3BlID09PSAnaW52YWxpZCcpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChleHBvcnRTY29wZSAhPT0gbnVsbCkge1xuICAgICAgICAvLyBkZWNsIGlzIGFuIE5nTW9kdWxlLlxuICAgICAgICBmb3IgKGNvbnN0IGRpcmVjdGl2ZSBvZiBleHBvcnRTY29wZS5leHBvcnRlZC5kaXJlY3RpdmVzKSB7XG4gICAgICAgICAgZXhwb3J0RGlyZWN0aXZlcy5zZXQoZGlyZWN0aXZlLnJlZi5ub2RlLCBkaXJlY3RpdmUpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiBleHBvcnRTY29wZS5leHBvcnRlZC5waXBlcykge1xuICAgICAgICAgIGV4cG9ydFBpcGVzLnNldChwaXBlLnJlZi5ub2RlLCBwaXBlKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGV4cG9ydGVkTW9kdWxlIG9mIGV4cG9ydFNjb3BlLmV4cG9ydGVkLm5nTW9kdWxlcykge1xuICAgICAgICAgIGV4cG9ydGVkTW9kdWxlcy5hZGQoZXhwb3J0ZWRNb2R1bGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbXBpbGF0aW9uRGlyZWN0aXZlcy5oYXMoZGVjbC5ub2RlKSkge1xuICAgICAgICAvLyBkZWNsIGlzIGEgZGlyZWN0aXZlIG9yIGNvbXBvbmVudCBpbiB0aGUgY29tcGlsYXRpb24gc2NvcGUgb2YgdGhpcyBOZ01vZHVsZS5cbiAgICAgICAgY29uc3QgZGlyZWN0aXZlID0gY29tcGlsYXRpb25EaXJlY3RpdmVzLmdldChkZWNsLm5vZGUpITtcbiAgICAgICAgZXhwb3J0RGlyZWN0aXZlcy5zZXQoZGVjbC5ub2RlLCBkaXJlY3RpdmUpO1xuICAgICAgfSBlbHNlIGlmIChjb21waWxhdGlvblBpcGVzLmhhcyhkZWNsLm5vZGUpKSB7XG4gICAgICAgIC8vIGRlY2wgaXMgYSBwaXBlIGluIHRoZSBjb21waWxhdGlvbiBzY29wZSBvZiB0aGlzIE5nTW9kdWxlLlxuICAgICAgICBjb25zdCBwaXBlID0gY29tcGlsYXRpb25QaXBlcy5nZXQoZGVjbC5ub2RlKSE7XG4gICAgICAgIGV4cG9ydFBpcGVzLnNldChkZWNsLm5vZGUsIHBpcGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVjbCBpcyBhbiB1bmtub3duIGV4cG9ydC5cbiAgICAgICAgaWYgKHRoaXMubG9jYWxSZWFkZXIuZ2V0RGlyZWN0aXZlTWV0YWRhdGEoZGVjbCkgIT09IG51bGwgfHxcbiAgICAgICAgICAgIHRoaXMubG9jYWxSZWFkZXIuZ2V0UGlwZU1ldGFkYXRhKGRlY2wpICE9PSBudWxsKSB7XG4gICAgICAgICAgZGlhZ25vc3RpY3MucHVzaChpbnZhbGlkUmVleHBvcnQocmVmLm5vZGUsIGRlY2wpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaWFnbm9zdGljcy5wdXNoKGludmFsaWRSZWYocmVmLm5vZGUsIGRlY2wsICdleHBvcnQnKSk7XG4gICAgICAgIH1cbiAgICAgICAgaXNQb2lzb25lZCA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4cG9ydGVkOiBTY29wZURhdGEgPSB7XG4gICAgICBkaXJlY3RpdmVzOiBBcnJheS5mcm9tKGV4cG9ydERpcmVjdGl2ZXMudmFsdWVzKCkpLFxuICAgICAgcGlwZXM6IEFycmF5LmZyb20oZXhwb3J0UGlwZXMudmFsdWVzKCkpLFxuICAgICAgbmdNb2R1bGVzOiBBcnJheS5mcm9tKGV4cG9ydGVkTW9kdWxlcyksXG4gICAgICBpc1BvaXNvbmVkLFxuICAgIH07XG5cbiAgICBjb25zdCByZWV4cG9ydHMgPSB0aGlzLmdldFJlZXhwb3J0cyhuZ01vZHVsZSwgcmVmLCBkZWNsYXJlZCwgZXhwb3J0ZWQsIGRpYWdub3N0aWNzKTtcblxuXG4gICAgLy8gRmluYWxseSwgcHJvZHVjZSB0aGUgYExvY2FsTW9kdWxlU2NvcGVgIHdpdGggYm90aCB0aGUgY29tcGlsYXRpb24gYW5kIGV4cG9ydCBzY29wZXMuXG4gICAgY29uc3Qgc2NvcGU6IExvY2FsTW9kdWxlU2NvcGUgPSB7XG4gICAgICBuZ01vZHVsZTogbmdNb2R1bGUucmVmLm5vZGUsXG4gICAgICBjb21waWxhdGlvbjoge1xuICAgICAgICBkaXJlY3RpdmVzOiBBcnJheS5mcm9tKGNvbXBpbGF0aW9uRGlyZWN0aXZlcy52YWx1ZXMoKSksXG4gICAgICAgIHBpcGVzOiBBcnJheS5mcm9tKGNvbXBpbGF0aW9uUGlwZXMudmFsdWVzKCkpLFxuICAgICAgICBuZ01vZHVsZXM6IEFycmF5LmZyb20oY29tcGlsYXRpb25Nb2R1bGVzKSxcbiAgICAgICAgaXNQb2lzb25lZCxcbiAgICAgIH0sXG4gICAgICBleHBvcnRlZCxcbiAgICAgIHJlZXhwb3J0cyxcbiAgICAgIHNjaGVtYXM6IG5nTW9kdWxlLnNjaGVtYXMsXG4gICAgfTtcblxuICAgIC8vIENoZWNrIGlmIHRoaXMgc2NvcGUgaGFkIGFueSBlcnJvcnMgZHVyaW5nIHByb2R1Y3Rpb24uXG4gICAgaWYgKGRpYWdub3N0aWNzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIFNhdmUgdGhlIGVycm9ycyBmb3IgcmV0cmlldmFsLlxuICAgICAgdGhpcy5zY29wZUVycm9ycy5zZXQocmVmLm5vZGUsIGRpYWdub3N0aWNzKTtcblxuICAgICAgLy8gTWFyayB0aGlzIG1vZHVsZSBhcyBiZWluZyB0YWludGVkLlxuICAgICAgdGhpcy5tb2R1bGVzV2l0aFN0cnVjdHVyYWxFcnJvcnMuYWRkKHJlZi5ub2RlKTtcbiAgICB9XG5cbiAgICB0aGlzLmNhY2hlLnNldChyZWYubm9kZSwgc2NvcGUpO1xuICAgIHJldHVybiBzY29wZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGEgY29tcG9uZW50IHJlcXVpcmVzIHJlbW90ZSBzY29waW5nLlxuICAgKi9cbiAgZ2V0UmVtb3RlU2NvcGUobm9kZTogQ2xhc3NEZWNsYXJhdGlvbik6IFJlbW90ZVNjb3BlfG51bGwge1xuICAgIHJldHVybiB0aGlzLnJlbW90ZVNjb3BpbmcuaGFzKG5vZGUpID8gdGhpcy5yZW1vdGVTY29waW5nLmdldChub2RlKSEgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIGNvbXBvbmVudCBhcyByZXF1aXJpbmcgcmVtb3RlIHNjb3BpbmcsIHdpdGggdGhlIGdpdmVuIGRpcmVjdGl2ZXMgYW5kIHBpcGVzIHRvIGJlXG4gICAqIHJlZ2lzdGVyZWQgcmVtb3RlbHkuXG4gICAqL1xuICBzZXRDb21wb25lbnRSZW1vdGVTY29wZShub2RlOiBDbGFzc0RlY2xhcmF0aW9uLCBkaXJlY3RpdmVzOiBSZWZlcmVuY2VbXSwgcGlwZXM6IFJlZmVyZW5jZVtdKTpcbiAgICAgIHZvaWQge1xuICAgIHRoaXMucmVtb3RlU2NvcGluZy5zZXQobm9kZSwge2RpcmVjdGl2ZXMsIHBpcGVzfSk7XG4gIH1cblxuICAvKipcbiAgICogTG9vayB1cCB0aGUgYEV4cG9ydFNjb3BlYCBvZiBhIGdpdmVuIGBSZWZlcmVuY2VgIHRvIGFuIE5nTW9kdWxlLlxuICAgKlxuICAgKiBUaGUgTmdNb2R1bGUgaW4gcXVlc3Rpb24gbWF5IGJlIGRlY2xhcmVkIGxvY2FsbHkgaW4gdGhlIGN1cnJlbnQgdHMuUHJvZ3JhbSwgb3IgaXQgbWF5IGJlXG4gICAqIGRlY2xhcmVkIGluIGEgLmQudHMgZmlsZS5cbiAgICpcbiAgICogQHJldHVybnMgYG51bGxgIGlmIG5vIHNjb3BlIGNvdWxkIGJlIGZvdW5kLCBvciBgJ2ludmFsaWQnYCBpZiB0aGUgYFJlZmVyZW5jZWAgaXMgbm90IGEgdmFsaWRcbiAgICogICAgIE5nTW9kdWxlLlxuICAgKlxuICAgKiBNYXkgYWxzbyBjb250cmlidXRlIGRpYWdub3N0aWNzIG9mIGl0cyBvd24gYnkgYWRkaW5nIHRvIHRoZSBnaXZlbiBgZGlhZ25vc3RpY3NgXG4gICAqIGFycmF5IHBhcmFtZXRlci5cbiAgICovXG4gIHByaXZhdGUgZ2V0RXhwb3J0ZWRTY29wZShcbiAgICAgIHJlZjogUmVmZXJlbmNlPENsYXNzRGVjbGFyYXRpb24+LCBkaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdLFxuICAgICAgb3duZXJGb3JFcnJvcnM6IERlY2xhcmF0aW9uTm9kZSwgdHlwZTogJ2ltcG9ydCd8J2V4cG9ydCcpOiBFeHBvcnRTY29wZXxudWxsfCdpbnZhbGlkJyB7XG4gICAgaWYgKHJlZi5ub2RlLmdldFNvdXJjZUZpbGUoKS5pc0RlY2xhcmF0aW9uRmlsZSkge1xuICAgICAgLy8gVGhlIE5nTW9kdWxlIGlzIGRlY2xhcmVkIGluIGEgLmQudHMgZmlsZS4gUmVzb2x2ZSBpdCB3aXRoIHRoZSBgRGVwZW5kZW5jeVNjb3BlUmVhZGVyYC5cbiAgICAgIGlmICghdHMuaXNDbGFzc0RlY2xhcmF0aW9uKHJlZi5ub2RlKSkge1xuICAgICAgICAvLyBUaGUgTmdNb2R1bGUgaXMgaW4gYSAuZC50cyBmaWxlIGJ1dCBpcyBub3QgZGVjbGFyZWQgYXMgYSB0cy5DbGFzc0RlY2xhcmF0aW9uLiBUaGlzIGlzIGFuXG4gICAgICAgIC8vIGVycm9yIGluIHRoZSAuZC50cyBtZXRhZGF0YS5cbiAgICAgICAgY29uc3QgY29kZSA9IHR5cGUgPT09ICdpbXBvcnQnID8gRXJyb3JDb2RlLk5HTU9EVUxFX0lOVkFMSURfSU1QT1JUIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3JDb2RlLk5HTU9EVUxFX0lOVkFMSURfRVhQT1JUO1xuICAgICAgICBkaWFnbm9zdGljcy5wdXNoKG1ha2VEaWFnbm9zdGljKFxuICAgICAgICAgICAgY29kZSwgaWRlbnRpZmllck9mTm9kZShyZWYubm9kZSkgfHwgcmVmLm5vZGUsXG4gICAgICAgICAgICBgQXBwZWFycyBpbiB0aGUgTmdNb2R1bGUuJHt0eXBlfXMgb2YgJHtcbiAgICAgICAgICAgICAgICBub2RlTmFtZUZvckVycm9yKG93bmVyRm9yRXJyb3JzKX0sIGJ1dCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgdG8gYW4gTmdNb2R1bGVgKSk7XG4gICAgICAgIHJldHVybiAnaW52YWxpZCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5kZXBlbmRlbmN5U2NvcGVSZWFkZXIucmVzb2x2ZShyZWYpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgTmdNb2R1bGUgaXMgZGVjbGFyZWQgbG9jYWxseSBpbiB0aGUgY3VycmVudCBwcm9ncmFtLiBSZXNvbHZlIGl0IGZyb20gdGhlIHJlZ2lzdHJ5LlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NvcGVPZk1vZHVsZVJlZmVyZW5jZShyZWYpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVleHBvcnRzKFxuICAgICAgbmdNb2R1bGU6IE5nTW9kdWxlTWV0YSwgcmVmOiBSZWZlcmVuY2U8Q2xhc3NEZWNsYXJhdGlvbj4sIGRlY2xhcmVkOiBTZXQ8RGVjbGFyYXRpb25Ob2RlPixcbiAgICAgIGV4cG9ydGVkOiB7ZGlyZWN0aXZlczogRGlyZWN0aXZlTWV0YVtdLCBwaXBlczogUGlwZU1ldGFbXX0sXG4gICAgICBkaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdKTogUmVleHBvcnRbXXxudWxsIHtcbiAgICBsZXQgcmVleHBvcnRzOiBSZWV4cG9ydFtdfG51bGwgPSBudWxsO1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSByZWYubm9kZS5nZXRTb3VyY2VGaWxlKCk7XG4gICAgaWYgKHRoaXMuYWxpYXNpbmdIb3N0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmVleHBvcnRzID0gW107XG4gICAgLy8gVHJhY2sgcmUtZXhwb3J0cyBieSBzeW1ib2wgbmFtZSwgdG8gcHJvZHVjZSBkaWFnbm9zdGljcyBpZiB0d28gYWxpYXMgcmUtZXhwb3J0cyB3b3VsZCBzaGFyZVxuICAgIC8vIHRoZSBzYW1lIG5hbWUuXG4gICAgY29uc3QgcmVleHBvcnRNYXAgPSBuZXcgTWFwPHN0cmluZywgUmVmZXJlbmNlPENsYXNzRGVjbGFyYXRpb24+PigpO1xuICAgIC8vIEFsaWFzIG5nTW9kdWxlUmVmIGFkZGVkIGZvciByZWFkYWJpbGl0eSBiZWxvdy5cbiAgICBjb25zdCBuZ01vZHVsZVJlZiA9IHJlZjtcbiAgICBjb25zdCBhZGRSZWV4cG9ydCA9IChleHBvcnRSZWY6IFJlZmVyZW5jZTxDbGFzc0RlY2xhcmF0aW9uPikgPT4ge1xuICAgICAgaWYgKGV4cG9ydFJlZi5ub2RlLmdldFNvdXJjZUZpbGUoKSA9PT0gc291cmNlRmlsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpc1JlRXhwb3J0ID0gIWRlY2xhcmVkLmhhcyhleHBvcnRSZWYubm9kZSk7XG4gICAgICBjb25zdCBleHBvcnROYW1lID0gdGhpcy5hbGlhc2luZ0hvc3QhLm1heWJlQWxpYXNTeW1ib2xBcyhcbiAgICAgICAgICBleHBvcnRSZWYsIHNvdXJjZUZpbGUsIG5nTW9kdWxlLnJlZi5ub2RlLm5hbWUudGV4dCwgaXNSZUV4cG9ydCk7XG4gICAgICBpZiAoZXhwb3J0TmFtZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXJlZXhwb3J0TWFwLmhhcyhleHBvcnROYW1lKSkge1xuICAgICAgICBpZiAoZXhwb3J0UmVmLmFsaWFzICYmIGV4cG9ydFJlZi5hbGlhcyBpbnN0YW5jZW9mIEV4dGVybmFsRXhwcikge1xuICAgICAgICAgIHJlZXhwb3J0cyEucHVzaCh7XG4gICAgICAgICAgICBmcm9tTW9kdWxlOiBleHBvcnRSZWYuYWxpYXMudmFsdWUubW9kdWxlTmFtZSEsXG4gICAgICAgICAgICBzeW1ib2xOYW1lOiBleHBvcnRSZWYuYWxpYXMudmFsdWUubmFtZSEsXG4gICAgICAgICAgICBhc0FsaWFzOiBleHBvcnROYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGV4cHIgPVxuICAgICAgICAgICAgICB0aGlzLnJlZkVtaXR0ZXIuZW1pdChleHBvcnRSZWYuY2xvbmVXaXRoTm9JZGVudGlmaWVycygpLCBzb3VyY2VGaWxlKS5leHByZXNzaW9uO1xuICAgICAgICAgIGlmICghKGV4cHIgaW5zdGFuY2VvZiBFeHRlcm5hbEV4cHIpIHx8IGV4cHIudmFsdWUubW9kdWxlTmFtZSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgICBleHByLnZhbHVlLm5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgRXh0ZXJuYWxFeHByJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlZXhwb3J0cyEucHVzaCh7XG4gICAgICAgICAgICBmcm9tTW9kdWxlOiBleHByLnZhbHVlLm1vZHVsZU5hbWUsXG4gICAgICAgICAgICBzeW1ib2xOYW1lOiBleHByLnZhbHVlLm5hbWUsXG4gICAgICAgICAgICBhc0FsaWFzOiBleHBvcnROYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlZXhwb3J0TWFwLnNldChleHBvcnROYW1lLCBleHBvcnRSZWYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQW5vdGhlciByZS1leHBvcnQgYWxyZWFkeSB1c2VkIHRoaXMgbmFtZS4gUHJvZHVjZSBhIGRpYWdub3N0aWMuXG4gICAgICAgIGNvbnN0IHByZXZSZWYgPSByZWV4cG9ydE1hcC5nZXQoZXhwb3J0TmFtZSkhO1xuICAgICAgICBkaWFnbm9zdGljcy5wdXNoKHJlZXhwb3J0Q29sbGlzaW9uKG5nTW9kdWxlUmVmLm5vZGUsIHByZXZSZWYsIGV4cG9ydFJlZikpO1xuICAgICAgfVxuICAgIH07XG4gICAgZm9yIChjb25zdCB7cmVmfSBvZiBleHBvcnRlZC5kaXJlY3RpdmVzKSB7XG4gICAgICBhZGRSZWV4cG9ydChyZWYpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHtyZWZ9IG9mIGV4cG9ydGVkLnBpcGVzKSB7XG4gICAgICBhZGRSZWV4cG9ydChyZWYpO1xuICAgIH1cbiAgICByZXR1cm4gcmVleHBvcnRzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3NlcnRDb2xsZWN0aW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlYWxlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb246IExvY2FsTW9kdWxlU2NvcGVSZWdpc3RyeSBpcyBub3QgQ09MTEVDVElOR2ApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFByb2R1Y2UgYSBgdHMuRGlhZ25vc3RpY2AgZm9yIGFuIGludmFsaWQgaW1wb3J0IG9yIGV4cG9ydCBmcm9tIGFuIE5nTW9kdWxlLlxuICovXG5mdW5jdGlvbiBpbnZhbGlkUmVmKFxuICAgIGNsYXp6OiBEZWNsYXJhdGlvbk5vZGUsIGRlY2w6IFJlZmVyZW5jZTxEZWNsYXJhdGlvbk5vZGU+LFxuICAgIHR5cGU6ICdpbXBvcnQnfCdleHBvcnQnKTogdHMuRGlhZ25vc3RpYyB7XG4gIGNvbnN0IGNvZGUgPVxuICAgICAgdHlwZSA9PT0gJ2ltcG9ydCcgPyBFcnJvckNvZGUuTkdNT0RVTEVfSU5WQUxJRF9JTVBPUlQgOiBFcnJvckNvZGUuTkdNT0RVTEVfSU5WQUxJRF9FWFBPUlQ7XG4gIGNvbnN0IHJlc29sdmVUYXJnZXQgPSB0eXBlID09PSAnaW1wb3J0JyA/ICdOZ01vZHVsZScgOiAnTmdNb2R1bGUsIENvbXBvbmVudCwgRGlyZWN0aXZlLCBvciBQaXBlJztcbiAgbGV0IG1lc3NhZ2UgPVxuICAgICAgYEFwcGVhcnMgaW4gdGhlIE5nTW9kdWxlLiR7dHlwZX1zIG9mICR7XG4gICAgICAgICAgbm9kZU5hbWVGb3JFcnJvcihjbGF6eil9LCBidXQgY291bGQgbm90IGJlIHJlc29sdmVkIHRvIGFuICR7cmVzb2x2ZVRhcmdldH0gY2xhc3MuYCArXG4gICAgICAnXFxuXFxuJztcbiAgY29uc3QgbGlicmFyeSA9IGRlY2wub3duZWRCeU1vZHVsZUd1ZXNzICE9PSBudWxsID8gYCAoJHtkZWNsLm93bmVkQnlNb2R1bGVHdWVzc30pYCA6ICcnO1xuICBjb25zdCBzZiA9IGRlY2wubm9kZS5nZXRTb3VyY2VGaWxlKCk7XG5cbiAgLy8gUHJvdmlkZSBleHRyYSBjb250ZXh0IHRvIHRoZSBlcnJvciBmb3IgdGhlIHVzZXIuXG4gIGlmICghc2YuaXNEZWNsYXJhdGlvbkZpbGUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZmlsZSBpbiB0aGUgdXNlcidzIHByb2dyYW0uXG4gICAgY29uc3QgYW5ub3RhdGlvblR5cGUgPSB0eXBlID09PSAnaW1wb3J0JyA/ICdATmdNb2R1bGUnIDogJ0FuZ3VsYXInO1xuICAgIG1lc3NhZ2UgKz0gYElzIGl0IG1pc3NpbmcgYW4gJHthbm5vdGF0aW9uVHlwZX0gYW5ub3RhdGlvbj9gO1xuICB9IGVsc2UgaWYgKHNmLmZpbGVOYW1lLmluZGV4T2YoJ25vZGVfbW9kdWxlcycpICE9PSAtMSkge1xuICAgIC8vIFRoaXMgZmlsZSBjb21lcyBmcm9tIGEgdGhpcmQtcGFydHkgbGlicmFyeSBpbiBub2RlX21vZHVsZXMuXG4gICAgbWVzc2FnZSArPVxuICAgICAgICBgVGhpcyBsaWtlbHkgbWVhbnMgdGhhdCB0aGUgbGlicmFyeSR7bGlicmFyeX0gd2hpY2ggZGVjbGFyZXMgJHtkZWNsLmRlYnVnTmFtZX0gaGFzIG5vdCBgICtcbiAgICAgICAgJ2JlZW4gcHJvY2Vzc2VkIGNvcnJlY3RseSBieSBuZ2NjLCBvciBpcyBub3QgY29tcGF0aWJsZSB3aXRoIEFuZ3VsYXIgSXZ5LiBDaGVjayBpZiBhICcgK1xuICAgICAgICAnbmV3ZXIgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBpcyBhdmFpbGFibGUsIGFuZCB1cGRhdGUgaWYgc28uIEFsc28gY29uc2lkZXIgY2hlY2tpbmcgJyArXG4gICAgICAgICd3aXRoIHRoZSBsaWJyYXJ5XFwncyBhdXRob3JzIHRvIHNlZSBpZiB0aGUgbGlicmFyeSBpcyBleHBlY3RlZCB0byBiZSBjb21wYXRpYmxlIHdpdGggSXZ5Lic7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBpcyBhIG1vbm9yZXBvIHN0eWxlIGxvY2FsIGRlcGVuZGVuY3kuIFVuZm9ydHVuYXRlbHkgdGhlc2UgYXJlIHRvbyBkaWZmZXJlbnQgdG8gcmVhbGx5XG4gICAgLy8gb2ZmZXIgbXVjaCBtb3JlwqBhZHZpY2UgdGhhbiB0aGlzLlxuICAgIG1lc3NhZ2UgKz0gYFRoaXMgbGlrZWx5IG1lYW5zIHRoYXQgdGhlIGRlcGVuZGVuY3kke2xpYnJhcnl9IHdoaWNoIGRlY2xhcmVzICR7XG4gICAgICAgIGRlY2wuZGVidWdOYW1lfSBoYXMgbm90IGJlZW4gcHJvY2Vzc2VkIGNvcnJlY3RseSBieSBuZ2NjLmA7XG4gIH1cblxuICByZXR1cm4gbWFrZURpYWdub3N0aWMoY29kZSwgaWRlbnRpZmllck9mTm9kZShkZWNsLm5vZGUpIHx8IGRlY2wubm9kZSwgbWVzc2FnZSk7XG59XG5cbi8qKlxuICogUHJvZHVjZSBhIGB0cy5EaWFnbm9zdGljYCBmb3IgYW4gaW1wb3J0IG9yIGV4cG9ydCB3aGljaCBpdHNlbGYgaGFzIGVycm9ycy5cbiAqL1xuZnVuY3Rpb24gaW52YWxpZFRyYW5zaXRpdmVOZ01vZHVsZVJlZihcbiAgICBjbGF6ejogRGVjbGFyYXRpb25Ob2RlLCBkZWNsOiBSZWZlcmVuY2U8RGVjbGFyYXRpb25Ob2RlPixcbiAgICB0eXBlOiAnaW1wb3J0J3wnZXhwb3J0Jyk6IHRzLkRpYWdub3N0aWMge1xuICBjb25zdCBjb2RlID1cbiAgICAgIHR5cGUgPT09ICdpbXBvcnQnID8gRXJyb3JDb2RlLk5HTU9EVUxFX0lOVkFMSURfSU1QT1JUIDogRXJyb3JDb2RlLk5HTU9EVUxFX0lOVkFMSURfRVhQT1JUO1xuICByZXR1cm4gbWFrZURpYWdub3N0aWMoXG4gICAgICBjb2RlLCBpZGVudGlmaWVyT2ZOb2RlKGRlY2wubm9kZSkgfHwgZGVjbC5ub2RlLFxuICAgICAgYEFwcGVhcnMgaW4gdGhlIE5nTW9kdWxlLiR7dHlwZX1zIG9mICR7bm9kZU5hbWVGb3JFcnJvcihjbGF6eil9LCBidXQgaXRzZWxmIGhhcyBlcnJvcnNgKTtcbn1cblxuLyoqXG4gKiBQcm9kdWNlIGEgYHRzLkRpYWdub3N0aWNgIGZvciBhbiBleHBvcnRlZCBkaXJlY3RpdmUgb3IgcGlwZSB3aGljaCB3YXMgbm90IGRlY2xhcmVkIG9yIGltcG9ydGVkXG4gKiBieSB0aGUgTmdNb2R1bGUgaW4gcXVlc3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGludmFsaWRSZWV4cG9ydChjbGF6ejogRGVjbGFyYXRpb25Ob2RlLCBkZWNsOiBSZWZlcmVuY2U8RGVjbGFyYXRpb25Ob2RlPik6IHRzLkRpYWdub3N0aWMge1xuICByZXR1cm4gbWFrZURpYWdub3N0aWMoXG4gICAgICBFcnJvckNvZGUuTkdNT0RVTEVfSU5WQUxJRF9SRUVYUE9SVCwgaWRlbnRpZmllck9mTm9kZShkZWNsLm5vZGUpIHx8IGRlY2wubm9kZSxcbiAgICAgIGBQcmVzZW50IGluIHRoZSBOZ01vZHVsZS5leHBvcnRzIG9mICR7XG4gICAgICAgICAgbm9kZU5hbWVGb3JFcnJvcihjbGF6eil9IGJ1dCBuZWl0aGVyIGRlY2xhcmVkIG5vciBpbXBvcnRlZGApO1xufVxuXG4vKipcbiAqIFByb2R1Y2UgYSBgdHMuRGlhZ25vc3RpY2AgZm9yIGEgY29sbGlzaW9uIGluIHJlLWV4cG9ydCBuYW1lcyBiZXR3ZWVuIHR3byBkaXJlY3RpdmVzL3BpcGVzLlxuICovXG5mdW5jdGlvbiByZWV4cG9ydENvbGxpc2lvbihcbiAgICBtb2R1bGU6IENsYXNzRGVjbGFyYXRpb24sIHJlZkE6IFJlZmVyZW5jZTxDbGFzc0RlY2xhcmF0aW9uPixcbiAgICByZWZCOiBSZWZlcmVuY2U8Q2xhc3NEZWNsYXJhdGlvbj4pOiB0cy5EaWFnbm9zdGljIHtcbiAgY29uc3QgY2hpbGRNZXNzYWdlVGV4dCA9IGBUaGlzIGRpcmVjdGl2ZS9waXBlIGlzIHBhcnQgb2YgdGhlIGV4cG9ydHMgb2YgJyR7XG4gICAgICBtb2R1bGUubmFtZS50ZXh0fScgYW5kIHNoYXJlcyB0aGUgc2FtZSBuYW1lIGFzIGFub3RoZXIgZXhwb3J0ZWQgZGlyZWN0aXZlL3BpcGUuYDtcbiAgcmV0dXJuIG1ha2VEaWFnbm9zdGljKFxuICAgICAgRXJyb3JDb2RlLk5HTU9EVUxFX1JFRVhQT1JUX05BTUVfQ09MTElTSU9OLCBtb2R1bGUubmFtZSxcbiAgICAgIGBcbiAgICBUaGVyZSB3YXMgYSBuYW1lIGNvbGxpc2lvbiBiZXR3ZWVuIHR3byBjbGFzc2VzIG5hbWVkICcke1xuICAgICAgICAgIHJlZkEubm9kZS5uYW1lLnRleHR9Jywgd2hpY2ggYXJlIGJvdGggcGFydCBvZiB0aGUgZXhwb3J0cyBvZiAnJHttb2R1bGUubmFtZS50ZXh0fScuXG5cbiAgICBBbmd1bGFyIGdlbmVyYXRlcyByZS1leHBvcnRzIG9mIGFuIE5nTW9kdWxlJ3MgZXhwb3J0ZWQgZGlyZWN0aXZlcy9waXBlcyBmcm9tIHRoZSBtb2R1bGUncyBzb3VyY2UgZmlsZSBpbiBjZXJ0YWluIGNhc2VzLCB1c2luZyB0aGUgZGVjbGFyZWQgbmFtZSBvZiB0aGUgY2xhc3MuIElmIHR3byBjbGFzc2VzIG9mIHRoZSBzYW1lIG5hbWUgYXJlIGV4cG9ydGVkLCB0aGlzIGF1dG9tYXRpYyBuYW1pbmcgZG9lcyBub3Qgd29yay5cblxuICAgIFRvIGZpeCB0aGlzIHByb2JsZW0gcGxlYXNlIHJlLWV4cG9ydCBvbmUgb3IgYm90aCBjbGFzc2VzIGRpcmVjdGx5IGZyb20gdGhpcyBmaWxlLlxuICBgLnRyaW0oKSxcbiAgICAgIFtcbiAgICAgICAgbWFrZVJlbGF0ZWRJbmZvcm1hdGlvbihyZWZBLm5vZGUubmFtZSwgY2hpbGRNZXNzYWdlVGV4dCksXG4gICAgICAgIG1ha2VSZWxhdGVkSW5mb3JtYXRpb24ocmVmQi5ub2RlLm5hbWUsIGNoaWxkTWVzc2FnZVRleHQpLFxuICAgICAgXSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjbGFyYXRpb25EYXRhIHtcbiAgbmdNb2R1bGU6IENsYXNzRGVjbGFyYXRpb247XG4gIHJlZjogUmVmZXJlbmNlO1xuICByYXdEZWNsYXJhdGlvbnM6IHRzLkV4cHJlc3Npb258bnVsbDtcbn1cbiJdfQ==