@igo2/geo 1.13.2 → 1.13.4

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 (448) 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/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +2 -2
  7. package/esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +2 -2
  8. package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +2 -2
  9. package/esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs +1 -1
  10. package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +2 -2
  11. package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +2 -2
  12. package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +2 -2
  13. package/esm2020/lib/catalog/catalog-library/catalog-library.module.mjs +1 -1
  14. package/esm2020/lib/catalog/catalog.module.mjs +1 -1
  15. package/esm2020/lib/catalog/index.mjs +1 -1
  16. package/esm2020/lib/catalog/shared/catalog.abstract.mjs +1 -1
  17. package/esm2020/lib/catalog/shared/catalog.enum.mjs +1 -1
  18. package/esm2020/lib/catalog/shared/catalog.interface.mjs +1 -1
  19. package/esm2020/lib/catalog/shared/catalog.service.mjs +1 -1
  20. package/esm2020/lib/catalog/shared/index.mjs +1 -1
  21. package/esm2020/lib/datasource/datasource.module.mjs +1 -1
  22. package/esm2020/lib/datasource/index.mjs +1 -1
  23. package/esm2020/lib/datasource/shared/capabilities.service.mjs +1 -1
  24. package/esm2020/lib/datasource/shared/datasource.service.mjs +1 -1
  25. package/esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  26. package/esm2020/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
  27. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +1 -1
  28. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
  29. package/esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs +1 -1
  30. package/esm2020/lib/datasource/shared/datasources/carto-datasource.mjs +1 -1
  31. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  32. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs +1 -1
  33. package/esm2020/lib/datasource/shared/datasources/data.service.mjs +1 -1
  34. package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  35. package/esm2020/lib/datasource/shared/datasources/datasource.mjs +1 -1
  36. package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  37. package/esm2020/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
  38. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
  39. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +1 -1
  40. package/esm2020/lib/datasource/shared/datasources/index.mjs +1 -1
  41. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +1 -1
  42. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs +1 -1
  43. package/esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs +1 -1
  44. package/esm2020/lib/datasource/shared/datasources/osm-datasource.mjs +1 -1
  45. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +1 -1
  46. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +1 -1
  47. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
  48. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs +1 -1
  49. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
  50. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
  51. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  52. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
  53. package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +1 -1
  54. package/esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  55. package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +2 -1
  56. package/esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs +1 -1
  57. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
  58. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
  59. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
  60. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
  61. package/esm2020/lib/datasource/shared/index.mjs +1 -1
  62. package/esm2020/lib/datasource/shared/options/index.mjs +1 -1
  63. package/esm2020/lib/datasource/shared/options/options-api.interface.mjs +1 -1
  64. package/esm2020/lib/datasource/shared/options/options-api.providers.mjs +1 -1
  65. package/esm2020/lib/datasource/shared/options/options-api.service.mjs +1 -1
  66. package/esm2020/lib/datasource/shared/options/options.service.mjs +1 -1
  67. package/esm2020/lib/datasource/utils/esri-style-generator.mjs +1 -1
  68. package/esm2020/lib/datasource/utils/index.mjs +1 -1
  69. package/esm2020/lib/datasource/utils/tilegrid.mjs +1 -1
  70. package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +2 -2
  71. package/esm2020/lib/directions/directions-buttons/index.mjs +1 -1
  72. package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +2 -2
  73. package/esm2020/lib/directions/directions-inputs/index.mjs +1 -1
  74. package/esm2020/lib/directions/directions-results/directions-results.component.mjs +2 -2
  75. package/esm2020/lib/directions/directions-results/index.mjs +1 -1
  76. package/esm2020/lib/directions/directions-sources/directions-source.interface.mjs +1 -1
  77. package/esm2020/lib/directions/directions-sources/directions-source.mjs +1 -1
  78. package/esm2020/lib/directions/directions-sources/directions-source.provider.mjs +1 -1
  79. package/esm2020/lib/directions/directions-sources/index.mjs +1 -1
  80. package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +1 -1
  81. package/esm2020/lib/directions/directions.component.mjs +2 -2
  82. package/esm2020/lib/directions/directions.module.mjs +1 -1
  83. package/esm2020/lib/directions/index.mjs +1 -1
  84. package/esm2020/lib/directions/shared/directions-source.service.mjs +1 -1
  85. package/esm2020/lib/directions/shared/directions.enum.mjs +1 -1
  86. package/esm2020/lib/directions/shared/directions.interface.mjs +1 -1
  87. package/esm2020/lib/directions/shared/directions.service.mjs +1 -1
  88. package/esm2020/lib/directions/shared/directions.utils.mjs +1 -1
  89. package/esm2020/lib/directions/shared/index.mjs +1 -1
  90. package/esm2020/lib/directions/shared/store.mjs +1 -1
  91. package/esm2020/lib/download/download-button/download-button.component.mjs +2 -2
  92. package/esm2020/lib/download/download-button/index.mjs +1 -1
  93. package/esm2020/lib/download/download.module.mjs +1 -1
  94. package/esm2020/lib/download/index.mjs +1 -1
  95. package/esm2020/lib/download/shared/download.interface.mjs +1 -1
  96. package/esm2020/lib/download/shared/download.service.mjs +1 -1
  97. package/esm2020/lib/download/shared/index.mjs +1 -1
  98. package/esm2020/lib/draw/draw/draw-layer-popup.component.mjs +55 -0
  99. package/esm2020/lib/draw/draw/draw-popup.component.mjs +2 -2
  100. package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +2 -2
  101. package/esm2020/lib/draw/draw/draw.component.mjs +417 -173
  102. package/esm2020/lib/draw/draw/draw.module.mjs +4 -3
  103. package/esm2020/lib/draw/drawingTool.module.mjs +1 -1
  104. package/esm2020/lib/draw/index.mjs +1 -1
  105. package/esm2020/lib/draw/shared/draw-icon.service.mjs +1 -1
  106. package/esm2020/lib/draw/shared/draw-style.service.mjs +1 -1
  107. package/esm2020/lib/draw/shared/draw.enum.mjs +1 -1
  108. package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
  109. package/esm2020/lib/draw/shared/draw.utils.mjs +1 -1
  110. package/esm2020/lib/draw/shared/index.mjs +1 -1
  111. package/esm2020/lib/feature/feature-details/feature-details.component.mjs +13 -11
  112. package/esm2020/lib/feature/feature-details/feature-details.directive.mjs +1 -1
  113. package/esm2020/lib/feature/feature-details/feature-details.module.mjs +1 -1
  114. package/esm2020/lib/feature/feature-form/feature-form.component.mjs +2 -2
  115. package/esm2020/lib/feature/feature-form/feature-form.module.mjs +1 -1
  116. package/esm2020/lib/feature/feature.module.mjs +1 -1
  117. package/esm2020/lib/feature/index.mjs +1 -1
  118. package/esm2020/lib/feature/shared/feature.enums.mjs +1 -1
  119. package/esm2020/lib/feature/shared/feature.interfaces.mjs +1 -1
  120. package/esm2020/lib/feature/shared/feature.utils.mjs +1 -1
  121. package/esm2020/lib/feature/shared/index.mjs +1 -1
  122. package/esm2020/lib/feature/shared/store.mjs +1 -1
  123. package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +1 -1
  124. package/esm2020/lib/feature/shared/strategies/in-map-resolution.mjs +1 -1
  125. package/esm2020/lib/feature/shared/strategies/index.mjs +1 -1
  126. package/esm2020/lib/feature/shared/strategies/loading-layer.mjs +1 -1
  127. package/esm2020/lib/feature/shared/strategies/loading.mjs +1 -1
  128. package/esm2020/lib/feature/shared/strategies/selection.mjs +1 -1
  129. package/esm2020/lib/feature/shared/strategies.utils.mjs +1 -1
  130. package/esm2020/lib/filter/filter.module.mjs +1 -1
  131. package/esm2020/lib/filter/index.mjs +1 -1
  132. package/esm2020/lib/filter/ogc-filter-button/index.mjs +1 -1
  133. package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +2 -2
  134. package/esm2020/lib/filter/ogc-filter-form/index.mjs +1 -1
  135. package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +2 -2
  136. package/esm2020/lib/filter/ogc-filter-selection/index.mjs +1 -1
  137. package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +2 -2
  138. package/esm2020/lib/filter/ogc-filter-time/index.mjs +1 -1
  139. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +2 -2
  140. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +2 -2
  141. package/esm2020/lib/filter/ogc-filterable-form/index.mjs +1 -1
  142. package/esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +2 -2
  143. package/esm2020/lib/filter/ogc-filterable-item/index.mjs +1 -1
  144. package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +2 -2
  145. package/esm2020/lib/filter/ogc-filterable-list/index.mjs +1 -1
  146. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +1 -1
  147. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +2 -2
  148. package/esm2020/lib/filter/shared/filterable-datasource.pipe.mjs +1 -1
  149. package/esm2020/lib/filter/shared/index.mjs +1 -1
  150. package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +1 -1
  151. package/esm2020/lib/filter/shared/ogc-filter.enum.mjs +1 -1
  152. package/esm2020/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  153. package/esm2020/lib/filter/shared/ogc-filter.mjs +1 -1
  154. package/esm2020/lib/filter/shared/ogc-filter.service.mjs +1 -1
  155. package/esm2020/lib/filter/shared/spatial-filter.enum.mjs +1 -1
  156. package/esm2020/lib/filter/shared/spatial-filter.interface.mjs +1 -1
  157. package/esm2020/lib/filter/shared/spatial-filter.service.mjs +1 -1
  158. package/esm2020/lib/filter/shared/time-filter.enum.mjs +1 -1
  159. package/esm2020/lib/filter/shared/time-filter.interface.mjs +1 -1
  160. package/esm2020/lib/filter/shared/time-filter.service.mjs +1 -1
  161. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/index.mjs +1 -1
  162. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +2 -2
  163. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/index.mjs +1 -1
  164. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +2 -2
  165. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/index.mjs +1 -1
  166. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +2 -2
  167. package/esm2020/lib/filter/time-filter-button/index.mjs +1 -1
  168. package/esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs +2 -2
  169. package/esm2020/lib/filter/time-filter-form/index.mjs +1 -1
  170. package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +2 -2
  171. package/esm2020/lib/filter/time-filter-item/index.mjs +1 -1
  172. package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +2 -2
  173. package/esm2020/lib/filter/time-filter-list/index.mjs +1 -1
  174. package/esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +1 -1
  175. package/esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs +2 -2
  176. package/esm2020/lib/geo.module.mjs +1 -1
  177. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +1 -1
  178. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +2 -2
  179. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +1 -1
  180. package/esm2020/lib/geometry/geometry.module.mjs +1 -1
  181. package/esm2020/lib/geometry/index.mjs +1 -1
  182. package/esm2020/lib/geometry/shared/controls/draw.mjs +1 -1
  183. package/esm2020/lib/geometry/shared/controls/index.mjs +1 -1
  184. package/esm2020/lib/geometry/shared/controls/modify.mjs +1 -1
  185. package/esm2020/lib/geometry/shared/controls/slice.mjs +1 -1
  186. package/esm2020/lib/geometry/shared/geometry.errors.mjs +1 -1
  187. package/esm2020/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  188. package/esm2020/lib/geometry/shared/geometry.utils.mjs +1 -1
  189. package/esm2020/lib/geometry/shared/index.mjs +1 -1
  190. package/esm2020/lib/import-export/export-button/export-button.component.mjs +2 -2
  191. package/esm2020/lib/import-export/export-button/index.mjs +1 -1
  192. package/esm2020/lib/import-export/import-export/import-export.component.mjs +2 -2
  193. package/esm2020/lib/import-export/import-export/index.mjs +1 -1
  194. package/esm2020/lib/import-export/import-export.module.mjs +1 -1
  195. package/esm2020/lib/import-export/index.mjs +1 -1
  196. package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +1 -1
  197. package/esm2020/lib/import-export/shared/export.errors.mjs +1 -1
  198. package/esm2020/lib/import-export/shared/export.interface.mjs +1 -1
  199. package/esm2020/lib/import-export/shared/export.service.mjs +1 -1
  200. package/esm2020/lib/import-export/shared/export.type.mjs +1 -1
  201. package/esm2020/lib/import-export/shared/export.utils.mjs +1 -1
  202. package/esm2020/lib/import-export/shared/import.errors.mjs +1 -1
  203. package/esm2020/lib/import-export/shared/import.interface.mjs +1 -1
  204. package/esm2020/lib/import-export/shared/import.service.mjs +1 -1
  205. package/esm2020/lib/import-export/shared/import.utils.mjs +1 -1
  206. package/esm2020/lib/import-export/shared/index.mjs +1 -1
  207. package/esm2020/lib/import-export/style-list/index.mjs +1 -1
  208. package/esm2020/lib/import-export/style-list/style-list.interface.mjs +1 -1
  209. package/esm2020/lib/import-export/style-list/style-list.module.mjs +1 -1
  210. package/esm2020/lib/import-export/style-list/style-list.provider.mjs +1 -1
  211. package/esm2020/lib/import-export/style-list/style-list.service.mjs +1 -1
  212. package/esm2020/lib/layer/index.mjs +1 -1
  213. package/esm2020/lib/layer/layer-item/index.mjs +1 -1
  214. package/esm2020/lib/layer/layer-item/layer-item.component.mjs +2 -2
  215. package/esm2020/lib/layer/layer-legend/index.mjs +1 -1
  216. package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +2 -2
  217. package/esm2020/lib/layer/layer-legend-item/index.mjs +1 -1
  218. package/esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs +2 -2
  219. package/esm2020/lib/layer/layer-legend-list/index.mjs +1 -1
  220. package/esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +1 -1
  221. package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +2 -2
  222. package/esm2020/lib/layer/layer-list/index.mjs +1 -1
  223. package/esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs +1 -1
  224. package/esm2020/lib/layer/layer-list/layer-list.component.mjs +2 -2
  225. package/esm2020/lib/layer/layer-list/layer-list.enum.mjs +1 -1
  226. package/esm2020/lib/layer/layer-list-tool/index.mjs +1 -1
  227. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +2 -2
  228. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +1 -1
  229. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +1 -1
  230. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs +1 -1
  231. package/esm2020/lib/layer/layer.module.mjs +1 -1
  232. package/esm2020/lib/layer/shared/clusterParam.mjs +1 -1
  233. package/esm2020/lib/layer/shared/index.mjs +1 -1
  234. package/esm2020/lib/layer/shared/layer.enums.mjs +1 -1
  235. package/esm2020/lib/layer/shared/layer.service.mjs +1 -1
  236. package/esm2020/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  237. package/esm2020/lib/layer/shared/layers/any-layer.mjs +1 -1
  238. package/esm2020/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  239. package/esm2020/lib/layer/shared/layers/image-layer.mjs +1 -1
  240. package/esm2020/lib/layer/shared/layers/index.mjs +1 -1
  241. package/esm2020/lib/layer/shared/layers/layer.interface.mjs +1 -1
  242. package/esm2020/lib/layer/shared/layers/layer.mjs +1 -1
  243. package/esm2020/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
  244. package/esm2020/lib/layer/shared/layers/tile-layer.mjs +1 -1
  245. package/esm2020/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  246. package/esm2020/lib/layer/shared/layers/vector-layer.mjs +1 -1
  247. package/esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
  248. package/esm2020/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
  249. package/esm2020/lib/layer/shared/style.service.mjs +1 -1
  250. package/esm2020/lib/layer/shared/vector-style.interface.mjs +1 -1
  251. package/esm2020/lib/layer/style-modal/index.mjs +1 -1
  252. package/esm2020/lib/layer/style-modal/style-modal.component.mjs +2 -2
  253. package/esm2020/lib/layer/track-feature-button/index.mjs +1 -1
  254. package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +2 -2
  255. package/esm2020/lib/layer/utils/image-watcher.mjs +1 -1
  256. package/esm2020/lib/layer/utils/index.mjs +1 -1
  257. package/esm2020/lib/layer/utils/layer.utils.mjs +1 -1
  258. package/esm2020/lib/layer/utils/outputLegend.mjs +1 -1
  259. package/esm2020/lib/layer/utils/tile-watcher.mjs +1 -1
  260. package/esm2020/lib/layer/utils/vector-watcher.mjs +1 -1
  261. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +1 -1
  262. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +2 -2
  263. package/esm2020/lib/map/baselayers-switcher/index.mjs +1 -1
  264. package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +2 -2
  265. package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +2 -2
  266. package/esm2020/lib/map/geolocate-button/index.mjs +1 -1
  267. package/esm2020/lib/map/index.mjs +1 -1
  268. package/esm2020/lib/map/info-section/index.mjs +1 -1
  269. package/esm2020/lib/map/info-section/info-section.component.mjs +2 -2
  270. package/esm2020/lib/map/map-browser/index.mjs +1 -1
  271. package/esm2020/lib/map/map-browser/map-browser.component.mjs +2 -2
  272. package/esm2020/lib/map/map-center/index.mjs +1 -1
  273. package/esm2020/lib/map/map-center/map-center.component.mjs +2 -2
  274. package/esm2020/lib/map/map.module.mjs +1 -1
  275. package/esm2020/lib/map/menu-button/index.mjs +1 -1
  276. package/esm2020/lib/map/menu-button/menu-button.component.mjs +2 -2
  277. package/esm2020/lib/map/offline-button/index.mjs +1 -1
  278. package/esm2020/lib/map/offline-button/offline-button.component.mjs +2 -2
  279. package/esm2020/lib/map/rotation-button/index.mjs +1 -1
  280. package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +2 -2
  281. package/esm2020/lib/map/shared/controllers/controller.mjs +1 -1
  282. package/esm2020/lib/map/shared/controllers/geolocation.mjs +1 -1
  283. package/esm2020/lib/map/shared/controllers/index.mjs +1 -1
  284. package/esm2020/lib/map/shared/controllers/view.mjs +1 -1
  285. package/esm2020/lib/map/shared/hover-feature.directive.mjs +1 -1
  286. package/esm2020/lib/map/shared/index.mjs +1 -1
  287. package/esm2020/lib/map/shared/linkedLayers.utils.mjs +3 -3
  288. package/esm2020/lib/map/shared/map-pointer-position.directive.mjs +1 -1
  289. package/esm2020/lib/map/shared/map.enums.mjs +1 -1
  290. package/esm2020/lib/map/shared/map.interface.mjs +1 -1
  291. package/esm2020/lib/map/shared/map.mjs +1 -1
  292. package/esm2020/lib/map/shared/map.service.mjs +1 -1
  293. package/esm2020/lib/map/shared/map.utils.mjs +1 -1
  294. package/esm2020/lib/map/shared/mapOffline.directive.mjs +1 -1
  295. package/esm2020/lib/map/shared/projection.interfaces.mjs +1 -1
  296. package/esm2020/lib/map/shared/projection.service.mjs +1 -1
  297. package/esm2020/lib/map/shared/projection.utils.mjs +1 -1
  298. package/esm2020/lib/map/swipe-control/index.mjs +1 -1
  299. package/esm2020/lib/map/swipe-control/swipe-control.component.mjs +2 -2
  300. package/esm2020/lib/map/utils/layer-watcher.mjs +1 -1
  301. package/esm2020/lib/map/wake-lock-button/index.mjs +1 -1
  302. package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +2 -2
  303. package/esm2020/lib/map/zoom-button/index.mjs +1 -1
  304. package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +2 -2
  305. package/esm2020/lib/measure/index.mjs +1 -1
  306. package/esm2020/lib/measure/measure.module.mjs +1 -1
  307. package/esm2020/lib/measure/measurer/measure-format.pipe.mjs +1 -1
  308. package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +2 -2
  309. package/esm2020/lib/measure/measurer/measurer-item.component.mjs +2 -2
  310. package/esm2020/lib/measure/measurer/measurer.component.mjs +2 -2
  311. package/esm2020/lib/measure/measurer/measurer.module.mjs +1 -1
  312. package/esm2020/lib/measure/shared/index.mjs +1 -1
  313. package/esm2020/lib/measure/shared/measure.enum.mjs +1 -1
  314. package/esm2020/lib/measure/shared/measure.interfaces.mjs +1 -1
  315. package/esm2020/lib/measure/shared/measure.utils.mjs +1 -1
  316. package/esm2020/lib/metadata/index.mjs +1 -1
  317. package/esm2020/lib/metadata/metadata-button/index.mjs +1 -1
  318. package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +3 -3
  319. package/esm2020/lib/metadata/metadata.module.mjs +1 -1
  320. package/esm2020/lib/metadata/shared/index.mjs +1 -1
  321. package/esm2020/lib/metadata/shared/metadata.interface.mjs +1 -1
  322. package/esm2020/lib/metadata/shared/metadata.service.mjs +1 -1
  323. package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +1 -1
  324. package/esm2020/lib/offline/geoDB/geoDB.enums.mjs +1 -1
  325. package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  326. package/esm2020/lib/offline/geoDB/geoDB.service.mjs +1 -1
  327. package/esm2020/lib/offline/geoDB/index.mjs +1 -1
  328. package/esm2020/lib/offline/index.mjs +1 -1
  329. package/esm2020/lib/offline/shared/geo-network.service.mjs +1 -1
  330. package/esm2020/lib/offline/shared/index.mjs +1 -1
  331. package/esm2020/lib/overlay/index.mjs +1 -1
  332. package/esm2020/lib/overlay/overlay.module.mjs +1 -1
  333. package/esm2020/lib/overlay/shared/index.mjs +1 -1
  334. package/esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs +1 -1
  335. package/esm2020/lib/overlay/shared/overlay.directive.mjs +1 -1
  336. package/esm2020/lib/overlay/shared/overlay.enum.mjs +1 -1
  337. package/esm2020/lib/overlay/shared/overlay.mjs +1 -1
  338. package/esm2020/lib/overlay/shared/overlay.service.mjs +1 -1
  339. package/esm2020/lib/overlay/shared/overlay.utils.mjs +1 -1
  340. package/esm2020/lib/print/index.mjs +1 -1
  341. package/esm2020/lib/print/print/print.component.mjs +2 -2
  342. package/esm2020/lib/print/print-form/index.mjs +1 -1
  343. package/esm2020/lib/print/print-form/print-form.component.mjs +2 -2
  344. package/esm2020/lib/print/print.module.mjs +1 -1
  345. package/esm2020/lib/print/shared/index.mjs +1 -1
  346. package/esm2020/lib/print/shared/print.interface.mjs +1 -1
  347. package/esm2020/lib/print/shared/print.service.mjs +1 -1
  348. package/esm2020/lib/print/shared/print.type.mjs +1 -1
  349. package/esm2020/lib/query/index.mjs +1 -1
  350. package/esm2020/lib/query/query.module.mjs +1 -1
  351. package/esm2020/lib/query/shared/index.mjs +1 -1
  352. package/esm2020/lib/query/shared/query-search-source.mjs +1 -1
  353. package/esm2020/lib/query/shared/query-search-source.providers.mjs +1 -1
  354. package/esm2020/lib/query/shared/query.directive.mjs +1 -1
  355. package/esm2020/lib/query/shared/query.enums.mjs +1 -1
  356. package/esm2020/lib/query/shared/query.interfaces.mjs +1 -1
  357. package/esm2020/lib/query/shared/query.service.mjs +1 -1
  358. package/esm2020/lib/query/shared/query.utils.mjs +1 -1
  359. package/esm2020/lib/search/index.mjs +1 -1
  360. package/esm2020/lib/search/search-bar/search-bar.component.mjs +2 -2
  361. package/esm2020/lib/search/search-bar/search-bar.module.mjs +1 -1
  362. package/esm2020/lib/search/search-bar/search-url-param.directive.mjs +1 -1
  363. package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +2 -2
  364. package/esm2020/lib/search/search-results/search-results-item.component.mjs +2 -2
  365. package/esm2020/lib/search/search-results/search-results.component.mjs +2 -2
  366. package/esm2020/lib/search/search-results/search-results.module.mjs +1 -1
  367. package/esm2020/lib/search/search-selector/search-selector.component.mjs +2 -2
  368. package/esm2020/lib/search/search-selector/search-selector.module.mjs +1 -1
  369. package/esm2020/lib/search/search-settings/search-settings.component.mjs +2 -2
  370. package/esm2020/lib/search/search-settings/search-settings.module.mjs +1 -1
  371. package/esm2020/lib/search/search.module.mjs +1 -1
  372. package/esm2020/lib/search/shared/index.mjs +1 -1
  373. package/esm2020/lib/search/shared/search-pointer-summary.directive.mjs +1 -1
  374. package/esm2020/lib/search/shared/search-source-service.providers.mjs +1 -1
  375. package/esm2020/lib/search/shared/search-source.service.mjs +1 -1
  376. package/esm2020/lib/search/shared/search.enums.mjs +1 -1
  377. package/esm2020/lib/search/shared/search.interfaces.mjs +1 -1
  378. package/esm2020/lib/search/shared/search.service.mjs +1 -1
  379. package/esm2020/lib/search/shared/search.utils.mjs +1 -1
  380. package/esm2020/lib/search/shared/sources/cadastre.mjs +1 -1
  381. package/esm2020/lib/search/shared/sources/cadastre.providers.mjs +1 -1
  382. package/esm2020/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
  383. package/esm2020/lib/search/shared/sources/coordinates.mjs +1 -1
  384. package/esm2020/lib/search/shared/sources/coordinates.providers.mjs +1 -1
  385. package/esm2020/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
  386. package/esm2020/lib/search/shared/sources/icherche.mjs +1 -1
  387. package/esm2020/lib/search/shared/sources/icherche.providers.mjs +1 -1
  388. package/esm2020/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  389. package/esm2020/lib/search/shared/sources/ilayer.mjs +1 -1
  390. package/esm2020/lib/search/shared/sources/ilayer.providers.mjs +1 -1
  391. package/esm2020/lib/search/shared/sources/index.mjs +1 -1
  392. package/esm2020/lib/search/shared/sources/nominatim.interfaces.mjs +1 -1
  393. package/esm2020/lib/search/shared/sources/nominatim.mjs +2 -2
  394. package/esm2020/lib/search/shared/sources/nominatim.providers.mjs +1 -1
  395. package/esm2020/lib/search/shared/sources/source.interfaces.mjs +1 -1
  396. package/esm2020/lib/search/shared/sources/source.mjs +1 -1
  397. package/esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
  398. package/esm2020/lib/search/shared/sources/storedqueries.mjs +1 -1
  399. package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +1 -1
  400. package/esm2020/lib/toast/index.mjs +1 -1
  401. package/esm2020/lib/toast/toast.component.mjs +2 -2
  402. package/esm2020/lib/toast/toast.module.mjs +1 -1
  403. package/esm2020/lib/utils/commonVectorStyle.interface.mjs +1 -1
  404. package/esm2020/lib/utils/commonVectorStyle.mjs +1 -1
  405. package/esm2020/lib/utils/googleLinks.mjs +1 -1
  406. package/esm2020/lib/utils/id-generator.mjs +1 -1
  407. package/esm2020/lib/utils/index.mjs +1 -1
  408. package/esm2020/lib/utils/osmLinks.mjs +1 -1
  409. package/esm2020/lib/wkt/index.mjs +1 -1
  410. package/esm2020/lib/wkt/shared/index.mjs +1 -1
  411. package/esm2020/lib/wkt/shared/wkt.service.mjs +15 -15
  412. package/esm2020/lib/wkt/wkt.module.mjs +1 -1
  413. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +2 -2
  414. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +1 -1
  415. package/esm2020/lib/workspace/confirmation-popup/index.mjs +1 -1
  416. package/esm2020/lib/workspace/index.mjs +1 -1
  417. package/esm2020/lib/workspace/shared/edition-workspace.mjs +1 -1
  418. package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +1 -1
  419. package/esm2020/lib/workspace/shared/feature-workspace.mjs +1 -1
  420. package/esm2020/lib/workspace/shared/feature-workspace.service.mjs +1 -1
  421. package/esm2020/lib/workspace/shared/index.mjs +1 -1
  422. package/esm2020/lib/workspace/shared/wfs-workspace.mjs +1 -1
  423. package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +1 -1
  424. package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +1 -1
  425. package/esm2020/lib/workspace/shared/workspace.utils.mjs +1 -1
  426. package/esm2020/lib/workspace/widgets/index.mjs +1 -1
  427. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +2 -2
  428. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +1 -1
  429. package/esm2020/lib/workspace/widgets/widgets.mjs +1 -1
  430. package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +1 -1
  431. package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +1 -1
  432. package/esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs +1 -1
  433. package/esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs +1 -1
  434. package/esm2020/lib/workspace/workspace.module.mjs +1 -1
  435. package/esm2020/public_api.mjs +1 -1
  436. package/fesm2015/igo2-geo.mjs +596 -289
  437. package/fesm2015/igo2-geo.mjs.map +1 -1
  438. package/fesm2020/igo2-geo.mjs +582 -289
  439. package/fesm2020/igo2-geo.mjs.map +1 -1
  440. package/lib/draw/draw/draw-layer-popup.component.d.ts +14 -0
  441. package/lib/draw/draw/draw.component.d.ts +38 -10
  442. package/lib/draw/draw/draw.module.d.ts +22 -21
  443. package/lib/draw/shared/draw.interface.d.ts +6 -0
  444. package/lib/feature/feature-details/feature-details.component.d.ts +2 -3
  445. package/lib/import-export/shared/import.interface.d.ts +1 -0
  446. package/ngcc.config.js +3 -3
  447. package/package.json +4 -4
  448. package/style/geo.theming.scss +12 -12
