@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,522 +0,0 @@
1
- import { NumberUtils, uuid } from '@igo2/utils';
2
- import olFeature from 'ol/Feature';
3
- import OlGeoJSON from 'ol/format/GeoJSON';
4
- import * as olGeom from 'ol/geom';
5
- import * as olProj from 'ol/proj';
6
- import * as olStyle from 'ol/style';
7
- import { FeatureDataSource } from '../../datasource/shared/datasources/feature-datasource';
8
- import { tryBindStoreLayer } from '../../feature/shared/feature-store.utils';
9
- import { FEATURE, FeatureMotion } from '../../feature/shared/feature.enums';
10
- import { tryAddLoadingStrategy } from '../../feature/shared/strategies.utils';
11
- import { FeatureStoreLoadingStrategy } from '../../feature/shared/strategies/loading';
12
- import { VectorLayer } from '../../layer/shared/layers/vector-layer';
13
- import { createOverlayMarkerStyle } from '../../style/shared/overlay/overlay-marker-style.utils';
14
- import { DirectionRelativePositionType, DirectionsType, ManeuverModifier, ManeuverType } from './directions.enum';
15
- /**
16
- * Updates the sorting of the stops in the provided StopsStore based on the specified field and direction.
17
- *
18
- * @param {StopsStore} stopsStore - The StopsStore to update the sorting for.
19
- * @param {'asc' | 'desc'} [direction='asc'] - The direction of sorting ('asc' for ascending, 'desc' for descending).
20
- * @param {string} [field='position'] - The field to sort the stops by.
21
- */
22
- export function updateStoreSorting(stopsStore, direction = 'asc', field = 'position') {
23
- stopsStore.view.sort({
24
- direction,
25
- valueAccessor: (entity) => entity[field]
26
- });
27
- }
28
- /**
29
- * Computes the relative position of a stop in a list of stops.
30
- *
31
- * @param {number} stopIndex - The index of the stop.
32
- * @param {number} stopListLength - The total number of stops.
33
- * @return {DirectionRelativePositionType} The relative position of the stop.
34
- */
35
- export function computeRelativePosition(stopIndex, stopListLength) {
36
- let relativePosition = DirectionRelativePositionType.Intermediate;
37
- if (stopIndex === 0) {
38
- relativePosition = DirectionRelativePositionType.Start;
39
- }
40
- else if (stopIndex === stopListLength) {
41
- relativePosition = DirectionRelativePositionType.End;
42
- }
43
- return relativePosition;
44
- }
45
- /**
46
- * Computes the position and relative position of stops in the given stopsStore.
47
- *
48
- * @param {StopsStore} stopsStore - The store containing the stops.
49
- */
50
- export function computeStopsPosition(deletedStopIndex, stopsStore) {
51
- for (const stop of stopsStore.all()) {
52
- stop.position =
53
- stop.position > deletedStopIndex ? (stop.position -= 1) : stop.position;
54
- stop.relativePosition = computeRelativePosition(stop.position, stopsStore.all().length - 1);
55
- }
56
- }
57
- /**
58
- * Adds a stop to the given stopsStore. The stop is always added as the last stop.
59
- *
60
- * @param {StopsStore} stopsStore - The store containing the stops.
61
- * @return {Stop} The newly added stop.
62
- */
63
- export function addStopToStore(stopsStore) {
64
- const id = uuid();
65
- const stops = stopsStore.all();
66
- const insertIndex = stops.length;
67
- for (const stop of stopsStore.all()) {
68
- stop.relativePosition = computeRelativePosition(stop.position, stops.length);
69
- }
70
- stopsStore.insert({
71
- id,
72
- position: insertIndex,
73
- relativePosition: computeRelativePosition(insertIndex, stops.length)
74
- });
75
- updateStoreSorting(stopsStore);
76
- return stopsStore.get(id);
77
- }
78
- /**
79
- * Removes a stop from the given stopsStore and updates the positions of the remaining stops.
80
- *
81
- * @param {StopsStore} stopsStore - The store containing the stops.
82
- * @param {Stop} stop - The stop to be removed.
83
- */
84
- export function removeStopFromStore(stopsStore, stop) {
85
- stopsStore.delete(stop);
86
- computeStopsPosition(stop.position, stopsStore);
87
- }
88
- /**
89
- * Create a style for the directions steps, stops and route
90
- * @param feature OlFeature
91
- * @returns OL style function
92
- */
93
- export function directionsStyle(feature) {
94
- const stepStyle = [
95
- new olStyle.Style({
96
- geometry: feature.getGeometry(),
97
- image: new olStyle.Circle({
98
- radius: 7,
99
- stroke: new olStyle.Stroke({ color: '#FF0000', width: 3 })
100
- })
101
- })
102
- ];
103
- const stopStyle = createOverlayMarkerStyle({
104
- text: feature.get('stopText'),
105
- opacity: feature.get('stopOpacity'),
106
- markerColor: feature.get('stopColor'),
107
- markerOutlineColor: [255, 255, 255]
108
- });
109
- const routeStyle = [
110
- new olStyle.Style({
111
- stroke: new olStyle.Stroke({
112
- color: `rgba(106, 121, 130, ${feature.get('active') ? 0.75 : 0})`,
113
- width: 10
114
- })
115
- }),
116
- new olStyle.Style({
117
- stroke: new olStyle.Stroke({
118
- color: `rgba(79, 169, 221, ${feature.get('active') ? 0.75 : 0})`,
119
- width: 6
120
- })
121
- })
122
- ];
123
- if (feature.get('type') === DirectionsType.Stop) {
124
- return stopStyle;
125
- }
126
- if (feature.get('type') === DirectionsType.Vertex) {
127
- return stepStyle;
128
- }
129
- if (feature.get('type') === DirectionsType.Route) {
130
- return routeStyle;
131
- }
132
- }
133
- /**
134
- * Initializes the stops feature store with the provided language service.
135
- *
136
- * @param {StopsFeatureStore} stopsFeatureStore - The stops feature store to initialize.
137
- * @param {LanguageService} languageService - The language service used for translations.
138
- */
139
- export function initStopsFeatureStore(stopsFeatureStore, languageService) {
140
- const loadingStrategy = new FeatureStoreLoadingStrategy({
141
- motion: FeatureMotion.None
142
- });
143
- const stopsLayer = new VectorLayer({
144
- isIgoInternalLayer: true,
145
- id: 'igo-direction-stops-layer',
146
- title: languageService.translate.instant('igo.geo.directions.layer.stops'),
147
- zIndex: 911,
148
- source: new FeatureDataSource(),
149
- showInLayerList: true,
150
- visible: true,
151
- workspace: {
152
- enabled: false
153
- },
154
- linkedLayers: {
155
- linkId: 'igo-direction-stops-layer',
156
- links: [
157
- {
158
- syncedDelete: true,
159
- linkedIds: ['igo-direction-route-layer'],
160
- properties: []
161
- }
162
- ]
163
- },
164
- exportable: true,
165
- browsable: false,
166
- style: directionsStyle
167
- });
168
- tryBindStoreLayer(stopsFeatureStore, stopsLayer);
169
- tryAddLoadingStrategy(stopsFeatureStore, loadingStrategy);
170
- }
171
- /**
172
- * Initializes the routes feature store with the provided language service.
173
- *
174
- * @param {StopsFeatureStore} routesFeatureStore - The routes feature store to initialize.
175
- * @param {LanguageService} languageService - The language service used for translations.
176
- */
177
- export function initRoutesFeatureStore(routesFeatureStore, languageService) {
178
- const loadingStrategy = new FeatureStoreLoadingStrategy({
179
- motion: FeatureMotion.None
180
- });
181
- const routeLayer = new VectorLayer({
182
- isIgoInternalLayer: true,
183
- id: 'igo-direction-route-layer',
184
- title: languageService.translate.instant('igo.geo.directions.layer.route'),
185
- zIndex: 910,
186
- source: new FeatureDataSource(),
187
- showInLayerList: true,
188
- visible: true,
189
- workspace: {
190
- enabled: false
191
- },
192
- linkedLayers: {
193
- linkId: 'igo-direction-route-layer'
194
- },
195
- exportable: true,
196
- browsable: false,
197
- style: directionsStyle
198
- });
199
- tryBindStoreLayer(routesFeatureStore, routeLayer);
200
- tryAddLoadingStrategy(routesFeatureStore, loadingStrategy);
201
- }
202
- /**
203
- * Initializes the routes feature store.
204
- *
205
- * @param {StopsFeatureStore} stepsFeatureStore - The steps feature store to initialize.
206
- */
207
- export function initStepsFeatureStore(stepsFeatureStore) {
208
- const loadingStrategy = new FeatureStoreLoadingStrategy({
209
- motion: FeatureMotion.None
210
- });
211
- const stepLayer = new VectorLayer({
212
- isIgoInternalLayer: true,
213
- id: 'igo-direction-step-layer',
214
- title: '',
215
- zIndex: 910,
216
- source: new FeatureDataSource(),
217
- showInLayerList: false,
218
- visible: true,
219
- workspace: {
220
- enabled: false
221
- },
222
- linkedLayers: {
223
- linkId: 'igo-direction-route-layer'
224
- },
225
- exportable: false,
226
- browsable: false,
227
- style: directionsStyle
228
- });
229
- tryBindStoreLayer(stepsFeatureStore, stepLayer);
230
- tryAddLoadingStrategy(stepsFeatureStore, loadingStrategy);
231
- }
232
- /**
233
- * Adds a stop to the stopsFeatureStore.
234
- *
235
- * @param {Stop} stop - The stop to be added.
236
- * @param {StopsFeatureStore} stopsFeatureStore - The stopsFeatureStore to add the stop to.
237
- * @param {string} projection - The projection of the stop coordinates.
238
- * @param {LanguageService} languageService - The language service for translating stop text.
239
- */
240
- export function addStopToStopsFeatureStore(stop, stopsFeatureStore, projection, languageService) {
241
- let stopColor;
242
- let stopText;
243
- switch (stop.relativePosition) {
244
- case DirectionRelativePositionType.Start:
245
- stopColor = '#008000';
246
- stopText = languageService.translate.instant('igo.geo.directions.input.start');
247
- break;
248
- case DirectionRelativePositionType.End:
249
- stopColor = '#f64139';
250
- stopText = languageService.translate.instant('igo.geo.directions.input.end');
251
- break;
252
- default:
253
- stopColor = '#ffd700';
254
- stopText =
255
- languageService.translate.instant('igo.geo.directions.input.intermediate') +
256
- ' #' +
257
- stop.position;
258
- break;
259
- }
260
- const point = new olGeom.Point(olProj.transform(stop.coordinates, projection, stopsFeatureStore.map.projectionCode));
261
- const geojsonGeom = new OlGeoJSON().writeGeometryObject(point, {
262
- featureProjection: stopsFeatureStore.map.projectionCode,
263
- dataProjection: stopsFeatureStore.map.projectionCode
264
- });
265
- const previousStop = stopsFeatureStore.get(stop.id);
266
- const previousStopRevision = previousStop
267
- ? previousStop.meta.revision
268
- : 0;
269
- const stopFeatureStore = {
270
- type: FEATURE,
271
- geometry: geojsonGeom,
272
- projection: stopsFeatureStore.map.projectionCode,
273
- properties: {
274
- id: stop.id,
275
- type: DirectionsType.Stop,
276
- stopText,
277
- stopColor,
278
- stopOpacity: 1,
279
- stop
280
- },
281
- meta: {
282
- id: stop.id,
283
- revision: previousStopRevision + 1
284
- },
285
- ol: new olFeature({ point })
286
- };
287
- stopsFeatureStore.update(stopFeatureStore);
288
- }
289
- /**
290
- * Adds a route to the routes feature store.
291
- *
292
- * @param {RoutesFeatureStore} routesFeatureStore - The routes feature store to add the route to.
293
- * @param {Directions} directions - The directions object containing the geometry and other information.
294
- * @param {string} projection - The projection of the geometry coordinates.
295
- * @param {boolean} [active=false] - Indicates whether the direction is active or not. Default is false.
296
- */
297
- export function addRouteToRoutesFeatureStore(routesFeatureStore, directions, projection, active = false) {
298
- const coordinate = directions.geometry.coordinates;
299
- const linestring4326 = new olGeom.LineString(coordinate);
300
- const linestringStore = linestring4326.transform(projection, routesFeatureStore.map.projectionCode);
301
- const geojsonGeom = new OlGeoJSON().writeGeometryObject(linestringStore, {
302
- featureProjection: routesFeatureStore.map.projectionCode,
303
- dataProjection: routesFeatureStore.map.projectionCode
304
- });
305
- const previousRoute = routesFeatureStore.get(directions.id);
306
- const previousRouteRevision = previousRoute
307
- ? previousRoute.meta.revision
308
- : 0;
309
- const routeFeatureStore = {
310
- type: FEATURE,
311
- geometry: geojsonGeom,
312
- projection: routesFeatureStore.map.projectionCode,
313
- properties: {
314
- id: directions.id,
315
- type: DirectionsType.Route,
316
- active,
317
- directions
318
- },
319
- meta: {
320
- id: directions.id,
321
- revision: previousRouteRevision + 1
322
- },
323
- ol: new olFeature({ linestringStore })
324
- };
325
- routesFeatureStore.update(routeFeatureStore);
326
- }
327
- /**
328
- * Formats the given distance in meters to a human-readable string.
329
- *
330
- * @param {number} meters - The distance in meters to be formatted.
331
- * @return {string | undefined} The formatted distance string.
332
- */
333
- export function formatDistance(meters) {
334
- if (meters === 0) {
335
- return undefined;
336
- }
337
- if (meters < 1000) {
338
- return `${Math.round(meters)} m`;
339
- }
340
- const kilometers = meters / 1000;
341
- const roundToDecimal = kilometers >= 10 ? 1 : 0;
342
- return `${NumberUtils.roundToNDecimal(kilometers, roundToDecimal)} km`.replace('.', ',');
343
- }
344
- /**
345
- * Formats the given duration in seconds to a human-readable string.
346
- *
347
- * @param {number} seconds - The duration in seconds to be formatted.
348
- * @return {string} The formatted duration string.
349
- */
350
- export function formatDuration(seconds) {
351
- const hours = Math.floor(seconds / 3600);
352
- const minutes = Math.floor((seconds % 3600) / 60);
353
- if (hours) {
354
- return `${hours} h ${minutes} min`;
355
- }
356
- if (minutes) {
357
- return `${minutes} min`;
358
- }
359
- return '< 1 min';
360
- }
361
- export function formatStep(step, languageService, lastStep = false) {
362
- const maneuverType = step.maneuver.type;
363
- const maneuverModifier = step.maneuver.modifier;
364
- const name = step.name;
365
- const maneuverBearingAfter = step.maneuver.bearing_after;
366
- const translate = languageService.translate;
367
- const translatedManeuverBearingAfter = translateManeuverBearing(maneuverBearingAfter, languageService);
368
- const translatedManeuverModifier = translateManeuverModifier(maneuverModifier, languageService);
369
- let iconName = 'straight'; // arrow point up by default
370
- let instruction = '';
371
- if (maneuverType === ManeuverType.Turn) {
372
- if (maneuverModifier === ManeuverModifier.Uturn ||
373
- maneuverModifier === ManeuverModifier.Straight) {
374
- instruction = translate.instant(`igo.geo.directions.results.maneuverType.turn.${maneuverModifier}`, {
375
- maneuverModifier: translatedManeuverModifier,
376
- name
377
- });
378
- if (maneuverModifier === ManeuverModifier.Uturn) {
379
- iconName = 'u_turn_left';
380
- }
381
- }
382
- else {
383
- instruction = translate.instant('igo.geo.directions.results.maneuverType.turn.else', {
384
- maneuverModifier: translatedManeuverModifier,
385
- name
386
- });
387
- if (maneuverModifier === ManeuverModifier.SlightRight) {
388
- iconName = 'turn_slight_right';
389
- }
390
- else if (maneuverModifier === ManeuverModifier.Right ||
391
- maneuverModifier === ManeuverModifier.SharpRight) {
392
- iconName = 'turn_right';
393
- }
394
- else if (maneuverModifier === ManeuverModifier.Left ||
395
- maneuverModifier === ManeuverModifier.SharpLeft) {
396
- iconName = 'turn_left';
397
- }
398
- else if (maneuverModifier === ManeuverModifier.SlightLeft) {
399
- iconName = 'turn_slight_left';
400
- }
401
- }
402
- }
403
- else if (maneuverType === ManeuverType.NewName) {
404
- instruction = translate.instant(`igo.geo.directions.results.maneuverType.new name`, {
405
- name,
406
- maneuverBearing: translatedManeuverBearingAfter
407
- });
408
- }
409
- else if (maneuverType === ManeuverType.Depart) {
410
- iconName = 'directions';
411
- instruction = translate.instant(`igo.geo.directions.results.maneuverType.depart`, {
412
- name,
413
- maneuverBearing: translatedManeuverBearingAfter
414
- });
415
- }
416
- else if (maneuverType === ManeuverType.Arrive) {
417
- iconName = 'sports_score';
418
- instruction = translate.instant(`igo.geo.directions.results.maneuverType.arrive.${lastStep ? 'lastStep' : 'intermediate'}`, {
419
- name
420
- });
421
- }
422
- else if (maneuverType === ManeuverType.Merge) {
423
- instruction = translate.instant('igo.geo.directions.results.maneuverType.merge', {
424
- name
425
- });
426
- iconName = 'merge';
427
- }
428
- else if (maneuverType === ManeuverType.OnRamp ||
429
- maneuverType === ManeuverType.OffRamp) {
430
- instruction = translate.instant(`igo.geo.directions.results.maneuverType.${maneuverType}`, {
431
- maneuverModifier: translatedManeuverModifier
432
- });
433
- }
434
- else if (maneuverType === ManeuverType.Fork) {
435
- const directionKey = maneuverModifier.search('left') >= 0 ? 'left' : 'right';
436
- iconName =
437
- directionKey === 'left' ? 'turn_slight_left' : 'turn_slight_right';
438
- instruction = translate.instant(`igo.geo.directions.results.maneuverType.fork.${directionKey}`, {
439
- name
440
- });
441
- }
442
- else if (maneuverType === ManeuverType.EndOfRoad ||
443
- maneuverType === ManeuverType.UseLane ||
444
- maneuverType === ManeuverType.Continue) {
445
- if (maneuverType === ManeuverType.Continue) {
446
- if (maneuverModifier === ManeuverModifier.Uturn) {
447
- iconName = 'u_turn_left';
448
- instruction = translate.instant(`igo.geo.directions.results.maneuverType.turn.${maneuverModifier}`, {
449
- maneuverModifier: translatedManeuverModifier,
450
- name
451
- });
452
- }
453
- else {
454
- instruction = translate.instant(`igo.geo.directions.results.maneuverType.${maneuverType}`, {
455
- maneuverModifier: translatedManeuverModifier,
456
- name
457
- });
458
- }
459
- }
460
- else {
461
- if (maneuverModifier === ManeuverModifier.SharpRight ||
462
- maneuverModifier === ManeuverModifier.Right) {
463
- iconName = 'turn_right';
464
- }
465
- else if (maneuverModifier === ManeuverModifier.SharpLeft ||
466
- maneuverModifier === ManeuverModifier.Left) {
467
- iconName = 'turn_left';
468
- }
469
- else if (maneuverModifier === ManeuverModifier.SlightRight) {
470
- iconName = 'turn_slight_right';
471
- }
472
- else if (maneuverModifier === ManeuverModifier.SlightLeft) {
473
- iconName = 'turn_slight_left';
474
- }
475
- instruction = translate.instant(`igo.geo.directions.results.maneuverType.${maneuverType}`, {
476
- maneuverModifier: translatedManeuverModifier,
477
- name
478
- });
479
- }
480
- }
481
- else if (maneuverType === ManeuverType.Roundabout ||
482
- maneuverType === ManeuverType.Rotary ||
483
- maneuverType === ManeuverType.RoundaboutTurn ||
484
- maneuverType === ManeuverType.ExitRoundabout) {
485
- const roundaboutKey = maneuverType.replace('roundabout ', '');
486
- instruction = translate.instant(`igo.geo.directions.results.maneuverType.${roundaboutKey}`, {
487
- name
488
- });
489
- iconName = 'donut_large';
490
- }
491
- else if (maneuverType === ManeuverType.Notification) {
492
- instruction = translate.instant('igo.geo.directions.results.maneuverType.notification');
493
- }
494
- return { instruction, iconName };
495
- }
496
- /**
497
- * Translates a maneuver modifier into a human-readable string using the provided language service.
498
- *
499
- * @param {ManeuverModifier} maneuverModifier - The maneuver modifier to be translated.
500
- * @param {LanguageService} languageService - The language service used for translation.
501
- * @return {string | undefined} The translated maneuver modifier string, or undefined if the modifier is falsy.
502
- */
503
- export function translateManeuverModifier(maneuverModifier, languageService) {
504
- const translate = languageService.translate;
505
- return maneuverModifier
506
- ? translate.instant(`igo.geo.directions.results.maneuverModifier.${maneuverModifier}`)
507
- : undefined;
508
- }
509
- /**
510
- * Translates the given bearing value into a human-readable direction using the provided language service.
511
- *
512
- * @param {number} bearing - The bearing value to be translated.
513
- * @param {LanguageService} languageService - The language service used for translation.
514
- * @return {string} The translated direction corresponding to the given bearing value.
515
- */
516
- export function translateManeuverBearing(bearing, languageService) {
517
- const translate = languageService.translate;
518
- const directions = ['n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'];
519
- const directionIndex = Math.round(bearing / 45) % 8;
520
- return translate.instant(`igo.geo.directions.results.direction.${directions[directionIndex]}`);
521
- }
522
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9ucy51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2RpcmVjdGlvbnMvc2hhcmVkL2RpcmVjdGlvbnMudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBRW5DLE9BQU8sU0FBUyxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBRWxDLE9BQU8sS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxPQUFPLE1BQU0sVUFBVSxDQUFDO0FBSXBDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFNUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ2pHLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixZQUFZLEVBQ2IsTUFBTSxtQkFBbUIsQ0FBQztBQWUzQjs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLFVBQXNCLEVBQ3RCLFlBQTRCLEtBQUssRUFDakMsS0FBSyxHQUFHLFVBQVU7SUFFbEIsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbkIsU0FBUztRQUNULGFBQWEsRUFBRSxDQUFDLE1BQVksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztLQUMvQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxTQUFpQixFQUNqQixjQUFzQjtJQUV0QixJQUFJLGdCQUFnQixHQUNsQiw2QkFBNkIsQ0FBQyxZQUFZLENBQUM7SUFDN0MsSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDcEIsZ0JBQWdCLEdBQUcsNkJBQTZCLENBQUMsS0FBSyxDQUFDO0lBQ3pELENBQUM7U0FBTSxJQUFJLFNBQVMsS0FBSyxjQUFjLEVBQUUsQ0FBQztRQUN4QyxnQkFBZ0IsR0FBRyw2QkFBNkIsQ0FBQyxHQUFHLENBQUM7SUFDdkQsQ0FBQztJQUNELE9BQU8sZ0JBQWdCLENBQUM7QUFDMUIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLGdCQUF3QixFQUN4QixVQUFzQjtJQUV0QixLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxRQUFRO1lBQ1gsSUFBSSxDQUFDLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzFFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyx1QkFBdUIsQ0FDN0MsSUFBSSxDQUFDLFFBQVEsRUFDYixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDNUIsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLFVBQXNCO0lBQ25ELE1BQU0sRUFBRSxHQUFXLElBQUksRUFBRSxDQUFDO0lBQzFCLE1BQU0sS0FBSyxHQUFXLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN2QyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBRWpDLEtBQUssTUFBTSxJQUFJLElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLHVCQUF1QixDQUM3QyxJQUFJLENBQUMsUUFBUSxFQUNiLEtBQUssQ0FBQyxNQUFNLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ2hCLEVBQUU7UUFDRixRQUFRLEVBQUUsV0FBVztRQUNyQixnQkFBZ0IsRUFBRSx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztLQUNyRSxDQUFDLENBQUM7SUFFSCxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvQixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLFVBQXNCLEVBQUUsSUFBVTtJQUNwRSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUM3QixPQUE4QjtJQUU5QixNQUFNLFNBQVMsR0FBRztRQUNoQixJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDaEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDL0IsS0FBSyxFQUFFLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDeEIsTUFBTSxFQUFFLENBQUM7Z0JBQ1QsTUFBTSxFQUFFLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQzNELENBQUM7U0FDSCxDQUFDO0tBQ0gsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFrQix3QkFBd0IsQ0FBQztRQUN4RCxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDN0IsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO1FBQ25DLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUNyQyxrQkFBa0IsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0tBQ3BDLENBQUMsQ0FBQztJQUVILE1BQU0sVUFBVSxHQUFvQjtRQUNsQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDaEIsTUFBTSxFQUFFLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDekIsS0FBSyxFQUFFLHVCQUF1QixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRztnQkFDakUsS0FBSyxFQUFFLEVBQUU7YUFDVixDQUFDO1NBQ0gsQ0FBQztRQUNGLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNoQixNQUFNLEVBQUUsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDO2dCQUN6QixLQUFLLEVBQUUsc0JBQXNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHO2dCQUNoRSxLQUFLLEVBQUUsQ0FBQzthQUNULENBQUM7U0FDSCxDQUFDO0tBQ0gsQ0FBQztJQUVGLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsaUJBQW9DLEVBQ3BDLGVBQWdDO0lBRWhDLE1BQU0sZUFBZSxHQUNuQixJQUFJLDJCQUEyQixDQUFDO1FBQzlCLE1BQU0sRUFBRSxhQUFhLENBQUMsSUFBSTtLQUMzQixDQUFDLENBQUM7SUFFTCxNQUFNLFVBQVUsR0FBZ0IsSUFBSSxXQUFXLENBQUM7UUFDOUMsa0JBQWtCLEVBQUUsSUFBSTtRQUN4QixFQUFFLEVBQUUsMkJBQTJCO1FBQy9CLEtBQUssRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQztRQUMxRSxNQUFNLEVBQUUsR0FBRztRQUNYLE1BQU0sRUFBRSxJQUFJLGlCQUFpQixFQUFFO1FBQy9CLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLE9BQU8sRUFBRSxJQUFJO1FBQ2IsU0FBUyxFQUFFO1lBQ1QsT0FBTyxFQUFFLEtBQUs7U0FDZjtRQUNELFlBQVksRUFBRTtZQUNaLE1BQU0sRUFBRSwyQkFBMkI7WUFDbkMsS0FBSyxFQUFFO2dCQUNMO29CQUNFLFlBQVksRUFBRSxJQUFJO29CQUNsQixTQUFTLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztvQkFDeEMsVUFBVSxFQUFFLEVBQUU7aUJBQ2Y7YUFDRjtTQUNGO1FBQ0QsVUFBVSxFQUFFLElBQUk7UUFDaEIsU0FBUyxFQUFFLEtBQUs7UUFDaEIsS0FBSyxFQUFFLGVBQWU7S0FDdkIsQ0FBQyxDQUFDO0lBQ0gsaUJBQWlCLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDakQscUJBQXFCLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxrQkFBc0MsRUFDdEMsZUFBZ0M7SUFFaEMsTUFBTSxlQUFlLEdBQ25CLElBQUksMkJBQTJCLENBQUM7UUFDOUIsTUFBTSxFQUFFLGFBQWEsQ0FBQyxJQUFJO0tBQzNCLENBQUMsQ0FBQztJQUVMLE1BQU0sVUFBVSxHQUFnQixJQUFJLFdBQVcsQ0FBQztRQUM5QyxrQkFBa0IsRUFBRSxJQUFJO1FBQ3hCLEVBQUUsRUFBRSwyQkFBMkI7UUFDL0IsS0FBSyxFQUFFLGVBQWUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGdDQUFnQyxDQUFDO1FBQzFFLE1BQU0sRUFBRSxHQUFHO1FBQ1gsTUFBTSxFQUFFLElBQUksaUJBQWlCLEVBQUU7UUFDL0IsZUFBZSxFQUFFLElBQUk7UUFDckIsT0FBTyxFQUFFLElBQUk7UUFDYixTQUFTLEVBQUU7WUFDVCxPQUFPLEVBQUUsS0FBSztTQUNmO1FBQ0QsWUFBWSxFQUFFO1lBQ1osTUFBTSxFQUFFLDJCQUEyQjtTQUNwQztRQUNELFVBQVUsRUFBRSxJQUFJO1FBQ2hCLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLEtBQUssRUFBRSxlQUFlO0tBQ3ZCLENBQUMsQ0FBQztJQUNILGlCQUFpQixDQUFDLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2xELHFCQUFxQixDQUFDLGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLGlCQUFvQztJQUN4RSxNQUFNLGVBQWUsR0FDbkIsSUFBSSwyQkFBMkIsQ0FBQztRQUM5QixNQUFNLEVBQUUsYUFBYSxDQUFDLElBQUk7S0FDM0IsQ0FBQyxDQUFDO0lBRUwsTUFBTSxTQUFTLEdBQWdCLElBQUksV0FBVyxDQUFDO1FBQzdDLGtCQUFrQixFQUFFLElBQUk7UUFDeEIsRUFBRSxFQUFFLDBCQUEwQjtRQUM5QixLQUFLLEVBQUUsRUFBRTtRQUNULE1BQU0sRUFBRSxHQUFHO1FBQ1gsTUFBTSxFQUFFLElBQUksaUJBQWlCLEVBQUU7UUFDL0IsZUFBZSxFQUFFLEtBQUs7UUFDdEIsT0FBTyxFQUFFLElBQUk7UUFDYixTQUFTLEVBQUU7WUFDVCxPQUFPLEVBQUUsS0FBSztTQUNmO1FBQ0QsWUFBWSxFQUFFO1lBQ1osTUFBTSxFQUFFLDJCQUEyQjtTQUNwQztRQUNELFVBQVUsRUFBRSxLQUFLO1FBQ2pCLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLEtBQUssRUFBRSxlQUFlO0tBQ3ZCLENBQUMsQ0FBQztJQUNILGlCQUFpQixDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hELHFCQUFxQixDQUFDLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUN4QyxJQUFVLEVBQ1YsaUJBQW9DLEVBQ3BDLFVBQWtCLEVBQ2xCLGVBQWdDO0lBRWhDLElBQUksU0FBaUIsQ0FBQztJQUN0QixJQUFJLFFBQWdCLENBQUM7SUFFckIsUUFBUSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QixLQUFLLDZCQUE2QixDQUFDLEtBQUs7WUFDdEMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUN0QixRQUFRLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQzFDLGdDQUFnQyxDQUNqQyxDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUssNkJBQTZCLENBQUMsR0FBRztZQUNwQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBQ3RCLFFBQVEsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDMUMsOEJBQThCLENBQy9CLENBQUM7WUFDRixNQUFNO1FBQ1I7WUFDRSxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBQ3RCLFFBQVE7Z0JBQ04sZUFBZSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQy9CLHVDQUF1QyxDQUN4QztvQkFDRCxJQUFJO29CQUNKLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDaEIsTUFBTTtJQUNWLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBaUIsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUMxQyxNQUFNLENBQUMsU0FBUyxDQUNkLElBQUksQ0FBQyxXQUFXLEVBQ2hCLFVBQVUsRUFDVixpQkFBaUIsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUNyQyxDQUNGLENBQUM7SUFFRixNQUFNLFdBQVcsR0FBb0IsSUFBSSxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FDdEUsS0FBSyxFQUNMO1FBQ0UsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGNBQWM7UUFDdkQsY0FBYyxFQUFFLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxjQUFjO0tBQ3JELENBQ2lCLENBQUM7SUFFckIsTUFBTSxZQUFZLEdBQW9CLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckUsTUFBTSxvQkFBb0IsR0FBVyxZQUFZO1FBQy9DLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVE7UUFDNUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVOLE1BQU0sZ0JBQWdCLEdBQW9CO1FBQ3hDLElBQUksRUFBRSxPQUFPO1FBQ2IsUUFBUSxFQUFFLFdBQVc7UUFDckIsVUFBVSxFQUFFLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxjQUFjO1FBQ2hELFVBQVUsRUFBRTtZQUNWLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLElBQUksRUFBRSxjQUFjLENBQUMsSUFBSTtZQUN6QixRQUFRO1lBQ1IsU0FBUztZQUNULFdBQVcsRUFBRSxDQUFDO1lBQ2QsSUFBSTtTQUNMO1FBQ0QsSUFBSSxFQUFFO1lBQ0osRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsUUFBUSxFQUFFLG9CQUFvQixHQUFHLENBQUM7U0FDbkM7UUFDRCxFQUFFLEVBQUUsSUFBSSxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztLQUM3QixDQUFDO0lBQ0YsaUJBQWlCLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsNEJBQTRCLENBQzFDLGtCQUFzQyxFQUN0QyxVQUFzQixFQUN0QixVQUFrQixFQUNsQixNQUFNLEdBQUcsS0FBSztJQUVkLE1BQU0sVUFBVSxHQUFlLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQy9ELE1BQU0sY0FBYyxHQUFzQixJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDNUUsTUFBTSxlQUFlLEdBQXNCLGNBQWMsQ0FBQyxTQUFTLENBQ2pFLFVBQVUsRUFDVixrQkFBa0IsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUN0QyxDQUFDO0lBRUYsTUFBTSxXQUFXLEdBQW9CLElBQUksU0FBUyxFQUFFLENBQUMsbUJBQW1CLENBQ3RFLGVBQWUsRUFDZjtRQUNFLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxjQUFjO1FBQ3hELGNBQWMsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsY0FBYztLQUN0RCxDQUNpQixDQUFDO0lBRXJCLE1BQU0sYUFBYSxHQUEwQixrQkFBa0IsQ0FBQyxHQUFHLENBQ2pFLFVBQVUsQ0FBQyxFQUFFLENBQ2QsQ0FBQztJQUNGLE1BQU0scUJBQXFCLEdBQVcsYUFBYTtRQUNqRCxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRO1FBQzdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFTixNQUFNLGlCQUFpQixHQUEwQjtRQUMvQyxJQUFJLEVBQUUsT0FBTztRQUNiLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsY0FBYztRQUNqRCxVQUFVLEVBQUU7WUFDVixFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUU7WUFDakIsSUFBSSxFQUFFLGNBQWMsQ0FBQyxLQUFLO1lBQzFCLE1BQU07WUFDTixVQUFVO1NBQ1g7UUFDRCxJQUFJLEVBQUU7WUFDSixFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUU7WUFDakIsUUFBUSxFQUFFLHFCQUFxQixHQUFHLENBQUM7U0FDcEM7UUFDRCxFQUFFLEVBQUUsSUFBSSxTQUFTLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQztLQUN2QyxDQUFDO0lBQ0Ysa0JBQWtCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFjO0lBQzNDLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLE1BQU0sR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUNsQixPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ25DLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBVyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3pDLE1BQU0sY0FBYyxHQUFVLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXZELE9BQU8sR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDNUUsR0FBRyxFQUNILEdBQUcsQ0FDSixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxPQUFlO0lBQzVDLE1BQU0sS0FBSyxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ2pELE1BQU0sT0FBTyxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFFMUQsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLE9BQU8sR0FBRyxLQUFLLE1BQU0sT0FBTyxNQUFNLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixPQUFPLEdBQUcsT0FBTyxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUN4QixJQUFhLEVBQ2IsZUFBZ0MsRUFDaEMsUUFBUSxHQUFHLEtBQUs7SUFFaEIsTUFBTSxZQUFZLEdBQWlCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQ3RELE1BQU0sZ0JBQWdCLEdBQXFCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO0lBQ2xFLE1BQU0sSUFBSSxHQUFXLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDL0IsTUFBTSxvQkFBb0IsR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztJQUVqRSxNQUFNLFNBQVMsR0FBcUIsZUFBZSxDQUFDLFNBQVMsQ0FBQztJQUM5RCxNQUFNLDhCQUE4QixHQUFXLHdCQUF3QixDQUNyRSxvQkFBb0IsRUFDcEIsZUFBZSxDQUNoQixDQUFDO0lBQ0YsTUFBTSwwQkFBMEIsR0FBVyx5QkFBeUIsQ0FDbEUsZ0JBQWdCLEVBQ2hCLGVBQWUsQ0FDaEIsQ0FBQztJQUVGLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLDRCQUE0QjtJQUN2RCxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFFckIsSUFBSSxZQUFZLEtBQUssWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZDLElBQ0UsZ0JBQWdCLEtBQUssZ0JBQWdCLENBQUMsS0FBSztZQUMzQyxnQkFBZ0IsS0FBSyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQzlDLENBQUM7WUFDRCxXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDN0IsZ0RBQWdELGdCQUFnQixFQUFFLEVBQ2xFO2dCQUNFLGdCQUFnQixFQUFFLDBCQUEwQjtnQkFDNUMsSUFBSTthQUNMLENBQ0YsQ0FBQztZQUNGLElBQUksZ0JBQWdCLEtBQUssZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2hELFFBQVEsR0FBRyxhQUFhLENBQUM7WUFDM0IsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQzdCLG1EQUFtRCxFQUNuRDtnQkFDRSxnQkFBZ0IsRUFBRSwwQkFBMEI7Z0JBQzVDLElBQUk7YUFDTCxDQUNGLENBQUM7WUFFRixJQUFJLGdCQUFnQixLQUFLLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN0RCxRQUFRLEdBQUcsbUJBQW1CLENBQUM7WUFDakMsQ0FBQztpQkFBTSxJQUNMLGdCQUFnQixLQUFLLGdCQUFnQixDQUFDLEtBQUs7Z0JBQzNDLGdCQUFnQixLQUFLLGdCQUFnQixDQUFDLFVBQVUsRUFDaEQsQ0FBQztnQkFDRCxRQUFRLEdBQUcsWUFBWSxDQUFDO1lBQzFCLENBQUM7aUJBQU0sSUFDTCxnQkFBZ0IsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJO2dCQUMxQyxnQkFBZ0IsS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQy9DLENBQUM7Z0JBQ0QsUUFBUSxHQUFHLFdBQVcsQ0FBQztZQUN6QixDQUFDO2lCQUFNLElBQUksZ0JBQWdCLEtBQUssZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzVELFFBQVEsR0FBRyxrQkFBa0IsQ0FBQztZQUNoQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7U0FBTSxJQUFJLFlBQVksS0FBSyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakQsV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQzdCLGtEQUFrRCxFQUNsRDtZQUNFLElBQUk7WUFDSixlQUFlLEVBQUUsOEJBQThCO1NBQ2hELENBQ0YsQ0FBQztJQUNKLENBQUM7U0FBTSxJQUFJLFlBQVksS0FBSyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEQsUUFBUSxHQUFHLFlBQVksQ0FBQztRQUN4QixXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDN0IsZ0RBQWdELEVBQ2hEO1lBQ0UsSUFBSTtZQUNKLGVBQWUsRUFBRSw4QkFBOEI7U0FDaEQsQ0FDRixDQUFDO0lBQ0osQ0FBQztTQUFNLElBQUksWUFBWSxLQUFLLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoRCxRQUFRLEdBQUcsY0FBYyxDQUFDO1FBQzFCLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUM3QixrREFBa0QsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUMxRjtZQUNFLElBQUk7U0FDTCxDQUNGLENBQUM7SUFDSixDQUFDO1NBQU0sSUFBSSxZQUFZLEtBQUssWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9DLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUM3QiwrQ0FBK0MsRUFDL0M7WUFDRSxJQUFJO1NBQ0wsQ0FDRixDQUFDO1FBQ0YsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUNyQixDQUFDO1NBQU0sSUFDTCxZQUFZLEtBQUssWUFBWSxDQUFDLE1BQU07UUFDcEMsWUFBWSxLQUFLLFlBQVksQ0FBQyxPQUFPLEVBQ3JDLENBQUM7UUFDRCxXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDN0IsMkNBQTJDLFlBQVksRUFBRSxFQUN6RDtZQUNFLGdCQUFnQixFQUFFLDBCQUEwQjtTQUM3QyxDQUNGLENBQUM7SUFDSixDQUFDO1NBQU0sSUFBSSxZQUFZLEtBQUssWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlDLE1BQU0sWUFBWSxHQUNoQixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUMxRCxRQUFRO1lBQ04sWUFBWSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDO1FBQ3JFLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUM3QixnREFBZ0QsWUFBWSxFQUFFLEVBQzlEO1lBQ0UsSUFBSTtTQUNMLENBQ0YsQ0FBQztJQUNKLENBQUM7U0FBTSxJQUNMLFlBQVksS0FBSyxZQUFZLENBQUMsU0FBUztRQUN2QyxZQUFZLEtBQUssWUFBWSxDQUFDLE9BQU87UUFDckMsWUFBWSxLQUFLLFlBQVksQ0FBQyxRQUFRLEVBQ3RDLENBQUM7UUFDRCxJQUFJLFlBQVksS0FBSyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0MsSUFBSSxnQkFBZ0IsS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDaEQsUUFBUSxHQUFHLGFBQWEsQ0FBQztnQkFDekIsV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQzdCLGdEQUFnRCxnQkFBZ0IsRUFBRSxFQUNsRTtvQkFDRSxnQkFBZ0IsRUFBRSwwQkFBMEI7b0JBQzVDLElBQUk7aUJBQ0wsQ0FDRixDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUM3QiwyQ0FBMkMsWUFBWSxFQUFFLEVBQ3pEO29CQUNFLGdCQUFnQixFQUFFLDBCQUEwQjtvQkFDNUMsSUFBSTtpQkFDTCxDQUNGLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUNFLGdCQUFnQixLQUFLLGdCQUFnQixDQUFDLFVBQVU7Z0JBQ2hELGdCQUFnQixLQUFLLGdCQUFnQixDQUFDLEtBQUssRUFDM0MsQ0FBQztnQkFDRCxRQUFRLEdBQUcsWUFBWSxDQUFDO1lBQzFCLENBQUM7aUJBQU0sSUFDTCxnQkFBZ0IsS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTO2dCQUMvQyxnQkFBZ0IsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQzFDLENBQUM7Z0JBQ0QsUUFBUSxHQUFHLFdBQVcsQ0FBQztZQUN6QixDQUFDO2lCQUFNLElBQUksZ0JBQWdCLEtBQUssZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzdELFFBQVEsR0FBRyxtQkFBbUIsQ0FBQztZQUNqQyxDQUFDO2lCQUFNLElBQUksZ0JBQWdCLEtBQUssZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzVELFFBQVEsR0FBRyxrQkFBa0IsQ0FBQztZQUNoQyxDQUFDO1lBQ0QsV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQzdCLDJDQUEyQyxZQUFZLEVBQUUsRUFDekQ7Z0JBQ0UsZ0JBQWdCLEVBQUUsMEJBQTBCO2dCQUM1QyxJQUFJO2FBQ0wsQ0FDRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7U0FBTSxJQUNMLFlBQVksS0FBSyxZQUFZLENBQUMsVUFBVTtRQUN4QyxZQUFZLEtBQUssWUFBWSxDQUFDLE1BQU07UUFDcEMsWUFBWSxLQUFLLFlBQVksQ0FBQyxjQUFjO1FBQzVDLFlBQVksS0FBSyxZQUFZLENBQUMsY0FBYyxFQUM1QyxDQUFDO1FBQ0QsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUQsV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQzdCLDJDQUEyQyxhQUFhLEVBQUUsRUFDMUQ7WUFDRSxJQUFJO1NBQ0wsQ0FDRixDQUFDO1FBQ0YsUUFBUSxHQUFHLGFBQWEsQ0FBQztJQUMzQixDQUFDO1NBQU0sSUFBSSxZQUFZLEtBQUssWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RELFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUM3QixzREFBc0QsQ0FDdkQsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQ25DLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQ3ZDLGdCQUFrQyxFQUNsQyxlQUFnQztJQUVoQyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDO0lBQzVDLE9BQU8sZ0JBQWdCO1FBQ3JCLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUNmLCtDQUErQyxnQkFBZ0IsRUFBRSxDQUNsRTtRQUNILENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsT0FBZSxFQUNmLGVBQWdDO0lBRWhDLE1BQU0sU0FBUyxHQUFxQixlQUFlLENBQUMsU0FBUyxDQUFDO0lBQzlELE1BQU0sVUFBVSxHQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRTFFLE1BQU0sY0FBYyxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU1RCxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQ3RCLHdDQUF3QyxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FDckUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2xhbmd1YWdlJztcbmltcG9ydCB7IE51bWJlclV0aWxzLCB1dWlkIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuXG5pbXBvcnQgb2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xuaW1wb3J0IHsgQ29vcmRpbmF0ZSB9IGZyb20gJ29sL2Nvb3JkaW5hdGUnO1xuaW1wb3J0IE9sR2VvSlNPTiBmcm9tICdvbC9mb3JtYXQvR2VvSlNPTic7XG5pbXBvcnQgKiBhcyBvbEdlb20gZnJvbSAnb2wvZ2VvbSc7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0ICogYXMgb2xQcm9qIGZyb20gJ29sL3Byb2onO1xuaW1wb3J0ICogYXMgb2xTdHlsZSBmcm9tICdvbC9zdHlsZSc7XG5cbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHsgRmVhdHVyZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9mZWF0dXJlLWRhdGFzb3VyY2UnO1xuaW1wb3J0IHsgdHJ5QmluZFN0b3JlTGF5ZXIgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLXN0b3JlLnV0aWxzJztcbmltcG9ydCB7IEZFQVRVUkUsIEZlYXR1cmVNb3Rpb24gfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLmVudW1zJztcbmltcG9ydCB7IEZlYXR1cmVHZW9tZXRyeSB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB0cnlBZGRMb2FkaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9zdHJhdGVnaWVzLnV0aWxzJztcbmltcG9ydCB7IEZlYXR1cmVTdG9yZUxvYWRpbmdTdHJhdGVneSB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL3N0cmF0ZWdpZXMvbG9hZGluZyc7XG5pbXBvcnQgeyBWZWN0b3JMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvdmVjdG9yLWxheWVyJztcbmltcG9ydCB7IGNyZWF0ZU92ZXJsYXlNYXJrZXJTdHlsZSB9IGZyb20gJy4uLy4uL3N0eWxlL3NoYXJlZC9vdmVybGF5L292ZXJsYXktbWFya2VyLXN0eWxlLnV0aWxzJztcbmltcG9ydCB7XG4gIERpcmVjdGlvblJlbGF0aXZlUG9zaXRpb25UeXBlLFxuICBEaXJlY3Rpb25zVHlwZSxcbiAgTWFuZXV2ZXJNb2RpZmllcixcbiAgTWFuZXV2ZXJUeXBlXG59IGZyb20gJy4vZGlyZWN0aW9ucy5lbnVtJztcbmltcG9ydCB7XG4gIERpcmVjdGlvbnMsXG4gIEZlYXR1cmVXaXRoRGlyZWN0aW9ucyxcbiAgRmVhdHVyZVdpdGhTdG9wLFxuICBJZ29TdGVwLFxuICBTdG9wXG59IGZyb20gJy4vZGlyZWN0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgUm91dGVzRmVhdHVyZVN0b3JlLFxuICBTdGVwc0ZlYXR1cmVTdG9yZSxcbiAgU3RvcHNGZWF0dXJlU3RvcmUsXG4gIFN0b3BzU3RvcmVcbn0gZnJvbSAnLi9zdG9yZSc7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc29ydGluZyBvZiB0aGUgc3RvcHMgaW4gdGhlIHByb3ZpZGVkIFN0b3BzU3RvcmUgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBmaWVsZCBhbmQgZGlyZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7U3RvcHNTdG9yZX0gc3RvcHNTdG9yZSAtIFRoZSBTdG9wc1N0b3JlIHRvIHVwZGF0ZSB0aGUgc29ydGluZyBmb3IuXG4gKiBAcGFyYW0geydhc2MnIHwgJ2Rlc2MnfSBbZGlyZWN0aW9uPSdhc2MnXSAtIFRoZSBkaXJlY3Rpb24gb2Ygc29ydGluZyAoJ2FzYycgZm9yIGFzY2VuZGluZywgJ2Rlc2MnIGZvciBkZXNjZW5kaW5nKS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbZmllbGQ9J3Bvc2l0aW9uJ10gLSBUaGUgZmllbGQgdG8gc29ydCB0aGUgc3RvcHMgYnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdG9yZVNvcnRpbmcoXG4gIHN0b3BzU3RvcmU6IFN0b3BzU3RvcmUsXG4gIGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJyxcbiAgZmllbGQgPSAncG9zaXRpb24nXG4pOiB2b2lkIHtcbiAgc3RvcHNTdG9yZS52aWV3LnNvcnQoe1xuICAgIGRpcmVjdGlvbixcbiAgICB2YWx1ZUFjY2Vzc29yOiAoZW50aXR5OiBTdG9wKSA9PiBlbnRpdHlbZmllbGRdXG4gIH0pO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiBhIHN0b3AgaW4gYSBsaXN0IG9mIHN0b3BzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdG9wSW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIHN0b3AuXG4gKiBAcGFyYW0ge251bWJlcn0gc3RvcExpc3RMZW5ndGggLSBUaGUgdG90YWwgbnVtYmVyIG9mIHN0b3BzLlxuICogQHJldHVybiB7RGlyZWN0aW9uUmVsYXRpdmVQb3NpdGlvblR5cGV9IFRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0aGUgc3RvcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKFxuICBzdG9wSW5kZXg6IG51bWJlcixcbiAgc3RvcExpc3RMZW5ndGg6IG51bWJlclxuKTogRGlyZWN0aW9uUmVsYXRpdmVQb3NpdGlvblR5cGUge1xuICBsZXQgcmVsYXRpdmVQb3NpdGlvbjogRGlyZWN0aW9uUmVsYXRpdmVQb3NpdGlvblR5cGUgPVxuICAgIERpcmVjdGlvblJlbGF0aXZlUG9zaXRpb25UeXBlLkludGVybWVkaWF0ZTtcbiAgaWYgKHN0b3BJbmRleCA9PT0gMCkge1xuICAgIHJlbGF0aXZlUG9zaXRpb24gPSBEaXJlY3Rpb25SZWxhdGl2ZVBvc2l0aW9uVHlwZS5TdGFydDtcbiAgfSBlbHNlIGlmIChzdG9wSW5kZXggPT09IHN0b3BMaXN0TGVuZ3RoKSB7XG4gICAgcmVsYXRpdmVQb3NpdGlvbiA9IERpcmVjdGlvblJlbGF0aXZlUG9zaXRpb25UeXBlLkVuZDtcbiAgfVxuICByZXR1cm4gcmVsYXRpdmVQb3NpdGlvbjtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgcG9zaXRpb24gYW5kIHJlbGF0aXZlIHBvc2l0aW9uIG9mIHN0b3BzIGluIHRoZSBnaXZlbiBzdG9wc1N0b3JlLlxuICpcbiAqIEBwYXJhbSB7U3RvcHNTdG9yZX0gc3RvcHNTdG9yZSAtIFRoZSBzdG9yZSBjb250YWluaW5nIHRoZSBzdG9wcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVTdG9wc1Bvc2l0aW9uKFxuICBkZWxldGVkU3RvcEluZGV4OiBudW1iZXIsXG4gIHN0b3BzU3RvcmU6IFN0b3BzU3RvcmVcbik6IHZvaWQge1xuICBmb3IgKGNvbnN0IHN0b3Agb2Ygc3RvcHNTdG9yZS5hbGwoKSkge1xuICAgIHN0b3AucG9zaXRpb24gPVxuICAgICAgc3RvcC5wb3NpdGlvbiA+IGRlbGV0ZWRTdG9wSW5kZXggPyAoc3RvcC5wb3NpdGlvbiAtPSAxKSA6IHN0b3AucG9zaXRpb247XG4gICAgc3RvcC5yZWxhdGl2ZVBvc2l0aW9uID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24oXG4gICAgICBzdG9wLnBvc2l0aW9uLFxuICAgICAgc3RvcHNTdG9yZS5hbGwoKS5sZW5ndGggLSAxXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZHMgYSBzdG9wIHRvIHRoZSBnaXZlbiBzdG9wc1N0b3JlLiBUaGUgc3RvcCBpcyBhbHdheXMgYWRkZWQgYXMgdGhlIGxhc3Qgc3RvcC5cbiAqXG4gKiBAcGFyYW0ge1N0b3BzU3RvcmV9IHN0b3BzU3RvcmUgLSBUaGUgc3RvcmUgY29udGFpbmluZyB0aGUgc3RvcHMuXG4gKiBAcmV0dXJuIHtTdG9wfSBUaGUgbmV3bHkgYWRkZWQgc3RvcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFN0b3BUb1N0b3JlKHN0b3BzU3RvcmU6IFN0b3BzU3RvcmUpOiBTdG9wIHtcbiAgY29uc3QgaWQ6IHN0cmluZyA9IHV1aWQoKTtcbiAgY29uc3Qgc3RvcHM6IFN0b3BbXSA9IHN0b3BzU3RvcmUuYWxsKCk7XG4gIGNvbnN0IGluc2VydEluZGV4ID0gc3RvcHMubGVuZ3RoO1xuXG4gIGZvciAoY29uc3Qgc3RvcCBvZiBzdG9wc1N0b3JlLmFsbCgpKSB7XG4gICAgc3RvcC5yZWxhdGl2ZVBvc2l0aW9uID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24oXG4gICAgICBzdG9wLnBvc2l0aW9uLFxuICAgICAgc3RvcHMubGVuZ3RoXG4gICAgKTtcbiAgfVxuXG4gIHN0b3BzU3RvcmUuaW5zZXJ0KHtcbiAgICBpZCxcbiAgICBwb3NpdGlvbjogaW5zZXJ0SW5kZXgsXG4gICAgcmVsYXRpdmVQb3NpdGlvbjogY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24oaW5zZXJ0SW5kZXgsIHN0b3BzLmxlbmd0aClcbiAgfSk7XG5cbiAgdXBkYXRlU3RvcmVTb3J0aW5nKHN0b3BzU3RvcmUpO1xuICByZXR1cm4gc3RvcHNTdG9yZS5nZXQoaWQpO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYSBzdG9wIGZyb20gdGhlIGdpdmVuIHN0b3BzU3RvcmUgYW5kIHVwZGF0ZXMgdGhlIHBvc2l0aW9ucyBvZiB0aGUgcmVtYWluaW5nIHN0b3BzLlxuICpcbiAqIEBwYXJhbSB7U3RvcHNTdG9yZX0gc3RvcHNTdG9yZSAtIFRoZSBzdG9yZSBjb250YWluaW5nIHRoZSBzdG9wcy5cbiAqIEBwYXJhbSB7U3RvcH0gc3RvcCAtIFRoZSBzdG9wIHRvIGJlIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVTdG9wRnJvbVN0b3JlKHN0b3BzU3RvcmU6IFN0b3BzU3RvcmUsIHN0b3A6IFN0b3ApOiB2b2lkIHtcbiAgc3RvcHNTdG9yZS5kZWxldGUoc3RvcCk7XG4gIGNvbXB1dGVTdG9wc1Bvc2l0aW9uKHN0b3AucG9zaXRpb24sIHN0b3BzU3RvcmUpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHN0eWxlIGZvciB0aGUgZGlyZWN0aW9ucyBzdGVwcywgc3RvcHMgYW5kIHJvdXRlXG4gKiBAcGFyYW0gZmVhdHVyZSBPbEZlYXR1cmVcbiAqIEByZXR1cm5zIE9MIHN0eWxlIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXJlY3Rpb25zU3R5bGUoXG4gIGZlYXR1cmU6IG9sRmVhdHVyZTxPbEdlb21ldHJ5PlxuKTogb2xTdHlsZS5TdHlsZSB8IG9sU3R5bGUuU3R5bGVbXSB7XG4gIGNvbnN0IHN0ZXBTdHlsZSA9IFtcbiAgICBuZXcgb2xTdHlsZS5TdHlsZSh7XG4gICAgICBnZW9tZXRyeTogZmVhdHVyZS5nZXRHZW9tZXRyeSgpLFxuICAgICAgaW1hZ2U6IG5ldyBvbFN0eWxlLkNpcmNsZSh7XG4gICAgICAgIHJhZGl1czogNyxcbiAgICAgICAgc3Ryb2tlOiBuZXcgb2xTdHlsZS5TdHJva2UoeyBjb2xvcjogJyNGRjAwMDAnLCB3aWR0aDogMyB9KVxuICAgICAgfSlcbiAgICB9KVxuICBdO1xuXG4gIGNvbnN0IHN0b3BTdHlsZTogb2xTdHlsZS5TdHlsZSA9IGNyZWF0ZU92ZXJsYXlNYXJrZXJTdHlsZSh7XG4gICAgdGV4dDogZmVhdHVyZS5nZXQoJ3N0b3BUZXh0JyksXG4gICAgb3BhY2l0eTogZmVhdHVyZS5nZXQoJ3N0b3BPcGFjaXR5JyksXG4gICAgbWFya2VyQ29sb3I6IGZlYXR1cmUuZ2V0KCdzdG9wQ29sb3InKSxcbiAgICBtYXJrZXJPdXRsaW5lQ29sb3I6IFsyNTUsIDI1NSwgMjU1XVxuICB9KTtcblxuICBjb25zdCByb3V0ZVN0eWxlOiBvbFN0eWxlLlN0eWxlW10gPSBbXG4gICAgbmV3IG9sU3R5bGUuU3R5bGUoe1xuICAgICAgc3Ryb2tlOiBuZXcgb2xTdHlsZS5TdHJva2Uoe1xuICAgICAgICBjb2xvcjogYHJnYmEoMTA2LCAxMjEsIDEzMCwgJHtmZWF0dXJlLmdldCgnYWN0aXZlJykgPyAwLjc1IDogMH0pYCxcbiAgICAgICAgd2lkdGg6IDEwXG4gICAgICB9KVxuICAgIH0pLFxuICAgIG5ldyBvbFN0eWxlLlN0eWxlKHtcbiAgICAgIHN0cm9rZTogbmV3IG9sU3R5bGUuU3Ryb2tlKHtcbiAgICAgICAgY29sb3I6IGByZ2JhKDc5LCAxNjksIDIyMSwgJHtmZWF0dXJlLmdldCgnYWN0aXZlJykgPyAwLjc1IDogMH0pYCxcbiAgICAgICAgd2lkdGg6IDZcbiAgICAgIH0pXG4gICAgfSlcbiAgXTtcblxuICBpZiAoZmVhdHVyZS5nZXQoJ3R5cGUnKSA9PT0gRGlyZWN0aW9uc1R5cGUuU3RvcCkge1xuICAgIHJldHVybiBzdG9wU3R5bGU7XG4gIH1cbiAgaWYgKGZlYXR1cmUuZ2V0KCd0eXBlJykgPT09IERpcmVjdGlvbnNUeXBlLlZlcnRleCkge1xuICAgIHJldHVybiBzdGVwU3R5bGU7XG4gIH1cbiAgaWYgKGZlYXR1cmUuZ2V0KCd0eXBlJykgPT09IERpcmVjdGlvbnNUeXBlLlJvdXRlKSB7XG4gICAgcmV0dXJuIHJvdXRlU3R5bGU7XG4gIH1cbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyB0aGUgc3RvcHMgZmVhdHVyZSBzdG9yZSB3aXRoIHRoZSBwcm92aWRlZCBsYW5ndWFnZSBzZXJ2aWNlLlxuICpcbiAqIEBwYXJhbSB7U3RvcHNGZWF0dXJlU3RvcmV9IHN0b3BzRmVhdHVyZVN0b3JlIC0gVGhlIHN0b3BzIGZlYXR1cmUgc3RvcmUgdG8gaW5pdGlhbGl6ZS5cbiAqIEBwYXJhbSB7TGFuZ3VhZ2VTZXJ2aWNlfSBsYW5ndWFnZVNlcnZpY2UgLSBUaGUgbGFuZ3VhZ2Ugc2VydmljZSB1c2VkIGZvciB0cmFuc2xhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0U3RvcHNGZWF0dXJlU3RvcmUoXG4gIHN0b3BzRmVhdHVyZVN0b3JlOiBTdG9wc0ZlYXR1cmVTdG9yZSxcbiAgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2Vcbik6IHZvaWQge1xuICBjb25zdCBsb2FkaW5nU3RyYXRlZ3k6IEZlYXR1cmVTdG9yZUxvYWRpbmdTdHJhdGVneSA9XG4gICAgbmV3IEZlYXR1cmVTdG9yZUxvYWRpbmdTdHJhdGVneSh7XG4gICAgICBtb3Rpb246IEZlYXR1cmVNb3Rpb24uTm9uZVxuICAgIH0pO1xuXG4gIGNvbnN0IHN0b3BzTGF5ZXI6IFZlY3RvckxheWVyID0gbmV3IFZlY3RvckxheWVyKHtcbiAgICBpc0lnb0ludGVybmFsTGF5ZXI6IHRydWUsXG4gICAgaWQ6ICdpZ28tZGlyZWN0aW9uLXN0b3BzLWxheWVyJyxcbiAgICB0aXRsZTogbGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRpcmVjdGlvbnMubGF5ZXIuc3RvcHMnKSxcbiAgICB6SW5kZXg6IDkxMSxcbiAgICBzb3VyY2U6IG5ldyBGZWF0dXJlRGF0YVNvdXJjZSgpLFxuICAgIHNob3dJbkxheWVyTGlzdDogdHJ1ZSxcbiAgICB2aXNpYmxlOiB0cnVlLFxuICAgIHdvcmtzcGFjZToge1xuICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICB9LFxuICAgIGxpbmtlZExheWVyczoge1xuICAgICAgbGlua0lkOiAnaWdvLWRpcmVjdGlvbi1zdG9wcy1sYXllcicsXG4gICAgICBsaW5rczogW1xuICAgICAgICB7XG4gICAgICAgICAgc3luY2VkRGVsZXRlOiB0cnVlLFxuICAgICAgICAgIGxpbmtlZElkczogWydpZ28tZGlyZWN0aW9uLXJvdXRlLWxheWVyJ10sXG4gICAgICAgICAgcHJvcGVydGllczogW11cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAgZXhwb3J0YWJsZTogdHJ1ZSxcbiAgICBicm93c2FibGU6IGZhbHNlLFxuICAgIHN0eWxlOiBkaXJlY3Rpb25zU3R5bGVcbiAgfSk7XG4gIHRyeUJpbmRTdG9yZUxheWVyKHN0b3BzRmVhdHVyZVN0b3JlLCBzdG9wc0xheWVyKTtcbiAgdHJ5QWRkTG9hZGluZ1N0cmF0ZWd5KHN0b3BzRmVhdHVyZVN0b3JlLCBsb2FkaW5nU3RyYXRlZ3kpO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSByb3V0ZXMgZmVhdHVyZSBzdG9yZSB3aXRoIHRoZSBwcm92aWRlZCBsYW5ndWFnZSBzZXJ2aWNlLlxuICpcbiAqIEBwYXJhbSB7U3RvcHNGZWF0dXJlU3RvcmV9IHJvdXRlc0ZlYXR1cmVTdG9yZSAtIFRoZSByb3V0ZXMgZmVhdHVyZSBzdG9yZSB0byBpbml0aWFsaXplLlxuICogQHBhcmFtIHtMYW5ndWFnZVNlcnZpY2V9IGxhbmd1YWdlU2VydmljZSAtIFRoZSBsYW5ndWFnZSBzZXJ2aWNlIHVzZWQgZm9yIHRyYW5zbGF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRSb3V0ZXNGZWF0dXJlU3RvcmUoXG4gIHJvdXRlc0ZlYXR1cmVTdG9yZTogUm91dGVzRmVhdHVyZVN0b3JlLFxuICBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZVxuKTogdm9pZCB7XG4gIGNvbnN0IGxvYWRpbmdTdHJhdGVneTogRmVhdHVyZVN0b3JlTG9hZGluZ1N0cmF0ZWd5ID1cbiAgICBuZXcgRmVhdHVyZVN0b3JlTG9hZGluZ1N0cmF0ZWd5KHtcbiAgICAgIG1vdGlvbjogRmVhdHVyZU1vdGlvbi5Ob25lXG4gICAgfSk7XG5cbiAgY29uc3Qgcm91dGVMYXllcjogVmVjdG9yTGF5ZXIgPSBuZXcgVmVjdG9yTGF5ZXIoe1xuICAgIGlzSWdvSW50ZXJuYWxMYXllcjogdHJ1ZSxcbiAgICBpZDogJ2lnby1kaXJlY3Rpb24tcm91dGUtbGF5ZXInLFxuICAgIHRpdGxlOiBsYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZGlyZWN0aW9ucy5sYXllci5yb3V0ZScpLFxuICAgIHpJbmRleDogOTEwLFxuICAgIHNvdXJjZTogbmV3IEZlYXR1cmVEYXRhU291cmNlKCksXG4gICAgc2hvd0luTGF5ZXJMaXN0OiB0cnVlLFxuICAgIHZpc2libGU6IHRydWUsXG4gICAgd29ya3NwYWNlOiB7XG4gICAgICBlbmFibGVkOiBmYWxzZVxuICAgIH0sXG4gICAgbGlua2VkTGF5ZXJzOiB7XG4gICAgICBsaW5rSWQ6ICdpZ28tZGlyZWN0aW9uLXJvdXRlLWxheWVyJ1xuICAgIH0sXG4gICAgZXhwb3J0YWJsZTogdHJ1ZSxcbiAgICBicm93c2FibGU6IGZhbHNlLFxuICAgIHN0eWxlOiBkaXJlY3Rpb25zU3R5bGVcbiAgfSk7XG4gIHRyeUJpbmRTdG9yZUxheWVyKHJvdXRlc0ZlYXR1cmVTdG9yZSwgcm91dGVMYXllcik7XG4gIHRyeUFkZExvYWRpbmdTdHJhdGVneShyb3V0ZXNGZWF0dXJlU3RvcmUsIGxvYWRpbmdTdHJhdGVneSk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIHJvdXRlcyBmZWF0dXJlIHN0b3JlLlxuICpcbiAqIEBwYXJhbSB7U3RvcHNGZWF0dXJlU3RvcmV9IHN0ZXBzRmVhdHVyZVN0b3JlIC0gVGhlIHN0ZXBzIGZlYXR1cmUgc3RvcmUgdG8gaW5pdGlhbGl6ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRTdGVwc0ZlYXR1cmVTdG9yZShzdGVwc0ZlYXR1cmVTdG9yZTogU3RlcHNGZWF0dXJlU3RvcmUpIHtcbiAgY29uc3QgbG9hZGluZ1N0cmF0ZWd5OiBGZWF0dXJlU3RvcmVMb2FkaW5nU3RyYXRlZ3kgPVxuICAgIG5ldyBGZWF0dXJlU3RvcmVMb2FkaW5nU3RyYXRlZ3koe1xuICAgICAgbW90aW9uOiBGZWF0dXJlTW90aW9uLk5vbmVcbiAgICB9KTtcblxuICBjb25zdCBzdGVwTGF5ZXI6IFZlY3RvckxheWVyID0gbmV3IFZlY3RvckxheWVyKHtcbiAgICBpc0lnb0ludGVybmFsTGF5ZXI6IHRydWUsXG4gICAgaWQ6ICdpZ28tZGlyZWN0aW9uLXN0ZXAtbGF5ZXInLFxuICAgIHRpdGxlOiAnJyxcbiAgICB6SW5kZXg6IDkxMCxcbiAgICBzb3VyY2U6IG5ldyBGZWF0dXJlRGF0YVNvdXJjZSgpLFxuICAgIHNob3dJbkxheWVyTGlzdDogZmFsc2UsXG4gICAgdmlzaWJsZTogdHJ1ZSxcbiAgICB3b3Jrc3BhY2U6IHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgfSxcbiAgICBsaW5rZWRMYXllcnM6IHtcbiAgICAgIGxpbmtJZDogJ2lnby1kaXJlY3Rpb24tcm91dGUtbGF5ZXInXG4gICAgfSxcbiAgICBleHBvcnRhYmxlOiBmYWxzZSxcbiAgICBicm93c2FibGU6IGZhbHNlLFxuICAgIHN0eWxlOiBkaXJlY3Rpb25zU3R5bGVcbiAgfSk7XG4gIHRyeUJpbmRTdG9yZUxheWVyKHN0ZXBzRmVhdHVyZVN0b3JlLCBzdGVwTGF5ZXIpO1xuICB0cnlBZGRMb2FkaW5nU3RyYXRlZ3koc3RlcHNGZWF0dXJlU3RvcmUsIGxvYWRpbmdTdHJhdGVneSk7XG59XG5cbi8qKlxuICogQWRkcyBhIHN0b3AgdG8gdGhlIHN0b3BzRmVhdHVyZVN0b3JlLlxuICpcbiAqIEBwYXJhbSB7U3RvcH0gc3RvcCAtIFRoZSBzdG9wIHRvIGJlIGFkZGVkLlxuICogQHBhcmFtIHtTdG9wc0ZlYXR1cmVTdG9yZX0gc3RvcHNGZWF0dXJlU3RvcmUgLSBUaGUgc3RvcHNGZWF0dXJlU3RvcmUgdG8gYWRkIHRoZSBzdG9wIHRvLlxuICogQHBhcmFtIHtzdHJpbmd9IHByb2plY3Rpb24gLSBUaGUgcHJvamVjdGlvbiBvZiB0aGUgc3RvcCBjb29yZGluYXRlcy5cbiAqIEBwYXJhbSB7TGFuZ3VhZ2VTZXJ2aWNlfSBsYW5ndWFnZVNlcnZpY2UgLSBUaGUgbGFuZ3VhZ2Ugc2VydmljZSBmb3IgdHJhbnNsYXRpbmcgc3RvcCB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU3RvcFRvU3RvcHNGZWF0dXJlU3RvcmUoXG4gIHN0b3A6IFN0b3AsXG4gIHN0b3BzRmVhdHVyZVN0b3JlOiBTdG9wc0ZlYXR1cmVTdG9yZSxcbiAgcHJvamVjdGlvbjogc3RyaW5nLFxuICBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZVxuKTogdm9pZCB7XG4gIGxldCBzdG9wQ29sb3I6IHN0cmluZztcbiAgbGV0IHN0b3BUZXh0OiBzdHJpbmc7XG5cbiAgc3dpdGNoIChzdG9wLnJlbGF0aXZlUG9zaXRpb24pIHtcbiAgICBjYXNlIERpcmVjdGlvblJlbGF0aXZlUG9zaXRpb25UeXBlLlN0YXJ0OlxuICAgICAgc3RvcENvbG9yID0gJyMwMDgwMDAnO1xuICAgICAgc3RvcFRleHQgPSBsYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICdpZ28uZ2VvLmRpcmVjdGlvbnMuaW5wdXQuc3RhcnQnXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaXJlY3Rpb25SZWxhdGl2ZVBvc2l0aW9uVHlwZS5FbmQ6XG4gICAgICBzdG9wQ29sb3IgPSAnI2Y2NDEzOSc7XG4gICAgICBzdG9wVGV4dCA9IGxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgJ2lnby5nZW8uZGlyZWN0aW9ucy5pbnB1dC5lbmQnXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN0b3BDb2xvciA9ICcjZmZkNzAwJztcbiAgICAgIHN0b3BUZXh0ID1cbiAgICAgICAgbGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdpZ28uZ2VvLmRpcmVjdGlvbnMuaW5wdXQuaW50ZXJtZWRpYXRlJ1xuICAgICAgICApICtcbiAgICAgICAgJyAjJyArXG4gICAgICAgIHN0b3AucG9zaXRpb247XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGNvbnN0IHBvaW50OiBvbEdlb20uUG9pbnQgPSBuZXcgb2xHZW9tLlBvaW50KFxuICAgIG9sUHJvai50cmFuc2Zvcm0oXG4gICAgICBzdG9wLmNvb3JkaW5hdGVzLFxuICAgICAgcHJvamVjdGlvbixcbiAgICAgIHN0b3BzRmVhdHVyZVN0b3JlLm1hcC5wcm9qZWN0aW9uQ29kZVxuICAgIClcbiAgKTtcblxuICBjb25zdCBnZW9qc29uR2VvbTogRmVhdHVyZUdlb21ldHJ5ID0gbmV3IE9sR2VvSlNPTigpLndyaXRlR2VvbWV0cnlPYmplY3QoXG4gICAgcG9pbnQsXG4gICAge1xuICAgICAgZmVhdHVyZVByb2plY3Rpb246IHN0b3BzRmVhdHVyZVN0b3JlLm1hcC5wcm9qZWN0aW9uQ29kZSxcbiAgICAgIGRhdGFQcm9qZWN0aW9uOiBzdG9wc0ZlYXR1cmVTdG9yZS5tYXAucHJvamVjdGlvbkNvZGVcbiAgICB9XG4gICkgYXMgRmVhdHVyZUdlb21ldHJ5O1xuXG4gIGNvbnN0IHByZXZpb3VzU3RvcDogRmVhdHVyZVdpdGhTdG9wID0gc3RvcHNGZWF0dXJlU3RvcmUuZ2V0KHN0b3AuaWQpO1xuICBjb25zdCBwcmV2aW91c1N0b3BSZXZpc2lvbjogbnVtYmVyID0gcHJldmlvdXNTdG9wXG4gICAgPyBwcmV2aW91c1N0b3AubWV0YS5yZXZpc2lvblxuICAgIDogMDtcblxuICBjb25zdCBzdG9wRmVhdHVyZVN0b3JlOiBGZWF0dXJlV2l0aFN0b3AgPSB7XG4gICAgdHlwZTogRkVBVFVSRSxcbiAgICBnZW9tZXRyeTogZ2VvanNvbkdlb20sXG4gICAgcHJvamVjdGlvbjogc3RvcHNGZWF0dXJlU3RvcmUubWFwLnByb2plY3Rpb25Db2RlLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGlkOiBzdG9wLmlkLFxuICAgICAgdHlwZTogRGlyZWN0aW9uc1R5cGUuU3RvcCxcbiAgICAgIHN0b3BUZXh0LFxuICAgICAgc3RvcENvbG9yLFxuICAgICAgc3RvcE9wYWNpdHk6IDEsXG4gICAgICBzdG9wXG4gICAgfSxcbiAgICBtZXRhOiB7XG4gICAgICBpZDogc3RvcC5pZCxcbiAgICAgIHJldmlzaW9uOiBwcmV2aW91c1N0b3BSZXZpc2lvbiArIDFcbiAgICB9LFxuICAgIG9sOiBuZXcgb2xGZWF0dXJlKHsgcG9pbnQgfSlcbiAgfTtcbiAgc3RvcHNGZWF0dXJlU3RvcmUudXBkYXRlKHN0b3BGZWF0dXJlU3RvcmUpO1xufVxuXG4vKipcbiAqIEFkZHMgYSByb3V0ZSB0byB0aGUgcm91dGVzIGZlYXR1cmUgc3RvcmUuXG4gKlxuICogQHBhcmFtIHtSb3V0ZXNGZWF0dXJlU3RvcmV9IHJvdXRlc0ZlYXR1cmVTdG9yZSAtIFRoZSByb3V0ZXMgZmVhdHVyZSBzdG9yZSB0byBhZGQgdGhlIHJvdXRlIHRvLlxuICogQHBhcmFtIHtEaXJlY3Rpb25zfSBkaXJlY3Rpb25zIC0gVGhlIGRpcmVjdGlvbnMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGdlb21ldHJ5IGFuZCBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9qZWN0aW9uIC0gVGhlIHByb2plY3Rpb24gb2YgdGhlIGdlb21ldHJ5IGNvb3JkaW5hdGVzLlxuICogQHBhcmFtIHtib29sZWFufSBbYWN0aXZlPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIHRoZSBkaXJlY3Rpb24gaXMgYWN0aXZlIG9yIG5vdC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFJvdXRlVG9Sb3V0ZXNGZWF0dXJlU3RvcmUoXG4gIHJvdXRlc0ZlYXR1cmVTdG9yZTogUm91dGVzRmVhdHVyZVN0b3JlLFxuICBkaXJlY3Rpb25zOiBEaXJlY3Rpb25zLFxuICBwcm9qZWN0aW9uOiBzdHJpbmcsXG4gIGFjdGl2ZSA9IGZhbHNlXG4pOiB2b2lkIHtcbiAgY29uc3QgY29vcmRpbmF0ZTogQ29vcmRpbmF0ZSA9IGRpcmVjdGlvbnMuZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gIGNvbnN0IGxpbmVzdHJpbmc0MzI2OiBvbEdlb20uTGluZVN0cmluZyA9IG5ldyBvbEdlb20uTGluZVN0cmluZyhjb29yZGluYXRlKTtcbiAgY29uc3QgbGluZXN0cmluZ1N0b3JlOiBvbEdlb20uTGluZVN0cmluZyA9IGxpbmVzdHJpbmc0MzI2LnRyYW5zZm9ybShcbiAgICBwcm9qZWN0aW9uLFxuICAgIHJvdXRlc0ZlYXR1cmVTdG9yZS5tYXAucHJvamVjdGlvbkNvZGVcbiAgKTtcblxuICBjb25zdCBnZW9qc29uR2VvbTogRmVhdHVyZUdlb21ldHJ5ID0gbmV3IE9sR2VvSlNPTigpLndyaXRlR2VvbWV0cnlPYmplY3QoXG4gICAgbGluZXN0cmluZ1N0b3JlLFxuICAgIHtcbiAgICAgIGZlYXR1cmVQcm9qZWN0aW9uOiByb3V0ZXNGZWF0dXJlU3RvcmUubWFwLnByb2plY3Rpb25Db2RlLFxuICAgICAgZGF0YVByb2plY3Rpb246IHJvdXRlc0ZlYXR1cmVTdG9yZS5tYXAucHJvamVjdGlvbkNvZGVcbiAgICB9XG4gICkgYXMgRmVhdHVyZUdlb21ldHJ5O1xuXG4gIGNvbnN0IHByZXZpb3VzUm91dGU6IEZlYXR1cmVXaXRoRGlyZWN0aW9ucyA9IHJvdXRlc0ZlYXR1cmVTdG9yZS5nZXQoXG4gICAgZGlyZWN0aW9ucy5pZFxuICApO1xuICBjb25zdCBwcmV2aW91c1JvdXRlUmV2aXNpb246IG51bWJlciA9IHByZXZpb3VzUm91dGVcbiAgICA/IHByZXZpb3VzUm91dGUubWV0YS5yZXZpc2lvblxuICAgIDogMDtcblxuICBjb25zdCByb3V0ZUZlYXR1cmVTdG9yZTogRmVhdHVyZVdpdGhEaXJlY3Rpb25zID0ge1xuICAgIHR5cGU6IEZFQVRVUkUsXG4gICAgZ2VvbWV0cnk6IGdlb2pzb25HZW9tLFxuICAgIHByb2plY3Rpb246IHJvdXRlc0ZlYXR1cmVTdG9yZS5tYXAucHJvamVjdGlvbkNvZGUsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgaWQ6IGRpcmVjdGlvbnMuaWQsXG4gICAgICB0eXBlOiBEaXJlY3Rpb25zVHlwZS5Sb3V0ZSxcbiAgICAgIGFjdGl2ZSxcbiAgICAgIGRpcmVjdGlvbnNcbiAgICB9LFxuICAgIG1ldGE6IHtcbiAgICAgIGlkOiBkaXJlY3Rpb25zLmlkLFxuICAgICAgcmV2aXNpb246IHByZXZpb3VzUm91dGVSZXZpc2lvbiArIDFcbiAgICB9LFxuICAgIG9sOiBuZXcgb2xGZWF0dXJlKHsgbGluZXN0cmluZ1N0b3JlIH0pXG4gIH07XG4gIHJvdXRlc0ZlYXR1cmVTdG9yZS51cGRhdGUocm91dGVGZWF0dXJlU3RvcmUpO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGdpdmVuIGRpc3RhbmNlIGluIG1ldGVycyB0byBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbWV0ZXJzIC0gVGhlIGRpc3RhbmNlIGluIG1ldGVycyB0byBiZSBmb3JtYXR0ZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IFRoZSBmb3JtYXR0ZWQgZGlzdGFuY2Ugc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2UobWV0ZXJzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAobWV0ZXJzID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChtZXRlcnMgPCAxMDAwKSB7XG4gICAgcmV0dXJuIGAke01hdGgucm91bmQobWV0ZXJzKX0gbWA7XG4gIH1cblxuICBjb25zdCBraWxvbWV0ZXJzOiBudW1iZXIgPSBtZXRlcnMgLyAxMDAwO1xuICBjb25zdCByb3VuZFRvRGVjaW1hbDogMCB8IDEgPSBraWxvbWV0ZXJzID49IDEwID8gMSA6IDA7XG5cbiAgcmV0dXJuIGAke051bWJlclV0aWxzLnJvdW5kVG9ORGVjaW1hbChraWxvbWV0ZXJzLCByb3VuZFRvRGVjaW1hbCl9IGttYC5yZXBsYWNlKFxuICAgICcuJyxcbiAgICAnLCdcbiAgKTtcbn1cblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBnaXZlbiBkdXJhdGlvbiBpbiBzZWNvbmRzIHRvIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWNvbmRzIC0gVGhlIGR1cmF0aW9uIGluIHNlY29uZHMgdG8gYmUgZm9ybWF0dGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGR1cmF0aW9uIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdER1cmF0aW9uKHNlY29uZHM6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGhvdXJzOiBudW1iZXIgPSBNYXRoLmZsb29yKHNlY29uZHMgLyAzNjAwKTtcbiAgY29uc3QgbWludXRlczogbnVtYmVyID0gTWF0aC5mbG9vcigoc2Vjb25kcyAlIDM2MDApIC8gNjApO1xuXG4gIGlmIChob3Vycykge1xuICAgIHJldHVybiBgJHtob3Vyc30gaCAke21pbnV0ZXN9IG1pbmA7XG4gIH1cblxuICBpZiAobWludXRlcykge1xuICAgIHJldHVybiBgJHttaW51dGVzfSBtaW5gO1xuICB9XG5cbiAgcmV0dXJuICc8IDEgbWluJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFN0ZXAoXG4gIHN0ZXA6IElnb1N0ZXAsXG4gIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxuICBsYXN0U3RlcCA9IGZhbHNlXG4pIHtcbiAgY29uc3QgbWFuZXV2ZXJUeXBlOiBNYW5ldXZlclR5cGUgPSBzdGVwLm1hbmV1dmVyLnR5cGU7XG4gIGNvbnN0IG1hbmV1dmVyTW9kaWZpZXI6IE1hbmV1dmVyTW9kaWZpZXIgPSBzdGVwLm1hbmV1dmVyLm1vZGlmaWVyO1xuICBjb25zdCBuYW1lOiBzdHJpbmcgPSBzdGVwLm5hbWU7XG4gIGNvbnN0IG1hbmV1dmVyQmVhcmluZ0FmdGVyOiBudW1iZXIgPSBzdGVwLm1hbmV1dmVyLmJlYXJpbmdfYWZ0ZXI7XG5cbiAgY29uc3QgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlID0gbGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZTtcbiAgY29uc3QgdHJhbnNsYXRlZE1hbmV1dmVyQmVhcmluZ0FmdGVyOiBzdHJpbmcgPSB0cmFuc2xhdGVNYW5ldXZlckJlYXJpbmcoXG4gICAgbWFuZXV2ZXJCZWFyaW5nQWZ0ZXIsXG4gICAgbGFuZ3VhZ2VTZXJ2aWNlXG4gICk7XG4gIGNvbnN0IHRyYW5zbGF0ZWRNYW5ldXZlck1vZGlmaWVyOiBzdHJpbmcgPSB0cmFuc2xhdGVNYW5ldXZlck1vZGlmaWVyKFxuICAgIG1hbmV1dmVyTW9kaWZpZXIsXG4gICAgbGFuZ3VhZ2VTZXJ2aWNlXG4gICk7XG5cbiAgbGV0IGljb25OYW1lID0gJ3N0cmFpZ2h0JzsgLy8gYXJyb3cgcG9pbnQgdXAgYnkgZGVmYXVsdFxuICBsZXQgaW5zdHJ1Y3Rpb24gPSAnJztcblxuICBpZiAobWFuZXV2ZXJUeXBlID09PSBNYW5ldXZlclR5cGUuVHVybikge1xuICAgIGlmIChcbiAgICAgIG1hbmV1dmVyTW9kaWZpZXIgPT09IE1hbmV1dmVyTW9kaWZpZXIuVXR1cm4gfHxcbiAgICAgIG1hbmV1dmVyTW9kaWZpZXIgPT09IE1hbmV1dmVyTW9kaWZpZXIuU3RyYWlnaHRcbiAgICApIHtcbiAgICAgIGluc3RydWN0aW9uID0gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlclR5cGUudHVybi4ke21hbmV1dmVyTW9kaWZpZXJ9YCxcbiAgICAgICAge1xuICAgICAgICAgIG1hbmV1dmVyTW9kaWZpZXI6IHRyYW5zbGF0ZWRNYW5ldXZlck1vZGlmaWVyLFxuICAgICAgICAgIG5hbWVcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGlmIChtYW5ldXZlck1vZGlmaWVyID09PSBNYW5ldXZlck1vZGlmaWVyLlV0dXJuKSB7XG4gICAgICAgIGljb25OYW1lID0gJ3VfdHVybl9sZWZ0JztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdHJ1Y3Rpb24gPSB0cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgJ2lnby5nZW8uZGlyZWN0aW9ucy5yZXN1bHRzLm1hbmV1dmVyVHlwZS50dXJuLmVsc2UnLFxuICAgICAgICB7XG4gICAgICAgICAgbWFuZXV2ZXJNb2RpZmllcjogdHJhbnNsYXRlZE1hbmV1dmVyTW9kaWZpZXIsXG4gICAgICAgICAgbmFtZVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBpZiAobWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5TbGlnaHRSaWdodCkge1xuICAgICAgICBpY29uTmFtZSA9ICd0dXJuX3NsaWdodF9yaWdodCc7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBtYW5ldXZlck1vZGlmaWVyID09PSBNYW5ldXZlck1vZGlmaWVyLlJpZ2h0IHx8XG4gICAgICAgIG1hbmV1dmVyTW9kaWZpZXIgPT09IE1hbmV1dmVyTW9kaWZpZXIuU2hhcnBSaWdodFxuICAgICAgKSB7XG4gICAgICAgIGljb25OYW1lID0gJ3R1cm5fcmlnaHQnO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgbWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5MZWZ0IHx8XG4gICAgICAgIG1hbmV1dmVyTW9kaWZpZXIgPT09IE1hbmV1dmVyTW9kaWZpZXIuU2hhcnBMZWZ0XG4gICAgICApIHtcbiAgICAgICAgaWNvbk5hbWUgPSAndHVybl9sZWZ0JztcbiAgICAgIH0gZWxzZSBpZiAobWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5TbGlnaHRMZWZ0KSB7XG4gICAgICAgIGljb25OYW1lID0gJ3R1cm5fc2xpZ2h0X2xlZnQnO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChtYW5ldXZlclR5cGUgPT09IE1hbmV1dmVyVHlwZS5OZXdOYW1lKSB7XG4gICAgaW5zdHJ1Y3Rpb24gPSB0cmFuc2xhdGUuaW5zdGFudChcbiAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlclR5cGUubmV3IG5hbWVgLFxuICAgICAge1xuICAgICAgICBuYW1lLFxuICAgICAgICBtYW5ldXZlckJlYXJpbmc6IHRyYW5zbGF0ZWRNYW5ldXZlckJlYXJpbmdBZnRlclxuICAgICAgfVxuICAgICk7XG4gIH0gZWxzZSBpZiAobWFuZXV2ZXJUeXBlID09PSBNYW5ldXZlclR5cGUuRGVwYXJ0KSB7XG4gICAgaWNvbk5hbWUgPSAnZGlyZWN0aW9ucyc7XG4gICAgaW5zdHJ1Y3Rpb24gPSB0cmFuc2xhdGUuaW5zdGFudChcbiAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlclR5cGUuZGVwYXJ0YCxcbiAgICAgIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbWFuZXV2ZXJCZWFyaW5nOiB0cmFuc2xhdGVkTWFuZXV2ZXJCZWFyaW5nQWZ0ZXJcbiAgICAgIH1cbiAgICApO1xuICB9IGVsc2UgaWYgKG1hbmV1dmVyVHlwZSA9PT0gTWFuZXV2ZXJUeXBlLkFycml2ZSkge1xuICAgIGljb25OYW1lID0gJ3Nwb3J0c19zY29yZSc7XG4gICAgaW5zdHJ1Y3Rpb24gPSB0cmFuc2xhdGUuaW5zdGFudChcbiAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlclR5cGUuYXJyaXZlLiR7bGFzdFN0ZXAgPyAnbGFzdFN0ZXAnIDogJ2ludGVybWVkaWF0ZSd9YCxcbiAgICAgIHtcbiAgICAgICAgbmFtZVxuICAgICAgfVxuICAgICk7XG4gIH0gZWxzZSBpZiAobWFuZXV2ZXJUeXBlID09PSBNYW5ldXZlclR5cGUuTWVyZ2UpIHtcbiAgICBpbnN0cnVjdGlvbiA9IHRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgJ2lnby5nZW8uZGlyZWN0aW9ucy5yZXN1bHRzLm1hbmV1dmVyVHlwZS5tZXJnZScsXG4gICAgICB7XG4gICAgICAgIG5hbWVcbiAgICAgIH1cbiAgICApO1xuICAgIGljb25OYW1lID0gJ21lcmdlJztcbiAgfSBlbHNlIGlmIChcbiAgICBtYW5ldXZlclR5cGUgPT09IE1hbmV1dmVyVHlwZS5PblJhbXAgfHxcbiAgICBtYW5ldXZlclR5cGUgPT09IE1hbmV1dmVyVHlwZS5PZmZSYW1wXG4gICkge1xuICAgIGluc3RydWN0aW9uID0gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICBgaWdvLmdlby5kaXJlY3Rpb25zLnJlc3VsdHMubWFuZXV2ZXJUeXBlLiR7bWFuZXV2ZXJUeXBlfWAsXG4gICAgICB7XG4gICAgICAgIG1hbmV1dmVyTW9kaWZpZXI6IHRyYW5zbGF0ZWRNYW5ldXZlck1vZGlmaWVyXG4gICAgICB9XG4gICAgKTtcbiAgfSBlbHNlIGlmIChtYW5ldXZlclR5cGUgPT09IE1hbmV1dmVyVHlwZS5Gb3JrKSB7XG4gICAgY29uc3QgZGlyZWN0aW9uS2V5OiBzdHJpbmcgPVxuICAgICAgbWFuZXV2ZXJNb2RpZmllci5zZWFyY2goJ2xlZnQnKSA+PSAwID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgICBpY29uTmFtZSA9XG4gICAgICBkaXJlY3Rpb25LZXkgPT09ICdsZWZ0JyA/ICd0dXJuX3NsaWdodF9sZWZ0JyA6ICd0dXJuX3NsaWdodF9yaWdodCc7XG4gICAgaW5zdHJ1Y3Rpb24gPSB0cmFuc2xhdGUuaW5zdGFudChcbiAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlclR5cGUuZm9yay4ke2RpcmVjdGlvbktleX1gLFxuICAgICAge1xuICAgICAgICBuYW1lXG4gICAgICB9XG4gICAgKTtcbiAgfSBlbHNlIGlmIChcbiAgICBtYW5ldXZlclR5cGUgPT09IE1hbmV1dmVyVHlwZS5FbmRPZlJvYWQgfHxcbiAgICBtYW5ldXZlclR5cGUgPT09IE1hbmV1dmVyVHlwZS5Vc2VMYW5lIHx8XG4gICAgbWFuZXV2ZXJUeXBlID09PSBNYW5ldXZlclR5cGUuQ29udGludWVcbiAgKSB7XG4gICAgaWYgKG1hbmV1dmVyVHlwZSA9PT0gTWFuZXV2ZXJUeXBlLkNvbnRpbnVlKSB7XG4gICAgICBpZiAobWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5VdHVybikge1xuICAgICAgICBpY29uTmFtZSA9ICd1X3R1cm5fbGVmdCc7XG4gICAgICAgIGluc3RydWN0aW9uID0gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgYGlnby5nZW8uZGlyZWN0aW9ucy5yZXN1bHRzLm1hbmV1dmVyVHlwZS50dXJuLiR7bWFuZXV2ZXJNb2RpZmllcn1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1hbmV1dmVyTW9kaWZpZXI6IHRyYW5zbGF0ZWRNYW5ldXZlck1vZGlmaWVyLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3RydWN0aW9uID0gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgYGlnby5nZW8uZGlyZWN0aW9ucy5yZXN1bHRzLm1hbmV1dmVyVHlwZS4ke21hbmV1dmVyVHlwZX1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1hbmV1dmVyTW9kaWZpZXI6IHRyYW5zbGF0ZWRNYW5ldXZlck1vZGlmaWVyLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICBtYW5ldXZlck1vZGlmaWVyID09PSBNYW5ldXZlck1vZGlmaWVyLlNoYXJwUmlnaHQgfHxcbiAgICAgICAgbWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5SaWdodFxuICAgICAgKSB7XG4gICAgICAgIGljb25OYW1lID0gJ3R1cm5fcmlnaHQnO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgbWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5TaGFycExlZnQgfHxcbiAgICAgICAgbWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5MZWZ0XG4gICAgICApIHtcbiAgICAgICAgaWNvbk5hbWUgPSAndHVybl9sZWZ0JztcbiAgICAgIH0gZWxzZSBpZiAobWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5TbGlnaHRSaWdodCkge1xuICAgICAgICBpY29uTmFtZSA9ICd0dXJuX3NsaWdodF9yaWdodCc7XG4gICAgICB9IGVsc2UgaWYgKG1hbmV1dmVyTW9kaWZpZXIgPT09IE1hbmV1dmVyTW9kaWZpZXIuU2xpZ2h0TGVmdCkge1xuICAgICAgICBpY29uTmFtZSA9ICd0dXJuX3NsaWdodF9sZWZ0JztcbiAgICAgIH1cbiAgICAgIGluc3RydWN0aW9uID0gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlclR5cGUuJHttYW5ldXZlclR5cGV9YCxcbiAgICAgICAge1xuICAgICAgICAgIG1hbmV1dmVyTW9kaWZpZXI6IHRyYW5zbGF0ZWRNYW5ldXZlck1vZGlmaWVyLFxuICAgICAgICAgIG5hbWVcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAgbWFuZXV2ZXJUeXBlID09PSBNYW5ldXZlclR5cGUuUm91bmRhYm91dCB8fFxuICAgIG1hbmV1dmVyVHlwZSA9PT0gTWFuZXV2ZXJUeXBlLlJvdGFyeSB8fFxuICAgIG1hbmV1dmVyVHlwZSA9PT0gTWFuZXV2ZXJUeXBlLlJvdW5kYWJvdXRUdXJuIHx8XG4gICAgbWFuZXV2ZXJUeXBlID09PSBNYW5ldXZlclR5cGUuRXhpdFJvdW5kYWJvdXRcbiAgKSB7XG4gICAgY29uc3Qgcm91bmRhYm91dEtleSA9IG1hbmV1dmVyVHlwZS5yZXBsYWNlKCdyb3VuZGFib3V0ICcsICcnKTtcbiAgICBpbnN0cnVjdGlvbiA9IHRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgYGlnby5nZW8uZGlyZWN0aW9ucy5yZXN1bHRzLm1hbmV1dmVyVHlwZS4ke3JvdW5kYWJvdXRLZXl9YCxcbiAgICAgIHtcbiAgICAgICAgbmFtZVxuICAgICAgfVxuICAgICk7XG4gICAgaWNvbk5hbWUgPSAnZG9udXRfbGFyZ2UnO1xuICB9IGVsc2UgaWYgKG1hbmV1dmVyVHlwZSA9PT0gTWFuZXV2ZXJUeXBlLk5vdGlmaWNhdGlvbikge1xuICAgIGluc3RydWN0aW9uID0gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAnaWdvLmdlby5kaXJlY3Rpb25zLnJlc3VsdHMubWFuZXV2ZXJUeXBlLm5vdGlmaWNhdGlvbidcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHsgaW5zdHJ1Y3Rpb24sIGljb25OYW1lIH07XG59XG5cbi8qKlxuICogVHJhbnNsYXRlcyBhIG1hbmV1dmVyIG1vZGlmaWVyIGludG8gYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgdXNpbmcgdGhlIHByb3ZpZGVkIGxhbmd1YWdlIHNlcnZpY2UuXG4gKlxuICogQHBhcmFtIHtNYW5ldXZlck1vZGlmaWVyfSBtYW5ldXZlck1vZGlmaWVyIC0gVGhlIG1hbmV1dmVyIG1vZGlmaWVyIHRvIGJlIHRyYW5zbGF0ZWQuXG4gKiBAcGFyYW0ge0xhbmd1YWdlU2VydmljZX0gbGFuZ3VhZ2VTZXJ2aWNlIC0gVGhlIGxhbmd1YWdlIHNlcnZpY2UgdXNlZCBmb3IgdHJhbnNsYXRpb24uXG4gKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IFRoZSB0cmFuc2xhdGVkIG1hbmV1dmVyIG1vZGlmaWVyIHN0cmluZywgb3IgdW5kZWZpbmVkIGlmIHRoZSBtb2RpZmllciBpcyBmYWxzeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZU1hbmV1dmVyTW9kaWZpZXIoXG4gIG1hbmV1dmVyTW9kaWZpZXI6IE1hbmV1dmVyTW9kaWZpZXIsXG4gIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlXG4pOiBzdHJpbmcge1xuICBjb25zdCB0cmFuc2xhdGUgPSBsYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xuICByZXR1cm4gbWFuZXV2ZXJNb2RpZmllclxuICAgID8gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlck1vZGlmaWVyLiR7bWFuZXV2ZXJNb2RpZmllcn1gXG4gICAgICApXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJhbnNsYXRlcyB0aGUgZ2l2ZW4gYmVhcmluZyB2YWx1ZSBpbnRvIGEgaHVtYW4tcmVhZGFibGUgZGlyZWN0aW9uIHVzaW5nIHRoZSBwcm92aWRlZCBsYW5ndWFnZSBzZXJ2aWNlLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWFyaW5nIC0gVGhlIGJlYXJpbmcgdmFsdWUgdG8gYmUgdHJhbnNsYXRlZC5cbiAqIEBwYXJhbSB7TGFuZ3VhZ2VTZXJ2aWNlfSBsYW5ndWFnZVNlcnZpY2UgLSBUaGUgbGFuZ3VhZ2Ugc2VydmljZSB1c2VkIGZvciB0cmFuc2xhdGlvbi5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHRyYW5zbGF0ZWQgZGlyZWN0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGJlYXJpbmcgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVNYW5ldXZlckJlYXJpbmcoXG4gIGJlYXJpbmc6IG51bWJlcixcbiAgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2Vcbik6IHN0cmluZyB7XG4gIGNvbnN0IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSA9IGxhbmd1YWdlU2VydmljZS50cmFuc2xhdGU7XG4gIGNvbnN0IGRpcmVjdGlvbnM6IHN0cmluZ1tdID0gWyduJywgJ25lJywgJ2UnLCAnc2UnLCAncycsICdzdycsICd3JywgJ253J107XG5cbiAgY29uc3QgZGlyZWN0aW9uSW5kZXg6IG51bWJlciA9IE1hdGgucm91bmQoYmVhcmluZyAvIDQ1KSAlIDg7XG5cbiAgcmV0dXJuIHRyYW5zbGF0ZS5pbnN0YW50KFxuICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5kaXJlY3Rpb24uJHtkaXJlY3Rpb25zW2RpcmVjdGlvbkluZGV4XX1gXG4gICk7XG59XG4iXX0=
@@ -1,6 +0,0 @@
1
- export * from './directions.service';
2
- export * from './directions.enum';
3
- export * from './directions.interface';
4
- export * from './directions.utils';
5
- export * from './store';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kaXJlY3Rpb25zL3NoYXJlZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9kaXJlY3Rpb25zLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3Rpb25zLmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3Rpb25zLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGlvbnMudXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdG9yZSc7XG4iXX0=
@@ -1,21 +0,0 @@
1
- import { EntityStore } from '@igo2/common/entity';
2
- import { BehaviorSubject } from 'rxjs';
3
- import { FeatureStore } from '../../feature/shared/store';
4
- /**
5
- * The class is a specialized version of an EntityStore that stores
6
- * stops.
7
- */
8
- export class StopsStore extends EntityStore {
9
- storeInitialized$ = new BehaviorSubject(false);
10
- clearStops() {
11
- this.storeInitialized$.next(false);
12
- this.clear();
13
- }
14
- }
15
- export class StopsFeatureStore extends FeatureStore {
16
- }
17
- export class RoutesFeatureStore extends FeatureStore {
18
- }
19
- export class StepsFeatureStore extends FeatureStore {
20
- }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kaXJlY3Rpb25zL3NoYXJlZC9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFRMUQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFVBQVcsU0FBUSxXQUFpQjtJQUN4QyxpQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUV4RCxVQUFVO1FBQ2YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsWUFBNkI7Q0FBRztBQUN2RSxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsWUFBbUM7Q0FBRztBQUM5RSxNQUFNLE9BQU8saUJBQWtCLFNBQVEsWUFBNkI7Q0FBRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnQGlnbzIvY29tbW9uL2VudGl0eSc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGZWF0dXJlU3RvcmUgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9zdG9yZSc7XG5pbXBvcnQge1xuICBGZWF0dXJlV2l0aERpcmVjdGlvbnMsXG4gIEZlYXR1cmVXaXRoU3RlcCxcbiAgRmVhdHVyZVdpdGhTdG9wLFxuICBTdG9wXG59IGZyb20gJy4vZGlyZWN0aW9ucy5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIFRoZSBjbGFzcyBpcyBhIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYW4gRW50aXR5U3RvcmUgdGhhdCBzdG9yZXNcbiAqIHN0b3BzLlxuICovXG5leHBvcnQgY2xhc3MgU3RvcHNTdG9yZSBleHRlbmRzIEVudGl0eVN0b3JlPFN0b3A+IHtcbiAgcHVibGljIHN0b3JlSW5pdGlhbGl6ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIGNsZWFyU3RvcHMoKSB7XG4gICAgdGhpcy5zdG9yZUluaXRpYWxpemVkJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0b3BzRmVhdHVyZVN0b3JlIGV4dGVuZHMgRmVhdHVyZVN0b3JlPEZlYXR1cmVXaXRoU3RvcD4ge31cbmV4cG9ydCBjbGFzcyBSb3V0ZXNGZWF0dXJlU3RvcmUgZXh0ZW5kcyBGZWF0dXJlU3RvcmU8RmVhdHVyZVdpdGhEaXJlY3Rpb25zPiB7fVxuZXhwb3J0IGNsYXNzIFN0ZXBzRmVhdHVyZVN0b3JlIGV4dGVuZHMgRmVhdHVyZVN0b3JlPEZlYXR1cmVXaXRoU3RlcD4ge31cbiJdfQ==