@angular/core 7.2.0-beta.0 → 7.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. package/bundles/core-testing.umd.js +194 -128
  2. package/bundles/core-testing.umd.js.map +1 -1
  3. package/bundles/core-testing.umd.min.js +10 -10
  4. package/bundles/core-testing.umd.min.js.map +1 -1
  5. package/bundles/core.umd.js +5582 -4512
  6. package/bundles/core.umd.js.map +1 -1
  7. package/bundles/core.umd.min.js +122 -129
  8. package/bundles/core.umd.min.js.map +1 -1
  9. package/core.d.ts +12 -12
  10. package/core.metadata.json +1 -1
  11. package/esm2015/core.externs.js +45 -35
  12. package/esm2015/core.js +12 -13
  13. package/esm2015/index.js +3 -4
  14. package/esm2015/public_api.js +3 -5
  15. package/esm2015/src/application_init.js +22 -10
  16. package/esm2015/src/application_module.js +6 -5
  17. package/esm2015/src/application_ref.js +94 -37
  18. package/esm2015/src/application_tokens.js +21 -16
  19. package/esm2015/src/change_detection/change_detection.js +8 -7
  20. package/esm2015/src/change_detection/change_detection_util.js +2 -4
  21. package/esm2015/src/change_detection/change_detector_ref.js +2 -3
  22. package/esm2015/src/change_detection/constants.js +30 -32
  23. package/esm2015/src/change_detection/differs/default_iterable_differ.js +108 -29
  24. package/esm2015/src/change_detection/differs/default_keyvalue_differ.js +53 -16
  25. package/esm2015/src/change_detection/differs/iterable_differs.js +100 -90
  26. package/esm2015/src/change_detection/differs/keyvalue_differs.js +85 -73
  27. package/esm2015/src/change_detection/pipe_transform.js +10 -5
  28. package/esm2015/src/change_detection.js +7 -3
  29. package/esm2015/src/codegen_private_exports.js +2 -3
  30. package/esm2015/src/console.js +3 -3
  31. package/esm2015/src/core.js +3 -4
  32. package/esm2015/src/core_private_export.js +2 -3
  33. package/esm2015/src/core_render3_private_export.js +13 -7
  34. package/esm2015/src/debug/debug_node.js +132 -90
  35. package/esm2015/src/di/defs.js +59 -50
  36. package/esm2015/src/di/forward_ref.js +5 -6
  37. package/esm2015/src/di/injectable.js +11 -11
  38. package/esm2015/src/di/injection_token.js +10 -6
  39. package/esm2015/src/di/injector.js +53 -43
  40. package/esm2015/src/di/injector_compatibility.js +13 -12
  41. package/esm2015/src/di/metadata.js +22 -13
  42. package/esm2015/src/di/provider.js +137 -120
  43. package/esm2015/src/di/r3_injector.js +127 -57
  44. package/esm2015/src/di/reflective_errors.js +19 -13
  45. package/esm2015/src/di/reflective_injector.js +20 -16
  46. package/esm2015/src/di/reflective_key.js +7 -5
  47. package/esm2015/src/di/reflective_provider.js +21 -20
  48. package/esm2015/src/di/scope.js +5 -5
  49. package/esm2015/src/di/util.js +13 -14
  50. package/esm2015/src/di.js +2 -3
  51. package/esm2015/src/error_handler.js +5 -4
  52. package/esm2015/src/errors.js +7 -8
  53. package/esm2015/src/event_emitter.js +3 -3
  54. package/esm2015/src/i18n/tokens.js +12 -10
  55. package/esm2015/src/is_dev_mode.js +2 -3
  56. package/esm2015/src/ivy_switch.js +2 -3
  57. package/esm2015/src/linker/compiler.js +9 -12
  58. package/esm2015/src/linker/component_factory.js +2 -3
  59. package/esm2015/src/linker/component_factory_resolver.js +24 -10
  60. package/esm2015/src/linker/element_ref.js +5 -3
  61. package/esm2015/src/linker/ng_module_factory.js +6 -5
  62. package/esm2015/src/linker/ng_module_factory_loader.js +63 -16
  63. package/esm2015/src/linker/query_list.js +16 -14
  64. package/esm2015/src/linker/system_js_ng_module_factory_loader.js +12 -5
  65. package/esm2015/src/linker/template_ref.js +2 -3
  66. package/esm2015/src/linker/view_container_ref.js +2 -3
  67. package/esm2015/src/linker/view_ref.js +13 -7
  68. package/esm2015/src/linker.js +3 -3
  69. package/esm2015/src/metadata/di.js +22 -15
  70. package/esm2015/src/metadata/directives.js +33 -19
  71. package/esm2015/src/metadata/lifecycle_hooks.js +81 -66
  72. package/esm2015/src/metadata/ng_module.js +82 -68
  73. package/esm2015/src/metadata/resource_loading.js +4 -3
  74. package/esm2015/src/metadata/view.js +25 -26
  75. package/esm2015/src/metadata.js +6 -3
  76. package/esm2015/src/platform_core_providers.js +5 -5
  77. package/esm2015/src/profile/profile.js +17 -13
  78. package/esm2015/src/profile/wtf_impl.js +36 -16
  79. package/esm2015/src/r3_symbols.js +18 -5
  80. package/esm2015/src/reflection/platform_reflection_capabilities.js +81 -40
  81. package/esm2015/src/reflection/reflection.js +5 -5
  82. package/esm2015/src/reflection/reflection_capabilities.js +38 -27
  83. package/esm2015/src/reflection/reflector.js +2 -3
  84. package/esm2015/src/reflection/types.js +2 -12
  85. package/esm2015/src/render/api.js +67 -47
  86. package/esm2015/src/render.js +3 -3
  87. package/esm2015/src/render3/assert.js +38 -3
  88. package/esm2015/src/render3/bindings.js +111 -0
  89. package/esm2015/src/render3/component.js +88 -77
  90. package/esm2015/src/render3/component_ref.js +86 -56
  91. package/esm2015/src/render3/context_discovery.js +94 -92
  92. package/esm2015/src/render3/definition.js +58 -51
  93. package/esm2015/src/render3/di.js +206 -166
  94. package/esm2015/src/render3/di_setup.js +51 -31
  95. package/esm2015/src/render3/discovery_utils.js +225 -39
  96. package/esm2015/src/render3/empty.js +28 -0
  97. package/esm2015/src/render3/errors.js +11 -15
  98. package/esm2015/src/render3/features/inherit_definition_feature.js +13 -10
  99. package/esm2015/src/render3/features/ng_onchanges_feature.js +15 -12
  100. package/esm2015/src/render3/features/providers_feature.js +2 -3
  101. package/esm2015/src/render3/fields.js +5 -5
  102. package/esm2015/src/render3/global_utils.js +22 -7
  103. package/esm2015/src/render3/global_utils_api.js +13 -7
  104. package/esm2015/src/render3/hooks.js +21 -26
  105. package/esm2015/src/render3/i18n.js +134 -115
  106. package/esm2015/src/render3/index.js +15 -7
  107. package/esm2015/src/render3/instructions.js +938 -813
  108. package/esm2015/src/render3/interfaces/container.js +37 -6
  109. package/esm2015/src/render3/interfaces/context.js +39 -37
  110. package/esm2015/src/render3/interfaces/definition.js +225 -265
  111. package/esm2015/src/render3/interfaces/i18n.js +179 -151
  112. package/esm2015/src/render3/interfaces/injector.js +95 -13
  113. package/esm2015/src/render3/interfaces/node.js +413 -382
  114. package/esm2015/src/render3/interfaces/player.js +78 -37
  115. package/esm2015/src/render3/interfaces/projection.js +5 -10
  116. package/esm2015/src/render3/interfaces/query.js +66 -60
  117. package/esm2015/src/render3/interfaces/renderer.js +292 -117
  118. package/esm2015/src/render3/interfaces/sanitization.js +2 -6
  119. package/esm2015/src/render3/interfaces/styling.js +322 -111
  120. package/esm2015/src/render3/interfaces/view.js +356 -298
  121. package/esm2015/src/render3/jit/compiler_facade.js +10 -4
  122. package/esm2015/src/render3/jit/compiler_facade_interface.js +195 -152
  123. package/esm2015/src/render3/jit/directive.js +26 -16
  124. package/esm2015/src/render3/jit/environment.js +8 -5
  125. package/esm2015/src/render3/jit/injectable.js +7 -10
  126. package/esm2015/src/render3/jit/module.js +309 -25
  127. package/esm2015/src/render3/jit/pipe.js +2 -3
  128. package/esm2015/src/render3/jit/util.js +2 -3
  129. package/esm2015/src/render3/metadata.js +11 -10
  130. package/esm2015/src/render3/ng_dev_mode.js +5 -6
  131. package/esm2015/src/render3/ng_module_ref.js +48 -22
  132. package/esm2015/src/render3/node_assert.js +2 -3
  133. package/esm2015/src/render3/node_manipulation.js +137 -117
  134. package/esm2015/src/render3/node_selector_matcher.js +46 -19
  135. package/esm2015/src/render3/pipe.js +36 -21
  136. package/esm2015/src/render3/players.js +17 -12
  137. package/esm2015/src/render3/pure_function.js +86 -39
  138. package/esm2015/src/render3/query.js +93 -80
  139. package/esm2015/src/render3/state.js +88 -203
  140. package/esm2015/src/render3/styling/class_and_style_bindings.js +963 -249
  141. package/esm2015/src/render3/styling/core_player_handler.js +6 -4
  142. package/esm2015/src/render3/styling/player_factory.js +3 -4
  143. package/esm2015/src/render3/styling/util.js +69 -31
  144. package/esm2015/src/render3/tokens.js +7 -6
  145. package/esm2015/src/render3/util.js +65 -55
  146. package/esm2015/src/render3/view_engine_compatibility.js +36 -59
  147. package/esm2015/src/render3/view_engine_compatibility_prebound.js +2 -3
  148. package/esm2015/src/render3/view_ref.js +58 -44
  149. package/esm2015/src/sanitization/bypass.js +29 -6
  150. package/esm2015/src/sanitization/html_sanitizer.js +48 -16
  151. package/esm2015/src/sanitization/inert_body.js +33 -18
  152. package/esm2015/src/sanitization/sanitization.js +35 -25
  153. package/esm2015/src/sanitization/security.js +3 -4
  154. package/esm2015/src/sanitization/style_sanitizer.js +10 -7
  155. package/esm2015/src/sanitization/url_sanitizer.js +9 -7
  156. package/esm2015/src/testability/testability.js +72 -42
  157. package/esm2015/src/type.js +6 -8
  158. package/esm2015/src/util/decorators.js +19 -14
  159. package/esm2015/src/util/lang.js +2 -3
  160. package/esm2015/src/util/ng_reflect.js +2 -3
  161. package/esm2015/src/util/noop.js +2 -3
  162. package/esm2015/src/util/property.js +3 -4
  163. package/esm2015/src/util.js +12 -4
  164. package/esm2015/src/version.js +6 -6
  165. package/esm2015/src/view/element.js +17 -17
  166. package/esm2015/src/view/entrypoint.js +15 -5
  167. package/esm2015/src/view/errors.js +4 -5
  168. package/esm2015/src/view/index.js +2 -3
  169. package/esm2015/src/view/ng_content.js +3 -4
  170. package/esm2015/src/view/ng_module.js +2 -3
  171. package/esm2015/src/view/provider.js +89 -24
  172. package/esm2015/src/view/pure_expression.js +14 -15
  173. package/esm2015/src/view/query.js +14 -14
  174. package/esm2015/src/view/refs.js +96 -38
  175. package/esm2015/src/view/services.js +64 -37
  176. package/esm2015/src/view/text.js +5 -6
  177. package/esm2015/src/view/types.js +390 -325
  178. package/esm2015/src/view/util.js +29 -24
  179. package/esm2015/src/view/view.js +43 -36
  180. package/esm2015/src/view/view_attach.js +9 -10
  181. package/esm2015/src/zone/ng_zone.js +29 -28
  182. package/esm2015/src/zone.js +3 -3
  183. package/esm2015/testing/index.js +2 -3
  184. package/esm2015/testing/public_api.js +4 -4
  185. package/esm2015/testing/src/async.js +2 -3
  186. package/esm2015/testing/src/async_fallback.js +8 -7
  187. package/esm2015/testing/src/async_test_completer.js +14 -6
  188. package/esm2015/testing/src/before_each.js +10 -4
  189. package/esm2015/testing/src/component_fixture.js +48 -17
  190. package/esm2015/testing/src/fake_async.js +9 -3
  191. package/esm2015/testing/src/fake_async_fallback.js +5 -5
  192. package/esm2015/testing/src/lang_utils.js +3 -4
  193. package/esm2015/testing/src/logger.js +2 -3
  194. package/esm2015/testing/src/metadata_override.js +2 -6
  195. package/esm2015/testing/src/metadata_overrider.js +9 -8
  196. package/esm2015/testing/src/ng_zone_mock.js +2 -3
  197. package/esm2015/testing/src/private_export_testing.js +2 -3
  198. package/esm2015/testing/src/r3_test_bed.js +324 -174
  199. package/esm2015/testing/src/resolvers.js +28 -11
  200. package/esm2015/testing/src/test_bed.js +123 -54
  201. package/esm2015/testing/src/test_bed_common.js +142 -85
  202. package/esm2015/testing/src/test_compiler.js +2 -3
  203. package/esm2015/testing/src/testing.js +3 -3
  204. package/esm2015/testing/src/testing_internal.js +17 -12
  205. package/esm2015/testing/testing.js +1 -2
  206. package/esm5/core.js +12 -13
  207. package/esm5/index.js +1 -2
  208. package/esm5/public_api.js +1 -2
  209. package/esm5/src/application_init.js +1 -2
  210. package/esm5/src/application_module.js +1 -2
  211. package/esm5/src/application_ref.js +1 -2
  212. package/esm5/src/application_tokens.js +1 -2
  213. package/esm5/src/change_detection/change_detection.js +1 -2
  214. package/esm5/src/change_detection/change_detection_util.js +1 -2
  215. package/esm5/src/change_detection/change_detector_ref.js +1 -2
  216. package/esm5/src/change_detection/constants.js +3 -4
  217. package/esm5/src/change_detection/differs/default_iterable_differ.js +1 -2
  218. package/esm5/src/change_detection/differs/default_keyvalue_differ.js +1 -2
  219. package/esm5/src/change_detection/differs/iterable_differs.js +1 -2
  220. package/esm5/src/change_detection/differs/keyvalue_differs.js +1 -2
  221. package/esm5/src/change_detection/pipe_transform.js +1 -2
  222. package/esm5/src/change_detection.js +1 -2
  223. package/esm5/src/codegen_private_exports.js +1 -2
  224. package/esm5/src/console.js +1 -2
  225. package/esm5/src/core.js +1 -2
  226. package/esm5/src/core_private_export.js +1 -2
  227. package/esm5/src/core_render3_private_export.js +7 -5
  228. package/esm5/src/debug/debug_node.js +79 -58
  229. package/esm5/src/di/defs.js +3 -4
  230. package/esm5/src/di/forward_ref.js +1 -2
  231. package/esm5/src/di/injectable.js +1 -2
  232. package/esm5/src/di/injection_token.js +1 -2
  233. package/esm5/src/di/injector.js +1 -2
  234. package/esm5/src/di/injector_compatibility.js +1 -2
  235. package/esm5/src/di/metadata.js +1 -2
  236. package/esm5/src/di/provider.js +1 -2
  237. package/esm5/src/di/r3_injector.js +48 -28
  238. package/esm5/src/di/reflective_errors.js +1 -2
  239. package/esm5/src/di/reflective_injector.js +1 -2
  240. package/esm5/src/di/reflective_key.js +1 -2
  241. package/esm5/src/di/reflective_provider.js +1 -2
  242. package/esm5/src/di/scope.js +1 -2
  243. package/esm5/src/di/util.js +1 -2
  244. package/esm5/src/di.js +1 -2
  245. package/esm5/src/error_handler.js +1 -2
  246. package/esm5/src/errors.js +1 -2
  247. package/esm5/src/event_emitter.js +1 -2
  248. package/esm5/src/i18n/tokens.js +1 -2
  249. package/esm5/src/is_dev_mode.js +1 -2
  250. package/esm5/src/ivy_switch.js +1 -2
  251. package/esm5/src/linker/compiler.js +1 -2
  252. package/esm5/src/linker/component_factory.js +1 -2
  253. package/esm5/src/linker/component_factory_resolver.js +1 -2
  254. package/esm5/src/linker/element_ref.js +1 -2
  255. package/esm5/src/linker/ng_module_factory.js +1 -2
  256. package/esm5/src/linker/ng_module_factory_loader.js +37 -13
  257. package/esm5/src/linker/query_list.js +1 -2
  258. package/esm5/src/linker/system_js_ng_module_factory_loader.js +1 -2
  259. package/esm5/src/linker/template_ref.js +1 -2
  260. package/esm5/src/linker/view_container_ref.js +1 -2
  261. package/esm5/src/linker/view_ref.js +1 -2
  262. package/esm5/src/linker.js +1 -2
  263. package/esm5/src/metadata/di.js +1 -2
  264. package/esm5/src/metadata/directives.js +1 -2
  265. package/esm5/src/metadata/lifecycle_hooks.js +1 -2
  266. package/esm5/src/metadata/ng_module.js +1 -2
  267. package/esm5/src/metadata/resource_loading.js +1 -2
  268. package/esm5/src/metadata/view.js +1 -2
  269. package/esm5/src/metadata.js +1 -2
  270. package/esm5/src/platform_core_providers.js +1 -2
  271. package/esm5/src/profile/profile.js +1 -2
  272. package/esm5/src/profile/wtf_impl.js +1 -2
  273. package/esm5/src/r3_symbols.js +1 -2
  274. package/esm5/src/reflection/platform_reflection_capabilities.js +1 -2
  275. package/esm5/src/reflection/reflection.js +1 -2
  276. package/esm5/src/reflection/reflection_capabilities.js +1 -2
  277. package/esm5/src/reflection/reflector.js +1 -2
  278. package/esm5/src/reflection/types.js +1 -2
  279. package/esm5/src/render/api.js +1 -2
  280. package/esm5/src/render.js +1 -2
  281. package/esm5/src/render3/assert.js +15 -2
  282. package/esm5/src/render3/bindings.js +63 -0
  283. package/esm5/src/render3/component.js +23 -16
  284. package/esm5/src/render3/component_ref.js +43 -36
  285. package/esm5/src/render3/context_discovery.js +68 -77
  286. package/esm5/src/render3/definition.js +30 -24
  287. package/esm5/src/render3/di.js +142 -135
  288. package/esm5/src/render3/di_setup.js +20 -21
  289. package/esm5/src/render3/discovery_utils.js +167 -36
  290. package/esm5/src/render3/empty.js +22 -0
  291. package/esm5/src/render3/errors.js +9 -12
  292. package/esm5/src/render3/features/inherit_definition_feature.js +3 -5
  293. package/esm5/src/render3/features/ng_onchanges_feature.js +11 -10
  294. package/esm5/src/render3/features/providers_feature.js +1 -2
  295. package/esm5/src/render3/fields.js +1 -2
  296. package/esm5/src/render3/global_utils.js +4 -3
  297. package/esm5/src/render3/global_utils_api.js +2 -3
  298. package/esm5/src/render3/hooks.js +14 -16
  299. package/esm5/src/render3/i18n.js +22 -27
  300. package/esm5/src/render3/index.js +5 -6
  301. package/esm5/src/render3/instructions.js +698 -593
  302. package/esm5/src/render3/interfaces/container.js +10 -3
  303. package/esm5/src/render3/interfaces/context.js +1 -2
  304. package/esm5/src/render3/interfaces/definition.js +1 -2
  305. package/esm5/src/render3/interfaces/i18n.js +1 -2
  306. package/esm5/src/render3/interfaces/injector.js +5 -6
  307. package/esm5/src/render3/interfaces/node.js +1 -2
  308. package/esm5/src/render3/interfaces/player.js +1 -2
  309. package/esm5/src/render3/interfaces/projection.js +1 -2
  310. package/esm5/src/render3/interfaces/query.js +1 -2
  311. package/esm5/src/render3/interfaces/renderer.js +1 -2
  312. package/esm5/src/render3/interfaces/sanitization.js +1 -2
  313. package/esm5/src/render3/interfaces/styling.js +1 -2
  314. package/esm5/src/render3/interfaces/view.js +3 -4
  315. package/esm5/src/render3/jit/compiler_facade.js +1 -2
  316. package/esm5/src/render3/jit/compiler_facade_interface.js +1 -2
  317. package/esm5/src/render3/jit/directive.js +19 -10
  318. package/esm5/src/render3/jit/environment.js +4 -2
  319. package/esm5/src/render3/jit/injectable.js +17 -18
  320. package/esm5/src/render3/jit/module.js +207 -13
  321. package/esm5/src/render3/jit/pipe.js +1 -2
  322. package/esm5/src/render3/jit/util.js +1 -2
  323. package/esm5/src/render3/metadata.js +1 -2
  324. package/esm5/src/render3/ng_dev_mode.js +1 -2
  325. package/esm5/src/render3/ng_module_ref.js +29 -11
  326. package/esm5/src/render3/node_assert.js +1 -2
  327. package/esm5/src/render3/node_manipulation.js +54 -50
  328. package/esm5/src/render3/node_selector_matcher.js +28 -9
  329. package/esm5/src/render3/pipe.js +33 -19
  330. package/esm5/src/render3/players.js +7 -9
  331. package/esm5/src/render3/pure_function.js +48 -38
  332. package/esm5/src/render3/query.js +8 -9
  333. package/esm5/src/render3/state.js +50 -135
  334. package/esm5/src/render3/styling/class_and_style_bindings.js +684 -214
  335. package/esm5/src/render3/styling/core_player_handler.js +1 -2
  336. package/esm5/src/render3/styling/player_factory.js +1 -2
  337. package/esm5/src/render3/styling/util.js +39 -22
  338. package/esm5/src/render3/tokens.js +1 -2
  339. package/esm5/src/render3/util.js +49 -37
  340. package/esm5/src/render3/view_engine_compatibility.js +20 -33
  341. package/esm5/src/render3/view_engine_compatibility_prebound.js +1 -2
  342. package/esm5/src/render3/view_ref.js +33 -30
  343. package/esm5/src/sanitization/bypass.js +1 -2
  344. package/esm5/src/sanitization/html_sanitizer.js +1 -2
  345. package/esm5/src/sanitization/inert_body.js +4 -5
  346. package/esm5/src/sanitization/sanitization.js +25 -20
  347. package/esm5/src/sanitization/security.js +1 -2
  348. package/esm5/src/sanitization/style_sanitizer.js +1 -2
  349. package/esm5/src/sanitization/url_sanitizer.js +1 -2
  350. package/esm5/src/testability/testability.js +1 -2
  351. package/esm5/src/type.js +1 -2
  352. package/esm5/src/util/decorators.js +1 -2
  353. package/esm5/src/util/lang.js +1 -2
  354. package/esm5/src/util/ng_reflect.js +1 -2
  355. package/esm5/src/util/noop.js +1 -2
  356. package/esm5/src/util/property.js +1 -2
  357. package/esm5/src/util.js +1 -2
  358. package/esm5/src/version.js +2 -3
  359. package/esm5/src/view/element.js +1 -2
  360. package/esm5/src/view/entrypoint.js +1 -2
  361. package/esm5/src/view/errors.js +1 -2
  362. package/esm5/src/view/index.js +1 -2
  363. package/esm5/src/view/ng_content.js +1 -2
  364. package/esm5/src/view/ng_module.js +1 -2
  365. package/esm5/src/view/provider.js +1 -2
  366. package/esm5/src/view/pure_expression.js +1 -2
  367. package/esm5/src/view/query.js +1 -2
  368. package/esm5/src/view/refs.js +1 -2
  369. package/esm5/src/view/services.js +1 -2
  370. package/esm5/src/view/text.js +1 -2
  371. package/esm5/src/view/types.js +1 -2
  372. package/esm5/src/view/util.js +1 -2
  373. package/esm5/src/view/view.js +1 -2
  374. package/esm5/src/view/view_attach.js +1 -2
  375. package/esm5/src/zone/ng_zone.js +1 -2
  376. package/esm5/src/zone.js +1 -2
  377. package/esm5/testing/index.js +1 -2
  378. package/esm5/testing/public_api.js +1 -2
  379. package/esm5/testing/src/async.js +1 -2
  380. package/esm5/testing/src/async_fallback.js +1 -2
  381. package/esm5/testing/src/async_test_completer.js +1 -2
  382. package/esm5/testing/src/before_each.js +1 -2
  383. package/esm5/testing/src/component_fixture.js +1 -2
  384. package/esm5/testing/src/fake_async.js +1 -2
  385. package/esm5/testing/src/fake_async_fallback.js +1 -2
  386. package/esm5/testing/src/lang_utils.js +1 -2
  387. package/esm5/testing/src/logger.js +1 -2
  388. package/esm5/testing/src/metadata_override.js +1 -2
  389. package/esm5/testing/src/metadata_overrider.js +1 -2
  390. package/esm5/testing/src/ng_zone_mock.js +1 -2
  391. package/esm5/testing/src/private_export_testing.js +1 -2
  392. package/esm5/testing/src/r3_test_bed.js +182 -121
  393. package/esm5/testing/src/resolvers.js +11 -7
  394. package/esm5/testing/src/test_bed.js +1 -2
  395. package/esm5/testing/src/test_bed_common.js +1 -2
  396. package/esm5/testing/src/test_compiler.js +1 -2
  397. package/esm5/testing/src/testing.js +1 -2
  398. package/esm5/testing/src/testing_internal.js +2 -3
  399. package/esm5/testing/testing.js +1 -2
  400. package/fesm2015/core.js +8560 -6153
  401. package/fesm2015/core.js.map +1 -1
  402. package/fesm2015/testing.js +351 -229
  403. package/fesm2015/testing.js.map +1 -1
  404. package/fesm5/core.js +5541 -4482
  405. package/fesm5/core.js.map +1 -1
  406. package/fesm5/testing.js +185 -130
  407. package/fesm5/testing.js.map +1 -1
  408. package/package.json +1 -1
  409. package/src/change_detection/constants.d.ts +2 -2
  410. package/src/core_render3_private_export.d.ts +6 -3
  411. package/src/di/injectable.d.ts +3 -2
  412. package/src/di/r3_injector.d.ts +1 -1
  413. package/src/linker/ng_module_factory_loader.d.ts +5 -1
  414. package/src/render3/assert.d.ts +6 -0
  415. package/src/render3/bindings.d.ts +20 -0
  416. package/src/render3/component.d.ts +3 -3
  417. package/src/render3/component_ref.d.ts +14 -4
  418. package/src/render3/context_discovery.d.ts +9 -9
  419. package/src/render3/definition.d.ts +8 -23
  420. package/src/render3/di.d.ts +19 -17
  421. package/src/render3/discovery_utils.d.ts +66 -8
  422. package/src/render3/empty.d.ts +16 -0
  423. package/src/render3/errors.d.ts +1 -1
  424. package/src/render3/global_utils_api.d.ts +1 -1
  425. package/src/render3/hooks.d.ts +7 -6
  426. package/src/render3/index.d.ts +4 -4
  427. package/src/render3/instructions.d.ts +163 -118
  428. package/src/render3/interfaces/container.d.ts +9 -8
  429. package/src/render3/interfaces/context.d.ts +3 -3
  430. package/src/render3/interfaces/definition.d.ts +2 -12
  431. package/src/render3/interfaces/i18n.d.ts +25 -25
  432. package/src/render3/interfaces/injector.d.ts +8 -9
  433. package/src/render3/interfaces/node.d.ts +56 -23
  434. package/src/render3/interfaces/renderer.d.ts +2 -1
  435. package/src/render3/interfaces/styling.d.ts +392 -117
  436. package/src/render3/interfaces/view.d.ts +49 -35
  437. package/src/render3/jit/compiler_facade_interface.d.ts +10 -3
  438. package/src/render3/jit/module.d.ts +9 -1
  439. package/src/render3/metadata.d.ts +1 -1
  440. package/src/render3/ng_module_ref.d.ts +8 -6
  441. package/src/render3/node_manipulation.d.ts +21 -27
  442. package/src/render3/node_selector_matcher.d.ts +2 -2
  443. package/src/render3/state.d.ts +11 -38
  444. package/src/render3/styling/class_and_style_bindings.d.ts +130 -43
  445. package/src/render3/styling/util.d.ts +9 -4
  446. package/src/render3/util.d.ts +31 -25
  447. package/src/render3/view_engine_compatibility.d.ts +5 -12
  448. package/src/render3/view_engine_compatibility_prebound.d.ts +2 -2
  449. package/src/render3/view_ref.d.ts +2 -2
  450. package/src/sanitization/sanitization.d.ts +3 -2
  451. package/testing/src/r3_test_bed.d.ts +15 -0
  452. package/testing/src/resolvers.d.ts +2 -2
  453. package/testing/testing.metadata.json +1 -1
  454. package/testing.d.ts +5 -0
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
3
+ * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
4
  */
