@igo2/geo 1.11.0 → 1.12.1

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 (485) hide show
  1. package/assets/icons/cross_black_18px.svg +88 -88
  2. package/assets/icons/place_blue_36px.svg +55 -55
  3. package/assets/icons/place_green_36px.svg +55 -55
  4. package/assets/icons/place_red_36px.svg +55 -55
  5. package/assets/icons/place_yellow_36px.svg +55 -55
  6. package/bundles/igo2-geo.umd.js +3075 -1245
  7. package/bundles/igo2-geo.umd.js.map +1 -1
  8. package/esm2015/lib/catalog/catalog-browser/catalog-browser-group.component.js +1 -1
  9. package/esm2015/lib/catalog/catalog-browser/catalog-browser-layer.component.js +1 -1
  10. package/esm2015/lib/catalog/catalog-browser/catalog-browser.component.js +1 -1
  11. package/esm2015/lib/catalog/catalog-browser/catalog-browser.module.js +1 -1
  12. package/esm2015/lib/catalog/catalog-library/add-catalog-dialog.component.js +1 -1
  13. package/esm2015/lib/catalog/catalog-library/catalog-library-item.component.js +1 -1
  14. package/esm2015/lib/catalog/catalog-library/catalog-library.component.js +1 -1
  15. package/esm2015/lib/catalog/catalog-library/catalog-library.module.js +1 -1
  16. package/esm2015/lib/catalog/catalog.module.js +1 -1
  17. package/esm2015/lib/catalog/index.js +1 -1
  18. package/esm2015/lib/catalog/shared/catalog.abstract.js +1 -1
  19. package/esm2015/lib/catalog/shared/catalog.enum.js +1 -1
  20. package/esm2015/lib/catalog/shared/catalog.interface.js +1 -1
  21. package/esm2015/lib/catalog/shared/catalog.service.js +113 -42
  22. package/esm2015/lib/catalog/shared/index.js +1 -1
  23. package/esm2015/lib/datasource/datasource.module.js +1 -1
  24. package/esm2015/lib/datasource/index.js +1 -1
  25. package/esm2015/lib/datasource/shared/capabilities.service.js +1 -1
  26. package/esm2015/lib/datasource/shared/datasource.service.js +1 -1
  27. package/esm2015/lib/datasource/shared/datasources/any-datasource.interface.js +1 -1
  28. package/esm2015/lib/datasource/shared/datasources/any-datasource.js +1 -1
  29. package/esm2015/lib/datasource/shared/datasources/arcgisrest-datasource.interface.js +1 -1
  30. package/esm2015/lib/datasource/shared/datasources/arcgisrest-datasource.js +1 -1
  31. package/esm2015/lib/datasource/shared/datasources/carto-datasource.interface.js +1 -1
  32. package/esm2015/lib/datasource/shared/datasources/carto-datasource.js +1 -1
  33. package/esm2015/lib/datasource/shared/datasources/cluster-datasource.interface.js +1 -1
  34. package/esm2015/lib/datasource/shared/datasources/cluster-datasource.js +1 -1
  35. package/esm2015/lib/datasource/shared/datasources/data.service.js +1 -1
  36. package/esm2015/lib/datasource/shared/datasources/datasource.interface.js +1 -1
  37. package/esm2015/lib/datasource/shared/datasources/datasource.js +1 -1
  38. package/esm2015/lib/datasource/shared/datasources/feature-datasource.interface.js +1 -1
  39. package/esm2015/lib/datasource/shared/datasources/feature-datasource.js +1 -1
  40. package/esm2015/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.js +1 -1
  41. package/esm2015/lib/datasource/shared/datasources/imagearcgisrest-datasource.js +1 -1
  42. package/esm2015/lib/datasource/shared/datasources/index.js +1 -1
  43. package/esm2015/lib/datasource/shared/datasources/mvt-datasource.interface.js +1 -1
  44. package/esm2015/lib/datasource/shared/datasources/mvt-datasource.js +1 -1
  45. package/esm2015/lib/datasource/shared/datasources/osm-datasource.interface.js +1 -1
  46. package/esm2015/lib/datasource/shared/datasources/osm-datasource.js +1 -1
  47. package/esm2015/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.js +1 -1
  48. package/esm2015/lib/datasource/shared/datasources/tilearcgisrest-datasource.js +1 -1
  49. package/esm2015/lib/datasource/shared/datasources/tiledebug-datasource.interface.js +1 -1
  50. package/esm2015/lib/datasource/shared/datasources/tiledebug-datasource.js +1 -1
  51. package/esm2015/lib/datasource/shared/datasources/websocket-datasource.interface.js +1 -1
  52. package/esm2015/lib/datasource/shared/datasources/websocket-datasource.js +1 -1
  53. package/esm2015/lib/datasource/shared/datasources/wfs-datasource.interface.js +1 -1
  54. package/esm2015/lib/datasource/shared/datasources/wfs-datasource.js +4 -1
  55. package/esm2015/lib/datasource/shared/datasources/wfs.service.js +1 -1
  56. package/esm2015/lib/datasource/shared/datasources/wms-datasource.interface.js +1 -1
  57. package/esm2015/lib/datasource/shared/datasources/wms-datasource.js +5 -2
  58. package/esm2015/lib/datasource/shared/datasources/wms-wfs.utils.js +1 -1
  59. package/esm2015/lib/datasource/shared/datasources/wmts-datasource.interface.js +1 -1
  60. package/esm2015/lib/datasource/shared/datasources/wmts-datasource.js +1 -1
  61. package/esm2015/lib/datasource/shared/datasources/xyz-datasource.interface.js +1 -1
  62. package/esm2015/lib/datasource/shared/datasources/xyz-datasource.js +1 -1
  63. package/esm2015/lib/datasource/shared/index.js +1 -1
  64. package/esm2015/lib/datasource/shared/options/index.js +1 -1
  65. package/esm2015/lib/datasource/shared/options/options-api.interface.js +1 -1
  66. package/esm2015/lib/datasource/shared/options/options-api.providers.js +1 -1
  67. package/esm2015/lib/datasource/shared/options/options-api.service.js +1 -1
  68. package/esm2015/lib/datasource/shared/options/options.service.js +1 -1
  69. package/esm2015/lib/datasource/utils/esri-style-generator.js +1 -1
  70. package/esm2015/lib/datasource/utils/index.js +1 -1
  71. package/esm2015/lib/datasource/utils/tilegrid.js +1 -1
  72. package/esm2015/lib/directions/directions-buttons/directions-buttons.component.js +1 -1
  73. package/esm2015/lib/directions/directions-buttons/index.js +1 -1
  74. package/esm2015/lib/directions/directions-inputs/directions-inputs.component.js +1 -1
  75. package/esm2015/lib/directions/directions-inputs/index.js +1 -1
  76. package/esm2015/lib/directions/directions-results/directions-results.component.js +1 -1
  77. package/esm2015/lib/directions/directions-results/index.js +1 -1
  78. package/esm2015/lib/directions/directions-sources/directions-source.interface.js +1 -1
  79. package/esm2015/lib/directions/directions-sources/directions-source.js +1 -1
  80. package/esm2015/lib/directions/directions-sources/directions-source.provider.js +1 -1
  81. package/esm2015/lib/directions/directions-sources/index.js +1 -1
  82. package/esm2015/lib/directions/directions-sources/osrm-directions-source.js +1 -1
  83. package/esm2015/lib/directions/directions.component.js +1 -1
  84. package/esm2015/lib/directions/directions.module.js +1 -1
  85. package/esm2015/lib/directions/index.js +1 -1
  86. package/esm2015/lib/directions/shared/directions-source.service.js +1 -1
  87. package/esm2015/lib/directions/shared/directions.enum.js +1 -1
  88. package/esm2015/lib/directions/shared/directions.interface.js +1 -1
  89. package/esm2015/lib/directions/shared/directions.service.js +1 -1
  90. package/esm2015/lib/directions/shared/directions.utils.js +1 -1
  91. package/esm2015/lib/directions/shared/index.js +1 -1
  92. package/esm2015/lib/directions/shared/store.js +1 -1
  93. package/esm2015/lib/download/download-button/download-button.component.js +1 -1
  94. package/esm2015/lib/download/download-button/index.js +1 -1
  95. package/esm2015/lib/download/download.module.js +1 -1
  96. package/esm2015/lib/download/index.js +1 -1
  97. package/esm2015/lib/download/shared/download.interface.js +1 -1
  98. package/esm2015/lib/download/shared/download.service.js +1 -1
  99. package/esm2015/lib/download/shared/index.js +1 -1
  100. package/esm2015/lib/draw/draw/draw-popup.component.js +21 -15
  101. package/esm2015/lib/draw/draw/draw-shorcuts.component.js +1 -1
  102. package/esm2015/lib/draw/draw/draw.component.js +185 -77
  103. package/esm2015/lib/draw/draw/draw.module.js +1 -1
  104. package/esm2015/lib/draw/drawingTool.module.js +1 -1
  105. package/esm2015/lib/draw/index.js +1 -1
  106. package/esm2015/lib/draw/shared/draw-icon.service.js +1 -1
  107. package/esm2015/lib/draw/shared/draw-style.service.js +24 -5
  108. package/esm2015/lib/draw/shared/draw.enum.js +17 -1
  109. package/esm2015/lib/draw/shared/draw.interface.js +1 -1
  110. package/esm2015/lib/draw/shared/draw.utils.js +1 -1
  111. package/esm2015/lib/draw/shared/index.js +1 -1
  112. package/esm2015/lib/feature/feature-details/feature-details.component.js +119 -43
  113. package/esm2015/lib/feature/feature-details/feature-details.directive.js +2 -57
  114. package/esm2015/lib/feature/feature-details/feature-details.module.js +1 -1
  115. package/esm2015/lib/feature/feature-form/feature-form.component.js +1 -1
  116. package/esm2015/lib/feature/feature-form/feature-form.module.js +1 -1
  117. package/esm2015/lib/feature/feature.module.js +1 -1
  118. package/esm2015/lib/feature/index.js +1 -1
  119. package/esm2015/lib/feature/shared/feature.enums.js +1 -1
  120. package/esm2015/lib/feature/shared/feature.interfaces.js +1 -1
  121. package/esm2015/lib/feature/shared/feature.utils.js +1 -1
  122. package/esm2015/lib/feature/shared/index.js +1 -1
  123. package/esm2015/lib/feature/shared/store.js +1 -1
  124. package/esm2015/lib/feature/shared/strategies/in-map-extent.js +1 -1
  125. package/esm2015/lib/feature/shared/strategies/in-map-resolution.js +1 -1
  126. package/esm2015/lib/feature/shared/strategies/index.js +1 -1
  127. package/esm2015/lib/feature/shared/strategies/loading-layer.js +1 -1
  128. package/esm2015/lib/feature/shared/strategies/loading.js +1 -1
  129. package/esm2015/lib/feature/shared/strategies/selection.js +1 -1
  130. package/esm2015/lib/feature/shared/strategies.utils.js +1 -1
  131. package/esm2015/lib/filter/filter.module.js +6 -3
  132. package/esm2015/lib/filter/index.js +1 -1
  133. package/esm2015/lib/filter/ogc-filter-button/index.js +1 -1
  134. package/esm2015/lib/filter/ogc-filter-button/ogc-filter-button.component.js +32 -7
  135. package/esm2015/lib/filter/ogc-filter-form/index.js +1 -1
  136. package/esm2015/lib/filter/ogc-filter-form/ogc-filter-form.component.js +1 -1
  137. package/esm2015/lib/filter/ogc-filter-selection/index.js +1 -1
  138. package/esm2015/lib/filter/ogc-filter-selection/ogc-filter-selection.component.js +652 -290
  139. package/esm2015/lib/filter/ogc-filter-time/index.js +1 -1
  140. package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.js +1 -1
  141. package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time.component.js +1 -1
  142. package/esm2015/lib/filter/ogc-filterable-form/index.js +1 -1
  143. package/esm2015/lib/filter/ogc-filterable-form/ogc-filterable-form.component.js +1 -1
  144. package/esm2015/lib/filter/ogc-filterable-item/index.js +1 -1
  145. package/esm2015/lib/filter/ogc-filterable-item/ogc-filterable-item.component.js +3 -2
  146. package/esm2015/lib/filter/ogc-filterable-list/index.js +1 -1
  147. package/esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.js +1 -1
  148. package/esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list.component.js +1 -1
  149. package/esm2015/lib/filter/shared/filterable-datasource.pipe.js +3 -2
  150. package/esm2015/lib/filter/shared/index.js +1 -1
  151. package/esm2015/lib/filter/shared/ogc-filter-time.service.js +1 -1
  152. package/esm2015/lib/filter/shared/ogc-filter.enum.js +1 -1
  153. package/esm2015/lib/filter/shared/ogc-filter.interface.js +1 -1
  154. package/esm2015/lib/filter/shared/ogc-filter.js +17 -6
  155. package/esm2015/lib/filter/shared/ogc-filter.service.js +1 -1
  156. package/esm2015/lib/filter/shared/spatial-filter.enum.js +1 -1
  157. package/esm2015/lib/filter/shared/spatial-filter.interface.js +1 -1
  158. package/esm2015/lib/filter/shared/spatial-filter.service.js +1 -1
  159. package/esm2015/lib/filter/shared/time-filter.enum.js +1 -1
  160. package/esm2015/lib/filter/shared/time-filter.interface.js +1 -1
  161. package/esm2015/lib/filter/shared/time-filter.service.js +1 -1
  162. package/esm2015/lib/filter/spatial-filter/spatial-filter-item/index.js +1 -1
  163. package/esm2015/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.js +1 -1
  164. package/esm2015/lib/filter/spatial-filter/spatial-filter-list/index.js +1 -1
  165. package/esm2015/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.js +1 -1
  166. package/esm2015/lib/filter/spatial-filter/spatial-filter-type/index.js +1 -1
  167. package/esm2015/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.js +1 -1
  168. package/esm2015/lib/filter/time-filter-button/index.js +1 -1
  169. package/esm2015/lib/filter/time-filter-button/time-filter-button.component.js +1 -1
  170. package/esm2015/lib/filter/time-filter-form/index.js +1 -1
  171. package/esm2015/lib/filter/time-filter-form/time-filter-form.component.js +1 -1
  172. package/esm2015/lib/filter/time-filter-item/index.js +1 -1
  173. package/esm2015/lib/filter/time-filter-item/time-filter-item.component.js +1 -1
  174. package/esm2015/lib/filter/time-filter-list/index.js +1 -1
  175. package/esm2015/lib/filter/time-filter-list/time-filter-list-binding.directive.js +1 -1
  176. package/esm2015/lib/filter/time-filter-list/time-filter-list.component.js +1 -1
  177. package/esm2015/lib/geo.module.js +1 -1
  178. package/esm2015/lib/geometry/geometry-form-field/geometry-form-field-input.component.js +1 -1
  179. package/esm2015/lib/geometry/geometry-form-field/geometry-form-field.component.js +1 -1
  180. package/esm2015/lib/geometry/geometry-form-field/geometry-form-field.module.js +1 -1
  181. package/esm2015/lib/geometry/geometry.module.js +1 -1
  182. package/esm2015/lib/geometry/index.js +1 -1
  183. package/esm2015/lib/geometry/shared/controls/draw.js +1 -1
  184. package/esm2015/lib/geometry/shared/controls/index.js +1 -1
  185. package/esm2015/lib/geometry/shared/controls/modify.js +1 -1
  186. package/esm2015/lib/geometry/shared/controls/slice.js +1 -1
  187. package/esm2015/lib/geometry/shared/geometry.errors.js +1 -1
  188. package/esm2015/lib/geometry/shared/geometry.interfaces.js +1 -1
  189. package/esm2015/lib/geometry/shared/geometry.utils.js +1 -1
  190. package/esm2015/lib/geometry/shared/index.js +1 -1
  191. package/esm2015/lib/import-export/export-button/export-button.component.js +1 -1
  192. package/esm2015/lib/import-export/export-button/index.js +1 -1
  193. package/esm2015/lib/import-export/import-export/import-export.component.js +1 -1
  194. package/esm2015/lib/import-export/import-export/index.js +1 -1
  195. package/esm2015/lib/import-export/import-export.module.js +1 -1
  196. package/esm2015/lib/import-export/index.js +1 -1
  197. package/esm2015/lib/import-export/shared/drop-geo-file.directive.js +1 -1
  198. package/esm2015/lib/import-export/shared/export.errors.js +1 -1
  199. package/esm2015/lib/import-export/shared/export.interface.js +1 -1
  200. package/esm2015/lib/import-export/shared/export.service.js +10 -2
  201. package/esm2015/lib/import-export/shared/export.type.js +1 -1
  202. package/esm2015/lib/import-export/shared/export.utils.js +1 -1
  203. package/esm2015/lib/import-export/shared/import.errors.js +1 -1
  204. package/esm2015/lib/import-export/shared/import.interface.js +1 -1
  205. package/esm2015/lib/import-export/shared/import.service.js +1 -1
  206. package/esm2015/lib/import-export/shared/import.utils.js +65 -38
  207. package/esm2015/lib/import-export/shared/index.js +1 -1
  208. package/esm2015/lib/import-export/style-list/index.js +1 -1
  209. package/esm2015/lib/import-export/style-list/style-list.interface.js +1 -1
  210. package/esm2015/lib/import-export/style-list/style-list.module.js +1 -1
  211. package/esm2015/lib/import-export/style-list/style-list.provider.js +1 -1
  212. package/esm2015/lib/import-export/style-list/style-list.service.js +1 -1
  213. package/esm2015/lib/layer/index.js +1 -1
  214. package/esm2015/lib/layer/layer-item/index.js +1 -1
  215. package/esm2015/lib/layer/layer-item/layer-item.component.js +15 -8
  216. package/esm2015/lib/layer/layer-legend/index.js +1 -1
  217. package/esm2015/lib/layer/layer-legend/layer-legend.component.js +6 -5
  218. package/esm2015/lib/layer/layer-legend-item/index.js +1 -1
  219. package/esm2015/lib/layer/layer-legend-item/layer-legend-item.component.js +1 -1
  220. package/esm2015/lib/layer/layer-legend-list/index.js +1 -1
  221. package/esm2015/lib/layer/layer-legend-list/layer-legend-list-binding.directive.js +1 -1
  222. package/esm2015/lib/layer/layer-legend-list/layer-legend-list.component.js +1 -1
  223. package/esm2015/lib/layer/layer-list/index.js +1 -1
  224. package/esm2015/lib/layer/layer-list/layer-list-binding.directive.js +1 -1
  225. package/esm2015/lib/layer/layer-list/layer-list.component.js +2 -2
  226. package/esm2015/lib/layer/layer-list/layer-list.enum.js +1 -1
  227. package/esm2015/lib/layer/layer-list-tool/index.js +1 -1
  228. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.component.js +1 -1
  229. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.enum.js +1 -1
  230. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.interface.js +1 -1
  231. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.service.js +1 -1
  232. package/esm2015/lib/layer/layer.module.js +1 -1
  233. package/esm2015/lib/layer/shared/clusterParam.js +1 -1
  234. package/esm2015/lib/layer/shared/index.js +1 -1
  235. package/esm2015/lib/layer/shared/layer.enums.js +1 -1
  236. package/esm2015/lib/layer/shared/layer.service.js +44 -20
  237. package/esm2015/lib/layer/shared/layers/any-layer.interface.js +1 -1
  238. package/esm2015/lib/layer/shared/layers/any-layer.js +1 -1
  239. package/esm2015/lib/layer/shared/layers/image-layer.interface.js +1 -1
  240. package/esm2015/lib/layer/shared/layers/image-layer.js +1 -1
  241. package/esm2015/lib/layer/shared/layers/index.js +1 -1
  242. package/esm2015/lib/layer/shared/layers/layer.interface.js +1 -1
  243. package/esm2015/lib/layer/shared/layers/layer.js +1 -1
  244. package/esm2015/lib/layer/shared/layers/tile-layer.interface.js +1 -1
  245. package/esm2015/lib/layer/shared/layers/tile-layer.js +1 -1
  246. package/esm2015/lib/layer/shared/layers/vector-layer.interface.js +1 -1
  247. package/esm2015/lib/layer/shared/layers/vector-layer.js +94 -43
  248. package/esm2015/lib/layer/shared/layers/vectortile-layer.interface.js +1 -1
  249. package/esm2015/lib/layer/shared/layers/vectortile-layer.js +1 -1
  250. package/esm2015/lib/layer/shared/style.service.js +80 -11
  251. package/esm2015/lib/layer/shared/vector-style.interface.js +1 -1
  252. package/esm2015/lib/layer/track-feature-button/index.js +1 -1
  253. package/esm2015/lib/layer/track-feature-button/track-feature-button.component.js +1 -1
  254. package/esm2015/lib/layer/utils/image-watcher.js +1 -1
  255. package/esm2015/lib/layer/utils/index.js +1 -1
  256. package/esm2015/lib/layer/utils/layer.utils.js +1 -1
  257. package/esm2015/lib/layer/utils/layerSync-watcher.js +4 -8
  258. package/esm2015/lib/layer/utils/outputLegend.js +5 -3
  259. package/esm2015/lib/layer/utils/tile-watcher.js +1 -1
  260. package/esm2015/lib/layer/utils/vector-watcher.js +1 -1
  261. package/esm2015/lib/map/baselayers-switcher/baselayers-switcher.animation.js +1 -1
  262. package/esm2015/lib/map/baselayers-switcher/baselayers-switcher.component.js +1 -1
  263. package/esm2015/lib/map/baselayers-switcher/index.js +1 -1
  264. package/esm2015/lib/map/baselayers-switcher/mini-basemap.component.js +1 -1
  265. package/esm2015/lib/map/geolocate-button/geolocate-button.component.js +52 -17
  266. package/esm2015/lib/map/geolocate-button/index.js +1 -1
  267. package/esm2015/lib/map/index.js +2 -1
  268. package/esm2015/lib/map/info-section/index.js +1 -1
  269. package/esm2015/lib/map/info-section/info-section.component.js +1 -1
  270. package/esm2015/lib/map/map-browser/index.js +1 -1
  271. package/esm2015/lib/map/map-browser/map-browser.component.js +2 -2
  272. package/esm2015/lib/map/map-center/index.js +1 -1
  273. package/esm2015/lib/map/map-center/map-center.component.js +1 -1
  274. package/esm2015/lib/map/map.module.js +6 -1
  275. package/esm2015/lib/map/menu-button/index.js +1 -1
  276. package/esm2015/lib/map/menu-button/menu-button.component.js +1 -1
  277. package/esm2015/lib/map/offline-button/index.js +1 -1
  278. package/esm2015/lib/map/offline-button/offline-button.component.js +1 -1
  279. package/esm2015/lib/map/rotation-button/index.js +1 -1
  280. package/esm2015/lib/map/rotation-button/rotation-button.component.js +1 -1
  281. package/esm2015/lib/map/shared/controllers/controller.js +1 -1
  282. package/esm2015/lib/map/shared/controllers/geolocation.js +310 -0
  283. package/esm2015/lib/map/shared/controllers/index.js +2 -1
  284. package/esm2015/lib/map/shared/controllers/view.js +17 -1
  285. package/esm2015/lib/map/shared/hover-feature.directive.js +8 -7
  286. package/esm2015/lib/map/shared/index.js +1 -1
  287. package/esm2015/lib/map/shared/map-pointer-position.directive.js +1 -1
  288. package/esm2015/lib/map/shared/map.enums.js +1 -1
  289. package/esm2015/lib/map/shared/map.interface.js +1 -1
  290. package/esm2015/lib/map/shared/map.js +15 -135
  291. package/esm2015/lib/map/shared/map.service.js +1 -1
  292. package/esm2015/lib/map/shared/map.utils.js +1 -1
  293. package/esm2015/lib/map/shared/mapOffline.directive.js +1 -1
  294. package/esm2015/lib/map/shared/projection.interfaces.js +1 -1
  295. package/esm2015/lib/map/shared/projection.service.js +1 -1
  296. package/esm2015/lib/map/shared/projection.utils.js +1 -1
  297. package/esm2015/lib/map/swipe-control/index.js +1 -1
  298. package/esm2015/lib/map/swipe-control/swipe-control.component.js +1 -1
  299. package/esm2015/lib/map/utils/layer-watcher.js +1 -1
  300. package/esm2015/lib/map/wake-lock-button/index.js +2 -0
  301. package/esm2015/lib/map/wake-lock-button/wake-lock-button.component.js +122 -0
  302. package/esm2015/lib/map/zoom-button/index.js +1 -1
  303. package/esm2015/lib/map/zoom-button/zoom-button.component.js +1 -1
  304. package/esm2015/lib/measure/index.js +1 -1
  305. package/esm2015/lib/measure/measure.module.js +1 -1
  306. package/esm2015/lib/measure/measurer/measure-format.pipe.js +1 -1
  307. package/esm2015/lib/measure/measurer/measurer-dialog.component.js +1 -1
  308. package/esm2015/lib/measure/measurer/measurer-item.component.js +1 -1
  309. package/esm2015/lib/measure/measurer/measurer.component.js +1 -1
  310. package/esm2015/lib/measure/measurer/measurer.module.js +1 -1
  311. package/esm2015/lib/measure/shared/index.js +1 -1
  312. package/esm2015/lib/measure/shared/measure.enum.js +1 -1
  313. package/esm2015/lib/measure/shared/measure.interfaces.js +1 -1
  314. package/esm2015/lib/measure/shared/measure.utils.js +1 -1
  315. package/esm2015/lib/metadata/index.js +1 -1
  316. package/esm2015/lib/metadata/metadata-button/index.js +1 -1
  317. package/esm2015/lib/metadata/metadata-button/metadata-button.component.js +13 -2
  318. package/esm2015/lib/metadata/metadata.module.js +1 -1
  319. package/esm2015/lib/metadata/shared/index.js +1 -1
  320. package/esm2015/lib/metadata/shared/metadata.interface.js +1 -1
  321. package/esm2015/lib/metadata/shared/metadata.service.js +1 -1
  322. package/esm2015/lib/offline/geoDB/geoDB.enums.js +6 -0
  323. package/esm2015/lib/offline/geoDB/geoDB.interface.js +2 -0
  324. package/esm2015/lib/offline/geoDB/geoDB.service.js +161 -0
  325. package/esm2015/lib/offline/geoDB/index.js +4 -0
  326. package/esm2015/lib/offline/index.js +3 -0
  327. package/esm2015/lib/offline/shared/geo-network.service.js +66 -0
  328. package/esm2015/lib/offline/shared/index.js +2 -0
  329. package/esm2015/lib/overlay/index.js +1 -1
  330. package/esm2015/lib/overlay/overlay.module.js +1 -1
  331. package/esm2015/lib/overlay/shared/index.js +1 -1
  332. package/esm2015/lib/overlay/shared/overlay-marker-style.utils.js +1 -1
  333. package/esm2015/lib/overlay/shared/overlay.directive.js +1 -1
  334. package/esm2015/lib/overlay/shared/overlay.enum.js +1 -1
  335. package/esm2015/lib/overlay/shared/overlay.js +1 -1
  336. package/esm2015/lib/overlay/shared/overlay.service.js +1 -1
  337. package/esm2015/lib/overlay/shared/overlay.utils.js +3 -3
  338. package/esm2015/lib/print/index.js +1 -1
  339. package/esm2015/lib/print/print/print.component.js +1 -1
  340. package/esm2015/lib/print/print-form/index.js +1 -1
  341. package/esm2015/lib/print/print-form/print-form.component.js +1 -1
  342. package/esm2015/lib/print/print.module.js +1 -1
  343. package/esm2015/lib/print/shared/index.js +1 -1
  344. package/esm2015/lib/print/shared/print.interface.js +1 -1
  345. package/esm2015/lib/print/shared/print.service.js +22 -16
  346. package/esm2015/lib/print/shared/print.type.js +1 -1
  347. package/esm2015/lib/query/index.js +1 -1
  348. package/esm2015/lib/query/query.module.js +5 -4
  349. package/esm2015/lib/query/shared/index.js +1 -1
  350. package/esm2015/lib/query/shared/query-search-source.js +1 -1
  351. package/esm2015/lib/query/shared/query-search-source.providers.js +1 -1
  352. package/esm2015/lib/query/shared/query.directive.js +1 -1
  353. package/esm2015/lib/query/shared/query.enums.js +1 -1
  354. package/esm2015/lib/query/shared/query.interfaces.js +1 -1
  355. package/esm2015/lib/query/shared/query.service.js +33 -6
  356. package/esm2015/lib/query/shared/query.utils.js +1 -1
  357. package/esm2015/lib/search/index.js +1 -1
  358. package/esm2015/lib/search/search-bar/search-bar.component.js +1 -1
  359. package/esm2015/lib/search/search-bar/search-bar.module.js +1 -1
  360. package/esm2015/lib/search/search-bar/search-url-param.directive.js +1 -1
  361. package/esm2015/lib/search/search-results/search-results-add-button.component.js +1 -1
  362. package/esm2015/lib/search/search-results/search-results-item.component.js +1 -1
  363. package/esm2015/lib/search/search-results/search-results.component.js +1 -1
  364. package/esm2015/lib/search/search-results/search-results.module.js +1 -1
  365. package/esm2015/lib/search/search-selector/search-selector.component.js +1 -1
  366. package/esm2015/lib/search/search-selector/search-selector.module.js +1 -1
  367. package/esm2015/lib/search/search-settings/search-settings.component.js +1 -1
  368. package/esm2015/lib/search/search-settings/search-settings.module.js +1 -1
  369. package/esm2015/lib/search/search.module.js +1 -1
  370. package/esm2015/lib/search/shared/index.js +1 -1
  371. package/esm2015/lib/search/shared/search-pointer-summary.directive.js +1 -1
  372. package/esm2015/lib/search/shared/search-source-service.providers.js +1 -1
  373. package/esm2015/lib/search/shared/search-source.service.js +1 -1
  374. package/esm2015/lib/search/shared/search.enums.js +1 -1
  375. package/esm2015/lib/search/shared/search.interfaces.js +1 -1
  376. package/esm2015/lib/search/shared/search.service.js +1 -1
  377. package/esm2015/lib/search/shared/search.utils.js +1 -1
  378. package/esm2015/lib/search/shared/sources/cadastre.js +1 -1
  379. package/esm2015/lib/search/shared/sources/cadastre.providers.js +1 -1
  380. package/esm2015/lib/search/shared/sources/coordinates.interfaces.js +1 -1
  381. package/esm2015/lib/search/shared/sources/coordinates.js +1 -1
  382. package/esm2015/lib/search/shared/sources/coordinates.providers.js +1 -1
  383. package/esm2015/lib/search/shared/sources/icherche.interfaces.js +1 -1
  384. package/esm2015/lib/search/shared/sources/icherche.js +1 -1
  385. package/esm2015/lib/search/shared/sources/icherche.providers.js +1 -1
  386. package/esm2015/lib/search/shared/sources/ilayer.interfaces.js +1 -1
  387. package/esm2015/lib/search/shared/sources/ilayer.js +1 -1
  388. package/esm2015/lib/search/shared/sources/ilayer.providers.js +1 -1
  389. package/esm2015/lib/search/shared/sources/index.js +1 -1
  390. package/esm2015/lib/search/shared/sources/nominatim.interfaces.js +1 -1
  391. package/esm2015/lib/search/shared/sources/nominatim.js +2 -2
  392. package/esm2015/lib/search/shared/sources/nominatim.providers.js +1 -1
  393. package/esm2015/lib/search/shared/sources/source.interfaces.js +1 -1
  394. package/esm2015/lib/search/shared/sources/source.js +2 -2
  395. package/esm2015/lib/search/shared/sources/storedqueries.interfaces.js +1 -1
  396. package/esm2015/lib/search/shared/sources/storedqueries.js +1 -1
  397. package/esm2015/lib/search/shared/sources/storedqueries.providers.js +1 -1
  398. package/esm2015/lib/toast/index.js +1 -1
  399. package/esm2015/lib/toast/toast.component.js +1 -1
  400. package/esm2015/lib/toast/toast.module.js +1 -1
  401. package/esm2015/lib/utils/commonVectorStyle.interface.js +1 -1
  402. package/esm2015/lib/utils/commonVectorStyle.js +1 -1
  403. package/esm2015/lib/utils/googleLinks.js +1 -1
  404. package/esm2015/lib/utils/id-generator.js +1 -1
  405. package/esm2015/lib/utils/index.js +1 -1
  406. package/esm2015/lib/utils/osmLinks.js +1 -1
  407. package/esm2015/lib/wkt/index.js +1 -1
  408. package/esm2015/lib/wkt/shared/index.js +1 -1
  409. package/esm2015/lib/wkt/shared/wkt.service.js +15 -15
  410. package/esm2015/lib/wkt/wkt.module.js +1 -1
  411. package/esm2015/lib/workspace/confirmation-popup/confirmation-popup.component.js +1 -1
  412. package/esm2015/lib/workspace/confirmation-popup/confirmation-popup.module.js +1 -1
  413. package/esm2015/lib/workspace/confirmation-popup/index.js +1 -1
  414. package/esm2015/lib/workspace/index.js +1 -1
  415. package/esm2015/lib/workspace/shared/edition-workspace.js +12 -4
  416. package/esm2015/lib/workspace/shared/edition-workspace.service.js +40 -13
  417. package/esm2015/lib/workspace/shared/feature-workspace.js +1 -1
  418. package/esm2015/lib/workspace/shared/feature-workspace.service.js +10 -5
  419. package/esm2015/lib/workspace/shared/index.js +1 -1
  420. package/esm2015/lib/workspace/shared/wfs-workspace.js +1 -1
  421. package/esm2015/lib/workspace/shared/wfs-workspace.service.js +10 -5
  422. package/esm2015/lib/workspace/shared/wms-workspace.service.js +31 -7
  423. package/esm2015/lib/workspace/shared/workspace.utils.js +1 -1
  424. package/esm2015/lib/workspace/widgets/index.js +1 -1
  425. package/esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.component.js +1 -1
  426. package/esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.module.js +1 -1
  427. package/esm2015/lib/workspace/widgets/widgets.js +1 -1
  428. package/esm2015/lib/workspace/workspace-selector/workspace-selector.directive.js +1 -1
  429. package/esm2015/lib/workspace/workspace-selector/workspace-selector.module.js +1 -1
  430. package/esm2015/lib/workspace/workspace-updator/workspace-updator.directive.js +1 -1
  431. package/esm2015/lib/workspace/workspace-updator/workspace-updator.module.js +1 -1
  432. package/esm2015/lib/workspace/workspace.module.js +1 -1
  433. package/esm2015/public_api.js +2 -1
  434. package/fesm2015/igo2-geo.js +2453 -946
  435. package/fesm2015/igo2-geo.js.map +1 -1
  436. package/lib/catalog/shared/catalog.interface.d.ts +9 -1
  437. package/lib/catalog/shared/catalog.service.d.ts +1 -0
  438. package/lib/datasource/shared/datasources/datasource.interface.d.ts +7 -1
  439. package/lib/draw/draw/draw-popup.component.d.ts +4 -2
  440. package/lib/draw/draw/draw.component.d.ts +19 -2
  441. package/lib/draw/shared/draw-style.service.d.ts +6 -0
  442. package/lib/draw/shared/draw.enum.d.ts +15 -0
  443. package/lib/feature/feature-details/feature-details.component.d.ts +12 -2
  444. package/lib/feature/feature-details/feature-details.directive.d.ts +2 -13
  445. package/lib/filter/filter.module.d.ts +1 -1
  446. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +31 -13
  447. package/lib/filter/shared/ogc-filter.interface.d.ts +19 -2
  448. package/lib/import-export/shared/import.utils.d.ts +1 -1
  449. package/lib/layer/layer-item/layer-item.component.d.ts +1 -0
  450. package/lib/layer/layer-legend/layer-legend.component.d.ts +3 -2
  451. package/lib/layer/shared/layer.service.d.ts +6 -3
  452. package/lib/layer/shared/layers/layer.interface.d.ts +1 -0
  453. package/lib/layer/shared/layers/vector-layer.d.ts +5 -1
  454. package/lib/layer/shared/style.service.d.ts +38 -3
  455. package/lib/layer/shared/vector-style.interface.d.ts +11 -0
  456. package/lib/map/geolocate-button/geolocate-button.component.d.ts +8 -1
  457. package/lib/map/index.d.ts +1 -0
  458. package/lib/map/map.module.d.ts +13 -12
  459. package/lib/map/shared/controllers/geolocation.d.ts +112 -0
  460. package/lib/map/shared/controllers/index.d.ts +1 -0
  461. package/lib/map/shared/controllers/view.d.ts +7 -0
  462. package/lib/map/shared/hover-feature.directive.d.ts +1 -1
  463. package/lib/map/shared/map.d.ts +7 -19
  464. package/lib/map/shared/map.interface.d.ts +0 -1
  465. package/lib/map/wake-lock-button/index.d.ts +1 -0
  466. package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +30 -0
  467. package/lib/offline/geoDB/geoDB.enums.d.ts +4 -0
  468. package/lib/offline/geoDB/geoDB.interface.d.ts +9 -0
  469. package/lib/offline/geoDB/geoDB.service.d.ts +35 -0
  470. package/lib/offline/geoDB/index.d.ts +3 -0
  471. package/lib/offline/index.d.ts +2 -0
  472. package/lib/offline/shared/geo-network.service.d.ts +28 -0
  473. package/lib/offline/shared/index.d.ts +1 -0
  474. package/lib/print/shared/print.service.d.ts +3 -2
  475. package/lib/query/query.module.d.ts +2 -1
  476. package/lib/query/shared/query.service.d.ts +7 -1
  477. package/lib/workspace/shared/edition-workspace.d.ts +2 -1
  478. package/lib/workspace/shared/edition-workspace.service.d.ts +5 -2
  479. package/lib/workspace/shared/feature-workspace.service.d.ts +3 -2
  480. package/lib/workspace/shared/wfs-workspace.service.d.ts +3 -2
  481. package/lib/workspace/shared/wms-workspace.service.d.ts +5 -2
  482. package/ngcc.config.js +3 -3
  483. package/package.json +7 -5
  484. package/public_api.d.ts +1 -0
  485. package/style/geo.theming.scss +12 -12