@@ -630,7 +630,7 @@ OgcFilterFormComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OgcF
630
630
  } }, styles: ["[_nghost-%COMP%]{width:100%;padding:5px 10px} .mat-form-field .mat-icon svg{width:1em;height:1em;color:#d3d3d3}.mat-form-field[_ngcontent-%COMP%]{width:100%}.mat-select-arrow[_ngcontent-%COMP%]{visibility:hidden}.mat-slide-toggle[_ngcontent-%COMP%]{margin-top:10px}.logical[_ngcontent-%COMP%]{flex-flow:column nowrap;width:10%;max-width:45px;margin-left:5px}.logicalHidden[_ngcontent-%COMP%]{flex-flow:column nowrap;width:10%;visibility:hidden;max-width:45px;margin-left:5px} .logical .mat-select-arrow{visibility:hidden} .logicalHidden .mat-select-arrow{visibility:hidden}.field[_ngcontent-%COMP%]{width:20%} .field .mat-select-arrow{visibility:hidden}.operator[_ngcontent-%COMP%]{width:12%;margin-left:10px;text-align:center} .operator .mat-select-arrow{visibility:hidden}.spatialSelector[_ngcontent-%COMP%]{width:15%;margin-left:5px} .spatialSelector .mat-select-arrow{visibility:hidden}.singleInput[_ngcontent-%COMP%]{width:30%;margin-left:5px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.singleInput[_ngcontent-%COMP%]{width:27%}}.snrc[_ngcontent-%COMP%]{width:20%;margin-left:5px} .singleInput .mat-select-arrow{visibility:hidden}.dualInput[_ngcontent-%COMP%]{width:20%;margin-left:5px} .dualInput .mat-select-arrow{visibility:hidden}.igo-layer-button-group[_ngcontent-%COMP%]{display:flex;float:right;padding-top:5px}.container[_ngcontent-%COMP%]{display:flex}"] });
