@igo2/geo 18.0.0 → 18.0.1-next.2

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 (510) hide show
  1. package/fesm2022/igo2-geo.mjs +684 -709
  2. package/fesm2022/igo2-geo.mjs.map +1 -1
  3. package/lib/offline/geoDB/geoDB.service.d.ts +1 -1
  4. package/lib/offline/layerDB/layerDB.service.d.ts +1 -1
  5. package/lib/style/style-list/style-list.provider.d.ts +1 -8
  6. package/lib/style/style-list/style-list.service.d.ts +1 -1
  7. package/package.json +15 -17
  8. package/src/lib/layer/layer-list/layer-list.theme.scss +2 -1
  9. package/src/lib/map/menu-button/menu-button.theming.scss +3 -3
  10. package/src/style/style.scss +1 -1
  11. package/esm2022/igo2-geo.mjs +0 -5
  12. package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +0 -234
  13. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +0 -272
  14. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +0 -246
  15. package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +0 -19
  16. package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +0 -136
  17. package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +0 -60
  18. package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +0 -232
  19. package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +0 -24
  20. package/esm2022/lib/catalog/catalog-library/index.mjs +0 -4
  21. package/esm2022/lib/catalog/catalog.module.mjs +0 -26
  22. package/esm2022/lib/catalog/index.mjs +0 -6
  23. package/esm2022/lib/catalog/shared/catalog.abstract.mjs +0 -32
  24. package/esm2022/lib/catalog/shared/catalog.enum.mjs +0 -16
  25. package/esm2022/lib/catalog/shared/catalog.interface.mjs +0 -2
  26. package/esm2022/lib/catalog/shared/catalog.service.mjs +0 -706
  27. package/esm2022/lib/catalog/shared/catalogs.mjs +0 -75
  28. package/esm2022/lib/catalog/shared/index.mjs +0 -5
  29. package/esm2022/lib/datasource/index.mjs +0 -3
  30. package/esm2022/lib/datasource/shared/capabilities.interface.mjs +0 -17
  31. package/esm2022/lib/datasource/shared/capabilities.service.mjs +0 -441
  32. package/esm2022/lib/datasource/shared/datasource.service.mjs +0 -258
  33. package/esm2022/lib/datasource/shared/datasources/any-datasource.interface.mjs +0 -2
  34. package/esm2022/lib/datasource/shared/datasources/any-datasource.mjs +0 -2
  35. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +0 -2
  36. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +0 -222
  37. package/esm2022/lib/datasource/shared/datasources/carto-datasource.interface.mjs +0 -2
  38. package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +0 -118
  39. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +0 -2
  40. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +0 -24
  41. package/esm2022/lib/datasource/shared/datasources/data.service.mjs +0 -3
  42. package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +0 -2
  43. package/esm2022/lib/datasource/shared/datasources/datasource.mjs +0 -41
  44. package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +0 -2
  45. package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +0 -52
  46. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +0 -2
  47. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +0 -70
  48. package/esm2022/lib/datasource/shared/datasources/index.mjs +0 -36
  49. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +0 -2
  50. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +0 -33
  51. package/esm2022/lib/datasource/shared/datasources/osm-datasource.interface.mjs +0 -2
  52. package/esm2022/lib/datasource/shared/datasources/osm-datasource.mjs +0 -14
  53. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +0 -2
  54. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +0 -60
  55. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +0 -2
  56. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.mjs +0 -17
  57. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +0 -2
  58. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +0 -56
  59. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +0 -2
  60. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +0 -137
  61. package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +0 -170
  62. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +0 -2
  63. package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +0 -227
  64. package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +0 -224
  65. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +0 -2
  66. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +0 -18
  67. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +0 -2
  68. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +0 -11
  69. package/esm2022/lib/datasource/shared/index.mjs +0 -6
  70. package/esm2022/lib/datasource/shared/options/index.mjs +0 -5
  71. package/esm2022/lib/datasource/shared/options/options-api.interface.mjs +0 -2
  72. package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +0 -15
  73. package/esm2022/lib/datasource/shared/options/options-api.service.mjs +0 -85
  74. package/esm2022/lib/datasource/shared/options/options.service.mjs +0 -3
  75. package/esm2022/lib/datasource/utils/index.mjs +0 -2
  76. package/esm2022/lib/datasource/utils/tilegrid.mjs +0 -20
  77. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +0 -246
  78. package/esm2022/lib/directions/directions-buttons/index.mjs +0 -2
  79. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +0 -312
  80. package/esm2022/lib/directions/directions-inputs/index.mjs +0 -2
  81. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +0 -192
  82. package/esm2022/lib/directions/directions-results/index.mjs +0 -2
  83. package/esm2022/lib/directions/directions-sources/directions-source.interface.mjs +0 -5
  84. package/esm2022/lib/directions/directions-sources/directions-source.mjs +0 -3
  85. package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +0 -23
  86. package/esm2022/lib/directions/directions-sources/index.mjs +0 -5
  87. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +0 -159
  88. package/esm2022/lib/directions/directions.component.mjs +0 -437
  89. package/esm2022/lib/directions/directions.module.mjs +0 -46
  90. package/esm2022/lib/directions/directions.provider.mjs +0 -16
  91. package/esm2022/lib/directions/index.mjs +0 -8
  92. package/esm2022/lib/directions/shared/directions-source.service.mjs +0 -18
  93. package/esm2022/lib/directions/shared/directions.enum.mjs +0 -72
  94. package/esm2022/lib/directions/shared/directions.interface.mjs +0 -2
  95. package/esm2022/lib/directions/shared/directions.service.mjs +0 -239
  96. package/esm2022/lib/directions/shared/directions.utils.mjs +0 -522
  97. package/esm2022/lib/directions/shared/index.mjs +0 -6
  98. package/esm2022/lib/directions/shared/store.mjs +0 -21
  99. package/esm2022/lib/download/download-button/download-button.component.mjs +0 -48
  100. package/esm2022/lib/download/download-button/index.mjs +0 -2
  101. package/esm2022/lib/download/download.module.mjs +0 -24
  102. package/esm2022/lib/download/index.mjs +0 -3
  103. package/esm2022/lib/download/shared/download.interface.mjs +0 -2
  104. package/esm2022/lib/download/shared/download.service.mjs +0 -67
  105. package/esm2022/lib/download/shared/index.mjs +0 -3
  106. package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +0 -42
  107. package/esm2022/lib/draw/draw/draw-popup.component.mjs +0 -421
  108. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +0 -28
  109. package/esm2022/lib/draw/draw/draw.component.mjs +0 -1136
  110. package/esm2022/lib/draw/draw/draw.module.mjs +0 -19
  111. package/esm2022/lib/draw/drawingTool.module.mjs +0 -18
  112. package/esm2022/lib/draw/index.mjs +0 -3
  113. package/esm2022/lib/draw/shared/draw-icon.service.mjs +0 -30
  114. package/esm2022/lib/draw/shared/draw.enum.mjs +0 -21
  115. package/esm2022/lib/draw/shared/draw.interface.mjs +0 -2
  116. package/esm2022/lib/draw/shared/draw.utils.mjs +0 -125
  117. package/esm2022/lib/draw/shared/index.mjs +0 -5
  118. package/esm2022/lib/environment/environment.interface.mjs +0 -2
  119. package/esm2022/lib/environment/index.mjs +0 -2
  120. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +0 -306
  121. package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +0 -56
  122. package/esm2022/lib/feature/feature-details/feature-details.module.mjs +0 -26
  123. package/esm2022/lib/feature/feature-details/index.mjs +0 -4
  124. package/esm2022/lib/feature/feature-form/feature-form.component.mjs +0 -101
  125. package/esm2022/lib/feature/feature-form/feature-form.module.mjs +0 -19
  126. package/esm2022/lib/feature/feature.module.mjs +0 -26
  127. package/esm2022/lib/feature/index.mjs +0 -5
  128. package/esm2022/lib/feature/shared/feature-store.utils.mjs +0 -28
  129. package/esm2022/lib/feature/shared/feature.enums.mjs +0 -9
  130. package/esm2022/lib/feature/shared/feature.interfaces.mjs +0 -2
  131. package/esm2022/lib/feature/shared/feature.utils.mjs +0 -332
  132. package/esm2022/lib/feature/shared/index.mjs +0 -8
  133. package/esm2022/lib/feature/shared/store.mjs +0 -143
  134. package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +0 -216
  135. package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +0 -119
  136. package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +0 -99
  137. package/esm2022/lib/feature/shared/strategies/index.mjs +0 -8
  138. package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +0 -103
  139. package/esm2022/lib/feature/shared/strategies/loading.mjs +0 -136
  140. package/esm2022/lib/feature/shared/strategies/search.mjs +0 -158
  141. package/esm2022/lib/feature/shared/strategies/selection.mjs +0 -385
  142. package/esm2022/lib/feature/shared/strategies.utils.mjs +0 -37
  143. package/esm2022/lib/filter/filter.module.mjs +0 -131
  144. package/esm2022/lib/filter/index.mjs +0 -17
  145. package/esm2022/lib/filter/ogc-filter-button/index.mjs +0 -2
  146. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +0 -141
  147. package/esm2022/lib/filter/ogc-filter-form/index.mjs +0 -2
  148. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +0 -325
  149. package/esm2022/lib/filter/ogc-filter-selection/index.mjs +0 -2
  150. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +0 -787
  151. package/esm2022/lib/filter/ogc-filter-time/index.mjs +0 -3
  152. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +0 -201
  153. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +0 -665
  154. package/esm2022/lib/filter/ogc-filterable-form/index.mjs +0 -2
  155. package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +0 -66
  156. package/esm2022/lib/filter/ogc-filterable-item/index.mjs +0 -2
  157. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +0 -244
  158. package/esm2022/lib/filter/ogc-filterable-list/index.mjs +0 -3
  159. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +0 -39
  160. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +0 -32
  161. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +0 -63
  162. package/esm2022/lib/filter/shared/index.mjs +0 -12
  163. package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +0 -72
  164. package/esm2022/lib/filter/shared/ogc-filter.enum.mjs +0 -30
  165. package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +0 -2
  166. package/esm2022/lib/filter/shared/ogc-filter.mjs +0 -756
  167. package/esm2022/lib/filter/shared/ogc-filter.service.mjs +0 -47
  168. package/esm2022/lib/filter/shared/spatial-filter.enum.mjs +0 -23
  169. package/esm2022/lib/filter/shared/spatial-filter.interface.mjs +0 -2
  170. package/esm2022/lib/filter/shared/spatial-filter.service.mjs +0 -282
  171. package/esm2022/lib/filter/shared/time-filter.enum.mjs +0 -13
  172. package/esm2022/lib/filter/shared/time-filter.interface.mjs +0 -2
  173. package/esm2022/lib/filter/shared/time-filter.service.mjs +0 -107
  174. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/index.mjs +0 -2
  175. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +0 -875
  176. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/index.mjs +0 -2
  177. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +0 -191
  178. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/index.mjs +0 -2
  179. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +0 -120
  180. package/esm2022/lib/filter/time-filter-button/index.mjs +0 -2
  181. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +0 -70
  182. package/esm2022/lib/filter/time-filter-form/index.mjs +0 -2
  183. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +0 -537
  184. package/esm2022/lib/filter/time-filter-item/index.mjs +0 -2
  185. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +0 -90
  186. package/esm2022/lib/filter/time-filter-list/index.mjs +0 -3
  187. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +0 -39
  188. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +0 -24
  189. package/esm2022/lib/geo.module.mjs +0 -63
  190. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +0 -559
  191. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +0 -170
  192. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +0 -24
  193. package/esm2022/lib/geometry/geometry-form-field/index.mjs +0 -4
  194. package/esm2022/lib/geometry/geometry.module.mjs +0 -18
  195. package/esm2022/lib/geometry/index.mjs +0 -3
  196. package/esm2022/lib/geometry/shared/controls/draw.mjs +0 -340
  197. package/esm2022/lib/geometry/shared/controls/index.mjs +0 -4
  198. package/esm2022/lib/geometry/shared/controls/modify.mjs +0 -538
  199. package/esm2022/lib/geometry/shared/controls/slice.mjs +0 -190
  200. package/esm2022/lib/geometry/shared/geometry.errors.mjs +0 -24
  201. package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +0 -2
  202. package/esm2022/lib/geometry/shared/geometry.utils.mjs +0 -113
  203. package/esm2022/lib/geometry/shared/index.mjs +0 -5
  204. package/esm2022/lib/import-export/export-button/export-button.component.mjs +0 -49
  205. package/esm2022/lib/import-export/export-button/index.mjs +0 -2
  206. package/esm2022/lib/import-export/import-export/import-export.component.mjs +0 -876
  207. package/esm2022/lib/import-export/import-export/index.mjs +0 -2
  208. package/esm2022/lib/import-export/import-export.module.mjs +0 -31
  209. package/esm2022/lib/import-export/index.mjs +0 -5
  210. package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +0 -114
  211. package/esm2022/lib/import-export/shared/export.errors.mjs +0 -15
  212. package/esm2022/lib/import-export/shared/export.interface.mjs +0 -2
  213. package/esm2022/lib/import-export/shared/export.service.mjs +0 -378
  214. package/esm2022/lib/import-export/shared/export.type.mjs +0 -13
  215. package/esm2022/lib/import-export/shared/export.utils.mjs +0 -51
  216. package/esm2022/lib/import-export/shared/import.errors.mjs +0 -39
  217. package/esm2022/lib/import-export/shared/import.interface.mjs +0 -2
  218. package/esm2022/lib/import-export/shared/import.service.mjs +0 -221
  219. package/esm2022/lib/import-export/shared/import.utils.mjs +0 -203
  220. package/esm2022/lib/import-export/shared/index.mjs +0 -11
  221. package/esm2022/lib/layer/index.mjs +0 -16
  222. package/esm2022/lib/layer/layer-group/index.mjs +0 -2
  223. package/esm2022/lib/layer/layer-group/layer-group.component.mjs +0 -103
  224. package/esm2022/lib/layer/layer-item/index.mjs +0 -2
  225. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +0 -196
  226. package/esm2022/lib/layer/layer-legend/index.mjs +0 -2
  227. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +0 -287
  228. package/esm2022/lib/layer/layer-legend-item/index.mjs +0 -2
  229. package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +0 -85
  230. package/esm2022/lib/layer/layer-legend-list/index.mjs +0 -3
  231. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +0 -54
  232. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +0 -104
  233. package/esm2022/lib/layer/layer-list/index.mjs +0 -2
  234. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +0 -232
  235. package/esm2022/lib/layer/layer-list-tool/index.mjs +0 -4
  236. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +0 -92
  237. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +0 -7
  238. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +0 -61
  239. package/esm2022/lib/layer/layer-search/index.mjs +0 -2
  240. package/esm2022/lib/layer/layer-search/layer-search.component.mjs +0 -65
  241. package/esm2022/lib/layer/layer-unavailable/index.mjs +0 -3
  242. package/esm2022/lib/layer/layer-unavailable/layer-unavailable-list/layer-unavailable-list.component.mjs +0 -25
  243. package/esm2022/lib/layer/layer-unavailable/layer-unavailable.component.mjs +0 -35
  244. package/esm2022/lib/layer/layer-viewer/index.mjs +0 -3
  245. package/esm2022/lib/layer/layer-viewer/layer-viewer.component.mjs +0 -226
  246. package/esm2022/lib/layer/layer-viewer/layer-viewer.interface.mjs +0 -2
  247. package/esm2022/lib/layer/layer-viewer-bottom-actions/index.mjs +0 -2
  248. package/esm2022/lib/layer/layer-viewer-bottom-actions/layer-viewer-bottom-actions.component.mjs +0 -207
  249. package/esm2022/lib/layer/layer-visibility-button/index.mjs +0 -2
  250. package/esm2022/lib/layer/layer-visibility-button/layer-visibility-button.component.mjs +0 -83
  251. package/esm2022/lib/layer/layer.module.mjs +0 -107
  252. package/esm2022/lib/layer/shared/clusterParam.mjs +0 -2
  253. package/esm2022/lib/layer/shared/index.mjs +0 -6
  254. package/esm2022/lib/layer/shared/layer-controller.mjs +0 -316
  255. package/esm2022/lib/layer/shared/layer-selection.mjs +0 -38
  256. package/esm2022/lib/layer/shared/layer.enums.mjs +0 -2
  257. package/esm2022/lib/layer/shared/layer.service.mjs +0 -315
  258. package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +0 -2
  259. package/esm2022/lib/layer/shared/layers/any-layer.mjs +0 -2
  260. package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +0 -2
  261. package/esm2022/lib/layer/shared/layers/image-layer.mjs +0 -75
  262. package/esm2022/lib/layer/shared/layers/index.mjs +0 -18
  263. package/esm2022/lib/layer/shared/layers/layer-base.mjs +0 -199
  264. package/esm2022/lib/layer/shared/layers/layer-group.interface.mjs +0 -2
  265. package/esm2022/lib/layer/shared/layers/layer-group.mjs +0 -120
  266. package/esm2022/lib/layer/shared/layers/layer.interface.mjs +0 -7
  267. package/esm2022/lib/layer/shared/layers/layer.mjs +0 -178
  268. package/esm2022/lib/layer/shared/layers/legend.interface.mjs +0 -2
  269. package/esm2022/lib/layer/shared/layers/linked/index.mjs +0 -4
  270. package/esm2022/lib/layer/shared/layers/linked/linked-layer.interface.mjs +0 -12
  271. package/esm2022/lib/layer/shared/layers/linked/linked-layer.mjs +0 -242
  272. package/esm2022/lib/layer/shared/layers/linked/linked-layer.utils.mjs +0 -70
  273. package/esm2022/lib/layer/shared/layers/tile-layer.interface.mjs +0 -2
  274. package/esm2022/lib/layer/shared/layers/tile-layer.mjs +0 -55
  275. package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +0 -2
  276. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +0 -576
  277. package/esm2022/lib/layer/shared/layers/vectortile-layer.interface.mjs +0 -2
  278. package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +0 -112
  279. package/esm2022/lib/layer/track-feature-button/index.mjs +0 -2
  280. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +0 -54
  281. package/esm2022/lib/layer/utils/image-watcher.mjs +0 -62
  282. package/esm2022/lib/layer/utils/index.mjs +0 -6
  283. package/esm2022/lib/layer/utils/layer.utils.mjs +0 -57
  284. package/esm2022/lib/layer/utils/outputLegend.mjs +0 -32
  285. package/esm2022/lib/layer/utils/tile-watcher.mjs +0 -52
  286. package/esm2022/lib/layer/utils/vector-watcher.mjs +0 -50
  287. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +0 -20
  288. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +0 -87
  289. package/esm2022/lib/map/baselayers-switcher/index.mjs +0 -3
  290. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +0 -122
  291. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +0 -78
  292. package/esm2022/lib/map/geolocate-button/index.mjs +0 -2
  293. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +0 -73
  294. package/esm2022/lib/map/home-extent-button/home-extent-button.interface.mjs +0 -2
  295. package/esm2022/lib/map/home-extent-button/index.mjs +0 -3
  296. package/esm2022/lib/map/index.mjs +0 -14
  297. package/esm2022/lib/map/info-section/index.mjs +0 -2
  298. package/esm2022/lib/map/info-section/info-section.component.mjs +0 -15
  299. package/esm2022/lib/map/map-browser/index.mjs +0 -2
  300. package/esm2022/lib/map/map-browser/map-browser.component.mjs +0 -67
  301. package/esm2022/lib/map/map-center/index.mjs +0 -2
  302. package/esm2022/lib/map/map-center/map-center.component.mjs +0 -56
  303. package/esm2022/lib/map/map.module.mjs +0 -89
  304. package/esm2022/lib/map/menu-button/index.mjs +0 -2
  305. package/esm2022/lib/map/menu-button/menu-button.component.mjs +0 -57
  306. package/esm2022/lib/map/offline-button/index.mjs +0 -2
  307. package/esm2022/lib/map/offline-button/offline-button.component.mjs +0 -53
  308. package/esm2022/lib/map/rotation-button/index.mjs +0 -2
  309. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +0 -58
  310. package/esm2022/lib/map/shared/controllers/controller.mjs +0 -44
  311. package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +0 -8
  312. package/esm2022/lib/map/shared/controllers/geolocation.mjs +0 -431
  313. package/esm2022/lib/map/shared/controllers/index.mjs +0 -5
  314. package/esm2022/lib/map/shared/controllers/view.mjs +0 -361
  315. package/esm2022/lib/map/shared/hover-feature.directive.mjs +0 -481
  316. package/esm2022/lib/map/shared/index.mjs +0 -15
  317. package/esm2022/lib/map/shared/linkedLayers.utils.mjs +0 -238
  318. package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +0 -122
  319. package/esm2022/lib/map/shared/map.abstract.mjs +0 -24
  320. package/esm2022/lib/map/shared/map.enums.mjs +0 -6
  321. package/esm2022/lib/map/shared/map.interface.mjs +0 -2
  322. package/esm2022/lib/map/shared/map.mjs +0 -201
  323. package/esm2022/lib/map/shared/map.service.mjs +0 -29
  324. package/esm2022/lib/map/shared/map.utils.mjs +0 -455
  325. package/esm2022/lib/map/shared/mapOffline.directive.mjs +0 -114
  326. package/esm2022/lib/map/shared/projection.interfaces.mjs +0 -2
  327. package/esm2022/lib/map/shared/projection.service.mjs +0 -67
  328. package/esm2022/lib/map/shared/projection.utils.mjs +0 -122
  329. package/esm2022/lib/map/swipe-control/index.mjs +0 -2
  330. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +0 -211
  331. package/esm2022/lib/map/utils/index.mjs +0 -2
  332. package/esm2022/lib/map/utils/layer-watcher.mjs +0 -112
  333. package/esm2022/lib/map/wake-lock-button/index.mjs +0 -2
  334. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +0 -103
  335. package/esm2022/lib/map/zoom-button/index.mjs +0 -2
  336. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +0 -35
  337. package/esm2022/lib/measure/index.mjs +0 -3
  338. package/esm2022/lib/measure/measure.module.mjs +0 -20
  339. package/esm2022/lib/measure/measurer/index.mjs +0 -6
  340. package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +0 -40
  341. package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +0 -38
  342. package/esm2022/lib/measure/measurer/measurer-item.component.mjs +0 -143
  343. package/esm2022/lib/measure/measurer/measurer.component.mjs +0 -948
  344. package/esm2022/lib/measure/measurer/measurer.module.mjs +0 -20
  345. package/esm2022/lib/measure/shared/index.mjs +0 -4
  346. package/esm2022/lib/measure/shared/measure.enum.mjs +0 -37
  347. package/esm2022/lib/measure/shared/measure.interfaces.mjs +0 -2
  348. package/esm2022/lib/measure/shared/measure.utils.mjs +0 -497
  349. package/esm2022/lib/metadata/index.mjs +0 -4
  350. package/esm2022/lib/metadata/metadata-button/index.mjs +0 -2
  351. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +0 -96
  352. package/esm2022/lib/metadata/metadata.module.mjs +0 -29
  353. package/esm2022/lib/metadata/shared/index.mjs +0 -3
  354. package/esm2022/lib/metadata/shared/metadata.interface.mjs +0 -2
  355. package/esm2022/lib/metadata/shared/metadata.service.mjs +0 -18
  356. package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +0 -130
  357. package/esm2022/lib/offline/geoDB/geoDB.enums.mjs +0 -6
  358. package/esm2022/lib/offline/geoDB/geoDB.interface.mjs +0 -2
  359. package/esm2022/lib/offline/geoDB/geoDB.service.mjs +0 -172
  360. package/esm2022/lib/offline/geoDB/index.mjs +0 -5
  361. package/esm2022/lib/offline/index.mjs +0 -6
  362. package/esm2022/lib/offline/layerDB/index.mjs +0 -3
  363. package/esm2022/lib/offline/layerDB/layerDB.interface.mjs +0 -2
  364. package/esm2022/lib/offline/layerDB/layerDB.service.mjs +0 -83
  365. package/esm2022/lib/offline/offline.interface.mjs +0 -2
  366. package/esm2022/lib/offline/offline.provider.mjs +0 -50
  367. package/esm2022/lib/offline/shared/geo-network.service.mjs +0 -79
  368. package/esm2022/lib/offline/shared/index.mjs +0 -2
  369. package/esm2022/lib/overlay/index.mjs +0 -2
  370. package/esm2022/lib/overlay/shared/index.mjs +0 -4
  371. package/esm2022/lib/overlay/shared/overlay.enum.mjs +0 -8
  372. package/esm2022/lib/overlay/shared/overlay.mjs +0 -139
  373. package/esm2022/lib/overlay/shared/overlay.utils.mjs +0 -17
  374. package/esm2022/lib/print/index.mjs +0 -4
  375. package/esm2022/lib/print/print/print.component.mjs +0 -116
  376. package/esm2022/lib/print/print-form/index.mjs +0 -2
  377. package/esm2022/lib/print/print-form/print-form.component.mjs +0 -320
  378. package/esm2022/lib/print/print.module.mjs +0 -20
  379. package/esm2022/lib/print/shared/geopdf.mjs +0 -68
  380. package/esm2022/lib/print/shared/index.mjs +0 -5
  381. package/esm2022/lib/print/shared/print.interface.mjs +0 -2
  382. package/esm2022/lib/print/shared/print.service.mjs +0 -1136
  383. package/esm2022/lib/print/shared/print.type.mjs +0 -30
  384. package/esm2022/lib/query/index.mjs +0 -2
  385. package/esm2022/lib/query/query.module.mjs +0 -27
  386. package/esm2022/lib/query/shared/index.mjs +0 -8
  387. package/esm2022/lib/query/shared/query-search-source.mjs +0 -35
  388. package/esm2022/lib/query/shared/query-search-source.providers.mjs +0 -22
  389. package/esm2022/lib/query/shared/query.directive.mjs +0 -290
  390. package/esm2022/lib/query/shared/query.enums.mjs +0 -32
  391. package/esm2022/lib/query/shared/query.interfaces.mjs +0 -2
  392. package/esm2022/lib/query/shared/query.service.mjs +0 -753
  393. package/esm2022/lib/query/shared/query.utils.mjs +0 -45
  394. package/esm2022/lib/search/index.mjs +0 -10
  395. package/esm2022/lib/search/search-bar/search-bar.component.mjs +0 -483
  396. package/esm2022/lib/search/search-bar/search-bar.module.mjs +0 -19
  397. package/esm2022/lib/search/search-results/index.mjs +0 -5
  398. package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +0 -101
  399. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +0 -433
  400. package/esm2022/lib/search/search-results/search-results-item.component.mjs +0 -119
  401. package/esm2022/lib/search/search-results/search-results.component.mjs +0 -297
  402. package/esm2022/lib/search/search-results/search-results.directive.mjs +0 -7
  403. package/esm2022/lib/search/search-results/search-results.module.mjs +0 -20
  404. package/esm2022/lib/search/search-selector/search-selector.component.mjs +0 -118
  405. package/esm2022/lib/search/search-selector/search-selector.module.mjs +0 -19
  406. package/esm2022/lib/search/search-settings/search-settings.component.mjs +0 -264
  407. package/esm2022/lib/search/search-settings/search-settings.module.mjs +0 -19
  408. package/esm2022/lib/search/search.module.mjs +0 -77
  409. package/esm2022/lib/search/shared/index.mjs +0 -10
  410. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +0 -328
  411. package/esm2022/lib/search/shared/search-source-service.providers.mjs +0 -20
  412. package/esm2022/lib/search/shared/search-source.service.mjs +0 -56
  413. package/esm2022/lib/search/shared/search.enums.mjs +0 -4
  414. package/esm2022/lib/search/shared/search.interfaces.mjs +0 -2
  415. package/esm2022/lib/search/shared/search.provider.mjs +0 -20
  416. package/esm2022/lib/search/shared/search.service.mjs +0 -149
  417. package/esm2022/lib/search/shared/search.utils.mjs +0 -92
  418. package/esm2022/lib/search/shared/sources/cadastre.mjs +0 -142
  419. package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +0 -32
  420. package/esm2022/lib/search/shared/sources/coordinates.interfaces.mjs +0 -2
  421. package/esm2022/lib/search/shared/sources/coordinates.mjs +0 -168
  422. package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +0 -52
  423. package/esm2022/lib/search/shared/sources/icherche-icons.mjs +0 -32
  424. package/esm2022/lib/search/shared/sources/icherche.interfaces.mjs +0 -2
  425. package/esm2022/lib/search/shared/sources/icherche.mjs +0 -816
  426. package/esm2022/lib/search/shared/sources/icherche.providers.mjs +0 -87
  427. package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +0 -2
  428. package/esm2022/lib/search/shared/sources/ilayer.mjs +0 -339
  429. package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +0 -58
  430. package/esm2022/lib/search/shared/sources/index.mjs +0 -23
  431. package/esm2022/lib/search/shared/sources/nominatim.interfaces.mjs +0 -2
  432. package/esm2022/lib/search/shared/sources/nominatim.mjs +0 -263
  433. package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +0 -31
  434. package/esm2022/lib/search/shared/sources/source.interfaces.mjs +0 -13
  435. package/esm2022/lib/search/shared/sources/source.mjs +0 -221
  436. package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +0 -2
  437. package/esm2022/lib/search/shared/sources/storedqueries.mjs +0 -454
  438. package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +0 -56
  439. package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +0 -2
  440. package/esm2022/lib/search/shared/sources/workspace.mjs +0 -192
  441. package/esm2022/lib/search/shared/sources/workspace.providers.mjs +0 -31
  442. package/esm2022/lib/style/index.mjs +0 -5
  443. package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +0 -360
  444. package/esm2022/lib/style/shared/datasource/index.mjs +0 -2
  445. package/esm2022/lib/style/shared/feature/feature-style.mjs +0 -162
  446. package/esm2022/lib/style/shared/feature/index.mjs +0 -2
  447. package/esm2022/lib/style/shared/font.enum.mjs +0 -17
  448. package/esm2022/lib/style/shared/index.mjs +0 -5
  449. package/esm2022/lib/style/shared/overlay/index.mjs +0 -3
  450. package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +0 -39
  451. package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +0 -88
  452. package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +0 -78
  453. package/esm2022/lib/style/shared/vector/conversion.utils.mjs +0 -27
  454. package/esm2022/lib/style/shared/vector/index.mjs +0 -4
  455. package/esm2022/lib/style/shared/vector/vector-style.interface.mjs +0 -2
  456. package/esm2022/lib/style/style-list/index.mjs +0 -5
  457. package/esm2022/lib/style/style-list/style-list.interface.mjs +0 -2
  458. package/esm2022/lib/style/style-list/style-list.module.mjs +0 -23
  459. package/esm2022/lib/style/style-list/style-list.provider.mjs +0 -21
  460. package/esm2022/lib/style/style-list/style-list.service.mjs +0 -52
  461. package/esm2022/lib/style/style-modal/drawing/index.mjs +0 -2
  462. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +0 -193
  463. package/esm2022/lib/style/style-modal/index.mjs +0 -5
  464. package/esm2022/lib/style/style-modal/layer/index.mjs +0 -2
  465. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +0 -142
  466. package/esm2022/lib/style/style-modal/layer-button/index.mjs +0 -2
  467. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +0 -44
  468. package/esm2022/lib/style/style-modal/shared/index.mjs +0 -2
  469. package/esm2022/lib/style/style-modal/shared/style-modal.interface.mjs +0 -2
  470. package/esm2022/lib/style/style-service/draw-style.service.mjs +0 -255
  471. package/esm2022/lib/style/style-service/index.mjs +0 -3
  472. package/esm2022/lib/style/style-service/style.service.mjs +0 -393
  473. package/esm2022/lib/style/style.module.mjs +0 -46
  474. package/esm2022/lib/toast/index.mjs +0 -2
  475. package/esm2022/lib/toast/toast.component.mjs +0 -99
  476. package/esm2022/lib/toast/toast.module.mjs +0 -24
  477. package/esm2022/lib/utils/googleLinks.mjs +0 -13
  478. package/esm2022/lib/utils/id-generator.mjs +0 -112
  479. package/esm2022/lib/utils/index.mjs +0 -5
  480. package/esm2022/lib/utils/osmLinks.mjs +0 -9
  481. package/esm2022/lib/utils/propertyTypeDetector/index.mjs +0 -3
  482. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.interface.mjs +0 -2
  483. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +0 -64
  484. package/esm2022/lib/wkt/index.mjs +0 -2
  485. package/esm2022/lib/wkt/shared/index.mjs +0 -2
  486. package/esm2022/lib/wkt/shared/wkt.service.mjs +0 -235
  487. package/esm2022/lib/wkt/wkt.module.mjs +0 -25
  488. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +0 -36
  489. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +0 -19
  490. package/esm2022/lib/workspace/confirmation-popup/index.mjs +0 -3
  491. package/esm2022/lib/workspace/index.mjs +0 -8
  492. package/esm2022/lib/workspace/shared/edition-workspace.mjs +0 -301
  493. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +0 -720
  494. package/esm2022/lib/workspace/shared/feature-workspace.mjs +0 -41
  495. package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +0 -113
  496. package/esm2022/lib/workspace/shared/index.mjs +0 -8
  497. package/esm2022/lib/workspace/shared/wfs-workspace.mjs +0 -41
  498. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +0 -121
  499. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +0 -248
  500. package/esm2022/lib/workspace/shared/workspace.utils.mjs +0 -188
  501. package/esm2022/lib/workspace/widgets/index.mjs +0 -4
  502. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +0 -48
  503. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +0 -19
  504. package/esm2022/lib/workspace/widgets/widgets.mjs +0 -15
  505. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +0 -172
  506. package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +0 -19
  507. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +0 -137
  508. package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +0 -19
  509. package/esm2022/lib/workspace/workspace.module.mjs +0 -32
  510. package/esm2022/public_api.mjs +0 -56