@@ -94,4 +94,4 @@ RotationButtonComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Rot
94
94
  }], color: [{
95
95
  type: Input
96
96
  }] }); })();
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm90YXRpb24tYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL21hcC9yb3RhdGlvbi1idXR0b24vcm90YXRpb24tYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL21hcC9yb3RhdGlvbi1idXR0b24vcm90YXRpb24tYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7SUNBakQsOEJBRTRCOzs7SUFDMUIsaUNBQytDO0lBQTdDLG9LQUFTLHlDQUFrQyxJQUFDO0lBQzVDLDhCQUNXO0lBQ2IsaUJBQVM7SUFDWCxpQkFBTTs7O0lBUEosK0pBQXlIO0lBRXZFLGVBQWU7SUFBZixvQ0FBZSw2QkFBQTtJQUVyRCxlQUEyRDtJQUEzRCx1RkFBMkQ7Ozs7SUFLekUsOEJBRTRCOzs7SUFDMUIsaUNBQytDO0lBQTdDLG9LQUFTLHlDQUFrQyxJQUFDO0lBQzVDLDhCQUNXO0lBQ2IsaUJBQVM7SUFDWCxpQkFBTTs7O0lBUEosK0pBQXlIO0lBRXZFLGVBQWU7SUFBZixvQ0FBZSw2QkFBQTtJQUVyRCxlQUEyRDtJQUEzRCx1RkFBMkQ7O0FETnpFLE1BQU0sT0FBTyx1QkFBdUI7SUFnQ2xDLGdCQUFlLENBQUM7SUEvQmhCLElBQ0ksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUMsS0FBYTtRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBR0QsSUFDSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksZ0JBQWdCLENBQUMsS0FBYztRQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLENBQUM7SUFHRCxJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUdELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFJRCxhQUFhLENBQUMsT0FBTztRQUNuQixNQUFNLFFBQVEsR0FBRyxTQUFTLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUM5QyxPQUFPO1lBQ0wsU0FBUyxFQUFFLFFBQVE7U0FDcEIsQ0FBQztJQUNKLENBQUM7OzhGQXZDVSx1QkFBdUI7MEVBQXZCLHVCQUF1QjtRQ1RwQyx3RUFRTTtRQUVOLHdFQVFNOztRQWxCQSwyREFBa0M7UUFVbEMsZUFBc0I7UUFBdEIsMkNBQXNCOzt1RkREZix1QkFBdUI7Y0FMbkMsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLFdBQVcsRUFBRSxrQ0FBa0M7Z0JBQy9DLFNBQVMsRUFBRSxDQUFDLGtDQUFrQyxDQUFDO2FBQ2hEO3NDQUdLLEdBQUc7a0JBRE4sS0FBSztZQVVGLGdCQUFnQjtrQkFEbkIsS0FBSztZQVVGLEtBQUs7a0JBRFIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uL3NoYXJlZC9tYXAnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tcm90YXRpb24tYnV0dG9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcm90YXRpb24tYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yb3RhdGlvbi1idXR0b24uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUm90YXRpb25CdXR0b25Db21wb25lbnQge1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IG1hcCgpOiBJZ29NYXAge1xyXG4gICAgcmV0dXJuIHRoaXMuX21hcDtcclxuICB9XHJcbiAgc2V0IG1hcCh2YWx1ZTogSWdvTWFwKSB7XHJcbiAgICB0aGlzLl9tYXAgPSB2YWx1ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfbWFwOiBJZ29NYXA7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHNob3dJZk5vUm90YXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2hvd0lmTm9Sb3RhdGlvbjtcclxuICB9XHJcbiAgc2V0IHNob3dJZk5vUm90YXRpb24odmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3Nob3dJZk5vUm90YXRpb24gPSB2YWx1ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfc2hvd0lmTm9Sb3RhdGlvbjogYm9vbGVhbjtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgY29sb3IoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jb2xvcjtcclxuICB9XHJcbiAgc2V0IGNvbG9yKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2NvbG9yID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NvbG9yOiBzdHJpbmc7XHJcblxyXG4gIGdldCByb3RhdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubWFwLnZpZXdDb250cm9sbGVyLmdldFJvdGF0aW9uKCkgIT09IDA7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIHJvdGF0aW9uU3R5bGUocmFkaWFucyk6IHt9IHtcclxuICAgIGNvbnN0IHJvdGF0aW9uID0gJ3JvdGF0ZSgnICsgcmFkaWFucyArICdyYWQpJztcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRyYW5zZm9ybTogcm90YXRpb25cclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJyb3RhdGVkICYmICFzaG93SWZOb1JvdGF0aW9uXCIgY2xhc3M9XCJpZ28tcm90YXRpb24tYnV0dG9uLWNvbnRhaW5lclwiXHJcbiAgW21hdFRvb2x0aXBdPVwicm90YXRlZCA/ICgnaWdvLmdlby5tYXBCdXR0b25zLnJlc2V0Um90YXRpb24nIHwgdHJhbnNsYXRlKTogKCdpZ28uZ2VvLm1hcEJ1dHRvbnMudGlwUm90YXRpb24nIHwgdHJhbnNsYXRlKVwiXHJcbiAgbWF0VG9vbHRpcFBvc2l0aW9uPVwibGVmdFwiPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIiBbY29sb3JdPVwiY29sb3JcIiBbZGlzYWJsZWRdPVwiIXJvdGF0ZWRcIlxyXG4gICAgKGNsaWNrKT1cIm1hcC52aWV3Q29udHJvbGxlci5yZXNldFJvdGF0aW9uKClcIj5cclxuICAgIDxtYXQtaWNvbiBbbmdTdHlsZV09XCJyb3RhdGlvblN0eWxlKG1hcC52aWV3Q29udHJvbGxlci5nZXRSb3RhdGlvbigpKVwiIHN2Z0ljb249XCJuYXZpZ2F0aW9uXCI+XHJcbiAgICA8L21hdC1pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJzaG93SWZOb1JvdGF0aW9uXCIgY2xhc3M9XCJpZ28tcm90YXRpb24tYnV0dG9uLWNvbnRhaW5lclwiXHJcbiAgW21hdFRvb2x0aXBdPVwicm90YXRlZCA/ICgnaWdvLmdlby5tYXBCdXR0b25zLnJlc2V0Um90YXRpb24nIHwgdHJhbnNsYXRlKTogKCdpZ28uZ2VvLm1hcEJ1dHRvbnMudGlwUm90YXRpb24nIHwgdHJhbnNsYXRlKVwiXHJcbiAgbWF0VG9vbHRpcFBvc2l0aW9uPVwibGVmdFwiPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIiBbY29sb3JdPVwiY29sb3JcIiBbZGlzYWJsZWRdPVwiIXJvdGF0ZWRcIlxyXG4gICAgKGNsaWNrKT1cIm1hcC52aWV3Q29udHJvbGxlci5yZXNldFJvdGF0aW9uKClcIj5cclxuICAgIDxtYXQtaWNvbiBbbmdTdHlsZV09XCJyb3RhdGlvblN0eWxlKG1hcC52aWV3Q29udHJvbGxlci5nZXRSb3RhdGlvbigpKVwiIHN2Z0ljb249XCJuYXZpZ2F0aW9uXCI+XHJcbiAgICA8L21hdC1pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj4iXX0=
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm90YXRpb24tYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL21hcC9yb3RhdGlvbi1idXR0b24vcm90YXRpb24tYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL21hcC9yb3RhdGlvbi1idXR0b24vcm90YXRpb24tYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7SUNBakQsOEJBRTRCOzs7SUFDMUIsaUNBQytDO0lBQTdDLG9LQUFTLHlDQUFrQyxJQUFDO0lBQzVDLDhCQUNXO0lBQ2IsaUJBQVM7SUFDWCxpQkFBTTs7O0lBUEosK0pBQXlIO0lBRXZFLGVBQWU7SUFBZixvQ0FBZSw2QkFBQTtJQUVyRCxlQUEyRDtJQUEzRCx1RkFBMkQ7Ozs7SUFLekUsOEJBRTRCOzs7SUFDMUIsaUNBQytDO0lBQTdDLG9LQUFTLHlDQUFrQyxJQUFDO0lBQzVDLDhCQUNXO0lBQ2IsaUJBQVM7SUFDWCxpQkFBTTs7O0lBUEosK0pBQXlIO0lBRXZFLGVBQWU7SUFBZixvQ0FBZSw2QkFBQTtJQUVyRCxlQUEyRDtJQUEzRCx1RkFBMkQ7O0FETnpFLE1BQU0sT0FBTyx1QkFBdUI7SUFnQ2xDLGdCQUFlLENBQUM7SUEvQmhCLElBQ0ksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUMsS0FBYTtRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBR0QsSUFDSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksZ0JBQWdCLENBQUMsS0FBYztRQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLENBQUM7SUFHRCxJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUdELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFJRCxhQUFhLENBQUMsT0FBTztRQUNuQixNQUFNLFFBQVEsR0FBRyxTQUFTLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUM5QyxPQUFPO1lBQ0wsU0FBUyxFQUFFLFFBQVE7U0FDcEIsQ0FBQztJQUNKLENBQUM7OzhGQXZDVSx1QkFBdUI7MEVBQXZCLHVCQUF1QjtRQ1RwQyx3RUFRTTtRQUVOLHdFQVFNOztRQWxCQSwyREFBa0M7UUFVbEMsZUFBc0I7UUFBdEIsMkNBQXNCOzt1RkREZix1QkFBdUI7Y0FMbkMsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLFdBQVcsRUFBRSxrQ0FBa0M7Z0JBQy9DLFNBQVMsRUFBRSxDQUFDLGtDQUFrQyxDQUFDO2FBQ2hEO3NDQUdLLEdBQUc7a0JBRE4sS0FBSztZQVVGLGdCQUFnQjtrQkFEbkIsS0FBSztZQVVGLEtBQUs7a0JBRFIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vc2hhcmVkL21hcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1yb3RhdGlvbi1idXR0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vcm90YXRpb24tYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcm90YXRpb24tYnV0dG9uLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUm90YXRpb25CdXR0b25Db21wb25lbnQge1xuICBASW5wdXQoKVxuICBnZXQgbWFwKCk6IElnb01hcCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcDtcbiAgfVxuICBzZXQgbWFwKHZhbHVlOiBJZ29NYXApIHtcbiAgICB0aGlzLl9tYXAgPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIF9tYXA6IElnb01hcDtcblxuICBASW5wdXQoKVxuICBnZXQgc2hvd0lmTm9Sb3RhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvd0lmTm9Sb3RhdGlvbjtcbiAgfVxuICBzZXQgc2hvd0lmTm9Sb3RhdGlvbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dJZk5vUm90YXRpb24gPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIF9zaG93SWZOb1JvdGF0aW9uOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBjb2xvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jb2xvcjtcbiAgfVxuICBzZXQgY29sb3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2NvbG9yID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfY29sb3I6IHN0cmluZztcblxuICBnZXQgcm90YXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tYXAudmlld0NvbnRyb2xsZXIuZ2V0Um90YXRpb24oKSAhPT0gMDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICByb3RhdGlvblN0eWxlKHJhZGlhbnMpOiB7fSB7XG4gICAgY29uc3Qgcm90YXRpb24gPSAncm90YXRlKCcgKyByYWRpYW5zICsgJ3JhZCknO1xuICAgIHJldHVybiB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0aW9uXG4gICAgfTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cInJvdGF0ZWQgJiYgIXNob3dJZk5vUm90YXRpb25cIiBjbGFzcz1cImlnby1yb3RhdGlvbi1idXR0b24tY29udGFpbmVyXCJcbiAgW21hdFRvb2x0aXBdPVwicm90YXRlZCA/ICgnaWdvLmdlby5tYXBCdXR0b25zLnJlc2V0Um90YXRpb24nIHwgdHJhbnNsYXRlKTogKCdpZ28uZ2VvLm1hcEJ1dHRvbnMudGlwUm90YXRpb24nIHwgdHJhbnNsYXRlKVwiXG4gIG1hdFRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcFBvc2l0aW9uPVwibGVmdFwiIFtjb2xvcl09XCJjb2xvclwiIFtkaXNhYmxlZF09XCIhcm90YXRlZFwiXG4gICAgKGNsaWNrKT1cIm1hcC52aWV3Q29udHJvbGxlci5yZXNldFJvdGF0aW9uKClcIj5cbiAgICA8bWF0LWljb24gW25nU3R5bGVdPVwicm90YXRpb25TdHlsZShtYXAudmlld0NvbnRyb2xsZXIuZ2V0Um90YXRpb24oKSlcIiBzdmdJY29uPVwibmF2aWdhdGlvblwiPlxuICAgIDwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJzaG93SWZOb1JvdGF0aW9uXCIgY2xhc3M9XCJpZ28tcm90YXRpb24tYnV0dG9uLWNvbnRhaW5lclwiXG4gIFttYXRUb29sdGlwXT1cInJvdGF0ZWQgPyAoJ2lnby5nZW8ubWFwQnV0dG9ucy5yZXNldFJvdGF0aW9uJyB8IHRyYW5zbGF0ZSk6ICgnaWdvLmdlby5tYXBCdXR0b25zLnRpcFJvdGF0aW9uJyB8IHRyYW5zbGF0ZSlcIlxuICBtYXRUb29sdGlwUG9zaXRpb249XCJsZWZ0XCI+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIiBbY29sb3JdPVwiY29sb3JcIiBbZGlzYWJsZWRdPVwiIXJvdGF0ZWRcIlxuICAgIChjbGljayk9XCJtYXAudmlld0NvbnRyb2xsZXIucmVzZXRSb3RhdGlvbigpXCI+XG4gICAgPG1hdC1pY29uIFtuZ1N0eWxlXT1cInJvdGF0aW9uU3R5bGUobWFwLnZpZXdDb250cm9sbGVyLmdldFJvdGF0aW9uKCkpXCIgc3ZnSWNvbj1cIm5hdmlnYXRpb25cIj5cbiAgICA8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbjwvZGl2PiJdfQ==
@@ -39,4 +39,4 @@ export class MapController {
39
39
  this.observerKeys = [];
40
40
  }