5
5
  /**
6
6
  * @license
@@ -9,6 +9,9 @@
9
9
  * Use of this source code is governed by an MIT-style license that can be
10
10
  * found in the LICENSE file at https://angular.io/license
11
11
  */
12
+ // Below are constants for LView indices to help us look up LView members
13
+ // without having to remember the specific indices.
14
+ // Uglify will inline these when minifying so there shouldn't be a cost.
12
15
  /** @type {?} */
13
16
  export const TVIEW = 0;
14
17
  /** @type {?} */
@@ -23,6 +26,7 @@ export const QUERIES = 4;
23
26
  export const HOST = 5;
24
27
  /** @type {?} */
25
28
  export const HOST_NODE = 6;
29
+ // Rename to `T_HOST`?
26
30
  /** @type {?} */
27
31
  export const BINDING_INDEX = 7;
28
32
  /** @type {?} */
@@ -45,57 +49,106 @@ export const CONTAINER_INDEX = 15;
45
49
  export const CONTENT_QUERIES = 16;
46
50
  /** @type {?} */
47
51
  export const DECLARATION_VIEW = 17;
48
- /** *
49
- * Size of LViewData's header. Necessary to adjust for it when setting slots.
50
- @type {?} */
52
+ /**
53
+ * Size of LView's header. Necessary to adjust for it when setting slots.
54
+ * @type {?}
55
+ */
51
56
  export const HEADER_OFFSET = 18;
52
57
  /**
53
58
  * @record
54
59
  */
55
60
  export function OpaqueViewState() { }
56
- /** @type {?} */
57
- OpaqueViewState.prototype.__brand__;
61
+ if (false) {
62
+ /** @type {?} */
63
+ OpaqueViewState.prototype.__brand__;
64
+ }
58
65
  /**
59
- * `LViewData` stores all of the information needed to process the instructions as
66
+ * `LView` stores all of the information needed to process the instructions as
60
67
  * they are invoked from the template. Each embedded view and component view has its
61
- * own `LViewData`. When processing a particular view, we set the `viewData` to that
62
- * `LViewData`. When that view is done processing, the `viewData` is set back to
63
- * whatever the original `viewData` was before (the parent `LViewData`).
68
+ * own `LView`. When processing a particular view, we set the `viewData` to that
69
+ * `LView`. When that view is done processing, the `viewData` is set back to
70
+ * whatever the original `viewData` was before (the parent `LView`).
64
71
  *
65
72
  * Keeping separate state for each view facilities view insertion / deletion, so we
66
73
  * don't have to edit the data array based on which views are present.
67
74
  * @record
68
75
  */
69
- export function LViewData() { }
76
+ export function LView() { }
77
+ if (false) {
78
+ /* Skipping unnamed member:
79
+ readonly[TVIEW]: TView;*/
80
+ /* Skipping unnamed member:
81
+ [FLAGS]: LViewFlags;*/
82
+ /* Skipping unnamed member:
83
+ [PARENT]: LView|null;*/
84
+ /* Skipping unnamed member:
85
+ [NEXT]: LView|LContainer|null;*/
86
+ /* Skipping unnamed member:
87
+ [QUERIES]: LQueries|null;*/
88
+ /* Skipping unnamed member:
89
+ [HOST]: RElement|StylingContext|null;*/
90
+ /* Skipping unnamed member:
91
+ [HOST_NODE]: TViewNode|TElementNode|null;*/
92
+ /* Skipping unnamed member:
93
+ [BINDING_INDEX]: number;*/
94
+ /* Skipping unnamed member:
95
+ [CLEANUP]: any[]|null;*/
96
+ /* Skipping unnamed member:
97
+ [CONTEXT]: {}|RootContext|null;*/
98
+ /* Skipping unnamed member:
99
+ readonly[INJECTOR]: Injector|null;*/
100
+ /* Skipping unnamed member:
101
+ [RENDERER_FACTORY]: RendererFactory3;*/
102
+ /* Skipping unnamed member:
103
+ [RENDERER]: Renderer3;*/
104
+ /* Skipping unnamed member:
105
+ [SANITIZER]: Sanitizer|null;*/
106
+ /* Skipping unnamed member:
107
+ [TAIL]: LView|LContainer|null;*/
108
+ /* Skipping unnamed member:
109
+ [CONTAINER_INDEX]: number;*/
110
+ /* Skipping unnamed member:
111
+ [CONTENT_QUERIES]: QueryList<any>[]|null;*/
112
+ /* Skipping unnamed member:
113
+ [DECLARATION_VIEW]: LView|null;*/
114
+ }
70
115
  /** @enum {number} */