631
631
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OgcFilterFormComponent, [{
632
632
  type: Component,
633
- args: [{ selector: 'igo-ogc-filter-form', template: "<mat-checkbox\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleFilterState($event)\"\r\n [checked]=\"currentFilter.active\">\r\n</mat-checkbox>\r\n\r\n<mat-form-field\r\n [ngClass]=\"{'logical': activeFilters.indexOf(currentFilter) !== 0 && currentFilter.active===true, 'logicalHidden': activeFilters.indexOf(currentFilter) === 0 || currentFilter.active!==true}\">\r\n <mat-select\r\n [disabled]=\"!currentFilter.active\"\r\n [value]=\"currentFilter.parentLogical\"\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"currentFilter.parentLogical ? (('igo.geo.operators.tooltip.'+ currentFilter.parentLogical) | translate) : ''\"\r\n (selectionChange)=\"changeLogical($event.value)\">\r\n <mat-option\r\n [value]=ogcFilterOperator.And\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.operators.tooltip.And' | translate\">\r\n {{'igo.geo.operators.And' | translate}}\r\n </mat-option>\r\n <mat-option\r\n [value]=ogcFilterOperator.Or\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.operators.tooltip.Or' | translate\">\r\n {{'igo.geo.operators.Or' | translate}}\r\n </mat-option>\r\n </mat-select>\r\n</mat-form-field>\r\n\r\n<mat-form-field\r\n class=\"field\"\r\n *ngIf=\"(currentFilterIsSpatial$ | async)===false && (fields$ | async) && (fields$| async).length > 0 && (fields$| async)[0].name !== ''\"\r\n (mouseenter)=\"inputClearable = 'selectField'\"\r\n (mouseleave)=\"inputClearable = undefined\"\r\n [floatLabel]=\"floatLabel\">\r\n <input\r\n matInput\r\n [placeholder]=\"'igo.geo.sourceFields.selectField' | translate\"\r\n [disabled]=\"!currentFilter.active\"\r\n [matAutocomplete]=\"autoCompleteField\"\r\n [value]=\"(selectedField$ | async) ? (selectedField$ | async).alias : ''\"\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"(selectedField$ | async) ? (selectedField$ | async).alias : ('igo.geo.sourceFields.selectField' | translate)\"\r\n (input)=\"updateFieldsList($event.target.value)\">\r\n <mat-autocomplete #autoCompleteField=\"matAutocomplete\"\r\n (optionSelected)='changeField($event.option.id)'>\r\n <mat-option\r\n *ngFor=\"let field of filteredFields$ | async\"\r\n matTooltipShowDelay=\"500\"\r\n [value]=\"field.alias\"\r\n [id]=\"field.name\"\r\n [matTooltip]=\"field.alias\">\r\n {{field.alias}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <button mat-button\r\n *ngIf=\"currentFilter.propertyName && inputClearable === 'selectField' && currentFilter.active\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n [disabled]=\"!currentFilter.active\"\r\n (click)=\"clearSelectedField()\">\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n</mat-form-field>\r\n\r\n\r\n<mat-form-field\r\n [ngClass]=\"{'operator': (currentFilterIsSpatial$ | async)===false , 'dualInput': (currentFilterIsSpatial$ | async)}\"\r\n [floatLabel]=\"floatLabel\">\r\n <mat-select\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"currentFilter.operator ? (('igo.geo.operators.tooltip.'+ currentFilter.operator) | translate) : ('igo.geo.filter.selectOperator' | translate)\"\r\n [disabled]=\"!currentFilter.active\"\r\n [value]=\"currentFilter.operator\"\r\n (selectionChange)=\"changeOperator($event.value)\">\r\n <mat-option\r\n *ngFor=\"let operator of (ogcFilterOperators$ | async) | keyvalue\"\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [value]=\"operator.key\"\r\n [matTooltip]=\"('igo.geo.operators.tooltip.'+ operator.key) | translate\">\r\n {{('igo.geo.operators.'+ operator.key) | translate}}\r\n </mat-option>\r\n </mat-select>\r\n</mat-form-field>\r\n\r\n<mat-form-field\r\nclass=\"spatialSelector\"\r\n*ngIf=\"currentFilterIsSpatial$ | async\">\r\n <mat-select\r\n [disabled]=\"!currentFilter.active\"\r\n [value]=\"currentFilter.igoSpatialSelector\"\r\n (selectionChange)=\"changeSpatialSelector($event.value)\">\r\n <mat-option\r\n *ngFor=\"let igoSpatialSelector of igoSpatialSelectors\"\r\n [value]=\"igoSpatialSelector.type\">\r\n {{('igo.geo.spatialSelector.'+ igoSpatialSelector.type) | translate}}\r\n </mat-option>\r\n </mat-select>\r\n</mat-form-field>\r\n\r\n<mat-form-field\r\nclass=\"singleInput\"\r\n*ngIf=\"['expression','pattern'].indexOf(detectProperty()) !== -1\"\r\n(mouseenter)=\"inputClearable = 'selectProperty'\"\r\n(mouseleave)=\"inputClearable = undefined\"\r\n[floatLabel]=\"floatLabel\">\r\n <input\r\n matInput\r\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\r\n [disabled]=\"!currentFilter.active\"\r\n [matAutocomplete]=\"autoCompleteValues\"\r\n [value]=\"detectProperty() === 'expression' ? currentFilter.expression : currentFilter.pattern\"\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"detectProperty() === 'expression' ? currentFilter.expression || '' : currentFilter.pattern || ''\"\r\n (input)=\"updateValuesList($event.target.value)\">\r\n <mat-autocomplete #autoCompleteValues=\"matAutocomplete\"\r\n (optionSelected)=\"changeProperty($event.option.value)\">\r\n <mat-option\r\n *ngFor=\"let value of filteredValues$ | async\"\r\n matTooltipShowDelay=\"500\"\r\n [value]=\"value\"\r\n [matTooltip]=\"value\">\r\n {{value}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <button mat-button\r\n *ngIf=\"isClearable() && inputClearable === 'selectProperty' && currentFilter.active\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n [disabled]=\"!currentFilter.active\"\r\n (click)=\"clearProperty()\">\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n</mat-form-field>\r\n\r\n<div class=\"igo-layer-button-group\">\r\n <button\r\n mat-icon-button\r\n collapsibleButton\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.filter.removeFilter' | translate\"\r\n color=\"warn\"\r\n (click)=\"deleteFilter()\">\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n</div>\r\n\r\n<mat-form-field\r\nclass=\"snrc\"\r\n*ngIf=\"(currentFilterIsSpatial$ | async) && currentFilter.igoSpatialSelector === 'snrc'\"\r\n(mouseenter)=\"inputClearable = 'selectSNRC'\"\r\n(mouseleave)=\"inputClearable = undefined\"\r\n[floatLabel]=\"floatLabel\">\r\n <input\r\n matInput\r\n [placeholder]=\"'igo.geo.filter.placeholderSnrc' | translate\"\r\n [value]=\"currentFilter.igoSNRC\"\r\n tooltip-position=\"above\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"currentFilter.igoSNRC ? currentFilter.igoSNRC : ''\"\r\n (input)=\"changeSNRC($event.target.value)\">\r\n <button\r\n mat-button\r\n *ngIf=\"currentFilter.igoSNRC\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n [disabled]=\"!currentFilter.active && inputClearable === 'selectSNRC' && currentFilter.active\"\r\n (click)=\"currentFilter.igoSNRC=''\">\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <ng-container *ngIf=\"(currentFilterIsSpatial$ | async) && currentFilter.igoSpatialSelector === 'fixedExtent'\">\r\n <button\r\n mat-button\r\n [disabled]=\"!currentFilter.active\"\r\n *ngIf=\"currentFilter.igoSpatialSelector === 'fixedExtent'\"\r\n matSuffix\r\n mat-icon-button\r\n [disabled]=\"!currentFilter.active\"\r\n (click)=\"changeMapExtentGeometry()\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.spatialSelector.btnSetExtent' | translate\">\r\n <mat-icon svgIcon=\"arrow-expand-all\"></mat-icon>\r\n </button>\r\n</ng-container>\r\n\r\n<br/>\r\n\r\n<mat-form-field\r\nclass=\"dualInput\"\r\n*ngIf=\"!isTemporalOperator() && ['lowerBoundary','begin'].indexOf(detectProperty(1)) !== -1\"\r\n(mouseenter)=\"inputClearable = 'selectProperty1'\"\r\n(mouseleave)=\"inputClearable = undefined\"\r\n[floatLabel]=\"floatLabel\">\r\n <input\r\n matInput\r\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\r\n [disabled]=\"!currentFilter.active\"\r\n [matAutocomplete]=\"autoDualValueOperator1\"\r\n type=\"number\"\r\n [value]=\"detectProperty(1) === 'lowerBoundary' ? currentFilter.lowerBoundary : currentFilter.begin\"\r\n (input)=\"updateValuesList($event.target.value,1)\">\r\n <mat-autocomplete #autoDualValueOperator1=\"matAutocomplete\"\r\n (optionSelected)=\"changeNumericProperty($event.option.value,1)\">\r\n <mat-option\r\n *ngFor=\"let value of filteredValues$ | async\"\r\n matTooltipShowDelay=\"500\"\r\n [value]=\"value\"\r\n [matTooltip]=\"value\">\r\n {{value}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <button mat-button\r\n *ngIf=\"isClearable(1) && inputClearable === 'selectProperty1' && currentFilter.active\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n [disabled]=\"!currentFilter.active\"\r\n (click)=\"clearProperty(1)\">\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n</mat-form-field>\r\n\r\n<mat-form-field\r\n class=\"dualInput\"\r\n *ngIf=\"!isTemporalOperator() && ['upperBoundary','end'].indexOf(detectProperty(2)) !== -1\"\r\n (mouseenter)=\"inputClearable = 'selectProperty2'\"\r\n (mouseleave)=\"inputClearable = undefined\"\r\n [floatLabel]=\"floatLabel\">\r\n <input\r\n matInput\r\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\r\n [disabled]=\"!currentFilter.active\"\r\n [matAutocomplete]=\"autoDualValueOperator2\"\r\n type=\"number\"\r\n [value]=\"detectProperty(2) === 'upperBoundary' ? currentFilter.upperBoundary : currentFilter.end\"\r\n (input)=\"updateValuesList($event.target.value,2)\">\r\n <mat-autocomplete #autoDualValueOperator2=\"matAutocomplete\"\r\n (optionSelected)=\"changeNumericProperty($event.option.value,2)\">\r\n <mat-option\r\n *ngFor=\"let value of filteredValues$ | async\"\r\n matTooltipShowDelay=\"500\"\r\n [value]=\"value\"\r\n [matTooltip]=\"value\">\r\n {{value}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <button mat-button\r\n *ngIf=\"isClearable(2) && inputClearable === 'selectProperty2' && currentFilter.active\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n [disabled]=\"!currentFilter.active\"\r\n (click)=\"clearProperty(2)\">\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n</mat-form-field>\r\n\r\n<igo-ogc-filter-time *ngIf=\"isTemporalOperator()\"\r\n [(datasource)]=\"datasource\"\r\n [(currentFilter)]=\"currentFilter\"\r\n (changeProperty)=\"changeProperty($event.value, $event.pos)\">\r\n</igo-ogc-filter-time>\r\n\r\n<!--\r\nTODO C'EST PERTINENT je crois\r\n<mat-form-field class=\"field\" *ngIf=\"!(currentFilterIsSpatial$ | async) && (fields$| async) && (fields$| async).length === 1 && (fields$| async)[0].name === ''\">\r\n<input [disabled]=\"!currentFilter.active\" matInput #fieldPerUser (keyup)=\"changeProperty(currentFilter,'propertyName',fieldPerUser.value)\"\r\n (blur)=\"changeProperty(currentFilter,'propertyName',fieldPerUser.value)\" [(ngModel)]=\"currentFilter.propertyName\">\r\n<button mat-button *ngIf=\"currentFilter.propertyName\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"currentFilter.propertyName=''\">\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n</button>\r\n</mat-form-field>\r\n\r\n\r\n\r\n<mat-checkbox labelPosition='before' (change)=\"changeCaseSensitive($event)\" [(ngModel)]=\"currentFilter.matchCase\">\r\n {{('igo.geo.operators.caseSensitive') | translate}}\r\n</mat-checkbox>\r\n\r\n</mat-list-item> -->\r\n", styles: [":host{width:100%;padding:5px 10px}::ng-deep .mat-form-field .mat-icon svg{width:1em;height:1em;color:#d3d3d3}.mat-form-field{width:100%}.mat-select-arrow{visibility:hidden}.mat-slide-toggle{margin-top:10px}.logical{flex-flow:column nowrap;width:10%;max-width:45px;margin-left:5px}.logicalHidden{flex-flow:column nowrap;width:10%;visibility:hidden;max-width:45px;margin-left:5px}::ng-deep .logical .mat-select-arrow{visibility:hidden}::ng-deep .logicalHidden .mat-select-arrow{visibility:hidden}.field{width:20%}::ng-deep .field .mat-select-arrow{visibility:hidden}.operator{width:12%;margin-left:10px;text-align:center}::ng-deep .operator .mat-select-arrow{visibility:hidden}.spatialSelector{width:15%;margin-left:5px}::ng-deep .spatialSelector .mat-select-arrow{visibility:hidden}.singleInput{width:30%;margin-left:5px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.singleInput{width:27%}}.snrc{width:20%;margin-left:5px}::ng-deep .singleInput .mat-select-arrow{visibility:hidden}.dualInput{width:20%;margin-left:5px}::ng-deep .dualInput .mat-select-arrow{visibility:hidden}.igo-layer-button-group{display:flex;float:right;padding-top:5px}.container{display:flex}\n"] }]
633
+ args: [{ selector: 'igo-ogc-filter-form', template: "<mat-checkbox\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleFilterState($event)\"\n [checked]=\"currentFilter.active\">\n</mat-checkbox>\n\n<mat-form-field\n [ngClass]=\"{'logical': activeFilters.indexOf(currentFilter) !== 0 && currentFilter.active===true, 'logicalHidden': activeFilters.indexOf(currentFilter) === 0 || currentFilter.active!==true}\">\n <mat-select\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.parentLogical\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"currentFilter.parentLogical ? (('igo.geo.operators.tooltip.'+ currentFilter.parentLogical) | translate) : ''\"\n (selectionChange)=\"changeLogical($event.value)\">\n <mat-option\n [value]=ogcFilterOperator.And\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.operators.tooltip.And' | translate\">\n {{'igo.geo.operators.And' | translate}}\n </mat-option>\n <mat-option\n [value]=ogcFilterOperator.Or\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.operators.tooltip.Or' | translate\">\n {{'igo.geo.operators.Or' | translate}}\n </mat-option>\n </mat-select>\n</mat-form-field>\n\n<mat-form-field\n class=\"field\"\n *ngIf=\"(currentFilterIsSpatial$ | async)===false && (fields$ | async) && (fields$| async).length > 0 && (fields$| async)[0].name !== ''\"\n (mouseenter)=\"inputClearable = 'selectField'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\">\n <input\n matInput\n [placeholder]=\"'igo.geo.sourceFields.selectField' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoCompleteField\"\n [value]=\"(selectedField$ | async) ? (selectedField$ | async).alias : ''\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"(selectedField$ | async) ? (selectedField$ | async).alias : ('igo.geo.sourceFields.selectField' | translate)\"\n (input)=\"updateFieldsList($event.target.value)\">\n <mat-autocomplete #autoCompleteField=\"matAutocomplete\"\n (optionSelected)='changeField($event.option.id)'>\n <mat-option\n *ngFor=\"let field of filteredFields$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"field.alias\"\n [id]=\"field.name\"\n [matTooltip]=\"field.alias\">\n {{field.alias}}\n </mat-option>\n </mat-autocomplete>\n <button mat-button\n *ngIf=\"currentFilter.propertyName && inputClearable === 'selectField' && currentFilter.active\"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearSelectedField()\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n</mat-form-field>\n\n\n<mat-form-field\n [ngClass]=\"{'operator': (currentFilterIsSpatial$ | async)===false , 'dualInput': (currentFilterIsSpatial$ | async)}\"\n [floatLabel]=\"floatLabel\">\n <mat-select\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"currentFilter.operator ? (('igo.geo.operators.tooltip.'+ currentFilter.operator) | translate) : ('igo.geo.filter.selectOperator' | translate)\"\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.operator\"\n (selectionChange)=\"changeOperator($event.value)\">\n <mat-option\n *ngFor=\"let operator of (ogcFilterOperators$ | async) | keyvalue\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [value]=\"operator.key\"\n [matTooltip]=\"('igo.geo.operators.tooltip.'+ operator.key) | translate\">\n {{('igo.geo.operators.'+ operator.key) | translate}}\n </mat-option>\n </mat-select>\n</mat-form-field>\n\n<mat-form-field\nclass=\"spatialSelector\"\n*ngIf=\"currentFilterIsSpatial$ | async\">\n <mat-select\n [disabled]=\"!currentFilter.active\"\n [value]=\"currentFilter.igoSpatialSelector\"\n (selectionChange)=\"changeSpatialSelector($event.value)\">\n <mat-option\n *ngFor=\"let igoSpatialSelector of igoSpatialSelectors\"\n [value]=\"igoSpatialSelector.type\">\n {{('igo.geo.spatialSelector.'+ igoSpatialSelector.type) | translate}}\n </mat-option>\n </mat-select>\n</mat-form-field>\n\n<mat-form-field\nclass=\"singleInput\"\n*ngIf=\"['expression','pattern'].indexOf(detectProperty()) !== -1\"\n(mouseenter)=\"inputClearable = 'selectProperty'\"\n(mouseleave)=\"inputClearable = undefined\"\n[floatLabel]=\"floatLabel\">\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoCompleteValues\"\n [value]=\"detectProperty() === 'expression' ? currentFilter.expression : currentFilter.pattern\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"detectProperty() === 'expression' ? currentFilter.expression || '' : currentFilter.pattern || ''\"\n (input)=\"updateValuesList($event.target.value)\">\n <mat-autocomplete #autoCompleteValues=\"matAutocomplete\"\n (optionSelected)=\"changeProperty($event.option.value)\">\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\">\n {{value}}\n </mat-option>\n </mat-autocomplete>\n <button mat-button\n *ngIf=\"isClearable() && inputClearable === 'selectProperty' && currentFilter.active\"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty()\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n</mat-form-field>\n\n<div class=\"igo-layer-button-group\">\n <button\n mat-icon-button\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.removeFilter' | translate\"\n color=\"warn\"\n (click)=\"deleteFilter()\">\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n</div>\n\n<mat-form-field\nclass=\"snrc\"\n*ngIf=\"(currentFilterIsSpatial$ | async) && currentFilter.igoSpatialSelector === 'snrc'\"\n(mouseenter)=\"inputClearable = 'selectSNRC'\"\n(mouseleave)=\"inputClearable = undefined\"\n[floatLabel]=\"floatLabel\">\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholderSnrc' | translate\"\n [value]=\"currentFilter.igoSNRC\"\n tooltip-position=\"above\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"currentFilter.igoSNRC ? currentFilter.igoSNRC : ''\"\n (input)=\"changeSNRC($event.target.value)\">\n <button\n mat-button\n *ngIf=\"currentFilter.igoSNRC\"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active && inputClearable === 'selectSNRC' && currentFilter.active\"\n (click)=\"currentFilter.igoSNRC=''\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngIf=\"(currentFilterIsSpatial$ | async) && currentFilter.igoSpatialSelector === 'fixedExtent'\">\n <button\n mat-button\n [disabled]=\"!currentFilter.active\"\n *ngIf=\"currentFilter.igoSpatialSelector === 'fixedExtent'\"\n matSuffix\n mat-icon-button\n [disabled]=\"!currentFilter.active\"\n (click)=\"changeMapExtentGeometry()\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.spatialSelector.btnSetExtent' | translate\">\n <mat-icon svgIcon=\"arrow-expand-all\"></mat-icon>\n </button>\n</ng-container>\n\n<br/>\n\n<mat-form-field\nclass=\"dualInput\"\n*ngIf=\"!isTemporalOperator() && ['lowerBoundary','begin'].indexOf(detectProperty(1)) !== -1\"\n(mouseenter)=\"inputClearable = 'selectProperty1'\"\n(mouseleave)=\"inputClearable = undefined\"\n[floatLabel]=\"floatLabel\">\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoDualValueOperator1\"\n type=\"number\"\n [value]=\"detectProperty(1) === 'lowerBoundary' ? currentFilter.lowerBoundary : currentFilter.begin\"\n (input)=\"updateValuesList($event.target.value,1)\">\n <mat-autocomplete #autoDualValueOperator1=\"matAutocomplete\"\n (optionSelected)=\"changeNumericProperty($event.option.value,1)\">\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\">\n {{value}}\n </mat-option>\n </mat-autocomplete>\n <button mat-button\n *ngIf=\"isClearable(1) && inputClearable === 'selectProperty1' && currentFilter.active\"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty(1)\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n</mat-form-field>\n\n<mat-form-field\n class=\"dualInput\"\n *ngIf=\"!isTemporalOperator() && ['upperBoundary','end'].indexOf(detectProperty(2)) !== -1\"\n (mouseenter)=\"inputClearable = 'selectProperty2'\"\n (mouseleave)=\"inputClearable = undefined\"\n [floatLabel]=\"floatLabel\">\n <input\n matInput\n [placeholder]=\"'igo.geo.filter.placeholder' | translate\"\n [disabled]=\"!currentFilter.active\"\n [matAutocomplete]=\"autoDualValueOperator2\"\n type=\"number\"\n [value]=\"detectProperty(2) === 'upperBoundary' ? currentFilter.upperBoundary : currentFilter.end\"\n (input)=\"updateValuesList($event.target.value,2)\">\n <mat-autocomplete #autoDualValueOperator2=\"matAutocomplete\"\n (optionSelected)=\"changeNumericProperty($event.option.value,2)\">\n <mat-option\n *ngFor=\"let value of filteredValues$ | async\"\n matTooltipShowDelay=\"500\"\n [value]=\"value\"\n [matTooltip]=\"value\">\n {{value}}\n </mat-option>\n </mat-autocomplete>\n <button mat-button\n *ngIf=\"isClearable(2) && inputClearable === 'selectProperty2' && currentFilter.active\"\n matSuffix\n mat-icon-button\n aria-label=\"Clear\"\n [disabled]=\"!currentFilter.active\"\n (click)=\"clearProperty(2)\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n</mat-form-field>\n\n<igo-ogc-filter-time *ngIf=\"isTemporalOperator()\"\n [(datasource)]=\"datasource\"\n [(currentFilter)]=\"currentFilter\"\n (changeProperty)=\"changeProperty($event.value, $event.pos)\">\n</igo-ogc-filter-time>\n\n<!--\nTODO C'EST PERTINENT je crois\n<mat-form-field class=\"field\" *ngIf=\"!(currentFilterIsSpatial$ | async) && (fields$| async) && (fields$| async).length === 1 && (fields$| async)[0].name === ''\">\n<input [disabled]=\"!currentFilter.active\" matInput #fieldPerUser (keyup)=\"changeProperty(currentFilter,'propertyName',fieldPerUser.value)\"\n (blur)=\"changeProperty(currentFilter,'propertyName',fieldPerUser.value)\" [(ngModel)]=\"currentFilter.propertyName\">\n<button mat-button *ngIf=\"currentFilter.propertyName\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"currentFilter.propertyName=''\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n</button>\n</mat-form-field>\n\n\n\n<mat-checkbox labelPosition='before' (change)=\"changeCaseSensitive($event)\" [(ngModel)]=\"currentFilter.matchCase\">\n {{('igo.geo.operators.caseSensitive') | translate}}\n</mat-checkbox>\n\n</mat-list-item> -->\n", styles: [":host{width:100%;padding:5px 10px}::ng-deep .mat-form-field .mat-icon svg{width:1em;height:1em;color:#d3d3d3}.mat-form-field{width:100%}.mat-select-arrow{visibility:hidden}.mat-slide-toggle{margin-top:10px}.logical{flex-flow:column nowrap;width:10%;max-width:45px;margin-left:5px}.logicalHidden{flex-flow:column nowrap;width:10%;visibility:hidden;max-width:45px;margin-left:5px}::ng-deep .logical .mat-select-arrow{visibility:hidden}::ng-deep .logicalHidden .mat-select-arrow{visibility:hidden}.field{width:20%}::ng-deep .field .mat-select-arrow{visibility:hidden}.operator{width:12%;margin-left:10px;text-align:center}::ng-deep .operator .mat-select-arrow{visibility:hidden}.spatialSelector{width:15%;margin-left:5px}::ng-deep .spatialSelector .mat-select-arrow{visibility:hidden}.singleInput{width:30%;margin-left:5px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.singleInput{width:27%}}.snrc{width:20%;margin-left:5px}::ng-deep .singleInput .mat-select-arrow{visibility:hidden}.dualInput{width:20%;margin-left:5px}::ng-deep .dualInput .mat-select-arrow{visibility:hidden}.igo-layer-button-group{display:flex;float:right;padding-top:5px}.container{display:flex}\n"] }]
634
634
  }], function () { return [{ type: i1.WktService }]; }, { refreshFilters: [{
635
635
  type: Input
636
636
  }], datasource: [{
@@ -642,4 +642,4 @@ OgcFilterFormComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OgcF
642
642
  }], floatLabel: [{
643
643
  type: Input
644
644
  }] }); })();