41
41
  }
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL21hcC9zaGFyZWQvY29udHJvbGxlcnMvY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFBMUI7UUFPRTs7V0FFRztRQUNPLGlCQUFZLEdBQWdCLEVBQUUsQ0FBQztJQW9DM0MsQ0FBQztJQWxDQzs7O09BR0c7SUFDSCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRLENBQUMsS0FBd0I7UUFDL0IsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxTQUFTLEVBQUU7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1NBQy9EO1FBRUQsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQjtRQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBYyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN6QixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudHNLZXkgfSBmcm9tICdvbC9ldmVudHMnO1xyXG5pbXBvcnQgT2xNYXAgZnJvbSAnb2wvTWFwJztcclxuaW1wb3J0IHsgdW5CeUtleSB9IGZyb20gJ29sL09ic2VydmFibGUnO1xyXG5cclxuLyoqXHJcbiAqIEJhc2UgbWFwIGNvbnRyb2xsZXJcclxuICovXHJcbmV4cG9ydCBjbGFzcyBNYXBDb250cm9sbGVyIHtcclxuXHJcbiAgLyoqXHJcbiAgICogT0wgTWFwXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG9sTWFwOiBPbE1hcDtcclxuXHJcbiAgLyoqXHJcbiAgICogQXJyYXkgb2Ygb2JzZXJ2ZXIga2V5c1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBvYnNlcnZlcktleXM6IEV2ZW50c0tleVtdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgT0wgbWFwIHRoaXMgY29udHJvbGxlciBpcyBib3VuZCB0b1xyXG4gICAqIEByZXR1cm5zIE9MIE1hcFxyXG4gICAqL1xyXG4gIGdldE9sTWFwKCk6IE9sTWFwIHtcclxuICAgIHJldHVybiB0aGlzLm9sTWFwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIG9yIHJlbW92ZSB0aGlzIGNvbnRyb2xsZXIgdG8vZnJvbSBhIG1hcC5cclxuICAgKiBAcGFyYW0gbWFwIE9MIE1hcFxyXG4gICAqL1xyXG4gIHNldE9sTWFwKG9sTWFwOiBPbE1hcCB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKG9sTWFwICE9PSB1bmRlZmluZWQgJiYgdGhpcy5nZXRPbE1hcCgpICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGNvbnRyb2xsZXIgaXMgYWxyZWFkeSBib3VuZCB0byBhIG1hcC4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob2xNYXAgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnRlYXJkb3duT2JzZXJ2ZXJzKCk7XHJcbiAgICAgIHRoaXMub2xNYXAgPSBvbE1hcDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub2xNYXAgPSBvbE1hcDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRlYXJkb3duIGFueSBvYnNlcnZlcnNcclxuICAgKi9cclxuICB0ZWFyZG93bk9ic2VydmVycygpIHtcclxuICAgIHRoaXMub2JzZXJ2ZXJLZXlzLmZvckVhY2goKGtleTogRXZlbnRzS2V5KSA9PiB1bkJ5S2V5KGtleSkpO1xyXG4gICAgdGhpcy5vYnNlcnZlcktleXMgPSBbXTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL21hcC9zaGFyZWQvY29udHJvbGxlcnMvY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFBMUI7UUFPRTs7V0FFRztRQUNPLGlCQUFZLEdBQWdCLEVBQUUsQ0FBQztJQW9DM0MsQ0FBQztJQWxDQzs7O09BR0c7SUFDSCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRLENBQUMsS0FBd0I7UUFDL0IsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxTQUFTLEVBQUU7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1NBQy9EO1FBRUQsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQjtRQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBYyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN6QixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudHNLZXkgfSBmcm9tICdvbC9ldmVudHMnO1xuaW1wb3J0IE9sTWFwIGZyb20gJ29sL01hcCc7XG5pbXBvcnQgeyB1bkJ5S2V5IH0gZnJvbSAnb2wvT2JzZXJ2YWJsZSc7XG5cbi8qKlxuICogQmFzZSBtYXAgY29udHJvbGxlclxuICovXG5leHBvcnQgY2xhc3MgTWFwQ29udHJvbGxlciB7XG5cbiAgLyoqXG4gICAqIE9MIE1hcFxuICAgKi9cbiAgcHJvdGVjdGVkIG9sTWFwOiBPbE1hcDtcblxuICAvKipcbiAgICogQXJyYXkgb2Ygb2JzZXJ2ZXIga2V5c1xuICAgKi9cbiAgcHJvdGVjdGVkIG9ic2VydmVyS2V5czogRXZlbnRzS2V5W10gPSBbXTtcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBPTCBtYXAgdGhpcyBjb250cm9sbGVyIGlzIGJvdW5kIHRvXG4gICAqIEByZXR1cm5zIE9MIE1hcFxuICAgKi9cbiAgZ2V0T2xNYXAoKTogT2xNYXAge1xuICAgIHJldHVybiB0aGlzLm9sTWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBvciByZW1vdmUgdGhpcyBjb250cm9sbGVyIHRvL2Zyb20gYSBtYXAuXG4gICAqIEBwYXJhbSBtYXAgT0wgTWFwXG4gICAqL1xuICBzZXRPbE1hcChvbE1hcDogT2xNYXAgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAob2xNYXAgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmdldE9sTWFwKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGNvbnRyb2xsZXIgaXMgYWxyZWFkeSBib3VuZCB0byBhIG1hcC4nKTtcbiAgICB9XG5cbiAgICBpZiAob2xNYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy50ZWFyZG93bk9ic2VydmVycygpO1xuICAgICAgdGhpcy5vbE1hcCA9IG9sTWFwO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub2xNYXAgPSBvbE1hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZWFyZG93biBhbnkgb2JzZXJ2ZXJzXG4gICAqL1xuICB0ZWFyZG93bk9ic2VydmVycygpIHtcbiAgICB0aGlzLm9ic2VydmVyS2V5cy5mb3JFYWNoKChrZXk6IEV2ZW50c0tleSkgPT4gdW5CeUtleShrZXkpKTtcbiAgICB0aGlzLm9ic2VydmVyS2V5cyA9IFtdO1xuICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,310 @@
1
+ import olGeolocation from 'ol/Geolocation';
2
+ import { BehaviorSubject, interval } from 'rxjs';
3
+ import olFeature from 'ol/Feature';
4
+ import { MapController } from './controller';
5
+ import { Point } from 'ol/geom';
6
+ import { fromCircle } from 'ol/geom/Polygon';
7
+ import OlCircle from 'ol/geom/Circle';
8
+ import * as olstyle from 'ol/style';
9
+ import { Overlay } from '../../../overlay/shared/overlay';
10
+ import { FeatureMotion } from '../../../feature/shared/feature.enums';
11
+ import { switchMap } from 'rxjs/operators';
12
+ var GeolocationOverlayType;
13
+ (function (GeolocationOverlayType) {
14
+ GeolocationOverlayType["Position"] = "position";
15
+ GeolocationOverlayType["Accuracy"] = "accuracy";
16
+ GeolocationOverlayType["Buffer"] = "buffer";
17
+ })(GeolocationOverlayType || (GeolocationOverlayType = {}));
18
+ /**
19
+ * Controller to handle map view interactions
20
+ */
21
+ export class MapGeolocationController extends MapController {
22
+ constructor(map, options, storageService, configService) {
23
+ super();
24
+ this.map = map;
25
+ this.options = options;
26
+ this.storageService = storageService;
27
+ this.configService = configService;
28
+ this.subscriptions$$ = [];
29
+ this.positionFeatureStyle = new olstyle.Style({
30
+ image: new olstyle.Circle({
31
+ radius: 6,
32
+ fill: new olstyle.Fill({
33
+ color: '#3399CC',
34
+ }),
35
+ stroke: new olstyle.Stroke({
36
+ color: '#fff',
37
+ width: 2,
38
+ }),
39
+ }),
40
+ });
41
+ this.accuracyFeatureStyle = new olstyle.Style({
42
+ stroke: new olstyle.Stroke({
43
+ color: 'rgba(120, 120, 120, 0.4)',
44
+ width: 1,
45
+ }),
46
+ fill: new olstyle.Fill({
47
+ color: 'rgba(120, 120, 120, 0.4)',
48
+ }),
49
+ });
50
+ /**
51
+ * Observable of the current emission interval of the position. In seconds
52
+ */
53
+ this.emissionIntervalSeconds$ = new BehaviorSubject(5);
54
+ /**
55
+ * Observable of the current position
56
+ */
57
+ this.position$ = new BehaviorSubject(undefined);
58
+ /**
59
+ * Observable of the tracking state
60
+ */
61
+ this.tracking$ = new BehaviorSubject(undefined);
62
+ /**
63
+ * Observable of the follow position state
64
+ */
65
+ this.followPosition$ = new BehaviorSubject(undefined);
66
+ this._buffer = this.options && this.options.buffer ? this.options.buffer : undefined;
67
+ this._accuracyThreshold = this.options && this.options.accuracyThreshold ? this.options.accuracyThreshold : 5000;
68
+ this._followPosition = this.options && this.options.followPosition ? this.options.followPosition : false;
69
+ this.geolocationOverlay = new Overlay(this.map);
70
+ }
71
+ /**
72
+ * History of positions
73
+ */
74
+ // private positions: MapGeolocationState[] = [];
75
+ /**
76
+ * Whether the geolocate controller should keep the position history
77
+ */
78
+ /*
79
+ // todo: refine this method
80
+ set keepPositionHistory(value) {
81
+ this._keepPositionHistory = value;
82
+ }
83
+ get keepPositionHistory(): boolean {
84
+ return this._keepPositionHistory;
85
+ }
86
+ private _keepPositionHistory: boolean = this.options && this.options.keepPositionHistory ? this.options.keepPositionHistory : true;
87
+ */
88
+ /**
89
+ * Whether the geolocate should show a buffer around the current position
90
+ */
91
+ set buffer(value) {
92
+ this._buffer = value;
93
+ this.handleFeatureCreation(this.position$.value);
94
+ }
95
+ get buffer() {
96
+ return this._buffer;
97
+ }
98
+ /**
99
+ * Whether the geolocate controller accuracy threshold to store/show the position.
100
+ */
101
+ set accuracyThreshold(value) {
102
+ this._accuracyThreshold = value;
103
+ this.handleFeatureCreation(this.position$.value);
104
+ }
105
+ get accuracyThreshold() {
106
+ return this._accuracyThreshold;
107
+ }
108
+ /**
109
+ * Whether the activate the geolocation.
110
+ */
111
+ get tracking() {
112
+ return this.geolocation.getTracking();
113
+ }
114
+ set tracking(value) {
115
+ this.geolocation.setTracking(value || false);
116
+ this.tracking$.next(value);
117
+ if (this.storageService && value !== undefined) {
118
+ this.storageService.set('geolocation.tracking', value);
119
+ }
120
+ if (!value) {
121
+ this.position$.next(undefined);
122
+ }
123
+ }
124
+ /**
125
+ * Whether the activate the view tracking of the current position
126
+ */
127
+ set followPosition(value) {
128
+ var _a;
129
+ this._followPosition = value;
130
+ this.followPosition$.next(value);
131
+ if (((_a = this.configService) === null || _a === void 0 ? void 0 : _a.getConfig('geolocate.followPosition')) === false) {
132
+ this._followPosition = false;
133
+ this.followPosition$.next(false);
134
+ }
135
+ this.handleFeatureCreation(this.position$.value);
136
+ if (this.storageService && value !== undefined) {
137
+ this.storageService.set('geolocation.followPosition', value);
138
+ }
139
+ }
140
+ get followPosition() {
141
+ return this._followPosition;
142
+ }
143
+ /**
144
+ * Add or remove this controller to/from a map.
145
+ * @param map OL Map
146
+ */
147
+ setOlMap(olMap) {
148
+ super.setOlMap(olMap);
149
+ this.setupObservers();
150
+ }
151
+ deleteGeolocationFeatures() {
152
+ this.deleteFeatureByType(GeolocationOverlayType.Position);
153
+ this.deleteFeatureByType(GeolocationOverlayType.Accuracy);
154
+ this.deleteFeatureByType(GeolocationOverlayType.Buffer);
155
+ }
156
+ setupObservers() {
157
+ this.tracking$.subscribe(tracking => {
158
+ if (tracking) {
159
+ this.onPositionChange(true, true);
160
+ }
161
+ else {
162
+ this.deleteGeolocationFeatures();
163
+ }
164
+ });
165
+ this.geolocation = new olGeolocation({
166
+ // enableHighAccuracy must be set to true to have the heading value.
167
+ trackingOptions: {
168
+ enableHighAccuracy: true,
169
+ maximumAge: 10000,
170
+ timeout: 600000
171
+ },
172
+ projection: this.options.projection,
173
+ });
174
+ let tracking = false;
175
+ this.subscriptions$$.push(this.emissionIntervalSeconds$
176
+ .pipe(switchMap(value => interval(value * 1000)))
177
+ .subscribe(() => {
178
+ if (tracking === this.tracking) {
179
+ this.onPositionChange(true);
180
+ }
181
+ else {
182
+ tracking = this.tracking;
183
+ this.onPositionChange(true, true);
184
+ }
185
+ }));
186
+ }
187
+ updateGeolocationOptions(options) {
188
+ if (!options) {
189
+ return;
190
+ }
191
+ // todo maybe a dedicated interface for geolocation should be defined instead of putting these inside the mapviewoptions?
192
+ let tracking = options.geolocate;
193
+ let followPosition = options.alwaysTracking;
194
+ if (this.storageService) {
195
+ const storedTracking = this.storageService.get('geolocation.tracking');
196
+ if (storedTracking !== null && storedTracking !== undefined) {
197
+ tracking = storedTracking;
198
+ }
199
+ const storedFollowPosition = this.storageService.get('geolocation.followPosition');
200
+ if (storedFollowPosition !== null && storedFollowPosition !== undefined) {
201
+ followPosition = storedFollowPosition;
202
+ }
203
+ }
204
+ this.tracking = tracking;
205
+ this.followPosition = followPosition;
206
+ this.buffer = options.buffer;
207
+ }
208
+ /**
209
+ * Teardown any observers
210
+ */
211
+ teardownObservers() {
212
+ if (this.subscriptions$$.length) {
213
+ this.subscriptions$$.map(s => s.unsubscribe());
214
+ }
215
+ super.teardownObservers();
216
+ }
217
+ /**
218
+ * Clear the position history
219
+ */
220
+ /*
221
+ // todo
222
+ clearPositionsHistory() {
223
+ this.positions = [];
224
+ }*/
225
+ /**
226
+ * On position change, get the position, show it on the map and record it.
227
+ * @param emitEvent Map event
228
+ */
229
+ onPositionChange(emitEvent = false, zoomTo = false) {
230
+ var _a;
231
+ if (!this.tracking) {
232
+ return;
233
+ }
234
+ const geolocateProperties = this.geolocation.getProperties();
235
+ if (geolocateProperties.accuracy > this.accuracyThreshold) {
236
+ console.warn('Poor geolocation accuracy. No position are stored/shown');
237
+ this.position$.next(undefined);
238
+ return;
239
+ }
240
+ const position = {
241
+ position: geolocateProperties.position,
242
+ projection: this.geolocation.getProjection().getCode(),
243
+ accuracy: geolocateProperties.accuracy,
244
+ altitude: geolocateProperties.altitude,
245
+ altitudeAccuracy: geolocateProperties.altitudeAccuracy,
246
+ heading: geolocateProperties.heading,
247
+ speed: geolocateProperties.speed,
248
+ enableHighAccuracy: ((_a = geolocateProperties.trackingOptions) === null || _a === void 0 ? void 0 : _a.enableHighAccuracy) ? true : false,
249
+ timestamp: new Date()
250
+ };
251
+ this.handleFeatureCreation(position, zoomTo);
252
+ if (emitEvent) {
253
+ this.position$.next(position);
254
+ /*if (this.keepPositionHistory === true) {
255
+ // handle position diff to store only true diff;
256
+ this.positions.push(position);
257
+ }*/
258
+ }
259
+ }
260
+ deleteFeatureByType(type) {
261
+ const featureById = this.geolocationOverlay.dataSource.ol.getFeatureById(type);
262
+ if (featureById) {
263
+ this.geolocationOverlay.dataSource.ol.removeFeature(featureById);
264
+ }
265
+ }
266
+ handleFeatureCreation(position, zoomTo = false) {
267
+ if (!position || !position.position) {
268
+ return;
269
+ }
270
+ this.deleteGeolocationFeatures();
271
+ const positionGeometry = new Point(position.position);
272
+ const accuracyGeometry = fromCircle(new OlCircle(position.position, position.accuracy || 0));
273
+ const positionFeature = new olFeature({ geometry: positionGeometry });
274
+ const accuracyFeature = new olFeature({ geometry: accuracyGeometry });
275
+ if (positionGeometry) {
276
+ let motion = this.followPosition ? FeatureMotion.Move : FeatureMotion.None;
277
+ if (zoomTo) {
278
+ motion = FeatureMotion.Zoom;
279
+ }
280
+ positionFeature.setId(GeolocationOverlayType.Position);
281
+ positionFeature.setStyle(this.positionFeatureStyle);
282
+ this.geolocationOverlay.addOlFeature(positionFeature, motion);
283
+ if (accuracyGeometry) {
284
+ accuracyFeature.setId(GeolocationOverlayType.Accuracy);
285
+ accuracyFeature.setStyle(this.accuracyFeatureStyle);
286
+ this.geolocationOverlay.addOlFeature(accuracyFeature, motion);
287
+ }
288
+ if (this.buffer) {
289
+ const bufferFeature = new olFeature(new OlCircle(position.position, this.buffer.bufferRadius));
290
+ const bufferStyle = new olstyle.Style({
291
+ stroke: new olstyle.Stroke({ width: 2, color: this.buffer.bufferStroke }),
292
+ fill: new olstyle.Fill({ color: this.buffer.bufferFill }),
293
+ text: new olstyle.Text({
294
+ textAlign: 'left',
295
+ offsetX: 10,
296
+ offsetY: -10,
297
+ font: '12px Calibri,sans-serif',
298
+ text: this.buffer.showBufferRadius ? `${this.buffer.bufferRadius}m` : '',
299
+ fill: new olstyle.Fill({ color: '#000' }),
300
+ stroke: new olstyle.Stroke({ color: '#fff', width: 3 })
301
+ })
302
+ });
303
+ bufferFeature.setId(GeolocationOverlayType.Buffer);
304
+ bufferFeature.setStyle(bufferStyle);
305
+ this.geolocationOverlay.addOlFeature(bufferFeature, motion);
306
+ }
307
+ }
308
+ }
309
+ }
310
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbG9jYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9tYXAvc2hhcmVkL2NvbnRyb2xsZXJzL2dlb2xvY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sYUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUcvRCxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsS0FBSyxFQUFXLE1BQU0sU0FBUyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxPQUFPLEtBQUssT0FBTyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBR3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQTJCM0MsSUFBSyxzQkFJSjtBQUpELFdBQUssc0JBQXNCO0lBQ3pCLCtDQUFxQixDQUFBO0lBQ3JCLCtDQUFxQixDQUFBO0lBQ3JCLDJDQUFnQixDQUFBO0FBQ2xCLENBQUMsRUFKSSxzQkFBc0IsS0FBdEIsc0JBQXNCLFFBSTFCO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsYUFBYTtJQXFJekQsWUFDVSxHQUFXLEVBQ1gsT0FBeUMsRUFDekMsY0FBK0IsRUFDL0IsYUFBNkI7UUFDckMsS0FBSyxFQUFFLENBQUM7UUFKQSxRQUFHLEdBQUgsR0FBRyxDQUFRO1FBQ1gsWUFBTyxHQUFQLE9BQU8s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QUFFLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUN6RCxJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUNyQixTQUFTLEVBQUUsTUFBTTt3QkFDakIsT0FBTyxFQUFFLEVBQUU7d0JBQ1gsT0FBTyxFQUFFLENBQUMsRUFBRTt3QkFDWixJQUFJLEVBQUUseUJBQXlCO3dCQUMvQixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUN4RSxJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO3dCQUN6QyxNQUFNLEVBQUUsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7cUJBQ3hELENBQUM7aUJBQ0gsQ0FBQyxDQUFDO2dCQUNILGFBQWEsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ25ELGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQzdEO1NBRUY7SUFFSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT2xNYXAgZnJvbSAnb2wvTWFwJztcbmltcG9ydCBvbEdlb2xvY2F0aW9uIGZyb20gJ29sL0dlb2xvY2F0aW9uJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgaW50ZXJ2YWwsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgKiBhcyBvbHByb2ogZnJvbSAnb2wvcHJvaic7XG5pbXBvcnQgb2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xuaW1wb3J0IHsgTWFwQ29udHJvbGxlciB9IGZyb20gJy4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBQb2ludCwgUG9seWdvbiB9IGZyb20gJ29sL2dlb20nO1xuaW1wb3J0IHsgZnJvbUNpcmNsZSB9IGZyb20gJ29sL2dlb20vUG9seWdvbic7XG5pbXBvcnQgT2xDaXJjbGUgZnJvbSAnb2wvZ2VvbS9DaXJjbGUnO1xuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vbWFwJztcbmltcG9ydCAqIGFzIG9sc3R5bGUgZnJvbSAnb2wvc3R5bGUnO1xuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJy4uLy4uLy4uL292ZXJsYXkvc2hhcmVkL292ZXJsYXknO1xuaW1wb3J0IHsgRmVhdHVyZU1vdGlvbiB9IGZyb20gJy4uLy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUuZW51bXMnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UsIENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcbmltcG9ydCB7IE1hcFZpZXdPcHRpb25zIH0gZnJvbSAnLi4vbWFwLmludGVyZmFjZSc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5leHBvcnQgaW50ZXJmYWNlIE1hcEdlb2xvY2F0aW9uQ29udHJvbGxlck9wdGlvbnMge1xuICAvLyAgdG9kbyBrZWVwUG9zaXRpb25IaXN0b3J5PzogYm9vbGVhbjtcbiAgcHJvamVjdGlvbjogb2xwcm9qLlByb2plY3Rpb25MaWtlXG4gIGFjY3VyYWN5VGhyZXNob2xkPzogbnVtYmVyO1xuICBmb2xsb3dQb3NpdGlvbj86IGJvb2xlYW47XG4gIGJ1ZmZlcj86IEdlb2xvY2F0aW9uQnVmZmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBNYXBHZW9sb2NhdGlvblN0YXRlIHtcbiAgcG9zaXRpb246IG51bWJlcltdO1xuICBwcm9qZWN0aW9uOiBzdHJpbmc7XG4gIGFjY3VyYWN5OiBudW1iZXI7XG4gIGFsdGl0dWRlOiBudW1iZXI7XG4gIGFsdGl0dWRlQWNjdXJhY3k6IG51bWJlcjtcbiAgaGVhZGluZzogbnVtYmVyO1xuICBzcGVlZDogbnVtYmVyO1xuICBlbmFibGVIaWdoQWNjdXJhY3k6IGJvb2xlYW47XG4gIHRpbWVzdGFtcDogRGF0ZTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgR2VvbG9jYXRpb25CdWZmZXIge1xuICBidWZmZXJSYWRpdXM/OiBudW1iZXI7XG4gIGJ1ZmZlclN0cm9rZT86IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBidWZmZXJGaWxsPzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIHNob3dCdWZmZXJSYWRpdXM/OiBib29sZWFuO1xufVxuXG5cbmVudW0gR2VvbG9jYXRpb25PdmVybGF5VHlwZSB7XG4gIFBvc2l0aW9uID0gJ3Bvc2l0aW9uJyxcbiAgQWNjdXJhY3kgPSAnYWNjdXJhY3knLFxuICBCdWZmZXI9ICdidWZmZXInXG59XG5cbi8qKlxuICogQ29udHJvbGxlciB0byBoYW5kbGUgbWFwIHZpZXcgaW50ZXJhY3Rpb25zXG4gKi9cbmV4cG9ydCBjbGFzcyBNYXBHZW9sb2NhdGlvbkNvbnRyb2xsZXIgZXh0ZW5kcyBNYXBDb250cm9sbGVyIHtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnMkJDogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBnZW9sb2NhdGlvbk92ZXJsYXk6IE92ZXJsYXk7XG4gIHByaXZhdGUgcG9zaXRpb25GZWF0dXJlU3R5bGU6IG9sc3R5bGUuU3R5bGUgfCBvbHN0eWxlLlN0eWxlW10gPSBuZXcgb2xzdHlsZS5TdHlsZSh7XG4gICAgaW1hZ2U6IG5ldyBvbHN0eWxlLkNpcmNsZSh7XG4gICAgICByYWRpdXM6IDYsXG4gICAgICBmaWxsOiBuZXcgb2xzdHlsZS5GaWxsKHtcbiAgICAgICAgY29sb3I6ICcjMzM5OUNDJyxcbiAgICAgIH0pLFxuICAgICAgc3Ryb2tlOiBuZXcgb2xzdHlsZS5TdHJva2Uoe1xuICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICB3aWR0aDogMixcbiAgICAgIH0pLFxuICAgIH0pLFxuICB9KVxuICBwcml2YXRlIGFjY3VyYWN5RmVhdHVyZVN0eWxlOiBvbHN0eWxlLlN0eWxlIHwgb2xzdHlsZS5TdHlsZVtdID0gbmV3IG9sc3R5bGUuU3R5bGUoe1xuICAgIHN0cm9rZTogbmV3IG9sc3R5bGUuU3Ryb2tlKHtcbiAgICAgIGNvbG9yOiAncmdiYSgxMjAsIDEyMCwgMTIwLCAwLjQpJyxcbiAgICAgIHdpZHRoOiAxLFxuICAgIH0pLFxuICAgIGZpbGw6IG5ldyBvbHN0eWxlLkZpbGwoe1xuICAgICAgY29sb3I6ICdyZ2JhKDEyMCwgMTIwLCAxMjAsIDAuNCknLFxuICAgIH0pLFxuICB9KVxuXG4gIHByaXZhdGUgZ2VvbG9jYXRpb246IG9sR2VvbG9jYXRpb247XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIGN1cnJlbnQgZW1pc3Npb24gaW50ZXJ2YWwgb2YgdGhlIHBvc2l0aW9uLiBJbiBzZWNvbmRzXG4gICAqL1xuICAgcHVibGljIHJlYWRvbmx5IGVtaXNzaW9uSW50ZXJ2YWxTZWNvbmRzJDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDUpO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcG9zaXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXBHZW9sb2NhdGlvblN0YXRlPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgdHJhY2tpbmcgc3RhdGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0cmFja2luZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIG9mIHRoZSBmb2xsb3cgcG9zaXRpb24gc3RhdGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmb2xsb3dQb3NpdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHVuZGVmaW5lZCk7XG5cblxuICAvKipcbiAgICogSGlzdG9yeSBvZiBwb3NpdGlvbnNcbiAgICovXG4gIC8vIHByaXZhdGUgcG9zaXRpb25zOiBNYXBHZW9sb2NhdGlvblN0YXRlW10gPSBbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZ2VvbG9jYXRlIGNvbnRyb2xsZXIgc2hvdWxkIGtlZXAgdGhlIHBvc2l0aW9uIGhpc3RvcnlcbiAgICovXG4gIC8qXG4gIC8vIHRvZG86IHJlZmluZSB0aGlzIG1ldGhvZFxuICBzZXQga2VlcFBvc2l0aW9uSGlzdG9yeSh2YWx1ZSkge1xuICAgIHRoaXMuX2tlZXBQb3NpdGlvbkhpc3RvcnkgPSB2YWx1ZTtcbiAgfVxuICBnZXQga2VlcFBvc2l0aW9uSGlzdG9yeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fa2VlcFBvc2l0aW9uSGlzdG9yeTtcbiAgfVxuICBwcml2YXRlIF9rZWVwUG9zaXRpb25IaXN0b3J5OiBib29sZWFuID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5rZWVwUG9zaXRpb25IaXN0b3J5ID8gdGhpcy5vcHRpb25zLmtlZXBQb3NpdGlvbkhpc3RvcnkgOiB0cnVlO1xuKi9cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGdlb2xvY2F0ZSBzaG91bGQgc2hvdyBhIGJ1ZmZlciBhcm91bmQgdGhlIGN1cnJlbnQgcG9zaXRpb25cbiAgICovXG4gICBzZXQgYnVmZmVyKHZhbHVlOiBHZW9sb2NhdGlvbkJ1ZmZlcikge1xuICAgIHRoaXMuX2J1ZmZlciA9IHZhbHVlO1xuICAgIHRoaXMuaGFuZGxlRmVhdHVyZUNyZWF0aW9uKHRoaXMucG9zaXRpb24kLnZhbHVlKTtcbiAgfVxuICAgZ2V0IGJ1ZmZlcigpOiBHZW9sb2NhdGlvbkJ1ZmZlciB7XG4gICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcbiAgfVxuICBwcml2YXRlIF9idWZmZXI6IEdlb2xvY2F0aW9uQnVmZmVyID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5idWZmZXIgPyB0aGlzLm9wdGlvbnMuYnVmZmVyIDogdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBnZW9sb2NhdGUgY29udHJvbGxlciBhY2N1cmFjeSB0aHJlc2hvbGQgdG8gc3RvcmUvc2hvdyB0aGUgcG9zaXRpb24uXG4gICAqL1xuICBzZXQgYWNjdXJhY3lUaHJlc2hvbGQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2FjY3VyYWN5VGhyZXNob2xkID0gdmFsdWU7XG4gICAgdGhpcy5oYW5kbGVGZWF0dXJlQ3JlYXRpb24odGhpcy5wb3NpdGlvbiQudmFsdWUpO1xuICB9XG5cbiAgZ2V0IGFjY3VyYWN5VGhyZXNob2xkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjY3VyYWN5VGhyZXNob2xkO1xuICB9XG4gIHByaXZhdGUgX2FjY3VyYWN5VGhyZXNob2xkID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5hY2N1cmFjeVRocmVzaG9sZCA/IHRoaXMub3B0aW9ucy5hY2N1cmFjeVRocmVzaG9sZCA6IDUwMDA7XG5cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYWN0aXZhdGUgdGhlIGdlb2xvY2F0aW9uLlxuICAgKi9cbiAgZ2V0IHRyYWNraW5nKCkge1xuICAgIHJldHVybiB0aGlzLmdlb2xvY2F0aW9uLmdldFRyYWNraW5nKCk7XG4gIH1cblxuICBzZXQgdHJhY2tpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmdlb2xvY2F0aW9uLnNldFRyYWNraW5nKHZhbHVlIHx8IGZhbHNlKTtcbiAgICB0aGlzLnRyYWNraW5nJC5uZXh0KHZhbHVlKTtcbiAgICBpZiAodGhpcy5zdG9yYWdlU2VydmljZSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldCgnZ2VvbG9jYXRpb24udHJhY2tpbmcnLCB2YWx1ZSk7XG4gICAgfVxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMucG9zaXRpb24kLm5leHQodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICAgIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhY3RpdmF0ZSB0aGUgdmlldyB0cmFja2luZyBvZiB0aGUgY3VycmVudCBwb3NpdGlvblxuICAgKi9cbiAgc2V0IGZvbGxvd1Bvc2l0aW9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZm9sbG93UG9zaXRpb24gPSB2YWx1ZTtcbiAgICB0aGlzLmZvbGxvd1Bvc2l0aW9uJC5uZXh0KHZhbHVlKTtcbiAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlPy5nZXRDb25maWcoJ2dlb2xvY2F0ZS5mb2xsb3dQb3NpdGlvbicpID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5fZm9sbG93UG9zaXRpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuZm9sbG93UG9zaXRpb24kLm5leHQoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZUZlYXR1cmVDcmVhdGlvbih0aGlzLnBvc2l0aW9uJC52YWx1ZSk7XG4gICAgaWYgKHRoaXMuc3RvcmFnZVNlcnZpY2UgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoJ2dlb2xvY2F0aW9uLmZvbGxvd1Bvc2l0aW9uJywgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmb2xsb3dQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9sbG93UG9zaXRpb247XG4gIH1cblxuXG4gIHByaXZhdGUgX2ZvbGxvd1Bvc2l0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5mb2xsb3dQb3NpdGlvbiA/IHRoaXMub3B0aW9ucy5mb2xsb3dQb3NpdGlvbiA6IGZhbHNlO1xuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtYXA6IElnb01hcCxcbiAgICBwcml2YXRlIG9wdGlvbnM/OiBNYXBHZW9sb2NhdGlvbkNvbnRyb2xsZXJPcHRpb25zLFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U/OiBTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U/OiBDb25maWdTZXJ2aWNlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmdlb2xvY2F0aW9uT3ZlcmxheSA9IG5ldyBPdmVybGF5KHRoaXMubWFwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgb3IgcmVtb3ZlIHRoaXMgY29udHJvbGxlciB0by9mcm9tIGEgbWFwLlxuICAgKiBAcGFyYW0gbWFwIE9MIE1hcFxuICAgKi9cbiAgc2V0T2xNYXAob2xNYXA6IE9sTWFwIHwgdW5kZWZpbmVkKSB7XG4gICAgc3VwZXIuc2V0T2xNYXAob2xNYXApO1xuICAgIHRoaXMuc2V0dXBPYnNlcnZlcnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlR2VvbG9jYXRpb25GZWF0dXJlcygpIHtcbiAgICB0aGlzLmRlbGV0ZUZlYXR1cmVCeVR5cGUoR2VvbG9jYXRpb25PdmVybGF5VHlwZS5Qb3NpdGlvbik7XG4gICAgdGhpcy5kZWxldGVGZWF0dXJlQnlUeXBlKEdlb2xvY2F0aW9uT3ZlcmxheVR5cGUuQWNjdXJhY3kpO1xuICAgIHRoaXMuZGVsZXRlRmVhdHVyZUJ5VHlwZShHZW9sb2NhdGlvbk92ZXJsYXlUeXBlLkJ1ZmZlcik7XG4gIH1cblxuICBzZXR1cE9ic2VydmVycygpIHtcbiAgICB0aGlzLnRyYWNraW5nJC5zdWJzY3JpYmUodHJhY2tpbmcgPT4ge1xuICAgICAgaWYgKHRyYWNraW5nKSB7XG4gICAgICAgIHRoaXMub25Qb3NpdGlvbkNoYW5nZSh0cnVlLCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGVsZXRlR2VvbG9jYXRpb25GZWF0dXJlcygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5nZW9sb2NhdGlvbiA9IG5ldyBvbEdlb2xvY2F0aW9uKHtcbiAgICAgIC8vIGVuYWJsZUhpZ2hBY2N1cmFjeSBtdXN0IGJlIHNldCB0byB0cnVlIHRvIGhhdmUgdGhlIGhlYWRpbmcgdmFsdWUuXG4gICAgICB0cmFja2luZ09wdGlvbnM6IHtcbiAgICAgICAgZW5hYmxlSGlnaEFjY3VyYWN5OiB0cnVlLFxuICAgICAgICBtYXhpbXVtQWdlOiAxMDAwMCxcbiAgICAgICAgdGltZW91dDogNjAwMDAwXG4gICAgICB9LFxuICAgICAgcHJvamVjdGlvbjogdGhpcy5vcHRpb25zLnByb2plY3Rpb24sXG4gICAgfSk7XG4gICAgbGV0IHRyYWNraW5nID0gZmFsc2U7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zJCQucHVzaCh0aGlzLmVtaXNzaW9uSW50ZXJ2YWxTZWNvbmRzJFxuICAgICAgLnBpcGUoc3dpdGNoTWFwKHZhbHVlID0+IGludGVydmFsKHZhbHVlICogMTAwMCkpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0cmFja2luZyA9PT0gdGhpcy50cmFja2luZykge1xuICAgICAgICAgIHRoaXMub25Qb3NpdGlvbkNoYW5nZSh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cmFja2luZyA9IHRoaXMudHJhY2tpbmc7XG4gICAgICAgICAgdGhpcy5vblBvc2l0aW9uQ2hhbmdlKHRydWUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlR2VvbG9jYXRpb25PcHRpb25zKG9wdGlvbnM6IE1hcFZpZXdPcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7IHJldHVybjt9XG4gICAgLy8gdG9kbyBtYXliZSBhIGRlZGljYXRlZCBpbnRlcmZhY2UgZm9yIGdlb2xvY2F0aW9uIHNob3VsZCBiZSBkZWZpbmVkIGluc3RlYWQgb2YgcHV0dGluZyB0aGVzZSBpbnNpZGUgdGhlIG1hcHZpZXdvcHRpb25zP1xuICAgIGxldCB0cmFja2luZyA9IG9wdGlvbnMuZ2VvbG9jYXRlO1xuICAgIGxldCBmb2xsb3dQb3NpdGlvbiA9IG9wdGlvbnMuYWx3YXlzVHJhY2tpbmc7XG4gICAgaWYgKHRoaXMuc3RvcmFnZVNlcnZpY2UpIHtcbiAgICAgIGNvbnN0IHN0b3JlZFRyYWNraW5nID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXQoJ2dlb2xvY2F0aW9uLnRyYWNraW5nJykgYXMgYm9vbGVhbjtcbiAgICAgIGlmIChzdG9yZWRUcmFja2luZyAhPT0gbnVsbCAmJiBzdG9yZWRUcmFja2luZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRyYWNraW5nID0gc3RvcmVkVHJhY2tpbmc7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0b3JlZEZvbGxvd1Bvc2l0aW9uID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXQoJ2dlb2xvY2F0aW9uLmZvbGxvd1Bvc2l0aW9uJykgYXMgYm9vbGVhbjtcbiAgICAgIGlmIChzdG9yZWRGb2xsb3dQb3NpdGlvbiAhPT0gbnVsbCAmJiBzdG9yZWRGb2xsb3dQb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvbGxvd1Bvc2l0aW9uID0gc3RvcmVkRm9sbG93UG9zaXRpb247XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudHJhY2tpbmcgPSB0cmFja2luZztcbiAgICB0aGlzLmZvbGxvd1Bvc2l0aW9uID0gZm9sbG93UG9zaXRpb247XG4gICAgdGhpcy5idWZmZXIgPSBvcHRpb25zLmJ1ZmZlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZWFyZG93biBhbnkgb2JzZXJ2ZXJzXG4gICAqL1xuICB0ZWFyZG93bk9ic2VydmVycygpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zJCQubGVuZ3RoKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5tYXAocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cbiAgICBzdXBlci50ZWFyZG93bk9ic2VydmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBwb3NpdGlvbiAgaGlzdG9yeVxuICAgKi9cbiAgLypcbiAgLy8gdG9kb1xuICBjbGVhclBvc2l0aW9uc0hpc3RvcnkoKSB7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBbXTtcbiAgfSovXG5cbiAgLyoqXG4gICAqIE9uIHBvc2l0aW9uIGNoYW5nZSwgZ2V0IHRoZSBwb3NpdGlvbiwgc2hvdyBpdCBvbiB0aGUgbWFwIGFuZCByZWNvcmQgaXQuXG4gICAqIEBwYXJhbSBlbWl0RXZlbnQgTWFwIGV2ZW50XG4gICAqL1xuICBwcml2YXRlIG9uUG9zaXRpb25DaGFuZ2UoZW1pdEV2ZW50OiBib29sZWFuID0gZmFsc2UsIHpvb21UbzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLnRyYWNraW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGdlb2xvY2F0ZVByb3BlcnRpZXMgPSB0aGlzLmdlb2xvY2F0aW9uLmdldFByb3BlcnRpZXMoKTtcblxuICAgIGlmIChnZW9sb2NhdGVQcm9wZXJ0aWVzLmFjY3VyYWN5ID4gdGhpcy5hY2N1cmFjeVRocmVzaG9sZCkge1xuICAgICAgY29uc29sZS53YXJuKCdQb29yIGdlb2xvY2F0aW9uIGFjY3VyYWN5LiBObyBwb3NpdGlvbiBhcmUgc3RvcmVkL3Nob3duJyk7XG4gICAgICB0aGlzLnBvc2l0aW9uJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcG9zaXRpb246IE1hcEdlb2xvY2F0aW9uU3RhdGUgPSB7XG4gICAgICBwb3NpdGlvbjogZ2VvbG9jYXRlUHJvcGVydGllcy5wb3NpdGlvbixcbiAgICAgIHByb2plY3Rpb246IHRoaXMuZ2VvbG9jYXRpb24uZ2V0UHJvamVjdGlvbigpLmdldENvZGUoKSxcbiAgICAgIGFjY3VyYWN5OiBnZW9sb2NhdGVQcm9wZXJ0aWVzLmFjY3VyYWN5LFxuICAgICAgYWx0aXR1ZGU6IGdlb2xvY2F0ZVByb3BlcnRpZXMuYWx0aXR1ZGUsXG4gICAgICBhbHRpdHVkZUFjY3VyYWN5OiBnZW9sb2NhdGVQcm9wZXJ0aWVzLmFsdGl0dWRlQWNjdXJhY3ksXG4gICAgICBoZWFkaW5nOiBnZW9sb2NhdGVQcm9wZXJ0aWVzLmhlYWRpbmcsXG4gICAgICBzcGVlZDogZ2VvbG9jYXRlUHJvcGVydGllcy5zcGVlZCxcbiAgICAgIGVuYWJsZUhpZ2hBY2N1cmFjeTogZ2VvbG9jYXRlUHJvcGVydGllcy50cmFja2luZ09wdGlvbnM/LmVuYWJsZUhpZ2hBY2N1cmFjeSA/IHRydWUgOiBmYWxzZSxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKVxuICAgIH07XG4gICAgdGhpcy5oYW5kbGVGZWF0dXJlQ3JlYXRpb24ocG9zaXRpb24sIHpvb21Ubyk7XG4gICAgaWYgKGVtaXRFdmVudCkge1xuICAgICAgdGhpcy5wb3NpdGlvbiQubmV4dChwb3NpdGlvbik7XG4gICAgICAvKmlmICh0aGlzLmtlZXBQb3NpdGlvbkhpc3RvcnkgPT09IHRydWUpIHtcbiAgICAgICAgLy8gaGFuZGxlIHBvc2l0aW9uIGRpZmYgdG8gc3RvcmUgb25seSB0cnVlIGRpZmY7XG4gICAgICAgIHRoaXMucG9zaXRpb25zLnB1c2gocG9zaXRpb24pO1xuICAgICAgfSovXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVGZWF0dXJlQnlUeXBlKHR5cGU6IEdlb2xvY2F0aW9uT3ZlcmxheVR5cGUpIHtcbiAgICBjb25zdCBmZWF0dXJlQnlJZCA9IHRoaXMuZ2VvbG9jYXRpb25PdmVybGF5LmRhdGFTb3VyY2Uub2wuZ2V0RmVhdHVyZUJ5SWQodHlwZSk7XG4gICAgaWYgKGZlYXR1cmVCeUlkKSB7XG4gICAgICB0aGlzLmdlb2xvY2F0aW9uT3ZlcmxheS5kYXRhU291cmNlLm9sLnJlbW92ZUZlYXR1cmUoZmVhdHVyZUJ5SWQpO1xuICAgIH1cblxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGZWF0dXJlQ3JlYXRpb24ocG9zaXRpb246IE1hcEdlb2xvY2F0aW9uU3RhdGUsIHpvb21UbzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKCFwb3NpdGlvbiB8fCAhcG9zaXRpb24ucG9zaXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kZWxldGVHZW9sb2NhdGlvbkZlYXR1cmVzKCk7XG4gICAgY29uc3QgcG9zaXRpb25HZW9tZXRyeSA9IG5ldyBQb2ludChwb3NpdGlvbi5wb3NpdGlvbik7XG4gICAgY29uc3QgYWNjdXJhY3lHZW9tZXRyeSA9IGZyb21DaXJjbGUobmV3IE9sQ2lyY2xlKHBvc2l0aW9uLnBvc2l0aW9uLCBwb3NpdGlvbi5hY2N1cmFjeSB8fCAwKSk7XG5cbiAgICBjb25zdCBwb3NpdGlvbkZlYXR1cmUgPSBuZXcgb2xGZWF0dXJlPFBvaW50Pih7IGdlb21ldHJ5OiBwb3NpdGlvbkdlb21ldHJ5IH0pO1xuICAgIGNvbnN0IGFjY3VyYWN5RmVhdHVyZSA9IG5ldyBvbEZlYXR1cmU8UG9seWdvbj4oeyBnZW9tZXRyeTogYWNjdXJhY3lHZW9tZXRyeSB9KTtcblxuICAgIGlmIChwb3NpdGlvbkdlb21ldHJ5KSB7XG4gICAgICBsZXQgbW90aW9uID0gdGhpcy5mb2xsb3dQb3NpdGlvbiA/IEZlYXR1cmVNb3Rpb24uTW92ZSA6IEZlYXR1cmVNb3Rpb24uTm9uZTtcbiAgICAgIGlmICh6b29tVG8pIHtcbiAgICAgICAgbW90aW9uID0gRmVhdHVyZU1vdGlvbi5ab29tO1xuICAgICAgfVxuICAgICAgcG9zaXRpb25GZWF0dXJlLnNldElkKEdlb2xvY2F0aW9uT3ZlcmxheVR5cGUuUG9zaXRpb24pO1xuICAgICAgcG9zaXRpb25GZWF0dXJlLnNldFN0eWxlKHRoaXMucG9zaXRpb25GZWF0dXJlU3R5bGUpO1xuICAgICAgdGhpcy5nZW9sb2NhdGlvbk92ZXJsYXkuYWRkT2xGZWF0dXJlKHBvc2l0aW9uRmVhdHVyZSwgbW90aW9uKTtcbiAgICAgIGlmIChhY2N1cmFjeUdlb21ldHJ5KSB7XG4gICAgICAgIGFjY3VyYWN5RmVhdHVyZS5zZXRJZChHZW9sb2NhdGlvbk92ZXJsYXlUeXBlLkFjY3VyYWN5KTtcbiAgICAgICAgYWNjdXJhY3lGZWF0dXJlLnNldFN0eWxlKHRoaXMuYWNjdXJhY3lGZWF0dXJlU3R5bGUpO1xuICAgICAgICB0aGlzLmdlb2xvY2F0aW9uT3ZlcmxheS5hZGRPbEZlYXR1cmUoYWNjdXJhY3lGZWF0dXJlLCBtb3Rpb24pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlckZlYXR1cmUgPSBuZXcgb2xGZWF0dXJlKG5ldyBPbENpcmNsZShwb3NpdGlvbi5wb3NpdGlvbiwgdGhpcy5idWZmZXIuYnVmZmVyUmFkaXVzKSk7XG4gICAgICAgIGNvbnN0IGJ1ZmZlclN0eWxlID0gbmV3IG9sc3R5bGUuU3R5bGUoe1xuICAgICAgICAgIHN0cm9rZTogbmV3IG9sc3R5bGUuU3Ryb2tlKHsgd2lkdGg6IDIsIGNvbG9yOiB0aGlzLmJ1ZmZlci5idWZmZXJTdHJva2UgfSksXG4gICAgICAgICAgZmlsbDogbmV3IG9sc3R5bGUuRmlsbCh7IGNvbG9yOiB0aGlzLmJ1ZmZlci5idWZmZXJGaWxsIH0pLFxuICAgICAgICAgIHRleHQ6IG5ldyBvbHN0eWxlLlRleHQoe1xuICAgICAgICAgICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgICAgICAgICBvZmZzZXRYOiAxMCxcbiAgICAgICAgICAgIG9mZnNldFk6IC0xMCxcbiAgICAgICAgICAgIGZvbnQ6ICcxMnB4IENhbGlicmksc2Fucy1zZXJpZicsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLmJ1ZmZlci5zaG93QnVmZmVyUmFkaXVzID8gYCR7dGhpcy5idWZmZXIuYnVmZmVyUmFkaXVzfW1gIDogJycsXG4gICAgICAgICAgICBmaWxsOiBuZXcgb2xzdHlsZS5GaWxsKHsgY29sb3I6ICcjMDAwJyB9KSxcbiAgICAgICAgICAgIHN0cm9rZTogbmV3IG9sc3R5bGUuU3Ryb2tlKHsgY29sb3I6ICcjZmZmJywgd2lkdGg6IDMgfSlcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgICAgYnVmZmVyRmVhdHVyZS5zZXRJZChHZW9sb2NhdGlvbk92ZXJsYXlUeXBlLkJ1ZmZlcik7XG4gICAgICAgIGJ1ZmZlckZlYXR1cmUuc2V0U3R5bGUoYnVmZmVyU3R5bGUpO1xuICAgICAgICB0aGlzLmdlb2xvY2F0aW9uT3ZlcmxheS5hZGRPbEZlYXR1cmUoYnVmZmVyRmVhdHVyZSwgbW90aW9uKTtcbiAgICAgIH1cblxuICAgIH1cblxuICB9XG59XG4iXX0=
@@ -1,3 +1,4 @@
1
1
  export * from './controller';
