@angular/compiler-cli 13.0.0-next.9 → 13.0.0-rc.3

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 (596) hide show
  1. package/bundles/index.js +20413 -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 +16038 -0
  8. package/bundles/ngcc/index.js.map +6 -0
  9. package/bundles/ngcc/main-ngcc.js +16126 -0
  10. package/bundles/ngcc/main-ngcc.js.map +6 -0
  11. package/bundles/ngcc/src/execution/cluster/ngcc_cluster_worker.js +13850 -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 +2183 -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 +20463 -0
  24. package/bundles/src/bin/ng_xi18n.js.map +6 -0
  25. package/bundles/src/bin/ngc.js +20465 -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 +1 -1
  65. package/ngcc/src/host/esm2015_host.d.ts +1 -1
  66. package/ngcc/src/host/esm5_host.d.ts +1 -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/entry_point_bundle.d.ts +1 -1
  81. package/ngcc/src/packages/ngcc_compiler_host.d.ts +1 -1
  82. package/ngcc/src/packages/source_file_cache.d.ts +1 -1
  83. package/ngcc/src/packages/transformer.d.ts +1 -1
  84. package/ngcc/src/rendering/commonjs_rendering_formatter.d.ts +1 -1
  85. package/ngcc/src/rendering/dts_renderer.d.ts +1 -1
  86. package/ngcc/src/rendering/esm5_rendering_formatter.d.ts +1 -1
  87. package/ngcc/src/rendering/esm_rendering_formatter.d.ts +1 -1
  88. package/ngcc/src/rendering/renderer.d.ts +1 -1
  89. package/ngcc/src/rendering/rendering_formatter.d.ts +1 -1
  90. package/ngcc/src/rendering/source_maps.d.ts +3 -3
  91. package/ngcc/src/rendering/umd_rendering_formatter.d.ts +1 -1
  92. package/ngcc/src/rendering/utils.d.ts +1 -1
  93. package/ngcc/src/utils.d.ts +1 -1
  94. package/package.json +52 -13
  95. package/private/bazel.d.ts +13 -0
  96. package/private/localize.d.ts +15 -0
  97. package/private/migrations.d.ts +16 -0
  98. package/{src → private}/tooling.d.ts +2 -2
  99. package/src/bin/ng_xi18n.d.ts +10 -0
  100. package/{ngcc/main-ivy-ngcc.d.ts → src/bin/ngc.d.ts} +2 -1
  101. package/src/diagnostics/translate_diagnostics.d.ts +1 -1
  102. package/src/extract_i18n.d.ts +0 -5
  103. package/src/main.d.ts +9 -6
  104. package/src/metadata/bundle_index_host.d.ts +1 -1
  105. package/src/metadata/bundler.d.ts +1 -1
  106. package/src/metadata/collector.d.ts +1 -1
  107. package/src/metadata/evaluator.d.ts +1 -1
  108. package/src/metadata/symbols.d.ts +1 -1
  109. package/src/ngtsc/annotations/src/component.d.ts +1 -1
  110. package/src/ngtsc/annotations/src/diagnostics.d.ts +1 -1
  111. package/src/ngtsc/annotations/src/directive.d.ts +1 -1
  112. package/src/ngtsc/annotations/src/ng_module.d.ts +2 -3
  113. package/src/ngtsc/annotations/src/pipe.d.ts +1 -1
  114. package/src/ngtsc/annotations/src/util.d.ts +2 -4
  115. package/src/ngtsc/core/api/src/adapter.d.ts +1 -1
  116. package/src/ngtsc/core/api/src/interfaces.d.ts +1 -1
  117. package/src/ngtsc/core/api/src/options.d.ts +1 -1
  118. package/src/ngtsc/core/api/src/public_options.d.ts +5 -1
  119. package/src/ngtsc/core/src/compiler.d.ts +1 -1
  120. package/src/ngtsc/core/src/host.d.ts +1 -1
  121. package/src/ngtsc/cycles/src/analyzer.d.ts +1 -1
  122. package/src/ngtsc/cycles/src/imports.d.ts +1 -1
  123. package/src/ngtsc/diagnostics/index.d.ts +4 -2
  124. package/src/ngtsc/diagnostics/src/docs.d.ts +14 -0
  125. package/src/ngtsc/diagnostics/src/error.d.ts +1 -1
  126. package/src/ngtsc/diagnostics/src/error_details_base_url.d.ts +16 -0
  127. package/src/ngtsc/diagnostics/src/util.d.ts +2 -0
  128. package/src/ngtsc/entry_point/src/generator.d.ts +1 -1
  129. package/src/ngtsc/entry_point/src/private_export_checker.d.ts +1 -1
  130. package/src/ngtsc/file_system/src/compiler_host.d.ts +1 -1
  131. package/src/ngtsc/file_system/src/logical.d.ts +1 -1
  132. package/src/ngtsc/file_system/src/util.d.ts +1 -1
  133. package/src/ngtsc/imports/src/alias.d.ts +1 -1
  134. package/src/ngtsc/imports/src/default.d.ts +1 -1
  135. package/src/ngtsc/imports/src/emitter.d.ts +1 -1
  136. package/src/ngtsc/imports/src/find_export.d.ts +1 -1
  137. package/src/ngtsc/imports/src/references.d.ts +1 -1
  138. package/src/ngtsc/imports/src/resolver.d.ts +1 -1
  139. package/src/ngtsc/incremental/api.d.ts +1 -1
  140. package/src/ngtsc/incremental/src/dependency_tracking.d.ts +1 -1
  141. package/src/ngtsc/incremental/src/incremental.d.ts +1 -1
  142. package/src/ngtsc/incremental/src/state.d.ts +1 -1
  143. package/src/ngtsc/incremental/src/strategy.d.ts +1 -1
  144. package/src/ngtsc/metadata/src/api.d.ts +1 -1
  145. package/src/ngtsc/metadata/src/dts.d.ts +1 -1
  146. package/src/ngtsc/metadata/src/resource_registry.d.ts +1 -1
  147. package/src/ngtsc/metadata/src/util.d.ts +1 -1
  148. package/src/ngtsc/partial_evaluator/index.d.ts +1 -0
  149. package/src/ngtsc/partial_evaluator/src/builtin.d.ts +1 -1
  150. package/src/ngtsc/partial_evaluator/src/diagnostics.d.ts +1 -1
  151. package/src/ngtsc/partial_evaluator/src/dynamic.d.ts +1 -1
  152. package/src/ngtsc/partial_evaluator/src/interface.d.ts +1 -1
  153. package/src/ngtsc/partial_evaluator/src/interpreter.d.ts +1 -1
  154. package/src/ngtsc/partial_evaluator/src/result.d.ts +1 -1
  155. package/src/ngtsc/partial_evaluator/src/ts_helpers.d.ts +1 -1
  156. package/src/ngtsc/program.d.ts +1 -1
  157. package/src/ngtsc/program_driver/src/api.d.ts +1 -1
  158. package/src/ngtsc/program_driver/src/ts_create_program_driver.d.ts +1 -1
  159. package/src/ngtsc/reflection/src/host.d.ts +1 -1
  160. package/src/ngtsc/reflection/src/type_to_value.d.ts +1 -1
  161. package/src/ngtsc/reflection/src/typescript.d.ts +1 -1
  162. package/src/ngtsc/reflection/src/util.d.ts +1 -1
  163. package/src/ngtsc/resource/src/loader.d.ts +1 -1
  164. package/src/ngtsc/scope/src/local.d.ts +1 -1
  165. package/src/ngtsc/scope/src/typecheck.d.ts +1 -1
  166. package/src/ngtsc/shims/api.d.ts +1 -1
  167. package/src/ngtsc/shims/src/adapter.d.ts +1 -1
  168. package/src/ngtsc/shims/src/expando.d.ts +1 -1
  169. package/src/ngtsc/shims/src/factory_generator.d.ts +1 -1
  170. package/src/ngtsc/shims/src/reference_tagger.d.ts +1 -1
  171. package/src/ngtsc/shims/src/summary_generator.d.ts +1 -1
  172. package/src/ngtsc/switch/src/switch.d.ts +1 -1
  173. package/src/ngtsc/transform/src/alias.d.ts +1 -1
  174. package/src/ngtsc/transform/src/api.d.ts +1 -1
  175. package/src/ngtsc/transform/src/compilation.d.ts +1 -1
  176. package/src/ngtsc/transform/src/declaration.d.ts +1 -1
  177. package/src/ngtsc/transform/src/trait.d.ts +1 -1
  178. package/src/ngtsc/transform/src/transform.d.ts +1 -1
  179. package/src/ngtsc/transform/src/utils.d.ts +1 -1
  180. package/src/ngtsc/translator/src/import_manager.d.ts +1 -1
  181. package/src/ngtsc/translator/src/type_translator.d.ts +1 -1
  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 +1 -1
  186. package/src/ngtsc/typecheck/api/checker.d.ts +3 -4
  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 +1 -1
  191. package/src/ngtsc/typecheck/extended/api/api.d.ts +1 -1
  192. package/src/ngtsc/typecheck/extended/api/extended_template_checker.d.ts +1 -1
  193. package/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box/index.d.ts +1 -1
  194. package/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable/index.d.ts +1 -1
  195. package/src/ngtsc/typecheck/extended/src/extended_template_checker.d.ts +1 -1
  196. package/src/ngtsc/typecheck/src/checker.d.ts +3 -4
  197. package/src/ngtsc/typecheck/src/comments.d.ts +1 -1
  198. package/src/ngtsc/typecheck/src/completion.d.ts +3 -5
  199. package/src/ngtsc/typecheck/src/context.d.ts +1 -1
  200. package/src/ngtsc/typecheck/src/diagnostics.d.ts +1 -1
  201. package/src/ngtsc/typecheck/src/environment.d.ts +1 -1
  202. package/src/ngtsc/typecheck/src/expression.d.ts +1 -1
  203. package/src/ngtsc/typecheck/src/oob.d.ts +3 -4
  204. package/src/ngtsc/typecheck/src/shim.d.ts +1 -1
  205. package/src/ngtsc/typecheck/src/source.d.ts +1 -1
  206. package/src/ngtsc/typecheck/src/tcb_util.d.ts +1 -1
  207. package/src/ngtsc/typecheck/src/template_symbol_builder.d.ts +1 -1
  208. package/src/ngtsc/typecheck/src/ts_util.d.ts +1 -1
  209. package/src/ngtsc/typecheck/src/type_check_block.d.ts +1 -1
  210. package/src/ngtsc/typecheck/src/type_check_file.d.ts +1 -1
  211. package/src/ngtsc/typecheck/src/type_constructor.d.ts +1 -1
  212. package/src/ngtsc/typecheck/src/type_emitter.d.ts +1 -1
  213. package/src/ngtsc/typecheck/src/type_parameter_emitter.d.ts +1 -1
  214. package/src/ngtsc/util/src/typescript.d.ts +1 -1
  215. package/src/ngtsc/util/src/visitor.d.ts +1 -1
  216. package/src/perform_compile.d.ts +1 -2
  217. package/src/perform_watch.d.ts +1 -1
  218. package/src/transformers/api.d.ts +1 -1
  219. package/src/transformers/compiler_host.d.ts +1 -1
  220. package/src/transformers/{downlevel_decorators_transform.d.ts → downlevel_decorators_transform/downlevel_decorators_transform.d.ts} +3 -3
  221. package/src/transformers/downlevel_decorators_transform/index.d.ts +9 -0
  222. package/src/transformers/{patch_alias_reference_resolution.d.ts → downlevel_decorators_transform/patch_alias_reference_resolution.d.ts} +2 -2
  223. package/src/transformers/i18n.d.ts +1 -1
  224. package/src/transformers/inline_resources.d.ts +1 -1
  225. package/src/transformers/lower_expressions.d.ts +1 -1
  226. package/src/transformers/metadata_cache.d.ts +1 -1
  227. package/src/transformers/node_emitter.d.ts +1 -1
  228. package/src/transformers/node_emitter_transform.d.ts +1 -1
  229. package/src/transformers/program.d.ts +1 -1
  230. package/src/transformers/r3_metadata_transform.d.ts +1 -1
  231. package/src/transformers/r3_transform.d.ts +1 -1
  232. package/src/transformers/util.d.ts +1 -1
  233. package/index.js +0 -40
  234. package/linker/babel/index.js +0 -25
  235. package/linker/babel/src/ast/babel_ast_factory.js +0 -153
  236. package/linker/babel/src/ast/babel_ast_host.js +0 -181
  237. package/linker/babel/src/babel_declaration_scope.js +0 -67
  238. package/linker/babel/src/babel_plugin.js +0 -38
  239. package/linker/babel/src/es2015_linker_plugin.js +0 -183
  240. package/linker/babel/src/linker_plugin_options.js +0 -13
  241. package/linker/index.js +0 -27
  242. package/linker/src/ast/ast_host.js +0 -20
  243. package/linker/src/ast/ast_value.js +0 -299
  244. package/linker/src/ast/typescript/typescript_ast_host.js +0 -183
  245. package/linker/src/ast/utils.js +0 -31
  246. package/linker/src/fatal_linker_error.js +0 -49
  247. package/linker/src/file_linker/declaration_scope.js +0 -20
  248. package/linker/src/file_linker/emit_scopes/emit_scope.js +0 -57
  249. package/linker/src/file_linker/emit_scopes/iife_emit_scope.js +0 -51
  250. package/linker/src/file_linker/file_linker.js +0 -97
  251. package/linker/src/file_linker/get_source_file.js +0 -42
  252. package/linker/src/file_linker/linker_environment.js +0 -38
  253. package/linker/src/file_linker/linker_options.js +0 -29
  254. package/linker/src/file_linker/needs_linking.js +0 -41
  255. package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.js +0 -47
  256. package/linker/src/file_linker/partial_linkers/partial_component_linker_1.js +0 -210
  257. package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.js +0 -154
  258. package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.js +0 -70
  259. package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.js +0 -74
  260. package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.js +0 -56
  261. package/linker/src/file_linker/partial_linkers/partial_linker.js +0 -13
  262. package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +0 -194
  263. package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.js +0 -126
  264. package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.js +0 -59
  265. package/linker/src/file_linker/partial_linkers/util.js +0 -95
  266. package/linker/src/file_linker/translator.js +0 -40
  267. package/linker/src/linker_import_generator.js +0 -43
  268. package/ngcc/index.js +0 -33
  269. package/ngcc/main-ivy-ngcc.js +0 -12
  270. package/ngcc/main-ngcc.js +0 -54
  271. package/ngcc/src/analysis/decoration_analyzer.js +0 -268
  272. package/ngcc/src/analysis/migration_host.js +0 -108
  273. package/ngcc/src/analysis/module_with_providers_analyzer.js +0 -197
  274. package/ngcc/src/analysis/ngcc_references_registry.js +0 -65
  275. package/ngcc/src/analysis/ngcc_trait_compiler.js +0 -117
  276. package/ngcc/src/analysis/private_declarations_analyzer.js +0 -63
  277. package/ngcc/src/analysis/switch_marker_analyzer.js +0 -50
  278. package/ngcc/src/analysis/types.js +0 -15
  279. package/ngcc/src/analysis/util.js +0 -36
  280. package/ngcc/src/command_line_options.js +0 -156
  281. package/ngcc/src/constants.js +0 -23
  282. package/ngcc/src/dependencies/commonjs_dependency_host.js +0 -129
  283. package/ngcc/src/dependencies/dependency_host.js +0 -143
  284. package/ngcc/src/dependencies/dependency_resolver.js +0 -180
  285. package/ngcc/src/dependencies/dts_dependency_host.js +0 -35
  286. package/ngcc/src/dependencies/esm_dependency_host.js +0 -307
  287. package/ngcc/src/dependencies/module_resolver.js +0 -269
  288. package/ngcc/src/dependencies/umd_dependency_host.js +0 -53
  289. package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.js +0 -70
  290. package/ngcc/src/entry_point_finder/entry_point_collector.js +0 -157
  291. package/ngcc/src/entry_point_finder/interface.js +0 -13
  292. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.js +0 -132
  293. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +0 -268
  294. package/ngcc/src/entry_point_finder/tracing_entry_point_finder.js +0 -78
  295. package/ngcc/src/entry_point_finder/utils.js +0 -234
  296. package/ngcc/src/execution/analyze_entry_points.js +0 -197
  297. package/ngcc/src/execution/api.js +0 -13
  298. package/ngcc/src/execution/cluster/api.js +0 -20
  299. package/ngcc/src/execution/cluster/executor.js +0 -52
  300. package/ngcc/src/execution/cluster/master.js +0 -311
  301. package/ngcc/src/execution/cluster/package_json_updater.js +0 -79
  302. package/ngcc/src/execution/cluster/utils.js +0 -77
  303. package/ngcc/src/execution/cluster/worker.js +0 -123
  304. package/ngcc/src/execution/create_compile_function.js +0 -76
  305. package/ngcc/src/execution/single_process_executor.js +0 -91
  306. package/ngcc/src/execution/tasks/api.js +0 -35
  307. package/ngcc/src/execution/tasks/completion.js +0 -79
  308. package/ngcc/src/execution/tasks/queues/base_task_queue.js +0 -120
  309. package/ngcc/src/execution/tasks/queues/parallel_task_queue.js +0 -87
  310. package/ngcc/src/execution/tasks/queues/serial_task_queue.js +0 -49
  311. package/ngcc/src/execution/tasks/utils.js +0 -167
  312. package/ngcc/src/host/commonjs_host.js +0 -261
  313. package/ngcc/src/host/commonjs_umd_utils.js +0 -210
  314. package/ngcc/src/host/delegating_host.js +0 -156
  315. package/ngcc/src/host/esm2015_host.js +0 -2441
  316. package/ngcc/src/host/esm5_host.js +0 -745
  317. package/ngcc/src/host/ngcc_host.js +0 -29
  318. package/ngcc/src/host/umd_host.js +0 -539
  319. package/ngcc/src/host/utils.js +0 -26
  320. package/ngcc/src/locking/async_locker.js +0 -121
  321. package/ngcc/src/locking/lock_file.js +0 -18
  322. package/ngcc/src/locking/lock_file_with_child_process/index.js +0 -93
  323. package/ngcc/src/locking/lock_file_with_child_process/unlocker.js +0 -46
  324. package/ngcc/src/locking/lock_file_with_child_process/util.js +0 -43
  325. package/ngcc/src/locking/sync_locker.js +0 -67
  326. package/ngcc/src/main.js +0 -163
  327. package/ngcc/src/migrations/migration.js +0 -13
  328. package/ngcc/src/migrations/missing_injectable_migration.js +0 -227
  329. package/ngcc/src/migrations/undecorated_child_migration.js +0 -90
  330. package/ngcc/src/migrations/undecorated_parent_migration.js +0 -103
  331. package/ngcc/src/migrations/utils.js +0 -137
  332. package/ngcc/src/ngcc_options.js +0 -135
  333. package/ngcc/src/packages/build_marker.js +0 -124
  334. package/ngcc/src/packages/bundle_program.js +0 -80
  335. package/ngcc/src/packages/configuration.js +0 -334
  336. package/ngcc/src/packages/entry_point.js +0 -267
  337. package/ngcc/src/packages/entry_point_bundle.js +0 -96
  338. package/ngcc/src/packages/entry_point_manifest.js +0 -207
  339. package/ngcc/src/packages/ngcc_compiler_host.js +0 -101
  340. package/ngcc/src/packages/patch_ts_expando_initializer.js +0 -174
  341. package/ngcc/src/packages/source_file_cache.js +0 -207
  342. package/ngcc/src/packages/transformer.js +0 -157
  343. package/ngcc/src/path_mappings.js +0 -27
  344. package/ngcc/src/rendering/commonjs_rendering_formatter.js +0 -106
  345. package/ngcc/src/rendering/dts_renderer.js +0 -170
  346. package/ngcc/src/rendering/esm5_rendering_formatter.js +0 -70
  347. package/ngcc/src/rendering/esm_rendering_formatter.js +0 -291
  348. package/ngcc/src/rendering/ngcc_import_rewriter.js +0 -49
  349. package/ngcc/src/rendering/renderer.js +0 -204
  350. package/ngcc/src/rendering/rendering_formatter.js +0 -15
  351. package/ngcc/src/rendering/source_maps.js +0 -68
  352. package/ngcc/src/rendering/umd_rendering_formatter.js +0 -326
  353. package/ngcc/src/rendering/utils.js +0 -35
  354. package/ngcc/src/utils.js +0 -182
  355. package/ngcc/src/writing/cleaning/cleaning_strategies.js +0 -80
  356. package/ngcc/src/writing/cleaning/package_cleaner.js +0 -126
  357. package/ngcc/src/writing/cleaning/utils.js +0 -30
  358. package/ngcc/src/writing/file_writer.js +0 -13
  359. package/ngcc/src/writing/in_place_file_writer.js +0 -90
  360. package/ngcc/src/writing/new_entry_point_file_writer.js +0 -214
  361. package/ngcc/src/writing/package_json_updater.js +0 -182
  362. package/src/diagnostics/translate_diagnostics.js +0 -61
  363. package/src/diagnostics/typescript_version.js +0 -96
  364. package/src/extract_i18n.js +0 -62
  365. package/src/language_services.js +0 -34
  366. package/src/main.js +0 -210
  367. package/src/metadata/bundle_index_host.js +0 -133
  368. package/src/metadata/bundler.js +0 -624
  369. package/src/metadata/collector.js +0 -799
  370. package/src/metadata/evaluator.js +0 -677
  371. package/src/metadata/index.js +0 -24
  372. package/src/metadata/index_writer.js +0 -80
  373. package/src/metadata/schema.js +0 -136
  374. package/src/metadata/symbols.js +0 -149
  375. package/src/ngtsc/annotations/index.js +0 -35
  376. package/src/ngtsc/annotations/src/api.js +0 -20
  377. package/src/ngtsc/annotations/src/component.js +0 -1338
  378. package/src/ngtsc/annotations/src/diagnostics.js +0 -174
  379. package/src/ngtsc/annotations/src/directive.js +0 -724
  380. package/src/ngtsc/annotations/src/factory.js +0 -32
  381. package/src/ngtsc/annotations/src/injectable.js +0 -284
  382. package/src/ngtsc/annotations/src/metadata.js +0 -160
  383. package/src/ngtsc/annotations/src/ng_module.js +0 -671
  384. package/src/ngtsc/annotations/src/pipe.js +0 -171
  385. package/src/ngtsc/annotations/src/references_registry.js +0 -38
  386. package/src/ngtsc/annotations/src/util.js +0 -566
  387. package/src/ngtsc/core/api/index.js +0 -25
  388. package/src/ngtsc/core/api/src/adapter.js +0 -20
  389. package/src/ngtsc/core/api/src/interfaces.js +0 -20
  390. package/src/ngtsc/core/api/src/options.js +0 -20
  391. package/src/ngtsc/core/api/src/public_options.js +0 -20
  392. package/src/ngtsc/core/index.js +0 -25
  393. package/src/ngtsc/core/src/compiler.js +0 -1105
  394. package/src/ngtsc/core/src/host.js +0 -273
  395. package/src/ngtsc/cycles/index.js +0 -26
  396. package/src/ngtsc/cycles/src/analyzer.js +0 -163
  397. package/src/ngtsc/cycles/src/imports.js +0 -175
  398. package/src/ngtsc/diagnostics/index.js +0 -33
  399. package/src/ngtsc/diagnostics/src/error.js +0 -69
  400. package/src/ngtsc/diagnostics/src/error_code.js +0 -235
  401. package/src/ngtsc/diagnostics/src/util.js +0 -35
  402. package/src/ngtsc/entry_point/index.js +0 -29
  403. package/src/ngtsc/entry_point/src/generator.js +0 -45
  404. package/src/ngtsc/entry_point/src/logic.js +0 -61
  405. package/src/ngtsc/entry_point/src/private_export_checker.js +0 -137
  406. package/src/ngtsc/entry_point/src/reference_graph.js +0 -91
  407. package/src/ngtsc/file_system/index.js +0 -45
  408. package/src/ngtsc/file_system/src/compiler_host.js +0 -80
  409. package/src/ngtsc/file_system/src/helpers.js +0 -135
  410. package/src/ngtsc/file_system/src/invalid_file_system.js +0 -120
  411. package/src/ngtsc/file_system/src/logical.js +0 -100
  412. package/src/ngtsc/file_system/src/node_js_file_system.js +0 -179
  413. package/src/ngtsc/file_system/src/types.js +0 -20
  414. package/src/ngtsc/file_system/src/util.js +0 -38
  415. package/src/ngtsc/file_system/testing/index.d.ts +0 -13
  416. package/src/ngtsc/file_system/testing/index.js +0 -32
  417. package/src/ngtsc/file_system/testing/src/mock_file_system.d.ts +0 -72
  418. package/src/ngtsc/file_system/testing/src/mock_file_system.js +0 -333
  419. package/src/ngtsc/file_system/testing/src/mock_file_system_native.d.ts +0 -16
  420. package/src/ngtsc/file_system/testing/src/mock_file_system_native.js +0 -85
  421. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.d.ts +0 -13
  422. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.js +0 -68
  423. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.d.ts +0 -13
  424. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.js +0 -68
  425. package/src/ngtsc/file_system/testing/src/test_helper.d.ts +0 -17
  426. package/src/ngtsc/file_system/testing/src/test_helper.js +0 -143
  427. package/src/ngtsc/imports/index.js +0 -43
  428. package/src/ngtsc/imports/src/alias.js +0 -158
  429. package/src/ngtsc/imports/src/core.js +0 -98
  430. package/src/ngtsc/imports/src/default.js +0 -153
  431. package/src/ngtsc/imports/src/emitter.js +0 -317
  432. package/src/ngtsc/imports/src/find_export.js +0 -82
  433. package/src/ngtsc/imports/src/reexport.js +0 -20
  434. package/src/ngtsc/imports/src/references.js +0 -171
  435. package/src/ngtsc/imports/src/resolver.js +0 -39
  436. package/src/ngtsc/incremental/api.js +0 -20
  437. package/src/ngtsc/incremental/index.js +0 -29
  438. package/src/ngtsc/incremental/semantic_graph/index.js +0 -34
  439. package/src/ngtsc/incremental/semantic_graph/src/api.js +0 -51
  440. package/src/ngtsc/incremental/semantic_graph/src/graph.js +0 -302
  441. package/src/ngtsc/incremental/semantic_graph/src/type_parameters.js +0 -55
  442. package/src/ngtsc/incremental/semantic_graph/src/util.js +0 -111
  443. package/src/ngtsc/incremental/src/dependency_tracking.js +0 -165
  444. package/src/ngtsc/incremental/src/incremental.js +0 -393
  445. package/src/ngtsc/incremental/src/noop.js +0 -26
  446. package/src/ngtsc/incremental/src/state.js +0 -30
  447. package/src/ngtsc/incremental/src/strategy.js +0 -99
  448. package/src/ngtsc/indexer/index.js +0 -27
  449. package/src/ngtsc/indexer/src/api.js +0 -45
  450. package/src/ngtsc/indexer/src/context.js +0 -40
  451. package/src/ngtsc/indexer/src/template.js +0 -324
  452. package/src/ngtsc/indexer/src/transform.js +0 -66
  453. package/src/ngtsc/logging/index.js +0 -25
  454. package/src/ngtsc/logging/src/console_logger.js +0 -75
  455. package/src/ngtsc/logging/src/logger.js +0 -28
  456. package/src/ngtsc/logging/testing/index.js +0 -23
  457. package/src/ngtsc/logging/testing/src/mock_logger.d.ts +0 -20
  458. package/src/ngtsc/logging/testing/src/mock_logger.js +0 -64
  459. package/src/ngtsc/metadata/index.js +0 -39
  460. package/src/ngtsc/metadata/src/api.js +0 -26
  461. package/src/ngtsc/metadata/src/dts.js +0 -168
  462. package/src/ngtsc/metadata/src/inheritance.js +0 -122
  463. package/src/ngtsc/metadata/src/property_mapping.js +0 -244
  464. package/src/ngtsc/metadata/src/registry.js +0 -133
  465. package/src/ngtsc/metadata/src/resource_registry.js +0 -109
  466. package/src/ngtsc/metadata/src/util.js +0 -275
  467. package/src/ngtsc/partial_evaluator/index.js +0 -31
  468. package/src/ngtsc/partial_evaluator/src/builtin.js +0 -125
  469. package/src/ngtsc/partial_evaluator/src/diagnostics.js +0 -193
  470. package/src/ngtsc/partial_evaluator/src/dynamic.js +0 -109
  471. package/src/ngtsc/partial_evaluator/src/interface.js +0 -42
  472. package/src/ngtsc/partial_evaluator/src/interpreter.js +0 -780
  473. package/src/ngtsc/partial_evaluator/src/known_declaration.js +0 -57
  474. package/src/ngtsc/partial_evaluator/src/result.js +0 -72
  475. package/src/ngtsc/partial_evaluator/src/ts_helpers.js +0 -121
  476. package/src/ngtsc/perf/index.js +0 -28
  477. package/src/ngtsc/perf/src/api.js +0 -291
  478. package/src/ngtsc/perf/src/clock.js +0 -31
  479. package/src/ngtsc/perf/src/noop.js +0 -37
  480. package/src/ngtsc/perf/src/recorder.js +0 -143
  481. package/src/ngtsc/program.js +0 -360
  482. package/src/ngtsc/program_driver/index.js +0 -25
  483. package/src/ngtsc/program_driver/src/api.js +0 -36
  484. package/src/ngtsc/program_driver/src/ts_create_program_driver.js +0 -200
  485. package/src/ngtsc/reflection/index.js +0 -36
  486. package/src/ngtsc/reflection/src/host.js +0 -88
  487. package/src/ngtsc/reflection/src/type_to_value.js +0 -259
  488. package/src/ngtsc/reflection/src/typescript.js +0 -640
  489. package/src/ngtsc/reflection/src/util.js +0 -37
  490. package/src/ngtsc/resource/index.js +0 -23
  491. package/src/ngtsc/resource/src/loader.js +0 -285
  492. package/src/ngtsc/scope/index.js +0 -29
  493. package/src/ngtsc/scope/src/api.js +0 -20
  494. package/src/ngtsc/scope/src/component_scope.js +0 -69
  495. package/src/ngtsc/scope/src/dependency.js +0 -201
  496. package/src/ngtsc/scope/src/local.js +0 -665
  497. package/src/ngtsc/scope/src/typecheck.js +0 -120
  498. package/src/ngtsc/shims/api.js +0 -13
  499. package/src/ngtsc/shims/index.js +0 -39
  500. package/src/ngtsc/shims/src/adapter.js +0 -266
  501. package/src/ngtsc/shims/src/expando.js +0 -147
  502. package/src/ngtsc/shims/src/factory_generator.js +0 -292
  503. package/src/ngtsc/shims/src/reference_tagger.js +0 -94
  504. package/src/ngtsc/shims/src/summary_generator.js +0 -101
  505. package/src/ngtsc/shims/src/util.js +0 -41
  506. package/src/ngtsc/sourcemaps/index.js +0 -27
  507. package/src/ngtsc/sourcemaps/src/content_origin.js +0 -48
  508. package/src/ngtsc/sourcemaps/src/raw_source_map.js +0 -13
  509. package/src/ngtsc/sourcemaps/src/segment_marker.js +0 -55
  510. package/src/ngtsc/sourcemaps/src/source_file.js +0 -519
  511. package/src/ngtsc/sourcemaps/src/source_file_loader.js +0 -234
  512. package/src/ngtsc/switch/index.js +0 -23
  513. package/src/ngtsc/switch/src/switch.js +0 -141
  514. package/src/ngtsc/transform/index.js +0 -36
  515. package/src/ngtsc/transform/src/alias.js +0 -46
  516. package/src/ngtsc/transform/src/api.js +0 -76
  517. package/src/ngtsc/transform/src/compilation.js +0 -862
  518. package/src/ngtsc/transform/src/declaration.js +0 -234
  519. package/src/ngtsc/transform/src/trait.js +0 -111
  520. package/src/ngtsc/transform/src/transform.js +0 -333
  521. package/src/ngtsc/transform/src/utils.js +0 -73
  522. package/src/ngtsc/translator/index.js +0 -37
  523. package/src/ngtsc/translator/src/api/ast_factory.js +0 -20
  524. package/src/ngtsc/translator/src/api/import_generator.js +0 -20
  525. package/src/ngtsc/translator/src/context.js +0 -47
  526. package/src/ngtsc/translator/src/import_manager.js +0 -77
  527. package/src/ngtsc/translator/src/translator.js +0 -347
  528. package/src/ngtsc/translator/src/type_translator.js +0 -220
  529. package/src/ngtsc/translator/src/typescript_ast_factory.js +0 -251
  530. package/src/ngtsc/translator/src/typescript_translator.js +0 -34
  531. package/src/ngtsc/tsc_plugin.js +0 -129
  532. package/src/ngtsc/typecheck/api/api.js +0 -20
  533. package/src/ngtsc/typecheck/api/checker.js +0 -44
  534. package/src/ngtsc/typecheck/api/completion.js +0 -29
  535. package/src/ngtsc/typecheck/api/context.js +0 -20
  536. package/src/ngtsc/typecheck/api/index.js +0 -27
  537. package/src/ngtsc/typecheck/api/scope.js +0 -20
  538. package/src/ngtsc/typecheck/api/symbols.js +0 -35
  539. package/src/ngtsc/typecheck/diagnostics/index.js +0 -23
  540. package/src/ngtsc/typecheck/diagnostics/src/diagnostic.js +0 -141
  541. package/src/ngtsc/typecheck/diagnostics/src/id.js +0 -37
  542. package/src/ngtsc/typecheck/extended/api/api.js +0 -124
  543. package/src/ngtsc/typecheck/extended/api/extended_template_checker.js +0 -20
  544. package/src/ngtsc/typecheck/extended/api/index.js +0 -23
  545. package/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box/index.js +0 -52
  546. package/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable/index.js +0 -64
  547. package/src/ngtsc/typecheck/extended/index.js +0 -23
  548. package/src/ngtsc/typecheck/extended/src/extended_template_checker.js +0 -55
  549. package/src/ngtsc/typecheck/index.js +0 -29
  550. package/src/ngtsc/typecheck/src/checker.js +0 -767
  551. package/src/ngtsc/typecheck/src/comments.js +0 -181
  552. package/src/ngtsc/typecheck/src/completion.js +0 -230
  553. package/src/ngtsc/typecheck/src/context.js +0 -424
  554. package/src/ngtsc/typecheck/src/diagnostics.js +0 -114
  555. package/src/ngtsc/typecheck/src/dom.js +0 -87
  556. package/src/ngtsc/typecheck/src/environment.js +0 -160
  557. package/src/ngtsc/typecheck/src/expression.js +0 -417
  558. package/src/ngtsc/typecheck/src/line_mappings.js +0 -77
  559. package/src/ngtsc/typecheck/src/oob.js +0 -181
  560. package/src/ngtsc/typecheck/src/shim.js +0 -52
  561. package/src/ngtsc/typecheck/src/source.js +0 -91
  562. package/src/ngtsc/typecheck/src/tcb_util.js +0 -165
  563. package/src/ngtsc/typecheck/src/template_semantics.js +0 -52
  564. package/src/ngtsc/typecheck/src/template_symbol_builder.js +0 -551
  565. package/src/ngtsc/typecheck/src/ts_util.js +0 -202
  566. package/src/ngtsc/typecheck/src/type_check_block.js +0 -2212
  567. package/src/ngtsc/typecheck/src/type_check_file.js +0 -115
  568. package/src/ngtsc/typecheck/src/type_constructor.js +0 -255
  569. package/src/ngtsc/typecheck/src/type_emitter.js +0 -164
  570. package/src/ngtsc/typecheck/src/type_parameter_emitter.js +0 -115
  571. package/src/ngtsc/util/src/path.js +0 -33
  572. package/src/ngtsc/util/src/typescript.js +0 -176
  573. package/src/ngtsc/util/src/visitor.js +0 -119
  574. package/src/ngtsc/xi18n/index.js +0 -22
  575. package/src/ngtsc/xi18n/src/context.js +0 -20
  576. package/src/perform_compile.js +0 -322
  577. package/src/perform_watch.js +0 -263
  578. package/src/tooling.js +0 -47
  579. package/src/transformers/api.js +0 -42
  580. package/src/transformers/compiler_host.js +0 -623
  581. package/src/transformers/downlevel_decorators_transform.js +0 -611
  582. package/src/transformers/entry_points.js +0 -25
  583. package/src/transformers/i18n.js +0 -76
  584. package/src/transformers/inline_resources.js +0 -287
  585. package/src/transformers/lower_expressions.js +0 -365
  586. package/src/transformers/metadata_cache.js +0 -96
  587. package/src/transformers/metadata_reader.js +0 -120
  588. package/src/transformers/node_emitter.js +0 -637
  589. package/src/transformers/node_emitter_transform.js +0 -88
  590. package/src/transformers/patch_alias_reference_resolution.js +0 -129
  591. package/src/transformers/program.js +0 -998
  592. package/src/transformers/r3_metadata_transform.js +0 -73
  593. package/src/transformers/r3_transform.js +0 -44
  594. package/src/transformers/util.js +0 -122
  595. package/src/typescript_support.js +0 -74
  596. package/src/version.js +0 -28
