@igo2/geo 17.0.0-next.3 → 17.0.0-next.5

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 (409) hide show
  1. package/assets/icons/cross_black_18px.svg +88 -88
  2. package/assets/icons/place_blue_36px.svg +55 -55
  3. package/assets/icons/place_green_36px.svg +55 -55
  4. package/assets/icons/place_red_36px.svg +55 -55
  5. package/assets/icons/place_yellow_36px.svg +55 -55
  6. package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +3 -3
  7. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +3 -3
  8. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +3 -3
  9. package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +1 -1
  10. package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +3 -3
  11. package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +3 -3
  12. package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +3 -3
  13. package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +1 -1
  14. package/esm2022/lib/catalog/catalog-library/index.mjs +1 -1
  15. package/esm2022/lib/catalog/catalog.module.mjs +1 -1
  16. package/esm2022/lib/catalog/index.mjs +1 -1
  17. package/esm2022/lib/catalog/shared/catalog.abstract.mjs +1 -1
  18. package/esm2022/lib/catalog/shared/catalog.enum.mjs +1 -1
  19. package/esm2022/lib/catalog/shared/catalog.interface.mjs +1 -1
  20. package/esm2022/lib/catalog/shared/catalog.service.mjs +1 -1
  21. package/esm2022/lib/catalog/shared/catalogs.mjs +1 -1
  22. package/esm2022/lib/catalog/shared/index.mjs +1 -1
  23. package/esm2022/lib/datasource/index.mjs +1 -1
  24. package/esm2022/lib/datasource/shared/capabilities.interface.mjs +1 -1
  25. package/esm2022/lib/datasource/shared/capabilities.service.mjs +1 -1
  26. package/esm2022/lib/datasource/shared/datasource.service.mjs +1 -1
  27. package/esm2022/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  28. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
  29. package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +1 -1
  30. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  31. package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  32. package/esm2022/lib/datasource/shared/datasources/datasource.mjs +1 -1
  33. package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  34. package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
  35. package/esm2022/lib/datasource/shared/datasources/index.mjs +1 -1
  36. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
  37. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  38. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
  39. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  40. package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +1 -1
  41. package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +1 -1
  42. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +3 -3
  43. package/esm2022/lib/directions/directions-buttons/index.mjs +1 -1
  44. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +3 -3
  45. package/esm2022/lib/directions/directions-inputs/index.mjs +1 -1
  46. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +3 -3
  47. package/esm2022/lib/directions/directions-results/index.mjs +1 -1
  48. package/esm2022/lib/directions/directions-sources/directions-source.interface.mjs +1 -1
  49. package/esm2022/lib/directions/directions-sources/directions-source.mjs +1 -1
  50. package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +1 -1
  51. package/esm2022/lib/directions/directions-sources/index.mjs +1 -1
  52. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +1 -1
  53. package/esm2022/lib/directions/directions.component.mjs +3 -3
  54. package/esm2022/lib/directions/directions.module.mjs +1 -1
  55. package/esm2022/lib/directions/index.mjs +1 -1
  56. package/esm2022/lib/directions/shared/directions-source.service.mjs +1 -1
  57. package/esm2022/lib/directions/shared/directions.enum.mjs +1 -1
  58. package/esm2022/lib/directions/shared/directions.interface.mjs +1 -1
  59. package/esm2022/lib/directions/shared/directions.service.mjs +1 -1
  60. package/esm2022/lib/directions/shared/directions.utils.mjs +1 -1
  61. package/esm2022/lib/directions/shared/index.mjs +1 -1
  62. package/esm2022/lib/directions/shared/store.mjs +1 -1
  63. package/esm2022/lib/download/download-button/download-button.component.mjs +3 -3
  64. package/esm2022/lib/download/download-button/index.mjs +1 -1
  65. package/esm2022/lib/download/download.module.mjs +1 -1
  66. package/esm2022/lib/download/index.mjs +1 -1
  67. package/esm2022/lib/download/shared/download.interface.mjs +1 -1
  68. package/esm2022/lib/download/shared/download.service.mjs +1 -1
  69. package/esm2022/lib/download/shared/index.mjs +1 -1
  70. package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +3 -3
  71. package/esm2022/lib/draw/draw/draw-popup.component.mjs +3 -3
  72. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +3 -3
  73. package/esm2022/lib/draw/draw/draw.component.mjs +3 -3
  74. package/esm2022/lib/draw/draw/draw.module.mjs +1 -1
  75. package/esm2022/lib/draw/drawingTool.module.mjs +1 -1
  76. package/esm2022/lib/draw/index.mjs +1 -1
  77. package/esm2022/lib/draw/shared/draw-icon.service.mjs +1 -1
  78. package/esm2022/lib/draw/shared/draw.enum.mjs +1 -1
  79. package/esm2022/lib/draw/shared/draw.interface.mjs +1 -1
  80. package/esm2022/lib/draw/shared/draw.utils.mjs +1 -1
  81. package/esm2022/lib/draw/shared/index.mjs +1 -1
  82. package/esm2022/lib/environment/environment.interface.mjs +1 -1
  83. package/esm2022/lib/environment/index.mjs +1 -1
  84. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +3 -3
  85. package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +1 -1
  86. package/esm2022/lib/feature/feature-details/feature-details.module.mjs +1 -1
  87. package/esm2022/lib/feature/feature-details/index.mjs +1 -1
  88. package/esm2022/lib/feature/feature-form/feature-form.component.mjs +3 -3
  89. package/esm2022/lib/feature/feature-form/feature-form.module.mjs +1 -1
  90. package/esm2022/lib/feature/feature.module.mjs +1 -1
  91. package/esm2022/lib/feature/index.mjs +1 -1
  92. package/esm2022/lib/feature/shared/feature-store.utils.mjs +1 -1
  93. package/esm2022/lib/feature/shared/feature.enums.mjs +1 -1
  94. package/esm2022/lib/feature/shared/feature.interfaces.mjs +1 -1
  95. package/esm2022/lib/feature/shared/feature.utils.mjs +1 -1
  96. package/esm2022/lib/feature/shared/index.mjs +1 -1
  97. package/esm2022/lib/feature/shared/store.mjs +1 -1
  98. package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +1 -1
  99. package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +1 -1
  100. package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +1 -1
  101. package/esm2022/lib/feature/shared/strategies/index.mjs +1 -1
  102. package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +1 -1
  103. package/esm2022/lib/feature/shared/strategies/loading.mjs +1 -1
  104. package/esm2022/lib/feature/shared/strategies/search.mjs +1 -1
  105. package/esm2022/lib/feature/shared/strategies/selection.mjs +1 -1
  106. package/esm2022/lib/feature/shared/strategies.utils.mjs +1 -1
  107. package/esm2022/lib/filter/filter.module.mjs +1 -1
  108. package/esm2022/lib/filter/index.mjs +1 -1
  109. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +1 -1
  110. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +3 -3
  111. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +3 -3
  112. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +1 -1
  113. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +1 -1
  114. package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +1 -1
  115. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +1 -1
  116. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +1 -1
  117. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +1 -1
  118. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +1 -1
  119. package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  120. package/esm2022/lib/filter/shared/ogc-filter.mjs +1 -1
  121. package/esm2022/lib/filter/shared/spatial-filter.service.mjs +1 -1
  122. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +3 -3
  123. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +1 -1
  124. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +1 -1
  125. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +1 -1
  126. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +3 -3
  127. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +1 -1
  128. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +1 -1
  129. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +1 -1
  130. package/esm2022/lib/geo.module.mjs +1 -1
  131. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +3 -3
  132. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +3 -3
  133. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +1 -1
  134. package/esm2022/lib/geometry/geometry-form-field/index.mjs +1 -1
  135. package/esm2022/lib/geometry/geometry.module.mjs +1 -1
  136. package/esm2022/lib/geometry/index.mjs +1 -1
  137. package/esm2022/lib/geometry/shared/controls/draw.mjs +1 -1
  138. package/esm2022/lib/geometry/shared/controls/index.mjs +1 -1
  139. package/esm2022/lib/geometry/shared/controls/modify.mjs +1 -1
  140. package/esm2022/lib/geometry/shared/controls/slice.mjs +1 -1
  141. package/esm2022/lib/geometry/shared/geometry.errors.mjs +1 -1
  142. package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  143. package/esm2022/lib/geometry/shared/geometry.utils.mjs +1 -1
  144. package/esm2022/lib/geometry/shared/index.mjs +1 -1
  145. package/esm2022/lib/import-export/export-button/export-button.component.mjs +3 -3
  146. package/esm2022/lib/import-export/export-button/index.mjs +1 -1
  147. package/esm2022/lib/import-export/import-export/import-export.component.mjs +3 -3
  148. package/esm2022/lib/import-export/import-export/index.mjs +1 -1
  149. package/esm2022/lib/import-export/import-export.module.mjs +1 -1
  150. package/esm2022/lib/import-export/index.mjs +1 -1
  151. package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +5 -56
  152. package/esm2022/lib/import-export/shared/export.errors.mjs +1 -1
  153. package/esm2022/lib/import-export/shared/export.interface.mjs +1 -1
  154. package/esm2022/lib/import-export/shared/export.service.mjs +1 -1
  155. package/esm2022/lib/import-export/shared/export.type.mjs +1 -1
  156. package/esm2022/lib/import-export/shared/export.utils.mjs +1 -1
  157. package/esm2022/lib/import-export/shared/import.errors.mjs +1 -1
  158. package/esm2022/lib/import-export/shared/import.interface.mjs +1 -1
  159. package/esm2022/lib/import-export/shared/import.service.mjs +1 -1
  160. package/esm2022/lib/import-export/shared/import.utils.mjs +1 -1
  161. package/esm2022/lib/import-export/shared/index.mjs +1 -1
  162. package/esm2022/lib/layer/index.mjs +1 -1
  163. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +1 -1
  164. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +3 -3
  165. package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +1 -1
  166. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +1 -1
  167. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +1 -1
  168. package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +1 -1
  169. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +1 -1
  170. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +3 -3
  171. package/esm2022/lib/layer/layer.module.mjs +1 -1
  172. package/esm2022/lib/layer/shared/layer.service.mjs +6 -6
  173. package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  174. package/esm2022/lib/layer/shared/layers/image-layer.mjs +1 -1
  175. package/esm2022/lib/layer/shared/layers/index.mjs +1 -1
  176. package/esm2022/lib/layer/shared/layers/layer.interface.mjs +1 -1
  177. package/esm2022/lib/layer/shared/layers/layer.mjs +1 -1
  178. package/esm2022/lib/layer/shared/layers/legend.interface.mjs +1 -1
  179. package/esm2022/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
  180. package/esm2022/lib/layer/shared/layers/tile-layer.mjs +1 -1
  181. package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  182. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +1 -1
  183. package/esm2022/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
  184. package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
  185. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +1 -1
  186. package/esm2022/lib/layer/utils/image-watcher.mjs +1 -1
  187. package/esm2022/lib/layer/utils/tile-watcher.mjs +1 -1
  188. package/esm2022/lib/layer/utils/vector-watcher.mjs +1 -1
  189. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +1 -1
  190. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +3 -3
  191. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +1 -1
  192. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +3 -3
  193. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +1 -1
  194. package/esm2022/lib/map/index.mjs +1 -1
  195. package/esm2022/lib/map/info-section/info-section.component.mjs +1 -1
  196. package/esm2022/lib/map/map-browser/map-browser.component.mjs +1 -1
  197. package/esm2022/lib/map/map-center/map-center.component.mjs +1 -1
  198. package/esm2022/lib/map/map.module.mjs +1 -1
  199. package/esm2022/lib/map/menu-button/menu-button.component.mjs +1 -1
  200. package/esm2022/lib/map/offline-button/offline-button.component.mjs +1 -1
  201. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +1 -1
  202. package/esm2022/lib/map/shared/controllers/geolocation.mjs +1 -1
  203. package/esm2022/lib/map/shared/controllers/view.mjs +1 -1
  204. package/esm2022/lib/map/shared/hover-feature.directive.mjs +1 -1
  205. package/esm2022/lib/map/shared/linkedLayers.utils.mjs +3 -3
  206. package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +1 -1
  207. package/esm2022/lib/map/shared/map.abstract.mjs +1 -1
  208. package/esm2022/lib/map/shared/map.mjs +1 -1
  209. package/esm2022/lib/map/shared/mapOffline.directive.mjs +1 -1
  210. package/esm2022/lib/map/shared/projection.service.mjs +1 -1
  211. package/esm2022/lib/map/shared/projection.utils.mjs +60 -1
  212. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +1 -1
  213. package/esm2022/lib/map/utils/layer-watcher.mjs +1 -1
  214. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +1 -1
  215. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +1 -1
  216. package/esm2022/lib/measure/index.mjs +1 -1
  217. package/esm2022/lib/measure/measure.module.mjs +1 -1
  218. package/esm2022/lib/measure/measurer/index.mjs +1 -1
  219. package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +1 -1
  220. package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +3 -3
  221. package/esm2022/lib/measure/measurer/measurer-item.component.mjs +3 -3
  222. package/esm2022/lib/measure/measurer/measurer.component.mjs +3 -3
  223. package/esm2022/lib/measure/measurer/measurer.module.mjs +1 -1
  224. package/esm2022/lib/measure/shared/index.mjs +1 -1
  225. package/esm2022/lib/measure/shared/measure.enum.mjs +1 -1
  226. package/esm2022/lib/measure/shared/measure.interfaces.mjs +1 -1
  227. package/esm2022/lib/measure/shared/measure.utils.mjs +1 -1
  228. package/esm2022/lib/metadata/index.mjs +1 -1
  229. package/esm2022/lib/metadata/metadata-button/index.mjs +1 -1
  230. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +5 -5
  231. package/esm2022/lib/metadata/metadata.module.mjs +1 -1
  232. package/esm2022/lib/metadata/shared/index.mjs +1 -1
  233. package/esm2022/lib/metadata/shared/metadata.interface.mjs +1 -1
  234. package/esm2022/lib/metadata/shared/metadata.service.mjs +1 -1
  235. package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +1 -1
  236. package/esm2022/lib/offline/geoDB/geoDB.enums.mjs +1 -1
  237. package/esm2022/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  238. package/esm2022/lib/offline/geoDB/geoDB.service.mjs +1 -1
  239. package/esm2022/lib/offline/geoDB/index.mjs +1 -1
  240. package/esm2022/lib/offline/index.mjs +1 -1
  241. package/esm2022/lib/offline/layerDB/index.mjs +1 -1
  242. package/esm2022/lib/offline/layerDB/layerDB.interface.mjs +1 -1
  243. package/esm2022/lib/offline/layerDB/layerDB.service.mjs +1 -1
  244. package/esm2022/lib/offline/shared/geo-network.service.mjs +1 -1
  245. package/esm2022/lib/offline/shared/index.mjs +1 -1
  246. package/esm2022/lib/overlay/index.mjs +1 -1
  247. package/esm2022/lib/overlay/overlay.module.mjs +1 -1
  248. package/esm2022/lib/overlay/shared/index.mjs +1 -1
  249. package/esm2022/lib/overlay/shared/overlay.directive.mjs +1 -1
  250. package/esm2022/lib/overlay/shared/overlay.enum.mjs +1 -1
  251. package/esm2022/lib/overlay/shared/overlay.mjs +1 -1
  252. package/esm2022/lib/overlay/shared/overlay.service.mjs +1 -1
  253. package/esm2022/lib/overlay/shared/overlay.utils.mjs +1 -1
  254. package/esm2022/lib/print/index.mjs +1 -1
  255. package/esm2022/lib/print/print/print.component.mjs +3 -3
  256. package/esm2022/lib/print/print-form/index.mjs +1 -1
  257. package/esm2022/lib/print/print-form/print-form.component.mjs +3 -3
  258. package/esm2022/lib/print/print.module.mjs +1 -1
  259. package/esm2022/lib/print/shared/geopdf.mjs +1 -1
  260. package/esm2022/lib/print/shared/index.mjs +1 -1
  261. package/esm2022/lib/print/shared/print.interface.mjs +1 -1
  262. package/esm2022/lib/print/shared/print.service.mjs +1 -1
  263. package/esm2022/lib/print/shared/print.type.mjs +1 -1
  264. package/esm2022/lib/query/index.mjs +1 -1
  265. package/esm2022/lib/query/query.module.mjs +1 -1
  266. package/esm2022/lib/query/shared/index.mjs +1 -1
  267. package/esm2022/lib/query/shared/query-search-source.mjs +1 -1
  268. package/esm2022/lib/query/shared/query-search-source.providers.mjs +1 -1
  269. package/esm2022/lib/query/shared/query.directive.mjs +1 -1
  270. package/esm2022/lib/query/shared/query.enums.mjs +1 -1
  271. package/esm2022/lib/query/shared/query.interfaces.mjs +1 -1
  272. package/esm2022/lib/query/shared/query.service.mjs +1 -1
  273. package/esm2022/lib/query/shared/query.utils.mjs +1 -1
  274. package/esm2022/lib/search/index.mjs +1 -1
  275. package/esm2022/lib/search/search-bar/search-bar.component.mjs +3 -3
  276. package/esm2022/lib/search/search-bar/search-bar.module.mjs +1 -1
  277. package/esm2022/lib/search/search-results/index.mjs +1 -1
  278. package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +3 -3
  279. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +3 -3
  280. package/esm2022/lib/search/search-results/search-results-item.component.mjs +3 -3
  281. package/esm2022/lib/search/search-results/search-results.component.mjs +3 -3
  282. package/esm2022/lib/search/search-results/search-results.module.mjs +1 -1
  283. package/esm2022/lib/search/search-selector/search-selector.component.mjs +3 -3
  284. package/esm2022/lib/search/search-selector/search-selector.module.mjs +1 -1
  285. package/esm2022/lib/search/search-settings/search-settings.component.mjs +3 -3
  286. package/esm2022/lib/search/search-settings/search-settings.module.mjs +1 -1
  287. package/esm2022/lib/search/search.module.mjs +1 -1
  288. package/esm2022/lib/search/shared/index.mjs +1 -1
  289. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +1 -1
  290. package/esm2022/lib/search/shared/search-source-service.providers.mjs +1 -1
  291. package/esm2022/lib/search/shared/search-source.service.mjs +1 -1
  292. package/esm2022/lib/search/shared/search.enums.mjs +1 -1
  293. package/esm2022/lib/search/shared/search.interfaces.mjs +1 -1
  294. package/esm2022/lib/search/shared/search.service.mjs +1 -1
  295. package/esm2022/lib/search/shared/search.utils.mjs +1 -1
  296. package/esm2022/lib/search/shared/sources/cadastre.mjs +1 -1
  297. package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +1 -1
  298. package/esm2022/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
  299. package/esm2022/lib/search/shared/sources/coordinates.mjs +1 -1
  300. package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +1 -1
  301. package/esm2022/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
  302. package/esm2022/lib/search/shared/sources/icherche.mjs +1 -1
  303. package/esm2022/lib/search/shared/sources/icherche.providers.mjs +1 -1
  304. package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  305. package/esm2022/lib/search/shared/sources/ilayer.mjs +1 -1
  306. package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +1 -1
  307. package/esm2022/lib/search/shared/sources/index.mjs +1 -1
  308. package/esm2022/lib/search/shared/sources/nominatim.interfaces.mjs +1 -1
  309. package/esm2022/lib/search/shared/sources/nominatim.mjs +2 -2
  310. package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +1 -1
  311. package/esm2022/lib/search/shared/sources/source.interfaces.mjs +1 -1
  312. package/esm2022/lib/search/shared/sources/source.mjs +1 -1
  313. package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
  314. package/esm2022/lib/search/shared/sources/storedqueries.mjs +1 -1
  315. package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +1 -1
  316. package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +1 -1
  317. package/esm2022/lib/search/shared/sources/workspace.mjs +1 -1
  318. package/esm2022/lib/search/shared/sources/workspace.providers.mjs +1 -1
  319. package/esm2022/lib/style/index.mjs +1 -1
  320. package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +1 -1
  321. package/esm2022/lib/style/shared/datasource/index.mjs +1 -1
  322. package/esm2022/lib/style/shared/feature/feature-style.mjs +1 -1
  323. package/esm2022/lib/style/shared/feature/index.mjs +1 -1
  324. package/esm2022/lib/style/shared/font.enum.mjs +1 -1
  325. package/esm2022/lib/style/shared/index.mjs +1 -1
  326. package/esm2022/lib/style/shared/overlay/index.mjs +1 -1
  327. package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +1 -1
  328. package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +1 -1
  329. package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +1 -1
  330. package/esm2022/lib/style/shared/vector/conversion.utils.mjs +1 -1
  331. package/esm2022/lib/style/shared/vector/index.mjs +1 -1
  332. package/esm2022/lib/style/shared/vector/vector-style.interface.mjs +1 -1
  333. package/esm2022/lib/style/style-list/index.mjs +1 -1
  334. package/esm2022/lib/style/style-list/style-list.interface.mjs +1 -1
  335. package/esm2022/lib/style/style-list/style-list.module.mjs +1 -1
  336. package/esm2022/lib/style/style-list/style-list.provider.mjs +1 -1
  337. package/esm2022/lib/style/style-list/style-list.service.mjs +1 -1
  338. package/esm2022/lib/style/style-modal/drawing/index.mjs +1 -1
  339. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +3 -3
  340. package/esm2022/lib/style/style-modal/index.mjs +1 -1
  341. package/esm2022/lib/style/style-modal/layer/index.mjs +1 -1
  342. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +3 -3
  343. package/esm2022/lib/style/style-modal/layer-button/index.mjs +1 -1
  344. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +3 -3
  345. package/esm2022/lib/style/style-modal/shared/index.mjs +1 -1
  346. package/esm2022/lib/style/style-modal/shared/style-modal.interface.mjs +1 -1
  347. package/esm2022/lib/style/style-service/draw-style.service.mjs +1 -1
  348. package/esm2022/lib/style/style-service/index.mjs +1 -1
  349. package/esm2022/lib/style/style-service/style.service.mjs +1 -1
  350. package/esm2022/lib/style/style.module.mjs +1 -1
  351. package/esm2022/lib/toast/index.mjs +1 -1
  352. package/esm2022/lib/toast/toast.component.mjs +3 -3
  353. package/esm2022/lib/toast/toast.module.mjs +1 -1
  354. package/esm2022/lib/utils/googleLinks.mjs +1 -1
  355. package/esm2022/lib/utils/id-generator.mjs +1 -1
  356. package/esm2022/lib/utils/index.mjs +1 -1
  357. package/esm2022/lib/utils/osmLinks.mjs +1 -1
  358. package/esm2022/lib/utils/propertyTypeDetector/index.mjs +1 -1
  359. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.interface.mjs +1 -1
  360. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +1 -1
  361. package/esm2022/lib/wkt/index.mjs +1 -1
  362. package/esm2022/lib/wkt/shared/index.mjs +1 -1
  363. package/esm2022/lib/wkt/shared/wkt.service.mjs +15 -15
  364. package/esm2022/lib/wkt/wkt.module.mjs +1 -1
  365. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +3 -3
  366. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +1 -1
  367. package/esm2022/lib/workspace/confirmation-popup/index.mjs +1 -1
  368. package/esm2022/lib/workspace/index.mjs +1 -1
  369. package/esm2022/lib/workspace/shared/edition-workspace.mjs +1 -1
  370. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +1 -1
  371. package/esm2022/lib/workspace/shared/feature-workspace.mjs +1 -1
  372. package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +1 -1
  373. package/esm2022/lib/workspace/shared/index.mjs +1 -1
  374. package/esm2022/lib/workspace/shared/wfs-workspace.mjs +1 -1
  375. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +1 -1
  376. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +1 -1
  377. package/esm2022/lib/workspace/shared/workspace.utils.mjs +1 -1
  378. package/esm2022/lib/workspace/widgets/index.mjs +1 -1
  379. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +3 -3
  380. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +1 -1
  381. package/esm2022/lib/workspace/widgets/widgets.mjs +1 -1
  382. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +1 -1
  383. package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +1 -1
  384. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +1 -1
  385. package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +1 -1
  386. package/esm2022/lib/workspace/workspace.module.mjs +1 -1
  387. package/esm2022/public_api.mjs +1 -1
  388. package/fesm2022/igo2-geo.mjs +183 -176
  389. package/fesm2022/igo2-geo.mjs.map +1 -1
  390. package/lib/import-export/shared/drop-geo-file.directive.d.ts +0 -2
  391. package/lib/map/shared/projection.utils.d.ts +11 -0
  392. package/locale/en.geo.json +818 -818
  393. package/locale/fr.geo.json +819 -819
  394. package/package.json +5 -5
  395. package/src/_index.scss +2 -2
  396. package/src/lib/catalog/catalog-browser/catalog-browser.theming.scss +22 -22
  397. package/src/lib/catalog/catalog.theming.scss +5 -5
  398. package/src/lib/directions/directions-results/directions-results.theming.scss +10 -10
  399. package/src/lib/directions/directions.theming.scss +6 -6
  400. package/src/lib/draw/draw.theming.scss +32 -32
  401. package/src/lib/feature/feature-details/feature-details.theming.scss +16 -16
  402. package/src/lib/feature/feature.theming.scss +4 -4
  403. package/src/lib/measure/measure.theming.scss +5 -5
  404. package/src/lib/measure/measurer/measurer.theming.scss +26 -26
  405. package/src/lib/search/search-bar/search-bar.theming.scss +33 -33
  406. package/src/lib/search/search-results/search-results-item.theme.scss +20 -20
  407. package/src/lib/search/search.theming.scss +7 -7
  408. package/src/lib/workspace/confirmation-popup/confirmation-popup.theming.scss +14 -14
  409. package/src/lib/workspace/workspace.theming.scss +6 -6