2
+ export * from './geolocation';
2
3
  export * from './view';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9tYXAvc2hhcmVkL2NvbnRyb2xsZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jb250cm9sbGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi92aWV3JztcclxuIl19
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9tYXAvc2hhcmVkL2NvbnRyb2xsZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jb250cm9sbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vZ2VvbG9jYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi92aWV3JztcbiJdfQ==
@@ -22,6 +22,7 @@ export class MapViewController extends MapController {
22
22
  this.state$ = new BehaviorSubject(undefined);
23
23
  /**
24
24
  * View Padding
25
+ * Values in the array are top, right, bottom and left padding.
25
26
  */
26
27
  this.padding = [0, 0, 0, 0];
27
28
  /**
@@ -53,6 +54,21 @@ export class MapViewController extends MapController {
53
54
  get olView() {
54
55
  return this.olMap.getView();
55
56
  }
57
+ setPadding(padding) {
58
+ // Values in the array are top, right, bottom and left padding.
59
+ if (padding.top || padding.top === 0) {
60
+ this.padding[0] = padding.top;
61
+ }
62
+ if (padding.right || padding.right === 0) {
63
+ this.padding[1] = padding.right;
64
+ }
65
+ if (padding.bottom || padding.bottom === 0) {
66
+ this.padding[2] = padding.bottom;
67
+ }
68
+ if (padding.left || padding.left === 0) {
69
+ this.padding[3] = padding.left;
70
+ }
71
+ }
56
72
  /**
57
73
  * Add or remove this controller to/from a map.
58
74
  * @param map OL Map
@@ -323,4 +339,4 @@ export class MapViewController extends MapController {
323
339
  this.state$.next(state);
324
340
  }
325
341
  }
326
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL21hcC9zaGFyZWQvY29udHJvbGxlcnMvdmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBSWxDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFPN0M7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsYUFBYTtJQTREbEQsWUFBb0IsT0FBa0M7UUFDcEQsS0FBSyxFQUFFLENBQUM7UUFEVSxZQUFPLEdBQVAsT0FBTyxDQUEyQjtRQTNEdEQ7O1dBRUc7UUFDSCxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFTLFNBQVMsQ0FBQyxDQUFDO1FBRXJEOztXQUVHO1FBQ0gsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFlLFNBQVMsQ0FBQyxDQUFDO1FBRXREOztXQUVHO1FBQ0gsWUFBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFdkI7O1dBRUc7UUFDSCxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQU9yQjs7V0FFRztRQUNLLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBZ0QsQ0FBQztRQU85RTs7V0FFRztRQUNLLFdBQU0sR0FBbUIsRUFBRSxDQUFDO1FBRXBDOztXQUVHO1FB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LENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzthQUMxQztTQUNGO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE9sTWFwIGZyb20gJ29sL01hcCc7XHJcbmltcG9ydCBPbE1hcEV2ZW50IGZyb20gJ29sL01hcEV2ZW50JztcclxuXHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCAqIGFzIG9sZWFzaW5nIGZyb20gJ29sL2Vhc2luZyc7XHJcbmltcG9ydCAqIGFzIG9scHJvaiBmcm9tICdvbC9wcm9qJztcclxuaW1wb3J0IE9sUHJvamVjdGlvbiBmcm9tICdvbC9wcm9qL1Byb2plY3Rpb24nO1xyXG5pbXBvcnQgT2xWaWV3IGZyb20gJ29sL1ZpZXcnO1xyXG5cclxuaW1wb3J0IHsgTWFwVmlld0FjdGlvbiB9IGZyb20gJy4uL21hcC5lbnVtcyc7XHJcbmltcG9ydCB7IE1hcEV4dGVudCwgTWFwVmlld1N0YXRlIH0gZnJvbSAnLi4vbWFwLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IGdldFNjYWxlRnJvbVJlc29sdXRpb24sIHZpZXdTdGF0ZXNBcmVFcXVhbCB9IGZyb20gJy4uL21hcC51dGlscyc7XHJcbmltcG9ydCB7IE1hcENvbnRyb2xsZXIgfSBmcm9tICcuL2NvbnRyb2xsZXInO1xyXG5pbXBvcnQgeyBFdmVudHNLZXkgfSBmcm9tICdvbC9ldmVudHMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNYXBWaWV3Q29udHJvbGxlck9wdGlvbnMge1xyXG4gIHN0YXRlSGlzdG9yeTogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnRyb2xsZXIgdG8gaGFuZGxlIG1hcCB2aWV3IGludGVyYWN0aW9uc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIE1hcFZpZXdDb250cm9sbGVyIGV4dGVuZHMgTWFwQ29udHJvbGxlciB7XHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgY3VycmVudCByZXNvbHV0aW9uXHJcbiAgICovXHJcbiAgcmVzb2x1dGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4odW5kZWZpbmVkKTtcclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgY3VycmVudCBzdGF0ZVxyXG4gICAqL1xyXG4gIHN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWFwVmlld1N0YXRlPih1bmRlZmluZWQpO1xyXG5cclxuICAvKipcclxuICAgKiBWaWV3IFBhZGRpbmdcclxuICAgKi9cclxuICBwYWRkaW5nID0gWzAsIDAsIDAsIDBdO1xyXG5cclxuICAvKipcclxuICAgKiBNYXggem9vbSBhZnRlciBzZXQgZXh0ZW50XHJcbiAgICovXHJcbiAgbWF4Wm9vbU9uRXh0ZW50ID0gMTk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1heCBleHRlbnQgcG9zc2libGUgd2hlbiB6b29taW5nXHJcbiAgICovXHJcbiAgbWF4TGF5ZXJab29tRXh0ZW50OiBNYXBFeHRlbnQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4dGVudCBzdHJlYW1cclxuICAgKi9cclxuICBwcml2YXRlIGV4dGVudCQgPSBuZXcgU3ViamVjdDx7IGV4dGVudDogTWFwRXh0ZW50OyBhY3Rpb246IE1hcFZpZXdBY3Rpb24gfT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2NyaXB0aW9uIHRvIHRoZSBtb3ZlbWVudCBzdHJlYW1cclxuICAgKi9cclxuICBwcml2YXRlIGV4dGVudCQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIEhpc3Rvcnkgb2Ygc3RhdGVzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdGF0ZXM6IE1hcFZpZXdTdGF0ZVtdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIEN1cnJlbnQgc3RhdGUgaW5kZXhcclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRlSW5kZXg6IG51bWJlciA9IDA7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIHZpZXcgY29udHJvbGxlciBzaG91bGQga2VlcCB0aGUgdmlldydzIHN0YXRlIGhpc3RvcnlcclxuICAgKi9cclxuICBnZXQgc3RhdGVIaXN0b3J5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucyA/IHRoaXMub3B0aW9ucy5zdGF0ZUhpc3RvcnkgPT09IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9MIFZpZXdcclxuICAgKi9cclxuICBnZXQgb2xWaWV3KCk6IE9sVmlldyB7XHJcbiAgICByZXR1cm4gdGhpcy5vbE1hcC5nZXRWaWV3KCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9wdGlvbnM/OiBNYXBWaWV3Q29udHJvbGxlck9wdGlvbnMpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgb3IgcmVtb3ZlIHRoaXMgY29udHJvbGxlciB0by9mcm9tIGEgbWFwLlxyXG4gICAqIEBwYXJhbSBtYXAgT0wgTWFwXHJcbiAgICovXHJcbiAgc2V0T2xNYXAob2xNYXA6IE9sTWFwIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBzdXBlci5zZXRPbE1hcChvbE1hcCk7XHJcbiAgICB0aGlzLnNldHVwT2JzZXJ2ZXJzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnNlcnZlIG1vdmUgbW92ZWVuZCBhbmQgc3Vic2NyaWJlIHRvIHRoZSBleHRlbnQgc3RyZWFtXHJcbiAgICovXHJcbiAgc2V0dXBPYnNlcnZlcnMoKSB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZUhpc3RvcnkgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5vYnNlcnZlcktleXMucHVzaChcclxuICAgICAgICB0aGlzLm9sTWFwLm9uKCdtb3ZlZW5kJywgKGV2ZW50OiBPbE1hcEV2ZW50KSA9PiB0aGlzLm9uTW92ZUVuZChldmVudCkpIGFzIEV2ZW50c0tleVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZXh0ZW50JCQgPSB0aGlzLmV4dGVudCRcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDI1KSlcclxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IHsgZXh0ZW50OiBNYXBFeHRlbnQ7IGFjdGlvbjogTWFwVmlld0FjdGlvbiB9KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRFeHRlbnQodmFsdWUuZXh0ZW50LCB2YWx1ZS5hY3Rpb24pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRlYXJkb3duIGFueSBvYnNlcnZlcnNcclxuICAgKi9cclxuICB0ZWFyZG93bk9ic2VydmVycygpIHtcclxuICAgIHN1cGVyLnRlYXJkb3duT2JzZXJ2ZXJzKCk7XHJcbiAgICBpZiAodGhpcy5leHRlbnQkJCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuZXh0ZW50JCQudW5zdWJzY3JpYmUoKTtcclxuICAgICAgdGhpcy5leHRlbnQkJCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgdmlldydzIE9MIHByb2plY3Rpb25cclxuICAgKiBAcmV0dXJucyBPTCBwcm9qZWN0aW9uXHJcbiAgICovXHJcbiAgZ2V0T2xQcm9qZWN0aW9uKCk6IE9sUHJvamVjdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5vbFZpZXcuZ2V0UHJvamVjdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBjdXJyZW50IG1hcCB2aWV3IGNlbnRlclxyXG4gICAqIEBwYXJhbSBwcm9qZWN0aW9uIE91dHB1dCBwcm9qZWN0aW9uXHJcbiAgICogQHJldHVybnMgQ2VudGVyXHJcbiAgICovXHJcbiAgZ2V0Q2VudGVyKHByb2plY3Rpb24/OiBzdHJpbmcgfCBPbFByb2plY3Rpb24pOiBbbnVtYmVyLCBudW1iZXJdIHtcclxuICAgIGxldCBjZW50ZXIgPSB0aGlzLm9sVmlldy5nZXRDZW50ZXIoKSBhcyBbbnVtYmVyLCBudW1iZXJdO1xyXG4gICAgaWYgKHByb2plY3Rpb24gJiYgY2VudGVyKSB7XHJcbiAgICAgIGNlbnRlciA9IG9scHJvai50cmFuc2Zvcm0oY2VudGVyLCB0aGlzLmdldE9sUHJvamVjdGlvbigpLCBwcm9qZWN0aW9uKSBhcyBbbnVtYmVyLCBudW1iZXJdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNlbnRlcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgY3VycmVudCB2aWV3IGV4dGVudFxyXG4gICAqIEBwYXJhbSBwcm9qZWN0aW9uIE91dHB1dCBwcm9qZWN0aW9uXHJcbiAgICogQHJldHVybnMgRXh0ZW50XHJcbiAgICovXHJcbiAgZ2V0RXh0ZW50KHByb2plY3Rpb24/OiBzdHJpbmcgfCBPbFByb2plY3Rpb24pOiBNYXBFeHRlbnQge1xyXG4gICAgbGV0IGV4dGVudCA9IHRoaXMub2xWaWV3LmNhbGN1bGF0ZUV4dGVudCh0aGlzLm9sTWFwLmdldFNpemUoKSk7XHJcbiAgICBpZiAocHJvamVjdGlvbiAmJiBleHRlbnQpIHtcclxuICAgICAgZXh0ZW50ID0gb2xwcm9qLnRyYW5zZm9ybUV4dGVudChcclxuICAgICAgICBleHRlbnQsXHJcbiAgICAgICAgdGhpcy5nZXRPbFByb2plY3Rpb24oKSxcclxuICAgICAgICBwcm9qZWN0aW9uXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXh0ZW50IGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBjdXJyZW50IHNjYWxlXHJcbiAgICogQHBhcmFtIGRwaSBEb3QgcGVyIGluY2hlc1xyXG4gICAqIEByZXR1cm5zIFZpZXcgc2NhbGVcclxuICAgKi9cclxuICBnZXRTY2FsZShkcGkgPSA5Nikge1xyXG4gICAgcmV0dXJuIGdldFNjYWxlRnJvbVJlc29sdXRpb24oXHJcbiAgICAgIHRoaXMuZ2V0UmVzb2x1dGlvbigpLFxyXG4gICAgICB0aGlzLmdldE9sUHJvamVjdGlvbigpLmdldFVuaXRzKCksXHJcbiAgICAgIGRwaVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgY3VycmVudCByZXNvbHV0aW9uXHJcbiAgICogQHJldHVybnMgUHJvamVjdGlvbiBkZW5vbWluYXRvclxyXG4gICAqL1xyXG4gIGdldFJlc29sdXRpb24oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLm9sVmlldy5nZXRSZXNvbHV0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGN1cnJlbnQgem9vbSBsZXZlbFxyXG4gICAqIEByZXR1cm5zIFpvb20gbGV2ZWxcclxuICAgKi9cclxuICBnZXRab29tKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLm9sVmlldy5nZXRab29tKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogWm9vbSBpblxyXG4gICAqL1xyXG4gIHpvb21JbigpIHtcclxuICAgIHRoaXMuem9vbVRvKHRoaXMub2xWaWV3LmdldFpvb20oKSArIDEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogWm9vbSBvdXRcclxuICAgKi9cclxuICB6b29tT3V0KCkge1xyXG4gICAgdGhpcy56b29tVG8odGhpcy5vbFZpZXcuZ2V0Wm9vbSgpIC0gMSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBab29tIHRvIHNwZWNpZmljIHpvb20gbGV2ZWxcclxuICAgKiBAcGFyYW0gem9vbSBab29tIGxldmVsXHJcbiAgICovXHJcbiAgem9vbVRvKHpvb206IG51bWJlcikge1xyXG4gICAgdGhpcy5vbFZpZXcuY2FuY2VsQW5pbWF0aW9ucygpO1xyXG4gICAgdGhpcy5vbFZpZXcuYW5pbWF0ZSh7XHJcbiAgICAgIHpvb20sXHJcbiAgICAgIGR1cmF0aW9uOiAyNTAsXHJcbiAgICAgIGVhc2luZzogb2xlYXNpbmcuZWFzZU91dFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNb3ZlIHRvIGV4dGVudCBhZnRlciBhIHNob3J0IGRlbGF5ICgxMDBtcykgdW5sZXNzXHJcbiAgICogYSBuZXcgbW92ZW1lbnQgZ2V0cyByZWdpc3RlcmVkIGluIHRoZSBtZWFudGltZS5cclxuICAgKiBAcGFyYW0gZXh0ZW50IEV4dGVudCB0byBtb3ZlIHRvXHJcbiAgICovXHJcbiAgbW92ZVRvRXh0ZW50KGV4dGVudDogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pIHtcclxuICAgIHRoaXMuZXh0ZW50JC5uZXh0KHsgZXh0ZW50LCBhY3Rpb246IE1hcFZpZXdBY3Rpb24uTW92ZSB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFpvb20gdG8gZXh0ZW50IGFmdGVyIGEgc2hvcnQgZGVsYXkgKDEwMG1zKSB1bmxlc3NcclxuICAgKiBhIG5ldyBtb3ZlbWVudCBnZXRzIHJlZ2lzdGVyZWQgaW4gdGhlIG1lYW50aW1lLlxyXG4gICAqIEBwYXJhbSBleHRlbnQgRXh0ZW50IHRvIHpvb20gdG9cclxuICAgKi9cclxuICB6b29tVG9FeHRlbnQoZXh0ZW50OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSkge1xyXG4gICAgdGhpcy5leHRlbnQkLm5leHQoeyBleHRlbnQsIGFjdGlvbjogTWFwVmlld0FjdGlvbi5ab29tIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBjdXJyZW50IHZpZXcgcm90YXRpb25cclxuICAgKiBAcmV0dXJucyBSb3RhdGlvbiBhbmdsZSBpbiBkZWdyZWVzXHJcbiAgICovXHJcbiAgZ2V0Um90YXRpb24oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLm9sVmlldy5nZXRSb3RhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgdGhlIHZpZXcgcm90YXRpb24gdG8gMFxyXG4gICAqL1xyXG4gIHJlc2V0Um90YXRpb24oKSB7XHJcbiAgICB0aGlzLm9sVmlldy5hbmltYXRlKHsgcm90YXRpb246IDAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRoZSB2aWV3IGhhcyBhIHByZXZpb3VzIHN0YXRlXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmlldyBoYXMgYSBwcmV2aW91cyBzdGF0ZVxyXG4gICAqL1xyXG4gIGhhc1ByZXZpb3VzU3RhdGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZXMubGVuZ3RoID4gMSAmJiB0aGlzLnN0YXRlSW5kZXggPiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0aGUgdmlldyBoYXMgYSBuZXh0IHN0YXRlXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmlldyBoYXMgYSBuZXh0IHN0YXRlXHJcbiAgICovXHJcbiAgaGFzTmV4dFN0YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGVzLmxlbmd0aCA+IDEgJiYgdGhpcy5zdGF0ZUluZGV4IDwgdGhpcy5zdGF0ZXMubGVuZ3RoIC0gMTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3RvcmUgdGhlIHByZXZpb3VzIHZpZXcgc3RhdGVcclxuICAgKi9cclxuICBwcmV2aW91c1N0YXRlKCkge1xyXG4gICAgaWYgKHRoaXMuaGFzUHJldmlvdXNTdGF0ZSgpKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGVJbmRleCh0aGlzLnN0YXRlSW5kZXggLSAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3RvcmUgdGhlIG5leHQgdmlldyBzdGF0ZVxyXG4gICAqL1xyXG4gIG5leHRTdGF0ZSgpIHtcclxuICAgIGlmICh0aGlzLmhhc05leHRTdGF0ZSgpKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGVJbmRleCh0aGlzLnN0YXRlSW5kZXggKyAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIHRoZSBzdGF0ZSBoaXN0b3J5XHJcbiAgICovXHJcbiAgY2xlYXJTdGF0ZUhpc3RvcnkoKSB7XHJcbiAgICB0aGlzLnN0YXRlcyA9IFtdO1xyXG4gICAgdGhpcy5zdGF0ZUluZGV4ID0gMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgdGhlIHZpZXcgdG8gaXQncyBpbnRpYWwgc3RhdGVcclxuICAgKi9cclxuICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNldFN0YXRlSW5kZXgoMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNb3ZlIHRvIHRoZSBleHRlbnQgcmV0cmlldmVkIGZyb20gdGhlIHN0cmVhbVxyXG4gICAqIEBwYXJhbSBleHRlbnQgRXh0ZW50XHJcbiAgICogQHBhcmFtIGFjdGlvbiBFaXRoZXIgem9vbSBvciBtb3ZlXHJcbiAgICogQHBhcmFtIGFuaW1hdGlvbiBXaXRoIG9yIHdpdGhvdXQgYW5pbWF0aW9uIHRvIHRoZSB0YXJnZXQgZXh0ZW50LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0RXh0ZW50KFxyXG4gICAgZXh0ZW50OiBNYXBFeHRlbnQsXHJcbiAgICBhY3Rpb246IE1hcFZpZXdBY3Rpb24sXHJcbiAgICBhbmltYXRpb246IGJvb2xlYW4gPSB0cnVlXHJcbiAgKSB7XHJcbiAgICBjb25zdCBvbFZpZXcgPSB0aGlzLm9sVmlldztcclxuICAgIG9sVmlldy5jYW5jZWxBbmltYXRpb25zKCk7XHJcbiAgICBjb25zdCBkdXJhdGlvbiA9IGFuaW1hdGlvbiA/IDUwMCA6IDA7XHJcbiAgICBjb25zdCB6b29tID0gb2xWaWV3LmdldFpvb20oKTtcclxuXHJcbiAgICBjb25zdCBmcm9tQ2VudGVyID0gb2xWaWV3LmdldENlbnRlcigpO1xyXG4gICAgY29uc3QgdG9DZW50ZXIgPSBbXHJcbiAgICAgIGV4dGVudFswXSArIChleHRlbnRbMl0gLSBleHRlbnRbMF0pIC8gMixcclxuICAgICAgZXh0ZW50WzFdICsgKGV4dGVudFszXSAtIGV4dGVudFsxXSkgLyAyXHJcbiAgICBdO1xyXG4gICAgY29uc3QgZGlzdENlbnRlciA9IE1hdGguc3FydChcclxuICAgICAgTWF0aC5wb3coZnJvbUNlbnRlclswXSAtIHRvQ2VudGVyWzBdLCAyKSArXHJcbiAgICAgICAgTWF0aC5wb3coZnJvbUNlbnRlclsxXSAtIHRvQ2VudGVyWzFdLCAyKVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGZyb21FeHRlbnQgPSBvbFZpZXcuY2FsY3VsYXRlRXh0ZW50KCk7XHJcbiAgICBjb25zdCBmcm9tU2l6ZSA9IE1hdGguc3FydChcclxuICAgICAgTWF0aC5wb3coZnJvbUV4dGVudFsyXSAtIGZyb21FeHRlbnRbMF0sIDIpICtcclxuICAgICAgICBNYXRoLnBvdyhmcm9tRXh0ZW50WzNdIC0gZnJvbUV4dGVudFsxXSwgMilcclxuICAgICk7XHJcbiAgICBjb25zdCB0b1NpemUgPSBNYXRoLnNxcnQoXHJcbiAgICAgIE1hdGgucG93KGV4dGVudFsyXSAtIGV4dGVudFswXSwgMikgKyBNYXRoLnBvdyhleHRlbnRbM10gLSBleHRlbnRbMV0sIDIpXHJcbiAgICApO1xyXG4gICAgY29uc3QgbW95U2l6ZSA9ICh0b1NpemUgKyBmcm9tU2l6ZSkgLyAyO1xyXG4gICAgY29uc3QgeFNpemUgPSBkaXN0Q2VudGVyIC8gbW95U2l6ZTtcclxuXHJcbiAgICBjb25zdCBtYXhab29tID1cclxuICAgICAgYWN0aW9uID09PSBNYXBWaWV3QWN0aW9uLk1vdmUgfHwgem9vbSA+IHRoaXMubWF4Wm9vbU9uRXh0ZW50XHJcbiAgICAgICAgPyB6b29tXHJcbiAgICAgICAgOiB0aGlzLm1heFpvb21PbkV4dGVudDtcclxuXHJcbiAgICBvbFZpZXcuZml0KGV4dGVudCwge1xyXG4gICAgICBzaXplOiB0aGlzLm9sTWFwLmdldFNpemUoKSxcclxuICAgICAgbWF4Wm9vbSxcclxuICAgICAgcGFkZGluZzogdGhpcy5wYWRkaW5nLFxyXG4gICAgICBkdXJhdGlvbjogeFNpemUgPiA0ID8gMCA6IGR1cmF0aW9uLFxyXG4gICAgICBjYWxsYmFjazogKGlzRmluaXNoZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAoIWlzRmluaXNoZWQpIHtcclxuICAgICAgICAgIG9sVmlldy5maXQoZXh0ZW50LCB7XHJcbiAgICAgICAgICAgIHNpemU6IHRoaXMub2xNYXAuZ2V0U2l6ZSgpLFxyXG4gICAgICAgICAgICBtYXhab29tLFxyXG4gICAgICAgICAgICBwYWRkaW5nOiB0aGlzLnBhZGRpbmcsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiB4U2l6ZSA+IDQgPyAwIDogZHVyYXRpb25cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIHZpZXcgc3RhdGUgaW5kZXhcclxuICAgKiBAcGFyYW0gaW5kZXggU3RhdGUgaW5kZXhcclxuICAgKi9cclxuICBwcml2YXRlIHNldFN0YXRlSW5kZXgoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5zdGF0ZUluZGV4ID0gaW5kZXg7XHJcbiAgICB0aGlzLnNldFN0YXRlKHRoaXMuc3RhdGVzW2luZGV4XSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIHZpZXcgc3RhdGVcclxuICAgKiBAcGFyYW0gc3RhdGUgVmlldyBzdGF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0U3RhdGUoc3RhdGU6IE1hcFZpZXdTdGF0ZSkge1xyXG4gICAgdGhpcy5vbFZpZXcuYW5pbWF0ZSh7XHJcbiAgICAgIHJlc29sdXRpb246IHN0YXRlLnJlc29sdXRpb24sXHJcbiAgICAgIGNlbnRlcjogc3RhdGUuY2VudGVyLFxyXG4gICAgICBkdXJhdGlvbjogMFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPbiBtb3ZlIGVuZCwgZ2V0IHRoZSB2aWV3IHN0YXRlIGFuZCByZWNvcmQgaXQuXHJcbiAgICogQHBhcmFtIGV2ZW50IE1hcCBldmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgb25Nb3ZlRW5kKGV2ZW50OiBPbE1hcEV2ZW50KSB7XHJcbiAgICBjb25zdCByZXNvbHV0aW9uID0gdGhpcy5nZXRSZXNvbHV0aW9uKCk7XHJcbiAgICBpZiAodGhpcy5yZXNvbHV0aW9uJC52YWx1ZSAhPT0gcmVzb2x1dGlvbikge1xyXG4gICAgICB0aGlzLnJlc29sdXRpb24kLm5leHQocmVzb2x1dGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhdGUgPSB7XHJcbiAgICAgIHJlc29sdXRpb24sXHJcbiAgICAgIGNlbnRlcjogdGhpcy5nZXRDZW50ZXIoKSxcclxuICAgICAgem9vbTogdGhpcy5nZXRab29tKClcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMuc3RhdGVIaXN0b3J5ID09PSB0cnVlKSB7XHJcbiAgICAgIGNvbnN0IHN0YXRlSW5kZXggPSB0aGlzLnN0YXRlSW5kZXg7XHJcbiAgICAgIGNvbnN0IHN0YXRlQXRJbmRleCA9XHJcbiAgICAgICAgdGhpcy5zdGF0ZXMubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogdGhpcy5zdGF0ZXNbc3RhdGVJbmRleF07XHJcbiAgICAgIGlmICghdmlld1N0YXRlc0FyZUVxdWFsKHN0YXRlLCBzdGF0ZUF0SW5kZXgpKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZXMgPSB0aGlzLnN0YXRlcy5zbGljZSgwLCBzdGF0ZUluZGV4ICsgMSkuY29uY2F0KFtzdGF0ZV0pO1xyXG4gICAgICAgIHRoaXMuc3RhdGVJbmRleCA9IHRoaXMuc3RhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0YXRlJC5uZXh0KHN0YXRlKTtcclxuICB9XHJcbn1cclxuIl19
342
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL21hcC9zaGFyZWQvY29udHJvbGxlcnMvdmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBSWxDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFPN0M7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsYUFBYTtJQTZEbEQsWUFBb0IsT0FBa0M7UUFDcEQsS0FBSyxFQUFFLENBQUM7UUFEVSxZQUFPLEdBQVAsT0FBTyxDQUEyQjtRQTVEdEQ7O1dBRUc7UUFDSCxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFTLFNBQVMsQ0FBQyxDQUFDO1FBRXJEOztXQUVHO1FBQ0gsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFlLFNBQVMsQ0FBQyxDQUFDO1FBRXREOzs7V0FHRztRQUNILFlBQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZCOztXQUVHO1FBQ0gsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFPckI7O1dBRUc7UUFDSyxZQUFPLEdBQUcsSUFBSSxPQUFPLEVBQWdELENBQUM7UUFPOUU7O1dBRUc7UUFDSyxXQUFNLEdBQW1CLEVBQUUsQ0FBQztRQUVwQzs7V0FFRztR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QU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDdkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7U0FDeEMsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUMzQyxDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUM3QyxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDeEUsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztR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QUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT2xNYXAgZnJvbSAnb2wvTWFwJztcbmltcG9ydCBPbE1hcEV2ZW50IGZyb20gJ29sL01hcEV2ZW50JztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0ICogYXMgb2xlYXNpbmcgZnJvbSAnb2wvZWFzaW5nJztcbmltcG9ydCAqIGFzIG9scHJvaiBmcm9tICdvbC9wcm9qJztcbmltcG9ydCBPbFByb2plY3Rpb24gZnJvbSAnb2wvcHJvai9Qcm9qZWN0aW9uJztcbmltcG9ydCBPbFZpZXcgZnJvbSAnb2wvVmlldyc7XG5cbmltcG9ydCB7IE1hcFZpZXdBY3Rpb24gfSBmcm9tICcuLi9tYXAuZW51bXMnO1xuaW1wb3J0IHsgTWFwRXh0ZW50LCBNYXBWaWV3U3RhdGUgfSBmcm9tICcuLi9tYXAuaW50ZXJmYWNlJztcbmltcG9ydCB7IGdldFNjYWxlRnJvbVJlc29sdXRpb24sIHZpZXdTdGF0ZXNBcmVFcXVhbCB9IGZyb20gJy4uL21hcC51dGlscyc7XG5pbXBvcnQgeyBNYXBDb250cm9sbGVyIH0gZnJvbSAnLi9jb250cm9sbGVyJztcbmltcG9ydCB7IEV2ZW50c0tleSB9IGZyb20gJ29sL2V2ZW50cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwVmlld0NvbnRyb2xsZXJPcHRpb25zIHtcbiAgc3RhdGVIaXN0b3J5OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnRyb2xsZXIgdG8gaGFuZGxlIG1hcCB2aWV3IGludGVyYWN0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgTWFwVmlld0NvbnRyb2xsZXIgZXh0ZW5kcyBNYXBDb250cm9sbGVyIHtcbiAgLyoqXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgKi9cbiAgcmVzb2x1dGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4odW5kZWZpbmVkKTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgY3VycmVudCBzdGF0ZVxuICAgKi9cbiAgc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXBWaWV3U3RhdGU+KHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIFZpZXcgUGFkZGluZ1xuICAgKiBWYWx1ZXMgaW4gdGhlIGFycmF5IGFyZSB0b3AsIHJpZ2h0LCBib3R0b20gYW5kIGxlZnQgcGFkZGluZy5cbiAgICovXG4gIHBhZGRpbmcgPSBbMCwgMCwgMCwgMF07XG5cbiAgLyoqXG4gICAqIE1heCB6b29tIGFmdGVyIHNldCBleHRlbnRcbiAgICovXG4gIG1heFpvb21PbkV4dGVudCA9IDE5O1xuXG4gIC8qKlxuICAgKiBNYXggZXh0ZW50IHBvc3NpYmxlIHdoZW4gem9vbWluZ1xuICAgKi9cbiAgbWF4TGF5ZXJab29tRXh0ZW50OiBNYXBFeHRlbnQ7XG5cbiAgLyoqXG4gICAqIEV4dGVudCBzdHJlYW1cbiAgICovXG4gIHByaXZhdGUgZXh0ZW50JCA9IG5ldyBTdWJqZWN0PHsgZXh0ZW50OiBNYXBFeHRlbnQ7IGFjdGlvbjogTWFwVmlld0FjdGlvbiB9PigpO1xuXG4gIC8qKlxuICAgKiBTdWJzY3JpcHRpb24gdG8gdGhlIG1vdmVtZW50IHN0cmVhbVxuICAgKi9cbiAgcHJpdmF0ZSBleHRlbnQkJDogU3Vic2NyaXB0aW9uO1xuXG4gIC8qKlxuICAgKiBIaXN0b3J5IG9mIHN0YXRlc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0ZXM6IE1hcFZpZXdTdGF0ZVtdID0gW107XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQgc3RhdGUgaW5kZXhcbiAgICovXG4gIHByaXZhdGUgc3RhdGVJbmRleDogbnVtYmVyID0gMDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdmlldyBjb250cm9sbGVyIHNob3VsZCBrZWVwIHRoZSB2aWV3J3Mgc3RhdGUgaGlzdG9yeVxuICAgKi9cbiAgZ2V0IHN0YXRlSGlzdG9yeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zID8gdGhpcy5vcHRpb25zLnN0YXRlSGlzdG9yeSA9PT0gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE9MIFZpZXdcbiAgICovXG4gIGdldCBvbFZpZXcoKTogT2xWaWV3IHtcbiAgICByZXR1cm4gdGhpcy5vbE1hcC5nZXRWaWV3KCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9wdGlvbnM/OiBNYXBWaWV3Q29udHJvbGxlck9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgc2V0UGFkZGluZyhwYWRkaW5nOiB7IHRvcD86IG51bWJlciwgYm90dG9tPzogbnVtYmVyLCBsZWZ0PzogbnVtYmVyLCByaWdodD86IG51bWJlciB9KSB7XG4gICAgLy8gVmFsdWVzIGluIHRoZSBhcnJheSBhcmUgdG9wLCByaWdodCwgYm90dG9tIGFuZCBsZWZ0IHBhZGRpbmcuXG4gICAgaWYgKHBhZGRpbmcudG9wIHx8IHBhZGRpbmcudG9wID09PSAwKSB7XG4gICAgICB0aGlzLnBhZGRpbmdbMF0gPSBwYWRkaW5nLnRvcDtcbiAgICB9XG4gICAgaWYgKHBhZGRpbmcucmlnaHQgfHwgcGFkZGluZy5yaWdodCA9PT0gMCkge1xuICAgICAgdGhpcy5wYWRkaW5nWzFdID0gcGFkZGluZy5yaWdodDtcbiAgICB9XG4gICAgaWYgKHBhZGRpbmcuYm90dG9tIHx8IHBhZGRpbmcuYm90dG9tID09PSAwKSB7XG4gICAgICB0aGlzLnBhZGRpbmdbMl0gPSBwYWRkaW5nLmJvdHRvbTtcbiAgICB9XG4gICAgaWYgKHBhZGRpbmcubGVmdCB8fCBwYWRkaW5nLmxlZnQgPT09IDApIHtcbiAgICAgIHRoaXMucGFkZGluZ1szXSA9IHBhZGRpbmcubGVmdDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIG9yIHJlbW92ZSB0aGlzIGNvbnRyb2xsZXIgdG8vZnJvbSBhIG1hcC5cbiAgICogQHBhcmFtIG1hcCBPTCBNYXBcbiAgICovXG4gIHNldE9sTWFwKG9sTWFwOiBPbE1hcCB8IHVuZGVmaW5lZCkge1xuICAgIHN1cGVyLnNldE9sTWFwKG9sTWFwKTtcbiAgICB0aGlzLnNldHVwT2JzZXJ2ZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogT2JzZXJ2ZSBtb3ZlIG1vdmVlbmQgYW5kIHN1YnNjcmliZSB0byB0aGUgZXh0ZW50IHN0cmVhbVxuICAgKi9cbiAgc2V0dXBPYnNlcnZlcnMoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGVIaXN0b3J5ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLm9ic2VydmVyS2V5cy5wdXNoKFxuICAgICAgICB0aGlzLm9sTWFwLm9uKCdtb3ZlZW5kJywgKGV2ZW50OiBPbE1hcEV2ZW50KSA9PiB0aGlzLm9uTW92ZUVuZChldmVudCkpIGFzIEV2ZW50c0tleVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmV4dGVudCQkID0gdGhpcy5leHRlbnQkXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjUpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IHsgZXh0ZW50OiBNYXBFeHRlbnQ7IGFjdGlvbjogTWFwVmlld0FjdGlvbiB9KSA9PiB7XG4gICAgICAgIHRoaXMuc2V0RXh0ZW50KHZhbHVlLmV4dGVudCwgdmFsdWUuYWN0aW9uKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlYXJkb3duIGFueSBvYnNlcnZlcnNcbiAgICovXG4gIHRlYXJkb3duT2JzZXJ2ZXJzKCkge1xuICAgIHN1cGVyLnRlYXJkb3duT2JzZXJ2ZXJzKCk7XG4gICAgaWYgKHRoaXMuZXh0ZW50JCQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5leHRlbnQkJC51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5leHRlbnQkJCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2aWV3J3MgT0wgcHJvamVjdGlvblxuICAgKiBAcmV0dXJucyBPTCBwcm9qZWN0aW9uXG4gICAqL1xuICBnZXRPbFByb2plY3Rpb24oKTogT2xQcm9qZWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5vbFZpZXcuZ2V0UHJvamVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBtYXAgdmlldyBjZW50ZXJcbiAgICogQHBhcmFtIHByb2plY3Rpb24gT3V0cHV0IHByb2plY3Rpb25cbiAgICogQHJldHVybnMgQ2VudGVyXG4gICAqL1xuICBnZXRDZW50ZXIocHJvamVjdGlvbj86IHN0cmluZyB8IE9sUHJvamVjdGlvbik6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgIGxldCBjZW50ZXIgPSB0aGlzLm9sVmlldy5nZXRDZW50ZXIoKSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuICAgIGlmIChwcm9qZWN0aW9uICYmIGNlbnRlcikge1xuICAgICAgY2VudGVyID0gb2xwcm9qLnRyYW5zZm9ybShjZW50ZXIsIHRoaXMuZ2V0T2xQcm9qZWN0aW9uKCksIHByb2plY3Rpb24pIGFzIFtudW1iZXIsIG51bWJlcl07XG4gICAgfVxuICAgIHJldHVybiBjZW50ZXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHZpZXcgZXh0ZW50XG4gICAqIEBwYXJhbSBwcm9qZWN0aW9uIE91dHB1dCBwcm9qZWN0aW9uXG4gICAqIEByZXR1cm5zIEV4dGVudFxuICAgKi9cbiAgZ2V0RXh0ZW50KHByb2plY3Rpb24/OiBzdHJpbmcgfCBPbFByb2plY3Rpb24pOiBNYXBFeHRlbnQge1xuICAgIGxldCBleHRlbnQgPSB0aGlzLm9sVmlldy5jYWxjdWxhdGVFeHRlbnQodGhpcy5vbE1hcC5nZXRTaXplKCkpO1xuICAgIGlmIChwcm9qZWN0aW9uICYmIGV4dGVudCkge1xuICAgICAgZXh0ZW50ID0gb2xwcm9qLnRyYW5zZm9ybUV4dGVudChcbiAgICAgICAgZXh0ZW50LFxuICAgICAgICB0aGlzLmdldE9sUHJvamVjdGlvbigpLFxuICAgICAgICBwcm9qZWN0aW9uXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZXh0ZW50IGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBzY2FsZVxuICAgKiBAcGFyYW0gZHBpIERvdCBwZXIgaW5jaGVzXG4gICAqIEByZXR1cm5zIFZpZXcgc2NhbGVcbiAgICovXG4gIGdldFNjYWxlKGRwaSA9IDk2KSB7XG4gICAgcmV0dXJuIGdldFNjYWxlRnJvbVJlc29sdXRpb24oXG4gICAgICB0aGlzLmdldFJlc29sdXRpb24oKSxcbiAgICAgIHRoaXMuZ2V0T2xQcm9qZWN0aW9uKCkuZ2V0VW5pdHMoKSxcbiAgICAgIGRwaVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICogQHJldHVybnMgUHJvamVjdGlvbiBkZW5vbWluYXRvclxuICAgKi9cbiAgZ2V0UmVzb2x1dGlvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm9sVmlldy5nZXRSZXNvbHV0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHpvb20gbGV2ZWxcbiAgICogQHJldHVybnMgWm9vbSBsZXZlbFxuICAgKi9cbiAgZ2V0Wm9vbSgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMub2xWaWV3LmdldFpvb20oKSk7XG4gIH1cblxuICAvKipcbiAgICogWm9vbSBpblxuICAgKi9cbiAgem9vbUluKCkge1xuICAgIHRoaXMuem9vbVRvKHRoaXMub2xWaWV3LmdldFpvb20oKSArIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFpvb20gb3V0XG4gICAqL1xuICB6b29tT3V0KCkge1xuICAgIHRoaXMuem9vbVRvKHRoaXMub2xWaWV3LmdldFpvb20oKSAtIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFpvb20gdG8gc3BlY2lmaWMgem9vbSBsZXZlbFxuICAgKiBAcGFyYW0gem9vbSBab29tIGxldmVsXG4gICAqL1xuICB6b29tVG8oem9vbTogbnVtYmVyKSB7XG4gICAgdGhpcy5vbFZpZXcuY2FuY2VsQW5pbWF0aW9ucygpO1xuICAgIHRoaXMub2xWaWV3LmFuaW1hdGUoe1xuICAgICAgem9vbSxcbiAgICAgIGR1cmF0aW9uOiAyNTAsXG4gICAgICBlYXNpbmc6IG9sZWFzaW5nLmVhc2VPdXRcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIHRvIGV4dGVudCBhZnRlciBhIHNob3J0IGRlbGF5ICgxMDBtcykgdW5sZXNzXG4gICAqIGEgbmV3IG1vdmVtZW50IGdldHMgcmVnaXN0ZXJlZCBpbiB0aGUgbWVhbnRpbWUuXG4gICAqIEBwYXJhbSBleHRlbnQgRXh0ZW50IHRvIG1vdmUgdG9cbiAgICovXG4gIG1vdmVUb0V4dGVudChleHRlbnQ6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgdGhpcy5leHRlbnQkLm5leHQoeyBleHRlbnQsIGFjdGlvbjogTWFwVmlld0FjdGlvbi5Nb3ZlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFpvb20gdG8gZXh0ZW50IGFmdGVyIGEgc2hvcnQgZGVsYXkgKDEwMG1zKSB1bmxlc3NcbiAgICogYSBuZXcgbW92ZW1lbnQgZ2V0cyByZWdpc3RlcmVkIGluIHRoZSBtZWFudGltZS5cbiAgICogQHBhcmFtIGV4dGVudCBFeHRlbnQgdG8gem9vbSB0b1xuICAgKi9cbiAgem9vbVRvRXh0ZW50KGV4dGVudDogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pIHtcbiAgICB0aGlzLmV4dGVudCQubmV4dCh7IGV4dGVudCwgYWN0aW9uOiBNYXBWaWV3QWN0aW9uLlpvb20gfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBjdXJyZW50IHZpZXcgcm90YXRpb25cbiAgICogQHJldHVybnMgUm90YXRpb24gYW5nbGUgaW4gZGVncmVlc1xuICAgKi9cbiAgZ2V0Um90YXRpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vbFZpZXcuZ2V0Um90YXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgdmlldyByb3RhdGlvbiB0byAwXG4gICAqL1xuICByZXNldFJvdGF0aW9uKCkge1xuICAgIHRoaXMub2xWaWV3LmFuaW1hdGUoeyByb3RhdGlvbjogMCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB2aWV3IGhhcyBhIHByZXZpb3VzIHN0YXRlXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHZpZXcgaGFzIGEgcHJldmlvdXMgc3RhdGVcbiAgICovXG4gIGhhc1ByZXZpb3VzU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVzLmxlbmd0aCA+IDEgJiYgdGhpcy5zdGF0ZUluZGV4ID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB2aWV3IGhhcyBhIG5leHQgc3RhdGVcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmlldyBoYXMgYSBuZXh0IHN0YXRlXG4gICAqL1xuICBoYXNOZXh0U3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVzLmxlbmd0aCA+IDEgJiYgdGhpcy5zdGF0ZUluZGV4IDwgdGhpcy5zdGF0ZXMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHRoZSBwcmV2aW91cyB2aWV3IHN0YXRlXG4gICAqL1xuICBwcmV2aW91c1N0YXRlKCkge1xuICAgIGlmICh0aGlzLmhhc1ByZXZpb3VzU3RhdGUoKSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZUluZGV4KHRoaXMuc3RhdGVJbmRleCAtIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHRoZSBuZXh0IHZpZXcgc3RhdGVcbiAgICovXG4gIG5leHRTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy5oYXNOZXh0U3RhdGUoKSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZUluZGV4KHRoaXMuc3RhdGVJbmRleCArIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgc3RhdGUgaGlzdG9yeVxuICAgKi9cbiAgY2xlYXJTdGF0ZUhpc3RvcnkoKSB7XG4gICAgdGhpcy5zdGF0ZXMgPSBbXTtcbiAgICB0aGlzLnN0YXRlSW5kZXggPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgdGhlIHZpZXcgdG8gaXQncyBpbnRpYWwgc3RhdGVcbiAgICovXG4gIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZUluZGV4KDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIHRvIHRoZSBleHRlbnQgcmV0cmlldmVkIGZyb20gdGhlIHN0cmVhbVxuICAgKiBAcGFyYW0gZXh0ZW50IEV4dGVudFxuICAgKiBAcGFyYW0gYWN0aW9uIEVpdGhlciB6b29tIG9yIG1vdmVcbiAgICogQHBhcmFtIGFuaW1hdGlvbiBXaXRoIG9yIHdpdGhvdXQgYW5pbWF0aW9uIHRvIHRoZSB0YXJnZXQgZXh0ZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBzZXRFeHRlbnQoXG4gICAgZXh0ZW50OiBNYXBFeHRlbnQsXG4gICAgYWN0aW9uOiBNYXBWaWV3QWN0aW9uLFxuICAgIGFuaW1hdGlvbjogYm9vbGVhbiA9IHRydWVcbiAgKSB7XG4gICAgY29uc3Qgb2xWaWV3ID0gdGhpcy5vbFZpZXc7XG4gICAgb2xWaWV3LmNhbmNlbEFuaW1hdGlvbnMoKTtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGFuaW1hdGlvbiA/IDUwMCA6IDA7XG4gICAgY29uc3Qgem9vbSA9IG9sVmlldy5nZXRab29tKCk7XG5cbiAgICBjb25zdCBmcm9tQ2VudGVyID0gb2xWaWV3LmdldENlbnRlcigpO1xuICAgIGNvbnN0IHRvQ2VudGVyID0gW1xuICAgICAgZXh0ZW50WzBdICsgKGV4dGVudFsyXSAtIGV4dGVudFswXSkgLyAyLFxuICAgICAgZXh0ZW50WzFdICsgKGV4dGVudFszXSAtIGV4dGVudFsxXSkgLyAyXG4gICAgXTtcbiAgICBjb25zdCBkaXN0Q2VudGVyID0gTWF0aC5zcXJ0KFxuICAgICAgTWF0aC5wb3coZnJvbUNlbnRlclswXSAtIHRvQ2VudGVyWzBdLCAyKSArXG4gICAgICAgIE1hdGgucG93KGZyb21DZW50ZXJbMV0gLSB0b0NlbnRlclsxXSwgMilcbiAgICApO1xuICAgIGNvbnN0IGZyb21FeHRlbnQgPSBvbFZpZXcuY2FsY3VsYXRlRXh0ZW50KCk7XG4gICAgY29uc3QgZnJvbVNpemUgPSBNYXRoLnNxcnQoXG4gICAgICBNYXRoLnBvdyhmcm9tRXh0ZW50WzJdIC0gZnJvbUV4dGVudFswXSwgMikgK1xuICAgICAgICBNYXRoLnBvdyhmcm9tRXh0ZW50WzNdIC0gZnJvbUV4dGVudFsxXSwgMilcbiAgICApO1xuICAgIGNvbnN0IHRvU2l6ZSA9IE1hdGguc3FydChcbiAgICAgIE1hdGgucG93KGV4dGVudFsyXSAtIGV4dGVudFswXSwgMikgKyBNYXRoLnBvdyhleHRlbnRbM10gLSBleHRlbnRbMV0sIDIpXG4gICAgKTtcbiAgICBjb25zdCBtb3lTaXplID0gKHRvU2l6ZSArIGZyb21TaXplKSAvIDI7XG4gICAgY29uc3QgeFNpemUgPSBkaXN0Q2VudGVyIC8gbW95U2l6ZTtcblxuICAgIGNvbnN0IG1heFpvb20gPVxuICAgICAgYWN0aW9uID09PSBNYXBWaWV3QWN0aW9uLk1vdmUgfHwgem9vbSA+IHRoaXMubWF4Wm9vbU9uRXh0ZW50XG4gICAgICAgID8gem9vbVxuICAgICAgICA6IHRoaXMubWF4Wm9vbU9uRXh0ZW50O1xuXG4gICAgb2xWaWV3LmZpdChleHRlbnQsIHtcbiAgICAgIHNpemU6IHRoaXMub2xNYXAuZ2V0U2l6ZSgpLFxuICAgICAgbWF4Wm9vbSxcbiAgICAgIHBhZGRpbmc6IHRoaXMucGFkZGluZyxcbiAgICAgIGR1cmF0aW9uOiB4U2l6ZSA+IDQgPyAwIDogZHVyYXRpb24sXG4gICAgICBjYWxsYmFjazogKGlzRmluaXNoZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKCFpc0ZpbmlzaGVkKSB7XG4gICAgICAgICAgb2xWaWV3LmZpdChleHRlbnQsIHtcbiAgICAgICAgICAgIHNpemU6IHRoaXMub2xNYXAuZ2V0U2l6ZSgpLFxuICAgICAgICAgICAgbWF4Wm9vbSxcbiAgICAgICAgICAgIHBhZGRpbmc6IHRoaXMucGFkZGluZyxcbiAgICAgICAgICAgIGR1cmF0aW9uOiB4U2l6ZSA+IDQgPyAwIDogZHVyYXRpb25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdmlldyBzdGF0ZSBpbmRleFxuICAgKiBAcGFyYW0gaW5kZXggU3RhdGUgaW5kZXhcbiAgICovXG4gIHByaXZhdGUgc2V0U3RhdGVJbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zdGF0ZUluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5zZXRTdGF0ZSh0aGlzLnN0YXRlc1tpbmRleF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdmlldyBzdGF0ZVxuICAgKiBAcGFyYW0gc3RhdGUgVmlldyBzdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzZXRTdGF0ZShzdGF0ZTogTWFwVmlld1N0YXRlKSB7XG4gICAgdGhpcy5vbFZpZXcuYW5pbWF0ZSh7XG4gICAgICByZXNvbHV0aW9uOiBzdGF0ZS5yZXNvbHV0aW9uLFxuICAgICAgY2VudGVyOiBzdGF0ZS5jZW50ZXIsXG4gICAgICBkdXJhdGlvbjogMFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIG1vdmUgZW5kLCBnZXQgdGhlIHZpZXcgc3RhdGUgYW5kIHJlY29yZCBpdC5cbiAgICogQHBhcmFtIGV2ZW50IE1hcCBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSBvbk1vdmVFbmQoZXZlbnQ6IE9sTWFwRXZlbnQpIHtcbiAgICBjb25zdCByZXNvbHV0aW9uID0gdGhpcy5nZXRSZXNvbHV0aW9uKCk7XG4gICAgaWYgKHRoaXMucmVzb2x1dGlvbiQudmFsdWUgIT09IHJlc29sdXRpb24pIHtcbiAgICAgIHRoaXMucmVzb2x1dGlvbiQubmV4dChyZXNvbHV0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgIHJlc29sdXRpb24sXG4gICAgICBjZW50ZXI6IHRoaXMuZ2V0Q2VudGVyKCksXG4gICAgICB6b29tOiB0aGlzLmdldFpvb20oKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zdGF0ZUhpc3RvcnkgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IHN0YXRlSW5kZXggPSB0aGlzLnN0YXRlSW5kZXg7XG4gICAgICBjb25zdCBzdGF0ZUF0SW5kZXggPVxuICAgICAgICB0aGlzLnN0YXRlcy5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiB0aGlzLnN0YXRlc1tzdGF0ZUluZGV4XTtcbiAgICAgIGlmICghdmlld1N0YXRlc0FyZUVxdWFsKHN0YXRlLCBzdGF0ZUF0SW5kZXgpKSB7XG4gICAgICAgIHRoaXMuc3RhdGVzID0gdGhpcy5zdGF0ZXMuc2xpY2UoMCwgc3RhdGVJbmRleCArIDEpLmNvbmNhdChbc3RhdGVdKTtcbiAgICAgICAgdGhpcy5zdGF0ZUluZGV4ID0gdGhpcy5zdGF0ZXMubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlJC5uZXh0KHN0YXRlKTtcbiAgfVxufVxuIl19