@@ -1,862 +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/transform/src/compilation", ["require", "exports", "tslib", "typescript", "@angular/compiler-cli/src/ngtsc/diagnostics", "@angular/compiler-cli/src/ngtsc/perf", "@angular/compiler-cli/src/ngtsc/reflection", "@angular/compiler-cli/src/ngtsc/util/src/typescript", "@angular/compiler-cli/src/ngtsc/transform/src/api", "@angular/compiler-cli/src/ngtsc/transform/src/trait"], factory);
15
- }
16
- })(function (require, exports) {
17
- "use strict";
18
- Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.TraitCompiler = void 0;
20
- var tslib_1 = require("tslib");
21
- var ts = require("typescript");
22
- var diagnostics_1 = require("@angular/compiler-cli/src/ngtsc/diagnostics");
23
- var perf_1 = require("@angular/compiler-cli/src/ngtsc/perf");
24
- var reflection_1 = require("@angular/compiler-cli/src/ngtsc/reflection");
25
- var typescript_1 = require("@angular/compiler-cli/src/ngtsc/util/src/typescript");
26
- var api_1 = require("@angular/compiler-cli/src/ngtsc/transform/src/api");
27
- var trait_1 = require("@angular/compiler-cli/src/ngtsc/transform/src/trait");
28
- /**
29
- * The heart of Angular compilation.
30
- *
31
- * The `TraitCompiler` is responsible for processing all classes in the program. Any time a
32
- * `DecoratorHandler` matches a class, a "trait" is created to represent that Angular aspect of the
33
- * class (such as the class having a component definition).
34
- *
35
- * The `TraitCompiler` transitions each trait through the various phases of compilation, culminating
36
- * in the production of `CompileResult`s instructing the compiler to apply various mutations to the
37
- * class (like adding fields or type declarations).
38
- */
39
- var TraitCompiler = /** @class */ (function () {
40
- function TraitCompiler(handlers, reflector, perf, incrementalBuild, compileNonExportedClasses, compilationMode, dtsTransforms, semanticDepGraphUpdater) {
41
- var e_1, _a;
42
- this.handlers = handlers;
43
- this.reflector = reflector;
44
- this.perf = perf;
45
- this.incrementalBuild = incrementalBuild;
46
- this.compileNonExportedClasses = compileNonExportedClasses;
47
- this.compilationMode = compilationMode;
48
- this.dtsTransforms = dtsTransforms;
49
- this.semanticDepGraphUpdater = semanticDepGraphUpdater;
50
- /**
51
- * Maps class declarations to their `ClassRecord`, which tracks the Ivy traits being applied to
52
- * those classes.
53
- */
54
- this.classes = new Map();
55
- /**
56
- * Maps source files to any class declaration(s) within them which have been discovered to contain
57
- * Ivy traits.
58
- */
59
- this.fileToClasses = new Map();
60
- /**
61
- * Tracks which source files have been analyzed but did not contain any traits. This set allows
62
- * the compiler to skip analyzing these files in an incremental rebuild.
63
- */
64
- this.filesWithoutTraits = new Set();
65
- this.reexportMap = new Map();
66
- this.handlersByName = new Map();
67
- try {
68
- for (var handlers_1 = (0, tslib_1.__values)(handlers), handlers_1_1 = handlers_1.next(); !handlers_1_1.done; handlers_1_1 = handlers_1.next()) {
69
- var handler = handlers_1_1.value;
70
- this.handlersByName.set(handler.name, handler);
71
- }
72
- }
73
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
74
- finally {
75
- try {
76
- if (handlers_1_1 && !handlers_1_1.done && (_a = handlers_1.return)) _a.call(handlers_1);
77
- }
78
- finally { if (e_1) throw e_1.error; }
79
- }
80
- }
81
- TraitCompiler.prototype.analyzeSync = function (sf) {
82
- this.analyze(sf, false);
83
- };
84
- TraitCompiler.prototype.analyzeAsync = function (sf) {
85
- return this.analyze(sf, true);
86
- };
87
- TraitCompiler.prototype.analyze = function (sf, preanalyze) {
88
- var e_2, _a;
89
- var _this = this;
90
- // We shouldn't analyze declaration files.
91
- if (sf.isDeclarationFile) {
92
- return undefined;
93
- }
94
- // analyze() really wants to return `Promise<void>|void`, but TypeScript cannot narrow a return
95
- // type of 'void', so `undefined` is used instead.
96
- var promises = [];
97
- var priorWork = this.incrementalBuild.priorAnalysisFor(sf);
98
- if (priorWork !== null) {
99
- this.perf.eventCount(perf_1.PerfEvent.SourceFileReuseAnalysis);
100
- if (priorWork.length > 0) {
101
- try {
102
- for (var priorWork_1 = (0, tslib_1.__values)(priorWork), priorWork_1_1 = priorWork_1.next(); !priorWork_1_1.done; priorWork_1_1 = priorWork_1.next()) {
103
- var priorRecord = priorWork_1_1.value;
104
- this.adopt(priorRecord);
105
- }
106
- }
107
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
108
- finally {
109
- try {
110
- if (priorWork_1_1 && !priorWork_1_1.done && (_a = priorWork_1.return)) _a.call(priorWork_1);
111
- }
112
- finally { if (e_2) throw e_2.error; }
113
- }
114
- this.perf.eventCount(perf_1.PerfEvent.TraitReuseAnalysis, priorWork.length);
115
- }
116
- else {
117
- this.filesWithoutTraits.add(sf);
118
- }
119
- // Skip the rest of analysis, as this file's prior traits are being reused.
120
- return;
121
- }
122
- var visit = function (node) {
123
- if (_this.reflector.isClass(node)) {
124
- _this.analyzeClass(node, preanalyze ? promises : null);
125
- }
126
- ts.forEachChild(node, visit);
127
- };
128
- visit(sf);
129
- if (preanalyze && promises.length > 0) {
130
- return Promise.all(promises).then(function () { return undefined; });
131
- }
132
- else {
133
- return undefined;
134
- }
135
- };
136
- TraitCompiler.prototype.recordFor = function (clazz) {
137
- if (this.classes.has(clazz)) {
138
- return this.classes.get(clazz);
139
- }
140
- else {
141
- return null;
142
- }
143
- };
144
- TraitCompiler.prototype.recordsFor = function (sf) {
145
- var e_3, _a;
146
- if (!this.fileToClasses.has(sf)) {
147
- return null;
148
- }
149
- var records = [];
150
- try {
151
- for (var _b = (0, tslib_1.__values)(this.fileToClasses.get(sf)), _c = _b.next(); !_c.done; _c = _b.next()) {
152
- var clazz = _c.value;
153
- records.push(this.classes.get(clazz));
154
- }
155
- }
156
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
157
- finally {
158
- try {
159
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
160
- }
161
- finally { if (e_3) throw e_3.error; }
162
- }
163
- return records;
164
- };
165
- TraitCompiler.prototype.getAnalyzedRecords = function () {
166
- var e_4, _a, e_5, _b, e_6, _c;
167
- var result = new Map();
168
- try {
169
- for (var _d = (0, tslib_1.__values)(this.fileToClasses), _e = _d.next(); !_e.done; _e = _d.next()) {
170
- var _f = (0, tslib_1.__read)(_e.value, 2), sf = _f[0], classes = _f[1];
171
- var records = [];
172
- try {
173
- for (var classes_1 = (e_5 = void 0, (0, tslib_1.__values)(classes)), classes_1_1 = classes_1.next(); !classes_1_1.done; classes_1_1 = classes_1.next()) {
174
- var clazz = classes_1_1.value;
175
- records.push(this.classes.get(clazz));
176
- }
177
- }
178
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
179
- finally {
180
- try {
181
- if (classes_1_1 && !classes_1_1.done && (_b = classes_1.return)) _b.call(classes_1);
182
- }
183
- finally { if (e_5) throw e_5.error; }
184
- }
185
- result.set(sf, records);
186
- }
187
- }
188
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
189
- finally {
190
- try {
191
- if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
192
- }
193
- finally { if (e_4) throw e_4.error; }
194
- }
195
- try {
196
- for (var _g = (0, tslib_1.__values)(this.filesWithoutTraits), _h = _g.next(); !_h.done; _h = _g.next()) {
197
- var sf = _h.value;
198
- result.set(sf, []);
199
- }
200
- }
201
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
202
- finally {
203
- try {
204
- if (_h && !_h.done && (_c = _g.return)) _c.call(_g);
205
- }
206
- finally { if (e_6) throw e_6.error; }
207
- }
208
- return result;
209
- };
210
- /**
211
- * Import a `ClassRecord` from a previous compilation.
212
- *
213
- * Traits from the `ClassRecord` have accurate metadata, but the `handler` is from the old program
214
- * and needs to be updated (matching is done by name). A new pending trait is created and then
215
- * transitioned to analyzed using the previous analysis. If the trait is in the errored state,
216
- * instead the errors are copied over.
217
- */
218
- TraitCompiler.prototype.adopt = function (priorRecord) {
219
- var e_7, _a;
220
- var record = {
221
- hasPrimaryHandler: priorRecord.hasPrimaryHandler,
222
- hasWeakHandlers: priorRecord.hasWeakHandlers,
223
- metaDiagnostics: priorRecord.metaDiagnostics,
224
- node: priorRecord.node,
225
- traits: [],
226
- };
227
- try {
228
- for (var _b = (0, tslib_1.__values)(priorRecord.traits), _c = _b.next(); !_c.done; _c = _b.next()) {
229
- var priorTrait = _c.value;
230
- var handler = this.handlersByName.get(priorTrait.handler.name);
231
- var trait = trait_1.Trait.pending(handler, priorTrait.detected);
232
- if (priorTrait.state === trait_1.TraitState.Analyzed || priorTrait.state === trait_1.TraitState.Resolved) {
233
- var symbol = this.makeSymbolForTrait(handler, record.node, priorTrait.analysis);
234
- trait = trait.toAnalyzed(priorTrait.analysis, priorTrait.analysisDiagnostics, symbol);
235
- if (trait.analysis !== null && trait.handler.register !== undefined) {
236
- trait.handler.register(record.node, trait.analysis);
237
- }
238
- }
239
- else if (priorTrait.state === trait_1.TraitState.Skipped) {
240
- trait = trait.toSkipped();
241
- }
242
- record.traits.push(trait);
243
- }
244
- }
245
- catch (e_7_1) { e_7 = { error: e_7_1 }; }
246
- finally {
247
- try {
248
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
249
- }
250
- finally { if (e_7) throw e_7.error; }
251
- }
252
- this.classes.set(record.node, record);
253
- var sf = record.node.getSourceFile();
254
- if (!this.fileToClasses.has(sf)) {
255
- this.fileToClasses.set(sf, new Set());
256
- }
257
- this.fileToClasses.get(sf).add(record.node);
258
- };
259
- TraitCompiler.prototype.scanClassForTraits = function (clazz) {
260
- if (!this.compileNonExportedClasses && !this.reflector.isStaticallyExported(clazz)) {
261
- return null;
262
- }
263
- var decorators = this.reflector.getDecoratorsOfDeclaration(clazz);
264
- return this.detectTraits(clazz, decorators);
265
- };
266
- TraitCompiler.prototype.detectTraits = function (clazz, decorators) {
267
- var e_8, _a;
268
- var record = this.recordFor(clazz);
269
- var foundTraits = [];
270
- try {
271
- for (var _b = (0, tslib_1.__values)(this.handlers), _c = _b.next(); !_c.done; _c = _b.next()) {
272
- var handler = _c.value;
273
- var result = handler.detect(clazz, decorators);
274
- if (result === undefined) {
275
- continue;
276
- }
277
- var isPrimaryHandler = handler.precedence === api_1.HandlerPrecedence.PRIMARY;
278
- var isWeakHandler = handler.precedence === api_1.HandlerPrecedence.WEAK;
279
- var trait = trait_1.Trait.pending(handler, result);
280
- foundTraits.push(trait);
281
- if (record === null) {
282
- // This is the first handler to match this class. This path is a fast path through which
283
- // most classes will flow.
284
- record = {
285
- node: clazz,
286
- traits: [trait],
287
- metaDiagnostics: null,
288
- hasPrimaryHandler: isPrimaryHandler,
289
- hasWeakHandlers: isWeakHandler,
290
- };
291
- this.classes.set(clazz, record);
292
- var sf = clazz.getSourceFile();
293
- if (!this.fileToClasses.has(sf)) {
294
- this.fileToClasses.set(sf, new Set());
295
- }
296
- this.fileToClasses.get(sf).add(clazz);
297
- }
298
- else {
299
- // This is at least the second handler to match this class. This is a slower path that some
300
- // classes will go through, which validates that the set of decorators applied to the class
301
- // is valid.
302
- // Validate according to rules as follows:
303
- //
304
- // * WEAK handlers are removed if a non-WEAK handler matches.
305
- // * Only one PRIMARY handler can match at a time. Any other PRIMARY handler matching a
306
- // class with an existing PRIMARY handler is an error.
307
- if (!isWeakHandler && record.hasWeakHandlers) {
308
- // The current handler is not a WEAK handler, but the class has other WEAK handlers.
309
- // Remove them.
310
- record.traits =
311
- record.traits.filter(function (field) { return field.handler.precedence !== api_1.HandlerPrecedence.WEAK; });
312
- record.hasWeakHandlers = false;
313
- }
314
- else if (isWeakHandler && !record.hasWeakHandlers) {
315
- // The current handler is a WEAK handler, but the class has non-WEAK handlers already.
316
- // Drop the current one.
317
- continue;
318
- }
319
- if (isPrimaryHandler && record.hasPrimaryHandler) {
320
- // The class already has a PRIMARY handler, and another one just matched.
321
- record.metaDiagnostics = [{
322
- category: ts.DiagnosticCategory.Error,
323
- code: Number('-99' + diagnostics_1.ErrorCode.DECORATOR_COLLISION),
324
- file: (0, typescript_1.getSourceFile)(clazz),
325
- start: clazz.getStart(undefined, false),
326
- length: clazz.getWidth(),
327
- messageText: 'Two incompatible decorators on class',
328
- }];
329
- record.traits = foundTraits = [];
330
- break;
331
- }
332
- // Otherwise, it's safe to accept the multiple decorators here. Update some of the metadata
333
- // regarding this class.
334
- record.traits.push(trait);
335
- record.hasPrimaryHandler = record.hasPrimaryHandler || isPrimaryHandler;
336
- }
337
- }
338
- }
339
- catch (e_8_1) { e_8 = { error: e_8_1 }; }
340
- finally {
341
- try {
342
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
343
- }
344
- finally { if (e_8) throw e_8.error; }
345
- }
346
- return foundTraits.length > 0 ? foundTraits : null;
347
- };
348
- TraitCompiler.prototype.makeSymbolForTrait = function (handler, decl, analysis) {
349
- if (analysis === null) {
350
- return null;
351
- }
352
- var symbol = handler.symbol(decl, analysis);
353
- if (symbol !== null && this.semanticDepGraphUpdater !== null) {
354
- var isPrimary = handler.precedence === api_1.HandlerPrecedence.PRIMARY;
355
- if (!isPrimary) {
356
- throw new Error("AssertionError: " + handler.name + " returned a symbol but is not a primary handler.");
357
- }
358
- this.semanticDepGraphUpdater.registerSymbol(symbol);
359
- }
360
- return symbol;
361
- };
362
- TraitCompiler.prototype.analyzeClass = function (clazz, preanalyzeQueue) {
363
- var e_9, _a;
364
- var _this = this;
365
- var traits = this.scanClassForTraits(clazz);
366
- if (traits === null) {
367
- // There are no Ivy traits on the class, so it can safely be skipped.
368
- return;
369
- }
370
- var _loop_1 = function (trait) {
371
- var analyze = function () { return _this.analyzeTrait(clazz, trait); };
372
- var preanalysis = null;
373
- if (preanalyzeQueue !== null && trait.handler.preanalyze !== undefined) {
374
- // Attempt to run preanalysis. This could fail with a `FatalDiagnosticError`; catch it if it
375
- // does.
376
- try {
377
- preanalysis = trait.handler.preanalyze(clazz, trait.detected.metadata) || null;
378
- }
379
- catch (err) {
380
- if (err instanceof diagnostics_1.FatalDiagnosticError) {
381
- trait.toAnalyzed(null, [err.toDiagnostic()], null);
382
- return { value: void 0 };
383
- }
384
- else {
385
- throw err;
386
- }
387
- }
388
- }
389
- if (preanalysis !== null) {
390
- preanalyzeQueue.push(preanalysis.then(analyze));
391
- }
392
- else {
393
- analyze();
394
- }
395
- };
396
- try {
397
- for (var traits_1 = (0, tslib_1.__values)(traits), traits_1_1 = traits_1.next(); !traits_1_1.done; traits_1_1 = traits_1.next()) {
398
- var trait = traits_1_1.value;
399
- var state_1 = _loop_1(trait);
400
- if (typeof state_1 === "object")
401
- return state_1.value;
402
- }
403
- }
404
- catch (e_9_1) { e_9 = { error: e_9_1 }; }
405
- finally {
406
- try {
407
- if (traits_1_1 && !traits_1_1.done && (_a = traits_1.return)) _a.call(traits_1);
408
- }
409
- finally { if (e_9) throw e_9.error; }
410
- }
411
- };
412
- TraitCompiler.prototype.analyzeTrait = function (clazz, trait, flags) {
413
- var _a, _b, _c;
414
- if (trait.state !== trait_1.TraitState.Pending) {
415
- throw new Error("Attempt to analyze trait of " + clazz.name.text + " in state " + trait_1.TraitState[trait.state] + " (expected DETECTED)");
416
- }
417
- this.perf.eventCount(perf_1.PerfEvent.TraitAnalyze);
418
- // Attempt analysis. This could fail with a `FatalDiagnosticError`; catch it if it does.
419
- var result;
420
- try {
421
- result = trait.handler.analyze(clazz, trait.detected.metadata, flags);
422
- }
423
- catch (err) {
424
- if (err instanceof diagnostics_1.FatalDiagnosticError) {
425
- trait.toAnalyzed(null, [err.toDiagnostic()], null);
426
- return;
427
- }
428
- else {
429
- throw err;
430
- }
431
- }
432
- var symbol = this.makeSymbolForTrait(trait.handler, clazz, (_a = result.analysis) !== null && _a !== void 0 ? _a : null);
433
- if (result.analysis !== undefined && trait.handler.register !== undefined) {
434
- trait.handler.register(clazz, result.analysis);
435
- }
436
- trait = trait.toAnalyzed((_b = result.analysis) !== null && _b !== void 0 ? _b : null, (_c = result.diagnostics) !== null && _c !== void 0 ? _c : null, symbol);
437
- };
438
- TraitCompiler.prototype.resolve = function () {
439
- var e_10, _a, e_11, _b, e_12, _c;
440
- var _d, _e;
441
- var classes = Array.from(this.classes.keys());
442
- try {
443
- for (var classes_2 = (0, tslib_1.__values)(classes), classes_2_1 = classes_2.next(); !classes_2_1.done; classes_2_1 = classes_2.next()) {
444
- var clazz = classes_2_1.value;
445
- var record = this.classes.get(clazz);
446
- try {
447
- for (var _f = (e_11 = void 0, (0, tslib_1.__values)(record.traits)), _g = _f.next(); !_g.done; _g = _f.next()) {
448
- var trait = _g.value;
449
- var handler = trait.handler;
450
- switch (trait.state) {
451
- case trait_1.TraitState.Skipped:
452
- continue;
453
- case trait_1.TraitState.Pending:
454
- throw new Error("Resolving a trait that hasn't been analyzed: " + clazz.name.text + " / " + Object.getPrototypeOf(trait.handler).constructor.name);
455
- case trait_1.TraitState.Resolved:
456
- throw new Error("Resolving an already resolved trait");
457
- }
458
- if (trait.analysis === null) {
459
- // No analysis results, cannot further process this trait.
460
- continue;
461
- }
462
- if (handler.resolve === undefined) {
463
- // No resolution of this trait needed - it's considered successful by default.
464
- trait = trait.toResolved(null, null);
465
- continue;
466
- }
467
- var result = void 0;
468
- try {
469
- result = handler.resolve(clazz, trait.analysis, trait.symbol);
470
- }
471
- catch (err) {
472
- if (err instanceof diagnostics_1.FatalDiagnosticError) {
473
- trait = trait.toResolved(null, [err.toDiagnostic()]);
474
- continue;
475
- }
476
- else {
477
- throw err;
478
- }
479
- }
480
- trait = trait.toResolved((_d = result.data) !== null && _d !== void 0 ? _d : null, (_e = result.diagnostics) !== null && _e !== void 0 ? _e : null);
481
- if (result.reexports !== undefined) {
482
- var fileName = clazz.getSourceFile().fileName;
483
- if (!this.reexportMap.has(fileName)) {
484
- this.reexportMap.set(fileName, new Map());
485
- }
486
- var fileReexports = this.reexportMap.get(fileName);
487
- try {
488
- for (var _h = (e_12 = void 0, (0, tslib_1.__values)(result.reexports)), _j = _h.next(); !_j.done; _j = _h.next()) {
489
- var reexport = _j.value;
490
- fileReexports.set(reexport.asAlias, [reexport.fromModule, reexport.symbolName]);
491
- }
492
- }
493
- catch (e_12_1) { e_12 = { error: e_12_1 }; }
494
- finally {
495
- try {
496
- if (_j && !_j.done && (_c = _h.return)) _c.call(_h);
497
- }
498
- finally { if (e_12) throw e_12.error; }
499
- }
500
- }
501
- }
502
- }
503
- catch (e_11_1) { e_11 = { error: e_11_1 }; }
504
- finally {
505
- try {
506
- if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
507
- }
508
- finally { if (e_11) throw e_11.error; }
509
- }
510
- }
511
- }
512
- catch (e_10_1) { e_10 = { error: e_10_1 }; }
513
- finally {
514
- try {
515
- if (classes_2_1 && !classes_2_1.done && (_a = classes_2.return)) _a.call(classes_2);
516
- }
517
- finally { if (e_10) throw e_10.error; }
518
- }
519
- };
520
- /**
521
- * Generate type-checking code into the `TypeCheckContext` for any components within the given
522
- * `ts.SourceFile`.
523
- */
524
- TraitCompiler.prototype.typeCheck = function (sf, ctx) {
525
- var e_13, _a, e_14, _b;
526
- if (!this.fileToClasses.has(sf)) {
527
- return;
528
- }
529
- try {
530
- for (var _c = (0, tslib_1.__values)(this.fileToClasses.get(sf)), _d = _c.next(); !_d.done; _d = _c.next()) {
531
- var clazz = _d.value;
532
- var record = this.classes.get(clazz);
533
- try {
534
- for (var _e = (e_14 = void 0, (0, tslib_1.__values)(record.traits)), _f = _e.next(); !_f.done; _f = _e.next()) {
535
- var trait = _f.value;
536
- if (trait.state !== trait_1.TraitState.Resolved) {
537
- continue;
538
- }
539
- else if (trait.handler.typeCheck === undefined) {
540
- continue;
541
- }
542
- if (trait.resolution !== null) {
543
- trait.handler.typeCheck(ctx, clazz, trait.analysis, trait.resolution);
544
- }
545
- }
546
- }
547
- catch (e_14_1) { e_14 = { error: e_14_1 }; }
548
- finally {
549
- try {
550
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
551
- }
552
- finally { if (e_14) throw e_14.error; }
553
- }
554
- }
555
- }
556
- catch (e_13_1) { e_13 = { error: e_13_1 }; }
557
- finally {
558
- try {
559
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
560
- }
561
- finally { if (e_13) throw e_13.error; }
562
- }
563
- };
564
- TraitCompiler.prototype.extendedTemplateCheck = function (sf, extendedTemplateChecker) {
565
- var e_15, _a, e_16, _b;
566
- var classes = this.fileToClasses.get(sf);
567
- if (classes === undefined) {
568
- return [];
569
- }
570
- var diagnostics = [];
571
- try {
572
- for (var classes_3 = (0, tslib_1.__values)(classes), classes_3_1 = classes_3.next(); !classes_3_1.done; classes_3_1 = classes_3.next()) {
573
- var clazz = classes_3_1.value;
574
- if (!(0, reflection_1.isNamedClassDeclaration)(clazz)) {
575
- continue;
576
- }
577
- var record = this.classes.get(clazz);
578
- try {
579
- for (var _c = (e_16 = void 0, (0, tslib_1.__values)(record.traits)), _d = _c.next(); !_d.done; _d = _c.next()) {
580
- var trait = _d.value;
581
- if (trait.handler.extendedTemplateCheck === undefined) {
582
- continue;
583
- }
584
- diagnostics.push.apply(diagnostics, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(trait.handler.extendedTemplateCheck(clazz, extendedTemplateChecker)), false));
585
- }
586
- }
587
- catch (e_16_1) { e_16 = { error: e_16_1 }; }
588
- finally {
589
- try {
590
- if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
591
- }
592
- finally { if (e_16) throw e_16.error; }
593
- }
594
- }
595
- }
596
- catch (e_15_1) { e_15 = { error: e_15_1 }; }
597
- finally {
598
- try {
599
- if (classes_3_1 && !classes_3_1.done && (_a = classes_3.return)) _a.call(classes_3);
600
- }
601
- finally { if (e_15) throw e_15.error; }
602
- }
603
- return diagnostics;
604
- };
605
- TraitCompiler.prototype.index = function (ctx) {
606
- var e_17, _a, e_18, _b;
607
- try {
608
- for (var _c = (0, tslib_1.__values)(this.classes.keys()), _d = _c.next(); !_d.done; _d = _c.next()) {
609
- var clazz = _d.value;
610
- var record = this.classes.get(clazz);
611
- try {
612
- for (var _e = (e_18 = void 0, (0, tslib_1.__values)(record.traits)), _f = _e.next(); !_f.done; _f = _e.next()) {
613
- var trait = _f.value;
614
- if (trait.state !== trait_1.TraitState.Resolved) {
615
- // Skip traits that haven't been resolved successfully.
616
- continue;
617
- }
618
- else if (trait.handler.index === undefined) {
619
- // Skip traits that don't affect indexing.
620
- continue;
621
- }
622
- if (trait.resolution !== null) {
623
- trait.handler.index(ctx, clazz, trait.analysis, trait.resolution);
624
- }
625
- }
626
- }
627
- catch (e_18_1) { e_18 = { error: e_18_1 }; }
628
- finally {
629
- try {
630
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
631
- }
632
- finally { if (e_18) throw e_18.error; }
633
- }
634
- }
635
- }
636
- catch (e_17_1) { e_17 = { error: e_17_1 }; }
637
- finally {
638
- try {
639
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
640
- }
641
- finally { if (e_17) throw e_17.error; }
642
- }
643
- };
644
- TraitCompiler.prototype.xi18n = function (bundle) {
645
- var e_19, _a, e_20, _b;
646
- try {
647
- for (var _c = (0, tslib_1.__values)(this.classes.keys()), _d = _c.next(); !_d.done; _d = _c.next()) {
648
- var clazz = _d.value;
649
- var record = this.classes.get(clazz);
650
- try {
651
- for (var _e = (e_20 = void 0, (0, tslib_1.__values)(record.traits)), _f = _e.next(); !_f.done; _f = _e.next()) {
652
- var trait = _f.value;
653
- if (trait.state !== trait_1.TraitState.Analyzed && trait.state !== trait_1.TraitState.Resolved) {
654
- // Skip traits that haven't been analyzed successfully.
655
- continue;
656
- }
657
- else if (trait.handler.xi18n === undefined) {
658
- // Skip traits that don't support xi18n.
659
- continue;
660
- }
661
- if (trait.analysis !== null) {
662
- trait.handler.xi18n(bundle, clazz, trait.analysis);
663
- }
664
- }
665
- }
666
- catch (e_20_1) { e_20 = { error: e_20_1 }; }
667
- finally {
668
- try {
669
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
670
- }
671
- finally { if (e_20) throw e_20.error; }
672
- }
673
- }
674
- }
675
- catch (e_19_1) { e_19 = { error: e_19_1 }; }
676
- finally {
677
- try {
678
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
679
- }
680
- finally { if (e_19) throw e_19.error; }
681
- }
682
- };
683
- TraitCompiler.prototype.updateResources = function (clazz) {
684
- var e_21, _a;
685
- if (!this.reflector.isClass(clazz) || !this.classes.has(clazz)) {
686
- return;
687
- }
688
- var record = this.classes.get(clazz);
689
- try {
690
- for (var _b = (0, tslib_1.__values)(record.traits), _c = _b.next(); !_c.done; _c = _b.next()) {
691
- var trait = _c.value;
692
- if (trait.state !== trait_1.TraitState.Resolved || trait.handler.updateResources === undefined) {
693
- continue;
694
- }
695
- trait.handler.updateResources(clazz, trait.analysis, trait.resolution);
696
- }
697
- }
698
- catch (e_21_1) { e_21 = { error: e_21_1 }; }
699
- finally {
700
- try {
701
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
702
- }
703
- finally { if (e_21) throw e_21.error; }
704
- }
705
- };
706
- TraitCompiler.prototype.compile = function (clazz, constantPool) {
707
- var e_22, _a;
708
- var original = ts.getOriginalNode(clazz);
709
- if (!this.reflector.isClass(clazz) || !this.reflector.isClass(original) ||
710
- !this.classes.has(original)) {
711
- return null;
712
- }
713
- var record = this.classes.get(original);
714
- var res = [];
715
- var _loop_2 = function (trait) {
716
- var e_23, _d;
717
- if (trait.state !== trait_1.TraitState.Resolved || trait.analysisDiagnostics !== null ||
718
- trait.resolveDiagnostics !== null) {
719
- return "continue";
720
- }
721
- // `trait.resolution` is non-null asserted here because TypeScript does not recognize that
722
- // `Readonly<unknown>` is nullable (as `unknown` itself is nullable) due to the way that
723
- // `Readonly` works.
724
- var compileRes = void 0;
725
- if (this_1.compilationMode === api_1.CompilationMode.PARTIAL &&
726
- trait.handler.compilePartial !== undefined) {
727
- compileRes = trait.handler.compilePartial(clazz, trait.analysis, trait.resolution);
728
- }
729
- else {
730
- compileRes =
731
- trait.handler.compileFull(clazz, trait.analysis, trait.resolution, constantPool);
732
- }
733
- var compileMatchRes = compileRes;
734
- if (Array.isArray(compileMatchRes)) {
735
- var _loop_3 = function (result) {
736
- if (!res.some(function (r) { return r.name === result.name; })) {
737
- res.push(result);
738
- }
739
- };
740
- try {
741
- for (var compileMatchRes_1 = (e_23 = void 0, (0, tslib_1.__values)(compileMatchRes)), compileMatchRes_1_1 = compileMatchRes_1.next(); !compileMatchRes_1_1.done; compileMatchRes_1_1 = compileMatchRes_1.next()) {
742
- var result = compileMatchRes_1_1.value;
743
- _loop_3(result);
744
- }
745
- }
746
- catch (e_23_1) { e_23 = { error: e_23_1 }; }
747
- finally {
748
- try {
749
- if (compileMatchRes_1_1 && !compileMatchRes_1_1.done && (_d = compileMatchRes_1.return)) _d.call(compileMatchRes_1);
750
- }
751
- finally { if (e_23) throw e_23.error; }
752
- }
753
- }
754
- else if (!res.some(function (result) { return result.name === compileMatchRes.name; })) {
755
- res.push(compileMatchRes);
756
- }
757
- };
758
- var this_1 = this;
759
- try {
760
- for (var _b = (0, tslib_1.__values)(record.traits), _c = _b.next(); !_c.done; _c = _b.next()) {
761
- var trait = _c.value;
762
- _loop_2(trait);
763
- }
764
- }
765
- catch (e_22_1) { e_22 = { error: e_22_1 }; }
766
- finally {
767
- try {
768
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
769
- }
770
- finally { if (e_22) throw e_22.error; }
771
- }
772
- // Look up the .d.ts transformer for the input file and record that at least one field was
773
- // generated, which will allow the .d.ts to be transformed later.
774
- this.dtsTransforms.getIvyDeclarationTransform(original.getSourceFile())
775
- .addFields(original, res);
776
- // Return the instruction to the transformer so the fields will be added.
777
- return res.length > 0 ? res : null;
778
- };
779
- TraitCompiler.prototype.decoratorsFor = function (node) {
780
- var e_24, _a;
781
- var original = ts.getOriginalNode(node);
782
- if (!this.reflector.isClass(original) || !this.classes.has(original)) {
783
- return [];
784
- }
785
- var record = this.classes.get(original);
786
- var decorators = [];
787
- try {
788
- for (var _b = (0, tslib_1.__values)(record.traits), _c = _b.next(); !_c.done; _c = _b.next()) {
789
- var trait = _c.value;
790
- if (trait.state !== trait_1.TraitState.Resolved) {
791
- continue;
792
- }
793
- if (trait.detected.trigger !== null && ts.isDecorator(trait.detected.trigger)) {
794
- decorators.push(trait.detected.trigger);
795
- }
796
- }
797
- }
798
- catch (e_24_1) { e_24 = { error: e_24_1 }; }
799
- finally {
800
- try {
801
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
802
- }
803
- finally { if (e_24) throw e_24.error; }
804
- }
805
- return decorators;
806
- };
807
- Object.defineProperty(TraitCompiler.prototype, "diagnostics", {
808
- get: function () {
809
- var e_25, _a, e_26, _b;
810
- var diagnostics = [];
811
- try {
812
- for (var _c = (0, tslib_1.__values)(this.classes.keys()), _d = _c.next(); !_d.done; _d = _c.next()) {
813
- var clazz = _d.value;
814
- var record = this.classes.get(clazz);
815
- if (record.metaDiagnostics !== null) {
816
- diagnostics.push.apply(diagnostics, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(record.metaDiagnostics), false));
817
- }
818
- try {
819
- for (var _e = (e_26 = void 0, (0, tslib_1.__values)(record.traits)), _f = _e.next(); !_f.done; _f = _e.next()) {
820
- var trait = _f.value;
821
- if ((trait.state === trait_1.TraitState.Analyzed || trait.state === trait_1.TraitState.Resolved) &&
822
- trait.analysisDiagnostics !== null) {
823
- diagnostics.push.apply(diagnostics, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(trait.analysisDiagnostics), false));
824
- }
825
- if (trait.state === trait_1.TraitState.Resolved && trait.resolveDiagnostics !== null) {
826
- diagnostics.push.apply(diagnostics, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(trait.resolveDiagnostics), false));
827
- }
828
- }
829
- }
830
- catch (e_26_1) { e_26 = { error: e_26_1 }; }
831
- finally {
832
- try {
833
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
834
- }
835
- finally { if (e_26) throw e_26.error; }
836
- }
837
- }
838
- }
839
- catch (e_25_1) { e_25 = { error: e_25_1 }; }
840
- finally {
841
- try {
842
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
843
- }
844
- finally { if (e_25) throw e_25.error; }
845
- }
846
- return diagnostics;
847
- },
848
- enumerable: false,
849
- configurable: true
850
- });
851
- Object.defineProperty(TraitCompiler.prototype, "exportStatements", {
852
- get: function () {
853
- return this.reexportMap;
854
- },
855
- enumerable: false,
856
- configurable: true
857
- });
858
- return TraitCompiler;
859
- }());
860
- exports.TraitCompiler = TraitCompiler;
861
- });
862
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3RyYW5zZm9ybS9zcmMvY29tcGlsYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7OztJQUdILCtCQUFpQztJQUVqQywyRUFBa0U7SUFJbEUsNkRBQW1EO0lBQ25ELHlFQUF1SDtJQUd2SCxrRkFBb0U7SUFHcEUseUVBQXVJO0lBRXZJLDZFQUF3RDtJQXFDeEQ7Ozs7Ozs7Ozs7T0FVRztJQUNIO1FBd0JFLHVCQUNZLFFBQTRFLEVBQzVFLFNBQXlCLEVBQVUsSUFBa0IsRUFDckQsZ0JBQXdELEVBQ3hELHlCQUFrQyxFQUFVLGVBQWdDLEVBQzVFLGFBQW1DLEVBQ25DLHVCQUFxRDs7WUFMckQsYUFBUSxHQUFSLFFBQVEsQ0FBb0U7WUFDNUUsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7WUFBVSxTQUFJLEdBQUosSUFBSSxDQUFjO1lBQ3JELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBd0M7WUFDeEQsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUFTO1lBQVUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1lBQzVFLGtCQUFhLEdBQWIsYUFBYSxDQUFzQjtZQUNuQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQThCO1lBN0JqRTs7O2VBR0c7WUFDSyxZQUFPLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7WUFFM0Q7OztlQUdHO1lBQ08sa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBd0MsQ0FBQztZQUUxRTs7O2VBR0c7WUFDTyx1QkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBaUIsQ0FBQztZQUVoRCxnQkFBVyxHQUFHLElBQUksR0FBRyxFQUF5QyxDQUFDO1lBRS9ELG1CQUFjLEdBQ2xCLElBQUksR0FBRyxFQUE0RSxDQUFDOztnQkFTdEYsS0FBc0IsSUFBQSxhQUFBLHNCQUFBLFFBQVEsQ0FBQSxrQ0FBQSx3REFBRTtvQkFBM0IsSUFBTSxPQUFPLHFCQUFBO29CQUNoQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUNoRDs7Ozs7Ozs7O1FBQ0gsQ0FBQztRQUVELG1DQUFXLEdBQVgsVUFBWSxFQUFpQjtZQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBRUQsb0NBQVksR0FBWixVQUFhLEVBQWlCO1lBQzVCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUlPLCtCQUFPLEdBQWYsVUFBZ0IsRUFBaUIsRUFBRSxVQUFtQjs7WUFBdEQsaUJBMENDO1lBekNDLDBDQUEwQztZQUMxQyxJQUFJLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRTtnQkFDeEIsT0FBTyxTQUFTLENBQUM7YUFDbEI7WUFFRCwrRkFBK0Y7WUFDL0Ysa0RBQWtEO1lBQ2xELElBQU0sUUFBUSxHQUFvQixFQUFFLENBQUM7WUFFckMsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdELElBQUksU0FBUyxLQUFLLElBQUksRUFBRTtnQkFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUV4RCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzt3QkFDeEIsS0FBMEIsSUFBQSxjQUFBLHNCQUFBLFNBQVMsQ0FBQSxvQ0FBQSwyREFBRTs0QkFBaEMsSUFBTSxXQUFXLHNCQUFBOzRCQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO3lCQUN6Qjs7Ozs7Ozs7O29CQUVELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFTLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUN0RTtxQkFBTTtvQkFDTCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUNqQztnQkFFRCwyRUFBMkU7Z0JBQzNFLE9BQU87YUFDUjtZQUVELElBQU0sS0FBSyxHQUFHLFVBQUMsSUFBYTtnQkFDMUIsSUFBSSxLQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDaEMsS0FBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN2RDtnQkFDRCxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMvQixDQUFDLENBQUM7WUFFRixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFVixJQUFJLFVBQVUsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDckMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFNLE9BQUEsU0FBaUIsRUFBakIsQ0FBaUIsQ0FBQyxDQUFDO2FBQzVEO2lCQUFNO2dCQUNMLE9BQU8sU0FBUyxDQUFDO2FBQ2xCO1FBQ0gsQ0FBQztRQUVELGlDQUFTLEdBQVQsVUFBVSxLQUF1QjtZQUMvQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMzQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBRSxDQUFDO2FBQ2pDO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDO2FBQ2I7UUFDSCxDQUFDO1FBRUQsa0NBQVUsR0FBVixVQUFXLEVBQWlCOztZQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxJQUFNLE9BQU8sR0FBa0IsRUFBRSxDQUFDOztnQkFDbEMsS0FBb0IsSUFBQSxLQUFBLHNCQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBRSxDQUFBLGdCQUFBLDRCQUFFO29CQUE1QyxJQUFNLEtBQUssV0FBQTtvQkFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBRSxDQUFDLENBQUM7aUJBQ3hDOzs7Ozs7Ozs7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBRUQsMENBQWtCLEdBQWxCOztZQUNFLElBQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDOztnQkFDdkQsS0FBNEIsSUFBQSxLQUFBLHNCQUFBLElBQUksQ0FBQyxhQUFhLENBQUEsZ0JBQUEsNEJBQUU7b0JBQXJDLElBQUEsS0FBQSxnQ0FBYSxFQUFaLEVBQUUsUUFBQSxFQUFFLE9BQU8sUUFBQTtvQkFDckIsSUFBTSxPQUFPLEdBQWtCLEVBQUUsQ0FBQzs7d0JBQ2xDLEtBQW9CLElBQUEsMkJBQUEsc0JBQUEsT0FBTyxDQUFBLENBQUEsZ0NBQUEscURBQUU7NEJBQXhCLElBQU0sS0FBSyxvQkFBQTs0QkFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBRSxDQUFDLENBQUM7eUJBQ3hDOzs7Ozs7Ozs7b0JBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7aUJBQ3pCOzs7Ozs7Ozs7O2dCQUNELEtBQWlCLElBQUEsS0FBQSxzQkFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUEsZ0JBQUEsNEJBQUU7b0JBQXJDLElBQU0sRUFBRSxXQUFBO29CQUNYLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2lCQUNwQjs7Ozs7Ozs7O1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVEOzs7Ozs7O1dBT0c7UUFDSyw2QkFBSyxHQUFiLFVBQWMsV0FBd0I7O1lBQ3BDLElBQU0sTUFBTSxHQUFnQjtnQkFDMUIsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLGlCQUFpQjtnQkFDaEQsZUFBZSxFQUFFLFdBQVcsQ0FBQyxlQUFlO2dCQUM1QyxlQUFlLEVBQUUsV0FBVyxDQUFDLGVBQWU7Z0JBQzVDLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSTtnQkFDdEIsTUFBTSxFQUFFLEVBQUU7YUFDWCxDQUFDOztnQkFFRixLQUF5QixJQUFBLEtBQUEsc0JBQUEsV0FBVyxDQUFDLE1BQU0sQ0FBQSxnQkFBQSw0QkFBRTtvQkFBeEMsSUFBTSxVQUFVLFdBQUE7b0JBQ25CLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFFLENBQUM7b0JBQ2xFLElBQUksS0FBSyxHQUNMLGFBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFFaEQsSUFBSSxVQUFVLENBQUMsS0FBSyxLQUFLLGtCQUFVLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEtBQUssa0JBQVUsQ0FBQyxRQUFRLEVBQUU7d0JBQ3hGLElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ2xGLEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUN0RixJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTs0QkFDbkUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7eUJBQ3JEO3FCQUNGO3lCQUFNLElBQUksVUFBVSxDQUFDLEtBQUssS0FBSyxrQkFBVSxDQUFDLE9BQU8sRUFBRTt3QkFDbEQsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztxQkFDM0I7b0JBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQzNCOzs7Ozs7Ozs7WUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3RDLElBQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQW9CLENBQUMsQ0FBQzthQUN6RDtZQUNELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVPLDBDQUFrQixHQUExQixVQUEyQixLQUF1QjtZQUVoRCxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDbEYsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFcEUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRVMsb0NBQVksR0FBdEIsVUFBdUIsS0FBdUIsRUFBRSxVQUE0Qjs7WUFFMUUsSUFBSSxNQUFNLEdBQXFCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckQsSUFBSSxXQUFXLEdBQW1FLEVBQUUsQ0FBQzs7Z0JBRXJGLEtBQXNCLElBQUEsS0FBQSxzQkFBQSxJQUFJLENBQUMsUUFBUSxDQUFBLGdCQUFBLDRCQUFFO29CQUFoQyxJQUFNLE9BQU8sV0FBQTtvQkFDaEIsSUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQ2pELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTt3QkFDeEIsU0FBUztxQkFDVjtvQkFFRCxJQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxVQUFVLEtBQUssdUJBQWlCLENBQUMsT0FBTyxDQUFDO29CQUMxRSxJQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsVUFBVSxLQUFLLHVCQUFpQixDQUFDLElBQUksQ0FBQztvQkFDcEUsSUFBTSxLQUFLLEdBQUcsYUFBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBRTdDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBRXhCLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTt3QkFDbkIsd0ZBQXdGO3dCQUN4RiwwQkFBMEI7d0JBQzFCLE1BQU0sR0FBRzs0QkFDUCxJQUFJLEVBQUUsS0FBSzs0QkFDWCxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUM7NEJBQ2YsZUFBZSxFQUFFLElBQUk7NEJBQ3JCLGlCQUFpQixFQUFFLGdCQUFnQjs0QkFDbkMsZUFBZSxFQUFFLGFBQWE7eUJBQy9CLENBQUM7d0JBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUNoQyxJQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7d0JBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTs0QkFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksR0FBRyxFQUFvQixDQUFDLENBQUM7eUJBQ3pEO3dCQUNELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDeEM7eUJBQU07d0JBQ0wsMkZBQTJGO3dCQUMzRiwyRkFBMkY7d0JBQzNGLFlBQVk7d0JBRVosMENBQTBDO3dCQUMxQyxFQUFFO3dCQUNGLDZEQUE2RDt3QkFDN0QsdUZBQXVGO3dCQUN2Rix3REFBd0Q7d0JBRXhELElBQUksQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRTs0QkFDNUMsb0ZBQW9GOzRCQUNwRixlQUFlOzRCQUNmLE1BQU0sQ0FBQyxNQUFNO2dDQUNULE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEtBQUssdUJBQWlCLENBQUMsSUFBSSxFQUFuRCxDQUFtRCxDQUFDLENBQUM7NEJBQ3ZGLE1BQU0sQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO3lCQUNoQzs2QkFBTSxJQUFJLGFBQWEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUU7NEJBQ25ELHNGQUFzRjs0QkFDdEYsd0JBQXdCOzRCQUN4QixTQUFTO3lCQUNWO3dCQUVELElBQUksZ0JBQWdCLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFOzRCQUNoRCx5RUFBeUU7NEJBQ3pFLE1BQU0sQ0FBQyxlQUFlLEdBQUcsQ0FBQztvQ0FDeEIsUUFBUSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLO29DQUNyQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssR0FBRyx1QkFBUyxDQUFDLG1CQUFtQixDQUFDO29DQUNuRCxJQUFJLEVBQUUsSUFBQSwwQkFBYSxFQUFDLEtBQUssQ0FBQztvQ0FDMUIsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQztvQ0FDdkMsTUFBTSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUU7b0NBQ3hCLFdBQVcsRUFBRSxzQ0FBc0M7aUNBQ3BELENBQUMsQ0FBQzs0QkFDSCxNQUFNLENBQUMsTUFBTSxHQUFHLFdBQVcsR0FBRyxFQUFFLENBQUM7NEJBQ2pDLE1BQU07eUJBQ1A7d0JBRUQsMkZBQTJGO3dCQUMzRix3QkFBd0I7d0JBQ3hCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUMxQixNQUFNLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixJQUFJLGdCQUFnQixDQUFDO3FCQUN6RTtpQkFDRjs7Ozs7Ozs7O1lBRUQsT0FBTyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDckQsQ0FBQztRQUVPLDBDQUFrQixHQUExQixVQUNJLE9BQXlFLEVBQ3pFLElBQXNCLEVBQUUsUUFBZ0M7WUFDMUQsSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFO2dCQUNyQixPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsSUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDOUMsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyx1QkFBdUIsS0FBSyxJQUFJLEVBQUU7Z0JBQzVELElBQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxVQUFVLEtBQUssdUJBQWlCLENBQUMsT0FBTyxDQUFDO2dCQUNuRSxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUNkLE1BQU0sSUFBSSxLQUFLLENBQ1gscUJBQW1CLE9BQU8sQ0FBQyxJQUFJLHFEQUFrRCxDQUFDLENBQUM7aUJBQ3hGO2dCQUNELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDckQ7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBRVMsb0NBQVksR0FBdEIsVUFBdUIsS0FBdUIsRUFBRSxlQUFxQzs7WUFBckYsaUJBZ0NDO1lBL0JDLElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU5QyxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7Z0JBQ25CLHFFQUFxRTtnQkFDckUsT0FBTzthQUNSO29DQUVVLEtBQUs7Z0JBQ2QsSUFBTSxPQUFPLEdBQUcsY0FBTSxPQUFBLEtBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUEvQixDQUErQixDQUFDO2dCQUV0RCxJQUFJLFdBQVcsR0FBdUIsSUFBSSxDQUFDO2dCQUMzQyxJQUFJLGVBQWUsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO29CQUN0RSw0RkFBNEY7b0JBQzVGLFFBQVE7b0JBQ1IsSUFBSTt3QkFDRixXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDO3FCQUNoRjtvQkFBQyxPQUFPLEdBQUcsRUFBRTt3QkFDWixJQUFJLEdBQUcsWUFBWSxrQ0FBb0IsRUFBRTs0QkFDdkMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzs7eUJBRXBEOzZCQUFNOzRCQUNMLE1BQU0sR0FBRyxDQUFDO3lCQUNYO3FCQUNGO2lCQUNGO2dCQUNELElBQUksV0FBVyxLQUFLLElBQUksRUFBRTtvQkFDeEIsZUFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2lCQUNsRDtxQkFBTTtvQkFDTCxPQUFPLEVBQUUsQ0FBQztpQkFDWDs7O2dCQXRCSCxLQUFvQixJQUFBLFdBQUEsc0JBQUEsTUFBTSxDQUFBLDhCQUFBO29CQUFyQixJQUFNLEtBQUssbUJBQUE7MENBQUwsS0FBSzs7O2lCQXVCZjs7Ozs7Ozs7O1FBQ0gsQ0FBQztRQUVTLG9DQUFZLEdBQXRCLFVBQ0ksS0FBdUIsRUFBRSxLQUE0RCxFQUNyRixLQUFvQjs7WUFDdEIsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLGtCQUFVLENBQUMsT0FBTyxFQUFFO2dCQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUErQixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksa0JBQzFELGtCQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyx5QkFBc0IsQ0FBQyxDQUFDO2FBQ3BEO1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUU3Qyx3RkFBd0Y7WUFDeEYsSUFBSSxNQUErQixDQUFDO1lBQ3BDLElBQUk7Z0JBQ0YsTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN2RTtZQUFDLE9BQU8sR0FBRyxFQUFFO2dCQUNaLElBQUksR0FBRyxZQUFZLGtDQUFvQixFQUFFO29CQUN2QyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNuRCxPQUFPO2lCQUNSO3FCQUFNO29CQUNMLE1BQU0sR0FBRyxDQUFDO2lCQUNYO2FBQ0Y7WUFFRCxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBQSxNQUFNLENBQUMsUUFBUSxtQ0FBSSxJQUFJLENBQUMsQ0FBQztZQUN0RixJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtnQkFDekUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNoRDtZQUNELEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQUEsTUFBTSxDQUFDLFFBQVEsbUNBQUksSUFBSSxFQUFFLE1BQUEsTUFBTSxDQUFDLFdBQVcsbUNBQUksSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFFRCwrQkFBTyxHQUFQOzs7WUFDRSxJQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQzs7Z0JBQ2hELEtBQW9CLElBQUEsWUFBQSxzQkFBQSxPQUFPLENBQUEsZ0NBQUEscURBQUU7b0JBQXhCLElBQU0sS0FBSyxvQkFBQTtvQkFDZCxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUUsQ0FBQzs7d0JBQ3hDLEtBQWtCLElBQUEscUJBQUEsc0JBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQSxDQUFBLGdCQUFBLDRCQUFFOzRCQUE1QixJQUFJLEtBQUssV0FBQTs0QkFDWixJQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDOzRCQUM5QixRQUFRLEtBQUssQ0FBQyxLQUFLLEVBQUU7Z0NBQ25CLEtBQUssa0JBQVUsQ0FBQyxPQUFPO29DQUNyQixTQUFTO2dDQUNYLEtBQUssa0JBQVUsQ0FBQyxPQUFPO29DQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFnRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksV0FDM0UsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQU0sQ0FBQyxDQUFDO2dDQUMvRCxLQUFLLGtCQUFVLENBQUMsUUFBUTtvQ0FDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDOzZCQUMxRDs0QkFFRCxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO2dDQUMzQiwwREFBMEQ7Z0NBQzFELFNBQVM7NkJBQ1Y7NEJBRUQsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtnQ0FDakMsOEVBQThFO2dDQUM5RSxLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0NBQ3JDLFNBQVM7NkJBQ1Y7NEJBRUQsSUFBSSxNQUFNLFNBQXdCLENBQUM7NEJBQ25DLElBQUk7Z0NBQ0YsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUE2QixFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzs2QkFDcEY7NEJBQUMsT0FBTyxHQUFHLEVBQUU7Z0NBQ1osSUFBSSxHQUFHLFlBQVksa0NBQW9CLEVBQUU7b0NBQ3ZDLEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0NBQ3JELFNBQVM7aUNBQ1Y7cUNBQU07b0NBQ0wsTUFBTSxHQUFHLENBQUM7aUNBQ1g7NkJBQ0Y7NEJBRUQsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBQSxNQUFNLENBQUMsSUFBSSxtQ0FBSSxJQUFJLEVBQUUsTUFBQSxNQUFNLENBQUMsV0FBVyxtQ0FBSSxJQUFJLENBQUMsQ0FBQzs0QkFFMUUsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtnQ0FDbEMsSUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQ0FDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO29DQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxHQUFHLEVBQTRCLENBQUMsQ0FBQztpQ0FDckU7Z0NBQ0QsSUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFFLENBQUM7O29DQUN0RCxLQUF1QixJQUFBLHFCQUFBLHNCQUFBLE1BQU0sQ0FBQyxTQUFTLENBQUEsQ0FBQSxnQkFBQSw0QkFBRTt3Q0FBcEMsSUFBTSxRQUFRLFdBQUE7d0NBQ2pCLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7cUNBQ2pGOzs7Ozs7Ozs7NkJBQ0Y7eUJBQ0Y7Ozs7Ozs7OztpQkFDRjs7Ozs7Ozs7O1FBQ0gsQ0FBQztRQUVEOzs7V0FHRztRQUNILGlDQUFTLEdBQVQsVUFBVSxFQUFpQixFQUFFLEdBQXFCOztZQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQy9CLE9BQU87YUFDUjs7Z0JBRUQsS0FBb0IsSUFBQSxLQUFBLHNCQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBRSxDQUFBLGdCQUFBLDRCQUFFO29CQUE1QyxJQUFNLEtBQUssV0FBQTtvQkFDZCxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUUsQ0FBQzs7d0JBQ3hDLEtBQW9CLElBQUEscUJBQUEsc0JBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQSxDQUFBLGdCQUFBLDRCQUFFOzRCQUE5QixJQUFNLEtBQUssV0FBQTs0QkFDZCxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssa0JBQVUsQ0FBQyxRQUFRLEVBQUU7Z0NBQ3ZDLFNBQVM7NkJBQ1Y7aUNBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7Z0NBQ2hELFNBQVM7NkJBQ1Y7NEJBQ0QsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRTtnQ0FDN0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQzs2QkFDdkU7eUJBQ0Y7Ozs7Ozs7OztpQkFDRjs7Ozs7Ozs7O1FBQ0gsQ0FBQztRQUVELDZDQUFxQixHQUFyQixVQUFzQixFQUFpQixFQUFFLHVCQUFnRDs7WUFFdkYsSUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0MsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO2dCQUN6QixPQUFPLEVBQUUsQ0FBQzthQUNYO1lBRUQsSUFBTSxXQUFXLEdBQW9CLEVBQUUsQ0FBQzs7Z0JBQ3hDLEtBQW9CLElBQUEsWUFBQSxzQkFBQSxPQUFPLENBQUEsZ0NBQUEscURBQUU7b0JBQXhCLElBQU0sS0FBSyxvQkFBQTtvQkFDZCxJQUFJLENBQUMsSUFBQSxvQ0FBdUIsRUFBQyxLQUFLLENBQUMsRUFBRTt3QkFDbkMsU0FBUztxQkFDVjtvQkFDRCxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUUsQ0FBQzs7d0JBQ3hDLEtBQW9CLElBQUEscUJBQUEsc0JBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQSxDQUFBLGdCQUFBLDRCQUFFOzRCQUE5QixJQUFNLEtBQUssV0FBQTs0QkFDZCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMscUJBQXFCLEtBQUssU0FBUyxFQUFFO2dDQUNyRCxTQUFTOzZCQUNWOzRCQUNELFdBQVcsQ0FBQyxJQUFJLE9BQWhCLFdBQVcscURBQVMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsdUJBQXVCLENBQUMsV0FBRTt5QkFDMUY7Ozs7Ozs7OztpQkFDRjs7Ozs7Ozs7O1lBQ0QsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztRQUVELDZCQUFLLEdBQUwsVUFBTSxHQUFvQjs7O2dCQUN4QixLQUFvQixJQUFBLEtBQUEsc0JBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQSxnQkFBQSw0QkFBRTtvQkFBcEMsSUFBTSxLQUFLLFdBQUE7b0JBQ2QsSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFFLENBQUM7O3dCQUN4QyxLQUFvQixJQUFBLHFCQUFBLHNCQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUEsQ0FBQSxnQkFBQSw0QkFBRTs0QkFBOUIsSUFBTSxLQUFLLFdBQUE7NEJBQ2QsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLGtCQUFVLENBQUMsUUFBUSxFQUFFO2dDQUN2Qyx1REFBdUQ7Z0NBQ3ZELFNBQVM7NkJBQ1Y7aUNBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7Z0NBQzVDLDBDQUEwQztnQ0FDMUMsU0FBUzs2QkFDVjs0QkFFRCxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO2dDQUM3QixLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzZCQUNuRTt5QkFDRjs7Ozs7Ozs7O2lCQUNGOzs7Ozs7Ozs7UUFDSCxDQUFDO1FBRUQsNkJBQUssR0FBTCxVQUFNLE1BQW9COzs7Z0JBQ3hCLEtBQW9CLElBQUEsS0FBQSxzQkFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFBLGdCQUFBLDRCQUFFO29CQUFwQyxJQUFNLEtBQUssV0FBQTtvQkFDZCxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUUsQ0FBQzs7d0JBQ3hDLEtBQW9CLElBQUEscUJBQUEsc0JBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQSxDQUFBLGdCQUFBLDRCQUFFOzRCQUE5QixJQUFNLEtBQUssV0FBQTs0QkFDZCxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssa0JBQVUsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxrQkFBVSxDQUFDLFFBQVEsRUFBRTtnQ0FDOUUsdURBQXVEO2dDQUN2RCxTQUFTOzZCQUNWO2lDQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO2dDQUM1Qyx3Q0FBd0M7Z0NBQ3hDLFNBQVM7NkJBQ1Y7NEJBRUQsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtnQ0FDM0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7NkJBQ3BEO3lCQUNGOzs7Ozs7Ozs7aUJBQ0Y7Ozs7Ozs7OztRQUNILENBQUM7UUFFRCx1Q0FBZSxHQUFmLFVBQWdCLEtBQXNCOztZQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDOUQsT0FBTzthQUNSO1lBQ0QsSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFFLENBQUM7O2dCQUN4QyxLQUFvQixJQUFBLEtBQUEsc0JBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQSxnQkFBQSw0QkFBRTtvQkFBOUIsSUFBTSxLQUFLLFdBQUE7b0JBQ2QsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLGtCQUFVLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxLQUFLLFNBQVMsRUFBRTt3QkFDdEYsU0FBUztxQkFDVjtvQkFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ3hFOzs7Ozs7Ozs7UUFDSCxDQUFDO1FBRUQsK0JBQU8sR0FBUCxVQUFRLEtBQXNCLEVBQUUsWUFBMEI7O1lBQ3hELElBQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFpQixDQUFDO1lBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDbkUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDL0IsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBRSxDQUFDO1lBRTNDLElBQUksR0FBRyxHQUFvQixFQUFFLENBQUM7b0NBRW5CLEtBQUs7O2dCQUNkLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxrQkFBVSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEtBQUssSUFBSTtvQkFDekUsS0FBSyxDQUFDLGtCQUFrQixLQUFLLElBQUksRUFBRTs7aUJBR3RDO2dCQUVELDBGQUEwRjtnQkFDMUYsd0ZBQXdGO2dCQUN4RixvQkFBb0I7Z0JBRXBCLElBQUksVUFBVSxTQUErQixDQUFDO2dCQUM5QyxJQUFJLE9BQUssZUFBZSxLQUFLLHFCQUFlLENBQUMsT0FBTztvQkFDaEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEtBQUssU0FBUyxFQUFFO29CQUM5QyxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFVBQVcsQ0FBQyxDQUFDO2lCQUNyRjtxQkFBTTtvQkFDTCxVQUFVO3dCQUNOLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxVQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7aUJBQ3ZGO2dCQUVELElBQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQztnQkFDbkMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFOzRDQUN2QixNQUFNO3dCQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxFQUF0QixDQUFzQixDQUFDLEVBQUU7NEJBQzFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7eUJBQ2xCOzs7d0JBSEgsS0FBcUIsSUFBQSxvQ0FBQSxzQkFBQSxlQUFlLENBQUEsQ0FBQSxnREFBQTs0QkFBL0IsSUFBTSxNQUFNLDRCQUFBO29DQUFOLE1BQU07eUJBSWhCOzs7Ozs7Ozs7aUJBQ0Y7cUJBQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBQSxNQUFNLElBQUksT0FBQSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQXBDLENBQW9DLENBQUMsRUFBRTtvQkFDcEUsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDM0I7Ozs7Z0JBN0JILEtBQW9CLElBQUEsS0FBQSxzQkFBQSxNQUFNLENBQUMsTUFBTSxDQUFBLGdCQUFBO29CQUE1QixJQUFNLEtBQUssV0FBQTs0QkFBTCxLQUFLO2lCQThCZjs7Ozs7Ozs7O1lBRUQsMEZBQTBGO1lBQzFGLGlFQUFpRTtZQUNqRSxJQUFJLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDbEUsU0FBUyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUU5Qix5RUFBeUU7WUFDekUsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDckMsQ0FBQztRQUVELHFDQUFhLEdBQWIsVUFBYyxJQUFvQjs7WUFDaEMsSUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQWdCLENBQUM7WUFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3BFLE9BQU8sRUFBRSxDQUFDO2FBQ1g7WUFFRCxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUUsQ0FBQztZQUMzQyxJQUFNLFVBQVUsR0FBbUIsRUFBRSxDQUFDOztnQkFFdEMsS0FBb0IsSUFBQSxLQUFBLHNCQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUEsZ0JBQUEsNEJBQUU7b0JBQTlCLElBQU0sS0FBSyxXQUFBO29CQUNkLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxrQkFBVSxDQUFDLFFBQVEsRUFBRTt3QkFDdkMsU0FBUztxQkFDVjtvQkFFRCxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQzdFLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDekM7aUJBQ0Y7Ozs7Ozs7OztZQUVELE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFFRCxzQkFBSSxzQ0FBVztpQkFBZjs7Z0JBQ0UsSUFBTSxXQUFXLEdBQW9CLEVBQUUsQ0FBQzs7b0JBQ3hDLEtBQW9CLElBQUEsS0FBQSxzQkFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFBLGdCQUFBLDRCQUFFO3dCQUFwQyxJQUFNLEtBQUssV0FBQTt3QkFDZCxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUUsQ0FBQzt3QkFDeEMsSUFBSSxNQUFNLENBQUMsZUFBZSxLQUFLLElBQUksRUFBRTs0QkFDbkMsV0FBVyxDQUFDLElBQUksT0FBaEIsV0FBVyxxREFBUyxNQUFNLENBQUMsZUFBZSxXQUFFO3lCQUM3Qzs7NEJBQ0QsS0FBb0IsSUFBQSxxQkFBQSxzQkFBQSxNQUFNLENBQUMsTUFBTSxDQUFBLENBQUEsZ0JBQUEsNEJBQUU7Z0NBQTlCLElBQU0sS0FBSyxXQUFBO2dDQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLGtCQUFVLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssa0JBQVUsQ0FBQyxRQUFRLENBQUM7b0NBQzVFLEtBQUssQ0FBQyxtQkFBbUIsS0FBSyxJQUFJLEVBQUU7b0NBQ3RDLFdBQVcsQ0FBQyxJQUFJLE9BQWhCLFdBQVcscURBQVMsS0FBSyxDQUFDLG1CQUFtQixXQUFFO2lDQUNoRDtnQ0FDRCxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssa0JBQVUsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLGtCQUFrQixLQUFLLElBQUksRUFBRTtvQ0FDNUUsV0FBVyxDQUFDLElBQUksT0FBaEIsV0FBVyxxREFBUyxLQUFLLENBQUMsa0JBQWtCLFdBQUU7aUNBQy9DOzZCQUNGOzs7Ozs7Ozs7cUJBQ0Y7Ozs7Ozs7OztnQkFDRCxPQUFPLFdBQVcsQ0FBQztZQUNyQixDQUFDOzs7V0FBQTtRQUVELHNCQUFJLDJDQUFnQjtpQkFBcEI7Z0JBQ0UsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzFCLENBQUM7OztXQUFBO1FBQ0gsb0JBQUM7SUFBRCxDQUFDLEFBamxCRCxJQWlsQkM7SUFqbEJZLHNDQUFhIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7Q29uc3RhbnRQb29sfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtFcnJvckNvZGUsIEZhdGFsRGlhZ25vc3RpY0Vycm9yfSBmcm9tICcuLi8uLi9kaWFnbm9zdGljcyc7XG5pbXBvcnQge0luY3JlbWVudGFsQnVpbGR9IGZyb20gJy4uLy4uL2luY3JlbWVudGFsL2FwaSc7XG5pbXBvcnQge1NlbWFudGljRGVwR3JhcGhVcGRhdGVyLCBTZW1hbnRpY1N5bWJvbH0gZnJvbSAnLi4vLi4vaW5jcmVtZW50YWwvc2VtYW50aWNfZ3JhcGgnO1xuaW1wb3J0IHtJbmRleGluZ0NvbnRleHR9IGZyb20gJy4uLy4uL2luZGV4ZXInO1xuaW1wb3J0IHtQZXJmRXZlbnQsIFBlcmZSZWNvcmRlcn0gZnJvbSAnLi4vLi4vcGVyZic7XG5pbXBvcnQge0NsYXNzRGVjbGFyYXRpb24sIERlY2xhcmF0aW9uTm9kZSwgRGVjb3JhdG9yLCBpc05hbWVkQ2xhc3NEZWNsYXJhdGlvbiwgUmVmbGVjdGlvbkhvc3R9IGZyb20gJy4uLy4uL3JlZmxlY3Rpb24nO1xuaW1wb3J0IHtQcm9ncmFtVHlwZUNoZWNrQWRhcHRlciwgVHlwZUNoZWNrQ29udGV4dH0gZnJvbSAnLi4vLi4vdHlwZWNoZWNrL2FwaSc7XG5pbXBvcnQge0V4dGVuZGVkVGVtcGxhdGVDaGVja2VyfSBmcm9tICcuLi8uLi90eXBlY2hlY2svZXh0ZW5kZWQvYXBpJztcbmltcG9ydCB7Z2V0U291cmNlRmlsZSwgaXNFeHBvcnRlZH0gZnJvbSAnLi4vLi4vdXRpbC9zcmMvdHlwZXNjcmlwdCc7XG5pbXBvcnQge1hpMThuQ29udGV4dH0gZnJvbSAnLi4vLi4veGkxOG4nO1xuXG5pbXBvcnQge0FuYWx5c2lzT3V0cHV0LCBDb21waWxhdGlvbk1vZGUsIENvbXBpbGVSZXN1bHQsIERlY29yYXRvckhhbmRsZXIsIEhhbmRsZXJGbGFncywgSGFuZGxlclByZWNlZGVuY2UsIFJlc29sdmVSZXN1bHR9IGZyb20gJy4vYXBpJztcbmltcG9ydCB7RHRzVHJhbnNmb3JtUmVnaXN0cnl9IGZyb20gJy4vZGVjbGFyYXRpb24nO1xuaW1wb3J0IHtQZW5kaW5nVHJhaXQsIFRyYWl0LCBUcmFpdFN0YXRlfSBmcm9tICcuL3RyYWl0JztcblxuXG4vKipcbiAqIFJlY29yZHMgaW5mb3JtYXRpb24gYWJvdXQgYSBzcGVjaWZpYyBjbGFzcyB0aGF0IGhhcyBtYXRjaGVkIHRyYWl0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGFzc1JlY29yZCB7XG4gIC8qKlxuICAgKiBUaGUgYENsYXNzRGVjbGFyYXRpb25gIG9mIHRoZSBjbGFzcyB3aGljaCBoYXMgQW5ndWxhciB0cmFpdHMgYXBwbGllZC5cbiAgICovXG4gIG5vZGU6IENsYXNzRGVjbGFyYXRpb247XG5cbiAgLyoqXG4gICAqIEFsbCB0cmFpdHMgd2hpY2ggbWF0Y2hlZCBvbiB0aGUgY2xhc3MuXG4gICAqL1xuICB0cmFpdHM6IFRyYWl0PHVua25vd24sIHVua25vd24sIFNlbWFudGljU3ltYm9sfG51bGwsIHVua25vd24+W107XG5cbiAgLyoqXG4gICAqIE1ldGEtZGlhZ25vc3RpY3MgYWJvdXQgdGhlIGNsYXNzLCB3aGljaCBhcmUgdXN1YWxseSByZWxhdGVkIHRvIHdoZXRoZXIgY2VydGFpbiBjb21iaW5hdGlvbnMgb2ZcbiAgICogQW5ndWxhciBkZWNvcmF0b3JzIGFyZSBub3QgcGVybWl0dGVkLlxuICAgKi9cbiAgbWV0YURpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW118bnVsbDtcblxuICAvLyBTdWJzZXF1ZW50IGZpZWxkcyBhcmUgXCJpbnRlcm5hbFwiIGFuZCB1c2VkIGR1cmluZyB0aGUgbWF0Y2hpbmcgb2YgYERlY29yYXRvckhhbmRsZXJgcy4gVGhpcyBpc1xuICAvLyBtdXRhYmxlIHN0YXRlIGR1cmluZyB0aGUgYGRldGVjdGAvYGFuYWx5emVgIHBoYXNlcyBvZiBjb21waWxhdGlvbi5cblxuICAvKipcbiAgICogV2hldGhlciBgdHJhaXRzYCBjb250YWlucyB0cmFpdHMgbWF0Y2hlZCBmcm9tIGBEZWNvcmF0b3JIYW5kbGVyYHMgbWFya2VkIGFzIGBXRUFLYC5cbiAgICovXG4gIGhhc1dlYWtIYW5kbGVyczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBgdHJhaXRzYCBjb250YWlucyBhIHRyYWl0IGZyb20gYSBgRGVjb3JhdG9ySGFuZGxlcmAgbWF0Y2hlZCBhcyBgUFJJTUFSWWAuXG4gICAqL1xuICBoYXNQcmltYXJ5SGFuZGxlcjogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgaGVhcnQgb2YgQW5ndWxhciBjb21waWxhdGlvbi5cbiAqXG4gKiBUaGUgYFRyYWl0Q29tcGlsZXJgIGlzIHJlc3BvbnNpYmxlIGZvciBwcm9jZXNzaW5nIGFsbCBjbGFzc2VzIGluIHRoZSBwcm9ncmFtLiBBbnkgdGltZSBhXG4gKiBgRGVjb3JhdG9ySGFuZGxlcmAgbWF0Y2hlcyBhIGNsYXNzLCBhIFwidHJhaXRcIiBpcyBjcmVhdGVkIHRvIHJlcHJlc2VudCB0aGF0IEFuZ3VsYXIgYXNwZWN0IG9mIHRoZVxuICogY2xhc3MgKHN1Y2ggYXMgdGhlIGNsYXNzIGhhdmluZyBhIGNvbXBvbmVudCBkZWZpbml0aW9uKS5cbiAqXG4gKiBUaGUgYFRyYWl0Q29tcGlsZXJgIHRyYW5zaXRpb25zIGVhY2ggdHJhaXQgdGhyb3VnaCB0aGUgdmFyaW91cyBwaGFzZXMgb2YgY29tcGlsYXRpb24sIGN1bG1pbmF0aW5nXG4gKiBpbiB0aGUgcHJvZHVjdGlvbiBvZiBgQ29tcGlsZVJlc3VsdGBzIGluc3RydWN0aW5nIHRoZSBjb21waWxlciB0byBhcHBseSB2YXJpb3VzIG11dGF0aW9ucyB0byB0aGVcbiAqIGNsYXNzIChsaWtlIGFkZGluZyBmaWVsZHMgb3IgdHlwZSBkZWNsYXJhdGlvbnMpLlxuICovXG5leHBvcnQgY2xhc3MgVHJhaXRDb21waWxlciBpbXBsZW1lbnRzIFByb2dyYW1UeXBlQ2hlY2tBZGFwdGVyIHtcbiAgLyoqXG4gICAqIE1hcHMgY2xhc3MgZGVjbGFyYXRpb25zIHRvIHRoZWlyIGBDbGFzc1JlY29yZGAsIHdoaWNoIHRyYWNrcyB0aGUgSXZ5IHRyYWl0cyBiZWluZyBhcHBsaWVkIHRvXG4gICAqIHRob3NlIGNsYXNzZXMuXG4gICAqL1xuICBwcml2YXRlIGNsYXNzZXMgPSBuZXcgTWFwPENsYXNzRGVjbGFyYXRpb24sIENsYXNzUmVjb3JkPigpO1xuXG4gIC8qKlxuICAgKiBNYXBzIHNvdXJjZSBmaWxlcyB0byBhbnkgY2xhc3MgZGVjbGFyYXRpb24ocykgd2l0aGluIHRoZW0gd2hpY2ggaGF2ZSBiZWVuIGRpc2NvdmVyZWQgdG8gY29udGFpblxuICAgKiBJdnkgdHJhaXRzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGZpbGVUb0NsYXNzZXMgPSBuZXcgTWFwPHRzLlNvdXJjZUZpbGUsIFNldDxDbGFzc0RlY2xhcmF0aW9uPj4oKTtcblxuICAvKipcbiAgICogVHJhY2tzIHdoaWNoIHNvdXJjZSBmaWxlcyBoYXZlIGJlZW4gYW5hbHl6ZWQgYnV0IGRpZCBub3QgY29udGFpbiBhbnkgdHJhaXRzLiBUaGlzIHNldCBhbGxvd3NcbiAgICogdGhlIGNvbXBpbGVyIHRvIHNraXAgYW5hbHl6aW5nIHRoZXNlIGZpbGVzIGluIGFuIGluY3JlbWVudGFsIHJlYnVpbGQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZmlsZXNXaXRob3V0VHJhaXRzID0gbmV3IFNldDx0cy5Tb3VyY2VGaWxlPigpO1xuXG4gIHByaXZhdGUgcmVleHBvcnRNYXAgPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgW3N0cmluZywgc3RyaW5nXT4+KCk7XG5cbiAgcHJpdmF0ZSBoYW5kbGVyc0J5TmFtZSA9XG4gICAgICBuZXcgTWFwPHN0cmluZywgRGVjb3JhdG9ySGFuZGxlcjx1bmtub3duLCB1bmtub3duLCBTZW1hbnRpY1N5bWJvbHxudWxsLCB1bmtub3duPj4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgaGFuZGxlcnM6IERlY29yYXRvckhhbmRsZXI8dW5rbm93biwgdW5rbm93biwgU2VtYW50aWNTeW1ib2x8bnVsbCwgdW5rbm93bj5bXSxcbiAgICAgIHByaXZhdGUgcmVmbGVjdG9yOiBSZWZsZWN0aW9uSG9zdCwgcHJpdmF0ZSBwZXJmOiBQZXJmUmVjb3JkZXIsXG4gICAgICBwcml2YXRlIGluY3JlbWVudGFsQnVpbGQ6IEluY3JlbWVudGFsQnVpbGQ8Q2xhc3NSZWNvcmQsIHVua25vd24+LFxuICAgICAgcHJpdmF0ZSBjb21waWxlTm9uRXhwb3J0ZWRDbGFzc2VzOiBib29sZWFuLCBwcml2YXRlIGNvbXBpbGF0aW9uTW9kZTogQ29tcGlsYXRpb25Nb2RlLFxuICAgICAgcHJpdmF0ZSBkdHNUcmFuc2Zvcm1zOiBEdHNUcmFuc2Zvcm1SZWdpc3RyeSxcbiAgICAgIHByaXZhdGUgc2VtYW50aWNEZXBHcmFwaFVwZGF0ZXI6IFNlbWFudGljRGVwR3JhcGhVcGRhdGVyfG51bGwpIHtcbiAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNCeU5hbWUuc2V0KGhhbmRsZXIubmFtZSwgaGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgYW5hbHl6ZVN5bmMoc2Y6IHRzLlNvdXJjZUZpbGUpOiB2b2lkIHtcbiAgICB0aGlzLmFuYWx5emUoc2YsIGZhbHNlKTtcbiAgfVxuXG4gIGFuYWx5emVBc3luYyhzZjogdHMuU291cmNlRmlsZSk6IFByb21pc2U8dm9pZD58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5hbmFseXplKHNmLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgYW5hbHl6ZShzZjogdHMuU291cmNlRmlsZSwgcHJlYW5hbHl6ZTogZmFsc2UpOiB2b2lkO1xuICBwcml2YXRlIGFuYWx5emUoc2Y6IHRzLlNvdXJjZUZpbGUsIHByZWFuYWx5emU6IHRydWUpOiBQcm9taXNlPHZvaWQ+fHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBhbmFseXplKHNmOiB0cy5Tb3VyY2VGaWxlLCBwcmVhbmFseXplOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPnx1bmRlZmluZWQge1xuICAgIC8vIFdlIHNob3VsZG4ndCBhbmFseXplIGRlY2xhcmF0aW9uIGZpbGVzLlxuICAgIGlmIChzZi5pc0RlY2xhcmF0aW9uRmlsZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBhbmFseXplKCkgcmVhbGx5IHdhbnRzIHRvIHJldHVybiBgUHJvbWlzZTx2b2lkPnx2b2lkYCwgYnV0IFR5cGVTY3JpcHQgY2Fubm90IG5hcnJvdyBhIHJldHVyblxuICAgIC8vIHR5cGUgb2YgJ3ZvaWQnLCBzbyBgdW5kZWZpbmVkYCBpcyB1c2VkIGluc3RlYWQuXG4gICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuXG4gICAgY29uc3QgcHJpb3JXb3JrID0gdGhpcy5pbmNyZW1lbnRhbEJ1aWxkLnByaW9yQW5hbHlzaXNGb3Ioc2YpO1xuICAgIGlmIChwcmlvcldvcmsgIT09IG51bGwpIHtcbiAgICAgIHRoaXMucGVyZi5ldmVudENvdW50KFBlcmZFdmVudC5Tb3VyY2VGaWxlUmV1c2VBbmFseXNpcyk7XG5cbiAgICAgIGlmIChwcmlvcldvcmsubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IHByaW9yUmVjb3JkIG9mIHByaW9yV29yaykge1xuICAgICAgICAgIHRoaXMuYWRvcHQocHJpb3JSZWNvcmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wZXJmLmV2ZW50Q291bnQoUGVyZkV2ZW50LlRyYWl0UmV1c2VBbmFseXNpcywgcHJpb3JXb3JrLmxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpbGVzV2l0aG91dFRyYWl0cy5hZGQoc2YpO1xuICAgICAgfVxuXG4gICAgICAvLyBTa2lwIHRoZSByZXN0IG9mIGFuYWx5c2lzLCBhcyB0aGlzIGZpbGUncyBwcmlvciB0cmFpdHMgYXJlIGJlaW5nIHJldXNlZC5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2aXNpdCA9IChub2RlOiB0cy5Ob2RlKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy5yZWZsZWN0b3IuaXNDbGFzcyhub2RlKSkge1xuICAgICAgICB0aGlzLmFuYWx5emVDbGFzcyhub2RlLCBwcmVhbmFseXplID8gcHJvbWlzZXMgOiBudWxsKTtcbiAgICAgIH1cbiAgICAgIHRzLmZvckVhY2hDaGlsZChub2RlLCB2aXNpdCk7XG4gICAgfTtcblxuICAgIHZpc2l0KHNmKTtcblxuICAgIGlmIChwcmVhbmFseXplICYmIHByb21pc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB1bmRlZmluZWQgYXMgdm9pZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcmVjb3JkRm9yKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uKTogQ2xhc3NSZWNvcmR8bnVsbCB7XG4gICAgaWYgKHRoaXMuY2xhc3Nlcy5oYXMoY2xhenopKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGFzc2VzLmdldChjbGF6eikhO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZWNvcmRzRm9yKHNmOiB0cy5Tb3VyY2VGaWxlKTogQ2xhc3NSZWNvcmRbXXxudWxsIHtcbiAgICBpZiAoIXRoaXMuZmlsZVRvQ2xhc3Nlcy5oYXMoc2YpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcmVjb3JkczogQ2xhc3NSZWNvcmRbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY2xhenogb2YgdGhpcy5maWxlVG9DbGFzc2VzLmdldChzZikhKSB7XG4gICAgICByZWNvcmRzLnB1c2godGhpcy5jbGFzc2VzLmdldChjbGF6eikhKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlY29yZHM7XG4gIH1cblxuICBnZXRBbmFseXplZFJlY29yZHMoKTogTWFwPHRzLlNvdXJjZUZpbGUsIENsYXNzUmVjb3JkW10+IHtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgTWFwPHRzLlNvdXJjZUZpbGUsIENsYXNzUmVjb3JkW10+KCk7XG4gICAgZm9yIChjb25zdCBbc2YsIGNsYXNzZXNdIG9mIHRoaXMuZmlsZVRvQ2xhc3Nlcykge1xuICAgICAgY29uc3QgcmVjb3JkczogQ2xhc3NSZWNvcmRbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBjbGF6eiBvZiBjbGFzc2VzKSB7XG4gICAgICAgIHJlY29yZHMucHVzaCh0aGlzLmNsYXNzZXMuZ2V0KGNsYXp6KSEpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnNldChzZiwgcmVjb3Jkcyk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc2Ygb2YgdGhpcy5maWxlc1dpdGhvdXRUcmFpdHMpIHtcbiAgICAgIHJlc3VsdC5zZXQoc2YsIFtdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBgQ2xhc3NSZWNvcmRgIGZyb20gYSBwcmV2aW91cyBjb21waWxhdGlvbi5cbiAgICpcbiAgICogVHJhaXRzIGZyb20gdGhlIGBDbGFzc1JlY29yZGAgaGF2ZSBhY2N1cmF0ZSBtZXRhZGF0YSwgYnV0IHRoZSBgaGFuZGxlcmAgaXMgZnJvbSB0aGUgb2xkIHByb2dyYW1cbiAgICogYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQgKG1hdGNoaW5nIGlzIGRvbmUgYnkgbmFtZSkuIEEgbmV3IHBlbmRpbmcgdHJhaXQgaXMgY3JlYXRlZCBhbmQgdGhlblxuICAgKiB0cmFuc2l0aW9uZWQgdG8gYW5hbHl6ZWQgdXNpbmcgdGhlIHByZXZpb3VzIGFuYWx5c2lzLiBJZiB0aGUgdHJhaXQgaXMgaW4gdGhlIGVycm9yZWQgc3RhdGUsXG4gICAqIGluc3RlYWQgdGhlIGVycm9ycyBhcmUgY29waWVkIG92ZXIuXG4gICAqL1xuICBwcml2YXRlIGFkb3B0KHByaW9yUmVjb3JkOiBDbGFzc1JlY29yZCk6IHZvaWQge1xuICAgIGNvbnN0IHJlY29yZDogQ2xhc3NSZWNvcmQgPSB7XG4gICAgICBoYXNQcmltYXJ5SGFuZGxlcjogcHJpb3JSZWNvcmQuaGFzUHJpbWFyeUhhbmRsZXIsXG4gICAgICBoYXNXZWFrSGFuZGxlcnM6IHByaW9yUmVjb3JkLmhhc1dlYWtIYW5kbGVycyxcbiAgICAgIG1ldGFEaWFnbm9zdGljczogcHJpb3JSZWNvcmQubWV0YURpYWdub3N0aWNzLFxuICAgICAgbm9kZTogcHJpb3JSZWNvcmQubm9kZSxcbiAgICAgIHRyYWl0czogW10sXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgcHJpb3JUcmFpdCBvZiBwcmlvclJlY29yZC50cmFpdHMpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmhhbmRsZXJzQnlOYW1lLmdldChwcmlvclRyYWl0LmhhbmRsZXIubmFtZSkhO1xuICAgICAgbGV0IHRyYWl0OiBUcmFpdDx1bmtub3duLCB1bmtub3duLCBTZW1hbnRpY1N5bWJvbHxudWxsLCB1bmtub3duPiA9XG4gICAgICAgICAgVHJhaXQucGVuZGluZyhoYW5kbGVyLCBwcmlvclRyYWl0LmRldGVjdGVkKTtcblxuICAgICAgaWYgKHByaW9yVHJhaXQuc3RhdGUgPT09IFRyYWl0U3RhdGUuQW5hbHl6ZWQgfHwgcHJpb3JUcmFpdC5zdGF0ZSA9PT0gVHJhaXRTdGF0ZS5SZXNvbHZlZCkge1xuICAgICAgICBjb25zdCBzeW1ib2wgPSB0aGlzLm1ha2VTeW1ib2xGb3JUcmFpdChoYW5kbGVyLCByZWNvcmQubm9kZSwgcHJpb3JUcmFpdC5hbmFseXNpcyk7XG4gICAgICAgIHRyYWl0ID0gdHJhaXQudG9BbmFseXplZChwcmlvclRyYWl0LmFuYWx5c2lzLCBwcmlvclRyYWl0LmFuYWx5c2lzRGlhZ25vc3RpY3MsIHN5bWJvbCk7XG4gICAgICAgIGlmICh0cmFpdC5hbmFseXNpcyAhPT0gbnVsbCAmJiB0cmFpdC5oYW5kbGVyLnJlZ2lzdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0cmFpdC5oYW5kbGVyLnJlZ2lzdGVyKHJlY29yZC5ub2RlLCB0cmFpdC5hbmFseXNpcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocHJpb3JUcmFpdC5zdGF0ZSA9PT0gVHJhaXRTdGF0ZS5Ta2lwcGVkKSB7XG4gICAgICAgIHRyYWl0ID0gdHJhaXQudG9Ta2lwcGVkKCk7XG4gICAgICB9XG5cbiAgICAgIHJlY29yZC50cmFpdHMucHVzaCh0cmFpdCk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGFzc2VzLnNldChyZWNvcmQubm9kZSwgcmVjb3JkKTtcbiAgICBjb25zdCBzZiA9IHJlY29yZC5ub2RlLmdldFNvdXJjZUZpbGUoKTtcbiAgICBpZiAoIXRoaXMuZmlsZVRvQ2xhc3Nlcy5oYXMoc2YpKSB7XG4gICAgICB0aGlzLmZpbGVUb0NsYXNzZXMuc2V0KHNmLCBuZXcgU2V0PENsYXNzRGVjbGFyYXRpb24+KCkpO1xuICAgIH1cbiAgICB0aGlzLmZpbGVUb0NsYXNzZXMuZ2V0KHNmKSEuYWRkKHJlY29yZC5ub2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2NhbkNsYXNzRm9yVHJhaXRzKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uKTpcbiAgICAgIFBlbmRpbmdUcmFpdDx1bmtub3duLCB1bmtub3duLCBTZW1hbnRpY1N5bWJvbHxudWxsLCB1bmtub3duPltdfG51bGwge1xuICAgIGlmICghdGhpcy5jb21waWxlTm9uRXhwb3J0ZWRDbGFzc2VzICYmICF0aGlzLnJlZmxlY3Rvci5pc1N0YXRpY2FsbHlFeHBvcnRlZChjbGF6eikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY29yYXRvcnMgPSB0aGlzLnJlZmxlY3Rvci5nZXREZWNvcmF0b3JzT2ZEZWNsYXJhdGlvbihjbGF6eik7XG5cbiAgICByZXR1cm4gdGhpcy5kZXRlY3RUcmFpdHMoY2xhenosIGRlY29yYXRvcnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRldGVjdFRyYWl0cyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbiwgZGVjb3JhdG9yczogRGVjb3JhdG9yW118bnVsbCk6XG4gICAgICBQZW5kaW5nVHJhaXQ8dW5rbm93biwgdW5rbm93biwgU2VtYW50aWNTeW1ib2x8bnVsbCwgdW5rbm93bj5bXXxudWxsIHtcbiAgICBsZXQgcmVjb3JkOiBDbGFzc1JlY29yZHxudWxsID0gdGhpcy5yZWNvcmRGb3IoY2xhenopO1xuICAgIGxldCBmb3VuZFRyYWl0czogUGVuZGluZ1RyYWl0PHVua25vd24sIHVua25vd24sIFNlbWFudGljU3ltYm9sfG51bGwsIHVua25vd24+W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiB0aGlzLmhhbmRsZXJzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBoYW5kbGVyLmRldGVjdChjbGF6eiwgZGVjb3JhdG9ycyk7XG4gICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzUHJpbWFyeUhhbmRsZXIgPSBoYW5kbGVyLnByZWNlZGVuY2UgPT09IEhhbmRsZXJQcmVjZWRlbmNlLlBSSU1BUlk7XG4gICAgICBjb25zdCBpc1dlYWtIYW5kbGVyID0gaGFuZGxlci5wcmVjZWRlbmNlID09PSBIYW5kbGVyUHJlY2VkZW5jZS5XRUFLO1xuICAgICAgY29uc3QgdHJhaXQgPSBUcmFpdC5wZW5kaW5nKGhhbmRsZXIsIHJlc3VsdCk7XG5cbiAgICAgIGZvdW5kVHJhaXRzLnB1c2godHJhaXQpO1xuXG4gICAgICBpZiAocmVjb3JkID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGhhbmRsZXIgdG8gbWF0Y2ggdGhpcyBjbGFzcy4gVGhpcyBwYXRoIGlzIGEgZmFzdCBwYXRoIHRocm91Z2ggd2hpY2hcbiAgICAgICAgLy8gbW9zdCBjbGFzc2VzIHdpbGwgZmxvdy5cbiAgICAgICAgcmVjb3JkID0ge1xuICAgICAgICAgIG5vZGU6IGNsYXp6LFxuICAgICAgICAgIHRyYWl0czogW3RyYWl0XSxcbiAgICAgICAgICBtZXRhRGlhZ25vc3RpY3M6IG51bGwsXG4gICAgICAgICAgaGFzUHJpbWFyeUhhbmRsZXI6IGlzUHJpbWFyeUhhbmRsZXIsXG4gICAgICAgICAgaGFzV2Vha0hhbmRsZXJzOiBpc1dlYWtIYW5kbGVyLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuY2xhc3Nlcy5zZXQoY2xhenosIHJlY29yZCk7XG4gICAgICAgIGNvbnN0IHNmID0gY2xhenouZ2V0U291cmNlRmlsZSgpO1xuICAgICAgICBpZiAoIXRoaXMuZmlsZVRvQ2xhc3Nlcy5oYXMoc2YpKSB7XG4gICAgICAgICAgdGhpcy5maWxlVG9DbGFzc2VzLnNldChzZiwgbmV3IFNldDxDbGFzc0RlY2xhcmF0aW9uPigpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbGVUb0NsYXNzZXMuZ2V0KHNmKSEuYWRkKGNsYXp6KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYXQgbGVhc3QgdGhlIHNlY29uZCBoYW5kbGVyIHRvIG1hdGNoIHRoaXMgY2xhc3MuIFRoaXMgaXMgYSBzbG93ZXIgcGF0aCB0aGF0IHNvbWVcbiAgICAgICAgLy8gY2xhc3NlcyB3aWxsIGdvIHRocm91Z2gsIHdoaWNoIHZhbGlkYXRlcyB0aGF0IHRoZSBzZXQgb2YgZGVjb3JhdG9ycyBhcHBsaWVkIHRvIHRoZSBjbGFzc1xuICAgICAgICAvLyBpcyB2YWxpZC5cblxuICAgICAgICAvLyBWYWxpZGF0ZSBhY2NvcmRpbmcgdG8gcnVsZXMgYXMgZm9sbG93czpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gKiBXRUFLIGhhbmRsZXJzIGFyZSByZW1vdmVkIGlmIGEgbm9uLVdFQUsgaGFuZGxlciBtYXRjaGVzLlxuICAgICAgICAvLyAqIE9ubHkgb25lIFBSSU1BUlkgaGFuZGxlciBjYW4gbWF0Y2ggYXQgYSB0aW1lLiBBbnkgb3RoZXIgUFJJTUFSWSBoYW5kbGVyIG1hdGNoaW5nIGFcbiAgICAgICAgLy8gICBjbGFzcyB3aXRoIGFuIGV4aXN0aW5nIFBSSU1BUlkgaGFuZGxlciBpcyBhbiBlcnJvci5cblxuICAgICAgICBpZiAoIWlzV2Vha0hhbmRsZXIgJiYgcmVjb3JkLmhhc1dlYWtIYW5kbGVycykge1xuICAgICAgICAgIC8vIFRoZSBjdXJyZW50IGhhbmRsZXIgaXMgbm90IGEgV0VBSyBoYW5kbGVyLCBidXQgdGhlIGNsYXNzIGhhcyBvdGhlciBXRUFLIGhhbmRsZXJzLlxuICAgICAgICAgIC8vIFJlbW92ZSB0aGVtLlxuICAgICAgICAgIHJlY29yZC50cmFpdHMgPVxuICAgICAgICAgICAgICByZWNvcmQudHJhaXRzLmZpbHRlcihmaWVsZCA9PiBmaWVsZC5oYW5kbGVyLnByZWNlZGVuY2UgIT09IEhhbmRsZXJQcmVjZWRlbmNlLldFQUspO1xuICAgICAgICAgIHJlY29yZC5oYXNXZWFrSGFuZGxlcnMgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1dlYWtIYW5kbGVyICYmICFyZWNvcmQuaGFzV2Vha0hhbmRsZXJzKSB7XG4gICAgICAgICAgLy8gVGhlIGN1cnJlbnQgaGFuZGxlciBpcyBhIFdFQUsgaGFuZGxlciwgYnV0IHRoZSBjbGFzcyBoYXMgbm9uLVdFQUsgaGFuZGxlcnMgYWxyZWFkeS5cbiAgICAgICAgICAvLyBEcm9wIHRoZSBjdXJyZW50IG9uZS5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1ByaW1hcnlIYW5kbGVyICYmIHJlY29yZC5oYXNQcmltYXJ5SGFuZGxlcikge1xuICAgICAgICAgIC8vIFRoZSBjbGFzcyBhbHJlYWR5IGhhcyBhIFBSSU1BUlkgaGFuZGxlciwgYW5kIGFub3RoZXIgb25lIGp1c3QgbWF0Y2hlZC5cbiAgICAgICAgICByZWNvcmQubWV0YURpYWdub3N0aWNzID0gW3tcbiAgICAgICAgICAgIGNhdGVnb3J5OiB0cy5EaWFnbm9zdGljQ2F0ZWdvcnkuRXJyb3IsXG4gICAgICAgICAgICBjb2RlOiBOdW1iZXIoJy05OScgKyBFcnJvckNvZGUuREVDT1JBVE9SX0NPTExJU0lPTiksXG4gICAgICAgICAgICBmaWxlOiBnZXRTb3VyY2VGaWxlKGNsYXp6KSxcbiAgICAgICAgICAgIHN0YXJ0OiBjbGF6ei5nZXRTdGFydCh1bmRlZmluZWQsIGZhbHNlKSxcbiAgICAgICAgICAgIGxlbmd0aDogY2xhenouZ2V0V2lkdGgoKSxcbiAgICAgICAgICAgIG1lc3NhZ2VUZXh0OiAnVHdvIGluY29tcGF0aWJsZSBkZWNvcmF0b3JzIG9uIGNsYXNzJyxcbiAgICAgICAgICB9XTtcbiAgICAgICAgICByZWNvcmQudHJhaXRzID0gZm91bmRUcmFpdHMgPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgaXQncyBzYWZlIHRvIGFjY2VwdCB0aGUgbXVsdGlwbGUgZGVjb3JhdG9ycyBoZXJlLiBVcGRhdGUgc29tZSBvZiB0aGUgbWV0YWRhdGFcbiAgICAgICAgLy8gcmVnYXJkaW5nIHRoaXMgY2xhc3MuXG4gICAgICAgIHJlY29yZC50cmFpdHMucHVzaCh0cmFpdCk7XG4gICAgICAgIHJlY29yZC5oYXNQcmltYXJ5SGFuZGxlciA9IHJlY29yZC5oYXNQcmltYXJ5SGFuZGxlciB8fCBpc1ByaW1hcnlIYW5kbGVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmb3VuZFRyYWl0cy5sZW5ndGggPiAwID8gZm91bmRUcmFpdHMgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlU3ltYm9sRm9yVHJhaXQoXG4gICAgICBoYW5kbGVyOiBEZWNvcmF0b3JIYW5kbGVyPHVua25vd24sIHVua25vd24sIFNlbWFudGljU3ltYm9sfG51bGwsIHVua25vd24+LFxuICAgICAgZGVjbDogQ2xhc3NEZWNsYXJhdGlvbiwgYW5hbHlzaXM6IFJlYWRvbmx5PHVua25vd24+fG51bGwpOiBTZW1hbnRpY1N5bWJvbHxudWxsIHtcbiAgICBpZiAoYW5hbHlzaXMgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBzeW1ib2wgPSBoYW5kbGVyLnN5bWJvbChkZWNsLCBhbmFseXNpcyk7XG4gICAgaWYgKHN5bWJvbCAhPT0gbnVsbCAmJiB0aGlzLnNlbWFudGljRGVwR3JhcGhVcGRhdGVyICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpc1ByaW1hcnkgPSBoYW5kbGVyLnByZWNlZGVuY2UgPT09IEhhbmRsZXJQcmVjZWRlbmNlLlBSSU1BUlk7XG4gICAgICBpZiAoIWlzUHJpbWFyeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQXNzZXJ0aW9uRXJyb3I6ICR7aGFuZGxlci5uYW1lfSByZXR1cm5lZCBhIHN5bWJvbCBidXQgaXMgbm90IGEgcHJpbWFyeSBoYW5kbGVyLmApO1xuICAgICAgfVxuICAgICAgdGhpcy5zZW1hbnRpY0RlcEdyYXBoVXBkYXRlci5yZWdpc3RlclN5bWJvbChzeW1ib2wpO1xuICAgIH1cblxuICAgIHJldHVybiBzeW1ib2w7XG4gIH1cblxuICBwcm90ZWN0ZWQgYW5hbHl6ZUNsYXNzKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uLCBwcmVhbmFseXplUXVldWU6IFByb21pc2U8dm9pZD5bXXxudWxsKTogdm9pZCB7XG4gICAgY29uc3QgdHJhaXRzID0gdGhpcy5zY2FuQ2xhc3NGb3JUcmFpdHMoY2xhenopO1xuXG4gICAgaWYgKHRyYWl0cyA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhlcmUgYXJlIG5vIEl2eSB0cmFpdHMgb24gdGhlIGNsYXNzLCBzbyBpdCBjYW4gc2FmZWx5IGJlIHNraXBwZWQuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0cmFpdCBvZiB0cmFpdHMpIHtcbiAgICAgIGNvbnN0IGFuYWx5emUgPSAoKSA9PiB0aGlzLmFuYWx5emVUcmFpdChjbGF6eiwgdHJhaXQpO1xuXG4gICAgICBsZXQgcHJlYW5hbHlzaXM6IFByb21pc2U8dm9pZD58bnVsbCA9IG51bGw7XG4gICAgICBpZiAocHJlYW5hbHl6ZVF1ZXVlICE9PSBudWxsICYmIHRyYWl0LmhhbmRsZXIucHJlYW5hbHl6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIEF0dGVtcHQgdG8gcnVuIHByZWFuYWx5c2lzLiBUaGlzIGNvdWxkIGZhaWwgd2l0aCBhIGBGYXRhbERpYWdub3N0aWNFcnJvcmA7IGNhdGNoIGl0IGlmIGl0XG4gICAgICAgIC8vIGRvZXMuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcHJlYW5hbHlzaXMgPSB0cmFpdC5oYW5kbGVyLnByZWFuYWx5emUoY2xhenosIHRyYWl0LmRldGVjdGVkLm1ldGFkYXRhKSB8fCBudWxsO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRmF0YWxEaWFnbm9zdGljRXJyb3IpIHtcbiAgICAgICAgICAgIHRyYWl0LnRvQW5hbHl6ZWQobnVsbCwgW2Vyci50b0RpYWdub3N0aWMoKV0sIG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJlYW5hbHlzaXMgIT09IG51bGwpIHtcbiAgICAgICAgcHJlYW5hbHl6ZVF1ZXVlIS5wdXNoKHByZWFuYWx5c2lzLnRoZW4oYW5hbHl6ZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYW5hbHl6ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhbmFseXplVHJhaXQoXG4gICAgICBjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbiwgdHJhaXQ6IFRyYWl0PHVua25vd24sIHVua25vd24sIFNlbWFudGljU3ltYm9sfG51bGwsIHVua25vd24+LFxuICAgICAgZmxhZ3M/OiBIYW5kbGVyRmxhZ3MpOiB2b2lkIHtcbiAgICBpZiAodHJhaXQuc3RhdGUgIT09IFRyYWl0U3RhdGUuUGVuZGluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0IHRvIGFuYWx5emUgdHJhaXQgb2YgJHtjbGF6ei5uYW1lLnRleHR9IGluIHN0YXRlICR7XG4gICAgICAgICAgVHJhaXRTdGF0ZVt0cmFpdC5zdGF0ZV19IChleHBlY3RlZCBERVRFQ1RFRClgKTtcbiAgICB9XG5cbiAgICB0aGlzLnBlcmYuZXZlbnRDb3VudChQZXJmRXZlbnQuVHJhaXRBbmFseXplKTtcblxuICAgIC8vIEF0dGVtcHQgYW5hbHlzaXMuIFRoaXMgY291bGQgZmFpbCB3aXRoIGEgYEZhdGFsRGlhZ25vc3RpY0Vycm9yYDsgY2F0Y2ggaXQgaWYgaXQgZG9lcy5cbiAgICBsZXQgcmVzdWx0OiBBbmFseXNpc091dHB1dDx1bmtub3duPjtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gdHJhaXQuaGFuZGxlci5hbmFseXplKGNsYXp6LCB0cmFpdC5kZXRlY3RlZC5tZXRhZGF0YSwgZmxhZ3MpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEZhdGFsRGlhZ25vc3RpY0Vycm9yKSB7XG4gICAgICAgIHRyYWl0LnRvQW5hbHl6ZWQobnVsbCwgW2Vyci50b0RpYWdub3N0aWMoKV0sIG51bGwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3ltYm9sID0gdGhpcy5tYWtlU3ltYm9sRm9yVHJhaXQodHJhaXQuaGFuZGxlciwgY2xhenosIHJlc3VsdC5hbmFseXNpcyA/PyBudWxsKTtcbiAgICBpZiAocmVzdWx0LmFuYWx5c2lzICE9PSB1bmRlZmluZWQgJiYgdHJhaXQuaGFuZGxlci5yZWdpc3RlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0cmFpdC5oYW5kbGVyLnJlZ2lzdGVyKGNsYXp6LCByZXN1bHQuYW5hbHlzaXMpO1xuICAgIH1cbiAgICB0cmFpdCA9IHRyYWl0LnRvQW5hbHl6ZWQocmVzdWx0LmFuYWx5c2lzID8/IG51bGwsIHJlc3VsdC5kaWFnbm9zdGljcyA/PyBudWxsLCBzeW1ib2wpO1xuICB9XG5cbiAgcmVzb2x2ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBjbGFzc2VzID0gQXJyYXkuZnJvbSh0aGlzLmNsYXNzZXMua2V5cygpKTtcbiAgICBmb3IgKGNvbnN0IGNsYXp6IG9mIGNsYXNzZXMpIHtcbiAgICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuY2xhc3Nlcy5nZXQoY2xhenopITtcbiAgICAgIGZvciAobGV0IHRyYWl0IG9mIHJlY29yZC50cmFpdHMpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRyYWl0LmhhbmRsZXI7XG4gICAgICAgIHN3aXRjaCAodHJhaXQuc3RhdGUpIHtcbiAgICAgICAgICBjYXNlIFRyYWl0U3RhdGUuU2tpcHBlZDpcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIGNhc2UgVHJhaXRTdGF0ZS5QZW5kaW5nOlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXNvbHZpbmcgYSB0cmFpdCB0aGF0IGhhc24ndCBiZWVuIGFuYWx5emVkOiAke2NsYXp6Lm5hbWUudGV4dH0gLyAke1xuICAgICAgICAgICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZih0cmFpdC5oYW5kbGVyKS5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICAgICAgICAgIGNhc2UgVHJhaXRTdGF0ZS5SZXNvbHZlZDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVzb2x2aW5nIGFuIGFscmVhZHkgcmVzb2x2ZWQgdHJhaXRgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0cmFpdC5hbmFseXNpcyA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIE5vIGFuYWx5c2lzIHJlc3VsdHMsIGNhbm5vdCBmdXJ0aGVyIHByb2Nlc3MgdGhpcyB0cmFpdC5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYW5kbGVyLnJlc29sdmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIE5vIHJlc29sdXRpb24gb2YgdGhpcyB0cmFpdCBuZWVkZWQgLSBpdCdzIGNvbnNpZGVyZWQgc3VjY2Vzc2Z1bCBieSBkZWZhdWx0LlxuICAgICAgICAgIHRyYWl0ID0gdHJhaXQudG9SZXNvbHZlZChudWxsLCBudWxsKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXN1bHQ6IFJlc29sdmVSZXN1bHQ8dW5rbm93bj47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzdWx0ID0gaGFuZGxlci5yZXNvbHZlKGNsYXp6LCB0cmFpdC5hbmFseXNpcyBhcyBSZWFkb25seTx1bmtub3duPiwgdHJhaXQuc3ltYm9sKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEZhdGFsRGlhZ25vc3RpY0Vycm9yKSB7XG4gICAgICAgICAgICB0cmFpdCA9IHRyYWl0LnRvUmVzb2x2ZWQobnVsbCwgW2Vyci50b0RpYWdub3N0aWMoKV0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0cmFpdCA9IHRyYWl0LnRvUmVzb2x2ZWQocmVzdWx0LmRhdGEgPz8gbnVsbCwgcmVzdWx0LmRpYWdub3N0aWNzID8/IG51bGwpO1xuXG4gICAgICAgIGlmIChyZXN1bHQucmVleHBvcnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGNsYXp6LmdldFNvdXJjZUZpbGUoKS5maWxlTmFtZTtcbiAgICAgICAgICBpZiAoIXRoaXMucmVleHBvcnRNYXAuaGFzKGZpbGVOYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5yZWV4cG9ydE1hcC5zZXQoZmlsZU5hbWUsIG5ldyBNYXA8c3RyaW5nLCBbc3RyaW5nLCBzdHJpbmddPigpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZmlsZVJlZXhwb3J0cyA9IHRoaXMucmVleHBvcnRNYXAuZ2V0KGZpbGVOYW1lKSE7XG4gICAgICAgICAgZm9yIChjb25zdCByZWV4cG9ydCBvZiByZXN1bHQucmVleHBvcnRzKSB7XG4gICAgICAgICAgICBmaWxlUmVleHBvcnRzLnNldChyZWV4cG9ydC5hc0FsaWFzLCBbcmVleHBvcnQuZnJvbU1vZHVsZSwgcmVleHBvcnQuc3ltYm9sTmFtZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0eXBlLWNoZWNraW5nIGNvZGUgaW50byB0aGUgYFR5cGVDaGVja0NvbnRleHRgIGZvciBhbnkgY29tcG9uZW50cyB3aXRoaW4gdGhlIGdpdmVuXG4gICAqIGB0cy5Tb3VyY2VGaWxlYC5cbiAgICovXG4gIHR5cGVDaGVjayhzZjogdHMuU291cmNlRmlsZSwgY3R4OiBUeXBlQ2hlY2tDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZpbGVUb0NsYXNzZXMuaGFzKHNmKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2xhenogb2YgdGhpcy5maWxlVG9DbGFzc2VzLmdldChzZikhKSB7XG4gICAgICBjb25zdCByZWNvcmQgPSB0aGlzLmNsYXNzZXMuZ2V0KGNsYXp6KSE7XG4gICAgICBmb3IgKGNvbnN0IHRyYWl0IG9mIHJlY29yZC50cmFpdHMpIHtcbiAgICAgICAgaWYgKHRyYWl0LnN0YXRlICE9PSBUcmFpdFN0YXRlLlJlc29sdmVkKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHJhaXQuaGFuZGxlci50eXBlQ2hlY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cmFpdC5yZXNvbHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgdHJhaXQuaGFuZGxlci50eXBlQ2hlY2soY3R4LCBjbGF6eiwgdHJhaXQuYW5hbHlzaXMsIHRyYWl0LnJlc29sdXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZXh0ZW5kZWRUZW1wbGF0ZUNoZWNrKHNmOiB0cy5Tb3VyY2VGaWxlLCBleHRlbmRlZFRlbXBsYXRlQ2hlY2tlcjogRXh0ZW5kZWRUZW1wbGF0ZUNoZWNrZXIpOlxuICAgICAgdHMuRGlhZ25vc3RpY1tdIHtcbiAgICBjb25zdCBjbGFzc2VzID0gdGhpcy5maWxlVG9DbGFzc2VzLmdldChzZik7XG4gICAgaWYgKGNsYXNzZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGRpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNsYXp6IG9mIGNsYXNzZXMpIHtcbiAgICAgIGlmICghaXNOYW1lZENsYXNzRGVjbGFyYXRpb24oY2xhenopKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjb3JkID0gdGhpcy5jbGFzc2VzLmdldChjbGF6eikhO1xuICAgICAgZm9yIChjb25zdCB0cmFpdCBvZiByZWNvcmQudHJhaXRzKSB7XG4gICAgICAgIGlmICh0cmFpdC5oYW5kbGVyLmV4dGVuZGVkVGVtcGxhdGVDaGVjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZGlhZ25vc3RpY3MucHVzaCguLi50cmFpdC5oYW5kbGVyLmV4dGVuZGVkVGVtcGxhdGVDaGVjayhjbGF6eiwgZXh0ZW5kZWRUZW1wbGF0ZUNoZWNrZXIpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRpYWdub3N0aWNzO1xuICB9XG5cbiAgaW5kZXgoY3R4OiBJbmRleGluZ0NvbnRleHQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGNsYXp6IG9mIHRoaXMuY2xhc3Nlcy5rZXlzKCkpIHtcbiAgICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuY2xhc3Nlcy5nZXQoY2xhenopITtcbiAgICAgIGZvciAoY29uc3QgdHJhaXQgb2YgcmVjb3JkLnRyYWl0cykge1xuICAgICAgICBpZiAodHJhaXQuc3RhdGUgIT09IFRyYWl0U3RhdGUuUmVzb2x2ZWQpIHtcbiAgICAgICAgICAvLyBTa2lwIHRyYWl0cyB0aGF0IGhhdmVuJ3QgYmVlbiByZXNvbHZlZCBzdWNjZXNzZnVsbHkuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHJhaXQuaGFuZGxlci5pbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gU2tpcCB0cmFpdHMgdGhhdCBkb24ndCBhZmZlY3QgaW5kZXhpbmcuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHJhaXQucmVzb2x1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgIHRyYWl0LmhhbmRsZXIuaW5kZXgoY3R4LCBjbGF6eiwgdHJhaXQuYW5hbHlzaXMsIHRyYWl0LnJlc29sdXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgeGkxOG4oYnVuZGxlOiBYaTE4bkNvbnRleHQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGNsYXp6IG9mIHRoaXMuY2xhc3Nlcy5rZXlzKCkpIHtcbiAgICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuY2xhc3Nlcy5nZXQoY2xhenopITtcbiAgICAgIGZvciAoY29uc3QgdHJhaXQgb2YgcmVjb3JkLnRyYWl0cykge1xuICAgICAgICBpZiAodHJhaXQuc3RhdGUgIT09IFRyYWl0U3RhdGUuQW5hbHl6ZWQgJiYgdHJhaXQuc3RhdGUgIT09IFRyYWl0U3RhdGUuUmVzb2x2ZWQpIHtcbiAgICAgICAgICAvLyBTa2lwIHRyYWl0cyB0aGF0IGhhdmVuJ3QgYmVlbiBhbmFseXplZCBzdWNjZXNzZnVsbHkuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHJhaXQuaGFuZGxlci54aTE4biA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gU2tpcCB0cmFpdHMgdGhhdCBkb24ndCBzdXBwb3J0IHhpMThuLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyYWl0LmFuYWx5c2lzICE9PSBudWxsKSB7XG4gICAgICAgICAgdHJhaXQuaGFuZGxlci54aTE4bihidW5kbGUsIGNsYXp6LCB0cmFpdC5hbmFseXNpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVSZXNvdXJjZXMoY2xheno6IERlY2xhcmF0aW9uTm9kZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZWZsZWN0b3IuaXNDbGFzcyhjbGF6eikgfHwgIXRoaXMuY2xhc3Nlcy5oYXMoY2xhenopKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuY2xhc3Nlcy5nZXQoY2xhenopITtcbiAgICBmb3IgKGNvbnN0IHRyYWl0IG9mIHJlY29yZC50cmFpdHMpIHtcbiAgICAgIGlmICh0cmFpdC5zdGF0ZSAhPT0gVHJhaXRTdGF0ZS5SZXNvbHZlZCB8fCB0cmFpdC5oYW5kbGVyLnVwZGF0ZVJlc291cmNlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0cmFpdC5oYW5kbGVyLnVwZGF0ZVJlc291cmNlcyhjbGF6eiwgdHJhaXQuYW5hbHlzaXMsIHRyYWl0LnJlc29sdXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBpbGUoY2xheno6IERlY2xhcmF0aW9uTm9kZSwgY29uc3RhbnRQb29sOiBDb25zdGFudFBvb2wpOiBDb21waWxlUmVzdWx0W118bnVsbCB7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSB0cy5nZXRPcmlnaW5hbE5vZGUoY2xhenopIGFzIHR5cGVvZiBjbGF6ejtcbiAgICBpZiAoIXRoaXMucmVmbGVjdG9yLmlzQ2xhc3MoY2xhenopIHx8ICF0aGlzLnJlZmxlY3Rvci5pc0NsYXNzKG9yaWdpbmFsKSB8fFxuICAgICAgICAhdGhpcy5jbGFzc2VzLmhhcyhvcmlnaW5hbCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuY2xhc3Nlcy5nZXQob3JpZ2luYWwpITtcblxuICAgIGxldCByZXM6IENvbXBpbGVSZXN1bHRbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCB0cmFpdCBvZiByZWNvcmQudHJhaXRzKSB7XG4gICAgICBpZiAodHJhaXQuc3RhdGUgIT09IFRyYWl0U3RhdGUuUmVzb2x2ZWQgfHwgdHJhaXQuYW5hbHlzaXNEaWFnbm9zdGljcyAhPT0gbnVsbCB8fFxuICAgICAgICAgIHRyYWl0LnJlc29sdmVEaWFnbm9zdGljcyAhPT0gbnVsbCkge1xuICAgICAgICAvLyBDYW5ub3QgY29tcGlsZSBhIHRyYWl0IHRoYXQgaXMgbm90IHJlc29sdmVkLCBvciBoYWQgYW55IGVycm9ycyBpbiBpdHMgZGVjbGFyYXRpb24uXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBgdHJhaXQucmVzb2x1dGlvbmAgaXMgbm9uLW51bGwgYXNzZXJ0ZWQgaGVyZSBiZWNhdXNlIFR5cGVTY3JpcHQgZG9lcyBub3QgcmVjb2duaXplIHRoYXRcbiAgICAgIC8vIGBSZWFkb25seTx1bmtub3duPmAgaXMgbnVsbGFibGUgKGFzIGB1bmtub3duYCBpdHNlbGYgaXMgbnVsbGFibGUpIGR1ZSB0byB0aGUgd2F5IHRoYXRcbiAgICAgIC8vIGBSZWFkb25seWAgd29ya3MuXG5cbiAgICAgIGxldCBjb21waWxlUmVzOiBDb21waWxlUmVzdWx0fENvbXBpbGVSZXN1bHRbXTtcbiAgICAgIGlmICh0aGlzLmNvbXBpbGF0aW9uTW9kZSA9PT0gQ29tcGlsYXRpb25Nb2RlLlBBUlRJQUwgJiZcbiAgICAgICAgICB0cmFpdC5oYW5kbGVyLmNvbXBpbGVQYXJ0aWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29tcGlsZVJlcyA9IHRyYWl0LmhhbmRsZXIuY29tcGlsZVBhcnRpYWwoY2xhenosIHRyYWl0LmFuYWx5c2lzLCB0cmFpdC5yZXNvbHV0aW9uISk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21waWxlUmVzID1cbiAgICAgICAgICAgIHRyYWl0LmhhbmRsZXIuY29tcGlsZUZ1bGwoY2xhenosIHRyYWl0LmFuYWx5c2lzLCB0cmFpdC5yZXNvbHV0aW9uISwgY29uc3RhbnRQb29sKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29tcGlsZU1hdGNoUmVzID0gY29tcGlsZVJlcztcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbXBpbGVNYXRjaFJlcykpIHtcbiAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgY29tcGlsZU1hdGNoUmVzKSB7XG4gICAgICAgICAgaWYgKCFyZXMuc29tZShyID0+IHIubmFtZSA9PT0gcmVzdWx0Lm5hbWUpKSB7XG4gICAgICAgICAgICByZXMucHVzaChyZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghcmVzLnNvbWUocmVzdWx0ID0+IHJlc3VsdC5uYW1lID09PSBjb21waWxlTWF0Y2hSZXMubmFtZSkpIHtcbiAgICAgICAgcmVzLnB1c2goY29tcGlsZU1hdGNoUmVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMb29rIHVwIHRoZSAuZC50cyB0cmFuc2Zvcm1lciBmb3IgdGhlIGlucHV0IGZpbGUgYW5kIHJlY29yZCB0aGF0IGF0IGxlYXN0IG9uZSBmaWVsZCB3YXNcbiAgICAvLyBnZW5lcmF0ZWQsIHdoaWNoIHdpbGwgYWxsb3cgdGhlIC5kLnRzIHRvIGJlIHRyYW5zZm9ybWVkIGxhdGVyLlxuICAgIHRoaXMuZHRzVHJhbnNmb3Jtcy5nZXRJdnlEZWNsYXJhdGlvblRyYW5zZm9ybShvcmlnaW5hbC5nZXRTb3VyY2VGaWxlKCkpXG4gICAgICAgIC5hZGRGaWVsZHMob3JpZ2luYWwsIHJlcyk7XG5cbiAgICAvLyBSZXR1cm4gdGhlIGluc3RydWN0aW9uIHRvIHRoZSB0cmFuc2Zvcm1lciBzbyB0aGUgZmllbGRzIHdpbGwgYmUgYWRkZWQuXG4gICAgcmV0dXJuIHJlcy5sZW5ndGggPiAwID8gcmVzIDogbnVsbDtcbiAgfVxuXG4gIGRlY29yYXRvcnNGb3Iobm9kZTogdHMuRGVjbGFyYXRpb24pOiB0cy5EZWNvcmF0b3JbXSB7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSB0cy5nZXRPcmlnaW5hbE5vZGUobm9kZSkgYXMgdHlwZW9mIG5vZGU7XG4gICAgaWYgKCF0aGlzLnJlZmxlY3Rvci5pc0NsYXNzKG9yaWdpbmFsKSB8fCAhdGhpcy5jbGFzc2VzLmhhcyhvcmlnaW5hbCkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZWNvcmQgPSB0aGlzLmNsYXNzZXMuZ2V0KG9yaWdpbmFsKSE7XG4gICAgY29uc3QgZGVjb3JhdG9yczogdHMuRGVjb3JhdG9yW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgdHJhaXQgb2YgcmVjb3JkLnRyYWl0cykge1xuICAgICAgaWYgKHRyYWl0LnN0YXRlICE9PSBUcmFpdFN0YXRlLlJlc29sdmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHJhaXQuZGV0ZWN0ZWQudHJpZ2dlciAhPT0gbnVsbCAmJiB0cy5pc0RlY29yYXRvcih0cmFpdC5kZXRlY3RlZC50cmlnZ2VyKSkge1xuICAgICAgICBkZWNvcmF0b3JzLnB1c2godHJhaXQuZGV0ZWN0ZWQudHJpZ2dlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlY29yYXRvcnM7XG4gIH1cblxuICBnZXQgZGlhZ25vc3RpY3MoKTogUmVhZG9ubHlBcnJheTx0cy5EaWFnbm9zdGljPiB7XG4gICAgY29uc3QgZGlhZ25vc3RpY3M6IHRzLkRpYWdub3N0aWNbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY2xhenogb2YgdGhpcy5jbGFzc2VzLmtleXMoKSkge1xuICAgICAgY29uc3QgcmVjb3JkID0gdGhpcy5jbGFzc2VzLmdldChjbGF6eikhO1xuICAgICAgaWYgKHJlY29yZC5tZXRhRGlhZ25vc3RpY3MgIT09IG51bGwpIHtcbiAgICAgICAgZGlhZ25vc3RpY3MucHVzaCguLi5yZWNvcmQubWV0YURpYWdub3N0aWNzKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgdHJhaXQgb2YgcmVjb3JkLnRyYWl0cykge1xuICAgICAgICBpZiAoKHRyYWl0LnN0YXRlID09PSBUcmFpdFN0YXRlLkFuYWx5emVkIHx8IHRyYWl0LnN0YXRlID09PSBUcmFpdFN0YXRlLlJlc29sdmVkKSAmJlxuICAgICAgICAgICAgdHJhaXQuYW5hbHlzaXNEaWFnbm9zdGljcyAhPT0gbnVsbCkge1xuICAgICAgICAgIGRpYWdub3N0aWNzLnB1c2goLi4udHJhaXQuYW5hbHlzaXNEaWFnbm9zdGljcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyYWl0LnN0YXRlID09PSBUcmFpdFN0YXRlLlJlc29sdmVkICYmIHRyYWl0LnJlc29sdmVEaWFnbm9zdGljcyAhPT0gbnVsbCkge1xuICAgICAgICAgIGRpYWdub3N0aWNzLnB1c2goLi4udHJhaXQucmVzb2x2ZURpYWdub3N0aWNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGlhZ25vc3RpY3M7XG4gIH1cblxuICBnZXQgZXhwb3J0U3RhdGVtZW50cygpOiBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBbc3RyaW5nLCBzdHJpbmddPj4ge1xuICAgIHJldHVybiB0aGlzLnJlZXhwb3J0TWFwO1xuICB9XG59XG4iXX0=