71
- var LViewFlags = {
72
- /**
73
- * Whether or not the view is in creationMode.
74
- *
75
- * This must be stored in the view rather than using `data` as a marker so that
76
- * we can properly support embedded views. Otherwise, when exiting a child view
77
- * back into the parent view, `data` will be defined and `creationMode` will be
78
- * improperly reported as false.
79
- */
116
+ const LViewFlags = {
117
+ /**
118
+ * Whether or not the view is in creationMode.
119
+ *
120
+ * This must be stored in the view rather than using `data` as a marker so that
121
+ * we can properly support embedded views. Otherwise, when exiting a child view
122
+ * back into the parent view, `data` will be defined and `creationMode` will be
123
+ * improperly reported as false.
124
+ */
80
125
  CreationMode: 1,
126
+ /**
127
+ * Whether or not this LView instance is on its first processing pass.
128
+ *
129
+ * An LView instance is considered to be on its "first pass" until it
130
+ * has completed one creation mode run and one update mode run. At this
131
+ * time, the flag is turned off.
132
+ */
133
+ FirstLViewPass: 2,
81
134
  /** Whether this view has default change detection strategy (checks always) or onPush */
82
- CheckAlways: 2,
135
+ CheckAlways: 4,
83
136
  /** Whether or not this view is currently dirty (needing check) */
84
- Dirty: 4,
137
+ Dirty: 8,
85
138
  /** Whether or not this view is currently attached to change detection tree. */
86
- Attached: 8,
87
- /**
88
- * Whether or not the init hooks have run.
89
- *
90
- * If on, the init hooks haven't yet been run and should be executed by the first component that
91
- * runs OR the first cR() instruction that runs (so inits are run for the top level view before
92
- * any embedded views).
93
- */
94
- RunInit: 16,
139
+ Attached: 16,
140
+ /**
141
+ * Whether or not the init hooks have run.
142
+ *
143
+ * If on, the init hooks haven't yet been run and should be executed by the first component that
144
+ * runs OR the first cR() instruction that runs (so inits are run for the top level view before
145
+ * any embedded views).
146
+ */
147
+ RunInit: 32,
95
148
  /** Whether or not this view is destroyed. */
96
- Destroyed: 32,
149
+ Destroyed: 64,
97
150
  /** Whether or not this view is the root view */
98
- IsRoot: 64,
151
+ IsRoot: 128,
99
152
  };
100
153
  export { LViewFlags };
101
154
  /**
@@ -106,235 +159,243 @@ export { LViewFlags };
106
159
  * @record
107
160
  */
108
161
  export function TView() { }
109
- /**
110
- * ID for inline views to determine whether a view is the same as the previous view
111
- * in a certain position. If it's not, we know the new view needs to be inserted
112
- * and the one that exists needs to be removed (e.g. if/else statements)
113
- *
114
- * If this is -1, then this is a component view or a dynamically created view.
115
- * @type {?}
116
- */
117
- TView.prototype.id;
118
- /**
119
- * This is a blueprint used to generate LViewData instances for this TView. Copying this
120
- * blueprint is faster than creating a new LViewData from scratch.
121
- * @type {?}
122
- */
123
- TView.prototype.blueprint;
124
- /**
125
- * The template function used to refresh the view of dynamically created views
126
- * and components. Will be null for inline views.
127
- * @type {?}
128
- */
129
- TView.prototype.template;
130
- /**
131
- * A function containing query-related instructions.
132
- * @type {?}
133
- */
134
- TView.prototype.viewQuery;
135
- /**
136
- * Pointer to the `TNode` that represents the root of the view.
137
- *
138
- * If this is a `TNode` for an `LViewNode`, this is an embedded view of a container.
139
- * We need this pointer to be able to efficiently find this node when inserting the view
140
- * into an anchor.
141
- *
142
- * If this is a `TElementNode`, this is the view of a root component. It has exactly one
143
- * root TNode.
144
- *
145
- * If this is null, this is the view of a component that is not at root. We do not store
146
- * the host TNodes for child component views because they can potentially have several
147
- * different host TNodes, depending on where the component is being used. These host
148
- * TNodes cannot be shared (due to different indices, etc).
149
- * @type {?}
150
- */
151
- TView.prototype.node;
152
- /**
153
- * Whether or not this template has been processed.
154
- * @type {?}
155
- */
156
- TView.prototype.firstTemplatePass;
157
- /**
158
- * Static data equivalent of LView.data[]. Contains TNodes, PipeDefInternal or TI18n.
159
- * @type {?}
160
- */
161
- TView.prototype.data;
162
- /**
163
- * The binding start index is the index at which the data array
164
- * starts to store bindings only. Saving this value ensures that we
165
- * will begin reading bindings at the correct point in the array when
166
- * we are in update mode.
167
- * @type {?}
168
- */
169
- TView.prototype.bindingStartIndex;
170
- /**
171
- * The index where the "expando" section of `LViewData` begins. The expando
172
- * section contains injectors, directive instances, and host binding values.
173
- * Unlike the "consts" and "vars" sections of `LViewData`, the length of this
174
- * section cannot be calculated at compile-time because directives are matched
175
- * at runtime to preserve locality.
176
- *
177
- * We store this start index so we know where to start checking host bindings
178
- * in `setHostBindings`.
179
- * @type {?}
180
- */
181
- TView.prototype.expandoStartIndex;
182
- /**
183
- * Index of the host node of the first LView or LContainer beneath this LView in
184
- * the hierarchy.
185
- *
186
- * Necessary to store this so views can traverse through their nested views
187
- * to remove listeners and call onDestroy callbacks.
188
- *
189
- * For embedded views, we store the index of an LContainer's host rather than the first
190
- * LView to avoid managing splicing when views are added/removed.
191
- * @type {?}
192
- */
193
- TView.prototype.childIndex;
194
- /**
195
- * A reference to the first child node located in the view.
196
- * @type {?}
197
- */
198
- TView.prototype.firstChild;
199
- /**
200
- * Set of instructions used to process host bindings efficiently.
201
- *
202
- * See VIEW_DATA.md for more information.
203
- * @type {?}
204
- */
205
- TView.prototype.expandoInstructions;
206
- /**
207
- * Full registry of directives and components that may be found in this view.
208
- *
209
- * It's necessary to keep a copy of the full def list on the TView so it's possible
210
- * to render template functions without a host component.
211
- * @type {?}
212
- */
213
- TView.prototype.directiveRegistry;
214
- /**
215
- * Full registry of pipes that may be found in this view.
216
- *
217
- * The property is either an array of `PipeDefs`s or a function which returns the array of
218
- * `PipeDefs`s. The function is necessary to be able to support forward declarations.
219
- *
220
- * It's necessary to keep a copy of the full def list on the TView so it's possible
221
- * to render template functions without a host component.
222
- * @type {?}
223
- */
224
- TView.prototype.pipeRegistry;
225
- /**
226
- * Array of ngOnInit and ngDoCheck hooks that should be executed for this view in
227
- * creation mode.
228
- *
229
- * Even indices: Directive index
230
- * Odd indices: Hook function
231
- * @type {?}
232
- */
233
- TView.prototype.initHooks;
234
- /**
235
- * Array of ngDoCheck hooks that should be executed for this view in update mode.
236
- *
237
- * Even indices: Directive index
238
- * Odd indices: Hook function
239
- * @type {?}
240
- */
241
- TView.prototype.checkHooks;
242
- /**
243
- * Array of ngAfterContentInit and ngAfterContentChecked hooks that should be executed
244
- * for this view in creation mode.
245
- *
246
- * Even indices: Directive index
247
- * Odd indices: Hook function
248
- * @type {?}
249
- */
250
- TView.prototype.contentHooks;
251
- /**
252
- * Array of ngAfterContentChecked hooks that should be executed for this view in update
253
- * mode.
254
- *
255
- * Even indices: Directive index
256
- * Odd indices: Hook function
257
- * @type {?}
258
- */
259
- TView.prototype.contentCheckHooks;
260
- /**
261
- * Array of ngAfterViewInit and ngAfterViewChecked hooks that should be executed for
262
- * this view in creation mode.
263
- *
264
- * Even indices: Directive index
265
- * Odd indices: Hook function
266
- * @type {?}
267
- */
268
- TView.prototype.viewHooks;
269
- /**
270
- * Array of ngAfterViewChecked hooks that should be executed for this view in
271
- * update mode.
272
- *
273
- * Even indices: Directive index
274
- * Odd indices: Hook function
275
- * @type {?}
276
- */
277
- TView.prototype.viewCheckHooks;
278
- /**
279
- * Array of ngOnDestroy hooks that should be executed when this view is destroyed.
280
- *
281
- * Even indices: Directive index
282
- * Odd indices: Hook function
283
- * @type {?}
284
- */
285
- TView.prototype.destroyHooks;
286
- /**
287
- * Array of pipe ngOnDestroy hooks that should be executed when this view is destroyed.
288
- *
289
- * Even indices: Index of pipe in data
290
- * Odd indices: Hook function
291
- *
292
- * These must be stored separately from directive destroy hooks because their contexts
293
- * are stored in data.
294
- * @type {?}
295
- */
296
- TView.prototype.pipeDestroyHooks;
297
- /**
298
- * When a view is destroyed, listeners need to be released and outputs need to be
299
- * unsubscribed. This cleanup array stores both listener data (in chunks of 4)
300
- * and output data (in chunks of 2) for a particular view. Combining the arrays
301
- * saves on memory (70 bytes per array) and on a few bytes of code size (for two
302
- * separate for loops).
303
- *
304
- * If it's a native DOM listener being stored:
305
- * 1st index is: event name to remove
306
- * 2nd index is: index of native element in LView.data[]
307
- * 3rd index is: index of wrapped listener function in LView.cleanupInstances[]
308
- * 4th index is: useCapture boolean
309
- *
310
- * If it's a renderer2 style listener or ViewRef destroy hook being stored:
311
- * 1st index is: index of the cleanup function in LView.cleanupInstances[]
312
- * 2nd index is: null
313
- *
314
- * If it's an output subscription or query list destroy hook:
315
- * 1st index is: output unsubscribe function / query list destroy function
316
- * 2nd index is: index of function context in LView.cleanupInstances[]
317
- * @type {?}
318
- */
319
- TView.prototype.cleanup;
320
- /**
321
- * A list of element indices for child components that will need to be
322
- * refreshed when the current view has finished its check. These indices have
323
- * already been adjusted for the HEADER_OFFSET.
324
- *
325
- * @type {?}
326
- */
327
- TView.prototype.components;
328
- /**
329
- * A list of indices for child directives that have content queries.
330
- *
331
- * Even indices: Directive indices
332
- * Odd indices: Starting index of content queries (stored in CONTENT_QUERIES) for this directive
333
- * @type {?}
334
- */
335
- TView.prototype.contentQueries;
162
+ if (false) {
163
+ /**
164
+ * ID for inline views to determine whether a view is the same as the previous view
165
+ * in a certain position. If it's not, we know the new view needs to be inserted
166
+ * and the one that exists needs to be removed (e.g. if/else statements)
167
+ *
168
+ * If this is -1, then this is a component view or a dynamically created view.
169
+ * @type {?}
170
+ */
171
+ TView.prototype.id;
172
+ /**
173
+ * This is a blueprint used to generate LView instances for this TView. Copying this
174
+ * blueprint is faster than creating a new LView from scratch.
175
+ * @type {?}
176
+ */
177
+ TView.prototype.blueprint;
178
+ /**
179
+ * The template function used to refresh the view of dynamically created views
180
+ * and components. Will be null for inline views.
181
+ * @type {?}
182
+ */
183
+ TView.prototype.template;
184
+ /**
185
+ * A function containing query-related instructions.
186
+ * @type {?}
187
+ */
188
+ TView.prototype.viewQuery;
189
+ /**
190
+ * Pointer to the `TNode` that represents the root of the view.
191
+ *
192
+ * If this is a `TViewNode` for an `LViewNode`, this is an embedded view of a container.
193
+ * We need this pointer to be able to efficiently find this node when inserting the view
194
+ * into an anchor.
195
+ *
196
+ * If this is a `TElementNode`, this is the view of a root component. It has exactly one
197
+ * root TNode.
198
+ *
199
+ * If this is null, this is the view of a component that is not at root. We do not store
200
+ * the host TNodes for child component views because they can potentially have several
201
+ * different host TNodes, depending on where the component is being used. These host
202
+ * TNodes cannot be shared (due to different indices, etc).
203
+ * @type {?}
204
+ */
205
+ TView.prototype.node;
206
+ /**
207
+ * Whether or not this template has been processed.
208
+ * @type {?}
209
+ */
210
+ TView.prototype.firstTemplatePass;
211
+ /**
212
+ * Static data equivalent of LView.data[]. Contains TNodes, PipeDefInternal or TI18n.
213
+ * @type {?}
214
+ */
215
+ TView.prototype.data;
216
+ /**
217
+ * The binding start index is the index at which the data array
218
+ * starts to store bindings only. Saving this value ensures that we
219
+ * will begin reading bindings at the correct point in the array when
220
+ * we are in update mode.
221
+ * @type {?}
222
+ */
223
+ TView.prototype.bindingStartIndex;
224
+ /**
225
+ * The index where the "expando" section of `LView` begins. The expando
226
+ * section contains injectors, directive instances, and host binding values.
227
+ * Unlike the "consts" and "vars" sections of `LView`, the length of this
228
+ * section cannot be calculated at compile-time because directives are matched
229
+ * at runtime to preserve locality.
230
+ *
231
+ * We store this start index so we know where to start checking host bindings
232
+ * in `setHostBindings`.
233
+ * @type {?}
234
+ */
235
+ TView.prototype.expandoStartIndex;
236
+ /**
237
+ * Index of the host node of the first LView or LContainer beneath this LView in
238
+ * the hierarchy.
239
+ *
240
+ * Necessary to store this so views can traverse through their nested views
241
+ * to remove listeners and call onDestroy callbacks.
242
+ *
243
+ * For embedded views, we store the index of an LContainer's host rather than the first
244
+ * LView to avoid managing splicing when views are added/removed.
245
+ * @type {?}
246
+ */
247
+ TView.prototype.childIndex;
248
+ /**
249
+ * A reference to the first child node located in the view.
250
+ * @type {?}
251
+ */
252
+ TView.prototype.firstChild;
253
+ /**
254
+ * Set of instructions used to process host bindings efficiently.
255
+ *
256
+ * See VIEW_DATA.md for more information.
257
+ * @type {?}
258
+ */
259
+ TView.prototype.expandoInstructions;
260
+ /**
261
+ * Full registry of directives and components that may be found in this view.
262
+ *
263
+ * It's necessary to keep a copy of the full def list on the TView so it's possible
264
+ * to render template functions without a host component.
265
+ * @type {?}
266
+ */
267
+ TView.prototype.directiveRegistry;
268
+ /**
269
+ * Full registry of pipes that may be found in this view.
270
+ *
271
+ * The property is either an array of `PipeDefs`s or a function which returns the array of
272
+ * `PipeDefs`s. The function is necessary to be able to support forward declarations.
273
+ *
274
+ * It's necessary to keep a copy of the full def list on the TView so it's possible
275
+ * to render template functions without a host component.
276
+ * @type {?}
277
+ */
278
+ TView.prototype.pipeRegistry;
279
+ /**
280
+ * Array of ngOnInit and ngDoCheck hooks that should be executed for this view in
281
+ * creation mode.
282
+ *
283
+ * Even indices: Directive index
284
+ * Odd indices: Hook function
285
+ * @type {?}
286
+ */
287
+ TView.prototype.initHooks;
288
+ /**
289
+ * Array of ngDoCheck hooks that should be executed for this view in update mode.
290
+ *
291
+ * Even indices: Directive index
292
+ * Odd indices: Hook function
293
+ * @type {?}
294
+ */
295
+ TView.prototype.checkHooks;
296
+ /**
297
+ * Array of ngAfterContentInit and ngAfterContentChecked hooks that should be executed
298
+ * for this view in creation mode.
299
+ *
300
+ * Even indices: Directive index
301
+ * Odd indices: Hook function
302
+ * @type {?}
303
+ */
304
+ TView.prototype.contentHooks;
305
+ /**
306
+ * Array of ngAfterContentChecked hooks that should be executed for this view in update
307
+ * mode.
308
+ *
309
+ * Even indices: Directive index
310
+ * Odd indices: Hook function
311
+ * @type {?}
312
+ */
313
+ TView.prototype.contentCheckHooks;
314
+ /**
315
+ * Array of ngAfterViewInit and ngAfterViewChecked hooks that should be executed for
316
+ * this view in creation mode.
317
+ *
318
+ * Even indices: Directive index
319
+ * Odd indices: Hook function
320
+ * @type {?}
321
+ */
322
+ TView.prototype.viewHooks;
323
+ /**
324
+ * Array of ngAfterViewChecked hooks that should be executed for this view in
325
+ * update mode.
326
+ *
327
+ * Even indices: Directive index
328
+ * Odd indices: Hook function
329
+ * @type {?}
330
+ */
331
+ TView.prototype.viewCheckHooks;
332
+ /**
333
+ * Array of ngOnDestroy hooks that should be executed when this view is destroyed.
334
+ *
335
+ * Even indices: Directive index
336
+ * Odd indices: Hook function
337
+ * @type {?}
338
+ */
339
+ TView.prototype.destroyHooks;
340
+ /**
341
+ * Array of pipe ngOnDestroy hooks that should be executed when this view is destroyed.
342
+ *
343
+ * Even indices: Index of pipe in data
344
+ * Odd indices: Hook function
345
+ *
346
+ * These must be stored separately from directive destroy hooks because their contexts
347
+ * are stored in data.
348
+ * @type {?}
349
+ */
350
+ TView.prototype.pipeDestroyHooks;
351
+ /**
352
+ * When a view is destroyed, listeners need to be released and outputs need to be
353
+ * unsubscribed. This cleanup array stores both listener data (in chunks of 4)
354
+ * and output data (in chunks of 2) for a particular view. Combining the arrays
355
+ * saves on memory (70 bytes per array) and on a few bytes of code size (for two
356
+ * separate for loops).
357
+ *
358
+ * If it's a native DOM listener or output subscription being stored:
359
+ * 1st index is: event name `name = tView.cleanup[i+0]`
360
+ * 2nd index is: index of native element `element = lView[tView.cleanup[i+1]]`
361
+ * 3rd index is: index of listener function `listener = lView[CLEANUP][tView.cleanup[i+2]]`
362
+ * 4th index is: `useCaptureOrIndx = tView.cleanup[i+3]`
363
+ * `typeof useCaptureOrIndx == 'boolean' : useCapture boolean
364
+ * `typeof useCaptureOrIndx == 'number':
365
+ * `useCaptureOrIndx >= 0` `removeListener = LView[CLEANUP][useCaptureOrIndx]`
366
+ * `useCaptureOrIndx < 0` `subscription = LView[CLEANUP][-useCaptureOrIndx]`
367
+ *
368
+ * If it's a renderer2 style listener or ViewRef destroy hook being stored:
369
+ * 1st index is: index of the cleanup function in LView.cleanupInstances[]
370
+ * 2nd index is: `null`
371
+ * `lView[CLEANUP][tView.cleanup[i+0]]()`
372
+ *
373
+ * If it's an output subscription or query list destroy hook:
374
+ * 1st index is: output unsubscribe function / query list destroy function
375
+ * 2nd index is: index of function context in LView.cleanupInstances[]
376
+ * `tView.cleanup[i+0].call(lView[CLEANUP][tView.cleanup[i+1]])`
377
+ * @type {?}
378
+ */
379
+ TView.prototype.cleanup;
380
+ /**
381
+ * A list of element indices for child components that will need to be
382
+ * refreshed when the current view has finished its check. These indices have
383
+ * already been adjusted for the HEADER_OFFSET.
384
+ *
385
+ * @type {?}
386
+ */
387
+ TView.prototype.components;
388
+ /**
389
+ * A list of indices for child directives that have content queries.
390
+ *
391
+ * Even indices: Directive indices
392
+ * Odd indices: Starting index of content queries (stored in CONTENT_QUERIES) for this directive
393
+ * @type {?}
394
+ */
395
+ TView.prototype.contentQueries;
396
+ }
336
397
  /** @enum {number} */
337
- var RootContextFlags = {
398
+ const RootContextFlags = {
338
399
  Empty: 0, DetectChanges: 1, FlushPlayers: 2,
339
400
  };
340
401
  export { RootContextFlags };
@@ -344,42 +405,39 @@ export { RootContextFlags };
344
405
  * @record
345
406
  */
346
407
  export function RootContext() { }
347
- /**
348
- * A function used for scheduling change detection in the future. Usually
349
- * this is `requestAnimationFrame`.
350
- * @type {?}
351
- */
352
- RootContext.prototype.scheduler;
353
- /**
354
- * A promise which is resolved when all components are considered clean (not dirty).
355
- *
356
- * This promise is overwritten every time a first call to {\@link markDirty} is invoked.
357
- * @type {?}
358
- */
359
- RootContext.prototype.clean;
360
- /**
361
- * RootComponents - The components that were instantiated by the call to
362
- * {\@link renderComponent}.
363
- * @type {?}
364
- */
365
- RootContext.prototype.components;
366
- /**
367
- * The player flushing handler to kick off all animations
368
- * @type {?}
369
- */
370
- RootContext.prototype.playerHandler;
371
- /**
372
- * What render-related operations to run once a scheduler has been set
373
- * @type {?}
374
- */
375
- RootContext.prototype.flags;
376
- /** @typedef {?} */
377
- var HookData;
378
- export { HookData };
379
- /** @typedef {?} */
380
- var TData;
381
- export { TData };
408
+ if (false) {
409
+ /**
410
+ * A function used for scheduling change detection in the future. Usually
411
+ * this is `requestAnimationFrame`.
412
+ * @type {?}
413
+ */
414
+ RootContext.prototype.scheduler;
415
+ /**
416
+ * A promise which is resolved when all components are considered clean (not dirty).
417
+ *
418
+ * This promise is overwritten every time a first call to {\@link markDirty} is invoked.
419
+ * @type {?}
420
+ */
421
+ RootContext.prototype.clean;
422
+ /**
423
+ * RootComponents - The components that were instantiated by the call to
424
+ * {\@link renderComponent}.
425
+ * @type {?}
426
+ */
427
+ RootContext.prototype.components;
428
+ /**
429
+ * The player flushing handler to kick off all animations
430
+ * @type {?}
431
+ */
432
+ RootContext.prototype.playerHandler;
433
+ /**
434
+ * What render-related operations to run once a scheduler has been set
435
+ * @type {?}
436
+ */
437
+ RootContext.prototype.flags;
438
+ }
439
+ // Note: This hack is necessary so we don't erroneously get a circular dependency
440
+ // failure based on types.
382
441
  /** @type {?} */
383
442
  export const unusedValueExportToPlacateAjd = 1;
384
-
385
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3JlbmRlcjMvaW50ZXJmYWNlcy92aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQTBCQSxhQUFhLEtBQUssR0FBRyxDQUFDLENBQUM7O0FBQ3ZCLGFBQWEsS0FBSyxHQUFHLENBQUMsQ0FBQzs7QUFDdkIsYUFBYSxNQUFNLEdBQUcsQ0FBQyxDQUFDOztBQUN4QixhQUFhLElBQUksR0FBRyxDQUFDLENBQUM7O0FBQ3RCLGFBQWEsT0FBTyxHQUFHLENBQUMsQ0FBQzs7QUFDekIsYUFBYSxJQUFJLEdBQUcsQ0FBQyxDQUFDOztBQUN0QixhQUFhLFNBQVMsR0FBRyxDQUFDLENBQUM7O0FBQzNCLGFBQWEsYUFBYSxHQUFHLENBQUMsQ0FBQzs7QUFDL0IsYUFBYSxPQUFPLEdBQUcsQ0FBQyxDQUFDOztBQUN6QixhQUFhLE9BQU8sR0FBRyxDQUFDLENBQUM7O0FBQ3pCLGFBQWEsUUFBUSxHQUFHLEVBQUUsQ0FBQzs7QUFDM0IsYUFBYSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7O0FBQ25DLGFBQWEsUUFBUSxHQUFHLEVBQUUsQ0FBQzs7QUFDM0IsYUFBYSxTQUFTLEdBQUcsRUFBRSxDQUFDOztBQUM1QixhQUFhLElBQUksR0FBRyxFQUFFLENBQUM7O0FBQ3ZCLGFBQWEsZUFBZSxHQUFHLEVBQUUsQ0FBQzs7QUFDbEMsYUFBYSxlQUFlLEdBQUcsRUFBRSxDQUFDOztBQUNsQyxhQUFhLGdCQUFnQixHQUFHLEVBQUUsQ0FBQzs7OztBQUVuQyxhQUFhLGFBQWEsR0FBRyxFQUFFLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBa0w5QixlQUF3Qjs7SUFHeEIsY0FBdUI7O0lBR3ZCLFFBQWlCOztJQUdqQixXQUFvQjs7Ozs7Ozs7SUFTcEIsV0FBbUI7O0lBR25CLGFBQXFCOztJQUdyQixVQUFrQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBME9nQixRQUFZLEVBQUUsZ0JBQW9CLEVBQUUsZUFBbUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdFM0YsYUFBYSw2QkFBNkIsR0FBRyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7SW5qZWN0aW9uVG9rZW59IGZyb20gJy4uLy4uL2RpL2luamVjdGlvbl90b2tlbic7XG5pbXBvcnQge0luamVjdG9yfSBmcm9tICcuLi8uLi9kaS9pbmplY3Rvcic7XG5pbXBvcnQge1F1ZXJ5TGlzdH0gZnJvbSAnLi4vLi4vbGlua2VyJztcbmltcG9ydCB7U2FuaXRpemVyfSBmcm9tICcuLi8uLi9zYW5pdGl6YXRpb24vc2VjdXJpdHknO1xuaW1wb3J0IHtUeXBlfSBmcm9tICcuLi8uLi90eXBlJztcbmltcG9ydCB7TENvbnRhaW5lcn0gZnJvbSAnLi9jb250YWluZXInO1xuaW1wb3J0IHtDb21wb25lbnREZWYsIENvbXBvbmVudFF1ZXJ5LCBDb21wb25lbnRUZW1wbGF0ZSwgRGlyZWN0aXZlRGVmLCBEaXJlY3RpdmVEZWZMaXN0LCBIb3N0QmluZGluZ3NGdW5jdGlvbiwgUGlwZURlZiwgUGlwZURlZkxpc3R9IGZyb20gJy4vZGVmaW5pdGlvbic7XG5pbXBvcnQge0kxOG5VcGRhdGVPcENvZGVzLCBUSTE4bn0gZnJvbSAnLi9pMThuJztcbmltcG9ydCB7VEVsZW1lbnROb2RlLCBUTm9kZSwgVFZpZXdOb2RlfSBmcm9tICcuL25vZGUnO1xuaW1wb3J0IHtQbGF5ZXJIYW5kbGVyfSBmcm9tICcuL3BsYXllcic7XG5pbXBvcnQge0xRdWVyaWVzfSBmcm9tICcuL3F1ZXJ5JztcbmltcG9ydCB7UkVsZW1lbnQsIFJlbmRlcmVyMywgUmVuZGVyZXJGYWN0b3J5M30gZnJvbSAnLi9yZW5kZXJlcic7XG5pbXBvcnQge1N0eWxpbmdDb250ZXh0fSBmcm9tICcuL3N0eWxpbmcnO1xuXG5cbi8vIEJlbG93IGFyZSBjb25zdGFudHMgZm9yIExWaWV3RGF0YSBpbmRpY2VzIHRvIGhlbHAgdXMgbG9vayB1cCBMVmlld0RhdGEgbWVtYmVyc1xuLy8gd2l0aG91dCBoYXZpbmcgdG8gcmVtZW1iZXIgdGhlIHNwZWNpZmljIGluZGljZXMuXG4vLyBVZ2xpZnkgd2lsbCBpbmxpbmUgdGhlc2Ugd2hlbiBtaW5pZnlpbmcgc28gdGhlcmUgc2hvdWxkbid0IGJlIGEgY29zdC5cbmV4cG9ydCBjb25zdCBUVklFVyA9IDA7XG5leHBvcnQgY29uc3QgRkxBR1MgPSAxO1xuZXhwb3J0IGNvbnN0IFBBUkVOVCA9IDI7XG5leHBvcnQgY29uc3QgTkVYVCA9IDM7XG5leHBvcnQgY29uc3QgUVVFUklFUyA9IDQ7XG5leHBvcnQgY29uc3QgSE9TVCA9IDU7XG5leHBvcnQgY29uc3QgSE9TVF9OT0RFID0gNjsgIC8vIFJlbmFtZSB0byBgVF9IT1NUYD9cbmV4cG9ydCBjb25zdCBCSU5ESU5HX0lOREVYID0gNztcbmV4cG9ydCBjb25zdCBDTEVBTlVQID0gODtcbmV4cG9ydCBjb25zdCBDT05URVhUID0gOTtcbmV4cG9ydCBjb25zdCBJTkpFQ1RPUiA9IDEwO1xuZXhwb3J0IGNvbnN0IFJFTkRFUkVSX0ZBQ1RPUlkgPSAxMTtcbmV4cG9ydCBjb25zdCBSRU5ERVJFUiA9IDEyO1xuZXhwb3J0IGNvbnN0IFNBTklUSVpFUiA9IDEzO1xuZXhwb3J0IGNvbnN0IFRBSUwgPSAxNDtcbmV4cG9ydCBjb25zdCBDT05UQUlORVJfSU5ERVggPSAxNTtcbmV4cG9ydCBjb25zdCBDT05URU5UX1FVRVJJRVMgPSAxNjtcbmV4cG9ydCBjb25zdCBERUNMQVJBVElPTl9WSUVXID0gMTc7XG4vKiogU2l6ZSBvZiBMVmlld0RhdGEncyBoZWFkZXIuIE5lY2Vzc2FyeSB0byBhZGp1c3QgZm9yIGl0IHdoZW4gc2V0dGluZyBzbG90cy4gICovXG5leHBvcnQgY29uc3QgSEVBREVSX09GRlNFVCA9IDE4O1xuXG5cbi8vIFRoaXMgaW50ZXJmYWNlIHJlcGxhY2VzIHRoZSByZWFsIExWaWV3RGF0YSBpbnRlcmZhY2UgaWYgaXQgaXMgYW4gYXJnIG9yIGFcbi8vIHJldHVybiB2YWx1ZSBvZiBhIHB1YmxpYyBpbnN0cnVjdGlvbi4gVGhpcyBlbnN1cmVzIHdlIGRvbid0IG5lZWQgdG8gZXhwb3NlXG4vLyB0aGUgYWN0dWFsIGludGVyZmFjZSwgd2hpY2ggc2hvdWxkIGJlIGtlcHQgcHJpdmF0ZS5cbmV4cG9ydCBpbnRlcmZhY2UgT3BhcXVlVmlld1N0YXRlIHtcbiAgJ19fYnJhbmRfXyc6ICdCcmFuZCBmb3IgT3BhcXVlVmlld1N0YXRlIHRoYXQgbm90aGluZyB3aWxsIG1hdGNoJztcbn1cblxuXG4vKipcbiAqIGBMVmlld0RhdGFgIHN0b3JlcyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBwcm9jZXNzIHRoZSBpbnN0cnVjdGlvbnMgYXNcbiAqIHRoZXkgYXJlIGludm9rZWQgZnJvbSB0aGUgdGVtcGxhdGUuIEVhY2ggZW1iZWRkZWQgdmlldyBhbmQgY29tcG9uZW50IHZpZXcgaGFzIGl0c1xuICogb3duIGBMVmlld0RhdGFgLiBXaGVuIHByb2Nlc3NpbmcgYSBwYXJ0aWN1bGFyIHZpZXcsIHdlIHNldCB0aGUgYHZpZXdEYXRhYCB0byB0aGF0XG4gKiBgTFZpZXdEYXRhYC4gV2hlbiB0aGF0IHZpZXcgaXMgZG9uZSBwcm9jZXNzaW5nLCB0aGUgYHZpZXdEYXRhYCBpcyBzZXQgYmFjayB0b1xuICogd2hhdGV2ZXIgdGhlIG9yaWdpbmFsIGB2aWV3RGF0YWAgd2FzIGJlZm9yZSAodGhlIHBhcmVudCBgTFZpZXdEYXRhYCkuXG4gKlxuICogS2VlcGluZyBzZXBhcmF0ZSBzdGF0ZSBmb3IgZWFjaCB2aWV3IGZhY2lsaXRpZXMgdmlldyBpbnNlcnRpb24gLyBkZWxldGlvbiwgc28gd2VcbiAqIGRvbid0IGhhdmUgdG8gZWRpdCB0aGUgZGF0YSBhcnJheSBiYXNlZCBvbiB3aGljaCB2aWV3cyBhcmUgcHJlc2VudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMVmlld0RhdGEgZXh0ZW5kcyBBcnJheTxhbnk+IHtcbiAgLyoqXG4gICAqIFRoZSBzdGF0aWMgZGF0YSBmb3IgdGhpcyB2aWV3LiBXZSBuZWVkIGEgcmVmZXJlbmNlIHRvIHRoaXMgc28gd2UgY2FuIGVhc2lseSB3YWxrIHVwIHRoZVxuICAgKiBub2RlIHRyZWUgaW4gREkgYW5kIGdldCB0aGUgVFZpZXcuZGF0YSBhcnJheSBhc3NvY2lhdGVkIHdpdGggYSBub2RlICh3aGVyZSB0aGVcbiAgICogZGlyZWN0aXZlIGRlZnMgYXJlIHN0b3JlZCkuXG4gICAqL1xuICByZWFkb25seVtUVklFV106IFRWaWV3O1xuXG4gIC8qKiBGbGFncyBmb3IgdGhpcyB2aWV3LiBTZWUgTFZpZXdGbGFncyBmb3IgbW9yZSBpbmZvLiAqL1xuICBbRkxBR1NdOiBMVmlld0ZsYWdzO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IHZpZXcgaXMgbmVlZGVkIHdoZW4gd2UgZXhpdCB0aGUgdmlldyBhbmQgbXVzdCByZXN0b3JlIHRoZSBwcmV2aW91c1xuICAgKiBgTFZpZXdEYXRhYC4gV2l0aG91dCB0aGlzLCB0aGUgcmVuZGVyIG1ldGhvZCB3b3VsZCBoYXZlIHRvIGtlZXAgYSBzdGFjayBvZlxuICAgKiB2aWV3cyBhcyBpdCBpcyByZWN1cnNpdmVseSByZW5kZXJpbmcgdGVtcGxhdGVzLlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBcImluc2VydGlvblwiIHZpZXcgZm9yIGVtYmVkZGVkIHZpZXdzLiBUaGlzIGFsbG93cyB1cyB0byBwcm9wZXJseVxuICAgKiBkZXN0cm95IGVtYmVkZGVkIHZpZXdzLlxuICAgKi9cbiAgW1BBUkVOVF06IExWaWV3RGF0YXxudWxsO1xuXG4gIC8qKlxuICAgKlxuICAgKiBUaGUgbmV4dCBzaWJsaW5nIExWaWV3RGF0YSBvciBMQ29udGFpbmVyLlxuICAgKlxuICAgKiBBbGxvd3MgdXMgdG8gcHJvcGFnYXRlIGJldHdlZW4gc2libGluZyB2aWV3IHN0YXRlcyB0aGF0IGFyZW4ndCBpbiB0aGUgc2FtZVxuICAgKiBjb250YWluZXIuIEVtYmVkZGVkIHZpZXdzIGFscmVhZHkgaGF2ZSBhIG5vZGUubmV4dCwgYnV0IGl0IGlzIG9ubHkgc2V0IGZvclxuICAgKiB2aWV3cyBpbiB0aGUgc2FtZSBjb250YWluZXIuIFdlIG5lZWQgYSB3YXkgdG8gbGluayBjb21wb25lbnQgdmlld3MgYW5kIHZpZXdzXG4gICAqIGFjcm9zcyBjb250YWluZXJzIGFzIHdlbGwuXG4gICAqL1xuICBbTkVYVF06IExWaWV3RGF0YXxMQ29udGFpbmVyfG51bGw7XG5cbiAgLyoqIFF1ZXJpZXMgYWN0aXZlIGZvciB0aGlzIHZpZXcgLSBub2RlcyBmcm9tIGEgdmlldyBhcmUgcmVwb3J0ZWQgdG8gdGhvc2UgcXVlcmllcy4gKi9cbiAgW1FVRVJJRVNdOiBMUXVlcmllc3xudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgaG9zdCBub2RlIGZvciB0aGlzIExWaWV3RGF0YSBpbnN0YW5jZSwgaWYgdGhpcyBpcyBhIGNvbXBvbmVudCB2aWV3LlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIGFuIGVtYmVkZGVkIHZpZXcsIEhPU1Qgd2lsbCBiZSBudWxsLlxuICAgKi9cbiAgW0hPU1RdOiBSRWxlbWVudHxTdHlsaW5nQ29udGV4dHxudWxsO1xuXG4gIC8qKlxuICAgKiBQb2ludGVyIHRvIHRoZSBgVFZpZXdOb2RlYCBvciBgVEVsZW1lbnROb2RlYCB3aGljaCByZXByZXNlbnRzIHRoZSByb290IG9mIHRoZSB2aWV3LlxuICAgKlxuICAgKiBJZiBgVFZpZXdOb2RlYCwgdGhpcyBpcyBhbiBlbWJlZGRlZCB2aWV3IG9mIGEgY29udGFpbmVyLiBXZSBuZWVkIHRoaXMgdG8gYmUgYWJsZSB0b1xuICAgKiBlZmZpY2llbnRseSBmaW5kIHRoZSBgTFZpZXdOb2RlYCB3aGVuIGluc2VydGluZyB0aGUgdmlldyBpbnRvIGFuIGFuY2hvci5cbiAgICpcbiAgICogSWYgYFRFbGVtZW50Tm9kZWAsIHRoaXMgaXMgdGhlIExWaWV3IG9mIGEgY29tcG9uZW50LlxuICAgKlxuICAgKiBJZiBudWxsLCB0aGlzIGlzIHRoZSByb290IHZpZXcgb2YgYW4gYXBwbGljYXRpb24gKHJvb3QgY29tcG9uZW50IGlzIGluIHRoaXMgdmlldykuXG4gICAqL1xuICBbSE9TVF9OT0RFXTogVFZpZXdOb2RlfFRFbGVtZW50Tm9kZXxudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgYmluZGluZyBpbmRleCB3ZSBzaG91bGQgYWNjZXNzIG5leHQuXG4gICAqXG4gICAqIFRoaXMgaXMgc3RvcmVkIHNvIHRoYXQgYmluZGluZ3MgY2FuIGNvbnRpbnVlIHdoZXJlIHRoZXkgbGVmdCBvZmZcbiAgICogaWYgYSB2aWV3IGlzIGxlZnQgbWlkd2F5IHRocm91Z2ggcHJvY2Vzc2luZyBiaW5kaW5ncyAoZS5nLiBpZiB0aGVyZSBpc1xuICAgKiBhIHNldHRlciB0aGF0IGNyZWF0ZXMgYW4gZW1iZWRkZWQgdmlldywgbGlrZSBpbiBuZ0lmKS5cbiAgICovXG4gIFtCSU5ESU5HX0lOREVYXTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGVuIGEgdmlldyBpcyBkZXN0cm95ZWQsIGxpc3RlbmVycyBuZWVkIHRvIGJlIHJlbGVhc2VkIGFuZCBvdXRwdXRzIG5lZWQgdG8gYmVcbiAgICogdW5zdWJzY3JpYmVkLiBUaGlzIGNvbnRleHQgYXJyYXkgc3RvcmVzIGJvdGggbGlzdGVuZXIgZnVuY3Rpb25zIHdyYXBwZWQgd2l0aFxuICAgKiB0aGVpciBjb250ZXh0IGFuZCBvdXRwdXQgc3Vic2NyaXB0aW9uIGluc3RhbmNlcyBmb3IgYSBwYXJ0aWN1bGFyIHZpZXcuXG4gICAqXG4gICAqIFRoZXNlIGNoYW5nZSBwZXIgTFZpZXcgaW5zdGFuY2UsIHNvIHRoZXkgY2Fubm90IGJlIHN0b3JlZCBvbiBUVmlldy4gSW5zdGVhZCxcbiAgICogVFZpZXcuY2xlYW51cCBzYXZlcyBhbiBpbmRleCB0byB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgaW4gdGhpcyBhcnJheS5cbiAgICovXG4gIC8vIFRPRE86IGZsYXR0ZW4gaW50byBMVmlld0RhdGFbXVxuICBbQ0xFQU5VUF06IGFueVtdfG51bGw7XG5cbiAgLyoqXG4gICAqIC0gRm9yIGR5bmFtaWMgdmlld3MsIHRoaXMgaXMgdGhlIGNvbnRleHQgd2l0aCB3aGljaCB0byByZW5kZXIgdGhlIHRlbXBsYXRlIChlLmcuXG4gICAqICAgYE5nRm9yQ29udGV4dGApLCBvciBge31gIGlmIG5vdCBkZWZpbmVkIGV4cGxpY2l0bHkuXG4gICAqIC0gRm9yIHJvb3QgdmlldyBvZiB0aGUgcm9vdCBjb21wb25lbnQgdGhlIGNvbnRleHQgY29udGFpbnMgY2hhbmdlIGRldGVjdGlvbiBkYXRhLlxuICAgKiAtIEZvciBub24tcm9vdCBjb21wb25lbnRzLCB0aGUgY29udGV4dCBpcyB0aGUgY29tcG9uZW50IGluc3RhbmNlLFxuICAgKiAtIEZvciBpbmxpbmUgdmlld3MsIHRoZSBjb250ZXh0IGlzIG51bGwuXG4gICAqL1xuICBbQ09OVEVYVF06IHt9fFJvb3RDb250ZXh0fG51bGw7XG5cbiAgLyoqIEFuIG9wdGlvbmFsIE1vZHVsZSBJbmplY3RvciB0byBiZSB1c2VkIGFzIGZhbGwgYmFjayBhZnRlciBFbGVtZW50IEluamVjdG9ycyBhcmUgY29uc3VsdGVkLiAqL1xuICByZWFkb25seVtJTkpFQ1RPUl06IEluamVjdG9yfG51bGw7XG5cbiAgLyoqIFJlbmRlcmVyIHRvIGJlIHVzZWQgZm9yIHRoaXMgdmlldy4gKi9cbiAgW1JFTkRFUkVSX0ZBQ1RPUlldOiBSZW5kZXJlckZhY3RvcnkzO1xuXG4gIC8qKiBSZW5kZXJlciB0byBiZSB1c2VkIGZvciB0aGlzIHZpZXcuICovXG4gIFtSRU5ERVJFUl06IFJlbmRlcmVyMztcblxuICAvKiogQW4gb3B0aW9uYWwgY3VzdG9tIHNhbml0aXplci4gKi9cbiAgW1NBTklUSVpFUl06IFNhbml0aXplcnxudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFzdCBMVmlld0RhdGEgb3IgTENvbnRhaW5lciBiZW5lYXRoIHRoaXMgTFZpZXdEYXRhIGluIHRoZSBoaWVyYXJjaHkuXG4gICAqXG4gICAqIFRoZSB0YWlsIGFsbG93cyB1cyB0byBxdWlja2x5IGFkZCBhIG5ldyBzdGF0ZSB0byB0aGUgZW5kIG9mIHRoZSB2aWV3IGxpc3RcbiAgICogd2l0aG91dCBoYXZpbmcgdG8gcHJvcGFnYXRlIHN0YXJ0aW5nIGZyb20gdGhlIGZpcnN0IGNoaWxkLlxuICAgKi9cbiAgW1RBSUxdOiBMVmlld0RhdGF8TENvbnRhaW5lcnxudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIHBhcmVudCBjb250YWluZXIncyBob3N0IG5vZGUuIEFwcGxpY2FibGUgb25seSB0byBlbWJlZGRlZCB2aWV3cyB0aGF0XG4gICAqIGhhdmUgYmVlbiBpbnNlcnRlZCBkeW5hbWljYWxseS4gV2lsbCBiZSAtMSBmb3IgY29tcG9uZW50IHZpZXdzIGFuZCBpbmxpbmUgdmlld3MuXG4gICAqXG4gICAqIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGp1bXAgZnJvbSBkeW5hbWljYWxseSBjcmVhdGVkIGVtYmVkZGVkIHZpZXdzIHRvIHRoZWlyIHBhcmVudFxuICAgKiBjb250YWluZXJzIGJlY2F1c2UgdGhlaXIgcGFyZW50IGNhbm5vdCBiZSBzdG9yZWQgb24gdGhlIFRWaWV3Tm9kZSAodmlld3MgbWF5IGJlIGluc2VydGVkXG4gICAqIGluIG11bHRpcGxlIGNvbnRhaW5lcnMsIHNvIHRoZSBwYXJlbnQgY2Fubm90IGJlIHNoYXJlZCBiZXR3ZWVuIHZpZXcgaW5zdGFuY2VzKS5cbiAgICovXG4gIFtDT05UQUlORVJfSU5ERVhdOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFN0b3JlcyBRdWVyeUxpc3RzIGFzc29jaWF0ZWQgd2l0aCBjb250ZW50IHF1ZXJpZXMgb2YgYSBkaXJlY3RpdmUuIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXNcbiAgICogZmlsbGVkLWluIGFzIHBhcnQgb2YgYSBkaXJlY3RpdmUgY3JlYXRpb24gcHJvY2VzcyBhbmQgaXMgbGF0ZXIgdXNlZCB0byByZXRyaWV2ZSBhIFF1ZXJ5TGlzdCB0b1xuICAgKiBiZSByZWZyZXNoZWQuXG4gICAqL1xuICBbQ09OVEVOVF9RVUVSSUVTXTogUXVlcnlMaXN0PGFueT5bXXxudWxsO1xuXG4gIC8qKlxuICAgKiBWaWV3IHdoZXJlIHRoaXMgdmlldydzIHRlbXBsYXRlIHdhcyBkZWNsYXJlZC5cbiAgICpcbiAgICogT25seSBhcHBsaWNhYmxlIGZvciBkeW5hbWljYWxseSBjcmVhdGVkIHZpZXdzLiBXaWxsIGJlIG51bGwgZm9yIGlubGluZS9jb21wb25lbnQgdmlld3MuXG4gICAqXG4gICAqIFRoZSB0ZW1wbGF0ZSBmb3IgYSBkeW5hbWljYWxseSBjcmVhdGVkIHZpZXcgbWF5IGJlIGRlY2xhcmVkIGluIGEgZGlmZmVyZW50IHZpZXcgdGhhblxuICAgKiBpdCBpcyBpbnNlcnRlZC4gV2UgYWxyZWFkeSB0cmFjayB0aGUgXCJpbnNlcnRpb24gdmlld1wiICh2aWV3IHdoZXJlIHRoZSB0ZW1wbGF0ZSB3YXNcbiAgICogaW5zZXJ0ZWQpIGluIExWaWV3RGF0YVtQQVJFTlRdLCBidXQgd2UgYWxzbyBuZWVkIGFjY2VzcyB0byB0aGUgXCJkZWNsYXJhdGlvbiB2aWV3XCJcbiAgICogKHZpZXcgd2hlcmUgdGhlIHRlbXBsYXRlIHdhcyBkZWNsYXJlZCkuIE90aGVyd2lzZSwgd2Ugd291bGRuJ3QgYmUgYWJsZSB0byBjYWxsIHRoZVxuICAgKiB2aWV3J3MgdGVtcGxhdGUgZnVuY3Rpb24gd2l0aCB0aGUgcHJvcGVyIGNvbnRleHRzLiBDb250ZXh0IHNob3VsZCBiZSBpbmhlcml0ZWQgZnJvbVxuICAgKiB0aGUgZGVjbGFyYXRpb24gdmlldyB0cmVlLCBub3QgdGhlIGluc2VydGlvbiB2aWV3IHRyZWUuXG4gICAqXG4gICAqIEV4YW1wbGUgKEFwcENvbXBvbmVudCB0ZW1wbGF0ZSk6XG4gICAqXG4gICAqIDxuZy10ZW1wbGF0ZSAjZm9vPjwvbmctdGVtcGxhdGU+ICAgICAgIDwtLSBkZWNsYXJlZCBoZXJlIC0tPlxuICAgKiA8c29tZS1jb21wIFt0cGxdPVwiZm9vXCI+PC9zb21lLWNvbXA+ICAgIDwtLSBpbnNlcnRlZCBpbnNpZGUgdGhpcyBjb21wb25lbnQgLS0+XG4gICAqXG4gICAqIFRoZSA8bmctdGVtcGxhdGU+IGFib3ZlIGlzIGRlY2xhcmVkIGluIHRoZSBBcHBDb21wb25lbnQgdGVtcGxhdGUsIGJ1dCBpdCB3aWxsIGJlIHBhc3NlZCBpbnRvXG4gICAqIFNvbWVDb21wIGFuZCBpbnNlcnRlZCB0aGVyZS4gSW4gdGhpcyBjYXNlLCB0aGUgZGVjbGFyYXRpb24gdmlldyB3b3VsZCBiZSB0aGUgQXBwQ29tcG9uZW50LFxuICAgKiBidXQgdGhlIGluc2VydGlvbiB2aWV3IHdvdWxkIGJlIFNvbWVDb21wLiBXaGVuIHdlIGFyZSByZW1vdmluZyB2aWV3cywgd2Ugd291bGQgd2FudCB0b1xuICAgKiB0cmF2ZXJzZSB0aHJvdWdoIHRoZSBpbnNlcnRpb24gdmlldyB0byBjbGVhbiB1cCBsaXN0ZW5lcnMuIFdoZW4gd2UgYXJlIGNhbGxpbmcgdGhlXG4gICAqIHRlbXBsYXRlIGZ1bmN0aW9uIGR1cmluZyBjaGFuZ2UgZGV0ZWN0aW9uLCB3ZSBuZWVkIHRoZSBkZWNsYXJhdGlvbiB2aWV3IHRvIGdldCBpbmhlcml0ZWRcbiAgICogY29udGV4dC5cbiAgICovXG4gIFtERUNMQVJBVElPTl9WSUVXXTogTFZpZXdEYXRhfG51bGw7XG59XG5cbi8qKiBGbGFncyBhc3NvY2lhdGVkIHdpdGggYW4gTFZpZXcgKHNhdmVkIGluIExWaWV3RGF0YVtGTEFHU10pICovXG5leHBvcnQgY29uc3QgZW51bSBMVmlld0ZsYWdzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoZSB2aWV3IGlzIGluIGNyZWF0aW9uTW9kZS5cbiAgICpcbiAgICogVGhpcyBtdXN0IGJlIHN0b3JlZCBpbiB0aGUgdmlldyByYXRoZXIgdGhhbiB1c2luZyBgZGF0YWAgYXMgYSBtYXJrZXIgc28gdGhhdFxuICAgKiB3ZSBjYW4gcHJvcGVybHkgc3VwcG9ydCBlbWJlZGRlZCB2aWV3cy4gT3RoZXJ3aXNlLCB3aGVuIGV4aXRpbmcgYSBjaGlsZCB2aWV3XG4gICAqIGJhY2sgaW50byB0aGUgcGFyZW50IHZpZXcsIGBkYXRhYCB3aWxsIGJlIGRlZmluZWQgYW5kIGBjcmVhdGlvbk1vZGVgIHdpbGwgYmVcbiAgICogaW1wcm9wZXJseSByZXBvcnRlZCBhcyBmYWxzZS5cbiAgICovXG4gIENyZWF0aW9uTW9kZSA9IDBiMDAwMDAwMSxcblxuICAvKiogV2hldGhlciB0aGlzIHZpZXcgaGFzIGRlZmF1bHQgY2hhbmdlIGRldGVjdGlvbiBzdHJhdGVneSAoY2hlY2tzIGFsd2F5cykgb3Igb25QdXNoICovXG4gIENoZWNrQWx3YXlzID0gMGIwMDAwMDEwLFxuXG4gIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHZpZXcgaXMgY3VycmVudGx5IGRpcnR5IChuZWVkaW5nIGNoZWNrKSAqL1xuICBEaXJ0eSA9IDBiMDAwMDEwMCxcblxuICAvKiogV2hldGhlciBvciBub3QgdGhpcyB2aWV3IGlzIGN1cnJlbnRseSBhdHRhY2hlZCB0byBjaGFuZ2UgZGV0ZWN0aW9uIHRyZWUuICovXG4gIEF0dGFjaGVkID0gMGIwMDAxMDAwLFxuXG4gIC8qKlxuICAgKiAgV2hldGhlciBvciBub3QgdGhlIGluaXQgaG9va3MgaGF2ZSBydW4uXG4gICAqXG4gICAqIElmIG9uLCB0aGUgaW5pdCBob29rcyBoYXZlbid0IHlldCBiZWVuIHJ1biBhbmQgc2hvdWxkIGJlIGV4ZWN1dGVkIGJ5IHRoZSBmaXJzdCBjb21wb25lbnQgdGhhdFxuICAgKiBydW5zIE9SIHRoZSBmaXJzdCBjUigpIGluc3RydWN0aW9uIHRoYXQgcnVucyAoc28gaW5pdHMgYXJlIHJ1biBmb3IgdGhlIHRvcCBsZXZlbCB2aWV3IGJlZm9yZVxuICAgKiBhbnkgZW1iZWRkZWQgdmlld3MpLlxuICAgKi9cbiAgUnVuSW5pdCA9IDBiMDAxMDAwMCxcblxuICAvKiogV2hldGhlciBvciBub3QgdGhpcyB2aWV3IGlzIGRlc3Ryb3llZC4gKi9cbiAgRGVzdHJveWVkID0gMGIwMTAwMDAwLFxuXG4gIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHZpZXcgaXMgdGhlIHJvb3QgdmlldyAqL1xuICBJc1Jvb3QgPSAwYjEwMDAwMDAsXG59XG5cbi8qKlxuICogVGhlIHN0YXRpYyBkYXRhIGZvciBhbiBMVmlldyAoc2hhcmVkIGJldHdlZW4gYWxsIHRlbXBsYXRlcyBvZiBhXG4gKiBnaXZlbiB0eXBlKS5cbiAqXG4gKiBTdG9yZWQgb24gdGhlIHRlbXBsYXRlIGZ1bmN0aW9uIGFzIG5nUHJpdmF0ZURhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVFZpZXcge1xuICAvKipcbiAgICogSUQgZm9yIGlubGluZSB2aWV3cyB0byBkZXRlcm1pbmUgd2hldGhlciBhIHZpZXcgaXMgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIHZpZXdcbiAgICogaW4gYSBjZXJ0YWluIHBvc2l0aW9uLiBJZiBpdCdzIG5vdCwgd2Uga25vdyB0aGUgbmV3IHZpZXcgbmVlZHMgdG8gYmUgaW5zZXJ0ZWRcbiAgICogYW5kIHRoZSBvbmUgdGhhdCBleGlzdHMgbmVlZHMgdG8gYmUgcmVtb3ZlZCAoZS5nLiBpZi9lbHNlIHN0YXRlbWVudHMpXG4gICAqXG4gICAqIElmIHRoaXMgaXMgLTEsIHRoZW4gdGhpcyBpcyBhIGNvbXBvbmVudCB2aWV3IG9yIGEgZHluYW1pY2FsbHkgY3JlYXRlZCB2aWV3LlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhpcyBpcyBhIGJsdWVwcmludCB1c2VkIHRvIGdlbmVyYXRlIExWaWV3RGF0YSBpbnN0YW5jZXMgZm9yIHRoaXMgVFZpZXcuIENvcHlpbmcgdGhpc1xuICAgKiBibHVlcHJpbnQgaXMgZmFzdGVyIHRoYW4gY3JlYXRpbmcgYSBuZXcgTFZpZXdEYXRhIGZyb20gc2NyYXRjaC5cbiAgICovXG4gIGJsdWVwcmludDogTFZpZXdEYXRhO1xuXG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgZnVuY3Rpb24gdXNlZCB0byByZWZyZXNoIHRoZSB2aWV3IG9mIGR5bmFtaWNhbGx5IGNyZWF0ZWQgdmlld3NcbiAgICogYW5kIGNvbXBvbmVudHMuIFdpbGwgYmUgbnVsbCBmb3IgaW5saW5lIHZpZXdzLlxuICAgKi9cbiAgdGVtcGxhdGU6IENvbXBvbmVudFRlbXBsYXRlPHt9PnxudWxsO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIGNvbnRhaW5pbmcgcXVlcnktcmVsYXRlZCBpbnN0cnVjdGlvbnMuXG4gICAqL1xuICB2aWV3UXVlcnk6IENvbXBvbmVudFF1ZXJ5PHt9PnxudWxsO1xuXG4gIC8qKlxuICAgKiBQb2ludGVyIHRvIHRoZSBgVE5vZGVgIHRoYXQgcmVwcmVzZW50cyB0aGUgcm9vdCBvZiB0aGUgdmlldy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBhIGBUTm9kZWAgZm9yIGFuIGBMVmlld05vZGVgLCB0aGlzIGlzIGFuIGVtYmVkZGVkIHZpZXcgb2YgYSBjb250YWluZXIuXG4gICAqIFdlIG5lZWQgdGhpcyBwb2ludGVyIHRvIGJlIGFibGUgdG8gZWZmaWNpZW50bHkgZmluZCB0aGlzIG5vZGUgd2hlbiBpbnNlcnRpbmcgdGhlIHZpZXdcbiAgICogaW50byBhbiBhbmNob3IuXG4gICAqXG4gICAqIElmIHRoaXMgaXMgYSBgVEVsZW1lbnROb2RlYCwgdGhpcyBpcyB0aGUgdmlldyBvZiBhIHJvb3QgY29tcG9uZW50LiBJdCBoYXMgZXhhY3RseSBvbmVcbiAgICogcm9vdCBUTm9kZS5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBudWxsLCB0aGlzIGlzIHRoZSB2aWV3IG9mIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IGF0IHJvb3QuIFdlIGRvIG5vdCBzdG9yZVxuICAgKiB0aGUgaG9zdCBUTm9kZXMgZm9yIGNoaWxkIGNvbXBvbmVudCB2aWV3cyBiZWNhdXNlIHRoZXkgY2FuIHBvdGVudGlhbGx5IGhhdmUgc2V2ZXJhbFxuICAgKiBkaWZmZXJlbnQgaG9zdCBUTm9kZXMsIGRlcGVuZGluZyBvbiB3aGVyZSB0aGUgY29tcG9uZW50IGlzIGJlaW5nIHVzZWQuIFRoZXNlIGhvc3RcbiAgICogVE5vZGVzIGNhbm5vdCBiZSBzaGFyZWQgKGR1ZSB0byBkaWZmZXJlbnQgaW5kaWNlcywgZXRjKS5cbiAgICovXG4gIG5vZGU6IFRWaWV3Tm9kZXxURWxlbWVudE5vZGV8bnVsbDtcblxuICAvKiogV2hldGhlciBvciBub3QgdGhpcyB0ZW1wbGF0ZSBoYXMgYmVlbiBwcm9jZXNzZWQuICovXG4gIGZpcnN0VGVtcGxhdGVQYXNzOiBib29sZWFuO1xuXG4gIC8qKiBTdGF0aWMgZGF0YSBlcXVpdmFsZW50IG9mIExWaWV3LmRhdGFbXS4gQ29udGFpbnMgVE5vZGVzLCBQaXBlRGVmSW50ZXJuYWwgb3IgVEkxOG4uICovXG4gIGRhdGE6IFREYXRhO1xuXG4gIC8qKlxuICAgKiBUaGUgYmluZGluZyBzdGFydCBpbmRleCBpcyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGRhdGEgYXJyYXlcbiAgICogc3RhcnRzIHRvIHN0b3JlIGJpbmRpbmdzIG9ubHkuIFNhdmluZyB0aGlzIHZhbHVlIGVuc3VyZXMgdGhhdCB3ZVxuICAgKiB3aWxsIGJlZ2luIHJlYWRpbmcgYmluZGluZ3MgYXQgdGhlIGNvcnJlY3QgcG9pbnQgaW4gdGhlIGFycmF5IHdoZW5cbiAgICogd2UgYXJlIGluIHVwZGF0ZSBtb2RlLlxuICAgKi9cbiAgYmluZGluZ1N0YXJ0SW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGluZGV4IHdoZXJlIHRoZSBcImV4cGFuZG9cIiBzZWN0aW9uIG9mIGBMVmlld0RhdGFgIGJlZ2lucy4gVGhlIGV4cGFuZG9cbiAgICogc2VjdGlvbiBjb250YWlucyBpbmplY3RvcnMsIGRpcmVjdGl2ZSBpbnN0YW5jZXMsIGFuZCBob3N0IGJpbmRpbmcgdmFsdWVzLlxuICAgKiBVbmxpa2UgdGhlIFwiY29uc3RzXCIgYW5kIFwidmFyc1wiIHNlY3Rpb25zIG9mIGBMVmlld0RhdGFgLCB0aGUgbGVuZ3RoIG9mIHRoaXNcbiAgICogc2VjdGlvbiBjYW5ub3QgYmUgY2FsY3VsYXRlZCBhdCBjb21waWxlLXRpbWUgYmVjYXVzZSBkaXJlY3RpdmVzIGFyZSBtYXRjaGVkXG4gICAqIGF0IHJ1bnRpbWUgdG8gcHJlc2VydmUgbG9jYWxpdHkuXG4gICAqXG4gICAqIFdlIHN0b3JlIHRoaXMgc3RhcnQgaW5kZXggc28gd2Uga25vdyB3aGVyZSB0byBzdGFydCBjaGVja2luZyBob3N0IGJpbmRpbmdzXG4gICAqIGluIGBzZXRIb3N0QmluZGluZ3NgLlxuICAgKi9cbiAgZXhwYW5kb1N0YXJ0SW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogSW5kZXggb2YgdGhlIGhvc3Qgbm9kZSBvZiB0aGUgZmlyc3QgTFZpZXcgb3IgTENvbnRhaW5lciBiZW5lYXRoIHRoaXMgTFZpZXcgaW5cbiAgICogdGhlIGhpZXJhcmNoeS5cbiAgICpcbiAgICogTmVjZXNzYXJ5IHRvIHN0b3JlIHRoaXMgc28gdmlld3MgY2FuIHRyYXZlcnNlIHRocm91Z2ggdGhlaXIgbmVzdGVkIHZpZXdzXG4gICAqIHRvIHJlbW92ZSBsaXN0ZW5lcnMgYW5kIGNhbGwgb25EZXN0cm95IGNhbGxiYWNrcy5cbiAgICpcbiAgICogRm9yIGVtYmVkZGVkIHZpZXdzLCB3ZSBzdG9yZSB0aGUgaW5kZXggb2YgYW4gTENvbnRhaW5lcidzIGhvc3QgcmF0aGVyIHRoYW4gdGhlIGZpcnN0XG4gICAqIExWaWV3IHRvIGF2b2lkIG1hbmFnaW5nIHNwbGljaW5nIHdoZW4gdmlld3MgYXJlIGFkZGVkL3JlbW92ZWQuXG4gICAqL1xuICBjaGlsZEluZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBmaXJzdCBjaGlsZCBub2RlIGxvY2F0ZWQgaW4gdGhlIHZpZXcuXG4gICAqL1xuICBmaXJzdENoaWxkOiBUTm9kZXxudWxsO1xuXG4gIC8qKlxuICAgKiBTZXQgb2YgaW5zdHJ1Y3Rpb25zIHVzZWQgdG8gcHJvY2VzcyBob3N0IGJpbmRpbmdzIGVmZmljaWVudGx5LlxuICAgKlxuICAgKiBTZWUgVklFV19EQVRBLm1kIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgZXhwYW5kb0luc3RydWN0aW9uczogKG51bWJlcnxIb3N0QmluZGluZ3NGdW5jdGlvbjxhbnk+KVtdfG51bGw7XG5cbiAgLyoqXG4gICAqIEZ1bGwgcmVnaXN0cnkgb2YgZGlyZWN0aXZlcyBhbmQgY29tcG9uZW50cyB0aGF0IG1heSBiZSBmb3VuZCBpbiB0aGlzIHZpZXcuXG4gICAqXG4gICAqIEl0J3MgbmVjZXNzYXJ5IHRvIGtlZXAgYSBjb3B5IG9mIHRoZSBmdWxsIGRlZiBsaXN0IG9uIHRoZSBUVmlldyBzbyBpdCdzIHBvc3NpYmxlXG4gICAqIHRvIHJlbmRlciB0ZW1wbGF0ZSBmdW5jdGlvbnMgd2l0aG91dCBhIGhvc3QgY29tcG9uZW50LlxuICAgKi9cbiAgZGlyZWN0aXZlUmVnaXN0cnk6IERpcmVjdGl2ZURlZkxpc3R8bnVsbDtcblxuICAvKipcbiAgICogRnVsbCByZWdpc3RyeSBvZiBwaXBlcyB0aGF0IG1heSBiZSBmb3VuZCBpbiB0aGlzIHZpZXcuXG4gICAqXG4gICAqIFRoZSBwcm9wZXJ0eSBpcyBlaXRoZXIgYW4gYXJyYXkgb2YgYFBpcGVEZWZzYHMgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIHRoZSBhcnJheSBvZlxuICAgKiBgUGlwZURlZnNgcy4gVGhlIGZ1bmN0aW9uIGlzIG5lY2Vzc2FyeSB0byBiZSBhYmxlIHRvIHN1cHBvcnQgZm9yd2FyZCBkZWNsYXJhdGlvbnMuXG4gICAqXG4gICAqIEl0J3MgbmVjZXNzYXJ5IHRvIGtlZXAgYSBjb3B5IG9mIHRoZSBmdWxsIGRlZiBsaXN0IG9uIHRoZSBUVmlldyBzbyBpdCdzIHBvc3NpYmxlXG4gICAqIHRvIHJlbmRlciB0ZW1wbGF0ZSBmdW5jdGlvbnMgd2l0aG91dCBhIGhvc3QgY29tcG9uZW50LlxuICAgKi9cbiAgcGlwZVJlZ2lzdHJ5OiBQaXBlRGVmTGlzdHxudWxsO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBuZ09uSW5pdCBhbmQgbmdEb0NoZWNrIGhvb2tzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGZvciB0aGlzIHZpZXcgaW5cbiAgICogY3JlYXRpb24gbW9kZS5cbiAgICpcbiAgICogRXZlbiBpbmRpY2VzOiBEaXJlY3RpdmUgaW5kZXhcbiAgICogT2RkIGluZGljZXM6IEhvb2sgZnVuY3Rpb25cbiAgICovXG4gIGluaXRIb29rczogSG9va0RhdGF8bnVsbDtcblxuICAvKipcbiAgICogQXJyYXkgb2YgbmdEb0NoZWNrIGhvb2tzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGZvciB0aGlzIHZpZXcgaW4gdXBkYXRlIG1vZGUuXG4gICAqXG4gICAqIEV2ZW4gaW5kaWNlczogRGlyZWN0aXZlIGluZGV4XG4gICAqIE9kZCBpbmRpY2VzOiBIb29rIGZ1bmN0aW9uXG4gICAqL1xuICBjaGVja0hvb2tzOiBIb29rRGF0YXxudWxsO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBuZ0FmdGVyQ29udGVudEluaXQgYW5kIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCBob29rcyB0aGF0IHNob3VsZCBiZSBleGVjdXRlZFxuICAgKiBmb3IgdGhpcyB2aWV3IGluIGNyZWF0aW9uIG1vZGUuXG4gICAqXG4gICAqIEV2ZW4gaW5kaWNlczogRGlyZWN0aXZlIGluZGV4XG4gICAqIE9kZCBpbmRpY2VzOiBIb29rIGZ1bmN0aW9uXG4gICAqL1xuICBjb250ZW50SG9va3M6IEhvb2tEYXRhfG51bGw7XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCBob29rcyB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCBmb3IgdGhpcyB2aWV3IGluIHVwZGF0ZVxuICAgKiBtb2RlLlxuICAgKlxuICAgKiBFdmVuIGluZGljZXM6IERpcmVjdGl2ZSBpbmRleFxuICAgKiBPZGQgaW5kaWNlczogSG9vayBmdW5jdGlvblxuICAgKi9cbiAgY29udGVudENoZWNrSG9va3M6IEhvb2tEYXRhfG51bGw7XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIG5nQWZ0ZXJWaWV3SW5pdCBhbmQgbmdBZnRlclZpZXdDaGVja2VkIGhvb2tzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGZvclxuICAgKiB0aGlzIHZpZXcgaW4gY3JlYXRpb24gbW9kZS5cbiAgICpcbiAgICogRXZlbiBpbmRpY2VzOiBEaXJlY3RpdmUgaW5kZXhcbiAgICogT2RkIGluZGljZXM6IEhvb2sgZnVuY3Rpb25cbiAgICovXG4gIHZpZXdIb29rczogSG9va0RhdGF8bnVsbDtcblxuICAvKipcbiAgICogQXJyYXkgb2YgbmdBZnRlclZpZXdDaGVja2VkIGhvb2tzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGZvciB0aGlzIHZpZXcgaW5cbiAgICogdXBkYXRlIG1vZGUuXG4gICAqXG4gICAqIEV2ZW4gaW5kaWNlczogRGlyZWN0aXZlIGluZGV4XG4gICAqIE9kZCBpbmRpY2VzOiBIb29rIGZ1bmN0aW9uXG4gICAqL1xuICB2aWV3Q2hlY2tIb29rczogSG9va0RhdGF8bnVsbDtcblxuICAvKipcbiAgICogQXJyYXkgb2YgbmdPbkRlc3Ryb3kgaG9va3MgdGhhdCBzaG91bGQgYmUgZXhlY3V0ZWQgd2hlbiB0aGlzIHZpZXcgaXMgZGVzdHJveWVkLlxuICAgKlxuICAgKiBFdmVuIGluZGljZXM6IERpcmVjdGl2ZSBpbmRleFxuICAgKiBPZGQgaW5kaWNlczogSG9vayBmdW5jdGlvblxuICAgKi9cbiAgZGVzdHJveUhvb2tzOiBIb29rRGF0YXxudWxsO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBwaXBlIG5nT25EZXN0cm95IGhvb2tzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIHdoZW4gdGhpcyB2aWV3IGlzIGRlc3Ryb3llZC5cbiAgICpcbiAgICogRXZlbiBpbmRpY2VzOiBJbmRleCBvZiBwaXBlIGluIGRhdGFcbiAgICogT2RkIGluZGljZXM6IEhvb2sgZnVuY3Rpb25cbiAgICpcbiAgICogVGhlc2UgbXVzdCBiZSBzdG9yZWQgc2VwYXJhdGVseSBmcm9tIGRpcmVjdGl2ZSBkZXN0cm95IGhvb2tzIGJlY2F1c2UgdGhlaXIgY29udGV4dHNcbiAgICogYXJlIHN0b3JlZCBpbiBkYXRhLlxuICAgKi9cbiAgcGlwZURlc3Ryb3lIb29rczogSG9va0RhdGF8bnVsbDtcblxuICAvKipcbiAgICogV2hlbiBhIHZpZXcgaXMgZGVzdHJveWVkLCBsaXN0ZW5lcnMgbmVlZCB0byBiZSByZWxlYXNlZCBhbmQgb3V0cHV0cyBuZWVkIHRvIGJlXG4gICAqIHVuc3Vic2NyaWJlZC4gVGhpcyBjbGVhbnVwIGFycmF5IHN0b3JlcyBib3RoIGxpc3RlbmVyIGRhdGEgKGluIGNodW5rcyBvZiA0KVxuICAgKiBhbmQgb3V0cHV0IGRhdGEgKGluIGNodW5rcyBvZiAyKSBmb3IgYSBwYXJ0aWN1bGFyIHZpZXcuIENvbWJpbmluZyB0aGUgYXJyYXlzXG4gICAqIHNhdmVzIG9uIG1lbW9yeSAoNzAgYnl0ZXMgcGVyIGFycmF5KSBhbmQgb24gYSBmZXcgYnl0ZXMgb2YgY29kZSBzaXplIChmb3IgdHdvXG4gICAqIHNlcGFyYXRlIGZvciBsb29wcykuXG4gICAqXG4gICAqIElmIGl0J3MgYSBuYXRpdmUgRE9NIGxpc3RlbmVyIGJlaW5nIHN0b3JlZDpcbiAgICogMXN0IGluZGV4IGlzOiBldmVudCBuYW1lIHRvIHJlbW92ZVxuICAgKiAybmQgaW5kZXggaXM6IGluZGV4IG9mIG5hdGl2ZSBlbGVtZW50IGluIExWaWV3LmRhdGFbXVxuICAgKiAzcmQgaW5kZXggaXM6IGluZGV4IG9mIHdyYXBwZWQgbGlzdGVuZXIgZnVuY3Rpb24gaW4gTFZpZXcuY2xlYW51cEluc3RhbmNlc1tdXG4gICAqIDR0aCBpbmRleCBpczogdXNlQ2FwdHVyZSBib29sZWFuXG4gICAqXG4gICAqIElmIGl0J3MgYSByZW5kZXJlcjIgc3R5bGUgbGlzdGVuZXIgb3IgVmlld1JlZiBkZXN0cm95IGhvb2sgYmVpbmcgc3RvcmVkOlxuICAgKiAxc3QgaW5kZXggaXM6IGluZGV4IG9mIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGluIExWaWV3LmNsZWFudXBJbnN0YW5jZXNbXVxuICAgKiAybmQgaW5kZXggaXM6IG51bGxcbiAgICpcbiAgICogSWYgaXQncyBhbiBvdXRwdXQgc3Vic2NyaXB0aW9uIG9yIHF1ZXJ5IGxpc3QgZGVzdHJveSBob29rOlxuICAgKiAxc3QgaW5kZXggaXM6IG91dHB1dCB1bnN1YnNjcmliZSBmdW5jdGlvbiAvIHF1ZXJ5IGxpc3QgZGVzdHJveSBmdW5jdGlvblxuICAgKiAybmQgaW5kZXggaXM6IGluZGV4IG9mIGZ1bmN0aW9uIGNvbnRleHQgaW4gTFZpZXcuY2xlYW51cEluc3RhbmNlc1tdXG4gICAqL1xuICBjbGVhbnVwOiBhbnlbXXxudWxsO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZWxlbWVudCBpbmRpY2VzIGZvciBjaGlsZCBjb21wb25lbnRzIHRoYXQgd2lsbCBuZWVkIHRvIGJlXG4gICAqIHJlZnJlc2hlZCB3aGVuIHRoZSBjdXJyZW50IHZpZXcgaGFzIGZpbmlzaGVkIGl0cyBjaGVjay4gVGhlc2UgaW5kaWNlcyBoYXZlXG4gICAqIGFscmVhZHkgYmVlbiBhZGp1c3RlZCBmb3IgdGhlIEhFQURFUl9PRkZTRVQuXG4gICAqXG4gICAqL1xuICBjb21wb25lbnRzOiBudW1iZXJbXXxudWxsO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgaW5kaWNlcyBmb3IgY2hpbGQgZGlyZWN0aXZlcyB0aGF0IGhhdmUgY29udGVudCBxdWVyaWVzLlxuICAgKlxuICAgKiBFdmVuIGluZGljZXM6IERpcmVjdGl2ZSBpbmRpY2VzXG4gICAqIE9kZCBpbmRpY2VzOiBTdGFydGluZyBpbmRleCBvZiBjb250ZW50IHF1ZXJpZXMgKHN0b3JlZCBpbiBDT05URU5UX1FVRVJJRVMpIGZvciB0aGlzIGRpcmVjdGl2ZVxuICAgKi9cbiAgY29udGVudFF1ZXJpZXM6IG51bWJlcltdfG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIFJvb3RDb250ZXh0RmxhZ3Mge0VtcHR5ID0gMGIwMCwgRGV0ZWN0Q2hhbmdlcyA9IDBiMDEsIEZsdXNoUGxheWVycyA9IDBiMTB9XG5cblxuLyoqXG4gKiBSb290Q29udGV4dCBjb250YWlucyBpbmZvcm1hdGlvbiB3aGljaCBpcyBzaGFyZWQgZm9yIGFsbCBjb21wb25lbnRzIHdoaWNoXG4gKiB3ZXJlIGJvb3RzdHJhcHBlZCB3aXRoIHtAbGluayByZW5kZXJDb21wb25lbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvb3RDb250ZXh0IHtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdXNlZCBmb3Igc2NoZWR1bGluZyBjaGFuZ2UgZGV0ZWN0aW9uIGluIHRoZSBmdXR1cmUuIFVzdWFsbHlcbiAgICogdGhpcyBpcyBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYC5cbiAgICovXG4gIHNjaGVkdWxlcjogKHdvcmtGbjogKCkgPT4gdm9pZCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogQSBwcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIHdoZW4gYWxsIGNvbXBvbmVudHMgYXJlIGNvbnNpZGVyZWQgY2xlYW4gKG5vdCBkaXJ0eSkuXG4gICAqXG4gICAqIFRoaXMgcHJvbWlzZSBpcyBvdmVyd3JpdHRlbiBldmVyeSB0aW1lIGEgZmlyc3QgY2FsbCB0byB7QGxpbmsgbWFya0RpcnR5fSBpcyBpbnZva2VkLlxuICAgKi9cbiAgY2xlYW46IFByb21pc2U8bnVsbD47XG5cbiAgLyoqXG4gICAqIFJvb3RDb21wb25lbnRzIC0gVGhlIGNvbXBvbmVudHMgdGhhdCB3ZXJlIGluc3RhbnRpYXRlZCBieSB0aGUgY2FsbCB0b1xuICAgKiB7QGxpbmsgcmVuZGVyQ29tcG9uZW50fS5cbiAgICovXG4gIGNvbXBvbmVudHM6IHt9W107XG5cbiAgLyoqXG4gICAqIFRoZSBwbGF5ZXIgZmx1c2hpbmcgaGFuZGxlciB0byBraWNrIG9mZiBhbGwgYW5pbWF0aW9uc1xuICAgKi9cbiAgcGxheWVySGFuZGxlcjogUGxheWVySGFuZGxlcnxudWxsO1xuXG4gIC8qKlxuICAgKiBXaGF0IHJlbmRlci1yZWxhdGVkIG9wZXJhdGlvbnMgdG8gcnVuIG9uY2UgYSBzY2hlZHVsZXIgaGFzIGJlZW4gc2V0XG4gICAqL1xuICBmbGFnczogUm9vdENvbnRleHRGbGFncztcbn1cblxuLyoqXG4gKiBBcnJheSBvZiBob29rcyB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCBmb3IgYSB2aWV3IGFuZCB0aGVpciBkaXJlY3RpdmUgaW5kaWNlcy5cbiAqXG4gKiBFdmVuIGluZGljZXM6IERpcmVjdGl2ZSBpbmRleFxuICogT2RkIGluZGljZXM6IEhvb2sgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IHR5cGUgSG9va0RhdGEgPSAobnVtYmVyIHwgKCgpID0+IHZvaWQpKVtdO1xuXG4vKipcbiAqIFN0YXRpYyBkYXRhIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGluc3RhbmNlLXNwZWNpZmljIGRhdGEgYXJyYXkgb24gYW4gTFZpZXcuXG4gKlxuICogRWFjaCBub2RlJ3Mgc3RhdGljIGRhdGEgaXMgc3RvcmVkIGluIHREYXRhIGF0IHRoZSBzYW1lIGluZGV4IHRoYXQgaXQncyBzdG9yZWRcbiAqIGluIHRoZSBkYXRhIGFycmF5LiAgQW55IG5vZGVzIHRoYXQgZG8gbm90IGhhdmUgc3RhdGljIGRhdGEgc3RvcmUgYSBudWxsIHZhbHVlIGluXG4gKiB0RGF0YSB0byBhdm9pZCBhIHNwYXJzZSBhcnJheS5cbiAqXG4gKiBFYWNoIHBpcGUncyBkZWZpbml0aW9uIGlzIHN0b3JlZCBoZXJlIGF0IHRoZSBzYW1lIGluZGV4IGFzIGl0cyBwaXBlIGluc3RhbmNlIGluXG4gKiB0aGUgZGF0YSBhcnJheS5cbiAqXG4gKiBJbmplY3RvciBibG9vbSBmaWx0ZXJzIGFyZSBhbHNvIHN0b3JlZCBoZXJlLlxuICovXG5leHBvcnQgdHlwZSBURGF0YSA9XG4gICAgKFROb2RlIHwgUGlwZURlZjxhbnk+fCBEaXJlY3RpdmVEZWY8YW55PnwgQ29tcG9uZW50RGVmPGFueT58IG51bWJlciB8IFR5cGU8YW55PnxcbiAgICAgSW5qZWN0aW9uVG9rZW48YW55PnwgVEkxOG4gfCBJMThuVXBkYXRlT3BDb2RlcyB8IG51bGwpW107XG5cbi8vIE5vdGU6IFRoaXMgaGFjayBpcyBuZWNlc3Nhcnkgc28gd2UgZG9uJ3QgZXJyb25lb3VzbHkgZ2V0IGEgY2lyY3VsYXIgZGVwZW5kZW5jeVxuLy8gZmFpbHVyZSBiYXNlZCBvbiB0eXBlcy5cbmV4cG9ydCBjb25zdCB1bnVzZWRWYWx1ZUV4cG9ydFRvUGxhY2F0ZUFqZCA9IDE7XG4iXX0=
443
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL2NvcmUvc3JjL3JlbmRlcjMvaW50ZXJmYWNlcy92aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQTBCQSxNQUFNLE9BQU8sS0FBSyxHQUFHLENBQUM7O0FBQ3RCLE1BQU0sT0FBTyxLQUFLLEdBQUcsQ0FBQzs7QUFDdEIsTUFBTSxPQUFPLE1BQU0sR0FBRyxDQUFDOztBQUN2QixNQUFNLE9BQU8sSUFBSSxHQUFHLENBQUM7O0FBQ3JCLE1BQU0sT0FBTyxPQUFPLEdBQUcsQ0FBQzs7QUFDeEIsTUFBTSxPQUFPLElBQUksR0FBRyxDQUFDOztBQUNyQixNQUFNLE9BQU8sU0FBUyxHQUFHLENBQUM7OztBQUMxQixNQUFNLE9BQU8sYUFBYSxHQUFHLENBQUM7O0FBQzlCLE1BQU0sT0FBTyxPQUFPLEdBQUcsQ0FBQzs7QUFDeEIsTUFBTSxPQUFPLE9BQU8sR0FBRyxDQUFDOztBQUN4QixNQUFNLE9BQU8sUUFBUSxHQUFHLEVBQUU7O0FBQzFCLE1BQU0sT0FBTyxnQkFBZ0IsR0FBRyxFQUFFOztBQUNsQyxNQUFNLE9BQU8sUUFBUSxHQUFHLEVBQUU7O0FBQzFCLE1BQU0sT0FBTyxTQUFTLEdBQUcsRUFBRTs7QUFDM0IsTUFBTSxPQUFPLElBQUksR0FBRyxFQUFFOztBQUN0QixNQUFNLE9BQU8sZUFBZSxHQUFHLEVBQUU7O0FBQ2pDLE1BQU0sT0FBTyxlQUFlLEdBQUcsRUFBRTs7QUFDakMsTUFBTSxPQUFPLGdCQUFnQixHQUFHLEVBQUU7Ozs7O0FBRWxDLE1BQU0sT0FBTyxhQUFhLEdBQUcsRUFBRTs7OztBQU0vQixxQ0FFQzs7O0lBREMsb0NBQWlFOzs7Ozs7Ozs7Ozs7O0FBY25FLDJCQWlKQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFJQzs7Ozs7OztPQU9HO0lBQ0gsZUFBMEI7SUFFMUI7Ozs7OztPQU1HO0lBQ0gsaUJBQTRCO0lBRTVCLHdGQUF3RjtJQUN4RixjQUF5QjtJQUV6QixrRUFBa0U7SUFDbEUsUUFBbUI7SUFFbkIsK0VBQStFO0lBQy9FLFlBQXNCO0lBRXRCOzs7Ozs7T0FNRztJQUNILFdBQXFCO0lBRXJCLDZDQUE2QztJQUM3QyxhQUF1QjtJQUV2QixnREFBZ0Q7SUFDaEQsV0FBb0I7Ozs7Ozs7Ozs7QUFTdEIsMkJBcU9DOzs7Ozs7Ozs7O0lBN05DLG1CQUFvQjs7Ozs7O0lBTXBCLDBCQUFpQjs7Ozs7O0lBTWpCLHlCQUFxQzs7Ozs7SUFLckMsMEJBQW1DOzs7Ozs7Ozs7Ozs7Ozs7OztJQWlCbkMscUJBQWtDOzs7OztJQUdsQyxrQ0FBMkI7Ozs7O0lBRzNCLHFCQUFZOzs7Ozs7OztJQVFaLGtDQUEwQjs7Ozs7Ozs7Ozs7O0lBWTFCLGtDQUEwQjs7Ozs7Ozs7Ozs7O0lBWTFCLDJCQUFtQjs7Ozs7SUFLbkIsMkJBQXVCOzs7Ozs7O0lBT3ZCLG9DQUFvRTs7Ozs7Ozs7SUFRcEUsa0NBQXlDOzs7Ozs7Ozs7OztJQVd6Qyw2QkFBK0I7Ozs7Ozs7OztJQVMvQiwwQkFBeUI7Ozs7Ozs7O0lBUXpCLDJCQUEwQjs7Ozs7Ozs7O0lBUzFCLDZCQUE0Qjs7Ozs7Ozs7O0lBUzVCLGtDQUFpQzs7Ozs7Ozs7O0lBU2pDLDBCQUF5Qjs7Ozs7Ozs7O0lBU3pCLCtCQUE4Qjs7Ozs7Ozs7SUFROUIsNkJBQTRCOzs7Ozs7Ozs7OztJQVc1QixpQ0FBZ0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBNkJoQyx3QkFBb0I7Ozs7Ozs7O0lBUXBCLDJCQUEwQjs7Ozs7Ozs7SUFRMUIsK0JBQThCOzs7O0lBR0ksUUFBWSxFQUFFLGdCQUFvQixFQUFFLGVBQW1COzs7Ozs7OztBQU8zRixpQ0E2QkM7Ozs7Ozs7SUF4QkMsZ0NBQXdDOzs7Ozs7O0lBT3hDLDRCQUFxQjs7Ozs7O0lBTXJCLGlDQUFpQjs7Ozs7SUFLakIsb0NBQWtDOzs7OztJQUtsQyw0QkFBd0I7Ozs7O0FBNkIxQixNQUFNLE9BQU8sNkJBQTZCLEdBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtJbmplY3Rpb25Ub2tlbn0gZnJvbSAnLi4vLi4vZGkvaW5qZWN0aW9uX3Rva2VuJztcbmltcG9ydCB7SW5qZWN0b3J9IGZyb20gJy4uLy4uL2RpL2luamVjdG9yJztcbmltcG9ydCB7UXVlcnlMaXN0fSBmcm9tICcuLi8uLi9saW5rZXInO1xuaW1wb3J0IHtTYW5pdGl6ZXJ9IGZyb20gJy4uLy4uL3Nhbml0aXphdGlvbi9zZWN1cml0eSc7XG5pbXBvcnQge1R5cGV9IGZyb20gJy4uLy4uL3R5cGUnO1xuaW1wb3J0IHtMQ29udGFpbmVyfSBmcm9tICcuL2NvbnRhaW5lcic7XG5pbXBvcnQge0NvbXBvbmVudERlZiwgQ29tcG9uZW50UXVlcnksIENvbXBvbmVudFRlbXBsYXRlLCBEaXJlY3RpdmVEZWYsIERpcmVjdGl2ZURlZkxpc3QsIEhvc3RCaW5kaW5nc0Z1bmN0aW9uLCBQaXBlRGVmLCBQaXBlRGVmTGlzdH0gZnJvbSAnLi9kZWZpbml0aW9uJztcbmltcG9ydCB7STE4blVwZGF0ZU9wQ29kZXMsIFRJMThufSBmcm9tICcuL2kxOG4nO1xuaW1wb3J0IHtURWxlbWVudE5vZGUsIFROb2RlLCBUVmlld05vZGV9IGZyb20gJy4vbm9kZSc7XG5pbXBvcnQge1BsYXllckhhbmRsZXJ9IGZyb20gJy4vcGxheWVyJztcbmltcG9ydCB7TFF1ZXJpZXN9IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHtSRWxlbWVudCwgUmVuZGVyZXIzLCBSZW5kZXJlckZhY3RvcnkzfSBmcm9tICcuL3JlbmRlcmVyJztcbmltcG9ydCB7U3R5bGluZ0NvbnRleHR9IGZyb20gJy4vc3R5bGluZyc7XG5cblxuLy8gQmVsb3cgYXJlIGNvbnN0YW50cyBmb3IgTFZpZXcgaW5kaWNlcyB0byBoZWxwIHVzIGxvb2sgdXAgTFZpZXcgbWVtYmVyc1xuLy8gd2l0aG91dCBoYXZpbmcgdG8gcmVtZW1iZXIgdGhlIHNwZWNpZmljIGluZGljZXMuXG4vLyBVZ2xpZnkgd2lsbCBpbmxpbmUgdGhlc2Ugd2hlbiBtaW5pZnlpbmcgc28gdGhlcmUgc2hvdWxkbid0IGJlIGEgY29zdC5cbmV4cG9ydCBjb25zdCBUVklFVyA9IDA7XG5leHBvcnQgY29uc3QgRkxBR1MgPSAxO1xuZXhwb3J0IGNvbnN0IFBBUkVOVCA9IDI7XG5leHBvcnQgY29uc3QgTkVYVCA9IDM7XG5leHBvcnQgY29uc3QgUVVFUklFUyA9IDQ7XG5leHBvcnQgY29uc3QgSE9TVCA9IDU7XG5leHBvcnQgY29uc3QgSE9TVF9OT0RFID0gNjsgIC8vIFJlbmFtZSB0byBgVF9IT1NUYD9cbmV4cG9ydCBjb25zdCBCSU5ESU5HX0lOREVYID0gNztcbmV4cG9ydCBjb25zdCBDTEVBTlVQID0gODtcbmV4cG9ydCBjb25zdCBDT05URVhUID0gOTtcbmV4cG9ydCBjb25zdCBJTkpFQ1RPUiA9IDEwO1xuZXhwb3J0IGNvbnN0IFJFTkRFUkVSX0ZBQ1RPUlkgPSAxMTtcbmV4cG9ydCBjb25zdCBSRU5ERVJFUiA9IDEyO1xuZXhwb3J0IGNvbnN0IFNBTklUSVpFUiA9IDEzO1xuZXhwb3J0IGNvbnN0IFRBSUwgPSAxNDtcbmV4cG9ydCBjb25zdCBDT05UQUlORVJfSU5ERVggPSAxNTtcbmV4cG9ydCBjb25zdCBDT05URU5UX1FVRVJJRVMgPSAxNjtcbmV4cG9ydCBjb25zdCBERUNMQVJBVElPTl9WSUVXID0gMTc7XG4vKiogU2l6ZSBvZiBMVmlldydzIGhlYWRlci4gTmVjZXNzYXJ5IHRvIGFkanVzdCBmb3IgaXQgd2hlbiBzZXR0aW5nIHNsb3RzLiAgKi9cbmV4cG9ydCBjb25zdCBIRUFERVJfT0ZGU0VUID0gMTg7XG5cblxuLy8gVGhpcyBpbnRlcmZhY2UgcmVwbGFjZXMgdGhlIHJlYWwgTFZpZXcgaW50ZXJmYWNlIGlmIGl0IGlzIGFuIGFyZyBvciBhXG4vLyByZXR1cm4gdmFsdWUgb2YgYSBwdWJsaWMgaW5zdHJ1Y3Rpb24uIFRoaXMgZW5zdXJlcyB3ZSBkb24ndCBuZWVkIHRvIGV4cG9zZVxuLy8gdGhlIGFjdHVhbCBpbnRlcmZhY2UsIHdoaWNoIHNob3VsZCBiZSBrZXB0IHByaXZhdGUuXG5leHBvcnQgaW50ZXJmYWNlIE9wYXF1ZVZpZXdTdGF0ZSB7XG4gICdfX2JyYW5kX18nOiAnQnJhbmQgZm9yIE9wYXF1ZVZpZXdTdGF0ZSB0aGF0IG5vdGhpbmcgd2lsbCBtYXRjaCc7XG59XG5cblxuLyoqXG4gKiBgTFZpZXdgIHN0b3JlcyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBwcm9jZXNzIHRoZSBpbnN0cnVjdGlvbnMgYXNcbiAqIHRoZXkgYXJlIGludm9rZWQgZnJvbSB0aGUgdGVtcGxhdGUuIEVhY2ggZW1iZWRkZWQgdmlldyBhbmQgY29tcG9uZW50IHZpZXcgaGFzIGl0c1xuICogb3duIGBMVmlld2AuIFdoZW4gcHJvY2Vzc2luZyBhIHBhcnRpY3VsYXIgdmlldywgd2Ugc2V0IHRoZSBgdmlld0RhdGFgIHRvIHRoYXRcbiAqIGBMVmlld2AuIFdoZW4gdGhhdCB2aWV3IGlzIGRvbmUgcHJvY2Vzc2luZywgdGhlIGB2aWV3RGF0YWAgaXMgc2V0IGJhY2sgdG9cbiAqIHdoYXRldmVyIHRoZSBvcmlnaW5hbCBgdmlld0RhdGFgIHdhcyBiZWZvcmUgKHRoZSBwYXJlbnQgYExWaWV3YCkuXG4gKlxuICogS2VlcGluZyBzZXBhcmF0ZSBzdGF0ZSBmb3IgZWFjaCB2aWV3IGZhY2lsaXRpZXMgdmlldyBpbnNlcnRpb24gLyBkZWxldGlvbiwgc28gd2VcbiAqIGRvbid0IGhhdmUgdG8gZWRpdCB0aGUgZGF0YSBhcnJheSBiYXNlZCBvbiB3aGljaCB2aWV3cyBhcmUgcHJlc2VudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMVmlldyBleHRlbmRzIEFycmF5PGFueT4ge1xuICAvKipcbiAgICogVGhlIHN0YXRpYyBkYXRhIGZvciB0aGlzIHZpZXcuIFdlIG5lZWQgYSByZWZlcmVuY2UgdG8gdGhpcyBzbyB3ZSBjYW4gZWFzaWx5IHdhbGsgdXAgdGhlXG4gICAqIG5vZGUgdHJlZSBpbiBESSBhbmQgZ2V0IHRoZSBUVmlldy5kYXRhIGFycmF5IGFzc29jaWF0ZWQgd2l0aCBhIG5vZGUgKHdoZXJlIHRoZVxuICAgKiBkaXJlY3RpdmUgZGVmcyBhcmUgc3RvcmVkKS5cbiAgICovXG4gIHJlYWRvbmx5W1RWSUVXXTogVFZpZXc7XG5cbiAgLyoqIEZsYWdzIGZvciB0aGlzIHZpZXcuIFNlZSBMVmlld0ZsYWdzIGZvciBtb3JlIGluZm8uICovXG4gIFtGTEFHU106IExWaWV3RmxhZ3M7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJlbnQgdmlldyBpcyBuZWVkZWQgd2hlbiB3ZSBleGl0IHRoZSB2aWV3IGFuZCBtdXN0IHJlc3RvcmUgdGhlIHByZXZpb3VzXG4gICAqIGBMVmlld2AuIFdpdGhvdXQgdGhpcywgdGhlIHJlbmRlciBtZXRob2Qgd291bGQgaGF2ZSB0byBrZWVwIGEgc3RhY2sgb2ZcbiAgICogdmlld3MgYXMgaXQgaXMgcmVjdXJzaXZlbHkgcmVuZGVyaW5nIHRlbXBsYXRlcy5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgXCJpbnNlcnRpb25cIiB2aWV3IGZvciBlbWJlZGRlZCB2aWV3cy4gVGhpcyBhbGxvd3MgdXMgdG8gcHJvcGVybHlcbiAgICogZGVzdHJveSBlbWJlZGRlZCB2aWV3cy5cbiAgICovXG4gIFtQQVJFTlRdOiBMVmlld3xudWxsO1xuXG4gIC8qKlxuICAgKlxuICAgKiBUaGUgbmV4dCBzaWJsaW5nIExWaWV3IG9yIExDb250YWluZXIuXG4gICAqXG4gICAqIEFsbG93cyB1cyB0byBwcm9wYWdhdGUgYmV0d2VlbiBzaWJsaW5nIHZpZXcgc3RhdGVzIHRoYXQgYXJlbid0IGluIHRoZSBzYW1lXG4gICAqIGNvbnRhaW5lci4gRW1iZWRkZWQgdmlld3MgYWxyZWFkeSBoYXZlIGEgbm9kZS5uZXh0LCBidXQgaXQgaXMgb25seSBzZXQgZm9yXG4gICAqIHZpZXdzIGluIHRoZSBzYW1lIGNvbnRhaW5lci4gV2UgbmVlZCBhIHdheSB0byBsaW5rIGNvbXBvbmVudCB2aWV3cyBhbmQgdmlld3NcbiAgICogYWNyb3NzIGNvbnRhaW5lcnMgYXMgd2VsbC5cbiAgICovXG4gIFtORVhUXTogTFZpZXd8TENvbnRhaW5lcnxudWxsO1xuXG4gIC8qKiBRdWVyaWVzIGFjdGl2ZSBmb3IgdGhpcyB2aWV3IC0gbm9kZXMgZnJvbSBhIHZpZXcgYXJlIHJlcG9ydGVkIHRvIHRob3NlIHF1ZXJpZXMuICovXG4gIFtRVUVSSUVTXTogTFF1ZXJpZXN8bnVsbDtcblxuICAvKipcbiAgICogVGhlIGhvc3Qgbm9kZSBmb3IgdGhpcyBMVmlldyBpbnN0YW5jZSwgaWYgdGhpcyBpcyBhIGNvbXBvbmVudCB2aWV3LlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIGFuIGVtYmVkZGVkIHZpZXcsIEhPU1Qgd2lsbCBiZSBudWxsLlxuICAgKi9cbiAgW0hPU1RdOiBSRWxlbWVudHxTdHlsaW5nQ29udGV4dHxudWxsO1xuXG4gIC8qKlxuICAgKiBQb2ludGVyIHRvIHRoZSBgVFZpZXdOb2RlYCBvciBgVEVsZW1lbnROb2RlYCB3aGljaCByZXByZXNlbnRzIHRoZSByb290IG9mIHRoZSB2aWV3LlxuICAgKlxuICAgKiBJZiBgVFZpZXdOb2RlYCwgdGhpcyBpcyBhbiBlbWJlZGRlZCB2aWV3IG9mIGEgY29udGFpbmVyLiBXZSBuZWVkIHRoaXMgdG8gYmUgYWJsZSB0b1xuICAgKiBlZmZpY2llbnRseSBmaW5kIHRoZSBgTFZpZXdOb2RlYCB3aGVuIGluc2VydGluZyB0aGUgdmlldyBpbnRvIGFuIGFuY2hvci5cbiAgICpcbiAgICogSWYgYFRFbGVtZW50Tm9kZWAsIHRoaXMgaXMgdGhlIExWaWV3IG9mIGEgY29tcG9uZW50LlxuICAgKlxuICAgKiBJZiBudWxsLCB0aGlzIGlzIHRoZSByb290IHZpZXcgb2YgYW4gYXBwbGljYXRpb24gKHJvb3QgY29tcG9uZW50IGlzIGluIHRoaXMgdmlldykuXG4gICAqL1xuICBbSE9TVF9OT0RFXTogVFZpZXdOb2RlfFRFbGVtZW50Tm9kZXxudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgYmluZGluZyBpbmRleCB3ZSBzaG91bGQgYWNjZXNzIG5leHQuXG4gICAqXG4gICAqIFRoaXMgaXMgc3RvcmVkIHNvIHRoYXQgYmluZGluZ3MgY2FuIGNvbnRpbnVlIHdoZXJlIHRoZXkgbGVmdCBvZmZcbiAgICogaWYgYSB2aWV3IGlzIGxlZnQgbWlkd2F5IHRocm91Z2ggcHJvY2Vzc2luZyBiaW5kaW5ncyAoZS5nLiBpZiB0aGVyZSBpc1xuICAgKiBhIHNldHRlciB0aGF0IGNyZWF0ZXMgYW4gZW1iZWRkZWQgdmlldywgbGlrZSBpbiBuZ0lmKS5cbiAgICovXG4gIFtCSU5ESU5HX0lOREVYXTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGVuIGEgdmlldyBpcyBkZXN0cm95ZWQsIGxpc3RlbmVycyBuZWVkIHRvIGJlIHJlbGVhc2VkIGFuZCBvdXRwdXRzIG5lZWQgdG8gYmVcbiAgICogdW5zdWJzY3JpYmVkLiBUaGlzIGNvbnRleHQgYXJyYXkgc3RvcmVzIGJvdGggbGlzdGVuZXIgZnVuY3Rpb25zIHdyYXBwZWQgd2l0aFxuICAgKiB0aGVpciBjb250ZXh0IGFuZCBvdXRwdXQgc3Vic2NyaXB0aW9uIGluc3RhbmNlcyBmb3IgYSBwYXJ0aWN1bGFyIHZpZXcuXG4gICAqXG4gICAqIFRoZXNlIGNoYW5nZSBwZXIgTFZpZXcgaW5zdGFuY2UsIHNvIHRoZXkgY2Fubm90IGJlIHN0b3JlZCBvbiBUVmlldy4gSW5zdGVhZCxcbiAgICogVFZpZXcuY2xlYW51cCBzYXZlcyBhbiBpbmRleCB0byB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgaW4gdGhpcyBhcnJheS5cbiAgICovXG4gIC8vIFRPRE86IGZsYXR0ZW4gaW50byBMVmlld1tdXG4gIFtDTEVBTlVQXTogYW55W118bnVsbDtcblxuICAvKipcbiAgICogLSBGb3IgZHluYW1pYyB2aWV3cywgdGhpcyBpcyB0aGUgY29udGV4dCB3aXRoIHdoaWNoIHRvIHJlbmRlciB0aGUgdGVtcGxhdGUgKGUuZy5cbiAgICogICBgTmdGb3JDb250ZXh0YCksIG9yIGB7fWAgaWYgbm90IGRlZmluZWQgZXhwbGljaXRseS5cbiAgICogLSBGb3Igcm9vdCB2aWV3IG9mIHRoZSByb290IGNvbXBvbmVudCB0aGUgY29udGV4dCBjb250YWlucyBjaGFuZ2UgZGV0ZWN0aW9uIGRhdGEuXG4gICAqIC0gRm9yIG5vbi1yb290IGNvbXBvbmVudHMsIHRoZSBjb250ZXh0IGlzIHRoZSBjb21wb25lbnQgaW5zdGFuY2UsXG4gICAqIC0gRm9yIGlubGluZSB2aWV3cywgdGhlIGNvbnRleHQgaXMgbnVsbC5cbiAgICovXG4gIFtDT05URVhUXToge318Um9vdENvbnRleHR8bnVsbDtcblxuICAvKiogQW4gb3B0aW9uYWwgTW9kdWxlIEluamVjdG9yIHRvIGJlIHVzZWQgYXMgZmFsbCBiYWNrIGFmdGVyIEVsZW1lbnQgSW5qZWN0b3JzIGFyZSBjb25zdWx0ZWQuICovXG4gIHJlYWRvbmx5W0lOSkVDVE9SXTogSW5qZWN0b3J8bnVsbDtcblxuICAvKiogUmVuZGVyZXIgdG8gYmUgdXNlZCBmb3IgdGhpcyB2aWV3LiAqL1xuICBbUkVOREVSRVJfRkFDVE9SWV06IFJlbmRlcmVyRmFjdG9yeTM7XG5cbiAgLyoqIFJlbmRlcmVyIHRvIGJlIHVzZWQgZm9yIHRoaXMgdmlldy4gKi9cbiAgW1JFTkRFUkVSXTogUmVuZGVyZXIzO1xuXG4gIC8qKiBBbiBvcHRpb25hbCBjdXN0b20gc2FuaXRpemVyLiAqL1xuICBbU0FOSVRJWkVSXTogU2FuaXRpemVyfG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBsYXN0IExWaWV3IG9yIExDb250YWluZXIgYmVuZWF0aCB0aGlzIExWaWV3IGluIHRoZSBoaWVyYXJjaHkuXG4gICAqXG4gICAqIFRoZSB0YWlsIGFsbG93cyB1cyB0byBxdWlja2x5IGFkZCBhIG5ldyBzdGF0ZSB0byB0aGUgZW5kIG9mIHRoZSB2aWV3IGxpc3RcbiAgICogd2l0aG91dCBoYXZpbmcgdG8gcHJvcGFnYXRlIHN0YXJ0aW5nIGZyb20gdGhlIGZpcnN0IGNoaWxkLlxuICAgKi9cbiAgW1RBSUxdOiBMVmlld3xMQ29udGFpbmVyfG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgcGFyZW50IGNvbnRhaW5lcidzIGhvc3Qgbm9kZS4gQXBwbGljYWJsZSBvbmx5IHRvIGVtYmVkZGVkIHZpZXdzIHRoYXRcbiAgICogaGF2ZSBiZWVuIGluc2VydGVkIGR5bmFtaWNhbGx5LiBXaWxsIGJlIC0xIGZvciBjb21wb25lbnQgdmlld3MgYW5kIGlubGluZSB2aWV3cy5cbiAgICpcbiAgICogVGhpcyBpcyBuZWNlc3NhcnkgdG8ganVtcCBmcm9tIGR5bmFtaWNhbGx5IGNyZWF0ZWQgZW1iZWRkZWQgdmlld3MgdG8gdGhlaXIgcGFyZW50XG4gICAqIGNvbnRhaW5lcnMgYmVjYXVzZSB0aGVpciBwYXJlbnQgY2Fubm90IGJlIHN0b3JlZCBvbiB0aGUgVFZpZXdOb2RlICh2aWV3cyBtYXkgYmUgaW5zZXJ0ZWRcbiAgICogaW4gbXVsdGlwbGUgY29udGFpbmVycywgc28gdGhlIHBhcmVudCBjYW5ub3QgYmUgc2hhcmVkIGJldHdlZW4gdmlldyBpbnN0YW5jZXMpLlxuICAgKi9cbiAgW0NPTlRBSU5FUl9JTkRFWF06IG51bWJlcjtcblxuICAvKipcbiAgICogU3RvcmVzIFF1ZXJ5TGlzdHMgYXNzb2NpYXRlZCB3aXRoIGNvbnRlbnQgcXVlcmllcyBvZiBhIGRpcmVjdGl2ZS4gVGhpcyBkYXRhIHN0cnVjdHVyZSBpc1xuICAgKiBmaWxsZWQtaW4gYXMgcGFydCBvZiBhIGRpcmVjdGl2ZSBjcmVhdGlvbiBwcm9jZXNzIGFuZCBpcyBsYXRlciB1c2VkIHRvIHJldHJpZXZlIGEgUXVlcnlMaXN0IHRvXG4gICAqIGJlIHJlZnJlc2hlZC5cbiAgICovXG4gIFtDT05URU5UX1FVRVJJRVNdOiBRdWVyeUxpc3Q8YW55PltdfG51bGw7XG5cbiAgLyoqXG4gICAqIFZpZXcgd2hlcmUgdGhpcyB2aWV3J3MgdGVtcGxhdGUgd2FzIGRlY2xhcmVkLlxuICAgKlxuICAgKiBPbmx5IGFwcGxpY2FibGUgZm9yIGR5bmFtaWNhbGx5IGNyZWF0ZWQgdmlld3MuIFdpbGwgYmUgbnVsbCBmb3IgaW5saW5lL2NvbXBvbmVudCB2aWV3cy5cbiAgICpcbiAgICogVGhlIHRlbXBsYXRlIGZvciBhIGR5bmFtaWNhbGx5IGNyZWF0ZWQgdmlldyBtYXkgYmUgZGVjbGFyZWQgaW4gYSBkaWZmZXJlbnQgdmlldyB0aGFuXG4gICAqIGl0IGlzIGluc2VydGVkLiBXZSBhbHJlYWR5IHRyYWNrIHRoZSBcImluc2VydGlvbiB2aWV3XCIgKHZpZXcgd2hlcmUgdGhlIHRlbXBsYXRlIHdhc1xuICAgKiBpbnNlcnRlZCkgaW4gTFZpZXdbUEFSRU5UXSwgYnV0IHdlIGFsc28gbmVlZCBhY2Nlc3MgdG8gdGhlIFwiZGVjbGFyYXRpb24gdmlld1wiXG4gICAqICh2aWV3IHdoZXJlIHRoZSB0ZW1wbGF0ZSB3YXMgZGVjbGFyZWQpLiBPdGhlcndpc2UsIHdlIHdvdWxkbid0IGJlIGFibGUgdG8gY2FsbCB0aGVcbiAgICogdmlldydzIHRlbXBsYXRlIGZ1bmN0aW9uIHdpdGggdGhlIHByb3BlciBjb250ZXh0cy4gQ29udGV4dCBzaG91bGQgYmUgaW5oZXJpdGVkIGZyb21cbiAgICogdGhlIGRlY2xhcmF0aW9uIHZpZXcgdHJlZSwgbm90IHRoZSBpbnNlcnRpb24gdmlldyB0cmVlLlxuICAgKlxuICAgKiBFeGFtcGxlIChBcHBDb21wb25lbnQgdGVtcGxhdGUpOlxuICAgKlxuICAgKiA8bmctdGVtcGxhdGUgI2Zvbz48L25nLXRlbXBsYXRlPiAgICAgICA8LS0gZGVjbGFyZWQgaGVyZSAtLT5cbiAgICogPHNvbWUtY29tcCBbdHBsXT1cImZvb1wiPjwvc29tZS1jb21wPiAgICA8LS0gaW5zZXJ0ZWQgaW5zaWRlIHRoaXMgY29tcG9uZW50IC0tPlxuICAgKlxuICAgKiBUaGUgPG5nLXRlbXBsYXRlPiBhYm92ZSBpcyBkZWNsYXJlZCBpbiB0aGUgQXBwQ29tcG9uZW50IHRlbXBsYXRlLCBidXQgaXQgd2lsbCBiZSBwYXNzZWQgaW50b1xuICAgKiBTb21lQ29tcCBhbmQgaW5zZXJ0ZWQgdGhlcmUuIEluIHRoaXMgY2FzZSwgdGhlIGRlY2xhcmF0aW9uIHZpZXcgd291bGQgYmUgdGhlIEFwcENvbXBvbmVudCxcbiAgICogYnV0IHRoZSBpbnNlcnRpb24gdmlldyB3b3VsZCBiZSBTb21lQ29tcC4gV2hlbiB3ZSBhcmUgcmVtb3Zpbmcgdmlld3MsIHdlIHdvdWxkIHdhbnQgdG9cbiAgICogdHJhdmVyc2UgdGhyb3VnaCB0aGUgaW5zZXJ0aW9uIHZpZXcgdG8gY2xlYW4gdXAgbGlzdGVuZXJzLiBXaGVuIHdlIGFyZSBjYWxsaW5nIHRoZVxuICAgKiB0ZW1wbGF0ZSBmdW5jdGlvbiBkdXJpbmcgY2hhbmdlIGRldGVjdGlvbiwgd2UgbmVlZCB0aGUgZGVjbGFyYXRpb24gdmlldyB0byBnZXQgaW5oZXJpdGVkXG4gICAqIGNvbnRleHQuXG4gICAqL1xuICBbREVDTEFSQVRJT05fVklFV106IExWaWV3fG51bGw7XG59XG5cbi8qKiBGbGFncyBhc3NvY2lhdGVkIHdpdGggYW4gTFZpZXcgKHNhdmVkIGluIExWaWV3W0ZMQUdTXSkgKi9cbmV4cG9ydCBjb25zdCBlbnVtIExWaWV3RmxhZ3Mge1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlIHZpZXcgaXMgaW4gY3JlYXRpb25Nb2RlLlxuICAgKlxuICAgKiBUaGlzIG11c3QgYmUgc3RvcmVkIGluIHRoZSB2aWV3IHJhdGhlciB0aGFuIHVzaW5nIGBkYXRhYCBhcyBhIG1hcmtlciBzbyB0aGF0XG4gICAqIHdlIGNhbiBwcm9wZXJseSBzdXBwb3J0IGVtYmVkZGVkIHZpZXdzLiBPdGhlcndpc2UsIHdoZW4gZXhpdGluZyBhIGNoaWxkIHZpZXdcbiAgICogYmFjayBpbnRvIHRoZSBwYXJlbnQgdmlldywgYGRhdGFgIHdpbGwgYmUgZGVmaW5lZCBhbmQgYGNyZWF0aW9uTW9kZWAgd2lsbCBiZVxuICAgKiBpbXByb3Blcmx5IHJlcG9ydGVkIGFzIGZhbHNlLlxuICAgKi9cbiAgQ3JlYXRpb25Nb2RlID0gMGIwMDAwMDAwMDEsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgTFZpZXcgaW5zdGFuY2UgaXMgb24gaXRzIGZpcnN0IHByb2Nlc3NpbmcgcGFzcy5cbiAgICpcbiAgICogQW4gTFZpZXcgaW5zdGFuY2UgaXMgY29uc2lkZXJlZCB0byBiZSBvbiBpdHMgXCJmaXJzdCBwYXNzXCIgdW50aWwgaXRcbiAgICogaGFzIGNvbXBsZXRlZCBvbmUgY3JlYXRpb24gbW9kZSBydW4gYW5kIG9uZSB1cGRhdGUgbW9kZSBydW4uIEF0IHRoaXNcbiAgICogdGltZSwgdGhlIGZsYWcgaXMgdHVybmVkIG9mZi5cbiAgICovXG4gIEZpcnN0TFZpZXdQYXNzID0gMGIwMDAwMDAwMTAsXG5cbiAgLyoqIFdoZXRoZXIgdGhpcyB2aWV3IGhhcyBkZWZhdWx0IGNoYW5nZSBkZXRlY3Rpb24gc3RyYXRlZ3kgKGNoZWNrcyBhbHdheXMpIG9yIG9uUHVzaCAqL1xuICBDaGVja0Fsd2F5cyA9IDBiMDAwMDAwMTAwLFxuXG4gIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHZpZXcgaXMgY3VycmVudGx5IGRpcnR5IChuZWVkaW5nIGNoZWNrKSAqL1xuICBEaXJ0eSA9IDBiMDAwMDAxMDAwLFxuXG4gIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHZpZXcgaXMgY3VycmVudGx5IGF0dGFjaGVkIHRvIGNoYW5nZSBkZXRlY3Rpb24gdHJlZS4gKi9cbiAgQXR0YWNoZWQgPSAwYjAwMDAxMDAwMCxcblxuICAvKipcbiAgICogIFdoZXRoZXIgb3Igbm90IHRoZSBpbml0IGhvb2tzIGhhdmUgcnVuLlxuICAgKlxuICAgKiBJZiBvbiwgdGhlIGluaXQgaG9va3MgaGF2ZW4ndCB5ZXQgYmVlbiBydW4gYW5kIHNob3VsZCBiZSBleGVjdXRlZCBieSB0aGUgZmlyc3QgY29tcG9uZW50IHRoYXRcbiAgICogcnVucyBPUiB0aGUgZmlyc3QgY1IoKSBpbnN0cnVjdGlvbiB0aGF0IHJ1bnMgKHNvIGluaXRzIGFyZSBydW4gZm9yIHRoZSB0b3AgbGV2ZWwgdmlldyBiZWZvcmVcbiAgICogYW55IGVtYmVkZGVkIHZpZXdzKS5cbiAgICovXG4gIFJ1bkluaXQgPSAwYjAwMDEwMDAwMCxcblxuICAvKiogV2hldGhlciBvciBub3QgdGhpcyB2aWV3IGlzIGRlc3Ryb3llZC4gKi9cbiAgRGVzdHJveWVkID0gMGIwMDEwMDAwMDAsXG5cbiAgLyoqIFdoZXRoZXIgb3Igbm90IHRoaXMgdmlldyBpcyB0aGUgcm9vdCB2aWV3ICovXG4gIElzUm9vdCA9IDBiMDEwMDAwMDAwLFxufVxuXG4vKipcbiAqIFRoZSBzdGF0aWMgZGF0YSBmb3IgYW4gTFZpZXcgKHNoYXJlZCBiZXR3ZWVuIGFsbCB0ZW1wbGF0ZXMgb2YgYVxuICogZ2l2ZW4gdHlwZSkuXG4gKlxuICogU3RvcmVkIG9uIHRoZSB0ZW1wbGF0ZSBmdW5jdGlvbiBhcyBuZ1ByaXZhdGVEYXRhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRWaWV3IHtcbiAgLyoqXG4gICAqIElEIGZvciBpbmxpbmUgdmlld3MgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSB2aWV3IGlzIHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyB2aWV3XG4gICAqIGluIGEgY2VydGFpbiBwb3NpdGlvbi4gSWYgaXQncyBub3QsIHdlIGtub3cgdGhlIG5ldyB2aWV3IG5lZWRzIHRvIGJlIGluc2VydGVkXG4gICAqIGFuZCB0aGUgb25lIHRoYXQgZXhpc3RzIG5lZWRzIHRvIGJlIHJlbW92ZWQgKGUuZy4gaWYvZWxzZSBzdGF0ZW1lbnRzKVxuICAgKlxuICAgKiBJZiB0aGlzIGlzIC0xLCB0aGVuIHRoaXMgaXMgYSBjb21wb25lbnQgdmlldyBvciBhIGR5bmFtaWNhbGx5IGNyZWF0ZWQgdmlldy5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBibHVlcHJpbnQgdXNlZCB0byBnZW5lcmF0ZSBMVmlldyBpbnN0YW5jZXMgZm9yIHRoaXMgVFZpZXcuIENvcHlpbmcgdGhpc1xuICAgKiBibHVlcHJpbnQgaXMgZmFzdGVyIHRoYW4gY3JlYXRpbmcgYSBuZXcgTFZpZXcgZnJvbSBzY3JhdGNoLlxuICAgKi9cbiAgYmx1ZXByaW50OiBMVmlldztcblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIGZ1bmN0aW9uIHVzZWQgdG8gcmVmcmVzaCB0aGUgdmlldyBvZiBkeW5hbWljYWxseSBjcmVhdGVkIHZpZXdzXG4gICAqIGFuZCBjb21wb25lbnRzLiBXaWxsIGJlIG51bGwgZm9yIGlubGluZSB2aWV3cy5cbiAgICovXG4gIHRlbXBsYXRlOiBDb21wb25lbnRUZW1wbGF0ZTx7fT58bnVsbDtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiBjb250YWluaW5nIHF1ZXJ5LXJlbGF0ZWQgaW5zdHJ1Y3Rpb25zLlxuICAgKi9cbiAgdmlld1F1ZXJ5OiBDb21wb25lbnRRdWVyeTx7fT58bnVsbDtcblxuICAvKipcbiAgICogUG9pbnRlciB0byB0aGUgYFROb2RlYCB0aGF0IHJlcHJlc2VudHMgdGhlIHJvb3Qgb2YgdGhlIHZpZXcuXG4gICAqXG4gICAqIElmIHRoaXMgaXMgYSBgVFZpZXdOb2RlYCBmb3IgYW4gYExWaWV3Tm9kZWAsIHRoaXMgaXMgYW4gZW1iZWRkZWQgdmlldyBvZiBhIGNvbnRhaW5lci5cbiAgICogV2UgbmVlZCB0aGlzIHBvaW50ZXIgdG8gYmUgYWJsZSB0byBlZmZpY2llbnRseSBmaW5kIHRoaXMgbm9kZSB3aGVuIGluc2VydGluZyB0aGUgdmlld1xuICAgKiBpbnRvIGFuIGFuY2hvci5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBhIGBURWxlbWVudE5vZGVgLCB0aGlzIGlzIHRoZSB2aWV3IG9mIGEgcm9vdCBjb21wb25lbnQuIEl0IGhhcyBleGFjdGx5IG9uZVxuICAgKiByb290IFROb2RlLlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIG51bGwsIHRoaXMgaXMgdGhlIHZpZXcgb2YgYSBjb21wb25lbnQgdGhhdCBpcyBub3QgYXQgcm9vdC4gV2UgZG8gbm90IHN0b3JlXG4gICAqIHRoZSBob3N0IFROb2RlcyBmb3IgY2hpbGQgY29tcG9uZW50IHZpZXdzIGJlY2F1c2UgdGhleSBjYW4gcG90ZW50aWFsbHkgaGF2ZSBzZXZlcmFsXG4gICAqIGRpZmZlcmVudCBob3N0IFROb2RlcywgZGVwZW5kaW5nIG9uIHdoZXJlIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgdXNlZC4gVGhlc2UgaG9zdFxuICAgKiBUTm9kZXMgY2Fubm90IGJlIHNoYXJlZCAoZHVlIHRvIGRpZmZlcmVudCBpbmRpY2VzLCBldGMpLlxuICAgKi9cbiAgbm9kZTogVFZpZXdOb2RlfFRFbGVtZW50Tm9kZXxudWxsO1xuXG4gIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHRlbXBsYXRlIGhhcyBiZWVuIHByb2Nlc3NlZC4gKi9cbiAgZmlyc3RUZW1wbGF0ZVBhc3M6IGJvb2xlYW47XG5cbiAgLyoqIFN0YXRpYyBkYXRhIGVxdWl2YWxlbnQgb2YgTFZpZXcuZGF0YVtdLiBDb250YWlucyBUTm9kZXMsIFBpcGVEZWZJbnRlcm5hbCBvciBUSTE4bi4gKi9cbiAgZGF0YTogVERhdGE7XG5cbiAgLyoqXG4gICAqIFRoZSBiaW5kaW5nIHN0YXJ0IGluZGV4IGlzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgZGF0YSBhcnJheVxuICAgKiBzdGFydHMgdG8gc3RvcmUgYmluZGluZ3Mgb25seS4gU2F2aW5nIHRoaXMgdmFsdWUgZW5zdXJlcyB0aGF0IHdlXG4gICAqIHdpbGwgYmVnaW4gcmVhZGluZyBiaW5kaW5ncyBhdCB0aGUgY29ycmVjdCBwb2ludCBpbiB0aGUgYXJyYXkgd2hlblxuICAgKiB3ZSBhcmUgaW4gdXBkYXRlIG1vZGUuXG4gICAqL1xuICBiaW5kaW5nU3RhcnRJbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggd2hlcmUgdGhlIFwiZXhwYW5kb1wiIHNlY3Rpb24gb2YgYExWaWV3YCBiZWdpbnMuIFRoZSBleHBhbmRvXG4gICAqIHNlY3Rpb24gY29udGFpbnMgaW5qZWN0b3JzLCBkaXJlY3RpdmUgaW5zdGFuY2VzLCBhbmQgaG9zdCBiaW5kaW5nIHZhbHVlcy5cbiAgICogVW5saWtlIHRoZSBcImNvbnN0c1wiIGFuZCBcInZhcnNcIiBzZWN0aW9ucyBvZiBgTFZpZXdgLCB0aGUgbGVuZ3RoIG9mIHRoaXNcbiAgICogc2VjdGlvbiBjYW5ub3QgYmUgY2FsY3VsYXRlZCBhdCBjb21waWxlLXRpbWUgYmVjYXVzZSBkaXJlY3RpdmVzIGFyZSBtYXRjaGVkXG4gICAqIGF0IHJ1bnRpbWUgdG8gcHJlc2VydmUgbG9jYWxpdHkuXG4gICAqXG4gICAqIFdlIHN0b3JlIHRoaXMgc3RhcnQgaW5kZXggc28gd2Uga25vdyB3aGVyZSB0byBzdGFydCBjaGVja2luZyBob3N0IGJpbmRpbmdzXG4gICAqIGluIGBzZXRIb3N0QmluZGluZ3NgLlxuICAgKi9cbiAgZXhwYW5kb1N0YXJ0SW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogSW5kZXggb2YgdGhlIGhvc3Qgbm9kZSBvZiB0aGUgZmlyc3QgTFZpZXcgb3IgTENvbnRhaW5lciBiZW5lYXRoIHRoaXMgTFZpZXcgaW5cbiAgICogdGhlIGhpZXJhcmNoeS5cbiAgICpcbiAgICogTmVjZXNzYXJ5IHRvIHN0b3JlIHRoaXMgc28gdmlld3MgY2FuIHRyYXZlcnNlIHRocm91Z2ggdGhlaXIgbmVzdGVkIHZpZXdzXG4gICAqIHRvIHJlbW92ZSBsaXN0ZW5lcnMgYW5kIGNhbGwgb25EZXN0cm95IGNhbGxiYWNrcy5cbiAgICpcbiAgICogRm9yIGVtYmVkZGVkIHZpZXdzLCB3ZSBzdG9yZSB0aGUgaW5kZXggb2YgYW4gTENvbnRhaW5lcidzIGhvc3QgcmF0aGVyIHRoYW4gdGhlIGZpcnN0XG4gICAqIExWaWV3IHRvIGF2b2lkIG1hbmFnaW5nIHNwbGljaW5nIHdoZW4gdmlld3MgYXJlIGFkZGVkL3JlbW92ZWQuXG4gICAqL1xuICBjaGlsZEluZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBmaXJzdCBjaGlsZCBub2RlIGxvY2F0ZWQgaW4gdGhlIHZpZXcuXG4gICAqL1xuICBmaXJzdENoaWxkOiBUTm9kZXxudWxsO1xuXG4gIC8qKlxuICAgKiBTZXQgb2YgaW5zdHJ1Y3Rpb25zIHVzZWQgdG8gcHJvY2VzcyBob3N0IGJpbmRpbmdzIGVmZmljaWVudGx5LlxuICAgKlxuICAgKiBTZWUgVklFV19EQVRBLm1kIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgZXhwYW5kb0luc3RydWN0aW9uczogKG51bWJlcnxIb3N0QmluZGluZ3NGdW5jdGlvbjxhbnk+fG51bGwpW118bnVsbDtcblxuICAvKipcbiAgICogRnVsbCByZWdpc3RyeSBvZiBkaXJlY3RpdmVzIGFuZCBjb21wb25lbnRzIHRoYXQgbWF5IGJlIGZvdW5kIGluIHRoaXMgdmlldy5cbiAgICpcbiAgICogSXQncyBuZWNlc3NhcnkgdG8ga2VlcCBhIGNvcHkgb2YgdGhlIGZ1bGwgZGVmIGxpc3Qgb24gdGhlIFRWaWV3IHNvIGl0J3MgcG9zc2libGVcbiAgICogdG8gcmVuZGVyIHRlbXBsYXRlIGZ1bmN0aW9ucyB3aXRob3V0IGEgaG9zdCBjb21wb25lbnQuXG4gICAqL1xuICBkaXJlY3RpdmVSZWdpc3RyeTogRGlyZWN0aXZlRGVmTGlzdHxudWxsO1xuXG4gIC8qKlxuICAgKiBGdWxsIHJlZ2lzdHJ5IG9mIHBpcGVzIHRoYXQgbWF5IGJlIGZvdW5kIGluIHRoaXMgdmlldy5cbiAgICpcbiAgICogVGhlIHByb3BlcnR5IGlzIGVpdGhlciBhbiBhcnJheSBvZiBgUGlwZURlZnNgcyBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdGhlIGFycmF5IG9mXG4gICAqIGBQaXBlRGVmc2BzLiBUaGUgZnVuY3Rpb24gaXMgbmVjZXNzYXJ5IHRvIGJlIGFibGUgdG8gc3VwcG9ydCBmb3J3YXJkIGRlY2xhcmF0aW9ucy5cbiAgICpcbiAgICogSXQncyBuZWNlc3NhcnkgdG8ga2VlcCBhIGNvcHkgb2YgdGhlIGZ1bGwgZGVmIGxpc3Qgb24gdGhlIFRWaWV3IHNvIGl0J3MgcG9zc2libGVcbiAgICogdG8gcmVuZGVyIHRlbXBsYXRlIGZ1bmN0aW9ucyB3aXRob3V0IGEgaG9zdCBjb21wb25lbnQuXG4gICAqL1xuICBwaXBlUmVnaXN0cnk6IFBpcGVEZWZMaXN0fG51bGw7XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIG5nT25Jbml0IGFuZCBuZ0RvQ2hlY2sgaG9va3MgdGhhdCBzaG91bGQgYmUgZXhlY3V0ZWQgZm9yIHRoaXMgdmlldyBpblxuICAgKiBjcmVhdGlvbiBtb2RlLlxuICAgKlxuICAgKiBFdmVuIGluZGljZXM6IERpcmVjdGl2ZSBpbmRleFxuICAgKiBPZGQgaW5kaWNlczogSG9vayBmdW5jdGlvblxuICAgKi9cbiAgaW5pdEhvb2tzOiBIb29rRGF0YXxudWxsO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBuZ0RvQ2hlY2sgaG9va3MgdGhhdCBzaG91bGQgYmUgZXhlY3V0ZWQgZm9yIHRoaXMgdmlldyBpbiB1cGRhdGUgbW9kZS5cbiAgICpcbiAgICogRXZlbiBpbmRpY2VzOiBEaXJlY3RpdmUgaW5kZXhcbiAgICogT2RkIGluZGljZXM6IEhvb2sgZnVuY3Rpb25cbiAgICovXG4gIGNoZWNrSG9va3M6IEhvb2tEYXRhfG51bGw7XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIG5nQWZ0ZXJDb250ZW50SW5pdCBhbmQgbmdBZnRlckNvbnRlbnRDaGVja2VkIGhvb2tzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkXG4gICAqIGZvciB0aGlzIHZpZXcgaW4gY3JlYXRpb24gbW9kZS5cbiAgICpcbiAgICogRXZlbiBpbmRpY2VzOiBEaXJlY3RpdmUgaW5kZXhcbiAgICogT2RkIGluZGljZXM6IEhvb2sgZnVuY3Rpb25cbiAgICovXG4gIGNvbnRlbnRIb29rczogSG9va0RhdGF8bnVsbDtcblxuICAvKipcbiAgICogQXJyYXkgb2YgbmdBZnRlckNvbnRlbnRDaGVja2VkIGhvb2tzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGZvciB0aGlzIHZpZXcgaW4gdXBkYXRlXG4gICAqIG1vZGUuXG4gICAqXG4gICAqIEV2ZW4gaW5kaWNlczogRGlyZWN0aXZlIGluZGV4XG4gICAqIE9kZCBpbmRpY2VzOiBIb29rIGZ1bmN0aW9uXG4gICAqL1xuICBjb250ZW50Q2hlY2tIb29rczogSG9va0RhdGF8bnVsbDtcblxuICAvKipcbiAgICogQXJyYXkgb2YgbmdBZnRlclZpZXdJbml0IGFuZCBuZ0FmdGVyVmlld0NoZWNrZWQgaG9va3MgdGhhdCBzaG91bGQgYmUgZXhlY3V0ZWQgZm9yXG4gICAqIHRoaXMgdmlldyBpbiBjcmVhdGlvbiBtb2RlLlxuICAgKlxuICAgKiBFdmVuIGluZGljZXM6IERpcmVjdGl2ZSBpbmRleFxuICAgKiBPZGQgaW5kaWNlczogSG9vayBmdW5jdGlvblxuICAgKi9cbiAgdmlld0hvb2tzOiBIb29rRGF0YXxudWxsO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBuZ0FmdGVyVmlld0NoZWNrZWQgaG9va3MgdGhhdCBzaG91bGQgYmUgZXhlY3V0ZWQgZm9yIHRoaXMgdmlldyBpblxuICAgKiB1cGRhdGUgbW9kZS5cbiAgICpcbiAgICogRXZlbiBpbmRpY2VzOiBEaXJlY3RpdmUgaW5kZXhcbiAgICogT2RkIGluZGljZXM6IEhvb2sgZnVuY3Rpb25cbiAgICovXG4gIHZpZXdDaGVja0hvb2tzOiBIb29rRGF0YXxudWxsO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBuZ09uRGVzdHJveSBob29rcyB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCB3aGVuIHRoaXMgdmlldyBpcyBkZXN0cm95ZWQuXG4gICAqXG4gICAqIEV2ZW4gaW5kaWNlczogRGlyZWN0aXZlIGluZGV4XG4gICAqIE9kZCBpbmRpY2VzOiBIb29rIGZ1bmN0aW9uXG4gICAqL1xuICBkZXN0cm95SG9va3M6IEhvb2tEYXRhfG51bGw7XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIHBpcGUgbmdPbkRlc3Ryb3kgaG9va3MgdGhhdCBzaG91bGQgYmUgZXhlY3V0ZWQgd2hlbiB0aGlzIHZpZXcgaXMgZGVzdHJveWVkLlxuICAgKlxuICAgKiBFdmVuIGluZGljZXM6IEluZGV4IG9mIHBpcGUgaW4gZGF0YVxuICAgKiBPZGQgaW5kaWNlczogSG9vayBmdW5jdGlvblxuICAgKlxuICAgKiBUaGVzZSBtdXN0IGJlIHN0b3JlZCBzZXBhcmF0ZWx5IGZyb20gZGlyZWN0aXZlIGRlc3Ryb3kgaG9va3MgYmVjYXVzZSB0aGVpciBjb250ZXh0c1xuICAgKiBhcmUgc3RvcmVkIGluIGRhdGEuXG4gICAqL1xuICBwaXBlRGVzdHJveUhvb2tzOiBIb29rRGF0YXxudWxsO1xuXG4gIC8qKlxuICAgKiBXaGVuIGEgdmlldyBpcyBkZXN0cm95ZWQsIGxpc3RlbmVycyBuZWVkIHRvIGJlIHJlbGVhc2VkIGFuZCBvdXRwdXRzIG5lZWQgdG8gYmVcbiAgICogdW5zdWJzY3JpYmVkLiBUaGlzIGNsZWFudXAgYXJyYXkgc3RvcmVzIGJvdGggbGlzdGVuZXIgZGF0YSAoaW4gY2h1bmtzIG9mIDQpXG4gICAqIGFuZCBvdXRwdXQgZGF0YSAoaW4gY2h1bmtzIG9mIDIpIGZvciBhIHBhcnRpY3VsYXIgdmlldy4gQ29tYmluaW5nIHRoZSBhcnJheXNcbiAgICogc2F2ZXMgb24gbWVtb3J5ICg3MCBieXRlcyBwZXIgYXJyYXkpIGFuZCBvbiBhIGZldyBieXRlcyBvZiBjb2RlIHNpemUgKGZvciB0d29cbiAgICogc2VwYXJhdGUgZm9yIGxvb3BzKS5cbiAgICpcbiAgICogSWYgaXQncyBhIG5hdGl2ZSBET00gbGlzdGVuZXIgb3Igb3V0cHV0IHN1YnNjcmlwdGlvbiBiZWluZyBzdG9yZWQ6XG4gICAqIDFzdCBpbmRleCBpczogZXZlbnQgbmFtZSAgYG5hbWUgPSB0Vmlldy5jbGVhbnVwW2krMF1gXG4gICAqIDJuZCBpbmRleCBpczogaW5kZXggb2YgbmF0aXZlIGVsZW1lbnQgYGVsZW1lbnQgPSBsVmlld1t0Vmlldy5jbGVhbnVwW2krMV1dYFxuICAgKiAzcmQgaW5kZXggaXM6IGluZGV4IG9mIGxpc3RlbmVyIGZ1bmN0aW9uIGBsaXN0ZW5lciA9IGxWaWV3W0NMRUFOVVBdW3RWaWV3LmNsZWFudXBbaSsyXV1gXG4gICAqIDR0aCBpbmRleCBpczogYHVzZUNhcHR1cmVPckluZHggPSB0Vmlldy5jbGVhbnVwW2krM11gXG4gICAqICAgIGB0eXBlb2YgdXNlQ2FwdHVyZU9ySW5keCA9PSAnYm9vbGVhbicgOiB1c2VDYXB0dXJlIGJvb2xlYW5cbiAgICogICAgYHR5cGVvZiB1c2VDYXB0dXJlT3JJbmR4ID09ICdudW1iZXInOlxuICAgKiAgICAgICAgIGB1c2VDYXB0dXJlT3JJbmR4ID49IDBgIGByZW1vdmVMaXN0ZW5lciA9IExWaWV3W0NMRUFOVVBdW3VzZUNhcHR1cmVPckluZHhdYFxuICAgKiAgICAgICAgIGB1c2VDYXB0dXJlT3JJbmR4IDwgIDBgIGBzdWJzY3JpcHRpb24gPSBMVmlld1tDTEVBTlVQXVstdXNlQ2FwdHVyZU9ySW5keF1gXG4gICAqXG4gICAqIElmIGl0J3MgYSByZW5kZXJlcjIgc3R5bGUgbGlzdGVuZXIgb3IgVmlld1JlZiBkZXN0cm95IGhvb2sgYmVpbmcgc3RvcmVkOlxuICAgKiAxc3QgaW5kZXggaXM6IGluZGV4IG9mIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGluIExWaWV3LmNsZWFudXBJbnN0YW5jZXNbXVxuICAgKiAybmQgaW5kZXggaXM6IGBudWxsYFxuICAgKiAgICAgICAgICAgICAgIGBsVmlld1tDTEVBTlVQXVt0Vmlldy5jbGVhbnVwW2krMF1dKClgXG4gICAqXG4gICAqIElmIGl0J3MgYW4gb3V0cHV0IHN1YnNjcmlwdGlvbiBvciBxdWVyeSBsaXN0IGRlc3Ryb3kgaG9vazpcbiAgICogMXN0IGluZGV4IGlzOiBvdXRwdXQgdW5zdWJzY3JpYmUgZnVuY3Rpb24gLyBxdWVyeSBsaXN0IGRlc3Ryb3kgZnVuY3Rpb25cbiAgICogMm5kIGluZGV4IGlzOiBpbmRleCBvZiBmdW5jdGlvbiBjb250ZXh0IGluIExWaWV3LmNsZWFudXBJbnN0YW5jZXNbXVxuICAgKiAgICAgICAgICAgICAgIGB0Vmlldy5jbGVhbnVwW2krMF0uY2FsbChsVmlld1tDTEVBTlVQXVt0Vmlldy5jbGVhbnVwW2krMV1dKWBcbiAgICovXG4gIGNsZWFudXA6IGFueVtdfG51bGw7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBlbGVtZW50IGluZGljZXMgZm9yIGNoaWxkIGNvbXBvbmVudHMgdGhhdCB3aWxsIG5lZWQgdG8gYmVcbiAgICogcmVmcmVzaGVkIHdoZW4gdGhlIGN1cnJlbnQgdmlldyBoYXMgZmluaXNoZWQgaXRzIGNoZWNrLiBUaGVzZSBpbmRpY2VzIGhhdmVcbiAgICogYWxyZWFkeSBiZWVuIGFkanVzdGVkIGZvciB0aGUgSEVBREVSX09GRlNFVC5cbiAgICpcbiAgICovXG4gIGNvbXBvbmVudHM6IG51bWJlcltdfG51bGw7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBpbmRpY2VzIGZvciBjaGlsZCBkaXJlY3RpdmVzIHRoYXQgaGF2ZSBjb250ZW50IHF1ZXJpZXMuXG4gICAqXG4gICAqIEV2ZW4gaW5kaWNlczogRGlyZWN0aXZlIGluZGljZXNcbiAgICogT2RkIGluZGljZXM6IFN0YXJ0aW5nIGluZGV4IG9mIGNvbnRlbnQgcXVlcmllcyAoc3RvcmVkIGluIENPTlRFTlRfUVVFUklFUykgZm9yIHRoaXMgZGlyZWN0aXZlXG4gICAqL1xuICBjb250ZW50UXVlcmllczogbnVtYmVyW118bnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gUm9vdENvbnRleHRGbGFncyB7RW1wdHkgPSAwYjAwLCBEZXRlY3RDaGFuZ2VzID0gMGIwMSwgRmx1c2hQbGF5ZXJzID0gMGIxMH1cblxuXG4vKipcbiAqIFJvb3RDb250ZXh0IGNvbnRhaW5zIGluZm9ybWF0aW9uIHdoaWNoIGlzIHNoYXJlZCBmb3IgYWxsIGNvbXBvbmVudHMgd2hpY2hcbiAqIHdlcmUgYm9vdHN0cmFwcGVkIHdpdGgge0BsaW5rIHJlbmRlckNvbXBvbmVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm9vdENvbnRleHQge1xuICAvKipcbiAgICogQSBmdW5jdGlvbiB1c2VkIGZvciBzY2hlZHVsaW5nIGNoYW5nZSBkZXRlY3Rpb24gaW4gdGhlIGZ1dHVyZS4gVXN1YWxseVxuICAgKiB0aGlzIGlzIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgLlxuICAgKi9cbiAgc2NoZWR1bGVyOiAod29ya0ZuOiAoKSA9PiB2b2lkKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBIHByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgd2hlbiBhbGwgY29tcG9uZW50cyBhcmUgY29uc2lkZXJlZCBjbGVhbiAobm90IGRpcnR5KS5cbiAgICpcbiAgICogVGhpcyBwcm9taXNlIGlzIG92ZXJ3cml0dGVuIGV2ZXJ5IHRpbWUgYSBmaXJzdCBjYWxsIHRvIHtAbGluayBtYXJrRGlydHl9IGlzIGludm9rZWQuXG4gICAqL1xuICBjbGVhbjogUHJvbWlzZTxudWxsPjtcblxuICAvKipcbiAgICogUm9vdENvbXBvbmVudHMgLSBUaGUgY29tcG9uZW50cyB0aGF0IHdlcmUgaW5zdGFudGlhdGVkIGJ5IHRoZSBjYWxsIHRvXG4gICAqIHtAbGluayByZW5kZXJDb21wb25lbnR9LlxuICAgKi9cbiAgY29tcG9uZW50czoge31bXTtcblxuICAvKipcbiAgICogVGhlIHBsYXllciBmbHVzaGluZyBoYW5kbGVyIHRvIGtpY2sgb2ZmIGFsbCBhbmltYXRpb25zXG4gICAqL1xuICBwbGF5ZXJIYW5kbGVyOiBQbGF5ZXJIYW5kbGVyfG51bGw7XG5cbiAgLyoqXG4gICAqIFdoYXQgcmVuZGVyLXJlbGF0ZWQgb3BlcmF0aW9ucyB0byBydW4gb25jZSBhIHNjaGVkdWxlciBoYXMgYmVlbiBzZXRcbiAgICovXG4gIGZsYWdzOiBSb290Q29udGV4dEZsYWdzO1xufVxuXG4vKipcbiAqIEFycmF5IG9mIGhvb2tzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIGZvciBhIHZpZXcgYW5kIHRoZWlyIGRpcmVjdGl2ZSBpbmRpY2VzLlxuICpcbiAqIEV2ZW4gaW5kaWNlczogRGlyZWN0aXZlIGluZGV4XG4gKiBPZGQgaW5kaWNlczogSG9vayBmdW5jdGlvblxuICovXG5leHBvcnQgdHlwZSBIb29rRGF0YSA9IChudW1iZXIgfCAoKCkgPT4gdm9pZCkpW107XG5cbi8qKlxuICogU3RhdGljIGRhdGEgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgaW5zdGFuY2Utc3BlY2lmaWMgZGF0YSBhcnJheSBvbiBhbiBMVmlldy5cbiAqXG4gKiBFYWNoIG5vZGUncyBzdGF0aWMgZGF0YSBpcyBzdG9yZWQgaW4gdERhdGEgYXQgdGhlIHNhbWUgaW5kZXggdGhhdCBpdCdzIHN0b3JlZFxuICogaW4gdGhlIGRhdGEgYXJyYXkuICBBbnkgbm9kZXMgdGhhdCBkbyBub3QgaGF2ZSBzdGF0aWMgZGF0YSBzdG9yZSBhIG51bGwgdmFsdWUgaW5cbiAqIHREYXRhIHRvIGF2b2lkIGEgc3BhcnNlIGFycmF5LlxuICpcbiAqIEVhY2ggcGlwZSdzIGRlZmluaXRpb24gaXMgc3RvcmVkIGhlcmUgYXQgdGhlIHNhbWUgaW5kZXggYXMgaXRzIHBpcGUgaW5zdGFuY2UgaW5cbiAqIHRoZSBkYXRhIGFycmF5LlxuICpcbiAqIEluamVjdG9yIGJsb29tIGZpbHRlcnMgYXJlIGFsc28gc3RvcmVkIGhlcmUuXG4gKi9cbmV4cG9ydCB0eXBlIFREYXRhID1cbiAgICAoVE5vZGUgfCBQaXBlRGVmPGFueT58IERpcmVjdGl2ZURlZjxhbnk+fCBDb21wb25lbnREZWY8YW55PnwgbnVtYmVyIHwgVHlwZTxhbnk+fFxuICAgICBJbmplY3Rpb25Ub2tlbjxhbnk+fCBUSTE4biB8IEkxOG5VcGRhdGVPcENvZGVzIHwgbnVsbClbXTtcblxuLy8gTm90ZTogVGhpcyBoYWNrIGlzIG5lY2Vzc2FyeSBzbyB3ZSBkb24ndCBlcnJvbmVvdXNseSBnZXQgYSBjaXJjdWxhciBkZXBlbmRlbmN5XG4vLyBmYWlsdXJlIGJhc2VkIG9uIHR5cGVzLlxuZXhwb3J0IGNvbnN0IHVudXNlZFZhbHVlRXhwb3J0VG9QbGFjYXRlQWpkID0gMTtcbiJdfQ==