@igo2/geo 18.0.0-next.9 → 18.0.1-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (607) hide show
  1. package/fesm2022/igo2-geo.mjs +23016 -22107
  2. package/fesm2022/igo2-geo.mjs.map +1 -1
  3. package/lib/datasource/shared/capabilities.service.d.ts +7 -2
  4. package/lib/datasource/shared/datasources/wfs-datasource.interface.d.ts +2 -2
  5. package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +5 -5
  6. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +57 -20
  7. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +115 -13
  8. package/lib/directions/directions-results/directions-results.component.d.ts +50 -16
  9. package/lib/directions/directions-sources/directions-source.d.ts +2 -2
  10. package/lib/directions/directions-sources/osrm-directions-source.d.ts +2 -2
  11. package/lib/directions/directions.component.d.ts +5 -5
  12. package/lib/directions/shared/directions.enum.d.ts +42 -1
  13. package/lib/directions/shared/directions.interface.d.ts +50 -25
  14. package/lib/directions/shared/directions.service.d.ts +46 -8
  15. package/lib/directions/shared/directions.utils.d.ts +102 -23
  16. package/lib/directions/shared/store.d.ts +3 -3
  17. package/lib/download/download-button/download-button.component.d.ts +4 -8
  18. package/lib/download/shared/download.service.d.ts +1 -1
  19. package/lib/draw/draw/draw.component.d.ts +2 -2
  20. package/lib/draw/shared/draw.utils.d.ts +2 -1
  21. package/lib/environment/environment.interface.d.ts +2 -0
  22. package/lib/feature/shared/feature-store.utils.d.ts +1 -1
  23. package/lib/feature/shared/feature.interfaces.d.ts +1 -1
  24. package/lib/feature/shared/store.d.ts +1 -1
  25. package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +1 -1
  26. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +1 -1
  27. package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +2 -2
  28. package/lib/filter/shared/filterable-datasource.pipe.d.ts +2 -2
  29. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +3 -3
  30. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +3 -5
  31. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +3 -5
  32. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +1 -1
  33. package/lib/filter/time-filter-form/time-filter-form.component.d.ts +5 -5
  34. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +1 -1
  35. package/lib/filter/time-filter-list/time-filter-list.component.d.ts +2 -7
  36. package/lib/import-export/export-button/export-button.component.d.ts +3 -7
  37. package/lib/import-export/import-export/import-export.component.d.ts +1 -2
  38. package/lib/import-export/shared/export.service.d.ts +2 -2
  39. package/lib/layer/index.d.ts +9 -4
  40. package/lib/layer/layer-group/index.d.ts +1 -0
  41. package/lib/layer/layer-group/layer-group.component.d.ts +30 -0
  42. package/lib/layer/layer-item/layer-item.component.d.ts +19 -42
  43. package/lib/layer/layer-legend/layer-legend.component.d.ts +2 -5
  44. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +6 -7
  45. package/lib/layer/layer-list/index.d.ts +0 -2
  46. package/lib/layer/layer-list/layer-list.component.d.ts +51 -128
  47. package/lib/layer/layer-list-tool/index.d.ts +0 -1
  48. package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +19 -26
  49. package/lib/layer/layer-list-tool/layer-list-tool.interface.d.ts +5 -1
  50. package/lib/layer/layer-list-tool/layer-list-tool.service.d.ts +9 -8
  51. package/lib/layer/layer-search/index.d.ts +1 -0
  52. package/lib/layer/layer-search/layer-search.component.d.ts +16 -0
  53. package/lib/layer/layer-unavailable/index.d.ts +2 -0
  54. package/lib/layer/layer-unavailable/layer-unavailable-list/layer-unavailable-list.component.d.ts +10 -0
  55. package/lib/layer/layer-unavailable/layer-unavailable.component.d.ts +11 -0
  56. package/lib/layer/layer-viewer/index.d.ts +2 -0
  57. package/lib/layer/layer-viewer/layer-viewer.component.d.ts +52 -0
  58. package/lib/layer/layer-viewer/layer-viewer.interface.d.ts +22 -0
  59. package/lib/layer/layer-viewer-bottom-actions/index.d.ts +1 -0
  60. package/lib/layer/layer-viewer-bottom-actions/layer-viewer-bottom-actions.component.d.ts +44 -0
  61. package/lib/layer/layer-visibility-button/index.d.ts +1 -0
  62. package/lib/layer/layer-visibility-button/layer-visibility-button.component.d.ts +22 -0
  63. package/lib/layer/layer.module.d.ts +18 -6
  64. package/lib/layer/shared/index.d.ts +1 -0
  65. package/lib/layer/shared/layer-controller.d.ts +81 -0
  66. package/lib/layer/shared/layer-selection.d.ts +14 -0
  67. package/lib/layer/shared/layer.service.d.ts +9 -5
  68. package/lib/layer/shared/layers/any-layer.d.ts +3 -6
  69. package/lib/layer/shared/layers/any-layer.interface.d.ts +8 -6
  70. package/lib/layer/shared/layers/image-layer.d.ts +5 -2
  71. package/lib/layer/shared/layers/image-layer.interface.d.ts +1 -4
  72. package/lib/layer/shared/layers/index.d.ts +5 -0
  73. package/lib/layer/shared/layers/layer-base.d.ts +75 -0
  74. package/lib/layer/shared/layers/layer-group.d.ts +32 -0
  75. package/lib/layer/shared/layers/layer-group.interface.d.ts +8 -0
  76. package/lib/layer/shared/layers/layer.d.ts +27 -45
  77. package/lib/layer/shared/layers/layer.interface.d.ts +23 -41
  78. package/lib/layer/shared/layers/linked/index.d.ts +3 -0
  79. package/lib/layer/shared/layers/linked/linked-layer.d.ts +35 -0
  80. package/lib/layer/shared/layers/linked/linked-layer.interface.d.ts +32 -0
  81. package/lib/layer/shared/layers/linked/linked-layer.utils.d.ts +9 -0
  82. package/lib/layer/shared/layers/tile-layer.d.ts +5 -2
  83. package/lib/layer/shared/layers/vector-layer.d.ts +7 -3
  84. package/lib/layer/shared/layers/vectortile-layer.d.ts +5 -2
  85. package/lib/layer/utils/layer.utils.d.ts +12 -2
  86. package/lib/layer/utils/outputLegend.d.ts +2 -2
  87. package/lib/map/shared/controllers/geolocation.interface.d.ts +2 -1
  88. package/lib/map/shared/hover-feature.directive.d.ts +0 -1
  89. package/lib/map/shared/linkedLayers.utils.d.ts +13 -17
  90. package/lib/map/shared/map.abstract.d.ts +12 -29
  91. package/lib/map/shared/map.d.ts +10 -85
  92. package/lib/map/shared/map.service.d.ts +1 -1
  93. package/lib/map/shared/map.utils.d.ts +5 -3
  94. package/lib/map/utils/index.d.ts +1 -0
  95. package/lib/map/utils/layer-watcher.d.ts +18 -8
  96. package/lib/measure/measurer/measurer.component.d.ts +0 -8
  97. package/lib/metadata/metadata-button/metadata-button.component.d.ts +3 -7
  98. package/lib/offline/geoDB/geoDB.service.d.ts +1 -1
  99. package/lib/offline/layerDB/layerDB.service.d.ts +1 -1
  100. package/lib/offline/offline.provider.d.ts +1 -1
  101. package/lib/query/shared/query.service.d.ts +1 -1
  102. package/lib/query/shared/query.utils.d.ts +2 -1
  103. package/lib/search/search-results/search-results-add-button.component.d.ts +1 -1
  104. package/lib/search/shared/search-pointer-summary.directive.d.ts +0 -1
  105. package/lib/search/shared/sources/workspace.interfaces.d.ts +1 -1
  106. package/lib/style/style-list/style-list.provider.d.ts +1 -8
  107. package/lib/style/style-list/style-list.service.d.ts +1 -1
  108. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +1 -1
  109. package/locale/en.geo.json +104 -89
  110. package/locale/fr.geo.json +103 -89
  111. package/package.json +15 -17
  112. package/src/geo-theme.scss +1 -1
  113. package/src/lib/directions/directions-inputs/directions-inputs.theming.scss +21 -0
  114. package/src/lib/directions/directions.theming.scss +2 -0
  115. package/src/lib/layer/layer-group/layer-group.theme.scss +28 -0
  116. package/src/lib/layer/layer-item/layer-item.theme.scss +4 -9
  117. package/src/lib/layer/layer-legend/layer-legend.theme.scss +30 -0
  118. package/src/lib/layer/layer-list/layer-list.theme.scss +51 -0
  119. package/src/lib/layer/layer-unavailable/layer-unavailable.theme.scss +19 -0
  120. package/src/lib/layer/layer-viewer/_layer-viewer.theme.scss +16 -0
  121. package/src/lib/layer/layer-visibility-button/layer-visibility-button.theme.scss +27 -0
  122. package/src/lib/layer/layer.theming.scss +14 -3
  123. package/src/lib/map/menu-button/menu-button.theming.scss +3 -3
  124. package/src/style/style.scss +1 -1
  125. package/esm2022/igo2-geo.mjs +0 -5
  126. package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +0 -234
  127. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +0 -274
  128. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +0 -243
  129. package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +0 -19
  130. package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +0 -136
  131. package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +0 -60
  132. package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +0 -232
  133. package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +0 -24
  134. package/esm2022/lib/catalog/catalog-library/index.mjs +0 -4
  135. package/esm2022/lib/catalog/catalog.module.mjs +0 -26
  136. package/esm2022/lib/catalog/index.mjs +0 -6
  137. package/esm2022/lib/catalog/shared/catalog.abstract.mjs +0 -32
  138. package/esm2022/lib/catalog/shared/catalog.enum.mjs +0 -16
  139. package/esm2022/lib/catalog/shared/catalog.interface.mjs +0 -2
  140. package/esm2022/lib/catalog/shared/catalog.service.mjs +0 -706
  141. package/esm2022/lib/catalog/shared/catalogs.mjs +0 -75
  142. package/esm2022/lib/catalog/shared/index.mjs +0 -5
  143. package/esm2022/lib/datasource/index.mjs +0 -3
  144. package/esm2022/lib/datasource/shared/capabilities.interface.mjs +0 -17
  145. package/esm2022/lib/datasource/shared/capabilities.service.mjs +0 -441
  146. package/esm2022/lib/datasource/shared/datasource.service.mjs +0 -258
  147. package/esm2022/lib/datasource/shared/datasources/any-datasource.interface.mjs +0 -2
  148. package/esm2022/lib/datasource/shared/datasources/any-datasource.mjs +0 -2
  149. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +0 -2
  150. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +0 -222
  151. package/esm2022/lib/datasource/shared/datasources/carto-datasource.interface.mjs +0 -2
  152. package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +0 -118
  153. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +0 -2
  154. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +0 -24
  155. package/esm2022/lib/datasource/shared/datasources/data.service.mjs +0 -3
  156. package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +0 -2
  157. package/esm2022/lib/datasource/shared/datasources/datasource.mjs +0 -40
  158. package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +0 -2
  159. package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +0 -52
  160. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +0 -2
  161. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +0 -70
  162. package/esm2022/lib/datasource/shared/datasources/index.mjs +0 -36
  163. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +0 -2
  164. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +0 -33
  165. package/esm2022/lib/datasource/shared/datasources/osm-datasource.interface.mjs +0 -2
  166. package/esm2022/lib/datasource/shared/datasources/osm-datasource.mjs +0 -14
  167. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +0 -2
  168. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +0 -60
  169. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +0 -2
  170. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.mjs +0 -17
  171. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +0 -2
  172. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +0 -56
  173. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +0 -2
  174. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +0 -137
  175. package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +0 -170
  176. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +0 -2
  177. package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +0 -227
  178. package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +0 -224
  179. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +0 -2
  180. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +0 -18
  181. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +0 -2
  182. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +0 -11
  183. package/esm2022/lib/datasource/shared/index.mjs +0 -6
  184. package/esm2022/lib/datasource/shared/options/index.mjs +0 -5
  185. package/esm2022/lib/datasource/shared/options/options-api.interface.mjs +0 -2
  186. package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +0 -15
  187. package/esm2022/lib/datasource/shared/options/options-api.service.mjs +0 -85
  188. package/esm2022/lib/datasource/shared/options/options.service.mjs +0 -3
  189. package/esm2022/lib/datasource/utils/index.mjs +0 -2
  190. package/esm2022/lib/datasource/utils/tilegrid.mjs +0 -20
  191. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +0 -197
  192. package/esm2022/lib/directions/directions-buttons/index.mjs +0 -2
  193. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +0 -218
  194. package/esm2022/lib/directions/directions-inputs/index.mjs +0 -2
  195. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +0 -143
  196. package/esm2022/lib/directions/directions-results/index.mjs +0 -2
  197. package/esm2022/lib/directions/directions-sources/directions-source.interface.mjs +0 -5
  198. package/esm2022/lib/directions/directions-sources/directions-source.mjs +0 -3
  199. package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +0 -23
  200. package/esm2022/lib/directions/directions-sources/index.mjs +0 -5
  201. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +0 -159
  202. package/esm2022/lib/directions/directions.component.mjs +0 -413
  203. package/esm2022/lib/directions/directions.module.mjs +0 -46
  204. package/esm2022/lib/directions/directions.provider.mjs +0 -16
  205. package/esm2022/lib/directions/index.mjs +0 -8
  206. package/esm2022/lib/directions/shared/directions-source.service.mjs +0 -18
  207. package/esm2022/lib/directions/shared/directions.enum.mjs +0 -28
  208. package/esm2022/lib/directions/shared/directions.interface.mjs +0 -2
  209. package/esm2022/lib/directions/shared/directions.service.mjs +0 -213
  210. package/esm2022/lib/directions/shared/directions.utils.mjs +0 -559
  211. package/esm2022/lib/directions/shared/index.mjs +0 -6
  212. package/esm2022/lib/directions/shared/store.mjs +0 -21
  213. package/esm2022/lib/download/download-button/download-button.component.mjs +0 -60
  214. package/esm2022/lib/download/download-button/index.mjs +0 -2
  215. package/esm2022/lib/download/download.module.mjs +0 -24
  216. package/esm2022/lib/download/index.mjs +0 -3
  217. package/esm2022/lib/download/shared/download.interface.mjs +0 -2
  218. package/esm2022/lib/download/shared/download.service.mjs +0 -67
  219. package/esm2022/lib/download/shared/index.mjs +0 -3
  220. package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +0 -42
  221. package/esm2022/lib/draw/draw/draw-popup.component.mjs +0 -421
  222. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +0 -28
  223. package/esm2022/lib/draw/draw/draw.component.mjs +0 -1143
  224. package/esm2022/lib/draw/draw/draw.module.mjs +0 -19
  225. package/esm2022/lib/draw/drawingTool.module.mjs +0 -18
  226. package/esm2022/lib/draw/index.mjs +0 -3
  227. package/esm2022/lib/draw/shared/draw-icon.service.mjs +0 -30
  228. package/esm2022/lib/draw/shared/draw.enum.mjs +0 -21
  229. package/esm2022/lib/draw/shared/draw.interface.mjs +0 -2
  230. package/esm2022/lib/draw/shared/draw.utils.mjs +0 -125
  231. package/esm2022/lib/draw/shared/index.mjs +0 -5
  232. package/esm2022/lib/environment/environment.interface.mjs +0 -2
  233. package/esm2022/lib/environment/index.mjs +0 -2
  234. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +0 -306
  235. package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +0 -56
  236. package/esm2022/lib/feature/feature-details/feature-details.module.mjs +0 -26
  237. package/esm2022/lib/feature/feature-details/index.mjs +0 -4
  238. package/esm2022/lib/feature/feature-form/feature-form.component.mjs +0 -101
  239. package/esm2022/lib/feature/feature-form/feature-form.module.mjs +0 -19
  240. package/esm2022/lib/feature/feature.module.mjs +0 -26
  241. package/esm2022/lib/feature/index.mjs +0 -5
  242. package/esm2022/lib/feature/shared/feature-store.utils.mjs +0 -27
  243. package/esm2022/lib/feature/shared/feature.enums.mjs +0 -9
  244. package/esm2022/lib/feature/shared/feature.interfaces.mjs +0 -2
  245. package/esm2022/lib/feature/shared/feature.utils.mjs +0 -332
  246. package/esm2022/lib/feature/shared/index.mjs +0 -8
  247. package/esm2022/lib/feature/shared/store.mjs +0 -143
  248. package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +0 -216
  249. package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +0 -116
  250. package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +0 -99
  251. package/esm2022/lib/feature/shared/strategies/index.mjs +0 -8
  252. package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +0 -103
  253. package/esm2022/lib/feature/shared/strategies/loading.mjs +0 -136
  254. package/esm2022/lib/feature/shared/strategies/search.mjs +0 -158
  255. package/esm2022/lib/feature/shared/strategies/selection.mjs +0 -384
  256. package/esm2022/lib/feature/shared/strategies.utils.mjs +0 -37
  257. package/esm2022/lib/filter/filter.module.mjs +0 -131
  258. package/esm2022/lib/filter/index.mjs +0 -17
  259. package/esm2022/lib/filter/ogc-filter-button/index.mjs +0 -2
  260. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +0 -141
  261. package/esm2022/lib/filter/ogc-filter-form/index.mjs +0 -2
  262. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +0 -325
  263. package/esm2022/lib/filter/ogc-filter-selection/index.mjs +0 -2
  264. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +0 -787
  265. package/esm2022/lib/filter/ogc-filter-time/index.mjs +0 -3
  266. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +0 -201
  267. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +0 -665
  268. package/esm2022/lib/filter/ogc-filterable-form/index.mjs +0 -2
  269. package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +0 -66
  270. package/esm2022/lib/filter/ogc-filterable-item/index.mjs +0 -2
  271. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +0 -244
  272. package/esm2022/lib/filter/ogc-filterable-list/index.mjs +0 -3
  273. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +0 -37
  274. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +0 -32
  275. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +0 -56
  276. package/esm2022/lib/filter/shared/index.mjs +0 -12
  277. package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +0 -72
  278. package/esm2022/lib/filter/shared/ogc-filter.enum.mjs +0 -30
  279. package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +0 -2
  280. package/esm2022/lib/filter/shared/ogc-filter.mjs +0 -756
  281. package/esm2022/lib/filter/shared/ogc-filter.service.mjs +0 -47
  282. package/esm2022/lib/filter/shared/spatial-filter.enum.mjs +0 -23
  283. package/esm2022/lib/filter/shared/spatial-filter.interface.mjs +0 -2
  284. package/esm2022/lib/filter/shared/spatial-filter.service.mjs +0 -282
  285. package/esm2022/lib/filter/shared/time-filter.enum.mjs +0 -13
  286. package/esm2022/lib/filter/shared/time-filter.interface.mjs +0 -2
  287. package/esm2022/lib/filter/shared/time-filter.service.mjs +0 -107
  288. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/index.mjs +0 -2
  289. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +0 -875
  290. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/index.mjs +0 -2
  291. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +0 -197
  292. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/index.mjs +0 -2
  293. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +0 -126
  294. package/esm2022/lib/filter/time-filter-button/index.mjs +0 -2
  295. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +0 -70
  296. package/esm2022/lib/filter/time-filter-form/index.mjs +0 -2
  297. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +0 -534
  298. package/esm2022/lib/filter/time-filter-item/index.mjs +0 -2
  299. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +0 -90
  300. package/esm2022/lib/filter/time-filter-list/index.mjs +0 -3
  301. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +0 -37
  302. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +0 -35
  303. package/esm2022/lib/geo.module.mjs +0 -63
  304. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +0 -559
  305. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +0 -170
  306. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +0 -24
  307. package/esm2022/lib/geometry/geometry-form-field/index.mjs +0 -4
  308. package/esm2022/lib/geometry/geometry.module.mjs +0 -18
  309. package/esm2022/lib/geometry/index.mjs +0 -3
  310. package/esm2022/lib/geometry/shared/controls/draw.mjs +0 -340
  311. package/esm2022/lib/geometry/shared/controls/index.mjs +0 -4
  312. package/esm2022/lib/geometry/shared/controls/modify.mjs +0 -538
  313. package/esm2022/lib/geometry/shared/controls/slice.mjs +0 -190
  314. package/esm2022/lib/geometry/shared/geometry.errors.mjs +0 -24
  315. package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +0 -2
  316. package/esm2022/lib/geometry/shared/geometry.utils.mjs +0 -113
  317. package/esm2022/lib/geometry/shared/index.mjs +0 -5
  318. package/esm2022/lib/import-export/export-button/export-button.component.mjs +0 -62
  319. package/esm2022/lib/import-export/export-button/index.mjs +0 -2
  320. package/esm2022/lib/import-export/import-export/import-export.component.mjs +0 -865
  321. package/esm2022/lib/import-export/import-export/index.mjs +0 -2
  322. package/esm2022/lib/import-export/import-export.module.mjs +0 -31
  323. package/esm2022/lib/import-export/index.mjs +0 -5
  324. package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +0 -114
  325. package/esm2022/lib/import-export/shared/export.errors.mjs +0 -15
  326. package/esm2022/lib/import-export/shared/export.interface.mjs +0 -2
  327. package/esm2022/lib/import-export/shared/export.service.mjs +0 -375
  328. package/esm2022/lib/import-export/shared/export.type.mjs +0 -13
  329. package/esm2022/lib/import-export/shared/export.utils.mjs +0 -51
  330. package/esm2022/lib/import-export/shared/import.errors.mjs +0 -39
  331. package/esm2022/lib/import-export/shared/import.interface.mjs +0 -2
  332. package/esm2022/lib/import-export/shared/import.service.mjs +0 -221
  333. package/esm2022/lib/import-export/shared/import.utils.mjs +0 -203
  334. package/esm2022/lib/import-export/shared/index.mjs +0 -11
  335. package/esm2022/lib/layer/index.mjs +0 -11
  336. package/esm2022/lib/layer/layer-item/index.mjs +0 -2
  337. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +0 -281
  338. package/esm2022/lib/layer/layer-legend/index.mjs +0 -2
  339. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +0 -290
  340. package/esm2022/lib/layer/layer-legend-item/index.mjs +0 -2
  341. package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +0 -85
  342. package/esm2022/lib/layer/layer-legend-list/index.mjs +0 -3
  343. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +0 -55
  344. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +0 -111
  345. package/esm2022/lib/layer/layer-list/index.mjs +0 -4
  346. package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +0 -70
  347. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +0 -841
  348. package/esm2022/lib/layer/layer-list/layer-list.enum.mjs +0 -19
  349. package/esm2022/lib/layer/layer-list-tool/index.mjs +0 -5
  350. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +0 -125
  351. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +0 -7
  352. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +0 -2
  353. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +0 -21
  354. package/esm2022/lib/layer/layer.module.mjs +0 -89
  355. package/esm2022/lib/layer/shared/clusterParam.mjs +0 -2
  356. package/esm2022/lib/layer/shared/index.mjs +0 -5
  357. package/esm2022/lib/layer/shared/layer.enums.mjs +0 -2
  358. package/esm2022/lib/layer/shared/layer.service.mjs +0 -300
  359. package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +0 -2
  360. package/esm2022/lib/layer/shared/layers/any-layer.mjs +0 -2
  361. package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +0 -2
  362. package/esm2022/lib/layer/shared/layers/image-layer.mjs +0 -70
  363. package/esm2022/lib/layer/shared/layers/index.mjs +0 -13
  364. package/esm2022/lib/layer/shared/layers/layer.interface.mjs +0 -17
  365. package/esm2022/lib/layer/shared/layers/layer.mjs +0 -187
  366. package/esm2022/lib/layer/shared/layers/legend.interface.mjs +0 -2
  367. package/esm2022/lib/layer/shared/layers/tile-layer.interface.mjs +0 -2
  368. package/esm2022/lib/layer/shared/layers/tile-layer.mjs +0 -50
  369. package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +0 -2
  370. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +0 -570
  371. package/esm2022/lib/layer/shared/layers/vectortile-layer.interface.mjs +0 -2
  372. package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +0 -107
  373. package/esm2022/lib/layer/track-feature-button/index.mjs +0 -2
  374. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +0 -54
  375. package/esm2022/lib/layer/utils/image-watcher.mjs +0 -62
  376. package/esm2022/lib/layer/utils/index.mjs +0 -6
  377. package/esm2022/lib/layer/utils/layer.utils.mjs +0 -11
  378. package/esm2022/lib/layer/utils/outputLegend.mjs +0 -28
  379. package/esm2022/lib/layer/utils/tile-watcher.mjs +0 -52
  380. package/esm2022/lib/layer/utils/vector-watcher.mjs +0 -50
  381. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +0 -20
  382. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +0 -87
  383. package/esm2022/lib/map/baselayers-switcher/index.mjs +0 -3
  384. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +0 -120
  385. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +0 -78
  386. package/esm2022/lib/map/geolocate-button/index.mjs +0 -2
  387. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +0 -73
  388. package/esm2022/lib/map/home-extent-button/home-extent-button.interface.mjs +0 -2
  389. package/esm2022/lib/map/home-extent-button/index.mjs +0 -3
  390. package/esm2022/lib/map/index.mjs +0 -14
  391. package/esm2022/lib/map/info-section/index.mjs +0 -2
  392. package/esm2022/lib/map/info-section/info-section.component.mjs +0 -15
  393. package/esm2022/lib/map/map-browser/index.mjs +0 -2
  394. package/esm2022/lib/map/map-browser/map-browser.component.mjs +0 -67
  395. package/esm2022/lib/map/map-center/index.mjs +0 -2
  396. package/esm2022/lib/map/map-center/map-center.component.mjs +0 -57
  397. package/esm2022/lib/map/map.module.mjs +0 -89
  398. package/esm2022/lib/map/menu-button/index.mjs +0 -2
  399. package/esm2022/lib/map/menu-button/menu-button.component.mjs +0 -57
  400. package/esm2022/lib/map/offline-button/index.mjs +0 -2
  401. package/esm2022/lib/map/offline-button/offline-button.component.mjs +0 -53
  402. package/esm2022/lib/map/rotation-button/index.mjs +0 -2
  403. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +0 -58
  404. package/esm2022/lib/map/shared/controllers/controller.mjs +0 -44
  405. package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +0 -8
  406. package/esm2022/lib/map/shared/controllers/geolocation.mjs +0 -431
  407. package/esm2022/lib/map/shared/controllers/index.mjs +0 -5
  408. package/esm2022/lib/map/shared/controllers/view.mjs +0 -361
  409. package/esm2022/lib/map/shared/hover-feature.directive.mjs +0 -489
  410. package/esm2022/lib/map/shared/index.mjs +0 -15
  411. package/esm2022/lib/map/shared/linkedLayers.utils.mjs +0 -248
  412. package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +0 -122
  413. package/esm2022/lib/map/shared/map.abstract.mjs +0 -23
  414. package/esm2022/lib/map/shared/map.enums.mjs +0 -6
  415. package/esm2022/lib/map/shared/map.interface.mjs +0 -2
  416. package/esm2022/lib/map/shared/map.mjs +0 -437
  417. package/esm2022/lib/map/shared/map.service.mjs +0 -29
  418. package/esm2022/lib/map/shared/map.utils.mjs +0 -455
  419. package/esm2022/lib/map/shared/mapOffline.directive.mjs +0 -110
  420. package/esm2022/lib/map/shared/projection.interfaces.mjs +0 -2
  421. package/esm2022/lib/map/shared/projection.service.mjs +0 -67
  422. package/esm2022/lib/map/shared/projection.utils.mjs +0 -122
  423. package/esm2022/lib/map/swipe-control/index.mjs +0 -2
  424. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +0 -213
  425. package/esm2022/lib/map/utils/layer-watcher.mjs +0 -80
  426. package/esm2022/lib/map/wake-lock-button/index.mjs +0 -2
  427. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +0 -103
  428. package/esm2022/lib/map/zoom-button/index.mjs +0 -2
  429. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +0 -35
  430. package/esm2022/lib/measure/index.mjs +0 -3
  431. package/esm2022/lib/measure/measure.module.mjs +0 -20
  432. package/esm2022/lib/measure/measurer/index.mjs +0 -6
  433. package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +0 -40
  434. package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +0 -38
  435. package/esm2022/lib/measure/measurer/measurer-item.component.mjs +0 -143
  436. package/esm2022/lib/measure/measurer/measurer.component.mjs +0 -966
  437. package/esm2022/lib/measure/measurer/measurer.module.mjs +0 -20
  438. package/esm2022/lib/measure/shared/index.mjs +0 -4
  439. package/esm2022/lib/measure/shared/measure.enum.mjs +0 -37
  440. package/esm2022/lib/measure/shared/measure.interfaces.mjs +0 -2
  441. package/esm2022/lib/measure/shared/measure.utils.mjs +0 -497
  442. package/esm2022/lib/metadata/index.mjs +0 -4
  443. package/esm2022/lib/metadata/metadata-button/index.mjs +0 -2
  444. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +0 -108
  445. package/esm2022/lib/metadata/metadata.module.mjs +0 -29
  446. package/esm2022/lib/metadata/shared/index.mjs +0 -3
  447. package/esm2022/lib/metadata/shared/metadata.interface.mjs +0 -2
  448. package/esm2022/lib/metadata/shared/metadata.service.mjs +0 -18
  449. package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +0 -130
  450. package/esm2022/lib/offline/geoDB/geoDB.enums.mjs +0 -6
  451. package/esm2022/lib/offline/geoDB/geoDB.interface.mjs +0 -2
  452. package/esm2022/lib/offline/geoDB/geoDB.service.mjs +0 -172
  453. package/esm2022/lib/offline/geoDB/index.mjs +0 -5
  454. package/esm2022/lib/offline/index.mjs +0 -6
  455. package/esm2022/lib/offline/layerDB/index.mjs +0 -3
  456. package/esm2022/lib/offline/layerDB/layerDB.interface.mjs +0 -2
  457. package/esm2022/lib/offline/layerDB/layerDB.service.mjs +0 -83
  458. package/esm2022/lib/offline/offline.interface.mjs +0 -2
  459. package/esm2022/lib/offline/offline.provider.mjs +0 -51
  460. package/esm2022/lib/offline/shared/geo-network.service.mjs +0 -79
  461. package/esm2022/lib/offline/shared/index.mjs +0 -2
  462. package/esm2022/lib/overlay/index.mjs +0 -2
  463. package/esm2022/lib/overlay/shared/index.mjs +0 -4
  464. package/esm2022/lib/overlay/shared/overlay.enum.mjs +0 -8
  465. package/esm2022/lib/overlay/shared/overlay.mjs +0 -139
  466. package/esm2022/lib/overlay/shared/overlay.utils.mjs +0 -17
  467. package/esm2022/lib/print/index.mjs +0 -4
  468. package/esm2022/lib/print/print/print.component.mjs +0 -116
  469. package/esm2022/lib/print/print-form/index.mjs +0 -2
  470. package/esm2022/lib/print/print-form/print-form.component.mjs +0 -320
  471. package/esm2022/lib/print/print.module.mjs +0 -20
  472. package/esm2022/lib/print/shared/geopdf.mjs +0 -68
  473. package/esm2022/lib/print/shared/index.mjs +0 -5
  474. package/esm2022/lib/print/shared/print.interface.mjs +0 -2
  475. package/esm2022/lib/print/shared/print.service.mjs +0 -1136
  476. package/esm2022/lib/print/shared/print.type.mjs +0 -30
  477. package/esm2022/lib/query/index.mjs +0 -2
  478. package/esm2022/lib/query/query.module.mjs +0 -27
  479. package/esm2022/lib/query/shared/index.mjs +0 -8
  480. package/esm2022/lib/query/shared/query-search-source.mjs +0 -35
  481. package/esm2022/lib/query/shared/query-search-source.providers.mjs +0 -22
  482. package/esm2022/lib/query/shared/query.directive.mjs +0 -286
  483. package/esm2022/lib/query/shared/query.enums.mjs +0 -32
  484. package/esm2022/lib/query/shared/query.interfaces.mjs +0 -2
  485. package/esm2022/lib/query/shared/query.service.mjs +0 -753
  486. package/esm2022/lib/query/shared/query.utils.mjs +0 -41
  487. package/esm2022/lib/search/index.mjs +0 -10
  488. package/esm2022/lib/search/search-bar/search-bar.component.mjs +0 -483
  489. package/esm2022/lib/search/search-bar/search-bar.module.mjs +0 -19
  490. package/esm2022/lib/search/search-results/index.mjs +0 -5
  491. package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +0 -101
  492. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +0 -427
  493. package/esm2022/lib/search/search-results/search-results-item.component.mjs +0 -119
  494. package/esm2022/lib/search/search-results/search-results.component.mjs +0 -297
  495. package/esm2022/lib/search/search-results/search-results.directive.mjs +0 -7
  496. package/esm2022/lib/search/search-results/search-results.module.mjs +0 -20
  497. package/esm2022/lib/search/search-selector/search-selector.component.mjs +0 -118
  498. package/esm2022/lib/search/search-selector/search-selector.module.mjs +0 -19
  499. package/esm2022/lib/search/search-settings/search-settings.component.mjs +0 -264
  500. package/esm2022/lib/search/search-settings/search-settings.module.mjs +0 -19
  501. package/esm2022/lib/search/search.module.mjs +0 -77
  502. package/esm2022/lib/search/shared/index.mjs +0 -10
  503. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +0 -337
  504. package/esm2022/lib/search/shared/search-source-service.providers.mjs +0 -20
  505. package/esm2022/lib/search/shared/search-source.service.mjs +0 -56
  506. package/esm2022/lib/search/shared/search.enums.mjs +0 -4
  507. package/esm2022/lib/search/shared/search.interfaces.mjs +0 -2
  508. package/esm2022/lib/search/shared/search.provider.mjs +0 -20
  509. package/esm2022/lib/search/shared/search.service.mjs +0 -149
  510. package/esm2022/lib/search/shared/search.utils.mjs +0 -92
  511. package/esm2022/lib/search/shared/sources/cadastre.mjs +0 -142
  512. package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +0 -32
  513. package/esm2022/lib/search/shared/sources/coordinates.interfaces.mjs +0 -2
  514. package/esm2022/lib/search/shared/sources/coordinates.mjs +0 -168
  515. package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +0 -52
  516. package/esm2022/lib/search/shared/sources/icherche-icons.mjs +0 -32
  517. package/esm2022/lib/search/shared/sources/icherche.interfaces.mjs +0 -2
  518. package/esm2022/lib/search/shared/sources/icherche.mjs +0 -816
  519. package/esm2022/lib/search/shared/sources/icherche.providers.mjs +0 -87
  520. package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +0 -2
  521. package/esm2022/lib/search/shared/sources/ilayer.mjs +0 -339
  522. package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +0 -58
  523. package/esm2022/lib/search/shared/sources/index.mjs +0 -23
  524. package/esm2022/lib/search/shared/sources/nominatim.interfaces.mjs +0 -2
  525. package/esm2022/lib/search/shared/sources/nominatim.mjs +0 -263
  526. package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +0 -31
  527. package/esm2022/lib/search/shared/sources/source.interfaces.mjs +0 -13
  528. package/esm2022/lib/search/shared/sources/source.mjs +0 -221
  529. package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +0 -2
  530. package/esm2022/lib/search/shared/sources/storedqueries.mjs +0 -454
  531. package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +0 -56
  532. package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +0 -2
  533. package/esm2022/lib/search/shared/sources/workspace.mjs +0 -192
  534. package/esm2022/lib/search/shared/sources/workspace.providers.mjs +0 -31
  535. package/esm2022/lib/style/index.mjs +0 -5
  536. package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +0 -360
  537. package/esm2022/lib/style/shared/datasource/index.mjs +0 -2
  538. package/esm2022/lib/style/shared/feature/feature-style.mjs +0 -162
  539. package/esm2022/lib/style/shared/feature/index.mjs +0 -2
  540. package/esm2022/lib/style/shared/font.enum.mjs +0 -17
  541. package/esm2022/lib/style/shared/index.mjs +0 -5
  542. package/esm2022/lib/style/shared/overlay/index.mjs +0 -3
  543. package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +0 -39
  544. package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +0 -88
  545. package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +0 -78
  546. package/esm2022/lib/style/shared/vector/conversion.utils.mjs +0 -27
  547. package/esm2022/lib/style/shared/vector/index.mjs +0 -4
  548. package/esm2022/lib/style/shared/vector/vector-style.interface.mjs +0 -2
  549. package/esm2022/lib/style/style-list/index.mjs +0 -5
  550. package/esm2022/lib/style/style-list/style-list.interface.mjs +0 -2
  551. package/esm2022/lib/style/style-list/style-list.module.mjs +0 -23
  552. package/esm2022/lib/style/style-list/style-list.provider.mjs +0 -21
  553. package/esm2022/lib/style/style-list/style-list.service.mjs +0 -52
  554. package/esm2022/lib/style/style-modal/drawing/index.mjs +0 -2
  555. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +0 -193
  556. package/esm2022/lib/style/style-modal/index.mjs +0 -5
  557. package/esm2022/lib/style/style-modal/layer/index.mjs +0 -2
  558. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +0 -142
  559. package/esm2022/lib/style/style-modal/layer-button/index.mjs +0 -2
  560. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +0 -44
  561. package/esm2022/lib/style/style-modal/shared/index.mjs +0 -2
  562. package/esm2022/lib/style/style-modal/shared/style-modal.interface.mjs +0 -2
  563. package/esm2022/lib/style/style-service/draw-style.service.mjs +0 -255
  564. package/esm2022/lib/style/style-service/index.mjs +0 -3
  565. package/esm2022/lib/style/style-service/style.service.mjs +0 -393
  566. package/esm2022/lib/style/style.module.mjs +0 -46
  567. package/esm2022/lib/toast/index.mjs +0 -2
  568. package/esm2022/lib/toast/toast.component.mjs +0 -99
  569. package/esm2022/lib/toast/toast.module.mjs +0 -24
  570. package/esm2022/lib/utils/googleLinks.mjs +0 -13
  571. package/esm2022/lib/utils/id-generator.mjs +0 -112
  572. package/esm2022/lib/utils/index.mjs +0 -5
  573. package/esm2022/lib/utils/osmLinks.mjs +0 -9
  574. package/esm2022/lib/utils/propertyTypeDetector/index.mjs +0 -3
  575. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.interface.mjs +0 -2
  576. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +0 -64
  577. package/esm2022/lib/wkt/index.mjs +0 -2
  578. package/esm2022/lib/wkt/shared/index.mjs +0 -2
  579. package/esm2022/lib/wkt/shared/wkt.service.mjs +0 -235
  580. package/esm2022/lib/wkt/wkt.module.mjs +0 -25
  581. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +0 -36
  582. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +0 -19
  583. package/esm2022/lib/workspace/confirmation-popup/index.mjs +0 -3
  584. package/esm2022/lib/workspace/index.mjs +0 -8
  585. package/esm2022/lib/workspace/shared/edition-workspace.mjs +0 -299
  586. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +0 -718
  587. package/esm2022/lib/workspace/shared/feature-workspace.mjs +0 -41
  588. package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +0 -113
  589. package/esm2022/lib/workspace/shared/index.mjs +0 -8
  590. package/esm2022/lib/workspace/shared/wfs-workspace.mjs +0 -41
  591. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +0 -106
  592. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +0 -230
  593. package/esm2022/lib/workspace/shared/workspace.utils.mjs +0 -185
  594. package/esm2022/lib/workspace/widgets/index.mjs +0 -4
  595. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +0 -48
  596. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +0 -19
  597. package/esm2022/lib/workspace/widgets/widgets.mjs +0 -15
  598. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +0 -168
  599. package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +0 -19
  600. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +0 -136
  601. package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +0 -19
  602. package/esm2022/lib/workspace/workspace.module.mjs +0 -32
  603. package/esm2022/public_api.mjs +0 -56
  604. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +0 -19
  605. package/lib/layer/layer-list/layer-list.enum.d.ts +0 -15
  606. package/lib/layer/layer-list-tool/layer-list-tool.enum.d.ts +0 -5
  607. package/src/lib/layer/layer-legend/layer-legend.theming.scss +0 -10