@@ -743,7 +743,7 @@ export class OgcFilterSelectionComponent {
743
743
  }
744
744
  }
745
745
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: OgcFilterSelectionComponent, deps: [{ token: i1.OGCFilterService }, { token: i2.UntypedFormBuilder }, { token: i3.DOMService }, { token: i4.ConfigService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
746
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: OgcFilterSelectionComponent, isStandalone: true, selector: "igo-ogc-filter-selection", inputs: { refreshFilters: "refreshFilters", datasource: "datasource", map: "map", checkboxesIndex: "checkboxesIndex", radioButtonsIndex: "radioButtonsIndex", baseIndex: "baseIndex", currentFilter: "currentFilter" }, providers: [DOMService], viewQueries: [{ propertyName: "sel", first: true, predicate: ["selection"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\">\r\n <div *ngFor=\"let selector of ogcFiltersSelectors\">\r\n <div\r\n class=\"pushButtonGroups\"\r\n *ngIf=\"selector.selectorType === 'pushButton'\"\r\n >\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getPushButtonsGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"pushButtonsGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentPushButtonsGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let selectorGroup of getPushButtonsGroups()\"\r\n [value]=\"selectorGroup\"\r\n >{{ selectorGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container\r\n *ngFor=\"let bundle of currentPushButtonsGroup.computedSelectors\"\r\n >\r\n <h3>{{ bundle.title }}</h3>\r\n <mat-button-toggle-group\r\n formControlName=\"pushButtons\"\r\n class=\"mat-typography\"\r\n appearance=\"legacy\"\r\n vertical=\"{{ bundleIsVertical(bundle) }}\"\r\n multiple=\"true\"\r\n >\r\n <mat-button-toggle\r\n *ngFor=\"let ogcPushButton of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcPushButton)\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n [ngStyle]=\"getButtonColor(ogcPushButton)\"\r\n [checked]=\"ogcPushButton.enabled\"\r\n (change)=\"onSelectionChange(ogcPushButton, selector.selectorType)\"\r\n [value]=\"ogcPushButton\"\r\n >{{ ogcPushButton.title }}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"checkboxGroups\" *ngIf=\"selector.selectorType === 'checkbox'\">\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getCheckboxesGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"checkboxesGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentCheckboxesGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let selectorGroup of getCheckboxesGroups()\"\r\n [value]=\"selectorGroup\"\r\n >{{ selectorGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container\r\n *ngFor=\"let bundle of currentCheckboxesGroup.computedSelectors\"\r\n >\r\n <h3>{{ bundle.title }}</h3>\r\n <div class=\"checkboxes mat-typography\">\r\n <mat-checkbox\r\n *ngFor=\"let ogcCheckbox of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcCheckbox)\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n [checked]=\"ogcCheckbox.enabled\"\r\n (change)=\"onSelectionChange(ogcCheckbox, selector.selectorType)\"\r\n [value]=\"ogcCheckbox\"\r\n >{{ ogcCheckbox.title }}\r\n </mat-checkbox>\r\n </div>\r\n <p\r\n *ngIf=\"\r\n isLessResults(bundle, 'checkbox') ||\r\n isMoreResults(bundle, 'checkbox')\r\n \"\r\n >\r\n <u\r\n *ngIf=\"isLessResults(bundle, 'checkbox')\"\r\n class=\"lessResults mat-typography\"\r\n (click)=\"displayLessResults('checkbox')\"\r\n >{{ 'igo.geo.filter.displayLessResults' | translate }}\r\n </u>\r\n <u\r\n *ngIf=\"isMoreResults(bundle, 'checkbox')\"\r\n class=\"moreResults mat-typography\"\r\n (click)=\"displayMoreResults('checkbox')\"\r\n >{{ 'igo.geo.filter.displayMoreResults' | translate }}\r\n </u>\r\n </p>\r\n </ng-container>\r\n </div>\r\n\r\n <div\r\n class=\"radioButtonGroups\"\r\n *ngIf=\"selector.selectorType === 'radioButton'\"\r\n >\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getRadioButtonsGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"radioButtonsGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentRadioButtonsGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let selectorGroup of getRadioButtonsGroups()\"\r\n [value]=\"selectorGroup\"\r\n >{{ selectorGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container\r\n *ngFor=\"let bundle of currentRadioButtonsGroup.computedSelectors\"\r\n >\r\n <h3>{{ bundle.title }}</h3>\r\n <mat-radio-group formControlName=\"radioButtons\" class=\"mat-typography\">\r\n <mat-radio-button\r\n *ngIf=\"bundle.unfiltered\"\r\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n (change)=\"emptyRadioButtons()\"\r\n >{{ 'igo.geo.filter.resetFilters' | translate }}\r\n </mat-radio-button>\r\n <mat-radio-button\r\n *ngFor=\"let ogcRadioButton of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcRadioButton)\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n [checked]=\"ogcRadioButton.enabled\"\r\n (change)=\"onSelectionChange(ogcRadioButton, selector.selectorType)\"\r\n [value]=\"ogcRadioButton\"\r\n >{{ ogcRadioButton.title }}\r\n </mat-radio-button>\r\n <p\r\n *ngIf=\"\r\n isLessResults(bundle, 'radio') || isMoreResults(bundle, 'radio')\r\n \"\r\n >\r\n <u\r\n *ngIf=\"isLessResults(bundle, 'radio')\"\r\n class=\"lessResults mat-typography\"\r\n (click)=\"displayLessResults('radio')\"\r\n >{{ 'igo.geo.filter.displayLessResults' | translate }}\r\n </u>\r\n <u\r\n *ngIf=\"isMoreResults(bundle, 'radio')\"\r\n class=\"moreResults mat-typography\"\r\n (click)=\"displayMoreResults('radio')\"\r\n >{{ 'igo.geo.filter.displayMoreResults' | translate }}\r\n </u>\r\n </p>\r\n </mat-radio-group>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"selectGroups\" *ngIf=\"selector.selectorType === 'select'\">\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getSelectGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"selectGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentSelectGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let selectorGroup of getSelectGroups()\"\r\n [value]=\"selectorGroup\"\r\n >{{ selectorGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container *ngFor=\"let bundle of currentSelectGroup.computedSelectors\">\r\n <h3>{{ bundle.title }}</h3>\r\n <div class=\"groupsSelector\">\r\n <mat-button\r\n *ngIf=\"bundle.unfiltered && !bundle.multiple\"\r\n mat-icon-button\r\n color=\"warn\"\r\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n (click)=\"emptySelect()\"\r\n >\r\n <mat-icon svgIcon=\"filter-remove\"></mat-icon>\r\n </mat-button>\r\n <mat-form-field\r\n [style.width.%]=\"bundle.width ? bundle.width : undefined\"\r\n >\r\n <div *ngIf=\"bundle.multiple; else notMulti\">\r\n <mat-select\r\n #selection\r\n [multiple]=\"bundle.multiple\"\r\n [placeholder]=\"bundle.title\"\r\n formControlName=\"selectMulti\"\r\n >\r\n <div class=\"checkboxes mat-typography\">\r\n <mat-checkbox\r\n *ngIf=\"bundle.multiple\"\r\n [(ngModel)]=\"selectAllSelected\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (change)=\"toggleAllSelection()\"\r\n >Tous\r\n </mat-checkbox>\r\n </div>\r\n <mat-option\r\n *ngFor=\"let ogcSelect of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcSelect)\"\r\n tooltip-position=\"below\"\r\n matTooltipDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n (onSelectionChange)=\"\r\n selectOptionClick($event.source.value, bundle, $event)\r\n \"\r\n [value]=\"ogcSelect\"\r\n >{{ ogcSelect.title }}\r\n </mat-option>\r\n </mat-select>\r\n </div>\r\n <ng-template #notMulti>\r\n <mat-select [placeholder]=\"bundle.title\" formControlName=\"select\">\r\n <mat-option\r\n *ngFor=\"let ogcSelect of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcSelect)\"\r\n tooltip-position=\"below\"\r\n matTooltipDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n [value]=\"ogcSelect\"\r\n (onSelectionChange)=\"\r\n selectOptionClick($event.source.value, bundle)\r\n \"\r\n >{{ ogcSelect.title }}\r\n </mat-option>\r\n </mat-select>\r\n </ng-template>\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div\r\n class=\"autocompleteGroups\"\r\n *ngIf=\"selector.selectorType === 'autocomplete'\"\r\n >\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getAutocompleteGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"autocompleteGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentAutocompleteGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let autocompleteGroup of getAutocompleteGroups()\"\r\n [value]=\"autocompleteGroup\"\r\n >{{ autocompleteGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container\r\n *ngFor=\"let bundle of currentAutocompleteGroup.computedSelectors\"\r\n >\r\n <h3>{{ bundle.title }}</h3>\r\n <div class=\"groupsSelector\">\r\n <mat-button\r\n *ngIf=\"bundle.unfiltered\"\r\n mat-icon-button\r\n color=\"warn\"\r\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n (click)=\"emptyAutocomplete()\"\r\n >\r\n <mat-icon svgIcon=\"filter-remove\"></mat-icon>\r\n </mat-button>\r\n <mat-form-field\r\n *ngIf=\"filteredOgcAutocomplete[bundle.id]\"\r\n [style.width.%]=\"bundle.width ? bundle.width : undefined\"\r\n >\r\n <input\r\n matInput\r\n type=\"text\"\r\n formControlName=\"autocomplete\"\r\n #autocomplete\r\n class=\"autocomplete\"\r\n [matAutocomplete]=\"auto\"\r\n [placeholder]=\"bundle.title\"\r\n />\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n #autocomplete\r\n (optionSelected)=\"autocompleteOptionClick($event.option.value)\"\r\n [displayWith]=\"displayFn\"\r\n >\r\n <mat-option\r\n *ngFor=\"\r\n let ogcAutocomplete of filteredOgcAutocomplete[bundle.id]\r\n | async\r\n \"\r\n [value]=\"ogcAutocomplete\"\r\n >\r\n {{ ogcAutocomplete.value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<div *ngIf=\"isTemporalOperator()\">\r\n <mat-divider></mat-divider>\r\n <h3 *ngIf=\"!currentFilter.title\">\r\n {{ 'igo.geo.filter.reportingDate' | translate }}\r\n </h3>\r\n <h3 *ngIf=\"currentFilter.title\">{{ currentFilter.title }}</h3>\r\n <igo-ogc-filter-time\r\n [datasource]=\"datasource\"\r\n [currentFilter]=\"currentFilter\"\r\n (changeProperty)=\"changeProperty($event.value, $event.pos)\"\r\n >\r\n </igo-ogc-filter-time>\r\n</div>\r\n", styles: [":host .mat-button-toggle-group{margin:5px;flex-wrap:wrap;box-shadow:none!important;width:95%}:host .checkboxes{flex-wrap:wrap;box-shadow:none}:host .groupsSelector{text-align:center}:host mat-button-toggle{display:inline-flex;border:1.5px solid black;border-radius:5px;margin:5px;white-space:normal;min-height:40px;height:auto;width:142px}:host mat-button-toggle ::ng-deep .mat-button-toggle-label-content{line-height:unset;font-size:small;display:block}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host mat-button-toggle{width:45%}}:host ::ng-deep .material-tooltip{white-space:pre-wrap}:host mat-checkbox,:host mat-radio-button{margin:7px;width:95%;display:inline-flex;font-size:larger}:host mat-checkbox ::ng-deep label,:host mat-radio-button ::ng-deep label{white-space:normal}:host mat-checkbox{vertical-align:middle}:host mat-button{padding-right:10px;cursor:pointer}:host h3{margin:7px;text-align:left}:host u{cursor:pointer;color:#00f;margin:5px}:host p{margin:unset}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i10.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i10.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i12.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i12.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i13.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i14.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i15.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i15.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: OgcFilterTimeComponent, selector: "igo-ogc-filter-time", inputs: ["datasource", "currentFilter"], outputs: ["changeProperty"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i16.TranslatePipe, name: "translate" }] });
746
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: OgcFilterSelectionComponent, isStandalone: true, selector: "igo-ogc-filter-selection", inputs: { refreshFilters: "refreshFilters", datasource: "datasource", map: "map", checkboxesIndex: "checkboxesIndex", radioButtonsIndex: "radioButtonsIndex", baseIndex: "baseIndex", currentFilter: "currentFilter" }, providers: [DOMService], viewQueries: [{ propertyName: "sel", first: true, predicate: ["selection"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\">\n <div *ngFor=\"let selector of ogcFiltersSelectors\">\n <div\n class=\"pushButtonGroups\"\n *ngIf=\"selector.selectorType === 'pushButton'\"\n >\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getPushButtonsGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"pushButtonsGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentPushButtonsGroup\"\n >\n <mat-option\n *ngFor=\"let selectorGroup of getPushButtonsGroups()\"\n [value]=\"selectorGroup\"\n >{{ selectorGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container\n *ngFor=\"let bundle of currentPushButtonsGroup.computedSelectors\"\n >\n <h3>{{ bundle.title }}</h3>\n <mat-button-toggle-group\n formControlName=\"pushButtons\"\n class=\"mat-typography\"\n appearance=\"legacy\"\n vertical=\"{{ bundleIsVertical(bundle) }}\"\n multiple=\"true\"\n >\n <mat-button-toggle\n *ngFor=\"let ogcPushButton of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcPushButton)\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n [ngStyle]=\"getButtonColor(ogcPushButton)\"\n [checked]=\"ogcPushButton.enabled\"\n (change)=\"onSelectionChange(ogcPushButton, selector.selectorType)\"\n [value]=\"ogcPushButton\"\n >{{ ogcPushButton.title }}\n </mat-button-toggle>\n </mat-button-toggle-group>\n </ng-container>\n </div>\n\n <div class=\"checkboxGroups\" *ngIf=\"selector.selectorType === 'checkbox'\">\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getCheckboxesGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"checkboxesGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentCheckboxesGroup\"\n >\n <mat-option\n *ngFor=\"let selectorGroup of getCheckboxesGroups()\"\n [value]=\"selectorGroup\"\n >{{ selectorGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container\n *ngFor=\"let bundle of currentCheckboxesGroup.computedSelectors\"\n >\n <h3>{{ bundle.title }}</h3>\n <div class=\"checkboxes mat-typography\">\n <mat-checkbox\n *ngFor=\"let ogcCheckbox of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcCheckbox)\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n [checked]=\"ogcCheckbox.enabled\"\n (change)=\"onSelectionChange(ogcCheckbox, selector.selectorType)\"\n [value]=\"ogcCheckbox\"\n >{{ ogcCheckbox.title }}\n </mat-checkbox>\n </div>\n <p\n *ngIf=\"\n isLessResults(bundle, 'checkbox') ||\n isMoreResults(bundle, 'checkbox')\n \"\n >\n <u\n *ngIf=\"isLessResults(bundle, 'checkbox')\"\n class=\"lessResults mat-typography\"\n (click)=\"displayLessResults('checkbox')\"\n >{{ 'igo.geo.filter.displayLessResults' | translate }}\n </u>\n <u\n *ngIf=\"isMoreResults(bundle, 'checkbox')\"\n class=\"moreResults mat-typography\"\n (click)=\"displayMoreResults('checkbox')\"\n >{{ 'igo.geo.filter.displayMoreResults' | translate }}\n </u>\n </p>\n </ng-container>\n </div>\n\n <div\n class=\"radioButtonGroups\"\n *ngIf=\"selector.selectorType === 'radioButton'\"\n >\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getRadioButtonsGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"radioButtonsGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentRadioButtonsGroup\"\n >\n <mat-option\n *ngFor=\"let selectorGroup of getRadioButtonsGroups()\"\n [value]=\"selectorGroup\"\n >{{ selectorGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container\n *ngFor=\"let bundle of currentRadioButtonsGroup.computedSelectors\"\n >\n <h3>{{ bundle.title }}</h3>\n <mat-radio-group formControlName=\"radioButtons\" class=\"mat-typography\">\n <mat-radio-button\n *ngIf=\"bundle.unfiltered\"\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n (change)=\"emptyRadioButtons()\"\n >{{ 'igo.geo.filter.resetFilters' | translate }}\n </mat-radio-button>\n <mat-radio-button\n *ngFor=\"let ogcRadioButton of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcRadioButton)\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n [checked]=\"ogcRadioButton.enabled\"\n (change)=\"onSelectionChange(ogcRadioButton, selector.selectorType)\"\n [value]=\"ogcRadioButton\"\n >{{ ogcRadioButton.title }}\n </mat-radio-button>\n <p\n *ngIf=\"\n isLessResults(bundle, 'radio') || isMoreResults(bundle, 'radio')\n \"\n >\n <u\n *ngIf=\"isLessResults(bundle, 'radio')\"\n class=\"lessResults mat-typography\"\n (click)=\"displayLessResults('radio')\"\n >{{ 'igo.geo.filter.displayLessResults' | translate }}\n </u>\n <u\n *ngIf=\"isMoreResults(bundle, 'radio')\"\n class=\"moreResults mat-typography\"\n (click)=\"displayMoreResults('radio')\"\n >{{ 'igo.geo.filter.displayMoreResults' | translate }}\n </u>\n </p>\n </mat-radio-group>\n </ng-container>\n </div>\n\n <div class=\"selectGroups\" *ngIf=\"selector.selectorType === 'select'\">\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getSelectGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"selectGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentSelectGroup\"\n >\n <mat-option\n *ngFor=\"let selectorGroup of getSelectGroups()\"\n [value]=\"selectorGroup\"\n >{{ selectorGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container *ngFor=\"let bundle of currentSelectGroup.computedSelectors\">\n <h3>{{ bundle.title }}</h3>\n <div class=\"groupsSelector\">\n <mat-button\n *ngIf=\"bundle.unfiltered && !bundle.multiple\"\n mat-icon-button\n color=\"warn\"\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n (click)=\"emptySelect()\"\n >\n <mat-icon svgIcon=\"filter-remove\"></mat-icon>\n </mat-button>\n <mat-form-field\n [style.width.%]=\"bundle.width ? bundle.width : undefined\"\n >\n <div *ngIf=\"bundle.multiple; else notMulti\">\n <mat-select\n #selection\n [multiple]=\"bundle.multiple\"\n [placeholder]=\"bundle.title\"\n formControlName=\"selectMulti\"\n >\n <div class=\"checkboxes mat-typography\">\n <mat-checkbox\n *ngIf=\"bundle.multiple\"\n [(ngModel)]=\"selectAllSelected\"\n [ngModelOptions]=\"{ standalone: true }\"\n (change)=\"toggleAllSelection()\"\n >Tous\n </mat-checkbox>\n </div>\n <mat-option\n *ngFor=\"let ogcSelect of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcSelect)\"\n tooltip-position=\"below\"\n matTooltipDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n (onSelectionChange)=\"\n selectOptionClick($event.source.value, bundle, $event)\n \"\n [value]=\"ogcSelect\"\n >{{ ogcSelect.title }}\n </mat-option>\n </mat-select>\n </div>\n <ng-template #notMulti>\n <mat-select [placeholder]=\"bundle.title\" formControlName=\"select\">\n <mat-option\n *ngFor=\"let ogcSelect of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcSelect)\"\n tooltip-position=\"below\"\n matTooltipDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n [value]=\"ogcSelect\"\n (onSelectionChange)=\"\n selectOptionClick($event.source.value, bundle)\n \"\n >{{ ogcSelect.title }}\n </mat-option>\n </mat-select>\n </ng-template>\n </mat-form-field>\n </div>\n </ng-container>\n </div>\n\n <div\n class=\"autocompleteGroups\"\n *ngIf=\"selector.selectorType === 'autocomplete'\"\n >\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getAutocompleteGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"autocompleteGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentAutocompleteGroup\"\n >\n <mat-option\n *ngFor=\"let autocompleteGroup of getAutocompleteGroups()\"\n [value]=\"autocompleteGroup\"\n >{{ autocompleteGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container\n *ngFor=\"let bundle of currentAutocompleteGroup.computedSelectors\"\n >\n <h3>{{ bundle.title }}</h3>\n <div class=\"groupsSelector\">\n <mat-button\n *ngIf=\"bundle.unfiltered\"\n mat-icon-button\n color=\"warn\"\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n (click)=\"emptyAutocomplete()\"\n >\n <mat-icon svgIcon=\"filter-remove\"></mat-icon>\n </mat-button>\n <mat-form-field\n *ngIf=\"filteredOgcAutocomplete[bundle.id]\"\n [style.width.%]=\"bundle.width ? bundle.width : undefined\"\n >\n <input\n matInput\n type=\"text\"\n formControlName=\"autocomplete\"\n #autocomplete\n class=\"autocomplete\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"bundle.title\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n #autocomplete\n (optionSelected)=\"autocompleteOptionClick($event.option.value)\"\n [displayWith]=\"displayFn\"\n >\n <mat-option\n *ngFor=\"\n let ogcAutocomplete of filteredOgcAutocomplete[bundle.id]\n | async\n \"\n [value]=\"ogcAutocomplete\"\n >\n {{ ogcAutocomplete.value }}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n </div>\n </ng-container>\n </div>\n </div>\n</form>\n\n<div *ngIf=\"isTemporalOperator()\">\n <mat-divider></mat-divider>\n <h3 *ngIf=\"!currentFilter.title\">\n {{ 'igo.geo.filter.reportingDate' | translate }}\n </h3>\n <h3 *ngIf=\"currentFilter.title\">{{ currentFilter.title }}</h3>\n <igo-ogc-filter-time\n [datasource]=\"datasource\"\n [currentFilter]=\"currentFilter\"\n (changeProperty)=\"changeProperty($event.value, $event.pos)\"\n >\n </igo-ogc-filter-time>\n</div>\n", styles: [":host .mat-button-toggle-group{margin:5px;flex-wrap:wrap;box-shadow:none!important;width:95%}:host .checkboxes{flex-wrap:wrap;box-shadow:none}:host .groupsSelector{text-align:center}:host mat-button-toggle{display:inline-flex;border:1.5px solid black;border-radius:5px;margin:5px;white-space:normal;min-height:40px;height:auto;width:142px}:host mat-button-toggle ::ng-deep .mat-button-toggle-label-content{line-height:unset;font-size:small;display:block}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host mat-button-toggle{width:45%}}:host ::ng-deep .material-tooltip{white-space:pre-wrap}:host mat-checkbox,:host mat-radio-button{margin:7px;width:95%;display:inline-flex;font-size:larger}:host mat-checkbox ::ng-deep label,:host mat-radio-button ::ng-deep label{white-space:normal}:host mat-checkbox{vertical-align:middle}:host mat-button{padding-right:10px;cursor:pointer}:host h3{margin:7px;text-align:left}:host u{cursor:pointer;color:#00f;margin:5px}:host p{margin:unset}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i10.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i10.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i12.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i12.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i13.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i14.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i15.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i15.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: OgcFilterTimeComponent, selector: "igo-ogc-filter-time", inputs: ["datasource", "currentFilter"], outputs: ["changeProperty"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i16.TranslatePipe, name: "translate" }] });
747
747
  }
748
748
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: OgcFilterSelectionComponent, decorators: [{
749
749
  type: Component,
@@ -767,7 +767,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
767
767
  OgcFilterTimeComponent,
768
768
  AsyncPipe,
769
769
  TranslateModule
770
- ], template: "<form [formGroup]=\"form\">\r\n <div *ngFor=\"let selector of ogcFiltersSelectors\">\r\n <div\r\n class=\"pushButtonGroups\"\r\n *ngIf=\"selector.selectorType === 'pushButton'\"\r\n >\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getPushButtonsGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"pushButtonsGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentPushButtonsGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let selectorGroup of getPushButtonsGroups()\"\r\n [value]=\"selectorGroup\"\r\n >{{ selectorGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container\r\n *ngFor=\"let bundle of currentPushButtonsGroup.computedSelectors\"\r\n >\r\n <h3>{{ bundle.title }}</h3>\r\n <mat-button-toggle-group\r\n formControlName=\"pushButtons\"\r\n class=\"mat-typography\"\r\n appearance=\"legacy\"\r\n vertical=\"{{ bundleIsVertical(bundle) }}\"\r\n multiple=\"true\"\r\n >\r\n <mat-button-toggle\r\n *ngFor=\"let ogcPushButton of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcPushButton)\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n [ngStyle]=\"getButtonColor(ogcPushButton)\"\r\n [checked]=\"ogcPushButton.enabled\"\r\n (change)=\"onSelectionChange(ogcPushButton, selector.selectorType)\"\r\n [value]=\"ogcPushButton\"\r\n >{{ ogcPushButton.title }}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"checkboxGroups\" *ngIf=\"selector.selectorType === 'checkbox'\">\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getCheckboxesGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"checkboxesGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentCheckboxesGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let selectorGroup of getCheckboxesGroups()\"\r\n [value]=\"selectorGroup\"\r\n >{{ selectorGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container\r\n *ngFor=\"let bundle of currentCheckboxesGroup.computedSelectors\"\r\n >\r\n <h3>{{ bundle.title }}</h3>\r\n <div class=\"checkboxes mat-typography\">\r\n <mat-checkbox\r\n *ngFor=\"let ogcCheckbox of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcCheckbox)\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n [checked]=\"ogcCheckbox.enabled\"\r\n (change)=\"onSelectionChange(ogcCheckbox, selector.selectorType)\"\r\n [value]=\"ogcCheckbox\"\r\n >{{ ogcCheckbox.title }}\r\n </mat-checkbox>\r\n </div>\r\n <p\r\n *ngIf=\"\r\n isLessResults(bundle, 'checkbox') ||\r\n isMoreResults(bundle, 'checkbox')\r\n \"\r\n >\r\n <u\r\n *ngIf=\"isLessResults(bundle, 'checkbox')\"\r\n class=\"lessResults mat-typography\"\r\n (click)=\"displayLessResults('checkbox')\"\r\n >{{ 'igo.geo.filter.displayLessResults' | translate }}\r\n </u>\r\n <u\r\n *ngIf=\"isMoreResults(bundle, 'checkbox')\"\r\n class=\"moreResults mat-typography\"\r\n (click)=\"displayMoreResults('checkbox')\"\r\n >{{ 'igo.geo.filter.displayMoreResults' | translate }}\r\n </u>\r\n </p>\r\n </ng-container>\r\n </div>\r\n\r\n <div\r\n class=\"radioButtonGroups\"\r\n *ngIf=\"selector.selectorType === 'radioButton'\"\r\n >\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getRadioButtonsGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"radioButtonsGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentRadioButtonsGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let selectorGroup of getRadioButtonsGroups()\"\r\n [value]=\"selectorGroup\"\r\n >{{ selectorGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container\r\n *ngFor=\"let bundle of currentRadioButtonsGroup.computedSelectors\"\r\n >\r\n <h3>{{ bundle.title }}</h3>\r\n <mat-radio-group formControlName=\"radioButtons\" class=\"mat-typography\">\r\n <mat-radio-button\r\n *ngIf=\"bundle.unfiltered\"\r\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n (change)=\"emptyRadioButtons()\"\r\n >{{ 'igo.geo.filter.resetFilters' | translate }}\r\n </mat-radio-button>\r\n <mat-radio-button\r\n *ngFor=\"let ogcRadioButton of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcRadioButton)\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n [checked]=\"ogcRadioButton.enabled\"\r\n (change)=\"onSelectionChange(ogcRadioButton, selector.selectorType)\"\r\n [value]=\"ogcRadioButton\"\r\n >{{ ogcRadioButton.title }}\r\n </mat-radio-button>\r\n <p\r\n *ngIf=\"\r\n isLessResults(bundle, 'radio') || isMoreResults(bundle, 'radio')\r\n \"\r\n >\r\n <u\r\n *ngIf=\"isLessResults(bundle, 'radio')\"\r\n class=\"lessResults mat-typography\"\r\n (click)=\"displayLessResults('radio')\"\r\n >{{ 'igo.geo.filter.displayLessResults' | translate }}\r\n </u>\r\n <u\r\n *ngIf=\"isMoreResults(bundle, 'radio')\"\r\n class=\"moreResults mat-typography\"\r\n (click)=\"displayMoreResults('radio')\"\r\n >{{ 'igo.geo.filter.displayMoreResults' | translate }}\r\n </u>\r\n </p>\r\n </mat-radio-group>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"selectGroups\" *ngIf=\"selector.selectorType === 'select'\">\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getSelectGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"selectGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentSelectGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let selectorGroup of getSelectGroups()\"\r\n [value]=\"selectorGroup\"\r\n >{{ selectorGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container *ngFor=\"let bundle of currentSelectGroup.computedSelectors\">\r\n <h3>{{ bundle.title }}</h3>\r\n <div class=\"groupsSelector\">\r\n <mat-button\r\n *ngIf=\"bundle.unfiltered && !bundle.multiple\"\r\n mat-icon-button\r\n color=\"warn\"\r\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n (click)=\"emptySelect()\"\r\n >\r\n <mat-icon svgIcon=\"filter-remove\"></mat-icon>\r\n </mat-button>\r\n <mat-form-field\r\n [style.width.%]=\"bundle.width ? bundle.width : undefined\"\r\n >\r\n <div *ngIf=\"bundle.multiple; else notMulti\">\r\n <mat-select\r\n #selection\r\n [multiple]=\"bundle.multiple\"\r\n [placeholder]=\"bundle.title\"\r\n formControlName=\"selectMulti\"\r\n >\r\n <div class=\"checkboxes mat-typography\">\r\n <mat-checkbox\r\n *ngIf=\"bundle.multiple\"\r\n [(ngModel)]=\"selectAllSelected\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (change)=\"toggleAllSelection()\"\r\n >Tous\r\n </mat-checkbox>\r\n </div>\r\n <mat-option\r\n *ngFor=\"let ogcSelect of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcSelect)\"\r\n tooltip-position=\"below\"\r\n matTooltipDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n (onSelectionChange)=\"\r\n selectOptionClick($event.source.value, bundle, $event)\r\n \"\r\n [value]=\"ogcSelect\"\r\n >{{ ogcSelect.title }}\r\n </mat-option>\r\n </mat-select>\r\n </div>\r\n <ng-template #notMulti>\r\n <mat-select [placeholder]=\"bundle.title\" formControlName=\"select\">\r\n <mat-option\r\n *ngFor=\"let ogcSelect of bundle.selectors\"\r\n [matTooltip]=\"getToolTip(ogcSelect)\"\r\n tooltip-position=\"below\"\r\n matTooltipDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n [value]=\"ogcSelect\"\r\n (onSelectionChange)=\"\r\n selectOptionClick($event.source.value, bundle)\r\n \"\r\n >{{ ogcSelect.title }}\r\n </mat-option>\r\n </mat-select>\r\n </ng-template>\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div\r\n class=\"autocompleteGroups\"\r\n *ngIf=\"selector.selectorType === 'autocomplete'\"\r\n >\r\n <mat-divider></mat-divider>\r\n <div class=\"groupsSelector\" *ngIf=\"getAutocompleteGroups().length > 1\">\r\n <mat-form-field>\r\n <mat-select\r\n formControlName=\"autocompleteGroup\"\r\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [(value)]=\"currentAutocompleteGroup\"\r\n >\r\n <mat-option\r\n *ngFor=\"let autocompleteGroup of getAutocompleteGroups()\"\r\n [value]=\"autocompleteGroup\"\r\n >{{ autocompleteGroup.title }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <ng-container\r\n *ngFor=\"let bundle of currentAutocompleteGroup.computedSelectors\"\r\n >\r\n <h3>{{ bundle.title }}</h3>\r\n <div class=\"groupsSelector\">\r\n <mat-button\r\n *ngIf=\"bundle.unfiltered\"\r\n mat-icon-button\r\n color=\"warn\"\r\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n matTooltipClass=\"material-tooltip\"\r\n (click)=\"emptyAutocomplete()\"\r\n >\r\n <mat-icon svgIcon=\"filter-remove\"></mat-icon>\r\n </mat-button>\r\n <mat-form-field\r\n *ngIf=\"filteredOgcAutocomplete[bundle.id]\"\r\n [style.width.%]=\"bundle.width ? bundle.width : undefined\"\r\n >\r\n <input\r\n matInput\r\n type=\"text\"\r\n formControlName=\"autocomplete\"\r\n #autocomplete\r\n class=\"autocomplete\"\r\n [matAutocomplete]=\"auto\"\r\n [placeholder]=\"bundle.title\"\r\n />\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n #autocomplete\r\n (optionSelected)=\"autocompleteOptionClick($event.option.value)\"\r\n [displayWith]=\"displayFn\"\r\n >\r\n <mat-option\r\n *ngFor=\"\r\n let ogcAutocomplete of filteredOgcAutocomplete[bundle.id]\r\n | async\r\n \"\r\n [value]=\"ogcAutocomplete\"\r\n >\r\n {{ ogcAutocomplete.value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<div *ngIf=\"isTemporalOperator()\">\r\n <mat-divider></mat-divider>\r\n <h3 *ngIf=\"!currentFilter.title\">\r\n {{ 'igo.geo.filter.reportingDate' | translate }}\r\n </h3>\r\n <h3 *ngIf=\"currentFilter.title\">{{ currentFilter.title }}</h3>\r\n <igo-ogc-filter-time\r\n [datasource]=\"datasource\"\r\n [currentFilter]=\"currentFilter\"\r\n (changeProperty)=\"changeProperty($event.value, $event.pos)\"\r\n >\r\n </igo-ogc-filter-time>\r\n</div>\r\n", styles: [":host .mat-button-toggle-group{margin:5px;flex-wrap:wrap;box-shadow:none!important;width:95%}:host .checkboxes{flex-wrap:wrap;box-shadow:none}:host .groupsSelector{text-align:center}:host mat-button-toggle{display:inline-flex;border:1.5px solid black;border-radius:5px;margin:5px;white-space:normal;min-height:40px;height:auto;width:142px}:host mat-button-toggle ::ng-deep .mat-button-toggle-label-content{line-height:unset;font-size:small;display:block}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host mat-button-toggle{width:45%}}:host ::ng-deep .material-tooltip{white-space:pre-wrap}:host mat-checkbox,:host mat-radio-button{margin:7px;width:95%;display:inline-flex;font-size:larger}:host mat-checkbox ::ng-deep label,:host mat-radio-button ::ng-deep label{white-space:normal}:host mat-checkbox{vertical-align:middle}:host mat-button{padding-right:10px;cursor:pointer}:host h3{margin:7px;text-align:left}:host u{cursor:pointer;color:#00f;margin:5px}:host p{margin:unset}\n"] }]
770
+ ], template: "<form [formGroup]=\"form\">\n <div *ngFor=\"let selector of ogcFiltersSelectors\">\n <div\n class=\"pushButtonGroups\"\n *ngIf=\"selector.selectorType === 'pushButton'\"\n >\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getPushButtonsGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"pushButtonsGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentPushButtonsGroup\"\n >\n <mat-option\n *ngFor=\"let selectorGroup of getPushButtonsGroups()\"\n [value]=\"selectorGroup\"\n >{{ selectorGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container\n *ngFor=\"let bundle of currentPushButtonsGroup.computedSelectors\"\n >\n <h3>{{ bundle.title }}</h3>\n <mat-button-toggle-group\n formControlName=\"pushButtons\"\n class=\"mat-typography\"\n appearance=\"legacy\"\n vertical=\"{{ bundleIsVertical(bundle) }}\"\n multiple=\"true\"\n >\n <mat-button-toggle\n *ngFor=\"let ogcPushButton of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcPushButton)\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n [ngStyle]=\"getButtonColor(ogcPushButton)\"\n [checked]=\"ogcPushButton.enabled\"\n (change)=\"onSelectionChange(ogcPushButton, selector.selectorType)\"\n [value]=\"ogcPushButton\"\n >{{ ogcPushButton.title }}\n </mat-button-toggle>\n </mat-button-toggle-group>\n </ng-container>\n </div>\n\n <div class=\"checkboxGroups\" *ngIf=\"selector.selectorType === 'checkbox'\">\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getCheckboxesGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"checkboxesGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentCheckboxesGroup\"\n >\n <mat-option\n *ngFor=\"let selectorGroup of getCheckboxesGroups()\"\n [value]=\"selectorGroup\"\n >{{ selectorGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container\n *ngFor=\"let bundle of currentCheckboxesGroup.computedSelectors\"\n >\n <h3>{{ bundle.title }}</h3>\n <div class=\"checkboxes mat-typography\">\n <mat-checkbox\n *ngFor=\"let ogcCheckbox of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcCheckbox)\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n [checked]=\"ogcCheckbox.enabled\"\n (change)=\"onSelectionChange(ogcCheckbox, selector.selectorType)\"\n [value]=\"ogcCheckbox\"\n >{{ ogcCheckbox.title }}\n </mat-checkbox>\n </div>\n <p\n *ngIf=\"\n isLessResults(bundle, 'checkbox') ||\n isMoreResults(bundle, 'checkbox')\n \"\n >\n <u\n *ngIf=\"isLessResults(bundle, 'checkbox')\"\n class=\"lessResults mat-typography\"\n (click)=\"displayLessResults('checkbox')\"\n >{{ 'igo.geo.filter.displayLessResults' | translate }}\n </u>\n <u\n *ngIf=\"isMoreResults(bundle, 'checkbox')\"\n class=\"moreResults mat-typography\"\n (click)=\"displayMoreResults('checkbox')\"\n >{{ 'igo.geo.filter.displayMoreResults' | translate }}\n </u>\n </p>\n </ng-container>\n </div>\n\n <div\n class=\"radioButtonGroups\"\n *ngIf=\"selector.selectorType === 'radioButton'\"\n >\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getRadioButtonsGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"radioButtonsGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentRadioButtonsGroup\"\n >\n <mat-option\n *ngFor=\"let selectorGroup of getRadioButtonsGroups()\"\n [value]=\"selectorGroup\"\n >{{ selectorGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container\n *ngFor=\"let bundle of currentRadioButtonsGroup.computedSelectors\"\n >\n <h3>{{ bundle.title }}</h3>\n <mat-radio-group formControlName=\"radioButtons\" class=\"mat-typography\">\n <mat-radio-button\n *ngIf=\"bundle.unfiltered\"\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n (change)=\"emptyRadioButtons()\"\n >{{ 'igo.geo.filter.resetFilters' | translate }}\n </mat-radio-button>\n <mat-radio-button\n *ngFor=\"let ogcRadioButton of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcRadioButton)\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n [checked]=\"ogcRadioButton.enabled\"\n (change)=\"onSelectionChange(ogcRadioButton, selector.selectorType)\"\n [value]=\"ogcRadioButton\"\n >{{ ogcRadioButton.title }}\n </mat-radio-button>\n <p\n *ngIf=\"\n isLessResults(bundle, 'radio') || isMoreResults(bundle, 'radio')\n \"\n >\n <u\n *ngIf=\"isLessResults(bundle, 'radio')\"\n class=\"lessResults mat-typography\"\n (click)=\"displayLessResults('radio')\"\n >{{ 'igo.geo.filter.displayLessResults' | translate }}\n </u>\n <u\n *ngIf=\"isMoreResults(bundle, 'radio')\"\n class=\"moreResults mat-typography\"\n (click)=\"displayMoreResults('radio')\"\n >{{ 'igo.geo.filter.displayMoreResults' | translate }}\n </u>\n </p>\n </mat-radio-group>\n </ng-container>\n </div>\n\n <div class=\"selectGroups\" *ngIf=\"selector.selectorType === 'select'\">\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getSelectGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"selectGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentSelectGroup\"\n >\n <mat-option\n *ngFor=\"let selectorGroup of getSelectGroups()\"\n [value]=\"selectorGroup\"\n >{{ selectorGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container *ngFor=\"let bundle of currentSelectGroup.computedSelectors\">\n <h3>{{ bundle.title }}</h3>\n <div class=\"groupsSelector\">\n <mat-button\n *ngIf=\"bundle.unfiltered && !bundle.multiple\"\n mat-icon-button\n color=\"warn\"\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n (click)=\"emptySelect()\"\n >\n <mat-icon svgIcon=\"filter-remove\"></mat-icon>\n </mat-button>\n <mat-form-field\n [style.width.%]=\"bundle.width ? bundle.width : undefined\"\n >\n <div *ngIf=\"bundle.multiple; else notMulti\">\n <mat-select\n #selection\n [multiple]=\"bundle.multiple\"\n [placeholder]=\"bundle.title\"\n formControlName=\"selectMulti\"\n >\n <div class=\"checkboxes mat-typography\">\n <mat-checkbox\n *ngIf=\"bundle.multiple\"\n [(ngModel)]=\"selectAllSelected\"\n [ngModelOptions]=\"{ standalone: true }\"\n (change)=\"toggleAllSelection()\"\n >Tous\n </mat-checkbox>\n </div>\n <mat-option\n *ngFor=\"let ogcSelect of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcSelect)\"\n tooltip-position=\"below\"\n matTooltipDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n (onSelectionChange)=\"\n selectOptionClick($event.source.value, bundle, $event)\n \"\n [value]=\"ogcSelect\"\n >{{ ogcSelect.title }}\n </mat-option>\n </mat-select>\n </div>\n <ng-template #notMulti>\n <mat-select [placeholder]=\"bundle.title\" formControlName=\"select\">\n <mat-option\n *ngFor=\"let ogcSelect of bundle.selectors\"\n [matTooltip]=\"getToolTip(ogcSelect)\"\n tooltip-position=\"below\"\n matTooltipDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n [value]=\"ogcSelect\"\n (onSelectionChange)=\"\n selectOptionClick($event.source.value, bundle)\n \"\n >{{ ogcSelect.title }}\n </mat-option>\n </mat-select>\n </ng-template>\n </mat-form-field>\n </div>\n </ng-container>\n </div>\n\n <div\n class=\"autocompleteGroups\"\n *ngIf=\"selector.selectorType === 'autocomplete'\"\n >\n <mat-divider></mat-divider>\n <div class=\"groupsSelector\" *ngIf=\"getAutocompleteGroups().length > 1\">\n <mat-form-field>\n <mat-select\n formControlName=\"autocompleteGroup\"\n [matTooltip]=\"'igo.geo.layer.legend.selectStyle' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [(value)]=\"currentAutocompleteGroup\"\n >\n <mat-option\n *ngFor=\"let autocompleteGroup of getAutocompleteGroups()\"\n [value]=\"autocompleteGroup\"\n >{{ autocompleteGroup.title }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container\n *ngFor=\"let bundle of currentAutocompleteGroup.computedSelectors\"\n >\n <h3>{{ bundle.title }}</h3>\n <div class=\"groupsSelector\">\n <mat-button\n *ngIf=\"bundle.unfiltered\"\n mat-icon-button\n color=\"warn\"\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n matTooltipClass=\"material-tooltip\"\n (click)=\"emptyAutocomplete()\"\n >\n <mat-icon svgIcon=\"filter-remove\"></mat-icon>\n </mat-button>\n <mat-form-field\n *ngIf=\"filteredOgcAutocomplete[bundle.id]\"\n [style.width.%]=\"bundle.width ? bundle.width : undefined\"\n >\n <input\n matInput\n type=\"text\"\n formControlName=\"autocomplete\"\n #autocomplete\n class=\"autocomplete\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"bundle.title\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n #autocomplete\n (optionSelected)=\"autocompleteOptionClick($event.option.value)\"\n [displayWith]=\"displayFn\"\n >\n <mat-option\n *ngFor=\"\n let ogcAutocomplete of filteredOgcAutocomplete[bundle.id]\n | async\n \"\n [value]=\"ogcAutocomplete\"\n >\n {{ ogcAutocomplete.value }}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n </div>\n </ng-container>\n </div>\n </div>\n</form>\n\n<div *ngIf=\"isTemporalOperator()\">\n <mat-divider></mat-divider>\n <h3 *ngIf=\"!currentFilter.title\">\n {{ 'igo.geo.filter.reportingDate' | translate }}\n </h3>\n <h3 *ngIf=\"currentFilter.title\">{{ currentFilter.title }}</h3>\n <igo-ogc-filter-time\n [datasource]=\"datasource\"\n [currentFilter]=\"currentFilter\"\n (changeProperty)=\"changeProperty($event.value, $event.pos)\"\n >\n </igo-ogc-filter-time>\n</div>\n", styles: [":host .mat-button-toggle-group{margin:5px;flex-wrap:wrap;box-shadow:none!important;width:95%}:host .checkboxes{flex-wrap:wrap;box-shadow:none}:host .groupsSelector{text-align:center}:host mat-button-toggle{display:inline-flex;border:1.5px solid black;border-radius:5px;margin:5px;white-space:normal;min-height:40px;height:auto;width:142px}:host mat-button-toggle ::ng-deep .mat-button-toggle-label-content{line-height:unset;font-size:small;display:block}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host mat-button-toggle{width:45%}}:host ::ng-deep .material-tooltip{white-space:pre-wrap}:host mat-checkbox,:host mat-radio-button{margin:7px;width:95%;display:inline-flex;font-size:larger}:host mat-checkbox ::ng-deep label,:host mat-radio-button ::ng-deep label{white-space:normal}:host mat-checkbox{vertical-align:middle}:host mat-button{padding-right:10px;cursor:pointer}:host h3{margin:7px;text-align:left}:host u{cursor:pointer;color:#00f;margin:5px}:host p{margin:unset}\n"] }]
771
771
  }], ctorParameters: () => [{ type: i1.OGCFilterService }, { type: i2.UntypedFormBuilder }, { type: i3.DOMService }, { type: i4.ConfigService }, { type: i0.ChangeDetectorRef }], propDecorators: { sel: [{
772
772
  type: ViewChild,
773
773
  args: ['selection']
@@ -786,4 +786,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
786
786
  }], currentFilter: [{
787
787
  type: Input
788
788
  }] } });
789
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci1zZWxlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvZmlsdGVyL29nYy1maWx0ZXItc2VsZWN0aW9uL29nYy1maWx0ZXItc2VsZWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLXNlbGVjdGlvbi9vZ2MtZmlsdGVyLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEUsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsS0FBSyxFQUVMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixrQkFBa0IsRUFFbEIsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFhLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQs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QUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsR0FBRztzQkFBWCxLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0YsYUFBYTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdGb3IsIE5nSWYsIE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgRm9ybXNNb2R1bGUsXHJcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgVW50eXBlZEZvcm1Hcm91cCxcclxuICBWYWxpZGF0b3JzXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Ub2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlJztcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XHJcbmltcG9ydCB7IE1hdE9wdGlvbiwgTWF0T3B0aW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdFJhZGlvTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcmFkaW8nO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3QsIE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuXHJcbmltcG9ydCB7IERPTU9wdGlvbnMsIERPTVNlcnZpY2UsIERPTVZhbHVlIH0gZnJvbSAnQGlnbzIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvY29uZmlnJztcclxuXHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBXTVNEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvd21zLWRhdGFzb3VyY2UnO1xyXG5pbXBvcnQgeyBPZ2NGaWx0ZXJXcml0ZXIgfSBmcm9tICcuLi8uLi9maWx0ZXIvc2hhcmVkL29nYy1maWx0ZXInO1xyXG5pbXBvcnQge1xyXG4gIElnb09nY0ZpbHRlck9iamVjdCxcclxuICBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZSxcclxuICBPZ2NQdXNoQnV0dG9uLFxyXG4gIE9nY1NlbGVjdG9yQnVuZGxlLFxyXG4gIFNlbGVjdG9yR3JvdXBcclxufSBmcm9tICcuLi8uLi9maWx0ZXIvc2hhcmVkL29nYy1maWx0ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgTWFwQmFzZSB9IGZyb20gJy4uLy4uL21hcCc7XHJcbmltcG9ydCB7IE9nY0ZpbHRlclRpbWVDb21wb25lbnQgfSBmcm9tICcuLi9vZ2MtZmlsdGVyLXRpbWUvb2djLWZpbHRlci10aW1lLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE9nY0ZpbHRlck9wZXJhdG9yIH0gZnJvbSAnLi4vc2hhcmVkL29nYy1maWx0ZXIuZW51bSc7XHJcbmltcG9ydCB7IE9HQ0ZpbHRlclNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvb2djLWZpbHRlci5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLW9nYy1maWx0ZXItc2VsZWN0aW9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vb2djLWZpbHRlci1zZWxlY3Rpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL29nYy1maWx0ZXItc2VsZWN0aW9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbRE9NU2VydmljZV0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBOZ0ZvcixcclxuICAgIE5nSWYsXHJcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIE1hdE9wdGlvbk1vZHVsZSxcclxuICAgIE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSxcclxuICAgIE5nU3R5bGUsXHJcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcclxuICAgIE1hdFJhZGlvTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxyXG4gICAgT2djRmlsdGVyVGltZUNvbXBvbmVudCxcclxuICAgIEFzeW5jUGlwZSxcclxuICAgIFRyYW5zbGF0ZU1vZHVsZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE9nY0ZpbHRlclNlbGVjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnc2VsZWN0aW9uJykgc2VsOiBNYXRTZWxlY3Q7XHJcblxyXG4gIEBJbnB1dCgpIHJlZnJlc2hGaWx0ZXJzOiAoKSA9PiB2b2lkO1xyXG5cclxuICBASW5wdXQoKSBkYXRhc291cmNlOiBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZTtcclxuXHJcbiAgQElucHV0KCkgbWFwOiBNYXBCYXNlO1xyXG5cclxuICBASW5wdXQoKSBjaGVja2JveGVzSW5kZXggPSA1O1xyXG4gIEBJbnB1dCgpIHJhZGlvQnV0dG9uc0luZGV4ID0gNTtcclxuICBASW5wdXQoKSBiYXNlSW5kZXggPSA1O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBjdXJyZW50RmlsdGVyKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEZpbHRlcjtcclxuICB9XHJcbiAgc2V0IGN1cnJlbnRGaWx0ZXIodmFsdWUpIHtcclxuICAgIHRoaXMuX2N1cnJlbnRGaWx0ZXIgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50RmlsdGVyPy5zbGlkZXJPcHRpb25zKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRGaWx0ZXIuc2xpZGVyT3B0aW9ucy5lbmFibGVkID0gZmFsc2U7IC8vIHJlbW92ZSBzbGlkZXIgdG9nZ2xlIChhbmltYXRpb24gdGVtcG9yZWxsZSlcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBfY3VycmVudEZpbHRlcjogYW55O1xyXG5cclxuICBwdWJsaWMgb2djRmlsdGVyT3BlcmF0b3IgPSBPZ2NGaWx0ZXJPcGVyYXRvcjtcclxuXHJcbiAgcHVibGljIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgcHJpdmF0ZSBvZ2NGaWx0ZXJXcml0ZXI6IE9nY0ZpbHRlcldyaXRlcjtcclxuICBwdWJsaWMgY29sb3IgPSAncHJpbWFyeSc7XHJcbiAgcHVibGljIHNlbGVjdEFsbFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgcHVibGljIHNlbGVjdEVuYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG4gIHB1YmxpYyBzZWxlY3RFbmFibGVkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcclxuICBwdWJsaWMgYXV0b2NvbXBsZXRlRW5hYmxlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcbiAgcHVibGljIGZpbHRlcmVkT2djQXV0b2NvbXBsZXRlID0ge307XHJcblxyXG4gIHB1YmxpYyBhcHBseUZpbHRlcnNUaW1lb3V0O1xyXG5cclxuICBnZXQgb2djRmlsdGVyc1NlbGVjdG9ycygpIHtcclxuICAgIGNvbnN0IG9nY1NlbGVjdG9yID0gW107XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5wdXNoQnV0dG9ucykge1xyXG4gICAgICBvZ2NTZWxlY3Rvci5wdXNoKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8ucHVzaEJ1dHRvbnMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uY2hlY2tib3hlcykge1xyXG4gICAgICBvZ2NTZWxlY3Rvci5wdXNoKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uY2hlY2tib3hlcyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5yYWRpb0J1dHRvbnMpIHtcclxuICAgICAgb2djU2VsZWN0b3IucHVzaCh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnJhZGlvQnV0dG9ucyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5zZWxlY3QpIHtcclxuICAgICAgb2djU2VsZWN0b3IucHVzaCh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnNlbGVjdCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5hdXRvY29tcGxldGUpIHtcclxuICAgICAgb2djU2VsZWN0b3IucHVzaCh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LmF1dG9jb21wbGV0ZSk7XHJcbiAgICB9XHJcbiAgICBvZ2NTZWxlY3Rvci5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGlmIChhLm9yZGVyIDwgYi5vcmRlcikge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYS5vcmRlciA+IGIub3JkZXIpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG9nY1NlbGVjdG9yO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRQdXNoQnV0dG9uc0dyb3VwKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ3B1c2hCdXR0b25zR3JvdXAnKS52YWx1ZTtcclxuICB9XHJcbiAgc2V0IGN1cnJlbnRQdXNoQnV0dG9uc0dyb3VwKHZhbHVlKSB7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IHB1c2hCdXR0b25zR3JvdXA6IHZhbHVlIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRDaGVja2JveGVzR3JvdXAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgnY2hlY2tib3hlc0dyb3VwJykudmFsdWU7XHJcbiAgfVxyXG4gIHNldCBjdXJyZW50Q2hlY2tib3hlc0dyb3VwKHZhbHVlKSB7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGNoZWNrYm94ZXNHcm91cDogdmFsdWUgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ3JhZGlvQnV0dG9uc0dyb3VwJykudmFsdWU7XHJcbiAgfVxyXG4gIHNldCBjdXJyZW50UmFkaW9CdXR0b25zR3JvdXAodmFsdWUpIHtcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgcmFkaW9CdXR0b25zR3JvdXA6IHZhbHVlIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRTZWxlY3RHcm91cCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdzZWxlY3RHcm91cCcpLnZhbHVlO1xyXG4gIH1cclxuICBzZXQgY3VycmVudFNlbGVjdEdyb3VwKHZhbHVlKSB7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IHNlbGVjdEdyb3VwOiB2YWx1ZSB9KTtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRBdXRvY29tcGxldGVHcm91cCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdhdXRvY29tcGxldGVHcm91cCcpLnZhbHVlO1xyXG4gIH1cclxuICBzZXQgY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwKHZhbHVlKSB7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGF1dG9jb21wbGV0ZUdyb3VwOiB2YWx1ZSB9KTtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdEVuYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RFbmFibGVkJC52YWx1ZTtcclxuICB9XHJcblxyXG4gIHNldCBzZWxlY3RFbmFibGVkKHZhbHVlKSB7XHJcbiAgICB0aGlzLnNlbGVjdEVuYWJsZWQkLm5leHQodmFsdWUpO1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCk7XHJcbiAgICB0aGlzLmN1cnJlbnRTZWxlY3RHcm91cC5jb21wdXRlZFNlbGVjdG9ycy5mb3JFYWNoKChjb21wU2VsZWN0KSA9PiB7XHJcbiAgICAgIGNvbXBTZWxlY3Quc2VsZWN0b3JzPy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHZhbHVlID09PSBzZWxlY3RvclxyXG4gICAgICAgICAgPyAoc2VsZWN0b3IuZW5hYmxlZCA9IHRydWUpXHJcbiAgICAgICAgICA6IChzZWxlY3Rvci5lbmFibGVkID0gZmFsc2UpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgfSwgNzUwKTtcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RFbmFibGVkcygpIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdEVuYWJsZWRzJC52YWx1ZTtcclxuICB9XHJcblxyXG4gIHNldCBzZWxlY3RFbmFibGVkcyh2YWx1ZSkge1xyXG4gICAgdGhpcy5zZWxlY3RFbmFibGVkcyQubmV4dCh2YWx1ZSk7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5hcHBseUZpbHRlcnNUaW1lb3V0KTtcclxuICAgIHRoaXMuY3VycmVudFNlbGVjdEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goKGNvbXBTZWxlY3QpID0+IHtcclxuICAgICAgY29tcFNlbGVjdC5zZWxlY3RvcnM/LmZvckVhY2goKHNlbGVjdG9yKSA9PiB7XHJcbiAgICAgICAgdmFsdWUuaW5jbHVkZXMoc2VsZWN0b3IpXHJcbiAgICAgICAgICA/IChzZWxlY3Rvci5lbmFibGVkID0gdHJ1ZSlcclxuICAgICAgICAgIDogKHNlbGVjdG9yLmVuYWJsZWQgPSBmYWxzZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hcHBseUZpbHRlcnNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICB9LCA3NTApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGF1dG9jb21wbGV0ZUVuYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRvY29tcGxldGVFbmFibGVkJC52YWx1ZTtcclxuICB9XHJcblxyXG4gIHNldCBhdXRvY29tcGxldGVFbmFibGVkKHZhbHVlKSB7XHJcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUVuYWJsZWQkLm5leHQodmFsdWUpO1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCk7XHJcbiAgICB0aGlzLmN1cnJlbnRBdXRvY29tcGxldGVHcm91cC5jb21wdXRlZFNlbGVjdG9ycy5mb3JFYWNoKChjb21wU2VsZWN0KSA9PiB7XHJcbiAgICAgIGNvbXBTZWxlY3Quc2VsZWN0b3JzPy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHZhbHVlID09PSBzZWxlY3Rvci50aXRsZVxyXG4gICAgICAgICAgPyAoc2VsZWN0b3IuZW5hYmxlZCA9IHRydWUpXHJcbiAgICAgICAgICA6IChzZWxlY3Rvci5lbmFibGVkID0gZmFsc2UpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgfSwgNzUwKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBvZ2NGaWx0ZXJTZXJ2aWNlOiBPR0NGaWx0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBkb21TZXJ2aWNlOiBET01TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHRoaXMub2djRmlsdGVyV3JpdGVyID0gbmV3IE9nY0ZpbHRlcldyaXRlcigpO1xyXG4gICAgdGhpcy5idWlsZEZvcm0oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRGb3JtKCkge1xyXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIHB1c2hCdXR0b25zOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIHJhZGlvQnV0dG9uczogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBwdXNoQnV0dG9uc0dyb3VwOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIGNoZWNrYm94ZXNHcm91cDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICByYWRpb0J1dHRvbnNHcm91cDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBzZWxlY3RHcm91cDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBzZWxlY3Q6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgc2VsZWN0TXVsdGk6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgYXV0b2NvbXBsZXRlR3JvdXA6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgYXV0b2NvbXBsZXRlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHVzaEJ1dHRvbnNHcm91cHMoKTogU2VsZWN0b3JHcm91cFtdIHtcclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnB1c2hCdXR0b25zKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnB1c2hCdXR0b25zLmdyb3VwcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENoZWNrYm94ZXNHcm91cHMoKTogU2VsZWN0b3JHcm91cFtdIHtcclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LmNoZWNrYm94ZXMpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuY2hlY2tib3hlcy5ncm91cHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSYWRpb0J1dHRvbnNHcm91cHMoKTogU2VsZWN0b3JHcm91cFtdIHtcclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnJhZGlvQnV0dG9ucykge1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5yYWRpb0J1dHRvbnMuZ3JvdXBzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0R3JvdXBzKCk6IFNlbGVjdG9yR3JvdXBbXSB7XHJcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5zZWxlY3QpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuc2VsZWN0Lmdyb3VwcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEF1dG9jb21wbGV0ZUdyb3VwcygpOiBTZWxlY3Rvckdyb3VwW10ge1xyXG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uYXV0b2NvbXBsZXRlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmF1dG9jb21wbGV0ZS5ncm91cHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzKSB7XHJcbiAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnB1c2hCdXR0b25zKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UHVzaEJ1dHRvbnNHcm91cCA9XHJcbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnB1c2hCdXR0b25zLmdyb3Vwcy5maW5kKFxyXG4gICAgICAgICAgICAoZ3JvdXApID0+IGdyb3VwLmVuYWJsZWRcclxuICAgICAgICAgICkgfHwgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5wdXNoQnV0dG9ucy5ncm91cHNbMF07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuY2hlY2tib3hlcykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudENoZWNrYm94ZXNHcm91cCA9XHJcbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmNoZWNrYm94ZXMuZ3JvdXBzLmZpbmQoXHJcbiAgICAgICAgICAgIChncm91cCkgPT4gZ3JvdXAuZW5hYmxlZFxyXG4gICAgICAgICAgKSB8fCB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmNoZWNrYm94ZXMuZ3JvdXBzWzBdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnJhZGlvQnV0dG9ucykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwID1cclxuICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMucmFkaW9CdXR0b25zLmdyb3Vwcy5maW5kKFxyXG4gICAgICAgICAgICAoZ3JvdXApID0+IGdyb3VwLmVuYWJsZWRcclxuICAgICAgICAgICkgfHwgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5yYWRpb0J1dHRvbnMuZ3JvdXBzWzBdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnNlbGVjdCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFNlbGVjdEdyb3VwID1cclxuICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuc2VsZWN0Lmdyb3Vwcy5maW5kKFxyXG4gICAgICAgICAgICAoZ3JvdXApID0+IGdyb3VwLmVuYWJsZWRcclxuICAgICAgICAgICkgfHwgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5zZWxlY3QuZ3JvdXBzWzBdO1xyXG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0RW5hYmxlZCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0U2VsZWN0RG9tVmFsdWVzKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuYXV0b2NvbXBsZXRlKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXV0b2NvbXBsZXRlR3JvdXAgPVxyXG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5hdXRvY29tcGxldGUuZ3JvdXBzLmZpbmQoXHJcbiAgICAgICAgICAgIChncm91cCkgPT4gZ3JvdXAuZW5hYmxlZFxyXG4gICAgICAgICAgKSB8fCB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmF1dG9jb21wbGV0ZS5ncm91cHNbMF07XHJcbiAgICAgICAgdGhpcy5nZXRBdXRvY29tcGxldGVFbmFibGVkKCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRBdXRvY29tcGxldGVEb21WYWx1ZXMoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybVxyXG4gICAgICAuZ2V0KCdwdXNoQnV0dG9uc0dyb3VwJylcclxuICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSg3NTApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLm9uUHVzaEJ1dHRvbnNDaGFuZ2VHcm91cCgpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtXHJcbiAgICAgIC5nZXQoJ2NoZWNrYm94ZXNHcm91cCcpXHJcbiAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vbkNoZWNrYm94ZXNDaGFuZ2VHcm91cCgpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtXHJcbiAgICAgIC5nZXQoJ3JhZGlvQnV0dG9uc0dyb3VwJylcclxuICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSg3NTApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLm9uUmFkaW9CdXR0b25zQ2hhbmdlR3JvdXAoKTtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZm9ybVxyXG4gICAgICAuZ2V0KCdzZWxlY3RHcm91cCcpXHJcbiAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblNlbGVjdENoYW5nZUdyb3VwKCk7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmZvcm1cclxuICAgICAgLmdldCgnYXV0b2NvbXBsZXRlR3JvdXAnKVxyXG4gICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDc1MCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMub25BdXRvY29tcGxldGVDaGFuZ2VHcm91cCgpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtXHJcbiAgICAgIC5nZXQoJ3B1c2hCdXR0b25zJylcclxuICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSg3NTApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZm9ybVxyXG4gICAgICAuZ2V0KCdyYWRpb0J1dHRvbnMnKVxyXG4gICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDc1MCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZWxlY3RFbmFibGVkKCkge1xyXG4gICAgY29uc3QgZW5hYmxlZHMgPSBbXTtcclxuICAgIGxldCBlbmFibGVkO1xyXG4gICAgdGhpcy5jdXJyZW50U2VsZWN0R3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMuZm9yRWFjaCgoY29tcFNlbGVjdCkgPT4ge1xyXG4gICAgICBpZiAoY29tcFNlbGVjdC5tdWx0aXBsZSkge1xyXG4gICAgICAgIGNvbXBTZWxlY3Quc2VsZWN0b3JzPy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgICAgaWYgKHNlbGVjdG9yLmVuYWJsZWQpIHtcclxuICAgICAgICAgICAgZW5hYmxlZHMucHVzaChzZWxlY3Rvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RFbmFibGVkcyA9IGVuYWJsZWRzO1xyXG4gICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1snc2VsZWN0TXVsdGknXS5zZXRWYWx1ZShlbmFibGVkcyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29tcFNlbGVjdC5zZWxlY3RvcnM/LmZvckVhY2goKHNlbGVjdG9yKSA9PiB7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0b3IuZW5hYmxlZCkge1xyXG4gICAgICAgICAgICBlbmFibGVkID0gc2VsZWN0b3I7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydzZWxlY3QnXS5yZXNldChlbmFibGVkKTtcclxuICAgICAgICB0aGlzLnNlbGVjdEVuYWJsZWQkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmZvcm0uY29udHJvbHNbJ3NlbGVjdCddLnZhbHVlICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbJ3NlbGVjdCddLnNldFZhbHVlKHZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNlbGVjdEVuYWJsZWQgPSBlbmFibGVkO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QXV0b2NvbXBsZXRlRW5hYmxlZCgpIHtcclxuICAgIGxldCBlbmFibGVkO1xyXG4gICAgdGhpcy5jdXJyZW50QXV0b2NvbXBsZXRlR3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMuZm9yRWFjaCgoY29tcFNlbGVjdCkgPT4ge1xyXG4gICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycz8uZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcclxuICAgICAgICBpZiAoc2VsZWN0b3IuZW5hYmxlZCkge1xyXG4gICAgICAgICAgY29uc3QgZG9tID0ge1xyXG4gICAgICAgICAgICBpZDogc2VsZWN0b3IuZmlsdGVycy5leHByZXNzaW9uLFxyXG4gICAgICAgICAgICB2YWx1ZTogc2VsZWN0b3IudGl0bGVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBlbmFibGVkID0gc2VsZWN0b3IudGl0bGU7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbJ2F1dG9jb21wbGV0ZSddLnNldFZhbHVlKGRvbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5hdXRvY29tcGxldGVFbmFibGVkID0gZW5hYmxlZDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VG9vbFRpcChzZWxlY3Rvcik6IHN0cmluZyB7XHJcbiAgICBsZXQgdG9vbFRpcDtcclxuICAgIGlmIChzZWxlY3Rvci50b29sdGlwKSB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdG9yLnRvb2x0aXApKSB7XHJcbiAgICAgICAgdG9vbFRpcCA9IHNlbGVjdG9yLnRvb2x0aXAuam9pbignXFxuJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdG9vbFRpcCA9IHNlbGVjdG9yLnRvb2x0aXA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0b29sVGlwIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0U2VsZWN0RG9tVmFsdWVzKCkge1xyXG4gICAgZm9yIChjb25zdCBidW5kbGUgb2YgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5zZWxlY3QuYnVuZGxlcykge1xyXG4gICAgICBpZiAoYnVuZGxlLmRvbVNlbGVjdG9ycykge1xyXG4gICAgICAgIGxldCBkb21WYWx1ZXM7XHJcbiAgICAgICAgZm9yIChjb25zdCBkb21TZWxlY3RvciBvZiBidW5kbGUuZG9tU2VsZWN0b3JzKSB7XHJcbiAgICAgICAgICBsZXQgZmlsdGVyRE9NO1xyXG4gICAgICAgICAgZm9yIChjb25zdCBkb21PcHRpb25zIG9mIHRoaXMuY29uZmlnU2VydmljZS5nZXRDb25maWc8RE9NT3B0aW9uc1tdPihcclxuICAgICAgICAgICAgJ2RvbSdcclxuICAgICAgICAgICkpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIGRvbVNlbGVjdG9yLmlkID09PSBkb21PcHRpb25zLmlkIHx8XHJcbiAgICAgICAgICAgICAgZG9tU2VsZWN0b3IubmFtZSA9PT0gZG9tT3B0aW9ucy5uYW1lXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGZpbHRlckRPTSA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiBkb21PcHRpb25zLmlkLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBkb21PcHRpb25zLnVybCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IGRvbU9wdGlvbnMubmFtZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlczogZG9tT3B0aW9ucy52YWx1ZXNcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmaWx0ZXJET00udXJsXHJcbiAgICAgICAgICAgID8gKGRvbVZhbHVlcyA9IChhd2FpdCB0aGlzLmRvbVNlcnZpY2UuZ2V0RG9tKFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyRE9NXHJcbiAgICAgICAgICAgICAgKSkgYXMgRE9NVmFsdWVbXSlcclxuICAgICAgICAgICAgOiAoZG9tVmFsdWVzID0gZmlsdGVyRE9NLnZhbHVlcyk7XHJcblxyXG4gICAgICAgICAgaWYgKGRvbVZhbHVlcykge1xyXG4gICAgICAgICAgICBsZXQgbmV3QnVuZGxlID0gYnVuZGxlO1xyXG4gICAgICAgICAgICBuZXdCdW5kbGUuc2VsZWN0b3JzID0gW107XHJcbiAgICAgICAgICAgIGxldCBzZWxlY3RvcjtcclxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBkb21WYWx1ZXMpIHtcclxuICAgICAgICAgICAgICBpZiAoYnVuZGxlLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZW5hYmxlZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZHM/LmZpbmQoKHNlbCkgPT4gc2VsLnRpdGxlID09PSB2YWx1ZS52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgPyAoZW5hYmxlZCA9IHRydWUpXHJcbiAgICAgICAgICAgICAgICAgIDogKGVuYWJsZWQgPSBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHtcclxuICAgICAgICAgICAgICAgICAgdGl0bGU6IHZhbHVlLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICBlbmFibGVkLFxyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IGRvbVNlbGVjdG9yLm9wZXJhdG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZTogZG9tU2VsZWN0b3IucHJvcGVydHlOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHZhbHVlLmlkXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICB0aXRsZTogdmFsdWUudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RFbmFibGVkPy50aXRsZSA9PT0gdmFsdWUudmFsdWUgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogZG9tU2VsZWN0b3Iub3BlcmF0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBkb21TZWxlY3Rvci5wcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogdmFsdWUuaWRcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbmV3QnVuZGxlLnNlbGVjdG9ycy5wdXNoKHNlbGVjdG9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmdldFNlbGVjdEdyb3VwcygpXHJcbiAgICAgICAgICAgICAgLmZpbmQoKGdyb3VwKSA9PiBncm91cC5pZHMuaW5jbHVkZXMobmV3QnVuZGxlLmlkKSlcclxuICAgICAgICAgICAgICAuY29tcHV0ZWRTZWxlY3RvcnMuZmluZChcclxuICAgICAgICAgICAgICAgIChjb21wKSA9PiBjb21wLnRpdGxlID09PSBuZXdCdW5kbGUudGl0bGVcclxuICAgICAgICAgICAgICApLnNlbGVjdG9ycyA9IG5ld0J1bmRsZS5zZWxlY3RvcnM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0RW5hYmxlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRBdXRvY29tcGxldGVEb21WYWx1ZXMoKSB7XHJcbiAgICBmb3IgKGNvbnN0IGJ1bmRsZSBvZiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmF1dG9jb21wbGV0ZVxyXG4gICAgICAuYnVuZGxlcykge1xyXG4gICAgICBpZiAoYnVuZGxlLmRvbVNlbGVjdG9ycykge1xyXG4gICAgICAgIGxldCBkb21WYWx1ZXM7XHJcbiAgICAgICAgZm9yIChjb25zdCBkb21TZWxlY3RvciBvZiBidW5kbGUuZG9tU2VsZWN0b3JzKSB7XHJcbiAgICAgICAgICBsZXQgZmlsdGVyRE9NO1xyXG4gICAgICAgICAgZm9yIChjb25zdCBkb21PcHRpb25zIG9mIHRoaXMuY29uZmlnU2VydmljZS5nZXRDb25maWc8RE9NT3B0aW9uc1tdPihcclxuICAgICAgICAgICAgJ2RvbSdcclxuICAgICAgICAgICkpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIGRvbVNlbGVjdG9yLmlkID09PSBkb21PcHRpb25zLmlkIHx8XHJcbiAgICAgICAgICAgICAgZG9tU2VsZWN0b3IubmFtZSA9PT0gZG9tT3B0aW9ucy5uYW1lXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGZpbHRlckRPTSA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiBkb21PcHRpb25zLmlkLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBkb21PcHRpb25zLnVybCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IGRvbU9wdGlvbnMubmFtZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlczogZG9tT3B0aW9ucy52YWx1ZXNcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmaWx0ZXJET00udXJsXHJcbiAgICAgICAgICAgID8gKGRvbVZhbHVlcyA9IChhd2FpdCB0aGlzLmRvbVNlcnZpY2UuZ2V0RG9tKFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyRE9NXHJcbiAgICAgICAgICAgICAgKSkgYXMgRE9NVmFsdWVbXSlcclxuICAgICAgICAgICAgOiAoZG9tVmFsdWVzID0gZmlsdGVyRE9NLnZhbHVlcyk7XHJcblxyXG4gICAgICAgICAgaWYgKGRvbVZhbHVlcykge1xyXG4gICAgICAgICAgICBsZXQgbmV3QnVuZGxlID0gYnVuZGxlO1xyXG4gICAgICAgICAgICBuZXdCdW5kbGUuc2VsZWN0b3JzID0gW107XHJcbiAgICAgICAgICAgIGxldCBzZWxlY3RvcjtcclxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBkb21WYWx1ZXMpIHtcclxuICAgICAgICAgICAgICBzZWxlY3RvciA9IHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiB2YWx1ZS52YWx1ZSxcclxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRW5hYmxlZCAmJlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUVuYWJsZWQgPT09IHZhbHVlLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGZpbHRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IGRvbVNlbGVjdG9yLm9wZXJhdG9yLFxyXG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IGRvbVNlbGVjdG9yLnByb3BlcnR5TmFtZSxcclxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogdmFsdWUuaWRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIG5ld0J1bmRsZS5zZWxlY3RvcnMucHVzaChzZWxlY3Rvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5nZXRBdXRvY29tcGxldGVHcm91cHMoKVxyXG4gICAgICAgICAgICAgIC5maW5kKChncm91cCkgPT4gZ3JvdXAuaWRzLmluY2x1ZGVzKG5ld0J1bmRsZS5pZCkpXHJcbiAgICAgICAgICAgICAgLmNvbXB1dGVkU2VsZWN0b3JzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAoY29tcCkgPT4gY29tcC50aXRsZSA9PT0gbmV3QnVuZGxlLnRpdGxlXHJcbiAgICAgICAgICAgICAgKS5zZWxlY3RvcnMgPSBuZXdCdW5kbGUuc2VsZWN0b3JzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9nY0F1dG9jb21wbGV0ZVtidW5kbGUuaWRdID0gbmV3IE9ic2VydmFibGU8YW55W10+KCk7XHJcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9nY0F1dG9jb21wbGV0ZVtidW5kbGUuaWRdID0gdGhpcy5mb3JtLmNvbnRyb2xzW1xyXG4gICAgICAgICAgJ2F1dG9jb21wbGV0ZSdcclxuICAgICAgICBdLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICAgICAgbWFwKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGRvbVZhbHVlcz8uZmlsdGVyKChvcHRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlck5vcm1hbGl6ZWQgPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICA/IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJylcclxuICAgICAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVOYW1lTm9ybWFsaXplZCA9IG9wdGlvbi52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZlYXR1cmVOYW1lTm9ybWFsaXplZC5pbmNsdWRlcyhmaWx0ZXJOb3JtYWxpemVkKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBnZXRCdXR0b25TdHlsZShwYjogT2djUHVzaEJ1dHRvbik6IHt9IHtcclxuXHJcbiAgLy8gICBsZXQgc3R5bGVzO1xyXG4gIC8vICAgaWYgKHBiLmNvbG9yKSB7XHJcbiAgLy8gICAgIHN0eWxlcyA9IHtcclxuICAvLyAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IHBiLmVuYWJsZWQgPyBgcmdiYSgke3BiLmNvbG9yfSlgIDogYHJnYmEoMjU1LDI1NSwyNTUsMClgXHJcbiAgLy8gICAgIH07XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICBzdHlsZXMgPSB7XHJcbiAgLy8gICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBwYi5lbmFibGVkID8gJ2FjY2VudCc6IGByZ2JhKDI1NSwyNTUsMjU1LDApYCxcclxuICAvLyAgICAgICAnY29sb3InOiBwYi5lbmFibGVkID8gYHJnYmEoMCwwLDAsMC45KWAgOiBgcmdiYSgzMywzMywzMywwLjM4KWBcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgcmV0dXJuIHN0eWxlcztcclxuICAvLyB9XHJcblxyXG4gIGdldEJ1dHRvbkNvbG9yKHB1c2hCdXR0b246IE9nY1B1c2hCdXR0b24pOiB7fSB7XHJcbiAgICBsZXQgc3R5bGVzO1xyXG4gICAgaWYgKHB1c2hCdXR0b24uY29sb3IgJiYgcHVzaEJ1dHRvbi5lbmFibGVkKSB7XHJcbiAgICAgIHN0eWxlcyA9IHtcclxuICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGByZ2JhKCR7cHVzaEJ1dHRvbi5jb2xvcn0pYFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0eWxlcztcclxuICB9XHJcblxyXG4gIGJ1bmRsZUlzVmVydGljYWwoYnVuZGxlOiBPZ2NTZWxlY3RvckJ1bmRsZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGJ1bmRsZS52ZXJ0aWNhbCA/IGJ1bmRsZS52ZXJ0aWNhbCA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblB1c2hCdXR0b25zQ2hhbmdlR3JvdXAoKSB7XHJcbiAgICB0aGlzLmdldFB1c2hCdXR0b25zR3JvdXBzKCkubWFwKChncm91cCkgPT4gKGdyb3VwLmVuYWJsZWQgPSBmYWxzZSkpO1xyXG4gICAgdGhpcy5nZXRQdXNoQnV0dG9uc0dyb3VwcygpLmZpbmQoXHJcbiAgICAgIChncm91cCkgPT4gZ3JvdXAgPT09IHRoaXMuY3VycmVudFB1c2hCdXR0b25zR3JvdXBcclxuICAgICkuZW5hYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQ2hlY2tib3hlc0NoYW5nZUdyb3VwKCkge1xyXG4gICAgdGhpcy5nZXRDaGVja2JveGVzR3JvdXBzKCkubWFwKChncm91cCkgPT4gKGdyb3VwLmVuYWJsZWQgPSBmYWxzZSkpO1xyXG4gICAgdGhpcy5nZXRDaGVja2JveGVzR3JvdXBzKCkuZmluZChcclxuICAgICAgKGdyb3VwKSA9PiBncm91cCA9PT0gdGhpcy5jdXJyZW50Q2hlY2tib3hlc0dyb3VwXHJcbiAgICApLmVuYWJsZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblJhZGlvQnV0dG9uc0NoYW5nZUdyb3VwKCkge1xyXG4gICAgdGhpcy5nZXRSYWRpb0J1dHRvbnNHcm91cHMoKS5tYXAoKGdyb3VwKSA9PiAoZ3JvdXAuZW5hYmxlZCA9IGZhbHNlKSk7XHJcbiAgICB0aGlzLmdldFJhZGlvQnV0dG9uc0dyb3VwcygpLmZpbmQoXHJcbiAgICAgIChncm91cCkgPT4gZ3JvdXAgPT09IHRoaXMuY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwXHJcbiAgICApLmVuYWJsZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblNlbGVjdENoYW5nZUdyb3VwKCkge1xyXG4gICAgdGhpcy5nZXRTZWxlY3RHcm91cHMoKS5tYXAoKGdyb3VwKSA9PiAoZ3JvdXAuZW5hYmxlZCA9IGZhbHNlKSk7XHJcbiAgICB0aGlzLmdldFNlbGVjdEdyb3VwcygpLmZpbmQoXHJcbiAgICAgIChncm91cCkgPT4gZ3JvdXAgPT09IHRoaXMuY3VycmVudFNlbGVjdEdyb3VwXHJcbiAgICApLmVuYWJsZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkF1dG9jb21wbGV0ZUNoYW5nZUdyb3VwKCkge1xyXG4gICAgdGhpcy5nZXRBdXRvY29tcGxldGVHcm91cHMoKS5tYXAoKGdyb3VwKSA9PiAoZ3JvdXAuZW5hYmxlZCA9IGZhbHNlKSk7XHJcbiAgICB0aGlzLmdldEF1dG9jb21wbGV0ZUdyb3VwcygpLmZpbmQoXHJcbiAgICAgIChncm91cCkgPT4gZ3JvdXAgPT09IHRoaXMuY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwXHJcbiAgICApLmVuYWJsZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2UoY3VycmVudE9nY1NlbGVjdGlvbj8sIHNlbGVjdG9yVHlwZT8pIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQpO1xyXG4gICAgaWYgKHNlbGVjdG9yVHlwZSA9PT0gJ3JhZGlvQnV0dG9uJykge1xyXG4gICAgICB0aGlzLmVtcHR5UmFkaW9CdXR0b25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGN1cnJlbnRPZ2NTZWxlY3Rpb24pIHtcclxuICAgICAgY3VycmVudE9nY1NlbGVjdGlvbi5lbmFibGVkID0gIWN1cnJlbnRPZ2NTZWxlY3Rpb24uZW5hYmxlZDtcclxuICAgIH1cclxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgfSwgNzUwKTtcclxuICB9XHJcblxyXG4gIGVtcHR5UmFkaW9CdXR0b25zKCkge1xyXG4gICAgdGhpcy5jdXJyZW50UmFkaW9CdXR0b25zR3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMuZm9yRWFjaCgoY29tcFNlbGVjdCkgPT4ge1xyXG4gICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycy5tYXAoKHNlbGVjdG9yKSA9PiAoc2VsZWN0b3IuZW5hYmxlZCA9IGZhbHNlKSk7XHJcblxyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICB9LCA3NTApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBlbXB0eVNlbGVjdCgpIHtcclxuICAgIHRoaXMuc2VsZWN0RW5hYmxlZCA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGVtcHR5QXV0b2NvbXBsZXRlKCkge1xyXG4gICAgdGhpcy5hdXRvY29tcGxldGVFbmFibGVkID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzWydhdXRvY29tcGxldGUnXS5zZXRWYWx1ZSgnJyk7XHJcbiAgICB0aGlzLmZvcm0uY29udHJvbHNbJ2F1dG9jb21wbGV0ZSddLm1hcmtBc1VudG91Y2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQWxsU2VsZWN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0QWxsU2VsZWN0ZWQpIHtcclxuICAgICAgY29uc3QgZW5hYmxlZHMgPSBbXTtcclxuICAgICAgdGhpcy5jdXJyZW50U2VsZWN0R3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMuZm9yRWFjaCgoY29tcFNlbGVjdCkgPT4ge1xyXG4gICAgICAgIGNvbXBTZWxlY3Quc2VsZWN0b3JzPy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgICAgZW5hYmxlZHMucHVzaChzZWxlY3Rvcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNlbC5vcHRpb25zLmZvckVhY2goKGl0ZW06IE1hdE9wdGlvbikgPT4gaXRlbS5zZWxlY3QoKSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMgPSBlbmFibGVkcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsLm9wdGlvbnMuZm9yRWFjaCgoaXRlbTogTWF0T3B0aW9uKSA9PiBpdGVtLmRlc2VsZWN0KCkpO1xyXG4gICAgICB0aGlzLnNlbGVjdEVuYWJsZWRzID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RPcHRpb25DbGljayh2YWx1ZSwgYnVuZGxlLCBldmVudD8pIHtcclxuICAgIGlmIChidW5kbGUubXVsdGlwbGUpIHtcclxuICAgICAgY29uc3QgZW5hYmxlZHMgPSB0aGlzLnNlbGVjdEVuYWJsZWRzO1xyXG4gICAgICBsZXQgbmV3U3RhdHVzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZWwub3B0aW9ucy5mb3JFYWNoKChpdGVtOiBNYXRPcHRpb24pID0+IHtcclxuICAgICAgICBpZiAoIWl0ZW0uc2VsZWN0ZWQpIHtcclxuICAgICAgICAgIG5ld1N0YXR1cyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsU2VsZWN0ZWQgPSBuZXdTdGF0dXM7XHJcbiAgICAgIGlmIChldmVudC5pc1VzZXJJbnB1dCkge1xyXG4gICAgICAgIGlmIChlbmFibGVkcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGZvciAoY29uc3QgZW5hYmxlZCBvZiBlbmFibGVkcykge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZC50aXRsZSA9PT0gdmFsdWUudGl0bGUpIHtcclxuICAgICAgICAgICAgICBpZiAoZW5hYmxlZC5lbmFibGVkICYmIHZhbHVlLmVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIGVuYWJsZWRzLnNwbGljZShlbmFibGVkcy5pbmRleE9mKGVuYWJsZWQpLCAxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMgPSBlbmFibGVkcztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlbmFibGVkcy5pbmRleE9mKGVuYWJsZWQpID09PSBlbmFibGVkcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgZW5hYmxlZHMucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RFbmFibGVkcyA9IGVuYWJsZWRzO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGVuYWJsZWRzLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RFbmFibGVkcyA9IGVuYWJsZWRzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RFbmFibGVkID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhdXRvY29tcGxldGVPcHRpb25DbGljayh2YWx1ZSkge1xyXG4gICAgdGhpcy5hdXRvY29tcGxldGVFbmFibGVkID0gdmFsdWUudmFsdWU7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5Rm4oZG9tKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBkb20gPyBkb20udmFsdWUgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5RmlsdGVycygpIHtcclxuICAgIGxldCBmaWx0ZXJRdWVyeVN0cmluZyA9ICcnO1xyXG4gICAgY29uc3QgY29uZGl0aW9ucyA9IFtdO1xyXG4gICAgY29uc3QgY3VycmVudEdyb3VwcyA9IFtcclxuICAgICAgdGhpcy5jdXJyZW50UHVzaEJ1dHRvbnNHcm91cCxcclxuICAgICAgdGhpcy5jdXJyZW50Q2hlY2tib3hlc0dyb3VwLFxyXG4gICAgICB0aGlzLmN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cCxcclxuICAgICAgdGhpcy5jdXJyZW50U2VsZWN0R3JvdXAsXHJcbiAgICAgIHRoaXMuY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwXHJcbiAgICBdO1xyXG4gICAgZm9yIChjb25zdCBjdXJyZW50R3JvdXAgb2YgY3VycmVudEdyb3Vwcykge1xyXG4gICAgICBpZiAoY3VycmVudEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzKSB7XHJcbiAgICAgICAgY3VycmVudEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLm1hcCgoc2VsZWN0b3JCdW5kbGUpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGJ1bmRsZUNvbmRpdGlvbiA9IFtdO1xyXG4gICAgICAgICAgc2VsZWN0b3JCdW5kbGUuc2VsZWN0b3JzXHJcbiAgICAgICAgICAgID8uZmlsdGVyKChvZ2NTZWxlY3RvcikgPT4gb2djU2VsZWN0b3IuZW5hYmxlZCA9PT0gdHJ1ZSlcclxuICAgICAgICAgICAgLmZvckVhY2goKGVuYWJsZWRTZWxlY3RvcikgPT5cclxuICAgICAgICAgICAgICBidW5kbGVDb25kaXRpb24ucHVzaChlbmFibGVkU2VsZWN0b3IuZmlsdGVycylcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChidW5kbGVDb25kaXRpb24ubGVuZ3RoID49IDEpIHtcclxuICAgICAgICAgICAgaWYgKGJ1bmRsZUNvbmRpdGlvbi5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICBjb25kaXRpb25zLnB1c2goYnVuZGxlQ29uZGl0aW9uWzBdKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25kaXRpb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgbG9naWNhbDogc2VsZWN0b3JCdW5kbGUubG9naWNhbCxcclxuICAgICAgICAgICAgICAgIGZpbHRlcnM6IGJ1bmRsZUNvbmRpdGlvblxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzVGVtcG9yYWxPcGVyYXRvcigpICYmIHRoaXMuX2N1cnJlbnRGaWx0ZXIuYWN0aXZlKSB7XHJcbiAgICAgIGNvbmRpdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmludGVyZmFjZU9nY0ZpbHRlcnNbMF1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChjb25kaXRpb25zLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgIGZpbHRlclF1ZXJ5U3RyaW5nID0gdGhpcy5vZ2NGaWx0ZXJXcml0ZXIuYnVpbGRGaWx0ZXIoXHJcbiAgICAgICAgY29uZGl0aW9ucy5sZW5ndGggPT09IDFcclxuICAgICAgICAgID8gY29uZGl0aW9uc1swXVxyXG4gICAgICAgICAgOiAoeyBsb2dpY2FsOiAnQW5kJywgZmlsdGVyczogY29uZGl0aW9ucyB9IGFzIElnb09nY0ZpbHRlck9iamVjdClcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy50eXBlID09PSAnd21zJykge1xyXG4gICAgICB0aGlzLm9nY0ZpbHRlclNlcnZpY2UuZmlsdGVyQnlPZ2MoXHJcbiAgICAgICAgdGhpcy5kYXRhc291cmNlIGFzIFdNU0RhdGFTb3VyY2UsXHJcbiAgICAgICAgZmlsdGVyUXVlcnlTdHJpbmdcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy50eXBlID09PSAnd2ZzJykge1xyXG4gICAgICAvLyBUT0RPOiBDaGVjayBob3cgdG8gcHJldmVudCB3ZnMgdG8gcmVmcmVzaCB3aGVuIGZpbHRlciBpY29uIGlzIHB1c2hlZC4uLlxyXG4gICAgICB0aGlzLmRhdGFzb3VyY2Uub2wucmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhc291cmNlLnNldE9nY0ZpbHRlcnModGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycywgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBpc01vcmVSZXN1bHRzKGJ1bmRsZSwgdHlwZSkge1xyXG4gICAgbGV0IHNlbGVjdG9yc0xlbmd0aCA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IHNlbGVjdG9ycyBvZiBidW5kbGUuc2VsZWN0b3JzKSB7XHJcbiAgICAgIHNlbGVjdG9yc0xlbmd0aCsrO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW5kZXggPVxyXG4gICAgICB0eXBlID09PSAncmFkaW8nID8gdGhpcy5yYWRpb0J1dHRvbnNJbmRleCA6IHRoaXMuY2hlY2tib3hlc0luZGV4O1xyXG4gICAgcmV0dXJuIHNlbGVjdG9yc0xlbmd0aCA+IGluZGV4O1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheU1vcmVSZXN1bHRzKHR5cGUpIHtcclxuICAgIHR5cGUgPT09ICdyYWRpbydcclxuICAgICAgPyAodGhpcy5yYWRpb0J1dHRvbnNJbmRleCArPSA1KVxyXG4gICAgICA6ICh0aGlzLmNoZWNrYm94ZXNJbmRleCArPSA1KTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlzTGVzc1Jlc3VsdHMoYnVuZGxlLCB0eXBlKSB7XHJcbiAgICBsZXQgc2VsZWN0b3JzTGVuZ3RoID0gMDtcclxuICAgIGZvciAoY29uc3Qgc2VsZWN0b3JzIG9mIGJ1bmRsZS5zZWxlY3RvcnMpIHtcclxuICAgICAgc2VsZWN0b3JzTGVuZ3RoKys7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbmRleCA9XHJcbiAgICAgIHR5cGUgPT09ICdyYWRpbycgPyB0aGlzLnJhZGlvQnV0dG9uc0luZGV4IDogdGhpcy5jaGVja2JveGVzSW5kZXg7XHJcbiAgICByZXR1cm4gdGhpcy5iYXNlSW5kZXggIT09IGluZGV4ICYmIHNlbGVjdG9yc0xlbmd0aCA+IHRoaXMuYmFzZUluZGV4O1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheUxlc3NSZXN1bHRzKHR5cGUpIHtcclxuICAgIHR5cGUgPT09ICdyYWRpbydcclxuICAgICAgPyAodGhpcy5yYWRpb0J1dHRvbnNJbmRleCA9IHRoaXMuYmFzZUluZGV4KVxyXG4gICAgICA6ICh0aGlzLmNoZWNrYm94ZXNJbmRleCA9IHRoaXMuYmFzZUluZGV4KTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlzVGVtcG9yYWxPcGVyYXRvcigpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcj8ub3BlcmF0b3I/LnRvTG93ZXJDYXNlKCkgPT09XHJcbiAgICAgIHRoaXMub2djRmlsdGVyT3BlcmF0b3IuRHVyaW5nLnRvTG93ZXJDYXNlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VQcm9wZXJ0eSh2YWx1ZTogYW55LCBwb3M/OiBudW1iZXIsIHJlZnJlc2hGaWx0ZXIgPSB0cnVlKSB7XHJcbiAgICBjb25zdCBkZXRlY3RlZFByb3BlcnR5ID0gdGhpcy5kZXRlY3RQcm9wZXJ0eShwb3MpO1xyXG4gICAgaWYgKGRldGVjdGVkUHJvcGVydHkpIHtcclxuICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbmQoXHJcbiAgICAgICAgKGZpbHRlcikgPT4gZmlsdGVyLmZpbHRlcmlkID09PSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmlsdGVyaWRcclxuICAgICAgKVtkZXRlY3RlZFByb3BlcnR5XSA9IHZhbHVlO1xyXG5cclxuICAgICAgaWYgKHJlZnJlc2hGaWx0ZXIpIHtcclxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkZXRlY3RQcm9wZXJ0eShwb3M/OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IpIHtcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTm90RXF1YWxUbzpcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzRXF1YWxUbzpcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzR3JlYXRlclRoYW46XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0dyZWF0ZXJUaGFuT3JFcXVhbFRvOlxyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNMZXNzVGhhbjpcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGVzc1RoYW5PckVxdWFsVG86XHJcbiAgICAgICAgcmV0dXJuICdleHByZXNzaW9uJztcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGlrZTpcclxuICAgICAgICByZXR1cm4gJ3BhdHRlcm4nO1xyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNCZXR3ZWVuOlxyXG4gICAgICAgIHJldHVybiBwb3MgJiYgcG9zID09PSAxXHJcbiAgICAgICAgICA/ICdsb3dlckJvdW5kYXJ5J1xyXG4gICAgICAgICAgOiBwb3MgJiYgcG9zID09PSAyXHJcbiAgICAgICAgICAgID8gJ3VwcGVyQm91bmRhcnknXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLkR1cmluZzpcclxuICAgICAgICByZXR1cm4gcG9zICYmIHBvcyA9PT0gMVxyXG4gICAgICAgICAgPyAnYmVnaW4nXHJcbiAgICAgICAgICA6IHBvcyAmJiBwb3MgPT09IDJcclxuICAgICAgICAgICAgPyAnZW5kJ1xyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IHNlbGVjdG9yIG9mIG9nY0ZpbHRlcnNTZWxlY3RvcnNcIj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJwdXNoQnV0dG9uR3JvdXBzXCJcclxuICAgICAgKm5nSWY9XCJzZWxlY3Rvci5zZWxlY3RvclR5cGUgPT09ICdwdXNoQnV0dG9uJ1wiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzU2VsZWN0b3JcIiAqbmdJZj1cImdldFB1c2hCdXR0b25zR3JvdXBzKCkubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInB1c2hCdXR0b25zR3JvdXBcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5sZWdlbmQuc2VsZWN0U3R5bGUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cImN1cnJlbnRQdXNoQnV0dG9uc0dyb3VwXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2VsZWN0b3JHcm91cCBvZiBnZXRQdXNoQnV0dG9uc0dyb3VwcygpXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0b3JHcm91cFwiXHJcbiAgICAgICAgICAgICAgPnt7IHNlbGVjdG9yR3JvdXAudGl0bGUgfX1cclxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGJ1bmRsZSBvZiBjdXJyZW50UHVzaEJ1dHRvbnNHcm91cC5jb21wdXRlZFNlbGVjdG9yc1wiXHJcbiAgICAgID5cclxuICAgICAgICA8aDM+e3sgYnVuZGxlLnRpdGxlIH19PC9oMz5cclxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXBcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInB1c2hCdXR0b25zXCJcclxuICAgICAgICAgIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIlxyXG4gICAgICAgICAgYXBwZWFyYW5jZT1cImxlZ2FjeVwiXHJcbiAgICAgICAgICB2ZXJ0aWNhbD1cInt7IGJ1bmRsZUlzVmVydGljYWwoYnVuZGxlKSB9fVwiXHJcbiAgICAgICAgICBtdWx0aXBsZT1cInRydWVcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgb2djUHVzaEJ1dHRvbiBvZiBidW5kbGUuc2VsZWN0b3JzXCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0VG9vbFRpcChvZ2NQdXNoQnV0dG9uKVwiXHJcbiAgICAgICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJtYXRlcmlhbC10b29sdGlwXCJcclxuICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0QnV0dG9uQ29sb3Iob2djUHVzaEJ1dHRvbilcIlxyXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJvZ2NQdXNoQnV0dG9uLmVuYWJsZWRcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKG9nY1B1c2hCdXR0b24sIHNlbGVjdG9yLnNlbGVjdG9yVHlwZSlcIlxyXG4gICAgICAgICAgICBbdmFsdWVdPVwib2djUHVzaEJ1dHRvblwiXHJcbiAgICAgICAgICAgID57eyBvZ2NQdXNoQnV0dG9uLnRpdGxlIH19XHJcbiAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNoZWNrYm94R3JvdXBzXCIgKm5nSWY9XCJzZWxlY3Rvci5zZWxlY3RvclR5cGUgPT09ICdjaGVja2JveCdcIj5cclxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiICpuZ0lmPVwiZ2V0Q2hlY2tib3hlc0dyb3VwcygpLmxlbmd0aCA+IDFcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjaGVja2JveGVzR3JvdXBcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5sZWdlbmQuc2VsZWN0U3R5bGUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cImN1cnJlbnRDaGVja2JveGVzR3JvdXBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzZWxlY3Rvckdyb3VwIG9mIGdldENoZWNrYm94ZXNHcm91cHMoKVwiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdG9yR3JvdXBcIlxyXG4gICAgICAgICAgICAgID57eyBzZWxlY3Rvckdyb3VwLnRpdGxlIH19XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBidW5kbGUgb2YgY3VycmVudENoZWNrYm94ZXNHcm91cC5jb21wdXRlZFNlbGVjdG9yc1wiXHJcbiAgICAgID5cclxuICAgICAgICA8aDM+e3sgYnVuZGxlLnRpdGxlIH19PC9oMz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hlcyBtYXQtdHlwb2dyYXBoeVwiPlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgb2djQ2hlY2tib3ggb2YgYnVuZGxlLnNlbGVjdG9yc1wiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImdldFRvb2xUaXAob2djQ2hlY2tib3gpXCJcclxuICAgICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJvZ2NDaGVja2JveC5lbmFibGVkXCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZShvZ2NDaGVja2JveCwgc2VsZWN0b3Iuc2VsZWN0b3JUeXBlKVwiXHJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvZ2NDaGVja2JveFwiXHJcbiAgICAgICAgICAgID57eyBvZ2NDaGVja2JveC50aXRsZSB9fVxyXG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHBcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIGlzTGVzc1Jlc3VsdHMoYnVuZGxlLCAnY2hlY2tib3gnKSB8fFxyXG4gICAgICAgICAgICBpc01vcmVSZXN1bHRzKGJ1bmRsZSwgJ2NoZWNrYm94JylcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHVcclxuICAgICAgICAgICAgKm5nSWY9XCJpc0xlc3NSZXN1bHRzKGJ1bmRsZSwgJ2NoZWNrYm94JylcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImxlc3NSZXN1bHRzIG1hdC10eXBvZ3JhcGh5XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImRpc3BsYXlMZXNzUmVzdWx0cygnY2hlY2tib3gnKVwiXHJcbiAgICAgICAgICAgID57eyAnaWdvLmdlby5maWx0ZXIuZGlzcGxheUxlc3NSZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgPC91PlxyXG4gICAgICAgICAgPHVcclxuICAgICAgICAgICAgKm5nSWY9XCJpc01vcmVSZXN1bHRzKGJ1bmRsZSwgJ2NoZWNrYm94JylcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1vcmVSZXN1bHRzIG1hdC10eXBvZ3JhcGh5XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImRpc3BsYXlNb3JlUmVzdWx0cygnY2hlY2tib3gnKVwiXHJcbiAgICAgICAgICAgID57eyAnaWdvLmdlby5maWx0ZXIuZGlzcGxheU1vcmVSZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgPC91PlxyXG4gICAgICAgIDwvcD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwicmFkaW9CdXR0b25Hcm91cHNcIlxyXG4gICAgICAqbmdJZj1cInNlbGVjdG9yLnNlbGVjdG9yVHlwZSA9PT0gJ3JhZGlvQnV0dG9uJ1wiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzU2VsZWN0b3JcIiAqbmdJZj1cImdldFJhZGlvQnV0dG9uc0dyb3VwcygpLmxlbmd0aCA+IDFcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyYWRpb0J1dHRvbnNHcm91cFwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLmxlZ2VuZC5zZWxlY3RTdHlsZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2VsZWN0b3JHcm91cCBvZiBnZXRSYWRpb0J1dHRvbnNHcm91cHMoKVwiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdG9yR3JvdXBcIlxyXG4gICAgICAgICAgICAgID57eyBzZWxlY3Rvckdyb3VwLnRpdGxlIH19XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBidW5kbGUgb2YgY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwLmNvbXB1dGVkU2VsZWN0b3JzXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxoMz57eyBidW5kbGUudGl0bGUgfX08L2gzPlxyXG4gICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgZm9ybUNvbnRyb2xOYW1lPVwicmFkaW9CdXR0b25zXCIgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiPlxyXG4gICAgICAgICAgPG1hdC1yYWRpby1idXR0b25cclxuICAgICAgICAgICAgKm5nSWY9XCJidW5kbGUudW5maWx0ZXJlZFwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci5yZXNldEZpbHRlcnMnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cImVtcHR5UmFkaW9CdXR0b25zKClcIlxyXG4gICAgICAgICAgICA+e3sgJ2lnby5nZW8uZmlsdGVyLnJlc2V0RmlsdGVycycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvZ2NSYWRpb0J1dHRvbiBvZiBidW5kbGUuc2VsZWN0b3JzXCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0VG9vbFRpcChvZ2NSYWRpb0J1dHRvbilcIlxyXG4gICAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIm9nY1JhZGlvQnV0dG9uLmVuYWJsZWRcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKG9nY1JhZGlvQnV0dG9uLCBzZWxlY3Rvci5zZWxlY3RvclR5cGUpXCJcclxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9nY1JhZGlvQnV0dG9uXCJcclxuICAgICAgICAgICAgPnt7IG9nY1JhZGlvQnV0dG9uLnRpdGxlIH19XHJcbiAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICA8cFxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIGlzTGVzc1Jlc3VsdHMoYnVuZGxlLCAncmFkaW8nKSB8fCBpc01vcmVSZXN1bHRzKGJ1bmRsZSwgJ3JhZGlvJylcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHVcclxuICAgICAgICAgICAgICAqbmdJZj1cImlzTGVzc1Jlc3VsdHMoYnVuZGxlLCAncmFkaW8nKVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJsZXNzUmVzdWx0cyBtYXQtdHlwb2dyYXBoeVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRpc3BsYXlMZXNzUmVzdWx0cygncmFkaW8nKVwiXHJcbiAgICAgICAgICAgICAgPnt7ICdpZ28uZ2VvLmZpbHRlci5kaXNwbGF5TGVzc1Jlc3VsdHMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvdT5cclxuICAgICAgICAgICAgPHVcclxuICAgICAgICAgICAgICAqbmdJZj1cImlzTW9yZVJlc3VsdHMoYnVuZGxlLCAncmFkaW8nKVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtb3JlUmVzdWx0cyBtYXQtdHlwb2dyYXBoeVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRpc3BsYXlNb3JlUmVzdWx0cygncmFkaW8nKVwiXHJcbiAgICAgICAgICAgICAgPnt7ICdpZ28uZ2VvLmZpbHRlci5kaXNwbGF5TW9yZVJlc3VsdHMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvdT5cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwic2VsZWN0R3JvdXBzXCIgKm5nSWY9XCJzZWxlY3Rvci5zZWxlY3RvclR5cGUgPT09ICdzZWxlY3QnXCI+XHJcbiAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzU2VsZWN0b3JcIiAqbmdJZj1cImdldFNlbGVjdEdyb3VwcygpLmxlbmd0aCA+IDFcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RHcm91cFwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLmxlZ2VuZC5zZWxlY3RTdHlsZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiY3VycmVudFNlbGVjdEdyb3VwXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2VsZWN0b3JHcm91cCBvZiBnZXRTZWxlY3RHcm91cHMoKVwiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdG9yR3JvdXBcIlxyXG4gICAgICAgICAgICAgID57eyBzZWxlY3Rvckdyb3VwLnRpdGxlIH19XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnVuZGxlIG9mIGN1cnJlbnRTZWxlY3RHcm91cC5jb21wdXRlZFNlbGVjdG9yc1wiPlxyXG4gICAgICAgIDxoMz57eyBidW5kbGUudGl0bGUgfX08L2gzPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiPlxyXG4gICAgICAgICAgPG1hdC1idXR0b25cclxuICAgICAgICAgICAgKm5nSWY9XCJidW5kbGUudW5maWx0ZXJlZCAmJiAhYnVuZGxlLm11bHRpcGxlXCJcclxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci5yZXNldEZpbHRlcnMnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZW1wdHlTZWxlY3QoKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZmlsdGVyLXJlbW92ZVwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L21hdC1idXR0b24+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiYnVuZGxlLndpZHRoID8gYnVuZGxlLndpZHRoIDogdW5kZWZpbmVkXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImJ1bmRsZS5tdWx0aXBsZTsgZWxzZSBub3RNdWx0aVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAjc2VsZWN0aW9uXHJcbiAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiYnVuZGxlLm11bHRpcGxlXCJcclxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJidW5kbGUudGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0TXVsdGlcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveGVzIG1hdC10eXBvZ3JhcGh5XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJ1bmRsZS5tdWx0aXBsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RBbGxTZWxlY3RlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbFNlbGVjdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICA+VG91c1xyXG4gICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9nY1NlbGVjdCBvZiBidW5kbGUuc2VsZWN0b3JzXCJcclxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0VG9vbFRpcChvZ2NTZWxlY3QpXCJcclxuICAgICAgICAgICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcERlbGF5PVwiNTAwXCJcclxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgIChvblNlbGVjdGlvbkNoYW5nZSk9XCJcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RPcHRpb25DbGljaygkZXZlbnQuc291cmNlLnZhbHVlLCBidW5kbGUsICRldmVudClcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9nY1NlbGVjdFwiXHJcbiAgICAgICAgICAgICAgICAgID57eyBvZ2NTZWxlY3QudGl0bGUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdE11bHRpPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtwbGFjZWhvbGRlcl09XCJidW5kbGUudGl0bGVcIiBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvZ2NTZWxlY3Qgb2YgYnVuZGxlLnNlbGVjdG9yc1wiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImdldFRvb2xUaXAob2djU2VsZWN0KVwiXHJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib2djU2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgKG9uU2VsZWN0aW9uQ2hhbmdlKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdE9wdGlvbkNsaWNrKCRldmVudC5zb3VyY2UudmFsdWUsIGJ1bmRsZSlcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgPnt7IG9nY1NlbGVjdC50aXRsZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImF1dG9jb21wbGV0ZUdyb3Vwc1wiXHJcbiAgICAgICpuZ0lmPVwic2VsZWN0b3Iuc2VsZWN0b3JUeXBlID09PSAnYXV0b2NvbXBsZXRlJ1wiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzU2VsZWN0b3JcIiAqbmdJZj1cImdldEF1dG9jb21wbGV0ZUdyb3VwcygpLmxlbmd0aCA+IDFcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhdXRvY29tcGxldGVHcm91cFwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLmxlZ2VuZC5zZWxlY3RTdHlsZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYXV0b2NvbXBsZXRlR3JvdXAgb2YgZ2V0QXV0b2NvbXBsZXRlR3JvdXBzKClcIlxyXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJhdXRvY29tcGxldGVHcm91cFwiXHJcbiAgICAgICAgICAgICAgPnt7IGF1dG9jb21wbGV0ZUdyb3VwLnRpdGxlIH19XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBidW5kbGUgb2YgY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxoMz57eyBidW5kbGUudGl0bGUgfX08L2gzPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiPlxyXG4gICAgICAgICAgPG1hdC1idXR0b25cclxuICAgICAgICAgICAgKm5nSWY9XCJidW5kbGUudW5maWx0ZXJlZFwiXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5maWx0ZXIucmVzZXRGaWx0ZXJzJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJtYXRlcmlhbC10b29sdGlwXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImVtcHR5QXV0b2NvbXBsZXRlKClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImZpbHRlci1yZW1vdmVcIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9tYXQtYnV0dG9uPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICpuZ0lmPVwiZmlsdGVyZWRPZ2NBdXRvY29tcGxldGVbYnVuZGxlLmlkXVwiXHJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cImJ1bmRsZS53aWR0aCA/IGJ1bmRsZS53aWR0aCA6IHVuZGVmaW5lZFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImF1dG9jb21wbGV0ZVwiXHJcbiAgICAgICAgICAgICAgI2F1dG9jb21wbGV0ZVxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXV0b2NvbXBsZXRlXCJcclxuICAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJidW5kbGUudGl0bGVcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZVxyXG4gICAgICAgICAgICAgICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCJcclxuICAgICAgICAgICAgICAjYXV0b2NvbXBsZXRlXHJcbiAgICAgICAgICAgICAgKG9wdGlvblNlbGVjdGVkKT1cImF1dG9jb21wbGV0ZU9wdGlvbkNsaWNrKCRldmVudC5vcHRpb24udmFsdWUpXCJcclxuICAgICAgICAgICAgICBbZGlzcGxheVdpdGhdPVwiZGlzcGxheUZuXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgbGV0IG9nY0F1dG9jb21wbGV0ZSBvZiBmaWx0ZXJlZE9nY0F1dG9jb21wbGV0ZVtidW5kbGUuaWRdXHJcbiAgICAgICAgICAgICAgICAgICAgfCBhc3luY1xyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvZ2NBdXRvY29tcGxldGVcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IG9nY0F1dG9jb21wbGV0ZS52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9mb3JtPlxyXG5cclxuPGRpdiAqbmdJZj1cImlzVGVtcG9yYWxPcGVyYXRvcigpXCI+XHJcbiAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgPGgzICpuZ0lmPVwiIWN1cnJlbnRGaWx0ZXIudGl0bGVcIj5cclxuICAgIHt7ICdpZ28uZ2VvLmZpbHRlci5yZXBvcnRpbmdEYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gIDwvaDM+XHJcbiAgPGgzICpuZ0lmPVwiY3VycmVudEZpbHRlci50aXRsZVwiPnt7IGN1cnJlbnRGaWx0ZXIudGl0bGUgfX08L2gzPlxyXG4gIDxpZ28tb2djLWZpbHRlci10aW1lXHJcbiAgICBbZGF0YXNvdXJjZV09XCJkYXRhc291cmNlXCJcclxuICAgIFtjdXJyZW50RmlsdGVyXT1cImN1cnJlbnRGaWx0ZXJcIlxyXG4gICAgKGNoYW5nZVByb3BlcnR5KT1cImNoYW5nZVByb3BlcnR5KCRldmVudC52YWx1ZSwgJGV2ZW50LnBvcylcIlxyXG4gID5cclxuICA8L2lnby1vZ2MtZmlsdGVyLXRpbWU+XHJcbjwvZGl2PlxyXG4iXX0=
789
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci1zZWxlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvZmlsdGVyL29nYy1maWx0ZXItc2VsZWN0aW9uL29nYy1maWx0ZXItc2VsZWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLXNlbGVjdGlvbi9vZ2MtZmlsdGVyLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEUsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsS0FBSyxFQUVMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixrQkFBa0IsRUFFbEIsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFhLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQs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QUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsR0FBRztzQkFBWCxLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0YsYUFBYTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdGb3IsIE5nSWYsIE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRm9ybXNNb2R1bGUsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcbiAgVW50eXBlZEZvcm1Hcm91cCxcbiAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uLXRvZ2dsZSc7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1hdE9wdGlvbiwgTWF0T3B0aW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0UmFkaW9Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9yYWRpbyc7XG5pbXBvcnQgeyBNYXRTZWxlY3QsIE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5cbmltcG9ydCB7IERPTU9wdGlvbnMsIERPTVNlcnZpY2UsIERPTVZhbHVlIH0gZnJvbSAnQGlnbzIvY29tbW9uJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2NvbmZpZyc7XG5cbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgV01TRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL3dtcy1kYXRhc291cmNlJztcbmltcG9ydCB7IE9nY0ZpbHRlcldyaXRlciB9IGZyb20gJy4uLy4uL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlcic7XG5pbXBvcnQge1xuICBJZ29PZ2NGaWx0ZXJPYmplY3QsXG4gIE9nY0ZpbHRlcmFibGVEYXRhU291cmNlLFxuICBPZ2NQdXNoQnV0dG9uLFxuICBPZ2NTZWxlY3RvckJ1bmRsZSxcbiAgU2VsZWN0b3JHcm91cFxufSBmcm9tICcuLi8uLi9maWx0ZXIvc2hhcmVkL29nYy1maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1hcEJhc2UgfSBmcm9tICcuLi8uLi9tYXAnO1xuaW1wb3J0IHsgT2djRmlsdGVyVGltZUNvbXBvbmVudCB9IGZyb20gJy4uL29nYy1maWx0ZXItdGltZS9vZ2MtZmlsdGVyLXRpbWUuY29tcG9uZW50JztcbmltcG9ydCB7IE9nY0ZpbHRlck9wZXJhdG9yIH0gZnJvbSAnLi4vc2hhcmVkL29nYy1maWx0ZXIuZW51bSc7XG5pbXBvcnQgeyBPR0NGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL29nYy1maWx0ZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1vZ2MtZmlsdGVyLXNlbGVjdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9vZ2MtZmlsdGVyLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL29nYy1maWx0ZXItc2VsZWN0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0RPTVNlcnZpY2VdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBOZ0ZvcixcbiAgICBOZ0lmLFxuICAgIE1hdERpdmlkZXJNb2R1bGUsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIE1hdE9wdGlvbk1vZHVsZSxcbiAgICBNYXRCdXR0b25Ub2dnbGVNb2R1bGUsXG4gICAgTmdTdHlsZSxcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICBNYXRSYWRpb01vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcbiAgICBPZ2NGaWx0ZXJUaW1lQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBUcmFuc2xhdGVNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBPZ2NGaWx0ZXJTZWxlY3Rpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBAVmlld0NoaWxkKCdzZWxlY3Rpb24nKSBzZWw6IE1hdFNlbGVjdDtcblxuICBASW5wdXQoKSByZWZyZXNoRmlsdGVyczogKCkgPT4gdm9pZDtcblxuICBASW5wdXQoKSBkYXRhc291cmNlOiBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZTtcblxuICBASW5wdXQoKSBtYXA6IE1hcEJhc2U7XG5cbiAgQElucHV0KCkgY2hlY2tib3hlc0luZGV4ID0gNTtcbiAgQElucHV0KCkgcmFkaW9CdXR0b25zSW5kZXggPSA1O1xuICBASW5wdXQoKSBiYXNlSW5kZXggPSA1O1xuXG4gIEBJbnB1dCgpXG4gIGdldCBjdXJyZW50RmlsdGVyKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRGaWx0ZXI7XG4gIH1cbiAgc2V0IGN1cnJlbnRGaWx0ZXIodmFsdWUpIHtcbiAgICB0aGlzLl9jdXJyZW50RmlsdGVyID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRGaWx0ZXI/LnNsaWRlck9wdGlvbnMpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRGaWx0ZXIuc2xpZGVyT3B0aW9ucy5lbmFibGVkID0gZmFsc2U7IC8vIHJlbW92ZSBzbGlkZXIgdG9nZ2xlIChhbmltYXRpb24gdGVtcG9yZWxsZSlcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfY3VycmVudEZpbHRlcjogYW55O1xuXG4gIHB1YmxpYyBvZ2NGaWx0ZXJPcGVyYXRvciA9IE9nY0ZpbHRlck9wZXJhdG9yO1xuXG4gIHB1YmxpYyBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBwcml2YXRlIG9nY0ZpbHRlcldyaXRlcjogT2djRmlsdGVyV3JpdGVyO1xuICBwdWJsaWMgY29sb3IgPSAncHJpbWFyeSc7XG4gIHB1YmxpYyBzZWxlY3RBbGxTZWxlY3RlZCA9IGZhbHNlO1xuICBwdWJsaWMgc2VsZWN0RW5hYmxlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyBzZWxlY3RFbmFibGVkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcbiAgcHVibGljIGF1dG9jb21wbGV0ZUVuYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xuICBwdWJsaWMgZmlsdGVyZWRPZ2NBdXRvY29tcGxldGUgPSB7fTtcblxuICBwdWJsaWMgYXBwbHlGaWx0ZXJzVGltZW91dDtcblxuICBnZXQgb2djRmlsdGVyc1NlbGVjdG9ycygpIHtcbiAgICBjb25zdCBvZ2NTZWxlY3RvciA9IFtdO1xuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnB1c2hCdXR0b25zKSB7XG4gICAgICBvZ2NTZWxlY3Rvci5wdXNoKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8ucHVzaEJ1dHRvbnMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5jaGVja2JveGVzKSB7XG4gICAgICBvZ2NTZWxlY3Rvci5wdXNoKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uY2hlY2tib3hlcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnJhZGlvQnV0dG9ucykge1xuICAgICAgb2djU2VsZWN0b3IucHVzaCh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnJhZGlvQnV0dG9ucyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnNlbGVjdCkge1xuICAgICAgb2djU2VsZWN0b3IucHVzaCh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnNlbGVjdCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LmF1dG9jb21wbGV0ZSkge1xuICAgICAgb2djU2VsZWN0b3IucHVzaCh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LmF1dG9jb21wbGV0ZSk7XG4gICAgfVxuICAgIG9nY1NlbGVjdG9yLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGlmIChhLm9yZGVyIDwgYi5vcmRlcikge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZiAoYS5vcmRlciA+IGIub3JkZXIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9KTtcbiAgICByZXR1cm4gb2djU2VsZWN0b3I7XG4gIH1cblxuICBnZXQgY3VycmVudFB1c2hCdXR0b25zR3JvdXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ3B1c2hCdXR0b25zR3JvdXAnKS52YWx1ZTtcbiAgfVxuICBzZXQgY3VycmVudFB1c2hCdXR0b25zR3JvdXAodmFsdWUpIHtcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IHB1c2hCdXR0b25zR3JvdXA6IHZhbHVlIH0pO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRDaGVja2JveGVzR3JvdXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2NoZWNrYm94ZXNHcm91cCcpLnZhbHVlO1xuICB9XG4gIHNldCBjdXJyZW50Q2hlY2tib3hlc0dyb3VwKHZhbHVlKSB7XG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBjaGVja2JveGVzR3JvdXA6IHZhbHVlIH0pO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cCgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgncmFkaW9CdXR0b25zR3JvdXAnKS52YWx1ZTtcbiAgfVxuICBzZXQgY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwKHZhbHVlKSB7XG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyByYWRpb0J1dHRvbnNHcm91cDogdmFsdWUgfSk7XG4gIH1cblxuICBnZXQgY3VycmVudFNlbGVjdEdyb3VwKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdzZWxlY3RHcm91cCcpLnZhbHVlO1xuICB9XG4gIHNldCBjdXJyZW50U2VsZWN0R3JvdXAodmFsdWUpIHtcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IHNlbGVjdEdyb3VwOiB2YWx1ZSB9KTtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50QXV0b2NvbXBsZXRlR3JvdXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2F1dG9jb21wbGV0ZUdyb3VwJykudmFsdWU7XG4gIH1cbiAgc2V0IGN1cnJlbnRBdXRvY29tcGxldGVHcm91cCh2YWx1ZSkge1xuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgYXV0b2NvbXBsZXRlR3JvdXA6IHZhbHVlIH0pO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdEVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0RW5hYmxlZCQudmFsdWU7XG4gIH1cblxuICBzZXQgc2VsZWN0RW5hYmxlZCh2YWx1ZSkge1xuICAgIHRoaXMuc2VsZWN0RW5hYmxlZCQubmV4dCh2YWx1ZSk7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCk7XG4gICAgdGhpcy5jdXJyZW50U2VsZWN0R3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMuZm9yRWFjaCgoY29tcFNlbGVjdCkgPT4ge1xuICAgICAgY29tcFNlbGVjdC5zZWxlY3RvcnM/LmZvckVhY2goKHNlbGVjdG9yKSA9PiB7XG4gICAgICAgIHZhbHVlID09PSBzZWxlY3RvclxuICAgICAgICAgID8gKHNlbGVjdG9yLmVuYWJsZWQgPSB0cnVlKVxuICAgICAgICAgIDogKHNlbGVjdG9yLmVuYWJsZWQgPSBmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICB9LCA3NTApO1xuICB9XG5cbiAgZ2V0IHNlbGVjdEVuYWJsZWRzKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdEVuYWJsZWRzJC52YWx1ZTtcbiAgfVxuXG4gIHNldCBzZWxlY3RFbmFibGVkcyh2YWx1ZSkge1xuICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMkLm5leHQodmFsdWUpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQpO1xuICAgIHRoaXMuY3VycmVudFNlbGVjdEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goKGNvbXBTZWxlY3QpID0+IHtcbiAgICAgIGNvbXBTZWxlY3Quc2VsZWN0b3JzPy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgICAgICB2YWx1ZS5pbmNsdWRlcyhzZWxlY3RvcilcbiAgICAgICAgICA/IChzZWxlY3Rvci5lbmFibGVkID0gdHJ1ZSlcbiAgICAgICAgICA6IChzZWxlY3Rvci5lbmFibGVkID0gZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgfSwgNzUwKTtcbiAgfVxuXG4gIGdldCBhdXRvY29tcGxldGVFbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmF1dG9jb21wbGV0ZUVuYWJsZWQkLnZhbHVlO1xuICB9XG5cbiAgc2V0IGF1dG9jb21wbGV0ZUVuYWJsZWQodmFsdWUpIHtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUVuYWJsZWQkLm5leHQodmFsdWUpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQpO1xuICAgIHRoaXMuY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goKGNvbXBTZWxlY3QpID0+IHtcbiAgICAgIGNvbXBTZWxlY3Quc2VsZWN0b3JzPy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgICAgICB2YWx1ZSA9PT0gc2VsZWN0b3IudGl0bGVcbiAgICAgICAgICA/IChzZWxlY3Rvci5lbmFibGVkID0gdHJ1ZSlcbiAgICAgICAgICA6IChzZWxlY3Rvci5lbmFibGVkID0gZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgfSwgNzUwKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb2djRmlsdGVyU2VydmljZTogT0dDRmlsdGVyU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBkb21TZXJ2aWNlOiBET01TZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICB0aGlzLm9nY0ZpbHRlcldyaXRlciA9IG5ldyBPZ2NGaWx0ZXJXcml0ZXIoKTtcbiAgICB0aGlzLmJ1aWxkRm9ybSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZvcm0oKSB7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBwdXNoQnV0dG9uczogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgcmFkaW9CdXR0b25zOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBwdXNoQnV0dG9uc0dyb3VwOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBjaGVja2JveGVzR3JvdXA6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIHJhZGlvQnV0dG9uc0dyb3VwOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBzZWxlY3RHcm91cDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgc2VsZWN0OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBzZWxlY3RNdWx0aTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgYXV0b2NvbXBsZXRlR3JvdXA6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIGF1dG9jb21wbGV0ZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dXG4gICAgfSk7XG4gIH1cblxuICBnZXRQdXNoQnV0dG9uc0dyb3VwcygpOiBTZWxlY3Rvckdyb3VwW10ge1xuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnB1c2hCdXR0b25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5wdXNoQnV0dG9ucy5ncm91cHM7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2hlY2tib3hlc0dyb3VwcygpOiBTZWxlY3Rvckdyb3VwW10ge1xuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LmNoZWNrYm94ZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmNoZWNrYm94ZXMuZ3JvdXBzO1xuICAgIH1cbiAgfVxuXG4gIGdldFJhZGlvQnV0dG9uc0dyb3VwcygpOiBTZWxlY3Rvckdyb3VwW10ge1xuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnJhZGlvQnV0dG9ucykge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMucmFkaW9CdXR0b25zLmdyb3VwcztcbiAgICB9XG4gIH1cblxuICBnZXRTZWxlY3RHcm91cHMoKTogU2VsZWN0b3JHcm91cFtdIHtcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5zZWxlY3QpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnNlbGVjdC5ncm91cHM7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXV0b2NvbXBsZXRlR3JvdXBzKCk6IFNlbGVjdG9yR3JvdXBbXSB7XG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uYXV0b2NvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5hdXRvY29tcGxldGUuZ3JvdXBzO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzKSB7XG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5wdXNoQnV0dG9ucykge1xuICAgICAgICB0aGlzLmN1cnJlbnRQdXNoQnV0dG9uc0dyb3VwID1cbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnB1c2hCdXR0b25zLmdyb3Vwcy5maW5kKFxuICAgICAgICAgICAgKGdyb3VwKSA9PiBncm91cC5lbmFibGVkXG4gICAgICAgICAgKSB8fCB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnB1c2hCdXR0b25zLmdyb3Vwc1swXTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmNoZWNrYm94ZXMpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2hlY2tib3hlc0dyb3VwID1cbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmNoZWNrYm94ZXMuZ3JvdXBzLmZpbmQoXG4gICAgICAgICAgICAoZ3JvdXApID0+IGdyb3VwLmVuYWJsZWRcbiAgICAgICAgICApIHx8IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuY2hlY2tib3hlcy5ncm91cHNbMF07XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UmFkaW9CdXR0b25zR3JvdXAgPVxuICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMucmFkaW9CdXR0b25zLmdyb3Vwcy5maW5kKFxuICAgICAgICAgICAgKGdyb3VwKSA9PiBncm91cC5lbmFibGVkXG4gICAgICAgICAgKSB8fCB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnJhZGlvQnV0dG9ucy5ncm91cHNbMF07XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5zZWxlY3QpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U2VsZWN0R3JvdXAgPVxuICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuc2VsZWN0Lmdyb3Vwcy5maW5kKFxuICAgICAgICAgICAgKGdyb3VwKSA9PiBncm91cC5lbmFibGVkXG4gICAgICAgICAgKSB8fCB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnNlbGVjdC5ncm91cHNbMF07XG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0RW5hYmxlZCgpO1xuICAgICAgICBhd2FpdCB0aGlzLmdldFNlbGVjdERvbVZhbHVlcygpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuYXV0b2NvbXBsZXRlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwID1cbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmF1dG9jb21wbGV0ZS5ncm91cHMuZmluZChcbiAgICAgICAgICAgIChncm91cCkgPT4gZ3JvdXAuZW5hYmxlZFxuICAgICAgICAgICkgfHwgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5hdXRvY29tcGxldGUuZ3JvdXBzWzBdO1xuICAgICAgICB0aGlzLmdldEF1dG9jb21wbGV0ZUVuYWJsZWQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRBdXRvY29tcGxldGVEb21WYWx1ZXMoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtXG4gICAgICAuZ2V0KCdwdXNoQnV0dG9uc0dyb3VwJylcbiAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLm9uUHVzaEJ1dHRvbnNDaGFuZ2VHcm91cCgpO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgICAgfSk7XG4gICAgdGhpcy5mb3JtXG4gICAgICAuZ2V0KCdjaGVja2JveGVzR3JvdXAnKVxuICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSg3NTApKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMub25DaGVja2JveGVzQ2hhbmdlR3JvdXAoKTtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuZm9ybVxuICAgICAgLmdldCgncmFkaW9CdXR0b25zR3JvdXAnKVxuICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSg3NTApKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMub25SYWRpb0J1dHRvbnNDaGFuZ2VHcm91cCgpO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgICAgfSk7XG4gICAgdGhpcy5mb3JtXG4gICAgICAuZ2V0KCdzZWxlY3RHcm91cCcpXG4gICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDc1MCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5vblNlbGVjdENoYW5nZUdyb3VwKCk7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgICB9KTtcbiAgICB0aGlzLmZvcm1cbiAgICAgIC5nZXQoJ2F1dG9jb21wbGV0ZUdyb3VwJylcbiAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLm9uQXV0b2NvbXBsZXRlQ2hhbmdlR3JvdXAoKTtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuZm9ybVxuICAgICAgLmdldCgncHVzaEJ1dHRvbnMnKVxuICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSg3NTApKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgICB9KTtcbiAgICB0aGlzLmZvcm1cbiAgICAgIC5nZXQoJ3JhZGlvQnV0dG9ucycpXG4gICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDc1MCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3RFbmFibGVkKCkge1xuICAgIGNvbnN0IGVuYWJsZWRzID0gW107XG4gICAgbGV0IGVuYWJsZWQ7XG4gICAgdGhpcy5jdXJyZW50U2VsZWN0R3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMuZm9yRWFjaCgoY29tcFNlbGVjdCkgPT4ge1xuICAgICAgaWYgKGNvbXBTZWxlY3QubXVsdGlwbGUpIHtcbiAgICAgICAgY29tcFNlbGVjdC5zZWxlY3RvcnM/LmZvckVhY2goKHNlbGVjdG9yKSA9PiB7XG4gICAgICAgICAgaWYgKHNlbGVjdG9yLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGVuYWJsZWRzLnB1c2goc2VsZWN0b3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMgPSBlbmFibGVkcztcbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydzZWxlY3RNdWx0aSddLnNldFZhbHVlKGVuYWJsZWRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBTZWxlY3Quc2VsZWN0b3JzPy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgICAgICAgIGlmIChzZWxlY3Rvci5lbmFibGVkKSB7XG4gICAgICAgICAgICBlbmFibGVkID0gc2VsZWN0b3I7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydzZWxlY3QnXS5yZXNldChlbmFibGVkKTtcbiAgICAgICAgdGhpcy5zZWxlY3RFbmFibGVkJC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZm9ybS5jb250cm9sc1snc2VsZWN0J10udmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbJ3NlbGVjdCddLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdEVuYWJsZWQgPSBlbmFibGVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdXRvY29tcGxldGVFbmFibGVkKCkge1xuICAgIGxldCBlbmFibGVkO1xuICAgIHRoaXMuY3VycmVudEF1dG9jb21wbGV0ZUdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goKGNvbXBTZWxlY3QpID0+IHtcbiAgICAgIGNvbXBTZWxlY3Quc2VsZWN0b3JzPy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgICAgICBpZiAoc2VsZWN0b3IuZW5hYmxlZCkge1xuICAgICAgICAgIGNvbnN0IGRvbSA9IHtcbiAgICAgICAgICAgIGlkOiBzZWxlY3Rvci5maWx0ZXJzLmV4cHJlc3Npb24sXG4gICAgICAgICAgICB2YWx1ZTogc2VsZWN0b3IudGl0bGVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGVuYWJsZWQgPSBzZWxlY3Rvci50aXRsZTtcbiAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbJ2F1dG9jb21wbGV0ZSddLnNldFZhbHVlKGRvbSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVFbmFibGVkID0gZW5hYmxlZDtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFRvb2xUaXAoc2VsZWN0b3IpOiBzdHJpbmcge1xuICAgIGxldCB0b29sVGlwO1xuICAgIGlmIChzZWxlY3Rvci50b29sdGlwKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3Rvci50b29sdGlwKSkge1xuICAgICAgICB0b29sVGlwID0gc2VsZWN0b3IudG9vbHRpcC5qb2luKCdcXG4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvb2xUaXAgPSBzZWxlY3Rvci50b29sdGlwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG9vbFRpcCB8fCAnJztcbiAgfVxuXG4gIGFzeW5jIGdldFNlbGVjdERvbVZhbHVlcygpIHtcbiAgICBmb3IgKGNvbnN0IGJ1bmRsZSBvZiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnNlbGVjdC5idW5kbGVzKSB7XG4gICAgICBpZiAoYnVuZGxlLmRvbVNlbGVjdG9ycykge1xuICAgICAgICBsZXQgZG9tVmFsdWVzO1xuICAgICAgICBmb3IgKGNvbnN0IGRvbVNlbGVjdG9yIG9mIGJ1bmRsZS5kb21TZWxlY3RvcnMpIHtcbiAgICAgICAgICBsZXQgZmlsdGVyRE9NO1xuICAgICAgICAgIGZvciAoY29uc3QgZG9tT3B0aW9ucyBvZiB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnPERPTU9wdGlvbnNbXT4oXG4gICAgICAgICAgICAnZG9tJ1xuICAgICAgICAgICkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZG9tU2VsZWN0b3IuaWQgPT09IGRvbU9wdGlvbnMuaWQgfHxcbiAgICAgICAgICAgICAgZG9tU2VsZWN0b3IubmFtZSA9PT0gZG9tT3B0aW9ucy5uYW1lXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZmlsdGVyRE9NID0ge1xuICAgICAgICAgICAgICAgIGlkOiBkb21PcHRpb25zLmlkLFxuICAgICAgICAgICAgICAgIHVybDogZG9tT3B0aW9ucy51cmwsXG4gICAgICAgICAgICAgICAgbmFtZTogZG9tT3B0aW9ucy5uYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlczogZG9tT3B0aW9ucy52YWx1ZXNcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZmlsdGVyRE9NLnVybFxuICAgICAgICAgICAgPyAoZG9tVmFsdWVzID0gKGF3YWl0IHRoaXMuZG9tU2VydmljZS5nZXREb20oXG4gICAgICAgICAgICAgICAgZmlsdGVyRE9NXG4gICAgICAgICAgICAgICkpIGFzIERPTVZhbHVlW10pXG4gICAgICAgICAgICA6IChkb21WYWx1ZXMgPSBmaWx0ZXJET00udmFsdWVzKTtcblxuICAgICAgICAgIGlmIChkb21WYWx1ZXMpIHtcbiAgICAgICAgICAgIGxldCBuZXdCdW5kbGUgPSBidW5kbGU7XG4gICAgICAgICAgICBuZXdCdW5kbGUuc2VsZWN0b3JzID0gW107XG4gICAgICAgICAgICBsZXQgc2VsZWN0b3I7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGRvbVZhbHVlcykge1xuICAgICAgICAgICAgICBpZiAoYnVuZGxlLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVuYWJsZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RFbmFibGVkcz8uZmluZCgoc2VsKSA9PiBzZWwudGl0bGUgPT09IHZhbHVlLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgPyAoZW5hYmxlZCA9IHRydWUpXG4gICAgICAgICAgICAgICAgICA6IChlbmFibGVkID0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yID0ge1xuICAgICAgICAgICAgICAgICAgdGl0bGU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgZW5hYmxlZCxcbiAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IGRvbVNlbGVjdG9yLm9wZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IGRvbVNlbGVjdG9yLnByb3BlcnR5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogdmFsdWUuaWRcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yID0ge1xuICAgICAgICAgICAgICAgICAgdGl0bGU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgZW5hYmxlZDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RFbmFibGVkPy50aXRsZSA9PT0gdmFsdWUudmFsdWUgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBkb21TZWxlY3Rvci5vcGVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBkb21TZWxlY3Rvci5wcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHZhbHVlLmlkXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBuZXdCdW5kbGUuc2VsZWN0b3JzLnB1c2goc2VsZWN0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5nZXRTZWxlY3RHcm91cHMoKVxuICAgICAgICAgICAgICAuZmluZCgoZ3JvdXApID0+IGdyb3VwLmlkcy5pbmNsdWRlcyhuZXdCdW5kbGUuaWQpKVxuICAgICAgICAgICAgICAuY29tcHV0ZWRTZWxlY3RvcnMuZmluZChcbiAgICAgICAgICAgICAgICAoY29tcCkgPT4gY29tcC50aXRsZSA9PT0gbmV3QnVuZGxlLnRpdGxlXG4gICAgICAgICAgICAgICkuc2VsZWN0b3JzID0gbmV3QnVuZGxlLnNlbGVjdG9ycztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZXRTZWxlY3RFbmFibGVkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QXV0b2NvbXBsZXRlRG9tVmFsdWVzKCkge1xuICAgIGZvciAoY29uc3QgYnVuZGxlIG9mIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuYXV0b2NvbXBsZXRlXG4gICAgICAuYnVuZGxlcykge1xuICAgICAgaWYgKGJ1bmRsZS5kb21TZWxlY3RvcnMpIHtcbiAgICAgICAgbGV0IGRvbVZhbHVlcztcbiAgICAgICAgZm9yIChjb25zdCBkb21TZWxlY3RvciBvZiBidW5kbGUuZG9tU2VsZWN0b3JzKSB7XG4gICAgICAgICAgbGV0IGZpbHRlckRPTTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGRvbU9wdGlvbnMgb2YgdGhpcy5jb25maWdTZXJ2aWNlLmdldENvbmZpZzxET01PcHRpb25zW10+KFxuICAgICAgICAgICAgJ2RvbSdcbiAgICAgICAgICApKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRvbVNlbGVjdG9yLmlkID09PSBkb21PcHRpb25zLmlkIHx8XG4gICAgICAgICAgICAgIGRvbVNlbGVjdG9yLm5hbWUgPT09IGRvbU9wdGlvbnMubmFtZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpbHRlckRPTSA9IHtcbiAgICAgICAgICAgICAgICBpZDogZG9tT3B0aW9ucy5pZCxcbiAgICAgICAgICAgICAgICB1cmw6IGRvbU9wdGlvbnMudXJsLFxuICAgICAgICAgICAgICAgIG5hbWU6IGRvbU9wdGlvbnMubmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IGRvbU9wdGlvbnMudmFsdWVzXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZpbHRlckRPTS51cmxcbiAgICAgICAgICAgID8gKGRvbVZhbHVlcyA9IChhd2FpdCB0aGlzLmRvbVNlcnZpY2UuZ2V0RG9tKFxuICAgICAgICAgICAgICAgIGZpbHRlckRPTVxuICAgICAgICAgICAgICApKSBhcyBET01WYWx1ZVtdKVxuICAgICAgICAgICAgOiAoZG9tVmFsdWVzID0gZmlsdGVyRE9NLnZhbHVlcyk7XG5cbiAgICAgICAgICBpZiAoZG9tVmFsdWVzKSB7XG4gICAgICAgICAgICBsZXQgbmV3QnVuZGxlID0gYnVuZGxlO1xuICAgICAgICAgICAgbmV3QnVuZGxlLnNlbGVjdG9ycyA9IFtdO1xuICAgICAgICAgICAgbGV0IHNlbGVjdG9yO1xuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBkb21WYWx1ZXMpIHtcbiAgICAgICAgICAgICAgc2VsZWN0b3IgPSB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6XG4gICAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUVuYWJsZWQgJiZcbiAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRW5hYmxlZCA9PT0gdmFsdWUudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IGRvbVNlbGVjdG9yLm9wZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBkb21TZWxlY3Rvci5wcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiB2YWx1ZS5pZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbmV3QnVuZGxlLnNlbGVjdG9ycy5wdXNoKHNlbGVjdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZ2V0QXV0b2NvbXBsZXRlR3JvdXBzKClcbiAgICAgICAgICAgICAgLmZpbmQoKGdyb3VwKSA9PiBncm91cC5pZHMuaW5jbHVkZXMobmV3QnVuZGxlLmlkKSlcbiAgICAgICAgICAgICAgLmNvbXB1dGVkU2VsZWN0b3JzLmZpbmQoXG4gICAgICAgICAgICAgICAgKGNvbXApID0+IGNvbXAudGl0bGUgPT09IG5ld0J1bmRsZS50aXRsZVxuICAgICAgICAgICAgICApLnNlbGVjdG9ycyA9IG5ld0J1bmRsZS5zZWxlY3RvcnM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maWx0ZXJlZE9nY0F1dG9jb21wbGV0ZVtidW5kbGUuaWRdID0gbmV3IE9ic2VydmFibGU8YW55W10+KCk7XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmZpbHRlcmVkT2djQXV0b2NvbXBsZXRlW2J1bmRsZS5pZF0gPSB0aGlzLmZvcm0uY29udHJvbHNbXG4gICAgICAgICAgJ2F1dG9jb21wbGV0ZSdcbiAgICAgICAgXS52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICBtYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBkb21WYWx1ZXM/LmZpbHRlcigob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyTm9ybWFsaXplZCA9IHZhbHVlXG4gICAgICAgICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJylcbiAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZU5hbWVOb3JtYWxpemVkID0gb3B0aW9uLnZhbHVlXG4gICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZlYXR1cmVOYW1lTm9ybWFsaXplZC5pbmNsdWRlcyhmaWx0ZXJOb3JtYWxpemVkKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBnZXRCdXR0b25TdHlsZShwYjogT2djUHVzaEJ1dHRvbik6IHt9IHtcblxuICAvLyAgIGxldCBzdHlsZXM7XG4gIC8vICAgaWYgKHBiLmNvbG9yKSB7XG4gIC8vICAgICBzdHlsZXMgPSB7XG4gIC8vICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogcGIuZW5hYmxlZCA/IGByZ2JhKCR7cGIuY29sb3J9KWAgOiBgcmdiYSgyNTUsMjU1LDI1NSwwKWBcbiAgLy8gICAgIH07XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIHN0eWxlcyA9IHtcbiAgLy8gICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBwYi5lbmFibGVkID8gJ2FjY2VudCc6IGByZ2JhKDI1NSwyNTUsMjU1LDApYCxcbiAgLy8gICAgICAgJ2NvbG9yJzogcGIuZW5hYmxlZCA/IGByZ2JhKDAsMCwwLDAuOSlgIDogYHJnYmEoMzMsMzMsMzMsMC4zOClgXG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiBzdHlsZXM7XG4gIC8vIH1cblxuICBnZXRCdXR0b25Db2xvcihwdXNoQnV0dG9uOiBPZ2NQdXNoQnV0dG9uKToge30ge1xuICAgIGxldCBzdHlsZXM7XG4gICAgaWYgKHB1c2hCdXR0b24uY29sb3IgJiYgcHVzaEJ1dHRvbi5lbmFibGVkKSB7XG4gICAgICBzdHlsZXMgPSB7XG4gICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogYHJnYmEoJHtwdXNoQnV0dG9uLmNvbG9yfSlgXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gc3R5bGVzO1xuICB9XG5cbiAgYnVuZGxlSXNWZXJ0aWNhbChidW5kbGU6IE9nY1NlbGVjdG9yQnVuZGxlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGJ1bmRsZS52ZXJ0aWNhbCA/IGJ1bmRsZS52ZXJ0aWNhbCA6IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBvblB1c2hCdXR0b25zQ2hhbmdlR3JvdXAoKSB7XG4gICAgdGhpcy5nZXRQdXNoQnV0dG9uc0dyb3VwcygpLm1hcCgoZ3JvdXApID0+IChncm91cC5lbmFibGVkID0gZmFsc2UpKTtcbiAgICB0aGlzLmdldFB1c2hCdXR0b25zR3JvdXBzKCkuZmluZChcbiAgICAgIChncm91cCkgPT4gZ3JvdXAgPT09IHRoaXMuY3VycmVudFB1c2hCdXR0b25zR3JvdXBcbiAgICApLmVuYWJsZWQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNoZWNrYm94ZXNDaGFuZ2VHcm91cCgpIHtcbiAgICB0aGlzLmdldENoZWNrYm94ZXNHcm91cHMoKS5tYXAoKGdyb3VwKSA9PiAoZ3JvdXAuZW5hYmxlZCA9IGZhbHNlKSk7XG4gICAgdGhpcy5nZXRDaGVja2JveGVzR3JvdXBzKCkuZmluZChcbiAgICAgIChncm91cCkgPT4gZ3JvdXAgPT09IHRoaXMuY3VycmVudENoZWNrYm94ZXNHcm91cFxuICAgICkuZW5hYmxlZCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIG9uUmFkaW9CdXR0b25zQ2hhbmdlR3JvdXAoKSB7XG4gICAgdGhpcy5nZXRSYWRpb0J1dHRvbnNHcm91cHMoKS5tYXAoKGdyb3VwKSA9PiAoZ3JvdXAuZW5hYmxlZCA9IGZhbHNlKSk7XG4gICAgdGhpcy5nZXRSYWRpb0J1dHRvbnNHcm91cHMoKS5maW5kKFxuICAgICAgKGdyb3VwKSA9PiBncm91cCA9PT0gdGhpcy5jdXJyZW50UmFkaW9CdXR0b25zR3JvdXBcbiAgICApLmVuYWJsZWQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBvblNlbGVjdENoYW5nZUdyb3VwKCkge1xuICAgIHRoaXMuZ2V0U2VsZWN0R3JvdXBzKCkubWFwKChncm91cCkgPT4gKGdyb3VwLmVuYWJsZWQgPSBmYWxzZSkpO1xuICAgIHRoaXMuZ2V0U2VsZWN0R3JvdXBzKCkuZmluZChcbiAgICAgIChncm91cCkgPT4gZ3JvdXAgPT09IHRoaXMuY3VycmVudFNlbGVjdEdyb3VwXG4gICAgKS5lbmFibGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgb25BdXRvY29tcGxldGVDaGFuZ2VHcm91cCgpIHtcbiAgICB0aGlzLmdldEF1dG9jb21wbGV0ZUdyb3VwcygpLm1hcCgoZ3JvdXApID0+IChncm91cC5lbmFibGVkID0gZmFsc2UpKTtcbiAgICB0aGlzLmdldEF1dG9jb21wbGV0ZUdyb3VwcygpLmZpbmQoXG4gICAgICAoZ3JvdXApID0+IGdyb3VwID09PSB0aGlzLmN1cnJlbnRBdXRvY29tcGxldGVHcm91cFxuICAgICkuZW5hYmxlZCA9IHRydWU7XG4gIH1cblxuICBvblNlbGVjdGlvbkNoYW5nZShjdXJyZW50T2djU2VsZWN0aW9uPywgc2VsZWN0b3JUeXBlPykge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQpO1xuICAgIGlmIChzZWxlY3RvclR5cGUgPT09ICdyYWRpb0J1dHRvbicpIHtcbiAgICAgIHRoaXMuZW1wdHlSYWRpb0J1dHRvbnMoKTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudE9nY1NlbGVjdGlvbikge1xuICAgICAgY3VycmVudE9nY1NlbGVjdGlvbi5lbmFibGVkID0gIWN1cnJlbnRPZ2NTZWxlY3Rpb24uZW5hYmxlZDtcbiAgICB9XG4gICAgdGhpcy5hcHBseUZpbHRlcnNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgIH0sIDc1MCk7XG4gIH1cblxuICBlbXB0eVJhZGlvQnV0dG9ucygpIHtcbiAgICB0aGlzLmN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cC5jb21wdXRlZFNlbGVjdG9ycy5mb3JFYWNoKChjb21wU2VsZWN0KSA9PiB7XG4gICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycy5tYXAoKHNlbGVjdG9yKSA9PiAoc2VsZWN0b3IuZW5hYmxlZCA9IGZhbHNlKSk7XG5cbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgICAgfSwgNzUwKTtcbiAgICB9KTtcbiAgfVxuXG4gIGVtcHR5U2VsZWN0KCkge1xuICAgIHRoaXMuc2VsZWN0RW5hYmxlZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGVtcHR5QXV0b2NvbXBsZXRlKCkge1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlRW5hYmxlZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmZvcm0uY29udHJvbHNbJ2F1dG9jb21wbGV0ZSddLnNldFZhbHVlKCcnKTtcbiAgICB0aGlzLmZvcm0uY29udHJvbHNbJ2F1dG9jb21wbGV0ZSddLm1hcmtBc1VudG91Y2hlZCgpO1xuICB9XG5cbiAgdG9nZ2xlQWxsU2VsZWN0aW9uKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdEFsbFNlbGVjdGVkKSB7XG4gICAgICBjb25zdCBlbmFibGVkcyA9IFtdO1xuICAgICAgdGhpcy5jdXJyZW50U2VsZWN0R3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMuZm9yRWFjaCgoY29tcFNlbGVjdCkgPT4ge1xuICAgICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycz8uZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcbiAgICAgICAgICBlbmFibGVkcy5wdXNoKHNlbGVjdG9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsLm9wdGlvbnMuZm9yRWFjaCgoaXRlbTogTWF0T3B0aW9uKSA9PiBpdGVtLnNlbGVjdCgpKTtcbiAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMgPSBlbmFibGVkcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWwub3B0aW9ucy5mb3JFYWNoKChpdGVtOiBNYXRPcHRpb24pID0+IGl0ZW0uZGVzZWxlY3QoKSk7XG4gICAgICB0aGlzLnNlbGVjdEVuYWJsZWRzID0gW107XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0T3B0aW9uQ2xpY2sodmFsdWUsIGJ1bmRsZSwgZXZlbnQ/KSB7XG4gICAgaWYgKGJ1bmRsZS5tdWx0aXBsZSkge1xuICAgICAgY29uc3QgZW5hYmxlZHMgPSB0aGlzLnNlbGVjdEVuYWJsZWRzO1xuICAgICAgbGV0IG5ld1N0YXR1cyA9IHRydWU7XG4gICAgICB0aGlzLnNlbC5vcHRpb25zLmZvckVhY2goKGl0ZW06IE1hdE9wdGlvbikgPT4ge1xuICAgICAgICBpZiAoIWl0ZW0uc2VsZWN0ZWQpIHtcbiAgICAgICAgICBuZXdTdGF0dXMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnNlbGVjdEFsbFNlbGVjdGVkID0gbmV3U3RhdHVzO1xuICAgICAgaWYgKGV2ZW50LmlzVXNlcklucHV0KSB7XG4gICAgICAgIGlmIChlbmFibGVkcy5sZW5ndGgpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGVuYWJsZWQgb2YgZW5hYmxlZHMpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkLnRpdGxlID09PSB2YWx1ZS50aXRsZSkge1xuICAgICAgICAgICAgICBpZiAoZW5hYmxlZC5lbmFibGVkICYmIHZhbHVlLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBlbmFibGVkcy5zcGxpY2UoZW5hYmxlZHMuaW5kZXhPZihlbmFibGVkKSwgMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RFbmFibGVkcyA9IGVuYWJsZWRzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVuYWJsZWRzLmluZGV4T2YoZW5hYmxlZCkgPT09IGVuYWJsZWRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgZW5hYmxlZHMucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMgPSBlbmFibGVkcztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuYWJsZWRzLnB1c2godmFsdWUpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0RW5hYmxlZHMgPSBlbmFibGVkcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdEVuYWJsZWQgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBhdXRvY29tcGxldGVPcHRpb25DbGljayh2YWx1ZSkge1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlRW5hYmxlZCA9IHZhbHVlLnZhbHVlO1xuICB9XG5cbiAgZGlzcGxheUZuKGRvbSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRvbSA/IGRvbS52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXJzKCkge1xuICAgIGxldCBmaWx0ZXJRdWVyeVN0cmluZyA9ICcnO1xuICAgIGNvbnN0IGNvbmRpdGlvbnMgPSBbXTtcbiAgICBjb25zdCBjdXJyZW50R3JvdXBzID0gW1xuICAgICAgdGhpcy5jdXJyZW50UHVzaEJ1dHRvbnNHcm91cCxcbiAgICAgIHRoaXMuY3VycmVudENoZWNrYm94ZXNHcm91cCxcbiAgICAgIHRoaXMuY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwLFxuICAgICAgdGhpcy5jdXJyZW50U2VsZWN0R3JvdXAsXG4gICAgICB0aGlzLmN1cnJlbnRBdXRvY29tcGxldGVHcm91cFxuICAgIF07XG4gICAgZm9yIChjb25zdCBjdXJyZW50R3JvdXAgb2YgY3VycmVudEdyb3Vwcykge1xuICAgICAgaWYgKGN1cnJlbnRHcm91cC5jb21wdXRlZFNlbGVjdG9ycykge1xuICAgICAgICBjdXJyZW50R3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMubWFwKChzZWxlY3RvckJ1bmRsZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ1bmRsZUNvbmRpdGlvbiA9IFtdO1xuICAgICAgICAgIHNlbGVjdG9yQnVuZGxlLnNlbGVjdG9yc1xuICAgICAgICAgICAgPy5maWx0ZXIoKG9nY1NlbGVjdG9yKSA9PiBvZ2NTZWxlY3Rvci5lbmFibGVkID09PSB0cnVlKVxuICAgICAgICAgICAgLmZvckVhY2goKGVuYWJsZWRTZWxlY3RvcikgPT5cbiAgICAgICAgICAgICAgYnVuZGxlQ29uZGl0aW9uLnB1c2goZW5hYmxlZFNlbGVjdG9yLmZpbHRlcnMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmIChidW5kbGVDb25kaXRpb24ubGVuZ3RoID49IDEpIHtcbiAgICAgICAgICAgIGlmIChidW5kbGVDb25kaXRpb24ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgIGNvbmRpdGlvbnMucHVzaChidW5kbGVDb25kaXRpb25bMF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uZGl0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsb2dpY2FsOiBzZWxlY3RvckJ1bmRsZS5sb2dpY2FsLFxuICAgICAgICAgICAgICAgIGZpbHRlcnM6IGJ1bmRsZUNvbmRpdGlvblxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5pc1RlbXBvcmFsT3BlcmF0b3IoKSAmJiB0aGlzLl9jdXJyZW50RmlsdGVyLmFjdGl2ZSkge1xuICAgICAgY29uZGl0aW9ucy5wdXNoKFxuICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmludGVyZmFjZU9nY0ZpbHRlcnNbMF1cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChjb25kaXRpb25zLmxlbmd0aCA+PSAxKSB7XG4gICAgICBmaWx0ZXJRdWVyeVN0cmluZyA9IHRoaXMub2djRmlsdGVyV3JpdGVyLmJ1aWxkRmlsdGVyKFxuICAgICAgICBjb25kaXRpb25zLmxlbmd0aCA9PT0gMVxuICAgICAgICAgID8gY29uZGl0aW9uc1swXVxuICAgICAgICAgIDogKHsgbG9naWNhbDogJ0FuZCcsIGZpbHRlcnM6IGNvbmRpdGlvbnMgfSBhcyBJZ29PZ2NGaWx0ZXJPYmplY3QpXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMudHlwZSA9PT0gJ3dtcycpIHtcbiAgICAgIHRoaXMub2djRmlsdGVyU2VydmljZS5maWx0ZXJCeU9nYyhcbiAgICAgICAgdGhpcy5kYXRhc291cmNlIGFzIFdNU0RhdGFTb3VyY2UsXG4gICAgICAgIGZpbHRlclF1ZXJ5U3RyaW5nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMudHlwZSA9PT0gJ3dmcycpIHtcbiAgICAgIC8vIFRPRE86IENoZWNrIGhvdyB0byBwcmV2ZW50IHdmcyB0byByZWZyZXNoIHdoZW4gZmlsdGVyIGljb24gaXMgcHVzaGVkLi4uXG4gICAgICB0aGlzLmRhdGFzb3VyY2Uub2wucmVmcmVzaCgpO1xuICAgIH1cbiAgICB0aGlzLmRhdGFzb3VyY2Uuc2V0T2djRmlsdGVycyh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLCB0cnVlKTtcbiAgfVxuXG4gIGlzTW9yZVJlc3VsdHMoYnVuZGxlLCB0eXBlKSB7XG4gICAgbGV0IHNlbGVjdG9yc0xlbmd0aCA9IDA7XG4gICAgZm9yIChjb25zdCBzZWxlY3RvcnMgb2YgYnVuZGxlLnNlbGVjdG9ycykge1xuICAgICAgc2VsZWN0b3JzTGVuZ3RoKys7XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID1cbiAgICAgIHR5cGUgPT09ICdyYWRpbycgPyB0aGlzLnJhZGlvQnV0dG9uc0luZGV4IDogdGhpcy5jaGVja2JveGVzSW5kZXg7XG4gICAgcmV0dXJuIHNlbGVjdG9yc0xlbmd0aCA+IGluZGV4O1xuICB9XG5cbiAgZGlzcGxheU1vcmVSZXN1bHRzKHR5cGUpIHtcbiAgICB0eXBlID09PSAncmFkaW8nXG4gICAgICA/ICh0aGlzLnJhZGlvQnV0dG9uc0luZGV4ICs9IDUpXG4gICAgICA6ICh0aGlzLmNoZWNrYm94ZXNJbmRleCArPSA1KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpc0xlc3NSZXN1bHRzKGJ1bmRsZSwgdHlwZSkge1xuICAgIGxldCBzZWxlY3RvcnNMZW5ndGggPSAwO1xuICAgIGZvciAoY29uc3Qgc2VsZWN0b3JzIG9mIGJ1bmRsZS5zZWxlY3RvcnMpIHtcbiAgICAgIHNlbGVjdG9yc0xlbmd0aCsrO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9XG4gICAgICB0eXBlID09PSAncmFkaW8nID8gdGhpcy5yYWRpb0J1dHRvbnNJbmRleCA6IHRoaXMuY2hlY2tib3hlc0luZGV4O1xuICAgIHJldHVybiB0aGlzLmJhc2VJbmRleCAhPT0gaW5kZXggJiYgc2VsZWN0b3JzTGVuZ3RoID4gdGhpcy5iYXNlSW5kZXg7XG4gIH1cblxuICBkaXNwbGF5TGVzc1Jlc3VsdHModHlwZSkge1xuICAgIHR5cGUgPT09ICdyYWRpbydcbiAgICAgID8gKHRoaXMucmFkaW9CdXR0b25zSW5kZXggPSB0aGlzLmJhc2VJbmRleClcbiAgICAgIDogKHRoaXMuY2hlY2tib3hlc0luZGV4ID0gdGhpcy5iYXNlSW5kZXgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlzVGVtcG9yYWxPcGVyYXRvcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyPy5vcGVyYXRvcj8udG9Mb3dlckNhc2UoKSA9PT1cbiAgICAgIHRoaXMub2djRmlsdGVyT3BlcmF0b3IuRHVyaW5nLnRvTG93ZXJDYXNlKClcbiAgICApO1xuICB9XG5cbiAgY2hhbmdlUHJvcGVydHkodmFsdWU6IGFueSwgcG9zPzogbnVtYmVyLCByZWZyZXNoRmlsdGVyID0gdHJ1ZSkge1xuICAgIGNvbnN0IGRldGVjdGVkUHJvcGVydHkgPSB0aGlzLmRldGVjdFByb3BlcnR5KHBvcyk7XG4gICAgaWYgKGRldGVjdGVkUHJvcGVydHkpIHtcbiAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVycy5maW5kKFxuICAgICAgICAoZmlsdGVyKSA9PiBmaWx0ZXIuZmlsdGVyaWQgPT09IHRoaXMuY3VycmVudEZpbHRlci5maWx0ZXJpZFxuICAgICAgKVtkZXRlY3RlZFByb3BlcnR5XSA9IHZhbHVlO1xuXG4gICAgICBpZiAocmVmcmVzaEZpbHRlcikge1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRldGVjdFByb3BlcnR5KHBvcz86IG51bWJlcik6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IpIHtcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc05vdEVxdWFsVG86XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNFcXVhbFRvOlxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzR3JlYXRlclRoYW46XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNHcmVhdGVyVGhhbk9yRXF1YWxUbzpcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xlc3NUaGFuOlxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGVzc1RoYW5PckVxdWFsVG86XG4gICAgICAgIHJldHVybiAnZXhwcmVzc2lvbic7XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNMaWtlOlxuICAgICAgICByZXR1cm4gJ3BhdHRlcm4nO1xuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzQmV0d2VlbjpcbiAgICAgICAgcmV0dXJuIHBvcyAmJiBwb3MgPT09IDFcbiAgICAgICAgICA/ICdsb3dlckJvdW5kYXJ5J1xuICAgICAgICAgIDogcG9zICYmIHBvcyA9PT0gMlxuICAgICAgICAgICAgPyAndXBwZXJCb3VuZGFyeSdcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5EdXJpbmc6XG4gICAgICAgIHJldHVybiBwb3MgJiYgcG9zID09PSAxXG4gICAgICAgICAgPyAnYmVnaW4nXG4gICAgICAgICAgOiBwb3MgJiYgcG9zID09PSAyXG4gICAgICAgICAgICA/ICdlbmQnXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBzZWxlY3RvciBvZiBvZ2NGaWx0ZXJzU2VsZWN0b3JzXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJwdXNoQnV0dG9uR3JvdXBzXCJcbiAgICAgICpuZ0lmPVwic2VsZWN0b3Iuc2VsZWN0b3JUeXBlID09PSAncHVzaEJ1dHRvbidcIlxuICAgID5cbiAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgPGRpdiBjbGFzcz1cImdyb3Vwc1NlbGVjdG9yXCIgKm5nSWY9XCJnZXRQdXNoQnV0dG9uc0dyb3VwcygpLmxlbmd0aCA+IDFcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwdXNoQnV0dG9uc0dyb3VwXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLmxlZ2VuZC5zZWxlY3RTdHlsZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiY3VycmVudFB1c2hCdXR0b25zR3JvdXBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzZWxlY3Rvckdyb3VwIG9mIGdldFB1c2hCdXR0b25zR3JvdXBzKClcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0b3JHcm91cFwiXG4gICAgICAgICAgICAgID57eyBzZWxlY3Rvckdyb3VwLnRpdGxlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cImxldCBidW5kbGUgb2YgY3VycmVudFB1c2hCdXR0b25zR3JvdXAuY29tcHV0ZWRTZWxlY3RvcnNcIlxuICAgICAgPlxuICAgICAgICA8aDM+e3sgYnVuZGxlLnRpdGxlIH19PC9oMz5cbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHVzaEJ1dHRvbnNcIlxuICAgICAgICAgIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIlxuICAgICAgICAgIGFwcGVhcmFuY2U9XCJsZWdhY3lcIlxuICAgICAgICAgIHZlcnRpY2FsPVwie3sgYnVuZGxlSXNWZXJ0aWNhbChidW5kbGUpIH19XCJcbiAgICAgICAgICBtdWx0aXBsZT1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgb2djUHVzaEJ1dHRvbiBvZiBidW5kbGUuc2VsZWN0b3JzXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImdldFRvb2xUaXAob2djUHVzaEJ1dHRvbilcIlxuICAgICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRCdXR0b25Db2xvcihvZ2NQdXNoQnV0dG9uKVwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJvZ2NQdXNoQnV0dG9uLmVuYWJsZWRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZShvZ2NQdXNoQnV0dG9uLCBzZWxlY3Rvci5zZWxlY3RvclR5cGUpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvZ2NQdXNoQnV0dG9uXCJcbiAgICAgICAgICAgID57eyBvZ2NQdXNoQnV0dG9uLnRpdGxlIH19XG4gICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNoZWNrYm94R3JvdXBzXCIgKm5nSWY9XCJzZWxlY3Rvci5zZWxlY3RvclR5cGUgPT09ICdjaGVja2JveCdcIj5cbiAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgPGRpdiBjbGFzcz1cImdyb3Vwc1NlbGVjdG9yXCIgKm5nSWY9XCJnZXRDaGVja2JveGVzR3JvdXBzKCkubGVuZ3RoID4gMVwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNoZWNrYm94ZXNHcm91cFwiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5sZWdlbmQuc2VsZWN0U3R5bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cImN1cnJlbnRDaGVja2JveGVzR3JvdXBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzZWxlY3Rvckdyb3VwIG9mIGdldENoZWNrYm94ZXNHcm91cHMoKVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3Rvckdyb3VwXCJcbiAgICAgICAgICAgICAgPnt7IHNlbGVjdG9yR3JvdXAudGl0bGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nRm9yPVwibGV0IGJ1bmRsZSBvZiBjdXJyZW50Q2hlY2tib3hlc0dyb3VwLmNvbXB1dGVkU2VsZWN0b3JzXCJcbiAgICAgID5cbiAgICAgICAgPGgzPnt7IGJ1bmRsZS50aXRsZSB9fTwvaDM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveGVzIG1hdC10eXBvZ3JhcGh5XCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9nY0NoZWNrYm94IG9mIGJ1bmRsZS5zZWxlY3RvcnNcIlxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0VG9vbFRpcChvZ2NDaGVja2JveClcIlxuICAgICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJvZ2NDaGVja2JveC5lbmFibGVkXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2Uob2djQ2hlY2tib3gsIHNlbGVjdG9yLnNlbGVjdG9yVHlwZSlcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9nY0NoZWNrYm94XCJcbiAgICAgICAgICAgID57eyBvZ2NDaGVja2JveC50aXRsZSB9fVxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHBcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgaXNMZXNzUmVzdWx0cyhidW5kbGUsICdjaGVja2JveCcpIHx8XG4gICAgICAgICAgICBpc01vcmVSZXN1bHRzKGJ1bmRsZSwgJ2NoZWNrYm94JylcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPHVcbiAgICAgICAgICAgICpuZ0lmPVwiaXNMZXNzUmVzdWx0cyhidW5kbGUsICdjaGVja2JveCcpXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGVzc1Jlc3VsdHMgbWF0LXR5cG9ncmFwaHlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImRpc3BsYXlMZXNzUmVzdWx0cygnY2hlY2tib3gnKVwiXG4gICAgICAgICAgICA+e3sgJ2lnby5nZW8uZmlsdGVyLmRpc3BsYXlMZXNzUmVzdWx0cycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L3U+XG4gICAgICAgICAgPHVcbiAgICAgICAgICAgICpuZ0lmPVwiaXNNb3JlUmVzdWx0cyhidW5kbGUsICdjaGVja2JveCcpXCJcbiAgICAgICAgICAgIGNsYXNzPVwibW9yZVJlc3VsdHMgbWF0LXR5cG9ncmFwaHlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImRpc3BsYXlNb3JlUmVzdWx0cygnY2hlY2tib3gnKVwiXG4gICAgICAgICAgICA+e3sgJ2lnby5nZW8uZmlsdGVyLmRpc3BsYXlNb3JlUmVzdWx0cycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L3U+XG4gICAgICAgIDwvcD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyYWRpb0J1dHRvbkdyb3Vwc1wiXG4gICAgICAqbmdJZj1cInNlbGVjdG9yLnNlbGVjdG9yVHlwZSA9PT0gJ3JhZGlvQnV0dG9uJ1wiXG4gICAgPlxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzU2VsZWN0b3JcIiAqbmdJZj1cImdldFJhZGlvQnV0dG9uc0dyb3VwcygpLmxlbmd0aCA+IDFcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyYWRpb0J1dHRvbnNHcm91cFwiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5sZWdlbmQuc2VsZWN0U3R5bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cImN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlbGVjdG9yR3JvdXAgb2YgZ2V0UmFkaW9CdXR0b25zR3JvdXBzKClcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0b3JHcm91cFwiXG4gICAgICAgICAgICAgID57eyBzZWxlY3Rvckdyb3VwLnRpdGxlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cImxldCBidW5kbGUgb2YgY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwLmNvbXB1dGVkU2VsZWN0b3JzXCJcbiAgICAgID5cbiAgICAgICAgPGgzPnt7IGJ1bmRsZS50aXRsZSB9fTwvaDM+XG4gICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgZm9ybUNvbnRyb2xOYW1lPVwicmFkaW9CdXR0b25zXCIgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiPlxuICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImJ1bmRsZS51bmZpbHRlcmVkXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci5yZXNldEZpbHRlcnMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJlbXB0eVJhZGlvQnV0dG9ucygpXCJcbiAgICAgICAgICAgID57eyAnaWdvLmdlby5maWx0ZXIucmVzZXRGaWx0ZXJzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9nY1JhZGlvQnV0dG9uIG9mIGJ1bmRsZS5zZWxlY3RvcnNcIlxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0VG9vbFRpcChvZ2NSYWRpb0J1dHRvbilcIlxuICAgICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJvZ2NSYWRpb0J1dHRvbi5lbmFibGVkXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2Uob2djUmFkaW9CdXR0b24sIHNlbGVjdG9yLnNlbGVjdG9yVHlwZSlcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9nY1JhZGlvQnV0dG9uXCJcbiAgICAgICAgICAgID57eyBvZ2NSYWRpb0J1dHRvbi50aXRsZSB9fVxuICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgaXNMZXNzUmVzdWx0cyhidW5kbGUsICdyYWRpbycpIHx8IGlzTW9yZVJlc3VsdHMoYnVuZGxlLCAncmFkaW8nKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dVxuICAgICAgICAgICAgICAqbmdJZj1cImlzTGVzc1Jlc3VsdHMoYnVuZGxlLCAncmFkaW8nKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibGVzc1Jlc3VsdHMgbWF0LXR5cG9ncmFwaHlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGlzcGxheUxlc3NSZXN1bHRzKCdyYWRpbycpXCJcbiAgICAgICAgICAgICAgPnt7ICdpZ28uZ2VvLmZpbHRlci5kaXNwbGF5TGVzc1Jlc3VsdHMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L3U+XG4gICAgICAgICAgICA8dVxuICAgICAgICAgICAgICAqbmdJZj1cImlzTW9yZVJlc3VsdHMoYnVuZGxlLCAncmFkaW8nKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibW9yZVJlc3VsdHMgbWF0LXR5cG9ncmFwaHlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGlzcGxheU1vcmVSZXN1bHRzKCdyYWRpbycpXCJcbiAgICAgICAgICAgICAgPnt7ICdpZ28uZ2VvLmZpbHRlci5kaXNwbGF5TW9yZVJlc3VsdHMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L3U+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInNlbGVjdEdyb3Vwc1wiICpuZ0lmPVwic2VsZWN0b3Iuc2VsZWN0b3JUeXBlID09PSAnc2VsZWN0J1wiPlxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzU2VsZWN0b3JcIiAqbmdJZj1cImdldFNlbGVjdEdyb3VwcygpLmxlbmd0aCA+IDFcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RHcm91cFwiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5sZWdlbmQuc2VsZWN0U3R5bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cImN1cnJlbnRTZWxlY3RHcm91cFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlbGVjdG9yR3JvdXAgb2YgZ2V0U2VsZWN0R3JvdXBzKClcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0b3JHcm91cFwiXG4gICAgICAgICAgICAgID57eyBzZWxlY3Rvckdyb3VwLnRpdGxlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidW5kbGUgb2YgY3VycmVudFNlbGVjdEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzXCI+XG4gICAgICAgIDxoMz57eyBidW5kbGUudGl0bGUgfX08L2gzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzU2VsZWN0b3JcIj5cbiAgICAgICAgICA8bWF0LWJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJidW5kbGUudW5maWx0ZXJlZCAmJiAhYnVuZGxlLm11bHRpcGxlXCJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci5yZXNldEZpbHRlcnMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImVtcHR5U2VsZWN0KClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZmlsdGVyLXJlbW92ZVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtYnV0dG9uPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiYnVuZGxlLndpZHRoID8gYnVuZGxlLndpZHRoIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYnVuZGxlLm11bHRpcGxlOyBlbHNlIG5vdE11bHRpXCI+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgI3NlbGVjdGlvblxuICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJidW5kbGUubXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJidW5kbGUudGl0bGVcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdE11bHRpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveGVzIG1hdC10eXBvZ3JhcGh5XCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYnVuZGxlLm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RBbGxTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQWxsU2VsZWN0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICA+VG91c1xuICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvZ2NTZWxlY3Qgb2YgYnVuZGxlLnNlbGVjdG9yc1wiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJnZXRUb29sVGlwKG9nY1NlbGVjdClcIlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBEZWxheT1cIjUwMFwiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJtYXRlcmlhbC10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgIChvblNlbGVjdGlvbkNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0T3B0aW9uQ2xpY2soJGV2ZW50LnNvdXJjZS52YWx1ZSwgYnVuZGxlLCAkZXZlbnQpXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9nY1NlbGVjdFwiXG4gICAgICAgICAgICAgICAgICA+e3sgb2djU2VsZWN0LnRpdGxlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90TXVsdGk+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtwbGFjZWhvbGRlcl09XCJidW5kbGUudGl0bGVcIiBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RcIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9nY1NlbGVjdCBvZiBidW5kbGUuc2VsZWN0b3JzXCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImdldFRvb2xUaXAob2djU2VsZWN0KVwiXG4gICAgICAgICAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcERlbGF5PVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9nY1NlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAob25TZWxlY3Rpb25DaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdE9wdGlvbkNsaWNrKCRldmVudC5zb3VyY2UudmFsdWUsIGJ1bmRsZSlcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+e3sgb2djU2VsZWN0LnRpdGxlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImF1dG9jb21wbGV0ZUdyb3Vwc1wiXG4gICAgICAqbmdJZj1cInNlbGVjdG9yLnNlbGVjdG9yVHlwZSA9PT0gJ2F1dG9jb21wbGV0ZSdcIlxuICAgID5cbiAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgPGRpdiBjbGFzcz1cImdyb3Vwc1NlbGVjdG9yXCIgKm5nSWY9XCJnZXRBdXRvY29tcGxldGVHcm91cHMoKS5sZW5ndGggPiAxXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYXV0b2NvbXBsZXRlR3JvdXBcIlxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIubGVnZW5kLnNlbGVjdFN0eWxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJjdXJyZW50QXV0b2NvbXBsZXRlR3JvdXBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhdXRvY29tcGxldGVHcm91cCBvZiBnZXRBdXRvY29tcGxldGVHcm91cHMoKVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJhdXRvY29tcGxldGVHcm91cFwiXG4gICAgICAgICAgICAgID57eyBhdXRvY29tcGxldGVHcm91cC50aXRsZSB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdGb3I9XCJsZXQgYnVuZGxlIG9mIGN1cnJlbnRBdXRvY29tcGxldGVHcm91cC5jb21wdXRlZFNlbGVjdG9yc1wiXG4gICAgICA+XG4gICAgICAgIDxoMz57eyBidW5kbGUudGl0bGUgfX08L2gzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzU2VsZWN0b3JcIj5cbiAgICAgICAgICA8bWF0LWJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJidW5kbGUudW5maWx0ZXJlZFwiXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwid2FyblwiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5maWx0ZXIucmVzZXRGaWx0ZXJzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJtYXRlcmlhbC10b29sdGlwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJlbXB0eUF1dG9jb21wbGV0ZSgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImZpbHRlci1yZW1vdmVcIj48L21hdC1pY29uPlxuICAgICAgICAgIDwvbWF0LWJ1dHRvbj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgICAgICpuZ0lmPVwiZmlsdGVyZWRPZ2NBdXRvY29tcGxldGVbYnVuZGxlLmlkXVwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCJidW5kbGUud2lkdGggPyBidW5kbGUud2lkdGggOiB1bmRlZmluZWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICAgICNhdXRvY29tcGxldGVcbiAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvY29tcGxldGVcIlxuICAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiYnVuZGxlLnRpdGxlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICAgICNhdXRvY29tcGxldGVcbiAgICAgICAgICAgICAgKG9wdGlvblNlbGVjdGVkKT1cImF1dG9jb21wbGV0ZU9wdGlvbkNsaWNrKCRldmVudC5vcHRpb24udmFsdWUpXCJcbiAgICAgICAgICAgICAgW2Rpc3BsYXlXaXRoXT1cImRpc3BsYXlGblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgb2djQXV0b2NvbXBsZXRlIG9mIGZpbHRlcmVkT2djQXV0b2NvbXBsZXRlW2J1bmRsZS5pZF1cbiAgICAgICAgICAgICAgICAgICAgfCBhc3luY1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9nY0F1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBvZ2NBdXRvY29tcGxldGUudmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9mb3JtPlxuXG48ZGl2ICpuZ0lmPVwiaXNUZW1wb3JhbE9wZXJhdG9yKClcIj5cbiAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gIDxoMyAqbmdJZj1cIiFjdXJyZW50RmlsdGVyLnRpdGxlXCI+XG4gICAge3sgJ2lnby5nZW8uZmlsdGVyLnJlcG9ydGluZ0RhdGUnIHwgdHJhbnNsYXRlIH19XG4gIDwvaDM+XG4gIDxoMyAqbmdJZj1cImN1cnJlbnRGaWx0ZXIudGl0bGVcIj57eyBjdXJyZW50RmlsdGVyLnRpdGxlIH19PC9oMz5cbiAgPGlnby1vZ2MtZmlsdGVyLXRpbWVcbiAgICBbZGF0YXNvdXJjZV09XCJkYXRhc291cmNlXCJcbiAgICBbY3VycmVudEZpbHRlcl09XCJjdXJyZW50RmlsdGVyXCJcbiAgICAoY2hhbmdlUHJvcGVydHkpPVwiY2hhbmdlUHJvcGVydHkoJGV2ZW50LnZhbHVlLCAkZXZlbnQucG9zKVwiXG4gID5cbiAgPC9pZ28tb2djLWZpbHRlci10aW1lPlxuPC9kaXY+XG4iXX0=