@@ -1,538 +0,0 @@
1
- import OlFeature from 'ol/Feature';
2
- import { unByKey } from 'ol/Observable';
3
- import OlLinearRing from 'ol/geom/LinearRing';
4
- import OlPolygon from 'ol/geom/Polygon';
5
- import OlDragBoxInteraction from 'ol/interaction/DragBox';
6
- import OlDraw from 'ol/interaction/Draw';
7
- import OlModify from 'ol/interaction/Modify';
8
- import OlTranslate from 'ol/interaction/Translate';
9
- import OlVectorLayer from 'ol/layer/Vector';
10
- import OlVectorSource from 'ol/source/Vector';
11
- import { Subject, fromEvent } from 'rxjs';
12
- import { addLinearRingToOlPolygon, createDrawHoleInteractionStyle, getMousePositionFromOlGeometryEvent } from '../geometry.utils';
13
- /**
14
- * Control to modify geometries
15
- */
16
- export class ModifyControl {
17
- options;
18
- /**
19
- * Modify start observable
20
- */
21
- start$ = new Subject();
22
- /**
23
- * Modify end observable
24
- */
25
- end$ = new Subject();
26
- /**
27
- * Geometry changes observable
28
- */
29
- changes$ = new Subject();
30
- olMap;
31
- olOverlayLayer;
32
- olModifyInteraction;
33
- onModifyStartKey;
34
- onModifyEndKey;
35
- onModifyKey;
36
- olModifyInteractionIsActive = false;
37
- olTranslateInteraction;
38
- onTranslateStartKey;
39
- onTranslateEndKey;
40
- onTranslateKey;
41
- olTranslateInteractionIsActive = false;
42
- olDrawInteraction;
43
- onDrawStartKey;
44
- onDrawEndKey;
45
- onDrawKey;
46
- olDrawInteractionIsActive = false;
47
- mousePosition;
48
- keyDown$$;
49
- drawKeyUp$$;
50
- drawKeyDown$$;
51
- removedOlInteractions = [];
52
- olLinearRingsLayer;
53
- // This is the geometry to test against when drawing holes
54
- olOuterGeometry;
55
- /**
56
- * Wheter the control is active
57
- */
58
- get active() {
59
- return this.olMap !== undefined;
60
- }
61
- /**
62
- * OL overlay source
63
- * @internal
64
- */
65
- get olOverlaySource() {
66
- return this.olOverlayLayer.getSource();
67
- }
68
- /**
69
- * OL linear rings source
70
- * @internal
71
- */
72
- get olLinearRingsSource() {
73
- return this.olLinearRingsLayer.getSource();
74
- }
75
- /**
76
- * Whether a modify control should be available
77
- */
78
- modify = true;
79
- /**
80
- * Whether a translate control should be available
81
- */
82
- translate = true;
83
- constructor(options) {
84
- this.options = options;
85
- if (options.modify !== undefined) {
86
- this.modify = options.modify;
87
- }
88
- if (options.translate !== undefined) {
89
- this.translate = options.translate;
90
- }
91
- if (options.layer !== undefined) {
92
- this.olOverlayLayer = options.layer;
93
- }
94
- else {
95
- this.olOverlayLayer = this.createOlInnerOverlayLayer();
96
- }
97
- this.olLinearRingsLayer = this.createOlLinearRingsLayer();
98
- }
99
- /**
100
- * Add or remove this control to/from a map.
101
- * @param map OL Map
102
- */
103
- setOlMap(olMap) {
104
- if (olMap === undefined) {
105
- this.clearOlInnerOverlaySource();
106
- this.removeOlInnerOverlayLayer();
107
- this.removeOlModifyInteraction();
108
- this.removeOlTranslateInteraction();
109
- this.removeOlDrawInteraction();
110
- this.olMap = olMap;
111
- return;
112
- }
113
- this.olMap = olMap;
114
- this.addOlInnerOverlayLayer();
115
- // The order in which these interactions
116
- // are added is important
117
- if (this.modify === true) {
118
- this.addOlDrawInteraction();
119
- }
120
- if (this.translate === true) {
121
- this.addOlTranslateInteraction();
122
- this.activateTranslateInteraction();
123
- }
124
- if (this.modify === true) {
125
- this.addOlModifyInteraction();
126
- this.activateModifyInteraction();
127
- }
128
- }
129
- /**
130
- * Return the overlay source
131
- */
132
- getSource() {
133
- return this.olOverlaySource;
134
- }
135
- /**
136
- * Add an OL geometry to the overlay and start modifying it
137
- * @param olGeometry Ol Geometry
138
- */
139
- setOlGeometry(olGeometry) {
140
- const olFeature = new OlFeature({ geometry: olGeometry });
141
- this.olOverlaySource.clear();
142
- this.olOverlaySource.addFeature(olFeature);
143
- }
144
- /**
145
- * Create an overlay source if none is defined in the options
146
- */
147
- createOlInnerOverlayLayer() {
148
- return new OlVectorLayer({
149
- source: this.options.source ? this.options.source : new OlVectorSource(),
150
- style: this.options.layerStyle,
151
- zIndex: 500
152
- });
153
- }
154
- /**
155
- * Add the overlay layer if it wasn't defined in the options
156
- */
157
- addOlInnerOverlayLayer() {
158
- if (this.options.layer === undefined) {
159
- this.olMap.addLayer(this.olOverlayLayer);
160
- }
161
- }
162
- /**
163
- * Clear the overlay layer if it wasn't defined in the options
164
- */
165
- removeOlInnerOverlayLayer() {
166
- if (this.options.layer === undefined && this.olMap !== undefined) {
167
- this.olMap.removeLayer(this.olOverlayLayer);
168
- }
169
- }
170
- /**
171
- * Clear the overlay source if it wasn't defined in the options
172
- */
173
- clearOlInnerOverlaySource() {
174
- if (this.options.layer === undefined && this.options.source === undefined) {
175
- this.olOverlaySource.clear(true);
176
- }
177
- }
178
- createOlLinearRingsLayer() {
179
- return new OlVectorLayer({
180
- source: new OlVectorSource(),
181
- style: createDrawHoleInteractionStyle(),
182
- zIndex: 500
183
- });
184
- }
185
- /**
186
- * Add the linear rings layer
187
- */
188
- addOlLinearRingsLayer() {
189
- this.olMap.addLayer(this.olLinearRingsLayer);
190
- }
191
- /**
192
- * Clear the linear rings layer
193
- */
194
- removeOlLinearRingsLayer() {
195
- this.olMap.removeLayer(this.olLinearRingsLayer);
196
- }
197
- /**
198
- * Clear the linear rings source
199
- */
200
- clearOlLinearRingsSource() {
201
- this.olLinearRingsSource.clear(true);
202
- }
203
- /**
204
- * Add a modify interaction to the map an set up some listeners
205
- */
206
- addOlModifyInteraction() {
207
- const olModifyInteraction = new OlModify({
208
- source: this.olOverlaySource,
209
- style: this.options.drawStyle
210
- });
211
- this.olModifyInteraction = olModifyInteraction;
212
- }
213
- /**
214
- * Remove the modify interaction
215
- */
216
- removeOlModifyInteraction() {
217
- if (this.olModifyInteraction === undefined) {
218
- return;
219
- }
220
- this.deactivateModifyInteraction();
221
- this.olModifyInteraction = undefined;
222
- }
223
- activateModifyInteraction() {
224
- if (this.olModifyInteractionIsActive === true) {
225
- return;
226
- }
227
- this.olModifyInteractionIsActive = true;
228
- this.onModifyStartKey = this.olModifyInteraction.on('modifystart', (event) => this.onModifyStart(event));
229
- this.onModifyEndKey = this.olModifyInteraction.on('modifyend', (event) => this.onModifyEnd(event));
230
- this.olMap.addInteraction(this.olModifyInteraction);
231
- }
232
- deactivateModifyInteraction() {
233
- if (this.olModifyInteractionIsActive === false) {
234
- return;
235
- }
236
- this.olModifyInteractionIsActive = false;
237
- unByKey([this.onModifyStartKey, this.onModifyEndKey, this.onModifyKey]);
238
- if (this.olMap !== undefined) {
239
- this.olMap.removeInteraction(this.olModifyInteraction);
240
- }
241
- }
242
- /**
243
- * When modifying starts, clear the overlay and start watching for changes
244
- * @param event Modify start event
245
- */
246
- onModifyStart(event) {
247
- const olGeometry = event.features.item(0).getGeometry();
248
- this.start$.next(olGeometry);
249
- this.onModifyKey = olGeometry.on('change', (olGeometryEvent) => {
250
- this.mousePosition =
251
- getMousePositionFromOlGeometryEvent(olGeometryEvent);
252
- this.changes$.next(olGeometryEvent.target);
253
- });
254
- this.subscribeToKeyDown();
255
- }
256
- /**
257
- * When modifying ends, update the geometry observable and stop watching for changes
258
- * @param event Modify end event
259
- */
260
- onModifyEnd(event) {
261
- unByKey(this.onModifyKey);
262
- this.end$.next(event.features.item(0).getGeometry());
263
- this.unsubscribeToKeyDown();
264
- }
265
- /**
266
- * Subscribe to space key down to pan the map
267
- */
268
- subscribeToKeyDown() {
269
- this.keyDown$$ = fromEvent(document, 'keydown').subscribe((event) => {
270
- if (event.key === ' ') {
271
- // On space bar, pan to the current mouse position
272
- this.olMap.getView().animate({
273
- center: this.mousePosition,
274
- duration: 0
275
- });
276
- return;
277
- }
278
- });
279
- }
280
- /**
281
- * Unsubscribe to key down
282
- */
283
- unsubscribeToKeyDown() {
284
- if (this.keyDown$$ !== undefined) {
285
- this.keyDown$$.unsubscribe();
286
- }
287
- }
288
- /**
289
- * Add a translate interaction to the map an set up some listeners
290
- */
291
- addOlTranslateInteraction() {
292
- const olTranslateInteraction = new OlTranslate({
293
- layers: [this.olOverlayLayer]
294
- });
295
- this.olTranslateInteraction = olTranslateInteraction;
296
- }
297
- /**
298
- * Remove the translate interaction
299
- */
300
- removeOlTranslateInteraction() {
301
- if (this.olTranslateInteraction === undefined) {
302
- return;
303
- }
304
- this.deactivateTranslateInteraction();
305
- this.olTranslateInteraction = undefined;
306
- }
307
- activateTranslateInteraction() {
308
- if (this.olTranslateInteractionIsActive === true) {
309
- return;
310
- }
311
- this.olTranslateInteractionIsActive = true;
312
- this.onTranslateStartKey = this.olTranslateInteraction.on('translatestart', (event) => this.onTranslateStart(event));
313
- this.onTranslateEndKey = this.olTranslateInteraction.on('translateend', (event) => this.onTranslateEnd(event));
314
- this.olMap.addInteraction(this.olTranslateInteraction);
315
- }
316
- deactivateTranslateInteraction() {
317
- if (this.olTranslateInteractionIsActive === false) {
318
- return;
319
- }
320
- this.olTranslateInteractionIsActive = false;
321
- unByKey([
322
- this.onTranslateStartKey,
323
- this.onTranslateEndKey,
324
- this.onTranslateKey
325
- ]);
326
- if (this.olMap !== undefined) {
327
- this.olMap.removeInteraction(this.olTranslateInteraction);
328
- }
329
- }
330
- /**
331
- * When translation starts, clear the overlay and start watching for changes
332
- * @param event Translate start event
333
- */
334
- onTranslateStart(event) {
335
- const olGeometry = event.features.item(0).getGeometry();
336
- this.start$.next(olGeometry);
337
- }
338
- /**
339
- * When translation ends, update the geometry observable and stop watchign for changes
340
- * @param event Translate end event
341
- */
342
- onTranslateEnd(event) {
343
- unByKey(this.onTranslateKey);
344
- this.end$.next(event.features.item(0).getGeometry());
345
- }
346
- /**
347
- * Add a draw interaction to the map an set up some listeners
348
- */
349
- addOlDrawInteraction() {
350
- const olDrawInteraction = new OlDraw({
351
- type: 'Polygon',
352
- source: this.olLinearRingsSource,
353
- stopClick: true,
354
- style: createDrawHoleInteractionStyle(),
355
- condition: (event) => {
356
- const olOuterGeometry = this.olOuterGeometry || this.getOlGeometry();
357
- const intersects = olOuterGeometry.intersectsCoordinate(event.coordinate);
358
- return intersects;
359
- }
360
- });
361
- this.olDrawInteraction = olDrawInteraction;
362
- this.subscribeToDrawKeyDown();
363
- }
364
- /**
365
- * Subscribe to CTRL key down to activate the draw control
366
- */
367
- subscribeToDrawKeyDown() {
368
- this.drawKeyDown$$ = fromEvent(document, 'keydown').subscribe((event) => {
369
- if (event.key !== 'Control') {
370
- return;
371
- }
372
- this.unsubscribeToDrawKeyDown();
373
- const olGeometry = this.getOlGeometry();
374
- if (!olGeometry || !(olGeometry instanceof OlPolygon)) {
375
- return;
376
- }
377
- this.subscribeToDrawKeyUp();
378
- this.deactivateModifyInteraction();
379
- this.deactivateTranslateInteraction();
380
- this.activateDrawInteraction();
381
- });
382
- }
383
- /**
384
- * Subscribe to CTRL key up to deactivate the draw control
385
- */
386
- subscribeToDrawKeyUp() {
387
- this.drawKeyUp$$ = fromEvent(document, 'keyup').subscribe((event) => {
388
- if (event.key !== 'Control') {
389
- return;
390
- }
391
- this.unsubscribeToDrawKeyUp();
392
- this.unsubscribeToKeyDown();
393
- this.deactivateDrawInteraction();
394
- this.activateModifyInteraction();
395
- if (this.translate === true) {
396
- this.activateTranslateInteraction();
397
- }
398
- this.subscribeToDrawKeyDown();
399
- this.olOuterGeometry = undefined;
400
- this.clearOlLinearRingsSource();
401
- this.end$.next(this.getOlGeometry());
402
- });
403
- }
404
- /**
405
- * Unsubscribe to draw key down
406
- */
407
- unsubscribeToDrawKeyDown() {
408
- if (this.drawKeyDown$$ !== undefined) {
409
- this.drawKeyDown$$.unsubscribe();
410
- }
411
- }
412
- /**
413
- * Unsubscribe to key up
414
- */
415
- unsubscribeToDrawKeyUp() {
416
- if (this.drawKeyUp$$ !== undefined) {
417
- this.drawKeyUp$$.unsubscribe();
418
- }
419
- }
420
- /**
421
- * Remove the draw interaction
422
- */
423
- removeOlDrawInteraction() {
424
- if (this.olDrawInteraction === undefined) {
425
- return;
426
- }
427
- this.unsubscribeToKeyDown();
428
- this.unsubscribeToDrawKeyUp();
429
- this.unsubscribeToDrawKeyDown();
430
- this.deactivateDrawInteraction();
431
- this.clearOlLinearRingsSource();
432
- this.olDrawInteraction = undefined;
433
- }
434
- /**
435
- * Activate the draw interaction
436
- */
437
- activateDrawInteraction() {
438
- if (this.olDrawInteractionIsActive === true) {
439
- return;
440
- }
441
- this.clearOlLinearRingsSource();
442
- this.addOlLinearRingsLayer();
443
- this.olMap.getInteractions().forEach((olInteraction) => {
444
- if (olInteraction instanceof OlDragBoxInteraction) {
445
- this.olMap.removeInteraction(olInteraction);
446
- this.removedOlInteractions.push(olInteraction);
447
- }
448
- });
449
- this.olDrawInteractionIsActive = true;
450
- this.onDrawStartKey = this.olDrawInteraction.on('drawstart', (event) => this.onDrawStart(event));
451
- this.onDrawEndKey = this.olDrawInteraction.on('drawend', (event) => this.onDrawEnd(event));
452
- this.olMap.addInteraction(this.olDrawInteraction);
453
- }
454
- /**
455
- * Deactivate the draw interaction
456
- */
457
- deactivateDrawInteraction() {
458
- if (this.olDrawInteractionIsActive === false) {
459
- return;
460
- }
461
- this.removeOlLinearRingsLayer();
462
- this.removedOlInteractions.forEach((olInteraction) => {
463
- this.olMap.addInteraction(olInteraction);
464
- });
465
- this.removedOlInteractions = [];
466
- this.olDrawInteractionIsActive = false;
467
- unByKey([this.onDrawStartKey, this.onDrawEndKey, this.onDrawKey]);
468
- if (this.olMap !== undefined) {
469
- this.olMap.removeInteraction(this.olDrawInteraction);
470
- }
471
- }
472
- /**
473
- * When draw start, add a new linerar ring to the geometry and start watching for changes
474
- * @param event Draw start event
475
- */
476
- onDrawStart(event) {
477
- const olGeometry = event.feature.getGeometry();
478
- this.olOuterGeometry = this.getOlGeometry().clone();
479
- const linearRingCoordinates = olGeometry.getLinearRing().getCoordinates();
480
- this.addLinearRingToOlGeometry(linearRingCoordinates);
481
- this.start$.next(this.getOlGeometry());
482
- this.onDrawKey = olGeometry.on('change', (olGeometryEvent) => {
483
- this.mousePosition = getMousePositionFromOlGeometryEvent(olGeometryEvent);
484
- const olGeometryTarget = olGeometryEvent.target;
485
- const _linearRingCoordinates = olGeometryTarget
486
- .getLinearRing(0)
487
- .getCoordinates();
488
- this.updateLinearRingOfOlGeometry(_linearRingCoordinates);
489
- this.changes$.next(this.getOlGeometry());
490
- });
491
- this.subscribeToKeyDown();
492
- }
493
- /**
494
- * When translation ends, update the geometry observable and stop watchign for changes
495
- * @param event Draw end event
496
- */
497
- onDrawEnd(event) {
498
- unByKey(this.onDrawKey);
499
- this.olOuterGeometry = undefined;
500
- const linearRingCoordinates = event.feature.getGeometry().getLinearRing().getCoordinates();
501
- this.updateLinearRingOfOlGeometry(linearRingCoordinates);
502
- this.clearOlLinearRingsSource();
503
- this.end$.next(this.getOlGeometry());
504
- this.unsubscribeToKeyDown();
505
- }
506
- /**
507
- * Add a linear ring to the geometry being modified
508
- * @param coordinates Linear ring coordinates
509
- */
510
- addLinearRingToOlGeometry(coordinates) {
511
- const olGeometry = this.getOlGeometry();
512
- const olLinearRing = new OlLinearRing(coordinates);
513
- addLinearRingToOlPolygon(olGeometry, olLinearRing);
514
- }
515
- /**
516
- * Update the last linear ring of the geometry being modified
517
- * @param coordinates Linear ring coordinates
518
- */
519
- updateLinearRingOfOlGeometry(coordinates) {
520
- const olGeometry = this.getOlGeometry();
521
- // Remove the last linear ring (the one we are updating)
522
- const olLinearRings = olGeometry.getLinearRings().slice(0, -1);
523
- const newCoordinates = olLinearRings.map((olLinearRing) => {
524
- return olLinearRing.getCoordinates();
525
- });
526
- newCoordinates.push(coordinates);
527
- olGeometry.setCoordinates(newCoordinates);
528
- }
529
- /**
530
- * Get the geometry being modified
531
- * @returns OL Geometry
532
- */
533
- getOlGeometry() {
534
- const olFeatures = this.olOverlaySource.getFeatures();
535
- return olFeatures.length > 0 ? olFeatures[0].getGeometry() : undefined;
536
- }
537
- }
538
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kaWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvZ2VvbWV0cnkvc2hhcmVkL2NvbnRyb2xzL21vZGlmeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFHbkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUt4QyxPQUFPLFlBQVksTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLG9CQUFvQixNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sTUFBTSxNQUFNLHFCQUFxQixDQUFDO0FBR3pDLE9BQU8sUUFBUSxNQUFNLHVCQUF1QixDQUFDO0FBRTdDLE9BQU8sV0FBVyxNQUFNLDBCQUEwQixDQUFDO0FBRW5ELE9BQU8sYUFBYSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sY0FBYyxNQUFNLGtCQUFrQixDQUFDO0FBSTlDLE9BQU8sRUFBRSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV4RCxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLDhCQUE4QixFQUM5QixtQ0FBbUMsRUFDcEMsTUFBTSxtQkFBbUIsQ0FBQztBQVczQjs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBK0VKO0lBOUVwQjs7T0FFRztJQUNJLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO0lBRTFDOztPQUVHO0lBQ0ksSUFBSSxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7SUFFeEM7O09BRUc7SUFDSSxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztJQUVwQyxLQUFLLENBQVE7SUFDYixjQUFjLENBQXFCO0lBQ3BDLG1CQUFtQixDQUFXO0lBQzdCLGdCQUFnQixDQUFNO0lBQ3RCLGNBQWMsQ0FBTTtJQUNwQixXQUFXLENB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QUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDekUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE9sRmVhdHVyZSBmcm9tICdvbC9GZWF0dXJlJztcbmltcG9ydCBPbE1hcCBmcm9tICdvbC9NYXAnO1xuaW1wb3J0IE1hcEJyb3dzZXJFdmVudCBmcm9tICdvbC9NYXBCcm93c2VyRXZlbnQnO1xuaW1wb3J0IHsgdW5CeUtleSB9IGZyb20gJ29sL09ic2VydmFibGUnO1xuaW1wb3J0IEJhc2ljRXZlbnQgZnJvbSAnb2wvZXZlbnRzL0V2ZW50JztcbmltcG9ydCBPbENpcmNsZSBmcm9tICdvbC9nZW9tL0NpcmNsZSc7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0IE9sTGluZVN0cmluZyBmcm9tICdvbC9nZW9tL0xpbmVTdHJpbmcnO1xuaW1wb3J0IE9sTGluZWFyUmluZyBmcm9tICdvbC9nZW9tL0xpbmVhclJpbmcnO1xuaW1wb3J0IE9sUG9seWdvbiBmcm9tICdvbC9nZW9tL1BvbHlnb24nO1xuaW1wb3J0IE9sRHJhZ0JveEludGVyYWN0aW9uIGZyb20gJ29sL2ludGVyYWN0aW9uL0RyYWdCb3gnO1xuaW1wb3J0IE9sRHJhdyBmcm9tICdvbC9pbnRlcmFjdGlvbi9EcmF3JztcbmltcG9ydCB7IERyYXdFdmVudCBhcyBPbERyYXdFdmVudCB9IGZyb20gJ29sL2ludGVyYWN0aW9uL0RyYXcnO1xuaW1wb3J0IE9sSW50ZXJhY3Rpb24gZnJvbSAnb2wvaW50ZXJhY3Rpb24vSW50ZXJhY3Rpb24nO1xuaW1wb3J0IE9sTW9kaWZ5IGZyb20gJ29sL2ludGVyYWN0aW9uL01vZGlmeSc7XG5pbXBvcnQgeyBNb2RpZnlFdmVudCBhcyBPbE1vZGlmeUV2ZW50IH0gZnJvbSAnb2wvaW50ZXJhY3Rpb24vTW9kaWZ5JztcbmltcG9ydCBPbFRyYW5zbGF0ZSBmcm9tICdvbC9pbnRlcmFjdGlvbi9UcmFuc2xhdGUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlRXZlbnQgYXMgT2xUcmFuc2xhdGVFdmVudCB9IGZyb20gJ29sL2ludGVyYWN0aW9uL1RyYW5zbGF0ZSc7XG5pbXBvcnQgT2xWZWN0b3JMYXllciBmcm9tICdvbC9sYXllci9WZWN0b3InO1xuaW1wb3J0IE9sVmVjdG9yU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xuaW1wb3J0ICogYXMgT2xTdHlsZSBmcm9tICdvbC9zdHlsZSc7XG5pbXBvcnQgeyBTdHlsZUxpa2UgYXMgT2xTdHlsZUxpa2UgfSBmcm9tICdvbC9zdHlsZS9TdHlsZSc7XG5cbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIGFkZExpbmVhclJpbmdUb09sUG9seWdvbixcbiAgY3JlYXRlRHJhd0hvbGVJbnRlcmFjdGlvblN0eWxlLFxuICBnZXRNb3VzZVBvc2l0aW9uRnJvbU9sR2VvbWV0cnlFdmVudFxufSBmcm9tICcuLi9nZW9tZXRyeS51dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kaWZ5Q29udHJvbE9wdGlvbnMge1xuICBzb3VyY2U/OiBPbFZlY3RvclNvdXJjZTxhbnk+O1xuICBsYXllcj86IE9sVmVjdG9yTGF5ZXI8YW55PjtcbiAgbGF5ZXJTdHlsZT86IE9sU3R5bGVMaWtlO1xuICBkcmF3U3R5bGU/OiBPbFN0eWxlTGlrZTtcbiAgbW9kaWZ5PzogYm9vbGVhbjtcbiAgdHJhbnNsYXRlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb250cm9sIHRvIG1vZGlmeSBnZW9tZXRyaWVzXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2RpZnlDb250cm9sIHtcbiAgLyoqXG4gICAqIE1vZGlmeSBzdGFydCBvYnNlcnZhYmxlXG4gICAqL1xuICBwdWJsaWMgc3RhcnQkID0gbmV3IFN1YmplY3Q8T2xHZW9tZXRyeT4oKTtcblxuICAvKipcbiAgICogTW9kaWZ5IGVuZCBvYnNlcnZhYmxlXG4gICAqL1xuICBwdWJsaWMgZW5kJCA9IG5ldyBTdWJqZWN0PE9sR2VvbWV0cnk+KCk7XG5cbiAgLyoqXG4gICAqIEdlb21ldHJ5IGNoYW5nZXMgb2JzZXJ2YWJsZVxuICAgKi9cbiAgcHVibGljIGNoYW5nZXMkID0gbmV3IFN1YmplY3Q8T2xHZW9tZXRyeT4oKTtcblxuICBwcml2YXRlIG9sTWFwOiBPbE1hcDtcbiAgcHJpdmF0ZSBvbE92ZXJsYXlMYXllcjogT2xWZWN0b3JMYXllcjxhbnk+O1xuICBwdWJsaWMgb2xNb2RpZnlJbnRlcmFjdGlvbjogT2xNb2RpZnk7XG4gIHByaXZhdGUgb25Nb2RpZnlTdGFydEtleTogYW55O1xuICBwcml2YXRlIG9uTW9kaWZ5RW5kS2V5OiBhbnk7XG4gIHByaXZhdGUgb25Nb2RpZnlLZXk6IGFueTtcbiAgcHJpdmF0ZSBvbE1vZGlmeUludGVyYWN0aW9uSXNBY3RpdmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBvbFRyYW5zbGF0ZUludGVyYWN0aW9uOiBPbFRyYW5zbGF0ZTtcbiAgcHJpdmF0ZSBvblRyYW5zbGF0ZVN0YXJ0S2V5OiBhbnk7XG4gIHByaXZhdGUgb25UcmFuc2xhdGVFbmRLZXk6IGFueTtcbiAgcHJpdmF0ZSBvblRyYW5zbGF0ZUtleTogYW55O1xuICBwcml2YXRlIG9sVHJhbnNsYXRlSW50ZXJhY3Rpb25Jc0FjdGl2ZSA9IGZhbHNlO1xuICBwcml2YXRlIG9sRHJhd0ludGVyYWN0aW9uOiBPbERyYXc7XG4gIHByaXZhdGUgb25EcmF3U3RhcnRLZXk6IGFueTtcbiAgcHJpdmF0ZSBvbkRyYXdFbmRLZXk6IGFueTtcbiAgcHJpdmF0ZSBvbkRyYXdLZXk6IGFueTtcbiAgcHJpdmF0ZSBvbERyYXdJbnRlcmFjdGlvbklzQWN0aXZlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBtb3VzZVBvc2l0aW9uOiBbbnVtYmVyLCBudW1iZXJdO1xuXG4gIHByaXZhdGUga2V5RG93biQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZHJhd0tleVVwJCQ6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBkcmF3S2V5RG93biQkOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSByZW1vdmVkT2xJbnRlcmFjdGlvbnM6IE9sSW50ZXJhY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIG9sTGluZWFyUmluZ3NMYXllcjogT2xWZWN0b3JMYXllcjxhbnk+O1xuXG4gIC8vIFRoaXMgaXMgdGhlIGdlb21ldHJ5IHRvIHRlc3QgYWdhaW5zdCB3aGVuIGRyYXdpbmcgaG9sZXNcbiAgcHJpdmF0ZSBvbE91dGVyR2VvbWV0cnk6IE9sR2VvbWV0cnk7XG5cbiAgLyoqXG4gICAqIFdoZXRlciB0aGUgY29udHJvbCBpcyBhY3RpdmVcbiAgICovXG4gIGdldCBhY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub2xNYXAgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPTCBvdmVybGF5IHNvdXJjZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBvbE92ZXJsYXlTb3VyY2UoKTogT2xWZWN0b3JTb3VyY2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMub2xPdmVybGF5TGF5ZXIuZ2V0U291cmNlKCk7XG4gIH1cblxuICAvKipcbiAgICogT0wgbGluZWFyIHJpbmdzIHNvdXJjZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBvbExpbmVhclJpbmdzU291cmNlKCk6IE9sVmVjdG9yU291cmNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLm9sTGluZWFyUmluZ3NMYXllci5nZXRTb3VyY2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgbW9kaWZ5IGNvbnRyb2wgc2hvdWxkIGJlIGF2YWlsYWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBtb2RpZnkgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgdHJhbnNsYXRlIGNvbnRyb2wgc2hvdWxkIGJlIGF2YWlsYWJsZVxuICAgKi9cbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgb3B0aW9uczogTW9kaWZ5Q29udHJvbE9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5tb2RpZnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5tb2RpZnkgPSBvcHRpb25zLm1vZGlmeTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudHJhbnNsYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudHJhbnNsYXRlID0gb3B0aW9ucy50cmFuc2xhdGU7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubGF5ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vbE92ZXJsYXlMYXllciA9IG9wdGlvbnMubGF5ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub2xPdmVybGF5TGF5ZXIgPSB0aGlzLmNyZWF0ZU9sSW5uZXJPdmVybGF5TGF5ZXIoKTtcbiAgICB9XG4gICAgdGhpcy5vbExpbmVhclJpbmdzTGF5ZXIgPSB0aGlzLmNyZWF0ZU9sTGluZWFyUmluZ3NMYXllcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBvciByZW1vdmUgdGhpcyBjb250cm9sIHRvL2Zyb20gYSBtYXAuXG4gICAqIEBwYXJhbSBtYXAgT0wgTWFwXG4gICAqL1xuICBzZXRPbE1hcChvbE1hcDogT2xNYXAgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAob2xNYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jbGVhck9sSW5uZXJPdmVybGF5U291cmNlKCk7XG4gICAgICB0aGlzLnJlbW92ZU9sSW5uZXJPdmVybGF5TGF5ZXIoKTtcbiAgICAgIHRoaXMucmVtb3ZlT2xNb2RpZnlJbnRlcmFjdGlvbigpO1xuICAgICAgdGhpcy5yZW1vdmVPbFRyYW5zbGF0ZUludGVyYWN0aW9uKCk7XG4gICAgICB0aGlzLnJlbW92ZU9sRHJhd0ludGVyYWN0aW9uKCk7XG4gICAgICB0aGlzLm9sTWFwID0gb2xNYXA7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vbE1hcCA9IG9sTWFwO1xuICAgIHRoaXMuYWRkT2xJbm5lck92ZXJsYXlMYXllcigpO1xuXG4gICAgLy8gVGhlIG9yZGVyIGluIHdoaWNoIHRoZXNlIGludGVyYWN0aW9uc1xuICAgIC8vIGFyZSBhZGRlZCBpcyBpbXBvcnRhbnRcbiAgICBpZiAodGhpcy5tb2RpZnkgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYWRkT2xEcmF3SW50ZXJhY3Rpb24oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmFuc2xhdGUgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYWRkT2xUcmFuc2xhdGVJbnRlcmFjdGlvbigpO1xuICAgICAgdGhpcy5hY3RpdmF0ZVRyYW5zbGF0ZUludGVyYWN0aW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubW9kaWZ5ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmFkZE9sTW9kaWZ5SW50ZXJhY3Rpb24oKTtcbiAgICAgIHRoaXMuYWN0aXZhdGVNb2RpZnlJbnRlcmFjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG92ZXJsYXkgc291cmNlXG4gICAqL1xuICBnZXRTb3VyY2UoKTogT2xWZWN0b3JTb3VyY2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMub2xPdmVybGF5U291cmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBPTCBnZW9tZXRyeSB0byB0aGUgb3ZlcmxheSBhbmQgc3RhcnQgbW9kaWZ5aW5nIGl0XG4gICAqIEBwYXJhbSBvbEdlb21ldHJ5IE9sIEdlb21ldHJ5XG4gICAqL1xuICBzZXRPbEdlb21ldHJ5KG9sR2VvbWV0cnk6IE9sR2VvbWV0cnkpIHtcbiAgICBjb25zdCBvbEZlYXR1cmUgPSBuZXcgT2xGZWF0dXJlKHsgZ2VvbWV0cnk6IG9sR2VvbWV0cnkgfSk7XG4gICAgdGhpcy5vbE92ZXJsYXlTb3VyY2UuY2xlYXIoKTtcbiAgICB0aGlzLm9sT3ZlcmxheVNvdXJjZS5hZGRGZWF0dXJlKG9sRmVhdHVyZSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIG92ZXJsYXkgc291cmNlIGlmIG5vbmUgaXMgZGVmaW5lZCBpbiB0aGUgb3B0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVPbElubmVyT3ZlcmxheUxheWVyKCk6IE9sVmVjdG9yTGF5ZXI8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBPbFZlY3RvckxheWVyKHtcbiAgICAgIHNvdXJjZTogdGhpcy5vcHRpb25zLnNvdXJjZSA/IHRoaXMub3B0aW9ucy5zb3VyY2UgOiBuZXcgT2xWZWN0b3JTb3VyY2UoKSxcbiAgICAgIHN0eWxlOiB0aGlzLm9wdGlvbnMubGF5ZXJTdHlsZSxcbiAgICAgIHpJbmRleDogNTAwXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHRoZSBvdmVybGF5IGxheWVyIGlmIGl0IHdhc24ndCBkZWZpbmVkIGluIHRoZSBvcHRpb25zXG4gICAqL1xuICBwcml2YXRlIGFkZE9sSW5uZXJPdmVybGF5TGF5ZXIoKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYXllciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9sTWFwLmFkZExheWVyKHRoaXMub2xPdmVybGF5TGF5ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgb3ZlcmxheSBsYXllciBpZiBpdCB3YXNuJ3QgZGVmaW5lZCBpbiB0aGUgb3B0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSByZW1vdmVPbElubmVyT3ZlcmxheUxheWVyKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubGF5ZXIgPT09IHVuZGVmaW5lZCAmJiB0aGlzLm9sTWFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub2xNYXAucmVtb3ZlTGF5ZXIodGhpcy5vbE92ZXJsYXlMYXllcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBvdmVybGF5IHNvdXJjZSBpZiBpdCB3YXNuJ3QgZGVmaW5lZCBpbiB0aGUgb3B0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBjbGVhck9sSW5uZXJPdmVybGF5U291cmNlKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubGF5ZXIgPT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnMuc291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub2xPdmVybGF5U291cmNlLmNsZWFyKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT2xMaW5lYXJSaW5nc0xheWVyKCk6IE9sVmVjdG9yTGF5ZXI8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBPbFZlY3RvckxheWVyKHtcbiAgICAgIHNvdXJjZTogbmV3IE9sVmVjdG9yU291cmNlKCksXG4gICAgICBzdHlsZTogY3JlYXRlRHJhd0hvbGVJbnRlcmFjdGlvblN0eWxlKCksXG4gICAgICB6SW5kZXg6IDUwMFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgbGluZWFyIHJpbmdzIGxheWVyXG4gICAqL1xuICBwcml2YXRlIGFkZE9sTGluZWFyUmluZ3NMYXllcigpIHtcbiAgICB0aGlzLm9sTWFwLmFkZExheWVyKHRoaXMub2xMaW5lYXJSaW5nc0xheWVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgbGluZWFyIHJpbmdzIGxheWVyXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZU9sTGluZWFyUmluZ3NMYXllcigpIHtcbiAgICB0aGlzLm9sTWFwLnJlbW92ZUxheWVyKHRoaXMub2xMaW5lYXJSaW5nc0xheWVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgbGluZWFyIHJpbmdzIHNvdXJjZVxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhck9sTGluZWFyUmluZ3NTb3VyY2UoKSB7XG4gICAgdGhpcy5vbExpbmVhclJpbmdzU291cmNlLmNsZWFyKHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG1vZGlmeSBpbnRlcmFjdGlvbiB0byB0aGUgbWFwIGFuIHNldCB1cCBzb21lIGxpc3RlbmVyc1xuICAgKi9cbiAgcHJpdmF0ZSBhZGRPbE1vZGlmeUludGVyYWN0aW9uKCkge1xuICAgIGNvbnN0IG9sTW9kaWZ5SW50ZXJhY3Rpb24gPSBuZXcgT2xNb2RpZnkoe1xuICAgICAgc291cmNlOiB0aGlzLm9sT3ZlcmxheVNvdXJjZSxcbiAgICAgIHN0eWxlOiB0aGlzLm9wdGlvbnMuZHJhd1N0eWxlIGFzIE9sU3R5bGUuU3R5bGVcbiAgICB9KTtcbiAgICB0aGlzLm9sTW9kaWZ5SW50ZXJhY3Rpb24gPSBvbE1vZGlmeUludGVyYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0aGUgbW9kaWZ5IGludGVyYWN0aW9uXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZU9sTW9kaWZ5SW50ZXJhY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMub2xNb2RpZnlJbnRlcmFjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kZWFjdGl2YXRlTW9kaWZ5SW50ZXJhY3Rpb24oKTtcbiAgICB0aGlzLm9sTW9kaWZ5SW50ZXJhY3Rpb24gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGFjdGl2YXRlTW9kaWZ5SW50ZXJhY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMub2xNb2RpZnlJbnRlcmFjdGlvbklzQWN0aXZlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vbE1vZGlmeUludGVyYWN0aW9uSXNBY3RpdmUgPSB0cnVlO1xuICAgIHRoaXMub25Nb2RpZnlTdGFydEtleSA9IHRoaXMub2xNb2RpZnlJbnRlcmFjdGlvbi5vbihcbiAgICAgICdtb2RpZnlzdGFydCcsXG4gICAgICAoZXZlbnQ6IE9sTW9kaWZ5RXZlbnQpID0+IHRoaXMub25Nb2RpZnlTdGFydChldmVudClcbiAgICApO1xuICAgIHRoaXMub25Nb2RpZnlFbmRLZXkgPSB0aGlzLm9sTW9kaWZ5SW50ZXJhY3Rpb24ub24oXG4gICAgICAnbW9kaWZ5ZW5kJyxcbiAgICAgIChldmVudDogT2xNb2RpZnlFdmVudCkgPT4gdGhpcy5vbk1vZGlmeUVuZChldmVudClcbiAgICApO1xuICAgIHRoaXMub2xNYXAuYWRkSW50ZXJhY3Rpb24odGhpcy5vbE1vZGlmeUludGVyYWN0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVhY3RpdmF0ZU1vZGlmeUludGVyYWN0aW9uKCkge1xuICAgIGlmICh0aGlzLm9sTW9kaWZ5SW50ZXJhY3Rpb25Jc0FjdGl2ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9sTW9kaWZ5SW50ZXJhY3Rpb25Jc0FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgdW5CeUtleShbdGhpcy5vbk1vZGlmeVN0YXJ0S2V5LCB0aGlzLm9uTW9kaWZ5RW5kS2V5LCB0aGlzLm9uTW9kaWZ5S2V5XSk7XG4gICAgaWYgKHRoaXMub2xNYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vbE1hcC5yZW1vdmVJbnRlcmFjdGlvbih0aGlzLm9sTW9kaWZ5SW50ZXJhY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIG1vZGlmeWluZyBzdGFydHMsIGNsZWFyIHRoZSBvdmVybGF5IGFuZCBzdGFydCB3YXRjaGluZyBmb3IgY2hhbmdlc1xuICAgKiBAcGFyYW0gZXZlbnQgTW9kaWZ5IHN0YXJ0IGV2ZW50XG4gICAqL1xuICBwcml2YXRlIG9uTW9kaWZ5U3RhcnQoZXZlbnQ6IE9sTW9kaWZ5RXZlbnQpIHtcbiAgICBjb25zdCBvbEdlb21ldHJ5ID0gZXZlbnQuZmVhdHVyZXMuaXRlbSgwKS5nZXRHZW9tZXRyeSgpIGFzIE9sR2VvbWV0cnk7XG4gICAgdGhpcy5zdGFydCQubmV4dChvbEdlb21ldHJ5KTtcbiAgICB0aGlzLm9uTW9kaWZ5S2V5ID0gb2xHZW9tZXRyeS5vbihcbiAgICAgICdjaGFuZ2UnLFxuICAgICAgKG9sR2VvbWV0cnlFdmVudDogQmFzaWNFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLm1vdXNlUG9zaXRpb24gPVxuICAgICAgICAgIGdldE1vdXNlUG9zaXRpb25Gcm9tT2xHZW9tZXRyeUV2ZW50KG9sR2VvbWV0cnlFdmVudCk7XG4gICAgICAgIHRoaXMuY2hhbmdlcyQubmV4dChcbiAgICAgICAgICBvbEdlb21ldHJ5RXZlbnQudGFyZ2V0IGFzIE9sTGluZVN0cmluZyB8IE9sQ2lyY2xlIHwgT2xQb2x5Z29uXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmliZVRvS2V5RG93bigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gbW9kaWZ5aW5nIGVuZHMsIHVwZGF0ZSB0aGUgZ2VvbWV0cnkgb2JzZXJ2YWJsZSBhbmQgc3RvcCB3YXRjaGluZyBmb3IgY2hhbmdlc1xuICAgKiBAcGFyYW0gZXZlbnQgTW9kaWZ5IGVuZCBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSBvbk1vZGlmeUVuZChldmVudDogT2xNb2RpZnlFdmVudCkge1xuICAgIHVuQnlLZXkodGhpcy5vbk1vZGlmeUtleSk7XG4gICAgdGhpcy5lbmQkLm5leHQoZXZlbnQuZmVhdHVyZXMuaXRlbSgwKS5nZXRHZW9tZXRyeSgpIGFzIE9sR2VvbWV0cnkpO1xuICAgIHRoaXMudW5zdWJzY3JpYmVUb0tleURvd24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gc3BhY2Uga2V5IGRvd24gdG8gcGFuIHRoZSBtYXBcbiAgICovXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9LZXlEb3duKCkge1xuICAgIHRoaXMua2V5RG93biQkID0gZnJvbUV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicpLnN1YnNjcmliZShcbiAgICAgIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgICAgICAvLyBPbiBzcGFjZSBiYXIsIHBhbiB0byB0aGUgY3VycmVudCBtb3VzZSBwb3NpdGlvblxuICAgICAgICAgIHRoaXMub2xNYXAuZ2V0VmlldygpLmFuaW1hdGUoe1xuICAgICAgICAgICAgY2VudGVyOiB0aGlzLm1vdXNlUG9zaXRpb24sXG4gICAgICAgICAgICBkdXJhdGlvbjogMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgdG8ga2V5IGRvd25cbiAgICovXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVUb0tleURvd24oKSB7XG4gICAgaWYgKHRoaXMua2V5RG93biQkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMua2V5RG93biQkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHRyYW5zbGF0ZSBpbnRlcmFjdGlvbiB0byB0aGUgbWFwIGFuIHNldCB1cCBzb21lIGxpc3RlbmVyc1xuICAgKi9cbiAgcHJpdmF0ZSBhZGRPbFRyYW5zbGF0ZUludGVyYWN0aW9uKCkge1xuICAgIGNvbnN0IG9sVHJhbnNsYXRlSW50ZXJhY3Rpb24gPSBuZXcgT2xUcmFuc2xhdGUoe1xuICAgICAgbGF5ZXJzOiBbdGhpcy5vbE92ZXJsYXlMYXllcl1cbiAgICB9KTtcbiAgICB0aGlzLm9sVHJhbnNsYXRlSW50ZXJhY3Rpb24gPSBvbFRyYW5zbGF0ZUludGVyYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0aGUgdHJhbnNsYXRlIGludGVyYWN0aW9uXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZU9sVHJhbnNsYXRlSW50ZXJhY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMub2xUcmFuc2xhdGVJbnRlcmFjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kZWFjdGl2YXRlVHJhbnNsYXRlSW50ZXJhY3Rpb24oKTtcbiAgICB0aGlzLm9sVHJhbnNsYXRlSW50ZXJhY3Rpb24gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGFjdGl2YXRlVHJhbnNsYXRlSW50ZXJhY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMub2xUcmFuc2xhdGVJbnRlcmFjdGlvbklzQWN0aXZlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vbFRyYW5zbGF0ZUludGVyYWN0aW9uSXNBY3RpdmUgPSB0cnVlO1xuICAgIHRoaXMub25UcmFuc2xhdGVTdGFydEtleSA9IHRoaXMub2xUcmFuc2xhdGVJbnRlcmFjdGlvbi5vbihcbiAgICAgICd0cmFuc2xhdGVzdGFydCcsXG4gICAgICAoZXZlbnQ6IE9sVHJhbnNsYXRlRXZlbnQpID0+IHRoaXMub25UcmFuc2xhdGVTdGFydChldmVudClcbiAgICApO1xuICAgIHRoaXMub25UcmFuc2xhdGVFbmRLZXkgPSB0aGlzLm9sVHJhbnNsYXRlSW50ZXJhY3Rpb24ub24oXG4gICAgICAndHJhbnNsYXRlZW5kJyxcbiAgICAgIChldmVudDogT2xUcmFuc2xhdGVFdmVudCkgPT4gdGhpcy5vblRyYW5zbGF0ZUVuZChldmVudClcbiAgICApO1xuICAgIHRoaXMub2xNYXAuYWRkSW50ZXJhY3Rpb24odGhpcy5vbFRyYW5zbGF0ZUludGVyYWN0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVhY3RpdmF0ZVRyYW5zbGF0ZUludGVyYWN0aW9uKCkge1xuICAgIGlmICh0aGlzLm9sVHJhbnNsYXRlSW50ZXJhY3Rpb25Jc0FjdGl2ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9sVHJhbnNsYXRlSW50ZXJhY3Rpb25Jc0FjdGl2ZSA9IGZhbHNlO1xuICAgIHVuQnlLZXkoW1xuICAgICAgdGhpcy5vblRyYW5zbGF0ZVN0YXJ0S2V5LFxuICAgICAgdGhpcy5vblRyYW5zbGF0ZUVuZEtleSxcbiAgICAgIHRoaXMub25UcmFuc2xhdGVLZXlcbiAgICBdKTtcbiAgICBpZiAodGhpcy5vbE1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9sTWFwLnJlbW92ZUludGVyYWN0aW9uKHRoaXMub2xUcmFuc2xhdGVJbnRlcmFjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdHJhbnNsYXRpb24gc3RhcnRzLCBjbGVhciB0aGUgb3ZlcmxheSBhbmQgc3RhcnQgd2F0Y2hpbmcgZm9yIGNoYW5nZXNcbiAgICogQHBhcmFtIGV2ZW50IFRyYW5zbGF0ZSBzdGFydCBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSBvblRyYW5zbGF0ZVN0YXJ0KGV2ZW50OiBPbFRyYW5zbGF0ZUV2ZW50KSB7XG4gICAgY29uc3Qgb2xHZW9tZXRyeSA9IGV2ZW50LmZlYXR1cmVzLml0ZW0oMCkuZ2V0R2VvbWV0cnkoKSBhcyBPbEdlb21ldHJ5O1xuICAgIHRoaXMuc3RhcnQkLm5leHQob2xHZW9tZXRyeSk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB0cmFuc2xhdGlvbiBlbmRzLCB1cGRhdGUgdGhlIGdlb21ldHJ5IG9ic2VydmFibGUgYW5kIHN0b3Agd2F0Y2hpZ24gZm9yIGNoYW5nZXNcbiAgICogQHBhcmFtIGV2ZW50IFRyYW5zbGF0ZSBlbmQgZXZlbnRcbiAgICovXG4gIHByaXZhdGUgb25UcmFuc2xhdGVFbmQoZXZlbnQ6IE9sVHJhbnNsYXRlRXZlbnQpIHtcbiAgICB1bkJ5S2V5KHRoaXMub25UcmFuc2xhdGVLZXkpO1xuICAgIHRoaXMuZW5kJC5uZXh0KGV2ZW50LmZlYXR1cmVzLml0ZW0oMCkuZ2V0R2VvbWV0cnkoKSBhcyBPbEdlb21ldHJ5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBkcmF3IGludGVyYWN0aW9uIHRvIHRoZSBtYXAgYW4gc2V0IHVwIHNvbWUgbGlzdGVuZXJzXG4gICAqL1xuICBwcml2YXRlIGFkZE9sRHJhd0ludGVyYWN0aW9uKCkge1xuICAgIGNvbnN0IG9sRHJhd0ludGVyYWN0aW9uID0gbmV3IE9sRHJhdyh7XG4gICAgICB0eXBlOiAnUG9seWdvbicsXG4gICAgICBzb3VyY2U6IHRoaXMub2xMaW5lYXJSaW5nc1NvdXJjZSxcbiAgICAgIHN0b3BDbGljazogdHJ1ZSxcbiAgICAgIHN0eWxlOiBjcmVhdGVEcmF3SG9sZUludGVyYWN0aW9uU3R5bGUoKSxcbiAgICAgIGNvbmRpdGlvbjogKGV2ZW50OiBNYXBCcm93c2VyRXZlbnQ8YW55PikgPT4ge1xuICAgICAgICBjb25zdCBvbE91dGVyR2VvbWV0cnkgPSB0aGlzLm9sT3V0ZXJHZW9tZXRyeSB8fCB0aGlzLmdldE9sR2VvbWV0cnkoKTtcbiAgICAgICAgY29uc3QgaW50ZXJzZWN0cyA9IG9sT3V0ZXJHZW9tZXRyeS5pbnRlcnNlY3RzQ29vcmRpbmF0ZShcbiAgICAgICAgICBldmVudC5jb29yZGluYXRlXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBpbnRlcnNlY3RzO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5vbERyYXdJbnRlcmFjdGlvbiA9IG9sRHJhd0ludGVyYWN0aW9uO1xuICAgIHRoaXMuc3Vic2NyaWJlVG9EcmF3S2V5RG93bigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBDVFJMIGtleSBkb3duIHRvIGFjdGl2YXRlIHRoZSBkcmF3IGNvbnRyb2xcbiAgICovXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9EcmF3S2V5RG93bigpIHtcbiAgICB0aGlzLmRyYXdLZXlEb3duJCQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdrZXlkb3duJykuc3Vic2NyaWJlKFxuICAgICAgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudC5rZXkgIT09ICdDb250cm9sJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVUb0RyYXdLZXlEb3duKCk7XG5cbiAgICAgICAgY29uc3Qgb2xHZW9tZXRyeSA9IHRoaXMuZ2V0T2xHZW9tZXRyeSgpO1xuICAgICAgICBpZiAoIW9sR2VvbWV0cnkgfHwgIShvbEdlb21ldHJ5IGluc3RhbmNlb2YgT2xQb2x5Z29uKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9EcmF3S2V5VXAoKTtcblxuICAgICAgICB0aGlzLmRlYWN0aXZhdGVNb2RpZnlJbnRlcmFjdGlvbigpO1xuICAgICAgICB0aGlzLmRlYWN0aXZhdGVUcmFuc2xhdGVJbnRlcmFjdGlvbigpO1xuICAgICAgICB0aGlzLmFjdGl2YXRlRHJhd0ludGVyYWN0aW9uKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gQ1RSTCBrZXkgdXAgdG8gZGVhY3RpdmF0ZSB0aGUgZHJhdyBjb250cm9sXG4gICAqL1xuICBwcml2YXRlIHN1YnNjcmliZVRvRHJhd0tleVVwKCkge1xuICAgIHRoaXMuZHJhd0tleVVwJCQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdrZXl1cCcpLnN1YnNjcmliZShcbiAgICAgIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQua2V5ICE9PSAnQ29udHJvbCcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlVG9EcmF3S2V5VXAoKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZVRvS2V5RG93bigpO1xuICAgICAgICB0aGlzLmRlYWN0aXZhdGVEcmF3SW50ZXJhY3Rpb24oKTtcblxuICAgICAgICB0aGlzLmFjdGl2YXRlTW9kaWZ5SW50ZXJhY3Rpb24oKTtcbiAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmF0ZVRyYW5zbGF0ZUludGVyYWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0RyYXdLZXlEb3duKCk7XG5cbiAgICAgICAgdGhpcy5vbE91dGVyR2VvbWV0cnkgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY2xlYXJPbExpbmVhclJpbmdzU291cmNlKCk7XG4gICAgICAgIHRoaXMuZW5kJC5uZXh0KHRoaXMuZ2V0T2xHZW9tZXRyeSgpKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIHRvIGRyYXcga2V5IGRvd25cbiAgICovXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVUb0RyYXdLZXlEb3duKCkge1xuICAgIGlmICh0aGlzLmRyYXdLZXlEb3duJCQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kcmF3S2V5RG93biQkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIHRvIGtleSB1cFxuICAgKi9cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZVRvRHJhd0tleVVwKCkge1xuICAgIGlmICh0aGlzLmRyYXdLZXlVcCQkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZHJhd0tleVVwJCQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBkcmF3IGludGVyYWN0aW9uXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZU9sRHJhd0ludGVyYWN0aW9uKCkge1xuICAgIGlmICh0aGlzLm9sRHJhd0ludGVyYWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVuc3Vic2NyaWJlVG9LZXlEb3duKCk7XG4gICAgdGhpcy51bnN1YnNjcmliZVRvRHJhd0tleVVwKCk7XG4gICAgdGhpcy51bnN1YnNjcmliZVRvRHJhd0tleURvd24oKTtcbiAgICB0aGlzLmRlYWN0aXZhdGVEcmF3SW50ZXJhY3Rpb24oKTtcbiAgICB0aGlzLmNsZWFyT2xMaW5lYXJSaW5nc1NvdXJjZSgpO1xuICAgIHRoaXMub2xEcmF3SW50ZXJhY3Rpb24gPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQWN0aXZhdGUgdGhlIGRyYXcgaW50ZXJhY3Rpb25cbiAgICovXG4gIHByaXZhdGUgYWN0aXZhdGVEcmF3SW50ZXJhY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMub2xEcmF3SW50ZXJhY3Rpb25Jc0FjdGl2ZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYXJPbExpbmVhclJpbmdzU291cmNlKCk7XG4gICAgdGhpcy5hZGRPbExpbmVhclJpbmdzTGF5ZXIoKTtcblxuICAgIHRoaXMub2xNYXAuZ2V0SW50ZXJhY3Rpb25zKCkuZm9yRWFjaCgob2xJbnRlcmFjdGlvbjogT2xJbnRlcmFjdGlvbikgPT4ge1xuICAgICAgaWYgKG9sSW50ZXJhY3Rpb24gaW5zdGFuY2VvZiBPbERyYWdCb3hJbnRlcmFjdGlvbikge1xuICAgICAgICB0aGlzLm9sTWFwLnJlbW92ZUludGVyYWN0aW9uKG9sSW50ZXJhY3Rpb24pO1xuICAgICAgICB0aGlzLnJlbW92ZWRPbEludGVyYWN0aW9ucy5wdXNoKG9sSW50ZXJhY3Rpb24pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5vbERyYXdJbnRlcmFjdGlvbklzQWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLm9uRHJhd1N0YXJ0S2V5ID0gdGhpcy5vbERyYXdJbnRlcmFjdGlvbi5vbihcbiAgICAgICdkcmF3c3RhcnQnLFxuICAgICAgKGV2ZW50OiBPbERyYXdFdmVudCkgPT4gdGhpcy5vbkRyYXdTdGFydChldmVudClcbiAgICApO1xuICAgIHRoaXMub25EcmF3RW5kS2V5ID0gdGhpcy5vbERyYXdJbnRlcmFjdGlvbi5vbihcbiAgICAgICdkcmF3ZW5kJyxcbiAgICAgIChldmVudDogT2xEcmF3RXZlbnQpID0+IHRoaXMub25EcmF3RW5kKGV2ZW50KVxuICAgICk7XG4gICAgdGhpcy5vbE1hcC5hZGRJbnRlcmFjdGlvbih0aGlzLm9sRHJhd0ludGVyYWN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlIHRoZSBkcmF3IGludGVyYWN0aW9uXG4gICAqL1xuICBwcml2YXRlIGRlYWN0aXZhdGVEcmF3SW50ZXJhY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMub2xEcmF3SW50ZXJhY3Rpb25Jc0FjdGl2ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbW92ZU9sTGluZWFyUmluZ3NMYXllcigpO1xuXG4gICAgdGhpcy5yZW1vdmVkT2xJbnRlcmFjdGlvbnMuZm9yRWFjaCgob2xJbnRlcmFjdGlvbjogT2xJbnRlcmFjdGlvbikgPT4ge1xuICAgICAgdGhpcy5vbE1hcC5hZGRJbnRlcmFjdGlvbihvbEludGVyYWN0aW9uKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlbW92ZWRPbEludGVyYWN0aW9ucyA9IFtdO1xuXG4gICAgdGhpcy5vbERyYXdJbnRlcmFjdGlvbklzQWN0aXZlID0gZmFsc2U7XG4gICAgdW5CeUtleShbdGhpcy5vbkRyYXdTdGFydEtleSwgdGhpcy5vbkRyYXdFbmRLZXksIHRoaXMub25EcmF3S2V5XSk7XG4gICAgaWYgKHRoaXMub2xNYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vbE1hcC5yZW1vdmVJbnRlcmFjdGlvbih0aGlzLm9sRHJhd0ludGVyYWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBkcmF3IHN0YXJ0LCBhZGQgYSBuZXcgbGluZXJhciByaW5nIHRvIHRoZSBnZW9tZXRyeSBhbmQgc3RhcnQgd2F0Y2hpbmcgZm9yIGNoYW5nZXNcbiAgICogQHBhcmFtIGV2ZW50IERyYXcgc3RhcnQgZXZlbnRcbiAgICovXG4gIHByaXZhdGUgb25EcmF3U3RhcnQoZXZlbnQ6IE9sRHJhd0V2ZW50KSB7XG4gICAgY29uc3Qgb2xHZW9tZXRyeSA9IGV2ZW50LmZlYXR1cmUuZ2V0R2VvbWV0cnkoKTtcbiAgICB0aGlzLm9sT3V0ZXJHZW9tZXRyeSA9IHRoaXMuZ2V0T2xHZW9tZXRyeSgpLmNsb25lKCk7XG5cbiAgICBjb25zdCBsaW5lYXJSaW5nQ29vcmRpbmF0ZXMgPSAoXG4gICAgICAob2xHZW9tZXRyeSBhcyBhbnkpLmdldExpbmVhclJpbmcoKSBhcyBhbnlcbiAgICApLmdldENvb3JkaW5hdGVzKCk7XG4gICAgdGhpcy5hZGRMaW5lYXJSaW5nVG9PbEdlb21ldHJ5KGxpbmVhclJpbmdDb29yZGluYXRlcyk7XG4gICAgdGhpcy5zdGFydCQubmV4dCh0aGlzLmdldE9sR2VvbWV0cnkoKSk7XG5cbiAgICB0aGlzLm9uRHJhd0tleSA9IG9sR2VvbWV0cnkub24oJ2NoYW5nZScsIChvbEdlb21ldHJ5RXZlbnQ6IEJhc2ljRXZlbnQpID0+IHtcbiAgICAgIHRoaXMubW91c2VQb3NpdGlvbiA9IGdldE1vdXNlUG9zaXRpb25Gcm9tT2xHZW9tZXRyeUV2ZW50KG9sR2VvbWV0cnlFdmVudCk7XG4gICAgICBjb25zdCBvbEdlb21ldHJ5VGFyZ2V0ID0gb2xHZW9tZXRyeUV2ZW50LnRhcmdldCBhcyBPbFBvbHlnb247XG4gICAgICBjb25zdCBfbGluZWFyUmluZ0Nvb3JkaW5hdGVzID0gb2xHZW9tZXRyeVRhcmdldFxuICAgICAgICAuZ2V0TGluZWFyUmluZygwKVxuICAgICAgICAuZ2V0Q29vcmRpbmF0ZXMoKTtcbiAgICAgIHRoaXMudXBkYXRlTGluZWFyUmluZ09mT2xHZW9tZXRyeShfbGluZWFyUmluZ0Nvb3JkaW5hdGVzKTtcbiAgICAgIHRoaXMuY2hhbmdlcyQubmV4dCh0aGlzLmdldE9sR2VvbWV0cnkoKSk7XG4gICAgfSk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb0tleURvd24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHRyYW5zbGF0aW9uIGVuZHMsIHVwZGF0ZSB0aGUgZ2VvbWV0cnkgb2JzZXJ2YWJsZSBhbmQgc3RvcCB3YXRjaGlnbiBmb3IgY2hhbmdlc1xuICAgKiBAcGFyYW0gZXZlbnQgRHJhdyBlbmQgZXZlbnRcbiAgICovXG4gIHByaXZhdGUgb25EcmF3RW5kKGV2ZW50OiBPbERyYXdFdmVudCkge1xuICAgIHVuQnlLZXkodGhpcy5vbkRyYXdLZXkpO1xuICAgIHRoaXMub2xPdXRlckdlb21ldHJ5ID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgbGluZWFyUmluZ0Nvb3JkaW5hdGVzID0gKFxuICAgICAgKGV2ZW50LmZlYXR1cmUuZ2V0R2VvbWV0cnkoKSBhcyBhbnkpLmdldExpbmVhclJpbmcoKSBhcyBhbnlcbiAgICApLmdldENvb3JkaW5hdGVzKCk7XG4gICAgdGhpcy51cGRhdGVMaW5lYXJSaW5nT2ZPbEdlb21ldHJ5KGxpbmVhclJpbmdDb29yZGluYXRlcyk7XG4gICAgdGhpcy5jbGVhck9sTGluZWFyUmluZ3NTb3VyY2UoKTtcbiAgICB0aGlzLmVuZCQubmV4dCh0aGlzLmdldE9sR2VvbWV0cnkoKSk7XG4gICAgdGhpcy51bnN1YnNjcmliZVRvS2V5RG93bigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGxpbmVhciByaW5nIHRvIHRoZSBnZW9tZXRyeSBiZWluZyBtb2RpZmllZFxuICAgKiBAcGFyYW0gY29vcmRpbmF0ZXMgTGluZWFyIHJpbmcgY29vcmRpbmF0ZXNcbiAgICovXG4gIHByaXZhdGUgYWRkTGluZWFyUmluZ1RvT2xHZW9tZXRyeShjb29yZGluYXRlczogbnVtYmVyW10pIHtcbiAgICBjb25zdCBvbEdlb21ldHJ5ID0gdGhpcy5nZXRPbEdlb21ldHJ5KCkgYXMgT2xQb2x5Z29uO1xuICAgIGNvbnN0IG9sTGluZWFyUmluZyA9IG5ldyBPbExpbmVhclJpbmcoY29vcmRpbmF0ZXMpO1xuICAgIGFkZExpbmVhclJpbmdUb09sUG9seWdvbihvbEdlb21ldHJ5LCBvbExpbmVhclJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgbGFzdCBsaW5lYXIgcmluZyBvZiB0aGUgZ2VvbWV0cnkgYmVpbmcgbW9kaWZpZWRcbiAgICogQHBhcmFtIGNvb3JkaW5hdGVzIExpbmVhciByaW5nIGNvb3JkaW5hdGVzXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUxpbmVhclJpbmdPZk9sR2VvbWV0cnkoY29vcmRpbmF0ZXM6IG51bWJlcltdW10pIHtcbiAgICBjb25zdCBvbEdlb21ldHJ5ID0gdGhpcy5nZXRPbEdlb21ldHJ5KCkgYXMgT2xQb2x5Z29uO1xuICAgIC8vIFJlbW92ZSB0aGUgbGFzdCBsaW5lYXIgcmluZyAodGhlIG9uZSB3ZSBhcmUgdXBkYXRpbmcpXG4gICAgY29uc3Qgb2xMaW5lYXJSaW5ncyA9IG9sR2VvbWV0cnkuZ2V0TGluZWFyUmluZ3MoKS5zbGljZSgwLCAtMSk7XG4gICAgY29uc3QgbmV3Q29vcmRpbmF0ZXMgPSBvbExpbmVhclJpbmdzLm1hcCgob2xMaW5lYXJSaW5nOiBPbExpbmVhclJpbmcpID0+IHtcbiAgICAgIHJldHVybiBvbExpbmVhclJpbmcuZ2V0Q29vcmRpbmF0ZXMoKTtcbiAgICB9KTtcbiAgICBuZXdDb29yZGluYXRlcy5wdXNoKGNvb3JkaW5hdGVzKTtcbiAgICBvbEdlb21ldHJ5LnNldENvb3JkaW5hdGVzKG5ld0Nvb3JkaW5hdGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGdlb21ldHJ5IGJlaW5nIG1vZGlmaWVkXG4gICAqIEByZXR1cm5zIE9MIEdlb21ldHJ5XG4gICAqL1xuICBwcml2YXRlIGdldE9sR2VvbWV0cnkoKTogT2xHZW9tZXRyeSB7XG4gICAgY29uc3Qgb2xGZWF0dXJlcyA9IHRoaXMub2xPdmVybGF5U291cmNlLmdldEZlYXR1cmVzKCk7XG4gICAgcmV0dXJuIG9sRmVhdHVyZXMubGVuZ3RoID4gMCA/IG9sRmVhdHVyZXNbMF0uZ2V0R2VvbWV0cnkoKSA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19