@@ -1,841 +0,0 @@
1
- import { AsyncPipe, NgFor, NgIf, NgTemplateOutlet } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, ContentChild, ElementRef, EventEmitter, Input, Output } from '@angular/core';
3
- import { FormsModule } from '@angular/forms';
4
- import { MatBadgeModule } from '@angular/material/badge';
5
- import { MatButtonModule } from '@angular/material/button';
6
- import { MatCheckboxModule } from '@angular/material/checkbox';
7
- import { MatDividerModule } from '@angular/material/divider';
8
- import { MatIconModule } from '@angular/material/icon';
9
- import { MatMenuModule } from '@angular/material/menu';
10
- import { MatSliderModule } from '@angular/material/slider';
11
- import { MatTooltipModule } from '@angular/material/tooltip';
12
- import { ListComponent, ListItemDirective } from '@igo2/common/list';
13
- import { PanelComponent } from '@igo2/common/panel';
14
- import { IgoLanguageModule } from '@igo2/core/language';
15
- import * as olextent from 'ol/extent';
16
- import { BehaviorSubject, EMPTY, ReplaySubject, timer } from 'rxjs';
17
- import { debounce } from 'rxjs/operators';
18
- import scrollIntoView from 'scroll-into-view-if-needed';
19
- import { getAllChildLayersByProperty, getRootParentByProperty } from '../../map/shared/linkedLayers.utils';
20
- import { IgoMap } from '../../map/shared/map';
21
- import { LayerItemComponent } from '../layer-item/layer-item.component';
22
- import { LayerListToolComponent } from '../layer-list-tool/layer-list-tool.component';
23
- import { LayerService } from '../shared/layer.service';
24
- import { LinkedProperties } from '../shared/layers/layer.interface';
25
- import { LayerListControlsEnum, LayerListDisplacement } from './layer-list.enum';
26
- import { LayerListSelectVisibleEnum } from './layer-list.enum';
27
- import * as i0 from "@angular/core";
28
- import * as i1 from "../shared/layer.service";
29
- import * as i2 from "@angular/material/checkbox";
30
- import * as i3 from "@angular/material/divider";
31
- import * as i4 from "@angular/material/button";
32
- import * as i5 from "@angular/material/tooltip";
33
- import * as i6 from "@angular/material/icon";
34
- import * as i7 from "@angular/material/badge";
35
- import * as i8 from "@angular/material/menu";
36
- import * as i9 from "@angular/material/slider";
37
- import * as i10 from "@angular/forms";
38
- import * as i11 from "@ngx-translate/core";
39
- // TODO: This class could use a clean up. Also, some methods could be moved ealsewhere
40
- export class LayerListComponent {
41
- elRef;
42
- layerService;
43
- orderable = true;
44
- thresholdToFilterAndSort = 5;
45
- layers$ = new BehaviorSubject([]);
46
- change$ = new ReplaySubject(1);
47
- showToolbar$ = new BehaviorSubject(false);
48
- layerTool;
49
- hideSelectedLayers = true;
50
- activeLayer$ = new BehaviorSubject(undefined);
51
- layersChecked = [];
52
- selection;
53
- change$$;
54
- layers$$;
55
- layerItemChangeDetection$ = new BehaviorSubject(undefined);
56
- templateLayerToolbar;
57
- layersAreAllVisible = true;
58
- ogcButton = true;
59
- timeButton = true;
60
- get map() {
61
- return this._map;
62
- }
63
- set map(value) {
64
- this._map = value;
65
- }
66
- _map;
67
- set layers(value) {
68
- this._layers = this.removeProblemLayerInList(value);
69
- this.next();
70
- }
71
- get layers() {
72
- return this._layers;
73
- }
74
- _layers;
75
- set activeLayer(value) {
76
- this._activeLayer = value;
77
- this.activeLayer$.next(value);
78
- }
79
- get activeLayer() {
80
- return this._activeLayer;
81
- }
82
- _activeLayer;
83
- floatLabel = 'auto';
84
- layerFilterAndSortOptions = {};
85
- excludeBaseLayers = false;
86
- toggleLegendOnVisibilityChange = false;
87
- expandLegendOfVisibleLayers = false;
88
- updateLegendOnResolutionChange = false;
89
- queryBadge = false;
90
- appliedFilterAndSort = new EventEmitter();
91
- get keyword() {
92
- return this._keyword;
93
- }
94
- set keyword(value) {
95
- this._keyword = value;
96
- this.next();
97
- }
98
- _keyword = undefined;
99
- get onlyVisible() {
100
- return this._onlyVisible;
101
- }
102
- set onlyVisible(value) {
103
- this._onlyVisible = value;
104
- this.next();
105
- }
106
- _onlyVisible = false;
107
- get sortAlpha() {
108
- return this._sortedAlpha;
109
- }
110
- set sortAlpha(value) {
111
- this._sortedAlpha = value;
112
- this.next();
113
- }
114
- _sortedAlpha = false;
115
- get opacity() {
116
- return Math.round(this.activeLayer$.getValue().opacity * 100);
117
- }
118
- set opacity(opacity) {
119
- this.activeLayer$.getValue().opacity = opacity / 100;
120
- }
121
- get badgeOpacity() {
122
- if (this.opacity === 100) {
123
- return;
124
- }
125
- return this.opacity;
126
- }
127
- get raiseDisabled() {
128
- if (!this.orderable ||
129
- this.activeLayer.baseLayer ||
130
- this.getUpperLayer().id === this.activeLayer.id ||
131
- this.isUpperBaselayer(this.activeLayer)) {
132
- return true;
133
- }
134
- return false;
135
- }
136
- get lowerDisabled() {
137
- if (!this.orderable ||
138
- this.activeLayer.baseLayer ||
139
- this.getLowerLayer().id === this.activeLayer.id ||
140
- this.isLowerBaselayer(this.activeLayer)) {
141
- return true;
142
- }
143
- return false;
144
- }
145
- get raiseDisabledSelection() {
146
- if (this.layersChecked.length === 0 ||
147
- !this.orderable ||
148
- !this.raisableLayers(this.layersChecked) ||
149
- this.selectAllCheck === true) {
150
- return true;
151
- }
152
- return false;
153
- }
154
- get lowerDisabledSelection() {
155
- if (this.layersChecked.length === 0 ||
156
- !this.orderable ||
157
- !this.lowerableLayers(this.layersChecked) ||
158
- this.selectAllCheck === true) {
159
- return true;
160
- }
161
- return false;
162
- }
163
- get checkOpacity() {
164
- return this.layersCheckedOpacity() * 100;
165
- }
166
- set checkOpacity(opacity) {
167
- for (const layer of this.layersChecked) {
168
- layer.opacity = opacity / 100;
169
- }
170
- }
171
- get layerListDisplacement() {
172
- return LayerListDisplacement;
173
- }
174
- get unavailableLayers() {
175
- return this.layerService.unavailableLayers;
176
- }
177
- toggleOpacity = false;
178
- selectAllCheck;
179
- selectAllCheck$ = new BehaviorSubject(undefined);
180
- selectAllCheck$$;
181
- constructor(elRef, layerService) {
182
- this.elRef = elRef;
183
- this.layerService = layerService;
184
- }
185
- /**
186
- * Subscribe to the search term stream and trigger researches
187
- * @internal
188
- */
189
- ngOnInit() {
190
- this.change$$ = this.change$
191
- .pipe(debounce(() => {
192
- return this.layers.length === 0 ? EMPTY : timer(50);
193
- }))
194
- .subscribe(() => {
195
- this.showToolbar$.next(this.computeShowToolbar());
196
- this.layers$.next(this.computeLayers(this.layers.slice(0)));
197
- this.appliedFilterAndSort.emit({
198
- keyword: this.keyword,
199
- sortAlpha: this.sortAlpha,
200
- onlyVisible: this.onlyVisible
201
- });
202
- });
203
- this.selectAllCheck$$ = this.selectAllCheck$.subscribe((value) => {
204
- this.selectAllCheck = value;
205
- });
206
- this.layers$$ = this.layers$.subscribe(() => {
207
- if (this.layers) {
208
- let checks = 0;
209
- for (const layer of this.layers) {
210
- layer.status$.subscribe((valStatus) => {
211
- if (valStatus === 0) {
212
- this.map.removeLayer(layer);
213
- }
214
- });
215
- if (layer.options.active) {
216
- this.activeLayer = layer;
217
- this.layerTool = true;
218
- }
219
- if (layer.options.check) {
220
- checks += 1;
221
- }
222
- }
223
- if (this.excludeBaseLayers) {
224
- this.selectAllCheck =
225
- checks ===
226
- this.layers.filter((lay) => lay.baseLayer !== true && lay.showInLayerList).length
227
- ? true
228
- : false;
229
- }
230
- else {
231
- this.selectAllCheck =
232
- checks === this.layers.filter((lay) => lay.showInLayerList).length
233
- ? true
234
- : false;
235
- }
236
- }
237
- });
238
- }
239
- ngOnDestroy() {
240
- this.change$$.unsubscribe();
241
- this.selectAllCheck$$.unsubscribe();
242
- this.layers$$.unsubscribe();
243
- }
244
- activeLayerExtentIsValid(layer) {
245
- let valid = false;
246
- if (layer.options.showButtonZoomToExtent === false) {
247
- return false;
248
- }
249
- const layerExtent = layer.options.extent;
250
- const maxLayerZoomExtent = this.map.viewController.maxLayerZoomExtent;
251
- if (layerExtent) {
252
- if (maxLayerZoomExtent) {
253
- valid = olextent.containsExtent(maxLayerZoomExtent, layerExtent);
254
- }
255
- else {
256
- valid = true;
257
- }
258
- }
259
- return valid;
260
- }
261
- activeLayersExtentAreValid(layers) {
262
- let valid = false;
263
- const layersExtent = olextent.createEmpty();
264
- const maxLayerZoomExtent = this.map.viewController.maxLayerZoomExtent;
265
- for (const layer of layers) {
266
- const layerExtent = layer.options.extent;
267
- if (layerExtent && !layerExtent.includes(Infinity)) {
268
- olextent.extend(layersExtent, layerExtent);
269
- }
270
- }
271
- if (!olextent.isEmpty(layersExtent)) {
272
- if (maxLayerZoomExtent) {
273
- valid = olextent.containsExtent(maxLayerZoomExtent, layersExtent);
274
- }
275
- else {
276
- valid = true;
277
- }
278
- }
279
- return valid;
280
- }
281
- zoomLayerExtents(layer) {
282
- this.map.viewController.zoomToExtent(layer.options.extent);
283
- }
284
- zoomLayersExtents(layers) {
285
- const layersExtent = olextent.createEmpty();
286
- for (const layer of layers) {
287
- const layerExtent = layer.options.extent;
288
- if (layerExtent) {
289
- olextent.extend(layersExtent, layerExtent);
290
- }
291
- }
292
- this.map.viewController.zoomToExtent(layersExtent);
293
- }
294
- changeOpacity(event) {
295
- this.opacity = event.value;
296
- }
297
- clearKeyword() {
298
- this.keyword = undefined;
299
- }
300
- getLowerLayer() {
301
- return this.layers
302
- .filter((l) => !l.baseLayer)
303
- .reduce((prev, current) => {
304
- return prev.zIndex < current.zIndex ? prev : current;
305
- }, { zIndex: undefined, id: undefined });
306
- }
307
- isLowerBaselayer(layer) {
308
- const index = this.layers.findIndex((lay) => layer.id === lay.id);
309
- if (this.layers &&
310
- this.layers[index + 1] &&
311
- this.layers[index + 1].baseLayer === true) {
312
- return true;
313
- }
314
- return false;
315
- }
316
- getUpperLayer() {
317
- return this.layers
318
- .filter((l) => !l.baseLayer)
319
- .reduce((prev, current) => {
320
- return prev.zIndex > current.zIndex ? prev : current;
321
- }, { zIndex: undefined, id: undefined });
322
- }
323
- isUpperBaselayer(layer) {
324
- const index = this.layers.findIndex((lay) => layer.id === lay.id);
325
- if (this.layers &&
326
- this.layers[index - 1] &&
327
- this.layers[index - 1].baseLayer === true) {
328
- return true;
329
- }
330
- return false;
331
- }
332
- moveActiveLayer(activeLayer, actiontype, fromUi = false) {
333
- const sortedLayersToMove = [];
334
- getRootParentByProperty(this.map, activeLayer, LinkedProperties.ZINDEX);
335
- let rootParentByProperty = getRootParentByProperty(this.map, activeLayer, LinkedProperties.ZINDEX);
336
- if (!rootParentByProperty) {
337
- rootParentByProperty = activeLayer;
338
- }
339
- const layersToMove = [rootParentByProperty];
340
- getAllChildLayersByProperty(this.map, rootParentByProperty, layersToMove, LinkedProperties.ZINDEX);
341
- this.layers.map((layer) => {
342
- if (layersToMove.indexOf(layer) !== -1) {
343
- sortedLayersToMove.push(layer);
344
- }
345
- });
346
- if (actiontype === LayerListDisplacement.Raise) {
347
- this.raiseLayers(sortedLayersToMove, fromUi);
348
- }
349
- else if (actiontype === LayerListDisplacement.Lower) {
350
- this.lowerLayers(sortedLayersToMove, fromUi);
351
- }
352
- }
353
- /*
354
- * For selection mode disabled attribute
355
- */
356
- raisableLayers(layers) {
357
- let response = false;
358
- let base = 0;
359
- for (const layer of layers) {
360
- const mapIndex = this.layers.findIndex((lay) => layer.id === lay.id);
361
- const currentLayer = this.layers[mapIndex];
362
- if (currentLayer.baseLayer) {
363
- base += 1;
364
- }
365
- const previousLayer = this.layers[mapIndex - 1];
366
- if (previousLayer &&
367
- previousLayer.baseLayer !== true &&
368
- !layers.find((lay) => previousLayer.id === lay.id) &&
369
- currentLayer.baseLayer !== true) {
370
- response = true;
371
- }
372
- }
373
- if ((this.layersChecked.length === 1 && this.layersChecked[0].baseLayer) ||
374
- base === this.layersChecked.length) {
375
- response = false;
376
- }
377
- return response;
378
- }
379
- /*
380
- * When multiple layers is selected but some may be allow to move
381
- */
382
- raisableLayer(index) {
383
- if (index < 1) {
384
- return false;
385
- }
386
- if (this.layers[index - 1].options.check) {
387
- return this.raisableLayer(index - 1);
388
- }
389
- return true;
390
- }
391
- raiseLayers(layers, fromUi = true) {
392
- const layersToRaise = [];
393
- for (const layer of layers) {
394
- const index = this.layers.findIndex((lay) => lay.id === layer.id);
395
- if (this.raisableLayer(index)) {
396
- layersToRaise.push(layer);
397
- }
398
- }
399
- this.map.raiseLayers(layersToRaise);
400
- if (fromUi) {
401
- setTimeout(() => {
402
- const checkItems = this.elRef.nativeElement.getElementsByClassName('mat-checkbox-checked');
403
- const itemFocused = this.elRef.nativeElement.getElementsByClassName('igo-layer-item-focused');
404
- let targetToScroll;
405
- if (checkItems.length) {
406
- targetToScroll = checkItems[0];
407
- }
408
- if (itemFocused.length) {
409
- targetToScroll = itemFocused[0];
410
- }
411
- if (targetToScroll) {
412
- scrollIntoView(targetToScroll, {
413
- scrollMode: 'if-needed',
414
- behavior: 'smooth',
415
- block: 'end',
416
- inline: 'nearest'
417
- });
418
- }
419
- }, 100);
420
- }
421
- }
422
- /*
423
- * For selection mode disabled attribute
424
- */
425
- lowerableLayers(layers) {
426
- let response = false;
427
- let base = 0;
428
- for (const layer of layers) {
429
- const mapIndex = this.layers.findIndex((lay) => layer.id === lay.id);
430
- const currentLayer = this.layers[mapIndex];
431
- if (currentLayer.baseLayer) {
432
- base += 1;
433
- }
434
- const nextLayer = this.layers[mapIndex + 1];
435
- if (nextLayer &&
436
- nextLayer.baseLayer !== true &&
437
- !layers.find((lay) => nextLayer.id === lay.id)) {
438
- response = true;
439
- }
440
- }
441
- if ((this.layersChecked.length === 1 && this.layersChecked[0].baseLayer) ||
442
- base === this.layersChecked.length) {
443
- response = false;
444
- }
445
- return response;
446
- }
447
- /*
448
- * When multiple layers is selected but some may be allow to move
449
- */
450
- lowerableLayer(index) {
451
- if (index >
452
- this.layers.filter((lay) => lay.baseLayer !== true).length - 2) {
453
- return false;
454
- }
455
- if (this.layers[index + 1].options.check) {
456
- return this.lowerableLayer(index + 1);
457
- }
458
- return true;
459
- }
460
- lowerLayers(layers, fromUi = true) {
461
- const layersToLower = [];
462
- for (const layer of layers) {
463
- const index = this.layers.findIndex((lay) => lay.id === layer.id);
464
- if (this.lowerableLayer(index)) {
465
- layersToLower.push(layer);
466
- }
467
- }
468
- this.map.lowerLayers(layersToLower);
469
- if (fromUi) {
470
- setTimeout(() => {
471
- const checkItems = this.elRef.nativeElement.getElementsByClassName('mat-checkbox-checked');
472
- const itemFocused = this.elRef.nativeElement.getElementsByClassName('igo-layer-item-focused');
473
- let targetToScroll;
474
- if (checkItems.length) {
475
- targetToScroll = checkItems[checkItems.length - 1];
476
- }
477
- if (itemFocused.length) {
478
- targetToScroll = itemFocused[0];
479
- }
480
- if (targetToScroll) {
481
- scrollIntoView(targetToScroll, {
482
- scrollMode: 'if-needed',
483
- behavior: 'smooth',
484
- block: 'end',
485
- inline: 'nearest'
486
- });
487
- }
488
- }, 100);
489
- }
490
- }
491
- next() {
492
- this.change$.next();
493
- }
494
- computeLayers(layers) {
495
- let layersOut = this.filterLayers(layers);
496
- if (this.sortAlpha) {
497
- layersOut = this.sortLayersByTitle(layersOut);
498
- }
499
- else {
500
- layersOut = this.sortLayersByZindex(layersOut);
501
- }
502
- return layersOut;
503
- }
504
- onKeywordChange(term) {
505
- this.keyword = term;
506
- }
507
- onAppliedFilterAndSortChange(appliedFilter) {
508
- this.keyword = appliedFilter.keyword;
509
- this.onlyVisible = appliedFilter.onlyVisible;
510
- this.sortAlpha = appliedFilter.sortAlpha;
511
- }
512
- filterLayers(layers) {
513
- if (this.layerFilterAndSortOptions.showToolbar === LayerListControlsEnum.never) {
514
- return layers;
515
- }
516
- if (!this.keyword && !this.onlyVisible) {
517
- return layers;
518
- }
519
- const keepLayerIds = layers.map((layer) => layer.id);
520
- layers.forEach((layer) => {
521
- const layerOptions = layer.options || {};
522
- const dataSourceOptions = layer.dataSource.options || {};
523
- const metadata = layerOptions.metadata || {};
524
- const keywords = metadata.keywordList || [];
525
- const layerKeywords = keywords.map((kw) => {
526
- return kw.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
527
- });
528
- if (this.keyword && layer.title) {
529
- const localKeyword = this.keyword
530
- .normalize('NFD')
531
- .replace(/[\u0300-\u036f]/g, '');
532
- const layerTitle = layer.title
533
- .normalize('NFD')
534
- .replace(/[\u0300-\u036f]/g, '');
535
- const dataSourceType = dataSourceOptions.type || '';
536
- const keywordRegex = new RegExp(localKeyword, 'gi');
537
- const keywordInList = layerKeywords.find((kw) => keywordRegex.test(kw)) !==
538
- undefined;
539
- if (!keywordRegex.test(layerTitle) &&
540
- !(this.keyword.toLowerCase() === dataSourceType.toLowerCase()) &&
541
- !keywordInList) {
542
- const index = keepLayerIds.indexOf(layer.id);
543
- if (index > -1) {
544
- keepLayerIds.splice(index, 1);
545
- }
546
- }
547
- }
548
- if (this.onlyVisible && layer.visible === false) {
549
- const index = keepLayerIds.indexOf(layer.id);
550
- if (index > -1) {
551
- keepLayerIds.splice(index, 1);
552
- }
553
- }
554
- });
555
- return layers.filter((layer) => keepLayerIds.indexOf(layer.id) !== -1);
556
- }
557
- sortLayersByZindex(layers) {
558
- return layers.sort((layer1, layer2) => layer2.zIndex - layer1.zIndex);
559
- }
560
- sortLayersByTitle(layers) {
561
- return layers.sort((a, b) => {
562
- if (this.normalize(a.title) < this.normalize(b.title)) {
563
- return -1;
564
- }
565
- if (this.normalize(a.title) > this.normalize(b.title)) {
566
- return 1;
567
- }
568
- return 0;
569
- });
570
- }
571
- normalize(str) {
572
- return str
573
- .normalize('NFD')
574
- .replace(/[\u0300-\u036f]/g, '')
575
- .toLowerCase();
576
- }
577
- computeShowToolbar() {
578
- switch (this.layerFilterAndSortOptions.showToolbar) {
579
- case LayerListControlsEnum.always:
580
- return true;
581
- case LayerListControlsEnum.never:
582
- return false;
583
- default:
584
- if (this.layers.length >= this.thresholdToFilterAndSort ||
585
- this.keyword ||
586
- this.onlyVisible) {
587
- return true;
588
- }
589
- return false;
590
- }
591
- }
592
- toggleLayerTool(layer) {
593
- this.toggleOpacity = false;
594
- if (this.layerTool && layer === this.activeLayer) {
595
- this.layerTool = false;
596
- }
597
- else {
598
- this.layerTool = true;
599
- }
600
- for (const lay of this.layers) {
601
- lay.options.active = false;
602
- }
603
- layer.options.active = true;
604
- this.activeLayer = layer;
605
- }
606
- removeLayers(layers) {
607
- if (layers && layers.length > 0) {
608
- this.layersChecked = [];
609
- for (const layer of layers) {
610
- if (layer.options.removable !== false) {
611
- layer.map.removeLayer(layer);
612
- }
613
- else {
614
- this.layersChecked.push(layer);
615
- }
616
- }
617
- }
618
- else if (!layers && this.activeLayer.options.removable !== false) {
619
- this.activeLayer.map.removeLayer(this.activeLayer);
620
- this.layerTool = false;
621
- }
622
- }
623
- toggleVisibility(layers) {
624
- if (layers && layers.length > 0) {
625
- for (const layer of layers) {
626
- layer.visible = this.hideSelectedLayers;
627
- }
628
- }
629
- this.layerItemChangeDetection$.next(true);
630
- }
631
- isLayerRemovable(layer) {
632
- return layer.options.removable !== false;
633
- }
634
- isAllLayersRemovable(layers) {
635
- return layers.every((l) => this.isLayerRemovable(l));
636
- }
637
- get statusSelectedLayersCheck() {
638
- let statusSelectedLayers = LayerListSelectVisibleEnum.NULL;
639
- let findTrue = false;
640
- let findFalse = false;
641
- if (this.layersChecked.length === 0) {
642
- statusSelectedLayers = LayerListSelectVisibleEnum.NULL;
643
- }
644
- else {
645
- statusSelectedLayers = LayerListSelectVisibleEnum.MIXED;
646
- this.hideSelectedLayers = false;
647
- for (const layer2 of this.layersChecked) {
648
- if (layer2.visible === true) {
649
- findTrue = true;
650
- }
651
- if (layer2.visible === false) {
652
- findFalse = true;
653
- }
654
- }
655
- if (findTrue === true && findFalse === false) {
656
- statusSelectedLayers = LayerListSelectVisibleEnum.ALL_VISIBLE;
657
- }
658
- if (findTrue === false && findFalse === true) {
659
- statusSelectedLayers = LayerListSelectVisibleEnum.ALL_HIDDEN;
660
- this.hideSelectedLayers = true;
661
- }
662
- }
663
- return statusSelectedLayers;
664
- }
665
- layersCheck(event) {
666
- event.layer.options.check = event.check;
667
- if (event.check === true) {
668
- const eventMapIndex = this.layers.findIndex((layer) => event.layer.id === layer.id);
669
- for (const layer of this.layersChecked) {
670
- const mapIndex = this.layers.findIndex((lay) => layer.id === lay.id);
671
- if (eventMapIndex < mapIndex) {
672
- this.layersChecked.splice(this.layersChecked.findIndex((lay) => layer.id === lay.id), 0, event.layer);
673
- if (this.excludeBaseLayers) {
674
- if (this.layersChecked.length ===
675
- this.layers.filter((lay) => lay.baseLayer !== true && lay.showInLayerList).length) {
676
- this.selectAllCheck = true;
677
- }
678
- else {
679
- this.selectAllCheck = false;
680
- }
681
- }
682
- else if (!this.excludeBaseLayers) {
683
- if (this.layersChecked.length ===
684
- this.layers.filter((lay) => lay.showInLayerList).length) {
685
- this.selectAllCheck = true;
686
- }
687
- else {
688
- this.selectAllCheck = false;
689
- }
690
- }
691
- return;
692
- }
693
- }
694
- this.layersChecked.push(event.layer);
695
- }
696
- else {
697
- const index = this.layersChecked.findIndex((layer) => event.layer.id === layer.id);
698
- this.layersChecked.splice(index, 1);
699
- }
700
- if (this.excludeBaseLayers) {
701
- if (this.layersChecked.length ===
702
- this.layers.filter((lay) => lay.baseLayer !== true && lay.showInLayerList).length) {
703
- this.selectAllCheck = true;
704
- }
705
- else {
706
- this.selectAllCheck = false;
707
- }
708
- }
709
- else if (!this.excludeBaseLayers) {
710
- if (this.layersChecked.length ===
711
- this.layers.filter((lay) => lay.showInLayerList).length) {
712
- this.selectAllCheck = true;
713
- }
714
- else {
715
- this.selectAllCheck = false;
716
- }
717
- }
718
- }
719
- toggleSelectionMode(value) {
720
- this.selection = value;
721
- this.activeLayer = undefined;
722
- if (value === true) {
723
- this.layerTool = false;
724
- for (const layer of this.layers) {
725
- if (layer.options.check) {
726
- this.layersChecked.push(layer);
727
- }
728
- }
729
- }
730
- }
731
- layersCheckedOpacity() {
732
- if (this.layersChecked.length > 1) {
733
- return 1;
734
- }
735
- else {
736
- const opacity = [];
737
- for (const layer of this.layersChecked) {
738
- opacity.push(layer.opacity);
739
- }
740
- return opacity;
741
- }
742
- }
743
- selectAll() {
744
- if (!this.selectAllCheck) {
745
- for (const layer of this.layers) {
746
- if (this.excludeBaseLayers &&
747
- layer.baseLayer !== true &&
748
- layer.showInLayerList) {
749
- layer.options.check = true;
750
- this.layersChecked.push(layer);
751
- }
752
- else if (!this.excludeBaseLayers && layer.showInLayerList) {
753
- layer.options.check = true;
754
- this.layersChecked.push(layer);
755
- }
756
- }
757
- this.selectAllCheck$.next(true);
758
- }
759
- else {
760
- for (const layer of this.layers) {
761
- layer.options.check = false;
762
- }
763
- this.layersChecked = [];
764
- this.selectAllCheck$.next(false);
765
- }
766
- }
767
- isScrolledIntoView(elemSource, elem) {
768
- const docViewTop = elemSource.scrollTop;
769
- const docViewBottom = docViewTop + elemSource.clientHeight;
770
- const elemTop = elem.offsetTop;
771
- const elemBottom = elemTop + elem.clientHeight;
772
- return elemBottom <= docViewBottom && elemTop >= docViewTop;
773
- }
774
- removeProblemLayerInList(layersList) {
775
- for (const layer of layersList) {
776
- if (layer.olLoadingProblem === true) {
777
- this.map.removeLayer(layer);
778
- }
779
- }
780
- return layersList;
781
- }
782
- deleteUnavailableLayer(anyLayerOptions) {
783
- this.layerService.deleteUnavailableLayers(anyLayerOptions);
784
- }
785
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LayerListComponent, deps: [{ token: i0.ElementRef }, { token: i1.LayerService }], target: i0.ɵɵFactoryTarget.Component });
786
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LayerListComponent, isStandalone: true, selector: "igo-layer-list", inputs: { layersAreAllVisible: "layersAreAllVisible", ogcButton: "ogcButton", timeButton: "timeButton", map: "map", layers: "layers", floatLabel: "floatLabel", layerFilterAndSortOptions: "layerFilterAndSortOptions", excludeBaseLayers: "excludeBaseLayers", toggleLegendOnVisibilityChange: "toggleLegendOnVisibilityChange", expandLegendOfVisibleLayers: "expandLegendOfVisibleLayers", updateLegendOnResolutionChange: "updateLegendOnResolutionChange", queryBadge: "queryBadge" }, outputs: { appliedFilterAndSort: "appliedFilterAndSort" }, queries: [{ propertyName: "templateLayerToolbar", first: true, predicate: ["igoLayerItemToolbar"], descendants: true }], ngImport: i0, template: "<igo-layer-list-tool\n *ngIf=\"showToolbar$ | async\"\n floatLabel=\"auto\"\n [layersAreAllVisible]=\"layersAreAllVisible\"\n [term]=\"layerFilterAndSortOptions.keyword\"\n [onlyVisible]=\"layerFilterAndSortOptions.onlyVisible\"\n [sortAlpha]=\"layerFilterAndSortOptions.sortAlpha\"\n (appliedFilterAndSort)=\"onAppliedFilterAndSortChange($event)\"\n (selection)=\"toggleSelectionMode($event)\"\n>\n</igo-layer-list-tool>\n\n<div *ngIf=\"selection\" class=\"select-all\">\n <mat-checkbox\n class=\"select-all-checkbox\"\n [color]=\"!selectAllCheck && layersChecked.length > 0 ? 'accent' : 'primary'\"\n (change)=\"selectAll()\"\n [checked]=\"selectAllCheck\"\n [indeterminate]=\"!selectAllCheck && layersChecked.length > 0\"\n >\n {{\n selectAllCheck\n ? ('igo.geo.layer.deselectAll' | translate)\n : ('igo.geo.layer.selectAll' | translate)\n }}\n </mat-checkbox>\n</div>\n<mat-divider></mat-divider>\n\n<igo-list #igoList [navigation]=\"false\" [selection]=\"false\">\n <ng-template ngFor let-unavailableLayer [ngForOf]=\"unavailableLayers\">\n <igo-layer-item\n igoListItem\n [unavailableLayer]=\"unavailableLayer\"\n (action)=\"deleteUnavailableLayer($event)\"\n >\n </igo-layer-item>\n </ng-template>\n\n <ng-template ngFor let-layer let-i=\"index\" [ngForOf]=\"layers$ | async\">\n <igo-layer-item\n *ngIf=\"!(excludeBaseLayers && layer.baseLayer)\"\n igoListItem\n [layer]=\"layer\"\n [activeLayer]=\"activeLayer\"\n [orderable]=\"orderable && !layer.baseLayer\"\n [lowerDisabled]=\"getLowerLayer().id === layer.id\"\n [raiseDisabled]=\"getUpperLayer().id === layer.id\"\n [queryBadge]=\"queryBadge\"\n [expandLegendIfVisible]=\"expandLegendOfVisibleLayers\"\n [updateLegendOnResolutionChange]=\"updateLegendOnResolutionChange\"\n [toggleLegendOnVisibilityChange]=\"toggleLegendOnVisibilityChange\"\n [selectionMode]=\"selection\"\n [selectAll]=\"selectAllCheck\"\n [layerCheck]=\"layer.options.check\"\n [changeDetection]=\"layerItemChangeDetection$\"\n (action)=\"toggleLayerTool($event)\"\n (checkbox)=\"layersCheck($event)\"\n >\n </igo-layer-item>\n </ng-template>\n</igo-list>\n\n<igo-panel\n *ngIf=\"!selection && layerTool && activeLayer\"\n class=\"igo-layer-actions-container\"\n [title]=\"activeLayer.title\"\n>\n <div class=\"igo-layer-button-group\">\n <button\n *ngIf=\"isLayerRemovable(activeLayer)\"\n class=\"delete-button\"\n mat-icon-button\n color=\"warn\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.layer.removeLayer' | translate\"\n (click)=\"removeLayers()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n\n <button\n class=\"down-button\"\n mat-icon-button\n color=\"primary\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n sortAlpha || onlyVisible || keyword\n ? ('igo.geo.layer.filterLowerLayer' | translate)\n : ('igo.geo.layer.lowerLayer' | translate)\n \"\n [disabled]=\"lowerDisabled\"\n (click)=\"moveActiveLayer(activeLayer, layerListDisplacement.Lower, true)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"lowerDisabled\"\n >arrow_downward</mat-icon\n >\n </button>\n\n <button\n class=\"up-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n sortAlpha || onlyVisible || keyword\n ? ('igo.geo.layer.filterRaiseLayer' | translate)\n : ('igo.geo.layer.raiseLayer' | translate)\n \"\n [disabled]=\"raiseDisabled\"\n (click)=\"moveActiveLayer(activeLayer, layerListDisplacement.Raise, true)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"raiseDisabled\"\n >arrow_upward</mat-icon\n >\n </button>\n\n <!-- <label>{{ 'igo.geo.layer.opacity' | translate }} </label> -->\n <button\n class=\"opacity-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matMenuTriggerFor]=\"opacityMenu\"\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"badgeOpacity\"\n matBadgeColor=\"primary\"\n matBadgeSize=\"medium\"\n >opacity</mat-icon\n >\n </button>\n\n <mat-menu #opacityMenu=\"matMenu\" class=\"panel-opacity-menu\">\n <mat-slider\n id=\"opacity-slider\"\n color=\"primary\"\n discrete\n step=\"5\"\n [min]=\"0\"\n [max]=\"100\"\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\n (click)=\"$event.stopPropagation()\"\n matTooltipShowDelay=\"500\"\n tooltip-position=\"below\"\n #ngSlider\n ><input\n matSliderThumb\n [value]=\"opacity\"\n (input)=\"\n changeOpacity({\n source: ngSliderThumb,\n parent: ngSlider,\n value: ngSliderThumb.value\n })\n \"\n #ngSliderThumb=\"matSliderThumb\"\n />\n </mat-slider>\n </mat-menu>\n\n <button\n *ngIf=\"activeLayerExtentIsValid(activeLayer)\"\n class=\"zoomLayer-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.layer.zoomLayer' | translate\"\n (click)=\"zoomLayerExtents(activeLayer)\"\n >\n <mat-icon matBadgeColor=\"primary\" matBadgeSize=\"medium\"\n >frame_inspect</mat-icon\n >\n </button>\n\n <ng-container\n igoLayerItemToolbar\n [ngTemplateOutlet]=\"templateLayerToolbar\"\n [ngTemplateOutletContext]=\"{ layer: activeLayer }\"\n >\n </ng-container>\n\n <ng-content select=\"[igoLayerItemToolbar]\"></ng-content>\n </div>\n</igo-panel>\n\n<igo-panel\n *ngIf=\"selection && layers.length > 0\"\n class=\"igo-layer-actions-container\"\n [title]=\"'igo.geo.layer.tools' | translate\"\n>\n <div class=\"actions-buttons-multi\">\n <button\n class=\"delete-button\"\n mat-icon-button\n color=\"warn\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [disabled]=\"layersChecked.length === 0\"\n [matTooltip]=\"\n isAllLayersRemovable(layersChecked)\n ? ('igo.geo.layer.removeSelectedLayers' | translate)\n : ('igo.geo.layer.removeSelectedLayersRestriction' | translate)\n \"\n (click)=\"removeLayers(layersChecked)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"'!'\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"isAllLayersRemovable(layersChecked)\"\n >delete</mat-icon\n >\n </button>\n\n <button\n class=\"eye-button\"\n mat-icon-button\n color=\"primary\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [disabled]=\"layersChecked.length === 0\"\n [matTooltip]=\"\n statusSelectedLayersCheck === 'ALL_HIDDEN'\n ? ('igo.geo.layer.showSelectedLayers' | translate)\n : ('igo.geo.layer.hideSelectedLayers' | translate)\n \"\n (click)=\"toggleVisibility(layersChecked)\"\n >\n <mat-icon>{{\n statusSelectedLayersCheck === 'ALL_HIDDEN'\n ? 'visibility_off'\n : 'visibility'\n }}</mat-icon>\n </button>\n\n <button\n class=\"down-button\"\n mat-icon-button\n color=\"primary\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n sortAlpha || onlyVisible || keyword\n ? ('igo.geo.layer.filterLowerLayer' | translate)\n : ('igo.geo.layer.lowerLayer' | translate)\n \"\n [disabled]=\"lowerDisabledSelection\"\n (click)=\"lowerLayers(layersChecked)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"lowerDisabledSelection\"\n >arrow_downward</mat-icon\n >\n </button>\n\n <button\n class=\"up-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n sortAlpha || onlyVisible || keyword\n ? ('igo.geo.layer.filterRaiseLayer' | translate)\n : ('igo.geo.layer.raiseLayer' | translate)\n \"\n [disabled]=\"raiseDisabledSelection\"\n (click)=\"raiseLayers(layersChecked)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"raiseDisabledSelection\"\n >arrow_upward</mat-icon\n >\n </button>\n\n <button\n class=\"opacity-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [disabled]=\"layersChecked.length === 0\"\n [matMenuTriggerFor]=\"opacityMenu\"\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\n >\n <mat-icon>opacity</mat-icon>\n </button>\n\n <mat-menu #opacityMenu=\"matMenu\" class=\"mat-menu-opacity-slider\">\n <div id=\"opacity-menu\">\n <!-- TODO: The 'tickInterval' property no longer exists -->\n <mat-slider\n *ngIf=\"layersChecked.length\"\n id=\"opacity-slider\"\n color=\"primary\"\n thumbLabel\n showTickMarks\n step=\"5\"\n [min]=\"0\"\n [max]=\"100\"\n [(ngModel)]=\"checkOpacity\"\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\n matTooltipShowDelay=\"500\"\n tooltip-position=\"below\"\n (click)=\"$event.stopPropagation()\"\n ><input matSliderThumb />\n </mat-slider>\n </div>\n </mat-menu>\n\n <button\n *ngIf=\"\n layersChecked.length !== 0 && activeLayersExtentAreValid(layersChecked)\n \"\n class=\"zoomLayer-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.layer.zoomLayers' | translate\"\n (click)=\"zoomLayersExtents(layersChecked)\"\n >\n <mat-icon>frame_inspect</mat-icon>\n </button>\n </div>\n</igo-panel>\n", styles: [":host{display:flex;flex-direction:column;height:100%}:host igo-list{flex:1;padding-top:8px}:host mat-form-field.inputFilter{width:calc(100% - 100px);max-width:200px}:host .igo-layer-actions-container{padding:0 6px 0 4px}:host .igo-layer-actions-container>div{text-align:center}:host mat-list-item ::ng-deep .mdc-list-item__content{margin-bottom:10px}:host .igo-layer-button-group,:host .actions-buttons-multi{display:flex;align-items:center;flex-direction:row-reverse;overflow-x:auto;overflow-y:hidden}:host .igo-layer-button-group::-webkit-scrollbar,:host .actions-buttons-multi::-webkit-scrollbar{height:4px}:host .igo-layer-button-group::-webkit-scrollbar-track,:host .actions-buttons-multi::-webkit-scrollbar-track{background:#f1f1f1}:host .igo-layer-button-group::-webkit-scrollbar-thumb,:host .actions-buttons-multi::-webkit-scrollbar-thumb{background:#888}:host .igo-layer-button-group::-webkit-scrollbar-thumb:hover,:host .actions-buttons-multi::-webkit-scrollbar-thumb:hover{background:#555}:host .igo-layer-button-group{padding-top:5px}:host igo-panel{height:unset}:host .select-all{display:flex;align-items:center;height:48px;padding:0 16px}::ng-deep .panel-opacity-menu{overflow:visible!important}::ng-deep .panel-opacity-menu #opacity-slider{margin:0 16px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LayerListToolComponent, selector: "igo-layer-list-tool", inputs: ["layersAreAllVisible", "floatLabel", "onlyVisible", "sortAlpha", "term"], outputs: ["appliedFilterAndSort", "selection"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: ListComponent, selector: "igo-list", inputs: ["navigation", "selection"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: LayerItemComponent, selector: "igo-layer-item", inputs: ["activeLayer", "selectAll", "layerCheck", "layer", "toggleLegendOnVisibilityChange", "expandLegendIfVisible", "updateLegendOnResolutionChange", "orderable", "lowerDisabled", "raiseDisabled", "queryBadge", "selectionMode", "changeDetection", "unavailableLayer"], outputs: ["action", "checkbox"] }, { kind: "directive", type: ListItemDirective, selector: "[igoListItem]", inputs: ["color", "focused", "selected", "disabled"], outputs: ["beforeSelect", "beforeFocus", "beforeUnselect", "beforeUnfocus", "beforeDisable", "beforeEnable", "focus", "unfocus", "select", "unselect", "disable", "enable"] }, { kind: "component", type: PanelComponent, selector: "igo-panel", inputs: ["title", "withHeader", "cursorPointer"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i7.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatSliderModule }, { kind: "component", type: i9.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i9.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
787
- }
788
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LayerListComponent, decorators: [{
789
- type: Component,
790
- args: [{ selector: 'igo-layer-list', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
791
- NgIf,
792
- LayerListToolComponent,
793
- MatCheckboxModule,
794
- MatDividerModule,
795
- ListComponent,
796
- NgFor,
797
- LayerItemComponent,
798
- ListItemDirective,
799
- PanelComponent,
800
- MatButtonModule,
801
- MatTooltipModule,
802
- MatIconModule,
803
- MatBadgeModule,
804
- MatMenuModule,
805
- MatSliderModule,
806
- NgTemplateOutlet,
807
- FormsModule,
808
- AsyncPipe,
809
- IgoLanguageModule
810
- ], template: "<igo-layer-list-tool\n *ngIf=\"showToolbar$ | async\"\n floatLabel=\"auto\"\n [layersAreAllVisible]=\"layersAreAllVisible\"\n [term]=\"layerFilterAndSortOptions.keyword\"\n [onlyVisible]=\"layerFilterAndSortOptions.onlyVisible\"\n [sortAlpha]=\"layerFilterAndSortOptions.sortAlpha\"\n (appliedFilterAndSort)=\"onAppliedFilterAndSortChange($event)\"\n (selection)=\"toggleSelectionMode($event)\"\n>\n</igo-layer-list-tool>\n\n<div *ngIf=\"selection\" class=\"select-all\">\n <mat-checkbox\n class=\"select-all-checkbox\"\n [color]=\"!selectAllCheck && layersChecked.length > 0 ? 'accent' : 'primary'\"\n (change)=\"selectAll()\"\n [checked]=\"selectAllCheck\"\n [indeterminate]=\"!selectAllCheck && layersChecked.length > 0\"\n >\n {{\n selectAllCheck\n ? ('igo.geo.layer.deselectAll' | translate)\n : ('igo.geo.layer.selectAll' | translate)\n }}\n </mat-checkbox>\n</div>\n<mat-divider></mat-divider>\n\n<igo-list #igoList [navigation]=\"false\" [selection]=\"false\">\n <ng-template ngFor let-unavailableLayer [ngForOf]=\"unavailableLayers\">\n <igo-layer-item\n igoListItem\n [unavailableLayer]=\"unavailableLayer\"\n (action)=\"deleteUnavailableLayer($event)\"\n >\n </igo-layer-item>\n </ng-template>\n\n <ng-template ngFor let-layer let-i=\"index\" [ngForOf]=\"layers$ | async\">\n <igo-layer-item\n *ngIf=\"!(excludeBaseLayers && layer.baseLayer)\"\n igoListItem\n [layer]=\"layer\"\n [activeLayer]=\"activeLayer\"\n [orderable]=\"orderable && !layer.baseLayer\"\n [lowerDisabled]=\"getLowerLayer().id === layer.id\"\n [raiseDisabled]=\"getUpperLayer().id === layer.id\"\n [queryBadge]=\"queryBadge\"\n [expandLegendIfVisible]=\"expandLegendOfVisibleLayers\"\n [updateLegendOnResolutionChange]=\"updateLegendOnResolutionChange\"\n [toggleLegendOnVisibilityChange]=\"toggleLegendOnVisibilityChange\"\n [selectionMode]=\"selection\"\n [selectAll]=\"selectAllCheck\"\n [layerCheck]=\"layer.options.check\"\n [changeDetection]=\"layerItemChangeDetection$\"\n (action)=\"toggleLayerTool($event)\"\n (checkbox)=\"layersCheck($event)\"\n >\n </igo-layer-item>\n </ng-template>\n</igo-list>\n\n<igo-panel\n *ngIf=\"!selection && layerTool && activeLayer\"\n class=\"igo-layer-actions-container\"\n [title]=\"activeLayer.title\"\n>\n <div class=\"igo-layer-button-group\">\n <button\n *ngIf=\"isLayerRemovable(activeLayer)\"\n class=\"delete-button\"\n mat-icon-button\n color=\"warn\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.layer.removeLayer' | translate\"\n (click)=\"removeLayers()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n\n <button\n class=\"down-button\"\n mat-icon-button\n color=\"primary\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n sortAlpha || onlyVisible || keyword\n ? ('igo.geo.layer.filterLowerLayer' | translate)\n : ('igo.geo.layer.lowerLayer' | translate)\n \"\n [disabled]=\"lowerDisabled\"\n (click)=\"moveActiveLayer(activeLayer, layerListDisplacement.Lower, true)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"lowerDisabled\"\n >arrow_downward</mat-icon\n >\n </button>\n\n <button\n class=\"up-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n sortAlpha || onlyVisible || keyword\n ? ('igo.geo.layer.filterRaiseLayer' | translate)\n : ('igo.geo.layer.raiseLayer' | translate)\n \"\n [disabled]=\"raiseDisabled\"\n (click)=\"moveActiveLayer(activeLayer, layerListDisplacement.Raise, true)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"raiseDisabled\"\n >arrow_upward</mat-icon\n >\n </button>\n\n <!-- <label>{{ 'igo.geo.layer.opacity' | translate }} </label> -->\n <button\n class=\"opacity-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matMenuTriggerFor]=\"opacityMenu\"\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"badgeOpacity\"\n matBadgeColor=\"primary\"\n matBadgeSize=\"medium\"\n >opacity</mat-icon\n >\n </button>\n\n <mat-menu #opacityMenu=\"matMenu\" class=\"panel-opacity-menu\">\n <mat-slider\n id=\"opacity-slider\"\n color=\"primary\"\n discrete\n step=\"5\"\n [min]=\"0\"\n [max]=\"100\"\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\n (click)=\"$event.stopPropagation()\"\n matTooltipShowDelay=\"500\"\n tooltip-position=\"below\"\n #ngSlider\n ><input\n matSliderThumb\n [value]=\"opacity\"\n (input)=\"\n changeOpacity({\n source: ngSliderThumb,\n parent: ngSlider,\n value: ngSliderThumb.value\n })\n \"\n #ngSliderThumb=\"matSliderThumb\"\n />\n </mat-slider>\n </mat-menu>\n\n <button\n *ngIf=\"activeLayerExtentIsValid(activeLayer)\"\n class=\"zoomLayer-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.layer.zoomLayer' | translate\"\n (click)=\"zoomLayerExtents(activeLayer)\"\n >\n <mat-icon matBadgeColor=\"primary\" matBadgeSize=\"medium\"\n >frame_inspect</mat-icon\n >\n </button>\n\n <ng-container\n igoLayerItemToolbar\n [ngTemplateOutlet]=\"templateLayerToolbar\"\n [ngTemplateOutletContext]=\"{ layer: activeLayer }\"\n >\n </ng-container>\n\n <ng-content select=\"[igoLayerItemToolbar]\"></ng-content>\n </div>\n</igo-panel>\n\n<igo-panel\n *ngIf=\"selection && layers.length > 0\"\n class=\"igo-layer-actions-container\"\n [title]=\"'igo.geo.layer.tools' | translate\"\n>\n <div class=\"actions-buttons-multi\">\n <button\n class=\"delete-button\"\n mat-icon-button\n color=\"warn\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [disabled]=\"layersChecked.length === 0\"\n [matTooltip]=\"\n isAllLayersRemovable(layersChecked)\n ? ('igo.geo.layer.removeSelectedLayers' | translate)\n : ('igo.geo.layer.removeSelectedLayersRestriction' | translate)\n \"\n (click)=\"removeLayers(layersChecked)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"'!'\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"isAllLayersRemovable(layersChecked)\"\n >delete</mat-icon\n >\n </button>\n\n <button\n class=\"eye-button\"\n mat-icon-button\n color=\"primary\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [disabled]=\"layersChecked.length === 0\"\n [matTooltip]=\"\n statusSelectedLayersCheck === 'ALL_HIDDEN'\n ? ('igo.geo.layer.showSelectedLayers' | translate)\n : ('igo.geo.layer.hideSelectedLayers' | translate)\n \"\n (click)=\"toggleVisibility(layersChecked)\"\n >\n <mat-icon>{{\n statusSelectedLayersCheck === 'ALL_HIDDEN'\n ? 'visibility_off'\n : 'visibility'\n }}</mat-icon>\n </button>\n\n <button\n class=\"down-button\"\n mat-icon-button\n color=\"primary\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n sortAlpha || onlyVisible || keyword\n ? ('igo.geo.layer.filterLowerLayer' | translate)\n : ('igo.geo.layer.lowerLayer' | translate)\n \"\n [disabled]=\"lowerDisabledSelection\"\n (click)=\"lowerLayers(layersChecked)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"lowerDisabledSelection\"\n >arrow_downward</mat-icon\n >\n </button>\n\n <button\n class=\"up-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n sortAlpha || onlyVisible || keyword\n ? ('igo.geo.layer.filterRaiseLayer' | translate)\n : ('igo.geo.layer.raiseLayer' | translate)\n \"\n [disabled]=\"raiseDisabledSelection\"\n (click)=\"raiseLayers(layersChecked)\"\n >\n <mat-icon\n aria-hidden=\"false\"\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n [matBadgeHidden]=\"raiseDisabledSelection\"\n >arrow_upward</mat-icon\n >\n </button>\n\n <button\n class=\"opacity-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [disabled]=\"layersChecked.length === 0\"\n [matMenuTriggerFor]=\"opacityMenu\"\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\n >\n <mat-icon>opacity</mat-icon>\n </button>\n\n <mat-menu #opacityMenu=\"matMenu\" class=\"mat-menu-opacity-slider\">\n <div id=\"opacity-menu\">\n <!-- TODO: The 'tickInterval' property no longer exists -->\n <mat-slider\n *ngIf=\"layersChecked.length\"\n id=\"opacity-slider\"\n color=\"primary\"\n thumbLabel\n showTickMarks\n step=\"5\"\n [min]=\"0\"\n [max]=\"100\"\n [(ngModel)]=\"checkOpacity\"\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\n matTooltipShowDelay=\"500\"\n tooltip-position=\"below\"\n (click)=\"$event.stopPropagation()\"\n ><input matSliderThumb />\n </mat-slider>\n </div>\n </mat-menu>\n\n <button\n *ngIf=\"\n layersChecked.length !== 0 && activeLayersExtentAreValid(layersChecked)\n \"\n class=\"zoomLayer-button\"\n color=\"primary\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.layer.zoomLayers' | translate\"\n (click)=\"zoomLayersExtents(layersChecked)\"\n >\n <mat-icon>frame_inspect</mat-icon>\n </button>\n </div>\n</igo-panel>\n", styles: [":host{display:flex;flex-direction:column;height:100%}:host igo-list{flex:1;padding-top:8px}:host mat-form-field.inputFilter{width:calc(100% - 100px);max-width:200px}:host .igo-layer-actions-container{padding:0 6px 0 4px}:host .igo-layer-actions-container>div{text-align:center}:host mat-list-item ::ng-deep .mdc-list-item__content{margin-bottom:10px}:host .igo-layer-button-group,:host .actions-buttons-multi{display:flex;align-items:center;flex-direction:row-reverse;overflow-x:auto;overflow-y:hidden}:host .igo-layer-button-group::-webkit-scrollbar,:host .actions-buttons-multi::-webkit-scrollbar{height:4px}:host .igo-layer-button-group::-webkit-scrollbar-track,:host .actions-buttons-multi::-webkit-scrollbar-track{background:#f1f1f1}:host .igo-layer-button-group::-webkit-scrollbar-thumb,:host .actions-buttons-multi::-webkit-scrollbar-thumb{background:#888}:host .igo-layer-button-group::-webkit-scrollbar-thumb:hover,:host .actions-buttons-multi::-webkit-scrollbar-thumb:hover{background:#555}:host .igo-layer-button-group{padding-top:5px}:host igo-panel{height:unset}:host .select-all{display:flex;align-items:center;height:48px;padding:0 16px}::ng-deep .panel-opacity-menu{overflow:visible!important}::ng-deep .panel-opacity-menu #opacity-slider{margin:0 16px}\n"] }]
811
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.LayerService }], propDecorators: { templateLayerToolbar: [{
812
- type: ContentChild,
813
- args: ['igoLayerItemToolbar', /* TODO: add static flag */ {}]
814
- }], layersAreAllVisible: [{
815
- type: Input
816
- }], ogcButton: [{
817
- type: Input
818
- }], timeButton: [{
819
- type: Input
820
- }], map: [{
821
- type: Input
822
- }], layers: [{
823
- type: Input
824
- }], floatLabel: [{
825
- type: Input
826
- }], layerFilterAndSortOptions: [{
827
- type: Input
828
- }], excludeBaseLayers: [{
829
- type: Input
830
- }], toggleLegendOnVisibilityChange: [{
831
- type: Input
832
- }], expandLegendOfVisibleLayers: [{
833
- type: Input
834
- }], updateLegendOnResolutionChange: [{
835
- type: Input
836
- }], queryBadge: [{
837
- type: Input
838
- }], appliedFilterAndSort: [{
839
- type: Output
840
- }] } });
841
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXItbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9sYXllci9sYXllci1saXN0L2xheWVyLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvbGF5ZXIvbGF5ZXItbGlzdC9sYXllci1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQW1CLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEQsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFFdEMsT0FBTyxFQUNMLGVBQWUsRUFDZixLQUFLLEVBQ0wsYUFBYSxFQUViLEtBQUssRUFDTixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLGNBQWMsTUFBTSw0QkFBNEIsQ0FBQztBQUV4RCxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN4QixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUs5QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUV0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDdEIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQUUvRCxzRkFBc0Y7QUE2QnRGLE1BQU0sT0FBTyxrQkFBa0I7SUE0TG5CO0lBQ0E7SUE1TFYsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNqQix3QkFBd0IsR0FBRyxDQUFDLENBQUM7SUFFN0IsT0FBTyxHQUFHLElBQUksZUFBZSxDQUFVLEVBQUUsQ0FBQyxDQUFDO0lBRTNDLE9BQU8sR0FBRyxJQUFJLGFBQWEsQ0FBTyxDQUFDLENBQUMsQ0FBQztJQUVyQyxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFFNUMsU0FBUyxDQUFVO0lBRW5CLGtCQUFrQixHQUFHLElBQUksQ0FBQztJQUNqQyxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQVEsU0FBUyxDQUFDLENBQUM7SUFFckQsYUFBYSxHQUFZLEVBQUUsQ0FBQztJQUNyQixTQUFTLENBQVU7SUFFbEIsUUFBUSxDQUFlO0lBQ3ZCLFFBQVEsQ0FBZTtJQUN4Qix5QkFBeUIsR0FBRyxJQUFJLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUdsRSxvQkFBb0IsQ0FBbUI7SUFFOUIsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0lBRTNCLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFFakIsVUFBVSxHQUFHLElBQUksQ0FBQztJQUUzQixJQUNJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLEtBQWE7UUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUNPLElBQUksQ0FBUztJQUVyQixJQUNJLE1BQU0sQ0FBQyxLQUFjO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFDRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUNPLE9BQU8sQ0FBVTtJQUV6QixJQUFJLFdBQVcsQ0FBQyxLQUFZO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUNPLFlBQVksQ0FBUTtJQUVuQixVQUFVLEdBQW1CLE1BQU0sQ0FBQztJQUVwQyx5QkFBeUIsR0FBNkIsRUFBRSxDQUFDO0lBRXpELGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUUxQiw4QkFBOEIsR0FBRyxLQUFLLENBQUM7SUFFdkMsMkJBQTJCLEdBQUcsS0FBSyxDQUFDO0lBRXBDLDhCQUE4QixHQUFHLEtBQUssQ0FBQztJQUV2QyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRWxCLG9CQUFvQixHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO0lBRTlFLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBQ08sUUFBUSxHQUFHLFNBQVMsQ0FBQztJQUU3QixJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLEtBQWM7UUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUNPLFlBQVksR0FBRyxLQUFLLENBQUM7SUFFN0IsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxLQUFjO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFDTyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBRTdCLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsT0FBZTtRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDekIsT0FBTztRQUNULENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLElBQ0UsQ0FBQyxJQUFJLENBQUMsU0FBUztZQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUztZQUMxQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUN2QyxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsSUFDRSxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTO1lBQzFCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQ3ZDLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN4QixJQUNFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDL0IsQ0FBQyxJQUFJLENBQUMsU0FBUztZQUNmLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxFQUM1QixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxzQkFBc0I7UUFDeEIsSUFDRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQy9CLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFDZixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN6QyxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksRUFDNUIsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQzNDLENBQUM7SUFDRCxJQUFJLFlBQVksQ0FBQyxPQUFlO1FBQzlCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUkscUJBQXFCO1FBQ3ZCLE9BQU8scUJBQXFCLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztJQUM3QyxDQUFDO0lBRU0sYUFBYSxHQUFHLEtBQUssQ0FBQztJQUV0QixjQUFjLENBQVU7SUFDeEIsZUFBZSxHQUFHLElBQUksZUFBZSxDQUFVLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELGdCQUFnQixDQUFlO0lBRXZDLFlBQ1UsS0FBaUIsRUFDakIsWUFBMEI7UUFEMUIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQixpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUNqQyxDQUFDO0lBRUo7OztPQUdHO0lBQ0gsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU87YUFDekIsSUFBSSxDQUNILFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDO2dCQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2FBQzlCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDL0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMxQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUNmLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNoQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO3dCQUNwQyxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQzs0QkFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzlCLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQzt3QkFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQ3hCLENBQUM7b0JBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUN4QixNQUFNLElBQUksQ0FBQyxDQUFDO29CQUNkLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsY0FBYzt3QkFDakIsTUFBTTs0QkFDTixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FDaEIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQ3ZELENBQUMsTUFBTTs0QkFDTixDQUFDLENBQUMsSUFBSTs0QkFDTixDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUNkLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsY0FBYzt3QkFDakIsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTTs0QkFDaEUsQ0FBQyxDQUFDLElBQUk7NEJBQ04sQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDZCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxLQUFZO1FBQ25DLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNsQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDbkQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDekMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztRQUV0RSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUksa0JBQWtCLEVBQUUsQ0FBQztnQkFDdkIsS0FBSyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDbkUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELDBCQUEwQixDQUFDLE1BQWU7UUFDeEMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO1FBRXRFLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDM0IsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFFekMsSUFBSSxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNwQyxJQUFJLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3ZCLEtBQUssR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3BFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFZO1FBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUFlO1FBQy9CLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBS3hDLENBQUM7UUFFRixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBRXpDLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxhQUFhLENBQUMsS0FBc0I7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7SUFDM0IsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNO2FBQ2YsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7YUFDM0IsTUFBTSxDQUNMLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN2RCxDQUFDLEVBQ0QsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FDckMsQ0FBQztJQUNOLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFLO1FBQ3BCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRSxJQUNFLElBQUksQ0FBQyxNQUFNO1lBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQ3pDLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsTUFBTTthQUNmLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2FBQzNCLE1BQU0sQ0FDTCxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNoQixPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdkQsQ0FBQyxFQUNELEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQ3JDLENBQUM7SUFDTixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBSztRQUNwQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEUsSUFDRSxJQUFJLENBQUMsTUFBTTtZQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUN6QyxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsZUFBZSxDQUNiLFdBQWtCLEVBQ2xCLFVBQWlDLEVBQ2pDLE1BQU0sR0FBRyxLQUFLO1FBRWQsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDOUIsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEUsSUFBSSxvQkFBb0IsR0FBRyx1QkFBdUIsQ0FDaEQsSUFBSSxDQUFDLEdBQUcsRUFDUixXQUFXLEVBQ1gsZ0JBQWdCLENBQUMsTUFBTSxDQUN4QixDQUFDO1FBQ0YsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDMUIsb0JBQW9CLEdBQUcsV0FBVyxDQUFDO1FBQ3JDLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDNUMsMkJBQTJCLENBQ3pCLElBQUksQ0FBQyxHQUFHLEVBQ1Isb0JBQW9CLEVBQ3BCLFlBQVksRUFDWixnQkFBZ0IsQ0FBQyxNQUFNLENBQ3hCLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3hCLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxVQUFVLEtBQUsscUJBQXFCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvQyxDQUFDO2FBQU0sSUFBSSxVQUFVLEtBQUsscUJBQXFCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYyxDQUFDLE1BQWU7UUFDNUIsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0MsSUFBSSxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzNCLElBQUksSUFBSSxDQUFDLENBQUM7WUFDWixDQUFDO1lBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEQsSUFDRSxhQUFhO2dCQUNiLGFBQWEsQ0FBQyxTQUFTLEtBQUssSUFBSTtnQkFDaEMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xELFlBQVksQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUMvQixDQUFDO2dCQUNELFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDbEIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUNFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3BFLElBQUksS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFDbEMsQ0FBQztZQUNELFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDbkIsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWEsQ0FBQyxLQUFhO1FBQ3pCLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWUsRUFBRSxNQUFNLEdBQUcsSUFBSTtRQUN4QyxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDekIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FDaEUsc0JBQXNCLENBQ3ZCLENBQUM7Z0JBQ0YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQ2pFLHdCQUF3QixDQUN6QixDQUFDO2dCQUNGLElBQUksY0FBYyxDQUFDO2dCQUNuQixJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDdEIsY0FBYyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakMsQ0FBQztnQkFDRCxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDdkIsY0FBYyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsQ0FBQztnQkFDRCxJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUNuQixjQUFjLENBQUMsY0FBYyxFQUFFO3dCQUM3QixVQUFVLEVBQUUsV0FBVzt3QkFDdkIsUUFBUSxFQUFFLFFBQVE7d0JBQ2xCLEtBQUssRUFBRSxLQUFLO3dCQUNaLE1BQU0sRUFBRSxTQUFTO3FCQUNsQixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNWLENBQUM7SUFDSCxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxlQUFlLENBQUMsTUFBZTtRQUM3QixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQyxJQUFJLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUNaLENBQUM7WUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1QyxJQUNFLFNBQVM7Z0JBQ1QsU0FBUyxDQUFDLFNBQVMsS0FBSyxJQUFJO2dCQUM1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUM5QyxDQUFDO2dCQUNELFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDbEIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUNFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3BFLElBQUksS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFDbEMsQ0FBQztZQUNELFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDbkIsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWMsQ0FBQyxLQUFhO1FBQzFCLElBQ0UsS0FBSztZQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQzlELENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN6QyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBZSxFQUFFLE1BQU0sR0FBRyxJQUFJO1FBQ3hDLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN6QixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsRSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUNoRSxzQkFBc0IsQ0FDdkIsQ0FBQztnQkFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FDakUsd0JBQXdCLENBQ3pCLENBQUM7Z0JBQ0YsSUFBSSxjQUFjLENBQUM7Z0JBQ25CLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUN0QixjQUFjLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELENBQUM7Z0JBQ0QsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3ZCLGNBQWMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLENBQUM7Z0JBQ0QsSUFBSSxjQUFjLEVBQUUsQ0FBQztvQkFDbkIsY0FBYyxDQUFDLGNBQWMsRUFBRTt3QkFDN0IsVUFBVSxFQUFFLFdBQVc7d0JBQ3ZCLFFBQVEsRUFBRSxRQUFRO3dCQUNsQixLQUFLLEVBQUUsS0FBSzt3QkFDWixNQUFNLEVBQUUsU0FBUztxQkFDbEIsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUNPLElBQUk7UUFDVixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxhQUFhLENBQUMsTUFBZTtRQUNuQyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEQsQ0FBQzthQUFNLENBQUM7WUFDTixTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsZUFBZSxDQUFDLElBQUk7UUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVELDRCQUE0QixDQUFDLGFBQXVDO1FBQ2xFLElBQUksQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7UUFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDO0lBQzNDLENBQUM7SUFFTyxZQUFZLENBQUMsTUFBZTtRQUNsQyxJQUNFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLEtBQUsscUJBQXFCLENBQUMsS0FBSyxFQUMxRSxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBWSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFNUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVksRUFBRSxFQUFFO1lBQzlCLE1BQU0sWUFBWSxHQUFJLEtBQUssQ0FBQyxPQUFnQyxJQUFJLEVBQUUsQ0FBQztZQUNuRSxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUN6RCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsUUFBUSxJQUFLLEVBQXNCLENBQUM7WUFDbEUsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7WUFDNUMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQVUsRUFBRSxFQUFFO2dCQUNoRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdELENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU87cUJBQzlCLFNBQVMsQ0FBQyxLQUFLLENBQUM7cUJBQ2hCLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbkMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUs7cUJBQzNCLFNBQVMsQ0FBQyxLQUFLLENBQUM7cUJBQ2hCLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbkMsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDcEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNwRCxNQUFNLGFBQWEsR0FDakIsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDekQsU0FBUyxDQUFDO2dCQUNaLElBQ0UsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztvQkFDOUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUM5RCxDQUFDLGFBQWEsRUFDZCxDQUFDO29CQUNELE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM3QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNmLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNoQyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNmLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNsQixDQUFDLEtBQVksRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3hELENBQUM7SUFDSixDQUFDO0lBRU8sa0JBQWtCLENBQUMsTUFBZTtRQUN4QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8saUJBQWlCLENBQUMsTUFBZTtRQUN2QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ1osQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDO1lBQ0QsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxTQUFTLENBQUMsR0FBVztRQUMzQixPQUFPLEdBQUc7YUFDUCxTQUFTLENBQUMsS0FBSyxDQUFDO2FBQ2hCLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7YUFDL0IsV0FBVyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixRQUFRLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuRCxLQUFLLHFCQUFxQixDQUFDLE1BQU07Z0JBQy9CLE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxxQkFBcUIsQ0FBQyxLQUFLO2dCQUM5QixPQUFPLEtBQUssQ0FBQztZQUNmO2dCQUNFLElBQ0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLHdCQUF3QjtvQkFDbkQsSUFBSSxDQUFDLE9BQU87b0JBQ1osSUFBSSxDQUFDLFdBQVcsRUFDaEIsQ0FBQztvQkFDRCxPQUFPLElBQUksQ0FBQztnQkFDZCxDQUFDO2dCQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQUs7UUFDbkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN4QixDQUFDO1FBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQzdCLENBQUM7UUFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFnQjtRQUMzQixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQzNCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFLENBQUM7b0JBQ3RDLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFnQjtRQUMvQixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hDLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQzNCLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBWTtRQUMzQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQztJQUMzQyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsTUFBZTtRQUNsQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUFJLHlCQUF5QjtRQUMzQixJQUFJLG9CQUFvQixHQUN0QiwwQkFBMEIsQ0FBQyxJQUFJLENBQUM7UUFDbEMsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztRQUV0QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BDLG9CQUFvQixHQUFHLDBCQUEwQixDQUFDLElBQUksQ0FBQztRQUN6RCxDQUFDO2FBQU0sQ0FBQztZQUNOLG9CQUFvQixHQUFHLDBCQUEwQixDQUFDLEtBQUssQ0FBQztZQUN4RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1lBRWhDLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQzVCLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ2xCLENBQUM7Z0JBQ0QsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLEtBQUssRUFBRSxDQUFDO29CQUM3QixTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksUUFBUSxLQUFLLElBQUksSUFBSSxTQUFTLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQzdDLG9CQUFvQixHQUFHLDBCQUEwQixDQUFDLFdBQVcsQ0FBQztZQUNoRSxDQUFDO1lBQ0QsSUFBSSxRQUFRLEtBQUssS0FBSyxJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDN0Msb0JBQW9CLEdBQUcsMEJBQTBCLENBQUMsVUFBVSxDQUFDO2dCQUM3RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxvQkFBb0IsQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQXVDO1FBQ2pELEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3hDLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN6QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FDekMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQ3ZDLENBQUM7WUFDRixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRSxJQUFJLGFBQWEsR0FBRyxRQUFRLEVBQUUsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFDMUQsQ0FBQyxFQUNELEtBQUssQ0FBQyxLQUFLLENBQ1osQ0FBQztvQkFFRixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO3dCQUMzQixJQUNFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTs0QkFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQ2hCLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsZUFBZSxDQUN2RCxDQUFDLE1BQU0sRUFDUixDQUFDOzRCQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO3dCQUM3QixDQUFDOzZCQUFNLENBQUM7NEJBQ04sSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7d0JBQzlCLENBQUM7b0JBQ0gsQ0FBQzt5QkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7d0JBQ25DLElBQ0UsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNOzRCQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sRUFDdkQsQ0FBQzs0QkFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQzt3QkFDN0IsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO3dCQUM5QixDQUFDO29CQUNILENBQUM7b0JBQ0QsT0FBTztnQkFDVCxDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUN4QyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FDdkMsQ0FBQztZQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixJQUNFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTtnQkFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQ2hCLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsZUFBZSxDQUN2RCxDQUFDLE1BQU0sRUFDUixDQUFDO2dCQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQzdCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztZQUM5QixDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNuQyxJQUNFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTtnQkFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLEVBQ3ZELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDN0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBQzlCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7UUFDN0IsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2hDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ25CLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN2QyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBQ0QsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6QixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDaEMsSUFDRSxJQUFJLENBQUMsaUJBQWlCO29CQUN0QixLQUFLLENBQUMsU0FBUyxLQUFLLElBQUk7b0JBQ3hCLEtBQUssQ0FBQyxlQUFlLEVBQ3JCLENBQUM7b0JBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO29CQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDakMsQ0FBQztxQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDNUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO29CQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDakMsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNoQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDOUIsQ0FBQztZQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsVUFBVSxFQUFFLElBQUk7UUFDakMsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUN4QyxNQUFNLGFBQWEsR0FBRyxVQUFVLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztRQUUzRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQy9CLE1BQU0sVUFBVSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQy9DLE9BQU8sVUFBVSxJQUFJLGFBQWEsSUFBSSxPQUFPLElBQUksVUFBVSxDQUFDO0lBQzlELENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxVQUFtQjtRQUMxQyxLQUFLLE1BQU0sS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQy9CLElBQUksS0FBSyxDQUFDLGdCQUFnQixLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxlQUFnQztRQUNyRCxJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzdELENBQUM7d0dBejVCVSxrQkFBa0I7NEZBQWxCLGtCQUFrQiwwdEJDM0YvQixpMFZBaVdBLGl6Q0QzUkksSUFBSSw2RkFDSixzQkFBc0Isa01BQ3RCLGlCQUFpQixvWUFDakIsZ0JBQWdCLG1JQUNoQixhQUFhLDBGQUNiLEtBQUssbUhBQ0wsa0JBQWtCLDJXQUNsQixpQkFBaUIsNlJBQ2pCLGNBQWMsdUdBQ2QsZUFBZSwySUFDZixnQkFBZ0IsNFRBQ2hCLGFBQWEsbUxBQ2IsY0FBYywyUEFDZCxhQUFhLHltQkFDYixlQUFlLG1hQUNmLGdCQUFnQixtSkFDaEIsV0FBVyw0VkFDWCxTQUFTLDZDQUNULGlCQUFpQjs7NEZBR1Isa0JBQWtCO2tCQTVCOUIsU0FBUzsrQkFDRSxnQkFBZ0IsbUJBR1QsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsSUFBSTt3QkFDSixzQkFBc0I7d0JBQ3RCLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLEtBQUs7d0JBQ0wsa0JBQWtCO3dCQUNsQixpQkFBaUI7d0JBQ2pCLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixXQUFXO3dCQUNYLFNBQVM7d0JBQ1QsaUJBQWlCO3FCQUNsQjswR0F5QkQsb0JBQW9CO3NCQURuQixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLDJCQUEyQixDQUFDLEVBQUU7Z0JBRzFELG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0YsR0FBRztzQkFETixLQUFLO2dCQVVGLE1BQU07c0JBRFQsS0FBSztnQkFtQkcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBRUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVHLDhCQUE4QjtzQkFBdEMsS0FBSztnQkFFRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBRUcsOEJBQThCO3NCQUF0QyxLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksb0JBQW9CO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0ZvciwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJhZGdlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYmFkZ2UnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xuaW1wb3J0IHsgRmxvYXRMYWJlbFR5cGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IE1hdFNsaWRlckNoYW5nZSwgTWF0U2xpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGVyJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuaW1wb3J0IHsgTGlzdENvbXBvbmVudCwgTGlzdEl0ZW1EaXJlY3RpdmUgfSBmcm9tICdAaWdvMi9jb21tb24vbGlzdCc7XG5pbXBvcnQgeyBQYW5lbENvbXBvbmVudCB9IGZyb20gJ0BpZ28yL2NvbW1vbi9wYW5lbCc7XG5pbXBvcnQgeyBJZ29MYW5ndWFnZU1vZHVsZSB9IGZyb20gJ0BpZ28yL2NvcmUvbGFuZ3VhZ2UnO1xuXG5pbXBvcnQgKiBhcyBvbGV4dGVudCBmcm9tICdvbC9leHRlbnQnO1xuXG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIEVNUFRZLFxuICBSZXBsYXlTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIHRpbWVyXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgc2Nyb2xsSW50b1ZpZXcgZnJvbSAnc2Nyb2xsLWludG8tdmlldy1pZi1uZWVkZWQnO1xuXG5pbXBvcnQge1xuICBnZXRBbGxDaGlsZExheWVyc0J5UHJvcGVydHksXG4gIGdldFJvb3RQYXJlbnRCeVByb3BlcnR5XG59IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbGlua2VkTGF5ZXJzLnV0aWxzJztcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwJztcbmltcG9ydCB7XG4gIE1ldGFkYXRhTGF5ZXJPcHRpb25zLFxuICBNZXRhZGF0YU9wdGlvbnNcbn0gZnJvbSAnLi4vLi4vbWV0YWRhdGEvc2hhcmVkL21ldGFkYXRhLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMYXllckl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9sYXllci1pdGVtL2xheWVyLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IExheWVyTGlzdFRvb2xDb21wb25lbnQgfSBmcm9tICcuLi9sYXllci1saXN0LXRvb2wvbGF5ZXItbGlzdC10b29sLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMYXllckxpc3RDb250cm9sc09wdGlvbnMgfSBmcm9tICcuLi9sYXllci1saXN0LXRvb2wvbGF5ZXItbGlzdC10b29sLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMYXllclNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvbGF5ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBbnlMYXllck9wdGlvbnMgfSBmcm9tICcuLi9zaGFyZWQvbGF5ZXJzJztcbmltcG9ydCB7IExheWVyIH0gZnJvbSAnLi4vc2hhcmVkL2xheWVycy9sYXllcic7XG5pbXBvcnQgeyBMaW5rZWRQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vc2hhcmVkL2xheWVycy9sYXllci5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgTGF5ZXJMaXN0Q29udHJvbHNFbnVtLFxuICBMYXllckxpc3REaXNwbGFjZW1lbnRcbn0gZnJvbSAnLi9sYXllci1saXN0LmVudW0nO1xuaW1wb3J0IHsgTGF5ZXJMaXN0U2VsZWN0VmlzaWJsZUVudW0gfSBmcm9tICcuL2xheWVyLWxpc3QuZW51bSc7XG5cbi8vIFRPRE86IFRoaXMgY2xhc3MgY291bGQgdXNlIGEgY2xlYW4gdXAuIEFsc28sIHNvbWUgbWV0aG9kcyBjb3VsZCBiZSBtb3ZlZCBlYWxzZXdoZXJlXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tbGF5ZXItbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9sYXllci1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGF5ZXItbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5nSWYsXG4gICAgTGF5ZXJMaXN0VG9vbENvbXBvbmVudCxcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxuICAgIExpc3RDb21wb25lbnQsXG4gICAgTmdGb3IsXG4gICAgTGF5ZXJJdGVtQ29tcG9uZW50LFxuICAgIExpc3RJdGVtRGlyZWN0aXZlLFxuICAgIFBhbmVsQ29tcG9uZW50LFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0QmFkZ2VNb2R1bGUsXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgICBNYXRTbGlkZXJNb2R1bGUsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBBc3luY1BpcGUsXG4gICAgSWdvTGFuZ3VhZ2VNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMYXllckxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIG9yZGVyYWJsZSA9IHRydWU7XG4gIHRocmVzaG9sZFRvRmlsdGVyQW5kU29ydCA9IDU7XG5cbiAgbGF5ZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TGF5ZXJbXT4oW10pO1xuXG4gIGNoYW5nZSQgPSBuZXcgUmVwbGF5U3ViamVjdDx2b2lkPigxKTtcblxuICBzaG93VG9vbGJhciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgbGF5ZXJUb29sOiBib29sZWFuO1xuXG4gIHB1YmxpYyBoaWRlU2VsZWN0ZWRMYXllcnMgPSB0cnVlO1xuICBhY3RpdmVMYXllciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PExheWVyPih1bmRlZmluZWQpO1xuXG4gIGxheWVyc0NoZWNrZWQ6IExheWVyW10gPSBbXTtcbiAgcHVibGljIHNlbGVjdGlvbjogYm9vbGVhbjtcblxuICBwcml2YXRlIGNoYW5nZSQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgbGF5ZXJzJCQ6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGxheWVySXRlbUNoYW5nZURldGVjdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgQENvbnRlbnRDaGlsZCgnaWdvTGF5ZXJJdGVtVG9vbGJhcicsIC8qIFRPRE86IGFkZCBzdGF0aWMgZmxhZyAqLyB7fSlcbiAgdGVtcGxhdGVMYXllclRvb2xiYXI6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQElucHV0KCkgbGF5ZXJzQXJlQWxsVmlzaWJsZSA9IHRydWU7XG5cbiAgQElucHV0KCkgb2djQnV0dG9uID0gdHJ1ZTtcblxuICBASW5wdXQoKSB0aW1lQnV0dG9uID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBnZXQgbWFwKCk6IElnb01hcCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcDtcbiAgfVxuICBzZXQgbWFwKHZhbHVlOiBJZ29NYXApIHtcbiAgICB0aGlzLl9tYXAgPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIF9tYXA6IElnb01hcDtcblxuICBASW5wdXQoKVxuICBzZXQgbGF5ZXJzKHZhbHVlOiBMYXllcltdKSB7XG4gICAgdGhpcy5fbGF5ZXJzID0gdGhpcy5yZW1vdmVQcm9ibGVtTGF5ZXJJbkxpc3QodmFsdWUpO1xuICAgIHRoaXMubmV4dCgpO1xuICB9XG4gIGdldCBsYXllcnMoKTogTGF5ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2xheWVycztcbiAgfVxuICBwcml2YXRlIF9sYXllcnM6IExheWVyW107XG5cbiAgc2V0IGFjdGl2ZUxheWVyKHZhbHVlOiBMYXllcikge1xuICAgIHRoaXMuX2FjdGl2ZUxheWVyID0gdmFsdWU7XG4gICAgdGhpcy5hY3RpdmVMYXllciQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgZ2V0IGFjdGl2ZUxheWVyKCk6IExheWVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlTGF5ZXI7XG4gIH1cbiAgcHJpdmF0ZSBfYWN0aXZlTGF5ZXI6IExheWVyO1xuXG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IEZsb2F0TGFiZWxUeXBlID0gJ2F1dG8nO1xuXG4gIEBJbnB1dCgpIGxheWVyRmlsdGVyQW5kU29ydE9wdGlvbnM6IExheWVyTGlzdENvbnRyb2xzT3B0aW9ucyA9IHt9O1xuXG4gIEBJbnB1dCgpIGV4Y2x1ZGVCYXNlTGF5ZXJzID0gZmFsc2U7XG5cbiAgQElucHV0KCkgdG9nZ2xlTGVnZW5kT25WaXNpYmlsaXR5Q2hhbmdlID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZXhwYW5kTGVnZW5kT2ZWaXNpYmxlTGF5ZXJzID0gZmFsc2U7XG5cbiAgQElucHV0KCkgdXBkYXRlTGVnZW5kT25SZXNvbHV0aW9uQ2hhbmdlID0gZmFsc2U7XG5cbiAgQElucHV0KCkgcXVlcnlCYWRnZSA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBhcHBsaWVkRmlsdGVyQW5kU29ydCA9IG5ldyBFdmVudEVtaXR0ZXI8TGF5ZXJMaXN0Q29udHJvbHNPcHRpb25zPigpO1xuXG4gIGdldCBrZXl3b3JkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2tleXdvcmQ7XG4gIH1cbiAgc2V0IGtleXdvcmQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2tleXdvcmQgPSB2YWx1ZTtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuICBwcml2YXRlIF9rZXl3b3JkID0gdW5kZWZpbmVkO1xuXG4gIGdldCBvbmx5VmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fb25seVZpc2libGU7XG4gIH1cbiAgc2V0IG9ubHlWaXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fb25seVZpc2libGUgPSB2YWx1ZTtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuICBwcml2YXRlIF9vbmx5VmlzaWJsZSA9IGZhbHNlO1xuXG4gIGdldCBzb3J0QWxwaGEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRlZEFscGhhO1xuICB9XG4gIHNldCBzb3J0QWxwaGEodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zb3J0ZWRBbHBoYSA9IHZhbHVlO1xuICAgIHRoaXMubmV4dCgpO1xuICB9XG4gIHByaXZhdGUgX3NvcnRlZEFscGhhID0gZmFsc2U7XG5cbiAgZ2V0IG9wYWNpdHkoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQodGhpcy5hY3RpdmVMYXllciQuZ2V0VmFsdWUoKS5vcGFjaXR5ICogMTAwKTtcbiAgfVxuICBzZXQgb3BhY2l0eShvcGFjaXR5OiBudW1iZXIpIHtcbiAgICB0aGlzLmFjdGl2ZUxheWVyJC5nZXRWYWx1ZSgpLm9wYWNpdHkgPSBvcGFjaXR5IC8gMTAwO1xuICB9XG5cbiAgZ2V0IGJhZGdlT3BhY2l0eSgpIHtcbiAgICBpZiAodGhpcy5vcGFjaXR5ID09PSAxMDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3BhY2l0eTtcbiAgfVxuXG4gIGdldCByYWlzZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgICF0aGlzLm9yZGVyYWJsZSB8fFxuICAgICAgdGhpcy5hY3RpdmVMYXllci5iYXNlTGF5ZXIgfHxcbiAgICAgIHRoaXMuZ2V0VXBwZXJMYXllcigpLmlkID09PSB0aGlzLmFjdGl2ZUxheWVyLmlkIHx8XG4gICAgICB0aGlzLmlzVXBwZXJCYXNlbGF5ZXIodGhpcy5hY3RpdmVMYXllcilcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgbG93ZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5vcmRlcmFibGUgfHxcbiAgICAgIHRoaXMuYWN0aXZlTGF5ZXIuYmFzZUxheWVyIHx8XG4gICAgICB0aGlzLmdldExvd2VyTGF5ZXIoKS5pZCA9PT0gdGhpcy5hY3RpdmVMYXllci5pZCB8fFxuICAgICAgdGhpcy5pc0xvd2VyQmFzZWxheWVyKHRoaXMuYWN0aXZlTGF5ZXIpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IHJhaXNlRGlzYWJsZWRTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgIXRoaXMub3JkZXJhYmxlIHx8XG4gICAgICAhdGhpcy5yYWlzYWJsZUxheWVycyh0aGlzLmxheWVyc0NoZWNrZWQpIHx8XG4gICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID09PSB0cnVlXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IGxvd2VyRGlzYWJsZWRTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgIXRoaXMub3JkZXJhYmxlIHx8XG4gICAgICAhdGhpcy5sb3dlcmFibGVMYXllcnModGhpcy5sYXllcnNDaGVja2VkKSB8fFxuICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9PT0gdHJ1ZVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldCBjaGVja09wYWNpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMubGF5ZXJzQ2hlY2tlZE9wYWNpdHkoKSAqIDEwMDtcbiAgfVxuICBzZXQgY2hlY2tPcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5sYXllcnNDaGVja2VkKSB7XG4gICAgICBsYXllci5vcGFjaXR5ID0gb3BhY2l0eSAvIDEwMDtcbiAgICB9XG4gIH1cblxuICBnZXQgbGF5ZXJMaXN0RGlzcGxhY2VtZW50KCk6IHR5cGVvZiBMYXllckxpc3REaXNwbGFjZW1lbnQge1xuICAgIHJldHVybiBMYXllckxpc3REaXNwbGFjZW1lbnQ7XG4gIH1cblxuICBnZXQgdW5hdmFpbGFibGVMYXllcnMoKTogQW55TGF5ZXJPcHRpb25zW10ge1xuICAgIHJldHVybiB0aGlzLmxheWVyU2VydmljZS51bmF2YWlsYWJsZUxheWVycztcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVPcGFjaXR5ID0gZmFsc2U7XG5cbiAgcHVibGljIHNlbGVjdEFsbENoZWNrOiBib29sZWFuO1xuICBwdWJsaWMgc2VsZWN0QWxsQ2hlY2skID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHNlbGVjdEFsbENoZWNrJCQ6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIHNlYXJjaCB0ZXJtIHN0cmVhbSBhbmQgdHJpZ2dlciByZXNlYXJjaGVzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2UkJCA9IHRoaXMuY2hhbmdlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sYXllcnMubGVuZ3RoID09PSAwID8gRU1QVFkgOiB0aW1lcig1MCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93VG9vbGJhciQubmV4dCh0aGlzLmNvbXB1dGVTaG93VG9vbGJhcigpKTtcbiAgICAgICAgdGhpcy5sYXllcnMkLm5leHQodGhpcy5jb21wdXRlTGF5ZXJzKHRoaXMubGF5ZXJzLnNsaWNlKDApKSk7XG4gICAgICAgIHRoaXMuYXBwbGllZEZpbHRlckFuZFNvcnQuZW1pdCh7XG4gICAgICAgICAga2V5d29yZDogdGhpcy5rZXl3b3JkLFxuICAgICAgICAgIHNvcnRBbHBoYTogdGhpcy5zb3J0QWxwaGEsXG4gICAgICAgICAgb25seVZpc2libGU6IHRoaXMub25seVZpc2libGVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2skJCA9IHRoaXMuc2VsZWN0QWxsQ2hlY2skLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2sgPSB2YWx1ZTtcbiAgICB9KTtcblxuICAgIHRoaXMubGF5ZXJzJCQgPSB0aGlzLmxheWVycyQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmxheWVycykge1xuICAgICAgICBsZXQgY2hlY2tzID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVycykge1xuICAgICAgICAgIGxheWVyLnN0YXR1cyQuc3Vic2NyaWJlKCh2YWxTdGF0dXMpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWxTdGF0dXMgPT09IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5tYXAucmVtb3ZlTGF5ZXIobGF5ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChsYXllci5vcHRpb25zLmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVMYXllciA9IGxheWVyO1xuICAgICAgICAgICAgdGhpcy5sYXllclRvb2wgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGF5ZXIub3B0aW9ucy5jaGVjaykge1xuICAgICAgICAgICAgY2hlY2tzICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmV4Y2x1ZGVCYXNlTGF5ZXJzKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9XG4gICAgICAgICAgICBjaGVja3MgPT09XG4gICAgICAgICAgICB0aGlzLmxheWVycy5maWx0ZXIoXG4gICAgICAgICAgICAgIChsYXkpID0+IGxheS5iYXNlTGF5ZXIgIT09IHRydWUgJiYgbGF5LnNob3dJbkxheWVyTGlzdFxuICAgICAgICAgICAgKS5sZW5ndGhcbiAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9XG4gICAgICAgICAgICBjaGVja3MgPT09IHRoaXMubGF5ZXJzLmZpbHRlcigobGF5KSA9PiBsYXkuc2hvd0luTGF5ZXJMaXN0KS5sZW5ndGhcbiAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2hhbmdlJCQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnNlbGVjdEFsbENoZWNrJCQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmxheWVycyQkLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBhY3RpdmVMYXllckV4dGVudElzVmFsaWQobGF5ZXI6IExheWVyKTogYm9vbGVhbiB7XG4gICAgbGV0IHZhbGlkID0gZmFsc2U7XG4gICAgaWYgKGxheWVyLm9wdGlvbnMuc2hvd0J1dHRvblpvb21Ub0V4dGVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbGF5ZXJFeHRlbnQgPSBsYXllci5vcHRpb25zLmV4dGVudDtcbiAgICBjb25zdCBtYXhMYXllclpvb21FeHRlbnQgPSB0aGlzLm1hcC52aWV3Q29udHJvbGxlci5tYXhMYXllclpvb21FeHRlbnQ7XG5cbiAgICBpZiAobGF5ZXJFeHRlbnQpIHtcbiAgICAgIGlmIChtYXhMYXllclpvb21FeHRlbnQpIHtcbiAgICAgICAgdmFsaWQgPSBvbGV4dGVudC5jb250YWluc0V4dGVudChtYXhMYXllclpvb21FeHRlbnQsIGxheWVyRXh0ZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkO1xuICB9XG5cbiAgYWN0aXZlTGF5ZXJzRXh0ZW50QXJlVmFsaWQobGF5ZXJzOiBMYXllcltdKTogYm9vbGVhbiB7XG4gICAgbGV0IHZhbGlkID0gZmFsc2U7XG4gICAgY29uc3QgbGF5ZXJzRXh0ZW50ID0gb2xleHRlbnQuY3JlYXRlRW1wdHkoKTtcbiAgICBjb25zdCBtYXhMYXllclpvb21FeHRlbnQgPSB0aGlzLm1hcC52aWV3Q29udHJvbGxlci5tYXhMYXllclpvb21FeHRlbnQ7XG5cbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgY29uc3QgbGF5ZXJFeHRlbnQgPSBsYXllci5vcHRpb25zLmV4dGVudDtcblxuICAgICAgaWYgKGxheWVyRXh0ZW50ICYmICFsYXllckV4dGVudC5pbmNsdWRlcyhJbmZpbml0eSkpIHtcbiAgICAgICAgb2xleHRlbnQuZXh0ZW5kKGxheWVyc0V4dGVudCwgbGF5ZXJFeHRlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghb2xleHRlbnQuaXNFbXB0eShsYXllcnNFeHRlbnQpKSB7XG4gICAgICBpZiAobWF4TGF5ZXJab29tRXh0ZW50KSB7XG4gICAgICAgIHZhbGlkID0gb2xleHRlbnQuY29udGFpbnNFeHRlbnQobWF4TGF5ZXJab29tRXh0ZW50LCBsYXllcnNFeHRlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsaWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsaWQ7XG4gIH1cblxuICB6b29tTGF5ZXJFeHRlbnRzKGxheWVyOiBMYXllcikge1xuICAgIHRoaXMubWFwLnZpZXdDb250cm9sbGVyLnpvb21Ub0V4dGVudChsYXllci5vcHRpb25zLmV4dGVudCk7XG4gIH1cblxuICB6b29tTGF5ZXJzRXh0ZW50cyhsYXllcnM6IExheWVyW10pIHtcbiAgICBjb25zdCBsYXllcnNFeHRlbnQgPSBvbGV4dGVudC5jcmVhdGVFbXB0eSgpIGFzIFtcbiAgICAgIG51bWJlcixcbiAgICAgIG51bWJlcixcbiAgICAgIG51bWJlcixcbiAgICAgIG51bWJlclxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgY29uc3QgbGF5ZXJFeHRlbnQgPSBsYXllci5vcHRpb25zLmV4dGVudDtcblxuICAgICAgaWYgKGxheWVyRXh0ZW50KSB7XG4gICAgICAgIG9sZXh0ZW50LmV4dGVuZChsYXllcnNFeHRlbnQsIGxheWVyRXh0ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5tYXAudmlld0NvbnRyb2xsZXIuem9vbVRvRXh0ZW50KGxheWVyc0V4dGVudCk7XG4gIH1cblxuICBjaGFuZ2VPcGFjaXR5KGV2ZW50OiBNYXRTbGlkZXJDaGFuZ2UpIHtcbiAgICB0aGlzLm9wYWNpdHkgPSBldmVudC52YWx1ZTtcbiAgfVxuXG4gIGNsZWFyS2V5d29yZCgpIHtcbiAgICB0aGlzLmtleXdvcmQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRMb3dlckxheWVyKCkge1xuICAgIHJldHVybiB0aGlzLmxheWVyc1xuICAgICAgLmZpbHRlcigobCkgPT4gIWwuYmFzZUxheWVyKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKHByZXYsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4gcHJldi56SW5kZXggPCBjdXJyZW50LnpJbmRleCA/IHByZXYgOiBjdXJyZW50O1xuICAgICAgICB9LFxuICAgICAgICB7IHpJbmRleDogdW5kZWZpbmVkLCBpZDogdW5kZWZpbmVkIH1cbiAgICAgICk7XG4gIH1cblxuICBpc0xvd2VyQmFzZWxheWVyKGxheWVyKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmxheWVycy5maW5kSW5kZXgoKGxheSkgPT4gbGF5ZXIuaWQgPT09IGxheS5pZCk7XG4gICAgaWYgKFxuICAgICAgdGhpcy5sYXllcnMgJiZcbiAgICAgIHRoaXMubGF5ZXJzW2luZGV4ICsgMV0gJiZcbiAgICAgIHRoaXMubGF5ZXJzW2luZGV4ICsgMV0uYmFzZUxheWVyID09PSB0cnVlXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0VXBwZXJMYXllcigpIHtcbiAgICByZXR1cm4gdGhpcy5sYXllcnNcbiAgICAgIC5maWx0ZXIoKGwpID0+ICFsLmJhc2VMYXllcilcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChwcmV2LCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHByZXYuekluZGV4ID4gY3VycmVudC56SW5kZXggPyBwcmV2IDogY3VycmVudDtcbiAgICAgICAgfSxcbiAgICAgICAgeyB6SW5kZXg6IHVuZGVmaW5lZCwgaWQ6IHVuZGVmaW5lZCB9XG4gICAgICApO1xuICB9XG5cbiAgaXNVcHBlckJhc2VsYXllcihsYXllcikge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KChsYXkpID0+IGxheWVyLmlkID09PSBsYXkuaWQpO1xuICAgIGlmIChcbiAgICAgIHRoaXMubGF5ZXJzICYmXG4gICAgICB0aGlzLmxheWVyc1tpbmRleCAtIDFdICYmXG4gICAgICB0aGlzLmxheWVyc1tpbmRleCAtIDFdLmJhc2VMYXllciA9PT0gdHJ1ZVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG1vdmVBY3RpdmVMYXllcihcbiAgICBhY3RpdmVMYXllcjogTGF5ZXIsXG4gICAgYWN0aW9udHlwZTogTGF5ZXJMaXN0RGlzcGxhY2VtZW50LFxuICAgIGZyb21VaSA9IGZhbHNlXG4gICkge1xuICAgIGNvbnN0IHNvcnRlZExheWVyc1RvTW92ZSA9IFtdO1xuICAgIGdldFJvb3RQYXJlbnRCeVByb3BlcnR5KHRoaXMubWFwLCBhY3RpdmVMYXllciwgTGlua2VkUHJvcGVydGllcy5aSU5ERVgpO1xuICAgIGxldCByb290UGFyZW50QnlQcm9wZXJ0eSA9IGdldFJvb3RQYXJlbnRCeVByb3BlcnR5KFxuICAgICAgdGhpcy5tYXAsXG4gICAgICBhY3RpdmVMYXllcixcbiAgICAgIExpbmtlZFByb3BlcnRpZXMuWklOREVYXG4gICAgKTtcbiAgICBpZiAoIXJvb3RQYXJlbnRCeVByb3BlcnR5KSB7XG4gICAgICByb290UGFyZW50QnlQcm9wZXJ0eSA9IGFjdGl2ZUxheWVyO1xuICAgIH1cbiAgICBjb25zdCBsYXllcnNUb01vdmUgPSBbcm9vdFBhcmVudEJ5UHJvcGVydHldO1xuICAgIGdldEFsbENoaWxkTGF5ZXJzQnlQcm9wZXJ0eShcbiAgICAgIHRoaXMubWFwLFxuICAgICAgcm9vdFBhcmVudEJ5UHJvcGVydHksXG4gICAgICBsYXllcnNUb01vdmUsXG4gICAgICBMaW5rZWRQcm9wZXJ0aWVzLlpJTkRFWFxuICAgICk7XG5cbiAgICB0aGlzLmxheWVycy5tYXAoKGxheWVyKSA9PiB7XG4gICAgICBpZiAobGF5ZXJzVG9Nb3ZlLmluZGV4T2YobGF5ZXIpICE9PSAtMSkge1xuICAgICAgICBzb3J0ZWRMYXllcnNUb01vdmUucHVzaChsYXllcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoYWN0aW9udHlwZSA9PT0gTGF5ZXJMaXN0RGlzcGxhY2VtZW50LlJhaXNlKSB7XG4gICAgICB0aGlzLnJhaXNlTGF5ZXJzKHNvcnRlZExheWVyc1RvTW92ZSwgZnJvbVVpKTtcbiAgICB9IGVsc2UgaWYgKGFjdGlvbnR5cGUgPT09IExheWVyTGlzdERpc3BsYWNlbWVudC5Mb3dlcikge1xuICAgICAgdGhpcy5sb3dlckxheWVycyhzb3J0ZWRMYXllcnNUb01vdmUsIGZyb21VaSk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogRm9yIHNlbGVjdGlvbiBtb2RlIGRpc2FibGVkIGF0dHJpYnV0ZVxuICAgKi9cbiAgcmFpc2FibGVMYXllcnMobGF5ZXJzOiBMYXllcltdKSB7XG4gICAgbGV0IHJlc3BvbnNlID0gZmFsc2U7XG4gICAgbGV0IGJhc2UgPSAwO1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICBjb25zdCBtYXBJbmRleCA9IHRoaXMubGF5ZXJzLmZpbmRJbmRleCgobGF5KSA9PiBsYXllci5pZCA9PT0gbGF5LmlkKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRMYXllciA9IHRoaXMubGF5ZXJzW21hcEluZGV4XTtcbiAgICAgIGlmIChjdXJyZW50TGF5ZXIuYmFzZUxheWVyKSB7XG4gICAgICAgIGJhc2UgKz0gMTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJldmlvdXNMYXllciA9IHRoaXMubGF5ZXJzW21hcEluZGV4IC0gMV07XG4gICAgICBpZiAoXG4gICAgICAgIHByZXZpb3VzTGF5ZXIgJiZcbiAgICAgICAgcHJldmlvdXNMYXllci5iYXNlTGF5ZXIgIT09IHRydWUgJiZcbiAgICAgICAgIWxheWVycy5maW5kKChsYXkpID0+IHByZXZpb3VzTGF5ZXIuaWQgPT09IGxheS5pZCkgJiZcbiAgICAgICAgY3VycmVudExheWVyLmJhc2VMYXllciAhPT0gdHJ1ZVxuICAgICAgKSB7XG4gICAgICAgIHJlc3BvbnNlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAodGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmxheWVyc0NoZWNrZWRbMF0uYmFzZUxheWVyKSB8fFxuICAgICAgYmFzZSA9PT0gdGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aFxuICAgICkge1xuICAgICAgcmVzcG9uc2UgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgLypcbiAgICogV2hlbiBtdWx0aXBsZSBsYXllcnMgaXMgc2VsZWN0ZWQgYnV0IHNvbWUgbWF5IGJlIGFsbG93IHRvIG1vdmVcbiAgICovXG4gIHJhaXNhYmxlTGF5ZXIoaW5kZXg6IG51bWJlcikge1xuICAgIGlmIChpbmRleCA8IDEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sYXllcnNbaW5kZXggLSAxXS5vcHRpb25zLmNoZWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5yYWlzYWJsZUxheWVyKGluZGV4IC0gMSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmFpc2VMYXllcnMobGF5ZXJzOiBMYXllcltdLCBmcm9tVWkgPSB0cnVlKSB7XG4gICAgY29uc3QgbGF5ZXJzVG9SYWlzZSA9IFtdO1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMubGF5ZXJzLmZpbmRJbmRleCgobGF5KSA9PiBsYXkuaWQgPT09IGxheWVyLmlkKTtcbiAgICAgIGlmICh0aGlzLnJhaXNhYmxlTGF5ZXIoaW5kZXgpKSB7XG4gICAgICAgIGxheWVyc1RvUmFpc2UucHVzaChsYXllcik7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubWFwLnJhaXNlTGF5ZXJzKGxheWVyc1RvUmFpc2UpO1xuICAgIGlmIChmcm9tVWkpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBjaGVja0l0ZW1zID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgICAgJ21hdC1jaGVja2JveC1jaGVja2VkJ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBpdGVtRm9jdXNlZCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgICAgICdpZ28tbGF5ZXItaXRlbS1mb2N1c2VkJ1xuICAgICAgICApO1xuICAgICAgICBsZXQgdGFyZ2V0VG9TY3JvbGw7XG4gICAgICAgIGlmIChjaGVja0l0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgIHRhcmdldFRvU2Nyb2xsID0gY2hlY2tJdGVtc1swXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbUZvY3VzZWQubGVuZ3RoKSB7XG4gICAgICAgICAgdGFyZ2V0VG9TY3JvbGwgPSBpdGVtRm9jdXNlZFswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0VG9TY3JvbGwpIHtcbiAgICAgICAgICBzY3JvbGxJbnRvVmlldyh0YXJnZXRUb1Njcm9sbCwge1xuICAgICAgICAgICAgc2Nyb2xsTW9kZTogJ2lmLW5lZWRlZCcsXG4gICAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgICAgICBibG9jazogJ2VuZCcsXG4gICAgICAgICAgICBpbmxpbmU6ICduZWFyZXN0J1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgfVxuICAvKlxuICAgKiBGb3Igc2VsZWN0aW9uIG1vZGUgZGlzYWJsZWQgYXR0cmlidXRlXG4gICAqL1xuICBsb3dlcmFibGVMYXllcnMobGF5ZXJzOiBMYXllcltdKSB7XG4gICAgbGV0IHJlc3BvbnNlID0gZmFsc2U7XG4gICAgbGV0IGJhc2UgPSAwO1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICBjb25zdCBtYXBJbmRleCA9IHRoaXMubGF5ZXJzLmZpbmRJbmRleCgobGF5KSA9PiBsYXllci5pZCA9PT0gbGF5LmlkKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRMYXllciA9IHRoaXMubGF5ZXJzW21hcEluZGV4XTtcbiAgICAgIGlmIChjdXJyZW50TGF5ZXIuYmFzZUxheWVyKSB7XG4gICAgICAgIGJhc2UgKz0gMTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dExheWVyID0gdGhpcy5sYXllcnNbbWFwSW5kZXggKyAxXTtcbiAgICAgIGlmIChcbiAgICAgICAgbmV4dExheWVyICYmXG4gICAgICAgIG5leHRMYXllci5iYXNlTGF5ZXIgIT09IHRydWUgJiZcbiAgICAgICAgIWxheWVycy5maW5kKChsYXkpID0+IG5leHRMYXllci5pZCA9PT0gbGF5LmlkKVxuICAgICAgKSB7XG4gICAgICAgIHJlc3BvbnNlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAodGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmxheWVyc0NoZWNrZWRbMF0uYmFzZUxheWVyKSB8fFxuICAgICAgYmFzZSA9PT0gdGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aFxuICAgICkge1xuICAgICAgcmVzcG9uc2UgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgLypcbiAgICogV2hlbiBtdWx0aXBsZSBsYXllcnMgaXMgc2VsZWN0ZWQgYnV0IHNvbWUgbWF5IGJlIGFsbG93IHRvIG1vdmVcbiAgICovXG4gIGxvd2VyYWJsZUxheWVyKGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoXG4gICAgICBpbmRleCA+XG4gICAgICB0aGlzLmxheWVycy5maWx0ZXIoKGxheSkgPT4gbGF5LmJhc2VMYXllciAhPT0gdHJ1ZSkubGVuZ3RoIC0gMlxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxheWVyc1tpbmRleCArIDFdLm9wdGlvbnMuY2hlY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmxvd2VyYWJsZUxheWVyKGluZGV4ICsgMSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbG93ZXJMYXllcnMobGF5ZXJzOiBMYXllcltdLCBmcm9tVWkgPSB0cnVlKSB7XG4gICAgY29uc3QgbGF5ZXJzVG9Mb3dlciA9IFtdO1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMubGF5ZXJzLmZpbmRJbmRleCgobGF5KSA9PiBsYXkuaWQgPT09IGxheWVyLmlkKTtcbiAgICAgIGlmICh0aGlzLmxvd2VyYWJsZUxheWVyKGluZGV4KSkge1xuICAgICAgICBsYXllcnNUb0xvd2VyLnB1c2gobGF5ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm1hcC5sb3dlckxheWVycyhsYXllcnNUb0xvd2VyKTtcbiAgICBpZiAoZnJvbVVpKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgY2hlY2tJdGVtcyA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgICAgICdtYXQtY2hlY2tib3gtY2hlY2tlZCdcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaXRlbUZvY3VzZWQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgICAnaWdvLWxheWVyLWl0ZW0tZm9jdXNlZCdcbiAgICAgICAgKTtcbiAgICAgICAgbGV0IHRhcmdldFRvU2Nyb2xsO1xuICAgICAgICBpZiAoY2hlY2tJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICB0YXJnZXRUb1Njcm9sbCA9IGNoZWNrSXRlbXNbY2hlY2tJdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbUZvY3VzZWQubGVuZ3RoKSB7XG4gICAgICAgICAgdGFyZ2V0VG9TY3JvbGwgPSBpdGVtRm9jdXNlZFswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0VG9TY3JvbGwpIHtcbiAgICAgICAgICBzY3JvbGxJbnRvVmlldyh0YXJnZXRUb1Njcm9sbCwge1xuICAgICAgICAgICAgc2Nyb2xsTW9kZTogJ2lmLW5lZWRlZCcsXG4gICAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgICAgICBibG9jazogJ2VuZCcsXG4gICAgICAgICAgICBpbmxpbmU6ICduZWFyZXN0J1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIG5leHQoKSB7XG4gICAgdGhpcy5jaGFuZ2UkLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUxheWVycyhsYXllcnM6IExheWVyW10pOiBMYXllcltdIHtcbiAgICBsZXQgbGF5ZXJzT3V0ID0gdGhpcy5maWx0ZXJMYXllcnMobGF5ZXJzKTtcbiAgICBpZiAodGhpcy5zb3J0QWxwaGEpIHtcbiAgICAgIGxheWVyc091dCA9IHRoaXMuc29ydExheWVyc0J5VGl0bGUobGF5ZXJzT3V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGF5ZXJzT3V0ID0gdGhpcy5zb3J0TGF5ZXJzQnlaaW5kZXgobGF5ZXJzT3V0KTtcbiAgICB9XG4gICAgcmV0dXJuIGxheWVyc091dDtcbiAgfVxuXG4gIG9uS2V5d29yZENoYW5nZSh0ZXJtKSB7XG4gICAgdGhpcy5rZXl3b3JkID0gdGVybTtcbiAgfVxuXG4gIG9uQXBwbGllZEZpbHRlckFuZFNvcnRDaGFuZ2UoYXBwbGllZEZpbHRlcjogTGF5ZXJMaXN0Q29udHJvbHNPcHRpb25zKSB7XG4gICAgdGhpcy5rZXl3b3JkID0gYXBwbGllZEZpbHRlci5rZXl3b3JkO1xuICAgIHRoaXMub25seVZpc2libGUgPSBhcHBsaWVkRmlsdGVyLm9ubHlWaXNpYmxlO1xuICAgIHRoaXMuc29ydEFscGhhID0gYXBwbGllZEZpbHRlci5zb3J0QWxwaGE7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckxheWVycyhsYXllcnM6IExheWVyW10pOiBMYXllcltdIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmxheWVyRmlsdGVyQW5kU29ydE9wdGlvbnMuc2hvd1Rvb2xiYXIgPT09IExheWVyTGlzdENvbnRyb2xzRW51bS5uZXZlclxuICAgICkge1xuICAgICAgcmV0dXJuIGxheWVycztcbiAgICB9XG4gICAgaWYgKCF0aGlzLmtleXdvcmQgJiYgIXRoaXMub25seVZpc2libGUpIHtcbiAgICAgIHJldHVybiBsYXllcnM7XG4gICAgfVxuXG4gICAgY29uc3Qga2VlcExheWVySWRzID0gbGF5ZXJzLm1hcCgobGF5ZXI6IExheWVyKSA9PiBsYXllci5pZCk7XG5cbiAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXI6IExheWVyKSA9PiB7XG4gICAgICBjb25zdCBsYXllck9wdGlvbnMgPSAobGF5ZXIub3B0aW9ucyBhcyBNZXRhZGF0YUxheWVyT3B0aW9ucykgfHwge307XG4gICAgICBjb25zdCBkYXRhU291cmNlT3B0aW9ucyA9IGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucyB8fCB7fTtcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gbGF5ZXJPcHRpb25zLm1ldGFkYXRhIHx8ICh7fSBhcyBNZXRhZGF0YU9wdGlvbnMpO1xuICAgICAgY29uc3Qga2V5d29yZHMgPSBtZXRhZGF0YS5rZXl3b3JkTGlzdCB8fCBbXTtcbiAgICAgIGNvbnN0IGxheWVyS2V5d29yZHMgPSBrZXl3b3Jkcy5tYXAoKGt3OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGt3Lm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLmtleXdvcmQgJiYgbGF5ZXIudGl0bGUpIHtcbiAgICAgICAgY29uc3QgbG9jYWxLZXl3b3JkID0gdGhpcy5rZXl3b3JkXG4gICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xuICAgICAgICBjb25zdCBsYXllclRpdGxlID0gbGF5ZXIudGl0bGVcbiAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2VUeXBlID0gZGF0YVNvdXJjZU9wdGlvbnMudHlwZSB8fCAnJztcbiAgICAgICAgY29uc3Qga2V5d29yZFJlZ2V4ID0gbmV3IFJlZ0V4cChsb2NhbEtleXdvcmQsICdnaScpO1xuICAgICAgICBjb25zdCBrZXl3b3JkSW5MaXN0ID1cbiAgICAgICAgICBsYXllcktleXdvcmRzLmZpbmQoKGt3OiBzdHJpbmcpID0+IGtleXdvcmRSZWdleC50ZXN0KGt3KSkgIT09XG4gICAgICAgICAgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWtleXdvcmRSZWdleC50ZXN0KGxheWVyVGl0bGUpICYmXG4gICAgICAgICAgISh0aGlzLmtleXdvcmQudG9Mb3dlckNhc2UoKSA9PT0gZGF0YVNvdXJjZVR5cGUudG9Mb3dlckNhc2UoKSkgJiZcbiAgICAgICAgICAha2V5d29yZEluTGlzdFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGtlZXBMYXllcklkcy5pbmRleE9mKGxheWVyLmlkKTtcbiAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAga2VlcExheWVySWRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9ubHlWaXNpYmxlICYmIGxheWVyLnZpc2libGUgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0ga2VlcExheWVySWRzLmluZGV4T2YobGF5ZXIuaWQpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgIGtlZXBMYXllcklkcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGF5ZXJzLmZpbHRlcihcbiAgICAgIChsYXllcjogTGF5ZXIpID0+IGtlZXBMYXllcklkcy5pbmRleE9mKGxheWVyLmlkKSAhPT0gLTFcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzb3J0TGF5ZXJzQnlaaW5kZXgobGF5ZXJzOiBMYXllcltdKSB7XG4gICAgcmV0dXJuIGxheWVycy5zb3J0KChsYXllcjEsIGxheWVyMikgPT4gbGF5ZXIyLnpJbmRleCAtIGxheWVyMS56SW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzb3J0TGF5ZXJzQnlUaXRsZShsYXllcnM6IExheWVyW10pIHtcbiAgICByZXR1cm4gbGF5ZXJzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZShhLnRpdGxlKSA8IHRoaXMubm9ybWFsaXplKGIudGl0bGUpKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZShhLnRpdGxlKSA+IHRoaXMubm9ybWFsaXplKGIudGl0bGUpKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDA7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBzdHJcbiAgICAgIC5ub3JtYWxpemUoJ05GRCcpXG4gICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXG4gICAgICAudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZVNob3dUb29sYmFyKCk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAodGhpcy5sYXllckZpbHRlckFuZFNvcnRPcHRpb25zLnNob3dUb29sYmFyKSB7XG4gICAgICBjYXNlIExheWVyTGlzdENvbnRyb2xzRW51bS5hbHdheXM6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSBMYXllckxpc3RDb250cm9sc0VudW0ubmV2ZXI6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmxheWVycy5sZW5ndGggPj0gdGhpcy50aHJlc2hvbGRUb0ZpbHRlckFuZFNvcnQgfHxcbiAgICAgICAgICB0aGlzLmtleXdvcmQgfHxcbiAgICAgICAgICB0aGlzLm9ubHlWaXNpYmxlXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVMYXllclRvb2wobGF5ZXIpIHtcbiAgICB0aGlzLnRvZ2dsZU9wYWNpdHkgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5sYXllclRvb2wgJiYgbGF5ZXIgPT09IHRoaXMuYWN0aXZlTGF5ZXIpIHtcbiAgICAgIHRoaXMubGF5ZXJUb29sID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGF5ZXJUb29sID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGxheSBvZiB0aGlzLmxheWVycykge1xuICAgICAgbGF5Lm9wdGlvbnMuYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICAgIGxheWVyLm9wdGlvbnMuYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLmFjdGl2ZUxheWVyID0gbGF5ZXI7XG4gIH1cblxuICByZW1vdmVMYXllcnMobGF5ZXJzPzogTGF5ZXJbXSkge1xuICAgIGlmIChsYXllcnMgJiYgbGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZCA9IFtdO1xuICAgICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgaWYgKGxheWVyLm9wdGlvbnMucmVtb3ZhYmxlICE9PSBmYWxzZSkge1xuICAgICAgICAgIGxheWVyLm1hcC5yZW1vdmVMYXllcihsYXllcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sYXllcnNDaGVja2VkLnB1c2gobGF5ZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghbGF5ZXJzICYmIHRoaXMuYWN0aXZlTGF5ZXIub3B0aW9ucy5yZW1vdmFibGUgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmFjdGl2ZUxheWVyLm1hcC5yZW1vdmVMYXllcih0aGlzLmFjdGl2ZUxheWVyKTtcbiAgICAgIHRoaXMubGF5ZXJUb29sID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlVmlzaWJpbGl0eShsYXllcnM/OiBMYXllcltdKSB7XG4gICAgaWYgKGxheWVycyAmJiBsYXllcnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgbGF5ZXIudmlzaWJsZSA9IHRoaXMuaGlkZVNlbGVjdGVkTGF5ZXJzO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmxheWVySXRlbUNoYW5nZURldGVjdGlvbiQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIGlzTGF5ZXJSZW1vdmFibGUobGF5ZXI6IExheWVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGxheWVyLm9wdGlvbnMucmVtb3ZhYmxlICE9PSBmYWxzZTtcbiAgfVxuXG4gIGlzQWxsTGF5ZXJzUmVtb3ZhYmxlKGxheWVyczogTGF5ZXJbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBsYXllcnMuZXZlcnkoKGwpID0+IHRoaXMuaXNMYXllclJlbW92YWJsZShsKSk7XG4gIH1cblxuICBnZXQgc3RhdHVzU2VsZWN0ZWRMYXllcnNDaGVjaygpOiBMYXllckxpc3RTZWxlY3RWaXNpYmxlRW51bSB7XG4gICAgbGV0IHN0YXR1c1NlbGVjdGVkTGF5ZXJzOiBMYXllckxpc3RTZWxlY3RWaXNpYmxlRW51bSA9XG4gICAgICBMYXllckxpc3RTZWxlY3RWaXNpYmxlRW51bS5OVUxMO1xuICAgIGxldCBmaW5kVHJ1ZSA9IGZhbHNlO1xuICAgIGxldCBmaW5kRmFsc2UgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmxheWVyc0NoZWNrZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICBzdGF0dXNTZWxlY3RlZExheWVycyA9IExheWVyTGlzdFNlbGVjdFZpc2libGVFbnVtLk5VTEw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXR1c1NlbGVjdGVkTGF5ZXJzID0gTGF5ZXJMaXN0U2VsZWN0VmlzaWJsZUVudW0uTUlYRUQ7XG4gICAgICB0aGlzLmhpZGVTZWxlY3RlZExheWVycyA9IGZhbHNlO1xuXG4gICAgICBmb3IgKGNvbnN0IGxheWVyMiBvZiB0aGlzLmxheWVyc0NoZWNrZWQpIHtcbiAgICAgICAgaWYgKGxheWVyMi52aXNpYmxlID09PSB0cnVlKSB7XG4gICAgICAgICAgZmluZFRydWUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYXllcjIudmlzaWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBmaW5kRmFsc2UgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaW5kVHJ1ZSA9PT0gdHJ1ZSAmJiBmaW5kRmFsc2UgPT09IGZhbHNlKSB7XG4gICAgICAgIHN0YXR1c1NlbGVjdGVkTGF5ZXJzID0gTGF5ZXJMaXN0U2VsZWN0VmlzaWJsZUVudW0uQUxMX1ZJU0lCTEU7XG4gICAgICB9XG4gICAgICBpZiAoZmluZFRydWUgPT09IGZhbHNlICYmIGZpbmRGYWxzZSA9PT0gdHJ1ZSkge1xuICAgICAgICBzdGF0dXNTZWxlY3RlZExheWVycyA9IExheWVyTGlzdFNlbGVjdFZpc2libGVFbnVtLkFMTF9ISURERU47XG4gICAgICAgIHRoaXMuaGlkZVNlbGVjdGVkTGF5ZXJzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdHVzU2VsZWN0ZWRMYXllcnM7XG4gIH1cblxuICBsYXllcnNDaGVjayhldmVudDogeyBsYXllcjogTGF5ZXI7IGNoZWNrOiBib29sZWFuIH0pIHtcbiAgICBldmVudC5sYXllci5vcHRpb25zLmNoZWNrID0gZXZlbnQuY2hlY2s7XG4gICAgaWYgKGV2ZW50LmNoZWNrID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBldmVudE1hcEluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KFxuICAgICAgICAobGF5ZXIpID0+IGV2ZW50LmxheWVyLmlkID09PSBsYXllci5pZFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5sYXllcnNDaGVja2VkKSB7XG4gICAgICAgIGNvbnN0IG1hcEluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KChsYXkpID0+IGxheWVyLmlkID09PSBsYXkuaWQpO1xuICAgICAgICBpZiAoZXZlbnRNYXBJbmRleCA8IG1hcEluZGV4KSB7XG4gICAgICAgICAgdGhpcy5sYXllcnNDaGVja2VkLnNwbGljZShcbiAgICAgICAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5maW5kSW5kZXgoKGxheSkgPT4gbGF5ZXIuaWQgPT09IGxheS5pZCksXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgZXZlbnQubGF5ZXJcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHRoaXMuZXhjbHVkZUJhc2VMYXllcnMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aCA9PT1cbiAgICAgICAgICAgICAgdGhpcy5sYXllcnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChsYXkpID0+IGxheS5iYXNlTGF5ZXIgIT09IHRydWUgJiYgbGF5LnNob3dJbkxheWVyTGlzdFxuICAgICAgICAgICAgICApLmxlbmd0aFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2sgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZXhjbHVkZUJhc2VMYXllcnMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aCA9PT1cbiAgICAgICAgICAgICAgdGhpcy5sYXllcnMuZmlsdGVyKChsYXkpID0+IGxheS5zaG93SW5MYXllckxpc3QpLmxlbmd0aFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2sgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5wdXNoKGV2ZW50LmxheWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmxheWVyc0NoZWNrZWQuZmluZEluZGV4KFxuICAgICAgICAobGF5ZXIpID0+IGV2ZW50LmxheWVyLmlkID09PSBsYXllci5pZFxuICAgICAgKTtcbiAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmV4Y2x1ZGVCYXNlTGF5ZXJzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09XG4gICAgICAgIHRoaXMubGF5ZXJzLmZpbHRlcihcbiAgICAgICAgICAobGF5KSA9PiBsYXkuYmFzZUxheWVyICE9PSB0cnVlICYmIGxheS5zaG93SW5MYXllckxpc3RcbiAgICAgICAgKS5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2sgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLmV4Y2x1ZGVCYXNlTGF5ZXJzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09XG4gICAgICAgIHRoaXMubGF5ZXJzLmZpbHRlcigobGF5KSA9PiBsYXkuc2hvd0luTGF5ZXJMaXN0KS5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2sgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0b2dnbGVTZWxlY3Rpb25Nb2RlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZWxlY3Rpb24gPSB2YWx1ZTtcbiAgICB0aGlzLmFjdGl2ZUxheWVyID0gdW5kZWZpbmVkO1xuICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5sYXllclRvb2wgPSBmYWxzZTtcbiAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5sYXllcnMpIHtcbiAgICAgICAgaWYgKGxheWVyLm9wdGlvbnMuY2hlY2spIHtcbiAgICAgICAgICB0aGlzLmxheWVyc0NoZWNrZWQucHVzaChsYXllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsYXllcnNDaGVja2VkT3BhY2l0eSgpOiBhbnkge1xuICAgIGlmICh0aGlzLmxheWVyc0NoZWNrZWQubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5sYXllcnNDaGVja2VkKSB7XG4gICAgICAgIG9wYWNpdHkucHVzaChsYXllci5vcGFjaXR5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcGFjaXR5O1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEFsbCgpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0QWxsQ2hlY2spIHtcbiAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5sYXllcnMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuZXhjbHVkZUJhc2VMYXllcnMgJiZcbiAgICAgICAgICBsYXllci5iYXNlTGF5ZXIgIT09IHRydWUgJiZcbiAgICAgICAgICBsYXllci5zaG93SW5MYXllckxpc3RcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGF5ZXIub3B0aW9ucy5jaGVjayA9IHRydWU7XG4gICAgICAgICAgdGhpcy5sYXllcnNDaGVja2VkLnB1c2gobGF5ZXIpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmV4Y2x1ZGVCYXNlTGF5ZXJzICYmIGxheWVyLnNob3dJbkxheWVyTGlzdCkge1xuICAgICAgICAgIGxheWVyLm9wdGlvbnMuY2hlY2sgPSB0cnVlO1xuICAgICAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5wdXNoKGxheWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayQubmV4dCh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVycykge1xuICAgICAgICBsYXllci5vcHRpb25zLmNoZWNrID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLmxheWVyc0NoZWNrZWQgPSBbXTtcbiAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2skLm5leHQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGlzU2Nyb2xsZWRJbnRvVmlldyhlbGVtU291cmNlLCBlbGVtKSB7XG4gICAgY29uc3QgZG9jVmlld1RvcCA9IGVsZW1Tb3VyY2Uuc2Nyb2xsVG9wO1xuICAgIGNvbnN0IGRvY1ZpZXdCb3R0b20gPSBkb2NWaWV3VG9wICsgZWxlbVNvdXJjZS5jbGllbnRIZWlnaHQ7XG5cbiAgICBjb25zdCBlbGVtVG9wID0gZWxlbS5vZmZzZXRUb3A7XG4gICAgY29uc3QgZWxlbUJvdHRvbSA9IGVsZW1Ub3AgKyBlbGVtLmNsaWVudEhlaWdodDtcbiAgICByZXR1cm4gZWxlbUJvdHRvbSA8PSBkb2NWaWV3Qm90dG9tICYmIGVsZW1Ub3AgPj0gZG9jVmlld1RvcDtcbiAgfVxuXG4gIHJlbW92ZVByb2JsZW1MYXllckluTGlzdChsYXllcnNMaXN0OiBMYXllcltdKTogTGF5ZXJbXSB7XG4gICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnNMaXN0KSB7XG4gICAgICBpZiAobGF5ZXIub2xMb2FkaW5nUHJvYmxlbSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLm1hcC5yZW1vdmVMYXllcihsYXllcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsYXllcnNMaXN0O1xuICB9XG5cbiAgZGVsZXRlVW5hdmFpbGFibGVMYXllcihhbnlMYXllck9wdGlvbnM6IEFueUxheWVyT3B0aW9ucykge1xuICAgIHRoaXMubGF5ZXJTZXJ2aWNlLmRlbGV0ZVVuYXZhaWxhYmxlTGF5ZXJzKGFueUxheWVyT3B0aW9ucyk7XG4gIH1cbn1cbiIsIjxpZ28tbGF5ZXItbGlzdC10b29sXG4gICpuZ0lmPVwic2hvd1Rvb2xiYXIkIHwgYXN5bmNcIlxuICBmbG9hdExhYmVsPVwiYXV0b1wiXG4gIFtsYXllcnNBcmVBbGxWaXNpYmxlXT1cImxheWVyc0FyZUFsbFZpc2libGVcIlxuICBbdGVybV09XCJsYXllckZpbHRlckFuZFNvcnRPcHRpb25zLmtleXdvcmRcIlxuICBbb25seVZpc2libGVdPVwibGF5ZXJGaWx0ZXJBbmRTb3J0T3B0aW9ucy5vbmx5VmlzaWJsZVwiXG4gIFtzb3J0QWxwaGFdPVwibGF5ZXJGaWx0ZXJBbmRTb3J0T3B0aW9ucy5zb3J0QWxwaGFcIlxuICAoYXBwbGllZEZpbHRlckFuZFNvcnQpPVwib25BcHBsaWVkRmlsdGVyQW5kU29ydENoYW5nZSgkZXZlbnQpXCJcbiAgKHNlbGVjdGlvbik9XCJ0b2dnbGVTZWxlY3Rpb25Nb2RlKCRldmVudClcIlxuPlxuPC9pZ28tbGF5ZXItbGlzdC10b29sPlxuXG48ZGl2ICpuZ0lmPVwic2VsZWN0aW9uXCIgY2xhc3M9XCJzZWxlY3QtYWxsXCI+XG4gIDxtYXQtY2hlY2tib3hcbiAgICBjbGFzcz1cInNlbGVjdC1hbGwtY2hlY2tib3hcIlxuICAgIFtjb2xvcl09XCIhc2VsZWN0QWxsQ2hlY2sgJiYgbGF5ZXJzQ2hlY2tlZC5sZW5ndGggPiAwID8gJ2FjY2VudCcgOiAncHJpbWFyeSdcIlxuICAgIChjaGFuZ2UpPVwic2VsZWN0QWxsKClcIlxuICAgIFtjaGVja2VkXT1cInNlbGVjdEFsbENoZWNrXCJcbiAgICBbaW5kZXRlcm1pbmF0ZV09XCIhc2VsZWN0QWxsQ2hlY2sgJiYgbGF5ZXJzQ2hlY2tlZC5sZW5ndGggPiAwXCJcbiAgPlxuICAgIHt7XG4gICAgICBzZWxlY3RBbGxDaGVja1xuICAgICAgICA/ICgnaWdvLmdlby5sYXllci5kZXNlbGVjdEFsbCcgfCB0cmFuc2xhdGUpXG4gICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLnNlbGVjdEFsbCcgfCB0cmFuc2xhdGUpXG4gICAgfX1cbiAgPC9tYXQtY2hlY2tib3g+XG48L2Rpdj5cbjxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuXG48aWdvLWxpc3QgI2lnb0xpc3QgW25hdmlnYXRpb25dPVwiZmFsc2VcIiBbc2VsZWN0aW9uXT1cImZhbHNlXCI+XG4gIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtdW5hdmFpbGFibGVMYXllciBbbmdGb3JPZl09XCJ1bmF2YWlsYWJsZUxheWVyc1wiPlxuICAgIDxpZ28tbGF5ZXItaXRlbVxuICAgICAgaWdvTGlzdEl0ZW1cbiAgICAgIFt1bmF2YWlsYWJsZUxheWVyXT1cInVuYXZhaWxhYmxlTGF5ZXJcIlxuICAgICAgKGFjdGlvbik9XCJkZWxldGVVbmF2YWlsYWJsZUxheWVyKCRldmVudClcIlxuICAgID5cbiAgICA8L2lnby1sYXllci1pdGVtPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtbGF5ZXIgbGV0LWk9XCJpbmRleFwiIFtuZ0Zvck9mXT1cImxheWVycyQgfCBhc3luY1wiPlxuICAgIDxpZ28tbGF5ZXItaXRlbVxuICAgICAgKm5nSWY9XCIhKGV4Y2x1ZGVCYXNlTGF5ZXJzICYmIGxheWVyLmJhc2VMYXllcilcIlxuICAgICAgaWdvTGlzdEl0ZW1cbiAgICAgIFtsYXllcl09XCJsYXllclwiXG4gICAgICBbYWN0aXZlTGF5ZXJdPVwiYWN0aXZlTGF5ZXJcIlxuICAgICAgW29yZGVyYWJsZV09XCJvcmRlcmFibGUgJiYgIWxheWVyLmJhc2VMYXllclwiXG4gICAgICBbbG93ZXJEaXNhYmxlZF09XCJnZXRMb3dlckxheWVyKCkuaWQgPT09IGxheWVyLmlkXCJcbiAgICAgIFtyYWlzZURpc2FibGVkXT1cImdldFVwcGVyTGF5ZXIoKS5pZCA9PT0gbGF5ZXIuaWRcIlxuICAgICAgW3F1ZXJ5QmFkZ2VdPVwicXVlcnlCYWRnZVwiXG4gICAgICBbZXhwYW5kTGVnZW5kSWZWaXNpYmxlXT1cImV4cGFuZExlZ2VuZE9mVmlzaWJsZUxheWVyc1wiXG4gICAgICBbdXBkYXRlTGVnZW5kT25SZXNvbHV0aW9uQ2hhbmdlXT1cInVwZGF0ZUxlZ2VuZE9uUmVzb2x1dGlvbkNoYW5nZVwiXG4gICAgICBbdG9nZ2xlTGVnZW5kT25WaXNpYmlsaXR5Q2hhbmdlXT1cInRvZ2dsZUxlZ2VuZE9uVmlzaWJpbGl0eUNoYW5nZVwiXG4gICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25cIlxuICAgICAgW3NlbGVjdEFsbF09XCJzZWxlY3RBbGxDaGVja1wiXG4gICAgICBbbGF5ZXJDaGVja109XCJsYXllci5vcHRpb25zLmNoZWNrXCJcbiAgICAgIFtjaGFuZ2VEZXRlY3Rpb25dPVwibGF5ZXJJdGVtQ2hhbmdlRGV0ZWN0aW9uJFwiXG4gICAgICAoYWN0aW9uKT1cInRvZ2dsZUxheWVyVG9vbCgkZXZlbnQpXCJcbiAgICAgIChjaGVja2JveCk9XCJsYXllcnNDaGVjaygkZXZlbnQpXCJcbiAgICA+XG4gICAgPC9pZ28tbGF5ZXItaXRlbT5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvaWdvLWxpc3Q+XG5cbjxpZ28tcGFuZWxcbiAgKm5nSWY9XCIhc2VsZWN0aW9uICYmIGxheWVyVG9vbCAmJiBhY3RpdmVMYXllclwiXG4gIGNsYXNzPVwiaWdvLWxheWVyLWFjdGlvbnMtY29udGFpbmVyXCJcbiAgW3RpdGxlXT1cImFjdGl2ZUxheWVyLnRpdGxlXCJcbj5cbiAgPGRpdiBjbGFzcz1cImlnby1sYXllci1idXR0b24tZ3JvdXBcIj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cImlzTGF5ZXJSZW1vdmFibGUoYWN0aXZlTGF5ZXIpXCJcbiAgICAgIGNsYXNzPVwiZGVsZXRlLWJ1dHRvblwiXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNvbG9yPVwid2FyblwiXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5yZW1vdmVMYXllcicgfCB0cmFuc2xhdGVcIlxuICAgICAgKGNsaWNrKT1cInJlbW92ZUxheWVycygpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiZG93bi1idXR0b25cIlxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgW21hdFRvb2x0aXBdPVwiXG4gICAgICAgIHNvcnRBbHBoYSB8fCBvbmx5VmlzaWJsZSB8fCBrZXl3b3JkXG4gICAgICAgICAgPyAoJ2lnby5nZW8ubGF5ZXIuZmlsdGVyTG93ZXJMYXllcicgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgOiAoJ2lnby5nZW8ubGF5ZXIubG93ZXJMYXllcicgfCB0cmFuc2xhdGUpXG4gICAgICBcIlxuICAgICAgW2Rpc2FibGVkXT1cImxvd2VyRGlzYWJsZWRcIlxuICAgICAgKGNsaWNrKT1cIm1vdmVBY3RpdmVMYXllcihhY3RpdmVMYXllciwgbGF5ZXJMaXN0RGlzcGxhY2VtZW50Lkxvd2VyLCB0cnVlKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uXG4gICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxuICAgICAgICBbbWF0QmFkZ2VdPVwic29ydEFscGhhIHx8IG9ubHlWaXNpYmxlIHx8IGtleXdvcmQgPyAnIScgOiAnJ1wiXG4gICAgICAgIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCJcbiAgICAgICAgbWF0QmFkZ2VTaXplPVwibWVkaXVtXCJcbiAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cImxvd2VyRGlzYWJsZWRcIlxuICAgICAgICA+YXJyb3dfZG93bndhcmQ8L21hdC1pY29uXG4gICAgICA+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInVwLWJ1dHRvblwiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCJcbiAgICAgICAgc29ydEFscGhhIHx8IG9ubHlWaXNpYmxlIHx8IGtleXdvcmRcbiAgICAgICAgICA/ICgnaWdvLmdlby5sYXllci5maWx0ZXJSYWlzZUxheWVyJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICA6ICgnaWdvLmdlby5sYXllci5yYWlzZUxheWVyJyB8IHRyYW5zbGF0ZSlcbiAgICAgIFwiXG4gICAgICBbZGlzYWJsZWRdPVwicmFpc2VEaXNhYmxlZFwiXG4gICAgICAoY2xpY2spPVwibW92ZUFjdGl2ZUxheWVyKGFjdGl2ZUxheWVyLCBsYXllckxpc3REaXNwbGFjZW1lbnQuUmFpc2UsIHRydWUpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb25cbiAgICAgICAgYXJpYS1oaWRkZW49XCJmYWxzZVwiXG4gICAgICAgIFttYXRCYWRnZV09XCJzb3J0QWxwaGEgfHwgb25seVZpc2libGUgfHwga2V5d29yZCA/ICchJyA6ICcnXCJcbiAgICAgICAgbWF0QmFkZ2VDb2xvcj1cIndhcm5cIlxuICAgICAgICBtYXRCYWRnZVNpemU9XCJtZWRpdW1cIlxuICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwicmFpc2VEaXNhYmxlZFwiXG4gICAgICAgID5hcnJvd191cHdhcmQ8L21hdC1pY29uXG4gICAgICA+XG4gICAgPC9idXR0b24+XG5cbiAgICA8IS0tIDxsYWJlbD57eyAnaWdvLmdlby5sYXllci5vcGFjaXR5JyB8IHRyYW5zbGF0ZSB9fSA8L2xhYmVsPiAtLT5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cIm9wYWNpdHktYnV0dG9uXCJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJvcGFjaXR5TWVudVwiXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5vcGFjaXR5JyB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uXG4gICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxuICAgICAgICBbbWF0QmFkZ2VdPVwiYmFkZ2VPcGFjaXR5XCJcbiAgICAgICAgbWF0QmFkZ2VDb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBtYXRCYWRnZVNpemU9XCJtZWRpdW1cIlxuICAgICAgICA+b3BhY2l0eTwvbWF0LWljb25cbiAgICAgID5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxtYXQtbWVudSAjb3BhY2l0eU1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJwYW5lbC1vcGFjaXR5LW1lbnVcIj5cbiAgICAgIDxtYXQtc2xpZGVyXG4gICAgICAgIGlkPVwib3BhY2l0eS1zbGlkZXJcIlxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBkaXNjcmV0ZVxuICAgICAgICBzdGVwPVwiNVwiXG4gICAgICAgIFttaW5dPVwiMFwiXG4gICAgICAgIFttYXhdPVwiMTAwXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIub3BhY2l0eScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAgICNuZ1NsaWRlclxuICAgICAgICA+PGlucHV0XG4gICAgICAgICAgbWF0U2xpZGVyVGh1bWJcbiAgICAgICAgICBbdmFsdWVdPVwib3BhY2l0eVwiXG4gICAgICAgICAgKGlucHV0KT1cIlxuICAgICAgICAgICAgY2hhbmdlT3BhY2l0eSh7XG4gICAgICAgICAgICAgIHNvdXJjZTogbmdTbGlkZXJUaHVtYixcbiAgICAgICAgICAgICAgcGFyZW50OiBuZ1NsaWRlcixcbiAgICAgICAgICAgICAgdmFsdWU6IG5nU2xpZGVyVGh1bWIudmFsdWVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXCJcbiAgICAgICAgICAjbmdTbGlkZXJUaHVtYj1cIm1hdFNsaWRlclRodW1iXCJcbiAgICAgICAgLz5cbiAgICAgIDwvbWF0LXNsaWRlcj5cbiAgICA8L21hdC1tZW51PlxuXG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJhY3RpdmVMYXllckV4dGVudElzVmFsaWQoYWN0aXZlTGF5ZXIpXCJcbiAgICAgIGNsYXNzPVwiem9vbUxheWVyLWJ1dHRvblwiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci56b29tTGF5ZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgIChjbGljayk9XCJ6b29tTGF5ZXJFeHRlbnRzKGFjdGl2ZUxheWVyKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uIG1hdEJhZGdlQ29sb3I9XCJwcmltYXJ5XCIgbWF0QmFkZ2VTaXplPVwibWVkaXVtXCJcbiAgICAgICAgPmZyYW1lX2luc3BlY3Q8L21hdC1pY29uXG4gICAgICA+XG4gICAgPC9idXR0b24+XG5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICBpZ29MYXllckl0ZW1Ub29sYmFyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZUxheWVyVG9vbGJhclwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBsYXllcjogYWN0aXZlTGF5ZXIgfVwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2lnb0xheWVySXRlbVRvb2xiYXJdXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvaWdvLXBhbmVsPlxuXG48aWdvLXBhbmVsXG4gICpuZ0lmPVwic2VsZWN0aW9uICYmIGxheWVycy5sZW5ndGggPiAwXCJcbiAgY2xhc3M9XCJpZ28tbGF5ZXItYWN0aW9ucy1jb250YWluZXJcIlxuICBbdGl0bGVdPVwiJ2lnby5nZW8ubGF5ZXIudG9vbHMnIHwgdHJhbnNsYXRlXCJcbj5cbiAgPGRpdiBjbGFzcz1cImFjdGlvbnMtYnV0dG9ucy1tdWx0aVwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiZGVsZXRlLWJ1dHRvblwiXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNvbG9yPVwid2FyblwiXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbZGlzYWJsZWRdPVwibGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09IDBcIlxuICAgICAgW21hdFRvb2x0aXBdPVwiXG4gICAgICAgIGlzQWxsTGF5ZXJzUmVtb3ZhYmxlKGxheWVyc0NoZWNrZWQpXG4gICAgICAgICAgPyAoJ2lnby5nZW8ubGF5ZXIucmVtb3ZlU2VsZWN0ZWRMYXllcnMnIHwgdHJhbnNsYXRlKVxuICAgICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLnJlbW92ZVNlbGVjdGVkTGF5ZXJzUmVzdHJpY3Rpb24nIHwgdHJhbnNsYXRlKVxuICAgICAgXCJcbiAgICAgIChjbGljayk9XCJyZW1vdmVMYXllcnMobGF5ZXJzQ2hlY2tlZClcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvblxuICAgICAgICBhcmlhLWhpZGRlbj1cImZhbHNlXCJcbiAgICAgICAgW21hdEJhZGdlXT1cIichJ1wiXG4gICAgICAgIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCJcbiAgICAgICAgbWF0QmFkZ2VTaXplPVwibWVkaXVtXCJcbiAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cImlzQWxsTGF5ZXJzUmVtb3ZhYmxlKGxheWVyc0NoZWNrZWQpXCJcbiAgICAgICAgPmRlbGV0ZTwvbWF0LWljb25cbiAgICAgID5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiZXllLWJ1dHRvblwiXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbZGlzYWJsZWRdPVwibGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09IDBcIlxuICAgICAgW21hdFRvb2x0aXBdPVwiXG4gICAgICAgIHN0YXR1c1NlbGVjdGVkTGF5ZXJzQ2hlY2sgPT09ICdBTExfSElEREVOJ1xuICAgICAgICAgID8gKCdpZ28uZ2VvLmxheWVyLnNob3dTZWxlY3RlZExheWVycycgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgOiAoJ2lnby5nZW8ubGF5ZXIuaGlkZVNlbGVjdGVkTGF5ZXJzJyB8IHRyYW5zbGF0ZSlcbiAgICAgIFwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlVmlzaWJpbGl0eShsYXllcnNDaGVja2VkKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPnt7XG4gICAgICAgIHN0YXR1c1NlbGVjdGVkTGF5ZXJzQ2hlY2sgPT09ICdBTExfSElEREVOJ1xuICAgICAgICAgID8gJ3Zpc2liaWxpdHlfb2ZmJ1xuICAgICAgICAgIDogJ3Zpc2liaWxpdHknXG4gICAgICB9fTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImRvd24tYnV0dG9uXCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIlxuICAgICAgICBzb3J0QWxwaGEgfHwgb25seVZpc2libGUgfHwga2V5d29yZFxuICAgICAgICAgID8gKCdpZ28uZ2VvLmxheWVyLmZpbHRlckxvd2VyTGF5ZXInIHwgdHJhbnNsYXRlKVxuICAgICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLmxvd2VyTGF5ZXInIHwgdHJhbnNsYXRlKVxuICAgICAgXCJcbiAgICAgIFtkaXNhYmxlZF09XCJsb3dlckRpc2FibGVkU2VsZWN0aW9uXCJcbiAgICAgIChjbGljayk9XCJsb3dlckxheWVycyhsYXllcnNDaGVja2VkKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uXG4gICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxuICAgICAgICBbbWF0QmFkZ2VdPVwic29ydEFscGhhIHx8IG9ubHlWaXNpYmxlIHx8IGtleXdvcmQgPyAnIScgOiAnJ1wiXG4gICAgICAgIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCJcbiAgICAgICAgbWF0QmFkZ2VTaXplPVwibWVkaXVtXCJcbiAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cImxvd2VyRGlzYWJsZWRTZWxlY3Rpb25cIlxuICAgICAgICA+YXJyb3dfZG93bndhcmQ8L21hdC1pY29uXG4gICAgICA+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInVwLWJ1dHRvblwiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCJcbiAgICAgICAgc29ydEFscGhhIHx8IG9ubHlWaXNpYmxlIHx8IGtleXdvcmRcbiAgICAgICAgICA/ICgnaWdvLmdlby5sYXllci5maWx0ZXJSYWlzZUxheWVyJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICA6ICgnaWdvLmdlby5sYXllci5yYWlzZUxheWVyJyB8IHRyYW5zbGF0ZSlcbiAgICAgIFwiXG4gICAgICBbZGlzYWJsZWRdPVwicmFpc2VEaXNhYmxlZFNlbGVjdGlvblwiXG4gICAgICAoY2xpY2spPVwicmFpc2VMYXllcnMobGF5ZXJzQ2hlY2tlZClcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvblxuICAgICAgICBhcmlhLWhpZGRlbj1cImZhbHNlXCJcbiAgICAgICAgW21hdEJhZGdlXT1cInNvcnRBbHBoYSB8fCBvbmx5VmlzaWJsZSB8fCBrZXl3b3JkID8gJyEnIDogJydcIlxuICAgICAgICBtYXRCYWRnZUNvbG9yPVwid2FyblwiXG4gICAgICAgIG1hdEJhZGdlU2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgIFttYXRCYWRnZUhpZGRlbl09XCJyYWlzZURpc2FibGVkU2VsZWN0aW9uXCJcbiAgICAgICAgPmFycm93X3Vwd2FyZDwvbWF0LWljb25cbiAgICAgID5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwib3BhY2l0eS1idXR0b25cIlxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgW2Rpc2FibGVkXT1cImxheWVyc0NoZWNrZWQubGVuZ3RoID09PSAwXCJcbiAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJvcGFjaXR5TWVudVwiXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5vcGFjaXR5JyB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPm9wYWNpdHk8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPG1hdC1tZW51ICNvcGFjaXR5TWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cIm1hdC1tZW51LW9wYWNpdHktc2xpZGVyXCI+XG4gICAgICA8ZGl2IGlkPVwib3BhY2l0eS1tZW51XCI+XG4gICAgICAgIDwhLS0gVE9ETzogVGhlICd0aWNrSW50ZXJ2YWwnIHByb3BlcnR5IG5vIGxvbmdlciBleGlzdHMgLS0+XG4gICAgICAgIDxtYXQtc2xpZGVyXG4gICAgICAgICAgKm5nSWY9XCJsYXllcnNDaGVja2VkLmxlbmd0aFwiXG4gICAgICAgICAgaWQ9XCJvcGFjaXR5LXNsaWRlclwiXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICB0aHVtYkxhYmVsXG4gICAgICAgICAgc2hvd1RpY2tNYXJrc1xuICAgICAgICAgIHN0ZXA9XCI1XCJcbiAgICAgICAgICBbbWluXT1cIjBcIlxuICAgICAgICAgIFttYXhdPVwiMTAwXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImNoZWNrT3BhY2l0eVwiXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIub3BhY2l0eScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgPjxpbnB1dCBtYXRTbGlkZXJUaHVtYiAvPlxuICAgICAgICA8L21hdC1zbGlkZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1tZW51PlxuXG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgbGF5ZXJzQ2hlY2tlZC5sZW5ndGggIT09IDAgJiYgYWN0aXZlTGF5ZXJzRXh0ZW50QXJlVmFsaWQobGF5ZXJzQ2hlY2tlZClcbiAgICAgIFwiXG4gICAgICBjbGFzcz1cInpvb21MYXllci1idXR0b25cIlxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIuem9vbUxheWVycycgfCB0cmFuc2xhdGVcIlxuICAgICAgKGNsaWNrKT1cInpvb21MYXllcnNFeHRlbnRzKGxheWVyc0NoZWNrZWQpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+ZnJhbWVfaW5zcGVjdDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9pZ28tcGFuZWw+XG4iXX0=