645
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLWZvcm0vb2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLWZvcm0vb2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTXZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUlqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7OztJQ3lDcEUsc0NBSzZCO0lBQzNCLFlBQ0Y7SUFBQSxpQkFBYTs7O0lBSlgsdUNBQXFCLHNCQUFBLCtCQUFBO0lBR3JCLGVBQ0Y7SUFERSxnREFDRjs7OztJQUVGLGtDQU1pQztJQUEvQiw0TEFBUyxlQUFBLDRCQUFvQixDQUFBLElBQUM7SUFDMUIsK0JBQXFDO0lBQzNDLGlCQUFTOzs7SUFIUCx3REFBa0M7Ozs7SUFoQ3RDLDBDQUs0QjtJQUYxQiwyT0FBK0IsYUFBYSxLQUFDLDhOQUNkLFNBQVMsS0FESztJQUc3QyxpQ0FTZ0Q7SUFBaEQsc0xBQVMsZUFBQSw2Q0FBcUMsQ0FBQSxJQUFDOzs7Ozs7O0lBVC9DLGlCQVNnRDtJQUNoRCxnREFDaUQ7SUFBakQsbU5BQWtCLGVBQUEscUNBQTZCLENBQUEsSUFBQztJQUM5QywwR0FPYTs7SUFDZixpQkFBbUI7SUFDbkIsa0dBUVM7SUFDWCxpQkFBaUI7Ozs7SUEvQmYsOENBQXlCO0lBR3pCLGVBQThE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LEtBQUs7WUFFRyxVQUFVO2tCQUFsQixLQUFLO1lBRUcsR0FBRztrQkFBWCxLQUFLO1lBRUcsYUFBYTtrQkFBckIsS0FBSztZQXNCRyxVQUFVO2tCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZsb2F0TGFiZWxUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgT2djRmlsdGVyYWJsZURhdGFTb3VyY2UsXHJcbiAgT2djRmlsdGVyc09wdGlvbnNcclxufSBmcm9tICcuLi8uLi9maWx0ZXIvc2hhcmVkL29nYy1maWx0ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgT2djRmlsdGVyV3JpdGVyIH0gZnJvbSAnLi4vLi4vZmlsdGVyL3NoYXJlZC9vZ2MtZmlsdGVyJztcclxuaW1wb3J0IHsgV2t0U2VydmljZSB9IGZyb20gJy4uLy4uL3drdC9zaGFyZWQvd2t0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi9tYXAnO1xyXG5pbXBvcnQgeyBTb3VyY2VGaWVsZHNPcHRpb25zUGFyYW1zIH0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvZGF0YXNvdXJjZS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBPZ2NGaWx0ZXJPcGVyYXRvciB9IGZyb20gJy4uLy4uL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlci5lbnVtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLW9nYy1maWx0ZXItZm9ybScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL29nYy1maWx0ZXItZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vb2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE9nY0ZpbHRlckZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIG9nY0ZpbHRlck9wZXJhdG9yID0gT2djRmlsdGVyT3BlcmF0b3I7XHJcbiAgZmlsdGVyZWRWYWx1ZXMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcclxuICBmaWx0ZXJlZEZpZWxkcyQ6IE9ic2VydmFibGU8U291cmNlRmllbGRzT3B0aW9uc1BhcmFtc1tdPjtcclxuICBwdWJsaWMgYWxsT2djRmlsdGVyT3BlcmF0b3JzO1xyXG4gIHB1YmxpYyBvZ2NGaWx0ZXJPcGVyYXRvcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtrZXk6IHN0cmluZ106IGFueSB9PihcclxuICAgIHVuZGVmaW5lZFxyXG4gICk7XHJcbiAgcHVibGljIGlnb1NwYXRpYWxTZWxlY3RvcnM7XHJcbiAgcHVibGljIHZhbHVlID0gJyc7XHJcbiAgcHVibGljIGlucHV0T3BlcmF0b3I7XHJcbiAgcHVibGljIHNlbGVjdGVkRmllbGQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTb3VyY2VGaWVsZHNPcHRpb25zUGFyYW1zPihcclxuICAgIHVuZGVmaW5lZFxyXG4gICk7XHJcbiAgcHVibGljIGZpZWxkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXNbXT4oW10pO1xyXG4gIHB1YmxpYyBjb2xvciA9ICdwcmltYXJ5JztcclxuICBwdWJsaWMgZGlzYWJsZWQ7XHJcbiAgcHVibGljIGN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHVibGljIGRlZmF1bHRTdGVwTWlsbGlzZWNvbmQgPSA2MDAwO1xyXG4gIHB1YmxpYyBpbnB1dENsZWFyYWJsZTogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKSByZWZyZXNoRmlsdGVyczogKCkgPT4gdm9pZDtcclxuXHJcbiAgQElucHV0KCkgZGF0YXNvdXJjZTogT2djRmlsdGVyYWJsZURhdGFTb3VyY2U7XHJcblxyXG4gIEBJbnB1dCgpIG1hcDogSWdvTWFwO1xyXG5cclxuICBASW5wdXQoKSBjdXJyZW50RmlsdGVyOiBhbnk7XHJcblxyXG4gIHNldCBzbnJjKHZhbHVlOiBhbnkpIHtcclxuICAgIGNvbnN0IGNoZWNrU05SQzUwayA9IC9eXFxkezJ9W2EtbF1bMCwxXVswLTldJC9naTtcclxuICAgIGNvbnN0IGNoZWNrU05SQzI1MGsgPSAvXlxcZHsyfVthLXBdJC9naTtcclxuICAgIGNvbnN0IGNoZWNrU05SQzFtID0gL15cXGR7Mn0kL2dpO1xyXG4gICAgaWYgKFxyXG4gICAgICBjaGVja1NOUkMxbS50ZXN0KHZhbHVlKSB8fFxyXG4gICAgICBjaGVja1NOUkMyNTBrLnRlc3QodmFsdWUpIHx8XHJcbiAgICAgIGNoZWNrU05SQzUway50ZXN0KHZhbHVlKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuX3NucmMgPSB2YWx1ZTtcclxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLmlnb1NOUkMgPSB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBzbnJjKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc25yYztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NucmMgPSAnJztcclxuXHJcbiAgQElucHV0KCkgZmxvYXRMYWJlbDogRmxvYXRMYWJlbFR5cGUgPSAnbmV2ZXInO1xyXG5cclxuICBnZXQgYWN0aXZlRmlsdGVycygpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmludGVyZmFjZU9nY0ZpbHRlcnMuZmlsdGVyKFxyXG4gICAgICAoZikgPT4gZi5hY3RpdmUgPT09IHRydWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXQgYWxsb3dlZE9wZXJhdG9ycygpIHtcclxuICAgIHJldHVybiBuZXcgT2djRmlsdGVyV3JpdGVyKCkuY29tcHV0ZUFsbG93ZWRPcGVyYXRvcnMoXHJcbiAgICAgIHRoaXMuZmllbGRzJC52YWx1ZSxcclxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSxcclxuICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5hbGxvd2VkT3BlcmF0b3JzVHlwZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgd2t0U2VydmljZTogV2t0U2VydmljZSkge1xyXG4gICAgLy8gVE9ETzogRmlsdGVyIHBlcm1pdHRlZCBvcGVyYXRvciBiYXNlZCBvbiB3ZnNjYXBhYmlsaXRpZXNcclxuICAgIC8vIE5lZWQgdG8gd29yayBvbiByZWdleCBvbiBYTUwgY2FwYWJpbGl0aWVzIGJlY2F1c2VcclxuICAgIC8vIGNvbWFwYXJpc29uIG9wZXJhdG9yJ3MgbmFtZSB2YXJpZXMgYmV0d2VlbiBXRlMgc2VydmVycy4uLlxyXG4gICAgLy8gRXg6IElzTnVsbCB2cyBQcm9wZXJ0eUlzTnVsbCB2cyBJc05pbCAuLi5cclxuICAgIHRoaXMuYWxsT2djRmlsdGVyT3BlcmF0b3JzID0gbmV3IE9nY0ZpbHRlcldyaXRlcigpLm9wZXJhdG9ycztcclxuICAgIHRoaXMub2djRmlsdGVyT3BlcmF0b3JzJC5uZXh0KHRoaXMuYWxsT2djRmlsdGVyT3BlcmF0b3JzKTtcclxuICAgIHRoaXMuaWdvU3BhdGlhbFNlbGVjdG9ycyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIHR5cGU6ICdmaXhlZEV4dGVudCdcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHR5cGU6ICdzbnJjJ1xyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gICAgLy8gVE9ETzogc2VsZWN0RmVhdHVyZSAmIGRyYXdGZWF0dXJlXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICBpZiAoIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLnNvdXJjZUZpZWxkcykge1xyXG4gICAgICBjb25zdCBzRmllbGRzID0gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMuc291cmNlRmllbGRzLmZpbHRlcihcclxuICAgICAgICAoc2YpID0+XHJcbiAgICAgICAgICBzZi5leGNsdWRlRnJvbU9nY0ZpbHRlcnMgPT09IHVuZGVmaW5lZCB8fCAhc2YuZXhjbHVkZUZyb21PZ2NGaWx0ZXJzXHJcbiAgICAgICk7XHJcbiAgICAgIHNGaWVsZHMubWFwKChzZnMpID0+IHtcclxuICAgICAgICBpZiAoc2ZzLnZhbHVlcykge1xyXG4gICAgICAgICAgc2ZzLnZhbHVlcy5zb3J0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5maWVsZHMkLm5leHQoc0ZpZWxkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVGaWVsZHNMaXN0KCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmllbGQkLm5leHQoXHJcbiAgICAgIHRoaXMuZmllbGRzJC52YWx1ZS5maW5kKChmKSA9PiBmLm5hbWUgPT09IHRoaXMuY3VycmVudEZpbHRlci5wcm9wZXJ0eU5hbWUpXHJcbiAgICApO1xyXG4gICAgdGhpcy51cGRhdGVWYWx1ZXNMaXN0KCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmllbGQkLnN1YnNjcmliZSgoZikgPT4ge1xyXG4gICAgICB0aGlzLm9nY0ZpbHRlck9wZXJhdG9ycyQubmV4dCh0aGlzLmFsbG93ZWRPcGVyYXRvcnMpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5hbGxvd2VkT3BlcmF0b3JzKS5pbmRleE9mKFxyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yXHJcbiAgICAgICAgKSA9PT0gLTFcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yID0gT2JqZWN0LmtleXModGhpcy5hbGxvd2VkT3BlcmF0b3JzKVswXTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgPSBPYmplY3Qua2V5cyh0aGlzLmFsbG93ZWRPcGVyYXRvcnMpWzBdO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRlVmFsdWVzTGlzdCgpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZpZWxkc0xpc3QodmFsdWU/OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZmlsdGVyZWRGaWVsZHMkID1cclxuICAgICAgdmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCA/IG9mKHRoaXMuX2ZpbHRlckZpZWxkcyh2YWx1ZSkpIDogdGhpcy5maWVsZHMkO1xyXG4gICAgaWYgKHRoaXMuZmllbGRzJC52YWx1ZS5maW5kKChmKSA9PiBmLm5hbWUgPT09IHZhbHVlKSkge1xyXG4gICAgICB0aGlzLmNoYW5nZUZpZWxkKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVZhbHVlc0xpc3QodmFsdWU/OiBzdHJpbmcsIHBvcz86IG51bWJlcikge1xyXG4gICAgdGhpcy5maWx0ZXJlZFZhbHVlcyQgPVxyXG4gICAgICB2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwXHJcbiAgICAgICAgPyBvZih0aGlzLl9maWx0ZXJWYWx1ZXModmFsdWUpKVxyXG4gICAgICAgIDogdGhpcy5zZWxlY3RlZEZpZWxkJC52YWx1ZVxyXG4gICAgICAgID8gb2YodGhpcy5zZWxlY3RlZEZpZWxkJC52YWx1ZS52YWx1ZXMpXHJcbiAgICAgICAgOiBvZihbXSk7XHJcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID49IDEpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VQcm9wZXJ0eSh2YWx1ZSwgcG9zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbHRlckZpZWxkcyh2YWx1ZTogc3RyaW5nKTogU291cmNlRmllbGRzT3B0aW9uc1BhcmFtc1tdIHtcclxuICAgIGNvbnN0IGtleXdvcmRSZWdleCA9IG5ldyBSZWdFeHAoXHJcbiAgICAgIHZhbHVlLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpLFxyXG4gICAgICAnZ2knXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuZmllbGRzJC52YWx1ZS5maWx0ZXIoKHZhbCkgPT5cclxuICAgICAga2V5d29yZFJlZ2V4LnRlc3QoXHJcbiAgICAgICAgdmFsLmFsaWFzLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9maWx0ZXJWYWx1ZXModmFsdWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGtleXdvcmRSZWdleCA9IG5ldyBSZWdFeHAoXHJcbiAgICAgIHZhbHVlXHJcbiAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyksXHJcbiAgICAgICdnaSdcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZpZWxkJC52YWx1ZS52YWx1ZXMuZmlsdGVyKCh2YWwpID0+XHJcbiAgICAgIHZhbCAmJiBrZXl3b3JkUmVnZXgudGVzdChcclxuICAgICAgICB2YWxcclxuICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJTZWxlY3RlZEZpZWxkKCkge1xyXG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSA9ICcnO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkJC5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICB0aGlzLmNsZWFyUHJvcGVydHkoKTtcclxuICB9XHJcblxyXG4gIGlzQ2xlYXJhYmxlKHBvcz86IG51bWJlcikge1xyXG4gICAgY29uc3QgZGV0ZWN0ZWRQcm9wZXJ0eSA9IHRoaXMuZGV0ZWN0UHJvcGVydHkocG9zKTtcclxuICAgIGlmIChkZXRlY3RlZFByb3BlcnR5KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRGaWx0ZXJbZGV0ZWN0ZWRQcm9wZXJ0eV07XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNsZWFyUHJvcGVydHkocG9zPzogbnVtYmVyKSB7XHJcbiAgICAvLyB0aGlzLmF1dG9Db21wbGV0ZUlucHV0VmFsdWVzLmNsb3NlUGFuZWwoKTtcclxuICAgIGNvbnN0IGRldGVjdGVkUHJvcGVydHkgPSB0aGlzLmRldGVjdFByb3BlcnR5KHBvcyk7XHJcbiAgICBpZiAoZGV0ZWN0ZWRQcm9wZXJ0eSkge1xyXG4gICAgICByZXR1cm4gKHRoaXMuY3VycmVudEZpbHRlcltkZXRlY3RlZFByb3BlcnR5XSA9ICcnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUZpbHRlclN0YXRlKGV2ZW50KSB7XHJcbiAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmludGVyZmFjZU9nY0ZpbHRlcnMuZmluZChcclxuICAgICAgKGYpID0+IGYuZmlsdGVyaWQgPT09IHRoaXMuY3VycmVudEZpbHRlci5maWx0ZXJpZFxyXG4gICAgKS5hY3RpdmUgPSBldmVudC5jaGVja2VkO1xyXG4gICAgdGhpcy5yZWZyZXNoRmlsdGVycygpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlRmlsdGVyKCkge1xyXG4gICAgY29uc3Qgb2djRmlsdGVyczogT2djRmlsdGVyc09wdGlvbnMgPSB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzO1xyXG4gICAgb2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzID0gb2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbHRlcihcclxuICAgICAgKGYpID0+IGYuZmlsdGVyaWQgIT09IHRoaXMuY3VycmVudEZpbHRlci5maWx0ZXJpZFxyXG4gICAgKTtcclxuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZUxvZ2ljYWwobG9naWNhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIucGFyZW50TG9naWNhbCA9IGxvZ2ljYWw7XHJcbiAgICB0aGlzLnJlZnJlc2hGaWx0ZXJzKCk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VPcGVyYXRvcihvcGVyYXRvcjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgPSBvcGVyYXRvcjtcclxuICAgIHRoaXMuY3VycmVudEZpbHRlcklzU3BhdGlhbCgpO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVySXNTcGF0aWFsJC52YWx1ZSAmJlxyXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIud2t0X2dlb21ldHJ5Lmxlbmd0aCA9PT0gMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlU3BhdGlhbFNlbGVjdG9yKHRoaXMuY3VycmVudEZpbHRlci5pZ29TcGF0aWFsU2VsZWN0b3IpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZWZyZXNoRmlsdGVycygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlRmllbGQoZmllbGQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSA9IGZpZWxkO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkJC5uZXh0KFxyXG4gICAgICB0aGlzLmZpZWxkcyQudmFsdWUuZmluZCgoZikgPT4gZi5uYW1lID09PSB0aGlzLmN1cnJlbnRGaWx0ZXIucHJvcGVydHlOYW1lKVxyXG4gICAgKTtcclxuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcclxuICB9XHJcblxyXG4gIC8vIElzc3VlIHdpdGggbWFwc2VydmVyIDcuMiBhbmQgUG9zdGdpcyBsYXllcnMuIEZpeGVkIGluIDcuNFxyXG4gIC8vIER1ZSB0byB0aGlzIGlzc3VlLCB0aGUgY2hlY2tib3ggaXMgaGlkZS5cclxuICBjaGFuZ2VDYXNlU2Vuc2l0aXZlKG1hdGNoQ2FzZSkge1xyXG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLm1hdGNoQ2FzZSA9IG1hdGNoQ2FzZS5jaGVja2VkO1xyXG4gICAgdGhpcy5yZWZyZXNoRmlsdGVycygpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUHJvcGVydHkodmFsdWU6IGFueSwgcG9zPzogbnVtYmVyLCByZWZyZXNoRmlsdGVyID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgZGV0ZWN0ZWRQcm9wZXJ0eSA9IHRoaXMuZGV0ZWN0UHJvcGVydHkocG9zKTtcclxuICAgIGlmIChkZXRlY3RlZFByb3BlcnR5KSB7XHJcbiAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVycy5maW5kKFxyXG4gICAgICAgIChmKSA9PiBmLmZpbHRlcmlkID09PSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmlsdGVyaWRcclxuICAgICAgKVtkZXRlY3RlZFByb3BlcnR5XSA9IHZhbHVlO1xyXG5cclxuICAgICAgaWYgKCByZWZyZXNoRmlsdGVyICkge1xyXG4gICAgICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlTnVtZXJpY1Byb3BlcnR5KHZhbHVlLCBwb3M6IG51bWJlcikge1xyXG4gICAgdGhpcy5jaGFuZ2VQcm9wZXJ0eShwYXJzZUZsb2F0KHZhbHVlKSwgcG9zKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZVNwYXRpYWxTZWxlY3Rvcih2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yID0gdmFsdWU7XHJcblxyXG4gICAgaWYgKHZhbHVlID09PSAnZml4ZWRFeHRlbnQnKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlTWFwRXh0ZW50R2VvbWV0cnkoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jdXJyZW50RmlsdGVySXNTcGF0aWFsKCk7XHJcbiAgICB0aGlzLnJlZnJlc2hGaWx0ZXJzKCk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VTTlJDKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuc25yYyA9IHZhbHVlO1xyXG4gICAgdGhpcy5jaGFuZ2VTTlJDR2VvbWV0cnkoKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZVNOUkNHZW9tZXRyeSgpIHtcclxuICAgIGNvbnN0IGludGVyZmFjZU9nY0ZpbHRlciA9IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVycy5maW5kKFxyXG4gICAgICAoZikgPT4gZi5maWx0ZXJpZCA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLmZpbHRlcmlkXHJcbiAgICApO1xyXG4gICAgaWYgKCFpbnRlcmZhY2VPZ2NGaWx0ZXIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNucmMgJiYgdGhpcy5jdXJyZW50RmlsdGVyLmlnb1NwYXRpYWxTZWxlY3RvciA9PT0gJ3NucmMnKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci53a3RfZ2VvbWV0cnkgPSB0aGlzLndrdFNlcnZpY2Uuc25yY1RvV2t0KFxyXG4gICAgICAgIHRoaXMuc25yYyxcclxuICAgICAgICB0aGlzLm1hcC5wcm9qZWN0aW9uXHJcbiAgICAgICkud2t0UG9seTtcclxuICAgIH1cclxuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZU1hcEV4dGVudEdlb21ldHJ5KHJlZnJlc2g6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBjb25zdCBpbnRlcmZhY2VPZ2NGaWx0ZXIgPSB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmludGVyZmFjZU9nY0ZpbHRlcnMuZmluZChcclxuICAgICAgKGYpID0+IGYuZmlsdGVyaWQgPT09IHRoaXMuY3VycmVudEZpbHRlci5maWx0ZXJpZFxyXG4gICAgKTtcclxuICAgIGlmICghaW50ZXJmYWNlT2djRmlsdGVyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jdXJyZW50RmlsdGVyLmlnb1NwYXRpYWxTZWxlY3RvciA9PT0gJ2ZpeGVkRXh0ZW50Jykge1xyXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIud2t0X2dlb21ldHJ5ID0gdGhpcy53a3RTZXJ2aWNlLmV4dGVudFRvV2t0KFxyXG4gICAgICAgIHRoaXMubWFwLnByb2plY3Rpb24sXHJcbiAgICAgICAgdGhpcy5tYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KCksXHJcbiAgICAgICAgdGhpcy5tYXAucHJvamVjdGlvblxyXG4gICAgICApLndrdFBvbHk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVmcmVzaCkge1xyXG4gICAgICB0aGlzLnJlZnJlc2hGaWx0ZXJzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkZXRlY3RQcm9wZXJ0eShwb3M/OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IpIHtcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTm90RXF1YWxUbzpcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzRXF1YWxUbzpcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzR3JlYXRlclRoYW46XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0dyZWF0ZXJUaGFuT3JFcXVhbFRvOlxyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNMZXNzVGhhbjpcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGVzc1RoYW5PckVxdWFsVG86XHJcbiAgICAgICAgcmV0dXJuICdleHByZXNzaW9uJztcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGlrZTpcclxuICAgICAgICByZXR1cm4gJ3BhdHRlcm4nO1xyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNCZXR3ZWVuOlxyXG4gICAgICAgIHJldHVybiBwb3MgJiYgcG9zID09PSAxXHJcbiAgICAgICAgICA/ICdsb3dlckJvdW5kYXJ5J1xyXG4gICAgICAgICAgOiBwb3MgJiYgcG9zID09PSAyXHJcbiAgICAgICAgICA/ICd1cHBlckJvdW5kYXJ5J1xyXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuRHVyaW5nOlxyXG4gICAgICAgIHJldHVybiBwb3MgJiYgcG9zID09PSAxXHJcbiAgICAgICAgICA/ICdiZWdpbidcclxuICAgICAgICAgIDogcG9zICYmIHBvcyA9PT0gMlxyXG4gICAgICAgICAgPyAnZW5kJ1xyXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjdXJyZW50RmlsdGVySXNTcGF0aWFsKCkge1xyXG4gICAgbGV0IGlzU3BhdGlhbCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuY3VycmVudEZpbHRlcikge1xyXG4gICAgICBpc1NwYXRpYWwgPVxyXG4gICAgICAgIFtcclxuICAgICAgICAgIE9nY0ZpbHRlck9wZXJhdG9yLkNvbnRhaW5zLFxyXG4gICAgICAgICAgT2djRmlsdGVyT3BlcmF0b3IuSW50ZXJzZWN0cyxcclxuICAgICAgICAgIE9nY0ZpbHRlck9wZXJhdG9yLldpdGhpblxyXG4gICAgICAgIF0uaW5kZXhPZih0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IpICE9PSAtMTtcclxuICAgIH1cclxuICAgIHRoaXMuY3VycmVudEZpbHRlcklzU3BhdGlhbCQubmV4dChpc1NwYXRpYWwpO1xyXG4gIH1cclxuXHJcbiAgaXNUZW1wb3JhbE9wZXJhdG9yKCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yLnRvTG93ZXJDYXNlKCkgPT09XHJcbiAgICAgIHRoaXMub2djRmlsdGVyT3BlcmF0b3IuRHVyaW5nLnRvTG93ZXJDYXNlKClcclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiIsIjxtYXQtY2hlY2tib3hcclxuICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci50b2dnbGVGaWx0ZXJTdGF0ZScgfCB0cmFuc2xhdGVcIlxyXG4gIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gIChjaGFuZ2UpPVwidG9nZ2xlRmlsdGVyU3RhdGUoJGV2ZW50KVwiXHJcbiAgW2NoZWNrZWRdPVwiY3VycmVudEZpbHRlci5hY3RpdmVcIj5cclxuPC9tYXQtY2hlY2tib3g+XHJcblxyXG48bWF0LWZvcm0tZmllbGRcclxuICBbbmdDbGFzc109XCJ7J2xvZ2ljYWwnOiBhY3RpdmVGaWx0ZXJzLmluZGV4T2YoY3VycmVudEZpbHRlcikgIT09IDAgJiYgY3VycmVudEZpbHRlci5hY3RpdmU9PT10cnVlLCAnbG9naWNhbEhpZGRlbic6IGFjdGl2ZUZpbHRlcnMuaW5kZXhPZihjdXJyZW50RmlsdGVyKSA9PT0gMCB8fCBjdXJyZW50RmlsdGVyLmFjdGl2ZSE9PXRydWV9XCI+XHJcbiAgPG1hdC1zZWxlY3RcclxuICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxyXG4gICAgW3ZhbHVlXT1cImN1cnJlbnRGaWx0ZXIucGFyZW50TG9naWNhbFwiXHJcbiAgICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICBbbWF0VG9vbHRpcF09XCJjdXJyZW50RmlsdGVyLnBhcmVudExvZ2ljYWwgPyAoKCdpZ28uZ2VvLm9wZXJhdG9ycy50b29sdGlwLicrIGN1cnJlbnRGaWx0ZXIucGFyZW50TG9naWNhbCkgfCB0cmFuc2xhdGUpIDogJydcIlxyXG4gICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VMb2dpY2FsKCRldmVudC52YWx1ZSlcIj5cclxuICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICBbdmFsdWVdPW9nY0ZpbHRlck9wZXJhdG9yLkFuZFxyXG4gICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJhYm92ZVwiXHJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ub3BlcmF0b3JzLnRvb2x0aXAuQW5kJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAge3snaWdvLmdlby5vcGVyYXRvcnMuQW5kJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICBbdmFsdWVdPW9nY0ZpbHRlck9wZXJhdG9yLk9yXHJcbiAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImFib3ZlXCJcclxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5vcGVyYXRvcnMudG9vbHRpcC5PcicgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgIHt7J2lnby5nZW8ub3BlcmF0b3JzLk9yJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgIDwvbWF0LW9wdGlvbj5cclxuICA8L21hdC1zZWxlY3Q+XHJcbjwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG48bWF0LWZvcm0tZmllbGRcclxuICBjbGFzcz1cImZpZWxkXCJcclxuICAqbmdJZj1cIihjdXJyZW50RmlsdGVySXNTcGF0aWFsJCB8IGFzeW5jKT09PWZhbHNlICYmIChmaWVsZHMkIHwgYXN5bmMpICYmIChmaWVsZHMkfCBhc3luYykubGVuZ3RoID4gMCAmJiAoZmllbGRzJHwgYXN5bmMpWzBdLm5hbWUgIT09ICcnXCJcclxuICAobW91c2VlbnRlcik9XCJpbnB1dENsZWFyYWJsZSA9ICdzZWxlY3RGaWVsZCdcIlxyXG4gIChtb3VzZWxlYXZlKT1cImlucHV0Q2xlYXJhYmxlID0gdW5kZWZpbmVkXCJcclxuICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCI+XHJcbiAgPGlucHV0XHJcbiAgbWF0SW5wdXRcclxuICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5nZW8uc291cmNlRmllbGRzLnNlbGVjdEZpZWxkJyB8IHRyYW5zbGF0ZVwiXHJcbiAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXHJcbiAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvQ29tcGxldGVGaWVsZFwiXHJcbiAgW3ZhbHVlXT1cIihzZWxlY3RlZEZpZWxkJCB8IGFzeW5jKSA/IChzZWxlY3RlZEZpZWxkJCB8IGFzeW5jKS5hbGlhcyA6ICcnXCJcclxuICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gIFttYXRUb29sdGlwXT1cIihzZWxlY3RlZEZpZWxkJCB8IGFzeW5jKSA/IChzZWxlY3RlZEZpZWxkJCB8IGFzeW5jKS5hbGlhcyA6ICgnaWdvLmdlby5zb3VyY2VGaWVsZHMuc2VsZWN0RmllbGQnIHwgdHJhbnNsYXRlKVwiXHJcbiAgKGlucHV0KT1cInVwZGF0ZUZpZWxkc0xpc3QoJGV2ZW50LnRhcmdldC52YWx1ZSlcIj5cclxuICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0b0NvbXBsZXRlRmllbGQ9XCJtYXRBdXRvY29tcGxldGVcIlxyXG4gIChvcHRpb25TZWxlY3RlZCk9J2NoYW5nZUZpZWxkKCRldmVudC5vcHRpb24uaWQpJz5cclxuICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmaWx0ZXJlZEZpZWxkcyQgfCBhc3luY1wiXHJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICBbdmFsdWVdPVwiZmllbGQuYWxpYXNcIlxyXG4gICAgICBbaWRdPVwiZmllbGQubmFtZVwiXHJcbiAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLmFsaWFzXCI+XHJcbiAgICAgIHt7ZmllbGQuYWxpYXN9fVxyXG4gICAgPC9tYXQtb3B0aW9uPlxyXG4gIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICA8YnV0dG9uIG1hdC1idXR0b25cclxuICAgICpuZ0lmPVwiY3VycmVudEZpbHRlci5wcm9wZXJ0eU5hbWUgJiYgaW5wdXRDbGVhcmFibGUgPT09ICdzZWxlY3RGaWVsZCcgJiYgY3VycmVudEZpbHRlci5hY3RpdmVcIlxyXG4gICAgbWF0U3VmZml4XHJcbiAgICBtYXQtaWNvbi1idXR0b25cclxuICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgIChjbGljayk9XCJjbGVhclNlbGVjdGVkRmllbGQoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiY2xvc2VcIj48L21hdC1pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG48L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuXHJcbjxtYXQtZm9ybS1maWVsZFxyXG4gIFtuZ0NsYXNzXT1cInsnb3BlcmF0b3InOiAoY3VycmVudEZpbHRlcklzU3BhdGlhbCQgfCBhc3luYyk9PT1mYWxzZSAsICdkdWFsSW5wdXQnOiAoY3VycmVudEZpbHRlcklzU3BhdGlhbCQgfCBhc3luYyl9XCJcclxuICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCI+XHJcbiAgPG1hdC1zZWxlY3RcclxuICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgIFttYXRUb29sdGlwXT1cImN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgPyAoKCdpZ28uZ2VvLm9wZXJhdG9ycy50b29sdGlwLicrIGN1cnJlbnRGaWx0ZXIub3BlcmF0b3IpIHwgdHJhbnNsYXRlKSA6ICgnaWdvLmdlby5maWx0ZXIuc2VsZWN0T3BlcmF0b3InIHwgdHJhbnNsYXRlKVwiXHJcbiAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgIFt2YWx1ZV09XCJjdXJyZW50RmlsdGVyLm9wZXJhdG9yXCJcclxuICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlT3BlcmF0b3IoJGV2ZW50LnZhbHVlKVwiPlxyXG4gICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBvcGVyYXRvciBvZiAob2djRmlsdGVyT3BlcmF0b3JzJCB8IGFzeW5jKSB8IGtleXZhbHVlXCJcclxuICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgIFt2YWx1ZV09XCJvcGVyYXRvci5rZXlcIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cIignaWdvLmdlby5vcGVyYXRvcnMudG9vbHRpcC4nKyBvcGVyYXRvci5rZXkpIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICB7eygnaWdvLmdlby5vcGVyYXRvcnMuJysgb3BlcmF0b3Iua2V5KSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgIDwvbWF0LW9wdGlvbj5cclxuICA8L21hdC1zZWxlY3Q+XHJcbjwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG48bWF0LWZvcm0tZmllbGRcclxuY2xhc3M9XCJzcGF0aWFsU2VsZWN0b3JcIlxyXG4qbmdJZj1cImN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwkIHwgYXN5bmNcIj5cclxuICA8bWF0LXNlbGVjdFxyXG4gICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXHJcbiAgICBbdmFsdWVdPVwiY3VycmVudEZpbHRlci5pZ29TcGF0aWFsU2VsZWN0b3JcIlxyXG4gICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VTcGF0aWFsU2VsZWN0b3IoJGV2ZW50LnZhbHVlKVwiPlxyXG4gICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBpZ29TcGF0aWFsU2VsZWN0b3Igb2YgaWdvU3BhdGlhbFNlbGVjdG9yc1wiXHJcbiAgICAgICAgW3ZhbHVlXT1cImlnb1NwYXRpYWxTZWxlY3Rvci50eXBlXCI+XHJcbiAgICAgICAgICB7eygnaWdvLmdlby5zcGF0aWFsU2VsZWN0b3IuJysgaWdvU3BhdGlhbFNlbGVjdG9yLnR5cGUpIHwgdHJhbnNsYXRlfX1cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gIDwvbWF0LXNlbGVjdD5cclxuPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbjxtYXQtZm9ybS1maWVsZFxyXG5jbGFzcz1cInNpbmdsZUlucHV0XCJcclxuKm5nSWY9XCJbJ2V4cHJlc3Npb24nLCdwYXR0ZXJuJ10uaW5kZXhPZihkZXRlY3RQcm9wZXJ0eSgpKSAhPT0gLTFcIlxyXG4obW91c2VlbnRlcik9XCJpbnB1dENsZWFyYWJsZSA9ICdzZWxlY3RQcm9wZXJ0eSdcIlxyXG4obW91c2VsZWF2ZSk9XCJpbnB1dENsZWFyYWJsZSA9IHVuZGVmaW5lZFwiXHJcbltmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIj5cclxuICA8aW5wdXRcclxuICAgIG1hdElucHV0XHJcbiAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5nZW8uZmlsdGVyLnBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b0NvbXBsZXRlVmFsdWVzXCJcclxuICAgIFt2YWx1ZV09XCJkZXRlY3RQcm9wZXJ0eSgpID09PSAnZXhwcmVzc2lvbicgPyBjdXJyZW50RmlsdGVyLmV4cHJlc3Npb24gOiBjdXJyZW50RmlsdGVyLnBhdHRlcm5cIlxyXG4gICAgdG9vbHRpcC1wb3NpdGlvbj1cImFib3ZlXCJcclxuICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgW21hdFRvb2x0aXBdPVwiZGV0ZWN0UHJvcGVydHkoKSA9PT0gJ2V4cHJlc3Npb24nID8gY3VycmVudEZpbHRlci5leHByZXNzaW9uIHx8ICcnIDogY3VycmVudEZpbHRlci5wYXR0ZXJuIHx8ICcnXCJcclxuICAgIChpbnB1dCk9XCJ1cGRhdGVWYWx1ZXNMaXN0KCRldmVudC50YXJnZXQudmFsdWUpXCI+XHJcbiAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG9Db21wbGV0ZVZhbHVlcz1cIm1hdEF1dG9jb21wbGV0ZVwiXHJcbiAgICAob3B0aW9uU2VsZWN0ZWQpPVwiY2hhbmdlUHJvcGVydHkoJGV2ZW50Lm9wdGlvbi52YWx1ZSlcIj5cclxuICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWx0ZXJlZFZhbHVlcyQgfCBhc3luY1wiXHJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICBbdmFsdWVdPVwidmFsdWVcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCJ2YWx1ZVwiPlxyXG4gICAgICB7e3ZhbHVlfX1cclxuICAgIDwvbWF0LW9wdGlvbj5cclxuICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgPGJ1dHRvbiBtYXQtYnV0dG9uXHJcbiAgICAqbmdJZj1cImlzQ2xlYXJhYmxlKCkgJiYgaW5wdXRDbGVhcmFibGUgPT09ICdzZWxlY3RQcm9wZXJ0eScgJiYgY3VycmVudEZpbHRlci5hY3RpdmVcIlxyXG4gICAgbWF0U3VmZml4XHJcbiAgICBtYXQtaWNvbi1idXR0b25cclxuICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgIChjbGljayk9XCJjbGVhclByb3BlcnR5KClcIj5cclxuICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImNsb3NlXCI+PC9tYXQtaWNvbj5cclxuICA8L2J1dHRvbj5cclxuPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbjxkaXYgY2xhc3M9XCJpZ28tbGF5ZXItYnV0dG9uLWdyb3VwXCI+XHJcbiAgPGJ1dHRvblxyXG4gICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICBjb2xsYXBzaWJsZUJ1dHRvblxyXG4gICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnJlbW92ZUZpbHRlcicgfCB0cmFuc2xhdGVcIlxyXG4gICAgY29sb3I9XCJ3YXJuXCJcclxuICAgIChjbGljayk9XCJkZWxldGVGaWx0ZXIoKVwiPlxyXG4gICAgPG1hdC1pY29uIHN2Z0ljb249XCJkZWxldGVcIj48L21hdC1pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuXHJcbjxtYXQtZm9ybS1maWVsZFxyXG5jbGFzcz1cInNucmNcIlxyXG4qbmdJZj1cIihjdXJyZW50RmlsdGVySXNTcGF0aWFsJCB8IGFzeW5jKSAmJiBjdXJyZW50RmlsdGVyLmlnb1NwYXRpYWxTZWxlY3RvciA9PT0gJ3NucmMnXCJcclxuKG1vdXNlZW50ZXIpPVwiaW5wdXRDbGVhcmFibGUgPSAnc2VsZWN0U05SQydcIlxyXG4obW91c2VsZWF2ZSk9XCJpbnB1dENsZWFyYWJsZSA9IHVuZGVmaW5lZFwiXHJcbltmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIj5cclxuICA8aW5wdXRcclxuICAgIG1hdElucHV0XHJcbiAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5nZW8uZmlsdGVyLnBsYWNlaG9sZGVyU25yYycgfCB0cmFuc2xhdGVcIlxyXG4gICAgW3ZhbHVlXT1cImN1cnJlbnRGaWx0ZXIuaWdvU05SQ1wiXHJcbiAgICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICBbbWF0VG9vbHRpcF09XCJjdXJyZW50RmlsdGVyLmlnb1NOUkMgPyBjdXJyZW50RmlsdGVyLmlnb1NOUkMgOiAnJ1wiXHJcbiAgICAoaW5wdXQpPVwiY2hhbmdlU05SQygkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxyXG4gIDxidXR0b25cclxuICAgIG1hdC1idXR0b25cclxuICAgICpuZ0lmPVwiY3VycmVudEZpbHRlci5pZ29TTlJDXCJcclxuICAgIG1hdFN1ZmZpeFxyXG4gICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxyXG4gICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZSAmJiBpbnB1dENsZWFyYWJsZSA9PT0gJ3NlbGVjdFNOUkMnICYmIGN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgIChjbGljayk9XCJjdXJyZW50RmlsdGVyLmlnb1NOUkM9JydcIj5cclxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJjbG9zZVwiPjwvbWF0LWljb24+XHJcbiAgPC9idXR0b24+XHJcbiAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihjdXJyZW50RmlsdGVySXNTcGF0aWFsJCB8IGFzeW5jKSAmJiBjdXJyZW50RmlsdGVyLmlnb1NwYXRpYWxTZWxlY3RvciA9PT0gJ2ZpeGVkRXh0ZW50J1wiPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgbWF0LWJ1dHRvblxyXG4gICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXHJcbiAgICAqbmdJZj1cImN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yID09PSAnZml4ZWRFeHRlbnQnXCJcclxuICAgIG1hdFN1ZmZpeFxyXG4gICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgIChjbGljayk9XCJjaGFuZ2VNYXBFeHRlbnRHZW9tZXRyeSgpXCJcclxuICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLnNwYXRpYWxTZWxlY3Rvci5idG5TZXRFeHRlbnQnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiYXJyb3ctZXhwYW5kLWFsbFwiPjwvbWF0LWljb24+XHJcbiAgPC9idXR0b24+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPGJyLz5cclxuXHJcbjxtYXQtZm9ybS1maWVsZFxyXG5jbGFzcz1cImR1YWxJbnB1dFwiXHJcbipuZ0lmPVwiIWlzVGVtcG9yYWxPcGVyYXRvcigpICYmIFsnbG93ZXJCb3VuZGFyeScsJ2JlZ2luJ10uaW5kZXhPZihkZXRlY3RQcm9wZXJ0eSgxKSkgIT09IC0xXCJcclxuKG1vdXNlZW50ZXIpPVwiaW5wdXRDbGVhcmFibGUgPSAnc2VsZWN0UHJvcGVydHkxJ1wiXHJcbihtb3VzZWxlYXZlKT1cImlucHV0Q2xlYXJhYmxlID0gdW5kZWZpbmVkXCJcclxuW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIG1hdElucHV0XHJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby5maWx0ZXIucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXHJcbiAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b0R1YWxWYWx1ZU9wZXJhdG9yMVwiXHJcbiAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICBbdmFsdWVdPVwiZGV0ZWN0UHJvcGVydHkoMSkgPT09ICdsb3dlckJvdW5kYXJ5JyA/IGN1cnJlbnRGaWx0ZXIubG93ZXJCb3VuZGFyeSA6IGN1cnJlbnRGaWx0ZXIuYmVnaW5cIlxyXG4gICAgICAoaW5wdXQpPVwidXBkYXRlVmFsdWVzTGlzdCgkZXZlbnQudGFyZ2V0LnZhbHVlLDEpXCI+XHJcbiAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0b0R1YWxWYWx1ZU9wZXJhdG9yMT1cIm1hdEF1dG9jb21wbGV0ZVwiXHJcbiAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJjaGFuZ2VOdW1lcmljUHJvcGVydHkoJGV2ZW50Lm9wdGlvbi52YWx1ZSwxKVwiPlxyXG4gICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWx0ZXJlZFZhbHVlcyQgfCBhc3luY1wiXHJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJ2YWx1ZVwiPlxyXG4gICAgICAgIHt7dmFsdWV9fVxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcbiAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICA8YnV0dG9uIG1hdC1idXR0b25cclxuICAgICAgKm5nSWY9XCJpc0NsZWFyYWJsZSgxKSAmJiBpbnB1dENsZWFyYWJsZSA9PT0gJ3NlbGVjdFByb3BlcnR5MScgJiYgY3VycmVudEZpbHRlci5hY3RpdmVcIlxyXG4gICAgICBtYXRTdWZmaXhcclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgICAgKGNsaWNrKT1cImNsZWFyUHJvcGVydHkoMSlcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiY2xvc2VcIj48L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbjwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG48bWF0LWZvcm0tZmllbGRcclxuICBjbGFzcz1cImR1YWxJbnB1dFwiXHJcbiAgKm5nSWY9XCIhaXNUZW1wb3JhbE9wZXJhdG9yKCkgJiYgWyd1cHBlckJvdW5kYXJ5JywnZW5kJ10uaW5kZXhPZihkZXRlY3RQcm9wZXJ0eSgyKSkgIT09IC0xXCJcclxuICAobW91c2VlbnRlcik9XCJpbnB1dENsZWFyYWJsZSA9ICdzZWxlY3RQcm9wZXJ0eTInXCJcclxuICAobW91c2VsZWF2ZSk9XCJpbnB1dENsZWFyYWJsZSA9IHVuZGVmaW5lZFwiXHJcbiAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIG1hdElucHV0XHJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby5maWx0ZXIucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXHJcbiAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b0R1YWxWYWx1ZU9wZXJhdG9yMlwiXHJcbiAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICBbdmFsdWVdPVwiZGV0ZWN0UHJvcGVydHkoMikgPT09ICd1cHBlckJvdW5kYXJ5JyA/IGN1cnJlbnRGaWx0ZXIudXBwZXJCb3VuZGFyeSA6IGN1cnJlbnRGaWx0ZXIuZW5kXCJcclxuICAgICAgKGlucHV0KT1cInVwZGF0ZVZhbHVlc0xpc3QoJGV2ZW50LnRhcmdldC52YWx1ZSwyKVwiPlxyXG4gICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG9EdWFsVmFsdWVPcGVyYXRvcjI9XCJtYXRBdXRvY29tcGxldGVcIlxyXG4gICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiY2hhbmdlTnVtZXJpY1Byb3BlcnR5KCRldmVudC5vcHRpb24udmFsdWUsMilcIj5cclxuICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZmlsdGVyZWRWYWx1ZXMkIHwgYXN5bmNcIlxyXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwidmFsdWVcIj5cclxuICAgICAgICB7e3ZhbHVlfX1cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXHJcbiAgICAgICpuZ0lmPVwiaXNDbGVhcmFibGUoMikgJiYgaW5wdXRDbGVhcmFibGUgPT09ICdzZWxlY3RQcm9wZXJ0eTInICYmIGN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgICAgbWF0U3VmZml4XHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcclxuICAgICAgKGNsaWNrKT1cImNsZWFyUHJvcGVydHkoMilcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiY2xvc2VcIj48L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbjwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG48aWdvLW9nYy1maWx0ZXItdGltZSAqbmdJZj1cImlzVGVtcG9yYWxPcGVyYXRvcigpXCJcclxuICBbKGRhdGFzb3VyY2UpXT1cImRhdGFzb3VyY2VcIlxyXG4gIFsoY3VycmVudEZpbHRlcildPVwiY3VycmVudEZpbHRlclwiXHJcbiAgKGNoYW5nZVByb3BlcnR5KT1cImNoYW5nZVByb3BlcnR5KCRldmVudC52YWx1ZSwgJGV2ZW50LnBvcylcIj5cclxuPC9pZ28tb2djLWZpbHRlci10aW1lPlxyXG5cclxuPCEtLVxyXG5UT0RPIEMnRVNUIFBFUlRJTkVOVCBqZSBjcm9pc1xyXG48bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmaWVsZFwiICpuZ0lmPVwiIShjdXJyZW50RmlsdGVySXNTcGF0aWFsJCB8IGFzeW5jKSAmJiAoZmllbGRzJHwgYXN5bmMpICYmIChmaWVsZHMkfCBhc3luYykubGVuZ3RoID09PSAxICYmICAoZmllbGRzJHwgYXN5bmMpWzBdLm5hbWUgPT09ICcnXCI+XHJcbjxpbnB1dCBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCIgbWF0SW5wdXQgI2ZpZWxkUGVyVXNlciAoa2V5dXApPVwiY2hhbmdlUHJvcGVydHkoY3VycmVudEZpbHRlciwncHJvcGVydHlOYW1lJyxmaWVsZFBlclVzZXIudmFsdWUpXCJcclxuICAoYmx1cik9XCJjaGFuZ2VQcm9wZXJ0eShjdXJyZW50RmlsdGVyLCdwcm9wZXJ0eU5hbWUnLGZpZWxkUGVyVXNlci52YWx1ZSlcIiBbKG5nTW9kZWwpXT1cImN1cnJlbnRGaWx0ZXIucHJvcGVydHlOYW1lXCI+XHJcbjxidXR0b24gbWF0LWJ1dHRvbiAqbmdJZj1cImN1cnJlbnRGaWx0ZXIucHJvcGVydHlOYW1lXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiQ2xlYXJcIiAoY2xpY2spPVwiY3VycmVudEZpbHRlci5wcm9wZXJ0eU5hbWU9JydcIj5cclxuICA8bWF0LWljb24gc3ZnSWNvbj1cImNsb3NlXCI+PC9tYXQtaWNvbj5cclxuPC9idXR0b24+XHJcbjwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG5cclxuXHJcbjxtYXQtY2hlY2tib3ggbGFiZWxQb3NpdGlvbj0nYmVmb3JlJyAoY2hhbmdlKT1cImNoYW5nZUNhc2VTZW5zaXRpdmUoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwiY3VycmVudEZpbHRlci5tYXRjaENhc2VcIj5cclxuICB7eygnaWdvLmdlby5vcGVyYXRvcnMuY2FzZVNlbnNpdGl2ZScpIHwgdHJhbnNsYXRlfX1cclxuPC9tYXQtY2hlY2tib3g+XHJcblxyXG48L21hdC1saXN0LWl0ZW0+IC0tPlxyXG4iXX0=
645
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLWZvcm0vb2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLWZvcm0vb2djLWZpbHRlci1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTXZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUlqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7OztJQ3lDcEUsc0NBSzZCO0lBQzNCLFlBQ0Y7SUFBQSxpQkFBYTs7O0lBSlgsdUNBQXFCLHNCQUFBLCtCQUFBO0lBR3JCLGVBQ0Y7SUFERSxnREFDRjs7OztJQUVGLGtDQU1pQztJQUEvQiw0TEFBUyxlQUFBLDRCQUFvQixDQUFBLElBQUM7SUFDMUIsK0JBQXFDO0lBQzNDLGlCQUFTOzs7SUFIUCx3REFBa0M7Ozs7SUFoQ3RDLDBDQUs0QjtJQUYxQiwyT0FBK0IsYUFBYSxLQUFDLDhOQUNkLFNBQVMsS0FESztJQUc3QyxpQ0FTZ0Q7SUFBaEQsc0xBQVMsZUFBQSw2Q0FBcUMsQ0FBQSxJQUFDOzs7Ozs7O0lBVC9DLGlCQVNnRDtJQUNoRCxnREFDaUQ7SUFBakQsbU5BQWtCLGVBQUEscUNBQTZCLENBQUEsSUFBQztJQUM5QywwR0FPYTs7SUFDZixpQkFBbUI7SUFDbkIsa0dBUVM7SUFDWCxpQkFBaUI7Ozs7SUEvQmYsOENBQXlCO0lBR3pCLGVBQThEO0lBQTlELHNGQUE4RCwwQ0FBQSx3QkFBQSxpSEFBQSw2S0FBQTtJQVd4QyxlQUEwQjtJQUExQix3RUFBMEI7SUFTN0MsZUFBNEY7SUFBNUYsa0lBQTRGOzs7SUFxQjNGLHFDQUswRTs7SUFDdEUsWUFDSjs7SUFBQSxpQkFBYTs7O0lBSFgsd0NBQXNCLHFGQUFBO0lBRXBCLGVBQ0o7SUFESSw4RkFDSjs7O0lBV0Esc0NBRW9DO0lBQ2hDLFlBQ0o7O0lBQUEsaUJBQWE7OztJQUZYLG1EQUFpQztJQUMvQixlQUNKO0lBREksK0dBQ0o7Ozs7SUFYTiwwQ0FFd0MscUJBQUE7SUFJcEMsK01BQW1CLGVBQUEsMkNBQW1DLENBQUEsSUFBQztJQUNyRCx3R0FJYTtJQUNqQixpQkFBYSxFQUFBOzs7SUFSWCxlQUFrQztJQUFsQyx1REFBa0Msa0RBQUE7SUFJQyxlQUFzQjtJQUF0QixvREFBc0I7OztJQXlCekQsc0NBSXVCO0lBQ3JCLFlBQ0Y7SUFBQSxpQkFBYTs7O0lBSFgsaUNBQWUseUJBQUE7SUFFZixlQUNGO0lBREUsMENBQ0Y7Ozs7SUFFRixrQ0FNNEI7SUFBMUIsMkxBQVMsZUFBQSx1QkFBZSxDQUFBLElBQUM7SUFDckIsK0JBQXFDO0lBQzNDLGlCQUFTOzs7SUFIUCx3REFBa0M7Ozs7SUEvQnRDLDBDQUswQjtJQUYxQiwyT0FBK0IsZ0JBQWdCLEtBQUMsOE5BQ2pCLFNBQVMsS0FEUTtJQUc5QyxpQ0FTa0Q7SUFBaEQsc0xBQVMsZUFBQSw2Q0FBcUMsQ0FBQSxJQUFDOztJQVRqRCxpQkFTa0Q7SUFDbEQsZ0RBQ3lEO0lBQXZELG1OQUFrQixlQUFBLDJDQUFtQyxDQUFBLElBQUM7SUFDdEQsd0dBTWE7O0lBQ2YsaUJBQW1CO0lBQ25CLGdHQVFTO0lBQ1gsaUJBQWlCOzs7O0lBOUJqQiw4Q0FBeUI7SUFHckIsZUFBd0Q7SUFBeEQsZ0ZBQXdELDBDQUFBLHlCQUFBLG9IQUFBLHFJQUFBO0lBV3BDLGVBQTBCO0lBQTFCLHVFQUEwQjtJQVE3QyxlQUFrRjtJQUFsRix3SEFBa0Y7Ozs7SUFxQ3JGLGtDQU9xQztJQUFuQywyTEFBUywrQ0FBc0IsRUFBRSxDQUFBLElBQUM7SUFDaEMsK0JBQXFDO0lBQ3pDLGlCQUFTOzs7SUFIUCxtSUFBNkY7Ozs7SUFwQmpHLDBDQUswQjtJQUYxQiwyT0FBK0IsWUFBWSxLQUFDLDhOQUNiLFNBQVMsS0FESTtJQUcxQyxpQ0FPNEM7SUFBMUMsc0xBQVMsZUFBQSx1Q0FBK0IsQ0FBQSxJQUFDOztJQVAzQyxpQkFPNEM7SUFDNUMsZ0dBU1M7SUFDVCxpQkFBaUI7OztJQW5CbkIsOENBQXlCO0lBR3JCLGVBQTREO0lBQTVELG9GQUE0RCx1Q0FBQSxnRkFBQTtJQVEzRCxlQUEyQjtJQUEzQixtREFBMkI7Ozs7SUFXNUIsa0NBVWtFO0lBSGxFLHlMQUFTLGVBQUEsaUNBQXlCLENBQUEsSUFBQzs7SUFJakMsK0JBQWdEO0lBQ3BELGlCQUFTOzs7SUFWUCx3REFBa0MsMkNBQUEsNEVBQUE7OztJQUhwQyw2QkFBOEc7SUFDNUcsOEZBWU87SUFDWCwwQkFBZTs7O0lBVlYsZUFBd0Q7SUFBeEQsZ0ZBQXdEOzs7SUE4QnZELHNDQUl1QjtJQUNyQixZQUNGO0lBQUEsaUJBQWE7OztJQUhYLGlDQUFlLHlCQUFBO0lBRWYsZUFDRjtJQURFLDBDQUNGOzs7O0lBRUYsa0NBTTZCO0lBQTNCLDJMQUFTLGVBQUEsc0JBQWMsQ0FBQyxDQUFDLENBQUEsSUFBQztJQUN0QiwrQkFBcUM7SUFDM0MsaUJBQVM7OztJQUhULHdEQUFrQzs7OztJQTdCdEMsMENBSzBCO0lBRjFCLDJPQUErQixpQkFBaUIsS0FBQyw4TkFDbEIsU0FBUyxLQURTO0lBRzdDLGlDQU9vRDtJQUFsRCxzTEFBUyxlQUFBLDhDQUFxQyxDQUFDLENBQUMsQ0FBQSxJQUFDOztJQVBuRCxpQkFPb0Q7SUFDcEQsZ0RBQ2tFO0lBQWhFLG1OQUFrQixlQUFBLG1EQUEwQyxDQUFDLENBQUMsQ0FBQSxJQUFDO0lBQy9ELHdHQU1hOztJQUNmLGlCQUFtQjtJQUNuQixnR0FRUztJQUNiLGlCQUFpQjs7OztJQTVCakIsOENBQXlCO0lBR25CLGVBQXdEO0lBQXhELGdGQUF3RCwwQ0FBQSx5QkFBQSx5SEFBQTtJQVNwQyxlQUEwQjtJQUExQixzRUFBMEI7SUFRN0MsZUFBb0Y7SUFBcEYsMEhBQW9GOzs7SUEwQnJGLHNDQUl1QjtJQUNyQixZQUNGO0lBQUEsaUJBQWE7OztJQUhYLGlDQUFlLHlCQUFBO0lBRWYsZUFDRjtJQURFLDBDQUNGOzs7O0lBRUYsa0NBTTZCO0lBQTNCLDJMQUFTLGVBQUEsc0JBQWMsQ0FBQyxDQUFDLENBQUEsSUFBQztJQUN0QiwrQkFBcUM7SUFDM0MsaUJBQVM7OztJQUhQLHdEQUFrQzs7OztJQTdCeEMsMENBSzRCO0lBRjFCLDJPQUErQixpQkFBaUIsS0FBQyw4TkFDbEIsU0FBUyxLQURTO0lBRy9DLGlDQU9vRDtJQUFsRCxzTEFBUyxlQUFBLDhDQUFxQyxDQUFDLENBQUMsQ0FBQSxJQUFDOztJQVBuRCxpQkFPb0Q7SUFDcEQsZ0RBQ2tFO0lBQWhFLG1OQUFrQixlQUFBLG1EQUEwQyxDQUFDLENBQUMsQ0FBQSxJQUFDO0lBQy9ELHdHQU1hOztJQUNmLGlCQUFtQjtJQUNuQixnR0FRUztJQUNiLGlCQUFpQjs7OztJQTVCZiw4Q0FBeUI7SUFHckIsZUFBd0Q7SUFBeEQsZ0ZBQXdELDBDQUFBLHlCQUFBLHVIQUFBO0lBU3BDLGVBQTBCO0lBQTFCLHNFQUEwQjtJQVE3QyxlQUFvRjtJQUFwRiwwSEFBb0Y7Ozs7SUFVM0YsK0NBRzhEO0lBRjVELDhRQUEyQiwwUUFBQSw4TUFFVCxlQUFBLGdEQUF3QyxDQUFBLElBRi9CO0lBRzdCLGlCQUFzQjs7O0lBSHBCLDhDQUEyQix1Q0FBQTs7Ozs7OztBRGhRN0IsTUFBTSxPQUFPLHNCQUFzQjtJQWlFakMsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQWhFMUMsc0JBQWlCLEdBQUcsaUJBQWlCLENBQUM7UUFJL0Isd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBQzlDLFNBQVMsQ0FDVixDQUFDO1FBRUssVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVYLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQ3pDLFNBQVMsQ0FDVixDQUFDO1FBQ0ssWUFBTyxHQUFHLElBQUksZUFBZSxDQUE4QixFQUFFLENBQUMsQ0FBQztRQUMvRCxVQUFLLEdBQUcsU0FBUyxDQUFDO1FBRWxCLDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzlELDJCQUFzQixHQUFHLElBQUksQ0FBQztRQTZCN0IsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVWLGVBQVUsR0FBbUIsT0FBTyxDQUFDO1FBaUI1QywyREFBMkQ7UUFDM0Qsb0RBQW9EO1FBQ3BELDREQUE0RDtRQUM1RCw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQzdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLG1CQUFtQixHQUFHO1lBQ3pCO2dCQUNFLElBQUksRUFBRSxhQUFhO2FBQ3BCO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLE1BQU07YUFDYjtTQUNGLENBQUM7UUFDRixvQ0FBb0M7SUFDdEMsQ0FBQztJQXBERCxJQUFJLElBQUksQ0FBQyxLQUFVO1FBQ2pCLE1BQU0sWUFBWSxHQUFHLDBCQUEwQixDQUFDO1FBQ2hELE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDO1FBQ3ZDLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUNoQyxJQUNFLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3ZCLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3pCLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQ3hCO1lBQ0EsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1NBQ3BDO0lBQ0gsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBTUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUNsRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQ3pCLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLGVBQWUsRUFBRSxDQUFDLHVCQUF1QixDQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FDeEQsQ0FBQztJQUNKLENBQUM7SUFvQkQsUUFBUTtRQUVOLElBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQ3pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQ3pELENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FDTCxFQUFFLENBQUMscUJBQXFCLEtBQUssU0FBUyxJQUFJLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUN0RSxDQUFDO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNsQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUU7b0JBQ2QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDbkI7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzVCO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUMzRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNsQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3JELElBQ0UsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUM1QixLQUFLLENBQUMsQ0FBQyxFQUNSO2dCQUNBLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckU7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFjO1FBQzdCLElBQUksQ0FBQyxlQUFlO1lBQ2xCLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUMzRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtZQUNwRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWMsRUFBRSxHQUFZO1FBQzNDLElBQUksQ0FBQyxlQUFlO1lBQ2xCLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3ZCLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSztvQkFDM0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7b0JBQ3RDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDYixJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNqQztJQUNILENBQUM7SUFFTyxhQUFhLENBQUMsS0FBYTtRQUNqQyxNQUFNLFlBQVksR0FBRyxJQUFJLE1BQU0sQ0FDN0IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLEVBQ3RELElBQUksQ0FDTCxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUN2QyxZQUFZLENBQUMsSUFBSSxDQUNmLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FDM0QsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFhO1FBQ2pDLE1BQU0sWUFBWSxHQUFHLElBQUksTUFBTSxDQUM3QixLQUFLO2FBQ0YsUUFBUSxFQUFFO2FBQ1YsU0FBUyxDQUFDLEtBQUssQ0FBQzthQUNoQixPQUFPLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLEVBQ2xDLElBQUksQ0FDTCxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDckQsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQ3RCLEdBQUc7YUFDQSxRQUFRLEVBQUU7YUFDVixTQUFTLENBQUMsS0FBSyxDQUFDO2FBQ2hCLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FDbkMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBWTtRQUN0QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEQsSUFBSSxnQkFBZ0IsRUFBRTtZQUNwQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUM3QztJQUNILENBQUM7SUFDRCxhQUFhLENBQUMsR0FBWTtRQUN4Qiw2Q0FBNkM7UUFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELElBQUksZ0JBQWdCLEVBQUU7WUFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUNwRDtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFLO1FBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3pELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUNsRCxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sVUFBVSxHQUFzQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDekUsVUFBVSxDQUFDLG1CQUFtQixHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQ3BFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUNsRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBZTtRQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7UUFDM0MsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjLENBQUMsUUFBZ0I7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRTlCLElBQ0UsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUs7WUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDNUM7WUFDQSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ25FO2FBQU07WUFDTCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkI7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWE7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDM0UsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsNERBQTREO0lBQzVELDJDQUEyQztJQUMzQyxtQkFBbUIsQ0FBQyxTQUFTO1FBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDakQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBVSxFQUFFLEdBQVksRUFBRSxhQUFhLEdBQUcsSUFBSTtRQUMzRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEQsSUFBSSxnQkFBZ0IsRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUN6RCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FDbEQsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUU1QixJQUFLLGFBQWEsRUFBRztnQkFDbkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3ZCO1NBQ0Y7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQUMsS0FBSyxFQUFFLEdBQVc7UUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQVU7UUFDOUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFOUMsSUFBSSxLQUFLLEtBQUssYUFBYSxFQUFFO1lBQzNCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyQztRQUNELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3BGLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUNsRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3ZCLE9BQU87U0FDUjtRQUVELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixLQUFLLE1BQU0sRUFBRTtZQUNqRSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FDekQsSUFBSSxDQUFDLElBQUksRUFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FDcEIsQ0FBQyxPQUFPLENBQUM7U0FDWDtRQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsdUJBQXVCLENBQUMsVUFBbUIsSUFBSTtRQUM3QyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3BGLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUNsRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3ZCLE9BQU87U0FDUjtRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsS0FBSyxhQUFhLEVBQUU7WUFDM0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQzNELElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsRUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ3BCLENBQUMsT0FBTyxDQUFDO1NBQ1g7UUFDRCxJQUFJLE9BQU8sRUFBRTtZQUNYLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsR0FBWTtRQUN6QixRQUFRLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFO1lBQ25DLEtBQUssaUJBQWlCLENBQUMsb0JBQW9CLENBQUM7WUFDNUMsS0FBSyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQztZQUN6QyxLQUFLLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDO1lBQzdDLEtBQUssaUJBQWlCLENBQUMsOEJBQThCLENBQUM7WUFDdEQsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQztZQUMxQyxLQUFLLGlCQUFpQixDQUFDLDJCQUEyQjtnQkFDaEQsT0FBTyxZQUFZLENBQUM7WUFDdEIsS0FBSyxpQkFBaUIsQ0FBQyxjQUFjO2dCQUNuQyxPQUFPLFNBQVMsQ0FBQztZQUNuQixLQUFLLGlCQUFpQixDQUFDLGlCQUFpQjtnQkFDdEMsT0FBTyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7b0JBQ3JCLENBQUMsQ0FBQyxlQUFlO29CQUNqQixDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO3dCQUNsQixDQUFDLENBQUMsZUFBZTt3QkFDakIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNoQixLQUFLLGlCQUFpQixDQUFDLE1BQU07Z0JBQzNCLE9BQU8sR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO29CQUNyQixDQUFDLENBQUMsT0FBTztvQkFDVCxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO3dCQUNsQixDQUFDLENBQUMsS0FBSzt3QkFDUCxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2hCO2dCQUNFLE9BQU87U0FDVjtJQUNILENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixTQUFTO2dCQUNQO29CQUNFLGlCQUFpQixDQUFDLFFBQVE7b0JBQzFCLGlCQUFpQixDQUFDLFVBQVU7b0JBQzVCLGlCQUFpQixDQUFDLE1BQU07aUJBQ3pCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDakQ7UUFDRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsT0FBTyxDQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRTtZQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUM1QyxDQUFDO0lBQ0osQ0FBQzs7NEZBaFdVLHNCQUFzQjt5RUFBdEIsc0JBQXNCO1FDbkJuQyx1Q0FNbUM7UUFGakMsK0dBQVMsd0JBQXdCLElBQUMsb0dBQ3hCLDZCQUF5QixJQUREOztRQUdwQyxpQkFBZTtRQUVmLHlDQUNpTSxvQkFBQTtRQU83TCxpSUFBbUIsK0JBQTJCLElBQUM7O1FBQzdDLHFDQUk2RDs7UUFDekQsWUFDSjs7UUFBQSxpQkFBYTtRQUNiLHFDQUk0RDs7UUFDeEQsYUFDSjs7UUFBQSxpQkFBYSxFQUFBLEVBQUE7UUFJbkIsaUdBb0NpQjs7Ozs7UUFHakIsMENBRTRCOzs7UUFDMUIsc0NBTW1EO1FBQWpELGtJQUFtQixnQ0FBNEIsSUFBQzs7O1FBQzlDLHVGQU9hOzs7UUFDakIsaUJBQWEsRUFBQTtRQUdmLCtGQWFpQjs7UUFFakIsZ0dBbUNpQjtRQUVqQixnQ0FBb0Msa0JBQUE7UUFRaEMsb0dBQVMsa0JBQWMsSUFBQzs7UUFDeEIsZ0NBQXNDO1FBQ3hDLGlCQUFTLEVBQUE7UUFHWCxnR0F3Qm1COztRQUVqQiw0RkFjYTs7UUFFZixzQkFBSztRQUVMLGlHQWlDaUI7UUFFakIsaUdBaUNpQjtRQUVqQiwwR0FJc0I7O1FBblJwQixzRkFBNkQscUNBQUE7UUFPN0QsZUFBOEw7UUFBOUwsdU9BQThMO1FBRTVMLGVBQWtDO1FBQWxDLG9EQUFrQywwQ0FBQSw0SUFBQTtRQU85QixlQUE2QjtRQUE3QixpREFBNkIsc0VBQUE7UUFJM0IsZUFDSjtRQURJLCtFQUNKO1FBRUUsZUFBNEI7UUFBNUIsZ0RBQTRCLHNFQUFBO1FBSTFCLGVBQ0o7UUFESSwrRUFDSjtRQU1ILGVBQXNJO1FBQXRJLG1PQUFzSTtRQXNDdkksZUFBb0g7UUFBcEgseUtBQW9ILDhCQUFBO1FBS2xILGVBQTRKO1FBQTVKLHFNQUE0Six1Q0FBQSxxQ0FBQTtRQUtuSSxlQUEyQztRQUEzQyxpR0FBMkM7UUFZdkUsZUFBcUM7UUFBckMsMEVBQXFDO1FBZXJDLGVBQStEO1FBQS9ELHVGQUErRDtRQXlDNUQsZUFBd0Q7UUFBeEQsa0ZBQXdEO1FBUzNELGVBQXNGO1FBQXRGLDZIQUFzRjtRQXdCdEUsZUFBNkY7UUFBN0Ysb0lBQTZGO1FBb0I3RyxlQUEwRjtRQUExRixxSEFBMEY7UUFtQ3hGLGVBQXdGO1FBQXhGLHFIQUF3RjtRQWlDckUsZUFBMEI7UUFBMUIsK0NBQTBCOzt1RkQvUG5DLHNCQUFzQjtjQUxsQyxTQUFTOzJCQUNFLHFCQUFxQjs2REF5QnRCLGNBQWM7a0JBQXRCLEtBQUs7WUFFRyxVQUFVO2tCQUFsQixLQUFLO1lBRUcsR0FBRztrQkFBWCxLQUFLO1lBRUcsYUFBYTtrQkFBckIsS0FBSztZQXNCRyxVQUFVO2tCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGbG9hdExhYmVsVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZSxcbiAgT2djRmlsdGVyc09wdGlvbnNcbn0gZnJvbSAnLi4vLi4vZmlsdGVyL3NoYXJlZC9vZ2MtZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPZ2NGaWx0ZXJXcml0ZXIgfSBmcm9tICcuLi8uLi9maWx0ZXIvc2hhcmVkL29nYy1maWx0ZXInO1xuaW1wb3J0IHsgV2t0U2VydmljZSB9IGZyb20gJy4uLy4uL3drdC9zaGFyZWQvd2t0LnNlcnZpY2UnO1xuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwJztcbmltcG9ydCB7IFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXMgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9kYXRhc291cmNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPZ2NGaWx0ZXJPcGVyYXRvciB9IGZyb20gJy4uLy4uL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlci5lbnVtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWdvLW9nYy1maWx0ZXItZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9vZ2MtZmlsdGVyLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vZ2MtZmlsdGVyLWZvcm0uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBPZ2NGaWx0ZXJGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgb2djRmlsdGVyT3BlcmF0b3IgPSBPZ2NGaWx0ZXJPcGVyYXRvcjtcbiAgZmlsdGVyZWRWYWx1ZXMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgZmlsdGVyZWRGaWVsZHMkOiBPYnNlcnZhYmxlPFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXNbXT47XG4gIHB1YmxpYyBhbGxPZ2NGaWx0ZXJPcGVyYXRvcnM7XG4gIHB1YmxpYyBvZ2NGaWx0ZXJPcGVyYXRvcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtrZXk6IHN0cmluZ106IGFueSB9PihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgcHVibGljIGlnb1NwYXRpYWxTZWxlY3RvcnM7XG4gIHB1YmxpYyB2YWx1ZSA9ICcnO1xuICBwdWJsaWMgaW5wdXRPcGVyYXRvcjtcbiAgcHVibGljIHNlbGVjdGVkRmllbGQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTb3VyY2VGaWVsZHNPcHRpb25zUGFyYW1zPihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgcHVibGljIGZpZWxkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXNbXT4oW10pO1xuICBwdWJsaWMgY29sb3IgPSAncHJpbWFyeSc7XG4gIHB1YmxpYyBkaXNhYmxlZDtcbiAgcHVibGljIGN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBkZWZhdWx0U3RlcE1pbGxpc2Vjb25kID0gNjAwMDtcbiAgcHVibGljIGlucHV0Q2xlYXJhYmxlOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgcmVmcmVzaEZpbHRlcnM6ICgpID0+IHZvaWQ7XG5cbiAgQElucHV0KCkgZGF0YXNvdXJjZTogT2djRmlsdGVyYWJsZURhdGFTb3VyY2U7XG5cbiAgQElucHV0KCkgbWFwOiBJZ29NYXA7XG5cbiAgQElucHV0KCkgY3VycmVudEZpbHRlcjogYW55O1xuXG4gIHNldCBzbnJjKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBjaGVja1NOUkM1MGsgPSAvXlxcZHsyfVthLWxdWzAsMV1bMC05XSQvZ2k7XG4gICAgY29uc3QgY2hlY2tTTlJDMjUwayA9IC9eXFxkezJ9W2EtcF0kL2dpO1xuICAgIGNvbnN0IGNoZWNrU05SQzFtID0gL15cXGR7Mn0kL2dpO1xuICAgIGlmIChcbiAgICAgIGNoZWNrU05SQzFtLnRlc3QodmFsdWUpIHx8XG4gICAgICBjaGVja1NOUkMyNTBrLnRlc3QodmFsdWUpIHx8XG4gICAgICBjaGVja1NOUkM1MGsudGVzdCh2YWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMuX3NucmMgPSB2YWx1ZTtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci5pZ29TTlJDID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNucmMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fc25yYztcbiAgfVxuXG4gIHByaXZhdGUgX3NucmMgPSAnJztcblxuICBASW5wdXQoKSBmbG9hdExhYmVsOiBGbG9hdExhYmVsVHlwZSA9ICduZXZlcic7XG5cbiAgZ2V0IGFjdGl2ZUZpbHRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVycy5maWx0ZXIoXG4gICAgICAoZikgPT4gZi5hY3RpdmUgPT09IHRydWVcbiAgICApO1xuICB9XG5cbiAgZ2V0IGFsbG93ZWRPcGVyYXRvcnMoKSB7XG4gICAgcmV0dXJuIG5ldyBPZ2NGaWx0ZXJXcml0ZXIoKS5jb21wdXRlQWxsb3dlZE9wZXJhdG9ycyhcbiAgICAgIHRoaXMuZmllbGRzJC52YWx1ZSxcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci5wcm9wZXJ0eU5hbWUsXG4gICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmFsbG93ZWRPcGVyYXRvcnNUeXBlXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgd2t0U2VydmljZTogV2t0U2VydmljZSkge1xuICAgIC8vIFRPRE86IEZpbHRlciBwZXJtaXR0ZWQgb3BlcmF0b3IgYmFzZWQgb24gd2ZzY2FwYWJpbGl0aWVzXG4gICAgLy8gTmVlZCB0byB3b3JrIG9uIHJlZ2V4IG9uIFhNTCBjYXBhYmlsaXRpZXMgYmVjYXVzZVxuICAgIC8vIGNvbWFwYXJpc29uIG9wZXJhdG9yJ3MgbmFtZSB2YXJpZXMgYmV0d2VlbiBXRlMgc2VydmVycy4uLlxuICAgIC8vIEV4OiBJc051bGwgdnMgUHJvcGVydHlJc051bGwgdnMgSXNOaWwgLi4uXG4gICAgdGhpcy5hbGxPZ2NGaWx0ZXJPcGVyYXRvcnMgPSBuZXcgT2djRmlsdGVyV3JpdGVyKCkub3BlcmF0b3JzO1xuICAgIHRoaXMub2djRmlsdGVyT3BlcmF0b3JzJC5uZXh0KHRoaXMuYWxsT2djRmlsdGVyT3BlcmF0b3JzKTtcbiAgICB0aGlzLmlnb1NwYXRpYWxTZWxlY3RvcnMgPSBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdmaXhlZEV4dGVudCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdzbnJjJ1xuICAgICAgfVxuICAgIF07XG4gICAgLy8gVE9ETzogc2VsZWN0RmVhdHVyZSAmIGRyYXdGZWF0dXJlXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIGlmICggdGhpcy5kYXRhc291cmNlLm9wdGlvbnMuc291cmNlRmllbGRzKSB7XG4gICAgICBjb25zdCBzRmllbGRzID0gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMuc291cmNlRmllbGRzLmZpbHRlcihcbiAgICAgICAgKHNmKSA9PlxuICAgICAgICAgIHNmLmV4Y2x1ZGVGcm9tT2djRmlsdGVycyA9PT0gdW5kZWZpbmVkIHx8ICFzZi5leGNsdWRlRnJvbU9nY0ZpbHRlcnNcbiAgICAgICk7XG4gICAgICBzRmllbGRzLm1hcCgoc2ZzKSA9PiB7XG4gICAgICAgIGlmIChzZnMudmFsdWVzKSB7XG4gICAgICAgICAgc2ZzLnZhbHVlcy5zb3J0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5maWVsZHMkLm5leHQoc0ZpZWxkcyk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVGaWVsZHNMaXN0KCk7XG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkJC5uZXh0KFxuICAgICAgdGhpcy5maWVsZHMkLnZhbHVlLmZpbmQoKGYpID0+IGYubmFtZSA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSlcbiAgICApO1xuICAgIHRoaXMudXBkYXRlVmFsdWVzTGlzdCgpO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWVsZCQuc3Vic2NyaWJlKChmKSA9PiB7XG4gICAgICB0aGlzLm9nY0ZpbHRlck9wZXJhdG9ycyQubmV4dCh0aGlzLmFsbG93ZWRPcGVyYXRvcnMpO1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmFsbG93ZWRPcGVyYXRvcnMpLmluZGV4T2YoXG4gICAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yXG4gICAgICAgICkgPT09IC0xXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yID0gT2JqZWN0LmtleXModGhpcy5hbGxvd2VkT3BlcmF0b3JzKVswXTtcbiAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yID0gT2JqZWN0LmtleXModGhpcy5hbGxvd2VkT3BlcmF0b3JzKVswXTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlVmFsdWVzTGlzdCgpO1xuICAgIH0pO1xuICAgIHRoaXMuY3VycmVudEZpbHRlcklzU3BhdGlhbCgpO1xuICB9XG5cbiAgdXBkYXRlRmllbGRzTGlzdCh2YWx1ZT86IHN0cmluZykge1xuICAgIHRoaXMuZmlsdGVyZWRGaWVsZHMkID1cbiAgICAgIHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDAgPyBvZih0aGlzLl9maWx0ZXJGaWVsZHModmFsdWUpKSA6IHRoaXMuZmllbGRzJDtcbiAgICBpZiAodGhpcy5maWVsZHMkLnZhbHVlLmZpbmQoKGYpID0+IGYubmFtZSA9PT0gdmFsdWUpKSB7XG4gICAgICB0aGlzLmNoYW5nZUZpZWxkKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVWYWx1ZXNMaXN0KHZhbHVlPzogc3RyaW5nLCBwb3M/OiBudW1iZXIpIHtcbiAgICB0aGlzLmZpbHRlcmVkVmFsdWVzJCA9XG4gICAgICB2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwXG4gICAgICAgID8gb2YodGhpcy5fZmlsdGVyVmFsdWVzKHZhbHVlKSlcbiAgICAgICAgOiB0aGlzLnNlbGVjdGVkRmllbGQkLnZhbHVlXG4gICAgICAgID8gb2YodGhpcy5zZWxlY3RlZEZpZWxkJC52YWx1ZS52YWx1ZXMpXG4gICAgICAgIDogb2YoW10pO1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPj0gMSkge1xuICAgICAgdGhpcy5jaGFuZ2VQcm9wZXJ0eSh2YWx1ZSwgcG9zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9maWx0ZXJGaWVsZHModmFsdWU6IHN0cmluZyk6IFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXNbXSB7XG4gICAgY29uc3Qga2V5d29yZFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgIHZhbHVlLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpLFxuICAgICAgJ2dpJ1xuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRzJC52YWx1ZS5maWx0ZXIoKHZhbCkgPT5cbiAgICAgIGtleXdvcmRSZWdleC50ZXN0KFxuICAgICAgICB2YWwuYWxpYXMubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJylcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmlsdGVyVmFsdWVzKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qga2V5d29yZFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgIHZhbHVlXG4gICAgICAgIC50b1N0cmluZygpXG4gICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXG4gICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyksXG4gICAgICAnZ2knXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZpZWxkJC52YWx1ZS52YWx1ZXMuZmlsdGVyKCh2YWwpID0+XG4gICAgICB2YWwgJiYga2V5d29yZFJlZ2V4LnRlc3QoXG4gICAgICAgIHZhbFxuICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNsZWFyU2VsZWN0ZWRGaWVsZCgpIHtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIucHJvcGVydHlOYW1lID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5jbGVhclByb3BlcnR5KCk7XG4gIH1cblxuICBpc0NsZWFyYWJsZShwb3M/OiBudW1iZXIpIHtcbiAgICBjb25zdCBkZXRlY3RlZFByb3BlcnR5ID0gdGhpcy5kZXRlY3RQcm9wZXJ0eShwb3MpO1xuICAgIGlmIChkZXRlY3RlZFByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsdGVyW2RldGVjdGVkUHJvcGVydHldO1xuICAgIH1cbiAgfVxuICBjbGVhclByb3BlcnR5KHBvcz86IG51bWJlcikge1xuICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlSW5wdXRWYWx1ZXMuY2xvc2VQYW5lbCgpO1xuICAgIGNvbnN0IGRldGVjdGVkUHJvcGVydHkgPSB0aGlzLmRldGVjdFByb3BlcnR5KHBvcyk7XG4gICAgaWYgKGRldGVjdGVkUHJvcGVydHkpIHtcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50RmlsdGVyW2RldGVjdGVkUHJvcGVydHldID0gJycpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUZpbHRlclN0YXRlKGV2ZW50KSB7XG4gICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbmQoXG4gICAgICAoZikgPT4gZi5maWx0ZXJpZCA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLmZpbHRlcmlkXG4gICAgKS5hY3RpdmUgPSBldmVudC5jaGVja2VkO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGRlbGV0ZUZpbHRlcigpIHtcbiAgICBjb25zdCBvZ2NGaWx0ZXJzOiBPZ2NGaWx0ZXJzT3B0aW9ucyA9IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnM7XG4gICAgb2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzID0gb2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbHRlcihcbiAgICAgIChmKSA9PiBmLmZpbHRlcmlkICE9PSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmlsdGVyaWRcbiAgICApO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGNoYW5nZUxvZ2ljYWwobG9naWNhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLnBhcmVudExvZ2ljYWwgPSBsb2dpY2FsO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGNoYW5nZU9wZXJhdG9yKG9wZXJhdG9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwoKTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcklzU3BhdGlhbCQudmFsdWUgJiZcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci53a3RfZ2VvbWV0cnkubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICB0aGlzLmNoYW5nZVNwYXRpYWxTZWxlY3Rvcih0aGlzLmN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWZyZXNoRmlsdGVycygpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUZpZWxkKGZpZWxkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIucHJvcGVydHlOYW1lID0gZmllbGQ7XG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkJC5uZXh0KFxuICAgICAgdGhpcy5maWVsZHMkLnZhbHVlLmZpbmQoKGYpID0+IGYubmFtZSA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZSlcbiAgICApO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIC8vIElzc3VlIHdpdGggbWFwc2VydmVyIDcuMiBhbmQgUG9zdGdpcyBsYXllcnMuIEZpeGVkIGluIDcuNFxuICAvLyBEdWUgdG8gdGhpcyBpc3N1ZSwgdGhlIGNoZWNrYm94IGlzIGhpZGUuXG4gIGNoYW5nZUNhc2VTZW5zaXRpdmUobWF0Y2hDYXNlKSB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLm1hdGNoQ2FzZSA9IG1hdGNoQ2FzZS5jaGVja2VkO1xuICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgfVxuXG4gIGNoYW5nZVByb3BlcnR5KHZhbHVlOiBhbnksIHBvcz86IG51bWJlciwgcmVmcmVzaEZpbHRlciA9IHRydWUpIHtcbiAgICBjb25zdCBkZXRlY3RlZFByb3BlcnR5ID0gdGhpcy5kZXRlY3RQcm9wZXJ0eShwb3MpO1xuICAgIGlmIChkZXRlY3RlZFByb3BlcnR5KSB7XG4gICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmludGVyZmFjZU9nY0ZpbHRlcnMuZmluZChcbiAgICAgICAgKGYpID0+IGYuZmlsdGVyaWQgPT09IHRoaXMuY3VycmVudEZpbHRlci5maWx0ZXJpZFxuICAgICAgKVtkZXRlY3RlZFByb3BlcnR5XSA9IHZhbHVlO1xuXG4gICAgICBpZiAoIHJlZnJlc2hGaWx0ZXIgKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaEZpbHRlcnMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFuZ2VOdW1lcmljUHJvcGVydHkodmFsdWUsIHBvczogbnVtYmVyKSB7XG4gICAgdGhpcy5jaGFuZ2VQcm9wZXJ0eShwYXJzZUZsb2F0KHZhbHVlKSwgcG9zKTtcbiAgfVxuXG4gIGNoYW5nZVNwYXRpYWxTZWxlY3Rvcih2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLmlnb1NwYXRpYWxTZWxlY3RvciA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlID09PSAnZml4ZWRFeHRlbnQnKSB7XG4gICAgICB0aGlzLmNoYW5nZU1hcEV4dGVudEdlb21ldHJ5KGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50RmlsdGVySXNTcGF0aWFsKCk7XG4gICAgdGhpcy5yZWZyZXNoRmlsdGVycygpO1xuICB9XG5cbiAgY2hhbmdlU05SQyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5zbnJjID0gdmFsdWU7XG4gICAgdGhpcy5jaGFuZ2VTTlJDR2VvbWV0cnkoKTtcbiAgfVxuXG4gIGNoYW5nZVNOUkNHZW9tZXRyeSgpIHtcbiAgICBjb25zdCBpbnRlcmZhY2VPZ2NGaWx0ZXIgPSB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmludGVyZmFjZU9nY0ZpbHRlcnMuZmluZChcbiAgICAgIChmKSA9PiBmLmZpbHRlcmlkID09PSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmlsdGVyaWRcbiAgICApO1xuICAgIGlmICghaW50ZXJmYWNlT2djRmlsdGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc25yYyAmJiB0aGlzLmN1cnJlbnRGaWx0ZXIuaWdvU3BhdGlhbFNlbGVjdG9yID09PSAnc25yYycpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci53a3RfZ2VvbWV0cnkgPSB0aGlzLndrdFNlcnZpY2Uuc25yY1RvV2t0KFxuICAgICAgICB0aGlzLnNucmMsXG4gICAgICAgIHRoaXMubWFwLnByb2plY3Rpb25cbiAgICAgICkud2t0UG9seTtcbiAgICB9XG4gICAgdGhpcy5yZWZyZXNoRmlsdGVycygpO1xuICB9XG5cbiAgY2hhbmdlTWFwRXh0ZW50R2VvbWV0cnkocmVmcmVzaDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBpbnRlcmZhY2VPZ2NGaWx0ZXIgPSB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmludGVyZmFjZU9nY0ZpbHRlcnMuZmluZChcbiAgICAgIChmKSA9PiBmLmZpbHRlcmlkID09PSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmlsdGVyaWRcbiAgICApO1xuICAgIGlmICghaW50ZXJmYWNlT2djRmlsdGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3VycmVudEZpbHRlci5pZ29TcGF0aWFsU2VsZWN0b3IgPT09ICdmaXhlZEV4dGVudCcpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci53a3RfZ2VvbWV0cnkgPSB0aGlzLndrdFNlcnZpY2UuZXh0ZW50VG9Xa3QoXG4gICAgICAgIHRoaXMubWFwLnByb2plY3Rpb24sXG4gICAgICAgIHRoaXMubWFwLnZpZXdDb250cm9sbGVyLmdldEV4dGVudCgpLFxuICAgICAgICB0aGlzLm1hcC5wcm9qZWN0aW9uXG4gICAgICApLndrdFBvbHk7XG4gICAgfVxuICAgIGlmIChyZWZyZXNoKSB7XG4gICAgICB0aGlzLnJlZnJlc2hGaWx0ZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgZGV0ZWN0UHJvcGVydHkocG9zPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvcikge1xuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTm90RXF1YWxUbzpcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0VxdWFsVG86XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNHcmVhdGVyVGhhbjpcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0dyZWF0ZXJUaGFuT3JFcXVhbFRvOlxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGVzc1RoYW46XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNMZXNzVGhhbk9yRXF1YWxUbzpcbiAgICAgICAgcmV0dXJuICdleHByZXNzaW9uJztcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xpa2U6XG4gICAgICAgIHJldHVybiAncGF0dGVybic7XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNCZXR3ZWVuOlxuICAgICAgICByZXR1cm4gcG9zICYmIHBvcyA9PT0gMVxuICAgICAgICAgID8gJ2xvd2VyQm91bmRhcnknXG4gICAgICAgICAgOiBwb3MgJiYgcG9zID09PSAyXG4gICAgICAgICAgPyAndXBwZXJCb3VuZGFyeSdcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuRHVyaW5nOlxuICAgICAgICByZXR1cm4gcG9zICYmIHBvcyA9PT0gMVxuICAgICAgICAgID8gJ2JlZ2luJ1xuICAgICAgICAgIDogcG9zICYmIHBvcyA9PT0gMlxuICAgICAgICAgID8gJ2VuZCdcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwoKSB7XG4gICAgbGV0IGlzU3BhdGlhbCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIpIHtcbiAgICAgIGlzU3BhdGlhbCA9XG4gICAgICAgIFtcbiAgICAgICAgICBPZ2NGaWx0ZXJPcGVyYXRvci5Db250YWlucyxcbiAgICAgICAgICBPZ2NGaWx0ZXJPcGVyYXRvci5JbnRlcnNlY3RzLFxuICAgICAgICAgIE9nY0ZpbHRlck9wZXJhdG9yLldpdGhpblxuICAgICAgICBdLmluZGV4T2YodGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yKSAhPT0gLTE7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudEZpbHRlcklzU3BhdGlhbCQubmV4dChpc1NwYXRpYWwpO1xuICB9XG5cbiAgaXNUZW1wb3JhbE9wZXJhdG9yKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IudG9Mb3dlckNhc2UoKSA9PT1cbiAgICAgIHRoaXMub2djRmlsdGVyT3BlcmF0b3IuRHVyaW5nLnRvTG93ZXJDYXNlKClcbiAgICApO1xuICB9XG59XG4iLCI8bWF0LWNoZWNrYm94XG4gIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5maWx0ZXIudG9nZ2xlRmlsdGVyU3RhdGUnIHwgdHJhbnNsYXRlXCJcbiAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gIChjaGFuZ2UpPVwidG9nZ2xlRmlsdGVyU3RhdGUoJGV2ZW50KVwiXG4gIFtjaGVja2VkXT1cImN1cnJlbnRGaWx0ZXIuYWN0aXZlXCI+XG48L21hdC1jaGVja2JveD5cblxuPG1hdC1mb3JtLWZpZWxkXG4gIFtuZ0NsYXNzXT1cInsnbG9naWNhbCc6IGFjdGl2ZUZpbHRlcnMuaW5kZXhPZihjdXJyZW50RmlsdGVyKSAhPT0gMCAmJiBjdXJyZW50RmlsdGVyLmFjdGl2ZT09PXRydWUsICdsb2dpY2FsSGlkZGVuJzogYWN0aXZlRmlsdGVycy5pbmRleE9mKGN1cnJlbnRGaWx0ZXIpID09PSAwIHx8IGN1cnJlbnRGaWx0ZXIuYWN0aXZlIT09dHJ1ZX1cIj5cbiAgPG1hdC1zZWxlY3RcbiAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICBbdmFsdWVdPVwiY3VycmVudEZpbHRlci5wYXJlbnRMb2dpY2FsXCJcbiAgICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxuICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgIFttYXRUb29sdGlwXT1cImN1cnJlbnRGaWx0ZXIucGFyZW50TG9naWNhbCA/ICgoJ2lnby5nZW8ub3BlcmF0b3JzLnRvb2x0aXAuJysgY3VycmVudEZpbHRlci5wYXJlbnRMb2dpY2FsKSB8IHRyYW5zbGF0ZSkgOiAnJ1wiXG4gICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VMb2dpY2FsKCRldmVudC52YWx1ZSlcIj5cbiAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgIFt2YWx1ZV09b2djRmlsdGVyT3BlcmF0b3IuQW5kXG4gICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJhYm92ZVwiXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5vcGVyYXRvcnMudG9vbHRpcC5BbmQnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAge3snaWdvLmdlby5vcGVyYXRvcnMuQW5kJyB8IHRyYW5zbGF0ZX19XG4gICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8bWF0LW9wdGlvblxuICAgICAgICBbdmFsdWVdPW9nY0ZpbHRlck9wZXJhdG9yLk9yXG4gICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJhYm92ZVwiXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5vcGVyYXRvcnMudG9vbHRpcC5PcicgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICB7eydpZ28uZ2VvLm9wZXJhdG9ycy5PcicgfCB0cmFuc2xhdGV9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICA8L21hdC1zZWxlY3Q+XG48L21hdC1mb3JtLWZpZWxkPlxuXG48bWF0LWZvcm0tZmllbGRcbiAgY2xhc3M9XCJmaWVsZFwiXG4gICpuZ0lmPVwiKGN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwkIHwgYXN5bmMpPT09ZmFsc2UgJiYgKGZpZWxkcyQgfCBhc3luYykgJiYgKGZpZWxkcyR8IGFzeW5jKS5sZW5ndGggPiAwICYmIChmaWVsZHMkfCBhc3luYylbMF0ubmFtZSAhPT0gJydcIlxuICAobW91c2VlbnRlcik9XCJpbnB1dENsZWFyYWJsZSA9ICdzZWxlY3RGaWVsZCdcIlxuICAobW91c2VsZWF2ZSk9XCJpbnB1dENsZWFyYWJsZSA9IHVuZGVmaW5lZFwiXG4gIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIj5cbiAgPGlucHV0XG4gIG1hdElucHV0XG4gIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby5zb3VyY2VGaWVsZHMuc2VsZWN0RmllbGQnIHwgdHJhbnNsYXRlXCJcbiAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b0NvbXBsZXRlRmllbGRcIlxuICBbdmFsdWVdPVwiKHNlbGVjdGVkRmllbGQkIHwgYXN5bmMpID8gKHNlbGVjdGVkRmllbGQkIHwgYXN5bmMpLmFsaWFzIDogJydcIlxuICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxuICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgW21hdFRvb2x0aXBdPVwiKHNlbGVjdGVkRmllbGQkIHwgYXN5bmMpID8gKHNlbGVjdGVkRmllbGQkIHwgYXN5bmMpLmFsaWFzIDogKCdpZ28uZ2VvLnNvdXJjZUZpZWxkcy5zZWxlY3RGaWVsZCcgfCB0cmFuc2xhdGUpXCJcbiAgKGlucHV0KT1cInVwZGF0ZUZpZWxkc0xpc3QoJGV2ZW50LnRhcmdldC52YWx1ZSlcIj5cbiAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG9Db21wbGV0ZUZpZWxkPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgKG9wdGlvblNlbGVjdGVkKT0nY2hhbmdlRmllbGQoJGV2ZW50Lm9wdGlvbi5pZCknPlxuICAgIDxtYXQtb3B0aW9uXG4gICAgICAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmlsdGVyZWRGaWVsZHMkIHwgYXN5bmNcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbdmFsdWVdPVwiZmllbGQuYWxpYXNcIlxuICAgICAgW2lkXT1cImZpZWxkLm5hbWVcIlxuICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuYWxpYXNcIj5cbiAgICAgIHt7ZmllbGQuYWxpYXN9fVxuICAgIDwvbWF0LW9wdGlvbj5cbiAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICA8YnV0dG9uIG1hdC1idXR0b25cbiAgICAqbmdJZj1cImN1cnJlbnRGaWx0ZXIucHJvcGVydHlOYW1lICYmIGlucHV0Q2xlYXJhYmxlID09PSAnc2VsZWN0RmllbGQnICYmIGN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICBtYXRTdWZmaXhcbiAgICBtYXQtaWNvbi1idXR0b25cbiAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxuICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgIChjbGljayk9XCJjbGVhclNlbGVjdGVkRmllbGQoKVwiPlxuICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImNsb3NlXCI+PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG48L21hdC1mb3JtLWZpZWxkPlxuXG5cbjxtYXQtZm9ybS1maWVsZFxuICBbbmdDbGFzc109XCJ7J29wZXJhdG9yJzogKGN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwkIHwgYXN5bmMpPT09ZmFsc2UgLCAnZHVhbElucHV0JzogKGN1cnJlbnRGaWx0ZXJJc1NwYXRpYWwkIHwgYXN5bmMpfVwiXG4gIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIj5cbiAgPG1hdC1zZWxlY3RcbiAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgIFttYXRUb29sdGlwXT1cImN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgPyAoKCdpZ28uZ2VvLm9wZXJhdG9ycy50b29sdGlwLicrIGN1cnJlbnRGaWx0ZXIub3BlcmF0b3IpIHwgdHJhbnNsYXRlKSA6ICgnaWdvLmdlby5maWx0ZXIuc2VsZWN0T3BlcmF0b3InIHwgdHJhbnNsYXRlKVwiXG4gICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgW3ZhbHVlXT1cImN1cnJlbnRGaWx0ZXIub3BlcmF0b3JcIlxuICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlT3BlcmF0b3IoJGV2ZW50LnZhbHVlKVwiPlxuICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IG9wZXJhdG9yIG9mIChvZ2NGaWx0ZXJPcGVyYXRvcnMkIHwgYXN5bmMpIHwga2V5dmFsdWVcIlxuICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgW3ZhbHVlXT1cIm9wZXJhdG9yLmtleVwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cIignaWdvLmdlby5vcGVyYXRvcnMudG9vbHRpcC4nKyBvcGVyYXRvci5rZXkpIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAge3soJ2lnby5nZW8ub3BlcmF0b3JzLicrIG9wZXJhdG9yLmtleSkgfCB0cmFuc2xhdGV9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICA8L21hdC1zZWxlY3Q+XG48L21hdC1mb3JtLWZpZWxkPlxuXG48bWF0LWZvcm0tZmllbGRcbmNsYXNzPVwic3BhdGlhbFNlbGVjdG9yXCJcbipuZ0lmPVwiY3VycmVudEZpbHRlcklzU3BhdGlhbCQgfCBhc3luY1wiPlxuICA8bWF0LXNlbGVjdFxuICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgIFt2YWx1ZV09XCJjdXJyZW50RmlsdGVyLmlnb1NwYXRpYWxTZWxlY3RvclwiXG4gICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VTcGF0aWFsU2VsZWN0b3IoJGV2ZW50LnZhbHVlKVwiPlxuICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IGlnb1NwYXRpYWxTZWxlY3RvciBvZiBpZ29TcGF0aWFsU2VsZWN0b3JzXCJcbiAgICAgICAgW3ZhbHVlXT1cImlnb1NwYXRpYWxTZWxlY3Rvci50eXBlXCI+XG4gICAgICAgICAge3soJ2lnby5nZW8uc3BhdGlhbFNlbGVjdG9yLicrIGlnb1NwYXRpYWxTZWxlY3Rvci50eXBlKSB8IHRyYW5zbGF0ZX19XG4gICAgICA8L21hdC1vcHRpb24+XG4gIDwvbWF0LXNlbGVjdD5cbjwvbWF0LWZvcm0tZmllbGQ+XG5cbjxtYXQtZm9ybS1maWVsZFxuY2xhc3M9XCJzaW5nbGVJbnB1dFwiXG4qbmdJZj1cIlsnZXhwcmVzc2lvbicsJ3BhdHRlcm4nXS5pbmRleE9mKGRldGVjdFByb3BlcnR5KCkpICE9PSAtMVwiXG4obW91c2VlbnRlcik9XCJpbnB1dENsZWFyYWJsZSA9ICdzZWxlY3RQcm9wZXJ0eSdcIlxuKG1vdXNlbGVhdmUpPVwiaW5wdXRDbGVhcmFibGUgPSB1bmRlZmluZWRcIlxuW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiPlxuICA8aW5wdXRcbiAgICBtYXRJbnB1dFxuICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby5maWx0ZXIucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9Db21wbGV0ZVZhbHVlc1wiXG4gICAgW3ZhbHVlXT1cImRldGVjdFByb3BlcnR5KCkgPT09ICdleHByZXNzaW9uJyA/IGN1cnJlbnRGaWx0ZXIuZXhwcmVzc2lvbiA6IGN1cnJlbnRGaWx0ZXIucGF0dGVyblwiXG4gICAgdG9vbHRpcC1wb3NpdGlvbj1cImFib3ZlXCJcbiAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICBbbWF0VG9vbHRpcF09XCJkZXRlY3RQcm9wZXJ0eSgpID09PSAnZXhwcmVzc2lvbicgPyBjdXJyZW50RmlsdGVyLmV4cHJlc3Npb24gfHwgJycgOiBjdXJyZW50RmlsdGVyLnBhdHRlcm4gfHwgJydcIlxuICAgIChpbnB1dCk9XCJ1cGRhdGVWYWx1ZXNMaXN0KCRldmVudC50YXJnZXQudmFsdWUpXCI+XG4gIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvQ29tcGxldGVWYWx1ZXM9XCJtYXRBdXRvY29tcGxldGVcIlxuICAgIChvcHRpb25TZWxlY3RlZCk9XCJjaGFuZ2VQcm9wZXJ0eSgkZXZlbnQub3B0aW9uLnZhbHVlKVwiPlxuICAgIDxtYXQtb3B0aW9uXG4gICAgICAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZmlsdGVyZWRWYWx1ZXMkIHwgYXN5bmNcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgW21hdFRvb2x0aXBdPVwidmFsdWVcIj5cbiAgICAgIHt7dmFsdWV9fVxuICAgIDwvbWF0LW9wdGlvbj5cbiAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICA8YnV0dG9uIG1hdC1idXR0b25cbiAgICAqbmdJZj1cImlzQ2xlYXJhYmxlKCkgJiYgaW5wdXRDbGVhcmFibGUgPT09ICdzZWxlY3RQcm9wZXJ0eScgJiYgY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgIG1hdFN1ZmZpeFxuICAgIG1hdC1pY29uLWJ1dHRvblxuICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXG4gICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgKGNsaWNrKT1cImNsZWFyUHJvcGVydHkoKVwiPlxuICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImNsb3NlXCI+PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG48L21hdC1mb3JtLWZpZWxkPlxuXG48ZGl2IGNsYXNzPVwiaWdvLWxheWVyLWJ1dHRvbi1ncm91cFwiPlxuICA8YnV0dG9uXG4gICAgbWF0LWljb24tYnV0dG9uXG4gICAgY29sbGFwc2libGVCdXR0b25cbiAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci5yZW1vdmVGaWx0ZXInIHwgdHJhbnNsYXRlXCJcbiAgICBjb2xvcj1cIndhcm5cIlxuICAgIChjbGljayk9XCJkZWxldGVGaWx0ZXIoKVwiPlxuICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZGVsZXRlXCI+PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG48L2Rpdj5cblxuPG1hdC1mb3JtLWZpZWxkXG5jbGFzcz1cInNucmNcIlxuKm5nSWY9XCIoY3VycmVudEZpbHRlcklzU3BhdGlhbCQgfCBhc3luYykgJiYgY3VycmVudEZpbHRlci5pZ29TcGF0aWFsU2VsZWN0b3IgPT09ICdzbnJjJ1wiXG4obW91c2VlbnRlcik9XCJpbnB1dENsZWFyYWJsZSA9ICdzZWxlY3RTTlJDJ1wiXG4obW91c2VsZWF2ZSk9XCJpbnB1dENsZWFyYWJsZSA9IHVuZGVmaW5lZFwiXG5bZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCI+XG4gIDxpbnB1dFxuICAgIG1hdElucHV0XG4gICAgW3BsYWNlaG9sZGVyXT1cIidpZ28uZ2VvLmZpbHRlci5wbGFjZWhvbGRlclNucmMnIHwgdHJhbnNsYXRlXCJcbiAgICBbdmFsdWVdPVwiY3VycmVudEZpbHRlci5pZ29TTlJDXCJcbiAgICB0b29sdGlwLXBvc2l0aW9uPVwiYWJvdmVcIlxuICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgIFttYXRUb29sdGlwXT1cImN1cnJlbnRGaWx0ZXIuaWdvU05SQyA/IGN1cnJlbnRGaWx0ZXIuaWdvU05SQyA6ICcnXCJcbiAgICAoaW5wdXQpPVwiY2hhbmdlU05SQygkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICA8YnV0dG9uXG4gICAgbWF0LWJ1dHRvblxuICAgICpuZ0lmPVwiY3VycmVudEZpbHRlci5pZ29TTlJDXCJcbiAgICBtYXRTdWZmaXhcbiAgICBtYXQtaWNvbi1idXR0b25cbiAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxuICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmUgJiYgaW5wdXRDbGVhcmFibGUgPT09ICdzZWxlY3RTTlJDJyAmJiBjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgKGNsaWNrKT1cImN1cnJlbnRGaWx0ZXIuaWdvU05SQz0nJ1wiPlxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJjbG9zZVwiPjwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIoY3VycmVudEZpbHRlcklzU3BhdGlhbCQgfCBhc3luYykgJiYgY3VycmVudEZpbHRlci5pZ29TcGF0aWFsU2VsZWN0b3IgPT09ICdmaXhlZEV4dGVudCdcIj5cbiAgICA8YnV0dG9uXG4gICAgbWF0LWJ1dHRvblxuICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICpuZ0lmPVwiY3VycmVudEZpbHRlci5pZ29TcGF0aWFsU2VsZWN0b3IgPT09ICdmaXhlZEV4dGVudCdcIlxuICAgIG1hdFN1ZmZpeFxuICAgIG1hdC1pY29uLWJ1dHRvblxuICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgIChjbGljayk9XCJjaGFuZ2VNYXBFeHRlbnRHZW9tZXRyeSgpXCJcbiAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLnNwYXRpYWxTZWxlY3Rvci5idG5TZXRFeHRlbnQnIHwgdHJhbnNsYXRlXCI+XG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImFycm93LWV4cGFuZC1hbGxcIj48L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbjwvbmctY29udGFpbmVyPlxuXG48YnIvPlxuXG48bWF0LWZvcm0tZmllbGRcbmNsYXNzPVwiZHVhbElucHV0XCJcbipuZ0lmPVwiIWlzVGVtcG9yYWxPcGVyYXRvcigpICYmIFsnbG93ZXJCb3VuZGFyeScsJ2JlZ2luJ10uaW5kZXhPZihkZXRlY3RQcm9wZXJ0eSgxKSkgIT09IC0xXCJcbihtb3VzZWVudGVyKT1cImlucHV0Q2xlYXJhYmxlID0gJ3NlbGVjdFByb3BlcnR5MSdcIlxuKG1vdXNlbGVhdmUpPVwiaW5wdXRDbGVhcmFibGUgPSB1bmRlZmluZWRcIlxuW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiPlxuICAgIDxpbnB1dFxuICAgICAgbWF0SW5wdXRcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby5maWx0ZXIucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvRHVhbFZhbHVlT3BlcmF0b3IxXCJcbiAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgW3ZhbHVlXT1cImRldGVjdFByb3BlcnR5KDEpID09PSAnbG93ZXJCb3VuZGFyeScgPyBjdXJyZW50RmlsdGVyLmxvd2VyQm91bmRhcnkgOiBjdXJyZW50RmlsdGVyLmJlZ2luXCJcbiAgICAgIChpbnB1dCk9XCJ1cGRhdGVWYWx1ZXNMaXN0KCRldmVudC50YXJnZXQudmFsdWUsMSlcIj5cbiAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0b0R1YWxWYWx1ZU9wZXJhdG9yMT1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiY2hhbmdlTnVtZXJpY1Byb3BlcnR5KCRldmVudC5vcHRpb24udmFsdWUsMSlcIj5cbiAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWx0ZXJlZFZhbHVlcyQgfCBhc3luY1wiXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCJ2YWx1ZVwiPlxuICAgICAgICB7e3ZhbHVlfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAqbmdJZj1cImlzQ2xlYXJhYmxlKDEpICYmIGlucHV0Q2xlYXJhYmxlID09PSAnc2VsZWN0UHJvcGVydHkxJyAmJiBjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICAgIChjbGljayk9XCJjbGVhclByb3BlcnR5KDEpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJjbG9zZVwiPjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG48L21hdC1mb3JtLWZpZWxkPlxuXG48bWF0LWZvcm0tZmllbGRcbiAgY2xhc3M9XCJkdWFsSW5wdXRcIlxuICAqbmdJZj1cIiFpc1RlbXBvcmFsT3BlcmF0b3IoKSAmJiBbJ3VwcGVyQm91bmRhcnknLCdlbmQnXS5pbmRleE9mKGRldGVjdFByb3BlcnR5KDIpKSAhPT0gLTFcIlxuICAobW91c2VlbnRlcik9XCJpbnB1dENsZWFyYWJsZSA9ICdzZWxlY3RQcm9wZXJ0eTInXCJcbiAgKG1vdXNlbGVhdmUpPVwiaW5wdXRDbGVhcmFibGUgPSB1bmRlZmluZWRcIlxuICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCI+XG4gICAgPGlucHV0XG4gICAgICBtYXRJbnB1dFxuICAgICAgW3BsYWNlaG9sZGVyXT1cIidpZ28uZ2VvLmZpbHRlci5wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9EdWFsVmFsdWVPcGVyYXRvcjJcIlxuICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICBbdmFsdWVdPVwiZGV0ZWN0UHJvcGVydHkoMikgPT09ICd1cHBlckJvdW5kYXJ5JyA/IGN1cnJlbnRGaWx0ZXIudXBwZXJCb3VuZGFyeSA6IGN1cnJlbnRGaWx0ZXIuZW5kXCJcbiAgICAgIChpbnB1dCk9XCJ1cGRhdGVWYWx1ZXNMaXN0KCRldmVudC50YXJnZXQudmFsdWUsMilcIj5cbiAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0b0R1YWxWYWx1ZU9wZXJhdG9yMj1cIm1hdEF1dG9jb21wbGV0ZVwiXG4gICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiY2hhbmdlTnVtZXJpY1Byb3BlcnR5KCRldmVudC5vcHRpb24udmFsdWUsMilcIj5cbiAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWx0ZXJlZFZhbHVlcyQgfCBhc3luY1wiXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCJ2YWx1ZVwiPlxuICAgICAgICB7e3ZhbHVlfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAqbmdJZj1cImlzQ2xlYXJhYmxlKDIpICYmIGlucHV0Q2xlYXJhYmxlID09PSAnc2VsZWN0UHJvcGVydHkyJyAmJiBjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIlxuICAgICAgKGNsaWNrKT1cImNsZWFyUHJvcGVydHkoMilcIj5cbiAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImNsb3NlXCI+PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbjwvbWF0LWZvcm0tZmllbGQ+XG5cbjxpZ28tb2djLWZpbHRlci10aW1lICpuZ0lmPVwiaXNUZW1wb3JhbE9wZXJhdG9yKClcIlxuICBbKGRhdGFzb3VyY2UpXT1cImRhdGFzb3VyY2VcIlxuICBbKGN1cnJlbnRGaWx0ZXIpXT1cImN1cnJlbnRGaWx0ZXJcIlxuICAoY2hhbmdlUHJvcGVydHkpPVwiY2hhbmdlUHJvcGVydHkoJGV2ZW50LnZhbHVlLCAkZXZlbnQucG9zKVwiPlxuPC9pZ28tb2djLWZpbHRlci10aW1lPlxuXG48IS0tXG5UT0RPIEMnRVNUIFBFUlRJTkVOVCBqZSBjcm9pc1xuPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZmllbGRcIiAqbmdJZj1cIiEoY3VycmVudEZpbHRlcklzU3BhdGlhbCQgfCBhc3luYykgJiYgKGZpZWxkcyR8IGFzeW5jKSAmJiAoZmllbGRzJHwgYXN5bmMpLmxlbmd0aCA9PT0gMSAmJiAgKGZpZWxkcyR8IGFzeW5jKVswXS5uYW1lID09PSAnJ1wiPlxuPGlucHV0IFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlci5hY3RpdmVcIiBtYXRJbnB1dCAjZmllbGRQZXJVc2VyIChrZXl1cCk9XCJjaGFuZ2VQcm9wZXJ0eShjdXJyZW50RmlsdGVyLCdwcm9wZXJ0eU5hbWUnLGZpZWxkUGVyVXNlci52YWx1ZSlcIlxuICAoYmx1cik9XCJjaGFuZ2VQcm9wZXJ0eShjdXJyZW50RmlsdGVyLCdwcm9wZXJ0eU5hbWUnLGZpZWxkUGVyVXNlci52YWx1ZSlcIiBbKG5nTW9kZWwpXT1cImN1cnJlbnRGaWx0ZXIucHJvcGVydHlOYW1lXCI+XG48YnV0dG9uIG1hdC1idXR0b24gKm5nSWY9XCJjdXJyZW50RmlsdGVyLnByb3BlcnR5TmFtZVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkNsZWFyXCIgKGNsaWNrKT1cImN1cnJlbnRGaWx0ZXIucHJvcGVydHlOYW1lPScnXCI+XG4gIDxtYXQtaWNvbiBzdmdJY29uPVwiY2xvc2VcIj48L21hdC1pY29uPlxuPC9idXR0b24+XG48L21hdC1mb3JtLWZpZWxkPlxuXG5cblxuPG1hdC1jaGVja2JveCBsYWJlbFBvc2l0aW9uPSdiZWZvcmUnIChjaGFuZ2UpPVwiY2hhbmdlQ2FzZVNlbnNpdGl2ZSgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJjdXJyZW50RmlsdGVyLm1hdGNoQ2FzZVwiPlxuICB7eygnaWdvLmdlby5vcGVyYXRvcnMuY2FzZVNlbnNpdGl2ZScpIHwgdHJhbnNsYXRlfX1cbjwvbWF0LWNoZWNrYm94PlxuXG48L21hdC1saXN0LWl0ZW0+IC0tPlxuIl19
@@ -1,2 +1,2 @@
1
1
  export * from './ogc-filter-selection.component';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9maWx0ZXIvb2djLWZpbHRlci1zZWxlY3Rpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQ0FBa0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vb2djLWZpbHRlci1zZWxlY3Rpb24uY29tcG9uZW50JztcclxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9maWx0ZXIvb2djLWZpbHRlci1zZWxlY3Rpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQ0FBa0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vb2djLWZpbHRlci1zZWxlY3Rpb24uY29tcG9uZW50JztcbiJdfQ==